From 9c807a96fc4a6289c292a5b3536182922a759ea1 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Wed, 14 Aug 2024 16:30:57 -0300 Subject: [PATCH 001/228] chore: push an extra period to test dns update --- src/pageComponents/home/Examples/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pageComponents/home/Examples/index.tsx b/src/pageComponents/home/Examples/index.tsx index c45ff98f..61dd2cc0 100644 --- a/src/pageComponents/home/Examples/index.tsx +++ b/src/pageComponents/home/Examples/index.tsx @@ -156,7 +156,7 @@ const Examples: FC> = ({ ...restProps }) => { href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_SignButton.SignButton.html', icon: , text: 'Sign a message and get the signature', - title: 'Sign button', + title: 'Sign button.', }, ] From ed7708477682ebc17d48e592acfda811f1366c68 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Thu, 15 Aug 2024 15:36:56 -0300 Subject: [PATCH 002/228] feat: add landing page footer --- .../Footer/Socials/assets/Github.tsx | 28 +++++++++++ .../Footer/Socials/assets/LinkedIn.tsx | 30 ++++++++++++ .../Footer/Socials/assets/Telegram.tsx | 28 +++++++++++ .../Footer/Socials/assets/Twitter.tsx | 30 ++++++++++++ .../sharedComponents/Footer/Socials/index.tsx | 49 +++++++++++++++++++ .../{Footer.tsx => Footer/index.tsx} | 21 +++++++- 6 files changed, 185 insertions(+), 1 deletion(-) create mode 100644 src/components/sharedComponents/Footer/Socials/assets/Github.tsx create mode 100644 src/components/sharedComponents/Footer/Socials/assets/LinkedIn.tsx create mode 100644 src/components/sharedComponents/Footer/Socials/assets/Telegram.tsx create mode 100644 src/components/sharedComponents/Footer/Socials/assets/Twitter.tsx create mode 100644 src/components/sharedComponents/Footer/Socials/index.tsx rename src/components/sharedComponents/{Footer.tsx => Footer/index.tsx} (61%) diff --git a/src/components/sharedComponents/Footer/Socials/assets/Github.tsx b/src/components/sharedComponents/Footer/Socials/assets/Github.tsx new file mode 100644 index 00000000..b1bfb4a6 --- /dev/null +++ b/src/components/sharedComponents/Footer/Socials/assets/Github.tsx @@ -0,0 +1,28 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +/** + * Github logo component + */ +const Github: FC> = ({ ...restProps }) => ( + + + +) + +export default Github diff --git a/src/components/sharedComponents/Footer/Socials/assets/LinkedIn.tsx b/src/components/sharedComponents/Footer/Socials/assets/LinkedIn.tsx new file mode 100644 index 00000000..39c7632a --- /dev/null +++ b/src/components/sharedComponents/Footer/Socials/assets/LinkedIn.tsx @@ -0,0 +1,30 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +/** + * LinkedIn logo component + */ +const LinkedIn: FC> = ({ ...restProps }) => ( + + + +) + +export default LinkedIn diff --git a/src/components/sharedComponents/Footer/Socials/assets/Telegram.tsx b/src/components/sharedComponents/Footer/Socials/assets/Telegram.tsx new file mode 100644 index 00000000..d1d232d0 --- /dev/null +++ b/src/components/sharedComponents/Footer/Socials/assets/Telegram.tsx @@ -0,0 +1,28 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +/** + * Telegram logo component + */ +const Telegram: FC> = ({ ...restProps }) => ( + + + +) + +export default Telegram diff --git a/src/components/sharedComponents/Footer/Socials/assets/Twitter.tsx b/src/components/sharedComponents/Footer/Socials/assets/Twitter.tsx new file mode 100644 index 00000000..1395108b --- /dev/null +++ b/src/components/sharedComponents/Footer/Socials/assets/Twitter.tsx @@ -0,0 +1,30 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +/** + * Twitter logo component + */ +const Twitter: FC> = ({ ...restProps }) => ( + + + +) + +export default Twitter diff --git a/src/components/sharedComponents/Footer/Socials/index.tsx b/src/components/sharedComponents/Footer/Socials/index.tsx new file mode 100644 index 00000000..7d759bc9 --- /dev/null +++ b/src/components/sharedComponents/Footer/Socials/index.tsx @@ -0,0 +1,49 @@ +import { type FC, type HTMLAttributes } from 'react' +import styled from 'styled-components' + +import Github from '@/src/components/sharedComponents/Footer/Socials/assets/Github' +import LinkedIn from '@/src/components/sharedComponents/Footer/Socials/assets/LinkedIn' +import Telegram from '@/src/components/sharedComponents/Footer/Socials/assets/Telegram' +import Twitter from '@/src/components/sharedComponents/Footer/Socials/assets/Twitter' + +const Wrapper = styled.div` + align-items: center; + column-gap: calc(var(--base-gap) * 2); + display: flex; + justify-content: center; +` + +const Link = styled.a` + color: inherit; + display: block; + text-decoration: none; + + &:active { + opacity: 0.8; + } +` + +const Socials: FC> = ({ ...restProps }) => { + const items = [ + { label: 'Telegram', icon: , href: 'https://t.me/mgarciap' }, + { label: 'Github', icon: , href: 'https://github.com/BootNodeDev' }, + { label: 'Twitter', icon: , href: 'https://twitter.com/bootnodedev' }, + { + label: 'LinkedIn', + icon: , + href: 'https://www.linkedin.com/company/bootnode-dev/', + }, + ] + + return ( + + {items.map(({ href, icon, label }, index) => ( + + {icon} + + ))} + + ) +} + +export default Socials diff --git a/src/components/sharedComponents/Footer.tsx b/src/components/sharedComponents/Footer/index.tsx similarity index 61% rename from src/components/sharedComponents/Footer.tsx rename to src/components/sharedComponents/Footer/index.tsx index 0bc70cdc..7371429d 100644 --- a/src/components/sharedComponents/Footer.tsx +++ b/src/components/sharedComponents/Footer/index.tsx @@ -3,17 +3,34 @@ import styled from 'styled-components' import { InnerContainer, Footer as BaseFooter, LogoMini, ContainerPadding } from 'db-ui-toolkit' +import Socials from '@/src/components/sharedComponents/Footer/Socials' + export const Wrapper = styled(BaseFooter)` + color: var(--theme-footer-text-color); height: 92px; - margin-top: calc(var(--base-gap-xl) * 2); ` const Inner = styled(InnerContainer)` + align-items: center; + column-gap: calc(var(--base-gap) + var(--base-gap) / 2); justify-content: center; ${ContainerPadding} ` +const Line = styled.div` + [data-theme='light'] & { + background-color: #c5c2cb; + } + + [data-theme='dark'] & { + background-color: #5f6178; + } + + height: 17px; + width: 1px; +` + export const Footer: FC = ({ ...restProps }) => { return ( @@ -26,6 +43,8 @@ export const Footer: FC = ({ ...restProps }) => { > + + ) From f53df85143c35ae53ac6bcdeaaac2b452fa01eeb Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Thu, 15 Aug 2024 15:37:46 -0300 Subject: [PATCH 003/228] feat: add landing page mobile menu --- .../sharedComponents/MobileMenu.tsx | 216 ++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 src/components/sharedComponents/MobileMenu.tsx diff --git a/src/components/sharedComponents/MobileMenu.tsx b/src/components/sharedComponents/MobileMenu.tsx new file mode 100644 index 00000000..12ef682f --- /dev/null +++ b/src/components/sharedComponents/MobileMenu.tsx @@ -0,0 +1,216 @@ +import { useState } from 'react' +import styled, { css } from 'styled-components' + +import { Link } from '@tanstack/react-router' +import { Logo as BaseLogo, SwitchThemeButton, breakpointMediaQuery } from 'db-ui-toolkit' +import { useTheme } from 'next-themes' + +import { menuItems } from '@/src/constants/menuItems' +import { ConnectWalletButton } from '@/src/providers/Web3Provider' + +const MenuIcon = () => ( + + + +) + +const CloseIcon = () => ( + + + +) + +const Wrapper = styled.div` + --base-mobile-menu-max-width: 375px; + + background-color: var(--theme-dialog-overlay-color); + content: ''; + display: block; + height: 100vh; + left: 0; + position: fixed; + top: 0; + width: 100vw; + z-index: 0; + opacity: 1; + transition: + display var(--base-transition-duration-sm, 0.2s) ease-out allow-discrete, + opacity var(--base-transition-duration-sm, 0.2s) ease-out; + + /* Transitions will start in these states */ + @starting-style { + opacity: 0; + } + + ${breakpointMediaQuery( + 'desktopStart', + css` + display: none; + `, + )} +` + +const Inner = styled.div` + align-items: center; + background-color: var(--theme-main-menu-background-color, #f7f7f7); + color: var(--theme-main-menu-color, #2e3048); + display: flex; + flex-direction: column; + height: 100vh; + padding: var(--base-padding-mobile); + position: fixed; + right: 0; + top: 0; + width: 100vw; + z-index: 10; + transition: right var(--base-transition-duration, 0.2s) ease-out; + + /* Transitions will start in these states */ + @starting-style { + right: calc(var(--base-mobile-menu-max-width) * -1); + } + + ${breakpointMediaQuery( + 'tabletPortraitStart', + css` + width: var(--base-mobile-menu-max-width); + `, + )} +` + +const Header = styled.div` + align-items: center; + display: flex; + justify-content: space-between; + margin-bottom: 80px; + width: 100%; +` + +const Logo = styled(BaseLogo)` + width: 140px; +` + +const Button = styled.button` + align-items: center; + background-color: transparent; + border: none; + cursor: pointer; + display: flex; + height: 30px; + justify-content: center; + padding: 0; + width: 30px; + + &:active { + opacity: 0.7; + } +` + +const MenuButton = styled(Button)` + ${breakpointMediaQuery( + 'desktopStart', + css` + display: none; + `, + )} +` + +const ConnectButton = styled(ConnectWalletButton)` + margin-bottom: 40px; + max-width: fit-content; +` + +const MenuItems = styled.nav` + align-items: center; + display: flex; + flex-direction: column; + row-gap: calc(var(--base-gap) * 3); +` + +const LinkCSS = css` + align-items: center; + color: var(--theme-main-menu-color, #2e3048); + display: flex; + flex-direction: column; + font-size: 2.1rem; + font-weight: 500; + line-height: 1.2; + row-gap: calc(var(--base-gap) * 3); + text-decoration: none; + + &::after { + background-color: var(--theme-main-menu-color, #2e3048); + border-radius: 2px; + content: ''; + display: block; + height: 2px; + width: 20px; + } + + &:active { + opacity: 0.7; + } +` + +const Item = styled(Link)` + ${LinkCSS} +` + +const ExternalItem = styled.a` + ${LinkCSS} +` + +const MobileMenu = ({ ...restProps }) => { + const [isOpen, setIsOpen] = useState(false) + const { setTheme, theme } = useTheme() + + return isOpen ? ( + + +
+ + +
+ + + {menuItems.map(({ href, label, to }, index) => { + const key = `menuItem_${index}` + + return to ? ( + setIsOpen(false)} to={to}> + {label} + + ) : href ? ( + setIsOpen(false)} + rel="noopener noreferrer" + target="_blank" + > + {label} + + ) : ( + <> + ) + })} + setTheme(theme === 'light' ? 'dark' : 'light')} /> + +
+
+ ) : ( + setIsOpen(true)}> + + + ) +} + +export default MobileMenu From 07df369b9b88559fad8d642488f92e33207de453 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Thu, 15 Aug 2024 15:38:28 -0300 Subject: [PATCH 004/228] feat: add landing page header --- src/components/sharedComponents/Header.tsx | 43 ++++++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/src/components/sharedComponents/Header.tsx b/src/components/sharedComponents/Header.tsx index 2b2cceeb..0fbaed33 100644 --- a/src/components/sharedComponents/Header.tsx +++ b/src/components/sharedComponents/Header.tsx @@ -12,11 +12,16 @@ import { } from 'db-ui-toolkit' import { useTheme } from 'next-themes' +import MainMenu from '@/src/components/sharedComponents/MainMenu' +import MobileMenu from '@/src/components/sharedComponents/MobileMenu' import { ConnectWalletButton } from '@/src/providers/Web3Provider' +/** + * Note: you can remove all the custom styles and just use the default Header + * component from db-ui-toolkit (or just create your own) + */ const Wrapper = styled(BaseHeader)` - margin-bottom: calc(var(--base-gap-xl) * 2); - padding-top: var(--base-common-padding-xl); + padding-top: var(--base-padding-mobile); position: relative; z-index: 10; @@ -24,6 +29,7 @@ const Wrapper = styled(BaseHeader)` 'desktopStart', css` height: var(--base-header-height); + padding-top: 14px; `, )} ` @@ -47,16 +53,43 @@ const HomeLink = styled(Link)` ` const Logo = styled(BaseLogo)` - min-width: 140px; + width: 140px; + + ${breakpointMediaQuery( + 'desktopStart', + css` + width: auto; + `, + )} +` + +const Menu = styled(MainMenu)` + display: none; + + ${breakpointMediaQuery( + 'desktopStart', + css` + display: flex; + justify-content: center; + flex: 1; + `, + )} ` const End = styled.div` align-items: center; column-gap: calc(var(--base-gap)); - display: flex; + display: none; flex: 1; height: 100%; justify-content: flex-end; + + ${breakpointMediaQuery( + 'desktopStart', + css` + display: flex; + `, + )} ` export const Header: FC> = ({ ...restProps }) => { @@ -70,10 +103,12 @@ export const Header: FC> = ({ ...restProps }) => { + setTheme(theme === 'light' ? 'dark' : 'light')} /> + ) From 906f0626059b013348ddae31c58237f27b7fdf69 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Thu, 15 Aug 2024 15:39:05 -0300 Subject: [PATCH 005/228] feat: add landing page header --- src/components/sharedComponents/MainMenu.tsx | 60 ++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/components/sharedComponents/MainMenu.tsx diff --git a/src/components/sharedComponents/MainMenu.tsx b/src/components/sharedComponents/MainMenu.tsx new file mode 100644 index 00000000..997b5611 --- /dev/null +++ b/src/components/sharedComponents/MainMenu.tsx @@ -0,0 +1,60 @@ +import styled, { css } from 'styled-components' + +import { Link } from '@tanstack/react-router' + +import { menuItems } from '@/src/constants/menuItems' + +const Wrapper = styled.nav` + align-items: center; + column-gap: calc(var(--base-gap) * 5); + display: flex; + height: 100%; +` + +const LinkCSS = css` + color: var(--theme-main-menu-item-color); + font-size: 1.6rem; + font-weight: 500; + line-height: 1.2; + text-decoration: none; + + &:hover { + text-decoration: underline; + } + + &:active { + opacity: 0.7; + } +` + +const Item = styled(Link)` + ${LinkCSS} +` + +const ExternalItem = styled.a` + ${LinkCSS} +` + +const MainMenu = ({ ...restProps }) => { + return ( + + {menuItems.map(({ href, label, to }, index) => { + const key = `menuItem_${index}` + + return to ? ( + + {label} + + ) : href ? ( + + {label} + + ) : ( + <> + ) + })} + + ) +} + +export default MainMenu From b32711c298cd827e07979b8e9ce97c5d2aed933f Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Thu, 15 Aug 2024 15:40:44 -0300 Subject: [PATCH 006/228] feat: add welcome page --- .../pageComponents/home/Welcome/ButtonCSS.tsx | 22 +++ .../Welcome/Clouds/assets/img-clouds-dark.svg | 1 + .../Clouds/assets/img-clouds-light.svg | 1 + .../home/Welcome/Clouds/index.tsx | 49 +++++ .../home/Welcome/DocsButton.tsx | 33 ++++ .../Welcome/Ghost/assets/img-ghost-dark.svg | 1 + .../Welcome/Ghost/assets/img-ghost-light.svg | 1 + .../home/Welcome/Ghost/index.tsx | 19 ++ .../pageComponents/home/Welcome/GitClone.tsx | 102 +++++++++++ .../home/Welcome/GithubButton.tsx | 33 ++++ .../pageComponents/home/Welcome/index.tsx | 173 ++++++++++++++++++ 11 files changed, 435 insertions(+) create mode 100644 src/components/pageComponents/home/Welcome/ButtonCSS.tsx create mode 100644 src/components/pageComponents/home/Welcome/Clouds/assets/img-clouds-dark.svg create mode 100644 src/components/pageComponents/home/Welcome/Clouds/assets/img-clouds-light.svg create mode 100644 src/components/pageComponents/home/Welcome/Clouds/index.tsx create mode 100644 src/components/pageComponents/home/Welcome/DocsButton.tsx create mode 100644 src/components/pageComponents/home/Welcome/Ghost/assets/img-ghost-dark.svg create mode 100644 src/components/pageComponents/home/Welcome/Ghost/assets/img-ghost-light.svg create mode 100644 src/components/pageComponents/home/Welcome/Ghost/index.tsx create mode 100644 src/components/pageComponents/home/Welcome/GitClone.tsx create mode 100644 src/components/pageComponents/home/Welcome/GithubButton.tsx create mode 100644 src/components/pageComponents/home/Welcome/index.tsx diff --git a/src/components/pageComponents/home/Welcome/ButtonCSS.tsx b/src/components/pageComponents/home/Welcome/ButtonCSS.tsx new file mode 100644 index 00000000..18f5cf66 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/ButtonCSS.tsx @@ -0,0 +1,22 @@ +import { css } from 'styled-components' + +import { breakpointMediaQuery } from 'db-ui-toolkit' + +export const ButtonCSS = css` + column-gap: calc(var(--base-gap) * 2); + font-size: 1.8rem; + height: 50px; + padding-left: var(--base-common-padding-xl); + padding-right: var(--base-common-padding-xl); + min-width: 132px; + justify-content: start; + + ${breakpointMediaQuery( + 'tabletPortraitStart', + css` + min-width: 156px; + padding-left: calc(var(--base-common-padding-xl) * 2); + padding-right: calc(var(--base-common-padding-xl) * 2); + `, + )} +` diff --git a/src/components/pageComponents/home/Welcome/Clouds/assets/img-clouds-dark.svg b/src/components/pageComponents/home/Welcome/Clouds/assets/img-clouds-dark.svg new file mode 100644 index 00000000..5077f657 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/Clouds/assets/img-clouds-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/pageComponents/home/Welcome/Clouds/assets/img-clouds-light.svg b/src/components/pageComponents/home/Welcome/Clouds/assets/img-clouds-light.svg new file mode 100644 index 00000000..08107b49 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/Clouds/assets/img-clouds-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/pageComponents/home/Welcome/Clouds/index.tsx b/src/components/pageComponents/home/Welcome/Clouds/index.tsx new file mode 100644 index 00000000..53e9619e --- /dev/null +++ b/src/components/pageComponents/home/Welcome/Clouds/index.tsx @@ -0,0 +1,49 @@ +import styled, { css } from 'styled-components' + +import { breakpointMediaQuery } from 'db-ui-toolkit' + +import ImgCloudsDark from '@/src/components/pageComponents/home/Welcome/Clouds/assets/img-clouds-dark.svg' +import ImgCloudsLight from '@/src/components/pageComponents/home/Welcome/Clouds/assets/img-clouds-light.svg' + +const Clouds = styled.img` + display: none; + flex-grow: 0; + flex-shrink: 0; + min-height: 306px; + min-width: calc(100vw + 400px); + object-fit: contain; + object-position: center bottom; + + ${breakpointMediaQuery( + 'desktopStart', + css` + min-width: fit-content; + object-fit: cover; + object-position: center; + `, + )} +` + +Clouds.defaultProps = { + alt: '', +} + +export const DarkClouds = styled(Clouds)` + [data-theme='dark'] & { + display: block; + } +` + +DarkClouds.defaultProps = { + src: ImgCloudsDark, +} + +export const LightClouds = styled(Clouds)` + [data-theme='light'] & { + display: block; + } +` + +LightClouds.defaultProps = { + src: ImgCloudsLight, +} diff --git a/src/components/pageComponents/home/Welcome/DocsButton.tsx b/src/components/pageComponents/home/Welcome/DocsButton.tsx new file mode 100644 index 00000000..03c35f10 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/DocsButton.tsx @@ -0,0 +1,33 @@ +import styled from 'styled-components' + +import { ButtonCSS } from '@/src/components/pageComponents/home/Welcome/ButtonCSS' +import { SecondaryButton } from '@/src/components/sharedComponents/Buttons' + +const Icon = () => ( + + + +) + +const Wrapper = styled(SecondaryButton)` + ${ButtonCSS} +` + +const DocsButton = ({ ...restProps }) => { + return ( + + + Docs + + ) +} + +export default DocsButton diff --git a/src/components/pageComponents/home/Welcome/Ghost/assets/img-ghost-dark.svg b/src/components/pageComponents/home/Welcome/Ghost/assets/img-ghost-dark.svg new file mode 100644 index 00000000..1bcca592 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/Ghost/assets/img-ghost-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/pageComponents/home/Welcome/Ghost/assets/img-ghost-light.svg b/src/components/pageComponents/home/Welcome/Ghost/assets/img-ghost-light.svg new file mode 100644 index 00000000..85239e41 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/Ghost/assets/img-ghost-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/pageComponents/home/Welcome/Ghost/index.tsx b/src/components/pageComponents/home/Welcome/Ghost/index.tsx new file mode 100644 index 00000000..99f2a0c6 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/Ghost/index.tsx @@ -0,0 +1,19 @@ +import styled from 'styled-components' + +import ImgGhostDark from '@/src/components/pageComponents/home/Welcome/Ghost/assets/img-ghost-dark.svg' +import ImgGhostLight from '@/src/components/pageComponents/home/Welcome/Ghost/assets/img-ghost-light.svg' + +const Ghost = styled.img` + --ghost-image: url(${ImgGhostLight}); + + [data-theme='dark'] & { + --ghost-image: url(${ImgGhostDark}); + } + + content: var(--ghost-image); + object-fit: none; + flex-grow: 0; + flex-shrink: 0; +` + +export default Ghost diff --git a/src/components/pageComponents/home/Welcome/GitClone.tsx b/src/components/pageComponents/home/Welcome/GitClone.tsx new file mode 100644 index 00000000..e28bb373 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/GitClone.tsx @@ -0,0 +1,102 @@ +import { useState } from 'react' +import styled from 'styled-components' + +import { Toast, CopyButton } from 'db-ui-toolkit' +import { toast } from 'react-hot-toast' + +const CopyIcon = () => ( + + + + +) + +const OkIcon = () => ( + + + +) + +const Wrapper = styled.section` + [data-theme='light'] & { + --git-clone-background-color: #e2e0e7; + } + + [data-theme='dark'] & { + --git-clone-background-color: #292b43; + } + + align-items: center; + background-color: var(--git-clone-background-color); + border-radius: 80px; + column-gap: calc(var(--base-gap) * 2); + display: flex; + height: 50px; + max-width: 100%; + padding: 0 calc(var(--base-gap) * 3); +` + +const Value = styled.span` + flex-shrink: 1; + font-size: 1.6rem; + line-height: 1.2; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +` + +const IconWrapper = styled.div` + align-items: center; + display: flex; + justify-content: center; + width: 17px; +` + +const GitClone = ({ ...restProps }) => { + const [copied, setCopied] = useState(false) + const cloneString = 'git clone git@github.com:BootNodeDev/dAppBooster.git' + + const handleCopy = () => { + const timeDelay = 2500 + toast.custom(Copied to the clipboard!, { + duration: timeDelay, + position: 'top-center', + id: 'copy-to-clipboard', + }) + setCopied(true) + setTimeout(() => { + setCopied(false) + }, 3000) + } + + return ( + + {cloneString} + + + {copied ? : } + + + + ) +} + +export default GitClone diff --git a/src/components/pageComponents/home/Welcome/GithubButton.tsx b/src/components/pageComponents/home/Welcome/GithubButton.tsx new file mode 100644 index 00000000..f95a8815 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/GithubButton.tsx @@ -0,0 +1,33 @@ +import styled from 'styled-components' + +import { ButtonCSS } from '@/src/components/pageComponents/home/Welcome/ButtonCSS' +import { PrimaryButton } from '@/src/components/sharedComponents/Buttons' + +const Icon = () => ( + + + +) + +const Wrapper = styled(PrimaryButton)` + ${ButtonCSS} +` + +const GithubButton = ({ ...restProps }) => { + return ( + + + Github + + ) +} + +export default GithubButton diff --git a/src/components/pageComponents/home/Welcome/index.tsx b/src/components/pageComponents/home/Welcome/index.tsx new file mode 100644 index 00000000..298ff6f8 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/index.tsx @@ -0,0 +1,173 @@ +import { type FC, type HTMLAttributes } from 'react' +import styled, { css } from 'styled-components' + +import { + Title as BasetTitle, + Text as BaseText, + InnerContainer as Inner, + ContainerPadding, + breakpointMediaQuery, +} from 'db-ui-toolkit' + +import { LightClouds, DarkClouds } from '@/src/components/pageComponents/home/Welcome/Clouds' +import DocsButton from '@/src/components/pageComponents/home/Welcome/DocsButton' +import BaseGhost from '@/src/components/pageComponents/home/Welcome/Ghost' +import GitClone from '@/src/components/pageComponents/home/Welcome/GitClone' +import GithubButton from '@/src/components/pageComponents/home/Welcome/GithubButton' + +const Wrapper = styled.section` + [data-theme='light'] & { + --landing-page-main-background-color: #f7f7f7; + } + + [data-theme='dark'] & { + --landing-page-main-background-color: #2e3048; + } + + display: flex; + flex-direction: column; + position: relative; + z-index: 0; + + ${breakpointMediaQuery( + 'desktopStart', + css` + min-height: 100vh; + `, + )} +` + +const Clouds = styled.div` + display: flex; + justify-content: center; + overflow: hidden; + position: relative; + width: 100%; + + &::before, + &::after { + content: ''; + background-color: var(--landing-page-main-background-color); + display: block; + flex-grow: 1; + flex-shrink: 1; + min-width: 0; + } +` + +const Ghost = styled(BaseGhost)` + bottom: -5px; + height: 191px; + left: 50%; + object-fit: cover; + position: absolute; + transform: translateX(-50%); + width: 100px; + z-index: 1; + + ${breakpointMediaQuery( + 'desktopStart', + css` + bottom: 70px; + height: auto; + object-fit: none; + width: auto; + `, + )} +` + +const Contents = styled.div` + flex-grow: 1; + background-color: var(--landing-page-main-background-color); +` + +const InnerContainer = styled(Inner)` + align-items: center; + flex-direction: column; + + ${ContainerPadding} +` + +const Title = styled(BasetTitle)` + font-size: 3.2rem; + font-weight: 800; + line-height: 1.2; + margin-bottom: var(--base-gap); + text-align: center; + padding-top: calc(var(--base-common-padding-xl) * 2); + + ${breakpointMediaQuery( + 'desktopStart', + css` + font-size: 4.8rem; + padding-top: 0; + `, + )} +` + +const Text = styled(BaseText)` + font-size: 1.6rem; + line-height: 1.5; + margin-bottom: calc(var(--base-gap) * 4); + text-align: center; + + br { + display: none; + } + + ${breakpointMediaQuery( + 'tabletPortraitStart', + css` + br { + display: block; + } + `, + )} + + ${breakpointMediaQuery( + 'desktopStart', + css` + font-size: 1.8rem; + `, + )} +` + +const Buttons = styled.div` + display: flex; + gap: calc(var(--base-gap) + var(--base-gap) / 2); + justify-content: center; + margin-bottom: calc(var(--base-gap) * 4); +` + +const Welcome: FC> = ({ ...restProps }) => { + return ( + + + + + + + + + + Boost dApp + <br /> + development on the + <br /> blockchain + + + A modern blockchain boilerplate built to quickly get +
you started with your next project. +
+ + + + + +
+
+
+ ) +} + +export default Welcome From 610bf74a21929e432c1a66b53b0edca772e82c91 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Thu, 15 Aug 2024 15:41:16 -0300 Subject: [PATCH 007/228] feat: add home demos --- .../home/Examples/Item/Badge.tsx | 24 ++ .../Examples/Item/DocumentationButton.tsx | 58 ++++ .../home/Examples/Item/index.tsx | 155 +++++++++++ .../pageComponents/home/Examples/List.tsx | 76 ++++++ .../home/Examples/assets/Avatar.tsx | 25 ++ .../home/Examples/assets/Ens.tsx | 25 ++ .../home/Examples/assets/Hash.tsx | 25 ++ .../home/Examples/assets/IPFSImage.tsx | 25 ++ .../home/Examples/assets/InputAddress.tsx | 25 ++ .../home/Examples/assets/Sign.tsx | 25 ++ .../home/Examples/assets/Subgraph.tsx | 25 ++ .../home/Examples/assets/SubgraphStatus.tsx | 25 ++ .../home/Examples/assets/Switch.tsx | 25 ++ .../home/Examples/assets/TokenInput.tsx | 25 ++ .../home/Examples/assets/TokenList.tsx | 25 ++ .../home/Examples/assets/Transaction.tsx | 25 ++ .../home/Examples/assets/UserCheck.tsx | 32 +++ .../home/Examples/assets/Wallet.tsx | 25 ++ .../home/Examples/demos/AvatarDemo.test.tsx | 52 ++++ .../home/Examples/demos/AvatarDemo.tsx | 29 ++ .../ERC20ApproveAndTransferButton.tsx | 101 +++++++ .../index.tsx | 131 +++++++++ .../home/Examples/demos/EnsNameDemo.tsx | 116 ++++++++ .../home/Examples/demos/HashDemo.tsx | 66 +++++ .../home/Examples/demos/HashInputDemo.tsx | 165 ++++++++++++ .../home/Examples/demos/SignMessageDemo.tsx | 97 +++++++ .../home/Examples/demos/SubgraphDemo/List.tsx | 249 ++++++++++++++++++ .../Examples/demos/SubgraphDemo/index.tsx | 30 +++ .../demos/SubgraphStatusDemo/List.tsx | 185 +++++++++++++ .../demos/SubgraphStatusDemo/index.tsx | 31 +++ .../home/Examples/demos/SwitchNetworkDemo.tsx | 36 +++ .../home/Examples/demos/TokenDropdownDemo.tsx | 16 ++ .../home/Examples/demos/TokenInputDemo.tsx | 87 ++++++ .../Examples/demos/TransactionButtonDemo.tsx | 113 ++++++++ .../home/Examples/demos/assets/Arbitrum.tsx | 47 ++++ .../home/Examples/demos/assets/Base.tsx | 20 ++ .../home/Examples/demos/assets/Eth.tsx | 46 ++++ .../home/Examples/demos/assets/Optimism.tsx | 32 +++ .../home/Examples/demos/assets/Polygon.tsx | 25 ++ .../pageComponents/home/Examples/index.tsx | 179 +++++++++++++ 40 files changed, 2523 insertions(+) create mode 100644 src/components/pageComponents/home/Examples/Item/Badge.tsx create mode 100644 src/components/pageComponents/home/Examples/Item/DocumentationButton.tsx create mode 100644 src/components/pageComponents/home/Examples/Item/index.tsx create mode 100644 src/components/pageComponents/home/Examples/List.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/Avatar.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/Ens.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/Hash.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/IPFSImage.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/InputAddress.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/Sign.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/Subgraph.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/SubgraphStatus.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/Switch.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/TokenInput.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/TokenList.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/Transaction.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/UserCheck.tsx create mode 100644 src/components/pageComponents/home/Examples/assets/Wallet.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/AvatarDemo.test.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/AvatarDemo.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/index.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/HashDemo.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/HashInputDemo.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/SubgraphDemo/List.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/SubgraphDemo/index.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/SubgraphStatusDemo/List.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/SubgraphStatusDemo/index.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/SwitchNetworkDemo.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/TokenDropdownDemo.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/TransactionButtonDemo.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/assets/Arbitrum.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/assets/Base.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/assets/Eth.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/assets/Optimism.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/assets/Polygon.tsx create mode 100644 src/components/pageComponents/home/Examples/index.tsx diff --git a/src/components/pageComponents/home/Examples/Item/Badge.tsx b/src/components/pageComponents/home/Examples/Item/Badge.tsx new file mode 100644 index 00000000..0425cd25 --- /dev/null +++ b/src/components/pageComponents/home/Examples/Item/Badge.tsx @@ -0,0 +1,24 @@ +import styled from 'styled-components' + +const Badge = styled.div.attrs({ children: <>Demo })` + [data-theme='light'] & { + --theme-examples-badge-background-color: #2e3048; + } + + [data-theme='dark'] & { + --theme-examples-badge-background-color: #4b4d60; + } + + align-items: center; + background-color: var(--theme-examples-badge-background-color); + border-radius: var(--base-border-radius-sm); + color: #fff; + display: flex; + font-size: 1.2rem; + font-weight: 500; + height: 20px; + line-height: 1; + padding: 0 var(--base-common-padding); +` + +export default Badge diff --git a/src/components/pageComponents/home/Examples/Item/DocumentationButton.tsx b/src/components/pageComponents/home/Examples/Item/DocumentationButton.tsx new file mode 100644 index 00000000..3a235625 --- /dev/null +++ b/src/components/pageComponents/home/Examples/Item/DocumentationButton.tsx @@ -0,0 +1,58 @@ +import styled from 'styled-components' + +import { Button } from 'db-ui-toolkit' + +const Icon = () => ( + + + +) + +const DocumentationButton = styled(Button).attrs({ + $variant: 'documentation', + children: ( + <> + Documentation + + ), +})` + [data-theme='light'] & { + --theme-button-documentation-background-color: transparent; + --theme-button-documentation-background-color-hover: transparent; + + --theme-button-documentation-border-color: #e2e0e7; + --theme-button-documentation-border-color-hover: #4b4d60; + + --theme-button-documentation-color: #4b4d60; + --theme-button-documentation-color-hover: #4b4d60; + + --theme-button-documentation-background-color-disabled: transparent; + --theme-button-documentation-border-color-disabled: #e2e0e7; + --theme-button-documentation-color-disabled: #4b4d60; + } + + [data-theme='dark'] & { + --theme-button-documentation-background-color: transparent; + --theme-button-documentation-background-color-hover: transparent; + + --theme-button-documentation-border-color: #c5c2cb; + --theme-button-documentation-border-color-hover: #fff; + + --theme-button-documentation-color: #c5c2cb; + --theme-button-documentation-color-hover: #fff; + + --theme-button-documentation-background-color-disabled: transparent; + --theme-button-documentation-border-color-disabled: #c5c2cb; + --theme-button-documentation-color-disabled: #c5c2cb; + } + + font-size: 1.4rem; + font-weight: 500; + height: 43px; + max-width: fit-content; +` + +export default DocumentationButton diff --git a/src/components/pageComponents/home/Examples/Item/index.tsx b/src/components/pageComponents/home/Examples/Item/index.tsx new file mode 100644 index 00000000..a324a5ae --- /dev/null +++ b/src/components/pageComponents/home/Examples/Item/index.tsx @@ -0,0 +1,155 @@ +import { type FC, type HTMLAttributes, type ReactNode } from 'react' +import styled, { css } from 'styled-components' + +import { breakpointMediaQuery } from 'db-ui-toolkit' + +import BaseBadge from '@/src/components/pageComponents/home/Examples/Item/Badge' +import DocumentationButton from '@/src/components/pageComponents/home/Examples/Item/DocumentationButton' + +const Wrapper = styled.div` + [data-theme='light'] & { + --theme-examples-item-background-color: #f7f7f7; + } + + [data-theme='dark'] & { + --theme-examples-item-background-color: #2e3048; + } + + background-color: var(--theme-examples-item-background-color); + border-radius: var(--base-border-radius); + display: flex; + flex-direction: column; + row-gap: calc(var(--base-gap-xl) + var(--base-gap)); + max-width: 100%; + padding: calc(var(--base-common-padding-xl) * 2) var(--base-common-padding-xl) + var(--base-common-padding-xl); + + ${breakpointMediaQuery( + 'tabletPortraitStart', + css` + column-gap: var(--base-gap-xl); + flex-direction: row; + padding: var(--base-common-padding-xl) var(--base-common-padding-xl) + var(--base-common-padding-xl) calc(var(--base-common-padding-xl) * 2); + `, + )}; +` + +const Info = styled.div` + align-items: center; + display: flex; + flex-direction: column; + flex: 1; + row-gap: var(--base-gap-xl); + + ${breakpointMediaQuery( + 'tabletPortraitStart', + css` + align-items: flex-start; + padding: var(--base-common-padding-xl) 0 0; + `, + )}; +` + +const Icon = styled.div` + --icon-size: 40px; + + align-items: center; + background-color: var(--theme-color-primary); + border-radius: 50%; + color: #fff; + display: flex; + height: var(--icon-size); + justify-content: center; + width: var(--icon-size); +` + +const Title = styled.h2` + color: var(--theme-color-text-primary); + font-size: 2.4rem; + font-weight: 700; + line-height: 1.2; + margin: 0; + text-align: center; + + ${breakpointMediaQuery( + 'tabletPortraitStart', + css` + text-align: left; + `, + )}; +` + +const Text = styled.p` + color: var(--theme-color-text-primary); + font-size: 1.6rem; + font-weight: 500; + line-height: 1.5; + margin: 0; + text-align: center; + + ${breakpointMediaQuery( + 'tabletPortraitStart', + css` + text-align: left; + `, + )}; +` + +const Demo = styled.div` + align-items: center; + background-color: var(--theme-examples-list-background-color); + border-radius: var(--base-border-radius); + display: flex; + flex-direction: column; + flex: 1; + justify-content: center; + min-width: 0; + padding: calc(var(--base-common-padding) * 6) var(--base-common-padding) + calc(var(--base-common-padding) * 4); + position: relative; + + ${breakpointMediaQuery( + 'tabletPortraitStart', + css` + min-height: 205px; + padding: calc(var(--base-common-padding) * 6) calc(var(--base-common-padding) * 3) + calc(var(--base-common-padding) * 3); + `, + )}; +` + +const Badge = styled(BaseBadge)` + --badge-gap: calc(var(--base-gap) + var(--base-gap-sm)); + + left: var(--badge-gap); + position: absolute; + top: var(--badge-gap); +` + +export interface Props extends HTMLAttributes { + demo: ReactNode + href?: string + icon: ReactNode + text: string + title: string +} + +const Item: FC = ({ demo, href, icon, text, title, ...restProps }) => { + return ( + + + {icon} + {title} + {text} + {href && } + + + + {demo} + + + ) +} + +export default Item diff --git a/src/components/pageComponents/home/Examples/List.tsx b/src/components/pageComponents/home/Examples/List.tsx new file mode 100644 index 00000000..98365a0e --- /dev/null +++ b/src/components/pageComponents/home/Examples/List.tsx @@ -0,0 +1,76 @@ +import { type FC, type HTMLAttributes } from 'react' +import styled, { css } from 'styled-components' + +import { breakpointMediaQuery } from 'db-ui-toolkit' + +import Item, { type Props as ItemProps } from '@/src/components/pageComponents/home/Examples/Item' + +const Wrapper = styled.div` + [data-theme='light'] & { + --theme-examples-list-background-color: #e2e0e766; + } + + [data-theme='dark'] & { + --theme-examples-list-background-color: #292b43; + } + + align-items: center; + background-color: var(--theme-examples-list-background-color); + border-radius: var(--base-border-radius-xl); + display: flex; + flex-direction: column; + max-width: 100%; + padding: calc(var(--base-common-padding-xl) * 2) var(--base-common-padding); + row-gap: calc(var(--base-gap-xl) * 2); + width: 1066px; + + ${breakpointMediaQuery( + 'tabletLandscapeStart', + css` + padding: calc(var(--base-common-padding) * 7); + row-gap: calc(var(--base-gap) * 5); + `, + )} +` + +const Title = styled.h2` + color: var(--theme-color-text-primary); + font-size: 2.1rem; + font-weight: 700; + line-height: 1.2; + margin: 0; + + ${breakpointMediaQuery( + 'tabletLandscapeStart', + css` + font-size: 3.6rem; + `, + )} +` + +const Items = styled.div` + display: flex; + flex-direction: column; + max-width: 100%; + row-gap: calc(var(--base-gap) * 2); + width: 100%; +` + +interface Props extends HTMLAttributes { + items: ItemProps[] +} + +const List: FC = ({ items, ...restProps }) => { + return ( + + Built-in Features + + {items.map((item) => ( + + ))} + + + ) +} + +export default List diff --git a/src/components/pageComponents/home/Examples/assets/Avatar.tsx b/src/components/pageComponents/home/Examples/assets/Avatar.tsx new file mode 100644 index 00000000..8c06dcbb --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Avatar.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/Ens.tsx b/src/components/pageComponents/home/Examples/assets/Ens.tsx new file mode 100644 index 00000000..3319a31f --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Ens.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/Hash.tsx b/src/components/pageComponents/home/Examples/assets/Hash.tsx new file mode 100644 index 00000000..fb930639 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Hash.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/IPFSImage.tsx b/src/components/pageComponents/home/Examples/assets/IPFSImage.tsx new file mode 100644 index 00000000..23cda9d7 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/IPFSImage.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/InputAddress.tsx b/src/components/pageComponents/home/Examples/assets/InputAddress.tsx new file mode 100644 index 00000000..f926f7ad --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/InputAddress.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/Sign.tsx b/src/components/pageComponents/home/Examples/assets/Sign.tsx new file mode 100644 index 00000000..c891b586 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Sign.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/Subgraph.tsx b/src/components/pageComponents/home/Examples/assets/Subgraph.tsx new file mode 100644 index 00000000..e65356f4 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Subgraph.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/SubgraphStatus.tsx b/src/components/pageComponents/home/Examples/assets/SubgraphStatus.tsx new file mode 100644 index 00000000..63d0992a --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/SubgraphStatus.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/Switch.tsx b/src/components/pageComponents/home/Examples/assets/Switch.tsx new file mode 100644 index 00000000..b3ed0195 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Switch.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/TokenInput.tsx b/src/components/pageComponents/home/Examples/assets/TokenInput.tsx new file mode 100644 index 00000000..6d0b0b1e --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/TokenInput.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/TokenList.tsx b/src/components/pageComponents/home/Examples/assets/TokenList.tsx new file mode 100644 index 00000000..796eccdc --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/TokenList.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/Transaction.tsx b/src/components/pageComponents/home/Examples/assets/Transaction.tsx new file mode 100644 index 00000000..acde3b47 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Transaction.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/UserCheck.tsx b/src/components/pageComponents/home/Examples/assets/UserCheck.tsx new file mode 100644 index 00000000..1640bdf5 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/UserCheck.tsx @@ -0,0 +1,32 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + + + + + + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/Wallet.tsx b/src/components/pageComponents/home/Examples/assets/Wallet.tsx new file mode 100644 index 00000000..9db6e51e --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Wallet.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/demos/AvatarDemo.test.tsx b/src/components/pageComponents/home/Examples/demos/AvatarDemo.test.tsx new file mode 100644 index 00000000..00d9df94 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/AvatarDemo.test.tsx @@ -0,0 +1,52 @@ +import { render, screen } from '@testing-library/react' +import { type Mock, describe, expect, it, vi } from 'vitest' +import { useEnsName, useEnsAvatar } from 'wagmi' + +import Avatar from '@/src/components/pageComponents/home/Examples/demos/AvatarDemo' + +// Mock wagmi hooks +vi.mock('wagmi', () => ({ + useEnsName: vi.fn(), + useEnsAvatar: vi.fn(), +})) + +const mockSize = 50 +const mockAddress = '0x1234567890abcdef1234567890abcdef12345678' +const mockEnsName = 'test.eth' +const mockAvatarImg = 'avatar.png' + +describe('Avatar Component', () => { + it('renders CustomAvatar with ensName and avatarImg', () => { + // Mock the hook return values + ;(useEnsName as Mock).mockReturnValue({ data: mockEnsName }) + ;(useEnsAvatar as Mock).mockReturnValue({ data: mockAvatarImg }) + + render() + + expect(screen.getByAltText(mockEnsName)).toBeInTheDocument() + const img = screen.getByRole('img') + expect(img).toHaveAttribute('src', mockAvatarImg) + + // Expect the image to have the correct size + expect(img.parentElement).toHaveStyle({ + width: `${mockSize}px`, + height: `${mockSize}px`, + }) + }) + + it('renders Jazzicon (without ensAvatar image)', () => { + ;(useEnsName as Mock).mockReturnValue({ data: mockEnsName }) + ;(useEnsAvatar as Mock).mockReturnValue({ data: undefined }) + + render() + + // Expect Jazzicon to be rendered + expect(screen.getByTestId('avatar-icon')).toBeInTheDocument() + + // Expect the icon to have the correct size + expect(screen.getByTestId('avatar-icon').parentElement).toHaveStyle({ + width: `${mockSize}px`, + height: `${mockSize}px`, + }) + }) +}) diff --git a/src/components/pageComponents/home/Examples/demos/AvatarDemo.tsx b/src/components/pageComponents/home/Examples/demos/AvatarDemo.tsx new file mode 100644 index 00000000..b814b60f --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/AvatarDemo.tsx @@ -0,0 +1,29 @@ +import { type Address } from 'viem' +import { normalize } from 'viem/ens' +import { useEnsName, useEnsAvatar } from 'wagmi' + +import BaseAvatar from '@/src/components/sharedComponents/Avatar' + +interface Props { + address: Address + size: number +} + +/** + * Avatar component using wagmi hooks to fetch ENS name and avatar image for the provided address. + * + * @param {string} props.address - The address + * @param {number} props.size - The size of the avatar + * @example + */ +const AvatarDemo = ({ address, size }: Props) => { + const { data: ensName } = useEnsName({ address }) + + const { data: avatarImg } = useEnsAvatar({ + name: ensName ? normalize(ensName) : undefined, + }) + + return +} + +export default AvatarDemo diff --git a/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx b/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx new file mode 100644 index 00000000..a087b4b1 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx @@ -0,0 +1,101 @@ +import { type FC } from 'react' +import styled from 'styled-components' + +import { type Address, type TransactionReceipt, type Hash, erc20Abi } from 'viem' +import { useWriteContract } from 'wagmi' + +import { PrimaryButton } from '@/src/components/sharedComponents/Buttons' +import TransactionButton from '@/src/components/sharedComponents/TransactionButton' +import { useSuspenseReadErc20Allowance } from '@/src/hooks/generated' +import { useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' +import { type Token } from '@/src/types/token' + +const Button = styled(PrimaryButton).attrs({ as: TransactionButton })` + font-size: 1.6rem; + font-weight: 500; + height: 48px; + padding-left: calc(var(--base-common-padding) * 3); + padding-right: calc(var(--base-common-padding) * 3); +` + +interface Props { + amount: bigint + disabled?: boolean + label?: string + labelSending?: string + onSuccess?: (receipt: TransactionReceipt) => void + spender: Address + token: Token + transaction: () => Promise +} + +/** + * Dynamically renders either an approval button or a transaction button based on the user's current token allowance. + * After the approval, the transaction button will be rendered. + * + * @dev Use with to add an skeleton loader while fetching the allowance. + * + * @param {Props} + * @param {Token} props.token - The token to be approved. + * @param {Address} props.spender - The address of the spender to be approved. + * @param {bigint} props.amount - The amount of tokens to approve (or send). + * @param {Function} props.onMined - The callback function to be called when transaction is mined. + * @param {boolean} props.disabled - The flag to disable the button. + * @param {Function} props.transaction - The transaction function that send after approval. + * @param {string} props.label - The label for the button. + * @param {string} props.labelSending - The label for the button when the transaction is pending. + * + */ +const ERC20ApproveAndTransferButton: FC = ({ + amount, + disabled, + label, + labelSending, + onSuccess, + spender, + token, + transaction, +}) => { + const { address } = useWeb3StatusConnected() + const { writeContractAsync } = useWriteContract() + + const { data: allowance, refetch: getAllowance } = useSuspenseReadErc20Allowance({ + address: token.address as Address, // TODO: token.address should be Address type + args: [address, spender], + }) + + const isApprovalRequired = allowance < amount + + const handleApprove = () => { + return writeContractAsync({ + abi: erc20Abi, + address: token.address as Address, + functionName: 'approve', + args: [spender, amount], + }) + } + + return isApprovalRequired ? ( + + ) : ( + + ) +} + +export default ERC20ApproveAndTransferButton diff --git a/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/index.tsx b/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/index.tsx new file mode 100644 index 00000000..c9fef087 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/index.tsx @@ -0,0 +1,131 @@ +import styled, { css } from 'styled-components' + +import { ExternalLink, Text, useDialog, GeneralMessage as GeneralMessageBase } from 'db-ui-toolkit' +import { type Address, formatUnits } from 'viem' +import { sepolia } from 'viem/chains' +import { useWriteContract } from 'wagmi' + +import ERC20ApproveAndTransferButton from '@/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton' +import { PrimaryButton } from '@/src/components/sharedComponents/Buttons' +import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' +import { useSuspenseReadErc20BalanceOf } from '@/src/hooks/generated' +import { useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' +import { type Token } from '@/src/types/token' +import { formatNumberOrString, NumberType } from '@/src/utils/numberFormat' +import { withSuspense } from '@/src/utils/suspenseWrapper' + +const GeneralMessage = styled(GeneralMessageBase)<{ status?: 'ok' | 'error' }>` + ${({ status }) => + status === 'ok' && + css` + --theme-general-message-icon-color: var(--theme-color-ok); + `} +` + +// USDC token on sepolia chain +const tokenUSDC_sepolia: Token = { + address: '0x94a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c8', + chainId: sepolia.id, + decimals: 6, + name: 'USD Coin', + symbol: 'USDC', +} + +// Using the AAVE staging contract pool apply function +const ABIExample = [ + { + inputs: [ + { + internalType: 'address', + name: 'asset', + type: 'address', + }, + { + internalType: 'uint256', + name: 'amount', + type: 'uint256', + }, + { + internalType: 'address', + name: 'onBehalfOf', + type: 'address', + }, + { + internalType: 'uint16', + name: 'referralCode', + type: 'uint16', + }, + ], + name: 'supply', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, +] as const + +const ApproveAndSendDemo = withWalletStatusVerifier( + withSuspense(() => { + const { Dialog, close, open } = useDialog() + const { address } = useWeb3StatusConnected() + const { writeContractAsync } = useWriteContract() + + const { data: balance } = useSuspenseReadErc20BalanceOf({ + address: tokenUSDC_sepolia.address as Address, + args: [address], + }) + + // AAVE staging contract pool address + const spender = '0x6Ae43d3271ff6888e7Fc43Fd7321a503ff738951' + + const amount = 10000000000n // 10,000.00 USDC + + const handleTransaction = () => + writeContractAsync({ + abi: ABIExample, + address: spender, + functionName: 'supply', + args: [tokenUSDC_sepolia.address as Address, amount, address, 0], + }) + + const formattedAmount = formatNumberOrString( + formatUnits(amount, tokenUSDC_sepolia.decimals), + NumberType.TokenTx, + ) + + return ( + <> + {balance < amount ? ( + <> + Not enough USDC! + + Mint {formattedAmount} USDC + + + ) : ( + open('approve-and-transfer')} + spender={spender} + token={tokenUSDC_sepolia} + transaction={handleTransaction} + /> + )} + + close('approve-and-transfer')}>Close + } + message={'Approve and supply completed! 🎉'} + status={'ok'} + title={'Success'} + /> + + + ) + }), + { chainId: sepolia.id }, // this DEMO component only works on sepolia chain +) + +export default ApproveAndSendDemo diff --git a/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx b/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx new file mode 100644 index 00000000..047bf899 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx @@ -0,0 +1,116 @@ +import { useState, type ChangeEvent } from 'react' +import styled from 'styled-components' + +import { Spinner, Textfield } from 'db-ui-toolkit' +import { useDebouncedCallback } from 'use-debounce' +import { type Address } from 'viem' +import { useEnsName } from 'wagmi' +import { mainnet } from 'wagmi/chains' + +const Wrapper = styled.div` + [data-theme='light'] & { + --theme-token-ens-name-background: #fff; + --theme-token-ens-name-title-color: #2e3048; + --theme-token-ens-name-text-color: #2e3048; + + --theme-textfield-color: #2e3048; + --theme-textfield-background-color: #fff; + --theme-textfield-background-color-active: rgb(0 0 0 / 5%); + --theme-textfield-border-color: #c5c2cb; + --theme-textfield-placeholder-color: rgb(22 29 26 / 60%); + } + + [data-theme='dark'] & { + --theme-token-ens-name-background: #373954; + --theme-token-ens-name-title-color: #fff; + --theme-token-ens-name-text-color: #e2e0e7; + + --theme-textfield-color: #fff; + --theme-textfield-background-color: #373954; + --theme-textfield-background-color-active: rgb(255 255 255 / 5%); + --theme-textfield-border-color: #5f6178; + --theme-textfield-placeholder-color: rgb(247 247 247 / 60%); + } + + background-color: var(--theme-token-ens-name-background); + border-radius: var(--base-border-radius); + display: flex; + flex-direction: column; + padding: var(--base-common-padding-xl); + row-gap: var(--base-gap); + width: 100%; +` + +const Title = styled.h3` + color: var(--theme-token-ens-name-title-color); + font-size: 1.4rem; + font-weight: 700; + line-height: 1.2; + margin: 0; +` + +const ENSName = styled.div` + align-items: center; + color: var(--theme-token-ens-name-text-color); + column-gap: var(--base-gap); + display: flex; + font-size: 1.5rem; + height: 20px; + line-height: 1.2; + padding-top: var(--base-common-padding); +` + +const EnsNameSearch = ({ address }: { address?: Address }) => { + const { data, error, status } = useEnsName({ + address: address, + chainId: mainnet.id, + }) + + return ( + <> + {status === 'pending' ? ( + + ) : status === 'error' ? ( + `Error fetching ENS name (${error.message})` + ) : data === undefined || data === null ? ( + `Not available` + ) : ( + data + )} + + ) +} + +const EnsNameDemo = () => { + const [ensAddress, setEnsAddress] = useState
() + const [value, setValue] = useState() + const debounceTime = 500 + + const debouncedSearch = useDebouncedCallback(async (address?: Address) => { + setEnsAddress(address) + }, debounceTime) + + const onChange = (e: ChangeEvent) => { + const value = e.target.value as Address + + setValue(value) + debouncedSearch(value) + } + + return ( + + Find ENS name + + + ENS name: {ensAddress ? : '-'} + + + ) +} + +export default EnsNameDemo diff --git a/src/components/pageComponents/home/Examples/demos/HashDemo.tsx b/src/components/pageComponents/home/Examples/demos/HashDemo.tsx new file mode 100644 index 00000000..846d8f20 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/HashDemo.tsx @@ -0,0 +1,66 @@ +import styled from 'styled-components' + +import { Toast } from 'db-ui-toolkit' +import { toast } from 'react-hot-toast' +import { type Address, type Chain } from 'viem' + +import Hash from '@/src/components/sharedComponents/Hash' +import { getExplorerLink } from '@/src/utils/getExplorerLink' + +const Wrapper = styled(Hash)` + [data-theme='light'] & { + --theme-hash-background-color: #fff; + --theme-hash-border-color: #e2e0e7; + --theme-hash-color: #2e3048; + } + + [data-theme='dark'] & { + --theme-hash-background-color: #2e3047; + --theme-hash-border-color: #5f6178; + --theme-hash-color: #fff; + } + + background-color: var(--theme-hash-background-color); + border-radius: var(--base-border-radius); + border: 1px solid var(--theme-hash-border-color); + color: var(--theme-hash-color); + cursor: default; + font-size: 1.6rem; + height: 34px; + padding: 0 calc(var(--base-common-padding) * 2); +` + +interface Props { + chain: Chain + hash: Address +} + +/** + * Hash component demo. + * + * Some styles were added. Also we show a toast when the copy button is clicked + * to let the user know that something has happened. + */ +const HashDemo = ({ chain, hash }: Props) => { + const onCopy = (message: string) => { + const timeDelay = 2500 + + navigator.clipboard.writeText(message) + toast.custom(Copied to the clipboard!, { + duration: timeDelay, + position: 'top-center', + id: 'copy-to-clipboard', + }) + } + + return ( + onCopy(hash)} + showCopyButton + /> + ) +} + +export default HashDemo diff --git a/src/components/pageComponents/home/Examples/demos/HashInputDemo.tsx b/src/components/pageComponents/home/Examples/demos/HashInputDemo.tsx new file mode 100644 index 00000000..0d6a0bbe --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/HashInputDemo.tsx @@ -0,0 +1,165 @@ +import { useState } from 'react' +import styled from 'styled-components' + +import { Textfield as BaseTextfield, Spinner } from 'db-ui-toolkit' +import { mainnet } from 'viem/chains' + +import HashInput from '@/src/components/sharedComponents/HashInput' +import { DetectedHash } from '@/src/utils/hash' + +const AlertIcon = () => ( + + + +) + +const IconOK = ({ ...restProps }) => ( + + + +) + +const Wrapper = styled.div` + --base-horizontal-padding: var(--base-common-padding-xl); + --base-textfield-padding: 0 var(--base-horizontal-padding); + --base-textfield-border-radius: var(--base-border-radius); + + [data-theme='light'] & { + --theme-textfield-color: #2e3048; + --theme-textfield-color-active: #2e3048; + --theme-textfield-color-error: #2e3048; + --theme-textfield-color-ok: #2e3048; + --theme-textfield-background-color: #f7f7f7; + --theme-textfield-background-color-active: #f7f7f7; + --theme-textfield-border-color: #c5c2cb; + --theme-textfield-border-color-active: #c5c2cb; + --theme-textfield-border-color-error: #2e3048; + --theme-textfield-border-color-ok: #c5c2cb; + --theme-textfield-placeholder-color: rgb(22 29 26 / 60%); + + --theme-hash-input-search-status-background-color: #2e3048; + } + + [data-theme='dark'] & { + --theme-textfield-color: #fff; + --theme-textfield-color-active: #fff; + --theme-textfield-color-error: #fff; + --theme-textfield-color-ok: #fff; + --theme-textfield-background-color: #2e3048; + --theme-textfield-background-color-active: #2e3048; + --theme-textfield-border-color: #5f6178; + --theme-textfield-border-color-active: #5f6178; + --theme-textfield-border-color-error: #4b4d60; + --theme-textfield-border-color-ok: #5f6178; + --theme-textfield-placeholder-color: rgb(247 247 247 / 60%); + + --theme-hash-input-search-status-background-color: #232436; + } + + position: relative; + width: 100%; +` + +const Textfield = styled(BaseTextfield)` + display: block; + padding-right: calc(var(--base-common-padding) * 6); + position: relative; + width: 100%; + z-index: 10; +` + +const OK = styled(IconOK)` + position: absolute; + right: var(--base-common-padding-xl); + top: 50%; + transform: translateY(-50%); + z-index: 15; +` + +const SpinnerWrapper = styled.div` + align-items: center; + display: flex; + height: 100%; + justify-content: center; + position: absolute; + right: 0; + top: 0; + width: calc(var(--base-common-padding) * 6); + z-index: 15; +` + +const StatusMessage = styled.div` + align-items: center; + background-color: var(--theme-hash-input-search-status-background-color); + border: 1px solid var(--theme-textfield-border-color-error); + border-radius: var(--base-textfield-border-radius); + color: #fab754; + column-gap: var(--base-gap); + display: flex; + font-size: 1.4rem; + left: 0; + min-height: 64px; + padding: calc(var(--base-common-padding-xl) * 2) var(--base-horizontal-padding) + var(--base-common-padding-xl) var(--base-horizontal-padding); + position: absolute; + top: calc(100% - var(--base-common-padding-xl)); + width: 100%; + z-index: 5; +` + +const HashInputDemo = ({ ...restProps }) => { + const [searchResult, setSearchResult] = useState(null) + const [loading, setLoading] = useState() + const notFound = searchResult && searchResult.type === null + const found = searchResult && searchResult.type !== null + + const onLoading = (isLoading: boolean) => { + setLoading(isLoading) + } + + return ( + + ( + + )} + /> + {loading && ( + + + + )} + {found && !loading && } + {notFound && ( + + No results found + + )} + + ) +} + +export default HashInputDemo diff --git a/src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx b/src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx new file mode 100644 index 00000000..fc45de11 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx @@ -0,0 +1,97 @@ +import { useEffect, useState } from 'react' +import styled, { css } from 'styled-components' + +import { useDialog, GeneralMessage as GeneralMessageBase } from 'db-ui-toolkit' + +import { PrimaryButton } from '@/src/components/sharedComponents/Buttons' +import SignButtonBase from '@/src/components/sharedComponents/SignButton' + +const message = ` +👻🚀 Welcome to dAppBooster! 🚀👻 + +By signing this message, you acknowledge the awesome power and potential of dAppBooster. + +Empower your dApps! + +✨ Keep boosting! ✨ + +dAppBooster Team 💪 +` + +const GeneralMessage = styled(GeneralMessageBase)<{ status?: 'ok' | 'error' }>` + ${({ status }) => + status === 'ok' && + css` + --theme-general-message-icon-color: var(--theme-color-ok); + `} +` + +const Button = styled(PrimaryButton).attrs({ as: SignButtonBase })` + font-size: 1.6rem; + font-weight: 500; + height: 48px; + padding-left: calc(var(--base-common-padding) * 3); + padding-right: calc(var(--base-common-padding) * 3); +` + +const SignMessageDemo = () => { + const [state, setState] = useState<{ + signature: string | null + error: Error | null + }>({ + error: null, + signature: null, + }) + const { Dialog, close, open } = useDialog() + + useEffect(() => { + if (state.signature || state.error) { + open('sign-message') + } + }, [state.signature, state.error, open]) + + const onClose = () => { + close('sign-message') + setState({ error: null, signature: null }) + } + + const dialogTitle = state.signature ? 'Success' : state.error ? 'Error' : '' + const dialogMessage = ( + <> + {state.signature ? ( + <> + Signature: {state.signature} + + ) : state.error ? ( +
{state.error.message}
+ ) : ( + '' + )} + + ) + const dialogButton = ( + + {state.signature ? 'Close' : state.error ? 'Try again!' : ''} + + ) + + return ( + <> + + +
+ + { + close('tx-dialog') + setMinedMessage('') + }} + > + Close + + } + message={minedMessage} + status={'ok'} + title={'Transaction completed!'} + /> + + + ) + }, + { + chainId: sepolia.id, // this DEMO component only works on sepolia chain + }, +) + +export default TransactionButtonDemo diff --git a/src/components/pageComponents/home/Examples/demos/assets/Arbitrum.tsx b/src/components/pageComponents/home/Examples/demos/assets/Arbitrum.tsx new file mode 100644 index 00000000..b49b4ded --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/assets/Arbitrum.tsx @@ -0,0 +1,47 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; + width: 24px; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + + + + + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/demos/assets/Base.tsx b/src/components/pageComponents/home/Examples/demos/assets/Base.tsx new file mode 100644 index 00000000..72aa4760 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/assets/Base.tsx @@ -0,0 +1,20 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; + width: 24px; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/demos/assets/Eth.tsx b/src/components/pageComponents/home/Examples/demos/assets/Eth.tsx new file mode 100644 index 00000000..f54cc5ff --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/assets/Eth.tsx @@ -0,0 +1,46 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; + height: 24px; + width: 24px; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + + + + + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/demos/assets/Optimism.tsx b/src/components/pageComponents/home/Examples/demos/assets/Optimism.tsx new file mode 100644 index 00000000..0a7d07c2 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/assets/Optimism.tsx @@ -0,0 +1,32 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; + height: 24px; + width: 24px; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/demos/assets/Polygon.tsx b/src/components/pageComponents/home/Examples/demos/assets/Polygon.tsx new file mode 100644 index 00000000..41026794 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/assets/Polygon.tsx @@ -0,0 +1,25 @@ +import { type FC, type HTMLAttributes } from 'react' +import { styled } from 'styled-components' + +const Wrapper = styled.svg` + display: block; + flex-shrink: 0; + height: 24px; +` + +const Icon: FC> = ({ ...restProps }) => ( + + + + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/index.tsx b/src/components/pageComponents/home/Examples/index.tsx new file mode 100644 index 00000000..9b23e575 --- /dev/null +++ b/src/components/pageComponents/home/Examples/index.tsx @@ -0,0 +1,179 @@ +import { type FC, type HTMLAttributes } from 'react' +import styled, { css } from 'styled-components' + +import { InnerContainer as Inner, ContainerPadding, breakpointMediaQuery } from 'db-ui-toolkit' +import { mainnet } from 'viem/chains' +import { useAccount } from 'wagmi' + +import { Props as ItemProps } from '@/src/components/pageComponents/home/Examples/Item' +import List from '@/src/components/pageComponents/home/Examples/List' +import ImgAvatar from '@/src/components/pageComponents/home/Examples/assets/Avatar' +import ImgEns from '@/src/components/pageComponents/home/Examples/assets/Ens' +import ImgHash from '@/src/components/pageComponents/home/Examples/assets/Hash' +import ImgInputAddress from '@/src/components/pageComponents/home/Examples/assets/InputAddress' +import ImgSign from '@/src/components/pageComponents/home/Examples/assets/Sign' +import ImgSubgraph from '@/src/components/pageComponents/home/Examples/assets/Subgraph' +import ImgSubgraphStatus from '@/src/components/pageComponents/home/Examples/assets/SubgraphStatus' +import ImgSwitch from '@/src/components/pageComponents/home/Examples/assets/Switch' +import ImgTokenInput from '@/src/components/pageComponents/home/Examples/assets/TokenInput' +import ImgTokenList from '@/src/components/pageComponents/home/Examples/assets/TokenList' +import ImgTransaction from '@/src/components/pageComponents/home/Examples/assets/Transaction' +import ImgUserCheck from '@/src/components/pageComponents/home/Examples/assets/UserCheck' +import ImgWallet from '@/src/components/pageComponents/home/Examples/assets/Wallet' +import AvatarDemo from '@/src/components/pageComponents/home/Examples/demos/AvatarDemo' +import ERC20ApproveAndTransferButtonDemo from '@/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo' +import EnsNameDemo from '@/src/components/pageComponents/home/Examples/demos/EnsNameDemo' +import HashDemo from '@/src/components/pageComponents/home/Examples/demos/HashDemo' +import HashInputDemo from '@/src/components/pageComponents/home/Examples/demos/HashInputDemo' +import SignMessageDemo from '@/src/components/pageComponents/home/Examples/demos/SignMessageDemo' +import SubgraphDemo from '@/src/components/pageComponents/home/Examples/demos/SubgraphDemo' +import SubgraphStatusDemo from '@/src/components/pageComponents/home/Examples/demos/SubgraphStatusDemo' +import SwitchNetworkDemo from '@/src/components/pageComponents/home/Examples/demos/SwitchNetworkDemo' +import TokenDropdownDemo from '@/src/components/pageComponents/home/Examples/demos/TokenDropdownDemo' +import TokenInputDemo from '@/src/components/pageComponents/home/Examples/demos/TokenInputDemo' +import TransactionButtonDemo from '@/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo' +import { ConnectWalletButton as ConnectWalletButtonDemo } from '@/src/providers/Web3Provider' + +const Wrapper = styled.section` + [data-theme='light'] & { + --landing-page-main-background-color: #f7f7f7; + } + + [data-theme='dark'] & { + --landing-page-main-background-color: #2e3048; + } + + background-color: var(--landing-page-main-background-color); + flex-grow: 1; +` + +const InnerContainer = styled(Inner)` + align-items: center; + flex-direction: column; + padding-bottom: 50px; + padding-top: 50px; + + ${breakpointMediaQuery( + 'tabletPortraitStart', + css` + padding-bottom: 100px; + padding-top: 100px; + `, + )} + + ${ContainerPadding} +` + +const Examples: FC> = ({ ...restProps }) => { + const { address = '0x87885AaEEdED51C7e3858a782644F5d89759f245' } = useAccount() + const items: ItemProps[] = [ + { + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/index.html#md:wallet-setup', + icon: , + text: 'Authenticate using an EVM Account', + title: 'Wallet connectivity', + }, + { + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_Hash.Hash.html', + icon: , + text: 'Validate address, ENS or transaction hash', + title: 'Hash input', + }, + { + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_TokenDropdown.TokenDropdown.html', + icon: , + text: 'Dynamic token list dropdown', + title: 'Token dropdown', + }, + { + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_TokenInput.TokenInput.html', + icon: , + text: 'Input with max, user balance, decimals', + title: 'Token input', + }, + { + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_TokenInput.TokenInput.html', + icon: , + text: 'Input with max, user balance, decimals', + title: 'Token input single token', + }, + { + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_SwitchNetwork.SwitchNetwork.html', + icon: , + text: 'Add or switch networks', + title: 'Add / switch network', + }, + { + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_Hash.Hash.html', + icon: , + text: 'Copy, open in explorer', + title: 'Hash component', + }, + { + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_Avatar.Avatar.html', + icon: , + text: 'Address blockie avatar image', + title: 'Avatar', + }, + { + demo: , + href: 'https://github.com/BootNodeDev/dAppBooster#subgraphs', + icon: , + text: 'Support for connecting with subgraphs', + title: 'Subgraph', + }, + { + demo: , + href: 'https://github.com/BootNodeDev/dAppBooster#subgraphs', + icon: , + text: 'Subgraph syncing status', + title: 'Subgraph status', + }, + { + demo: , + href: 'https://github.com/BootNodeDev/dAppBooster/blob/86a7b001d4e48b41b3a463f844a83f632eae8c39/src/pageComponents/home/Examples/demos/EnsNameDemo.tsx#L63', + icon: , + text: 'Resolve ENS names', + title: 'ENS name', + }, + { + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_TransactionButton.TransactionButton.html', + icon: , + text: 'Send tokens from / to your address', + title: 'Tx button', + }, + { + demo: , + href: 'https://github.com/BootNodeDev/dAppBooster/blob/86a7b001d4e48b41b3a463f844a83f632eae8c39/src/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx#L33', + icon: , + text: 'Checks allowance and combines the approval and transaction buttons into one component', + title: 'ERC20 approve and transfer', + }, + { + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_SignButton.SignButton.html', + icon: , + text: 'Sign a message and get the signature', + title: 'Sign button', + }, + ] + + return ( + + + + + + ) +} + +export default Examples From 56d592f599dea22d70cf5cb99a021cdc58123735 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Thu, 15 Aug 2024 15:41:43 -0300 Subject: [PATCH 008/228] feat: add landing page home --- src/components/pageComponents/home/index.tsx | 110 ++----------------- 1 file changed, 12 insertions(+), 98 deletions(-) diff --git a/src/components/pageComponents/home/index.tsx b/src/components/pageComponents/home/index.tsx index 65c6b08f..63f550c0 100644 --- a/src/components/pageComponents/home/index.tsx +++ b/src/components/pageComponents/home/index.tsx @@ -1,108 +1,22 @@ -/** - * Home page example - * - * You can safely delete the contents of this file and start from scratch, - * just make sure to keep the file itself and export a component named Home. - */ import styled from 'styled-components' -import { Card, Title } from 'db-ui-toolkit' +import Examples from '@/src/components/pageComponents/home/Examples' +import Welcome from '@/src/components/pageComponents/home/Welcome' -/** - * A centered custom card component - */ -const CustomCard = styled(Card)` - margin: auto; - max-width: 90%; - - a { - text-decoration: none; - - &:hover { - text-decoration: underline; - } - } -` - -/** - * A styled ul tag - */ -const Ul = styled.ul` +const Wrapper = styled.div` display: flex; flex-direction: column; - font-size: 1.5rem; - list-style: circle; - padding-left: calc(var(--base-common-padding-xl) + var(--base-common-padding)); - row-gap: var(--base-gap-xl); - - ul { - padding-bottom: var(--base-common-padding-xl); - padding-top: var(--base-common-padding-xl); - row-gap: var(--base-gap); - } -` - -/** - * A styled pre tag - */ -const Code = styled.pre` - background-color: #f5f5f5; - border-radius: 5px; - font-size: 1.3rem; - margin: var(--base-gap) 0 0; - padding: 4px 10px; - white-space: normal; - word-break: break-all; + flex-grow: 1; + margin-top: calc(var(--base-header-height) * -1); + position: relative; + width: 100%; ` -export const Home = () => { +export const Home = ({ ...restProps }) => { return ( - // You can safely delete this. - - Getting started -
    -
  • - - dAppBooster demo - - : a fully functional dAppBooster dApp with plenty of examples. -
  • -
  • - {/* TODO: Replace by correct link when the fork is ready */} - - Demo's source code on GitHub - -
  • -
  • - - Components documentation - -
  • -
  • - Where to start? -
      -
    • - Home page src/components/pageComponents/home/index.tsx -
    • -
    • - Header src/components/sharedComponents/Header.tsx -
    • -
    • - Footer src/components/sharedComponents/Footer/index.tsx -
    • -
    • - App layout src/routes/__root.tsx -
    • -
    • - Home route src/routes/index.lazy.tsx -
    • -
    -
  • -
-
+ + + + ) } From bbf0f87b62cda34c86f33efee686a596cd249360 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Thu, 15 Aug 2024 16:28:04 -0300 Subject: [PATCH 009/228] feat: add single token component and styles to TokenInput --- .../TokenInput/Components.tsx | 46 ++++++++++--------- .../sharedComponents/TokenInput/index.tsx | 34 +++++++++----- 2 files changed, 47 insertions(+), 33 deletions(-) diff --git a/src/components/sharedComponents/TokenInput/Components.tsx b/src/components/sharedComponents/TokenInput/Components.tsx index fa4c6633..9a277899 100644 --- a/src/components/sharedComponents/TokenInput/Components.tsx +++ b/src/components/sharedComponents/TokenInput/Components.tsx @@ -90,28 +90,12 @@ export const ChevronDown = styled(BaseChevronDown)` margin-left: var(--base-gap); ` -export const DropdownButton = styled(Button).attrs<{ singleOption?: boolean }>( - ({ children, singleOption }) => { - return { - className: 'tokenInputDropdownButton', - children: ( - <> - {children} - {!singleOption && } - - ), - } - }, -)` - /* Dropdown button */ +const ButtonCSS = css` --theme-button-background-color: var(--theme-token-input-dropdown-button-background-color, #fff); --theme-button-background-color-hover: var( --theme-token-input-dropdown-button-background-color-hover, rgb(0 0 0 / 5%) ); - ${(props) => props.singleOption && '--theme-button-background-color: transparent;'} - ${(props) => props.singleOption && '--theme-button-background-color-hover: transparent;'} - --theme-button-border-color: var(--theme-token-input-dropdown-button-border-color, #e2e0e7); --theme-button-border-color-hover: var( --theme-token-input-dropdown-button-border-color-hover, @@ -121,18 +105,15 @@ export const DropdownButton = styled(Button).attrs<{ singleOption?: boolean }>( --theme-token-input-dropdown-button-border-color-active, #e2e0e7 ); - ${(props) => props.singleOption && 'border: none;'} - --theme-button-color: var(--theme-token-input-dropdown-button-color, #2e3048); --theme-button-color-hover: var(--theme-token-input-dropdown-button-color-hover, #2e3048); + flex-shrink: 0; font-size: 1.2rem; font-weight: 500; - flex-shrink: 0; height: auto; min-width: 100px; padding: var(--base-token-input-dropdown-button-padding, 0 var(--base-common-padding)); - ${(props) => props.singleOption && 'cursor: auto;'} ${breakpointMediaQuery( 'tabletPortraitStart', @@ -143,6 +124,29 @@ export const DropdownButton = styled(Button).attrs<{ singleOption?: boolean }>( )} ` +export const DropdownButton = styled(Button).attrs(({ children }) => { + return { + className: 'tokenInputDropdownButton', + children: ( + <> + {children} + + + ), + } +})` + ${ButtonCSS} +` + +export const SingleToken = styled.div.attrs({ className: 'tokenInputSingleToken' })` + align-items: center; + column-gap: var(--base-button-column-gap, var(--base-gap, 8px)); + cursor: default; + display: flex; + + ${ButtonCSS} +` + export const Error = styled.span` color: var(--theme-color-danger); font-weight: 700; diff --git a/src/components/sharedComponents/TokenInput/index.tsx b/src/components/sharedComponents/TokenInput/index.tsx index b7a1c15e..72f1e397 100644 --- a/src/components/sharedComponents/TokenInput/index.tsx +++ b/src/components/sharedComponents/TokenInput/index.tsx @@ -21,6 +21,7 @@ import { EstimatedUSDValue, Icon, MaxButton, + SingleToken, Textfield, Title, TopRow, @@ -196,6 +197,18 @@ const TokenInput: FC = ({ return
When single token is true, a token is required.
} + const CurrentToken = () => + selectedToken ? ( + <> + + + + {selectedToken.symbol} + + ) : ( + 'Select' + ) + return ( <> @@ -217,18 +230,15 @@ const TokenInput: FC = ({ )} value={amount} /> - - {selectedToken ? ( - <> - - - - {selectedToken.symbol} - - ) : ( - 'Select' - )} - + {singleToken ? ( + + + + ) : ( + + + + )} ~$0.00 From e8085a38301d2dcb19d940d7e37334db0ce63e6b Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Thu, 15 Aug 2024 16:41:23 -0300 Subject: [PATCH 010/228] fix: connect button font-size --- src/components/sharedComponents/Header.tsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/components/sharedComponents/Header.tsx b/src/components/sharedComponents/Header.tsx index 0fbaed33..ec909756 100644 --- a/src/components/sharedComponents/Header.tsx +++ b/src/components/sharedComponents/Header.tsx @@ -92,6 +92,16 @@ const End = styled.div` )} ` +const ConnectButton = styled(ConnectWalletButton)` + ${breakpointMediaQuery( + 'desktopStart', + css` + font-size: 1.5rem; + height: 48px; + `, + )} +` + export const Header: FC> = ({ ...restProps }) => { const { setTheme, theme } = useTheme() @@ -106,7 +116,7 @@ export const Header: FC> = ({ ...restProps }) => { setTheme(theme === 'light' ? 'dark' : 'light')} /> - + From 96eba90f48c45182440fd6e41ddccb626ed1fb3e Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Thu, 15 Aug 2024 18:58:30 -0300 Subject: [PATCH 011/228] fix: item padding --- src/components/pageComponents/home/Examples/Item/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/pageComponents/home/Examples/Item/index.tsx b/src/components/pageComponents/home/Examples/Item/index.tsx index a324a5ae..c84c8214 100644 --- a/src/components/pageComponents/home/Examples/Item/index.tsx +++ b/src/components/pageComponents/home/Examples/Item/index.tsx @@ -105,7 +105,7 @@ const Demo = styled.div` flex: 1; justify-content: center; min-width: 0; - padding: calc(var(--base-common-padding) * 6) var(--base-common-padding) + padding: calc(var(--base-common-padding) * 7) var(--base-common-padding) calc(var(--base-common-padding) * 4); position: relative; @@ -113,7 +113,7 @@ const Demo = styled.div` 'tabletPortraitStart', css` min-height: 205px; - padding: calc(var(--base-common-padding) * 6) calc(var(--base-common-padding) * 3) + padding: calc(var(--base-common-padding) * 7) calc(var(--base-common-padding) * 3) calc(var(--base-common-padding) * 3); `, )}; From dd6d756b13dcc141705f45e5577eec1e5278ca26 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Thu, 15 Aug 2024 19:12:38 -0300 Subject: [PATCH 012/228] chore: remove avatar demo --- .../home/Examples/assets/Avatar.tsx | 25 --------- .../home/Examples/demos/AvatarDemo.test.tsx | 52 ------------------- .../home/Examples/demos/AvatarDemo.tsx | 29 ----------- .../pageComponents/home/Examples/index.tsx | 30 +++++------ 4 files changed, 13 insertions(+), 123 deletions(-) delete mode 100644 src/components/pageComponents/home/Examples/assets/Avatar.tsx delete mode 100644 src/components/pageComponents/home/Examples/demos/AvatarDemo.test.tsx delete mode 100644 src/components/pageComponents/home/Examples/demos/AvatarDemo.tsx diff --git a/src/components/pageComponents/home/Examples/assets/Avatar.tsx b/src/components/pageComponents/home/Examples/assets/Avatar.tsx deleted file mode 100644 index 8c06dcbb..00000000 --- a/src/components/pageComponents/home/Examples/assets/Avatar.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { type FC, type HTMLAttributes } from 'react' -import { styled } from 'styled-components' - -const Wrapper = styled.svg` - display: block; - flex-shrink: 0; -` - -const Icon: FC> = ({ ...restProps }) => ( - - - -) - -export default Icon diff --git a/src/components/pageComponents/home/Examples/demos/AvatarDemo.test.tsx b/src/components/pageComponents/home/Examples/demos/AvatarDemo.test.tsx deleted file mode 100644 index 00d9df94..00000000 --- a/src/components/pageComponents/home/Examples/demos/AvatarDemo.test.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { render, screen } from '@testing-library/react' -import { type Mock, describe, expect, it, vi } from 'vitest' -import { useEnsName, useEnsAvatar } from 'wagmi' - -import Avatar from '@/src/components/pageComponents/home/Examples/demos/AvatarDemo' - -// Mock wagmi hooks -vi.mock('wagmi', () => ({ - useEnsName: vi.fn(), - useEnsAvatar: vi.fn(), -})) - -const mockSize = 50 -const mockAddress = '0x1234567890abcdef1234567890abcdef12345678' -const mockEnsName = 'test.eth' -const mockAvatarImg = 'avatar.png' - -describe('Avatar Component', () => { - it('renders CustomAvatar with ensName and avatarImg', () => { - // Mock the hook return values - ;(useEnsName as Mock).mockReturnValue({ data: mockEnsName }) - ;(useEnsAvatar as Mock).mockReturnValue({ data: mockAvatarImg }) - - render() - - expect(screen.getByAltText(mockEnsName)).toBeInTheDocument() - const img = screen.getByRole('img') - expect(img).toHaveAttribute('src', mockAvatarImg) - - // Expect the image to have the correct size - expect(img.parentElement).toHaveStyle({ - width: `${mockSize}px`, - height: `${mockSize}px`, - }) - }) - - it('renders Jazzicon (without ensAvatar image)', () => { - ;(useEnsName as Mock).mockReturnValue({ data: mockEnsName }) - ;(useEnsAvatar as Mock).mockReturnValue({ data: undefined }) - - render() - - // Expect Jazzicon to be rendered - expect(screen.getByTestId('avatar-icon')).toBeInTheDocument() - - // Expect the icon to have the correct size - expect(screen.getByTestId('avatar-icon').parentElement).toHaveStyle({ - width: `${mockSize}px`, - height: `${mockSize}px`, - }) - }) -}) diff --git a/src/components/pageComponents/home/Examples/demos/AvatarDemo.tsx b/src/components/pageComponents/home/Examples/demos/AvatarDemo.tsx deleted file mode 100644 index b814b60f..00000000 --- a/src/components/pageComponents/home/Examples/demos/AvatarDemo.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { type Address } from 'viem' -import { normalize } from 'viem/ens' -import { useEnsName, useEnsAvatar } from 'wagmi' - -import BaseAvatar from '@/src/components/sharedComponents/Avatar' - -interface Props { - address: Address - size: number -} - -/** - * Avatar component using wagmi hooks to fetch ENS name and avatar image for the provided address. - * - * @param {string} props.address - The address - * @param {number} props.size - The size of the avatar - * @example - */ -const AvatarDemo = ({ address, size }: Props) => { - const { data: ensName } = useEnsName({ address }) - - const { data: avatarImg } = useEnsAvatar({ - name: ensName ? normalize(ensName) : undefined, - }) - - return -} - -export default AvatarDemo diff --git a/src/components/pageComponents/home/Examples/index.tsx b/src/components/pageComponents/home/Examples/index.tsx index 9b23e575..4084c9a0 100644 --- a/src/components/pageComponents/home/Examples/index.tsx +++ b/src/components/pageComponents/home/Examples/index.tsx @@ -7,7 +7,6 @@ import { useAccount } from 'wagmi' import { Props as ItemProps } from '@/src/components/pageComponents/home/Examples/Item' import List from '@/src/components/pageComponents/home/Examples/List' -import ImgAvatar from '@/src/components/pageComponents/home/Examples/assets/Avatar' import ImgEns from '@/src/components/pageComponents/home/Examples/assets/Ens' import ImgHash from '@/src/components/pageComponents/home/Examples/assets/Hash' import ImgInputAddress from '@/src/components/pageComponents/home/Examples/assets/InputAddress' @@ -20,7 +19,6 @@ import ImgTokenList from '@/src/components/pageComponents/home/Examples/assets/T import ImgTransaction from '@/src/components/pageComponents/home/Examples/assets/Transaction' import ImgUserCheck from '@/src/components/pageComponents/home/Examples/assets/UserCheck' import ImgWallet from '@/src/components/pageComponents/home/Examples/assets/Wallet' -import AvatarDemo from '@/src/components/pageComponents/home/Examples/demos/AvatarDemo' import ERC20ApproveAndTransferButtonDemo from '@/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo' import EnsNameDemo from '@/src/components/pageComponents/home/Examples/demos/EnsNameDemo' import HashDemo from '@/src/components/pageComponents/home/Examples/demos/HashDemo' @@ -71,7 +69,19 @@ const Examples: FC> = ({ ...restProps }) => { demo: , href: 'https://bootnodedev.github.io/dAppBooster/index.html#md:wallet-setup', icon: , - text: 'Authenticate using an EVM Account', + text: ( + <> + Connect to and disconnect from a cryptocurrency wallet, display your{' '} + + avatar + {' '} + and address + + ), title: 'Wallet connectivity', }, { @@ -95,13 +105,6 @@ const Examples: FC> = ({ ...restProps }) => { text: 'Input with max, user balance, decimals', title: 'Token input', }, - { - demo: , - href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_TokenInput.TokenInput.html', - icon: , - text: 'Input with max, user balance, decimals', - title: 'Token input single token', - }, { demo: , href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_SwitchNetwork.SwitchNetwork.html', @@ -116,13 +119,6 @@ const Examples: FC> = ({ ...restProps }) => { text: 'Copy, open in explorer', title: 'Hash component', }, - { - demo: , - href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_Avatar.Avatar.html', - icon: , - text: 'Address blockie avatar image', - title: 'Avatar', - }, { demo: , href: 'https://github.com/BootNodeDev/dAppBooster#subgraphs', From 16d6ac8f60ccfb7c9afbcfeff9821428ce3102ab Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Fri, 16 Aug 2024 15:36:25 -0300 Subject: [PATCH 013/228] fix: remove console.log --- src/components/sharedComponents/TokenInput/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/sharedComponents/TokenInput/index.tsx b/src/components/sharedComponents/TokenInput/index.tsx index 72f1e397..ae5161bf 100644 --- a/src/components/sharedComponents/TokenInput/index.tsx +++ b/src/components/sharedComponents/TokenInput/index.tsx @@ -165,7 +165,6 @@ const TokenInput: FC = ({ ) const handleSetAmount = (amount: string) => { - console.log('amount', amount) setAmount(amount) onAmountSet(amount) } From 4e0805660efd64fcb7d55557b66e1d37e86a5247 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Fri, 16 Aug 2024 17:05:52 -0300 Subject: [PATCH 014/228] refactor: hashinput / hash demos --- .../home/Examples/demos/HashDemo.tsx | 14 ++- .../home/Examples/demos/HashInputDemo.tsx | 91 ++++++++++++++----- .../pageComponents/home/Examples/index.tsx | 34 +++---- 3 files changed, 94 insertions(+), 45 deletions(-) diff --git a/src/components/pageComponents/home/Examples/demos/HashDemo.tsx b/src/components/pageComponents/home/Examples/demos/HashDemo.tsx index 846d8f20..c5c2a1f2 100644 --- a/src/components/pageComponents/home/Examples/demos/HashDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/HashDemo.tsx @@ -1,3 +1,4 @@ +import { type FC } from 'react' import styled from 'styled-components' import { Toast } from 'db-ui-toolkit' @@ -10,7 +11,7 @@ import { getExplorerLink } from '@/src/utils/getExplorerLink' const Wrapper = styled(Hash)` [data-theme='light'] & { --theme-hash-background-color: #fff; - --theme-hash-border-color: #e2e0e7; + --theme-hash-border-color: #c5c2cb; --theme-hash-color: #2e3048; } @@ -27,12 +28,14 @@ const Wrapper = styled(Hash)` cursor: default; font-size: 1.6rem; height: 34px; + min-width: 0; padding: 0 calc(var(--base-common-padding) * 2); ` interface Props { chain: Chain - hash: Address + hash: Address | undefined + truncatedHashLength?: number | 'disabled' } /** @@ -41,7 +44,7 @@ interface Props { * Some styles were added. Also we show a toast when the copy button is clicked * to let the user know that something has happened. */ -const HashDemo = ({ chain, hash }: Props) => { +const HashDemo: FC = ({ chain, hash, ...restProps }) => { const onCopy = (message: string) => { const timeDelay = 2500 @@ -53,14 +56,15 @@ const HashDemo = ({ chain, hash }: Props) => { }) } - return ( + return hash ? ( onCopy(hash)} showCopyButton + {...restProps} /> - ) + ) : null } export default HashDemo diff --git a/src/components/pageComponents/home/Examples/demos/HashInputDemo.tsx b/src/components/pageComponents/home/Examples/demos/HashInputDemo.tsx index 0d6a0bbe..d4decb4f 100644 --- a/src/components/pageComponents/home/Examples/demos/HashInputDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/HashInputDemo.tsx @@ -1,10 +1,13 @@ import { useState } from 'react' -import styled from 'styled-components' +import styled, { css } from 'styled-components' -import { Textfield as BaseTextfield, Spinner } from 'db-ui-toolkit' -import { mainnet } from 'viem/chains' +import { Textfield as BaseTextfield, Spinner, breakpointMediaQuery } from 'db-ui-toolkit' +import { type Address } from 'viem' +import * as chains from 'viem/chains' +import HashDemo from '@/src/components/pageComponents/home/Examples/demos/HashDemo' import HashInput from '@/src/components/sharedComponents/HashInput' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' import { DetectedHash } from '@/src/utils/hash' const AlertIcon = () => ( @@ -36,6 +39,13 @@ const IconOK = ({ ...restProps }) => ( ) const Wrapper = styled.div` + position: relative; + width: 100%; + display: grid; + row-gap: var(--base-gap); +` + +const InputWrapper = styled.div` --base-horizontal-padding: var(--base-common-padding-xl); --base-textfield-padding: 0 var(--base-horizontal-padding); --base-textfield-border-radius: var(--base-border-radius); @@ -123,41 +133,74 @@ const StatusMessage = styled.div` z-index: 5; ` +const HashExplorer = styled(HashDemo)` + font-size: 1.4rem; + width: 100%; + + ${breakpointMediaQuery( + 'tabletPortraitStart', + css` + position: absolute; + top: calc(100% + var(--base-gap)); + `, + )} +` + +/** + * This demo shows how to use the HashInput and Hash components. + * + * We use `HashInput` to validate an address or tx hash, and `Hash` to allow the + * user to copy it or open it in an block explorer. + */ const HashInputDemo = ({ ...restProps }) => { const [searchResult, setSearchResult] = useState(null) const [loading, setLoading] = useState() const notFound = searchResult && searchResult.type === null const found = searchResult && searchResult.type !== null + const { isWalletConnected, walletChainId } = useWeb3Status() const onLoading = (isLoading: boolean) => { setLoading(isLoading) } + const findChain = (chainId: number) => Object.values(chains).find((chain) => chain.id === chainId) + + // mainnet is the default chain if not connected or the chain is not found + const currentChain = + isWalletConnected && walletChainId ? findChain(walletChainId) || chains.mainnet : chains.mainnet + return ( - ( - + + ( + + )} + /> + {loading && ( + + + + )} + {found && !loading && } + {notFound && ( + + No results found + )} + + - {loading && ( - - - - )} - {found && !loading && } - {notFound && ( - - No results found - - )} ) } diff --git a/src/components/pageComponents/home/Examples/index.tsx b/src/components/pageComponents/home/Examples/index.tsx index 4084c9a0..8831a6c9 100644 --- a/src/components/pageComponents/home/Examples/index.tsx +++ b/src/components/pageComponents/home/Examples/index.tsx @@ -2,13 +2,10 @@ import { type FC, type HTMLAttributes } from 'react' import styled, { css } from 'styled-components' import { InnerContainer as Inner, ContainerPadding, breakpointMediaQuery } from 'db-ui-toolkit' -import { mainnet } from 'viem/chains' -import { useAccount } from 'wagmi' import { Props as ItemProps } from '@/src/components/pageComponents/home/Examples/Item' import List from '@/src/components/pageComponents/home/Examples/List' import ImgEns from '@/src/components/pageComponents/home/Examples/assets/Ens' -import ImgHash from '@/src/components/pageComponents/home/Examples/assets/Hash' import ImgInputAddress from '@/src/components/pageComponents/home/Examples/assets/InputAddress' import ImgSign from '@/src/components/pageComponents/home/Examples/assets/Sign' import ImgSubgraph from '@/src/components/pageComponents/home/Examples/assets/Subgraph' @@ -21,7 +18,6 @@ import ImgUserCheck from '@/src/components/pageComponents/home/Examples/assets/U import ImgWallet from '@/src/components/pageComponents/home/Examples/assets/Wallet' import ERC20ApproveAndTransferButtonDemo from '@/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo' import EnsNameDemo from '@/src/components/pageComponents/home/Examples/demos/EnsNameDemo' -import HashDemo from '@/src/components/pageComponents/home/Examples/demos/HashDemo' import HashInputDemo from '@/src/components/pageComponents/home/Examples/demos/HashInputDemo' import SignMessageDemo from '@/src/components/pageComponents/home/Examples/demos/SignMessageDemo' import SubgraphDemo from '@/src/components/pageComponents/home/Examples/demos/SubgraphDemo' @@ -63,7 +59,6 @@ const InnerContainer = styled(Inner)` ` const Examples: FC> = ({ ...restProps }) => { - const { address = '0x87885AaEEdED51C7e3858a782644F5d89759f245' } = useAccount() const items: ItemProps[] = [ { demo: , @@ -79,7 +74,7 @@ const Examples: FC> = ({ ...restProps }) => { > avatar {' '} - and address + and address. ), title: 'Wallet connectivity', @@ -88,8 +83,13 @@ const Examples: FC> = ({ ...restProps }) => { demo: , href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_Hash.Hash.html', icon: , - text: 'Validate address, ENS or transaction hash', - title: 'Hash input', + text: ( + <> + Validate an address or hash. Also copy or open it in the block explorer for the chain your + wallet is connected to (defaults to mainnet) + + ), + title: 'Hash handling', }, { demo: , @@ -112,13 +112,7 @@ const Examples: FC> = ({ ...restProps }) => { text: 'Add or switch networks', title: 'Add / switch network', }, - { - demo: , - href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_Hash.Hash.html', - icon: , - text: 'Copy, open in explorer', - title: 'Hash component', - }, + { demo: , href: 'https://github.com/BootNodeDev/dAppBooster#subgraphs', @@ -137,7 +131,15 @@ const Examples: FC> = ({ ...restProps }) => { demo: , href: 'https://github.com/BootNodeDev/dAppBooster/blob/86a7b001d4e48b41b3a463f844a83f632eae8c39/src/pageComponents/home/Examples/demos/EnsNameDemo.tsx#L63', icon: , - text: 'Resolve ENS names', + text: ( + <> + Resolve{' '} + + ENS + {' '} + names + + ), title: 'ENS name', }, { From e31ba0756274b65c2fcefaf465ebb60a58426631 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Fri, 16 Aug 2024 17:19:58 -0300 Subject: [PATCH 015/228] fix: demo styles --- .../pageComponents/home/Examples/Item/index.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/components/pageComponents/home/Examples/Item/index.tsx b/src/components/pageComponents/home/Examples/Item/index.tsx index c84c8214..87426dc6 100644 --- a/src/components/pageComponents/home/Examples/Item/index.tsx +++ b/src/components/pageComponents/home/Examples/Item/index.tsx @@ -81,13 +81,17 @@ const Title = styled.h2` ` const Text = styled.p` - color: var(--theme-color-text-primary); font-size: 1.6rem; font-weight: 500; line-height: 1.5; margin: 0; text-align: center; + &, + & a { + color: var(--theme-color-text-primary); + } + ${breakpointMediaQuery( 'tabletPortraitStart', css` @@ -105,16 +109,15 @@ const Demo = styled.div` flex: 1; justify-content: center; min-width: 0; - padding: calc(var(--base-common-padding) * 7) var(--base-common-padding) - calc(var(--base-common-padding) * 4); + padding: calc(var(--base-common-padding) * 6) var(--base-common-padding) + calc(var(--base-common-padding) * 3); position: relative; ${breakpointMediaQuery( 'tabletPortraitStart', css` min-height: 205px; - padding: calc(var(--base-common-padding) * 7) calc(var(--base-common-padding) * 3) - calc(var(--base-common-padding) * 3); + padding: calc(var(--base-common-padding) * 4) calc(var(--base-common-padding) * 3); `, )}; ` @@ -131,7 +134,7 @@ export interface Props extends HTMLAttributes { demo: ReactNode href?: string icon: ReactNode - text: string + text: string | ReactNode title: string } From d87a9fa6fbefc3e676d9e30985dbfd95bec0e2eb Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Fri, 16 Aug 2024 17:24:05 -0300 Subject: [PATCH 016/228] refactor: change component name --- .../demos/{HashInputDemo.tsx => HashHandlingDemo.tsx} | 4 ++-- src/components/pageComponents/home/Examples/index.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename src/components/pageComponents/home/Examples/demos/{HashInputDemo.tsx => HashHandlingDemo.tsx} (98%) diff --git a/src/components/pageComponents/home/Examples/demos/HashInputDemo.tsx b/src/components/pageComponents/home/Examples/demos/HashHandlingDemo.tsx similarity index 98% rename from src/components/pageComponents/home/Examples/demos/HashInputDemo.tsx rename to src/components/pageComponents/home/Examples/demos/HashHandlingDemo.tsx index d4decb4f..b8056b55 100644 --- a/src/components/pageComponents/home/Examples/demos/HashInputDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/HashHandlingDemo.tsx @@ -152,7 +152,7 @@ const HashExplorer = styled(HashDemo)` * We use `HashInput` to validate an address or tx hash, and `Hash` to allow the * user to copy it or open it in an block explorer. */ -const HashInputDemo = ({ ...restProps }) => { +const HashHandlingDemo = ({ ...restProps }) => { const [searchResult, setSearchResult] = useState(null) const [loading, setLoading] = useState() const notFound = searchResult && searchResult.type === null @@ -205,4 +205,4 @@ const HashInputDemo = ({ ...restProps }) => { ) } -export default HashInputDemo +export default HashHandlingDemo diff --git a/src/components/pageComponents/home/Examples/index.tsx b/src/components/pageComponents/home/Examples/index.tsx index 8831a6c9..b8000f1a 100644 --- a/src/components/pageComponents/home/Examples/index.tsx +++ b/src/components/pageComponents/home/Examples/index.tsx @@ -18,7 +18,7 @@ import ImgUserCheck from '@/src/components/pageComponents/home/Examples/assets/U import ImgWallet from '@/src/components/pageComponents/home/Examples/assets/Wallet' import ERC20ApproveAndTransferButtonDemo from '@/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo' import EnsNameDemo from '@/src/components/pageComponents/home/Examples/demos/EnsNameDemo' -import HashInputDemo from '@/src/components/pageComponents/home/Examples/demos/HashInputDemo' +import HashHandlingDemo from '@/src/components/pageComponents/home/Examples/demos/HashHandlingDemo' import SignMessageDemo from '@/src/components/pageComponents/home/Examples/demos/SignMessageDemo' import SubgraphDemo from '@/src/components/pageComponents/home/Examples/demos/SubgraphDemo' import SubgraphStatusDemo from '@/src/components/pageComponents/home/Examples/demos/SubgraphStatusDemo' @@ -80,7 +80,7 @@ const Examples: FC> = ({ ...restProps }) => { title: 'Wallet connectivity', }, { - demo: , + demo: , href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_Hash.Hash.html', icon: , text: ( From df9b0104cc581cdf283054557336890f1e150c36 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Fri, 16 Aug 2024 17:25:28 -0300 Subject: [PATCH 017/228] fix: change wording --- .../pageComponents/home/Examples/index.tsx | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/components/pageComponents/home/Examples/index.tsx b/src/components/pageComponents/home/Examples/index.tsx index b8000f1a..0683adf2 100644 --- a/src/components/pageComponents/home/Examples/index.tsx +++ b/src/components/pageComponents/home/Examples/index.tsx @@ -85,8 +85,8 @@ const Examples: FC> = ({ ...restProps }) => { icon: , text: ( <> - Validate an address or hash. Also copy or open it in the block explorer for the chain your - wallet is connected to (defaults to mainnet) + Validate an address or hash. Copy or open it in the block explorer for the chain your + wallet is connected to (defaults to mainnet). ), title: 'Hash handling', @@ -95,7 +95,19 @@ const Examples: FC> = ({ ...restProps }) => { demo: , href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_TokenDropdown.TokenDropdown.html', icon: , - text: 'Dynamic token list dropdown', + text: ( + <> + Allows you to search or select tokens from a list. Uses oure{' '} + + TokenSelect + {' '} + component internally. + + ), title: 'Token dropdown', }, { @@ -109,7 +121,7 @@ const Examples: FC> = ({ ...restProps }) => { demo: , href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_SwitchNetwork.SwitchNetwork.html', icon: , - text: 'Add or switch networks', + text: 'Learn how to add or switch networks in supported wallets.', title: 'Add / switch network', }, @@ -117,14 +129,14 @@ const Examples: FC> = ({ ...restProps }) => { demo: , href: 'https://github.com/BootNodeDev/dAppBooster#subgraphs', icon: , - text: 'Support for connecting with subgraphs', - title: 'Subgraph', + text: 'Connect to subgraphs and fetch data from the blockchain the easy way.', + title: 'Subgraphs', }, { demo: , href: 'https://github.com/BootNodeDev/dAppBooster#subgraphs', icon: , - text: 'Subgraph syncing status', + text: 'Easily check subgraph syncing status.', title: 'Subgraph status', }, { From f14f647f0e04a0bfca8ee7c3e79e406d58e8ab42 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Fri, 16 Aug 2024 19:46:01 -0300 Subject: [PATCH 018/228] feat: add options button and dropdown for demo items --- .../home/Examples/demos/OptionsButton.tsx | 73 +++++++++++++++++++ .../home/Examples/demos/OptionsDropdown.tsx | 13 ++++ 2 files changed, 86 insertions(+) create mode 100644 src/components/pageComponents/home/Examples/demos/OptionsButton.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/OptionsDropdown.tsx diff --git a/src/components/pageComponents/home/Examples/demos/OptionsButton.tsx b/src/components/pageComponents/home/Examples/demos/OptionsButton.tsx new file mode 100644 index 00000000..ee79b87e --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/OptionsButton.tsx @@ -0,0 +1,73 @@ +import styled from 'styled-components' + +import { Button } from 'db-ui-toolkit' + +const ChevronDown = ({ ...restProps }) => ( + + + +) + +export const OptionsButton = styled(Button).attrs(({ children }) => { + return { + $variant: 'options', + children: ( + <> + {children} + + ), + } +})` + [data-theme='light'] & { + --theme-button-options-background-color: #f7f7f7; + --theme-button-options-background-color-hover: #f7f7f7; + + --theme-button-options-border-color: #e2e0e7; + --theme-button-options-border-color-hover: #4b4d60; + + --theme-button-options-color: #4b4d60; + --theme-button-options-color-hover: #4b4d60; + + --theme-button-options-background-color-disabled: #f7f7f7; + --theme-button-options-border-color-disabled: #e2e0e7; + --theme-button-options-color-disabled: #4b4d60; + } + + [data-theme='dark'] & { + --theme-button-options-background-color: transparent; + --theme-button-options-background-color-hover: transparent; + + --theme-button-options-border-color: #c5c2cb; + --theme-button-options-border-color-hover: #fff; + + --theme-button-options-color: #c5c2cb; + --theme-button-options-color-hover: #fff; + + --theme-button-options-background-color-disabled: transparent; + --theme-button-options-border-color-disabled: #c5c2cb; + --theme-button-options-color-disabled: #c5c2cb; + } + + font-weight: 500; + font-size: 1.2rem; + height: 27px; + padding: 0 var(--base-common-padding); + + svg { + transition: transform var(--base-transition-duration-sm); + } + + &.isOpen svg { + transform: rotate(180deg); + } +` diff --git a/src/components/pageComponents/home/Examples/demos/OptionsDropdown.tsx b/src/components/pageComponents/home/Examples/demos/OptionsDropdown.tsx new file mode 100644 index 00000000..e9f47905 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/OptionsDropdown.tsx @@ -0,0 +1,13 @@ +import styled from 'styled-components' + +import { Dropdown } from 'db-ui-toolkit' + +export const OptionsDropdown = styled(Dropdown).attrs(() => { + return { + position: 'right', + } +})` + position: absolute; + top: 10px; + right: calc(var(--base-gap) + var(--base-gap-sm)); +` From 31c12fc91f7bdd0d5b3e8c9ebfeec730ba92dd81 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Fri, 16 Aug 2024 19:46:40 -0300 Subject: [PATCH 019/228] feat: update token input demo --- .../home/Examples/demos/TokenInputDemo.tsx | 86 ++++++++++++++++--- .../pageComponents/home/Examples/index.tsx | 14 ++- 2 files changed, 85 insertions(+), 15 deletions(-) diff --git a/src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx b/src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx index bc14efac..b6887b69 100644 --- a/src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx @@ -1,7 +1,11 @@ import { useEffect, useState } from 'react' +import styled, { css } from 'styled-components' +import { Item, breakpointMediaQuery } from 'db-ui-toolkit' import { arbitrum, mainnet, polygon, optimism } from 'viem/chains' +import { OptionsButton } from '@/src/components/pageComponents/home/Examples/demos/OptionsButton' +import { OptionsDropdown } from '@/src/components/pageComponents/home/Examples/demos/OptionsDropdown' import Arbitrum from '@/src/components/pageComponents/home/Examples/demos/assets/Arbitrum' import Eth from '@/src/components/pageComponents/home/Examples/demos/assets/Eth' import Optimism from '@/src/components/pageComponents/home/Examples/demos/assets/Optimism' @@ -13,7 +17,25 @@ import { useTokenSearch } from '@/src/hooks/useTokenSearch' import { useWeb3Status } from '@/src/hooks/useWeb3Status' import { type Token } from '@/src/types/token' -const TokenInputDemo = ({ singleToken }: { singleToken?: boolean }) => { +const Wrapper = styled.div` + max-width: 100%; + padding-top: var(--base-common-padding); + + ${breakpointMediaQuery( + 'desktopStart', + css` + padding-top: calc(var(--base-common-padding) * 3); + `, + )} +` + +type Options = 'single' | 'multi' + +/** + * This demo uses the TokenInput component to show how to use it in a single + * token or multi token mode. + */ +const TokenInputDemo = () => { const { isWalletConnected } = useWeb3Status() const [currentNetworkId, setCurrentNetworkId] = useState() const [currentToken, setCurrentToken] = useState() @@ -67,20 +89,56 @@ const TokenInputDemo = ({ singleToken }: { singleToken?: boolean }) => { error && console.log(error) }, [currentToken, amount, error]) + const dropdownItems = [ + { label: 'Single token', type: 'single' }, + { label: 'Multi token', type: 'multi' }, + ] + const [currentTokenInput, setCurrentTokenInput] = useState('single') + return ( - + + + {dropdownItems.find((item) => item.type === currentTokenInput)?.label} + + } + defaultActiveItem={0} + items={dropdownItems.map((item, index) => ( + setCurrentTokenInput(item.type as Options)}> + {item.label} + + ))} + /> + {currentTokenInput === 'multi' && ( + + )} + {currentTokenInput === 'single' && ( + + )} + ) } diff --git a/src/components/pageComponents/home/Examples/index.tsx b/src/components/pageComponents/home/Examples/index.tsx index 0683adf2..0091a3fe 100644 --- a/src/components/pageComponents/home/Examples/index.tsx +++ b/src/components/pageComponents/home/Examples/index.tsx @@ -114,7 +114,19 @@ const Examples: FC> = ({ ...restProps }) => { demo: , href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_TokenInput.TokenInput.html', icon: , - text: 'Input with max, user balance, decimals', + text: ( + <> + + Select a token + {' '} + or specify one beforehand, enter a token amount, auto detect token decimals, user balance, + min and max boundaries, format numbers, max button. + + ), title: 'Token input', }, { From 0f879334d5a7fba73d628d948903d6fc1faa80b8 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Fri, 16 Aug 2024 20:13:53 -0300 Subject: [PATCH 020/228] refactor: added subgraphs demo dropdown --- .../home/Examples/demos/SubgraphDemo/List.tsx | 56 ++++++++++++++----- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/src/components/pageComponents/home/Examples/demos/SubgraphDemo/List.tsx b/src/components/pageComponents/home/Examples/demos/SubgraphDemo/List.tsx index 38e9cebb..b3c0db7a 100644 --- a/src/components/pageComponents/home/Examples/demos/SubgraphDemo/List.tsx +++ b/src/components/pageComponents/home/Examples/demos/SubgraphDemo/List.tsx @@ -1,3 +1,4 @@ +import { useState } from 'react' import styled, { css } from 'styled-components' import { useSuspenseQuery } from '@tanstack/react-query' @@ -7,11 +8,14 @@ import { Toast, SkeletonLoading, breakpointMediaQuery, + Item, } from 'db-ui-toolkit' import request from 'graphql-request' import { toast } from 'react-hot-toast' import { arbitrum, base, type Chain, optimism, polygon } from 'viem/chains' +import { OptionsButton } from '@/src/components/pageComponents/home/Examples/demos/OptionsButton' +import { OptionsDropdown } from '@/src/components/pageComponents/home/Examples/demos/OptionsDropdown' import ArbitrumDefault from '@/src/components/pageComponents/home/Examples/demos/assets/Arbitrum' import BaseDefault from '@/src/components/pageComponents/home/Examples/demos/assets/Base' import OptimismDefault from '@/src/components/pageComponents/home/Examples/demos/assets/Optimism' @@ -44,9 +48,9 @@ const Wrapper = styled.div` display: flex; flex-direction: column; - max-width: 100%; - padding: 0 var(--base-common-padding-xl); + padding: var(--base-common-padding) var(--base-common-padding-xl) 0; row-gap: calc(var(--base-gap-xl) * 2); + width: 100%; ${breakpointMediaQuery( 'tabletPortraitStart', @@ -55,6 +59,13 @@ const Wrapper = styled.div` row-gap: calc(var(--base-gap-xl) * 3); `, )} + + ${breakpointMediaQuery( + 'desktopStart', + css` + padding-top: calc(var(--base-common-padding) * 3); + `, + )} ` const Group = styled.div` @@ -62,6 +73,7 @@ const Group = styled.div` display: flex; flex-direction: column; row-gap: var(--base-gap-xl); + padding: var(--base-common-padding-xl); ` const Title = styled.h3` @@ -173,10 +185,7 @@ const Uniswap = withSuspenseAndRetry(({ chain }: { chain: Chain }) => { return ( - - Uniswap pools - {getNetworkIcon(chain.name.toLowerCase())} - + Uniswap Pool {getNetworkIcon(chain.name.toLowerCase())} {data.map((position) => ( {position.pool.symbol} @@ -227,21 +236,42 @@ export const SkeletonLoadingItem = () => ( minHeight: '133px', padding: '16px', rowGap: '16px', - width: '340px', + width: '100%', }} > - - + + + + ) const List = ({ ...restProps }) => { + const [currentChain, setCurrentChain] = useState(uniswapNetworks[0]) + const dropdownItems = [...uniswapNetworks, base] + return ( - {uniswapNetworks.map((chain) => ( - } /> - ))} - } /> + + {dropdownItems.find((item) => item.name === currentChain?.name)?.name} + + } + defaultActiveItem={0} + items={dropdownItems.map((item, index) => ( + setCurrentChain(item)}> + {item.name} + + ))} + /> + {uniswapNetworks.map( + (chain) => + currentChain === chain && ( + } /> + ), + )} + {currentChain === base && } />} ) } From 914a1c30aa5af7114fe7006dbd6e7b858fd040a6 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Fri, 16 Aug 2024 21:27:13 -0300 Subject: [PATCH 021/228] fix: padding --- .../home/Examples/demos/SubgraphDemo/List.tsx | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/components/pageComponents/home/Examples/demos/SubgraphDemo/List.tsx b/src/components/pageComponents/home/Examples/demos/SubgraphDemo/List.tsx index b3c0db7a..0aa8fa4f 100644 --- a/src/components/pageComponents/home/Examples/demos/SubgraphDemo/List.tsx +++ b/src/components/pageComponents/home/Examples/demos/SubgraphDemo/List.tsx @@ -48,22 +48,15 @@ const Wrapper = styled.div` display: flex; flex-direction: column; - padding: var(--base-common-padding) var(--base-common-padding-xl) 0; + padding-top: var(--base-common-padding); row-gap: calc(var(--base-gap-xl) * 2); width: 100%; ${breakpointMediaQuery( 'tabletPortraitStart', - css` - padding: var(--base-common-padding-xl); - row-gap: calc(var(--base-gap-xl) * 3); - `, - )} - - ${breakpointMediaQuery( - 'desktopStart', css` padding-top: calc(var(--base-common-padding) * 3); + row-gap: calc(var(--base-gap-xl) * 3); `, )} ` @@ -73,7 +66,14 @@ const Group = styled.div` display: flex; flex-direction: column; row-gap: var(--base-gap-xl); - padding: var(--base-common-padding-xl); + padding: 0 var(--base-common-padding); + + ${breakpointMediaQuery( + 'desktopStart', + css` + padding: 0; + `, + )} ` const Title = styled.h3` @@ -169,6 +169,26 @@ export const getNetworkIcon = (chainName: string) => ( ) +export const SkeletonLoadingItem = () => ( + + + + + + +) + const Uniswap = withSuspenseAndRetry(({ chain }: { chain: Chain }) => { const { data } = useSuspenseQuery({ queryKey: ['allUniswapPools', chain.id], @@ -226,26 +246,6 @@ const Aave = withSuspenseAndRetry(() => { const uniswapNetworks = [optimism, polygon, arbitrum] -export const SkeletonLoadingItem = () => ( - - - - - - -) - const List = ({ ...restProps }) => { const [currentChain, setCurrentChain] = useState(uniswapNetworks[0]) const dropdownItems = [...uniswapNetworks, base] From 581452942adc928551b9b5aadfa20a32ebdb4f2f Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Fri, 16 Aug 2024 21:54:34 -0300 Subject: [PATCH 022/228] fix: ens demo --- .../home/Examples/demos/EnsNameDemo.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx b/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx index 047bf899..0507290c 100644 --- a/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx @@ -1,7 +1,7 @@ import { useState, type ChangeEvent } from 'react' -import styled from 'styled-components' +import styled, { css } from 'styled-components' -import { Spinner, Textfield } from 'db-ui-toolkit' +import { Spinner, Textfield, breakpointMediaQuery } from 'db-ui-toolkit' import { useDebouncedCallback } from 'use-debounce' import { type Address } from 'viem' import { useEnsName } from 'wagmi' @@ -39,6 +39,13 @@ const Wrapper = styled.div` padding: var(--base-common-padding-xl); row-gap: var(--base-gap); width: 100%; + + ${breakpointMediaQuery( + 'tabletPortraitStart', + css` + margin-top: calc(var(--base-common-padding) * 3); + `, + )} ` const Title = styled.h3` From b6cf2cfd423de6159d9cb5b6337b91bedb5032ac Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Fri, 16 Aug 2024 21:58:37 -0300 Subject: [PATCH 023/228] fix: typo --- src/components/pageComponents/home/Examples/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/pageComponents/home/Examples/index.tsx b/src/components/pageComponents/home/Examples/index.tsx index 54437091..f8bf98ec 100644 --- a/src/components/pageComponents/home/Examples/index.tsx +++ b/src/components/pageComponents/home/Examples/index.tsx @@ -97,7 +97,7 @@ const Examples: FC> = ({ ...restProps }) => { icon: , text: ( <> - Allows you to search or select tokens from a list. Uses oure{' '} + Allows you to search or select tokens from a list. Uses our{' '} Date: Mon, 19 Aug 2024 12:18:29 -0300 Subject: [PATCH 024/228] feat: enhance ENS demo --- .../home/Examples/demos/EnsNameDemo.tsx | 48 +++++++++++++++++-- .../pageComponents/home/Examples/index.tsx | 2 +- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx b/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx index 0507290c..5fec4558 100644 --- a/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx @@ -1,12 +1,15 @@ -import { useState, type ChangeEvent } from 'react' +import { useEffect, useState, type ChangeEvent } from 'react' import styled, { css } from 'styled-components' -import { Spinner, Textfield, breakpointMediaQuery } from 'db-ui-toolkit' +import { Spinner, Textfield, breakpointMediaQuery, Item } from 'db-ui-toolkit' import { useDebouncedCallback } from 'use-debounce' import { type Address } from 'viem' import { useEnsName } from 'wagmi' import { mainnet } from 'wagmi/chains' +import { OptionsButton } from '@/src/components/pageComponents/home/Examples/demos/OptionsButton' +import { OptionsDropdown } from '@/src/components/pageComponents/home/Examples/demos/OptionsDropdown' + const Wrapper = styled.div` [data-theme='light'] & { --theme-token-ens-name-background: #fff; @@ -67,6 +70,13 @@ const ENSName = styled.div` padding-top: var(--base-common-padding); ` +const ButtonText = styled.span` + display: block; + max-width: 100px; + overflow: hidden; + text-overflow: ellipsis; +` + const EnsNameSearch = ({ address }: { address?: Address }) => { const { data, error, status } = useEnsName({ address: address, @@ -104,12 +114,44 @@ const EnsNameDemo = () => { debouncedSearch(value) } + const dropdownItems = [ + '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045', + '0xaed56A64169A1eD7fFD83619A211b55a13f9F974', + '0x14536667Cd30e52C0b458BaACcB9faDA7046E056', + '0x8BCBd56588d77cd06C7930c09aB55ca7EF09b395', + ] + const [currentItem, setCurrentItem] = useState() + + useEffect(() => { + debouncedSearch(value as Address) + }, [debouncedSearch, value]) + return ( + + + {dropdownItems.find((item) => item === currentItem) || 'Select an address'} + + + } + items={dropdownItems.map((item, index) => ( + { + setCurrentItem(item) + setValue(item as Address) + }} + > + {item} + + ))} + /> Find ENS name diff --git a/src/components/pageComponents/home/Examples/index.tsx b/src/components/pageComponents/home/Examples/index.tsx index f8bf98ec..52962164 100644 --- a/src/components/pageComponents/home/Examples/index.tsx +++ b/src/components/pageComponents/home/Examples/index.tsx @@ -161,7 +161,7 @@ const Examples: FC> = ({ ...restProps }) => { ENS {' '} - names + names to their corresponding addresses. ), title: 'ENS name', From 34aabc23e186baf7912cf593da86fb65bcd5978c Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Mon, 19 Aug 2024 12:38:21 -0300 Subject: [PATCH 025/228] feat: add connect button to add / switch network demo --- .../home/Examples/demos/SwitchNetworkDemo.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/pageComponents/home/Examples/demos/SwitchNetworkDemo.tsx b/src/components/pageComponents/home/Examples/demos/SwitchNetworkDemo.tsx index 534bd878..e90c23b8 100644 --- a/src/components/pageComponents/home/Examples/demos/SwitchNetworkDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/SwitchNetworkDemo.tsx @@ -5,8 +5,11 @@ import Eth from '@/src/components/pageComponents/home/Examples/demos/assets/Eth' import Optimism from '@/src/components/pageComponents/home/Examples/demos/assets/Optimism' import Polygon from '@/src/components/pageComponents/home/Examples/demos/assets/Polygon' import SwitchNetwork, { type Networks } from '@/src/components/sharedComponents/SwitchNetwork' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' +import { ConnectWalletButton } from '@/src/providers/Web3Provider' const SwitchNetworkDemo = () => { + const { isWalletConnected } = useWeb3Status() const networks: Networks = [ { icon: , @@ -30,7 +33,11 @@ const SwitchNetworkDemo = () => { }, ] - return + return isWalletConnected ? ( + + ) : ( + + ) } export default SwitchNetworkDemo From 4ac47caa57e73f034d92e1e62f068dc4fbf901de Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Mon, 19 Aug 2024 13:26:29 -0300 Subject: [PATCH 026/228] chore: remove unused components --- .../home/Examples/assets/Hash.tsx | 25 --------------- .../home/Examples/assets/UserCheck.tsx | 32 ------------------- 2 files changed, 57 deletions(-) delete mode 100644 src/components/pageComponents/home/Examples/assets/Hash.tsx delete mode 100644 src/components/pageComponents/home/Examples/assets/UserCheck.tsx diff --git a/src/components/pageComponents/home/Examples/assets/Hash.tsx b/src/components/pageComponents/home/Examples/assets/Hash.tsx deleted file mode 100644 index fb930639..00000000 --- a/src/components/pageComponents/home/Examples/assets/Hash.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { type FC, type HTMLAttributes } from 'react' -import { styled } from 'styled-components' - -const Wrapper = styled.svg` - display: block; - flex-shrink: 0; -` - -const Icon: FC> = ({ ...restProps }) => ( - - - -) - -export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/UserCheck.tsx b/src/components/pageComponents/home/Examples/assets/UserCheck.tsx deleted file mode 100644 index 1640bdf5..00000000 --- a/src/components/pageComponents/home/Examples/assets/UserCheck.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { type FC, type HTMLAttributes } from 'react' -import { styled } from 'styled-components' - -const Wrapper = styled.svg` - display: block; - flex-shrink: 0; -` - -const Icon: FC> = ({ ...restProps }) => ( - - - - - - - - - - -) - -export default Icon From f975cdc66c5206afe3dc9b6b023d65c8290c4d3d Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Mon, 19 Aug 2024 13:27:10 -0300 Subject: [PATCH 027/228] refactor: merge ERC20 and tx button token demos into one --- .../ERC20ApproveAndTransferButton.tsx | 0 .../index.tsx | 11 ++-- .../NativeTokenDemo.tsx} | 31 ++++------- .../demos/TransactionButtonDemo/index.tsx | 53 +++++++++++++++++++ .../pageComponents/home/Examples/index.tsx | 16 +++--- 5 files changed, 76 insertions(+), 35 deletions(-) rename src/components/pageComponents/home/Examples/demos/{ => TransactionButtonDemo}/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx (100%) rename src/components/pageComponents/home/Examples/demos/{ => TransactionButtonDemo}/ERC20ApproveAndTransferButtonDemo/index.tsx (90%) rename src/components/pageComponents/home/Examples/demos/{TransactionButtonDemo.tsx => TransactionButtonDemo/NativeTokenDemo.tsx} (75%) create mode 100644 src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/index.tsx diff --git a/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx similarity index 100% rename from src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx rename to src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx diff --git a/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/index.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx similarity index 90% rename from src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/index.tsx rename to src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx index c9fef087..c078c6f6 100644 --- a/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx @@ -5,7 +5,7 @@ import { type Address, formatUnits } from 'viem' import { sepolia } from 'viem/chains' import { useWriteContract } from 'wagmi' -import ERC20ApproveAndTransferButton from '@/src/components/pageComponents/home/Examples/demos/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton' +import ERC20ApproveAndTransferButton from '@/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton' import { PrimaryButton } from '@/src/components/sharedComponents/Buttons' import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' import { useSuspenseReadErc20BalanceOf } from '@/src/hooks/generated' @@ -63,7 +63,12 @@ const ABIExample = [ }, ] as const -const ApproveAndSendDemo = withWalletStatusVerifier( +/** + * This demo shows how to approve and send an ERC20 token transaction using the `TransactionButton` component. + * + * Works only on Sepolia chain. + */ +const ERC20ApproveAndTransferButtonDemo = withWalletStatusVerifier( withSuspense(() => { const { Dialog, close, open } = useDialog() const { address } = useWeb3StatusConnected() @@ -128,4 +133,4 @@ const ApproveAndSendDemo = withWalletStatusVerifier( { chainId: sepolia.id }, // this DEMO component only works on sepolia chain ) -export default ApproveAndSendDemo +export default ERC20ApproveAndTransferButtonDemo diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx similarity index 75% rename from src/components/pageComponents/home/Examples/demos/TransactionButtonDemo.tsx rename to src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx index 9c02aabe..2018e7fb 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx @@ -2,9 +2,9 @@ import { useState, type ReactElement } from 'react' import styled, { css } from 'styled-components' import { useDialog, GeneralMessage as GeneralMessageBase } from 'db-ui-toolkit' -import { type Hash, type TransactionReceipt, erc20Abi, parseEther } from 'viem' +import { type Hash, type TransactionReceipt, parseEther } from 'viem' import { sepolia } from 'viem/chains' -import { useSendTransaction, useWriteContract } from 'wagmi' +import { useSendTransaction } from 'wagmi' import { PrimaryButton } from '@/src/components/sharedComponents/Buttons' import TransactionButton from '@/src/components/sharedComponents/TransactionButton' @@ -32,12 +32,16 @@ const GeneralMessage = styled(GeneralMessageBase)<{ status?: 'ok' | 'error' }>` `} ` -const TransactionButtonDemo = withWalletStatusVerifier( +/** + * This demo shows how to send a native token transaction. + * + * Works only on Sepolia chain. + */ +const NativeTokenDemo = withWalletStatusVerifier( () => { const { Dialog, close, open } = useDialog() const { address } = useWeb3StatusConnected() const { sendTransactionAsync } = useSendTransaction() - const { writeContractAsync } = useWriteContract() const [minedMessage, setMinedMessage] = useState() const handleOnMined = (receipt: TransactionReceipt) => { @@ -57,26 +61,9 @@ const TransactionButtonDemo = withWalletStatusVerifier( }) } - const handleWriteContract = (): Promise => { - // Send ERC20 token [USDC] - return writeContractAsync({ - abi: erc20Abi, - address: '0x94a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c8', // USDC - functionName: 'transfer', - args: [address, 100000000n], // 100 USDC - }) - } - return ( <> - + + + ) : ( - + + ) } diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx index c078c6f6..966b6eb6 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx @@ -1,11 +1,12 @@ import styled, { css } from 'styled-components' -import { ExternalLink, Text, useDialog, GeneralMessage as GeneralMessageBase } from 'db-ui-toolkit' +import { ExternalLink, useDialog, GeneralMessage as GeneralMessageBase } from 'db-ui-toolkit' import { type Address, formatUnits } from 'viem' import { sepolia } from 'viem/chains' import { useWriteContract } from 'wagmi' import ERC20ApproveAndTransferButton from '@/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton' +import Wrapper from '@/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/Wrapper' import { PrimaryButton } from '@/src/components/sharedComponents/Buttons' import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' import { useSuspenseReadErc20BalanceOf } from '@/src/hooks/generated' @@ -22,7 +23,35 @@ const GeneralMessage = styled(GeneralMessageBase)<{ status?: 'ok' | 'error' }>` `} ` -// USDC token on sepolia chain +const Button = styled(PrimaryButton)` + margin: 0 auto; + width: 100%; +` + +const ExternalLinkIcon = () => ( + + + + + +) + +// USDC token on Sepolia chain const tokenUSDC_sepolia: Token = { address: '0x94a9d9ac8a22534e3faca9f4e7f2e2cf85d5e4c8', chainId: sepolia.id, @@ -100,12 +129,14 @@ const ERC20ApproveAndTransferButtonDemo = withWalletStatusVerifier( return ( <> {balance < amount ? ( - <> - Not enough USDC! - - Mint {formattedAmount} USDC - - + + + ) : ( , 'title'> { + text?: string | ReactNode + title: string | ReactNode +} + +const WrapperComponent: FC = ({ children, text, title, ...restProps }) => { + return ( + + {title} + {children} + {text && {text}} + + ) +} + +export default WrapperComponent diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/index.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/index.tsx index 0030208f..124826cd 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/index.tsx @@ -9,8 +9,12 @@ import ERC20ApproveAndTransferButtonDemo from '@/src/components/pageComponents/h import NativeTokenDemo from '@/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo' const Wrapper = styled.div` - max-width: 100%; + align-items: center; + display: flex; + flex-direction: column; + justify-content: center; padding-top: var(--base-common-padding); + width: 100%; ${breakpointMediaQuery( 'desktopStart', diff --git a/src/components/pageComponents/home/Examples/index.tsx b/src/components/pageComponents/home/Examples/index.tsx index 8601a9fd..0b622b4a 100644 --- a/src/components/pageComponents/home/Examples/index.tsx +++ b/src/components/pageComponents/home/Examples/index.tsx @@ -174,7 +174,7 @@ const Examples: FC> = ({ ...restProps }) => { ERC20 use, and execute a demo transaction. ), - title: 'Tx button', + title: 'Transaction button', }, { demo: , From e10d26097514866d7783421f5d34ace6e0ccecab Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Mon, 19 Aug 2024 15:30:48 -0300 Subject: [PATCH 029/228] feat: make the native token demo look a little better --- .../demos/TransactionButtonDemo/NativeTokenDemo.tsx | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx index 2018e7fb..6baea01e 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx @@ -6,16 +6,12 @@ import { type Hash, type TransactionReceipt, parseEther } from 'viem' import { sepolia } from 'viem/chains' import { useSendTransaction } from 'wagmi' +import Wrapper from '@/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/Wrapper' import { PrimaryButton } from '@/src/components/sharedComponents/Buttons' import TransactionButton from '@/src/components/sharedComponents/TransactionButton' import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' import { useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' -const Wrapper = styled.div` - display: grid; - row-gap: var(--base-gap-xl); -` - const Button = styled(PrimaryButton).attrs({ as: TransactionButton })` font-size: 1.6rem; font-weight: 500; @@ -63,13 +59,16 @@ const NativeTokenDemo = withWalletStatusVerifier( return ( <> - + From ac0b50e0436c254be90c6e82d4a54be2ed5186d2 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Mon, 19 Aug 2024 15:33:11 -0300 Subject: [PATCH 030/228] chore: change wording --- src/components/pageComponents/home/Examples/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/pageComponents/home/Examples/index.tsx b/src/components/pageComponents/home/Examples/index.tsx index 0b622b4a..7a370e7b 100644 --- a/src/components/pageComponents/home/Examples/index.tsx +++ b/src/components/pageComponents/home/Examples/index.tsx @@ -180,7 +180,7 @@ const Examples: FC> = ({ ...restProps }) => { demo: , href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_SignButton.SignButton.html', icon: , - text: 'Sign a message and get the signature', + text: 'Sign a message with your wallet and get the signature on a dialog.', title: 'Sign button', }, ] From f75be6325de83cfef9753bb29f10f8b6e4679cca Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Mon, 19 Aug 2024 16:00:55 -0300 Subject: [PATCH 031/228] chore: add source code links --- .../home/Examples/Item/SourceCodeButton.tsx | 60 +++++++++++++++++++ .../home/Examples/Item/index.tsx | 16 ++++- .../pageComponents/home/Examples/index.tsx | 20 ++++++- 3 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 src/components/pageComponents/home/Examples/Item/SourceCodeButton.tsx diff --git a/src/components/pageComponents/home/Examples/Item/SourceCodeButton.tsx b/src/components/pageComponents/home/Examples/Item/SourceCodeButton.tsx new file mode 100644 index 00000000..929d0a2f --- /dev/null +++ b/src/components/pageComponents/home/Examples/Item/SourceCodeButton.tsx @@ -0,0 +1,60 @@ +import styled from 'styled-components' + +import { Button } from 'db-ui-toolkit' + +const Icon = () => ( + + + +) + +const SourceCodeButton = styled(Button).attrs(() => { + return { + $variant: 'source', + children: ( + <> + Source code + + ), + } +})` + [data-theme='light'] & { + --theme-button-source-background-color: transparent; + --theme-button-source-background-color-hover: transparent; + + --theme-button-source-border-color: #e2e0e7; + --theme-button-source-border-color-hover: #4b4d60; + + --theme-button-source-color: #4b4d60; + --theme-button-source-color-hover: #4b4d60; + + --theme-button-source-background-color-disabled: transparent; + --theme-button-source-border-color-disabled: #e2e0e7; + --theme-button-source-color-disabled: #4b4d60; + } + + [data-theme='dark'] & { + --theme-button-source-background-color: transparent; + --theme-button-source-background-color-hover: transparent; + + --theme-button-source-border-color: #c5c2cb; + --theme-button-source-border-color-hover: #fff; + + --theme-button-source-color: #c5c2cb; + --theme-button-source-color-hover: #fff; + + --theme-button-source-background-color-disabled: transparent; + --theme-button-source-border-color-disabled: #c5c2cb; + --theme-button-source-color-disabled: #c5c2cb; + } + + font-size: 1.4rem; + font-weight: 500; + height: 43px; + max-width: fit-content; +` + +export default SourceCodeButton diff --git a/src/components/pageComponents/home/Examples/Item/index.tsx b/src/components/pageComponents/home/Examples/Item/index.tsx index 87426dc6..36929898 100644 --- a/src/components/pageComponents/home/Examples/Item/index.tsx +++ b/src/components/pageComponents/home/Examples/Item/index.tsx @@ -5,6 +5,7 @@ import { breakpointMediaQuery } from 'db-ui-toolkit' import BaseBadge from '@/src/components/pageComponents/home/Examples/Item/Badge' import DocumentationButton from '@/src/components/pageComponents/home/Examples/Item/DocumentationButton' +import SourceCodeButton from '@/src/components/pageComponents/home/Examples/Item/SourceCodeButton' const Wrapper = styled.div` [data-theme='light'] & { @@ -100,6 +101,13 @@ const Text = styled.p` )}; ` +const Buttons = styled.div` + display: flex; + gap: var(--base-gap); + + ${breakpointMediaQuery('tabletPortraitStart', css``)}; +` + const Demo = styled.div` align-items: center; background-color: var(--theme-examples-list-background-color); @@ -134,18 +142,22 @@ export interface Props extends HTMLAttributes { demo: ReactNode href?: string icon: ReactNode + sourceCodeHref?: string text: string | ReactNode title: string } -const Item: FC = ({ demo, href, icon, text, title, ...restProps }) => { +const Item: FC = ({ demo, href, icon, sourceCodeHref, text, title, ...restProps }) => { return ( {icon} {title} {text} - {href && } + + {href && } + {sourceCodeHref && } + diff --git a/src/components/pageComponents/home/Examples/index.tsx b/src/components/pageComponents/home/Examples/index.tsx index 7a370e7b..f5540ecc 100644 --- a/src/components/pageComponents/home/Examples/index.tsx +++ b/src/components/pageComponents/home/Examples/index.tsx @@ -81,6 +81,8 @@ const Examples: FC> = ({ ...restProps }) => { demo: , href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_Hash.Hash.html', icon: , + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/dac8165b48832fae2fda82ad5e334f972e187d10/src/components/pageComponents/home/Examples/demos/HashHandlingDemo.tsx#L155', text: ( <> Validate an address or hash. Copy or open it in the block explorer for the chain your @@ -93,6 +95,8 @@ const Examples: FC> = ({ ...restProps }) => { demo: , href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_TokenDropdown.TokenDropdown.html', icon: , + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/dac8165b48832fae2fda82ad5e334f972e187d10/src/components/pageComponents/home/Examples/demos/TokenDropdownDemo.tsx#L13', text: ( <> Allows you to search or select tokens from a list. Uses our{' '} @@ -110,6 +114,8 @@ const Examples: FC> = ({ ...restProps }) => { }, { demo: , + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/dac8165b48832fae2fda82ad5e334f972e187d10/src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx#L38', href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_TokenInput.TokenInput.html', icon: , text: ( @@ -129,6 +135,8 @@ const Examples: FC> = ({ ...restProps }) => { }, { demo: , + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/dac8165b48832fae2fda82ad5e334f972e187d10/src/components/pageComponents/home/Examples/demos/SwitchNetworkDemo.tsx#L11', href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_SwitchNetwork.SwitchNetwork.html', icon: , text: 'Learn how to add or switch networks in supported wallets.', @@ -136,6 +144,8 @@ const Examples: FC> = ({ ...restProps }) => { }, { + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/dac8165b48832fae2fda82ad5e334f972e187d10/src/components/pageComponents/home/Examples/demos/SubgraphDemo/List.tsx#L249', demo: , href: 'https://github.com/BootNodeDev/dAppBooster#subgraphs', icon: , @@ -143,6 +153,8 @@ const Examples: FC> = ({ ...restProps }) => { title: 'Subgraphs', }, { + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/dac8165b48832fae2fda82ad5e334f972e187d10/src/components/pageComponents/home/Examples/demos/SubgraphStatusDemo/List.tsx#L178', demo: , href: 'https://github.com/BootNodeDev/dAppBooster#subgraphs', icon: , @@ -150,8 +162,10 @@ const Examples: FC> = ({ ...restProps }) => { title: 'Subgraph status', }, { + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/dac8165b48832fae2fda82ad5e334f972e187d10/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx#L101', demo: , - href: 'https://github.com/BootNodeDev/dAppBooster/blob/86a7b001d4e48b41b3a463f844a83f632eae8c39/src/pageComponents/home/Examples/demos/EnsNameDemo.tsx#L63', + href: 'https://github.com/BootNodeDev/dAppBooster/blob/86a7b001d4e48b41b3a463f844a83f632eae8c39/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx#L63', icon: , text: ( <> @@ -165,6 +179,8 @@ const Examples: FC> = ({ ...restProps }) => { title: 'ENS name', }, { + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/dac8165b48832fae2fda82ad5e334f972e187d10/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/index.tsx#L29', demo: , href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_TransactionButton.TransactionButton.html', icon: , @@ -177,6 +193,8 @@ const Examples: FC> = ({ ...restProps }) => { title: 'Transaction button', }, { + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/dac8165b48832fae2fda82ad5e334f972e187d10/src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx#L37', demo: , href: 'https://bootnodedev.github.io/dAppBooster/functions/sharedComponents_SignButton.SignButton.html', icon: , From f8d0ef2a6d49555238dea7054f6158aebf109cbb Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Mon, 19 Aug 2024 17:45:07 -0300 Subject: [PATCH 032/228] fix: wording --- .../ERC20ApproveAndTransferButton.tsx | 2 +- .../ERC20ApproveAndTransferButtonDemo/index.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx index c604e485..51376d1b 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx @@ -112,7 +112,7 @@ const ERC20ApproveAndTransferButton: FC = ({ . } - title="Transaction required" + title="Execute the transaction" > + ) : ( = ({ } title="Execute the transaction" > - + ) } diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx index d13c0b92..f0deac95 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx @@ -24,7 +24,6 @@ const GeneralMessage = styled(GeneralMessageBase)<{ status?: 'ok' | 'error' }>` ` const Button = styled(PrimaryButton)` - margin: 0 auto; width: 100%; ` diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx index 6baea01e..b1fe1cc9 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx @@ -12,14 +12,6 @@ import TransactionButton from '@/src/components/sharedComponents/TransactionButt import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' import { useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' -const Button = styled(PrimaryButton).attrs({ as: TransactionButton })` - font-size: 1.6rem; - font-weight: 500; - height: 48px; - padding-left: calc(var(--base-common-padding) * 3); - padding-right: calc(var(--base-common-padding) * 3); -` - const GeneralMessage = styled(GeneralMessageBase)<{ status?: 'ok' | 'error' }>` ${({ status }) => status === 'ok' && @@ -63,13 +55,14 @@ const NativeTokenDemo = withWalletStatusVerifier( text="Demo transaction that sends 0.1 Sepolia ETH from / to your wallet." title="Native token demo" > - + Date: Mon, 19 Aug 2024 18:58:11 -0300 Subject: [PATCH 036/228] fix: dropdown width --- .../pageComponents/home/Examples/demos/EnsNameDemo.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx b/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx index 5fec4558..91dbd0c9 100644 --- a/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx @@ -72,7 +72,7 @@ const ENSName = styled.div` const ButtonText = styled.span` display: block; - max-width: 100px; + max-width: 115px; overflow: hidden; text-overflow: ellipsis; ` From 7ea22a9876f723e8a95aa57b81a0accde68d1846 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Thu, 22 Aug 2024 16:08:09 -0300 Subject: [PATCH 037/228] refactor: update demos with new modal package --- .../home/Examples/demos/SignMessageDemo.tsx | 29 ++++++++++--------- .../index.tsx | 15 ++++++---- .../TransactionButtonDemo/NativeTokenDemo.tsx | 13 +++++---- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx b/src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx index cede05bc..b69980f9 100644 --- a/src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx @@ -1,7 +1,8 @@ import { useEffect, useState } from 'react' import styled, { css } from 'styled-components' -import { useDialog, GeneralMessage as GeneralMessageBase } from 'db-ui-toolkit' +import { Modal, useModal } from '@faceless-ui/modal' +import { GeneralMessage as GeneralMessageBase } from 'db-ui-toolkit' import { PrimaryButton } from '@/src/components/sharedComponents/Buttons' import SignButtonBase from '@/src/components/sharedComponents/SignButton' @@ -42,16 +43,16 @@ const SignMessageDemo = () => { error: null, signature: null, }) - const { Dialog, close, open } = useDialog() + const { closeModal, isModalOpen, openModal } = useModal() useEffect(() => { if (state.signature || state.error) { - open('sign-message') + openModal('sign-message') } - }, [state.signature, state.error, open]) + }, [state.signature, state.error, openModal]) const onClose = () => { - close('sign-message') + closeModal('sign-message') setState({ error: null, signature: null }) } @@ -78,14 +79,16 @@ const SignMessageDemo = () => { onError={(error) => setState({ error, signature: null })} onSign={(signature) => setState({ error: null, signature })} /> - - - + + {isModalOpen('sign-message') && ( + + )} + ) } diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx index f0deac95..b1e6acca 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx @@ -1,6 +1,7 @@ import styled, { css } from 'styled-components' -import { ExternalLink, useDialog, GeneralMessage as GeneralMessageBase } from 'db-ui-toolkit' +import { Modal, useModal } from '@faceless-ui/modal' +import { ExternalLink, GeneralMessage as GeneralMessageBase } from 'db-ui-toolkit' import { type Address, formatUnits } from 'viem' import { sepolia } from 'viem/chains' import { useWriteContract } from 'wagmi' @@ -98,7 +99,7 @@ const ABIExample = [ */ const ERC20ApproveAndTransferButtonDemo = withWalletStatusVerifier( withSuspense(() => { - const { Dialog, close, open } = useDialog() + const { closeModal, openModal } = useModal() const { address } = useWeb3StatusConnected() const { writeContractAsync } = useWriteContract() @@ -141,22 +142,24 @@ const ERC20ApproveAndTransferButtonDemo = withWalletStatusVerifier( amount={amount} label={`Supply ${formattedAmount} USDC`} labelSending="Sending..." - onSuccess={() => open('approve-and-transfer')} + onSuccess={() => openModal('approve-and-transfer')} spender={spender} token={tokenUSDC_sepolia} transaction={handleTransaction} /> )} - + close('approve-and-transfer')}>Close + closeModal('approve-and-transfer')}> + Close + } message={'Approve and supply completed! 🎉'} status={'ok'} title={'Success'} /> - + ) }), diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx index b1fe1cc9..c26d62d1 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx @@ -1,7 +1,8 @@ import { useState, type ReactElement } from 'react' import styled, { css } from 'styled-components' -import { useDialog, GeneralMessage as GeneralMessageBase } from 'db-ui-toolkit' +import { Modal, useModal } from '@faceless-ui/modal' +import { GeneralMessage as GeneralMessageBase } from 'db-ui-toolkit' import { type Hash, type TransactionReceipt, parseEther } from 'viem' import { sepolia } from 'viem/chains' import { useSendTransaction } from 'wagmi' @@ -27,7 +28,7 @@ const GeneralMessage = styled(GeneralMessageBase)<{ status?: 'ok' | 'error' }>` */ const NativeTokenDemo = withWalletStatusVerifier( () => { - const { Dialog, close, open } = useDialog() + const { closeModal, openModal } = useModal() const { address } = useWeb3StatusConnected() const { sendTransactionAsync } = useSendTransaction() const [minedMessage, setMinedMessage] = useState() @@ -38,7 +39,7 @@ const NativeTokenDemo = withWalletStatusVerifier( Hash: {receipt.transactionHash} , ) - open('tx-dialog') + openModal('tx-dialog') } const handleSendTransaction = (): Promise => { @@ -64,12 +65,12 @@ const NativeTokenDemo = withWalletStatusVerifier( Send 0.1 Sepolia ETH - + { - close('tx-dialog') + closeModal('tx-dialog') setMinedMessage('') }} > @@ -80,7 +81,7 @@ const NativeTokenDemo = withWalletStatusVerifier( status={'ok'} title={'Transaction completed!'} /> - + ) }, From e1e3982ec76e53d3f665ee39016eafcaea4df3e9 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Thu, 22 Aug 2024 16:08:41 -0300 Subject: [PATCH 038/228] chore: update token input demo --- .../pageComponents/home/Examples/demos/TokenInputDemo.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx b/src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx index b6887b69..3cc88b8c 100644 --- a/src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx @@ -42,7 +42,7 @@ const TokenInputDemo = () => { const [amount, setAmount] = useState() const [error, setError] = useState() const { tokensByChainId } = useTokenLists() - const { searchResult } = useTokenSearch(tokensByChainId[1], [], 'WETH') + const { searchResult } = useTokenSearch({ tokens: tokensByChainId[1], defaultSearchTerm: 'WETH' }) const networks: Networks = [ { From c5f63667d2856e316cf8578e06354a6a50b3f2de Mon Sep 17 00:00:00 2001 From: nicosampler Date: Wed, 4 Sep 2024 18:46:45 -0300 Subject: [PATCH 039/228] toast & tokenInput --- .../home/Examples/demos/SignMessageDemo.tsx | 70 +------------ .../home/Examples/demos/TokenInputDemo.tsx | 43 +++----- .../ERC20ApproveAndTransferButton.tsx | 1 + .../MintUSDC.tsx | 37 +++++++ .../index.tsx | 68 ++----------- .../TransactionButtonDemo/NativeTokenDemo.tsx | 1 + .../sharedComponents/SignButton.tsx | 12 ++- src/constants/contracts/abis/AaveFaucet.ts | 99 +++++++++++++++++++ src/constants/contracts/contracts.ts | 9 ++ 9 files changed, 178 insertions(+), 162 deletions(-) create mode 100644 src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/MintUSDC.tsx create mode 100644 src/constants/contracts/abis/AaveFaucet.ts diff --git a/src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx b/src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx index b69980f9..a94bcd87 100644 --- a/src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx @@ -1,8 +1,4 @@ -import { useEffect, useState } from 'react' -import styled, { css } from 'styled-components' - -import { Modal, useModal } from '@faceless-ui/modal' -import { GeneralMessage as GeneralMessageBase } from 'db-ui-toolkit' +import styled from 'styled-components' import { PrimaryButton } from '@/src/components/sharedComponents/Buttons' import SignButtonBase from '@/src/components/sharedComponents/SignButton' @@ -19,14 +15,6 @@ Empower your dApps! dAppBooster Team 💪 ` -const GeneralMessage = styled(GeneralMessageBase)<{ status?: 'ok' | 'error' }>` - ${({ status }) => - status === 'ok' && - css` - --theme-general-message-icon-color: var(--theme-color-ok); - `} -` - const Button = styled(PrimaryButton).attrs({ as: SignButtonBase })` font-size: 1.6rem; font-weight: 500; @@ -36,61 +24,7 @@ const Button = styled(PrimaryButton).attrs({ as: SignButtonBase })` ` const SignMessageDemo = () => { - const [state, setState] = useState<{ - signature: string | null - error: Error | null - }>({ - error: null, - signature: null, - }) - const { closeModal, isModalOpen, openModal } = useModal() - - useEffect(() => { - if (state.signature || state.error) { - openModal('sign-message') - } - }, [state.signature, state.error, openModal]) - - const onClose = () => { - closeModal('sign-message') - setState({ error: null, signature: null }) - } - - const dialogTitle = state.signature ? 'Success' : state.error ? 'Error' : '' - const dialogMessage = ( - <> - {state.signature ? ( - <> - Signature: {state.signature} - - ) : state.error ? ( -
{state.error.message}
- ) : ( - '' - )} - - ) - const dialogButton = Close - - return ( - <> - + + ) : ( openModal('approve-and-transfer')} + onSuccess={() => refetchBalance} spender={spender} token={tokenUSDC_sepolia} transaction={handleTransaction} /> )} - - closeModal('approve-and-transfer')}> - Close - - } - message={'Approve and supply completed! 🎉'} - status={'ok'} - title={'Success'} - /> - ) }), diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx index c26d62d1..6dc4c05b 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx @@ -49,6 +49,7 @@ const NativeTokenDemo = withWalletStatusVerifier( value: parseEther('0.1'), }) } + handleSendTransaction.methodId = 'sendTransaction' return ( <> diff --git a/src/components/sharedComponents/SignButton.tsx b/src/components/sharedComponents/SignButton.tsx index aae36dfd..1b6cfa7c 100644 --- a/src/components/sharedComponents/SignButton.tsx +++ b/src/components/sharedComponents/SignButton.tsx @@ -3,6 +3,7 @@ import { ComponentProps, type FC } from 'react' import { useSignMessage } from 'wagmi' import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' +import { useTransactionNotification } from '@/src/lib/toast/TransactionNotificationProvider' interface SignButtonPropsProps extends Omit, 'onError'> { label?: string @@ -42,7 +43,9 @@ const SignButton: FC = withWalletStatusVerifier( onSign, ...restProps }) => { - const { isPending, signMessage } = useSignMessage({ + const { watchSignature } = useTransactionNotification() + + const { isPending, signMessageAsync } = useSignMessage({ mutation: { onSuccess(data) { onSign?.(data) @@ -56,7 +59,12 @@ const SignButton: FC = withWalletStatusVerifier( return ( @@ -226,7 +229,10 @@ const MobileMenu = ({ ...restProps }) => { ) : ( - setIsOpen(true)}> + setIsOpen(true)} + aria-label="Open menu" + > ) diff --git a/src/components/sharedComponents/ui/Header.tsx b/src/components/sharedComponents/ui/Header.tsx index 012377de..283606d1 100644 --- a/src/components/sharedComponents/ui/Header.tsx +++ b/src/components/sharedComponents/ui/Header.tsx @@ -118,12 +118,15 @@ export const Header: FC> = ({ ...restProps }) => { - + - setTheme(theme === 'light' ? 'dark' : 'light')} /> + setTheme(theme === 'light' ? 'dark' : 'light')} + /> diff --git a/src/styles/themes/darkThemeCSSVars.tsx b/src/styles/themes/darkThemeCSSVars.tsx index 916d388d..efa29411 100644 --- a/src/styles/themes/darkThemeCSSVars.tsx +++ b/src/styles/themes/darkThemeCSSVars.tsx @@ -212,8 +212,8 @@ const darkThemeCSSVars = css` --theme-token-input-max-button-border-color: #c5c2cb; --theme-token-input-max-button-border-color-hover: #c5c2cb; --theme-token-input-max-button-border-color-active: #c5c2cb; - --theme-token-input-max-button-color: #c670e5; - --theme-token-input-max-button-color-hover: #c670e5; + --theme-token-input-max-button-color: #c5c2cb; + --theme-token-input-max-button-color-hover: #fff; --theme-token-input-max-button-background-color-disabled: #373954; --theme-token-input-max-button-border-color-disabled: #5f6178; --theme-token-input-max-button-color-disabled: #fff; From 866ec976a901ad190eed07ce53756a0b3016d47b Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Tue, 25 Mar 2025 12:58:50 -0300 Subject: [PATCH 065/228] fix: title --- .lintstagedrc.mjs | 2 +- index.html | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.lintstagedrc.mjs b/.lintstagedrc.mjs index aae12741..bfd6e9d5 100644 --- a/.lintstagedrc.mjs +++ b/.lintstagedrc.mjs @@ -1,3 +1,3 @@ export default { - '*': ['stylelint --fix', 'biome check --write', 'vitest related --run --coverage=false'], + 'src/**/*': ['stylelint --fix', 'biome check --write', 'vitest related --run --coverage=false'], } diff --git a/index.html b/index.html index 34e22faa..1fd56807 100644 --- a/index.html +++ b/index.html @@ -1,25 +1,27 @@ - + - dAppBooster - Accelerate Your Web3 Development + + dAppBooster - Web3 Template For All Your Blockchain Development Needs + From 1d674ea398df5c8b3dba89e22ded87ba3426a069 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Tue, 25 Mar 2025 13:02:40 -0300 Subject: [PATCH 066/228] fix: biome path --- .lintstagedrc.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.lintstagedrc.mjs b/.lintstagedrc.mjs index bfd6e9d5..42f0d216 100644 --- a/.lintstagedrc.mjs +++ b/.lintstagedrc.mjs @@ -1,3 +1,3 @@ export default { - 'src/**/*': ['stylelint --fix', 'biome check --write', 'vitest related --run --coverage=false'], + '**/*': ['stylelint --fix', 'biome check --write', 'vitest related --run --coverage=false'], } From 3b5d296a9db69c2e6320933c71945e1bb6550903 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Wed, 26 Mar 2025 16:37:57 -0300 Subject: [PATCH 067/228] chore: add sitemap --- package.json | 1 + pnpm-lock.yaml | 88 ++++++++++++++++++++++++++--------------------- public/robots.txt | 13 ------- vite.config.ts | 9 ++++- 4 files changed, 57 insertions(+), 54 deletions(-) delete mode 100644 public/robots.txt diff --git a/package.json b/package.json index 8252321d..6554db71 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,7 @@ "typedoc-plugin-zod": "^1.2.1", "typescript": "^5.6.2", "vite": "^5.4.8", + "vite-plugin-sitemap": "^0.7.1", "vitest": "^2.1.1", "vocs": "1.0.0-alpha.59" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dbabde75..2ab92f8a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -186,6 +186,9 @@ importers: vite: specifier: ^5.4.8 version: 5.4.8(@types/node@22.6.1)(terser@5.33.0) + vite-plugin-sitemap: + specifier: ^0.7.1 + version: 0.7.1 vitest: specifier: ^2.1.1 version: 2.1.1(@types/node@22.6.1)(jsdom@25.0.1(bufferutil@4.0.8)(utf-8-validate@5.0.10))(terser@5.33.0) @@ -8047,6 +8050,9 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + vite-plugin-sitemap@0.7.1: + resolution: {integrity: sha512-4NRTkiWytLuAmcikckrLcLl9iYA20+5v6l8XshcOrzxH1WR8H0O3S6sTQYfjMrE8su/LG6Y0cTodvOdcOIxaLw==} + vite@5.4.8: resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -10512,7 +10518,7 @@ snapshots: '@babel/types': 7.26.3 '@graphql-tools/utils': 10.7.1(graphql@16.10.0) graphql: 16.10.0 - tslib: 2.7.0 + tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -10548,12 +10554,12 @@ snapshots: '@graphql-tools/optimize@1.4.0(graphql@16.10.0)': dependencies: graphql: 16.10.0 - tslib: 2.7.0 + tslib: 2.8.1 '@graphql-tools/optimize@2.0.0(graphql@16.10.0)': dependencies: graphql: 16.10.0 - tslib: 2.7.0 + tslib: 2.8.1 '@graphql-tools/prisma-loader@8.0.17(@types/node@22.6.1)(bufferutil@4.0.8)(graphql@16.10.0)(utf-8-validate@5.0.10)': dependencies: @@ -10586,7 +10592,7 @@ snapshots: '@ardatan/relay-compiler': 12.0.0(graphql@16.10.0) '@graphql-tools/utils': 9.2.1(graphql@16.10.0) graphql: 16.10.0 - tslib: 2.7.0 + tslib: 2.8.1 transitivePeerDependencies: - encoding - supports-color @@ -10596,7 +10602,7 @@ snapshots: '@ardatan/relay-compiler': 12.0.0(graphql@16.10.0) '@graphql-tools/utils': 10.7.1(graphql@16.10.0) graphql: 16.10.0 - tslib: 2.7.0 + tslib: 2.8.1 transitivePeerDependencies: - encoding - supports-color @@ -10641,7 +10647,7 @@ snapshots: '@graphql-tools/utils@8.13.1(graphql@16.10.0)': dependencies: graphql: 16.10.0 - tslib: 2.7.0 + tslib: 2.8.1 '@graphql-tools/utils@9.2.1(graphql@16.10.0)': dependencies: @@ -12079,7 +12085,7 @@ snapshots: '@swc/helpers@0.5.13': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 '@swc/types@0.1.12': dependencies: @@ -12981,7 +12987,7 @@ snapshots: '@whatwg-node/disposablestack': 0.0.5 busboy: 1.6.0 fast-querystring: 1.1.2 - tslib: 2.7.0 + tslib: 2.8.1 JSONStream@1.3.5: dependencies: @@ -13096,7 +13102,7 @@ snapshots: aria-hidden@1.2.4: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 aria-query@5.3.0: dependencies: @@ -13114,7 +13120,7 @@ snapshots: ast-types@0.15.2: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 astral-regex@1.0.0: {} @@ -13126,7 +13132,7 @@ snapshots: async-mutex@0.2.6: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 asynckit@0.4.0: {} @@ -13379,7 +13385,7 @@ snapshots: camel-case@4.1.2: dependencies: pascal-case: 3.1.2 - tslib: 2.7.0 + tslib: 2.8.1 camelcase-css@2.0.1: {} @@ -13398,7 +13404,7 @@ snapshots: capital-case@1.0.4: dependencies: no-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 upper-case-first: 2.0.2 ccount@2.0.1: {} @@ -13468,7 +13474,7 @@ snapshots: path-case: 3.0.4 sentence-case: 3.0.4 snake-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 change-case@5.4.4: {} @@ -13682,7 +13688,7 @@ snapshots: constant-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 upper-case: 2.0.2 conventional-changelog-angular@7.0.0: @@ -13926,7 +13932,7 @@ snapshots: dot-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 dot-prop@5.3.0: dependencies: @@ -14592,7 +14598,7 @@ snapshots: graphql-tag@2.12.6(graphql@16.10.0): dependencies: graphql: 16.10.0 - tslib: 2.7.0 + tslib: 2.8.1 graphql-ws@5.16.0(graphql@16.10.0): dependencies: @@ -14754,7 +14760,7 @@ snapshots: header-case@2.0.4: dependencies: capital-case: 1.0.4 - tslib: 2.7.0 + tslib: 2.8.1 hermes-estree@0.22.0: {} @@ -14982,7 +14988,7 @@ snapshots: is-lower-case@2.0.2: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 is-number@7.0.0: {} @@ -15028,7 +15034,7 @@ snapshots: is-upper-case@2.0.2: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 is-windows@1.0.2: {} @@ -15492,11 +15498,11 @@ snapshots: lower-case-first@2.0.2: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 lower-case@2.0.2: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 lru-cache@10.4.3: {} @@ -16332,7 +16338,7 @@ snapshots: no-case@3.0.4: dependencies: lower-case: 2.0.2 - tslib: 2.7.0 + tslib: 2.8.1 nocache@3.0.4: {} @@ -16558,7 +16564,7 @@ snapshots: param-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 parent-module@1.0.1: dependencies: @@ -16602,12 +16608,12 @@ snapshots: pascal-case@3.1.2: dependencies: no-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 path-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 path-exists@3.0.0: {} @@ -16990,7 +16996,7 @@ snapshots: dependencies: react: 18.3.1 react-style-singleton: 2.2.1(@types/react@18.3.9)(react@18.3.1) - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.9 @@ -16999,7 +17005,7 @@ snapshots: react: 18.3.1 react-remove-scroll-bar: 2.3.6(@types/react@18.3.9)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.3.9)(react@18.3.1) - tslib: 2.7.0 + tslib: 2.8.1 use-callback-ref: 1.3.2(@types/react@18.3.9)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.3.9)(react@18.3.1) optionalDependencies: @@ -17026,7 +17032,7 @@ snapshots: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.9 @@ -17087,7 +17093,7 @@ snapshots: ast-types: 0.15.2 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.7.0 + tslib: 2.8.1 redent@3.0.0: dependencies: @@ -17334,7 +17340,7 @@ snapshots: rxjs@7.8.1: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 safe-buffer@5.1.2: {} @@ -17396,7 +17402,7 @@ snapshots: sentence-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 upper-case-first: 2.0.2 serialize-error@2.1.0: {} @@ -17500,7 +17506,7 @@ snapshots: snake-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 socket.io-client@4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: @@ -17545,7 +17551,7 @@ snapshots: sponge-case@1.0.1: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 sprintf-js@1.0.3: {} @@ -17780,7 +17786,7 @@ snapshots: swap-case@2.0.2: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 symbol-tree@3.2.4: {} @@ -17881,7 +17887,7 @@ snapshots: title-case@3.0.3: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 tldts-core@6.1.47: {} @@ -18151,11 +18157,11 @@ snapshots: upper-case-first@2.0.2: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 upper-case@2.0.2: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 uqr@0.1.2: {} @@ -18164,7 +18170,7 @@ snapshots: use-callback-ref@1.3.2(@types/react@18.3.9)(react@18.3.1): dependencies: react: 18.3.1 - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.9 @@ -18176,7 +18182,7 @@ snapshots: dependencies: detect-node-es: 1.1.0 react: 18.3.1 - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.9 @@ -18297,6 +18303,8 @@ snapshots: - supports-color - terser + vite-plugin-sitemap@0.7.1: {} + vite@5.4.8(@types/node@22.6.1)(terser@5.33.0): dependencies: esbuild: 0.21.5 diff --git a/public/robots.txt b/public/robots.txt deleted file mode 100644 index 200b5966..00000000 --- a/public/robots.txt +++ /dev/null @@ -1,13 +0,0 @@ -# robots.txt for dAppBooster - -# Allow all user agents to crawl the site -User-agent: * - -# Allow crawling of all pages -Allow: / - -# Disallow crawling of specific directories -Disallow: /src/ -Disallow: /node_modules/ -Disallow: /env.ts -Disallow: /public/subgraphs/ diff --git a/vite.config.ts b/vite.config.ts index e0145574..22cf4f8c 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,11 +3,18 @@ import path from 'node:path' import { TanStackRouterVite } from '@tanstack/router-vite-plugin' import react from '@vitejs/plugin-react-swc' import { defineConfig } from 'vite' +import Sitemap from 'vite-plugin-sitemap' // https://vitejs.dev/config/ /** @type {import('vite').UserConfig} */ export default defineConfig({ - plugins: [react(), TanStackRouterVite()], + plugins: [ + react(), + TanStackRouterVite(), + Sitemap({ + hostname: 'https://dappbooster.dev', + }), + ], envPrefix: 'PUBLIC_', resolve: { alias: { From b4cb201aff784391e42bf991edcbf2dccfbfc20c Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Mon, 7 Apr 2025 17:46:21 -0300 Subject: [PATCH 068/228] chore: remove dependabot file to hopefully avoid the landing page's bot to keep creating new PRs --- .github/dependabot.yml | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index a351d007..00000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "npm" - directory: "/" - schedule: - interval: "monthly" - commit-message: - prefix: "chore" - pull-request-branch-name: - separator: "-" - rebase-strategy: "auto" - labels: - - "dependencies" - - "pnpm" From 009d7c06470e2178c1960ce36975411ea97ad046 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 11 Apr 2025 13:50:08 +0200 Subject: [PATCH 069/228] chore(vitest): bump vitest to v3 --- package.json | 5 +- pnpm-lock.yaml | 725 ++++++++++++++++++++++++++----------------------- 2 files changed, 391 insertions(+), 339 deletions(-) diff --git a/package.json b/package.json index 79e5bfca..2f978f45 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "@types/react": "^18.3.8", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react-swc": "^3.7.2", - "@vitest/coverage-v8": "^2.1.1", + "@vitest/coverage-v8": "^3.1.1", "@wagmi/cli": "^2.1.16", "change-case": "^5.4.4", "husky": "^9.1.7", @@ -80,12 +80,13 @@ "typedoc-plugin-zod": "^1.4.0", "typescript": "^5.6.2", "vite": "^6.2.4", - "vitest": "^2.1.1", + "vitest": "^3.1.1", "vocs": "1.0.0-alpha.59" }, "pnpm": { "onlyBuiltDependencies": [ "@biomejs/biome", + "@parcel/watcher", "@swc/core", "bigint-buffer", "bufferutil", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98826e0a..a505eec3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -101,7 +101,7 @@ importers: version: 1.58.7(@tanstack/react-router@1.58.7(@tanstack/router-generator@1.58.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/router-vite-plugin': specifier: ^1.93.0 - version: 1.93.0(@tanstack/react-router@1.58.7(@tanstack/router-generator@1.58.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 1.93.0(@tanstack/react-router@1.58.7(@tanstack/router-generator@1.58.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.6.3 @@ -119,10 +119,10 @@ importers: version: 18.3.0 '@vitejs/plugin-react-swc': specifier: ^3.7.2 - version: 3.7.2(@swc/helpers@0.5.15)(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 3.7.2(@swc/helpers@0.5.17)(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1)) '@vitest/coverage-v8': - specifier: ^2.1.1 - version: 2.1.1(vitest@2.1.1(@types/node@22.6.1)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0)) + specifier: ^3.1.1 + version: 3.1.1(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.6.1)(jiti@1.21.6)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1)) '@wagmi/cli': specifier: ^2.1.16 version: 2.1.16(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10) @@ -149,7 +149,7 @@ importers: version: 36.0.1(stylelint@16.9.0(typescript@5.6.2)) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.15))(@types/node@22.6.1)(typescript@5.6.2) + version: 10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2) typedoc: specifier: ^0.26.11 version: 0.26.11(typescript@5.6.2) @@ -170,13 +170,13 @@ importers: version: 5.6.2 vite: specifier: ^6.2.4 - version: 6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0) + version: 6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) vitest: - specifier: ^2.1.1 - version: 2.1.1(@types/node@22.6.1)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0) + specifier: ^3.1.1 + version: 3.1.1(@types/debug@4.1.12)(@types/node@22.6.1)(jiti@1.21.6)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) vocs: specifier: 1.0.0-alpha.59 - version: 1.0.0-alpha.59(@types/node@22.6.1)(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.39.0)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.15))(@types/node@22.6.1)(typescript@5.6.2))(typescript@5.6.2) + version: 1.0.0-alpha.59(@types/node@22.6.1)(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.39.0)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2))(typescript@5.6.2) packages: @@ -226,14 +226,14 @@ packages: resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.10': - resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.26.3': resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} engines: {node: '>=6.9.0'} + '@babel/generator@7.27.0': + resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.24.7': resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} @@ -250,24 +250,24 @@ packages: resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.26.5': - resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + '@babel/helper-compilation-targets@7.27.0': + resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.26.9': - resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==} + '@babel/helper-create-class-features-plugin@7.27.0': + resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.26.3': - resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} + '@babel/helper-create-regexp-features-plugin@7.27.0': + resolution: {integrity: sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.3': - resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} + '@babel/helper-define-polyfill-provider@0.6.4': + resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -376,13 +376,13 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.26.10': - resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} + '@babel/parser@7.26.3': + resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.26.3': - resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} + '@babel/parser@7.27.0': + resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} engines: {node: '>=6.0.0'} hasBin: true @@ -605,8 +605,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.25.9': - resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} + '@babel/plugin-transform-block-scoping@7.27.0': + resolution: {integrity: sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -851,8 +851,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.25.9': - resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + '@babel/plugin-transform-regenerator@7.27.0': + resolution: {integrity: sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -893,14 +893,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.26.7': - resolution: {integrity: sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==} + '@babel/plugin-transform-typeof-symbol@7.27.0': + resolution: {integrity: sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.26.8': - resolution: {integrity: sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==} + '@babel/plugin-transform-typescript@7.27.0': + resolution: {integrity: sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -946,8 +946,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-typescript@7.26.0': - resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} + '@babel/preset-typescript@7.27.0': + resolution: {integrity: sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -962,8 +962,8 @@ packages: resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.26.10': - resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} + '@babel/runtime@7.27.0': + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} engines: {node: '>=6.9.0'} '@babel/template@7.25.0': @@ -974,36 +974,37 @@ packages: resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/template@7.26.9': - resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + '@babel/template@7.27.0': + resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} engines: {node: '>=6.9.0'} '@babel/traverse@7.25.6': resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.10': - resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.4': resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.6': - resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + '@babel/traverse@7.27.0': + resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.10': - resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} '@babel/types@7.26.3': resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} engines: {node: '>=6.9.0'} - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@babel/types@7.27.0': + resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} '@biomejs/biome@1.9.2': resolution: {integrity: sha512-4j2Gfwft8Jqp1X0qLYvK4TEy4xhTo4o6rlvJPsjPeEame8gsmbGQfOPBkw7ur+7/Z/f0HZmCZKqbMvR7vTXQYQ==} @@ -3055,8 +3056,8 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} '@swc/types@0.1.12': resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} @@ -3322,8 +3323,8 @@ packages: '@types/ws@7.4.7': resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} - '@types/ws@8.18.0': - resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -3387,44 +3388,43 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 - '@vitest/coverage-v8@2.1.1': - resolution: {integrity: sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==} + '@vitest/coverage-v8@3.1.1': + resolution: {integrity: sha512-MgV6D2dhpD6Hp/uroUoAIvFqA8AuvXEFBC2eepG3WFc1pxTfdk1LEqqkWoWhjz+rytoqrnUUCdf6Lzco3iHkLQ==} peerDependencies: - '@vitest/browser': 2.1.1 - vitest: 2.1.1 + '@vitest/browser': 3.1.1 + vitest: 3.1.1 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@2.1.1': - resolution: {integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==} + '@vitest/expect@3.1.1': + resolution: {integrity: sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==} - '@vitest/mocker@2.1.1': - resolution: {integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==} + '@vitest/mocker@3.1.1': + resolution: {integrity: sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==} peerDependencies: - '@vitest/spy': 2.1.1 - msw: ^2.3.5 - vite: ^5.0.0 + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@2.1.1': - resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==} + '@vitest/pretty-format@3.1.1': + resolution: {integrity: sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==} - '@vitest/runner@2.1.1': - resolution: {integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==} + '@vitest/runner@3.1.1': + resolution: {integrity: sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==} - '@vitest/snapshot@2.1.1': - resolution: {integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==} + '@vitest/snapshot@3.1.1': + resolution: {integrity: sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==} - '@vitest/spy@2.1.1': - resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==} + '@vitest/spy@3.1.1': + resolution: {integrity: sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==} - '@vitest/utils@2.1.1': - resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==} + '@vitest/utils@3.1.1': + resolution: {integrity: sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==} '@wagmi/cli@2.1.16': resolution: {integrity: sha512-uERiNCAwThM6Vwgyrimlf+X8tOF0EjDnir6NHqCoumTquJ1/nlKBvpe0CHD3aDx2RQCOWCqhkUIImtN9yk3Oag==} @@ -3748,8 +3748,8 @@ packages: babel-dead-code-elimination@1.0.8: resolution: {integrity: sha512-og6HQERk0Cmm+nTT4Od2wbPtgABXFMPaHACjbKLulZIFMkYyXZLkUGuAxdgpMJBrxyt/XFpSz++lNzjbcMnPkQ==} - babel-plugin-polyfill-corejs2@0.4.12: - resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + babel-plugin-polyfill-corejs2@0.4.13: + resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -3763,8 +3763,8 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.3: - resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + babel-plugin-polyfill-regenerator@0.6.4: + resolution: {integrity: sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -3943,14 +3943,14 @@ packages: caniuse-lite@1.0.30001690: resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} - caniuse-lite@1.0.30001705: - resolution: {integrity: sha512-S0uyMMiYvA7CxNgomYBwwwPUnWzFD83f3B1ce5jHUfHTH//QL6hHsreI8RVC5606R4ssqravelYO5TU6t8sEyg==} + caniuse-lite@1.0.30001713: + resolution: {integrity: sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.1.1: - resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} chalk@2.4.2: @@ -4462,8 +4462,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.119: - resolution: {integrity: sha512-Ku4NMzUjz3e3Vweh7PhApPrZSS4fyiCIbcIrG9eKrriYVLmbMepETR/v6SU7xPm98QTqMSYiCwfO89QNjXLkbQ==} + electron-to-chromium@1.5.136: + resolution: {integrity: sha512-kL4+wUTD7RSA5FHx5YwWtjDnEEkIIikFgWHR4P6fqjw1PPLlqYkxeOb++wAauAssat0YClCy8Y3C5SxgSkjibQ==} electron-to-chromium@1.5.28: resolution: {integrity: sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==} @@ -4542,6 +4542,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + es6-promise@4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} @@ -4674,6 +4677,10 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + expect-type@1.2.1: + resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} + engines: {node: '>=12.0.0'} + exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} @@ -4790,8 +4797,8 @@ packages: flow-enums-runtime@0.0.6: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} - flow-parser@0.265.2: - resolution: {integrity: sha512-DX2mp5u3lNJHl5dH8R1KrcrDsiJC02zFcG95p4b0YcDCzZZW+v9za2Csv5bQ0cq4jNzGx0gFU9jFZyM7FOyNFw==} + flow-parser@0.266.1: + resolution: {integrity: sha512-dON6h+yO7FGa/FO5NQCZuZHN0o3I23Ev6VYOJf9d8LpdrArHPt39wE++LLmueNV/hNY5hgWGIIrgnrDkRcXkPg==} engines: {node: '>=0.4.0'} focus-trap@7.5.4: @@ -5113,8 +5120,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - image-size@1.2.0: - resolution: {integrity: sha512-4S8fwbO6w3GeCVN6OPtA9I5IGKkcDMPcKndtUlpJuCwu7JLjtj7JZpwqLuyY2nrmQT3AWsCJLSKPsc2mPBSl3w==} + image-size@1.2.1: + resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==} engines: {node: '>=16.x'} hasBin: true @@ -5642,6 +5649,9 @@ packages: loupe@3.1.1: resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -5655,8 +5665,8 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - magic-string@0.30.11: - resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -6366,6 +6376,9 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} @@ -6422,6 +6435,10 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} @@ -6511,8 +6528,8 @@ packages: preact@10.24.0: resolution: {integrity: sha512-aK8Cf+jkfyuZ0ZZRG9FbYqwmEiGQ4y/PUO4SuTWoyWL244nZZh7bd5h2APd4rSNDYTBNghg1L+5iJN3Skxtbsw==} - preact@10.26.4: - resolution: {integrity: sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w==} + preact@10.26.5: + resolution: {integrity: sha512-fmpDkgfGU6JYux9teDWLhj9mKN55tyepwYbxHgQuIxbWQzgFg5vk7Mrrtfx7xRxq798ynkY4DDDxZr235Kk+4w==} prettier@3.3.3: resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} @@ -7167,8 +7184,8 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - std-env@3.7.0: - resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + std-env@3.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} stdin-discarder@0.1.0: resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} @@ -7391,12 +7408,15 @@ packages: tinyexec@0.3.0: resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} - tinypool@1.0.1: - resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} engines: {node: ^18.0.0 || >=20.0.0} - tinyrainbow@1.2.0: - resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} tinyspy@3.0.2: @@ -7788,9 +7808,9 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite-node@2.1.1: - resolution: {integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==} - engines: {node: ^18.0.0 || >=20.0.0} + vite-node@3.1.1: + resolution: {integrity: sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true vite@5.4.8: @@ -7864,20 +7884,23 @@ packages: yaml: optional: true - vitest@2.1.1: - resolution: {integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==} - engines: {node: ^18.0.0 || >=20.0.0} + vitest@3.1.1: + resolution: {integrity: sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.1 - '@vitest/ui': 2.1.1 + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.1.1 + '@vitest/ui': 3.1.1 happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true + '@types/debug': + optional: true '@types/node': optional: true '@vitest/browser': @@ -8095,6 +8118,11 @@ packages: engines: {node: '>= 14'} hasBin: true + yaml@2.7.1: + resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} + engines: {node: '>= 14'} + hasBin: true + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -8154,7 +8182,7 @@ snapshots: '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 '@babel/code-frame@7.24.7': @@ -8221,14 +8249,6 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - '@babel/generator@7.26.10': - dependencies: - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - '@babel/generator@7.26.3': dependencies: '@babel/parser': 7.26.3 @@ -8237,13 +8257,21 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 + '@babel/generator@7.27.0': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.24.7': dependencies: '@babel/types': 7.25.6 '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.10 + '@babel/types': 7.27.0 '@babel/helper-compilation-targets@7.25.2': dependencies: @@ -8261,7 +8289,7 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-compilation-targets@7.26.5': + '@babel/helper-compilation-targets@7.27.0': dependencies: '@babel/compat-data': 7.26.8 '@babel/helper-validator-option': 7.25.9 @@ -8269,7 +8297,7 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.25.2)': + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.25.9 @@ -8277,12 +8305,12 @@ snapshots: '@babel/helper-optimise-call-expression': 7.25.9 '@babel/helper-replace-supers': 7.26.5(@babel/core@7.25.2) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.10 + '@babel/traverse': 7.27.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.0)': + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 @@ -8290,22 +8318,22 @@ snapshots: '@babel/helper-optimise-call-expression': 7.25.9 '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.10 + '@babel/traverse': 7.27.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.25.2)': + '@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.25.9 regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.25.2)': + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-compilation-targets': 7.27.0 '@babel/helper-plugin-utils': 7.26.5 debug: 4.4.0 lodash.debounce: 4.0.8 @@ -8315,8 +8343,8 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.26.10 - '@babel/types': 7.26.10 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color @@ -8364,7 +8392,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.26.10 + '@babel/types': 7.27.0 '@babel/helper-plugin-utils@7.24.8': {} @@ -8377,7 +8405,7 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.26.10 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color @@ -8386,7 +8414,7 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.10 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color @@ -8395,7 +8423,7 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.10 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color @@ -8408,8 +8436,8 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.26.10 - '@babel/types': 7.26.10 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color @@ -8427,9 +8455,9 @@ snapshots: '@babel/helper-wrap-function@7.25.9': dependencies: - '@babel/template': 7.26.9 - '@babel/traverse': 7.26.10 - '@babel/types': 7.26.10 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color @@ -8454,19 +8482,19 @@ snapshots: dependencies: '@babel/types': 7.25.6 - '@babel/parser@7.26.10': - dependencies: - '@babel/types': 7.26.10 - '@babel/parser@7.26.3': dependencies: '@babel/types': 7.26.3 + '@babel/parser@7.27.0': + dependencies: + '@babel/types': 7.27.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.10 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color @@ -8493,14 +8521,14 @@ snapshots: dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.10 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.0) + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -8672,7 +8700,7 @@ snapshots: '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.2) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.25.2)': @@ -8685,7 +8713,7 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.2) - '@babel/traverse': 7.26.10 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color @@ -8703,7 +8731,7 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.26.5 @@ -8711,7 +8739,7 @@ snapshots: '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.25.2) + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -8719,7 +8747,7 @@ snapshots: '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.25.2) + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -8728,10 +8756,10 @@ snapshots: dependencies: '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-compilation-targets': 7.27.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-replace-supers': 7.26.5(@babel/core@7.25.2) - '@babel/traverse': 7.26.10 + '@babel/traverse': 7.27.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -8740,7 +8768,7 @@ snapshots: dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.26.5 - '@babel/template': 7.26.9 + '@babel/template': 7.27.0 '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.25.2)': dependencies: @@ -8750,7 +8778,7 @@ snapshots: '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.2) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.25.2)': @@ -8761,7 +8789,7 @@ snapshots: '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.2) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.25.2)': @@ -8802,9 +8830,9 @@ snapshots: '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-compilation-targets': 7.27.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.10 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color @@ -8858,7 +8886,7 @@ snapshots: '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.10 + '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color @@ -8873,7 +8901,7 @@ snapshots: '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.2) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.25.2)': @@ -8894,7 +8922,7 @@ snapshots: '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-compilation-targets': 7.27.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.2) @@ -8927,7 +8955,7 @@ snapshots: '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.25.2) + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -8936,7 +8964,7 @@ snapshots: dependencies: '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.25.2) + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color @@ -8978,11 +9006,11 @@ snapshots: '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.2) - '@babel/types': 7.26.10 + '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.26.5 @@ -8998,9 +9026,9 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.25.2) babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.25.2) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.25.2) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -9028,27 +9056,27 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.25.2)': + '@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typescript@7.26.8(@babel/core@7.25.2)': + '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.25.2) + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-typescript@7.26.8(@babel/core@7.26.0)': + '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.0) + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) @@ -9063,26 +9091,26 @@ snapshots: '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.2) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.2) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.25.2) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.26.5 '@babel/preset-env@7.25.4(@babel/core@7.25.2)': dependencies: '@babel/compat-data': 7.26.8 '@babel/core': 7.25.2 - '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-compilation-targets': 7.27.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.25.2) @@ -9113,7 +9141,7 @@ snapshots: '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.25.2) '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.25.2) - '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.25.2) '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.25.2) '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.25.2) @@ -9147,21 +9175,21 @@ snapshots: '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.25.2) '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.25.2) - '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.25.2) + '@babel/plugin-transform-typeof-symbol': 7.27.0(@babel/core@7.25.2) '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.25.2) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.25.2) babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.25.2) core-js-compat: 3.41.0 semver: 6.3.1 transitivePeerDependencies: @@ -9178,17 +9206,17 @@ snapshots: dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.26.5 - '@babel/types': 7.26.10 + '@babel/types': 7.27.0 esutils: 2.0.3 - '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)': + '@babel/preset-typescript@7.27.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-option': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.0) transitivePeerDependencies: - supports-color @@ -9198,14 +9226,14 @@ snapshots: clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 - pirates: 4.0.6 + pirates: 4.0.7 source-map-support: 0.5.21 '@babel/runtime@7.25.6': dependencies: regenerator-runtime: 0.14.1 - '@babel/runtime@7.26.10': + '@babel/runtime@7.27.0': dependencies: regenerator-runtime: 0.14.1 @@ -9221,11 +9249,11 @@ snapshots: '@babel/parser': 7.26.3 '@babel/types': 7.26.3 - '@babel/template@7.26.9': + '@babel/template@7.27.0': dependencies: '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 '@babel/traverse@7.25.6(supports-color@5.5.0)': dependencies: @@ -9239,18 +9267,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.26.10': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.10 - '@babel/parser': 7.26.10 - '@babel/template': 7.26.9 - '@babel/types': 7.26.10 - debug: 4.4.0 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.26.4': dependencies: '@babel/code-frame': 7.26.2 @@ -9263,23 +9279,35 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.27.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.25.6': dependencies: '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 - '@babel/types@7.26.10': + '@babel/types@7.26.3': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/types@7.26.3': + '@babel/types@7.27.0': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@bcoe/v8-coverage@0.2.3': {} + '@bcoe/v8-coverage@1.0.2': {} '@biomejs/biome@1.9.2': optionalDependencies: @@ -9342,7 +9370,7 @@ snapshots: eth-json-rpc-filters: 6.0.1 eventemitter3: 5.0.1 keccak: 3.0.4 - preact: 10.26.4 + preact: 10.26.5 sha.js: 2.4.11 transitivePeerDependencies: - supports-color @@ -10093,7 +10121,7 @@ snapshots: bufferutil: 4.0.8 cross-fetch: 4.0.0 date-fns: 2.30.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0 eciesjs: 0.3.20 eventemitter2: 6.4.9 readable-stream: 3.6.2 @@ -10122,7 +10150,7 @@ snapshots: '@types/uuid': 10.0.0 bowser: 2.11.0 cross-fetch: 4.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0 eciesjs: 0.3.20 eth-rpc-errors: 4.0.3 eventemitter2: 6.4.9 @@ -10167,9 +10195,9 @@ snapshots: '@noble/hashes': 1.5.0 '@scure/base': 1.1.9 '@types/debug': 4.1.12 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0 pony-cause: 2.1.11 - semver: 7.6.3 + semver: 7.7.1 uuid: 9.0.1 transitivePeerDependencies: - supports-color @@ -10718,7 +10746,7 @@ snapshots: semver: 7.7.1 strip-ansi: 5.2.0 wcwidth: 1.0.1 - yaml: 2.7.0 + yaml: 2.7.1 transitivePeerDependencies: - typescript @@ -10822,7 +10850,7 @@ snapshots: '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.25.2) '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.25.2) '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.25.2) @@ -10846,14 +10874,14 @@ snapshots: '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.25.2) '@babel/plugin-transform-runtime': 7.26.10(@babel/core@7.25.2) '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.25.2) + '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.25.2) '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.25.2) - '@babel/template': 7.26.9 + '@babel/template': 7.27.0 '@react-native/babel-plugin-codegen': 0.75.3(@babel/preset-env@7.25.4(@babel/core@7.25.2)) babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.25.2) react-refresh: 0.14.2 @@ -10863,7 +10891,7 @@ snapshots: '@react-native/codegen@0.75.3(@babel/preset-env@7.25.4(@babel/core@7.25.2))': dependencies: - '@babel/parser': 7.26.10 + '@babel/parser': 7.27.0 '@babel/preset-env': 7.25.4(@babel/core@7.25.2) glob: 7.2.3 hermes-parser: 0.22.0 @@ -11232,7 +11260,7 @@ snapshots: '@solana/web3.js@1.95.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.27.0 '@noble/curves': 1.8.1 '@noble/hashes': 1.7.1 '@solana/buffer-layout': 4.0.1 @@ -11362,7 +11390,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.7.28': optional: true - '@swc/core@1.7.28(@swc/helpers@0.5.15)': + '@swc/core@1.7.28(@swc/helpers@0.5.17)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.12 @@ -11377,11 +11405,11 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.7.28 '@swc/core-win32-ia32-msvc': 1.7.28 '@swc/core-win32-x64-msvc': 1.7.28 - '@swc/helpers': 0.5.15 + '@swc/helpers': 0.5.17 '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.15': + '@swc/helpers@0.5.17': dependencies: tslib: 2.8.1 @@ -11468,7 +11496,7 @@ snapshots: optionalDependencies: '@tanstack/react-router': 1.58.7(@tanstack/router-generator@1.58.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/router-plugin@1.93.0(@tanstack/react-router@1.58.7(@tanstack/router-generator@1.58.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0))': + '@tanstack/router-plugin@1.93.0(@tanstack/react-router@1.58.7(@tanstack/router-generator@1.58.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1))': dependencies: '@babel/core': 7.26.0 '@babel/generator': 7.26.3 @@ -11489,14 +11517,14 @@ snapshots: unplugin: 1.16.0 zod: 3.23.8 optionalDependencies: - vite: 6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) transitivePeerDependencies: - '@tanstack/react-router' - supports-color - '@tanstack/router-vite-plugin@1.93.0(@tanstack/react-router@1.58.7(@tanstack/router-generator@1.58.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0))': + '@tanstack/router-vite-plugin@1.93.0(@tanstack/react-router@1.58.7(@tanstack/router-generator@1.58.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1))': dependencies: - '@tanstack/router-plugin': 1.93.0(@tanstack/react-router@1.58.7(@tanstack/router-generator@1.58.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0)) + '@tanstack/router-plugin': 1.93.0(@tanstack/react-router@1.58.7(@tanstack/router-generator@1.58.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1)) transitivePeerDependencies: - '@rsbuild/core' - '@tanstack/react-router' @@ -11515,7 +11543,7 @@ snapshots: '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.26.2 - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.27.0 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -11671,7 +11699,7 @@ snapshots: dependencies: '@types/node': 22.6.1 - '@types/ws@8.18.0': + '@types/ws@8.18.1': dependencies: '@types/node': 22.6.1 @@ -11752,12 +11780,12 @@ snapshots: '@vanilla-extract/private@1.0.6': {} - '@vanilla-extract/vite-plugin@3.9.5(@types/node@22.6.1)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.15))(@types/node@22.6.1)(typescript@5.6.2))(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0))': + '@vanilla-extract/vite-plugin@3.9.5(@types/node@22.6.1)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2))(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0))': dependencies: '@vanilla-extract/integration': 6.5.0(@types/node@22.6.1)(terser@5.39.0) outdent: 0.8.0 postcss: 8.4.47 - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.15))(@types/node@22.6.1)(typescript@5.6.2)) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2)) vite: 5.4.8(@types/node@22.6.1)(terser@5.39.0) transitivePeerDependencies: - '@types/node' @@ -11778,10 +11806,10 @@ snapshots: optionalDependencies: react: 18.3.1 - '@vitejs/plugin-react-swc@3.7.2(@swc/helpers@0.5.15)(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0))': + '@vitejs/plugin-react-swc@3.7.2(@swc/helpers@0.5.17)(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1))': dependencies: - '@swc/core': 1.7.28(@swc/helpers@0.5.15) - vite: 6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0) + '@swc/core': 1.7.28(@swc/helpers@0.5.17) + vite: 6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) transitivePeerDependencies: - '@swc/helpers' @@ -11796,63 +11824,63 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@2.1.1(vitest@2.1.1(@types/node@22.6.1)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0))': + '@vitest/coverage-v8@3.1.1(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.6.1)(jiti@1.21.6)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1))': dependencies: '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.7(supports-color@5.5.0) + '@bcoe/v8-coverage': 1.0.2 + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.1.7 - magic-string: 0.30.11 + magic-string: 0.30.17 magicast: 0.3.5 - std-env: 3.7.0 + std-env: 3.9.0 test-exclude: 7.0.1 - tinyrainbow: 1.2.0 - vitest: 2.1.1(@types/node@22.6.1)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0) + tinyrainbow: 2.0.0 + vitest: 3.1.1(@types/debug@4.1.12)(@types/node@22.6.1)(jiti@1.21.6)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) transitivePeerDependencies: - supports-color - '@vitest/expect@2.1.1': + '@vitest/expect@3.1.1': dependencies: - '@vitest/spy': 2.1.1 - '@vitest/utils': 2.1.1 - chai: 5.1.1 - tinyrainbow: 1.2.0 + '@vitest/spy': 3.1.1 + '@vitest/utils': 3.1.1 + chai: 5.2.0 + tinyrainbow: 2.0.0 - '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0))': + '@vitest/mocker@3.1.1(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1))': dependencies: - '@vitest/spy': 2.1.1 + '@vitest/spy': 3.1.1 estree-walker: 3.0.3 - magic-string: 0.30.11 + magic-string: 0.30.17 optionalDependencies: - vite: 5.4.8(@types/node@22.6.1)(terser@5.39.0) + vite: 6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) - '@vitest/pretty-format@2.1.1': + '@vitest/pretty-format@3.1.1': dependencies: - tinyrainbow: 1.2.0 + tinyrainbow: 2.0.0 - '@vitest/runner@2.1.1': + '@vitest/runner@3.1.1': dependencies: - '@vitest/utils': 2.1.1 - pathe: 1.1.2 + '@vitest/utils': 3.1.1 + pathe: 2.0.3 - '@vitest/snapshot@2.1.1': + '@vitest/snapshot@3.1.1': dependencies: - '@vitest/pretty-format': 2.1.1 - magic-string: 0.30.11 - pathe: 1.1.2 + '@vitest/pretty-format': 3.1.1 + magic-string: 0.30.17 + pathe: 2.0.3 - '@vitest/spy@2.1.1': + '@vitest/spy@3.1.1': dependencies: tinyspy: 3.0.2 - '@vitest/utils@2.1.1': + '@vitest/utils@3.1.1': dependencies: - '@vitest/pretty-format': 2.1.1 - loupe: 3.1.1 - tinyrainbow: 1.2.0 + '@vitest/pretty-format': 3.1.1 + loupe: 3.1.3 + tinyrainbow: 2.0.0 '@wagmi/cli@2.1.16(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)': dependencies: @@ -12427,11 +12455,11 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.25.2): + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.25.2): dependencies: '@babel/compat-data': 7.26.8 '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.25.2) + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.25.2) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -12439,7 +12467,7 @@ snapshots: babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2): dependencies: '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.25.2) + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.25.2) core-js-compat: 3.41.0 transitivePeerDependencies: - supports-color @@ -12447,15 +12475,15 @@ snapshots: babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.25.2): dependencies: '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.25.2) + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.25.2) core-js-compat: 3.41.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.25.2): + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.25.2): dependencies: '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.25.2) + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.25.2) transitivePeerDependencies: - supports-color @@ -12560,8 +12588,8 @@ snapshots: browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001705 - electron-to-chromium: 1.5.119 + caniuse-lite: 1.0.30001713 + electron-to-chromium: 1.5.136 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.4) @@ -12639,11 +12667,11 @@ snapshots: caniuse-lite@1.0.30001690: {} - caniuse-lite@1.0.30001705: {} + caniuse-lite@1.0.30001713: {} ccount@2.0.1: {} - chai@5.1.1: + chai@5.2.0: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 @@ -13127,7 +13155,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.119: {} + electron-to-chromium@1.5.136: {} electron-to-chromium@1.5.28: {} @@ -13202,6 +13230,8 @@ snapshots: es-errors@1.3.0: {} + es-module-lexer@1.6.0: {} + es6-promise@4.2.8: {} es6-promisify@5.0.0: @@ -13440,6 +13470,8 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + expect-type@1.2.1: {} + exponential-backoff@3.1.2: {} extend@3.0.2: {} @@ -13563,7 +13595,7 @@ snapshots: flow-enums-runtime@0.0.6: {} - flow-parser@0.265.2: {} + flow-parser@0.266.1: {} focus-trap@7.5.4: dependencies: @@ -13988,7 +14020,7 @@ snapshots: ignore@5.3.2: {} - image-size@1.2.0: + image-size@1.2.1: dependencies: queue: 6.0.2 @@ -14170,7 +14202,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.25 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -14288,18 +14320,18 @@ snapshots: jscodeshift@0.14.0(@babel/preset-env@7.25.4(@babel/core@7.25.2)): dependencies: '@babel/core': 7.26.0 - '@babel/parser': 7.26.10 + '@babel/parser': 7.27.0 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.0) '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.26.0) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.26.0) '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) '@babel/preset-env': 7.25.4(@babel/core@7.25.2) '@babel/preset-flow': 7.25.9(@babel/core@7.26.0) - '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) + '@babel/preset-typescript': 7.27.0(@babel/core@7.26.0) '@babel/register': 7.25.9(@babel/core@7.26.0) babel-core: 7.0.0-bridge.0(@babel/core@7.26.0) chalk: 4.1.2 - flow-parser: 0.265.2 + flow-parser: 0.266.1 graceful-fs: 4.2.11 micromatch: 4.0.8 neo-async: 2.6.2 @@ -14443,7 +14475,7 @@ snapshots: mlly: 1.7.1 node-forge: 1.3.1 pathe: 1.1.2 - std-env: 3.7.0 + std-env: 3.9.0 ufo: 1.5.4 untun: 0.1.3 uqr: 0.1.2 @@ -14556,6 +14588,8 @@ snapshots: dependencies: get-func-name: 2.0.2 + loupe@3.1.3: {} + lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -14566,14 +14600,14 @@ snapshots: lz-string@1.5.0: {} - magic-string@0.30.11: + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 magicast@0.3.5: dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 source-map-js: 1.2.1 make-dir@2.1.0: @@ -14583,7 +14617,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.1 make-error@1.3.6: {} @@ -14885,13 +14919,13 @@ snapshots: metro-runtime@0.80.12: dependencies: - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.27.0 flow-enums-runtime: 0.0.6 metro-source-map@0.80.12: dependencies: - '@babel/traverse': 7.26.10 - '@babel/types': 7.26.10 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 flow-enums-runtime: 0.0.6 invariant: 2.2.4 metro-symbolicate: 0.80.12 @@ -14917,9 +14951,9 @@ snapshots: metro-transform-plugins@0.80.12: dependencies: '@babel/core': 7.26.0 - '@babel/generator': 7.26.10 - '@babel/template': 7.26.9 - '@babel/traverse': 7.26.10 + '@babel/generator': 7.27.0 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0 flow-enums-runtime: 0.0.6 nullthrows: 1.1.1 transitivePeerDependencies: @@ -14928,9 +14962,9 @@ snapshots: metro-transform-worker@0.80.12(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@babel/core': 7.26.0 - '@babel/generator': 7.26.10 - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 + '@babel/generator': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 flow-enums-runtime: 0.0.6 metro: 0.80.12(bufferutil@4.0.9)(utf-8-validate@5.0.10) metro-babel-transformer: 0.80.12 @@ -14949,11 +14983,11 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.26.0 - '@babel/generator': 7.26.10 - '@babel/parser': 7.26.10 - '@babel/template': 7.26.9 - '@babel/traverse': 7.26.10 - '@babel/types': 7.26.10 + '@babel/generator': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 accepts: 1.3.8 chalk: 4.1.2 ci-info: 2.0.0 @@ -14964,7 +14998,7 @@ snapshots: flow-enums-runtime: 0.0.6 graceful-fs: 4.2.11 hermes-parser: 0.23.1 - image-size: 1.2.0 + image-size: 1.2.1 invariant: 2.2.4 jest-worker: 29.7.0 jsc-safe-url: 0.2.4 @@ -15656,6 +15690,8 @@ snapshots: pathe@1.1.2: {} + pathe@2.0.3: {} + pathval@2.0.0: {} periscopic@3.1.0: @@ -15705,6 +15741,8 @@ snapshots: pirates@4.0.6: {} + pirates@4.0.7: {} + pkg-dir@3.0.0: dependencies: find-up: 3.0.0 @@ -15740,13 +15778,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.28(@swc/helpers@0.5.15))(@types/node@22.6.1)(typescript@5.6.2)): + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2)): dependencies: lilconfig: 3.1.2 yaml: 2.7.0 optionalDependencies: postcss: 8.4.47 - ts-node: 10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.15))(@types/node@22.6.1)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2) postcss-nested@6.2.0(postcss@8.4.47): dependencies: @@ -15791,7 +15829,7 @@ snapshots: preact@10.24.0: {} - preact@10.26.4: {} + preact@10.26.5: {} prettier@3.3.3: {} @@ -16132,7 +16170,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.27.0 regex-recursion@5.1.1: dependencies: @@ -16370,9 +16408,9 @@ snapshots: rpc-websockets@9.1.1: dependencies: - '@swc/helpers': 0.5.15 + '@swc/helpers': 0.5.17 '@types/uuid': 8.3.4 - '@types/ws': 8.18.0 + '@types/ws': 8.18.1 buffer: 6.0.3 eventemitter3: 5.0.1 uuid: 8.3.2 @@ -16602,7 +16640,7 @@ snapshots: statuses@2.0.1: {} - std-env@3.7.0: {} + std-env@3.9.0: {} stdin-discarder@0.1.0: dependencies: @@ -16825,7 +16863,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.15))(@types/node@22.6.1)(typescript@5.6.2)): + tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -16844,7 +16882,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.28(@swc/helpers@0.5.15))(@types/node@22.6.1)(typescript@5.6.2)) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2)) postcss-nested: 6.2.0(postcss@8.4.47) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -16902,9 +16940,11 @@ snapshots: tinyexec@0.3.0: {} - tinypool@1.0.1: {} + tinyexec@0.3.2: {} + + tinypool@1.0.2: {} - tinyrainbow@1.2.0: {} + tinyrainbow@2.0.0: {} tinyspy@3.0.2: {} @@ -16942,7 +16982,7 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.15))(@types/node@22.6.1)(typescript@5.6.2): + ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -16960,7 +17000,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.7.28(@swc/helpers@0.5.15) + '@swc/core': 1.7.28(@swc/helpers@0.5.17) tslib@1.14.1: {} @@ -17268,7 +17308,7 @@ snapshots: vite-node@1.6.0(@types/node@22.6.1)(terser@5.39.0): dependencies: cac: 6.7.14 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.4.0 pathe: 1.1.2 picocolors: 1.1.0 vite: 5.4.8(@types/node@22.6.1)(terser@5.39.0) @@ -17283,14 +17323,16 @@ snapshots: - supports-color - terser - vite-node@2.1.1(@types/node@22.6.1)(terser@5.39.0): + vite-node@3.1.1(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1): dependencies: cac: 6.7.14 - debug: 4.3.7(supports-color@5.5.0) - pathe: 1.1.2 - vite: 5.4.8(@types/node@22.6.1)(terser@5.39.0) + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' + - jiti - less - lightningcss - sass @@ -17299,6 +17341,8 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml vite@5.4.8(@types/node@22.6.1)(terser@5.39.0): dependencies: @@ -17310,7 +17354,7 @@ snapshots: fsevents: 2.3.3 terser: 5.39.0 - vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0): + vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1): dependencies: esbuild: 0.25.2 postcss: 8.5.3 @@ -17321,33 +17365,36 @@ snapshots: jiti: 1.21.6 terser: 5.39.0 tsx: 4.19.2 - yaml: 2.7.0 - - vitest@2.1.1(@types/node@22.6.1)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0): - dependencies: - '@vitest/expect': 2.1.1 - '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0)) - '@vitest/pretty-format': 2.1.1 - '@vitest/runner': 2.1.1 - '@vitest/snapshot': 2.1.1 - '@vitest/spy': 2.1.1 - '@vitest/utils': 2.1.1 - chai: 5.1.1 - debug: 4.3.7(supports-color@5.5.0) - magic-string: 0.30.11 - pathe: 1.1.2 - std-env: 3.7.0 + yaml: 2.7.1 + + vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.6.1)(jiti@1.21.6)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1): + dependencies: + '@vitest/expect': 3.1.1 + '@vitest/mocker': 3.1.1(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1)) + '@vitest/pretty-format': 3.1.1 + '@vitest/runner': 3.1.1 + '@vitest/snapshot': 3.1.1 + '@vitest/spy': 3.1.1 + '@vitest/utils': 3.1.1 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.2.1 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.9.0 tinybench: 2.9.0 - tinyexec: 0.3.0 - tinypool: 1.0.1 - tinyrainbow: 1.2.0 - vite: 5.4.8(@types/node@22.6.1)(terser@5.39.0) - vite-node: 2.1.1(@types/node@22.6.1)(terser@5.39.0) + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) + vite-node: 3.1.1(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: + '@types/debug': 4.1.12 '@types/node': 22.6.1 jsdom: 25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: + - jiti - less - lightningcss - msw @@ -17357,10 +17404,12 @@ snapshots: - sugarss - supports-color - terser + - tsx + - yaml vlq@1.0.1: {} - vocs@1.0.0-alpha.59(@types/node@22.6.1)(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.39.0)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.15))(@types/node@22.6.1)(typescript@5.6.2))(typescript@5.6.2): + vocs@1.0.0-alpha.59(@types/node@22.6.1)(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.39.0)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2))(typescript@5.6.2): dependencies: '@floating-ui/react': 0.26.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@hono/node-server': 1.13.1(hono@3.12.12) @@ -17380,7 +17429,7 @@ snapshots: '@shikijs/twoslash': 1.18.0(typescript@5.6.2) '@vanilla-extract/css': 1.15.5 '@vanilla-extract/dynamic': 2.1.2 - '@vanilla-extract/vite-plugin': 3.9.5(@types/node@22.6.1)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.15))(@types/node@22.6.1)(typescript@5.6.2))(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0)) + '@vanilla-extract/vite-plugin': 3.9.5(@types/node@22.6.1)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2))(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0)) '@vitejs/plugin-react': 4.3.1(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0)) autoprefixer: 10.4.20(postcss@8.4.47) cac: 6.7.14 @@ -17418,7 +17467,7 @@ snapshots: remark-parse: 11.0.0 serve-static: 1.16.2 shiki: 1.18.0 - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.15))(@types/node@22.6.1)(typescript@5.6.2)) + tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2)) toml: 3.0.0 twoslash: 0.2.11(typescript@5.6.2) ua-parser-js: 1.0.39 @@ -17627,6 +17676,8 @@ snapshots: yaml@2.7.0: {} + yaml@2.7.1: {} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 From 652fb0e0fc720af6f6168d6cd54078ccafacf665 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 11 Apr 2025 14:12:31 +0200 Subject: [PATCH 070/228] test(BigNumberInput): fix errors and false positives also: no skipped tests --- .../sharedComponents/BigNumberInput.test.tsx | 12 ++++++------ src/components/sharedComponents/BigNumberInput.tsx | 2 -- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/components/sharedComponents/BigNumberInput.test.tsx b/src/components/sharedComponents/BigNumberInput.test.tsx index 07586dcd..6266ae78 100644 --- a/src/components/sharedComponents/BigNumberInput.test.tsx +++ b/src/components/sharedComponents/BigNumberInput.test.tsx @@ -1,6 +1,6 @@ +import '@testing-library/jest-dom' import { render, screen } from '@testing-library/react' import { userEvent } from '@testing-library/user-event' -import '@testing-library/jest-dom' import { parseUnits } from 'viem' import { describe, expect, it, vi } from 'vitest' @@ -114,14 +114,16 @@ describe('BigNumberInput', () => { message: 'Invalid value! Range: [0.00, 2.00] and value is: 3.00', }) + await user.clear(input) await user.paste('1.00') - expect(handleError).toHaveBeenCalledWith(null) + expect(handleError).toHaveBeenCalledOnce() }) it('displays custom rendered input', () => { - const customRenderInput = (props: RenderInputProps) => ( + const customRenderInput = ({ inputRef, ...props }: RenderInputProps) => ( ) @@ -129,15 +131,13 @@ describe('BigNumberInput', () => { expect(screen.getByTestId('custom-input')).toBeInTheDocument() }) - // TODO: fix test, or code? - it.skip('resets input value when cleared', async () => { + it('resets input value when cleared', async () => { const handleChange = vi.fn() setup({ onChange: handleChange, value: parseUnits('1.123', 2) }) const user = userEvent.setup() const input = screen.getByPlaceholderText('0.00') await user.clear(input) - expect(handleChange).toHaveBeenCalledWith('') expect(input).toHaveValue('') }) }) diff --git a/src/components/sharedComponents/BigNumberInput.tsx b/src/components/sharedComponents/BigNumberInput.tsx index f248c23a..7448be02 100644 --- a/src/components/sharedComponents/BigNumberInput.tsx +++ b/src/components/sharedComponents/BigNumberInput.tsx @@ -80,8 +80,6 @@ export const BigNumberInput: FC = ({ const updateValue = (event: ChangeEvent | string) => { const { value } = typeof event === 'string' ? { value: event } : event.currentTarget - onError?.(null) - if (value === '') { onChange(BigInt(0)) return From d90c3e2e262ee65d31d724ca600d9365cd2423e3 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 11 Apr 2025 14:13:47 +0200 Subject: [PATCH 071/228] test(HasInput): enhance performance --- .../sharedComponents/HashInput.test.tsx | 58 +++++++++++-------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/src/components/sharedComponents/HashInput.test.tsx b/src/components/sharedComponents/HashInput.test.tsx index 8ae491d9..58fa2725 100644 --- a/src/components/sharedComponents/HashInput.test.tsx +++ b/src/components/sharedComponents/HashInput.test.tsx @@ -1,6 +1,6 @@ -import { act, fireEvent, render, screen, waitFor } from '@testing-library/react' +import { fireEvent, render, screen, waitFor } from '@testing-library/react' import { mainnet } from 'viem/chains' -import { type Mock, describe, expect, it, vi } from 'vitest' +import { type Mock, beforeEach, describe, expect, it, vi } from 'vitest' import HashInput from '@/src/components/sharedComponents/HashInput' import detectHash from '@/src/utils/hash' @@ -10,6 +10,10 @@ vi.mock('@/src/utils/hash') const testId = 'hash-input' describe('HashInput Component', () => { + beforeEach(() => { + vi.clearAllMocks() + }) + it('renders input field', () => { render( { it('calls onSearch with detected hash when input value is not empty', async () => { const onSearchMock = vi.fn() + ;(detectHash as Mock).mockResolvedValue({ data: 'test.eth', type: 'EOA' }) + render( , ) const input = screen.getByTestId(testId) as HTMLInputElement - // Mock the implementation of detectHash - ;(detectHash as Mock).mockReturnValue({ data: 'test.eth', type: 'EOA' }) - fireEvent.change(input, { target: { value: '0x1234567890abcdef1234567890abcdef12345678' }, }) + expect(input.value).toBe('0x1234567890abcdef1234567890abcdef12345678') - await waitFor(() => + + await waitFor(() => { expect(onSearchMock).toHaveBeenCalledWith({ type: 'EOA', data: 'test.eth', - }), - ) + }) + }) }) it('calls onSearch when input value is invalid', async () => { const onSearchMock = vi.fn() + ;(detectHash as Mock).mockResolvedValue({ data: null, type: null }) + render( , ) const input = screen.getByTestId(testId) as HTMLInputElement - // Mock the implementation of detectHash - ;(detectHash as Mock).mockReturnValue({ data: null, type: null }) - fireEvent.change(input, { target: { value: 'invalid-value' } }) expect(input.value).toBe('invalid-value') - await waitFor(() => expect(onSearchMock).toHaveBeenCalledWith({ type: null, data: null })) + + await waitFor(() => { + expect(onSearchMock).toHaveBeenCalledWith({ type: null, data: null }) + }) }) it('calls onSearch when value prop changes', async () => { const onSearchMock = vi.fn() + ;(detectHash as Mock).mockResolvedValue({ data: 'test.eth', type: 'EOA' }) + const { rerender } = render( , ) - // Mock the implementation of detectHash - ;(detectHash as Mock).mockResolvedValue({ data: 'test.eth', type: 'EOA' }) - const input = screen.getByTestId(testId) as HTMLInputElement - act(() => { - rerender( - , - ) - }) + rerender( + , + ) await waitFor(() => { expect(onSearchMock).toHaveBeenCalledWith({ type: 'EOA', data: 'test.eth', }) - expect(input.value).toBe('0x1234567890abcdef1234567890abcdef12345678') }) + expect(input.value).toBe('0x1234567890abcdef1234567890abcdef12345678') }) }) From 529a7177bee38f3ae1b1385343a40a452632713e Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo Date: Tue, 15 Apr 2025 16:07:41 -0300 Subject: [PATCH 072/228] chore: setup basic chakra ui --- package.json | 6 +- pnpm-lock.yaml | 1118 +++++++++++++++++++++++++++++++++++++++-- src/routes/__root.tsx | 45 +- tsconfig.json | 2 +- vite.config.ts | 3 +- 5 files changed, 1103 insertions(+), 71 deletions(-) diff --git a/package.json b/package.json index 2f978f45..a857578a 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,8 @@ }, "dependencies": { "@bootnodedev/db-ui-toolkit": "1.0.0-beta.2", + "@chakra-ui/react": "^3.16.0", + "@emotion/react": "^11.14.0", "@faceless-ui/modal": "3.0.0-beta.2", "@lifi/sdk": "^3.2.3", "@t3-oss/env-core": "^0.11.1", @@ -40,6 +42,7 @@ "react-dom": "^18.3.1", "react-error-boundary": "^4.0.13", "react-hot-toast": "^2.4.1", + "react-icons": "^5.5.0", "react-jazzicon": "^1.0.4", "react-number-format": "^5.4.2", "styled-components": "^6.1.13", @@ -80,6 +83,7 @@ "typedoc-plugin-zod": "^1.4.0", "typescript": "^5.6.2", "vite": "^6.2.4", + "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.1.1", "vocs": "1.0.0-alpha.59" }, @@ -96,4 +100,4 @@ "utf-8-validate" ] } -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a505eec3..1c10efa4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,12 @@ importers: '@bootnodedev/db-ui-toolkit': specifier: 1.0.0-beta.2 version: 1.0.0-beta.2 + '@chakra-ui/react': + specifier: ^3.16.0 + version: 3.16.0(@emotion/react@11.14.0(@types/react@18.3.9)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@emotion/react': + specifier: ^11.14.0 + version: 11.14.0(@types/react@18.3.9)(react@18.3.1) '@faceless-ui/modal': specifier: 3.0.0-beta.2 version: 3.0.0-beta.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -56,6 +62,9 @@ importers: react-hot-toast: specifier: ^2.4.1 version: 2.4.1(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-icons: + specifier: ^5.5.0 + version: 5.5.0(react@18.3.1) react-jazzicon: specifier: ^1.0.4 version: 1.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -171,12 +180,15 @@ importers: vite: specifier: ^6.2.4 version: 6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) + vite-tsconfig-paths: + specifier: ^5.1.4 + version: 5.1.4(typescript@5.6.2)(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1)) vitest: specifier: ^3.1.1 version: 3.1.1(@types/debug@4.1.12)(@types/node@22.6.1)(jiti@1.21.6)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) vocs: specifier: 1.0.0-alpha.59 - version: 1.0.0-alpha.59(@types/node@22.6.1)(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.39.0)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2))(typescript@5.6.2) + version: 1.0.0-alpha.59(@types/node@22.6.1)(@types/react-dom@18.3.0)(@types/react@18.3.9)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.39.0)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2))(typescript@5.6.2) packages: @@ -194,6 +206,12 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@ark-ui/react@5.5.0': + resolution: {integrity: sha512-zLERNKOrf77K0OMOLoo5+jZQn9uXxYck56gBzx/zhW2SjFe0M2lE6VyaIiwgKGIqbGre59gD9/tyTsqO6bqARQ==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} @@ -1063,6 +1081,13 @@ packages: resolution: {integrity: sha512-R1llbVfN0PfEjKmBKofW2NQZtwBsPXTWBsXGdnuLx0MEQdoMlkjASjRSU6vRNSTtAkLvZ8phcRf+TuuQQQ3PfA==} engines: {node: '>=20.0.0'} + '@chakra-ui/react@3.16.0': + resolution: {integrity: sha512-NZLGQgIPr/hLeyBoQyUqzaru+RGrs4Zy1kGpnBNGnL2UrCLZryHvax/pdfqId8cJjhWPGxokJUTVcTTMPnN3Gg==} + peerDependencies: + '@emotion/react': '>=11' + react: '>=18' + react-dom: '>=18' + '@clack/core@0.3.4': resolution: {integrity: sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==} @@ -1176,6 +1201,12 @@ packages: '@dual-bundle/import-meta-resolve@4.1.0': resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} + '@emotion/babel-plugin@11.13.5': + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + + '@emotion/cache@11.14.0': + resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} @@ -1197,15 +1228,44 @@ packages: '@emotion/memoize@0.9.0': resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + '@emotion/react@11.14.0': + resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.3': + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + '@emotion/stylis@0.8.5': resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==} + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + '@emotion/unitless@0.7.5': resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} '@emotion/unitless@0.8.1': resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + '@emotion/use-insertion-effect-with-fallbacks@1.2.0': + resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.2': + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} + + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + '@esbuild/aix-ppc64@0.19.12': resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} @@ -1804,6 +1864,9 @@ packages: '@floating-ui/dom@1.6.11': resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==} + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + '@floating-ui/react-dom@2.1.2': resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} peerDependencies: @@ -1819,6 +1882,9 @@ packages: '@floating-ui/utils@0.2.8': resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -1831,6 +1897,12 @@ packages: peerDependencies: hono: ^4 + '@internationalized/date@3.7.0': + resolution: {integrity: sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==} + + '@internationalized/number@3.6.0': + resolution: {integrity: sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -2093,6 +2165,9 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@pandacss/is-valid-prop@0.41.0': + resolution: {integrity: sha512-BE6h6CsJk14ugIRrsazJtN3fcg+KDFRat1Bs93YFKH6jd4DOb1yUyVvC70jKqPVvg70zEcV8acZ7VdcU5TLu+w==} + '@parcel/watcher-android-arm64@2.4.1': resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} engines: {node: '>= 10.0.0'} @@ -3287,6 +3362,9 @@ packages: '@types/node@22.6.1': resolution: {integrity: sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==} + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + '@types/prop-types@15.7.13': resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} @@ -3546,6 +3624,216 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + '@zag-js/accordion@1.8.2': + resolution: {integrity: sha512-JszESCOvftl3dG6lEPjZp2p3+0VN0fwMnW+1jhWwMEe5MZ0y0IrcXww2dxet1ln+w5ViRdOTeDR07idbDKYAYg==} + + '@zag-js/anatomy@1.8.2': + resolution: {integrity: sha512-F88Q+Bo1KOFZPHLffOqiuemkgZJbtspQuyOJcWb0bL7Lc1pYC4DIpIj26bcXT8xICDNcwR877hI0Wko//ZgTVA==} + + '@zag-js/aria-hidden@1.8.2': + resolution: {integrity: sha512-/SV23qfCWMbGdsNZ2pgmVqOv6a4yd/2+FAIRy/6bjZ8axBzhm7NvfDhqjZciN4JuMch82uafeTBZ7pObk/fU1g==} + + '@zag-js/auto-resize@1.8.2': + resolution: {integrity: sha512-Z+94iR/vbPixiifjF+pmOa1UtuM5TTnJqM7D+Ol3WenRrm+Urp4JWAcyaf76NRVWK51KwMwWLljeA6J0H3V6gQ==} + + '@zag-js/avatar@1.8.2': + resolution: {integrity: sha512-PWhYVvXyOt+kdi2Vd6GfqGQQruh1TNylw6TzNbhPt3B6Fj6uNvQqfEsh6yNErfnCeaa4b/Q+48rM4b/t3DzM0g==} + + '@zag-js/carousel@1.8.2': + resolution: {integrity: sha512-ViPcVQFQfw8ry3i4m2HYixTfN5Km979TWtMnDKdDM3csXLOQJvfCIHtZ/08wWn1302zaDMQe72+p9jDqzqntMg==} + + '@zag-js/checkbox@1.8.2': + resolution: {integrity: sha512-KWVKo2Cofs9bjKf9QN9d9UJ6jQFuKfTPT4smDIqhXo4MIFa5eOd6yxvwbgvLvBlvvr9I6Amm9T4e9XxFbyrHdA==} + + '@zag-js/clipboard@1.8.2': + resolution: {integrity: sha512-KwyFxLDPkEwjiI6zxRKG1gQk1q+lL1HN6nvGCMKRxoDtYVaY9VRxQ6mVNg2VUIecM8uuhRnkM1WHGrSTUcaFcQ==} + + '@zag-js/collapsible@1.8.2': + resolution: {integrity: sha512-rtvR4WaMnjv0cW6f+wYqIKkRGhckqlY7nVYBUjGqIzlKq0VNzRgugS8qWpoqdupQJ9wyjusb/GXLOudqpdl1lw==} + + '@zag-js/collection@1.8.2': + resolution: {integrity: sha512-GQ6bMscyX3R5wXct6pIMFNd9vm/Ofux7bAwdavp1RrYu/iMKRg/tLbJIOYMQ9VXpjbiOB+6f2GVtHAM0eYLb6A==} + + '@zag-js/color-picker@1.8.2': + resolution: {integrity: sha512-WFuU5T99GPtqiD1MBZlurBjNMpHZQmbzaTgO6mdKQv3IKa2+I2jqXlnTnJbjTRmsF2DhAo45mEyGOvLwlTfTNA==} + + '@zag-js/color-utils@1.8.2': + resolution: {integrity: sha512-6oB+oxCSQoJu8sw1POQNzFLRN1wFDR5b+DSincqBR1QoKLr5K4iYmwJZ7UySvDF8uZATaShvB/qVVxniUpZ17w==} + + '@zag-js/combobox@1.8.2': + resolution: {integrity: sha512-jQo1cDtsUlBMPmBv/P7pUBHpxu19L+Pd5zXWOcdYXXMyFQg/KrW+PLS84G3yk2UCoH7ywKY25wFdMcOrqrTdUw==} + + '@zag-js/core@1.8.2': + resolution: {integrity: sha512-vZDvvXuoxKnVXqBS6H6ZGbfxRWaQ9DStVS/a+tLdP0pz05NJwyJIPSWOOHZo9XPDiN4j1mRaTVcSvNpuOSEDTw==} + + '@zag-js/date-picker@1.8.2': + resolution: {integrity: sha512-SnZgQOxUajnuQUDIcq73Gxy+fifm3/F0H4tokE8LAbbkcf5kr/Pyin+2amhiXBkbDiUbeCttx34TlD4HXwmjyQ==} + peerDependencies: + '@internationalized/date': '>=3.0.0' + + '@zag-js/date-utils@1.8.2': + resolution: {integrity: sha512-KFMcZMb7xC7XypH1VDQIiYv4dpxB+1JEG2QX7zbYos+QKd41A8tNtaDnfJX+iePVsJV156gqiOrtogNvz4rJ8A==} + peerDependencies: + '@internationalized/date': '>=3.0.0' + + '@zag-js/dialog@1.8.2': + resolution: {integrity: sha512-1XJIb0/YNBV5LgcRQ7ZwS/GvJiIy1e/iaZvYea6RRAInxcNH6KFon9U1Hm1Lfdz9GryCMs32WDhlFcYQoeGlKw==} + + '@zag-js/dismissable@1.8.2': + resolution: {integrity: sha512-YGQB60pr/jbldJlt0LtToriJEMX8ds8uxienPModMgzEPo7yEDf30VMo4Ix8Sm38E6CJBOcm87vKHrrD8aEfnw==} + + '@zag-js/dom-query@1.8.1': + resolution: {integrity: sha512-+2DYAW9riWnAAf7etTkaVqpaTHjYSHYGExJtBmZ6KurmYsc7Uw46mAcIImakZhrg69AI0cpL4b2YJHMQz8GGZA==} + + '@zag-js/dom-query@1.8.2': + resolution: {integrity: sha512-bn6Pxga19PJzpDb+Oh326kn1sgVfO97mxRzRFqzrKz9NuANGlCblmv2NTYmhfppqE1nt9QyLLhyQ2BLbzwouLg==} + + '@zag-js/editable@1.8.2': + resolution: {integrity: sha512-NFg5qp2IzE0nvDFf+UyFIIHGFBCyB5r74YIVBb0oJnVcIzrYa1+HA2ZrNMzTnjpZdx7B5lE/99VAsvk2Mb+GtA==} + + '@zag-js/file-upload@1.8.2': + resolution: {integrity: sha512-b+xt9W5CqFG0NCB4F6C29FcFPlV0q5LC7m7mj7iMhk+dRkWPVhxr9o5SFPtjXLZlncFNgHfMkBU7Ktx5JY8CSA==} + + '@zag-js/file-utils@1.8.1': + resolution: {integrity: sha512-IdulHjOzPeZWNURY1rM/FbltdnXIOjUsOA7wWAped6oMMtDmWlrfpKtFs2emnXd04mZLnZN9yBO5WtHI7TTWeg==} + + '@zag-js/file-utils@1.8.2': + resolution: {integrity: sha512-VBn2PeVtfj4c4snVcvp9oVFFiOVwJQ1OvS44CXv2xl9u4hRnDVSHalNmdj5jOqspNmTy9xNCKQWPK73ef26msQ==} + + '@zag-js/focus-trap@1.8.2': + resolution: {integrity: sha512-GzKdicdiVjlOOsNzmmRAZVccs902PXnoyO+qkzXlIsr8+RPRgtPlZthIp6wtr4CJ2vLOMByvrEt7wCNSIoDzxA==} + + '@zag-js/focus-visible@1.8.2': + resolution: {integrity: sha512-YXkB4ClgEf/gTRGUrTDThvxfThpey41dDKcuQIPTA6F76ji4jLQiDYLnw4KDxLW8uLL21jZgctO5FFdIMoxJeg==} + + '@zag-js/highlight-word@1.8.2': + resolution: {integrity: sha512-yI65t4bFxTUkZbHuntRCdBPOEQdpO8G4nkoY8WznBetQ1LLhqOd+7KXelzq+Vot2RbXzop54xEBvgKeTQbGOgg==} + + '@zag-js/hover-card@1.8.2': + resolution: {integrity: sha512-GwYGsojbVpyhOCz+XUnEtxA9ZmUlnfPrnE71j/Gc2+oLtOFwvnhINtBTZPCUXO5ec95uG9QFwxc63x1upB/PIA==} + + '@zag-js/i18n-utils@1.8.1': + resolution: {integrity: sha512-Epj/VOsJppsHlo2YwGV718CsZEneH9OVZtD8LB7j/zGXjQr/LALErCQQVOJXlBO6Ky2G/ZE/vK4LyO5GIjkTKw==} + + '@zag-js/i18n-utils@1.8.2': + resolution: {integrity: sha512-Zhiw2U14kkYRPru/5nWYei0l0eiQOkTu2VDCc/mn9jd7+zDEIYNp3b1CvMQ3/ES21i1HH6uBuKKujuktH/f6Iw==} + + '@zag-js/interact-outside@1.8.2': + resolution: {integrity: sha512-7N0v/vdsJO5a7AjwWofZ99AP5/hzFfCShSgEfg4GpRk7gPOdFanm7U3Zy9LtVvM9gwRncqGwjo4yd6O5G7SCnA==} + + '@zag-js/live-region@1.8.2': + resolution: {integrity: sha512-QkowjTQj9C6ZFSCB+E7QNU5yjWMA58cAR5TcWgdLLKAP+SJwaTdtptpyFq71VH+jT85sNvvBZVya1aWZrbGopg==} + + '@zag-js/menu@1.8.2': + resolution: {integrity: sha512-kEz1FJ0kgkutN1XDpS27GAkk1T/v3fUctBHrj0Wvt7TvQfPyzudyjmj35UEP5e8AglJAoQt2Am93YPSQ2deJwg==} + + '@zag-js/number-input@1.8.2': + resolution: {integrity: sha512-oyxXI/FDDj40BMkkLHDu84me3TgLIZizQhMj51R3ZM5Qg5BucYbamQKDgcGbb2CI6BUPo+6jklO0QZmy8/2cTQ==} + + '@zag-js/pagination@1.8.2': + resolution: {integrity: sha512-+Ummfw6r0Ll4oFVRvoVhPSvox8y2vvIocjGip0e6ze8zaUuHgUYzNkcK7OalZ3pZkh9y0+9MlnqtsQwxZhMJPw==} + + '@zag-js/pin-input@1.8.2': + resolution: {integrity: sha512-TME6Maud8Z78ZxFru7WvBGf5EQAuMoPQfdTMpd8os24srtO+HwiFN1wbeBsV/6BmbOeA9gFuB4K8O8rqNn3uqg==} + + '@zag-js/popover@1.8.2': + resolution: {integrity: sha512-c3uk6t5MG3xluf2LR1adOGnCsKchfRqzB7K9/fyBvWXBFyFiV5DWXdc2NpnzvB0Z5fQVJMrBiMnpvmzqbVovAA==} + + '@zag-js/popper@1.8.2': + resolution: {integrity: sha512-OfZS5KKQZsaENZG1SliM8/shtAKmKrprJuWpn3/kzcOAO/obNZfApld4oa1N5FoePLLTY96qVfdC5W9xygKRDQ==} + + '@zag-js/presence@1.8.2': + resolution: {integrity: sha512-aT9PPQAY28HeAxiSeIhnOmlkI+tw0ippxtUWenxQ6B3yyU/ZOGVqc4f7eY418z65lF2yziYvUkZgOdWc6E4kZA==} + + '@zag-js/progress@1.8.2': + resolution: {integrity: sha512-QUzPe5Xj0zSexKJ1+JCmQnJ+pZ5EeRjMLWSn4cdeUJtzEuPosBLCzJtMzl+uZ/mTg2YVgPC7l6wV6nfMYrco/g==} + + '@zag-js/qr-code@1.8.2': + resolution: {integrity: sha512-W47UwF5jBL3NraobAOC9aYFpMFiXhDzgZ6O3f4Zhd3eDx6BnUvebZ+GOfE71EmJ0fu43mF6o3ial8H4nxj2myQ==} + + '@zag-js/radio-group@1.8.2': + resolution: {integrity: sha512-WY0QT4XkqgXD1N1VZG11gTnu7rGaPYizZIq/m1NS0ls6b/tTnwdlrPL2bgBzlJtyuuCeQJXh5pTypCiNoAZurg==} + + '@zag-js/rating-group@1.8.2': + resolution: {integrity: sha512-azCMgF7FAyvDJ+fcAYzFQHhZpeydPW6h7JvYIvLsz/K609D1HJT85gtCzG+drgBhE4tRyvFdYKDkTCvOpVnkGA==} + + '@zag-js/react@1.8.2': + resolution: {integrity: sha512-Fz9WR6wZQOAxCLSTSmUnGL+VH2/HVxvdlOKOHoUrJ0+9QOmlGrZf+mxpJuGgqUW3RyMzzpHfly8TKZkqHRYd3g==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@zag-js/rect-utils@1.8.2': + resolution: {integrity: sha512-RWgPe+MOtOJaWjvlGD1Cf1snmD+hem1mfxXqM3XTCZCjuAlqAzHSCyuBUDia96nU0YGgAxYuloQLh8HFLJcVPA==} + + '@zag-js/remove-scroll@1.8.2': + resolution: {integrity: sha512-zJvLCKcb1yWEdWCP+cDhnYTY1MyoNzuiYOwWTh2YiktQYC0zpd2KDbd+jdhSWIpbIdV22UMuy4sDfFpx6i/mqA==} + + '@zag-js/scroll-snap@1.8.2': + resolution: {integrity: sha512-kyM4ZsRvq5WuJJZVr1TQ1xjuso0ANhySMtILH1kC9EFGIOwZegnIpZt5K1rf5NBFmBrcBjUl+lEKwySRNFauhw==} + + '@zag-js/select@1.8.2': + resolution: {integrity: sha512-ZsBU7kGp8TX4gNavmiTWz9cB+6KgqHXxSwgARnaYUBsYhpdDG2SYfzgyfGAYcAv4ejNTFEfvNk89h+Kpz4CeOg==} + + '@zag-js/signature-pad@1.8.2': + resolution: {integrity: sha512-Jl3kRbxo3fkey9uqdVDyGROlECa3MpOXaMWDzO58vodrOjjLnZPO1VPF4xvjG5LUsEOGx54R97Tpc2hS3t93Pw==} + + '@zag-js/slider@1.8.2': + resolution: {integrity: sha512-+tncZezgA4FVHV6M7a6lV3cPJUa5OsP7ouXkYGw7Z3cvOoFLaL+bxaCe/UHouRTKqoZj4ImR83x85xcIj50e1g==} + + '@zag-js/splitter@1.8.2': + resolution: {integrity: sha512-jcr382kBA/pRrQu04PVqB2U4Tn32wBCbJMX4UC/tmuVTP5RwQrA4WaDs21CelfntI0qEbzCMxFfYvbU7+ma7iw==} + + '@zag-js/steps@1.8.2': + resolution: {integrity: sha512-iCwaiT6q0GyhZCnHH9bwmQfYGqVmN5ObF+efV2eYDVsuICKe/PlEHL7H3gRClJR6x6FehXmYYI/gCI/PLzsuHg==} + + '@zag-js/store@1.8.2': + resolution: {integrity: sha512-Q/sg8L5B3lbX1MWFJNhE5bcPzJrwhRcgDGtvKf8KDKcbcirhF5HiXUbbE4jvav52QVQYKru+WnOJ8WVj5Bi3tA==} + + '@zag-js/switch@1.8.2': + resolution: {integrity: sha512-WYgtfzponocm4rrJcG4CNy1xsOwOXZ1yE9NBNKvew2Cj5yZLpTQLcjJBlWR5VjZ3Tgx+3D/F2nmBYzVFtU8zyw==} + + '@zag-js/tabs@1.8.2': + resolution: {integrity: sha512-aM7gx9aj1DcyTV6T5H7okMHWBhi/0jdjhUhFRWWSdYxiYvpveBhVK+Tvg9Nq9GBqXZEgg8E1hxuLgPQUZv7QBQ==} + + '@zag-js/tags-input@1.8.2': + resolution: {integrity: sha512-9DF2pXz6a6lX5IiCwg8ug0TSLZ3FILIHUaX9WNBSx7afDlCMH36UgKhyfs2Xhl9gliVC/6a0Tr2sX5VDEYCe7g==} + + '@zag-js/time-picker@1.8.2': + resolution: {integrity: sha512-RdAPrRBeuiCL7m4PdEZOR6YzfQfOeNElgjEAVLZgUTu4WEhLt/XVdjaOuUQtiuLW4ukT72wNVWi0S+NBCHerIw==} + peerDependencies: + '@internationalized/date': '>=3.0.0' + + '@zag-js/timer@1.8.2': + resolution: {integrity: sha512-EUqVacZyrKuvzDFHRZLYjDzNwMyr/5cQCu4m1Da4nv7hvqivDvofU2HUUf7mi7isuYuRaRAZ6sFQqknmvfbKQQ==} + + '@zag-js/toast@1.8.2': + resolution: {integrity: sha512-ew+lfy8y5j4HWj5Ir9RoSfQKlbZnmGnn1r8GHMBhQXegWVGWAb04n4sp7t/e656iBif9HpLm3+/SUwOdCPIiJg==} + + '@zag-js/toggle-group@1.8.2': + resolution: {integrity: sha512-kBvFQtUJ70PpqJ6aA9uLCXLvSTiUMhzX3GkJbmTxffu2BdVKUF5OEKW3x9VpYdPeekBnayCXoGdW7WEOkgpYGw==} + + '@zag-js/toggle@1.8.2': + resolution: {integrity: sha512-2EebV04Hv25ex1jQVa1Cjb4A85qcC6kvABn4qR6wZooxf5Ua72C9sdiEjrAvMhDGAWaa37JuxlyYs+sZG1l0Lw==} + + '@zag-js/tooltip@1.8.2': + resolution: {integrity: sha512-FqDq4H3PFnEJt96JCr4dap3Pkcq2D0Gb/G5G5gG3QAs7kOIHL2Jpq1CGCxE3EpmQOFee1HwyokC6R4Q4kot1Nw==} + + '@zag-js/tour@1.8.2': + resolution: {integrity: sha512-67Qw+dYY8ayf1x0ggvU0U0MoS0I/nhVe9JRpabPjYc09123DgGsDA4sdbj6VfCeFW6j3kffn5VEmTm8C3yV8gA==} + + '@zag-js/tree-view@1.8.2': + resolution: {integrity: sha512-l/JmKjkz/BM59HVscazl8BMJj+suXl+FNRQVZqhyijzlb2PrB5xtgiQNV9XLNM2qHBCub9820Y1YMLyEP5YiwQ==} + + '@zag-js/types@1.8.1': + resolution: {integrity: sha512-gJU3UlRccL2N4ukG4xEtetAr/fiuFBxpG5IKZ/Pr0zz8Z17LpdhK7ozyn9SU7y9W6YOcngByAgNgz+nRzmu5aQ==} + + '@zag-js/types@1.8.2': + resolution: {integrity: sha512-J+94HhFAPOBchNdGcmvqjB8nbQFgKHcqGoPl5vNTKlcoibN0yFjn4XFZoQU6uCf8sPhNg6NUNTkluR5YjybyJA==} + + '@zag-js/utils@1.8.2': + resolution: {integrity: sha512-7HnRAQ7+pR00c4BQChulTdf6G1gJ0NqV4mMKd9UXk4/E7GLYinUdBNAZ3jZCdHDrio3+2zIlNvpzkO3G4pVjlw==} + JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -3748,6 +4036,10 @@ packages: babel-dead-code-elimination@1.0.8: resolution: {integrity: sha512-og6HQERk0Cmm+nTT4Od2wbPtgABXFMPaHACjbKLulZIFMkYyXZLkUGuAxdgpMJBrxyt/XFpSz++lNzjbcMnPkQ==} + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + babel-plugin-polyfill-corejs2@0.4.13: resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==} peerDependencies: @@ -4169,6 +4461,9 @@ packages: engines: {node: '>=16'} hasBin: true + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -4193,6 +4488,10 @@ packages: resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} engines: {node: '>=4'} + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + cosmiconfig@9.0.0: resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} @@ -4767,6 +5066,9 @@ packages: resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} engines: {node: '>=6'} + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} @@ -4946,6 +5248,9 @@ packages: globjoin@0.1.4: resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + goober@2.1.14: resolution: {integrity: sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==} peerDependencies: @@ -6383,6 +6688,9 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} + perfect-freehand@1.2.2: + resolution: {integrity: sha512-eh31l019WICQ03pkF3FSzHxB8n07ItqIQ++G5UV8JX0zVOXzgTGCqnRR0jJ2h9U8/2uW4W4mtGJELt9kEV0CFQ==} + periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} @@ -6578,6 +6886,12 @@ packages: proxy-compare@2.5.1: resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} + proxy-compare@3.0.1: + resolution: {integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==} + + proxy-memoize@3.0.1: + resolution: {integrity: sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==} + pump@3.0.2: resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} @@ -6657,6 +6971,11 @@ packages: react: '>=16' react-dom: '>=16' + react-icons@5.5.0: + resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} + peerDependencies: + react: '*' + react-intersection-observer@9.13.1: resolution: {integrity: sha512-tSzDaTy0qwNPLJHg8XZhlyHTgGW6drFKTtvjdL+p6um12rcnp8Z5XstE+QNBJ7c64n5o0Lj4ilUleA41bmDoMw==} peerDependencies: @@ -7295,6 +7614,9 @@ packages: engines: {node: '>=18.12.0'} hasBin: true + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + stylis@4.3.2: resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} @@ -7482,15 +7804,22 @@ packages: '@swc/wasm': optional: true + tsconfck@3.1.5: + resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -7813,6 +8142,14 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true + vite-tsconfig-paths@5.1.4: + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} + peerDependencies: + vite: '*' + peerDependenciesMeta: + vite: + optional: true + vite@5.4.8: resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -8108,6 +8445,10 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + yaml@2.5.1: resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} engines: {node: '>= 14'} @@ -8185,6 +8526,65 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 + '@ark-ui/react@5.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@internationalized/date': 3.7.0 + '@zag-js/accordion': 1.8.2 + '@zag-js/anatomy': 1.8.2 + '@zag-js/auto-resize': 1.8.2 + '@zag-js/avatar': 1.8.2 + '@zag-js/carousel': 1.8.2 + '@zag-js/checkbox': 1.8.2 + '@zag-js/clipboard': 1.8.2 + '@zag-js/collapsible': 1.8.2 + '@zag-js/collection': 1.8.2 + '@zag-js/color-picker': 1.8.2 + '@zag-js/color-utils': 1.8.2 + '@zag-js/combobox': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/date-picker': 1.8.2(@internationalized/date@3.7.0) + '@zag-js/date-utils': 1.8.2(@internationalized/date@3.7.0) + '@zag-js/dialog': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/editable': 1.8.2 + '@zag-js/file-upload': 1.8.2 + '@zag-js/file-utils': 1.8.1 + '@zag-js/focus-trap': 1.8.2 + '@zag-js/highlight-word': 1.8.2 + '@zag-js/hover-card': 1.8.2 + '@zag-js/i18n-utils': 1.8.2 + '@zag-js/menu': 1.8.2 + '@zag-js/number-input': 1.8.2 + '@zag-js/pagination': 1.8.2 + '@zag-js/pin-input': 1.8.2 + '@zag-js/popover': 1.8.2 + '@zag-js/presence': 1.8.2 + '@zag-js/progress': 1.8.2 + '@zag-js/qr-code': 1.8.2 + '@zag-js/radio-group': 1.8.2 + '@zag-js/rating-group': 1.8.2 + '@zag-js/react': 1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@zag-js/select': 1.8.2 + '@zag-js/signature-pad': 1.8.2 + '@zag-js/slider': 1.8.2 + '@zag-js/splitter': 1.8.2 + '@zag-js/steps': 1.8.2 + '@zag-js/switch': 1.8.2 + '@zag-js/tabs': 1.8.2 + '@zag-js/tags-input': 1.8.2 + '@zag-js/time-picker': 1.8.2(@internationalized/date@3.7.0) + '@zag-js/timer': 1.8.2 + '@zag-js/toast': 1.8.2 + '@zag-js/toggle': 1.8.2 + '@zag-js/toggle-group': 1.8.2 + '@zag-js/tooltip': 1.8.2 + '@zag-js/tour': 1.8.2 + '@zag-js/tree-view': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 @@ -8232,7 +8632,7 @@ snapshots: '@babel/helpers': 7.26.0 '@babel/parser': 7.26.3 '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.4(supports-color@5.5.0) '@babel/types': 7.26.3 convert-source-map: 2.0.0 debug: 4.3.7(supports-color@5.5.0) @@ -8355,9 +8755,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.25.9': + '@babel/helper-module-imports@7.25.9(supports-color@5.5.0)': dependencies: - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.4(supports-color@5.5.0) '@babel/types': 7.26.3 transitivePeerDependencies: - supports-color @@ -8375,18 +8775,18 @@ snapshots: '@babel/helper-module-transforms@7.26.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.25.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -8720,7 +9120,7 @@ snapshots: '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.25.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.2) transitivePeerDependencies: @@ -9003,7 +9403,7 @@ snapshots: dependencies: '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.25.2) '@babel/types': 7.27.0 @@ -9024,7 +9424,7 @@ snapshots: '@babel/plugin-transform-runtime@7.26.10(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.25.9 + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/helper-plugin-utils': 7.26.5 babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.25.2) babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.25.2) @@ -9267,7 +9667,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.26.4': + '@babel/traverse@7.26.4(supports-color@5.5.0)': dependencies: '@babel/code-frame': 7.26.2 '@babel/generator': 7.26.3 @@ -9350,6 +9750,20 @@ snapshots: react-dom: 18.3.1(react@18.3.1) styled-components: 6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/react@3.16.0(@emotion/react@11.14.0(@types/react@18.3.9)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@ark-ui/react': 5.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@emotion/is-prop-valid': 1.3.1 + '@emotion/react': 11.14.0(@types/react@18.3.9)(react@18.3.1) + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) + '@emotion/utils': 1.4.2 + '@pandacss/is-valid-prop': 0.41.0 + csstype: 3.1.3 + fast-safe-stringify: 2.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + '@clack/core@0.3.4': dependencies: picocolors: 1.1.0 @@ -9515,6 +9929,30 @@ snapshots: '@dual-bundle/import-meta-resolve@4.1.0': {} + '@emotion/babel-plugin@11.13.5': + dependencies: + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/runtime': 7.27.0 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.3 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.14.0': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + '@emotion/hash@0.9.2': {} '@emotion/is-prop-valid@0.8.8': @@ -9537,12 +9975,48 @@ snapshots: '@emotion/memoize@0.9.0': {} + '@emotion/react@11.14.0(@types/react@18.3.9)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.27.0 + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.9 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.3': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.2 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + '@emotion/stylis@0.8.5': {} + '@emotion/unitless@0.10.0': {} + '@emotion/unitless@0.7.5': {} '@emotion/unitless@0.8.1': {} + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@emotion/utils@1.4.2': {} + + '@emotion/weak-memoize@0.4.0': {} + '@esbuild/aix-ppc64@0.19.12': optional: true @@ -9865,6 +10339,11 @@ snapshots: '@floating-ui/core': 1.6.8 '@floating-ui/utils': 0.2.8 + '@floating-ui/dom@1.6.13': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.9 + '@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.11 @@ -9881,6 +10360,8 @@ snapshots: '@floating-ui/utils@0.2.8': {} + '@floating-ui/utils@0.2.9': {} + '@hapi/hoek@9.3.0': {} '@hapi/topo@5.1.0': @@ -9891,6 +10372,14 @@ snapshots: dependencies: hono: 3.12.12 + '@internationalized/date@3.7.0': + dependencies: + '@swc/helpers': 0.5.17 + + '@internationalized/number@3.6.0': + dependencies: + '@swc/helpers': 0.5.17 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -10221,7 +10710,7 @@ snapshots: '@motionone/easing': 10.18.0 '@motionone/types': 10.17.1 '@motionone/utils': 10.18.0 - tslib: 2.7.0 + tslib: 2.8.1 '@motionone/dom@10.12.0': dependencies: @@ -10230,7 +10719,7 @@ snapshots: '@motionone/types': 10.17.1 '@motionone/utils': 10.18.0 hey-listen: 1.0.8 - tslib: 2.7.0 + tslib: 2.8.1 '@motionone/dom@10.18.0': dependencies: @@ -10244,13 +10733,13 @@ snapshots: '@motionone/easing@10.18.0': dependencies: '@motionone/utils': 10.18.0 - tslib: 2.7.0 + tslib: 2.8.1 '@motionone/generators@10.18.0': dependencies: '@motionone/types': 10.17.1 '@motionone/utils': 10.18.0 - tslib: 2.7.0 + tslib: 2.8.1 '@motionone/svelte@10.16.4': dependencies: @@ -10263,7 +10752,7 @@ snapshots: dependencies: '@motionone/types': 10.17.1 hey-listen: 1.0.8 - tslib: 2.7.0 + tslib: 2.8.1 '@motionone/vue@10.16.4': dependencies: @@ -10304,6 +10793,8 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@pandacss/is-valid-prop@0.41.0': {} + '@parcel/watcher-android-arm64@2.4.1': optional: true @@ -11504,7 +11995,7 @@ snapshots: '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.4(supports-color@5.5.0) '@babel/types': 7.26.3 '@tanstack/router-generator': 1.93.0(@tanstack/react-router@1.58.7(@tanstack/router-generator@1.58.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@tanstack/virtual-file-routes': 1.87.6 @@ -11666,6 +12157,8 @@ snapshots: dependencies: undici-types: 6.19.8 + '@types/parse-json@4.0.2': {} + '@types/prop-types@15.7.13': {} '@types/react-dom@18.3.0': @@ -11730,14 +12223,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@vanilla-extract/css@1.15.5': + '@vanilla-extract/css@1.15.5(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 @@ -11751,12 +12244,12 @@ snapshots: dependencies: '@vanilla-extract/private': 1.0.6 - '@vanilla-extract/integration@6.5.0(@types/node@22.6.1)(terser@5.39.0)': + '@vanilla-extract/integration@6.5.0(@types/node@22.6.1)(babel-plugin-macros@3.1.0)(terser@5.39.0)': dependencies: '@babel/core': 7.25.2 '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) '@vanilla-extract/babel-plugin-debug-ids': 1.0.6 - '@vanilla-extract/css': 1.15.5 + '@vanilla-extract/css': 1.15.5(babel-plugin-macros@3.1.0) esbuild: 0.19.12 eval: 0.1.8 find-up: 5.0.0 @@ -11780,9 +12273,9 @@ snapshots: '@vanilla-extract/private@1.0.6': {} - '@vanilla-extract/vite-plugin@3.9.5(@types/node@22.6.1)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2))(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0))': + '@vanilla-extract/vite-plugin@3.9.5(@types/node@22.6.1)(babel-plugin-macros@3.1.0)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2))(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0))': dependencies: - '@vanilla-extract/integration': 6.5.0(@types/node@22.6.1)(terser@5.39.0) + '@vanilla-extract/integration': 6.5.0(@types/node@22.6.1)(babel-plugin-macros@3.1.0)(terser@5.39.0) outdent: 0.8.0 postcss: 8.4.47 postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2)) @@ -12286,6 +12779,482 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 + '@zag-js/accordion@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/anatomy@1.8.2': {} + + '@zag-js/aria-hidden@1.8.2': {} + + '@zag-js/auto-resize@1.8.2': + dependencies: + '@zag-js/dom-query': 1.8.2 + + '@zag-js/avatar@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/carousel@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/scroll-snap': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/checkbox@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-visible': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/clipboard@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/collapsible@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/collection@1.8.2': + dependencies: + '@zag-js/utils': 1.8.2 + + '@zag-js/color-picker@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/color-utils': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/color-utils@1.8.2': + dependencies: + '@zag-js/utils': 1.8.2 + + '@zag-js/combobox@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/aria-hidden': 1.8.2 + '@zag-js/collection': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/core@1.8.2': + dependencies: + '@zag-js/dom-query': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/date-picker@1.8.2(@internationalized/date@3.7.0)': + dependencies: + '@internationalized/date': 3.7.0 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/date-utils': 1.8.2(@internationalized/date@3.7.0) + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/live-region': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/date-utils@1.8.2(@internationalized/date@3.7.0)': + dependencies: + '@internationalized/date': 3.7.0 + + '@zag-js/dialog@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/aria-hidden': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-trap': 1.8.2 + '@zag-js/remove-scroll': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/dismissable@1.8.2': + dependencies: + '@zag-js/dom-query': 1.8.2 + '@zag-js/interact-outside': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/dom-query@1.8.1': + dependencies: + '@zag-js/types': 1.8.1 + + '@zag-js/dom-query@1.8.2': + dependencies: + '@zag-js/types': 1.8.2 + + '@zag-js/editable@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/interact-outside': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/file-upload@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/file-utils': 1.8.2 + '@zag-js/i18n-utils': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/file-utils@1.8.1': + dependencies: + '@zag-js/i18n-utils': 1.8.1 + + '@zag-js/file-utils@1.8.2': + dependencies: + '@zag-js/i18n-utils': 1.8.2 + + '@zag-js/focus-trap@1.8.2': + dependencies: + '@zag-js/dom-query': 1.8.2 + + '@zag-js/focus-visible@1.8.2': + dependencies: + '@zag-js/dom-query': 1.8.2 + + '@zag-js/highlight-word@1.8.2': {} + + '@zag-js/hover-card@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/i18n-utils@1.8.1': + dependencies: + '@zag-js/dom-query': 1.8.1 + + '@zag-js/i18n-utils@1.8.2': + dependencies: + '@zag-js/dom-query': 1.8.2 + + '@zag-js/interact-outside@1.8.2': + dependencies: + '@zag-js/dom-query': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/live-region@1.8.2': {} + + '@zag-js/menu@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/rect-utils': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/number-input@1.8.2': + dependencies: + '@internationalized/number': 3.6.0 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/pagination@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/pin-input@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/popover@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/aria-hidden': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-trap': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/remove-scroll': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/popper@1.8.2': + dependencies: + '@floating-ui/dom': 1.6.13 + '@zag-js/dom-query': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/presence@1.8.2': + dependencies: + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + + '@zag-js/progress@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/qr-code@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + proxy-memoize: 3.0.1 + uqr: 0.1.2 + + '@zag-js/radio-group@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-visible': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/rating-group@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/react@1.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@zag-js/core': 1.8.2 + '@zag-js/store': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@zag-js/rect-utils@1.8.2': {} + + '@zag-js/remove-scroll@1.8.2': + dependencies: + '@zag-js/dom-query': 1.8.2 + + '@zag-js/scroll-snap@1.8.2': + dependencies: + '@zag-js/dom-query': 1.8.2 + + '@zag-js/select@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/collection': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/signature-pad@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + perfect-freehand: 1.2.2 + + '@zag-js/slider@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/splitter@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/steps@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/store@1.8.2': + dependencies: + proxy-compare: 3.0.1 + + '@zag-js/switch@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-visible': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/tabs@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/tags-input@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/auto-resize': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/interact-outside': 1.8.2 + '@zag-js/live-region': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/time-picker@1.8.2(@internationalized/date@3.7.0)': + dependencies: + '@internationalized/date': 3.7.0 + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/timer@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/toast@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/toggle-group@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/toggle@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/tooltip@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-visible': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/store': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/tour@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dismissable': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/focus-trap': 1.8.2 + '@zag-js/interact-outside': 1.8.2 + '@zag-js/popper': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/tree-view@1.8.2': + dependencies: + '@zag-js/anatomy': 1.8.2 + '@zag-js/collection': 1.8.2 + '@zag-js/core': 1.8.2 + '@zag-js/dom-query': 1.8.2 + '@zag-js/types': 1.8.2 + '@zag-js/utils': 1.8.2 + + '@zag-js/types@1.8.1': + dependencies: + csstype: 3.1.3 + + '@zag-js/types@1.8.2': + dependencies: + csstype: 3.1.3 + + '@zag-js/utils@1.8.2': {} + JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 @@ -12392,7 +13361,7 @@ snapshots: aria-hidden@1.2.4: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 aria-query@5.3.0: dependencies: @@ -12450,11 +13419,17 @@ snapshots: dependencies: '@babel/core': 7.26.0 '@babel/parser': 7.26.3 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.4(supports-color@5.5.0) '@babel/types': 7.26.3 transitivePeerDependencies: - supports-color + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.27.0 + cosmiconfig: 7.1.0 + resolve: 1.22.10 + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.25.2): dependencies: '@babel/compat-data': 7.26.8 @@ -12490,7 +13465,7 @@ snapshots: babel-plugin-styled-components@2.1.4(@babel/core@7.25.2)(styled-components@5.3.11(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0): dependencies: '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-module-imports': 7.24.7(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) lodash: 4.17.21 picomatch: 2.3.1 @@ -12922,6 +13897,8 @@ snapshots: meow: 12.1.1 split2: 4.2.0 + convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} cookie-es@1.2.2: {} @@ -12946,6 +13923,14 @@ snapshots: js-yaml: 3.14.1 parse-json: 4.0.0 + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + cosmiconfig@9.0.0(typescript@5.6.2): dependencies: env-paths: 2.2.1 @@ -13025,7 +14010,7 @@ snapshots: date-fns@2.30.0: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.27.0 dayjs@1.11.13: {} @@ -13057,7 +14042,9 @@ snapshots: dedent@0.7.0: {} - dedent@1.5.3: {} + dedent@1.5.3(babel-plugin-macros@3.1.0): + optionalDependencies: + babel-plugin-macros: 3.1.0 deep-eql@5.0.2: {} @@ -13561,6 +14548,8 @@ snapshots: make-dir: 2.1.0 pkg-dir: 3.0.0 + find-root@1.1.0: {} + find-up@3.0.0: dependencies: locate-path: 3.0.0 @@ -13629,13 +14618,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) style-value-types: 5.0.0 - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@emotion/is-prop-valid': 0.8.8 framesync@6.0.1: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 fresh@0.5.2: {} @@ -13757,6 +14746,8 @@ snapshots: globjoin@0.1.4: {} + globrex@0.1.2: {} + goober@2.1.14(csstype@3.1.3): dependencies: csstype: 3.1.3 @@ -14004,11 +14995,11 @@ snapshots: i18next-browser-languagedetector@7.1.0: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.27.0 i18next@23.11.5: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.27.0 iconv-lite@0.6.3: dependencies: @@ -14836,7 +15827,7 @@ snapshots: media-query-parser@2.0.2: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.27.0 memoize-one@5.2.1: {} @@ -15694,6 +16685,8 @@ snapshots: pathval@2.0.0: {} + perfect-freehand@1.2.2: {} + periscopic@3.1.0: dependencies: '@types/estree': 1.0.6 @@ -15762,7 +16755,7 @@ snapshots: framesync: 6.0.1 hey-listen: 1.0.8 style-value-types: 5.0.0 - tslib: 2.7.0 + tslib: 2.8.1 possible-typed-array-names@1.0.0: {} @@ -15879,6 +16872,12 @@ snapshots: proxy-compare@2.5.1: {} + proxy-compare@3.0.1: {} + + proxy-memoize@3.0.1: + dependencies: + proxy-compare: 3.0.1 + pump@3.0.2: dependencies: end-of-stream: 1.4.4 @@ -15965,6 +16964,10 @@ snapshots: transitivePeerDependencies: - csstype + react-icons@5.5.0(react@18.3.1): + dependencies: + react: 18.3.1 + react-intersection-observer@9.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 @@ -16054,7 +17057,7 @@ snapshots: dependencies: react: 18.3.1 react-style-singleton: 2.2.1(@types/react@18.3.9)(react@18.3.1) - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.9 @@ -16063,7 +17066,7 @@ snapshots: react: 18.3.1 react-remove-scroll-bar: 2.3.6(@types/react@18.3.9)(react@18.3.1) react-style-singleton: 2.2.1(@types/react@18.3.9)(react@18.3.1) - tslib: 2.7.0 + tslib: 2.8.1 use-callback-ref: 1.3.2(@types/react@18.3.9)(react@18.3.1) use-sidecar: 1.1.2(@types/react@18.3.9)(react@18.3.1) optionalDependencies: @@ -16090,7 +17093,7 @@ snapshots: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.9 @@ -16722,7 +17725,7 @@ snapshots: style-value-types@5.0.0: dependencies: hey-listen: 1.0.8 - tslib: 2.7.0 + tslib: 2.8.1 styled-components@5.3.11(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1): dependencies: @@ -16810,6 +17813,8 @@ snapshots: - supports-color - typescript + stylis@4.2.0: {} + stylis@4.3.2: {} sucrase@3.35.0: @@ -17002,12 +18007,14 @@ snapshots: optionalDependencies: '@swc/core': 1.7.28(@swc/helpers@0.5.17) + tsconfck@3.1.5(typescript@5.6.2): + optionalDependencies: + typescript: 5.6.2 + tslib@1.14.1: {} tslib@2.6.2: {} - tslib@2.7.0: {} - tslib@2.8.1: {} tsx@4.19.1: @@ -17209,7 +18216,7 @@ snapshots: use-callback-ref@1.3.2(@types/react@18.3.9)(react@18.3.1): dependencies: react: 18.3.1 - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.9 @@ -17221,7 +18228,7 @@ snapshots: dependencies: detect-node-es: 1.1.0 react: 18.3.1 - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@types/react': 18.3.9 @@ -17344,6 +18351,17 @@ snapshots: - tsx - yaml + vite-tsconfig-paths@5.1.4(typescript@5.6.2)(vite@6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1)): + dependencies: + debug: 4.4.0 + globrex: 0.1.2 + tsconfck: 3.1.5(typescript@5.6.2) + optionalDependencies: + vite: 6.2.5(@types/node@22.6.1)(jiti@1.21.6)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) + transitivePeerDependencies: + - supports-color + - typescript + vite@5.4.8(@types/node@22.6.1)(terser@5.39.0): dependencies: esbuild: 0.21.5 @@ -17409,7 +18427,7 @@ snapshots: vlq@1.0.1: {} - vocs@1.0.0-alpha.59(@types/node@22.6.1)(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.39.0)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2))(typescript@5.6.2): + vocs@1.0.0-alpha.59(@types/node@22.6.1)(@types/react-dom@18.3.0)(@types/react@18.3.9)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.39.0)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2))(typescript@5.6.2): dependencies: '@floating-ui/react': 0.26.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@hono/node-server': 1.13.1(hono@3.12.12) @@ -17427,9 +18445,9 @@ snapshots: '@shikijs/rehype': 1.18.0 '@shikijs/transformers': 1.18.0 '@shikijs/twoslash': 1.18.0(typescript@5.6.2) - '@vanilla-extract/css': 1.15.5 + '@vanilla-extract/css': 1.15.5(babel-plugin-macros@3.1.0) '@vanilla-extract/dynamic': 2.1.2 - '@vanilla-extract/vite-plugin': 3.9.5(@types/node@22.6.1)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2))(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0)) + '@vanilla-extract/vite-plugin': 3.9.5(@types/node@22.6.1)(babel-plugin-macros@3.1.0)(terser@5.39.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.17))(@types/node@22.6.1)(typescript@5.6.2))(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0)) '@vitejs/plugin-react': 4.3.1(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0)) autoprefixer: 10.4.20(postcss@8.4.47) cac: 6.7.14 @@ -17672,6 +18690,8 @@ snapshots: yallist@3.1.1: {} + yaml@1.10.2: {} + yaml@2.5.1: {} yaml@2.7.0: {} diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index e6bcb31d..92d0d662 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -9,6 +9,7 @@ import { TanStackReactQueryDevtools } from '@/src/components/sharedComponents/Ta import { TanStackRouterDevtools } from '@/src/components/sharedComponents/TanStackRouterDevtools' import { Footer } from '@/src/components/sharedComponents/ui/Footer' import { Header } from '@/src/components/sharedComponents/ui/Header' +import { Provider } from '@/src/components/ui/provider' import { TransactionNotificationProvider } from '@/src/lib/toast/TransactionNotificationProvider' import { Web3Provider } from '@/src/providers/Web3Provider' import Styles from '@/src/styles' @@ -21,26 +22,32 @@ export const Route = createRootRoute({ function Root() { return ( + // Remove ThemeProvider later - - - - - -
-
- -
-