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" diff --git a/.gitignore b/.gitignore index e0f17a7c..80b76f6d 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ dist-ssr # Editor directories and files .vscode/* +.zed !.vscode/extensions.json .idea .DS_Store @@ -30,4 +31,4 @@ coverage src/hooks/generated.ts src/subgraphs/gql -vite.config.ts.timestamp* \ No newline at end of file +vite.config.ts.timestamp* diff --git a/.lintstagedrc.mjs b/.lintstagedrc.mjs index bfd6e9d5..f3613aff 100644 --- a/.lintstagedrc.mjs +++ b/.lintstagedrc.mjs @@ -1,3 +1,4 @@ export default { - 'src/**/*': ['stylelint --fix', 'biome check --write', 'vitest related --run --coverage=false'], + // 'src/**/*': ['biome check --write', 'vitest related --run --coverage=false'], + 'src/**/*': ['biome check --write'], } diff --git a/.stylelintrc b/.stylelintrc deleted file mode 100644 index 16e24aff..00000000 --- a/.stylelintrc +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "stylelint-config-standard", - "customSyntax": "postcss-styled-syntax", - "rules": { - "number-max-precision": 8, - "selector-class-pattern": [ - "^[a-z][a-zA-Z0-9]+$", - { - "message": "Class selectors should be in camelCase (e.g., myClassName)" - } - ], - "custom-property-empty-line-before": null, - "no-empty-source": null - } -} diff --git a/biome.json b/biome.json index ba99af70..fd5637a2 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,8 @@ { "$schema": "https://biomejs.dev/schemas/1.9.2/schema.json", + "organizeImports": { + "enabled": true + }, "vcs": { "enabled": true, "clientKind": "git", @@ -84,6 +87,7 @@ "noUnreachableSuper": "error", "noUnsafeFinally": "error", "noUnsafeOptionalChaining": "error", + "noUnusedImports": "error", "noUnusedLabels": "error", "noUnusedVariables": "error", "useArrayLiterals": "off", diff --git a/docs/footer.tsx b/docs/footer.tsx index 72379d15..6805da40 100644 --- a/docs/footer.tsx +++ b/docs/footer.tsx @@ -1,5 +1,3 @@ -import React from 'react' - export default function Footer() { return (
diff --git a/docs/pages/introduction/stack.mdx b/docs/pages/introduction/stack.mdx index a01d8cfd..c8cb0664 100644 --- a/docs/pages/introduction/stack.mdx +++ b/docs/pages/introduction/stack.mdx @@ -1,4 +1,4 @@ -# Stack [dAppBooster stack and rationale] +# Tech Stack ## Vite @@ -24,18 +24,6 @@ This template provides a minimal setup to get React working in Vite with HMR and [Official docs](https://tanstack.com/router/latest) -Serve dev mode watching for routes changes: - -```bash - pnpm routes:watch -``` - -Manually generate `routeTree.gen` file: - -```bash - pnpm routes:generate -``` - ### Dev tools Dev tools are not visible in production mode. @@ -62,38 +50,12 @@ You should be able to seamlessly switch between several libraries for wallet con [Github repository](https://github.com/Uniswap/conedison) | [`numberFormat.ts`](https://github.com/BootNodeDev/dAppBooster/blob/main/src/utils/numberFormat.ts) -## Styles - -### Modern Normalize - -[Github repository](https://github.com/sindresorhus/modern-normalize) - -### Styled Components - -[Official docs](https://styled-components.com/) - -### Stylelint - -[Official docs](https://stylelint.io/) - -The [official extension](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint) is recommended if you're using VSCode. - -**Note:** check the "Extension Settings" section if you want errors to be fixed on save, etc. - -### Next Themes - -[Github repository](https://github.com/pacocoursey/next-themes) - -## Faceless UI Modal - -[Github repository](https://github.com/faceless-ui/modal) | [Official docs](https://facelessui.com/docs/getting-started) - -## React Hot Toast +## Chakra UI -[Github repository](https://github.com/timolins/react-hot-toast) +[Official docs](https://www.chakra-ui.com/) ## Vercel Web Analytics [Official docs](https://vercel.com/docs/analytics) -Simply [Enable Web Analytics in Vercel](https://vercel.com/docs/analytics/quickstart#enable-web-analytics-in-vercel) within your Vercel project. Everything else is already integrated and ready to go. \ No newline at end of file +Simply [Enable Web Analytics in Vercel](https://vercel.com/docs/analytics/quickstart#enable-web-analytics-in-vercel) within your Vercel project. Everything else is already integrated and ready to go. diff --git a/docs/pages/recipes/basic-styling.mdx b/docs/pages/recipes/basic-styling.mdx deleted file mode 100644 index ef04db06..00000000 --- a/docs/pages/recipes/basic-styling.mdx +++ /dev/null @@ -1,158 +0,0 @@ -# Basic Styling - -## Overview - -We use [Styled Components](https://styled-components.com/) for styling. Basic CSS and CSS-in-JS knowledge will be beneficial to understand this guide, but you can also learn as you go. There's nothing too complicated about this. - -Refer to the [official documentation](https://styled-components.com/docs) for more information about more advanced features. - -Before continuing, be sure to follow the steps in [getting started](/introduction/getting-started) so you have a project to work with. - -## Some basic concepts - -- **Folder structure:** App-wide styles are located in the `src/styles` folder. -- **Global styles:** `src/styles/globalStyles.tsx` we use this file to define global CSS styles. -- **Base CSS vars:** `src/styles/baseCSSVars.tsx` is used to define global CSS variables. This file is mostly used for **non theme specific** base CSS variables like font families, layout spacing, font size, etc. -- **Themes:** `src/styles/themes/lightThemeCSSVars.tsx` and `src/styles/themes/darkThemeCSSVars.tsx` are used to define theme-specific CSS variables. Use them for CSS variables like colors, shadows, etc. Theming is handled by the [next-themes](https://github.com/pacocoursey/next-themes) library, refer to the documentation for more information. -- **Styled Components:** Is used to style components, so each component has its own styles following the CSS-in-JS pattern and philosophy. -- **HTML props**: All the _core_ components should accept the `style` and `className` props, so you can style them as you wish (inline styles, CSS classes, etc.). - -## Let's get started - -:::info -**Tip:** a complete demo with the results of this guide can be found in the https://github.com/BootNodeDev/dAppBoosterBasicStyling fork of the dAppBooster repository. -::: - -Let's say you want to change some colors from one of our core components: `TokenInput`. Easy peasy! - -You can find the component in the `src/components/sharedComponents/TokenInput` folder, but there's no need to go there. You can override the basic styles using some CSS variables in the light or dark theme files (or even in the same file where you're using the component, but let's not go there... yet). - -This is how our initial dApp looks like: - -![TokenInput Initial State](/img/basic-css/1.jpg) - -Here's an example of how you can change the colors of the `TokenInput` component using CSS variables only: - -- For simplicity's sake, let's say you want to change only the light theme colors. Open the `src/styles/themes/lightThemeCSSVars.tsx` file. -- You'll find CSS vars for several components there, but let's focus on the `TokenInput` component. You can search for the "Token Input" section in the file, or just go to [line 186](https://github.com/BootNodeDev/dAppBooster/blob/0cac08c86299da9c8ab147de29f0f972069f4177/src/styles/themes/lightThemeCSSVars.tsx#L186) (wink wink). You'll see something like this: - -```tsx - --theme-token-input-title-color: #2e3048; - - --theme-token-input-background: #fff; - - --theme-token-input-textfield-background-color: #fff; - --theme-token-input-textfield-background-color-active: rgb(0 0 0 / 5%); - --theme-token-input-textfield-border-color: #e2e0e7; - --theme-token-input-textfield-border-color-active: #e2e0e7; - --theme-token-input-textfield-color: #2e3048; - --theme-token-input-textfield-color-active: #2e3048; - --theme-token-input-textfield-placeholder-color: rgb(22 29 26 / 60%); - - // ... -``` - -The var names are pretty self-explanatory. There are CSS vars for each part of the `TokenInput` component: title, background, textfield, etc. You can change the values of these vars to whatever you want. For example, if you want to change the background color of the `TokenInput` component, you can change the `--theme-token-input-background` var to `#f0f0f0`: - -```tsx - --theme-token-input-background: #f0f0f0; -``` - -This is what this simple change will get you: - -![TokenInput Initial State](/img/basic-css/2.jpg) - -Experiment with the rest of the CSS vars to see what you can achieve. You can also change the colors of other components in the same way. - -:::info -**Remember:** we're changing only the light theme colors here. If you want to change the dark theme colors, you can modify them in `src/styles/themes/darkThemeCSSVars.tsx`. -::: - -## What about things that are not theme-related? - -Some things like padding, column gap, etc. are not theme related (they stay the same when you change themes), so they shouldn't be placed in either theme file. You can modify those in the `src/styles/baseCSSVars.tsx` file, or locally in your component. - -We already saw how to modify some of the global files, so now let's say we do it locally in our `TokenInput` example located in the `src/components/pageComponents/home/index.tsx` file. We import `TokenInput` and also `styled` from `styled-components`, and then we create a `CustomTokenInput` component with the `TokenInput` component as a base: - - -```tsx -import styled from 'styled-components' - -import TokenInput from '@/src/components/sharedComponents/TokenInput' - -const CustomTokenInput = styled(TokenInput)` - /* our custom CSS vars and styles go here */ -` -``` - -There's a bunch of "base" CSS vars we can modify that will affect how the `TokenInput` component looks, and they should be self-explanatory, but you can check the component's documentation for more info. For example: - -```tsx - --base-token-input-border-radius - --base-token-input-padding - --base-token-input-gap -``` - -Let's say we want straight corners and a bit more padding. We can change the `--base-token-input-border-radius` and `--base-token-input-padding` vars like this: - -```tsx -const CustomTokenInput = styled(TokenInput)` - --base-token-input-border-radius: 0; - --base-token-input-padding: 20px; -` -``` - -That and the previous changes will give us something like this: - -![TokenInput Initial State](/img/basic-css/3.png) - -Neat, huh? You can experiment with the [rest of TokenInput's CSS vars](https://github.com/BootNodeDev/dAppBooster/blob/0cac08c86299da9c8ab147de29f0f972069f4177/src/components/sharedComponents/TokenInput/index.tsx#L72) to see what you can achieve. - -## That's fine and all, but I want to change the component even more... - -You can always extend the components using Styled Components. For example, let's say you want to change `TokenInput` to center it on the screen. In our example that's very easy to do, we only need to add `margin: auto` to the component's wrapper. Here's how you can do it: - -```tsx -import styled from 'styled-components' - -import TokenInput from '@/src/components/sharedComponents/TokenInput' - -const CustomTokenInput = styled(TokenInput)` - /* Applies to component's wrapper */ - margin: auto; -` -``` - -And that's it! Now the component is centered. - -## What about the internal components and everything not covered by CSS vars? - -One way you can go about this is extending the component as we did in the previous example and styling the internal components using each component's class name. For example: - -```tsx -import styled from 'styled-components' - -import TokenInput from '@/src/components/sharedComponents/TokenInput' - -const CustomTokenInput = styled(TokenInput)` - /* Title */ - .tokenInputTitle { - font-size: 18px; - font-weight: 700; - padding-bottom: 8px; - } - - /* Input component */ - .tokenInputTextfield { - font-size: 20px; - } -` -``` - -That will result in the following: - -![TokenInput Initial State](/img/basic-css/4.png) - -Finally, the last way you can do this (and my favorite!) is to dig into the [components code](https://github.com/BootNodeDev/dAppBoosterBasicStyling/tree/0cac08c86299da9c8ab147de29f0f972069f4177/src/components/sharedComponents) and modify it as you please. It's all there, so the sky and your skills are the limit. - -**And remember:** if you want to contribute to the project, fix bugs, add features, etc. you can always [create a PR](https://github.com/BootNodeDev/dAppBooster/blob/develop/CONTRIBUTING.md) with your changes! \ No newline at end of file diff --git a/docs/pages/recipes/my-first-dapp.mdx b/docs/pages/recipes/my-first-dapp.mdx index 6d25194c..6b760bc7 100644 --- a/docs/pages/recipes/my-first-dapp.mdx +++ b/docs/pages/recipes/my-first-dapp.mdx @@ -54,7 +54,6 @@ pnpm wagmi-generate ```tsx import { createLazyFileRoute } from '@tanstack/react-router' - import { Weth } from '@/src/components/pageComponents/weth' export const Route = createLazyFileRoute('/weth')({ @@ -69,10 +68,10 @@ With this file we are registering a new page under the path `/weth`. 3. Create a new file `src/components/pageComponents/weth/index.tsx` with this content: ```tsx -import { Card } from 'db-ui-toolkit' +import { Card } from '@chakra-ui/react' export const Weth = () => { - return Hello Annon! + return (Hello Annon! } ``` @@ -129,9 +128,8 @@ We will use the `TokenInput` component. This component will provide us with the Let's modify the `@/src/components/pageComponents/weth` file as follows: ```tsx -import { Card } from 'db-ui-toolkit' +import { Card } from '@chakra-ui/react' import { sepolia } from 'viem/chains' - import TokenInput from '@/src/components/sharedComponents/TokenInput' import { useTokenInput } from '@/src/components/sharedComponents/TokenInput/useTokenInput' import { getContract } from '@/src/constants/contracts/contracts' @@ -157,10 +155,10 @@ export const Weth = () => { const tokenInput = useTokenInput(ethToken) return ( - +

WETH EXAMPLE

-
+ ) } ``` @@ -194,10 +192,9 @@ We will consume different hooks that will take care of triggering the transactio Also, we will make use of another special hook [useWeb3Status()](https://github.com/BootNodeDev/dAppBooster/blob/develop/src/hooks/useWeb3Status.tsx) provided by dappBooster. This hook will return important information of the context of the connected wallet and selected chain. ```tsx -import { Card } from 'db-ui-toolkit' +import { Card } from '@chakra-ui/react' import { Address } from 'viem' import { sepolia } from 'viem/chains' - import TokenInput from '@/src/components/sharedComponents/TokenInput' import { useTokenInput } from '@/src/components/sharedComponents/TokenInput/useTokenInput' import { getContract } from '@/src/constants/contracts/contracts' @@ -247,10 +244,10 @@ export const SuspendedWeth = withSuspenseAndRetry(() => { }) // [!code focus] return ( - +

WETH EXAMPLE

-
+ ) }) @@ -265,11 +262,9 @@ After the user enters a valid value, we need a button to trigger one of the poss ```tsx import { ChangeEvent, useState } from 'react' // [!code focus] - -import { Card } from 'db-ui-toolkit' +import { Card } from '@chakra-ui/react' import { Address } from 'viem' // [!code focus] import { sepolia } from 'viem/chains' - import TokenInput from '@/src/components/sharedComponents/TokenInput' import { useTokenInput } from '@/src/components/sharedComponents/TokenInput/useTokenInput' import TransactionButton from '@/src/components/sharedComponents/TransactionButton' // [!code focus] @@ -356,7 +351,7 @@ export const SuspendedWeth = withSuspenseAndRetry(() => { } // [!code focus] return ( - +

WETH EXAMPLE


// [!code focus]
// [!code focus] @@ -379,7 +374,7 @@ export const SuspendedWeth = withSuspenseAndRetry(() => { > // [!code focus] {getActionText()} // [!code focus] // [!code focus] - // [!code focus] + // [!code focus] ) }) @@ -391,4 +386,3 @@ export const Weth = () => ( :::info The `sendOperation.methodId` is used to provide additional context to the toast notification displayed by the `TransactionButton`. This is optional, but if you include a `methodId` property in the function passed to the transaction property, it will display that context in the toast, offering the user more detailed information. ::: - diff --git a/docs/pages/styling/basic-styling.mdx b/docs/pages/styling/basic-styling.mdx deleted file mode 100644 index ef04db06..00000000 --- a/docs/pages/styling/basic-styling.mdx +++ /dev/null @@ -1,158 +0,0 @@ -# Basic Styling - -## Overview - -We use [Styled Components](https://styled-components.com/) for styling. Basic CSS and CSS-in-JS knowledge will be beneficial to understand this guide, but you can also learn as you go. There's nothing too complicated about this. - -Refer to the [official documentation](https://styled-components.com/docs) for more information about more advanced features. - -Before continuing, be sure to follow the steps in [getting started](/introduction/getting-started) so you have a project to work with. - -## Some basic concepts - -- **Folder structure:** App-wide styles are located in the `src/styles` folder. -- **Global styles:** `src/styles/globalStyles.tsx` we use this file to define global CSS styles. -- **Base CSS vars:** `src/styles/baseCSSVars.tsx` is used to define global CSS variables. This file is mostly used for **non theme specific** base CSS variables like font families, layout spacing, font size, etc. -- **Themes:** `src/styles/themes/lightThemeCSSVars.tsx` and `src/styles/themes/darkThemeCSSVars.tsx` are used to define theme-specific CSS variables. Use them for CSS variables like colors, shadows, etc. Theming is handled by the [next-themes](https://github.com/pacocoursey/next-themes) library, refer to the documentation for more information. -- **Styled Components:** Is used to style components, so each component has its own styles following the CSS-in-JS pattern and philosophy. -- **HTML props**: All the _core_ components should accept the `style` and `className` props, so you can style them as you wish (inline styles, CSS classes, etc.). - -## Let's get started - -:::info -**Tip:** a complete demo with the results of this guide can be found in the https://github.com/BootNodeDev/dAppBoosterBasicStyling fork of the dAppBooster repository. -::: - -Let's say you want to change some colors from one of our core components: `TokenInput`. Easy peasy! - -You can find the component in the `src/components/sharedComponents/TokenInput` folder, but there's no need to go there. You can override the basic styles using some CSS variables in the light or dark theme files (or even in the same file where you're using the component, but let's not go there... yet). - -This is how our initial dApp looks like: - -![TokenInput Initial State](/img/basic-css/1.jpg) - -Here's an example of how you can change the colors of the `TokenInput` component using CSS variables only: - -- For simplicity's sake, let's say you want to change only the light theme colors. Open the `src/styles/themes/lightThemeCSSVars.tsx` file. -- You'll find CSS vars for several components there, but let's focus on the `TokenInput` component. You can search for the "Token Input" section in the file, or just go to [line 186](https://github.com/BootNodeDev/dAppBooster/blob/0cac08c86299da9c8ab147de29f0f972069f4177/src/styles/themes/lightThemeCSSVars.tsx#L186) (wink wink). You'll see something like this: - -```tsx - --theme-token-input-title-color: #2e3048; - - --theme-token-input-background: #fff; - - --theme-token-input-textfield-background-color: #fff; - --theme-token-input-textfield-background-color-active: rgb(0 0 0 / 5%); - --theme-token-input-textfield-border-color: #e2e0e7; - --theme-token-input-textfield-border-color-active: #e2e0e7; - --theme-token-input-textfield-color: #2e3048; - --theme-token-input-textfield-color-active: #2e3048; - --theme-token-input-textfield-placeholder-color: rgb(22 29 26 / 60%); - - // ... -``` - -The var names are pretty self-explanatory. There are CSS vars for each part of the `TokenInput` component: title, background, textfield, etc. You can change the values of these vars to whatever you want. For example, if you want to change the background color of the `TokenInput` component, you can change the `--theme-token-input-background` var to `#f0f0f0`: - -```tsx - --theme-token-input-background: #f0f0f0; -``` - -This is what this simple change will get you: - -![TokenInput Initial State](/img/basic-css/2.jpg) - -Experiment with the rest of the CSS vars to see what you can achieve. You can also change the colors of other components in the same way. - -:::info -**Remember:** we're changing only the light theme colors here. If you want to change the dark theme colors, you can modify them in `src/styles/themes/darkThemeCSSVars.tsx`. -::: - -## What about things that are not theme-related? - -Some things like padding, column gap, etc. are not theme related (they stay the same when you change themes), so they shouldn't be placed in either theme file. You can modify those in the `src/styles/baseCSSVars.tsx` file, or locally in your component. - -We already saw how to modify some of the global files, so now let's say we do it locally in our `TokenInput` example located in the `src/components/pageComponents/home/index.tsx` file. We import `TokenInput` and also `styled` from `styled-components`, and then we create a `CustomTokenInput` component with the `TokenInput` component as a base: - - -```tsx -import styled from 'styled-components' - -import TokenInput from '@/src/components/sharedComponents/TokenInput' - -const CustomTokenInput = styled(TokenInput)` - /* our custom CSS vars and styles go here */ -` -``` - -There's a bunch of "base" CSS vars we can modify that will affect how the `TokenInput` component looks, and they should be self-explanatory, but you can check the component's documentation for more info. For example: - -```tsx - --base-token-input-border-radius - --base-token-input-padding - --base-token-input-gap -``` - -Let's say we want straight corners and a bit more padding. We can change the `--base-token-input-border-radius` and `--base-token-input-padding` vars like this: - -```tsx -const CustomTokenInput = styled(TokenInput)` - --base-token-input-border-radius: 0; - --base-token-input-padding: 20px; -` -``` - -That and the previous changes will give us something like this: - -![TokenInput Initial State](/img/basic-css/3.png) - -Neat, huh? You can experiment with the [rest of TokenInput's CSS vars](https://github.com/BootNodeDev/dAppBooster/blob/0cac08c86299da9c8ab147de29f0f972069f4177/src/components/sharedComponents/TokenInput/index.tsx#L72) to see what you can achieve. - -## That's fine and all, but I want to change the component even more... - -You can always extend the components using Styled Components. For example, let's say you want to change `TokenInput` to center it on the screen. In our example that's very easy to do, we only need to add `margin: auto` to the component's wrapper. Here's how you can do it: - -```tsx -import styled from 'styled-components' - -import TokenInput from '@/src/components/sharedComponents/TokenInput' - -const CustomTokenInput = styled(TokenInput)` - /* Applies to component's wrapper */ - margin: auto; -` -``` - -And that's it! Now the component is centered. - -## What about the internal components and everything not covered by CSS vars? - -One way you can go about this is extending the component as we did in the previous example and styling the internal components using each component's class name. For example: - -```tsx -import styled from 'styled-components' - -import TokenInput from '@/src/components/sharedComponents/TokenInput' - -const CustomTokenInput = styled(TokenInput)` - /* Title */ - .tokenInputTitle { - font-size: 18px; - font-weight: 700; - padding-bottom: 8px; - } - - /* Input component */ - .tokenInputTextfield { - font-size: 20px; - } -` -``` - -That will result in the following: - -![TokenInput Initial State](/img/basic-css/4.png) - -Finally, the last way you can do this (and my favorite!) is to dig into the [components code](https://github.com/BootNodeDev/dAppBoosterBasicStyling/tree/0cac08c86299da9c8ab147de29f0f972069f4177/src/components/sharedComponents) and modify it as you please. It's all there, so the sky and your skills are the limit. - -**And remember:** if you want to contribute to the project, fix bugs, add features, etc. you can always [create a PR](https://github.com/BootNodeDev/dAppBooster/blob/develop/CONTRIBUTING.md) with your changes! \ No newline at end of file diff --git a/docs/pages/styling/integration.mdx b/docs/pages/styling/integration.mdx deleted file mode 100644 index 100b10ff..00000000 --- a/docs/pages/styling/integration.mdx +++ /dev/null @@ -1,73 +0,0 @@ -# Integration with other libraries - -## Overview - -Our CSS engineers have been working hard to provide you with a minimalistic set of components and styles useful for your future dApps (you have to understand: they LOVE their raw CSS and creating everything from scratch). But - as they say- with great power comes great responsibility... - -dAppBooster provides the **bare minimum** you need to create a dApp, no more, no less. But we understand that you may want to use other libraries to expand the functionality in your project, so in this guide we will show you how to integrate [Chakra UI](https://v2.chakra-ui.com/) with dAppBooster. - -We consider Chakra UI to be a great choice for styling your dApps, as it provides a set of standard components and tools and it's also compatible with React's and Styled Components' philosophy. - -## Let's get started - -:::info -**Tip:** a complete demo with the results of this guide can be found in the https://github.com/BootNodeDev/dAppBoosterBasicStyling/tree/ChakraUI fork of the dAppBooster repository. -::: - -First, you need to install Chakra UI in your project. You can do this by following the instructions in the [official documentation](https://v2.chakra-ui.com/getting-started/vite-guide). - -Done? That's it! Now you can start using Chakra UI components in your dApps. - -## A simple example - -Let's go back to the example in the [Basic Styling](styling/basic-styling.mdx) guide. Let's say we want to center the TokenInput component in the middle of [the page](https://github.com/BootNodeDev/dAppBoosterBasicStyling/blob/ChakraUI/src/components/pageComponents/home/index.tsx) but this time using Chakra UI. - -First, we remove all of Styled Component's code and use the the default TokenInput import: - -```tsx -import TokenInput from '@/src/components/sharedComponents/TokenInput' -// the rest of the imports - -export const Home = () => { - // TokenInput's needed consts and values - - return ( - - ) -} -``` - -Now we can use Chakra UI's `Center` component to center the TokenInput: - -```tsx -import { Center } from '@chakra-ui/react' -import TokenInput from '@/src/components/sharedComponents/TokenInput' -// the rest of the imports - -export const Home = () => { - // TokenInput's needed consts and values - - return ( -
- -
- ) -} -``` - -And that's it, the TokenInput component is now centered in the middle of the page withouth the need of any custom CSS! - -You can also check the [Header](https://github.com/BootNodeDev/dAppBoosterBasicStyling/blob/ChakraUI/src/components/sharedComponents/ui/Header.tsx) and [Footer](https://github.com/BootNodeDev/dAppBoosterBasicStyling/blob/ChakraUI/src/components/sharedComponents/ui/Footer.tsx) files to see these components styled with pure Chakra UI. - -:::info -**Remember:** there's no need to do this, but it's there if you need it. You can use 100% Chakra UI, 100% Styled Components, or a mix of both. It's up to you! -::: - -## But what about this or that styling library? - -We understand you may prefer some other styling library, but there are dozens if not hundreds of them out there. We can't cover them all, nor guarantee they will work with dAppBooster. Here's a few links you might find useful: - -- **Styled Components:** https://styled-components.com/docs -- **How to combine Tailwind CSS with Styled Components:** https://www.siedykh.com/blog/how-to-combine-tailwind-css-with-styled-components -- **styled2tailwind:** https://github.com/Blazity/styled2tailwind, transform your Styled-Components into TailwindCSS. -- **W3 Schools:** https://www.w3schools.com/css/ \ No newline at end of file diff --git a/index.html b/index.html index d153599f..8749da92 100644 --- a/index.html +++ b/index.html @@ -1,78 +1,50 @@ - - - - - dAppBooster - Web3 Template For All Your Blockchain Development Needs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - + + + + + dAppBooster - Web3 Template For All Your Blockchain Development Needs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/package.json b/package.json index 2f978f45..4d2725da 100644 --- a/package.json +++ b/package.json @@ -18,14 +18,16 @@ "preview": "vite preview", "routes:generate": "tsr generate", "routes:watch": "tsr watch", + "subgraph-codegen": "graphql-codegen --config ./src/subgraphs/codegen.ts", "test": "vitest run", "test:coverage": "vitest run --coverage", "test:watch": "vitest", "wagmi-generate": "wagmi generate --config src/lib/wagmi/config.ts" }, "dependencies": { - "@bootnodedev/db-ui-toolkit": "1.0.0-beta.2", - "@faceless-ui/modal": "3.0.0-beta.2", + "@bootnodedev/db-subgraph": "^0.1.2", + "@chakra-ui/react": "^3.16.0", + "@emotion/react": "^11.14.0", "@lifi/sdk": "^3.2.3", "@t3-oss/env-core": "^0.11.1", "@tanstack/react-query": "^5.62.0", @@ -34,15 +36,15 @@ "@uniswap/default-token-list": "^13.20.0", "@vercel/analytics": "^1.3.1", "connectkit": "^1.8.2", - "modern-normalize": "^3.0.1", - "next-themes": "^0.4.4", + "graphql": "^16.9.0", + "graphql-request": "^7.1.0", + "next-themes": "^0.4.6", "react": "^18.3.1", "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", "use-debounce": "^10.0.4", "viem": "^2.22.1", "wagmi": "^2.12.14", @@ -52,6 +54,8 @@ "@biomejs/biome": "1.9.2", "@commitlint/cli": "^19.5.0", "@commitlint/config-conventional": "^19.5.0", + "@graphql-codegen/cli": "^5.0.2", + "@graphql-typed-document-node/core": "^3.2.0", "@parcel/watcher": "^2.4.1", "@tanstack/react-query-devtools": "^5.58.0", "@tanstack/router-cli": "^1.58.1", @@ -63,15 +67,12 @@ "@types/react": "^18.3.8", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react-swc": "^3.7.2", - "@vitest/coverage-v8": "^3.1.1", + "@vitest/coverage-v8": "^2.1.1", "@wagmi/cli": "^2.1.16", "change-case": "^5.4.4", "husky": "^9.1.7", "jsdom": "^25.0.1", "lint-staged": "^15.2.10", - "postcss-styled-syntax": "^0.6.4", - "stylelint": "^16.9.0", - "stylelint-config-standard": "^36.0.1", "ts-node": "^10.9.2", "typedoc": "^0.26.11", "typedoc-plugin-inline-sources": "^1.2.1", @@ -80,7 +81,9 @@ "typedoc-plugin-zod": "^1.4.0", "typescript": "^5.6.2", "vite": "^6.2.4", - "vitest": "^3.1.1", + "vite-plugin-sitemap": "^0.7.1", + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^2.1.1", "vocs": "1.0.0-alpha.59" }, "pnpm": { @@ -96,4 +99,4 @@ "utf-8-validate" ] } -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a505eec3..24ce133b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,12 +8,15 @@ importers: .: dependencies: - '@bootnodedev/db-ui-toolkit': - specifier: 1.0.0-beta.2 - version: 1.0.0-beta.2 - '@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) + '@bootnodedev/db-subgraph': + specifier: ^0.1.2 + version: 0.1.2(@parcel/watcher@2.4.1)(@tanstack/react-query@5.62.0(react@18.3.1))(@types/node@22.6.1)(bufferutil@4.0.9)(graphql-sock@1.0.1(graphql@16.10.0))(graphql-tag@2.12.6(graphql@16.10.0))(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@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) '@lifi/sdk': specifier: ^3.2.3 version: 3.2.3(@solana/wallet-adapter-base@0.9.23(@solana/web3.js@1.95.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(@solana/web3.js@1.95.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8)) @@ -37,13 +40,16 @@ importers: version: 1.3.1(react@18.3.1) connectkit: specifier: ^1.8.2 - version: 1.8.2(@babel/core@7.25.2)(@tanstack/react-query@5.62.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.12.14(@tanstack/query-core@5.62.0)(@tanstack/react-query@5.62.0(react@18.3.1))(@types/react@18.3.9)(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)) - modern-normalize: - specifier: ^3.0.1 - version: 3.0.1 + version: 1.8.2(@babel/core@7.26.0)(@tanstack/react-query@5.62.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.12.14(@tanstack/query-core@5.62.0)(@tanstack/react-query@5.62.0(react@18.3.1))(@types/react@18.3.9)(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)) + graphql: + specifier: ^16.9.0 + version: 16.10.0 + graphql-request: + specifier: ^7.1.0 + version: 7.1.2(graphql@16.10.0) next-themes: - specifier: ^0.4.4 - version: 0.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^0.4.6 + version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: ^18.3.1 version: 18.3.1 @@ -53,18 +59,15 @@ importers: react-error-boundary: specifier: ^4.0.13 version: 4.0.13(react@18.3.1) - 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) react-number-format: specifier: ^5.4.2 version: 5.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - styled-components: - specifier: ^6.1.13 - version: 6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) use-debounce: specifier: ^10.0.4 version: 10.0.4(react@18.3.1) @@ -73,7 +76,7 @@ importers: version: 2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8) wagmi: specifier: ^2.12.14 - version: 2.12.14(@tanstack/query-core@5.62.0)(@tanstack/react-query@5.62.0(react@18.3.1))(@types/react@18.3.9)(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + version: 2.12.14(@tanstack/query-core@5.62.0)(@tanstack/react-query@5.62.0(react@18.3.1))(@types/react@18.3.9)(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) zod: specifier: ^3.23.8 version: 3.23.8 @@ -87,6 +90,12 @@ importers: '@commitlint/config-conventional': specifier: ^19.5.0 version: 19.5.0 + '@graphql-codegen/cli': + specifier: ^5.0.2 + version: 5.0.5(@parcel/watcher@2.4.1)(@types/node@22.6.1)(bufferutil@4.0.9)(graphql-sock@1.0.1(graphql@16.10.0))(graphql@16.10.0)(typescript@5.6.2)(utf-8-validate@5.0.10) + '@graphql-typed-document-node/core': + specifier: ^3.2.0 + version: 3.2.0(graphql@16.10.0) '@parcel/watcher': specifier: ^2.4.1 version: 2.4.1 @@ -101,7 +110,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.1)) + 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@2.4.2)(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 +128,10 @@ importers: version: 18.3.0 '@vitejs/plugin-react-swc': specifier: ^3.7.2 - 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)) + version: 3.7.2(@swc/helpers@0.5.17)(vite@6.2.5(@types/node@22.6.1)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1)) '@vitest/coverage-v8': - 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)) + specifier: ^2.1.1 + version: 2.1.9(vitest@2.1.9(@types/node@22.6.1)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0)) '@wagmi/cli': specifier: ^2.1.16 version: 2.1.16(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10) @@ -138,15 +147,6 @@ importers: lint-staged: specifier: ^15.2.10 version: 15.2.10 - postcss-styled-syntax: - specifier: ^0.6.4 - version: 0.6.4(postcss@8.4.47) - stylelint: - specifier: ^16.9.0 - version: 16.9.0(typescript@5.6.2) - stylelint-config-standard: - specifier: ^36.0.1 - 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.17))(@types/node@22.6.1)(typescript@5.6.2) @@ -170,13 +170,19 @@ 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.1) + version: 6.2.5(@types/node@22.6.1)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) + vite-plugin-sitemap: + specifier: ^0.7.1 + version: 0.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@2.4.2)(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) + specifier: ^2.1.1 + version: 2.1.9(@types/node@22.6.1)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0) 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 +200,24 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@ardatan/relay-compiler@12.0.0': + resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} + hasBin: true + peerDependencies: + graphql: '*' + + '@ardatan/relay-compiler@12.0.3': + resolution: {integrity: sha512-mBDFOGvAoVlWaWqs3hm1AciGHSQE1rqFc/liZTyYz/Oek9yZdT5H26pH2zAFuEiTiBVPPyMuqf5VjOFPI2DGsQ==} + hasBin: true + peerDependencies: + graphql: '*' + + '@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'} @@ -222,6 +246,10 @@ packages: resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} + '@babel/core@7.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.25.6': resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} @@ -367,6 +395,10 @@ packages: resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.27.0': + resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.24.7': resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} @@ -436,6 +468,13 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-object-rest-spread@7.20.7': + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-optional-chaining@7.21.0': resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} @@ -1002,9 +1041,8 @@ packages: 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'} + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} '@biomejs/biome@1.9.2': resolution: {integrity: sha512-4j2Gfwft8Jqp1X0qLYvK4TEy4xhTo4o6rlvJPsjPeEame8gsmbGQfOPBkw7ur+7/Z/f0HZmCZKqbMvR7vTXQYQ==} @@ -1059,9 +1097,19 @@ packages: cpu: [x64] os: [win32] - '@bootnodedev/db-ui-toolkit@1.0.0-beta.2': - resolution: {integrity: sha512-R1llbVfN0PfEjKmBKofW2NQZtwBsPXTWBsXGdnuLx0MEQdoMlkjASjRSU6vRNSTtAkLvZ8phcRf+TuuQQQ3PfA==} - engines: {node: '>=20.0.0'} + '@bootnodedev/db-subgraph@0.1.2': + resolution: {integrity: sha512-7xQM9JGpwxeZ2u9I5mwsxg12VExc2ww5VIToIYPeA3UIqgvuudOj0BGGrw7rh4XU02s7hDK7Ma/Pq5Ih/KP04A==} + peerDependencies: + '@tanstack/react-query': ^5 + react: ^18 + viem: ^2 + + '@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==} @@ -1150,31 +1198,11 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@csstools/css-parser-algorithms@3.0.1': - resolution: {integrity: sha512-lSquqZCHxDfuTg/Sk2hiS0mcSFCEBuj49JfzPHJogDBT0mGCyY5A1AQzBWngitrp7i1/HAZpIgzF/VjhOEIJIg==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-tokenizer': ^3.0.1 - - '@csstools/css-tokenizer@3.0.1': - resolution: {integrity: sha512-UBqaiu7kU0lfvaP982/o3khfXccVlHPWp0/vwwiIgDF0GmqqqxoiXC/6FCjlS9u92f7CoEz6nXKQnrn1kIAkOw==} - engines: {node: '>=18'} - - '@csstools/media-query-list-parser@3.0.1': - resolution: {integrity: sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==} - engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.1 - '@csstools/css-tokenizer': ^3.0.1 - - '@csstools/selector-specificity@4.0.0': - resolution: {integrity: sha512-189nelqtPd8++phaHNwYovKZI0FOzH1vQEE3QhHHkNIGrg5fSs9CbYP3RvfEH5geztnIA9Jwq91wyOIwAW5JIQ==} - engines: {node: '>=18'} - peerDependencies: - postcss-selector-parser: ^6.1.0 + '@emotion/babel-plugin@11.13.5': + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} - '@dual-bundle/import-meta-resolve@4.1.0': - resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} + '@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==} @@ -1182,29 +1210,61 @@ packages: '@emotion/is-prop-valid@0.8.8': resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} - '@emotion/is-prop-valid@1.2.2': - resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==} - '@emotion/is-prop-valid@1.3.1': resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} '@emotion/memoize@0.7.4': resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} - '@emotion/memoize@0.8.1': - resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} - '@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==} + + '@envelop/core@5.2.3': + resolution: {integrity: sha512-KfoGlYD/XXQSc3BkM1/k15+JQbkQ4ateHazeZoWl9P71FsLTDXSjGy6j7QqfhpIDSbxNISqhPMfZHYSbDFOofQ==} + engines: {node: '>=18.0.0'} + + '@envelop/instrumentation@1.0.0': + resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} + engines: {node: '>=18.0.0'} + + '@envelop/types@5.2.1': + resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==} + engines: {node: '>=18.0.0'} '@esbuild/aix-ppc64@0.19.12': resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} @@ -1792,11 +1852,8 @@ packages: resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} engines: {node: '>=14'} - '@faceless-ui/modal@3.0.0-beta.2': - resolution: {integrity: sha512-UmXvz7Iw3KMO4Pm3llZczU4uc5pPQDb6rdqwoBvYDFgWvkraOAHKx0HxSZgwqQvqOhn8joEFBfFp6/Do2562ow==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc.0 + '@fastify/busboy@3.1.1': + resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} '@floating-ui/core@1.6.8': resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} @@ -1804,6 +1861,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 +1879,281 @@ 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==} + + '@graphql-codegen/add@5.0.3': + resolution: {integrity: sha512-SxXPmramkth8XtBlAHu4H4jYcYXM/o3p01+psU+0NADQowA8jtYkK6MW5rV6T+CxkEaNZItfSmZRPgIuypcqnA==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + '@graphql-codegen/cli@5.0.5': + resolution: {integrity: sha512-9p9SI5dPhJdyU+O6p1LUqi5ajDwpm6pUhutb1fBONd0GZltLFwkgWFiFtM6smxkYXlYVzw61p1kTtwqsuXO16w==} + engines: {node: '>=16'} + hasBin: true + peerDependencies: + '@parcel/watcher': ^2.1.0 + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + '@parcel/watcher': + optional: true + + '@graphql-codegen/client-preset@4.8.0': + resolution: {integrity: sha512-IVtTl7GsPMbQihk5+l5fDYksnPPOoC52sKxzquyIyuecZLEB7W3nNLV29r6+y+tjXTRPA774FR7CHGA2adzhjw==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-sock: ^1.0.0 + + '@graphql-codegen/core@4.0.2': + resolution: {integrity: sha512-IZbpkhwVqgizcjNiaVzNAzm/xbWT6YnGgeOLwVjm4KbJn3V2jchVtuzHH09G5/WkkLSk2wgbXNdwjM41JxO6Eg==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + '@graphql-codegen/gql-tag-operations@4.0.17': + resolution: {integrity: sha512-2pnvPdIG6W9OuxkrEZ6hvZd142+O3B13lvhrZ48yyEBh2ujtmKokw0eTwDHtlXUqjVS0I3q7+HB2y12G/m69CA==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + '@graphql-codegen/plugin-helpers@2.7.2': + resolution: {integrity: sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + '@graphql-codegen/plugin-helpers@3.1.2': + resolution: {integrity: sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + '@graphql-codegen/plugin-helpers@5.1.0': + resolution: {integrity: sha512-Y7cwEAkprbTKzVIe436TIw4w03jorsMruvCvu0HJkavaKMQbWY+lQ1RIuROgszDbxAyM35twB5/sUvYG5oW+yg==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + '@graphql-codegen/schema-ast@4.1.0': + resolution: {integrity: sha512-kZVn0z+th9SvqxfKYgztA6PM7mhnSZaj4fiuBWvMTqA+QqQ9BBed6Pz41KuD/jr0gJtnlr2A4++/0VlpVbCTmQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + '@graphql-codegen/typed-document-node@5.1.1': + resolution: {integrity: sha512-Bp/BrMZDKRwzuVeLv+pSljneqONM7gqu57ZaV34Jbncu2hZWMRDMfizTKghoEwwZbRCYYfJO9tA0sYVVIfI1kg==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + '@graphql-codegen/typescript-graphql-request@6.2.0': + resolution: {integrity: sha512-nkp5tr4PrC/+2QkQqi+IB+bc7AavUnUvXPW8MC93HZRvwfMGy6m2Oo7b9JCPZ3vhNpqT2VDWOn/zIZXKz6zJAw==} + engines: {node: '>= 16.0.0'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-request: ^6.0.0 + graphql-tag: ^2.0.0 + + '@graphql-codegen/typescript-operations@4.6.0': + resolution: {integrity: sha512-/EltSdE/uPoEAblRTVLABVDhsrE//Kl3pCflyG1PWl4gWL9/OzQXYGjo6TF6bPMVn/QBWoO0FeboWf+bk84SXA==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-sock: ^1.0.0 + + '@graphql-codegen/typescript@4.1.6': + resolution: {integrity: sha512-vpw3sfwf9A7S+kIUjyFxuvrywGxd4lmwmyYnnDVjVE4kSQ6Td3DpqaPTy8aNQ6O96vFoi/bxbZS2BW49PwSUUA==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + '@graphql-codegen/visitor-plugin-common@2.13.1': + resolution: {integrity: sha512-mD9ufZhDGhyrSaWQGrU1Q1c5f01TeWtSWy/cDwXYjJcHIj1Y/DG2x0tOflEfCvh5WcnmHNIw4lzDsg1W7iFJEg==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + '@graphql-codegen/visitor-plugin-common@5.8.0': + resolution: {integrity: sha512-lC1E1Kmuzi3WZUlYlqB4fP6+CvbKH9J+haU1iWmgsBx5/sO2ROeXJG4Dmt8gP03bI2BwjiwV5WxCEMlyeuzLnA==} + engines: {node: '>=16'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + '@graphql-hive/signal@1.0.0': + resolution: {integrity: sha512-RiwLMc89lTjvyLEivZ/qxAC5nBHoS2CtsWFSOsN35sxG9zoo5Z+JsFHM8MlvmO9yt+MJNIyC5MLE1rsbOphlag==} + engines: {node: '>=18.0.0'} + + '@graphql-tools/apollo-engine-loader@8.0.20': + resolution: {integrity: sha512-m5k9nXSyjq31yNsEqDXLyykEjjn3K3Mo73oOKI+Xjy8cpnsgbT4myeUJIYYQdLrp7fr9Y9p7ZgwT5YcnwmnAbA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/batch-execute@9.0.15': + resolution: {integrity: sha512-qlWUl6yi87FU5WvyJ0uD81R4Y30oQIuW3mJCjOrEvifyT+f/rEqSZFOhYrofYoZAoTcwqOhy6WgH+b9+AtRYjA==} + engines: {node: '>=18.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/code-file-loader@8.1.20': + resolution: {integrity: sha512-GzIbjjWJIc04KWnEr8VKuPe0FA2vDTlkaeub5p4lLimljnJ6C0QSkOyCUnFmsB9jetQcHm0Wfmn/akMnFUG+wA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/delegate@10.2.17': + resolution: {integrity: sha512-z+LpZrTQCEXA4fbdJcSsvhaMqT4xi/O8B0mP30ENGyTbSfa20QamOQx9jgCiw2ii/ucwxfGMhygwlpZG36EU4w==} + engines: {node: '>=18.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/documents@1.0.1': + resolution: {integrity: sha512-aweoMH15wNJ8g7b2r4C4WRuJxZ0ca8HtNO54rkye/3duxTkW4fGBEutCx03jCIr5+a1l+4vFJNP859QnAVBVCA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-common@0.0.4': + resolution: {integrity: sha512-SEH/OWR+sHbknqZyROCFHcRrbZeUAyjCsgpVWCRjqjqRbiJiXq6TxNIIOmpXgkrXWW/2Ev4Wms6YSGJXjdCs6Q==} + engines: {node: '>=18.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-graphql-ws@2.0.5': + resolution: {integrity: sha512-gI/D9VUzI1Jt1G28GYpvm5ckupgJ5O8mi5Y657UyuUozX34ErfVdZ81g6oVcKFQZ60LhCzk7jJeykK48gaLhDw==} + engines: {node: '>=18.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-http@1.3.3': + resolution: {integrity: sha512-LIy+l08/Ivl8f8sMiHW2ebyck59JzyzO/yF9SFS4NH6MJZUezA1xThUXCDIKhHiD56h/gPojbkpcFvM2CbNE7A==} + engines: {node: '>=18.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-legacy-ws@1.1.17': + resolution: {integrity: sha512-TvltY6eL4DY1Vt66Z8kt9jVmNcI+WkvVPQZrPbMCM3rv2Jw/sWvSwzUBezRuWX0sIckMifYVh23VPcGBUKX/wg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor@1.4.7': + resolution: {integrity: sha512-U0nK9jzJRP9/9Izf1+0Gggd6K6RNRsheFo1gC/VWzfnsr0qjcOSS9qTjY0OTC5iTPt4tQ+W5Zpw/uc7mebI6aA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/git-loader@8.0.24': + resolution: {integrity: sha512-ypLC9N2bKNC0QNbrEBTbWKwbV607f7vK2rSGi9uFeGr8E29tWplo6or9V/+TM0ZfIkUsNp/4QX/zKTgo8SbwQg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/github-loader@8.0.20': + resolution: {integrity: sha512-Icch8bKZ1iP3zXCB9I0ded1hda9NPskSSalw7ZM21kXvLiOR5nZhdqPF65gCFkIKo+O4NR4Bp51MkKj+wl+vpg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/graphql-file-loader@8.0.19': + resolution: {integrity: sha512-kyEZL4rRJ5LelfCXL3GLgbMiu5Zd7memZaL8ZxPXGI7DA8On1e5IVBH3zZJwf7LzhjSVnPaHM7O/bRzGvTbXzQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/graphql-tag-pluck@8.3.19': + resolution: {integrity: sha512-LEw/6IYOUz48HjbWntZXDCzSXsOIM1AyWZrlLoJOrA8QAlhFd8h5Tny7opCypj8FO9VvpPFugWoNDh5InPOEQA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/import@7.0.18': + resolution: {integrity: sha512-1tw1/1QLB0n5bPWfIrhCRnrHIlbMvbwuifDc98g4FPhJ7OXD+iUQe+IpmD5KHVwYWXWhZOuJuq45DfV/WLNq3A==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/json-file-loader@8.0.18': + resolution: {integrity: sha512-JjjIxxewgk8HeMR3npR3YbOkB7fxmdgmqB9kZLWdkRKBxrRXVzhryyq+mhmI0Evzt6pNoHIc3vqwmSctG2sddg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/load@8.1.0': + resolution: {integrity: sha512-OGfOm09VyXdNGJS/rLqZ6ztCiG2g6AMxhwtET8GZXTbnjptFc17GtKwJ3Jv5w7mjJ8dn0BHydvIuEKEUK4ciYw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/merge@9.0.24': + resolution: {integrity: sha512-NzWx/Afl/1qHT3Nm1bghGG2l4jub28AdvtG11PoUlmjcIjnFBJMv4vqL0qnxWe8A82peWo4/TkVdjJRLXwgGEw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/optimize@1.4.0': + resolution: {integrity: sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/optimize@2.0.0': + resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/prisma-loader@8.0.17': + resolution: {integrity: sha512-fnuTLeQhqRbA156pAyzJYN0KxCjKYRU5bz1q/SKOwElSnAU4k7/G1kyVsWLh7fneY78LoMNH5n+KlFV8iQlnyg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/relay-operation-optimizer@6.5.18': + resolution: {integrity: sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/relay-operation-optimizer@7.0.19': + resolution: {integrity: sha512-xnjLpfzw63yIX1bo+BVh4j1attSwqEkUbpJ+HAhdiSUa3FOQFfpWgijRju+3i87CwhjBANqdTZbcsqLT1hEXig==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/schema@10.0.23': + resolution: {integrity: sha512-aEGVpd1PCuGEwqTXCStpEkmheTHNdMayiIKH1xDWqYp9i8yKv9FRDgkGrY4RD8TNxnf7iII+6KOBGaJ3ygH95A==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/url-loader@8.0.31': + resolution: {integrity: sha512-QGP3py6DAdKERHO5D38Oi+6j+v0O3rkBbnLpyOo87rmIRbwE6sOkL5JeHegHs7EEJ279fBX6lMt8ry0wBMGtyA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/utils@10.8.6': + resolution: {integrity: sha512-Alc9Vyg0oOsGhRapfL3xvqh1zV8nKoFUdtLhXX7Ki4nClaIJXckrA86j+uxEuG3ic6j4jlM1nvcWXRn/71AVLQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/utils@8.13.1': + resolution: {integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/utils@9.2.1': + resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/wrap@10.0.35': + resolution: {integrity: sha512-qBga3wo7+GqY+ClGexiyRz9xgy1RWozZryTuGX8usGWPa4wKi/tJS4rKWQQesgB3Fh//SZUCRA5u2nwZaZQw1Q==} + engines: {node: '>=18.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -1831,6 +2166,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 +2434,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'} @@ -2630,6 +2974,9 @@ packages: resolution: {integrity: sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==} engines: {node: '>=14.0.0'} + '@repeaterjs/repeater@3.0.6': + resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} + '@rollup/pluginutils@5.1.2': resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} engines: {node: '>=14.0.0'} @@ -3269,6 +3616,9 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + '@types/js-yaml@4.0.9': + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -3287,6 +3637,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==} @@ -3302,9 +3655,6 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/stylis@4.2.5': - resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==} - '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -3388,43 +3738,43 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 - '@vitest/coverage-v8@3.1.1': - resolution: {integrity: sha512-MgV6D2dhpD6Hp/uroUoAIvFqA8AuvXEFBC2eepG3WFc1pxTfdk1LEqqkWoWhjz+rytoqrnUUCdf6Lzco3iHkLQ==} + '@vitest/coverage-v8@2.1.9': + resolution: {integrity: sha512-Z2cOr0ksM00MpEfyVE8KXIYPEcBFxdbLSs56L8PO0QQMxt/6bDj45uQfxoc96v05KW3clk7vvgP0qfDit9DmfQ==} peerDependencies: - '@vitest/browser': 3.1.1 - vitest: 3.1.1 + '@vitest/browser': 2.1.9 + vitest: 2.1.9 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@3.1.1': - resolution: {integrity: sha512-q/zjrW9lgynctNbwvFtQkGK9+vvHA5UzVi2V8APrp1C6fG6/MuYYkmlx4FubuqLycCeSdHD5aadWfua/Vr0EUA==} + '@vitest/expect@2.1.9': + resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} - '@vitest/mocker@3.1.1': - resolution: {integrity: sha512-bmpJJm7Y7i9BBELlLuuM1J1Q6EQ6K5Ye4wcyOpOMXMcePYKSIYlpcrCm4l/O6ja4VJA5G2aMJiuZkZdnxlC3SA==} + '@vitest/mocker@2.1.9': + resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 + vite: ^5.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.1.1': - resolution: {integrity: sha512-dg0CIzNx+hMMYfNmSqJlLSXEmnNhMswcn3sXO7Tpldr0LiGmg3eXdLLhwkv2ZqgHb/d5xg5F7ezNFRA1fA13yA==} + '@vitest/pretty-format@2.1.9': + resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} - '@vitest/runner@3.1.1': - resolution: {integrity: sha512-X/d46qzJuEDO8ueyjtKfxffiXraPRfmYasoC4i5+mlLEJ10UvPb0XH5M9C3gWuxd7BAQhpK42cJgJtq53YnWVA==} + '@vitest/runner@2.1.9': + resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} - '@vitest/snapshot@3.1.1': - resolution: {integrity: sha512-bByMwaVWe/+1WDf9exFxWWgAixelSdiwo2p33tpqIlM14vW7PRV5ppayVXtfycqze4Qhtwag5sVhX400MLBOOw==} + '@vitest/snapshot@2.1.9': + resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} - '@vitest/spy@3.1.1': - resolution: {integrity: sha512-+EmrUOOXbKzLkTDwlsc/xrwOlPDXyVk3Z6P6K4oiCndxz7YLpp/0R0UsWVOKT0IXWjjBJuSMk6D27qipaupcvQ==} + '@vitest/spy@2.1.9': + resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} - '@vitest/utils@3.1.1': - resolution: {integrity: sha512-1XIjflyaU2k3HMArJ50bwSh3wKWPD6Q47wz/NUSmRV0zNywPc4w79ARjg/i/aNINHwA+mIALhUVqD9/aUvZNgg==} + '@vitest/utils@2.1.9': + resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} '@wagmi/cli@2.1.16': resolution: {integrity: sha512-uERiNCAwThM6Vwgyrimlf+X8tOF0EjDnir6NHqCoumTquJ1/nlKBvpe0CHD3aDx2RQCOWCqhkUIImtN9yk3Oag==} @@ -3546,71 +3896,301 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} - JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true + '@whatwg-node/disposablestack@0.0.6': + resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} + engines: {node: '>=18.0.0'} - abitype@1.0.6: - resolution: {integrity: sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A==} - peerDependencies: - typescript: '>=5.0.4' - zod: ^3 >=3.22.0 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true + '@whatwg-node/fetch@0.10.6': + resolution: {integrity: sha512-6uzhO2aQ757p3bSHcemA8C4pqEXuyBqyGAM7cYpO0c6/igRMV9As9XL0W12h5EPYMclgr7FgjmbVQBoWEdJ/yA==} + engines: {node: '>=18.0.0'} - abitype@1.0.7: - resolution: {integrity: sha512-ZfYYSktDQUwc2eduYu8C4wOs+RDPmnRYMh7zNfzeMtGGgb0U+6tLGjixUic6mXf5xKKCcgT5Qp6cv39tOARVFw==} - peerDependencies: - typescript: '>=5.0.4' - zod: ^3 >=3.22.0 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true + '@whatwg-node/node-fetch@0.7.18': + resolution: {integrity: sha512-IxKdVWfZYasGiyxBcsROxq6FmDQu3MNNiOYJ/yqLKhe+Qq27IIWsK7ItbjS2M9L5aM5JxjWkIS7JDh7wnsn+CQ==} + engines: {node: '>=18.0.0'} - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} + '@whatwg-node/promise-helpers@1.3.1': + resolution: {integrity: sha512-D+OwTEunoQhVHVToD80dPhfz9xgPLqJyEA3F5jCRM14A2u8tBBQVdZekqfqx6ZAfZ+POT4Hb0dn601UKMsvADw==} + engines: {node: '>=16.0.0'} - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + '@zag-js/accordion@1.8.2': + resolution: {integrity: sha512-JszESCOvftl3dG6lEPjZp2p3+0VN0fwMnW+1jhWwMEe5MZ0y0IrcXww2dxet1ln+w5ViRdOTeDR07idbDKYAYg==} - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@zag-js/anatomy@1.8.2': + resolution: {integrity: sha512-F88Q+Bo1KOFZPHLffOqiuemkgZJbtspQuyOJcWb0bL7Lc1pYC4DIpIj26bcXT8xICDNcwR877hI0Wko//ZgTVA==} - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} + '@zag-js/aria-hidden@1.8.2': + resolution: {integrity: sha512-/SV23qfCWMbGdsNZ2pgmVqOv6a4yd/2+FAIRy/6bjZ8axBzhm7NvfDhqjZciN4JuMch82uafeTBZ7pObk/fU1g==} - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true + '@zag-js/auto-resize@1.8.2': + resolution: {integrity: sha512-Z+94iR/vbPixiifjF+pmOa1UtuM5TTnJqM7D+Ol3WenRrm+Urp4JWAcyaf76NRVWK51KwMwWLljeA6J0H3V6gQ==} - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true + '@zag-js/avatar@1.8.2': + resolution: {integrity: sha512-PWhYVvXyOt+kdi2Vd6GfqGQQruh1TNylw6TzNbhPt3B6Fj6uNvQqfEsh6yNErfnCeaa4b/Q+48rM4b/t3DzM0g==} - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true + '@zag-js/carousel@1.8.2': + resolution: {integrity: sha512-ViPcVQFQfw8ry3i4m2HYixTfN5Km979TWtMnDKdDM3csXLOQJvfCIHtZ/08wWn1302zaDMQe72+p9jDqzqntMg==} - agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} - engines: {node: '>= 14'} + '@zag-js/checkbox@1.8.2': + resolution: {integrity: sha512-KWVKo2Cofs9bjKf9QN9d9UJ6jQFuKfTPT4smDIqhXo4MIFa5eOd6yxvwbgvLvBlvvr9I6Amm9T4e9XxFbyrHdA==} - agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} + '@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 + + abitype@1.0.6: + resolution: {integrity: sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + + abitype@1.0.7: + resolution: {integrity: sha512-ZfYYSktDQUwc2eduYu8C4wOs+RDPmnRYMh7zNfzeMtGGgb0U+6tLGjixUic6mXf5xKKCcgT5Qp6cv39tOARVFw==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -3618,6 +4198,10 @@ packages: anser@1.4.10: resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + ansi-escapes@7.0.0: resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} @@ -3729,6 +4313,10 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} + auto-bind@4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + autoprefixer@10.4.20: resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} engines: {node: ^10 || ^12 || >=14} @@ -3748,6 +4336,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: @@ -3773,18 +4365,23 @@ packages: peerDependencies: styled-components: '>= 2' + babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: + resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} + babel-plugin-transform-flow-enums@0.0.2: resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} + babel-preset-fbjs@3.4.0: + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - balanced-match@2.0.0: - resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} - base-x@3.0.11: resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} @@ -3817,9 +4414,6 @@ packages: bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - body-scroll-lock@4.0.0-beta.0: - resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} - boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -3918,6 +4512,9 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} @@ -3946,6 +4543,9 @@ packages: caniuse-lite@1.0.30001713: resolution: {integrity: sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==} + capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -3973,6 +4573,15 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + change-case-all@1.0.14: + resolution: {integrity: sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==} + + change-case-all@1.0.15: + resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} + + change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + change-case@5.4.4: resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} @@ -3988,6 +4597,9 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} @@ -4017,6 +4629,10 @@ packages: citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} @@ -4033,10 +4649,18 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + clipboardy@4.0.0: resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} engines: {node: '>=18'} @@ -4080,9 +4704,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - colorette@1.4.0: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} @@ -4114,6 +4735,10 @@ packages: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -4156,6 +4781,9 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} + constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + conventional-changelog-angular@7.0.0: resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} engines: {node: '>=16'} @@ -4169,6 +4797,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 +4824,19 @@ packages: resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} engines: {node: '>=4'} + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + cosmiconfig@9.0.0: resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} @@ -4220,6 +4864,10 @@ packages: cross-fetch@4.0.0: resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + cross-inspect@1.0.1: + resolution: {integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==} + engines: {node: '>=16.0.0'} + cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -4236,20 +4884,12 @@ packages: resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} engines: {node: '>=4'} - css-functions-list@3.2.2: - resolution: {integrity: sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==} - engines: {node: '>=12 || >=16'} - css-selector-parser@3.0.5: resolution: {integrity: sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g==} css-to-react-native@3.2.0: resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -4273,10 +4913,17 @@ packages: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + data-urls@5.0.0: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} + dataloader@2.2.3: + resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} + date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} @@ -4378,6 +5025,10 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + dependency-graph@0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -4392,6 +5043,10 @@ packages: detect-browser@5.3.0: resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} @@ -4434,8 +5089,8 @@ packages: dom-accessibility-api@0.6.3: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} - dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} @@ -4449,6 +5104,10 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + duplexify@4.1.3: resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} @@ -4691,6 +5350,10 @@ packages: resolution: {integrity: sha512-an2S5quJMiy5bnZKEf6AkfH/7r8CzHvhchU40gxN+OM6HPhe7Z9T1FUychcf2M9PpPOO0Hf7BAEfJkw2TDIBDw==} engines: {node: '>=12.0.0'} + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + eyes@0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} engines: {node: '> 0.1.90'} @@ -4723,10 +5386,6 @@ packages: resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==} hasBin: true - fastest-levenshtein@1.0.16: - resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} - engines: {node: '>= 4.9.1'} - fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -4736,6 +5395,12 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fbjs-css-vars@1.0.2: + resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + + fbjs@3.0.5: + resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + fdir@6.3.0: resolution: {integrity: sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==} peerDependencies: @@ -4744,9 +5409,13 @@ packages: picomatch: optional: true - file-entry-cache@9.1.0: - resolution: {integrity: sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==} - engines: {node: '>=18'} + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -4767,6 +5436,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'} @@ -4787,13 +5459,6 @@ packages: resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} engines: {node: '>=18'} - flat-cache@5.0.0: - resolution: {integrity: sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==} - engines: {node: '>=18'} - - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - flow-enums-runtime@0.0.6: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} @@ -4801,9 +5466,6 @@ packages: resolution: {integrity: sha512-dON6h+yO7FGa/FO5NQCZuZHN0o3I23Ev6VYOJf9d8LpdrArHPt39wE++LLmueNV/hNY5hgWGIIrgnrDkRcXkPg==} engines: {node: '>=0.4.0'} - focus-trap@7.5.4: - resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} - for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -4819,6 +5481,10 @@ packages: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} @@ -4870,9 +5536,6 @@ packages: resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} engines: {node: '>=18'} - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -4923,14 +5586,6 @@ packages: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} - global-modules@2.0.0: - resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} - engines: {node: '>=6'} - - global-prefix@3.0.0: - resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} - engines: {node: '>=6'} - globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -4943,8 +5598,8 @@ packages: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - 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==} @@ -4957,6 +5612,58 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphql-config@5.1.4: + resolution: {integrity: sha512-ObdBeL3ycddHrNbFvhGZ12pK8jUzWvvyN2A+6ij3XrtLH/KrkXt+BboEAEgXmeUrTcD5RjJnz8IZu3Cgc/oX/w==} + engines: {node: '>= 16.0.0'} + peerDependencies: + cosmiconfig-toml-loader: ^1.0.0 + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + cosmiconfig-toml-loader: + optional: true + + graphql-request@6.1.0: + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + peerDependencies: + graphql: 14 - 16 + + graphql-request@7.1.2: + resolution: {integrity: sha512-+XE3iuC55C2di5ZUrB4pjgwe+nIQBuXVIK9J98wrVwojzDW3GMdSBZfxUk8l4j9TieIpjpggclxhNEU9ebGF8w==} + peerDependencies: + graphql: 14 - 16 + + graphql-sock@1.0.1: + resolution: {integrity: sha512-gSA0CXdNMvNlpEnH2GY1//SUY7laDsAn51sDm4yh6TTH5UkfbNINydyUAoMHHkAaCaOLNXELQmu3GVcSOw4twg==} + hasBin: true + peerDependencies: + graphql: 15.x || 16.x || 17.x + + graphql-tag@2.12.6: + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + graphql-ws@6.0.4: + resolution: {integrity: sha512-8b4OZtNOvv8+NZva8HXamrc0y1jluYC0+13gdh7198FKjVzXyTvVc95DCwGzaKEfn3YuWZxUqjJlHe3qKM/F2g==} + engines: {node: '>=20'} + peerDependencies: + '@fastify/websocket': ^10 || ^11 + graphql: ^15.10.1 || ^16 + uWebSockets.js: ^20 + ws: ^8 + peerDependenciesMeta: + '@fastify/websocket': + optional: true + uWebSockets.js: + optional: true + ws: + optional: true + + graphql@16.10.0: + resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + h3@1.12.0: resolution: {integrity: sha512-Zi/CcNeWBXDrFNlV0hUBJQR9F7a96RjMeAZweW/ZWkR9fuXrMcvKnSA63f/zZ9l0GgQOZDVHGvXivNN9PWOwhA==} @@ -5029,6 +5736,9 @@ packages: hastscript@8.0.0: resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + hermes-estree@0.22.0: resolution: {integrity: sha512-FLBt5X9OfA8BERUdc6aZS36Xz3rRuB0Y/mfocSADWEJfomc1xfene33GdyAmtTkKTBXTN/EgAy+rjTKkkZJHlw==} @@ -5061,10 +5771,6 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - html-tags@3.3.1: - resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} - engines: {node: '>=8'} - html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} @@ -5106,6 +5812,10 @@ packages: i18next@23.11.5: resolution: {integrity: sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA==} + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -5125,6 +5835,10 @@ packages: engines: {node: '>=16.x'} hasBin: true + immutable@3.7.6: + resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} + engines: {node: '>=0.8.0'} + import-fresh@2.0.0: resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} engines: {node: '>=4'} @@ -5133,6 +5847,10 @@ packages: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} + import-from@4.0.0: + resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} + engines: {node: '>=12.2'} + import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} @@ -5151,9 +5869,6 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - ini@4.1.1: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5164,12 +5879,20 @@ packages: inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + is-absolute@1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} @@ -5264,6 +5987,9 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} + is-lower-case@2.0.2: + resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -5280,16 +6006,16 @@ packages: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} - is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} is-reference@3.0.2: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + is-relative@1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -5306,6 +6032,10 @@ packages: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} + is-unc-path@1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} @@ -5314,6 +6044,13 @@ packages: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} + is-upper-case@2.0.2: + resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + is-wsl@1.1.0: resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} engines: {node: '>=4'} @@ -5345,6 +6082,11 @@ packages: peerDependencies: ws: '*' + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + isows@1.0.6: resolution: {integrity: sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==} peerDependencies: @@ -5409,9 +6151,16 @@ packages: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + jose@5.10.0: + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -5459,9 +6208,6 @@ packages: engines: {node: '>=6'} hasBin: true - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} @@ -5481,6 +6227,10 @@ packages: json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json-to-pretty-yaml@1.2.2: + resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} + engines: {node: '>= 0.2.0'} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -5500,9 +6250,6 @@ packages: resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} engines: {node: '>=10.0.0'} - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - keyvaluestorage-interface@1.0.0: resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} @@ -5514,9 +6261,6 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - known-css-properties@0.34.0: - resolution: {integrity: sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==} - leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -5547,7 +6291,16 @@ packages: resolution: {integrity: sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g==} hasBin: true - listr2@8.2.4: + listr2@4.0.5: + resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} + engines: {node: '>=12'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + + listr2@8.2.4: resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} engines: {node: '>=18.0.0'} @@ -5605,15 +6358,15 @@ packages: lodash.snakecase@4.1.1: resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} - lodash.truncate@4.4.2: - resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} - lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} @@ -5631,6 +6384,10 @@ packages: resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} engines: {node: '>=12'} + log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + log-update@6.1.0: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} @@ -5646,12 +6403,15 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.1: - resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} - loupe@3.1.3: resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + lower-case-first@2.0.2: + resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -5685,6 +6445,10 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} @@ -5702,9 +6466,6 @@ packages: marky@1.2.5: resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} - mathml-tag-names@2.1.3: - resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} - mdast-util-directive@3.0.0: resolution: {integrity: sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==} @@ -5759,9 +6520,6 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} @@ -5775,10 +6533,6 @@ packages: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} - meow@13.2.0: - resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} - engines: {node: '>=18'} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -5786,6 +6540,15 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + meros@1.3.0: + resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + mersenne-twister@1.1.0: resolution: {integrity: sha512-mUYWsMKNrm4lfygPkL3OfGzOPTR2DBlTkBNHM//F6hGp8cLThY897crAlk3/Jo17LEOOjQUrNAx6DvgO77QJkA==} @@ -6014,6 +6777,10 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -6054,10 +6821,6 @@ packages: modern-ahocorasick@1.0.1: resolution: {integrity: sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==} - modern-normalize@3.0.1: - resolution: {integrity: sha512-VqlMdYi59Uch6fnUPxnpijWUQe+TW6zeWCvyr6Mb7JibheHzSuAAoJi2c71ZwIaWKpECpGpYHoaaBp6rBRr+/g==} - engines: {node: '>=6'} - motion@10.16.2: resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} @@ -6074,6 +6837,9 @@ packages: multiformats@9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -6098,12 +6864,15 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - next-themes@0.4.4: - resolution: {integrity: sha512-LDQ2qIOJF0VnuVrrMSMLrWGjRMkq+0mpgl6e0juCLqdJ+oo8Q84JRWT6Wh11VDQKkMMe+dVzDKLWs5n87T+PkQ==} + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + nocache@3.0.4: resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==} engines: {node: '>=12.0.0'} @@ -6124,6 +6893,10 @@ packages: resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} engines: {node: '>= 0.10.5'} + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + node-fetch-native@1.6.4: resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} @@ -6136,6 +6909,10 @@ packages: encoding: optional: true + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -6157,6 +6934,10 @@ packages: resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} engines: {node: '>=0.12.0'} + normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -6266,6 +7047,10 @@ packages: resolution: {integrity: sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==} engines: {node: '>=16'} + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + outdent@0.8.0: resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} @@ -6309,6 +7094,10 @@ packages: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -6316,6 +7105,9 @@ packages: package-json-from-dist@1.0.0: resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -6323,6 +7115,10 @@ packages: parse-entities@4.0.1: resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + parse-filepath@1.0.2: + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} + parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} @@ -6338,6 +7134,12 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} @@ -6365,6 +7167,14 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-root-regex@0.1.2: + resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} + engines: {node: '>=0.10.0'} + + path-root@0.1.1: + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} + path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -6376,13 +7186,13 @@ 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'} + perfect-freehand@1.2.2: + resolution: {integrity: sha512-eh31l019WICQ03pkF3FSzHxB8n07ItqIQ++G5UV8JX0zVOXzgTGCqnRR0jJ2h9U8/2uW4W4mtGJELt9kEV0CFQ==} + periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} @@ -6491,32 +7301,13 @@ packages: peerDependencies: postcss: ^8.2.14 - postcss-resolve-nested-selector@0.1.6: - resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==} - - postcss-safe-parser@7.0.0: - resolution: {integrity: sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==} - engines: {node: '>=18.0'} - peerDependencies: - postcss: ^8.4.31 - postcss-selector-parser@6.1.2: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} - postcss-styled-syntax@0.6.4: - resolution: {integrity: sha512-uWiLn+9rKgIghUYmTHvXMR6MnyPULMe9Gv3bV537Fg4FH6CA6cn21WMjKss2Qb98LUhT847tKfnRGG3FhSOgUQ==} - engines: {node: '>=14.17'} - peerDependencies: - postcss: ^8.4.21 - postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.4.47: resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} @@ -6559,6 +7350,9 @@ packages: process-warning@1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} @@ -6578,6 +7372,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==} @@ -6650,12 +7450,10 @@ packages: peerDependencies: react: '>=16.3.0' - react-hot-toast@2.4.1: - resolution: {integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==} - engines: {node: '>=10'} + react-icons@5.5.0: + resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} peerDependencies: - react: '>=16' - react-dom: '>=16' + react: '*' react-intersection-observer@9.13.1: resolution: {integrity: sha512-tSzDaTy0qwNPLJHg8XZhlyHTgGW6drFKTtvjdL+p6um12rcnp8Z5XstE+QNBJ7c64n5o0Lj4ilUleA41bmDoMw==} @@ -6756,12 +7554,6 @@ packages: '@types/react': optional: true - react-transition-group@4.4.5: - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} - peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' - react-transition-state@1.1.5: resolution: {integrity: sha512-ITY2mZqc2dWG2eitJkYNdcSFW8aKeOlkL2A/vowRrLL8GH3J6Re/SpD/BLvQzrVOTqjsP0b5S9N10vgNNzwMUQ==} peerDependencies: @@ -6855,6 +7647,9 @@ packages: rehype-slug@6.0.0: resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + relay-runtime@12.0.0: + resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} + remark-directive@3.0.0: resolution: {integrity: sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==} @@ -6879,6 +7674,15 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + remedial@1.0.8: + resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} + + remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + + remove-trailing-spaces@1.0.9: + resolution: {integrity: sha512-xzG7w5IRijvIkHIjDk65URsJJ7k4J95wmcArY5PRcmjldIOl7oTvG8+X2Ag690R7SfwiOcHrWZKVc1Pp5WIOzA==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -6975,9 +7779,16 @@ packages: rrweb-cssom@0.7.1: resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -7001,6 +7812,9 @@ packages: scheduler@0.24.0-canary-efb381bbf-20230505: resolution: {integrity: sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==} + scuid@1.1.0: + resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} + secp256k1@5.0.0: resolution: {integrity: sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==} engines: {node: '>=14.0.0'} @@ -7031,6 +7845,9 @@ packages: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} + sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + serialize-error@2.1.0: resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==} engines: {node: '>=0.10.0'} @@ -7049,6 +7866,9 @@ packages: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -7091,6 +7911,9 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + signedsource@1.0.0: + resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -7106,6 +7929,10 @@ packages: resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} engines: {node: '>=6'} + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} @@ -7118,6 +7945,9 @@ packages: resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + socket.io-client@4.8.0: resolution: {integrity: sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==} engines: {node: '>=10.0.0'} @@ -7159,6 +7989,9 @@ packages: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} + sponge-case@1.0.1: + resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -7202,6 +8035,9 @@ packages: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} + string-env-interpolation@1.0.1: + resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -7271,32 +8107,8 @@ packages: react-dom: '>= 16.8.0' react-is: '>= 16.8.0' - styled-components@6.1.13: - resolution: {integrity: sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==} - engines: {node: '>= 16'} - peerDependencies: - react: '>= 16.8.0' - react-dom: '>= 16.8.0' - - stylelint-config-recommended@14.0.1: - resolution: {integrity: sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==} - engines: {node: '>=18.12.0'} - peerDependencies: - stylelint: ^16.1.0 - - stylelint-config-standard@36.0.1: - resolution: {integrity: sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==} - engines: {node: '>=18.12.0'} - peerDependencies: - stylelint: ^16.1.0 - - stylelint@16.9.0: - resolution: {integrity: sha512-31Nm3WjxGOBGpQqF43o3wO9L5AC36TPIe6030Lnm13H3vDMTcS21DrLh69bMX+DBilKqMMVLian4iG6ybBoNRQ==} - engines: {node: '>=18.12.0'} - hasBin: true - - stylis@4.3.2: - resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} @@ -7327,20 +8139,20 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - supports-hyperlinks@3.1.0: - resolution: {integrity: sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==} - engines: {node: '>=14.18'} - supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svg-tags@1.0.0: - resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + swap-case@2.0.2: + resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + sync-fetch@0.6.0-2: + resolution: {integrity: sha512-c7AfkZ9udatCuAy9RSfiGPpeOKKUAUK5e1cXadLOGUjasdxqYqAK0jTNkM/FSEyJ3a5Ra27j/tw/PS0qLmaF/A==} + engines: {node: '>=18'} + system-architecture@0.1.0: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} @@ -7348,10 +8160,6 @@ packages: tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - table@6.8.2: - resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} - engines: {node: '>=10.0.0'} - tailwindcss@3.4.13: resolution: {integrity: sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==} engines: {node: '>=14.0.0'} @@ -7396,6 +8204,10 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + timeout-signal@2.0.0: + resolution: {integrity: sha512-YBGpG4bWsHoPvofT6y/5iqulfXIiIErl5B0LdtHT1mGXDFTAhhRrbUpTvBgYbovr+3cKblya2WAOcpoy90XguA==} + engines: {node: '>=16'} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -7415,14 +8227,17 @@ packages: resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} engines: {node: ^18.0.0 || >=20.0.0} - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} engines: {node: '>=14.0.0'} tinyspy@3.0.2: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} + title-case@3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + tldts-core@6.1.47: resolution: {integrity: sha512-6SWyFMnlst1fEt7GQVAAu16EGgFK0cLouH/2Mk6Ftlwhv3Ol40L0dlpGMcnnNiiOMyD2EV/aF3S+U2nKvvLvrA==} @@ -7430,6 +8245,10 @@ packages: resolution: {integrity: sha512-R/K2tZ5MiY+mVrnSkNJkwqYT2vUv1lcT6wJvd2emGaMJ7PHUGRY4e3tUsdFCXgqxi2QgbHjL3yJgXCo40v9Hxw==} hasBin: true + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -7468,6 +8287,9 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + ts-log@2.2.7: + resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==} + ts-node@10.9.2: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true @@ -7482,15 +8304,25 @@ 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.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + 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==} @@ -7516,6 +8348,10 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + type-fest@0.7.1: resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} engines: {node: '>=8'} @@ -7565,6 +8401,10 @@ packages: uint8arrays@3.1.0: resolution: {integrity: sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==} + unc-path-regex@0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -7629,6 +8469,10 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -7703,9 +8547,18 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + + upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + uqr@0.1.2: resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} + urlpattern-polyfill@10.0.0: + resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + use-callback-ref@1.3.2: resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} engines: {node: '>=10'} @@ -7808,11 +8661,22 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite-node@3.1.1: - resolution: {integrity: sha512-V+IxPAE2FvXpTCHXyNem0M+gWm6J7eRyWPR6vYoG/Gl+IscNOjXzztUhimQgTxaAoUoj40Qqimaa0NLIOOAH4w==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vite-node@2.1.9: + resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + vite-plugin-sitemap@0.7.1: + resolution: {integrity: sha512-4NRTkiWytLuAmcikckrLcLl9iYA20+5v6l8XshcOrzxH1WR8H0O3S6sTQYfjMrE8su/LG6Y0cTodvOdcOIxaLw==} + + 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} @@ -7884,23 +8748,20 @@ packages: yaml: optional: true - vitest@3.1.1: - resolution: {integrity: sha512-kiZc/IYmKICeBAZr9DQ5rT7/6bD9G7uqQEki4fxazi1jdVl2mWGzedtBs5s6llz59yQhVb7FFY2MbHzHCnT79Q==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vitest@2.1.9: + resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@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 + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.1.9 + '@vitest/ui': 2.1.9 happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/debug': - optional: true '@types/node': optional: true '@vitest/browser': @@ -7943,6 +8804,10 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + webauthn-p256@0.0.10: resolution: {integrity: sha512-EeYD+gmIT80YkSIDb2iWq0lq2zbHo1CxHlQTeJ+KkCILWpVy3zASH3ByD4bopzfk0uCwXxLqKGLqp2W4O28VFA==} @@ -7984,10 +8849,6 @@ packages: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -8020,10 +8881,6 @@ packages: write-file-atomic@2.4.3: resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} - write-file-atomic@5.0.1: - resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - ws@6.2.3: resolution: {integrity: sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==} peerDependencies: @@ -8108,6 +8965,13 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + + 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 +9049,105 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 + '@ardatan/relay-compiler@12.0.0(graphql@16.10.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/generator': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/runtime': 7.27.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 + babel-preset-fbjs: 3.4.0(@babel/core@7.26.0) + chalk: 4.1.2 + fb-watchman: 2.0.2 + fbjs: 3.0.5 + glob: 7.2.3 + graphql: 16.10.0 + immutable: 3.7.6 + invariant: 2.2.4 + nullthrows: 1.1.1 + relay-runtime: 12.0.0 + signedsource: 1.0.0 + yargs: 15.4.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@ardatan/relay-compiler@12.0.3(graphql@16.10.0)': + dependencies: + '@babel/generator': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/runtime': 7.27.0 + chalk: 4.1.2 + fb-watchman: 2.0.2 + graphql: 16.10.0 + immutable: 3.7.6 + invariant: 2.2.4 + nullthrows: 1.1.1 + relay-runtime: 12.0.0 + signedsource: 1.0.0 + transitivePeerDependencies: + - encoding + + '@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 +9195,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) @@ -8242,6 +9205,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.26.10': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helpers': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 + convert-source-map: 2.0.0 + debug: 4.4.0 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.25.6': dependencies: '@babel/types': 7.25.6 @@ -8297,42 +9280,42 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.25.2)': + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.25.2) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/traverse': 7.27.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.0)': + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 '@babel/traverse': 7.27.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.25.2)': + '@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.25.2)': + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.27.0 '@babel/helper-plugin-utils': 7.26.5 debug: 4.4.0 @@ -8355,9 +9338,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 @@ -8372,21 +9355,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.25.2)': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.25.9 + '@babel/core': 7.26.0 + '@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)': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 + '@babel/core': 7.26.10 + '@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 @@ -8400,27 +9383,27 @@ snapshots: '@babel/helper-plugin-utils@7.26.5': {} - '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.25.2)': + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.26.5(@babel/core@7.25.2)': + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@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.27.0 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.0)': + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 '@babel/traverse': 7.27.0 @@ -8471,6 +9454,11 @@ snapshots: '@babel/template': 7.25.9 '@babel/types': 7.26.3 + '@babel/helpers@7.27.0': + dependencies: + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + '@babel/highlight@7.24.7': dependencies: '@babel/helper-validator-identifier': 7.24.7 @@ -8490,36 +9478,36 @@ snapshots: dependencies: '@babel/types': 7.27.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/traverse': 7.27.0 transitivePeerDependencies: @@ -8533,113 +9521,130 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-export-default-from@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.10 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color - '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.26.0)': + '@babel/plugin-proposal-export-default-from@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) - '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.26.0)': + '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.10) + + '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.26.0)': dependencies: + '@babel/compat-data': 7.26.8 '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + + '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.10) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-export-default-from@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-syntax-export-default-from@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.25.2)': + '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0)': + '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.25.2)': + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.25.2)': + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': @@ -8647,24 +9652,24 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': @@ -8672,14 +9677,19 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.25.2)': @@ -8687,131 +9697,125 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.25.2)': + '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.2) + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.25.9 + '@babel/core': 7.26.0 + '@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) + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.25.2)': + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.25.2)': + '@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.2) + '@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 - '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.25.2)': + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.2) + '@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 - '@babel/plugin-transform-classes@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@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/helper-replace-supers': 7.26.5(@babel/core@7.26.0) '@babel/traverse': 7.27.0 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/template': 7.27.0 - '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.25.2)': + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-flow-strip-types@7.26.5(@babel/core@7.25.2)': + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.25.2) '@babel/plugin-transform-flow-strip-types@7.26.5(@babel/core@7.26.0)': dependencies: @@ -8819,164 +9823,170 @@ snapshots: '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.25.2)': + '@babel/plugin-transform-flow-strip-types@7.26.5(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.10) + + '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.27.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.25.2)': + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.0)': + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-identifier': 7.25.9 '@babel/traverse': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.25.2)': + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@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) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.25.2) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.2) + '@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 - '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.2) + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2)': @@ -8984,9 +9994,9 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2)': @@ -8994,235 +10004,235 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@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/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) '@babel/types': 7.27.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.25.2)': + '@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 regenerator-transform: 0.15.2 - '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-runtime@7.26.10(@babel/core@7.25.2)': + '@babel/plugin-transform-runtime@7.26.10(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.25.9 + '@babel/core': 7.26.0 + '@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) - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.0) semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.25.2)': + '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.25.2)': + '@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.25.2)': + '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.25.2) + '@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.25.2) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.26.0)': + '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.0) + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) '@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) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.25.2)': + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.26.5 - '@babel/preset-env@7.25.4(@babel/core@7.25.2)': + '@babel/preset-env@7.25.4(@babel/core@7.26.0)': dependencies: '@babel/compat-data': 7.26.8 - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@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) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.25.2) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.25.2) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) - '@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-scoped-functions': 7.26.5(@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) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.25.2) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.25.2) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.25.2) - '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.25.2) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.2) - '@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.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.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.13(@babel/core@7.25.2) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.25.2) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.0) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.26.0) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.0) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.0) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.0) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.26.0) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.0) + '@babel/plugin-transform-typeof-symbol': 7.27.0(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.0) core-js-compat: 3.41.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-flow@7.25.9(@babel/core@7.26.0)': + '@babel/preset-flow@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.26.0) + '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.26.10) - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.26.5 '@babel/types': 7.27.0 esutils: 2.0.3 - '@babel/preset-typescript@7.27.0(@babel/core@7.26.0)': + '@babel/preset-typescript@7.27.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@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.27.0(@babel/core@7.26.0) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10) + '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.10) transitivePeerDependencies: - supports-color - '@babel/register@7.25.9(@babel/core@7.26.0)': + '@babel/register@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -9267,7 +10277,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 @@ -9307,7 +10317,7 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@bcoe/v8-coverage@1.0.2': {} + '@bcoe/v8-coverage@0.2.3': {} '@biomejs/biome@1.9.2': optionalDependencies: @@ -9344,11 +10354,43 @@ snapshots: '@biomejs/cli-win32-x64@1.9.2': optional: true - '@bootnodedev/db-ui-toolkit@1.0.0-beta.2': + '@bootnodedev/db-subgraph@0.1.2(@parcel/watcher@2.4.1)(@tanstack/react-query@5.62.0(react@18.3.1))(@types/node@22.6.1)(bufferutil@4.0.9)(graphql-sock@1.0.1(graphql@16.10.0))(graphql-tag@2.12.6(graphql@16.10.0))(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))': + dependencies: + '@graphql-codegen/cli': 5.0.5(@parcel/watcher@2.4.1)(@types/node@22.6.1)(bufferutil@4.0.9)(graphql-sock@1.0.1(graphql@16.10.0))(graphql@16.10.0)(typescript@5.6.2)(utf-8-validate@5.0.10) + '@graphql-codegen/typescript-graphql-request': 6.2.0(graphql-request@6.1.0(graphql@16.10.0))(graphql-tag@2.12.6(graphql@16.10.0))(graphql@16.10.0) + '@tanstack/react-query': 5.62.0(react@18.3.1) + graphql: 16.10.0 + graphql-request: 6.1.0(graphql@16.10.0) + react: 18.3.1 + viem: 2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8) + transitivePeerDependencies: + - '@fastify/websocket' + - '@parcel/watcher' + - '@types/node' + - bufferutil + - cosmiconfig-toml-loader + - encoding + - enquirer + - graphql-sock + - graphql-tag + - supports-color + - typescript + - uWebSockets.js + - utf-8-validate + + '@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) - styled-components: 6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@clack/core@0.3.4': dependencies: @@ -9498,22 +10540,29 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1)': - dependencies: - '@csstools/css-tokenizer': 3.0.1 - - '@csstools/css-tokenizer@3.0.1': {} - - '@csstools/media-query-list-parser@3.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1)': + '@emotion/babel-plugin@11.13.5': dependencies: - '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) - '@csstools/css-tokenizer': 3.0.1 + '@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 - '@csstools/selector-specificity@4.0.0(postcss-selector-parser@6.1.2)': + '@emotion/cache@11.14.0': dependencies: - postcss-selector-parser: 6.1.2 - - '@dual-bundle/import-meta-resolve@4.1.0': {} + '@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': {} @@ -9522,10 +10571,6 @@ snapshots: '@emotion/memoize': 0.7.4 optional: true - '@emotion/is-prop-valid@1.2.2': - dependencies: - '@emotion/memoize': 0.8.1 - '@emotion/is-prop-valid@1.3.1': dependencies: '@emotion/memoize': 0.9.0 @@ -9533,15 +10578,64 @@ snapshots: '@emotion/memoize@0.7.4': optional: true - '@emotion/memoize@0.8.1': {} - '@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': {} + + '@envelop/core@5.2.3': + dependencies: + '@envelop/instrumentation': 1.0.0 + '@envelop/types': 5.2.1 + '@whatwg-node/promise-helpers': 1.3.1 + tslib: 2.8.1 + + '@envelop/instrumentation@1.0.0': + dependencies: + '@whatwg-node/promise-helpers': 1.3.1 + tslib: 2.8.1 + + '@envelop/types@5.2.1': + dependencies: + '@whatwg-node/promise-helpers': 1.3.1 + tslib: 2.8.1 '@esbuild/aix-ppc64@0.19.12': optional: true @@ -9828,58 +10922,577 @@ snapshots: '@esbuild/win32-x64@0.25.2': optional: true - '@ethereumjs/common@3.2.0': + '@ethereumjs/common@3.2.0': + dependencies: + '@ethereumjs/util': 8.1.0 + crc-32: 1.2.2 + + '@ethereumjs/rlp@4.0.1': {} + + '@ethereumjs/tx@4.2.0': + dependencies: + '@ethereumjs/common': 3.2.0 + '@ethereumjs/rlp': 4.0.1 + '@ethereumjs/util': 8.1.0 + ethereum-cryptography: 2.2.1 + + '@ethereumjs/util@8.1.0': + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.2.1 + micro-ftch: 0.3.1 + + '@fastify/busboy@3.1.1': {} + + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.11': + dependencies: + '@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 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@floating-ui/react@0.26.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/utils': 0.2.8 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tabbable: 6.2.0 + + '@floating-ui/utils@0.2.8': {} + + '@floating-ui/utils@0.2.9': {} + + '@graphql-codegen/add@5.0.3(graphql@16.10.0)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.6.2 + + '@graphql-codegen/cli@5.0.5(@parcel/watcher@2.4.1)(@types/node@22.6.1)(bufferutil@4.0.9)(graphql-sock@1.0.1(graphql@16.10.0))(graphql@16.10.0)(typescript@5.6.2)(utf-8-validate@5.0.10)': + dependencies: + '@babel/generator': 7.27.0 + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + '@graphql-codegen/client-preset': 4.8.0(graphql-sock@1.0.1(graphql@16.10.0))(graphql@16.10.0) + '@graphql-codegen/core': 4.0.2(graphql@16.10.0) + '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) + '@graphql-tools/apollo-engine-loader': 8.0.20(graphql@16.10.0) + '@graphql-tools/code-file-loader': 8.1.20(graphql@16.10.0) + '@graphql-tools/git-loader': 8.0.24(graphql@16.10.0) + '@graphql-tools/github-loader': 8.0.20(@types/node@22.6.1)(graphql@16.10.0) + '@graphql-tools/graphql-file-loader': 8.0.19(graphql@16.10.0) + '@graphql-tools/json-file-loader': 8.0.18(graphql@16.10.0) + '@graphql-tools/load': 8.1.0(graphql@16.10.0) + '@graphql-tools/prisma-loader': 8.0.17(@types/node@22.6.1)(bufferutil@4.0.9)(graphql@16.10.0)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.31(@types/node@22.6.1)(bufferutil@4.0.9)(graphql@16.10.0)(utf-8-validate@5.0.10) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@whatwg-node/fetch': 0.10.6 + chalk: 4.1.2 + cosmiconfig: 8.3.6(typescript@5.6.2) + debounce: 1.2.1 + detect-indent: 6.1.0 + graphql: 16.10.0 + graphql-config: 5.1.4(@types/node@22.6.1)(bufferutil@4.0.9)(graphql@16.10.0)(typescript@5.6.2)(utf-8-validate@5.0.10) + inquirer: 8.2.6 + is-glob: 4.0.3 + jiti: 1.21.6 + json-to-pretty-yaml: 1.2.2 + listr2: 4.0.5 + log-symbols: 4.1.0 + micromatch: 4.0.8 + shell-quote: 1.8.2 + string-env-interpolation: 1.0.1 + ts-log: 2.2.7 + tslib: 2.8.1 + yaml: 2.7.1 + yargs: 17.7.2 + optionalDependencies: + '@parcel/watcher': 2.4.1 + transitivePeerDependencies: + - '@fastify/websocket' + - '@types/node' + - bufferutil + - cosmiconfig-toml-loader + - encoding + - enquirer + - graphql-sock + - supports-color + - typescript + - uWebSockets.js + - utf-8-validate + + '@graphql-codegen/client-preset@4.8.0(graphql-sock@1.0.1(graphql@16.10.0))(graphql@16.10.0)': + dependencies: + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template': 7.27.0 + '@graphql-codegen/add': 5.0.3(graphql@16.10.0) + '@graphql-codegen/gql-tag-operations': 4.0.17(graphql@16.10.0) + '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) + '@graphql-codegen/typed-document-node': 5.1.1(graphql@16.10.0) + '@graphql-codegen/typescript': 4.1.6(graphql@16.10.0) + '@graphql-codegen/typescript-operations': 4.6.0(graphql-sock@1.0.1(graphql@16.10.0))(graphql@16.10.0) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.10.0) + '@graphql-tools/documents': 1.0.1(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) + graphql: 16.10.0 + graphql-sock: 1.0.1(graphql@16.10.0) + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + + '@graphql-codegen/core@4.0.2(graphql@16.10.0)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) + '@graphql-tools/schema': 10.0.23(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.6.2 + + '@graphql-codegen/gql-tag-operations@4.0.17(graphql@16.10.0)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + auto-bind: 4.0.0 + graphql: 16.10.0 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + + '@graphql-codegen/plugin-helpers@2.7.2(graphql@16.10.0)': + dependencies: + '@graphql-tools/utils': 8.13.1(graphql@16.10.0) + change-case-all: 1.0.14 + common-tags: 1.8.2 + graphql: 16.10.0 + import-from: 4.0.0 + lodash: 4.17.21 + tslib: 2.4.1 + + '@graphql-codegen/plugin-helpers@3.1.2(graphql@16.10.0)': + dependencies: + '@graphql-tools/utils': 9.2.1(graphql@16.10.0) + change-case-all: 1.0.15 + common-tags: 1.8.2 + graphql: 16.10.0 + import-from: 4.0.0 + lodash: 4.17.21 + tslib: 2.4.1 + + '@graphql-codegen/plugin-helpers@5.1.0(graphql@16.10.0)': + dependencies: + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + change-case-all: 1.0.15 + common-tags: 1.8.2 + graphql: 16.10.0 + import-from: 4.0.0 + lodash: 4.17.21 + tslib: 2.6.2 + + '@graphql-codegen/schema-ast@4.1.0(graphql@16.10.0)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.6.2 + + '@graphql-codegen/typed-document-node@5.1.1(graphql@16.10.0)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.10.0) + auto-bind: 4.0.0 + change-case-all: 1.0.15 + graphql: 16.10.0 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + + '@graphql-codegen/typescript-graphql-request@6.2.0(graphql-request@6.1.0(graphql@16.10.0))(graphql-tag@2.12.6(graphql@16.10.0))(graphql@16.10.0)': + dependencies: + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.10.0) + '@graphql-codegen/visitor-plugin-common': 2.13.1(graphql@16.10.0) + auto-bind: 4.0.0 + graphql: 16.10.0 + graphql-request: 6.1.0(graphql@16.10.0) + graphql-tag: 2.12.6(graphql@16.10.0) + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + - supports-color + + '@graphql-codegen/typescript-operations@4.6.0(graphql-sock@1.0.1(graphql@16.10.0))(graphql@16.10.0)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) + '@graphql-codegen/typescript': 4.1.6(graphql@16.10.0) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.10.0) + auto-bind: 4.0.0 + graphql: 16.10.0 + graphql-sock: 1.0.1(graphql@16.10.0) + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + + '@graphql-codegen/typescript@4.1.6(graphql@16.10.0)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) + '@graphql-codegen/schema-ast': 4.1.0(graphql@16.10.0) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.10.0) + auto-bind: 4.0.0 + graphql: 16.10.0 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + + '@graphql-codegen/visitor-plugin-common@2.13.1(graphql@16.10.0)': + dependencies: + '@graphql-codegen/plugin-helpers': 2.7.2(graphql@16.10.0) + '@graphql-tools/optimize': 1.4.0(graphql@16.10.0) + '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.10.0) + '@graphql-tools/utils': 8.13.1(graphql@16.10.0) + auto-bind: 4.0.0 + change-case-all: 1.0.14 + dependency-graph: 0.11.0 + graphql: 16.10.0 + graphql-tag: 2.12.6(graphql@16.10.0) + parse-filepath: 1.0.2 + tslib: 2.4.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@graphql-codegen/visitor-plugin-common@5.8.0(graphql@16.10.0)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.1.0(graphql@16.10.0) + '@graphql-tools/optimize': 2.0.0(graphql@16.10.0) + '@graphql-tools/relay-operation-optimizer': 7.0.19(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + auto-bind: 4.0.0 + change-case-all: 1.0.15 + dependency-graph: 0.11.0 + graphql: 16.10.0 + graphql-tag: 2.12.6(graphql@16.10.0) + parse-filepath: 1.0.2 + tslib: 2.6.2 + transitivePeerDependencies: + - encoding + + '@graphql-hive/signal@1.0.0': {} + + '@graphql-tools/apollo-engine-loader@8.0.20(graphql@16.10.0)': + dependencies: + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@whatwg-node/fetch': 0.10.6 + graphql: 16.10.0 + sync-fetch: 0.6.0-2 + tslib: 2.8.1 + + '@graphql-tools/batch-execute@9.0.15(graphql@16.10.0)': + dependencies: + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@whatwg-node/promise-helpers': 1.3.1 + dataloader: 2.2.3 + graphql: 16.10.0 + tslib: 2.8.1 + + '@graphql-tools/code-file-loader@8.1.20(graphql@16.10.0)': + dependencies: + '@graphql-tools/graphql-tag-pluck': 8.3.19(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + globby: 11.1.0 + graphql: 16.10.0 + tslib: 2.8.1 + unixify: 1.0.0 + transitivePeerDependencies: + - supports-color + + '@graphql-tools/delegate@10.2.17(graphql@16.10.0)': + dependencies: + '@graphql-tools/batch-execute': 9.0.15(graphql@16.10.0) + '@graphql-tools/executor': 1.4.7(graphql@16.10.0) + '@graphql-tools/schema': 10.0.23(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/promise-helpers': 1.3.1 + dataloader: 2.2.3 + dset: 3.1.4 + graphql: 16.10.0 + tslib: 2.8.1 + + '@graphql-tools/documents@1.0.1(graphql@16.10.0)': + dependencies: + graphql: 16.10.0 + lodash.sortby: 4.7.0 + tslib: 2.8.1 + + '@graphql-tools/executor-common@0.0.4(graphql@16.10.0)': + dependencies: + '@envelop/core': 5.2.3 + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + graphql: 16.10.0 + + '@graphql-tools/executor-graphql-ws@2.0.5(bufferutil@4.0.9)(graphql@16.10.0)(utf-8-validate@5.0.10)': + dependencies: + '@graphql-tools/executor-common': 0.0.4(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@whatwg-node/disposablestack': 0.0.6 + graphql: 16.10.0 + graphql-ws: 6.0.4(graphql@16.10.0)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + isomorphic-ws: 5.0.0(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + tslib: 2.8.1 + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - '@fastify/websocket' + - bufferutil + - uWebSockets.js + - utf-8-validate + + '@graphql-tools/executor-http@1.3.3(@types/node@22.6.1)(graphql@16.10.0)': + dependencies: + '@graphql-hive/signal': 1.0.0 + '@graphql-tools/executor-common': 0.0.4(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.6 + '@whatwg-node/promise-helpers': 1.3.1 + graphql: 16.10.0 + meros: 1.3.0(@types/node@22.6.1) + tslib: 2.8.1 + transitivePeerDependencies: + - '@types/node' + + '@graphql-tools/executor-legacy-ws@1.1.17(bufferutil@4.0.9)(graphql@16.10.0)(utf-8-validate@5.0.10)': + dependencies: + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@types/ws': 8.18.1 + graphql: 16.10.0 + isomorphic-ws: 5.0.0(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + tslib: 2.8.1 + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@graphql-tools/executor@1.4.7(graphql@16.10.0)': + dependencies: + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.1 + graphql: 16.10.0 + tslib: 2.8.1 + + '@graphql-tools/git-loader@8.0.24(graphql@16.10.0)': + dependencies: + '@graphql-tools/graphql-tag-pluck': 8.3.19(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + graphql: 16.10.0 + is-glob: 4.0.3 + micromatch: 4.0.8 + tslib: 2.8.1 + unixify: 1.0.0 + transitivePeerDependencies: + - supports-color + + '@graphql-tools/github-loader@8.0.20(@types/node@22.6.1)(graphql@16.10.0)': + dependencies: + '@graphql-tools/executor-http': 1.3.3(@types/node@22.6.1)(graphql@16.10.0) + '@graphql-tools/graphql-tag-pluck': 8.3.19(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@whatwg-node/fetch': 0.10.6 + '@whatwg-node/promise-helpers': 1.3.1 + graphql: 16.10.0 + sync-fetch: 0.6.0-2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@types/node' + - supports-color + + '@graphql-tools/graphql-file-loader@8.0.19(graphql@16.10.0)': + dependencies: + '@graphql-tools/import': 7.0.18(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + globby: 11.1.0 + graphql: 16.10.0 + tslib: 2.8.1 + unixify: 1.0.0 + + '@graphql-tools/graphql-tag-pluck@8.3.19(graphql@16.10.0)': + dependencies: + '@babel/core': 7.26.10 + '@babel/parser': 7.27.0 + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.10) + '@babel/traverse': 7.27.0 + '@babel/types': 7.27.0 + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@graphql-tools/import@7.0.18(graphql@16.10.0)': + dependencies: + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + graphql: 16.10.0 + resolve-from: 5.0.0 + tslib: 2.8.1 + + '@graphql-tools/json-file-loader@8.0.18(graphql@16.10.0)': + dependencies: + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + globby: 11.1.0 + graphql: 16.10.0 + tslib: 2.8.1 + unixify: 1.0.0 + + '@graphql-tools/load@8.1.0(graphql@16.10.0)': + dependencies: + '@graphql-tools/schema': 10.0.23(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + graphql: 16.10.0 + p-limit: 3.1.0 + tslib: 2.8.1 + + '@graphql-tools/merge@9.0.24(graphql@16.10.0)': + dependencies: + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.8.1 + + '@graphql-tools/optimize@1.4.0(graphql@16.10.0)': + dependencies: + graphql: 16.10.0 + tslib: 2.8.1 + + '@graphql-tools/optimize@2.0.0(graphql@16.10.0)': + dependencies: + graphql: 16.10.0 + tslib: 2.8.1 + + '@graphql-tools/prisma-loader@8.0.17(@types/node@22.6.1)(bufferutil@4.0.9)(graphql@16.10.0)(utf-8-validate@5.0.10)': + dependencies: + '@graphql-tools/url-loader': 8.0.31(@types/node@22.6.1)(bufferutil@4.0.9)(graphql@16.10.0)(utf-8-validate@5.0.10) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@types/js-yaml': 4.0.9 + '@whatwg-node/fetch': 0.10.6 + chalk: 4.1.2 + debug: 4.4.0 + dotenv: 16.4.5 + graphql: 16.10.0 + graphql-request: 6.1.0(graphql@16.10.0) + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + jose: 5.10.0 + js-yaml: 4.1.0 + lodash: 4.17.21 + scuid: 1.1.0 + tslib: 2.8.1 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - '@fastify/websocket' + - '@types/node' + - bufferutil + - encoding + - supports-color + - uWebSockets.js + - utf-8-validate + + '@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.10.0)': dependencies: - '@ethereumjs/util': 8.1.0 - crc-32: 1.2.2 - - '@ethereumjs/rlp@4.0.1': {} + '@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.8.1 + transitivePeerDependencies: + - encoding + - supports-color - '@ethereumjs/tx@4.2.0': + '@graphql-tools/relay-operation-optimizer@7.0.19(graphql@16.10.0)': dependencies: - '@ethereumjs/common': 3.2.0 - '@ethereumjs/rlp': 4.0.1 - '@ethereumjs/util': 8.1.0 - ethereum-cryptography: 2.2.1 + '@ardatan/relay-compiler': 12.0.3(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding - '@ethereumjs/util@8.1.0': + '@graphql-tools/schema@10.0.23(graphql@16.10.0)': dependencies: - '@ethereumjs/rlp': 4.0.1 - ethereum-cryptography: 2.2.1 - micro-ftch: 0.3.1 + '@graphql-tools/merge': 9.0.24(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.8.1 - '@faceless-ui/modal@3.0.0-beta.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@graphql-tools/url-loader@8.0.31(@types/node@22.6.1)(bufferutil@4.0.9)(graphql@16.10.0)(utf-8-validate@5.0.10)': dependencies: - body-scroll-lock: 4.0.0-beta.0 - focus-trap: 7.5.4 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@graphql-tools/executor-graphql-ws': 2.0.5(bufferutil@4.0.9)(graphql@16.10.0)(utf-8-validate@5.0.10) + '@graphql-tools/executor-http': 1.3.3(@types/node@22.6.1)(graphql@16.10.0) + '@graphql-tools/executor-legacy-ws': 1.1.17(bufferutil@4.0.9)(graphql@16.10.0)(utf-8-validate@5.0.10) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@graphql-tools/wrap': 10.0.35(graphql@16.10.0) + '@types/ws': 8.18.1 + '@whatwg-node/fetch': 0.10.6 + '@whatwg-node/promise-helpers': 1.3.1 + graphql: 16.10.0 + isomorphic-ws: 5.0.0(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + sync-fetch: 0.6.0-2 + tslib: 2.8.1 + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - '@fastify/websocket' + - '@types/node' + - bufferutil + - uWebSockets.js + - utf-8-validate - '@floating-ui/core@1.6.8': + '@graphql-tools/utils@10.8.6(graphql@16.10.0)': dependencies: - '@floating-ui/utils': 0.2.8 + '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) + '@whatwg-node/promise-helpers': 1.3.1 + cross-inspect: 1.0.1 + dset: 3.1.4 + graphql: 16.10.0 + tslib: 2.8.1 - '@floating-ui/dom@1.6.11': + '@graphql-tools/utils@8.13.1(graphql@16.10.0)': dependencies: - '@floating-ui/core': 1.6.8 - '@floating-ui/utils': 0.2.8 + graphql: 16.10.0 + tslib: 2.8.1 - '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@graphql-tools/utils@9.2.1(graphql@16.10.0)': dependencies: - '@floating-ui/dom': 1.6.11 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.8.1 - '@floating-ui/react@0.26.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@graphql-tools/wrap@10.0.35(graphql@16.10.0)': dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@floating-ui/utils': 0.2.8 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - tabbable: 6.2.0 + '@graphql-tools/delegate': 10.2.17(graphql@16.10.0) + '@graphql-tools/schema': 10.0.23(graphql@16.10.0) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@whatwg-node/promise-helpers': 1.3.1 + graphql: 16.10.0 + tslib: 2.8.1 - '@floating-ui/utils@0.2.8': {} + '@graphql-typed-document-node/core@3.2.0(graphql@16.10.0)': + dependencies: + graphql: 16.10.0 '@hapi/hoek@9.3.0': {} @@ -9891,6 +11504,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 @@ -10131,21 +11752,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@metamask/sdk-install-modal-web@0.28.1(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': + '@metamask/sdk-install-modal-web@0.28.1(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: i18next: 23.11.5 qr-code-styling: 1.6.0-rc.1 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) - '@metamask/sdk@0.28.4(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(utf-8-validate@5.0.10)': + '@metamask/sdk@0.28.4(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(utf-8-validate@5.0.10)': dependencies: '@metamask/onboarding': 1.0.1 '@metamask/providers': 16.1.0 '@metamask/sdk-communication-layer': 0.28.2(cross-fetch@4.0.0)(eciesjs@0.3.20)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@metamask/sdk-install-modal-web': 0.28.1(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + '@metamask/sdk-install-modal-web': 0.28.1(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) '@types/dom-screen-wake-lock': 1.0.3 '@types/uuid': 10.0.0 bowser: 2.11.0 @@ -10159,7 +11780,7 @@ snapshots: obj-multiplex: 1.0.0 pump: 3.0.2 qrcode-terminal-nooctal: 0.12.1 - react-native-webview: 11.26.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + react-native-webview: 11.26.1(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) readable-stream: 3.6.2 rollup-plugin-visualizer: 5.12.0(rollup@4.39.0) socket.io-client: 4.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -10221,7 +11842,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 +11851,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 +11865,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 +11884,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 +11925,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 @@ -10831,84 +12454,84 @@ snapshots: '@react-native/assets-registry@0.75.3': {} - '@react-native/babel-plugin-codegen@0.75.3(@babel/preset-env@7.25.4(@babel/core@7.25.2))': + '@react-native/babel-plugin-codegen@0.75.3(@babel/preset-env@7.25.4(@babel/core@7.26.0))': dependencies: - '@react-native/codegen': 0.75.3(@babel/preset-env@7.25.4(@babel/core@7.25.2)) + '@react-native/codegen': 0.75.3(@babel/preset-env@7.25.4(@babel/core@7.26.0)) transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/babel-preset@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))': + '@react-native/babel-preset@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))': dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-proposal-export-default-from': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-export-default-from': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.25.2) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) - '@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.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) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.25.2) - '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.25.2) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.25.2) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.25.2) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.25.2) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.2) - '@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-react-display-name': 7.25.9(@babel/core@7.25.2) - '@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.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.27.0(@babel/core@7.25.2) - '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/plugin-proposal-export-default-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-export-default-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.0) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.26.0) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.26.0) + '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.0) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.0) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.26.0) + '@babel/plugin-transform-runtime': 7.26.10(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) '@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-native/babel-plugin-codegen': 0.75.3(@babel/preset-env@7.25.4(@babel/core@7.26.0)) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.26.0) react-refresh: 0.14.2 transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/codegen@0.75.3(@babel/preset-env@7.25.4(@babel/core@7.25.2))': + '@react-native/codegen@0.75.3(@babel/preset-env@7.25.4(@babel/core@7.26.0))': dependencies: '@babel/parser': 7.27.0 - '@babel/preset-env': 7.25.4(@babel/core@7.25.2) + '@babel/preset-env': 7.25.4(@babel/core@7.26.0) glob: 7.2.3 hermes-parser: 0.22.0 invariant: 2.2.4 - jscodeshift: 0.14.0(@babel/preset-env@7.25.4(@babel/core@7.25.2)) + jscodeshift: 0.14.0(@babel/preset-env@7.25.4(@babel/core@7.26.0)) mkdirp: 0.5.6 nullthrows: 1.1.1 yargs: 17.7.2 transitivePeerDependencies: - supports-color - '@react-native/community-cli-plugin@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@react-native/community-cli-plugin@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@react-native-community/cli-server-api': 14.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@react-native-community/cli-tools': 14.1.0 '@react-native/dev-middleware': 0.75.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@react-native/metro-babel-transformer': 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2)) + '@react-native/metro-babel-transformer': 0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0)) chalk: 4.1.2 execa: 5.1.1 metro: 0.80.12(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -10950,10 +12573,10 @@ snapshots: '@react-native/js-polyfills@0.75.3': {} - '@react-native/metro-babel-transformer@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))': + '@react-native/metro-babel-transformer@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))': dependencies: - '@babel/core': 7.25.2 - '@react-native/babel-preset': 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2)) + '@babel/core': 7.26.0 + '@react-native/babel-preset': 0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0)) hermes-parser: 0.22.0 nullthrows: 1.1.1 transitivePeerDependencies: @@ -10962,17 +12585,19 @@ snapshots: '@react-native/normalize-colors@0.75.3': {} - '@react-native/virtualized-lists@0.75.3(@types/react@18.3.9)(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': + '@react-native/virtualized-lists@0.75.3(@types/react@18.3.9)(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) optionalDependencies: '@types/react': 18.3.9 '@remix-run/router@1.19.2': {} + '@repeaterjs/repeater@3.0.6': {} + '@rollup/pluginutils@5.1.2(rollup@4.39.0)': dependencies: '@types/estree': 1.0.6 @@ -11496,7 +13121,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.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@2.4.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1))': dependencies: '@babel/core': 7.26.0 '@babel/generator': 7.26.3 @@ -11504,7 +13129,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 @@ -11517,14 +13142,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.1) + vite: 6.2.5(@types/node@22.6.1)(jiti@2.4.2)(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.1))': + '@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@2.4.2)(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.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@2.4.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1)) transitivePeerDependencies: - '@rsbuild/core' - '@tanstack/react-router' @@ -11648,6 +13273,8 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 + '@types/js-yaml@4.0.9': {} + '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -11666,6 +13293,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': @@ -11683,8 +13312,6 @@ snapshots: '@types/stack-utils@2.0.3': {} - '@types/stylis@4.2.5': {} - '@types/trusted-types@2.0.7': {} '@types/unist@2.0.11': {} @@ -11730,14 +13357,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 +13378,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 +13407,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)) @@ -11806,10 +13433,10 @@ snapshots: optionalDependencies: react: 18.3.1 - '@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))': + '@vitejs/plugin-react-swc@3.7.2(@swc/helpers@0.5.17)(vite@6.2.5(@types/node@22.6.1)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1))': dependencies: '@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) + vite: 6.2.5(@types/node@22.6.1)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1) transitivePeerDependencies: - '@swc/helpers' @@ -11824,10 +13451,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@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))': + '@vitest/coverage-v8@2.1.9(vitest@2.1.9(@types/node@22.6.1)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0))': dependencies: '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 1.0.2 + '@bcoe/v8-coverage': 0.2.3 debug: 4.4.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -11837,50 +13464,50 @@ snapshots: magicast: 0.3.5 std-env: 3.9.0 test-exclude: 7.0.1 - 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) + tinyrainbow: 1.2.0 + vitest: 2.1.9(@types/node@22.6.1)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(terser@5.39.0) transitivePeerDependencies: - supports-color - '@vitest/expect@3.1.1': + '@vitest/expect@2.1.9': dependencies: - '@vitest/spy': 3.1.1 - '@vitest/utils': 3.1.1 + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 chai: 5.2.0 - tinyrainbow: 2.0.0 + tinyrainbow: 1.2.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))': + '@vitest/mocker@2.1.9(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0))': dependencies: - '@vitest/spy': 3.1.1 + '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.17 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) + vite: 5.4.8(@types/node@22.6.1)(terser@5.39.0) - '@vitest/pretty-format@3.1.1': + '@vitest/pretty-format@2.1.9': dependencies: - tinyrainbow: 2.0.0 + tinyrainbow: 1.2.0 - '@vitest/runner@3.1.1': + '@vitest/runner@2.1.9': dependencies: - '@vitest/utils': 3.1.1 - pathe: 2.0.3 + '@vitest/utils': 2.1.9 + pathe: 1.1.2 - '@vitest/snapshot@3.1.1': + '@vitest/snapshot@2.1.9': dependencies: - '@vitest/pretty-format': 3.1.1 + '@vitest/pretty-format': 2.1.9 magic-string: 0.30.17 - pathe: 2.0.3 + pathe: 1.1.2 - '@vitest/spy@3.1.1': + '@vitest/spy@2.1.9': dependencies: tinyspy: 3.0.2 - '@vitest/utils@3.1.1': + '@vitest/utils@2.1.9': dependencies: - '@vitest/pretty-format': 3.1.1 + '@vitest/pretty-format': 2.1.9 loupe: 3.1.3 - tinyrainbow: 2.0.0 + tinyrainbow: 1.2.0 '@wagmi/cli@2.1.16(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)': dependencies: @@ -11910,10 +13537,10 @@ snapshots: - bufferutil - utf-8-validate - '@wagmi/connectors@5.1.13(@types/react@18.3.9)(@wagmi/core@2.13.7(@tanstack/query-core@5.62.0)(@types/react@18.3.9)(react@18.3.1)(typescript@5.6.2)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': + '@wagmi/connectors@5.1.13(@types/react@18.3.9)(@wagmi/core@2.13.7(@tanstack/query-core@5.62.0)(@types/react@18.3.9)(react@18.3.1)(typescript@5.6.2)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': dependencies: '@coinbase/wallet-sdk': 4.0.4 - '@metamask/sdk': 0.28.4(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(utf-8-validate@5.0.10) + '@metamask/sdk': 0.28.4(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.3(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8) '@wagmi/core': 2.13.7(@tanstack/query-core@5.62.0)(@types/react@18.3.9)(react@18.3.1)(typescript@5.6.2)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8)) @@ -12213,78 +13840,575 @@ snapshots: - ioredis - uWebSockets.js - '@walletconnect/universal-provider@2.16.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + '@walletconnect/universal-provider@2.16.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@walletconnect/jsonrpc-http-connection': 1.0.8 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/logger': 2.1.2 + '@walletconnect/sign-client': 2.16.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@walletconnect/types': 2.16.1 + '@walletconnect/utils': 2.16.1 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - bufferutil + - encoding + - ioredis + - uWebSockets.js + - utf-8-validate + + '@walletconnect/utils@2.16.1': + dependencies: + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/hkdf': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.0.4 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.16.1 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + elliptic: 6.5.7 + query-string: 7.1.3 + uint8arrays: 3.1.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - ioredis + - uWebSockets.js + + '@walletconnect/window-getters@1.0.1': + dependencies: + tslib: 1.14.1 + + '@walletconnect/window-metadata@1.0.1': + dependencies: + '@walletconnect/window-getters': 1.0.1 + tslib: 1.14.1 + + '@whatwg-node/disposablestack@0.0.6': + dependencies: + '@whatwg-node/promise-helpers': 1.3.1 + tslib: 2.8.1 + + '@whatwg-node/fetch@0.10.6': + dependencies: + '@whatwg-node/node-fetch': 0.7.18 + urlpattern-polyfill: 10.0.0 + + '@whatwg-node/node-fetch@0.7.18': + dependencies: + '@fastify/busboy': 3.1.1 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.1 + tslib: 2.8.1 + + '@whatwg-node/promise-helpers@1.3.1': + dependencies: + tslib: 2.8.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: - '@walletconnect/jsonrpc-http-connection': 1.0.8 - '@walletconnect/jsonrpc-provider': 1.0.14 - '@walletconnect/jsonrpc-types': 1.0.4 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.16.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) - '@walletconnect/types': 2.16.1 - '@walletconnect/utils': 2.16.1 - events: 3.3.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - bufferutil - - encoding - - ioredis - - uWebSockets.js - - utf-8-validate + '@zag-js/dom-query': 1.8.2 - '@walletconnect/utils@2.16.1': + '@zag-js/scroll-snap@1.8.2': dependencies: - '@stablelib/chacha20poly1305': 1.0.1 - '@stablelib/hkdf': 1.0.1 - '@stablelib/random': 1.0.2 - '@stablelib/sha256': 1.0.1 - '@stablelib/x25519': 1.0.3 - '@walletconnect/relay-api': 1.0.11 - '@walletconnect/relay-auth': 1.0.4 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.16.1 - '@walletconnect/window-getters': 1.0.1 - '@walletconnect/window-metadata': 1.0.1 - detect-browser: 5.3.0 - elliptic: 6.5.7 - query-string: 7.1.3 - uint8arrays: 3.1.0 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@netlify/blobs' - - '@planetscale/database' - - '@react-native-async-storage/async-storage' - - '@upstash/redis' - - '@vercel/kv' - - ioredis - - uWebSockets.js + '@zag-js/dom-query': 1.8.2 - '@walletconnect/window-getters@1.0.1': + '@zag-js/select@1.8.2': dependencies: - tslib: 1.14.1 + '@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 - '@walletconnect/window-metadata@1.0.1': + '@zag-js/signature-pad@1.8.2': dependencies: - '@walletconnect/window-getters': 1.0.1 - tslib: 1.14.1 + '@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: @@ -12334,6 +14458,11 @@ snapshots: dependencies: humanize-ms: 1.2.1 + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -12343,6 +14472,10 @@ snapshots: anser@1.4.10: {} + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + ansi-escapes@7.0.0: dependencies: environment: 1.1.0 @@ -12392,7 +14525,7 @@ snapshots: aria-hidden@1.2.4: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 aria-query@5.3.0: dependencies: @@ -12428,6 +14561,8 @@ snapshots: atomic-sleep@1.0.0: {} + auto-bind@4.0.0: {} + autoprefixer@10.4.20(postcss@8.4.47): dependencies: browserslist: 4.23.3 @@ -12442,75 +14577,114 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - babel-core@7.0.0-bridge.0(@babel/core@7.26.0): + babel-core@7.0.0-bridge.0(@babel/core@7.26.10): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 babel-dead-code-elimination@1.0.8: 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-polyfill-corejs2@0.4.13(@babel/core@7.25.2): + 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.26.0): dependencies: '@babel/compat-data': 7.26.8 - '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.0) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2): + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): dependencies: - '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.0) core-js-compat: 3.41.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.25.2): + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.0): dependencies: - '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.0) core-js-compat: 3.41.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.25.2): + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.0): dependencies: - '@babel/core': 7.25.2 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - 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): + babel-plugin-styled-components@2.1.4(@babel/core@7.26.0)(styled-components@5.3.11(@babel/core@7.26.0)(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/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.26.0) lodash: 4.17.21 picomatch: 2.3.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) + styled-components: 5.3.11(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) transitivePeerDependencies: - '@babel/core' - supports-color - babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.25.2): + babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: {} + + babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.26.0): dependencies: - '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.25.2) + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0) transitivePeerDependencies: - '@babel/core' + babel-preset-fbjs@3.4.0(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.26.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0) + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.26.0) + '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.0) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.0) + babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 + transitivePeerDependencies: + - supports-color + bail@2.0.2: {} balanced-match@1.0.2: {} - balanced-match@2.0.0: {} - base-x@3.0.11: dependencies: safe-buffer: 5.2.1 @@ -12545,8 +14719,6 @@ snapshots: bn.js@5.2.1: {} - body-scroll-lock@4.0.0-beta.0: {} - boolbase@1.0.0: {} borsh@0.7.0: @@ -12653,6 +14825,11 @@ snapshots: callsites@3.1.0: {} + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.8.1 + camelcase-css@2.0.1: {} camelcase@5.3.1: {} @@ -12669,6 +14846,12 @@ snapshots: caniuse-lite@1.0.30001713: {} + capital-case@1.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + upper-case-first: 2.0.2 + ccount@2.0.1: {} chai@5.2.0: @@ -12676,7 +14859,7 @@ snapshots: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.1 + loupe: 3.1.3 pathval: 2.0.0 chalk@2.4.2: @@ -12699,6 +14882,47 @@ snapshots: chalk@5.4.1: {} + change-case-all@1.0.14: + dependencies: + change-case: 4.1.2 + is-lower-case: 2.0.2 + is-upper-case: 2.0.2 + lower-case: 2.0.2 + lower-case-first: 2.0.2 + sponge-case: 1.0.1 + swap-case: 2.0.2 + title-case: 3.0.3 + upper-case: 2.0.2 + upper-case-first: 2.0.2 + + change-case-all@1.0.15: + dependencies: + change-case: 4.1.2 + is-lower-case: 2.0.2 + is-upper-case: 2.0.2 + lower-case: 2.0.2 + lower-case-first: 2.0.2 + sponge-case: 1.0.1 + swap-case: 2.0.2 + title-case: 3.0.3 + upper-case: 2.0.2 + upper-case-first: 2.0.2 + + change-case@4.1.2: + dependencies: + camel-case: 4.1.2 + capital-case: 1.0.4 + constant-case: 3.0.4 + dot-case: 3.0.4 + header-case: 2.0.4 + no-case: 3.0.4 + param-case: 3.0.4 + pascal-case: 3.1.2 + path-case: 3.0.4 + sentence-case: 3.0.4 + snake-case: 3.0.4 + tslib: 2.8.1 + change-case@5.4.4: {} character-entities-html4@2.1.0: {} @@ -12709,6 +14933,8 @@ snapshots: character-reference-invalid@2.0.1: {} + chardet@0.7.0: {} + check-error@2.1.1: {} chokidar@3.6.0: @@ -12753,6 +14979,8 @@ snapshots: dependencies: consola: 3.2.3 + clean-stack@2.2.0: {} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 @@ -12767,11 +14995,18 @@ snapshots: cli-spinners@2.9.2: {} + cli-truncate@2.1.0: + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 string-width: 7.2.0 + cli-width@3.0.0: {} + clipboardy@4.0.0: dependencies: execa: 8.0.1 @@ -12816,8 +15051,6 @@ snapshots: color-name@1.1.4: {} - colord@2.9.3: {} - colorette@1.4.0: {} colorette@2.0.20: {} @@ -12838,6 +15071,8 @@ snapshots: commander@9.5.0: {} + common-tags@1.8.2: {} + commondir@1.0.1: {} compare-func@2.0.0: @@ -12886,7 +15121,7 @@ snapshots: transitivePeerDependencies: - supports-color - connectkit@1.8.2(@babel/core@7.25.2)(@tanstack/react-query@5.62.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.12.14(@tanstack/query-core@5.62.0)(@tanstack/react-query@5.62.0(react@18.3.1))(@types/react@18.3.9)(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)): + connectkit@1.8.2(@babel/core@7.26.0)(@tanstack/react-query@5.62.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(wagmi@2.12.14(@tanstack/query-core@5.62.0)(@tanstack/react-query@5.62.0(react@18.3.1))(@types/react@18.3.9)(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)): dependencies: '@tanstack/react-query': 5.62.0(react@18.3.1) buffer: 6.0.3 @@ -12898,15 +15133,21 @@ snapshots: react-transition-state: 1.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-use-measure: 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) resize-observer-polyfill: 1.5.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) + styled-components: 5.3.11(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1) viem: 2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8) - wagmi: 2.12.14(@tanstack/query-core@5.62.0)(@tanstack/react-query@5.62.0(react@18.3.1))(@types/react@18.3.9)(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + wagmi: 2.12.14(@tanstack/query-core@5.62.0)(@tanstack/react-query@5.62.0(react@18.3.1))(@types/react@18.3.9)(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) transitivePeerDependencies: - '@babel/core' - react-is consola@3.2.3: {} + constant-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + upper-case: 2.0.2 + conventional-changelog-angular@7.0.0: dependencies: compare-func: 2.0.0 @@ -12922,6 +15163,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 +15189,23 @@ 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@8.3.6(typescript@5.6.2): + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.6.2 + cosmiconfig@9.0.0(typescript@5.6.2): dependencies: env-paths: 2.2.1 @@ -12979,6 +15239,10 @@ snapshots: transitivePeerDependencies: - encoding + cross-inspect@1.0.1: + dependencies: + tslib: 2.8.1 + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -12989,8 +15253,6 @@ snapshots: css-color-keywords@1.0.0: {} - css-functions-list@3.2.2: {} - css-selector-parser@3.0.5: {} css-to-react-native@3.2.0: @@ -12999,11 +15261,6 @@ snapshots: css-color-keywords: 1.0.0 postcss-value-parser: 4.2.0 - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.1 - css-what@6.1.0: {} css.escape@1.5.1: {} @@ -13018,14 +15275,18 @@ snapshots: dargs@8.1.0: {} + data-uri-to-buffer@4.0.1: {} + data-urls@5.0.0: dependencies: whatwg-mimetype: 4.0.0 whatwg-url: 14.0.0 + dataloader@2.2.3: {} + date-fns@2.30.0: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.27.0 dayjs@1.11.13: {} @@ -13057,7 +15318,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: {} @@ -13087,6 +15350,8 @@ snapshots: depd@2.0.0: {} + dependency-graph@0.11.0: {} + dequal@2.0.3: {} destr@2.0.3: {} @@ -13095,6 +15360,8 @@ snapshots: detect-browser@5.3.0: {} + detect-indent@6.1.0: {} + detect-libc@1.0.3: {} detect-node-es@1.1.0: {} @@ -13125,10 +15392,10 @@ snapshots: dom-accessibility-api@0.6.3: {} - dom-helpers@5.2.1: + dot-case@3.0.4: dependencies: - '@babel/runtime': 7.25.6 - csstype: 3.1.3 + no-case: 3.0.4 + tslib: 2.8.1 dot-prop@5.3.0: dependencies: @@ -13138,6 +15405,8 @@ snapshots: dotenv@16.4.5: {} + dset@3.1.4: {} + duplexify@4.1.3: dependencies: end-of-stream: 1.4.4 @@ -13481,6 +15750,12 @@ snapshots: readable-stream: 3.6.2 webextension-polyfill: 0.10.0 + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + eyes@0.1.8: {} fast-deep-equal@3.1.3: {} @@ -13513,8 +15788,6 @@ snapshots: dependencies: strnum: 1.1.2 - fastest-levenshtein@1.0.16: {} - fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -13527,13 +15800,32 @@ snapshots: dependencies: bser: 2.1.1 + fbjs-css-vars@1.0.2: {} + + fbjs@3.0.5: + dependencies: + cross-fetch: 3.1.8 + fbjs-css-vars: 1.0.2 + loose-envify: 1.4.0 + object-assign: 4.1.1 + promise: 7.3.1 + setimmediate: 1.0.5 + ua-parser-js: 1.0.39 + transitivePeerDependencies: + - encoding + fdir@6.3.0(picomatch@3.0.1): optionalDependencies: picomatch: 3.0.1 - file-entry-cache@9.1.0: + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + + figures@3.2.0: dependencies: - flat-cache: 5.0.0 + escape-string-regexp: 1.0.5 file-uri-to-path@1.0.0: {} @@ -13561,6 +15853,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 @@ -13586,21 +15880,10 @@ snapshots: path-exists: 5.0.0 unicorn-magic: 0.1.0 - flat-cache@5.0.0: - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - - flatted@3.3.1: {} - flow-enums-runtime@0.0.6: {} flow-parser@0.266.1: {} - focus-trap@7.5.4: - dependencies: - tabbable: 6.2.0 - for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -13618,6 +15901,10 @@ snapshots: format@0.2.2: {} + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + fraction.js@4.3.7: {} framer-motion@6.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -13629,13 +15916,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: {} @@ -13666,8 +15953,6 @@ snapshots: get-east-asian-width@1.2.0: {} - get-func-name@2.0.2: {} - get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 @@ -13726,16 +16011,6 @@ snapshots: dependencies: ini: 4.1.1 - global-modules@2.0.0: - dependencies: - global-prefix: 3.0.0 - - global-prefix@3.0.0: - dependencies: - ini: 1.3.8 - kind-of: 6.0.3 - which: 1.3.1 - globals@11.12.0: {} globby@11.1.0: @@ -13755,7 +16030,7 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 - globjoin@0.1.4: {} + globrex@0.1.2: {} goober@2.1.14(csstype@3.1.3): dependencies: @@ -13767,6 +16042,58 @@ snapshots: graceful-fs@4.2.11: {} + graphql-config@5.1.4(@types/node@22.6.1)(bufferutil@4.0.9)(graphql@16.10.0)(typescript@5.6.2)(utf-8-validate@5.0.10): + dependencies: + '@graphql-tools/graphql-file-loader': 8.0.19(graphql@16.10.0) + '@graphql-tools/json-file-loader': 8.0.18(graphql@16.10.0) + '@graphql-tools/load': 8.1.0(graphql@16.10.0) + '@graphql-tools/merge': 9.0.24(graphql@16.10.0) + '@graphql-tools/url-loader': 8.0.31(@types/node@22.6.1)(bufferutil@4.0.9)(graphql@16.10.0)(utf-8-validate@5.0.10) + '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + cosmiconfig: 9.0.0(typescript@5.6.2) + graphql: 16.10.0 + jiti: 2.4.2 + minimatch: 10.0.1 + string-env-interpolation: 1.0.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@fastify/websocket' + - '@types/node' + - bufferutil + - typescript + - uWebSockets.js + - utf-8-validate + + graphql-request@6.1.0(graphql@16.10.0): + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) + cross-fetch: 3.1.8 + graphql: 16.10.0 + transitivePeerDependencies: + - encoding + + graphql-request@7.1.2(graphql@16.10.0): + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) + graphql: 16.10.0 + + graphql-sock@1.0.1(graphql@16.10.0): + dependencies: + graphql: 16.10.0 + + graphql-tag@2.12.6(graphql@16.10.0): + dependencies: + graphql: 16.10.0 + tslib: 2.8.1 + + graphql-ws@6.0.4(graphql@16.10.0)(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + graphql: 16.10.0 + optionalDependencies: + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + graphql@16.10.0: {} + h3@1.12.0: dependencies: cookie-es: 1.2.2 @@ -13932,6 +16259,11 @@ snapshots: property-information: 6.5.0 space-separated-tokens: 2.0.2 + header-case@2.0.4: + dependencies: + capital-case: 1.0.4 + tslib: 2.8.1 + hermes-estree@0.22.0: {} hermes-estree@0.23.1: {} @@ -13964,8 +16296,6 @@ snapshots: html-escaper@2.0.2: {} - html-tags@3.3.1: {} - html-void-elements@3.0.0: {} http-errors@2.0.0: @@ -14004,11 +16334,15 @@ 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.4.24: + dependencies: + safer-buffer: 2.1.2 iconv-lite@0.6.3: dependencies: @@ -14024,6 +16358,8 @@ snapshots: dependencies: queue: 6.0.2 + immutable@3.7.6: {} + import-fresh@2.0.0: dependencies: caller-path: 2.0.0 @@ -14034,6 +16370,8 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-from@4.0.0: {} + import-meta-resolve@4.1.0: {} imurmurhash@0.1.4: {} @@ -14047,20 +16385,41 @@ snapshots: inherits@2.0.4: {} - ini@1.3.8: {} - ini@4.1.1: {} inline-style-parser@0.1.1: {} inline-style-parser@0.2.4: {} + inquirer@8.2.6: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + invariant@2.2.4: dependencies: loose-envify: 1.4.0 iron-webcrypto@1.2.1: {} + is-absolute@1.0.0: + dependencies: + is-relative: 1.0.0 + is-windows: 1.0.2 + is-alphabetical@2.0.1: {} is-alphanumerical@2.0.1: @@ -14129,6 +16488,10 @@ snapshots: is-interactive@2.0.0: {} + is-lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + is-number@7.0.0: {} is-obj@2.0.0: {} @@ -14139,14 +16502,16 @@ snapshots: dependencies: isobject: 3.0.1 - is-plain-object@5.0.0: {} - is-potential-custom-element-name@1.0.1: {} is-reference@3.0.2: dependencies: '@types/estree': 1.0.6 + is-relative@1.0.0: + dependencies: + is-unc-path: 1.0.0 + is-stream@2.0.1: {} is-stream@3.0.0: {} @@ -14159,10 +16524,20 @@ snapshots: dependencies: which-typed-array: 1.1.15 + is-unc-path@1.0.0: + dependencies: + unc-path-regex: 0.1.2 + is-unicode-supported@0.1.0: {} is-unicode-supported@1.3.0: {} + is-upper-case@2.0.2: + dependencies: + tslib: 2.8.1 + + is-windows@1.0.2: {} + is-wsl@1.1.0: {} is-wsl@2.2.0: @@ -14187,6 +16562,10 @@ snapshots: dependencies: ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + isomorphic-ws@5.0.0(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + isows@1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -14294,6 +16673,8 @@ snapshots: jiti@1.21.6: {} + jiti@2.4.2: {} + joi@17.13.3: dependencies: '@hapi/hoek': 9.3.0 @@ -14302,6 +16683,8 @@ snapshots: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 + jose@5.10.0: {} + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -14317,19 +16700,19 @@ snapshots: jsc-safe-url@0.2.4: {} - jscodeshift@0.14.0(@babel/preset-env@7.25.4(@babel/core@7.25.2)): + jscodeshift@0.14.0(@babel/preset-env@7.25.4(@babel/core@7.26.0)): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 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.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) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.26.10) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.26.10) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.26.10) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10) + '@babel/preset-env': 7.25.4(@babel/core@7.26.0) + '@babel/preset-flow': 7.25.9(@babel/core@7.26.10) + '@babel/preset-typescript': 7.27.0(@babel/core@7.26.10) + '@babel/register': 7.25.9(@babel/core@7.26.10) + babel-core: 7.0.0-bridge.0(@babel/core@7.26.10) chalk: 4.1.2 flow-parser: 0.266.1 graceful-fs: 4.2.11 @@ -14376,8 +16759,6 @@ snapshots: jsesc@3.1.0: {} - json-buffer@3.0.1: {} - json-parse-better-errors@1.0.2: {} json-parse-even-better-errors@2.3.1: {} @@ -14393,6 +16774,11 @@ snapshots: json-stringify-safe@5.0.1: {} + json-to-pretty-yaml@1.2.2: + dependencies: + remedial: 1.0.8 + remove-trailing-spaces: 1.0.9 + json5@2.2.3: {} jsonfile@4.0.0: @@ -14413,18 +16799,12 @@ snapshots: node-gyp-build: 4.8.4 readable-stream: 3.6.2 - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - keyvaluestorage-interface@1.0.0: {} kind-of@6.0.3: {} kleur@3.0.3: {} - known-css-properties@0.34.0: {} - leven@3.1.0: {} lighthouse-logger@1.4.2: @@ -14482,6 +16862,17 @@ snapshots: transitivePeerDependencies: - uWebSockets.js + listr2@4.0.5: + dependencies: + cli-truncate: 2.1.0 + colorette: 2.0.20 + log-update: 4.0.0 + p-map: 4.0.0 + rfdc: 1.4.1 + rxjs: 7.8.2 + through: 2.3.8 + wrap-ansi: 7.0.0 + listr2@8.2.4: dependencies: cli-truncate: 4.0.0 @@ -14542,12 +16933,12 @@ snapshots: lodash.snakecase@4.1.1: {} + lodash.sortby@4.7.0: {} + lodash.startcase@4.4.0: {} lodash.throttle@4.1.1: {} - lodash.truncate@4.4.2: {} - lodash.uniq@4.5.0: {} lodash.upperfirst@4.3.1: {} @@ -14564,6 +16955,13 @@ snapshots: chalk: 5.4.1 is-unicode-supported: 1.3.0 + log-update@4.0.0: + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + log-update@6.1.0: dependencies: ansi-escapes: 7.0.0 @@ -14584,11 +16982,15 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.1: + loupe@3.1.3: {} + + lower-case-first@2.0.2: dependencies: - get-func-name: 2.0.2 + tslib: 2.8.1 - loupe@3.1.3: {} + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 lru-cache@10.4.3: {} @@ -14625,6 +17027,8 @@ snapshots: dependencies: tmpl: 1.0.5 + map-cache@0.2.2: {} + mark.js@8.11.1: {} markdown-extensions@2.0.0: {} @@ -14642,8 +17046,6 @@ snapshots: marky@1.2.5: {} - mathml-tag-names@2.1.3: {} - mdast-util-directive@3.0.0: dependencies: '@types/mdast': 4.0.4 @@ -14830,29 +17232,29 @@ snapshots: dependencies: '@types/mdast': 4.0.4 - mdn-data@2.0.30: {} - mdurl@2.0.0: {} media-query-parser@2.0.2: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.27.0 memoize-one@5.2.1: {} meow@12.1.1: {} - meow@13.2.0: {} - merge-stream@2.0.0: {} merge2@1.4.1: {} + meros@1.3.0(@types/node@22.6.1): + optionalDependencies: + '@types/node': 22.6.1 + mersenne-twister@1.1.0: {} metro-babel-transformer@0.80.12: dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 flow-enums-runtime: 0.0.6 hermes-parser: 0.23.1 nullthrows: 1.1.1 @@ -14950,7 +17352,7 @@ snapshots: metro-transform-plugins@0.80.12: dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/generator': 7.27.0 '@babel/template': 7.27.0 '@babel/traverse': 7.27.0 @@ -14961,7 +17363,7 @@ snapshots: metro-transform-worker@0.80.12(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/generator': 7.27.0 '@babel/parser': 7.27.0 '@babel/types': 7.27.0 @@ -14982,7 +17384,7 @@ snapshots: metro@0.80.12(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@babel/code-frame': 7.26.2 - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/generator': 7.27.0 '@babel/parser': 7.27.0 '@babel/template': 7.27.0 @@ -15344,6 +17746,10 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -15377,8 +17783,6 @@ snapshots: modern-ahocorasick@1.0.1: {} - modern-normalize@3.0.1: {} - motion@10.16.2: dependencies: '@motionone/animation': 10.18.0 @@ -15396,6 +17800,8 @@ snapshots: multiformats@9.9.0: {} + mute-stream@0.0.8: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -15412,11 +17818,16 @@ snapshots: neo-async@2.6.2: {} - next-themes@0.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-themes@0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + nocache@3.0.4: {} node-abort-controller@3.1.1: {} @@ -15431,12 +17842,20 @@ snapshots: dependencies: minimatch: 3.1.2 + node-domexception@1.0.0: {} + node-fetch-native@1.6.4: {} node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + node-forge@1.3.1: {} node-gyp-build@4.8.4: {} @@ -15449,6 +17868,10 @@ snapshots: node-stream-zip@1.15.0: {} + normalize-path@2.1.1: + dependencies: + remove-trailing-separator: 1.1.0 + normalize-path@3.0.0: {} normalize-range@0.1.2: {} @@ -15582,6 +18005,8 @@ snapshots: string-width: 6.1.0 strip-ansi: 7.1.0 + os-tmpdir@1.0.2: {} + outdent@0.8.0: {} ox@0.6.0(typescript@5.6.2)(zod@3.23.8): @@ -15630,10 +18055,19 @@ snapshots: dependencies: p-limit: 4.0.0 + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + p-try@2.2.0: {} package-json-from-dist@1.0.0: {} + param-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -15649,6 +18083,12 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + parse-filepath@1.0.2: + dependencies: + is-absolute: 1.0.0 + map-cache: 0.2.2 + path-root: 0.1.1 + parse-json@4.0.0: dependencies: error-ex: 1.3.2 @@ -15667,6 +18107,16 @@ snapshots: parseurl@1.3.3: {} + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + path-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + path-exists@3.0.0: {} path-exists@4.0.0: {} @@ -15681,6 +18131,12 @@ snapshots: path-parse@1.0.7: {} + path-root-regex@0.1.2: {} + + path-root@0.1.1: + dependencies: + path-root-regex: 0.1.2 + path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 @@ -15690,10 +18146,10 @@ snapshots: pathe@1.1.2: {} - pathe@2.0.3: {} - pathval@2.0.0: {} + perfect-freehand@1.2.2: {} + periscopic@3.1.0: dependencies: '@types/estree': 1.0.6 @@ -15762,7 +18218,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: {} @@ -15791,30 +18247,13 @@ snapshots: postcss: 8.4.47 postcss-selector-parser: 6.1.2 - postcss-resolve-nested-selector@0.1.6: {} - - postcss-safe-parser@7.0.0(postcss@8.4.47): - dependencies: - postcss: 8.4.47 - postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-styled-syntax@0.6.4(postcss@8.4.47): - dependencies: - postcss: 8.4.47 - typescript: 5.6.2 - postcss-value-parser@4.2.0: {} - postcss@8.4.38: - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.0 - source-map-js: 1.2.1 - postcss@8.4.47: dependencies: nanoid: 3.3.7 @@ -15858,6 +18297,10 @@ snapshots: process-warning@1.0.0: {} + promise@7.3.1: + dependencies: + asap: 2.0.6 + promise@8.3.0: dependencies: asap: 2.0.6 @@ -15879,6 +18322,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 @@ -15957,13 +18406,9 @@ snapshots: react-fast-compare: 3.2.2 react-side-effect: 2.1.2(react@18.3.1) - react-hot-toast@2.4.1(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-icons@5.5.0(react@18.3.1): dependencies: - goober: 2.1.14(csstype@3.1.3) react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - csstype react-intersection-observer@9.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -15983,26 +18428,26 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-native-webview@11.26.1(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-webview@11.26.1(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: escape-string-regexp: 2.0.0 invariant: 2.2.4 react: 18.3.1 - react-native: 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) + react-native: 0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10) - react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10): + react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native-community/cli': 14.1.0(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10) '@react-native-community/cli-platform-android': 14.1.0 '@react-native-community/cli-platform-ios': 14.1.0 '@react-native/assets-registry': 0.75.3 - '@react-native/codegen': 0.75.3(@babel/preset-env@7.25.4(@babel/core@7.25.2)) - '@react-native/community-cli-plugin': 0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@react-native/codegen': 0.75.3(@babel/preset-env@7.25.4(@babel/core@7.26.0)) + '@react-native/community-cli-plugin': 0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@react-native/gradle-plugin': 0.75.3 '@react-native/js-polyfills': 0.75.3 '@react-native/normalize-colors': 0.75.3 - '@react-native/virtualized-lists': 0.75.3(@types/react@18.3.9)(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) + '@react-native/virtualized-lists': 0.75.3(@types/react@18.3.9)(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -16054,7 +18499,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 +18508,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,19 +18535,10 @@ 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 - react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@babel/runtime': 7.25.6 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-transition-state@1.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 @@ -16224,6 +18660,14 @@ snapshots: hast-util-to-string: 3.0.0 unist-util-visit: 5.0.0 + relay-runtime@12.0.0: + dependencies: + '@babel/runtime': 7.27.0 + fbjs: 3.0.5 + invariant: 2.2.4 + transitivePeerDependencies: + - encoding + remark-directive@3.0.0: dependencies: '@types/mdast': 4.0.4 @@ -16292,6 +18736,12 @@ snapshots: mdast-util-to-markdown: 2.1.0 unified: 11.0.5 + remedial@1.0.8: {} + + remove-trailing-separator@1.1.0: {} + + remove-trailing-spaces@1.0.9: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -16421,10 +18871,16 @@ snapshots: rrweb-cssom@0.7.1: {} + run-async@2.4.1: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} @@ -16445,6 +18901,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + scuid@1.1.0: {} + secp256k1@5.0.0: dependencies: elliptic: 6.5.7 @@ -16482,6 +18940,12 @@ snapshots: transitivePeerDependencies: - supports-color + sentence-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + upper-case-first: 2.0.2 + serialize-error@2.1.0: {} serve-static@1.16.2: @@ -16506,6 +18970,8 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.2 + setimmediate@1.0.5: {} + setprototypeof@1.2.0: {} sha.js@2.4.11: @@ -16553,6 +19019,8 @@ snapshots: signal-exit@4.1.0: {} + signedsource@1.0.0: {} + sisteransi@1.0.5: {} slash@3.0.0: {} @@ -16565,6 +19033,12 @@ snapshots: astral-regex: 1.0.0 is-fullwidth-code-point: 2.0.0 + slice-ansi@3.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 @@ -16581,6 +19055,11 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + socket.io-client@4.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@socket.io/component-emitter': 3.1.2 @@ -16622,6 +19101,10 @@ snapshots: split2@4.2.0: {} + sponge-case@1.0.1: + dependencies: + tslib: 2.8.1 + sprintf-js@1.0.3: {} stack-utils@2.0.6: @@ -16652,6 +19135,8 @@ snapshots: string-argv@0.3.2: {} + string-env-interpolation@1.0.1: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -16722,16 +19207,16 @@ 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): + styled-components@5.3.11(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1): dependencies: '@babel/helper-module-imports': 7.24.7(supports-color@5.5.0) '@babel/traverse': 7.25.6(supports-color@5.5.0) '@emotion/is-prop-valid': 1.3.1 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - 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) + babel-plugin-styled-components: 2.1.4(@babel/core@7.26.0)(styled-components@5.3.11(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1))(supports-color@5.5.0) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 18.3.1 @@ -16742,75 +19227,7 @@ snapshots: transitivePeerDependencies: - '@babel/core' - styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@emotion/is-prop-valid': 1.2.2 - '@emotion/unitless': 0.8.1 - '@types/stylis': 4.2.5 - css-to-react-native: 3.2.0 - csstype: 3.1.3 - postcss: 8.4.38 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - shallowequal: 1.1.0 - stylis: 4.3.2 - tslib: 2.6.2 - - stylelint-config-recommended@14.0.1(stylelint@16.9.0(typescript@5.6.2)): - dependencies: - stylelint: 16.9.0(typescript@5.6.2) - - stylelint-config-standard@36.0.1(stylelint@16.9.0(typescript@5.6.2)): - dependencies: - stylelint: 16.9.0(typescript@5.6.2) - stylelint-config-recommended: 14.0.1(stylelint@16.9.0(typescript@5.6.2)) - - stylelint@16.9.0(typescript@5.6.2): - dependencies: - '@csstools/css-parser-algorithms': 3.0.1(@csstools/css-tokenizer@3.0.1) - '@csstools/css-tokenizer': 3.0.1 - '@csstools/media-query-list-parser': 3.0.1(@csstools/css-parser-algorithms@3.0.1(@csstools/css-tokenizer@3.0.1))(@csstools/css-tokenizer@3.0.1) - '@csstools/selector-specificity': 4.0.0(postcss-selector-parser@6.1.2) - '@dual-bundle/import-meta-resolve': 4.1.0 - balanced-match: 2.0.0 - colord: 2.9.3 - cosmiconfig: 9.0.0(typescript@5.6.2) - css-functions-list: 3.2.2 - css-tree: 2.3.1 - debug: 4.3.7(supports-color@5.5.0) - fast-glob: 3.3.2 - fastest-levenshtein: 1.0.16 - file-entry-cache: 9.1.0 - global-modules: 2.0.0 - globby: 11.1.0 - globjoin: 0.1.4 - html-tags: 3.3.1 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-plain-object: 5.0.0 - known-css-properties: 0.34.0 - mathml-tag-names: 2.1.3 - meow: 13.2.0 - micromatch: 4.0.8 - normalize-path: 3.0.0 - picocolors: 1.1.0 - postcss: 8.4.47 - postcss-resolve-nested-selector: 0.1.6 - postcss-safe-parser: 7.0.0(postcss@8.4.47) - postcss-selector-parser: 6.1.2 - postcss-value-parser: 4.2.0 - resolve-from: 5.0.0 - string-width: 4.2.3 - strip-ansi: 7.1.0 - supports-hyperlinks: 3.1.0 - svg-tags: 1.0.0 - table: 6.8.2 - write-file-atomic: 5.0.1 - transitivePeerDependencies: - - supports-color - - typescript - - stylis@4.3.2: {} + stylis@4.2.0: {} sucrase@3.35.0: dependencies: @@ -16840,29 +19257,24 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-hyperlinks@3.1.0: - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - supports-preserve-symlinks-flag@1.0.0: {} - svg-tags@1.0.0: {} + swap-case@2.0.2: + dependencies: + tslib: 2.8.1 symbol-tree@3.2.4: {} + sync-fetch@0.6.0-2: + dependencies: + node-fetch: 3.3.2 + timeout-signal: 2.0.0 + whatwg-mimetype: 4.0.0 + system-architecture@0.1.0: {} tabbable@6.2.0: {} - table@6.8.2: - dependencies: - ajv: 8.17.1 - lodash.truncate: 4.4.2 - slice-ansi: 4.0.0 - 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.17))(@types/node@22.6.1)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 @@ -16932,6 +19344,8 @@ snapshots: through@2.3.8: {} + timeout-signal@2.0.0: {} + tiny-invariant@1.3.3: {} tiny-warning@1.0.3: {} @@ -16944,16 +19358,24 @@ snapshots: tinypool@1.0.2: {} - tinyrainbow@2.0.0: {} + tinyrainbow@1.2.0: {} tinyspy@3.0.2: {} + title-case@3.0.3: + dependencies: + tslib: 2.8.1 + tldts-core@6.1.47: {} tldts@6.1.47: dependencies: tldts-core: 6.1.47 + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + tmpl@1.0.5: {} to-fast-properties@2.0.0: {} @@ -16982,6 +19404,8 @@ snapshots: ts-interface-checker@0.1.13: {} + ts-log@2.2.7: {} + 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 @@ -17002,11 +19426,15 @@ 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.4.1: {} - tslib@2.7.0: {} + tslib@2.6.2: {} tslib@2.8.1: {} @@ -17036,6 +19464,8 @@ snapshots: type-detect@4.0.8: {} + type-fest@0.21.3: {} + type-fest@0.7.1: {} typedoc-plugin-inline-sources@1.2.1(typedoc@0.26.11(typescript@5.6.2)): @@ -17076,6 +19506,8 @@ snapshots: dependencies: multiformats: 9.9.0 + unc-path-regex@0.1.2: {} + uncrypto@0.1.3: {} undici-types@6.19.8: {} @@ -17156,6 +19588,10 @@ snapshots: universalify@2.0.1: {} + unixify@1.0.0: + dependencies: + normalize-path: 2.1.1 + unpipe@1.0.0: {} unplugin@1.16.0: @@ -17204,12 +19640,22 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + upper-case-first@2.0.2: + dependencies: + tslib: 2.8.1 + + upper-case@2.0.2: + dependencies: + tslib: 2.8.1 + uqr@0.1.2: {} + urlpattern-polyfill@10.0.0: {} + 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 +19667,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 @@ -17323,16 +19769,15 @@ snapshots: - supports-color - terser - 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): + vite-node@2.1.9(@types/node@22.6.1)(terser@5.39.0): dependencies: cac: 6.7.14 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) + pathe: 1.1.2 + vite: 5.4.8(@types/node@22.6.1)(terser@5.39.0) transitivePeerDependencies: - '@types/node' - - jiti - less - lightningcss - sass @@ -17341,8 +19786,19 @@ snapshots: - sugarss - supports-color - terser - - tsx - - yaml + + vite-plugin-sitemap@0.7.1: {} + + vite-tsconfig-paths@5.1.4(typescript@5.6.2)(vite@6.2.5(@types/node@22.6.1)(jiti@2.4.2)(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@2.4.2)(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: @@ -17354,7 +19810,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.1): + vite@6.2.5(@types/node@22.6.1)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.1): dependencies: esbuild: 0.25.2 postcss: 8.5.3 @@ -17362,39 +19818,37 @@ snapshots: optionalDependencies: '@types/node': 22.6.1 fsevents: 2.3.3 - jiti: 1.21.6 + jiti: 2.4.2 terser: 5.39.0 tsx: 4.19.2 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): + vitest@2.1.9(@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': 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 + '@vitest/expect': 2.1.9 + '@vitest/mocker': 2.1.9(vite@5.4.8(@types/node@22.6.1)(terser@5.39.0)) + '@vitest/pretty-format': 2.1.9 + '@vitest/runner': 2.1.9 + '@vitest/snapshot': 2.1.9 + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 chai: 5.2.0 debug: 4.4.0 expect-type: 1.2.1 magic-string: 0.30.17 - pathe: 2.0.3 + pathe: 1.1.2 std-env: 3.9.0 tinybench: 2.9.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) + tinyrainbow: 1.2.0 + vite: 5.4.8(@types/node@22.6.1)(terser@5.39.0) + vite-node: 2.1.9(@types/node@22.6.1)(terser@5.39.0) 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 @@ -17404,12 +19858,10 @@ 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.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 +19879,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 @@ -17495,10 +19947,10 @@ snapshots: dependencies: xml-name-validator: 5.0.0 - wagmi@2.12.14(@tanstack/query-core@5.62.0)(@tanstack/react-query@5.62.0(react@18.3.1))(@types/react@18.3.9)(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): + wagmi@2.12.14(@tanstack/query-core@5.62.0)(@tanstack/react-query@5.62.0(react@18.3.1))(@types/react@18.3.9)(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): dependencies: '@tanstack/react-query': 5.62.0(react@18.3.1) - '@wagmi/connectors': 5.1.13(@types/react@18.3.9)(@wagmi/core@2.13.7(@tanstack/query-core@5.62.0)(@types/react@18.3.9)(react@18.3.1)(typescript@5.6.2)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + '@wagmi/connectors': 5.1.13(@types/react@18.3.9)(@wagmi/core@2.13.7(@tanstack/query-core@5.62.0)(@types/react@18.3.9)(react@18.3.1)(typescript@5.6.2)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.9)(react-dom@18.3.1(react@18.3.1))(react-native@0.75.3(@babel/core@7.26.0)(@babel/preset-env@7.25.4(@babel/core@7.26.0))(@types/react@18.3.9)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.6.2)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.39.0)(typescript@5.6.2)(utf-8-validate@5.0.10)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) '@wagmi/core': 2.13.7(@tanstack/query-core@5.62.0)(@types/react@18.3.9)(react@18.3.1)(typescript@5.6.2)(viem@2.22.1(bufferutil@4.0.9)(typescript@5.6.2)(utf-8-validate@5.0.10)(zod@3.23.8)) react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) @@ -17540,6 +19992,8 @@ snapshots: dependencies: defaults: 1.0.4 + web-streams-polyfill@3.3.3: {} + webauthn-p256@0.0.10: dependencies: '@noble/curves': 1.7.0 @@ -17581,10 +20035,6 @@ snapshots: gopd: 1.0.1 has-tostringtag: 1.0.2 - which@1.3.1: - dependencies: - isexe: 2.0.0 - which@2.0.2: dependencies: isexe: 2.0.0 @@ -17626,11 +20076,6 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 - write-file-atomic@5.0.1: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 4.1.0 - ws@6.2.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: async-limiter: 1.0.1 @@ -17672,6 +20117,10 @@ snapshots: yallist@3.1.1: {} + yaml-ast-parser@0.0.43: {} + + yaml@1.10.2: {} + yaml@2.5.1: {} yaml@2.7.0: {} diff --git a/src/components/pageComponents/NotFound404.tsx b/src/components/pageComponents/NotFound404.tsx index e49f331e..596bae87 100644 --- a/src/components/pageComponents/NotFound404.tsx +++ b/src/components/pageComponents/NotFound404.tsx @@ -1,10 +1,7 @@ -import styled from 'styled-components' - -import { GeneralMessage } from '@bootnodedev/db-ui-toolkit' +import { GeneralMessage } from '@/src/components/sharedComponents/ui/GeneralMessage' +import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' import { useNavigate } from '@tanstack/react-router' -import { PrimaryButton } from '@/src/components/sharedComponents/ui/Buttons' - const Icon = () => ( ( ) -const Wrapper = styled(GeneralMessage)` - margin: auto; -` - -const HomeButton = styled(PrimaryButton)` - height: 44px; - font-size: 1.8rem; - width: 100%; -` - const NotFound404 = ({ ...restProps }) => { const navigate = useNavigate() return ( - navigate({ to: '/' })}>Home} + navigate({ to: '/' })} + width="100%" + > + Home + + } icon={} message="The page you are looking for might have been removed, had its name changed, or is temporarily unavailable." title="404 - Not Found" 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..c9a9ad31 --- /dev/null +++ b/src/components/pageComponents/home/Examples/Item/Badge.tsx @@ -0,0 +1,37 @@ +import { Flex, type FlexProps } from '@chakra-ui/react' +import type { FC } from 'react' + +const Badge: FC = ({ children = <>Demo, ...restProps }) => { + return ( + + {children} + + ) +} + +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..f36b23e9 --- /dev/null +++ b/src/components/pageComponents/home/Examples/Item/DocumentationButton.tsx @@ -0,0 +1,76 @@ +import { Link, type LinkProps } from '@chakra-ui/react' +import type { FC } from 'react' + +const Icon = () => ( + + + +) + +const DocumentationButton: FC = ({ children = 'Documentation', ...restProps }) => ( + + {children} + +) + +export default DocumentationButton 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..5e8deec4 --- /dev/null +++ b/src/components/pageComponents/home/Examples/Item/SourceCodeButton.tsx @@ -0,0 +1,76 @@ +import { Link, type LinkProps } from '@chakra-ui/react' +import type { FC } from 'react' + +const Icon = () => ( + + + +) + +const SourceCodeButton: FC = ({ children = 'Source code', ...restProps }) => ( + + {children} + +) + +export default SourceCodeButton 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..de790abe --- /dev/null +++ b/src/components/pageComponents/home/Examples/Item/index.tsx @@ -0,0 +1,132 @@ +import Badge 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' +import { Flex, Heading, Text } from '@chakra-ui/react' +import type { FC, HTMLAttributes, ReactNode } from 'react' + +export interface Props extends HTMLAttributes { + demo: ReactNode + href?: string + icon: ReactNode + sourceCodeHref?: string + text: string | ReactNode + title: string +} + +const Item: FC = ({ demo, href, icon, sourceCodeHref, text, title, ...restProps }) => { + return ( + + + + {icon} + + + {title} + + + {text} + + + {href && ( + + )} + {sourceCodeHref && ( + + )} + + + + + {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..064b59d8 --- /dev/null +++ b/src/components/pageComponents/home/Examples/List.tsx @@ -0,0 +1,56 @@ +import Item, { type Props as ItemProps } from '@/src/components/pageComponents/home/Examples/Item' +import { Flex, Heading } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +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/Ens.tsx b/src/components/pageComponents/home/Examples/assets/Ens.tsx new file mode 100644 index 00000000..93917f4a --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Ens.tsx @@ -0,0 +1,22 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +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..da7597b8 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/IPFSImage.tsx @@ -0,0 +1,22 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +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..345f230f --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/InputAddress.tsx @@ -0,0 +1,22 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon diff --git a/src/components/pageComponents/home/Examples/assets/Optimism.tsx b/src/components/pageComponents/home/Examples/assets/Optimism.tsx new file mode 100644 index 00000000..6fef5903 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Optimism.tsx @@ -0,0 +1,33 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +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..65c8b41d --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Sign.tsx @@ -0,0 +1,22 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +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..7e89dc68 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Subgraph.tsx @@ -0,0 +1,22 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +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..ad2661c4 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/SubgraphStatus.tsx @@ -0,0 +1,22 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +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..0b911bee --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Switch.tsx @@ -0,0 +1,22 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +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..78c24121 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/TokenInput.tsx @@ -0,0 +1,22 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +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..4d6819c7 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/TokenList.tsx @@ -0,0 +1,22 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +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..75ba818c --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Transaction.tsx @@ -0,0 +1,22 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +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..c6eb1071 --- /dev/null +++ b/src/components/pageComponents/home/Examples/assets/Wallet.tsx @@ -0,0 +1,22 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +const Icon: FC> = ({ ...restProps }) => ( + + + +) + +export default Icon 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..5a1e74bb --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx @@ -0,0 +1,160 @@ +import { OptionsDropdown } from '@/src/components/pageComponents/home/Examples/demos/OptionsDropdown' +import Spinner from '@/src/components/sharedComponents/ui/Spinner' +import { Flex, Heading, Input } from '@chakra-ui/react' +import { type ChangeEvent, useEffect, useState } from 'react' +import { useDebouncedCallback } from 'use-debounce' +import type { Address } from 'viem' +import { useEnsName } from 'wagmi' +import { mainnet } from 'wagmi/chains' + +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) + } + + const addresses = [ + '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' as Address, + '0xaed56A64169A1eD7fFD83619A211b55a13f9F974' as Address, + '0x14536667Cd30e52C0b458BaACcB9faDA7046E056' as Address, + '0x8BCBd56588d77cd06C7930c09aB55ca7EF09b395' as Address, + ] + + const makeItem = (address: Address) => { + return { + label: address, + onClick: () => setValue(address), + } + } + + const items = addresses.map((item) => makeItem(item)) + + useEffect(() => { + debouncedSearch(value as Address) + }, [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..c4740639 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/HashDemo.tsx @@ -0,0 +1,65 @@ +import Hash from '@/src/components/sharedComponents/Hash' +import { toaster } from '@/src/components/ui/toaster' +import { getExplorerLink } from '@/src/utils/getExplorerLink' +import type { FlexProps } from '@chakra-ui/react' +import type { FC } from 'react' +import type { Address, Chain } from 'viem' + +interface Props extends FlexProps { + chain: Chain + hash: Address | undefined + truncatedHashLength?: number | 'disabled' +} + +/** + * 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: FC = ({ chain, hash, truncatedHashLength }) => { + const onCopy = (message: string) => { + const timeDelay = 2500 + + navigator.clipboard.writeText(message) + toaster.create({ + description: 'Copied to the clipboard!', + duration: timeDelay, + type: 'success', + id: 'copy-to-clipboard', + }) + } + return hash ? ( + onCopy(hash)} + paddingY={0} + paddingX={4} + showCopyButton + truncatedHashLength={truncatedHashLength} + /> + ) : null +} + +export default HashDemo diff --git a/src/components/pageComponents/home/Examples/demos/HashHandlingDemo.tsx b/src/components/pageComponents/home/Examples/demos/HashHandlingDemo.tsx new file mode 100644 index 00000000..dea29677 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/HashHandlingDemo.tsx @@ -0,0 +1,195 @@ +import HashDemo from '@/src/components/pageComponents/home/Examples/demos/HashDemo' +import HashInput from '@/src/components/sharedComponents/HashInput' +import Spinner from '@/src/components/sharedComponents/ui/Spinner' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' +import type { DetectedHash } from '@/src/utils/hash' +import { Box, Flex, Grid, Input, chakra } from '@chakra-ui/react' +import { useState } from 'react' +import type { Address } from 'viem' +import * as chains from 'viem/chains' + +const AlertIcon = () => ( + + Alert Icon + + +) + +const IconOK = ({ ...restProps }) => ( + + Checkmark Icon + + +) + +/** + * 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 HashHandlingDemo = ({ ...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 + + )} + + + + ) +} + +export default HashHandlingDemo diff --git a/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger/Wrapper.tsx b/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger/Wrapper.tsx new file mode 100644 index 00000000..0765704e --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger/Wrapper.tsx @@ -0,0 +1,59 @@ +import { Flex, Heading } from '@chakra-ui/react' +import type { ComponentProps, FC, ReactNode } from 'react' + +interface Props extends Omit, 'title'> { + title: string | ReactNode +} + +const WrapperComponent: FC = ({ children, title, ...restProps }) => { + return ( + + + {title} + + {children} + + ) +} + +export default WrapperComponent diff --git a/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger/index.tsx b/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger/index.tsx new file mode 100644 index 00000000..6c03cd57 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger/index.tsx @@ -0,0 +1,83 @@ +import Wrapper from '@/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger/Wrapper' +import Hash from '@/src/components/sharedComponents/Hash' +import TransactionButton from '@/src/components/sharedComponents/TransactionButton' +import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' +import { getContract } from '@/src/constants/contracts/contracts' +import { useL1CrossDomainMessengerProxy } from '@/src/hooks/useOPL1CrossDomainMessengerProxy' +import { useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' +import { getExplorerLink } from '@/src/utils/getExplorerLink' +import { withSuspenseAndRetry } from '@/src/utils/suspenseWrapper' +import { Flex, Span } from '@chakra-ui/react' +import { useState } from 'react' +import type { Address } from 'viem' +import { parseEther } from 'viem' +import { optimismSepolia, sepolia } from 'viem/chains' +import { extractTransactionDepositedLogs, getL2TransactionHash } from 'viem/op-stack' + +const OptimismCrossDomainMessenger = withWalletStatusVerifier( + withSuspenseAndRetry(() => { + // https://sepolia-optimism.etherscan.io/address/0xb50201558b00496a145fe76f7424749556e326d8 + const AAVEProxy = '0xb50201558b00496a145fe76f7424749556e326d8' + const { address: walletAddress, readOnlyClient } = useWeb3StatusConnected() + + const contract = getContract('AAVEWeth', optimismSepolia.id) + const depositValue = parseEther('0.01') + + const [l2Hash, setL2Hash] = useState
(null) + + const sendCrossChainMessage = useL1CrossDomainMessengerProxy({ + fromChain: sepolia, + contractName: 'AAVEWeth', + functionName: 'depositETH', + l2ContractAddress: contract.address, + args: [AAVEProxy, walletAddress, 0], + value: depositValue, + }) + + return ( + +

+ Deposit 0.01 ETH in{' '} + + Optimism Sepolia AAVE market + {' '} + from Sepolia. +

+ { + setL2Hash(null) + const hash = await sendCrossChainMessage() + const receipt = await readOnlyClient.waitForTransactionReceipt({ hash }) + const [log] = extractTransactionDepositedLogs(receipt) + const l2Hash = getL2TransactionHash({ log }) + setL2Hash(l2Hash) + return hash + }} + > + Deposit ETH + + {l2Hash && ( + + OpSepolia tx + + + )} +
+ ) + }), + { chainId: sepolia.id }, +) + +export default OptimismCrossDomainMessenger diff --git a/src/components/pageComponents/home/Examples/demos/OptionsDropdown/index.tsx b/src/components/pageComponents/home/Examples/demos/OptionsDropdown/index.tsx new file mode 100644 index 00000000..aa33697a --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/OptionsDropdown/index.tsx @@ -0,0 +1,124 @@ +import { Box, type BoxProps, Menu, Portal, chakra } from '@chakra-ui/react' +import { type FC, useState } from 'react' +import { buttonStyles, dropdownStyles } from './styles' + +const ChevronDown = ({ ...restProps }) => ( + + + +) + +interface Item { + label: string + onClick?: () => void +} + +export const OptionsDropdown: FC< + { + placeholder?: string + items: Array + currentItem?: string + } & BoxProps +> = ({ items, placeholder }) => { + const [currentItem, setCurrentItem] = useState('') + + return ( + + + + + {placeholder + ? placeholder + : currentItem + ? items.find(({ label }) => label === currentItem)?.label + : items[0].label} + + + + + + + {items.map(({ label, onClick }) => ( + { + if (onClick) { + onClick() + } + setCurrentItem(label) + }} + value={label} + _hover={{ + backgroundColor: 'var(--theme-dropdown-item-background-color-hover)', + color: 'var(--theme-dropdown-item-color-hover)', + borderBottom: '1px solid var( --theme-dropdown-item-border-color-hover)', + }} + _active={{ + backgroundColor: 'var(--theme-dropdown-item-background-color-active)', + color: 'var(--theme-dropdown-item-color-active)', + borderBottom: '1px solid var( --theme-dropdown-item-border-color-active)', + }} + > + {label} + + ))} + + + + + + ) +} + +export default OptionsDropdown diff --git a/src/components/pageComponents/home/Examples/demos/OptionsDropdown/styles.ts b/src/components/pageComponents/home/Examples/demos/OptionsDropdown/styles.ts new file mode 100644 index 00000000..9718a9b6 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/OptionsDropdown/styles.ts @@ -0,0 +1,55 @@ +export const buttonStyles = { + 'html.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': '#b2b4d0', + '--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', + }, + 'html.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', + }, +} + +export const dropdownStyles = { + 'html.light &': { + '--theme-dropdown-background-color': '#fff', + '--theme-dropdown-border-color': '#fff', + '--theme-dropdown-box-shadow': '0 0 20px 0 rgb(0 0 0 / 8%)', + '--theme-dropdown-item-background-color': 'transparent', + '--theme-dropdown-item-background-color-hover': 'rgb(0 0 0 / 2%)', + '--theme-dropdown-item-background-color-active': 'rgb(0 0 0 / 5%)', + '--theme-dropdown-item-color': '#2e3048', + '--theme-dropdown-item-color-hover': '#2e3048', + '--theme-dropdown-item-color-active': '#2e3048', + '--theme-dropdown-item-border-color': '#f0f0f0', + '--theme-dropdown-item-border-color-hover': '#f0f0f0', + '--theme-dropdown-item-border-color-active': '#f0f0f0', + }, + 'html.dark &': { + '--theme-dropdown-background-color': '#292b43', + '--theme-dropdown-border-color': '#292b43', + '--theme-dropdown-box-shadow': '0 9.6px 13px 0 rgb(0 0 0 / 8%)', + '--theme-dropdown-item-background-color': 'transparent', + '--theme-dropdown-item-background-color-hover': 'rgb(255 255 255 / 2%)', + '--theme-dropdown-item-background-color-active': 'rgb(255 255 255 / 5%)', + '--theme-dropdown-item-color': '#fff', + '--theme-dropdown-item-color-hover': '#fff', + '--theme-dropdown-item-color-active': '#fff', + '--theme-dropdown-item-border-color': '#4b4d60', + '--theme-dropdown-item-border-color-hover': '#4b4d60', + '--theme-dropdown-item-border-color-active': '#4b4d60', + }, +} 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..c7786b49 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/SignMessageDemo.tsx @@ -0,0 +1,29 @@ +import SignButton from '@/src/components/sharedComponents/SignButton' +import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' + +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 SignMessageDemo = () => { + return ( + + ) +} + +export default SignMessageDemo diff --git a/src/components/pageComponents/home/Examples/demos/SubgraphDemo/index.tsx b/src/components/pageComponents/home/Examples/demos/SubgraphDemo/index.tsx new file mode 100644 index 00000000..8676c454 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/SubgraphDemo/index.tsx @@ -0,0 +1,326 @@ +import { OptionsDropdown } from '@/src/components/pageComponents/home/Examples/demos/OptionsDropdown' +import Arbitrum from '@/src/components/pageComponents/home/Examples/demos/assets/Arbitrum' +import Base from '@/src/components/pageComponents/home/Examples/demos/assets/Base' +import Optimism from '@/src/components/pageComponents/home/Examples/demos/assets/Optimism' +import Polygon from '@/src/components/pageComponents/home/Examples/demos/assets/Polygon' +import CopyButton from '@/src/components/sharedComponents/ui/CopyButton' +import ExternalLink from '@/src/components/sharedComponents/ui/ExternalLink' +import { toaster } from '@/src/components/ui/toaster' +import { env } from '@/src/env' +import { allAaveReservesQueryDocument } from '@/src/subgraphs/queries/aave/reserves' +import { allUniswapPoolsQueryDocument } from '@/src/subgraphs/queries/uniswap/pools' +import { withSuspenseAndRetry } from '@/src/utils/suspenseWrapper' +import { generateSchemasMapping } from '@bootnodedev/db-subgraph' +import { Box, Flex, Heading, Skeleton, Span } from '@chakra-ui/react' +import { useSuspenseQuery } from '@tanstack/react-query' +import request from 'graphql-request' +import { useState } from 'react' +import { type Chain, arbitrum, base, optimism, polygon } from 'viem/chains' + +const chainNameMapping: { [key: number]: string } = { + [arbitrum.id]: 'arbitrum', + [optimism.id]: 'optimism', + [polygon.id]: 'polygon', +} + +const Copy = ({ value }: { value: string }) => { + const handleCopy = () => { + const timeDelay = 2500 + toaster.create({ + duration: timeDelay, + type: 'success', + id: 'copy-to-clipboard', + description: 'Copied to the clipboard!', + }) + } + + return ( + + ) +} + +export const getNetworkIcon = (chainName: string) => ( + <> + {chainName === 'arbitrum one' && ( + + )} + {chainName === 'polygon' && ( + + )} + {chainName === 'op mainnet' && ( + + )} + {chainName === 'base' && ( + + )} + +) + +export const SkeletonLoadingItem = () => ( + + + + + + + +) + +const appSchemas = generateSchemasMapping({ + // biome-ignore lint/style/noNonNullAssertion: somebody else's code + apiKey: env.PUBLIC_SUBGRAPHS_API_KEY!, + // biome-ignore lint/style/noNonNullAssertion: somebody else's code + chainsResourceIds: env.PUBLIC_SUBGRAPHS_CHAINS_RESOURCE_IDS!, + environment: env.PUBLIC_SUBGRAPHS_ENVIRONMENT, + productionUrl: env.PUBLIC_SUBGRAPHS_PRODUCTION_URL, +}) + +const Uniswap = withSuspenseAndRetry(({ chain }: { chain: Chain }) => { + const { data } = useSuspenseQuery({ + queryKey: ['allUniswapPools', chain.id], + queryFn: async () => { + const { positions } = await request( + appSchemas.uniswap[chain.id], + allUniswapPoolsQueryDocument, + ) + return positions + }, + }) + + const baseUrl = `https://app.uniswap.org/explore/pools/${chainNameMapping[chain.id]}/` + + return ( + + + Uniswap Pool {getNetworkIcon(chain.name.toLowerCase())} + + {data.map((position) => ( + + {position.pool.symbol} + + + + ))} + + ) +}) + +const Aave = withSuspenseAndRetry(() => { + const { data } = useSuspenseQuery({ + queryKey: ['allAaveReserves', base.id], + queryFn: async () => { + const { reserves } = await request(appSchemas.aave[base.id], allAaveReservesQueryDocument) + return reserves + }, + }) + const baseUrl = 'https://app.aave.com/reserve-overview/?marketName=proto_base_v3&underlyingAsset=' + + return ( + + + AAVE Reserves + {getNetworkIcon(base.name.toLowerCase())} + + {data.map(({ id, name, underlyingAsset }) => ( + + + {name} + + + + + ))} + + ) +}) + +const List = ({ ...restProps }) => { + const uniswapNetworks = [optimism, polygon, arbitrum] + const [currentChain, setCurrentChain] = useState(uniswapNetworks[0]) + const chains = [...uniswapNetworks, base] + + const makeItem = (chain: Chain | undefined) => { + return { + label: chain?.name || '', + onClick: () => setCurrentChain(chain), + } + } + + const items = chains.map((item) => makeItem(item)) + + return ( + + + {uniswapNetworks.map( + (chain) => + currentChain?.id === chain.id && ( + } + /> + ), + )} + {currentChain?.id === base.id && } />} + + ) +} + +export default List diff --git a/src/components/pageComponents/home/Examples/demos/SubgraphStatusDemo/index.tsx b/src/components/pageComponents/home/Examples/demos/SubgraphStatusDemo/index.tsx new file mode 100644 index 00000000..e2f47ecc --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/SubgraphStatusDemo/index.tsx @@ -0,0 +1,183 @@ +import { OptionsDropdown } from '@/src/components/pageComponents/home/Examples/demos/OptionsDropdown' +import { getNetworkIcon } from '@/src/components/pageComponents/home/Examples/demos/SubgraphDemo' +import { env } from '@/src/env' +import { withSuspenseAndRetry } from '@/src/utils/suspenseWrapper' +import { type SchemaMappingConfig, useSubgraphIndexingStatus } from '@bootnodedev/db-subgraph' +import { Flex, Grid, Heading, Skeleton, Span } from '@chakra-ui/react' +import { type FC, useState } from 'react' +import { type Chain, arbitrum, base, optimism, polygon } from 'viem/chains' + +export const SkeletonLoadingItem = () => ( + + + + +) + +const SubgraphStatus: FC<{ + indexingStatus: ReturnType +}> = ({ indexingStatus }) => { + const { chain, isSynced, networkBlockNumber, resource, subgraphBlockNumber } = indexingStatus + + return ( + + + {`${resource}@${chain.id}`} + {getNetworkIcon(chain.name.toLowerCase())} + + + + SG: {subgraphBlockNumber.toString()} + + - + + BC: + {networkBlockNumber?.toString() ?? '-'} + + + + ) +} + +// define the schema configuration for the current implementation and needs +const schemaConfig: SchemaMappingConfig = { + apiKey: env.PUBLIC_SUBGRAPHS_API_KEY, + chainsResourceIds: env.PUBLIC_SUBGRAPHS_CHAINS_RESOURCE_IDS, + environment: env.PUBLIC_SUBGRAPHS_ENVIRONMENT, + productionUrl: env.PUBLIC_SUBGRAPHS_PRODUCTION_URL, +} + +const Uniswap = withSuspenseAndRetry(({ chain }: { chain: Chain }) => { + const indexingStatus = useSubgraphIndexingStatus({ + chain, + resource: 'uniswap', + schemaConfig, + }) + + return +}) + +const Aave = withSuspenseAndRetry(() => { + const indexingStatus = useSubgraphIndexingStatus({ + chain: base, + resource: 'aave', + schemaConfig, + }) + + return +}) + +const uniswapNetworks = [optimism, polygon, arbitrum] + +const List = ({ ...restProps }) => { + const [currentChain, setCurrentChain] = useState(uniswapNetworks[0]) + const chains = [...uniswapNetworks, base] + + const makeItem = (chain: Chain | undefined) => { + return { + label: chain?.name || '', + onClick: () => setCurrentChain(chain), + } + } + + const items = chains.map((item) => makeItem(item)) + + return ( + + + {uniswapNetworks.map( + (chain) => + currentChain?.id === chain.id && ( + } + /> + ), + )} + {currentChain?.id === base.id && } />} + + ) +} + +export default List diff --git a/src/components/pageComponents/home/Examples/demos/SwitchNetworkDemo.tsx b/src/components/pageComponents/home/Examples/demos/SwitchNetworkDemo.tsx new file mode 100644 index 00000000..693dd127 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/SwitchNetworkDemo.tsx @@ -0,0 +1,42 @@ +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' +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' +import { arbitrum, mainnet, optimism, polygon } from 'viem/chains' + +const SwitchNetworkDemo = () => { + const { isWalletConnected } = useWeb3Status() + const networks: Networks = [ + { + icon: , + id: mainnet.id, + label: mainnet.name, + }, + { + icon: , + id: optimism.id, + label: optimism.name, + }, + { + icon: , + id: arbitrum.id, + label: arbitrum.name, + }, + { + icon: , + id: polygon.id, + label: polygon.name, + }, + ] + + return isWalletConnected ? ( + + ) : ( + + ) +} + +export default SwitchNetworkDemo diff --git a/src/components/pageComponents/home/Examples/demos/TokenDropdownDemo.tsx b/src/components/pageComponents/home/Examples/demos/TokenDropdownDemo.tsx new file mode 100644 index 00000000..6df87869 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/TokenDropdownDemo.tsx @@ -0,0 +1,21 @@ +import TokenDropdown from '@/src/components/sharedComponents/TokenDropdown' +import type { Token } from '@/src/types/token' +import { type FC, useState } from 'react' + +const TokenDropdownDemo: FC = ({ ...restProps }) => { + const [currentToken, setCurrentToken] = useState() + + const onTokenSelect = (token: Token | undefined) => { + setCurrentToken(token) + } + + return ( + + ) +} + +export default TokenDropdownDemo diff --git a/src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx b/src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx new file mode 100644 index 00000000..ec9bffa5 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx @@ -0,0 +1,127 @@ +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' +import Polygon from '@/src/components/pageComponents/home/Examples/demos/assets/Polygon' +import TokenInput from '@/src/components/sharedComponents/TokenInput' +import { useTokenInput } from '@/src/components/sharedComponents/TokenInput/useTokenInput' +import type { Networks } from '@/src/components/sharedComponents/TokenSelect/types' +import { useTokenLists } from '@/src/hooks/useTokenLists' +import { useTokenSearch } from '@/src/hooks/useTokenSearch' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' +import { withSuspenseAndRetry } from '@/src/utils/suspenseWrapper' +import { Box, Flex, Skeleton } from '@chakra-ui/react' +import { useState } from 'react' +import { arbitrum, mainnet, optimism, polygon } from 'viem/chains' + +type Options = 'single' | 'multi' + +const SkeletonLoadingTokenInput = () => ( + + + + + +) + +const TokenInputs = withSuspenseAndRetry( + ({ currentTokenInput }: { currentTokenInput: Options }) => { + const { isWalletConnected } = useWeb3Status() + const [currentNetworkId, setCurrentNetworkId] = useState() + const { tokensByChainId } = useTokenLists() + const { searchResult } = useTokenSearch({ + tokens: tokensByChainId[1], + defaultSearchTerm: 'WETH', + }) + const tokenInputMulti = useTokenInput() + const tokenInputSingle = useTokenInput(searchResult[0]) + + const networks: Networks = [ + { + icon: , + id: mainnet.id, + label: mainnet.name, + onClick: () => setCurrentNetworkId(mainnet.id), + }, + { + icon: , + id: optimism.id, + label: optimism.name, + onClick: () => setCurrentNetworkId(optimism.id), + }, + { + icon: , + id: arbitrum.id, + label: arbitrum.name, + onClick: () => setCurrentNetworkId(arbitrum.id), + }, + { + icon: , + id: polygon.id, + label: polygon.name, + onClick: () => setCurrentNetworkId(polygon.id), + }, + ] + + return ( + + ) + }, +) + +/** + * This demo uses the TokenInput component to show how to use it in a single + * token or multi token mode. + */ +const TokenInputDemo = () => { + const [currentTokenInput, setCurrentTokenInput] = useState('single') + const dropdownItems = [ + { label: 'Single token', onClick: () => setCurrentTokenInput('single') }, + { label: 'Multi token', onClick: () => setCurrentTokenInput('multi') }, + ] + + return ( + + + } + /> + + ) +} + +export default TokenInputDemo diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx new file mode 100644 index 00000000..b5009714 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton.tsx @@ -0,0 +1,123 @@ +import Wrapper from '@/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/Wrapper' +import TransactionButton from '@/src/components/sharedComponents/TransactionButton' +import { useSuspenseReadErc20Allowance } from '@/src/hooks/generated' +import { useWeb3Status, useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' +import type { Token } from '@/src/types/token' +import { getExplorerLink } from '@/src/utils/getExplorerLink' +import type { FC } from 'react' +import { type Address, type Hash, type TransactionReceipt, erc20Abi } from 'viem' +import * as chains from 'viem/chains' +import { useWriteContract } from 'wagmi' + +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 { isWalletConnected, walletChainId } = useWeb3Status() + + 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], + }) + } + handleApprove.methodId = 'Approve USDC' + + 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 isApprovalRequired ? ( + + getAllowance()} + transaction={handleApprove} + > + Approve + + + ) : ( + + Supply {token.symbol} to the{' '} + + AAVE staging contract + + . + + } + title="Execute the transaction" + > + + {label} + + + ) +} + +export default ERC20ApproveAndTransferButton diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/MintUSDC.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/MintUSDC.tsx new file mode 100644 index 00000000..7dbad8f9 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/MintUSDC.tsx @@ -0,0 +1,35 @@ +import TransactionButton from '@/src/components/sharedComponents/TransactionButton' +import { AaveFaucetABI } from '@/src/constants/contracts/abis/AaveFaucet' +import { getContract } from '@/src/constants/contracts/contracts' +import { useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' +import { sepolia } from 'viem/chains' +import { useWriteContract } from 'wagmi' + +export default function MintUSDC({ onSuccess }: { onSuccess: () => void }) { + const { address } = useWeb3StatusConnected() + const { writeContractAsync } = useWriteContract() + const aaveContract = getContract('AaveFaucet', sepolia.id) + const aaveUSDC = '0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8' + + const handleMint = () => { + return writeContractAsync({ + abi: AaveFaucetABI, + address: aaveContract.address, + functionName: 'mint', + args: [aaveUSDC, address, 10000000000n], + }) + } + handleMint.methodId = 'Mint USDC' + + return ( + + Mint USDC + + ) +} diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx new file mode 100644 index 00000000..14fa3c68 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/index.tsx @@ -0,0 +1,115 @@ +import ERC20ApproveAndTransferButton from '@/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/ERC20ApproveAndTransferButton' +import MintUSDC from '@/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo/MintUSDC' +import Wrapper from '@/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/Wrapper' +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 { NumberType, formatNumberOrString } from '@/src/utils/numberFormat' +import { withSuspense } from '@/src/utils/suspenseWrapper' +import { type Address, formatUnits } from 'viem' +import { sepolia } from 'viem/chains' +import { useWriteContract } from 'wagmi' + +// 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 + +/** + * 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 { address } = useWeb3StatusConnected() + const { writeContractAsync } = useWriteContract() + + const { data: balance, refetch: refetchBalance } = 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], + }) + handleTransaction.methodId = 'Supply USDC' + + const formattedAmount = formatNumberOrString( + formatUnits(amount, tokenUSDC_sepolia.decimals), + NumberType.TokenTx, + ) + + return ( + <> + {balance < amount ? ( + + + + ) : ( + refetchBalance} + spender={spender} + token={tokenUSDC_sepolia} + transaction={handleTransaction} + /> + )} + + ) + }), + { chainId: sepolia.id }, // this DEMO component only works on sepolia chain +) + +export default ERC20ApproveAndTransferButtonDemo diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx new file mode 100644 index 00000000..566553a7 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo.tsx @@ -0,0 +1,89 @@ +import Wrapper from '@/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/Wrapper' +import TransactionButton from '@/src/components/sharedComponents/TransactionButton' +import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' +import { GeneralMessage } from '@/src/components/sharedComponents/ui/GeneralMessage' +import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' +import { useWeb3StatusConnected } from '@/src/hooks/useWeb3Status' +import { Dialog, Portal } from '@chakra-ui/react' +import { type ReactElement, useState } from 'react' +import { type Hash, type TransactionReceipt, parseEther } from 'viem' +import { sepolia } from 'viem/chains' +import { useSendTransaction } from 'wagmi' + +/** + * This demo shows how to send a native token transaction. + * + * Works only on Sepolia chain. + */ +const NativeTokenDemo = withWalletStatusVerifier( + () => { + const [isModalOpen, setIsModalOpen] = useState(false) + const { address } = useWeb3StatusConnected() + const { sendTransactionAsync } = useSendTransaction() + const [minedMessage, setMinedMessage] = useState() + + const handleOnMined = (receipt: TransactionReceipt) => { + setMinedMessage( + <> + Hash: {receipt.transactionHash} + , + ) + setIsModalOpen(true) + } + + const handleSendTransaction = (): Promise => { + // Send native token + return sendTransactionAsync({ + to: address, + value: parseEther('0.1'), + }) + } + handleSendTransaction.methodId = 'sendTransaction' + + return ( + + + + Send 0.1 Sepolia ETH + + + + + + + { + setIsModalOpen(false) + setMinedMessage('') + }} + > + Close + + } + message={minedMessage} + title={'Transaction completed!'} + /> + + + + + ) + }, + { + chainId: sepolia.id, // this DEMO component only works on sepolia chain + }, +) + +export default NativeTokenDemo diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/Wrapper.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/Wrapper.tsx new file mode 100644 index 00000000..69e9430b --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/Wrapper.tsx @@ -0,0 +1,75 @@ +import { Flex, Heading, Span } from '@chakra-ui/react' +import type { ComponentProps, FC, ReactNode } from 'react' + +interface Props extends Omit, '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 new file mode 100644 index 00000000..856420ee --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/index.tsx @@ -0,0 +1,38 @@ +import { OptionsDropdown } from '@/src/components/pageComponents/home/Examples/demos/OptionsDropdown' +import ERC20ApproveAndTransferButtonDemo from '@/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/ERC20ApproveAndTransferButtonDemo' +import NativeTokenDemo from '@/src/components/pageComponents/home/Examples/demos/TransactionButtonDemo/NativeTokenDemo' +import { WalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' +import { Flex } from '@chakra-ui/react' +import { useState } from 'react' +import { sepolia } from 'wagmi/chains' + +type Options = 'erc20' | 'native' + +const TransactionButtonDemo = () => { + const [currentTokenInput, setCurrentTokenInput] = useState('erc20') + const items = [ + { label: 'ERC20 token (USDC)', onClick: () => setCurrentTokenInput('erc20') }, + { label: 'ETH (Native)', onClick: () => setCurrentTokenInput('native') }, + ] + + return ( + + <> + + + {currentTokenInput === 'erc20' && } + {currentTokenInput === 'native' && } + + + + ) +} + +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..4ac1d0a9 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/assets/Arbitrum.tsx @@ -0,0 +1,49 @@ +import { type HTMLChakraProps, chakra } from '@chakra-ui/react' +import type { FC, SVGAttributes } from 'react' + +const Icon: FC & SVGAttributes> = ({ ...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..b862c291 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/assets/Base.tsx @@ -0,0 +1,27 @@ +import { type HTMLChakraProps, chakra } from '@chakra-ui/react' +import type { FC, SVGAttributes } from 'react' + +const Icon: FC & SVGAttributes> = ({ ...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..e9c354b0 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/assets/Eth.tsx @@ -0,0 +1,52 @@ +import { type HTMLChakraProps, chakra } from '@chakra-ui/react' +import type { FC, SVGAttributes } from 'react' + +const Icon: FC & SVGAttributes> = ({ ...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..278b2420 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/assets/Optimism.tsx @@ -0,0 +1,32 @@ +import { type HTMLChakraProps, chakra } from '@chakra-ui/react' +import type { FC, SVGAttributes } from 'react' + +const Icon: FC & SVGAttributes> = ({ ...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..1a18d6a0 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/assets/Polygon.tsx @@ -0,0 +1,25 @@ +import { type HTMLChakraProps, chakra } from '@chakra-ui/react' +import type { FC, SVGAttributes } from 'react' + +const Icon: FC & SVGAttributes> = ({ ...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..52a05bdf --- /dev/null +++ b/src/components/pageComponents/home/Examples/index.tsx @@ -0,0 +1,228 @@ +import type { 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 ImgInputAddress from '@/src/components/pageComponents/home/Examples/assets/InputAddress' +import OptimismIcon from '@/src/components/pageComponents/home/Examples/assets/Optimism' +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 ImgWallet from '@/src/components/pageComponents/home/Examples/assets/Wallet' +import EnsNameDemo from '@/src/components/pageComponents/home/Examples/demos/EnsNameDemo' +import HashHandlingDemo from '@/src/components/pageComponents/home/Examples/demos/HashHandlingDemo' +import OptimismCrossDomainMessenger from '@/src/components/pageComponents/home/Examples/demos/OptimismCrossDomainMessenger' +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 { Inner } from '@/src/components/sharedComponents/ui/Inner' +import { ConnectWalletButton as ConnectWalletButtonDemo } from '@/src/providers/Web3Provider' +import { Box } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +const Examples: FC> = ({ ...restProps }) => { + const items: ItemProps[] = [ + { + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/functions/components_sharedComponents_ConnectButton.ConnectButton.html', + icon: , + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/a524d9d65069652de1d187514cc8d635c2d075fd/src/lib/wallets/connectkit.config.tsx', + text: ( + <> + Connect to and disconnect from a cryptocurrency wallet, display your{' '} + + avatar + {' '} + and address. + + ), + title: 'Wallet connectivity', + }, + { + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/functions/components_sharedComponents_Hash.Hash.html', + icon: , + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/f75be6325de83cfef9753bb29f10f8b6e4679cca/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 + wallet is connected to (defaults to mainnet). + + ), + title: 'Hash handling', + }, + { + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/functions/components_sharedComponents_TokenDropdown.TokenDropdown.html', + icon: , + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/f75be6325de83cfef9753bb29f10f8b6e4679cca/src/components/pageComponents/home/Examples/demos/TokenDropdownDemo.tsx#L13', + text: ( + <> + Allows you to search or select tokens from a list. Uses our{' '} + + TokenSelect + {' '} + component internally. + + ), + title: 'Token dropdown', + }, + { + demo: , + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/f75be6325de83cfef9753bb29f10f8b6e4679cca/src/components/pageComponents/home/Examples/demos/TokenInputDemo.tsx#L38', + href: 'https://bootnodedev.github.io/dAppBooster/functions/components_sharedComponents_TokenInput.TokenInput.html', + icon: , + 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', + }, + { + 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/components_sharedComponents_SwitchNetwork.SwitchNetwork.html', + icon: , + text: 'Learn how to add or switch networks in supported wallets.', + title: 'Add / switch network', + }, + + { + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/dac8165b48832fae2fda82ad5e334f972e187d10/src/components/pageComponents/home/Examples/demos/SubgraphDemo/List.tsx#L249', + demo: , + href: 'https://docs.dappbooster.dev/plugins/subgraphs', + icon: , + text: 'Connect to subgraphs and fetch data from the blockchain the easy way.', + title: 'Subgraphs', + }, + { + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/dac8165b48832fae2fda82ad5e334f972e187d10/src/components/pageComponents/home/Examples/demos/SubgraphStatusDemo/List.tsx#L178', + demo: , + href: 'https://docs.dappbooster.dev/plugins/subgraphs', + icon: , + text: "Easily check a subgraph's syncing status.", + title: 'Subgraph status', + }, + { + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/dac8165b48832fae2fda82ad5e334f972e187d10/src/components/pageComponents/home/Examples/demos/EnsNameDemo.tsx#L101', + demo: , + icon: , + text: ( + <> + Resolve{' '} + + ENS + {' '} + names to their corresponding addresses. + + ), + 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/components_sharedComponents_TransactionButton.TransactionButton.html', + icon: , + text: ( + <> + Transfer native cryptocurrency to your own address, or check ERC20 allowance, approve + ERC20 use, and execute a demo transaction. + + ), + 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/components_sharedComponents_SignButton.SignButton.html', + icon: , + text: 'Sign a message with your wallet and get the signature on a dialog.', + title: 'Sign button', + }, + { + sourceCodeHref: + 'https://github.com/BootNodeDev/dAppBoosterLandingPage/blob/a524d9d65069652de1d187514cc8d635c2d075fd/src/hooks/useOPL1CrossDomainMessengerProxy.ts', + demo: , + href: 'https://bootnodedev.github.io/dAppBooster/functions/hooks_useL1CrossDomainMessengerProxy.useL1CrossDomainMessengerProxy.html', + icon: , + text: ( + <> + Learn more in{' '} + + Optimism cross domain messenger. + + + ), + title: 'Optimism cross domain messenger', + }, + ] + + return ( + + + + + + ) +} + +export default Examples diff --git a/src/components/pageComponents/home/Welcome/ButtonCSS.tsx b/src/components/pageComponents/home/Welcome/ButtonCSS.tsx new file mode 100644 index 00000000..48695d3a --- /dev/null +++ b/src/components/pageComponents/home/Welcome/ButtonCSS.tsx @@ -0,0 +1,9 @@ +export const ButtonCSS = { + columnGap: 4, + fontSize: '18px', + height: '50px', + justifyContent: 'start', + minWidth: { base: '132px', md: '156px' }, + paddingLeft: { base: 4, md: 8 }, + paddingRight: { base: 4, md: 8 }, +} 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..5f700527 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/Clouds/index.tsx @@ -0,0 +1,38 @@ +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' +import { Image, type ImageProps } from '@chakra-ui/react' +import type { FC } from 'react' + +const styles = { + display: 'none', + flexGrow: '0', + flexShrink: '0', + minHeight: '306px', + minWidth: { base: 'calc(100vw + 400px)', lg: 'fit-content' }, + objectFit: { base: 'contain', lg: 'cover' }, + objectPosition: { base: 'center bottom', lg: 'center' }, +} + +export const DarkClouds: FC = () => ( + +) + +export const LightClouds: FC = () => ( + +) diff --git a/src/components/pageComponents/home/Welcome/DocsButton.tsx b/src/components/pageComponents/home/Welcome/DocsButton.tsx new file mode 100644 index 00000000..9b2f27d3 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/DocsButton.tsx @@ -0,0 +1,30 @@ +import { ButtonCSS } from '@/src/components/pageComponents/home/Welcome/ButtonCSS' +import SecondaryButton from '@/src/components/sharedComponents/ui/SecondaryButton' +import type { FC } from 'react' + +const Icon = () => ( + + + +) +const DocsButton: FC = ({ ...restProps }) => ( + window.open('https://docs.dappbooster.dev/', '_blank')} + {...ButtonCSS} + {...restProps} + > + + 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..27b7ac2b --- /dev/null +++ b/src/components/pageComponents/home/Welcome/Ghost/index.tsx @@ -0,0 +1,30 @@ +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' +import { Image, type ImageProps } from '@chakra-ui/react' +import type { FC } from 'react' + +const Ghost: FC = () => ( + +) + +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..f40503a2 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/GitClone.tsx @@ -0,0 +1,117 @@ +import CopyButton from '@/src/components/sharedComponents/ui/CopyButton' +import { toaster } from '@/src/components/ui/toaster' +import { Flex, Span } from '@chakra-ui/react' +import { useState } from 'react' + +const CopyIcon = () => ( + + + + +) + +const OkIcon = () => ( + + + +) + +const GitClone = ({ ...restProps }) => { + const [copied, setCopied] = useState(false) + const cloneString = 'git clone git@github.com:BootNodeDev/dAppBooster.git' + + const handleCopy = () => { + const timeDelay = 2500 + toaster.create({ + duration: timeDelay, + id: 'copy-to-clipboard', + type: 'success', + description: 'Copied to the 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..d157d5e2 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/GithubButton.tsx @@ -0,0 +1,31 @@ +import { ButtonCSS } from '@/src/components/pageComponents/home/Welcome/ButtonCSS' +import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' +import type { FC } from 'react' + +const Icon = () => ( + + + +) + +const GithubButton: FC = ({ ...restProps }) => ( + window.open('https://github.com/bootnodedev/dappbooster/', '_blank')} + {...ButtonCSS} + {...restProps} + > + + 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..10371c26 --- /dev/null +++ b/src/components/pageComponents/home/Welcome/index.tsx @@ -0,0 +1,104 @@ +import { DarkClouds, LightClouds } from '@/src/components/pageComponents/home/Welcome/Clouds' +import DocsButton from '@/src/components/pageComponents/home/Welcome/DocsButton' +import Ghost 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' +import { Inner } from '@/src/components/sharedComponents/ui/Inner' +import { Box, Flex, Heading, Text } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +const Welcome: FC> = ({ ...restProps }) => { + return ( + + + + + + + + + + Boost dApp +
+ development on the +
blockchain +
+ + A modern blockchain boilerplate built to quickly get + + you started with your next Web3 project. + + + + + + +
+
+
+ ) +} + +export default Welcome diff --git a/src/components/pageComponents/home/index.tsx b/src/components/pageComponents/home/index.tsx index 7a104f86..18818de3 100644 --- a/src/components/pageComponents/home/index.tsx +++ b/src/components/pageComponents/home/index.tsx @@ -1,124 +1,19 @@ -/** - * 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 Examples from '@/src/components/pageComponents/home/Examples' +import Welcome from '@/src/components/pageComponents/home/Welcome' +import { Flex } from '@chakra-ui/react' -import { Card, Title } from '@bootnodedev/db-ui-toolkit' - -/** - * 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` - 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: var(--theme-body-background-color); - border-radius: 5px; - font-size: 1.3rem; - margin: var(--base-gap) 0 0; - padding: 4px 10px; - white-space: normal; - word-break: break-all; -` - -export const Home = () => { +export const Home = ({ ...restProps }) => { return ( - // You can safely delete this. - - Getting started - - + + + + ) } diff --git a/src/components/sharedComponents/Avatar.tsx b/src/components/sharedComponents/Avatar.tsx index 4b0e500f..8d5d2f2e 100644 --- a/src/components/sharedComponents/Avatar.tsx +++ b/src/components/sharedComponents/Avatar.tsx @@ -1,17 +1,7 @@ +import { Box } from '@chakra-ui/react' import type { ComponentProps, FC } from 'react' -import styled from 'styled-components' - import Jazzicon, { jsNumberForAddress } from 'react-jazzicon' -const ImageWrapper = styled.div<{ - size: number -}>` - border-radius: 50%; - height: ${(props) => `${props.size}px`}; - overflow: hidden; - width: ${(props) => `${props.size}px`}; -` - interface AvatarProps extends ComponentProps<'div'> { address: string ensImage: string | null | undefined @@ -45,7 +35,12 @@ interface AvatarProps extends ComponentProps<'div'> { const Avatar: FC = ({ address, ensImage, ensName, size = 100 }) => { return ( - + {ensImage ? ( {ensName = ({ address, ensImage, ensName, size = 100 }) => seed={jsNumberForAddress(address)} /> )} - + ) } diff --git a/src/components/sharedComponents/BigNumberInput.test.tsx b/src/components/sharedComponents/BigNumberInput.test.tsx index 6266ae78..4b6939e2 100644 --- a/src/components/sharedComponents/BigNumberInput.test.tsx +++ b/src/components/sharedComponents/BigNumberInput.test.tsx @@ -1,6 +1,7 @@ import '@testing-library/jest-dom' import { render, screen } from '@testing-library/react' import { userEvent } from '@testing-library/user-event' +import type { DetailedHTMLProps, InputHTMLAttributes } from 'react' import { parseUnits } from 'viem' import { describe, expect, it, vi } from 'vitest' @@ -124,7 +125,7 @@ describe('BigNumberInput', () => { , HTMLInputElement>)} /> ) setup({ renderInput: customRenderInput }) diff --git a/src/components/sharedComponents/BigNumberInput.tsx b/src/components/sharedComponents/BigNumberInput.tsx index 7448be02..860ee2e6 100644 --- a/src/components/sharedComponents/BigNumberInput.tsx +++ b/src/components/sharedComponents/BigNumberInput.tsx @@ -1,16 +1,14 @@ +import { type InputProps, chakra } from '@chakra-ui/react' import { type ChangeEvent, - type ComponentProps, type FC, type ReactElement, type RefObject, useEffect, useRef, } from 'react' - import { formatUnits, maxUint256, parseUnits } from 'viem' - -export type RenderInputProps = Omit, 'onChange'> & { +export type RenderInputProps = Omit & { onChange: (event: ChangeEvent | string) => void inputRef: RefObject } @@ -130,7 +128,7 @@ export const BigNumberInput: FC = ({ return renderInput ? ( renderInput({ ...inputProps, inputRef }) ) : ( - diff --git a/src/components/sharedComponents/ConnectButton.tsx b/src/components/sharedComponents/ConnectButton.tsx deleted file mode 100644 index 577f09b8..00000000 --- a/src/components/sharedComponents/ConnectButton.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import type { ComponentProps } from 'react' -import styled, { css } from 'styled-components' - -import { Button, breakpointMediaQuery } from '@bootnodedev/db-ui-toolkit' - -const BaseChevronDown = ({ ...restProps }) => ( - - - -) - -const ChevronDown = styled(BaseChevronDown)` - margin: 0 var(--base-gap, 8px); -` - -interface ConnectButtonProps extends ComponentProps<'button'> { - $isConnected?: boolean -} - -const ConnectButton = styled(Button).attrs(({ $isConnected, children }) => { - return { - $variant: 'connect', - $isConnected, - children: ( - <> - {children} - {$isConnected && } - - ), - } -})` - font-size: 1.4rem; - font-weight: 700; - height: 48px; - - ${({ $isConnected }) => - $isConnected && - css` - border-radius: 30px; - font-size: 1.2rem; - height: 44px; - padding-left: var(--base-common-padding, 8px); - padding-right: var(--base-common-padding, 8px); - `} - - ${breakpointMediaQuery( - 'tabletLandscapeStart', - css` - font-size: 1.6rem; - `, - )} -` - -export default ConnectButton diff --git a/src/components/sharedComponents/ConnectButton/index.tsx b/src/components/sharedComponents/ConnectButton/index.tsx new file mode 100644 index 00000000..bf80240d --- /dev/null +++ b/src/components/sharedComponents/ConnectButton/index.tsx @@ -0,0 +1,65 @@ +import { Button } from '@/src/components/sharedComponents/ui/Button' +import { type ButtonProps, chakra } from '@chakra-ui/react' +import type { FC } from 'react' +import styles from './styles' + +const BaseChevronDown = ({ ...restProps }) => ( + + + +) + +const ChevronDown = chakra(BaseChevronDown) + +interface ConnectButtonProps extends ButtonProps { + $isConnected?: boolean +} + +const ConnectButton: FC = ({ $isConnected, children, css, ...restProps }) => { + return ( + + ) +} + +export default ConnectButton diff --git a/src/components/sharedComponents/ConnectButton/styles.ts b/src/components/sharedComponents/ConnectButton/styles.ts new file mode 100644 index 00000000..7b902f04 --- /dev/null +++ b/src/components/sharedComponents/ConnectButton/styles.ts @@ -0,0 +1,26 @@ +export const styles = { + 'html.light &': { + '--background-color': '#fff', + '--background-color-hover': '#fff', + '--border-color': '#fff', + '--border-color-hover': '#fff', + '--color': '#2e3048', + '--color-hover': '#8b46a4', + '--background-color-disabled': '#fff', + '--border-color-disabled': '#fff', + '--color-disabled': '#c5c2cb', + }, + 'html.dark &': { + '--background-color': '#8b46a4', + '--background-color-hover': '#5f6178', + '--border-color': '#8b46a4', + '--border-color-hover': '#5f6178', + '--color': '#fff', + '--color-hover': '#fff', + '--background-color-disabled': '#8b46a4', + '--border-color-disabled': '#8b46a4', + '--color-disabled': '#c5c2cb', + }, +} + +export default styles diff --git a/src/components/sharedComponents/ExplorerLink.tsx b/src/components/sharedComponents/ExplorerLink.tsx index c1040e5a..21b0443b 100644 --- a/src/components/sharedComponents/ExplorerLink.tsx +++ b/src/components/sharedComponents/ExplorerLink.tsx @@ -1,8 +1,8 @@ -import type { ComponentProps, FC } from 'react' - import { type GetExplorerUrlParams, getExplorerLink } from '@/src/utils/getExplorerLink' +import { type LinkProps, chakra } from '@chakra-ui/react' +import type { FC } from 'react' -interface ExplorerLinkProps extends GetExplorerUrlParams, ComponentProps<'a'> { +interface ExplorerLinkProps extends GetExplorerUrlParams, LinkProps { text?: string } @@ -25,12 +25,12 @@ interface ExplorerLinkProps extends GetExplorerUrlParams, ComponentProps<'a'> { */ export const ExplorerLink: FC = ({ text = 'View on explorer', ...props }) => { return ( - {text} - + ) } diff --git a/src/components/sharedComponents/Hash.tsx b/src/components/sharedComponents/Hash.tsx index 6435e15b..5022ee1f 100644 --- a/src/components/sharedComponents/Hash.tsx +++ b/src/components/sharedComponents/Hash.tsx @@ -1,27 +1,10 @@ -import type { ComponentProps, FC, MouseEventHandler } from 'react' -import styled from 'styled-components' - -import { CopyButton, ExternalLink } from '@bootnodedev/db-ui-toolkit' - +import CopyButton from '@/src/components/sharedComponents/ui/CopyButton' +import ExternalLink from '@/src/components/sharedComponents/ui/ExternalLink' import { getTruncatedHash } from '@/src/utils/strings' +import { Flex, type FlexProps, Span } from '@chakra-ui/react' +import type { FC, MouseEventHandler } from 'react' -const Wrapper = styled.div` - align-items: center; - column-gap: var(--base-gap, 8px); - display: flex; - max-width: 100%; -` - -const HashValue = styled.span` - color: inherit; - font-size: inherit; - max-width: fit-content; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -` - -interface HashProps extends Omit, 'onCopy'> { +interface HashProps extends Omit { explorerURL?: string hash: string onCopy?: MouseEventHandler @@ -53,20 +36,33 @@ const Hash: FC = ({ showCopyButton = false, truncatedHashLength = 6, ...restProps -}) => { +}: HashProps) => { return ( - - + + {truncatedHashLength === 'disabled' ? hash : getTruncatedHash(hash, truncatedHashLength)} - + {showCopyButton && ( )} {explorerURL && } - + ) } diff --git a/src/components/sharedComponents/HashInput.tsx b/src/components/sharedComponents/HashInput.tsx index bfea347e..dd9c41ed 100644 --- a/src/components/sharedComponents/HashInput.tsx +++ b/src/components/sharedComponents/HashInput.tsx @@ -1,24 +1,22 @@ +import detectHash, { type DetectedHash } from '@/src/utils/hash' +import { type InputProps, chakra } from '@chakra-ui/react' import { type ChangeEvent, - type ComponentProps, type FC, type ReactElement, useCallback, useEffect, useState, } from 'react' - import { useDebouncedCallback } from 'use-debounce' import type { Chain } from 'viem' -import detectHash, { type DetectedHash } from '@/src/utils/hash' - -interface HashInputProps extends ComponentProps<'input'> { +interface HashInputProps extends InputProps { chain: Chain debounceTime?: number onLoading?: (loading: boolean) => void onSearch: (result: DetectedHash | null) => void - renderInput?: (props: ComponentProps<'input'>) => ReactElement + renderInput?: (props: InputProps) => ReactElement value?: string } @@ -95,7 +93,7 @@ const HashInput: FC = ({ {renderInput ? ( renderInput({ value: input, onChange: handleChange, ...restProps }) ) : ( - , 'onError'> { +interface SignButtonPropsProps extends Omit { label?: string labelSigning?: string message: string @@ -41,8 +41,10 @@ const SignButton: FC = withWalletStatusVerifier( onError, onSign, ...restProps - }) => { - const { isPending, signMessage } = useSignMessage({ + }: SignButtonPropsProps) => { + const { watchSignature } = useTransactionNotification() + + const { isPending, signMessageAsync } = useSignMessage({ mutation: { onSuccess(data) { onSign?.(data) @@ -54,13 +56,18 @@ const SignButton: FC = withWalletStatusVerifier( }) return ( - + ) }, ) diff --git a/src/components/sharedComponents/SwitchNetwork.tsx b/src/components/sharedComponents/SwitchNetwork.tsx index 58ac037d..222183d0 100644 --- a/src/components/sharedComponents/SwitchNetwork.tsx +++ b/src/components/sharedComponents/SwitchNetwork.tsx @@ -1,3 +1,7 @@ +import DropdownButton from '@/src/components/sharedComponents/ui/DropdownButton' +import { MenuContent, MenuItem } from '@/src/components/sharedComponents/ui/Menu' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' +import { Flex, Menu, Portal } from '@chakra-ui/react' import { type ComponentPropsWithoutRef, type FC, @@ -5,15 +9,9 @@ import { useEffect, useState, } from 'react' -import styled from 'styled-components' - -import { Item as BaseItem, Dropdown } from '@bootnodedev/db-ui-toolkit' import * as chains from 'viem/chains' import { useSwitchChain } from 'wagmi' -import { PrimaryButton } from '@/src/components/sharedComponents/ui/Buttons' -import { useWeb3Status } from '@/src/hooks/useWeb3Status' - type NetworkItem = { icon: ReactElement id: number @@ -22,75 +20,6 @@ type NetworkItem = { export type Networks = Array -const ChevronDown = () => ( - - Chevron down - - -) - -const Button = styled(PrimaryButton).attrs(({ children, className = 'switchNetworkButton' }) => { - return { - children: ( - <> - {children} - - ), - type: 'button', - className, - } -})` - font-size: 1.6rem; - font-weight: 500; - height: 48px; - padding-left: calc(var(--base-common-padding, 8px) * 3); - padding-right: calc(var(--base-common-padding, 8px) * 3); - - .chevronDown { - transition: transform var(--base-transition-duration-xs, 0.1s) ease-in-out; - } - - .isActive & { - .chevronDown { - transform: rotate(180deg); - } - } -` - -const NetworkIcon = styled.div.attrs(() => { - return { className: 'switchNetworkNetworkIcon' } -})` - align-items: center; - background-color: var(--theme-switch-network-icon-background-color, #fff); - border-radius: 50%; - display: flex; - height: 24px; - justify-content: center; - overflow: hidden; - width: 24px; -` - -const ListItem = styled(BaseItem).attrs(() => { - return { className: 'switchNetworkListItem' } -})` - font-size: 1.6rem; - min-height: 48px; - width: 250px; -` - interface SwitchNetworkProps extends ComponentPropsWithoutRef<'div'> { networks: Networks } @@ -101,7 +30,7 @@ interface SwitchNetworkProps extends ComponentPropsWithoutRef<'div'> { * @param {SwitchNetworkProps} props - SwitchNetwork component props. * @param {Networks} props.networks - List of networks to display in the dropdown. */ -const SwitchNetwork: FC = ({ networks, ...restProps }) => { +const SwitchNetwork: FC = ({ networks }) => { const findChain = (chainId: number) => Object.values(chains).find((chain) => chain.id === chainId) const { chains: configuredChains, switchChain } = useSwitchChain() @@ -130,31 +59,46 @@ const SwitchNetwork: FC = ({ networks, ...restProps }) => { }, [walletChainId, networks]) return ( - + + + {networkItem ? ( <> - {networkItem?.icon} {networkItem?.label} + + {networkItem?.icon} + {' '} + {networkItem?.label} ) : ( 'Select a network' )} - - } - disabled={!isWalletConnected} - items={networks.map(({ icon, id, label }) => ( - handleClick(id)} - > - {icon} - {label} - - ))} - position="right" - {...restProps} - /> + + + + + + {networks.map(({ icon, id, label }) => ( + handleClick(id)} + value={label} + > + {icon} + {label} + + ))} + + + + ) } diff --git a/src/components/sharedComponents/TokenDropdown/index.tsx b/src/components/sharedComponents/TokenDropdown.tsx similarity index 52% rename from src/components/sharedComponents/TokenDropdown/index.tsx rename to src/components/sharedComponents/TokenDropdown.tsx index f98d3820..60373b15 100644 --- a/src/components/sharedComponents/TokenDropdown/index.tsx +++ b/src/components/sharedComponents/TokenDropdown.tsx @@ -1,41 +1,11 @@ -import type { ComponentPropsWithoutRef, FC, KeyboardEvent } from 'react' -import styled, { css } from 'styled-components' - -import { breakpointMediaQuery, useDropdown } from '@bootnodedev/db-ui-toolkit' - -import DropdownButton from '@/src/components/sharedComponents/TokenDropdown/DropdownButton' import TokenLogo from '@/src/components/sharedComponents/TokenLogo' import TokenSelect, { type TokenSelectProps } from '@/src/components/sharedComponents/TokenSelect' +import DropdownButton from '@/src/components/sharedComponents/ui/DropdownButton' +import { MenuContent } from '@/src/components/sharedComponents/ui/Menu' import type { Token } from '@/src/types/token' - -const Wrapper = styled.span` - ${breakpointMediaQuery( - 'tabletPortraitStart', - css` - .dbuitkDropdownItems { - /** - * Hack-ish way to make the dropdown items appear on the right side of the button - * and avoid the dropdown to be cut off by the screen edge - * - * Should be fixed when / if the dropdown component supports auto positioning in the future - */ - left: auto; - right: 0; - transform: none; - } - `, - )} -` - -const Icon = styled.div<{ iconSize?: number }>` - align-items: center; - border-radius: 50%; - display: flex; - height: ${({ iconSize }) => iconSize}px; - justify-content: center; - overflow: hidden; - width: ${({ iconSize }) => iconSize}px; -` +import { Flex, Menu, Portal } from '@chakra-ui/react' +import type { ComponentPropsWithoutRef, FC } from 'react' +import { useState } from 'react' export interface TokenDropdownProps extends TokenSelectProps { currentToken?: Token | undefined @@ -71,7 +41,7 @@ const TokenDropdown: FC = ({ style, ...restProps }: Props) => { - const { Dropdown, close } = useDropdown() + const [isOpen, setIsOpen] = useState(false) /** * Handle token selection and close the dropdown @@ -79,50 +49,52 @@ const TokenDropdown: FC = ({ */ const handleTokenSelect = (token: Token | undefined) => { onTokenSelect(token) - close('token-dropdown') + setIsOpen(false) } return ( - setIsOpen(state.open)} + positioning={{ placement: 'bottom-end' }} > - - {currentToken ? ( - <> - - - - {currentToken.symbol} - - ) : ( - 'Select token' - )} - - } - className={'tokenDropdown'} - closeOnClick={false} - id="token-dropdown" - items={ - - } - onKeyUp={(e: KeyboardEvent) => { - if (e.key === 'Escape') { - close('token-dropdown') - } - }} - position="center" - /> - + + + {currentToken ? ( + <> + + + + {currentToken.symbol} + + ) : ( + 'Select token' + )} + + + + + + + + + + ) } diff --git a/src/components/sharedComponents/TokenDropdown/DropdownButton.tsx b/src/components/sharedComponents/TokenDropdown/DropdownButton.tsx deleted file mode 100644 index c832e3e3..00000000 --- a/src/components/sharedComponents/TokenDropdown/DropdownButton.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import styled from 'styled-components' - -import { Button } from '@bootnodedev/db-ui-toolkit' - -const ChevronDown = () => ( - - Chevron down - - -) - -const DropdownButton = styled(Button).attrs(({ children }) => ({ - $variant: 'dropdown', - children: ( - <> - {children} - - ), -}))` - font-size: 1.6rem; - font-weight: 500; - height: 48px; - padding-left: calc(var(--base-common-padding, 8px) * 3); - padding-right: calc(var(--base-common-padding, 8px) * 3); - - .chevronDown { - transition: transform var(--base-transition-duration-xs, 0.1s) ease-in-out; - } - - .isActive & { - .chevronDown { - transform: rotate(180deg); - } - } -` - -export default DropdownButton diff --git a/src/components/sharedComponents/TokenInput/Components.tsx b/src/components/sharedComponents/TokenInput/Components.tsx index ab211091..a5a6c059 100644 --- a/src/components/sharedComponents/TokenInput/Components.tsx +++ b/src/components/sharedComponents/TokenInput/Components.tsx @@ -1,10 +1,16 @@ -import styled, { css } from 'styled-components' - import { - Textfield as BaseTextfield, - Button, - breakpointMediaQuery, -} from '@bootnodedev/db-ui-toolkit' + type ButtonProps, + Flex, + type FlexProps, + Heading, + type HeadingProps, + Input, + type InputProps, + Span, + type SpanProps, + chakra, +} from '@chakra-ui/react' +import type { FC } from 'react' const BaseChevronDown = ({ ...restProps }) => ( ( ) -export const Wrapper = styled.div.attrs({ className: 'tokenInput' })` - background-color: var(--theme-token-input-background, #fff); - border-radius: var( - --base-token-input-border-radius, - var(--base-border-radius, 8px) - ); - display: flex; - flex-direction: column; - max-width: 100%; - padding: var(--base-token-input-padding, var(--base-common-padding-xl, 16px)); - row-gap: var(--base-token-input-gap, var(--base-gap, 8px)); -` - -export const Title = styled.h3.attrs({ className: 'tokenInputTitle' })` - color: var(--theme-token-input-title-color, #2e3048); - font-size: 1.4rem; - font-weight: 700; - line-height: 1.2; -` - -export const TopRow = styled.div.attrs({ className: 'tokenInputTopRow' })` - column-gap: var(--base-gap, 8px); - display: flex; - height: 42px; - - ${breakpointMediaQuery( - 'tabletPortraitStart', - css` - height: 58px; - `, - )} -` - -export const Textfield = styled(BaseTextfield).attrs({ - className: 'tokenInputTextfield', -})` - && { - /* Texfield */ - --theme-textfield-background-color: var( - --theme-token-input-textfield-background-color, - #fff - ); - --theme-textfield-background-color-active: var( - --theme-token-input-textfield-background-color-active, - rgb(0 0 0 / 2%) - ); - --theme-textfield-border-color: var( - --theme-token-input-textfield-border-color, - #e2e0e7 - ); - --theme-textfield-border-color-active: var( - --theme-token-input-textfield-border-color-active, - #e2e0e7 - ); - --theme-textfield-color: var(--theme-token-input-textfield-color, #2e3048); - --theme-textfield-color-active: var( - --theme-token-input-textfield-color-active, - #2e3048 - ); - --theme-textfield-placeholder-color: var( - --theme-token-input-textfield-placeholder-color, - rgb(22 29 26 / 60%) - ); - - font-size: 2.4rem; - height: auto; - min-width: 0; - padding: var( - --base-token-input-texfield-padding, - var(--base-common-padding, 8px) - ); - - ${breakpointMediaQuery( - 'tabletPortraitStart', - css` - font-size: 3.2rem; - padding: var( - --base-token-input-texfield-padding, - 0 var(--base-common-padding-xl, 16px) - ); - `, - )} - } -` - -export const ChevronDown = styled(BaseChevronDown)` - margin-left: var(--base-gap, 8px); -` - -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%) - ); - --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, - #e2e0e7 - ); - --theme-button-border-color-active: var( - --theme-token-input-dropdown-button-border-color-active, - #e2e0e7 - ); - --theme-button-color: var(--theme-token-input-dropdown-button-color, #2e3048); - --theme-button-color-hover: var( - --theme-token-input-dropdown-button-color-hover, - #2e3048 - ); +export const Wrapper: FC = ({ children, ...restProps }) => ( + + {children} + +) - flex-shrink: 0; - font-size: 1.2rem; - font-weight: 500; - height: auto; - min-width: 100px; - padding: var( - --base-token-input-dropdown-button-padding, - 0 var(--base-common-padding, 8px) - ); +export const Title: FC = ({ children, ...restProps }) => ( + + {children} + +) - ${breakpointMediaQuery( - 'tabletPortraitStart', - css` - font-size: 1.6rem; - padding: var( - --base-token-input-dropdown-button-padding, - 0 var(--base-common-padding-xl, 16px) - ); - `, - )} -` +export const TopRow: FC = ({ children, ...restProps }) => ( + + {children} + +) -export const DropdownButton = styled(Button).attrs(({ children }) => { - return { - className: 'tokenInputDropdownButton', - children: ( - <> - {children} - - - ), - } -})` - ${ButtonCSS} -` +export const Textfield: FC = ({ children, ...restProps }) => ( + + {children} + +) -export const SingleToken = styled.div.attrs(() => { - return { className: 'tokenInputSingleToken' } -})` - align-items: center; - column-gap: var(--base-button-column-gap, var(--base-gap, 8px)); - cursor: default; - display: flex; +export const ChevronDown = chakra(BaseChevronDown, { + base: { + marginLeft: 2, + }, +}) - ${ButtonCSS} -` +const buttonCSS = { + alignItems: 'center', + backgroundColor: 'var(--dropdown-button-background-color)', + borderColor: 'var(--dropdown-button-border-color)', + borderRadius: 4, + color: 'var(--dropdown-button-color)', + columnGap: 2, + cursor: 'pointer', + display: 'flex', + flexShrink: 0, + fontFamily: '{fonts.body}', + fontSize: { base: '12px', lg: '16px' }, + fontWeight: 500, + height: 'auto', + minWidth: '100px', + padding: { base: 2, lg: 4 }, + _hover: { + backgroundColor: 'var(--dropdown-button-background-color-hover)', + borderColor: 'var(--dropdown-button-border-color-hover)', + color: 'var(--dropdown-button-color-hover)', + }, + _active: { + backgroundColor: 'var(--dropdown-button-background-color-active)', + borderColor: 'var(--dropdown-button-border-color-active)', + color: 'var(--dropdown-button-color-active)', + }, +} -export const ErrorComponent = styled.span` - color: var(--theme-color-danger, #800); - font-size: 1.2rem; - font-weight: 700; - padding: 0; -` +export const DropdownButton: FC = ({ children, ...restProps }) => ( + + {children} + + +) -export const BottomRow = styled.div.attrs(() => { - return { className: 'tokenInputBottomRow' } -})` - column-gap: var(--base-gap, 8px); - display: flex; - justify-content: space-between; -` +export const SingleToken: FC = ({ children, ...restProps }) => ( + + {children} + +) -export const EstimatedUSDValue = styled.div.attrs(() => { - return { className: 'tokenInputEstimatedUSDValue' } -})` - align-items: center; - color: var(--theme-token-input-estimated-usd-color, #4b4d60); - display: flex; - font-size: 1.2rem; - font-weight: 400; - line-height: 1.2; -` +export const ErrorComponent: FC = ({ children, ...restProps }) => ( + + {children} + +) -export const Balance = styled.div.attrs(() => { - return { className: 'tokenInputBalance' } -})` - align-items: center; - color: var(--theme-token-input-balance-color, #4b4d60); - column-gap: var(--base-gap, 8px); - display: flex; -` +export const BottomRow: FC = ({ children, ...restProps }) => ( + + {children} + +) -export const BalanceValue = styled.span.attrs(() => { - return { className: 'tokenInputBalanceValue' } -})` - font-size: 1.2rem; - font-weight: 400; - line-height: 1.2; -` +export const EstimatedUSDValue: FC = ({ children, ...restProps }) => ( + + {children} + +) -export const MaxButton = styled(Button).attrs(() => { - return { - className: 'tokenInputMaxButton', - } -})` - /* Max button */ - --theme-button-background-color: var( - --theme-token-input-max-button-background-color, - #fff - ); - --theme-button-background-color-hover: var( - --theme-token-input-max-button-background-color-hover, - rgb(0 0 0 / 5%) - ); - --theme-button-border-color: var( - --theme-token-input-max-button-border-color, - #e2e0e7 - ); - --theme-button-border-color-hover: var( - --theme-token-input-max-button-border-color-hover, - #e2e0e7 - ); - --theme-button-border-color-active: var( - --theme-token-input-max-button-border-color-active, - #e2e0e7 - ); - --theme-button-color: var(--theme-token-input-max-button-color, #8b46a4); - --theme-button-color-hover: var( - --theme-token-input-max-button-color-hover, - #8b46a4 - ); +export const Balance: FC = ({ children, ...restProps }) => ( + + {children} + +) - font-size: 1.2rem; - font-weight: 400; - height: 22px; - padding-left: var(--base-common-padding, 8px); - padding-right: var(--base-common-padding, 8px); -` +export const BalanceValue: FC = ({ children, ...restProps }) => ( + + {children} + +) -export const Icon = styled.div.attrs<{ $iconSize?: number }>(() => { - return { className: 'tokenInputIcon' } -})` - align-items: center; - border-radius: 50%; - display: flex; - flex-shrink: 0; - height: ${({ $iconSize }) => $iconSize}px; - justify-content: center; - overflow: hidden; - width: ${({ $iconSize }) => $iconSize}px; -` +export const MaxButton: FC = ({ children, ...restProps }) => ( + + {children} + +) -export const CloseButton = styled.button.attrs(() => { - return { children: } -})` - background: none; - border: none; - color: var(--theme-token-select-title-color-default); - cursor: pointer; - position: absolute; - right: calc(var(--base-common-padding, 8px) * 2); - top: calc(var(--base-common-padding, 8px) * 5); +export const Icon: FC<{ $iconSize?: number } & FlexProps> = ({ + $iconSize, + children, + ...restProps +}) => ( + + {children} + +) - &:active { - opacity: 0.7; - } -` +export const CloseButton: FC = ({ children, ...restProps }) => ( + + + +) diff --git a/src/components/sharedComponents/TokenInput/index.tsx b/src/components/sharedComponents/TokenInput/index.tsx index 4c3a1e47..60d60626 100644 --- a/src/components/sharedComponents/TokenInput/index.tsx +++ b/src/components/sharedComponents/TokenInput/index.tsx @@ -1,11 +1,3 @@ -import { type ComponentPropsWithoutRef, type FC, useMemo } from 'react' -import styled from 'styled-components' - -import { Spinner } from '@bootnodedev/db-ui-toolkit' -import { Modal, useModal } from '@faceless-ui/modal' -import { type NumberFormatValues, NumericFormat } from 'react-number-format' -import { formatUnits } from 'viem' - import { BigNumberInput, type BigNumberInputProps, @@ -29,14 +21,14 @@ import { } from '@/src/components/sharedComponents/TokenInput/Components' import type { UseTokenInputReturnType } from '@/src/components/sharedComponents/TokenInput/useTokenInput' import TokenLogo from '@/src/components/sharedComponents/TokenLogo' -import BaseTokenSelect, { - type TokenSelectProps, -} from '@/src/components/sharedComponents/TokenSelect' +import TokenSelect, { type TokenSelectProps } from '@/src/components/sharedComponents/TokenSelect' +import Spinner from '@/src/components/sharedComponents/ui/Spinner' import type { Token } from '@/src/types/token' - -const TokenSelect = styled(BaseTokenSelect)` - position: relative; -` +import { Dialog, type FlexProps, Portal } from '@chakra-ui/react' +import { type FC, useMemo, useState } from 'react' +import { type NumberFormatValues, NumericFormat } from 'react-number-format' +import { formatUnits } from 'viem' +import styles from './styles' interface TokenInputProps extends Omit { singleToken?: boolean @@ -46,7 +38,7 @@ interface TokenInputProps extends Omit { } /** @ignore */ -type Props = ComponentPropsWithoutRef<'div'> & TokenInputProps +type Props = FlexProps & TokenInputProps /** * TokenInput component allows users to input token amounts and select tokens from a list. @@ -65,62 +57,11 @@ type Props = ComponentPropsWithoutRef<'div'> & TokenInputProps * @param {boolean} [props.showAddTokenButton=false] - Optional flag to allow adding a token. Default is false. * @param {boolean} [props.showBalance=false] - Optional flag to show the token balance in the list. Default is false. * @param {boolean} [props.showTopTokens=false] - Optional flag to show the top tokens in the list. Default is false. - * - * @remarks - * Individual CSS classes are available for deep styling of individual components within TokenSelect: - * - * Also theme CSS vars are available for cosmetic changes: - * - * Main wrapper: - * * --theme-token-input-background - * * --base-token-input-border-radius - * * --base-token-input-padding - * * --base-token-input-gap - * - * Title - * * --theme-token-input-title-color - * - * Textfield: - * * --theme-token-input-textfield-background-color - * * --theme-token-input-textfield-background-color-active - * * --theme-token-input-textfield-border-color - * * --theme-token-input-textfield-border-color-active - * * --theme-token-input-textfield-color - * * --theme-token-input-textfield-color-active - * * --theme-token-input-textfield-placeholder-color - * * --base-token-input-texfield-height - * * --base-token-input-texfield-font-size - * - * Dropdown button: - * * --theme-token-input-dropdown-button-background-color - * * --theme-token-input-dropdown-button-background-color-hover - * * --theme-token-input-dropdown-button-border-color - * * --theme-token-input-dropdown-button-border-color-hover - * * --theme-token-input-dropdown-button-border-color-active - * * --theme-token-input-dropdown-button-color - * * --theme-token-input-dropdown-button-color-hover - * * --base-token-input-dropdown-button-padding - * * --base-token-input-texfield-padding - * - * Max Button: - * * --theme-token-input-max-button-background-color - * * --theme-token-input-max-button-background-color-hover - * * --theme-token-input-max-button-border-color - * * --theme-token-input-max-button-border-color-hover - * * --theme-token-input-max-button-border-color-active - * * --theme-token-input-max-button-color - * * --theme-token-input-max-button-color-hover - * - * Estimated USD Value - * * --theme-token-input-estimated-usd-color - * - * Balance - * *--theme-token-input-balance-color - * */ const TokenInput: FC = ({ containerHeight, currentNetworkId, + css, iconSize, itemHeight, networks, @@ -133,7 +74,8 @@ const TokenInput: FC = ({ title, tokenInput, ...restProps -}) => { +}: Props) => { + const [isOpen, setIsOpen] = useState(false) const { amount, amountError, @@ -146,8 +88,6 @@ const TokenInput: FC = ({ setTokenSelected, } = tokenInput - const { closeModal, openModal } = useModal() - const max = useMemo( () => (balance && selectedToken ? balance : BigInt(0)), [balance, selectedToken], @@ -158,7 +98,7 @@ const TokenInput: FC = ({ const handleSelectedToken = (token: Token | undefined) => { setAmount(BigInt(0)) setTokenSelected(token) - closeModal('token-select') + setIsOpen(false) } const handleSetMax = () => { @@ -169,14 +109,6 @@ const TokenInput: FC = ({ setAmountError(error?.message) } - const showTokenSelect = () => { - openModal('token-select') - } - - if (singleToken && !selectedToken) { - return
When single token is true, a token is required.
- } - const CurrentToken = () => selectedToken ? ( <> @@ -192,9 +124,17 @@ const TokenInput: FC = ({ 'Select' ) - return ( - <> - + return singleToken && !selectedToken ? ( +
When single token is true, a token is required.
+ ) : ( + setIsOpen(state.open)} + > + {title && {title}} = ({ ) : ( - - - + + + + + )} @@ -229,10 +171,7 @@ const TokenInput: FC = ({ {balanceError && 'Error...'} {isLoadingBalance ? ( - + ) : ( `Balance: ${formatUnits(balance ?? 0n, selectedToken?.decimals ?? 0)}` )} @@ -247,23 +186,28 @@ const TokenInput: FC = ({ {amountError && {amountError}} - - - closeModal('token-select')} /> - - - + + + + + + setIsOpen(false)} /> + + + + + ) } @@ -278,10 +222,10 @@ function TokenAmountField({ renderInputProps: RenderInputProps thousandSeparator: boolean }) { - const { inputRef, onChange, ...restProps } = renderInputProps + const { onChange, inputRef, ...restProps } = renderInputProps const isAllowed = ({ value }: NumberFormatValues) => { - const [, inputDecimals] = value.toString().split('.') + const [inputDecimals] = value.toString().split('.') if (!inputDecimals) { return true @@ -294,12 +238,10 @@ function TokenAmountField({ onChange?.(value)} thousandSeparator={thousandSeparator} - // NumericFormat has defaultValue prop overwritten and is not compatible with the standard - // biome-ignore lint/suspicious/noExplicitAny: + // biome-ignore lint/suspicious/noExplicitAny: NumericFormat has defaultValue prop overwritten and is not compatible with the standard {...(restProps as any)} /> ) diff --git a/src/components/sharedComponents/TokenInput/styles.ts b/src/components/sharedComponents/TokenInput/styles.ts new file mode 100644 index 00000000..c4ca608e --- /dev/null +++ b/src/components/sharedComponents/TokenInput/styles.ts @@ -0,0 +1,70 @@ +export const styles = { + 'html.light &': { + '--title-color': '#2e3048', + '--background': '#fff', + '--textfield-background-color': '#fff', + '--textfield-background-color-active': 'rgb(0 0 0 / 5%)', + '--textfield-border-color': '#e2e0e7', + '--textfield-border-color-active': '#e2e0e7', + '--textfield-color': '#2e3048', + '--textfield-color-active': '#2e3048', + '--textfield-placeholder-color': 'rgb(22 29 26 / 60%)', + '--dropdown-button-background-color': '#fff', + '--dropdown-button-background-color-hover': 'rgb(0 0 0 / 5%)', + '--dropdown-button-border-color': '#e2e0e7', + '--dropdown-button-border-color-hover': '#e2e0e7', + '--dropdown-button-border-color-active': '#e2e0e7', + '--dropdown-button-color': '#2e3048', + '--dropdown-button-color-hover': '#2e3048', + '--dropdown-button-background-color-disabled': '#fff', + '--dropdown-button-border-color-disabled': '#e2e0e7', + '--dropdown-button-color-disabled': '#2e3048', + '--max-button-background-color': '#fff', + '--max-button-background-color-hover': 'rgb(0 0 0 / 5%)', + '--max-button-border-color': '#e2e0e7', + '--max-button-border-color-hover': '#e2e0e7', + '--max-button-border-color-active': '#e2e0e7', + '--max-button-color': '#8b46a4', + '--max-button-color-hover': '#8b46a4', + '--max-button-background-color-disabled': '#fff', + '--max-button-border-color-disabled': '#e2e0e7', + '--max-button-color-disabled': '#8b46a4', + '--estimated-usd-color': '#4b4d60', + '--balance-color': '#4b4d60', + }, + 'html.dark &': { + '--title-color': '#fff', + '--background': '#373954', + '--textfield-background-color': '#373954', + '--textfield-background-color-active': 'rgb(255 255 255 / 5%)', + '--textfield-border-color': '#5f6178', + '--textfield-border-color-active': '#5f6178', + '--textfield-color': 'rgb(255 255 255 / 80%)', + '--textfield-color-active': 'rgb(255 255 255 / 80%)', + '--textfield-placeholder-color': 'rgb(255 255 255 / 50%)', + '--dropdown-button-background-color': '#373954', + '--dropdown-button-background-color-hover': 'rgb(255 255 255 / 5%)', + '--dropdown-button-border-color': '#5f6178', + '--dropdown-button-border-color-hover': '#5f6178', + '--dropdown-button-border-color-active': '#5f6178', + '--dropdown-button-color': '#fff', + '--dropdown-button-color-hover': '#fff', + '--dropdown-button-background-color-disabled': '#373954', + '--dropdown-button-border-color-disabled': '#5f6178', + '--dropdown-button-color-disabled': '#fff', + '--max-button-background-color': '#373954', + '--max-button-background-color-hover': 'rgb(255 255 255 / 5%)', + '--max-button-border-color': '#c5c2cb', + '--max-button-border-color-hover': '#c5c2cb', + '--max-button-border-color-active': '#c5c2cb', + '--max-button-color': '#c5c2cb', + '--max-button-color-hover': '#fff', + '--max-button-background-color-disabled': '#373954', + '--max-button-border-color-disabled': '#5f6178', + '--max-button-color-disabled': '#fff', + '--estimated-usd-color': '#e2e0e7', + '--balance-color': '#e2e0e7', + }, +} + +export default styles diff --git a/src/components/sharedComponents/TokenLogo.tsx b/src/components/sharedComponents/TokenLogo.tsx index 611e790a..3e3f3ad1 100644 --- a/src/components/sharedComponents/TokenLogo.tsx +++ b/src/components/sharedComponents/TokenLogo.tsx @@ -1,28 +1,12 @@ -import { type ComponentProps, type FC, useCallback, useEffect, useState } from 'react' -import styled from 'styled-components' - import type { Token } from '@/src/types/token' +import { Flex } from '@chakra-ui/react' +import { type ComponentProps, type FC, useCallback, useEffect, useState } from 'react' interface PlaceholderProps extends ComponentProps<'div'> { size: number symbol: string } -const Wrapper = styled.div<{ $size: number; $backgroundColor: string }>` - align-items: center; - background-color: ${({ $backgroundColor }) => $backgroundColor}; - border-radius: 50%; - color: #fafafa; - display: flex; - font-size: 95%; - font-weight: 700; - height: ${({ $size }) => $size}px; - justify-content: center; - line-height: 1; - text-transform: uppercase; - width: ${({ $size }) => $size}px; -` - const Placeholder: FC = ({ size, symbol, ...restProps }) => { const [backgroundColor, setBackgroundColor] = useState('') @@ -59,13 +43,23 @@ const Placeholder: FC = ({ size, symbol, ...restProps }) => { }, [symbol, generateHexColor]) return ( - {symbol[0]} - + ) } diff --git a/src/components/sharedComponents/TokenSelect/List/AddERC20TokenButton.tsx b/src/components/sharedComponents/TokenSelect/List/AddERC20TokenButton.tsx index 22f6b680..836a2975 100644 --- a/src/components/sharedComponents/TokenSelect/List/AddERC20TokenButton.tsx +++ b/src/components/sharedComponents/TokenSelect/List/AddERC20TokenButton.tsx @@ -1,45 +1,8 @@ -import type { ComponentPropsWithoutRef, FC, MouseEventHandler } from 'react' -import styled from 'styled-components' - import { useWeb3Status } from '@/src/hooks/useWeb3Status' import type { Token } from '@/src/types/token' import { isNativeToken } from '@/src/utils/address' - -const Wrapper = styled.button.attrs(({ className = 'tokenSelectAddERC20TokenButton' }) => { - return { className } -})` - align-items: center; - background-color: var(--theme-token-select-add-erc20-token-button-background-color, #2e3048); - border-radius: var(--base-border-radius-sm, 4px); - border: 1px solid var(--theme-token-select-add-erc20-token-button-border-color, #2e3048); - color: var(--theme-token-select-add-erc20-token-button-color, #fff); - cursor: pointer; - display: flex; - font-family: var(--base-font-family, sans-serif); - font-size: 1.1rem; - font-weight: 500; - height: 21px; - line-height: 1; - outline: none; - padding: 0 var(--base-common-padding, 8px); - user-select: none; - white-space: nowrap; - - &:hover { - background-color: var( - --theme-token-select-add-erc20-token-button-background-color-hover, - var(--theme-token-select-add-erc20-token-button-background-color, #2e3048) - ); - border-color: var( - --theme-token-select-add-erc20-token-button-border-color-hover, - var(--theme-token-select-add-erc20-token-button-border-color, #2e3048) - ); - color: var( - --theme-token-select-add-erc20-token-button-color-hover, - var(--theme-token-select-add-erc20-token-button-color, #fff) - ); - } -` +import { chakra } from '@chakra-ui/react' +import type { ComponentPropsWithoutRef, FC, MouseEventHandler } from 'react' interface AddERC20TokenButtonProps extends ComponentPropsWithoutRef<'button'> { $token: Token @@ -78,13 +41,37 @@ const AddERC20TokenButton: FC = ({ } return isNativeToken(address) ? null : ( - {children} - + ) } diff --git a/src/components/sharedComponents/TokenSelect/List/Row.tsx b/src/components/sharedComponents/TokenSelect/List/Row.tsx index 514d6b7f..66594c31 100644 --- a/src/components/sharedComponents/TokenSelect/List/Row.tsx +++ b/src/components/sharedComponents/TokenSelect/List/Row.tsx @@ -1,91 +1,44 @@ -import type { FC, HTMLAttributes } from 'react' -import styled from 'styled-components' - -import { SkeletonLoading } from '@bootnodedev/db-ui-toolkit' - import TokenLogo from '@/src/components/sharedComponents/TokenLogo' import AddERC20TokenButton from '@/src/components/sharedComponents/TokenSelect/List/AddERC20TokenButton' -import TokenBalance, { - Balance, - Value, -} from '@/src/components/sharedComponents/TokenSelect/List/TokenBalance' +import TokenBalance from '@/src/components/sharedComponents/TokenSelect/List/TokenBalance' import type { Token } from '@/src/types/token' - -const Name = styled.div.attrs(({ className = 'tokenSelectRowName' }) => { - return { className } -})` - color: var(--theme-token-select-row-token-name-color, #2e3048); - font-size: 1.8rem; - font-weight: 500; - line-height: 1.2; -` - -const Wrapper = styled.div.attrs(({ className = 'tokenSelectListRow', tabIndex = 0 }) => { - return { - tabIndex, - className, - } -})` - align-items: center; - background-color: var(--theme-token-select-row-background-color, transparent); - column-gap: var(--base-gap-xl, 16px); - cursor: pointer; - display: flex; - height: 100%; - padding-left: calc(var(--base-common-padding-xl, 16px) + var(--base-common-padding, 8px)); - padding-right: calc(var(--base-common-padding-xl, 16px) + var(--base-common-padding, 8px)); - transition: background-color var(--base-transition-duration-sm, 0.2s) ease-in-out; - width: 100%; - - &:hover { - background-color: var(--theme-token-select-row-background-color-hover, rgb(0 0 0 / 5%)); - - ${Name} { - color: var( - --theme-token-select-row-token-name-color-hover, - var(--theme-token-select-row-token-name-color, #2e3048) - ); - } - - ${Balance} { - color: var( - --theme-token-select-row-token-balance-color-hover, - var(--theme-token-select-row-token-balance-color, #2e3048) - ); - } - - ${Value} { - color: var( - --theme-token-select-row-token-value-color-hover, - var(--theme-token-select-row-token-value-color, #2e3048) - ); - } - } - - &:active { - opacity: 0.8; - } -` - -const RightColumn = styled.div` - margin-left: auto; -` - -const Icon = styled.div.attrs<{ size: number }>(({ className = 'tokenSelectRowIcon' }) => { - return { - className, - } -})` - align-items: center; - border-radius: 50%; - display: flex; - height: ${({ size }) => size}px; - justify-content: center; - overflow: hidden; - width: ${({ size }) => size}px; -` - -interface TokenSelectRowProps extends Omit, 'onClick'> { +import { Box, Flex, type FlexProps, Skeleton } from '@chakra-ui/react' +import type { FC } from 'react' + +const Icon: FC<{ size: number } & FlexProps> = ({ size, children, ...restProps }) => ( + + {children} + +) + +const BalanceLoading: FC = ({ ...restProps }) => ( + + + + +) + +interface TokenSelectRowProps extends Omit { iconSize: number isLoadingBalances?: boolean onClick: (token: Token) => void @@ -94,22 +47,6 @@ interface TokenSelectRowProps extends Omit, 'onCl token: Token } -const BalanceLoading = styled.div.attrs(() => { - return { - children: ( - <> - - - - ), - } -})` - display: flex; - flex-direction: column; - row-gap: var(--base-gap-sm, 4px); - align-items: flex-end; -` - /** * A row in the token select list. * @@ -133,8 +70,24 @@ const Row: FC = ({ const { name } = token return ( - onClick(token)} + role="group" {...restProps} > @@ -143,18 +96,28 @@ const Row: FC = ({ token={token} /> - {name} + + {name} + {showAddTokenButton && Add token} {showBalance && ( - + } token={token} /> - + )} - + ) } diff --git a/src/components/sharedComponents/TokenSelect/List/TokenBalance.tsx b/src/components/sharedComponents/TokenSelect/List/TokenBalance.tsx index 6216456b..59a539b9 100644 --- a/src/components/sharedComponents/TokenSelect/List/TokenBalance.tsx +++ b/src/components/sharedComponents/TokenSelect/List/TokenBalance.tsx @@ -1,40 +1,7 @@ -import styled from 'styled-components' - -import { formatUnits } from 'viem' - import type { Token } from '@/src/types/token' import { withSuspenseAndRetry } from '@/src/utils/suspenseWrapper' - -/** @ignore */ -export const Balance = styled.div.attrs(({ className = 'tokenSelectRowBalance' }) => { - return { - className, - } -})` - color: var(--theme-token-select-row-token-balance-color, #2e3048); - font-size: 1.6rem; - font-weight: 400; - line-height: 1.2; -` - -/** @ignore */ -export const Value = styled.div.attrs(({ className = 'tokenSelectRowValue' }) => { - return { className } -})` - color: var(--theme-token-select-row-token-value-color, #2e3048); - font-size: 1.2rem; - font-weight: 400; - line-height: 1.2; -` - -const Values = styled.div.attrs(({ className = 'tokenSelectRowValues' }) => { - return { className } -})` - align-items: flex-end; - display: flex; - flex-direction: column; - row-gap: var(--base-gap-sm, 4px); -` +import { Box, Flex } from '@chakra-ui/react' +import { formatUnits } from 'viem' interface TokenBalanceProps { isLoading?: boolean @@ -69,10 +36,35 @@ const TokenBalance = withSuspenseAndRetry(({ isLoading, token ).toFixed(2) return ( - - {balance} - $ {value} - + + + {balance} + + + $ {value} + + ) }) diff --git a/src/components/sharedComponents/TokenSelect/List/VirtualizedList.tsx b/src/components/sharedComponents/TokenSelect/List/VirtualizedList.tsx index 61bfd9c6..cdaaf2d3 100644 --- a/src/components/sharedComponents/TokenSelect/List/VirtualizedList.tsx +++ b/src/components/sharedComponents/TokenSelect/List/VirtualizedList.tsx @@ -1,28 +1,6 @@ -import { type ReactNode, useRef } from 'react' -import styled from 'styled-components' - +import { Box } from '@chakra-ui/react' import { useVirtualizer } from '@tanstack/react-virtual' - -const Wrapper = styled.div<{ $containerHeight: number }>` - height: ${({ $containerHeight }) => `${$containerHeight}px`}; - overflow: auto; - width: 100%; -` - -const Items = styled.div<{ height: number | string }>` - height: ${({ height }) => `${height}px`}; - position: relative; - width: 100%; -` - -const VisibleItems = styled.div<{ height: number | string; start: number }>` - height: ${({ height }) => `${height}px`}; - left: 0; - position: absolute; - top: 0; - transform: ${({ start }) => `translateY(${start}px)`}; - width: 100%; -` +import { type ReactNode, useRef } from 'react' type VirtualizedListProps = { containerHeight: number @@ -48,23 +26,33 @@ const VirtualizedList = ({ }) return ( - - + {rowVirtualizer.getVirtualItems().map(({ index, key, size, start }) => ( - {renderItem(items[index])} - + ))} - - + + ) } diff --git a/src/components/sharedComponents/TokenSelect/List/index.tsx b/src/components/sharedComponents/TokenSelect/List/index.tsx index e2342d89..6e62ebc2 100644 --- a/src/components/sharedComponents/TokenSelect/List/index.tsx +++ b/src/components/sharedComponents/TokenSelect/List/index.tsx @@ -1,32 +1,10 @@ -import type { ComponentProps, FC } from 'react' -import styled from 'styled-components' - import Row from '@/src/components/sharedComponents/TokenSelect/List/Row' import VirtualizedList from '@/src/components/sharedComponents/TokenSelect/List/VirtualizedList' import type { Token, Tokens } from '@/src/types/token' +import { Flex, type FlexProps } from '@chakra-ui/react' +import type { FC } from 'react' -const Wrapper = styled.div.attrs<{ $containerHeight?: number }>( - ({ className = 'tokenSelectList' }) => ({ - className, - }), -)` - border-top: 1px solid var(--theme-token-select-list-border-top-color, #e2e0e7); - display: flex; - min-height: ${({ $containerHeight }) => `${$containerHeight}px`}; - width: 100%; -` - -const NoTokens = styled.div` - align-items: center; - background-color: var(--theme-token-select-row-background-color, transparent); - display: flex; - justify-content: center; - padding: var(--base-common-padding-xl, 16px); - transition: background-color var(--base-transition-duration-sm, 0.2s) ease-in-out; - width: 100%; -` - -interface TokenSelectListProps extends ComponentProps<'div'> { +interface TokenSelectListProps extends FlexProps { containerHeight: number iconSize: number isLoadingBalances: boolean @@ -63,9 +41,11 @@ const List: FC = ({ ...restProps }) => { return ( - {tokenList?.length ? ( @@ -86,9 +66,18 @@ const List: FC = ({ {...restProps} /> ) : ( - Nothing to show + + No tokens + )} - + ) } diff --git a/src/components/sharedComponents/TokenSelect/Search/Input.tsx b/src/components/sharedComponents/TokenSelect/Search/Input.tsx index 81b5c56e..021406f2 100644 --- a/src/components/sharedComponents/TokenSelect/Search/Input.tsx +++ b/src/components/sharedComponents/TokenSelect/Search/Input.tsx @@ -1,7 +1,5 @@ -import type { ComponentPropsWithRef, FC, InputHTMLAttributes } from 'react' -import styled from 'styled-components' - -import { Textfield, TextfieldCSS } from '@bootnodedev/db-ui-toolkit' +import { Input as BaseInput, Flex, type InputProps } from '@chakra-ui/react' +import type { FC } from 'react' const SearchIcon = () => ( ( ) -const Wrapper = styled.div.attrs>( - ({ className = 'tokenSelectInputWrapper' }) => { - return { className } - }, -)` - --base-textfield-border-radius: var(--base-border-radius, 8px); - --base-textfield-padding: 0 var(--base-common-padding-xl, 16px); - - --theme-textfield-color: var( - --theme-token-select-search-field-color, - #2e3048 - ); - --theme-textfield-color-active: var( - --theme-token-select-search-field-color-active, - #2e3048 - ); - --theme-textfield-background-color: var( - --theme-token-select-search-field-background-color, - #f7f7f7 - ); - --theme-textfield-background-color-active: var( - --theme-token-select-search-field-background-color-active, - #f7f7f7 - ); - --theme-textfield-placeholder-color: var( - --theme-token-select-search-field-placeholder-color, - #161d1a - ); - --theme-textfield-box-shadow: var( - --theme-token-select-search-field-box-shadow, - none - ); - --theme-textfield-box-shadow-active: var( - --theme-token-select-search-field-box-shadow-active, - none - ); - --theme-textfield-border-color: var( - --theme-token-select-search-field-border-color, - #e2e0e7 - ); - --theme-textfield-border-color-active: var( - --theme-token-select-search-field-border-color-active, - #e2e0e7 - ); - - ${TextfieldCSS} - - align-items: center; - column-gap: var(--base-gap-xl, 16px); - display: flex; - flex-grow: 1; - height: auto; - - &:focus-within { - box-shadow: var(--theme-textfield-box-shadow-active); - border-color: var(--theme-textfield-border-color-active); - } -` - -const SearchInput = styled(Textfield).attrs(() => { - return { type: 'search' } -})` - font-size: 1.6rem; - - &, - &:focus, - &:hover, - &:active { - background: none; - border: none; - box-shadow: none; - padding: 0; - width: 100%; - } -` - /** * A search input with a search icon */ -const Input: FC> = ({ className, ...inputProps }) => { +const Input: FC = ({ className, ...inputProps }) => { return ( - + - - + + ) } diff --git a/src/components/sharedComponents/TokenSelect/Search/NetworkButton.tsx b/src/components/sharedComponents/TokenSelect/Search/NetworkButton.tsx index 7df989db..3df92a36 100644 --- a/src/components/sharedComponents/TokenSelect/Search/NetworkButton.tsx +++ b/src/components/sharedComponents/TokenSelect/Search/NetworkButton.tsx @@ -1,4 +1,5 @@ -import styled from 'styled-components' +import { chakra } from '@chakra-ui/react' +import type { ComponentProps, FC } from 'react' const ChevronDown = () => ( ( /** * A button to select a network from a dropdown */ -const NetworkButton = styled.button.attrs( - ({ children, className = 'tokenSelectNetworkButton' }) => { - return { - children: ( - <> - {children} - - ), - type: 'button', - className, - } - }, -)` - align-items: center; - background-color: var( - --theme-token-select-network-button-background-color, - #f7f7f7 - ); - border-radius: var(--base-border-radius, 8px); - border: none; - color: var(--theme-token-select-network-button-color, #2e3048); - column-gap: var(--base-gap, 8px); - cursor: pointer; - display: flex; - justify-content: center; - padding: 0; - width: 88px; - - &:hover { - background-color: var( - --theme-token-select-network-button-background-color-hover, - var(--theme-token-select-network-button-background-color, #f7f7f7) - ); - color: var( - --theme-token-select-network-button-color-hover, - var(--theme-token-select-network-button-color, #2e3048) - ); - } - - &:active { - opacity: 0.7; - } - - .chevronDown { - transition: transform var(--base-transition-duration-xs, 0.1s) ease-in-out; - } - - .isActive & { - .chevronDown { - transform: rotate(180deg); - } - } -` +const NetworkButton: FC> = ({ children, ...restProps }) => ( + + {children} + +) export default NetworkButton diff --git a/src/components/sharedComponents/TokenSelect/Search/index.tsx b/src/components/sharedComponents/TokenSelect/Search/index.tsx index 20f60ae8..2ec58157 100644 --- a/src/components/sharedComponents/TokenSelect/Search/index.tsx +++ b/src/components/sharedComponents/TokenSelect/Search/index.tsx @@ -1,32 +1,11 @@ -import type { Dispatch, FC, HTMLAttributes, SetStateAction } from 'react' -import styled from 'styled-components' - -import { Item as BaseItem, Dropdown } from '@bootnodedev/db-ui-toolkit' - import SearchInput from '@/src/components/sharedComponents/TokenSelect/Search/Input' import NetworkButton from '@/src/components/sharedComponents/TokenSelect/Search/NetworkButton' import type { Networks } from '@/src/components/sharedComponents/TokenSelect/types' +import { MenuContent, MenuItem } from '@/src/components/sharedComponents/ui/Menu' +import { Flex, type FlexProps, Menu } from '@chakra-ui/react' +import type { Dispatch, FC, SetStateAction } from 'react' -const Wrapper = styled.div.attrs(({ className = 'tokenSelectSearchWrapper' }) => { - return { className } -})` - display: flex; - column-gap: var(--base-gap, 8px); - height: 72px; - padding: 0 var(--base-common-padding-xl, 16px); - - .dbuitkDropdownButton { - height: 100%; - } -` - -const Item = styled(BaseItem)` - font-size: 1.6rem; - min-height: 48px; - width: 250px; -` - -interface SearchProps extends HTMLAttributes { +interface SearchProps extends FlexProps { currentNetworkId: number disabled?: boolean networks?: Networks @@ -54,9 +33,15 @@ const Search: FC = ({ searchTerm, setSearchTerm, ...restProps -}) => { +}: SearchProps) => { return ( - + setSearchTerm(e.target.value)} @@ -64,25 +49,29 @@ const Search: FC = ({ value={searchTerm} /> {networks && networks.length > 1 && ( - + {networks.find((item) => item.id === currentNetworkId)?.icon} - } - items={networks.map(({ icon, id, label, onClick }) => ( - - {icon} - {label} - - ))} - position="right" - /> + + + + {networks.map(({ icon, id, label, onClick }) => ( + + {icon} + {label} + + ))} + + + )} - + ) } diff --git a/src/components/sharedComponents/TokenSelect/TopTokens/Item.tsx b/src/components/sharedComponents/TokenSelect/TopTokens/Item.tsx index b6846352..86ac8504 100644 --- a/src/components/sharedComponents/TokenSelect/TopTokens/Item.tsx +++ b/src/components/sharedComponents/TokenSelect/TopTokens/Item.tsx @@ -1,76 +1,11 @@ -import type { ButtonHTMLAttributes, FC } from 'react' -import styled from 'styled-components' - import TokenLogo from '@/src/components/sharedComponents/TokenLogo' import type { Token } from '@/src/types/token' +import { Box, Flex, chakra } from '@chakra-ui/react' +import type { ComponentPropsWithoutRef, FC } from 'react' const ICON_SIZE = 24 -const SymbolComponent = styled.div.attrs(({ className = 'tokenSelectTopTokenItemSymbol' }) => { - return { - className, - } -})` - color: var(--theme-token-select-top-token-item-color, #2e3048); - font-size: 1.8rem; - font-weight: 500; - line-height: 1.2; -` - -const Wrapper = styled.button.attrs(({ className = 'tokenSelectTopTokenItem', tabIndex = 0 }) => { - return { - className, - tabIndex, - } -})` - align-items: center; - background-color: var(--theme-token-select-top-token-item-background-color, #fff); - border-radius: var(--base-border-radius, 8px); - border: 1px solid var(--theme-token-select-top-token-item-border-color, #e2e0e7); - column-gap: var(--base-gap, 8px); - cursor: pointer; - display: grid; - grid-template-columns: ${ICON_SIZE}px 1fr; - height: 41px; - padding: 0 var(--base-common-padding-xl, 16px); - transition: background-color var(--base-transition-duration-sm, 0.2s) ease-in-out; - - &:hover { - background-color: var( - --theme-token-select-top-token-item-background-color-hover, - rgb(0 0 0 / 5%) - ); - border-color: var( - --theme-token-select-top-token-item-border-color-hover, - var(--theme-token-select-top-token-item-border-color, #e2e0e7) - ); - - ${SymbolComponent} { - color: var( - --theme-token-select-top-token-item-color-hover, - var(--theme-token-select-top-token-item-color, #2e3048) - ); - } - } - - &:active { - opacity: 0.8; - } -` - -const Icon = styled.div.attrs(({ className = 'tokenSelectTopTokenItemIcon' }) => { - return { className } -})` - align-items: center; - border-radius: 50%; - display: flex; - height: ${ICON_SIZE}px; - justify-content: center; - overflow: hidden; - width: ${ICON_SIZE}px; -` - -interface ItemProps extends ButtonHTMLAttributes { +interface ItemProps extends ComponentPropsWithoutRef<'button'> { token: Token } @@ -83,15 +18,55 @@ const Item: FC = ({ token, ...restProps }) => { const { symbol } = token return ( - - + + - - {symbol} - + + + {symbol} + + ) } diff --git a/src/components/sharedComponents/TokenSelect/TopTokens/index.tsx b/src/components/sharedComponents/TokenSelect/TopTokens/index.tsx index 1bd40302..41478d02 100644 --- a/src/components/sharedComponents/TokenSelect/TopTokens/index.tsx +++ b/src/components/sharedComponents/TokenSelect/TopTokens/index.tsx @@ -1,23 +1,10 @@ -import type { FC, HTMLAttributes } from 'react' -import styled from 'styled-components' - import Item from '@/src/components/sharedComponents/TokenSelect/TopTokens/Item' import type { Token, Tokens } from '@/src/types/token' import { isNativeToken } from '@/src/utils/address' +import { Flex, type FlexProps } from '@chakra-ui/react' +import type { FC } from 'react' -const Wrapper = styled.div.attrs(({ className = 'tokenSelectTopTokensWrapper' }) => { - return { - className, - } -})` - display: flex; - flex-wrap: wrap; - gap: var(--base-gap-xl, 16px); - padding-left: var(--base-common-padding-xl, 16px); - padding-right: var(--base-common-padding-xl, 16px); -` - -interface TopTokensProps extends HTMLAttributes { +interface TopTokensProps extends FlexProps { onTokenSelect: (token: Token | undefined) => void tokens: Tokens } @@ -32,7 +19,13 @@ const TopTokens: FC = ({ onTokenSelect, tokens, ...restProps }) const topTokenSymbols = ['op', 'usdc', 'usdt', 'dai', 'weth', 'wbtc', 'aave'] return ( - + {[ // append native token at the beginning tokens.find((token) => isNativeToken(token.address)), @@ -55,7 +48,7 @@ const TopTokens: FC = ({ onTokenSelect, tokens, ...restProps }) token={token!} /> ))} - + ) } diff --git a/src/components/sharedComponents/TokenSelect/index.tsx b/src/components/sharedComponents/TokenSelect/index.tsx index 1724f14e..5e240f9f 100644 --- a/src/components/sharedComponents/TokenSelect/index.tsx +++ b/src/components/sharedComponents/TokenSelect/index.tsx @@ -1,8 +1,3 @@ -import { type ComponentPropsWithoutRef, useEffect, useRef, useState } from 'react' -import styled from 'styled-components' - -import type { Chain } from 'viem/chains' - import List from '@/src/components/sharedComponents/TokenSelect/List' import Search from '@/src/components/sharedComponents/TokenSelect/Search' import TopTokens from '@/src/components/sharedComponents/TokenSelect/TopTokens' @@ -14,32 +9,10 @@ import { useWeb3Status } from '@/src/hooks/useWeb3Status' import { chains } from '@/src/lib/networks.config' import type { Token } from '@/src/types/token' import { withSuspenseAndRetry } from '@/src/utils/suspenseWrapper' - -const Wrapper = styled.div.attrs(({ className = 'tokenSelectWrapper' }) => { - return { className } -})` - background-color: var(--theme-token-select-background-color, #fff); - border-radius: var(--base-border-radius, 8px); - border: 1px solid var(--theme-token-select-border-color, #fff); - box-shadow: var(--theme-token-select-background-color, 0 9.6px 13px 0 rgb(0 0 0 / 8%)); - display: flex; - flex-direction: column; - max-width: calc(100vw - var(--base-gap-xl, 16px)); - padding: calc(var(--base-common-padding, 8px) * 5) 0 calc(var(--base-common-padding, 8px) * 3); - row-gap: calc(var(--base-gap, 8px) * 3); - width: 540px; -` - -const Title = styled.h2.attrs(({ className = 'tokenSelectTitle' }) => { - return { className } -})` - color: var(--theme-token-select-title-color, #2e3048); - font-size: 1.8rem; - font-weight: 700; - line-height: 1.2; - margin: 0; - padding: 0 var(--base-common-padding-xl, 16px); -` +import { Flex, type FlexProps, Heading } from '@chakra-ui/react' +import { useEffect, useRef, useState } from 'react' +import type { Chain } from 'viem/chains' +import styles from './styles' export interface TokenSelectProps { containerHeight?: number @@ -55,7 +28,7 @@ export interface TokenSelectProps { } /** @ignore */ -type Props = ComponentPropsWithoutRef<'div'> & TokenSelectProps +type Props = FlexProps & TokenSelectProps /** * TokenSelect component, used to search and select a token from a list. @@ -71,63 +44,13 @@ type Props = ComponentPropsWithoutRef<'div'> & TokenSelectProps * @param {boolean} [props.showAddTokenButton=false] - Optional flag to allow adding a token. Default is false. * @param {boolean} [props.showBalance=false] - Optional flag to show the token balance in the list. Default is false. * @param {boolean} [props.showTopTokens=false] - Optional flag to show the top tokens in the list. Default is false. - * - * @remarks - * Individual CSS classes are available for deep styling of individual components within TokenSelect: - * - * Also theme CSS vars are available for cosmetic changes: - * - * Title: - * * --theme-token-select-title-color - * - * Main container: - * * --theme-token-select-background-color (defaults to --theme-card-background-color) - * * --theme-token-select-border-color (defaults to --theme-card-border-color) - * * --theme-token-select-box-shadow (defaults to --theme-card-box-shadow) - * - * Search field: - * * --theme-token-select-search-field-color - * * --theme-token-select-search-field-color-active - * * --theme-token-select-search-field-background-color - * * --theme-token-select-search-field-background-color-active - * * --theme-token-select-search-field-placeholder-color - * * --theme-token-select-search-field-box-shadow - * * --theme-token-select-search-field-box-shadow-active - * * --theme-token-select-search-field-border-color - * * --theme-token-select-search-field-border-color-active - * - * Network select button: - * * --theme-token-select-network-button-color - * * --theme-token-select-network-button-color-hover - * * --theme-token-select-network-button-background-color - * * --theme-token-select-network-button-background-color-hover - * - * Top tokens: - * * --theme-token-select-top-token-item-color - * * --theme-token-select-top-token-item-color-hover - * * --theme-token-select-top-token-item-background-color - * * --theme-token-select-top-token-item-background-color-hover - * * --theme-token-select-top-token-item-border-color - * * --theme-token-select-top-token-item-border-color-hover - * - * List: - * * --theme-token-select-list-border-top-color - * - * List item: - * * --theme-token-select-row-background-color - * * --theme-token-select-row-background-color-hover - * * --theme-token-select-row-token-name-color - * * --theme-token-select-row-token-name-color-hover - * * --theme-token-select-row-token-balance-color - * * --theme-token-select-row-token-balance-color-hover - * * --theme-token-select-row-token-value-color - * * --theme-token-select-row-token-value-color-hover */ const TokenSelect = withSuspenseAndRetry( ({ children, containerHeight = 320, currentNetworkId, + css, iconSize = 32, itemHeight = 64, networks = undefined, @@ -210,8 +133,36 @@ const TokenSelect = withSuspenseAndRetry( ) return ( - - Select a token + + + Select a token + ( tokenList={searchResult} /> {children} - + ) }, ) diff --git a/src/components/sharedComponents/TokenSelect/styles.ts b/src/components/sharedComponents/TokenSelect/styles.ts new file mode 100644 index 00000000..51f889e5 --- /dev/null +++ b/src/components/sharedComponents/TokenSelect/styles.ts @@ -0,0 +1,70 @@ +export const styles = { + 'html.light &': { + '--background-color': '#fff', + '--border-color': '#fff', + '--title-color': '#2e3048', + '--box-shadow': '0 9.6px 13px 0 rgb(0 0 0 / 8%)', + '--network-button-color': '#2e3048', + '--network-button-background-color': '#f7f7f7', + '--list-border-top-color': '#e2e0e7', + '--row-background-color': 'transparent', + '--row-background-color-hover': 'rgb(0 0 0 / 5%)', + '--row-token-name-color': '#2e3048', + '--row-token-balance-color': '#2e3048', + '--row-token-value-color': '#2e3048', + '--top-token-item-background-color': '#fff', + '--top-token-item-border-color': '#e2e0e7', + '--top-token-item-color': '#2e3048', + '--top-token-item-background-color-hover': 'rgb(0 0 0 / 5%)', + '--search-field-color': '#2e3048', + '--search-field-color-active': '#2e3048', + '--search-field-background-color': '#f7f7f7', + '--search-field-background-color-active': '#f7f7f7', + '--search-field-placeholder-color': '#161d1a', + '--search-field-box-shadow': 'none', + '--search-field-box-shadow-active': 'rgb(0 0 0 / 10%)', + '--search-field-border-color': '#e2e0e7', + '--search-field-border-color-active': '#e2e0e7', + '--add-erc20-token-button-background-color': '#2e3048', + '--add-erc20-token-button-background-color-hover': '#3d405f', + '--add-erc20-token-button-border-color': '#2e3048', + '--add-erc20-token-button-border-color-hover': '#3d405f', + '--add-erc20-token-button-color': '#fff', + '--add-erc20-token-button-color-hover': '#fff', + }, + 'html.dark &': { + '--background-color': '#2e3048', + '--border-color': '#2e3048', + '--title-color': '#fff', + '--box-shadow': '0 0 20px 0 rgb(255 255 255 / 8%)', + '--network-button-color': '#fff', + '--network-button-background-color': '#292b43', + '--list-border-top-color': '#4b4d60', + '--row-background-color': 'transparent', + '--row-background-color-hover': 'rgb(255 255 255 / 5%)', + '--row-token-name-color': '#fff', + '--row-token-balance-color': '#fff', + '--row-token-value-color': '#fff', + '--top-token-item-background-color': '#2e3048', + '--top-token-item-border-color': '#4b4d60', + '--top-token-item-color': '#fff', + '--top-token-item-background-color-hover': 'rgb(255 255 255 / 5%)', + '--search-field-color': '#fff', + '--search-field-color-active': '#fff', + '--search-field-background-color': '#292b43', + '--search-field-background-color-active': '#292b43', + '--search-field-placeholder-color': '#ddd', + '--search-field-box-shadow': 'none', + '--search-field-box-shadow-active': 'none', + '--search-field-border-color': '#5f6178', + '--search-field-border-color-active': '#5f6178', + '--add-erc20-token-button-background-color': '#5f6178', + '--add-erc20-token-button-background-color-hover': '#4a4c5f', + '--add-erc20-token-button-border-color': '#5f6178', + '--add-erc20-token-button-border-color-hover': '#4a4c5f', + '--add-erc20-token-button-color': '#fff', + '--add-erc20-token-button-color-hover': '#fff', + }, +} + +export default styles diff --git a/src/components/sharedComponents/TransactionButton.tsx b/src/components/sharedComponents/TransactionButton.tsx index dcb63d41..da67c42d 100644 --- a/src/components/sharedComponents/TransactionButton.tsx +++ b/src/components/sharedComponents/TransactionButton.tsx @@ -1,12 +1,12 @@ -import { type ComponentProps, useEffect, useState } from 'react' - -import type { Hash, TransactionReceipt } from 'viem' -import { useWaitForTransactionReceipt } from 'wagmi' - import { withWalletStatusVerifier } from '@/src/components/sharedComponents/WalletStatusVerifier' +import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' import { useTransactionNotification } from '@/src/lib/toast/TransactionNotificationProvider' +import type { ButtonProps } from '@chakra-ui/react' +import { useEffect, useState } from 'react' +import type { Hash, TransactionReceipt } from 'viem' +import { useWaitForTransactionReceipt } from 'wagmi' -interface TransactionButtonProps extends ComponentProps<'button'> { +interface TransactionButtonProps extends ButtonProps { confirmations?: number labelSending?: string onMined?: (receipt: TransactionReceipt) => void @@ -76,13 +76,13 @@ const TransactionButton = withWalletStatusVerifier( } return ( - + ) }, ) diff --git a/src/components/sharedComponents/WalletStatusVerifier.tsx b/src/components/sharedComponents/WalletStatusVerifier.tsx index 9e3fbc01..1c27ff70 100644 --- a/src/components/sharedComponents/WalletStatusVerifier.tsx +++ b/src/components/sharedComponents/WalletStatusVerifier.tsx @@ -1,20 +1,20 @@ -import type { ComponentType, FC, ReactElement } from 'react' -import styled from 'styled-components' - -import { extractChain } from 'viem' - -import { PrimaryButton } from '@/src/components/sharedComponents/ui/Buttons' +import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' import { useWeb3Status } from '@/src/hooks/useWeb3Status' import { type ChainsIds, chains } from '@/src/lib/networks.config' import { ConnectWalletButton } from '@/src/providers/Web3Provider' +import { chakra } from '@chakra-ui/react' +import type { ComponentType, FC, ReactElement } from 'react' +import { extractChain } from 'viem' -const Button = styled(PrimaryButton)` - font-size: 1.6rem; - font-weight: 500; - height: 48px; - padding-left: calc(var(--base-common-padding, 8px) * 3); - padding-right: calc(var(--base-common-padding, 8px) * 3); -` +const Button = chakra(PrimaryButton, { + base: { + fontSize: '16px', + fontWeight: 500, + height: '48px', + paddingLeft: 6, + paddingRight: 6, + }, +}) interface WalletStatusVerifierProps { chainId?: ChainsIds diff --git a/src/components/sharedComponents/ui/Button.tsx b/src/components/sharedComponents/ui/Button.tsx new file mode 100644 index 00000000..edde4693 --- /dev/null +++ b/src/components/sharedComponents/ui/Button.tsx @@ -0,0 +1,44 @@ +import { chakra } from '@chakra-ui/react' + +export const Button = chakra( + 'button', + { + base: { + alignItems: 'center', + borderRadius: 'sm', + borderStyle: 'solid', + borderWidth: '1px', + cursor: 'pointer', + display: 'flex', + fontFamily: '{fonts.body}', + fontSize: '15px', + fontWeight: '400', + gap: 2, + height: '48px', + justifyContent: 'center', + lineHeight: '1', + outline: 'none', + paddingY: 0, + paddingX: 4, + textDecoration: 'none', + transition: + 'background-color {durations.moderate}, border-color {durations.moderate}, color {durations.moderate', + userSelect: 'none', + whiteSpace: 'nowrap', + _disabled: { + cursor: 'not-allowed', + opacity: 0.6, + }, + _active: { + opacity: 0.8, + }, + }, + }, + { + defaultProps: { + type: 'button', + }, + }, +) + +export default Button diff --git a/src/components/sharedComponents/ui/Buttons.tsx b/src/components/sharedComponents/ui/Buttons.tsx deleted file mode 100644 index fcf0fbc9..00000000 --- a/src/components/sharedComponents/ui/Buttons.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import styled from 'styled-components' - -import { Button } from '@bootnodedev/db-ui-toolkit' - -/** - * Preset buttons, just for convenience. - */ -export const PrimaryButton = styled(Button).attrs({ - $variant: 'primary', -})` - font-weight: 500; -` - -export const SecondaryButton = styled(Button).attrs({ - $variant: 'secondary', -})` - font-weight: 500; -` diff --git a/src/components/sharedComponents/ui/CopyButton/index.tsx b/src/components/sharedComponents/ui/CopyButton/index.tsx new file mode 100644 index 00000000..3c017bc3 --- /dev/null +++ b/src/components/sharedComponents/ui/CopyButton/index.tsx @@ -0,0 +1,92 @@ +import { Button, type ButtonProps } from '@chakra-ui/react' +import type { ComponentProps, FC, MouseEventHandler } from 'react' +import styles from './styles' + +const Copy: FC> = ({ ...restProps }) => ( + + + + +) + +interface Props extends ButtonProps { + value: string +} + +/** + * @name CopyButton + * @description A button that copies a value to the clipboard + * @param {string} value - The value to copy to the clipboard + */ +export const CopyButton: FC = ({ + children = , + css, + onClick, + value, + ...restProps +}: Props) => { + const onCopy: MouseEventHandler = (e) => { + navigator.clipboard.writeText(value) + onClick?.(e) + } + + return ( + + ) +} + +export default CopyButton diff --git a/src/components/sharedComponents/ui/CopyButton/styles.ts b/src/components/sharedComponents/ui/CopyButton/styles.ts new file mode 100644 index 00000000..d3dffa8c --- /dev/null +++ b/src/components/sharedComponents/ui/CopyButton/styles.ts @@ -0,0 +1,12 @@ +export const styles = { + 'html.light &': { + '--color': '#000', + '--color-hover': '#8b46a4', + }, + 'html.dark &': { + '--color': '#e2e0e7', + '--color-hover': '#c670e5', + }, +} + +export default styles diff --git a/src/components/sharedComponents/ui/DropdownButton.tsx b/src/components/sharedComponents/ui/DropdownButton.tsx new file mode 100644 index 00000000..8e0a4b5c --- /dev/null +++ b/src/components/sharedComponents/ui/DropdownButton.tsx @@ -0,0 +1,46 @@ +import PrimaryButton from '@/src/components/sharedComponents/ui/PrimaryButton' +import { type ButtonProps, chakra } from '@chakra-ui/react' +import type { FC } from 'react' + +const ChevronDown: FC = () => ( + + Chevron down + + +) + +const Button: FC = ({ children, ...restProps }) => { + return ( + + {children} + + ) +} + +export default Button diff --git a/src/components/sharedComponents/ui/ExternalLink/index.tsx b/src/components/sharedComponents/ui/ExternalLink/index.tsx new file mode 100644 index 00000000..252597a5 --- /dev/null +++ b/src/components/sharedComponents/ui/ExternalLink/index.tsx @@ -0,0 +1,83 @@ +import { Link, type LinkProps } from '@chakra-ui/react' +import type { ComponentProps, FC } from 'react' +import styles from './styles' + +const LinkSVG: FC> = ({ ...restProps }) => ( + + + + + +) + +/** + * @name ExternalLink + * @description A button that opens a link in a new tab. + * @param {React.HTMLAttributeAnchorTarget} target - The target attribute specifies where to open the linked document. Default is '_blank'. + */ +export const CopyButton: FC = ({ + children = , + css, + target = '_blank', + ...restProps +}: LinkProps) => { + return ( + + {children} + + ) +} + +export default CopyButton diff --git a/src/components/sharedComponents/ui/ExternalLink/styles.ts b/src/components/sharedComponents/ui/ExternalLink/styles.ts new file mode 100644 index 00000000..03743e7d --- /dev/null +++ b/src/components/sharedComponents/ui/ExternalLink/styles.ts @@ -0,0 +1,12 @@ +export const styles = { + 'html.light &': { + '--button-color': '#000', + '--button-color-hover': '#8b46a4', + }, + 'html.dark &': { + '--button-color': '#e2e0e7', + '--button-color-hover': '#c670e5', + }, +} + +export default styles diff --git a/src/components/sharedComponents/ui/Footer.tsx b/src/components/sharedComponents/ui/Footer.tsx deleted file mode 100644 index fd83d153..00000000 --- a/src/components/sharedComponents/ui/Footer.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import type { FC } from 'react' -import styled from 'styled-components' - -import { - Footer as BaseFooter, - ContainerPadding, - InnerContainer, - LogoMini, -} from '@bootnodedev/db-ui-toolkit' - -export const Wrapper = styled(BaseFooter)` - height: 92px; - margin-top: calc(var(--base-gap-xl) * 2); -` - -const Inner = styled(InnerContainer)` - justify-content: center; - - ${ContainerPadding} -` - -export const Footer: FC = ({ ...restProps }) => { - return ( - - - - - - - - ) -} diff --git a/src/components/sharedComponents/ui/Footer/LogoMini.tsx b/src/components/sharedComponents/ui/Footer/LogoMini.tsx new file mode 100644 index 00000000..776d9cb6 --- /dev/null +++ b/src/components/sharedComponents/ui/Footer/LogoMini.tsx @@ -0,0 +1,51 @@ +import { chakra } from '@chakra-ui/react' +import type { FC } from 'react' + +/** + * @name LogoMini + * + * @description dAppBooster mini logo component + */ +export const LogoMini: FC = ({ ...restProps }) => ( + + + + + + + + + + + +) + +export default LogoMini diff --git a/src/components/sharedComponents/ui/Footer/Socials/assets/Github.tsx b/src/components/sharedComponents/ui/Footer/Socials/assets/Github.tsx new file mode 100644 index 00000000..9c10c4b7 --- /dev/null +++ b/src/components/sharedComponents/ui/Footer/Socials/assets/Github.tsx @@ -0,0 +1,25 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +/** + * Github logo component + */ +const Github: FC> = ({ ...restProps }) => ( + + + +) + +export default Github diff --git a/src/components/sharedComponents/ui/Footer/Socials/assets/LinkedIn.tsx b/src/components/sharedComponents/ui/Footer/Socials/assets/LinkedIn.tsx new file mode 100644 index 00000000..9ef4a48c --- /dev/null +++ b/src/components/sharedComponents/ui/Footer/Socials/assets/LinkedIn.tsx @@ -0,0 +1,27 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +/** + * LinkedIn logo component + */ +const LinkedIn: FC> = ({ ...restProps }) => ( + + + +) + +export default LinkedIn diff --git a/src/components/sharedComponents/ui/Footer/Socials/assets/Telegram.tsx b/src/components/sharedComponents/ui/Footer/Socials/assets/Telegram.tsx new file mode 100644 index 00000000..5296b2c0 --- /dev/null +++ b/src/components/sharedComponents/ui/Footer/Socials/assets/Telegram.tsx @@ -0,0 +1,25 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +/** + * Telegram logo component + */ +const Telegram: FC> = ({ ...restProps }) => ( + + + +) + +export default Telegram diff --git a/src/components/sharedComponents/ui/Footer/Socials/assets/Twitter.tsx b/src/components/sharedComponents/ui/Footer/Socials/assets/Twitter.tsx new file mode 100644 index 00000000..5cc949a4 --- /dev/null +++ b/src/components/sharedComponents/ui/Footer/Socials/assets/Twitter.tsx @@ -0,0 +1,27 @@ +import { chakra } from '@chakra-ui/react' +import type { FC, HTMLAttributes } from 'react' + +/** + * Twitter logo component + */ +const Twitter: FC> = ({ ...restProps }) => ( + + + +) + +export default Twitter diff --git a/src/components/sharedComponents/ui/Footer/Socials/index.tsx b/src/components/sharedComponents/ui/Footer/Socials/index.tsx new file mode 100644 index 00000000..11eddfbb --- /dev/null +++ b/src/components/sharedComponents/ui/Footer/Socials/index.tsx @@ -0,0 +1,49 @@ +import Github from '@/src/components/sharedComponents/ui/Footer/Socials/assets/Github' +import LinkedIn from '@/src/components/sharedComponents/ui/Footer/Socials/assets/LinkedIn' +import Telegram from '@/src/components/sharedComponents/ui/Footer/Socials/assets/Telegram' +import Twitter from '@/src/components/sharedComponents/ui/Footer/Socials/assets/Twitter' +import { Flex, type FlexProps, Link } from '@chakra-ui/react' +import type { FC } from 'react' + +const Socials: FC = ({ ...restProps }) => { + const items = [ + { label: 'Telegram', icon: , href: 'https://t.me/dAppBooster' }, + { 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 }) => ( + + {icon} + + ))} + + ) +} + +export default Socials diff --git a/src/components/sharedComponents/ui/Footer/index.tsx b/src/components/sharedComponents/ui/Footer/index.tsx new file mode 100644 index 00000000..3661495e --- /dev/null +++ b/src/components/sharedComponents/ui/Footer/index.tsx @@ -0,0 +1,54 @@ +import { LogoMini } from '@/src/components/sharedComponents/ui/Footer/LogoMini' +import Socials from '@/src/components/sharedComponents/ui/Footer/Socials' +import { Inner } from '@/src/components/sharedComponents/ui/Inner' +import { Box, Flex, type FlexProps } from '@chakra-ui/react' +import packageJSON from '@packageJSON' +import type { FC } from 'react' +import styles from './styles' + +export const Footer: FC = ({ css, ...restProps }) => { + return ( + + + + + + + + + + Version: {packageJSON.version} + + + ) +} diff --git a/src/components/sharedComponents/ui/Footer/styles.ts b/src/components/sharedComponents/ui/Footer/styles.ts new file mode 100644 index 00000000..4b0b888d --- /dev/null +++ b/src/components/sharedComponents/ui/Footer/styles.ts @@ -0,0 +1,14 @@ +export const styles = { + 'html.light &': { + '--background-color': '#f7f7f7', + '--text-color': '#2e3048', + '--line-color': '#c5c2cb', + }, + 'html.dark &': { + '--background-color': '#23048', + '--text-color': '#c5c2cb', + '--line-color': '#5f6178', + }, +} + +export default styles diff --git a/src/components/sharedComponents/ui/GeneralMessage/index.tsx b/src/components/sharedComponents/ui/GeneralMessage/index.tsx new file mode 100644 index 00000000..91498fed --- /dev/null +++ b/src/components/sharedComponents/ui/GeneralMessage/index.tsx @@ -0,0 +1,136 @@ +import { Card as BaseCard, type CardRootProps, Flex, Heading } from '@chakra-ui/react' +import type { ComponentProps, FC, ReactElement } from 'react' +import styles from './styles' + +const AlertIcon: FC> = ({ ...restProps }) => ( + + Alert Icon + + + + +) + +interface Props extends CardRootProps { + actionButton?: ReactElement + icon?: ReactElement + message?: string | ReactElement + title?: string +} + +/** + * @name GeneralMessage + * + * @description General error component. + * + * @param {ReactElement} [actionButton] - Optional action button. Can be used to reload the page, redirect the user somewhere, etc. + * @param {Array | ReactElement} [icon] - Optional icon to display. Default is an alert icon. + * @param {string | ReactElement} [message] - Optional message to display. Default is 'Something went wrong.' + * @param {string} [title] - Optional title to display. Default is 'Error'. + */ +export const GeneralMessage: FC = ({ + actionButton, + css, + icon = , + message = 'Something went wrong.', + title = 'Error', + ...restProps +}: Props) => { + return ( + + + {icon} + + + {title} + + + {message} + + {actionButton} + + ) +} + +export default GeneralMessage diff --git a/src/components/sharedComponents/ui/GeneralMessage/styles.ts b/src/components/sharedComponents/ui/GeneralMessage/styles.ts new file mode 100644 index 00000000..171ebe23 --- /dev/null +++ b/src/components/sharedComponents/ui/GeneralMessage/styles.ts @@ -0,0 +1,20 @@ +export const styles = { + 'html.light &': { + '--background-color': '#fff', + '--border-color': '#fff', + '--box-shadow': '0 9.6px 13px 0 rgb(0 0 0 / 8%)', + '--color-title': '#2e3048', + '--color-message-background': '#f8f8f8', + '--color-text': '#4b4d60', + }, + 'html.dark &': { + '--background-color': '#fff', + '--border-color': '#fff', + '--box-shadow': '0 9.6px 13px 0 rgb(0 0 0 / 8%)', + '--color-title': '#2e3048', + '--color-message-background': '#f8f8f8', + '--color-text': '#4b4d60', + }, +} + +export default styles diff --git a/src/components/sharedComponents/ui/Header.tsx b/src/components/sharedComponents/ui/Header.tsx deleted file mode 100644 index 0d989a36..00000000 --- a/src/components/sharedComponents/ui/Header.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import type { FC, HTMLAttributes } from 'react' -import styled, { css } from 'styled-components' - -import { - Header as BaseHeader, - Logo as BaseLogo, - ContainerPadding, - InnerContainer, - SwitchThemeButton, - breakpointMediaQuery, -} from '@bootnodedev/db-ui-toolkit' -import { Link } from '@tanstack/react-router' -import { useTheme } from 'next-themes' - -import { ConnectWalletButton } from '@/src/providers/Web3Provider' - -const Wrapper = styled(BaseHeader)` - margin-bottom: calc(var(--base-gap-xl) * 2); - padding-top: var(--base-common-padding-xl); - position: relative; - z-index: 10; - - ${breakpointMediaQuery( - 'desktopStart', - css` - height: var(--base-header-height); - `, - )} -` - -const Inner = styled(InnerContainer)` - align-items: center; - height: 100%; - justify-content: space-between; - - ${ContainerPadding} -` - -const Start = styled.div` - flex: 1; -` - -const HomeLink = styled(Link)` - display: none; - - &:active { - opacity: 0.7; - } - - ${breakpointMediaQuery( - 'tabletPortraitStart', - css` - display: flex; - `, - )} -` - -const Logo = styled(BaseLogo)` - min-width: 140px; -` - -const End = styled.div` - align-items: center; - column-gap: calc(var(--base-gap)); - display: flex; - flex: 1; - height: 100%; - justify-content: flex-end; -` - -export const Header: FC> = ({ ...restProps }) => { - const { setTheme, theme } = useTheme() - - return ( - - - - - - - - - setTheme(theme === 'light' ? 'dark' : 'light')} /> - - - - - ) -} diff --git a/src/components/sharedComponents/ui/Header/Logo.tsx b/src/components/sharedComponents/ui/Header/Logo.tsx new file mode 100644 index 00000000..0188da0a --- /dev/null +++ b/src/components/sharedComponents/ui/Header/Logo.tsx @@ -0,0 +1,33 @@ +import { type ImageProps, chakra } from '@chakra-ui/react' +import type { FC } from 'react' + +const LogoDark = + 'PHN2ZyB3aWR0aD0iMTkzIiBoZWlnaHQ9Ijc3IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0zNi40OCA0Mi41ODNjLS4xMy0uMzQzLS4yNi0uNjg3LS4zNy0xLjA0MS0xLjI5LTQuMjA0LTIuMDItMTMuMjUyLTIuNDgtMTguNDg4LTEuMDYtMTEuODQ3LTUuMTktMjEuNTYyLTExLjU3LTIxLjkxNnYtLjA3OWMtNi4zOC4zNDQtMTAuNTEgMTAuMDctMTEuNTcgMjEuOTA3LS40NyA1LjI0NS0xLjE5IDE0LjI4My0yLjQ4IDE4LjQ4OC0uMTIuMzUzLS4yNC43MDctLjM3IDEuMDQtMTkuODYgMTAuMTY4IDkuNiAxMS41MDQgMTQuNDIgMTEuNTczdi4wNzljNC44Mi0uMDcgMzQuMjktMS40MDUgMTQuNDItMTEuNTcydi4wMXoiIGZpbGw9IiMxMzE1MjEiLz48cGF0aCBkPSJNMzEuMTggNTguMjI1YzEuNzQtMy4xMiAzLTcuNTEgMy05Ljk3IDAtLjYyLS4wNi0xLjI2LS4xNi0xLjg3LS4zNS0yLjE0LTEuNTItMy41OS0yLjgyLTMuNThoLS4wM2MtMS4zMSAwLTIuNDcgMS40NC0yLjgyIDMuNTgtLjEuNjItLjE2IDEuMjUtLjE2IDEuODcgMCAyLjQ2IDEuMjYgNi44NCAzIDkuOTdoLS4wMXoiIGZpbGw9IiNDMTFDNzkiLz48cGF0aCBkPSJNMzEuMTggNTEuOTM1Yy45NC0xLjY5IDEuNjItNC4wNyAxLjYyLTUuNCAwLS4zNC0uMDMtLjY4LS4wOC0xLjAxLS4xOS0xLjE2LS44Mi0xLjk0LTEuNTMtMS45NGgtLjAyYy0uNzEgMC0xLjM0Ljc4LTEuNTMgMS45NC0uMDYuMzMtLjA4LjY4LS4wOCAxLjAxIDAgMS4zMy42OCAzLjcxIDEuNjIgNS40eiIgZmlsbD0iI0ZGNDM4QiIvPjxwYXRoIGQ9Ik0xMi44NyA1OC42OTZjMS43NC0zLjEyIDMtNy41MSAzLTkuOTcgMC0uNjItLjA2LTEuMjYtLjE2LTEuODctLjM1LTIuMTQtMS41Mi0zLjU5LTIuODItMy41OGgtLjAzYy0xLjMxIDAtMi40NyAxLjQ0LTIuODIgMy41OC0uMS42Mi0uMTYgMS4yNS0uMTYgMS44NyAwIDIuNDYgMS4yNiA2Ljg0IDMgOS45N2gtLjAxeiIgZmlsbD0iI0MxMUM3OSIvPjxwYXRoIGQ9Ik0xMi44NyA1MS45MzZjLjk0LTEuNjkgMS42Mi00LjA3IDEuNjItNS40IDAtLjM0LS4wMy0uNjgtLjA5LTEuMDEtLjE5LTEuMTYtLjgyLTEuOTQtMS41My0xLjk0aC0uMDJjLS43MSAwLTEuMzQuNzgtMS41MyAxLjk0LS4wNi4zMy0uMDkuNjgtLjA5IDEuMDEgMCAxLjMzLjY4IDMuNzEgMS42MiA1LjRoLjAyeiIgZmlsbD0iI0ZGNDM4QiIvPjxwYXRoIGQ9Ik0yMi4wMiA2Ny4yNDZjMi43OC00LjU5IDQuNzktMTEuMDIgNC43OS0xNC42MyAwLS45Mi0uMDktMS44NS0uMjUtMi43NS0uNTctMy4xNC0yLjQzLTUuMjctNC41Mi01LjI2aC0uMDVjLTIuMDktLjAxLTMuOTUgMi4xMS00LjUyIDUuMjYtLjE2LjktLjI1IDEuODMtLjI1IDIuNzUgMCAzLjYxIDIuMDEgMTAuMDUgNC43OSAxNC42M2guMDF6IiBmaWxsPSIjQzExQzc5Ii8+PHBhdGggZD0iTTIyLjAyIDU4LjExNWMxLjI2LTIuMDEgMi4xNy00Ljg0IDIuMTctNi40MyAwLS40LS4wNC0uODEtLjExLTEuMjEtLjI2LTEuMzgtMS4xLTIuMzItMi4wNC0yLjMxaC0uMDJjLS45NCAwLTEuNzkuOTMtMi4wNCAyLjMxLS4wNy40LS4xMS44MS0uMTEgMS4yMSAwIDEuNTkuOTEgNC40MSAyLjE3IDYuNDNoLS4wMnoiIGZpbGw9IiNGRjQzOEIiLz48cGF0aCBkPSJNMjIuMDggMi4xMzVjLTUuODkgMC05LjMxIDEyLjM4LTEwLjEgMjEuNDctLjM0IDMuOTUtLjgzIDExLjA2LTEuNDMgMTQuMzItLjM1IDEuOTQtMS41NSA1LjEyLTEuNjQgNS4zNy01LjM3IDMuMzItNi42MiA0Ljg1LTYuMzEgNS4yMy4xNC4xNiAyLjE5LS4yNSA0LjU4LS43NSAxLjg2LS4zOSAzLjk2LS43NyA1LjMyLTEuNDUgNS4zMS0yLjY0IDQuNTUtOC4xOSA1LjQ2LTguMjIgMS4wNC0uMDMuNDIgMS42NyAxLjE5IDMuNTMgMS4wMyAyLjUgMy43MyA1LjMgMTAuMTQgNC4zNC0xLjc4LTEuNTUtMi4xNi03LjgxLTEuMDQtNy44MS44NCAwIC4xNCAzLjI3IDMuNjIgNi42MSAzLjE5IDMuMDcgOS43NCAzLjk4IDkuNzkgMy43NC4yMi0xLjIxLTQuNDItMy42Ni02LjQ2LTUuMTktMS40MS0zLjMzLTIuNDQtMTcuNTctMi42OC0xOS43Ny0xLjEyLTEwLjI3LTQuMzQtMjEuNDMtMTAuNDMtMjEuNDNsLS4wMS4wMXoiIGZpbGw9IiNFOEU4RTgiLz48cGF0aCBkPSJNMjIuMDggMi4xMzZjNi4wOSAwIDkuMzIgMTEuMTYgMTAuNDMgMjEuNDMuMjQgMi4xOSAxLjI3IDE2LjQ0IDIuNjggMTkuNzcgMi4wNCAxLjUzIDYuNjcgMy45NyA2LjQ2IDUuMTkgMCAuMDItLjA3LjA0LS4yLjA0LTEuMTMgMC02LjcxLTEuMDItOS41OC0zLjc4LTMuNDgtMy4zNS0yLjc4LTYuNjEtMy42Mi02LjYxLTEuMTIgMC0uNzQgNi4yNiAxLjA0IDcuODEtLjg4LjEzLTEuNjkuMTktMi40NC4xOS00LjY4IDAtNi44MS0yLjM4LTcuNy00LjU0LS43Ni0xLjg1LS4xNy0zLjUzLTEuMTctMy41M2gtLjAzYy0uOTEuMDMtLjE1IDUuNTgtNS40NiA4LjIyLTEuMzYuNjgtMy40NSAxLjA1LTUuMzIgMS40NS0yLjAyLjQzLTMuODEuNzktNC4zOS43OS0uMSAwLS4xNy0uMDEtLjE5LS4wNC0uMzEtLjM3Ljk0LTEuOTEgNi4zMS01LjIzLjEtLjI2IDEuMjktMy40MyAxLjY0LTUuMzcuNTktMy4yNiAxLjA4LTEwLjM2IDEuNDMtMTQuMzIuODEtOS4xIDQuMjItMjEuNDcgMTAuMTEtMjEuNDd6bTAtMS42MWMtNy42NiAwLTEwLjk2IDE0LjQyLTExLjcgMjIuOTQtLjA3Ljg0LS4xNSAxLjgxLS4yNCAyLjg2LS4zMiAzLjkyLS43MiA4LjgxLTEuMTcgMTEuMy0uMjQgMS4zMi0uOTcgMy40Ni0xLjM4IDQuNTgtNi4zMSAzLjk2LTYuNTEgNS4xOS02LjYyIDUuODYtLjA5LjU0LjA1IDEuMDcuMzkgMS40OC4zNC40MS44Mi42MiAxLjQzLjYyczEuNzctLjIgNC43Mi0uODNsLjctLjE1YzEuNzgtLjM3IDMuNjMtLjc1IDUtMS40NCAyLjU4LTEuMjggMy45NS0zLjE3IDQuNzQtNC44OCAxLjA0IDIuMDcgMy40NyA0LjkgOC45IDQuOS44NCAwIDEuNzQtLjA3IDIuNjctLjIxbDIuNzYtLjQxYzMuMzggMi4yMyA4LjAyIDMuMDEgOS4xNyAzLjAxIDEuNSAwIDEuNzYtMS4yMyAxLjc5LTEuMzcuMzQtMS45Mi0xLjg4LTMuMzUtNC45Ni01LjM0LS42NC0uNDEtMS4yNS0uOC0xLjc0LTEuMTUtMS4wMS0zLjEtMS44OS0xMy4wNC0yLjIzLTE2Ljg5LS4wOC0uOTQtLjE1LTEuNjYtLjE5LTIuMDMtLjc1LTYuODYtMy40Mi0yMi44NS0xMi4wNC0yMi44NXoiIGZpbGw9IiMxMzE1MjEiLz48cGF0aCBkPSJNMTguMzIgMjEuOTE2YzEuMTMyIDAgMi4wNS0xLjU5OSAyLjA1LTMuNTcgMC0xLjk3Mi0uOTE4LTMuNTctMi4wNS0zLjU3LTEuMTMyIDAtMi4wNSAxLjU5OC0yLjA1IDMuNTcgMCAxLjk3MS45MTggMy41NyAyLjA1IDMuNTd6bTcuNTggMGMxLjEzMiAwIDIuMDUtMS41OTkgMi4wNS0zLjU3IDAtMS45NzItLjkxOC0zLjU3LTIuMDUtMy41Ny0xLjEzMiAwLTIuMDUgMS41OTgtMi4wNSAzLjU3IDAgMS45NzEuOTE4IDMuNTcgMi4wNSAzLjU3eiIgZmlsbD0iIzEzMTUyMSIvPjxwYXRoIG9wYWNpdHk9Ii4yIiBkPSJNMTkuMTYgMzcuNzY2Yy0uMzUgMS41OS0uNDcgMi44NS4zMyA0LjU2LjY5IDEuMjggMS44NyAyLjU0IDMuNzkgMy4yNS0yLjkxLTIuOS0zLjItNC41Mi00LjExLTcuODFoLS4wMXptLTYuMTkgOC4yOWMuNDgtMS42MyAxLTQuODUuOTMtNi41OC0uMDkuNjItMS44NSA0LjIzLTEuODUgNC4yM3MtMS45MSAyLjE3LTQuNDcgMy45N2MxLjc2LS4zNyAzLjY1LS43NCA0LjkxLTEuMzYuMTctLjA4LjMzLS4xNy40OC0uMjZ6bTE1LjgxLTguOTZjMCAxLjIyLjE0IDMuNTggMS4yNyA1LjQyLjQzLjcyIDEuMDEgMS40OSAxLjgxIDIuMjYgMi4zNyAyLjI4IDYuNiAzLjM3IDguNjMgMy42OC03LjI1LTMuNTktOS41NC02LjYxLTExLjcxLTExLjM2eiIgZmlsbD0iIzJFMzA0OCIvPjxwYXRoIGQ9Ik0yMi4yNCAyNS41NTVjLjQ3IDAgLjg1LS40ODMuODUtMS4wOCAwLS41OTYtLjM4LTEuMDgtLjg1LTEuMDhzLS44NS40ODQtLjg1IDEuMDhjMCAuNTk3LjM4IDEuMDguODUgMS4wOHoiIGZpbGw9IiMxMzE1MjEiLz48cGF0aCBkPSJNMjguMDY4IDYuNzI3Yy0xLjU4NC0yLjgxNS0zLjU3Mi00LjYwMi02LjAyNC00LjYwMi0yLjI4IDAtNi41MjYgMi40OTMtOS4wNDkgMTQuNjAxIDMuMDI3LTUuNTUgNS41NS0xMi4xMDggOS4yMS0xMS42NzQgMi4wOCAwIDQuMDM3LjU5NSA1Ljg1MyAxLjY2NWwuMDEuMDF6IiBmaWxsPSIjQzNDM0M4Ii8+PHBhdGggb3BhY2l0eT0iLjQiIGQ9Ik0yMi4wNiA3Ni40NjZjMTAuMjc4IDAgMTguNjEtMS4zODQgMTguNjEtMy4wOSAwLTEuNzA3LTguMzMyLTMuMDktMTguNjEtMy4wOS0xMC4yNzggMC0xOC42MSAxLjM4My0xOC42MSAzLjA5IDAgMS43MDYgOC4zMzIgMy4wOSAxOC42MSAzLjA5eiIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik02NC4wODQgMTQuOTI4djEwLjE2YzAgLjUyLjAzIDEgLjA4IDEuNDJoLTEuNzhjLS4wNS0uMy0uMDgtLjYzLS4wOC0xLjAxLS4xOS4zNS0uNDkuNjQtLjkuODYtLjQxLjIyLS44Ny4zNC0xLjM5LjM0LTEuMTEgMC0yLjAxLS4zOS0yLjctMS4xNy0uNjktLjc4LTEuMDQtMS43Ni0xLjA0LTIuOTRzLjM1LTIuMTEgMS4wNS0yLjljLjctLjc5IDEuNTktMS4xOCAyLjY2LTEuMTguNjIgMCAxLjEyLjExIDEuNS4zNC4zOC4yMy42NC40OS43OS43OHYtNC43aDEuODF6bS01Ljk1IDcuNjZjMCAuNzUuMTkgMS4zNS41OCAxLjguMzguNDUuODkuNjggMS41Mi42OHMxLjEtLjIzIDEuNDktLjY5Yy4zOS0uNDYuNTgtMS4wNi41OC0xLjgxcy0uMTktMS4zMi0uNTYtMS43NmMtLjM3LS40NC0uODctLjY2LTEuNDktLjY2cy0xLjEyLjIyLTEuNTIuNjZjLS4zOS40NC0uNTkgMS4wMy0uNTkgMS43N2wtLjAxLjAxem0xNi4zIDMuOTJsLTEuMDctMi44NWgtNC44bC0xLjA2IDIuODVoLTIuMDNsNC40Mi0xMS4zNGgyLjIybDQuNDIgMTEuMzRoLTIuMXptLTMuNDctOS4yNmwtMS43MyA0LjY0aDMuNDZsLTEuNzMtNC42NHptOC43MiAxMi4zaC0xLjg0di0xMC44M2gxLjc5djEuMDZjLjItLjM1LjUyLS42NC45Ni0uODguNDQtLjIzLjk0LS4zNSAxLjUyLS4zNSAxLjEyIDAgMiAuMzggMi42NCAxLjE0LjY0Ljc2Ljk2IDEuNzQuOTYgMi45MnMtLjM0IDIuMTYtMS4wMSAyLjk0Yy0uNjcuNzctMS41NiAxLjE2LTIuNjYgMS4xNi0uNTMgMC0xLjAxLS4xLTEuNDItLjMtLjQyLS4yLS43My0uNDYtLjk0LS43N3YzLjkyLS4wMXptNC4xOC02Ljk0YzAtLjcyLS4xOS0xLjMxLS41OC0xLjc1LS4zOC0uNDQtLjg5LS42Ni0xLjUyLS42NnMtMS4xMi4yMi0xLjUxLjY2Yy0uMzkuNDQtLjU4IDEuMDMtLjU4IDEuNzVzLjE5IDEuMzMuNTggMS43OGMuMzkuNDUuODkuNjcgMS41MS42N3MxLjEyLS4yMiAxLjUxLS42N2MuMzktLjQ1LjU4LTEuMDQuNTgtMS43OGguMDF6bTUuNDggNi45NGgtMS44NHYtMTAuODNoMS43OXYxLjA2Yy4yLS4zNS41Mi0uNjQuOTYtLjg4LjQ0LS4yMy45NC0uMzUgMS41Mi0uMzUgMS4xMiAwIDIgLjM4IDIuNjQgMS4xNC42NC43Ni45NiAxLjc0Ljk2IDIuOTJzLS4zNCAyLjE2LTEuMDEgMi45NGMtLjY3Ljc3LTEuNTYgMS4xNi0yLjY2IDEuMTYtLjUzIDAtMS4wMS0uMS0xLjQyLS4zLS40Mi0uMi0uNzMtLjQ2LS45NC0uNzd2My45Mi0uMDF6bTQuMTgtNi45NGMwLS43Mi0uMTktMS4zMS0uNTgtMS43NS0uMzgtLjQ0LS44OS0uNjYtMS41Mi0uNjZzLTEuMTIuMjItMS41MS42NmMtLjM5LjQ0LS41OCAxLjAzLS41OCAxLjc1cy4xOSAxLjMzLjU4IDEuNzhjLjM5LjQ1Ljg5LjY3IDEuNTEuNjdzMS4xMi0uMjIgMS41MS0uNjdjLjM5LS40NS41OC0xLjA0LjU4LTEuNzhoLjAxeiIgZmlsbD0iI0JGQkZCRiIvPjxwYXRoIGQ9Ik02Ny4zODQgNDIuMzZjLjkwNi0uMjk5IDEuNjUtLjg3MSAyLjIzLTEuNy41ODItLjgzLjg3My0xLjc5NS44NzMtMi44OCAwLTEuNzEtLjU4MS0zLjA5NS0xLjczNS00LjE2M0M2Ny41OTggMzIuNTUgNjYgMzIuMDIgNjMuOTY2IDMyLjAyaC03LjY5MnYyMS4zOTJoOC4yNjRjMS45OTIgMCAzLjU5LS41NTYgNC43OTUtMS42NzUgMS4yMDUtMS4xMiAxLjgxMi0yLjU0NyAxLjgxMi00LjMgMC0xLjI5LS4zNi0yLjM4NC0xLjA2OS0zLjMwNy0uNzE3LS45MTQtMS42MTUtMS41MDQtMi43LTEuNzY5aC4wMDh6bS03LTYuODQ2aDIuOTI0Yy45ODIgMCAxLjc0My4yNCAyLjI4Mi43MS41My40Ny44MDMgMS4xMi44MDMgMS45NDkgMCAuODI4LS4yNzQgMS40NzgtLjgxMiAxLjk1Ny0uNTQ3LjQ4Ny0xLjI5LjcyNi0yLjIzLjcyNmgtMi45NTh2LTUuMzQyaC0uMDA4em01Ljc1MiAxMy42ODNjLS41NzIuNDk2LTEuMzU4Ljc0NC0yLjM2Ny43NDRoLTMuMzc2di01LjY0aDMuNDM2YzEuMDA5IDAgMS43ODYuMjY0IDIuMzQyLjc4Ni41NTUuNTIuODI5IDEuMjEzLjgyOSAyLjA4NSAwIC44NzItLjI4MiAxLjU0Ny0uODY0IDIuMDM0di0uMDA5eiIgZmlsbD0idXJsKCNwcmVmaXhfX3ByZWZpeF9fcGFpbnQwX2xpbmVhcl8xMTA2XzU1MjgpIi8+PHBhdGggZD0iTTg0LjQgMzEuNTU4Yy0zLjAxNyAwLTUuNTk4IDEuMDI1LTcuNzUxIDMuMDc2LTIuMTU0IDIuMDUxLTMuMjMgNC43NDMtMy4yMyA4LjA4NSAwIDMuMzQyIDEuMDc2IDYuMDA4IDMuMjMgOC4wNiAyLjE1MyAyLjA1IDQuNzM0IDMuMDc2IDcuNzUxIDMuMDc2IDMuMDE3IDAgNS42MzItMS4wMjUgNy43ODYtMy4wNzYgMi4xNTQtMi4wNTIgMy4yMy00LjczNSAzLjIzLTguMDYgMC0zLjMyNC0xLjA3Ni02LjAzNC0zLjIzLTguMDg1LTIuMTU0LTIuMDUtNC43NDMtMy4wNzYtNy43ODYtMy4wNzZ6bTQuNzEgMTYuNGMtMS4zMjUgMS4yNC0yLjg5OCAxLjg1NS00LjcxIDEuODU1LTEuODExIDAtMy4zNS0uNjE2LTQuNjc1LTEuODU1LTEuMzI0LTEuMjQtMS45OS0yLjk5MS0xLjk5LTUuMjY0IDAtMi4yNzQuNjY2LTQuMDI2IDEuOTktNS4yNjUgMS4zMjUtMS4yNCAyLjg5LTEuODU1IDQuNjc1LTEuODU1IDEuNzg3IDAgMy4zNzYuNjE2IDQuNzEgMS44NTUgMS4zMjQgMS4yNCAxLjk5IDIuOTkxIDEuOTkgNS4yNjQgMCAyLjI3NC0uNjY2IDQuMDI2LTEuOTkgNS4yNjV6IiBmaWxsPSJ1cmwoI3ByZWZpeF9fcHJlZml4X19wYWludDFfbGluZWFyXzExMDZfNTUyOCkiLz48cGF0aCBkPSJNMTA4Ljc0OSAzMS41NThjLTMuMDE3IDAtNS41OTggMS4wMjUtNy43NTEgMy4wNzYtMi4xNTQgMi4wNTEtMy4yMyA0Ljc0My0zLjIzIDguMDg1IDAgMy4zNDIgMS4wNzYgNi4wMDggMy4yMyA4LjA2IDIuMTUzIDIuMDUgNC43MzQgMy4wNzYgNy43NTEgMy4wNzYgMy4wMTcgMCA1LjYzMi0xLjAyNSA3Ljc4Ni0zLjA3NiAyLjE1NC0yLjA1MiAzLjIzMS00LjczNSAzLjIzMS04LjA2IDAtMy4zMjQtMS4wNzctNi4wMzQtMy4yMzEtOC4wODUtMi4xNTQtMi4wNS00Ljc0My0zLjA3Ni03Ljc4Ni0zLjA3NnptNC43MDkgMTYuNGMtMS4zMjQgMS4yNC0yLjg5NyAxLjg1NS00LjcwOSAxLjg1NS0xLjgxMiAwLTMuMzUtLjYxNi00LjY3NS0xLjg1NS0xLjMyNC0xLjI0LTEuOTkxLTIuOTkxLTEuOTkxLTUuMjY0IDAtMi4yNzQuNjY3LTQuMDI2IDEuOTkxLTUuMjY1IDEuMzI1LTEuMjQgMi44ODktMS44NTUgNC42NzUtMS44NTUgMS43ODcgMCAzLjM3Ni42MTYgNC43MDkgMS44NTUgMS4zMjUgMS4yNCAxLjk5MiAyLjk5MSAxLjk5MiA1LjI2NCAwIDIuMjc0LS42NjcgNC4wMjYtMS45OTIgNS4yNjV6IiBmaWxsPSJ1cmwoI3ByZWZpeF9fcHJlZml4X19wYWludDJfbGluZWFyXzExMDZfNTUyOCkiLz48cGF0aCBkPSJNMTMyLjA0NyA0MC45NDFsLTIuOTkxLS41NzJjLTEuNTQ3LS4zLTIuMzI1LTEuMTAzLTIuMzI1LTIuNDEgMC0uNzQ0LjMxNi0xLjM4NS45MzItMS45MTUuNjE1LS41MyAxLjQyNy0uODAzIDIuNDEtLjgwMyAxLjIwNSAwIDIuMTE5LjMxNiAyLjc0My45MzIuNjI0LjYyMyAxLjAwOSAxLjMxNiAxLjE0NSAyLjA4NWwzLjc0NC0xLjE0NWE3LjQyMiA3LjQyMiAwIDAwLS42OTMtMS44OThjLS4zMjQtLjYwNi0uNzc3LTEuMTg4LTEuMzU4LTEuNzY5LS41ODItLjU4LTEuMzU5LTEuMDM0LTIuMzI1LTEuMzc2LS45NjYtLjM0Mi0yLjA2LS41MTItMy4yOTEtLjUxMi0yLjA1MSAwLTMuODAzLjY0LTUuMjY0IDEuOTMxLTEuNDYyIDEuMjktMi4xODggMi44OC0yLjE4OCA0Ljc2OSAwIDEuNTkuNTA0IDIuOTE0IDEuNTA0IDMuOTgzIDEuMDA5IDEuMDY4IDIuMzc2IDEuNzc3IDQuMTAyIDIuMTQ1bDIuOTkyLjYwNmMuODIuMTYzIDEuNDYxLjQ3IDEuOTE0LjkyNGEyLjIgMi4yIDAgMDEuNjc1IDEuNjE1YzAgLjc4Ni0uMzA3IDEuNDE5LS45MjMgMS44OTctLjYxNS40NzktMS40NjEuNzI3LTIuNTQ3LjcyNy0xLjQyNyAwLTIuNTM4LS4zODUtMy4zMzMtMS4xNDYtLjc5NS0uNzYtMS4yMzktMS43MTgtMS4zNDEtMi44NjNsLTMuODYzIDEuMDI2YTYuODMgNi44MyAwIDAwLjY3NSAyLjM0MmMuMzc2Ljc1Mi44ODkgMS40NyAxLjU1NSAyLjE0NS42NjcuNjc1IDEuNTM4IDEuMjEzIDIuNjI0IDEuNjE1IDEuMDg1LjQwMiAyLjI5OS42MDcgMy42NDkuNjA3IDIuMzUxIDAgNC4yMzEtLjY1OCA1LjYyNC0xLjk3NCAxLjM5My0xLjMxNiAyLjA5NC0yLjg2MyAyLjA5NC00LjYzMyAwLTEuNTQ3LS41MjItMi44OTctMS41NzMtNC4wNDJzLTIuNTEzLTEuODk3LTQuNDAxLTIuMjY1bC4wMzQtLjAyNnoiIGZpbGw9InVybCgjcHJlZml4X19wcmVmaXhfX3BhaW50M19saW5lYXJfMTEwNl81NTI4KSIvPjxwYXRoIGQ9Ik0xMzkuNTI1IDM1Ljk1OWg2Ljc2djE3LjQ0M2g0LjE5N1YzNS45Nmg2Ljc1MXYtMy45NWgtMTcuNzA4djMuOTQ5eiIgZmlsbD0idXJsKCNwcmVmaXhfX3ByZWZpeF9fcGFpbnQ0X2xpbmVhcl8xMTA2XzU1MjgpIi8+PHBhdGggZD0iTTE2MC4xNjUgNTMuNDAyaDEzLjM5MlY0OS40OGgtOS4yM3YtNC45NWg4LjM1OHYtMy43MWgtOC4zNTh2LTQuODg4aDkuMjNWMzIuMDFoLTEzLjM5MnYyMS4zOTF6IiBmaWxsPSJ1cmwoI3ByZWZpeF9fcHJlZml4X19wYWludDVfbGluZWFyXzExMDZfNTUyOCkiLz48cGF0aCBkPSJNMTg4LjM0MiA0NC42NWMxLjQxMS0uNDAxIDIuNTIyLTEuMTQ1IDMuMzMzLTIuMjEzLjgxMi0xLjA3NyAxLjIyMy0yLjM1OSAxLjIyMy0zLjg0NiAwLTEuODg5LS42MjQtMy40NjEtMS44NzItNC43MDktMS4yNDgtMS4yNDgtMi44OTctMS44NzEtNC45NDgtMS44NzFoLTguMzU5djIxLjM5MWg0LjE5NnYtOC4yMzloMi4xNzFsNC4xOTcgOC4yNGg0LjY0OWwtNC41OS04Ljc1MnptLS41ODktMy44ODhjLS41OS41NDctMS40MTEuODEyLTIuNDYyLjgxMmgtMy4zNzZ2LTUuOTQ4aDMuMzc2YzEuMDQzIDAgMS44NjMuMjczIDIuNDYyLjgxMi41ODkuNTQ2Ljg4OCAxLjI2NC44ODggMi4xNyAwIC45MDYtLjI5OSAxLjU5OS0uODg4IDIuMTQ2di4wMDh6IiBmaWxsPSJ1cmwoI3ByZWZpeF9fcHJlZml4X19wYWludDZfbGluZWFyXzExMDZfNTUyOCkiLz48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9InByZWZpeF9fcHJlZml4X19wYWludDBfbGluZWFyXzExMDZfNTUyOCIgeDE9IjYzLjcxOCIgeTE9Ijg4LjM0IiB4Mj0iNjMuNzE4IiB5Mj0iMjUuOTM0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzY2MjY4MSIvPjxzdG9wIG9mZnNldD0iLjcyIiBzdG9wLWNvbG9yPSIjQjkxQzdCIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9InByZWZpeF9fcHJlZml4X19wYWludDFfbGluZWFyXzExMDZfNTUyOCIgeDE9Ijg0LjQxOCIgeTE9Ijg4LjM0IiB4Mj0iODQuNDE4IiB5Mj0iMjUuOTM0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzY2MjY4MSIvPjxzdG9wIG9mZnNldD0iLjcyIiBzdG9wLWNvbG9yPSIjQjkxQzdCIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9InByZWZpeF9fcHJlZml4X19wYWludDJfbGluZWFyXzExMDZfNTUyOCIgeDE9IjEwOC43NjYiIHkxPSIxLjU5NCIgeDI9IjEwOC43NjYiIHkyPSIyNS45MzQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjNjYyNjgxIi8+PHN0b3Agb2Zmc2V0PSIuNzIiIHN0b3AtY29sb3I9IiNCOTFDN0IiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0icHJlZml4X19wcmVmaXhfX3BhaW50M19saW5lYXJfMTEwNl81NTI4IiB4MT0iMTI5LjkwMiIgeTE9Ijg4LjM0IiB4Mj0iMTI5LjkwMiIgeTI9IjI1LjkzNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM2NjI2ODEiLz48c3RvcCBvZmZzZXQ9Ii43MiIgc3RvcC1jb2xvcj0iI0I5MUM3QiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJwcmVmaXhfX3ByZWZpeF9fcGFpbnQ0X2xpbmVhcl8xMTA2XzU1MjgiIHgxPSIxNDguMzc5IiB5MT0iODguMzQiIHgyPSIxNDguMzc5IiB5Mj0iMjUuOTM0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzY2MjY4MSIvPjxzdG9wIG9mZnNldD0iLjcyIiBzdG9wLWNvbG9yPSIjQjkxQzdCIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9InByZWZpeF9fcHJlZml4X19wYWludDVfbGluZWFyXzExMDZfNTUyOCIgeDE9IjE2Ni44NjUiIHkxPSI4OC4zNCIgeDI9IjE2Ni44NjUiIHkyPSIyNS45MzQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjNjYyNjgxIi8+PHN0b3Agb2Zmc2V0PSIuNzIiIHN0b3AtY29sb3I9IiNCOTFDN0IiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0icHJlZml4X19wcmVmaXhfX3BhaW50Nl9saW5lYXJfMTEwNl81NTI4IiB4MT0iMTg1LjMyNSIgeTE9Ijg4LjM0IiB4Mj0iMTg1LjMyNSIgeTI9IjI1LjkzNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM2NjI2ODEiLz48c3RvcCBvZmZzZXQ9Ii43MiIgc3RvcC1jb2xvcj0iI0I5MUM3QiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg==' + +const LogoLight = + 'PHN2ZyB3aWR0aD0iMTkzIiBoZWlnaHQ9Ijc3IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0zNS41NzQgNDIuNDE2Yy0uMTMtLjM0Ni0uMjYtLjY5MS0uMzctMS4wNDctMS4yODctNC4yMjctMi4wMTUtMTMuMzIyLTIuNDc0LTE4LjU4NkMzMS42NzIgMTAuODczIDI3LjU1MSAxLjEwNSAyMS4xODUuNzVWLjY3Yy02LjM2Ny4zNDYtMTAuNDg4IDEwLjEyMy0xMS41NDYgMjIuMDI0LS40NjkgNS4yNzQtMS4xODcgMTQuMzYtMi40NzQgMTguNTg2LS4xMi4zNTYtLjI0LjcxMS0uMzcgMS4wNDctMTkuODE3IDEwLjIyMiA5LjU4IDExLjU2NSAxNC4zOSAxMS42MzR2LjA3OWM0LjgxLS4wNyAzNC4yMTYtMS40MTIgMTQuMzg5LTExLjYzNHYuMDF6IiBmaWxsPSIjMkUzMDQ4Ii8+PHBhdGggZD0iTTMwLjI4NSA1OC4xMmMxLjczNy0zLjEyIDIuOTk0LTcuNTEgMi45OTQtOS45NyAwLS42Mi0uMDYtMS4yNi0uMTYtMS44Ny0uMzUtMi4xNC0xLjUxNy0zLjU5LTIuODE0LTMuNThoLS4wM2MtMS4zMDcgMC0yLjQ2NCAxLjQ0LTIuODE0IDMuNTgtLjEuNjItLjE2IDEuMjUtLjE2IDEuODcgMCAyLjQ2IDEuMjU4IDYuODQgMi45OTQgOS45N2gtLjAxeiIgZmlsbD0iI0MxMUM3OSIvPjxwYXRoIGQ9Ik0zMC4yODUgNTEuODNjLjkzOC0xLjY5IDEuNjE3LTQuMDcgMS42MTctNS40IDAtLjM0LS4wMy0uNjgtLjA4LTEuMDEtLjE5LTEuMTYtLjgxOC0xLjk0LTEuNTI3LTEuOTRoLS4wMmMtLjcwOCAwLTEuMzM3Ljc4LTEuNTI2IDEuOTQtLjA2LjMzLS4wOC42OC0uMDggMS4wMSAwIDEuMzMuNjc4IDMuNzEgMS42MTYgNS40eiIgZmlsbD0iI0ZGNDM4QiIvPjxwYXRoIGQ9Ik0xMi4wMTQgNTguNTljMS43MzctMy4xMiAyLjk5NC03LjUxIDIuOTk0LTkuOTcgMC0uNjItLjA2LTEuMjYtLjE2LTEuODctLjM0OS0yLjE0LTEuNTE3LTMuNTktMi44MTQtMy41OGgtLjAzYy0xLjMwNyAwLTIuNDY0IDEuNDQtMi44MTQgMy41OC0uMS42Mi0uMTYgMS4yNS0uMTYgMS44NyAwIDIuNDYgMS4yNTggNi44NCAyLjk5NCA5Ljk3aC0uMDF6IiBmaWxsPSIjQzExQzc5Ii8+PHBhdGggZD0iTTEyLjAxNCA1MS44M2MuOTM4LTEuNjkgMS42MTctNC4wNyAxLjYxNy01LjQgMC0uMzQtLjAzLS42OC0uMDktMS4wMS0uMTktMS4xNi0uODE4LTEuOTQtMS41MjctMS45NGgtLjAyYy0uNzA4IDAtMS4zMzcuNzgtMS41MjYgMS45NC0uMDYuMzMtLjA5LjY4LS4wOSAxLjAxIDAgMS4zMy42NzggMy43MSAxLjYxNiA1LjRoLjAyeiIgZmlsbD0iI0ZGNDM4QiIvPjxwYXRoIGQ9Ik0yMS4xNDUgNjcuMTRjMi43NzQtNC41OSA0Ljc4LTExLjAyIDQuNzgtMTQuNjMgMC0uOTItLjA5LTEuODUtLjI1LTIuNzUtLjU2OS0zLjE0LTIuNDI1LTUuMjctNC41MS01LjI2aC0uMDVjLTIuMDg2LS4wMS0zLjk0MiAyLjExLTQuNTEgNS4yNi0uMTYuOS0uMjUgMS44My0uMjUgMi43NSAwIDMuNjEgMi4wMDYgMTAuMDUgNC43OCAxNC42M2guMDF6IiBmaWxsPSIjQzExQzc5Ii8+PHBhdGggZD0iTTIxLjE0NSA1OC4wMWMxLjI1Ny0yLjAxIDIuMTY1LTQuODQgMi4xNjUtNi40MyAwLS40LS4wNC0uODEtLjExLTEuMjEtLjI2LTEuMzgtMS4wOTctMi4zMi0yLjAzNS0yLjMxaC0uMDJjLS45MzggMC0xLjc4Ni45My0yLjAzNiAyLjMxLS4wNy40LS4xMS44MS0uMTEgMS4yMSAwIDEuNTkuOTA4IDQuNDEgMi4xNjYgNi40M2gtLjAyeiIgZmlsbD0iI0ZGNDM4QiIvPjxwYXRoIGQ9Ik0yMS4yMDUgMi4wM2MtNS44NzggMC05LjI5IDEyLjM4LTEwLjA3OSAyMS40Ny0uMzQgMy45NS0uODI4IDExLjA2LTEuNDI3IDE0LjMyLS4zNDkgMS45NC0xLjU0NiA1LjEyLTEuNjM2IDUuMzctNS4zNTkgMy4zMi02LjYwNiA0Ljg1LTYuMjk3IDUuMjMuMTQuMTYgMi4xODYtLjI1IDQuNTctLjc1IDEuODU2LS4zOSAzLjk1Mi0uNzcgNS4zMS0xLjQ1IDUuMjk4LTIuNjQgNC41NC04LjE5IDUuNDQ3LTguMjIgMS4wMzgtLjAzLjQyIDEuNjcgMS4xODggMy41MyAxLjAyOCAyLjUgMy43MjIgNS4zIDEwLjExOCA0LjM0LTEuNzc2LTEuNTUtMi4xNTUtNy44MS0xLjAzOC03LjgxLjgzOSAwIC4xNCAzLjI3IDMuNjEzIDYuNjEgMy4xODMgMy4wNyA5LjcxOSAzLjk4IDkuNzY5IDMuNzQuMjItMS4yMS00LjQxLTMuNjYtNi40NDYtNS4xOS0xLjQwNy0zLjMzLTIuNDM1LTE3LjU3LTIuNjc1LTE5Ljc3LTEuMTE3LTEwLjI3LTQuMzMtMjEuNDMtMTAuNDA3LTIxLjQzbC0uMDEuMDF6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTIxLjIwNSAyLjAzYzYuMDc3IDAgOS4zIDExLjE2IDEwLjQwOCAyMS40My4yNCAyLjE5IDEuMjY3IDE2LjQ0IDIuNjc0IDE5Ljc3IDIuMDM1IDEuNTMgNi42NTYgMy45NyA2LjQ0NiA1LjE5IDAgLjAyLS4wNy4wNC0uMi4wNC0xLjEyNyAwLTYuNjk1LTEuMDItOS41NTktMy43OC0zLjQ3My0zLjM1LTIuNzc0LTYuNjEtMy42MTItNi42MS0xLjExOCAwLS43MzkgNi4yNiAxLjAzOCA3LjgxLS44NzkuMTMtMS42ODcuMTktMi40MzUuMTktNC42NyAwLTYuNzk2LTIuMzgtNy42ODQtNC41NC0uNzU4LTEuODUtLjE3LTMuNTMtMS4xNjctMy41M2gtLjAzYy0uOTA4LjAzLS4xNSA1LjU4LTUuNDQ5IDguMjItMS4zNTcuNjgtMy40NDIgMS4wNS01LjMwOCAxLjQ1LTIuMDE2LjQzLTMuODAyLjc5LTQuMzguNzktLjEgMC0uMTctLjAxLS4xOS0uMDQtLjMxLS4zNy45MzctMS45MSA2LjI5Ni01LjIzLjEtLjI2IDEuMjg3LTMuNDMgMS42MzctNS4zNy41ODgtMy4yNiAxLjA3Ny0xMC4zNiAxLjQyNy0xNC4zMi44MDgtOS4xIDQuMjEtMjEuNDcgMTAuMDg4LTIxLjQ3em0wLTEuNjFDMTMuNTYuNDIgMTAuMjY4IDE0Ljg0IDkuNTMgMjMuMzZjLS4wNy44NC0uMTUgMS44MS0uMjQgMi44Ni0uMzE5IDMuOTItLjcxOCA4LjgxLTEuMTY3IDExLjMtLjI0IDEuMzItLjk2OCAzLjQ2LTEuMzc3IDQuNThDLjQ0OSA0Ni4wNi4yNSA0Ny4yOS4xNCA0Ny45NmMtLjA5LjU0LjA1IDEuMDcuMzkgMS40OC4zMzguNDEuODE3LjYyIDEuNDI2LjYyczEuNzY2LS4yIDQuNzEtLjgzbC42OTgtLjE1YzEuNzc3LS4zNyAzLjYyMy0uNzUgNC45OS0xLjQ0IDIuNTc0LTEuMjggMy45NDEtMy4xNyA0LjczLTQuODggMS4wMzggMi4wNyAzLjQ2MiA0LjkgOC44OCA0LjkuODM5IDAgMS43MzctLjA3IDIuNjY1LS4yMWwyLjc1NC0uNDFjMy4zNzMgMi4yMyA4LjAwMyAzLjAxIDkuMTUgMy4wMSAxLjQ5NyAwIDEuNzU3LTEuMjMgMS43ODctMS4zNy4zMzktMS45Mi0xLjg3Ni0zLjM1LTQuOTUtNS4zNC0uNjM4LS40MS0xLjI0Ny0uOC0xLjczNi0xLjE1LTEuMDA4LTMuMS0xLjg4Ni0xMy4wNC0yLjIyNS0xNi44OS0uMDgtLjk0LS4xNS0xLjY2LS4xOS0yLjAzQzMyLjQ3MSAxNi40MSAyOS44MDYuNDIgMjEuMjA1LjQyeiIgZmlsbD0iIzJFMzA0OCIvPjxwYXRoIGQ9Ik0xNy40NTMgMjEuODFjMS4xMyAwIDIuMDQ1LTEuNTk4IDIuMDQ1LTMuNTcgMC0xLjk3Mi0uOTE2LTMuNTctMi4wNDUtMy41Ny0xLjEzIDAtMi4wNDYgMS41OTgtMi4wNDYgMy41NyAwIDEuOTcyLjkxNiAzLjU3IDIuMDQ2IDMuNTd6bTcuNTY0IDBjMS4xMyAwIDIuMDQ1LTEuNTk4IDIuMDQ1LTMuNTcgMC0xLjk3Mi0uOTE2LTMuNTctMi4wNDYtMy41N3MtMi4wNDUgMS41OTgtMi4wNDUgMy41N2MwIDEuOTcyLjkxNiAzLjU3IDIuMDQ2IDMuNTd6IiBmaWxsPSIjMkUzMDQ4Ii8+PHBhdGggZD0iTTE4LjI5IDM3LjY2Yy0uMzQ4IDEuNTktLjQ2OCAyLjg1LjMzIDQuNTYuNjg5IDEuMjggMS44NjYgMi41NCAzLjc4MiAzLjI1LTIuOTA0LTIuOS0zLjE5My00LjUyLTQuMTAxLTcuODFoLS4wMXptLTYuMTc2IDguMjljLjQ4LTEuNjMuOTk4LTQuODUuOTI4LTYuNTgtLjA5LjYyLTEuODQ2IDQuMjMtMS44NDYgNC4yM3MtMS45MDYgMi4xNy00LjQ2IDMuOTdjMS43NTYtLjM3IDMuNjQyLS43NCA0LjktMS4zNi4xNjktLjA4LjMyOC0uMTcuNDc4LS4yNnptMTUuNzc2LTguOTZjMCAxLjIyLjE0IDMuNTggMS4yNjggNS40Mi40MjkuNzIgMS4wMDggMS40OSAxLjgwNiAyLjI2IDIuMzY1IDIuMjggNi41ODYgMy4zNyA4LjYxMSAzLjY4LTcuMjM0LTMuNTktOS41Mi02LjYxLTExLjY4NS0xMS4zNnoiIGZpbGw9IiNFMkUwRTciLz48cGF0aCBkPSJNMjEuMzY0IDI1LjQ1Yy40NjkgMCAuODQ4LS40ODMuODQ4LTEuMDggMC0uNTk2LS4zOC0xLjA4LS44NDgtMS4wOC0uNDY4IDAtLjg0OC40ODQtLjg0OCAxLjA4IDAgLjU5Ni4zOCAxLjA4Ljg0OCAxLjA4eiIgZmlsbD0iIzJFMzA0OCIvPjxwYXRoIGQ9Ik0yNy4yMzkgNi42MzdjLTEuNTg0LTIuODE1LTMuNTcyLTQuNjAxLTYuMDI0LTQuNjAxLTIuMjggMC02LjUyNyAyLjQ5Mi05LjA1IDE0LjYgMy4wMjgtNS41NSA1LjU1LTEyLjEwOCA5LjIxMS0xMS42NzQgMi4wNzkgMCA0LjAzNi41OTUgNS44NTMgMS42NjVsLjAxLjAxeiIgZmlsbD0iI0UyRTBFNyIvPjxwYXRoIGQ9Ik0yMS4xODUgNzYuMzZjMTAuMjU2IDAgMTguNTctMS4zODMgMTguNTctMy4wOSAwLTEuNzA2LTguMzE0LTMuMDktMTguNTctMy4wOXMtMTguNTcgMS4zODMtMTguNTcgMy4wOWMwIDEuNzA3IDguMzE0IDMuMDkgMTguNTcgMy4wOXoiIGZpbGw9IiNDNUMyQ0IiLz48cGF0aCBkPSJNNjIuOTMgMTQuNzI1djEwLjE2YzAgLjUyLjAzIDEgLjA4IDEuNDJoLTEuNzhjLS4wNS0uMy0uMDgtLjYzLS4wOC0xLjAxLS4xOS4zNS0uNDkuNjQtLjkuODYtLjQxLjIyLS44Ny4zNC0xLjM5LjM0LTEuMTEgMC0yLjAxLS4zOS0yLjctMS4xNy0uNjktLjc4LTEuMDQtMS43Ni0xLjA0LTIuOTRzLjM1LTIuMTEgMS4wNS0yLjljLjctLjc5IDEuNTktMS4xOCAyLjY2LTEuMTguNjIgMCAxLjEyLjExIDEuNS4zNC4zOC4yMy42NC40OS43OS43OHYtNC43aDEuODF6bS01Ljk1IDcuNjZjMCAuNzUuMTkgMS4zNS41OCAxLjguMzguNDUuODkuNjggMS41Mi42OHMxLjEtLjIzIDEuNDktLjY5Yy4zOS0uNDYuNTgtMS4wNi41OC0xLjgxcy0uMTktMS4zMi0uNTYtMS43NmMtLjM3LS40NC0uODctLjY2LTEuNDktLjY2cy0xLjEyLjIyLTEuNTIuNjZjLS4zOS40NC0uNTkgMS4wMy0uNTkgMS43N2wtLjAxLjAxem0xNi4zIDMuOTJsLTEuMDctMi44NWgtNC44bC0xLjA2IDIuODVoLTIuMDNsNC40Mi0xMS4zNGgyLjIybDQuNDIgMTEuMzRoLTIuMXptLTMuNDctOS4yNmwtMS43MyA0LjY0aDMuNDZsLTEuNzMtNC42NHptOC43MiAxMi4zaC0xLjg0di0xMC44M2gxLjc5djEuMDZjLjItLjM1LjUyLS42NC45Ni0uODguNDQtLjIzLjk0LS4zNSAxLjUyLS4zNSAxLjEyIDAgMiAuMzggMi42NCAxLjE0LjY0Ljc2Ljk2IDEuNzQuOTYgMi45MnMtLjM0IDIuMTYtMS4wMSAyLjk0Yy0uNjcuNzctMS41NiAxLjE2LTIuNjYgMS4xNi0uNTMgMC0xLjAxLS4xLTEuNDItLjMtLjQyLS4yLS43My0uNDYtLjk0LS43N3YzLjkyLS4wMXptNC4xOC02Ljk0YzAtLjcyLS4xOS0xLjMxLS41OC0xLjc1LS4zOC0uNDQtLjg5LS42Ni0xLjUyLS42NnMtMS4xMi4yMi0xLjUxLjY2Yy0uMzkuNDQtLjU4IDEuMDMtLjU4IDEuNzVzLjE5IDEuMzMuNTggMS43OGMuMzkuNDUuODkuNjcgMS41MS42N3MxLjEyLS4yMiAxLjUxLS42N2MuMzktLjQ1LjU4LTEuMDQuNTgtMS43OGguMDF6bTUuNDggNi45NGgtMS44NHYtMTAuODNoMS43OXYxLjA2Yy4yLS4zNS41Mi0uNjQuOTYtLjg4LjQ0LS4yMy45NC0uMzUgMS41Mi0uMzUgMS4xMiAwIDIgLjM4IDIuNjQgMS4xNC42NC43Ni45NiAxLjc0Ljk2IDIuOTJzLS4zNCAyLjE2LTEuMDEgMi45NGMtLjY3Ljc3LTEuNTYgMS4xNi0yLjY2IDEuMTYtLjUzIDAtMS4wMS0uMS0xLjQyLS4zLS40Mi0uMi0uNzMtLjQ2LS45NC0uNzd2My45Mi0uMDF6bTQuMTgtNi45NGMwLS43Mi0uMTktMS4zMS0uNTgtMS43NS0uMzgtLjQ0LS44OS0uNjYtMS41Mi0uNjZzLTEuMTIuMjItMS41MS42NmMtLjM5LjQ0LS41OCAxLjAzLS41OCAxLjc1cy4xOSAxLjMzLjU4IDEuNzhjLjM5LjQ1Ljg5LjY3IDEuNTEuNjdzMS4xMi0uMjIgMS41MS0uNjdjLjM5LS40NS41OC0xLjA0LjU4LTEuNzhoLjAxeiIgZmlsbD0iIzJFMzA0OCIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNODMuNDAyIDMxLjM1NWMtMy4wMzQgMC01LjYyOSAxLjAzMS03Ljc5NCAzLjA5NC0yLjE2NiAyLjA2Mi0zLjI0OSA0Ljc3LTMuMjQ5IDguMTMgMCAzLjM2IDEuMDgzIDYuMDQgMy4yNDkgOC4xMDMgMi4xNjUgMi4wNjMgNC43NiAzLjA5NCA3Ljc5NCAzLjA5NHM1LjY2My0xLjAzMSA3LjgyOS0zLjA5NGMyLjE2Ni0yLjA2MiAzLjI0OC00Ljc2IDMuMjQ4LTguMTA0IDAtMy4zNDMtMS4wODItNi4wNjctMy4yNDgtOC4xMy0yLjE2Ni0yLjA2Mi00Ljc3LTMuMDkzLTcuODI5LTMuMDkzem00LjczNSAxNi40OTFjLTEuMzMyIDEuMjQ3LTIuOTEzIDEuODY1LTQuNzM1IDEuODY1LTEuODIyIDAtMy4zNjktLjYxOC00LjctMS44NjUtMS4zMzMtMS4yNDYtMi4wMDMtMy4wMDctMi4wMDMtNS4yOTNzLjY3LTQuMDQ4IDIuMDAyLTUuMjk0YzEuMzMyLTEuMjQ2IDIuOTA1LTEuODY1IDQuNzAxLTEuODY1IDEuNzk2IDAgMy4zOTUuNjE5IDQuNzM1IDEuODY1IDEuMzMyIDEuMjQ2IDIuMDAzIDMuMDA4IDIuMDAzIDUuMjk0IDAgMi4yODYtLjY3IDQuMDQ3LTIuMDAzIDUuMjkzem0tMjEuODQ1LTUuNjI4Yy45MS0uMzAxIDEuNjU5LS44NzcgMi4yNDMtMS43MS41ODQtLjgzNC44NzYtMS44MDUuODc2LTIuODk3IDAtMS43MTgtLjU4NC0zLjExLTEuNzQ0LTQuMTg1LTEuMTYtMS4wNzQtMi43NjctMS42MDctNC44MTMtMS42MDdINTUuMTJ2MjEuNTFoOC4zMWMyLjAwMyAwIDMuNjEtLjU1OCA0LjgyMS0xLjY4NCAxLjIxMi0xLjEyNiAxLjgyMi0yLjU2MSAxLjgyMi00LjMyMyAwLTEuMjk3LS4zNi0yLjM5Ny0xLjA3NC0zLjMyNi0uNzIyLS45Mi0xLjYyNC0xLjUxMi0yLjcxNi0xLjc3OGguMDA5em0tNy4wMy02Ljg4NGgyLjkzYy45ODkgMCAxLjc1NC4yNCAyLjI5NS43MTMuNTMzLjQ3My44MDggMS4xMjYuODA4IDEuOTYgMCAuODMzLS4yNzUgMS40ODYtLjgxNiAxLjk2OC0uNTUuNDktMS4yOTguNzMtMi4yNDMuNzNoLTIuOTc0di01LjM3MXptNS43NzUgMTMuNzU5Yy0uNTc2LjQ5OC0xLjM2Ni43NDctMi4zOC43NDdoLTMuMzk1di01LjY3MmgzLjQ1NWMxLjAxNCAwIDEuNzk2LjI2NyAyLjM1NS43OTEuNTU4LjUyNC44MzMgMS4yMi44MzMgMi4wOTcgMCAuODc2LS4yODMgMS41NTUtLjg2OCAyLjA0NXYtLjAwOHptMzUuMDU0LTE0LjY0NGMyLjE2Ni0yLjA2MyA0Ljc2MS0zLjA5NCA3Ljc5NS0zLjA5NCAzLjA1OSAwIDUuNjYzIDEuMDMxIDcuODI5IDMuMDk0IDIuMTY1IDIuMDYyIDMuMjQ4IDQuNzg3IDMuMjQ4IDguMTMgMCAzLjM0Mi0xLjA4MyA2LjA0LTMuMjQ4IDguMTAzLTIuMTY2IDIuMDYzLTQuNzk2IDMuMDk0LTcuODI5IDMuMDk0LTMuMDM0IDAtNS42MjktMS4wMzEtNy43OTUtMy4wOTQtMi4xNjUtMi4wNjItMy4yNDgtNC43NDMtMy4yNDgtOC4xMDQgMC0zLjM2IDEuMDgyLTYuMDY3IDMuMjQ4LTguMTN6bTcuNzk1IDE1LjI2MmMxLjgyMiAwIDMuNDAzLS42MTggNC43MzUtMS44NjUgMS4zMzItMS4yNDYgMi4wMDItMy4wMDcgMi4wMDItNS4yOTNzLS42Ny00LjA0OC0yLjAwMi01LjI5NGMtMS4zNDEtMS4yNDYtMi45MzktMS44NjUtNC43MzUtMS44NjUtMS43OTYgMC0zLjM2OS42MTktNC43MDEgMS44NjUtMS4zMzIgMS4yNDYtMi4wMDIgMy4wMDgtMi4wMDIgNS4yOTQgMCAyLjI4Ni42NyA0LjA0NyAyLjAwMiA1LjI5MyAxLjMzMiAxLjI0NyAyLjg3OSAxLjg2NSA0LjcwMSAxLjg2NXptMjMuNDI2LTguOTJsLTMuMDA3LS41NzZjLTEuNTU2LS4zLTIuMzM4LTEuMTA4LTIuMzM4LTIuNDIzIDAtLjc0OC4zMTgtMS4zOTIuOTM3LTEuOTI1LjYxOC0uNTMzIDEuNDM1LS44MDggMi40MjMtLjgwOCAxLjIxMiAwIDIuMTMxLjMxOCAyLjc1OS45MzcuNjI3LjYyNyAxLjAxNCAxLjMyMyAxLjE1MSAyLjA5NmwzLjc2NC0xLjE1MWE3LjQ2IDcuNDYgMCAwMC0uNjk2LTEuOTA4Yy0uMzI2LS42MS0uNzgyLTEuMTk0LTEuMzY2LTEuNzc5LS41ODQtLjU4NC0xLjM2Ny0xLjA0LTIuMzM4LTEuMzgzLS45NzEtLjM0NC0yLjA3MS0uNTE2LTMuMzA4LS41MTYtMi4wNjMgMC0zLjgyNC42NDUtNS4yOTQgMS45NDItMS40NjkgMS4yOTgtMi4yIDIuODk2LTIuMiA0Ljc5NiAwIDEuNTk4LjUwNyAyLjkzIDEuNTEzIDQuMDA0IDEuMDE0IDEuMDc0IDIuMzg5IDEuNzg4IDQuMTI1IDIuMTU3bDMuMDA3LjYxYy44MjUuMTY0IDEuNDcuNDczIDEuOTI1LjkyOC40NTYuNDU2LjY3OS45OTcuNjc5IDEuNjI1IDAgLjc5LS4zMDkgMS40MjYtLjkyOCAxLjkwNy0uNjE5LjQ4Mi0xLjQ2OS43MzEtMi41NjEuNzMxLTEuNDM1IDAtMi41NTItLjM4Ny0zLjM1MS0xLjE1Mi0uOC0uNzY0LTEuMjQ2LTEuNzI3LTEuMzUtMi44NzhsLTMuODg0IDEuMDNjLjA3Ny44MDkuMzA5IDEuNTkuNjc5IDIuMzU1YTguNDQzIDguNDQzIDAgMDAxLjU2NCAyLjE1OGMuNjcuNjc4IDEuNTQ3IDEuMjIgMi42MzggMS42MjQgMS4wOTIuNDA0IDIuMzEyLjYxIDMuNjcuNjEgMi4zNjMgMCA0LjI1NC0uNjYyIDUuNjU1LTEuOTg1IDEuNC0xLjMyNCAyLjEwNS0yLjg4IDIuMTA1LTQuNjU4IDAtMS41NTYtLjUyNC0yLjkxMy0xLjU4MS00LjA2NS0xLjA1Ny0xLjE1MS0yLjUyNy0xLjkwOC00LjQyNi0yLjI3N2wuMDM0LS4wMjZ6bTE0LjMxOC01LjAxaC02Ljc5OHYtMy45N2gxNy44MDZ2My45N2gtNi43ODl2MTcuNTRoLTQuMjE5VjM1Ljc4em0xMy45NTYgMTcuNTRoMTMuNDY2di0zLjk0NWgtOS4yODFWNDQuNGg4LjQwNXYtMy43M2gtOC40MDV2LTQuOTE1aDkuMjgxVjMxLjgxaC0xMy40NjZ2MjEuNTF6bTMxLjY4NS0xMS4wMjZjLS44MTYgMS4wNzQtMS45MzQgMS44MjItMy4zNTIgMi4yMjZsNC42MTUgOC44aC00LjY3NWwtNC4yMTktOC4yODVoLTIuMTgzdjguMjg1aC00LjIyVjMxLjgxaDguNDA1YzIuMDYzIDAgMy43MjEuNjI3IDQuOTc2IDEuODgyIDEuMjU1IDEuMjU0IDEuODgyIDIuODM1IDEuODgyIDQuNzM1IDAgMS40OTUtLjQxMyAyLjc4NC0xLjIyOSAzLjg2N3ptLTYuNDItLjg2OGMxLjA1OCAwIDEuODgzLS4yNjcgMi40NzUtLjgxN3YtLjAwOGMuNTkzLS41NS44OTQtMS4yNDYuODk0LTIuMTU3cy0uMzAxLTEuNjMzLS44OTQtMi4xODNjLS42MDEtLjU0MS0xLjQyNi0uODE2LTIuNDc1LS44MTZoLTMuMzk0djUuOThoMy4zOTR6IiBmaWxsPSJ1cmwoI3ByZWZpeF9fcHJlZml4X19wYWludDBfbGluZWFyXzEwNTdfMjUxMykiLz48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9InByZWZpeF9fcHJlZml4X19wYWludDBfbGluZWFyXzEwNTdfMjUxMyIgeDE9IjQ4Ljc3OSIgeTE9IjY4LjY5NyIgeDI9IjI1Ni43NjEiIHkyPSIxMC4zMjMiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjNjYyNjgxIi8+PHN0b3Agb2Zmc2V0PSIuODE3IiBzdG9wLWNvbG9yPSIjQjkxQzdCIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PC9zdmc+' + +/** + * @name Logo + * + * @description Default dAppBooster logo + */ +const Logo: FC = ({ ...restProps }) => ( + +) + +export default Logo diff --git a/src/components/sharedComponents/ui/Header/MainMenu/index.tsx b/src/components/sharedComponents/ui/Header/MainMenu/index.tsx new file mode 100644 index 00000000..7a4b3d98 --- /dev/null +++ b/src/components/sharedComponents/ui/Header/MainMenu/index.tsx @@ -0,0 +1,65 @@ +import { menuItems } from '@/src/constants/menuItems' +import { Flex, type FlexProps, Link, chakra } from '@chakra-ui/react' +import { Link as ViteLink } from '@tanstack/react-router' +import type { FC } from 'react' +import styles from './styles' + +const sharedMenuItemStyles = { + color: 'var(--color)', + fontSize: '16px', + fontWeight: 500, + lineHeight: '1.2', + textDecoration: 'none', + _hover: { + textDecoration: 'underline', + }, + _active: { + opacity: 0.7, + }, +} + +const Item = chakra(ViteLink) + +export const MainMenu: FC = ({ css, ...restProps }) => { + return ( + + {menuItems.map(({ href, label, to }, index) => { + const key = `menuItem_${index}` + + return to ? ( + + {label} + + ) : href ? ( + + {label} + + ) : null + })} + + ) +} + +export default MainMenu diff --git a/src/components/sharedComponents/ui/Header/MainMenu/styles.ts b/src/components/sharedComponents/ui/Header/MainMenu/styles.ts new file mode 100644 index 00000000..686cd857 --- /dev/null +++ b/src/components/sharedComponents/ui/Header/MainMenu/styles.ts @@ -0,0 +1,10 @@ +export const styles = { + 'html.light &': { + '--color': '#2e3048', + }, + 'html.dark &': { + '--color': '#fff', + }, +} + +export default styles diff --git a/src/components/sharedComponents/ui/Header/MobileMenu/MobileMenu.tsx b/src/components/sharedComponents/ui/Header/MobileMenu/MobileMenu.tsx new file mode 100644 index 00000000..567bc5f3 --- /dev/null +++ b/src/components/sharedComponents/ui/Header/MobileMenu/MobileMenu.tsx @@ -0,0 +1,183 @@ +import Logo from '@/src/components/sharedComponents/ui/Header/Logo' +import { SwitchThemeButton } from '@/src/components/sharedComponents/ui/SwitchThemeButton' +import { menuItems } from '@/src/constants/menuItems' +import { ConnectWalletButton } from '@/src/providers/Web3Provider' +import { Link as A, chakra } from '@chakra-ui/react' +import { Drawer } from '@chakra-ui/react' +import { Link as ReactLink } from '@tanstack/react-router' +import { useTheme } from 'next-themes' +import { useState } from 'react' +import styles from './styles' + +const MenuIcon = () => ( + + Menu Icon + + +) + +const CloseIcon = () => ( + + Menu Icon + + +) + +const Button = chakra( + 'button', + { + base: { + alignItems: 'center', + backgroundColor: 'transparent', + border: 'none', + cursor: 'pointer', + display: 'flex', + height: '30px', + justifyContent: 'center', + padding: '0', + width: '30px', + + '&:active': { + opacity: '0.7', + }, + }, + }, + { + defaultProps: { + children: , + type: 'button', + }, + }, +) + +const LinkCSS = { + alignItems: 'center', + color: 'var(--color)', + display: 'flex', + flexDirection: 'column', + fontSize: '21px', + fontWeight: '500', + lineHeight: '1.2', + rowGap: 6, + textDecoration: 'none', + _after: { + backgroundColor: 'var(--color)', + borderRadius: '2px', + content: "''", + display: 'block', + height: '2px', + width: '20px', + }, + _active: { + opacity: 0.7, + }, +} + +const Link = chakra(ReactLink) + +export const MobileMenu = () => { + const { setTheme, theme } = useTheme() + const [isOpen, setIsOpen] = useState(false) + + return ( + setIsOpen(e.open)} + > + + + + + + + + + + + + + + + {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} + + ) : null + })} + setTheme(theme === 'light' ? 'dark' : 'light')} /> + + + + + ) +} + +export default MobileMenu diff --git a/src/components/sharedComponents/ui/Header/MobileMenu/styles.ts b/src/components/sharedComponents/ui/Header/MobileMenu/styles.ts new file mode 100644 index 00000000..99f5cac5 --- /dev/null +++ b/src/components/sharedComponents/ui/Header/MobileMenu/styles.ts @@ -0,0 +1,12 @@ +export const styles = { + 'html.light &': { + '--background-color': '#f7f7f7', + '--color': '#2e3048', + }, + 'html.dark &': { + '--background-color': '#292b43', + '--color': '#fff', + }, +} + +export default styles diff --git a/src/components/sharedComponents/ui/Header/index.tsx b/src/components/sharedComponents/ui/Header/index.tsx new file mode 100644 index 00000000..69362a3d --- /dev/null +++ b/src/components/sharedComponents/ui/Header/index.tsx @@ -0,0 +1,64 @@ +import Logo from '@/src/components/sharedComponents/ui/Header/Logo' +import MainMenu from '@/src/components/sharedComponents/ui/Header/MainMenu' +import MobileMenu from '@/src/components/sharedComponents/ui/Header/MobileMenu/MobileMenu' +import { Inner } from '@/src/components/sharedComponents/ui/Inner' +import { SwitchThemeButton } from '@/src/components/sharedComponents/ui/SwitchThemeButton' +import { ConnectWalletButton } from '@/src/providers/Web3Provider' +import { Box, type BoxProps, Flex, chakra } from '@chakra-ui/react' +import { Link } from '@tanstack/react-router' +import { useTheme } from 'next-themes' +import type { FC } from 'react' +import styles from './styles' + +const HomeLink = chakra(Link) + +export const Header: FC = ({ css, ...restProps }) => { + const { setTheme, theme } = useTheme() + + return ( + + + + + + + + + + setTheme(theme === 'light' ? 'dark' : 'light')} /> + + + + + + ) +} + +export default Header diff --git a/src/components/sharedComponents/ui/Header/styles.ts b/src/components/sharedComponents/ui/Header/styles.ts new file mode 100644 index 00000000..ea3782c3 --- /dev/null +++ b/src/components/sharedComponents/ui/Header/styles.ts @@ -0,0 +1,10 @@ +export const styles = { + 'html.light &': { + '--text-color': '#2e3048', + }, + 'html.dark &': { + '--text-color': '#fff', + }, +} + +export default styles diff --git a/src/components/sharedComponents/ui/Inner.tsx b/src/components/sharedComponents/ui/Inner.tsx new file mode 100644 index 00000000..388c7168 --- /dev/null +++ b/src/components/sharedComponents/ui/Inner.tsx @@ -0,0 +1,17 @@ +import { Flex, type FlexProps } from '@chakra-ui/react' +import type { FC } from 'react' + +export const Inner: FC = ({ children, ...restProps }) => ( + + {children} + +) + +export default Inner diff --git a/src/components/sharedComponents/ui/Menu/index.tsx b/src/components/sharedComponents/ui/Menu/index.tsx new file mode 100644 index 00000000..d2828269 --- /dev/null +++ b/src/components/sharedComponents/ui/Menu/index.tsx @@ -0,0 +1,48 @@ +import { Menu, type MenuContentProps, type MenuItemProps } from '@chakra-ui/react' +import type { FC } from 'react' +import styles from './styles' + +export const MenuContent: FC = ({ children, css, ...restProps }) => ( + + {children} + +) + +export const MenuItem: FC = ({ children, css, ...restProps }) => ( + + {children} + +) diff --git a/src/components/sharedComponents/ui/Menu/styles.ts b/src/components/sharedComponents/ui/Menu/styles.ts new file mode 100644 index 00000000..7c59fca1 --- /dev/null +++ b/src/components/sharedComponents/ui/Menu/styles.ts @@ -0,0 +1,32 @@ +export const styles = { + 'html.light &': { + '--background-color': '#fff', + '--border-color': '#fff', + '--box-shadow': '0 0 20px 0 rgb(0 0 0 / 8%)', + '--item-background-color': 'transparent', + '--item-background-color-hover': 'rgb(0 0 0 / 2%)', + '--item-background-color-active': 'rgb(0 0 0 / 5%)', + '--item-color': '#2e3048', + '--item-color-hover': '#2e3048', + '--item-color-active': '#2e3048', + '--item-border-color': '#f0f0f0', + '--item-border-color-hover': '#f0f0f0', + '--item-border-color-active': '#f0f0f0', + }, + 'html.dark &': { + '--background-color': '#292b43', + '--border-color': '#292b43', + '--box-shadow': '0 9.6px 13px 0 rgb(0 0 0 / 8%)', + '--item-background-color': 'transparent', + '--item-background-color-hover': 'rgb(255 255 255 / 2%)', + '--item-background-color-active': 'rgb(255 255 255 / 5%)', + '--item-color': '#fff', + '--item-color-hover': '#fff', + '--item-color-active': '#fff', + '--item-border-color': '#4b4d60', + '--item-border-color-hover': '#4b4d60', + '--item-border-color-active': '#4b4d60', + }, +} + +export default styles diff --git a/src/components/sharedComponents/ui/PrimaryButton/index.tsx b/src/components/sharedComponents/ui/PrimaryButton/index.tsx new file mode 100644 index 00000000..6bf9e073 --- /dev/null +++ b/src/components/sharedComponents/ui/PrimaryButton/index.tsx @@ -0,0 +1,27 @@ +import Button from '@/src/components/sharedComponents/ui/Button' +import type { ButtonProps } from '@chakra-ui/react' +import type { FC } from 'react' +import styles from './styles' + +export const PrimaryButton: FC = ({ css, ...restProps }) => ( + +) + +export default PrimaryButton diff --git a/src/components/sharedComponents/ui/PrimaryButton/styles.ts b/src/components/sharedComponents/ui/PrimaryButton/styles.ts new file mode 100644 index 00000000..386944c6 --- /dev/null +++ b/src/components/sharedComponents/ui/PrimaryButton/styles.ts @@ -0,0 +1,26 @@ +export const styles = { + 'html.light &': { + '--background-color': '#692581', + '--background-color-hover': '#892fa9', + '--border-color': '#692581', + '--border-color-hover': '#892fa9', + '--color': '#fff', + '--color-hover': '#fff', + '--background-color-disabled': '#692581', + '--border-color-disabled': '#692581', + '--color-disabled': '#fff', + }, + 'html.dark &': { + '--background-color': '#8b46a4', + '--background-color-hover': '#9a4eb5', + '--border-color': '#8b46a4', + '--border-color-hover': '#9a4eb5', + '--color': '#fff', + '--color-hover': '#fff', + '--background-color-disabled': '#8b46a4', + '--border-color-disabled': '#8b46a4', + '--color-disabled': '#fff', + }, +} + +export default styles diff --git a/src/components/sharedComponents/ui/SecondaryButton/index.tsx b/src/components/sharedComponents/ui/SecondaryButton/index.tsx new file mode 100644 index 00000000..c6c8ac3b --- /dev/null +++ b/src/components/sharedComponents/ui/SecondaryButton/index.tsx @@ -0,0 +1,27 @@ +import Button from '@/src/components/sharedComponents/ui/Button' +import type { ButtonProps } from '@chakra-ui/react' +import type { FC } from 'react' +import styles from './styles' + +export const SecondaryButton: FC = ({ css, ...restProps }) => ( + +) + +export default SecondaryButton diff --git a/src/components/sharedComponents/ui/SecondaryButton/styles.ts b/src/components/sharedComponents/ui/SecondaryButton/styles.ts new file mode 100644 index 00000000..37f2ac71 --- /dev/null +++ b/src/components/sharedComponents/ui/SecondaryButton/styles.ts @@ -0,0 +1,26 @@ +export const styles = { + 'html.light &': { + '--background-color': '#2e3048', + '--background-color-hover': '#3d405f', + '--border-color': '#2e3048', + '--border-color-hover': '#3d405f', + '--color': '#fff', + '--color-hover': '#fff', + '--background-color-disabled': '#2e3048', + '--border-color-disabled': '#2e3048', + '--color-disabled': '#fff', + }, + 'html.dark &': { + '--background-color': '#5f6178', + '--background-color-hover': '#4a4c5f', + '--border-color': '#5f6178', + '--border-color-hover': '#4a4c5f', + '--color': '#fff', + '--color-hover': '#fff', + '--background-color-disabled': '#5f6178', + '--border-color-disabled': '#5f6178', + '--color-disabled': '#fff', + }, +} + +export default styles diff --git a/src/components/sharedComponents/ui/Spinner/index.tsx b/src/components/sharedComponents/ui/Spinner/index.tsx new file mode 100644 index 00000000..9fae64ca --- /dev/null +++ b/src/components/sharedComponents/ui/Spinner/index.tsx @@ -0,0 +1,16 @@ +import { Spinner as BaseSpinner, type SpinnerProps } from '@chakra-ui/react' +import type { FC } from 'react' +import styles from './styles' + +export const Spinner: FC = ({ css, ...restProps }) => ( + +) + +export default Spinner diff --git a/src/components/sharedComponents/ui/Spinner/styles.ts b/src/components/sharedComponents/ui/Spinner/styles.ts new file mode 100644 index 00000000..a276fa15 --- /dev/null +++ b/src/components/sharedComponents/ui/Spinner/styles.ts @@ -0,0 +1,10 @@ +export const styles = { + 'html.light &': { + '--color': '#692581', + }, + 'html.dark &': { + '--color': '#b886c9', + }, +} + +export default styles diff --git a/src/components/sharedComponents/ui/SwitchThemeButton/assets/Dark.tsx b/src/components/sharedComponents/ui/SwitchThemeButton/assets/Dark.tsx new file mode 100644 index 00000000..d3a84557 --- /dev/null +++ b/src/components/sharedComponents/ui/SwitchThemeButton/assets/Dark.tsx @@ -0,0 +1,33 @@ +import { type HTMLChakraProps, chakra } from '@chakra-ui/react' +import type { FC, SVGAttributes } from 'react' + +const Dark: FC & SVGAttributes> = ({ ...restProps }) => ( + + + +) + +export default Dark diff --git a/src/components/sharedComponents/ui/SwitchThemeButton/assets/Light.tsx b/src/components/sharedComponents/ui/SwitchThemeButton/assets/Light.tsx new file mode 100644 index 00000000..34ae16c7 --- /dev/null +++ b/src/components/sharedComponents/ui/SwitchThemeButton/assets/Light.tsx @@ -0,0 +1,90 @@ +import { type HTMLChakraProps, chakra } from '@chakra-ui/react' +import type { FC, SVGAttributes } from 'react' + +const pathCSS = { + '.light &': { + fill: '#fff', + }, + '.dark &': { + fill: '#f7f7f7', + }, +} + +const Light: FC & SVGAttributes> = ({ ...restProps }) => ( + + + + + + + + + + + +) + +export default Light diff --git a/src/components/sharedComponents/ui/SwitchThemeButton/index.tsx b/src/components/sharedComponents/ui/SwitchThemeButton/index.tsx new file mode 100644 index 00000000..dbed3a1d --- /dev/null +++ b/src/components/sharedComponents/ui/SwitchThemeButton/index.tsx @@ -0,0 +1,122 @@ +import Dark from '@/src/components/sharedComponents/ui/SwitchThemeButton/assets/Dark' +import Light from '@/src/components/sharedComponents/ui/SwitchThemeButton/assets/Light' +import { Box, type ButtonProps, chakra } from '@chakra-ui/react' +import type { FC } from 'react' +import styles from './styles' + +const Icon = chakra('div', { + base: { + alignItems: 'center', + backgroundColor: 'transparent', + display: 'flex', + height: 'var(--button-active-state-size)', + justifyContent: 'center', + position: 'absolute', + top: '50%', + transform: 'translateY(-50%)', + width: 'var(--button-active-state-size)', + zIndex: '5', + }, +}) + +const IconCSS = { + cursor: 'pointer', + position: 'relative', + zIndex: '10', +} + +/** + * @name SwitchThemeButton for dAppBooster + * + * @description A button that switches between light and dark themes. + */ +export const SwitchThemeButton: FC = ({ onClick, css, ...restProps }) => { + return ( + + + + + + + + + + ) +} + +export default SwitchThemeButton diff --git a/src/components/sharedComponents/ui/SwitchThemeButton/styles.ts b/src/components/sharedComponents/ui/SwitchThemeButton/styles.ts new file mode 100644 index 00000000..4a0e7042 --- /dev/null +++ b/src/components/sharedComponents/ui/SwitchThemeButton/styles.ts @@ -0,0 +1,12 @@ +export const styles = { + 'html.light &': { + '--background-color': '#fff', + '--button-active-state-left': 'var(--button-left-end)', + }, + 'html.dark &': { + '--background-color': '#24263d', + '--button-active-state-left': 'var(--button-left-start)', + }, +} + +export default styles diff --git a/src/components/ui/color-mode.tsx b/src/components/ui/color-mode.tsx new file mode 100644 index 00000000..452c1f10 --- /dev/null +++ b/src/components/ui/color-mode.tsx @@ -0,0 +1,109 @@ +'use client' + +import type { IconButtonProps, SpanProps } from '@chakra-ui/react' +import { ClientOnly, IconButton, Skeleton, Span } from '@chakra-ui/react' +import { ThemeProvider, useTheme } from 'next-themes' +import type { ThemeProviderProps } from 'next-themes' +import * as React from 'react' +import { LuMoon, LuSun } from 'react-icons/lu' + +export interface ColorModeProviderProps extends ThemeProviderProps {} + +export function ColorModeProvider(props: ColorModeProviderProps) { + return ( + + ) +} + +export type ColorMode = 'light' | 'dark' + +export interface UseColorModeReturn { + colorMode: ColorMode + setColorMode: (colorMode: ColorMode) => void + toggleColorMode: () => void +} + +export function useColorMode(): UseColorModeReturn { + const { resolvedTheme, setTheme } = useTheme() + const toggleColorMode = () => { + setTheme(resolvedTheme === 'dark' ? 'light' : 'dark') + } + return { + colorMode: resolvedTheme as ColorMode, + setColorMode: setTheme, + toggleColorMode, + } +} + +export function useColorModeValue(light: T, dark: T) { + const { colorMode } = useColorMode() + return colorMode === 'dark' ? dark : light +} + +export function ColorModeIcon() { + const { colorMode } = useColorMode() + return colorMode === 'dark' ? : +} + +interface ColorModeButtonProps extends Omit {} + +export const ColorModeButton = React.forwardRef( + function ColorModeButton(props, ref) { + const { toggleColorMode } = useColorMode() + return ( + }> + + + + + ) + }, +) + +export const LightMode = React.forwardRef( + function LightMode(props, ref) { + return ( + + ) + }, +) + +export const DarkMode = React.forwardRef(function DarkMode(props, ref) { + return ( + + ) +}) diff --git a/src/components/ui/provider.tsx b/src/components/ui/provider.tsx new file mode 100644 index 00000000..e0771274 --- /dev/null +++ b/src/components/ui/provider.tsx @@ -0,0 +1,126 @@ +'use client' + +import { ChakraProvider, createSystem, defaultConfig, defineConfig } from '@chakra-ui/react' +import { ColorModeProvider, type ColorModeProviderProps } from './color-mode' + +export function Provider(props: ColorModeProviderProps) { + const customConfig = defineConfig({ + theme: { + // Use tokens for values that don't change with light / dark themes + tokens: { + fonts: { + body: { + value: '"Manrope", "Arial", "Helvetica Neue", "Helvetica", sans-serif', + }, + heading: { + value: '{fonts.body}', + }, + mono: { + value: '"Roboto Mono", "Courier New", monospace', + }, + }, + }, + // Use semantic tokens for light / dark values + semanticTokens: { + colors: { + bg: { + default: { + value: { + _light: '#e2e0e7', + _dark: '#292b43', + }, + }, + }, + primary: { + default: { + value: { + _light: '#692581', + _dark: '#8b46a4', + }, + }, + }, + text: { + default: { + value: { + _light: '#4b4d60', + _dark: '#e2e0e7', + }, + }, + }, + danger: { + default: { + value: { + _light: '#800', + _dark: '#800', + }, + }, + }, + ok: { + default: { + value: { + _light: '#080', + _dark: '#080', + }, + }, + }, + warning: { + default: { + value: { + _light: '#cc0', + _dark: '#cc0', + }, + }, + }, + }, + }, + // Some custom animations + keyframes: { + rotateSwitch: { + from: { + transform: 'rotate(0)', + }, + to: { + transform: 'rotate(360deg)', + }, + }, + }, + }, + globalCss: { + ////////////////////////////////////////////////// + // Just some basic stuff, don't add too much here. + ////////////////////////////////////////////////// + html: { + scrollBehavior: 'smooth', + }, + body: { + '--moz-osx-font-smoothing': 'grayscale', + '--webkit-font-smoothing': 'antialiased', + background: '{colors.bg.default}', + backgroundPosition: '100% 0', + backgroundRepeat: 'no-repeat', + color: '{colors.text.default}', + fontFamily: '{fonts.body}', + lineHeight: 1.5, + outlineColor: '{colors.text.default}', + }, + code: { + fontFamily: '{fonts.mono}', + }, + a: { + color: '{colors.primary.default}', + }, + img: { + display: 'block', + maxInlineSize: '100%', + }, + }, + }) + + const system = createSystem(defaultConfig, customConfig) + + return ( + + + + ) +} diff --git a/src/components/ui/toaster.tsx b/src/components/ui/toaster.tsx new file mode 100644 index 00000000..4b4ff9e6 --- /dev/null +++ b/src/components/ui/toaster.tsx @@ -0,0 +1,36 @@ +'use client' + +import Spinner from '@/src/components/sharedComponents/ui/Spinner' +import { Toaster as ChakraToaster, Portal, Stack, Toast, createToaster } from '@chakra-ui/react' + +export const toaster = createToaster({ + placement: 'bottom-end', + pauseOnPageIdle: true, +}) + +export const Toaster = () => { + return ( + + + {(toast) => ( + + {toast.type === 'loading' ? : } + + {toast.title && {toast.title}} + {toast.description && {toast.description}} + + {toast.action && {toast.action.label}} + {toast.meta?.closable && } + + )} + + + ) +} diff --git a/src/components/ui/tooltip.tsx b/src/components/ui/tooltip.tsx new file mode 100644 index 00000000..6587d01b --- /dev/null +++ b/src/components/ui/tooltip.tsx @@ -0,0 +1,50 @@ +import { Tooltip as ChakraTooltip, Portal } from '@chakra-ui/react' +import * as React from 'react' + +export interface TooltipProps extends ChakraTooltip.RootProps { + showArrow?: boolean + portalled?: boolean + portalRef?: React.RefObject + content: React.ReactNode + contentProps?: ChakraTooltip.ContentProps + disabled?: boolean +} + +export const Tooltip = React.forwardRef(function Tooltip(props, ref) { + const { + showArrow, + children, + disabled, + portalled = true, + content, + contentProps, + portalRef, + ...rest + } = props + + if (disabled) return children + + return ( + + {children} + + + + {showArrow && ( + + + + )} + {content} + + + + + ) +}) diff --git a/src/constants/contracts/abis/AAVEWeth.ts b/src/constants/contracts/abis/AAVEWeth.ts new file mode 100644 index 00000000..fd2bd327 --- /dev/null +++ b/src/constants/contracts/abis/AAVEWeth.ts @@ -0,0 +1,132 @@ +export const AAVEWethABI = [ + { + inputs: [ + { internalType: 'address', name: 'weth', type: 'address' }, + { internalType: 'address', name: 'owner', type: 'address' }, + { internalType: 'contract IPool', name: 'pool', type: 'address' }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'previousOwner', type: 'address' }, + { indexed: true, internalType: 'address', name: 'newOwner', type: 'address' }, + ], + name: 'OwnershipTransferred', + type: 'event', + }, + { stateMutability: 'payable', type: 'fallback' }, + { + inputs: [ + { internalType: 'address', name: '', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + { internalType: 'uint256', name: 'interestRateMode', type: 'uint256' }, + { internalType: 'uint16', name: 'referralCode', type: 'uint16' }, + ], + name: 'borrowETH', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: '', type: 'address' }, + { internalType: 'address', name: 'onBehalfOf', type: 'address' }, + { internalType: 'uint16', name: 'referralCode', type: 'uint16' }, + ], + name: 'depositETH', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'emergencyEtherTransfer', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'token', type: 'address' }, + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'emergencyTokenTransfer', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'getWETHAddress', + outputs: [{ internalType: 'address', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'owner', + outputs: [{ internalType: 'address', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'renounceOwnership', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: '', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + { internalType: 'uint256', name: 'rateMode', type: 'uint256' }, + { internalType: 'address', name: 'onBehalfOf', type: 'address' }, + ], + name: 'repayETH', + outputs: [], + stateMutability: 'payable', + type: 'function', + }, + { + inputs: [{ internalType: 'address', name: 'newOwner', type: 'address' }], + name: 'transferOwnership', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: '', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + { internalType: 'address', name: 'to', type: 'address' }, + ], + name: 'withdrawETH', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: '', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'deadline', type: 'uint256' }, + { internalType: 'uint8', name: 'permitV', type: 'uint8' }, + { internalType: 'bytes32', name: 'permitR', type: 'bytes32' }, + { internalType: 'bytes32', name: 'permitS', type: 'bytes32' }, + ], + name: 'withdrawETHWithPermit', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { stateMutability: 'payable', type: 'receive' }, +] as const diff --git a/src/constants/contracts/abis/AaveFaucet.ts b/src/constants/contracts/abis/AaveFaucet.ts new file mode 100644 index 00000000..d39d9b11 --- /dev/null +++ b/src/constants/contracts/abis/AaveFaucet.ts @@ -0,0 +1,99 @@ +export const AaveFaucetABI = [ + { + inputs: [ + { internalType: 'address', name: 'owner', type: 'address' }, + { internalType: 'bool', name: 'permissioned', type: 'bool' }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'previousOwner', type: 'address' }, + { indexed: true, internalType: 'address', name: 'newOwner', type: 'address' }, + ], + name: 'OwnershipTransferred', + type: 'event', + }, + { + inputs: [], + name: 'MAX_MINT_AMOUNT', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'address', name: 'asset', type: 'address' }], + name: 'isMintable', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'isPermissioned', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'token', type: 'address' }, + { internalType: 'address', name: 'to', type: 'address' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + ], + name: 'mint', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'owner', + outputs: [{ internalType: 'address', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'renounceOwnership', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'asset', type: 'address' }, + { internalType: 'bool', name: 'active', type: 'bool' }, + ], + name: 'setMintable', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [{ internalType: 'bool', name: 'permissioned', type: 'bool' }], + name: 'setPermissioned', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [{ internalType: 'address', name: 'newOwner', type: 'address' }], + name: 'transferOwnership', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'address[]', name: 'childContracts', type: 'address[]' }, + { internalType: 'address', name: 'newOwner', type: 'address' }, + ], + name: 'transferOwnershipOfChild', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, +] as const diff --git a/src/constants/contracts/contracts.ts b/src/constants/contracts/contracts.ts index 975c0ad0..0f789d98 100644 --- a/src/constants/contracts/contracts.ts +++ b/src/constants/contracts/contracts.ts @@ -6,8 +6,10 @@ import { erc20Abi, isAddress, } from 'viem' -import { mainnet, polygon, sepolia } from 'viem/chains' +import { mainnet, optimismSepolia, polygon, sepolia } from 'viem/chains' +import { AAVEWethABI } from '@/src/constants/contracts/abis/AAVEWeth' +import { AaveFaucetABI } from '@/src/constants/contracts/abis/AaveFaucet' import { ENSRegistryABI } from '@/src/constants/contracts/abis/ENSRegistry' import { OPL1CrossDomainMessengerProxyABI } from '@/src/constants/contracts/abis/OPL1CrossDomainMessengerProxy' import type { ChainsIds } from '@/src/lib/networks.config' @@ -46,6 +48,21 @@ const contracts = [ }, name: 'EnsRegistry', }, + { + abi: AaveFaucetABI, + address: { + 11155111: '0xc959483dba39aa9e78757139af0e9a2edeb3f42d', + 1: '0x0000000000000000000000000000000000000000', + }, + name: 'AaveFaucet', + }, + { + abi: AAVEWethABI, + address: { + [optimismSepolia.id]: '0x589750BA8aF186cE5B55391B0b7148cAD43a1619', + }, + name: 'AAVEWeth', + }, { abi: OPL1CrossDomainMessengerProxyABI, address: { diff --git a/src/constants/menuItems.ts b/src/constants/menuItems.ts index b5b5e986..ce2e59fe 100644 --- a/src/constants/menuItems.ts +++ b/src/constants/menuItems.ts @@ -10,7 +10,7 @@ type MenuItem = { export const menuItems: MenuItem[] = [ { label: 'Documentation', - href: 'https://bootnodedev.github.io/dAppBooster/', + href: 'https://docs.dappbooster.dev/', }, { label: 'Examples', diff --git a/src/env.ts b/src/env.ts index 86627a0a..28842c66 100644 --- a/src/env.ts +++ b/src/env.ts @@ -43,6 +43,13 @@ export const env = createEnv({ PUBLIC_RPC_SEPOLIA: z.string().optional(), PUBLIC_WALLETCONNECT_PROJECT_ID: z.string().optional().default(''), PUBLIC_INCLUDE_TESTNETS: zBoolean, + PUBLIC_SUBGRAPHS_API_KEY: z.string(), + PUBLIC_SUBGRAPHS_CHAINS_RESOURCE_IDS: z.string(), + PUBLIC_SUBGRAPHS_ENVIRONMENT: z + .union([z.literal('development'), z.literal('production')]) + .default('production'), + PUBLIC_SUBGRAPHS_DEVELOPMENT_URL: z.string().optional(), + PUBLIC_SUBGRAPHS_PRODUCTION_URL: z.string().optional(), }, runtimeEnv: import.meta.env, emptyStringAsUndefined: true, diff --git a/src/lib/toast/NotificationToast.tsx b/src/lib/toast/NotificationToast.tsx new file mode 100644 index 00000000..3da3e540 --- /dev/null +++ b/src/lib/toast/NotificationToast.tsx @@ -0,0 +1,50 @@ +'use client' + +import Spinner from '@/src/components/sharedComponents/ui/Spinner' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' +import { Toaster as ChakraToaster, Portal, Stack, Toast, createToaster } from '@chakra-ui/react' + +export const notificationToaster = createToaster({ + placement: 'bottom-end', + pauseOnPageIdle: true, + max: 1, + overlap: false, +}) + +export const NotificationToast = () => { + const { readOnlyClient } = useWeb3Status() + const chain = readOnlyClient?.chain + return !chain ? null : ( + + + {(toast) => ( + + {toast.type === 'loading' ? : } + + {toast.title && {toast.title}} + {toast.description && ( + + {toast.description} + + )} + + {toast.meta?.closable && } + + )} + + + ) +} diff --git a/src/lib/toast/ToastNotification.tsx b/src/lib/toast/ToastNotification.tsx deleted file mode 100644 index 10a0da5b..00000000 --- a/src/lib/toast/ToastNotification.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import type { Hash } from 'viem' - -import { ExplorerLink } from '@/src/components/sharedComponents/ExplorerLink' -import { useWeb3Status } from '@/src/hooks/useWeb3Status' - -export const ToastNotification = ({ - hash, - message, -}: { - message: JSX.Element | string - hash?: Hash - showClose?: boolean -}) => { - const { readOnlyClient } = useWeb3Status() - const chain = readOnlyClient?.chain - - if (!chain) return null - - return ( -
-
{message}
- {hash && ( - - )} -
- ) -} diff --git a/src/lib/toast/TransactionNotificationProvider.tsx b/src/lib/toast/TransactionNotificationProvider.tsx index 6d659702..6452f213 100644 --- a/src/lib/toast/TransactionNotificationProvider.tsx +++ b/src/lib/toast/TransactionNotificationProvider.tsx @@ -1,6 +1,7 @@ +import { ExplorerLink } from '@/src/components/sharedComponents/ExplorerLink' +import { useWeb3Status } from '@/src/hooks/useWeb3Status' +import { NotificationToast, notificationToaster } from '@/src/lib/toast/NotificationToast' import { type FC, type PropsWithChildren, createContext, useContext } from 'react' - -import toast from 'react-hot-toast' import type { Hash, ReplacementReturnType, @@ -8,10 +9,6 @@ import type { TransactionExecutionError, } from 'viem' -import { ExplorerLink } from '@/src/components/sharedComponents/ExplorerLink' -import { useWeb3Status } from '@/src/hooks/useWeb3Status' -import { ToastNotification } from '@/src/lib/toast/ToastNotification' - type WatchSignatureArgs = { successMessage?: string message: JSX.Element | string @@ -49,23 +46,31 @@ export const TransactionNotificationProvider: FC = ({ childre signaturePromise, successMessage = 'Signature received!', }: WatchSignatureArgs) { - const toastId = toast.loading(() => ) + const toastId = notificationToaster.create({ + description: message, + type: 'loading', + }) onToastId?.(toastId) try { await signaturePromise if (showSuccessToast) { - toast.success(, { + notificationToaster.create({ + description: successMessage, + type: 'success', id: toastId, }) } } catch (e) { const error = e as TransactionExecutionError | SignMessageErrorType - let message = error.message || 'An error occurred' - if ('shortMessage' in error) { - message = error.shortMessage - } - toast.error(, { id: toastId }) + const message = + 'shortMessage' in error ? error.shortMessage : error.message || 'An error occurred' + + notificationToaster.create({ + description: message, + type: 'success', + id: toastId, + }) } } @@ -86,7 +91,9 @@ export const TransactionNotificationProvider: FC = ({ childre return } - toast.loading(() => , { + notificationToaster.create({ + description: message, + type: 'loading', id: toastId, }) @@ -100,53 +107,65 @@ export const TransactionNotificationProvider: FC = ({ childre if (replacedTx !== null) { if (['replaced', 'cancelled'].includes(replacedTx.reason)) { - toast.error( + notificationToaster.create({ + description: ( +
+
Transaction has been {replacedTx.reason}!
+ +
+ ), + type: 'error', + id: toastId, + }) + } else { + notificationToaster.create({ + description: ( +
+
{successMessage}
+ +
+ ), + type: 'success', + id: toastId, + }) + } + return + } + + if (receipt.status === 'success') { + notificationToaster.create({ + description: (
-
Transaction has been {replacedTx.reason}!
+
{successMessage}
-
, - { id: toastId }, - ) - } else { - toast.success( +
+ ), + type: 'success', + id: toastId, + }) + } else { + notificationToaster.create({ + description: (
-
{successMessage}
+
{errorMessage}
-
, - { id: toastId }, - ) - } - return - } - - if (receipt.status === 'success') { - toast.success( -
-
{successMessage}
- -
, - { id: toastId }, - ) - } else { - toast.error( -
-
{errorMessage}
- -
, - { id: toastId }, - ) +
+ ), + type: 'error', + id: toastId, + }) } } catch (error) { console.error('Error watching hash', error) @@ -178,6 +197,7 @@ export const TransactionNotificationProvider: FC = ({ childre return ( {children} + ) } @@ -185,6 +205,7 @@ export const TransactionNotificationProvider: FC = ({ childre // eslint-disable-next-line react-refresh/only-export-components export function useTransactionNotification() { const context = useContext(TransactionContext) + if (context === undefined) { throw new Error( 'useTransactionNotification must be used within a TransactionNotificationProvider', diff --git a/src/lib/wallets/connectkit.config.tsx b/src/lib/wallets/connectkit.config.tsx index 63a22496..4855a23d 100644 --- a/src/lib/wallets/connectkit.config.tsx +++ b/src/lib/wallets/connectkit.config.tsx @@ -1,14 +1,13 @@ -import type { FC, ReactNode } from 'react' - -import { ConnectKitButton, ConnectKitProvider, type Types, getDefaultConfig } from 'connectkit' -import type { Address } from 'viem' -import { normalize } from 'viem/ens' -import { createConfig, useEnsAvatar, useEnsName } from 'wagmi' - import Avatar from '@/src/components/sharedComponents/Avatar' import ConnectButton from '@/src/components/sharedComponents/ConnectButton' import { env } from '@/src/env' import { chains, transports } from '@/src/lib/networks.config' +import type { ButtonProps } from '@chakra-ui/react' +import { ConnectKitButton, ConnectKitProvider, type Types, getDefaultConfig } from 'connectkit' +import type { FC, ReactNode } from 'react' +import type { Address } from 'viem' +import { normalize } from 'viem/ens' +import { createConfig, useEnsAvatar, useEnsName } from 'wagmi' interface Props { address: Address @@ -46,7 +45,10 @@ export const WalletProvider = ({ children }: { children: ReactNode }) => { ) } -export const ConnectWalletButton = ({ label = 'Connect', ...restProps }: { label?: string }) => { +export const ConnectWalletButton = ({ + label = 'Connect', + ...restProps +}: { label?: string } & ButtonProps) => { return ( {({ address, isConnected, isConnecting, show, truncatedAddress }) => { diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index e6bcb31d..f2aead1c 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -1,19 +1,14 @@ -import { Main, Wrapper } from '@bootnodedev/db-ui-toolkit' -import { ModalContainer, ModalProvider } from '@faceless-ui/modal' -import { Outlet, createRootRoute } from '@tanstack/react-router' -import { Analytics } from '@vercel/analytics/react' -import { ThemeProvider } from 'next-themes' -import { Toaster } from 'react-hot-toast' - import { TanStackReactQueryDevtools } from '@/src/components/sharedComponents/TanStackReactQueryDevtools' 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 { Toaster } from '@/src/components/ui/toaster' import { TransactionNotificationProvider } from '@/src/lib/toast/TransactionNotificationProvider' import { Web3Provider } from '@/src/providers/Web3Provider' -import Styles from '@/src/styles' - -import 'modern-normalize/modern-normalize.css' +import { Flex } from '@chakra-ui/react' +import { Outlet, createRootRoute } from '@tanstack/react-router' +import { Analytics } from '@vercel/analytics/react' export const Route = createRootRoute({ component: Root, @@ -21,26 +16,29 @@ export const Route = createRootRoute({ function Root() { return ( - - + - - - -
-
- -
-