diff --git a/.env b/.env deleted file mode 100644 index b29ae62b..00000000 --- a/.env +++ /dev/null @@ -1,3 +0,0 @@ -# For Next -NEXT_PUBLIC_APP_STAGE="development" -NEXT_INFURA_PROJECT_ID=72131adfd0024cfc9e20510875bf0ad2 diff --git a/.env.example b/.env.example index 51975d7e..7673a33a 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ # For Next NEXT_PUBLIC_APP_STAGE="development" NEXT_INFURA_PROJECT_ID=xxx +NEXT_DUNE_API_KEY=1234 \ No newline at end of file diff --git a/.eslint.js b/.eslint.js deleted file mode 100644 index bae2ff4e..00000000 --- a/.eslint.js +++ /dev/null @@ -1,35 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -const prettierOptions = JSON.parse(fs.readFileSync(path.resolve(__dirname, '.prettierrc'), 'utf8')); - -module.exports = { - extends: [ - 'react-app', - // react and @typescript-react are now merged into prettier - 'prettier', - ], - plugins: ['prettier'], - rules: { - 'prettier/prettier': ['error', prettierOptions], - '@typescript-eslint/ban-ts-comment': 'error', - 'react-hooks/exhaustive-deps': [ - 'warn', - { - additionalHooks: 'useDebouncedEffect', - }, - ], - }, - overrides: [ - { - files: ['**/*.ts?(x)'], - rules: { 'prettier/prettier': ['warn', prettierOptions] }, - }, - { - files: ['**/*.stories.*'], - rules: { - 'import/no-anonymous-default-export': 'off', - }, - }, - ], -}; diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..5bb4809f --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,4 @@ +{ + "extends": ["next/core-web-vitals", "eslint-config-prettier"], + "rules": {} +} diff --git a/.github/workflows/e2e-test-ci.yml b/.github/workflows/e2e-test-ci.yml index d14a6ce7..379f0630 100644 --- a/.github/workflows/e2e-test-ci.yml +++ b/.github/workflows/e2e-test-ci.yml @@ -11,6 +11,8 @@ jobs: cache: 'yarn' - run: yarn install - run: yarn dev & yarn e2e:run + env: + NEXT_DUNE_API_KEY: ${{ vars.NEXT_DUNE_API_KEY }} - name: Tests ✅ if: ${{ success() }} run: | diff --git a/.gitignore b/.gitignore index 50a0a017..ff0c8087 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,7 @@ tests/e2e/screenshots/ /sanity/dist .env.local +.env .yarn/* .yarn/cache diff --git a/next.config.js b/next.config.js index 429c950b..83e59ada 100644 --- a/next.config.js +++ b/next.config.js @@ -11,6 +11,7 @@ console.debug( * @type {import('next').NextConfig} */ module.exports = { + transpilePackages: ['@synthetixio/v3-theme'], async generateBuildId() { return execSync(lastCommitCommand).toString().trim(); }, diff --git a/package.json b/package.json index 31230248..a049a41c 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,8 @@ "start": "next start --port 8888", "svg": "npx svgr -d src/svg src/svg --ext tsx --template src/utils/svgTemplate.ts", "format": "prettier --write \"**/*.{ts,tsx}\"", - "lint": "eslint . --ext ts,.tsx", - "lint:fix": "eslint . --ext ts,.tsx --fix", + "lint": "next lint", + "lint:fix": "next lint --fix", "lint:sarif": "node ./tests/lint.js . --ext ts,.tsx && tsc", "tsc": "tsc --noEmit", "test": "jest", @@ -25,7 +25,7 @@ "@emotion/styled": "^11", "@socialgouv/matomo-next": "1.2.2", "@synthetixio/contracts-interface": "^2.74.3", - "@synthetixio/v3-theme": "1.1.0", + "@synthetixio/v3-theme": "^3.1.1", "@vercel/node": "^1.14.0", "algoliasearch": "^4.13.0", "axios": "0.23.0", @@ -34,11 +34,12 @@ "ethers": "5.6.9", "framer-motion": "^7", "jsonpath": "^1.1.1", - "next": "^12.2.5", + "millify": "^6.1.0", + "next": "13.4.8", "numeral": "2.0.6", "prop-types": "^15.7", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "18.2.0", + "react-dom": "18.2.0", "react-hamburger-menu": "1.2.1", "react-icons": "^4.3.1", "react-instantsearch-dom": "^6.32.1", @@ -79,16 +80,13 @@ "@types/styled-components": "^5.1.2", "@types/webpack-env": "^1.15.2", "codegen-graph-ts": "^0.1.2", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-chai-friendly": "^0.7.2", - "eslint-plugin-cypress": "^2.12.1", - "eslint-plugin-import": "^2.26.0", + "eslint-config-next": "latest", + "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-testing-library": "^5.6.1", - "eslint-plugin-ui-testing": "^2.0.1", "husky": "^7.0.4", "jest": "^27.0.0", "next-sitemap": "1.3.2", + "prettier": "^2.8.8", "typescript": "^4.4.4" }, "packageManager": "yarn@3.2.2" diff --git a/pages/_app.tsx b/pages/_app.tsx index c4652c3f..ef389cd7 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -11,10 +11,23 @@ import { useEffect } from 'react'; const newTheme = extendTheme({ ...chakraTheme, + colors: { + ...chakraTheme.colors, + navy: { + 700: '#0B0B22', + 900: '#06061B', + }, + }, useSystemColorMode: false, config: { initialColorMode: 'dark' }, styles: { - global: { body: { bg: 'navy.900' } }, + global: { + body: { bg: 'navy.900' }, + '::selection': { + bg: '#00D1FF', + color: '#000000', + }, + }, }, }); @@ -37,6 +50,7 @@ export default function MyApp({ Component, pageProps }: AppProps) { ) localStorage.setItem('chakra-ui-color-mode', 'dark'); } + return ( diff --git a/pages/index.tsx b/pages/index.tsx index 4415e68b..11f43abc 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,90 +1,276 @@ import Head from 'next/head'; -import { GetServerSideProps } from 'next'; -import MainSection from '../src/sections/home/main'; -import Futures from '../src/sections/home/futures'; -import TotalSection from '../src/sections/home/total'; -import SynthSection from 'src/sections/home/synths'; -import Ecosystem from 'src/sections/home/ecosystem'; -import { PageLayout } from '../src/components'; -import { Line } from 'src/styles/common'; -import PoweredBy from 'src/sections/home/poweredBy'; +import { GetStaticProps } from 'next'; +import { + Hero, + Volume, + Ecosystem, + Integrators, + Interested, + Collateral, + Stats, + Interfaces, + Staking, + Perps, + AggregatedStats, + Governance, + Partners, +} from 'src/sections/home'; + +import { PageLayout } from 'src/components'; import axios from 'axios'; -import { Box } from '@chakra-ui/react'; + import getSnxPrice from '../src/queries/snxPrice/snxPrice'; -import { EmailSection } from 'src/sections/email/EmailSection'; +import { + StakedSNXResponse, + VolumeResponse, + ActiveStakerResponse, + IntegratorsVolumeResponse, + OpenInterestResponse, + TradingFeesResponse, + VolumeData, + ActiveStakersData, + GraphqlResponse, + SwapsResponse, +} from 'src/typings'; +import { utils } from 'ethers'; export interface ApiStatsProps { totalStakedValue?: number; + swapsVolumeTotal: number; + tradingVolume?: VolumeData; + activeStakers?: ActiveStakersData; + integratorForLatestDate?: string[]; + openInterestForLatestDate?: number; + markets?: number; + uniqueTradingAccounts?: string; } -const Home = ({ totalStakedValue }: ApiStatsProps) => { +const Home = ({ + totalStakedValue, + swapsVolumeTotal, + activeStakers, + integratorForLatestDate, + tradingVolume, + openInterestForLatestDate, + markets, + uniqueTradingAccounts, +}: ApiStatsProps) => { return ( <> Synthetix - - - - - - - - - - - - + + + {totalStakedValue && tradingVolume && swapsVolumeTotal && ( + + )} - + + + + {activeStakers && tradingVolume && totalStakedValue && ( + + )} + + + + {tradingVolume && + markets && + uniqueTradingAccounts && + openInterestForLatestDate && ( + + )} + + ); }; + const STAKED_SNX_DATA_URL = 'https://api.synthetix.io/staking-ratio'; +const VOLUME_DATA_URL = 'https://api.dune.com/api/v1/query/2499125/results'; +const ACTIVE_STAKERS_URL = 'https://api.dune.com/api/v1/query/2647572/results'; +const INTEGRATORS_VOLUME_URL = + 'https://api.dune.com/api/v1/query/2647536/results'; +const OPEN_INTEREST_URL = 'https://api.dune.com/api/v1/query/2441903/results'; +const TRADING_FEES_URL = 'https://api.dune.com/api/v1/query/1893390/results'; +const SWAPS_URL = 'https://api.dune.com/api/v1/query/1240426/results'; -type StakedSNXResponse = { - systemStakingPercent: number; - timestamp: number; - stakedSnx: { - ethereum: number; - optimism: number; - }; -}; +const graphqlUrlPerps = + 'https://api.thegraph.com/subgraphs/name/synthetix-perps/perps'; + +const apiKey = process?.env?.NEXT_DUNE_API_KEY || ''; + +const graphqlQuery = ` +query { + futuresMarkets { + id + isActive + marketKey + } + dailyStats(orderBy: day, orderDirection: desc, first: 1) { + cumulativeTraders + } +} +`; -export const getServerSideProps: GetServerSideProps = async () => { +export const getStaticProps: GetStaticProps = async () => { try { - const [stakesSnxResponse, snxPrice] = await Promise.all([ + const [ + stakesSnxResponse, + snxPrice, + { data: volumeData }, + { data: activeStakersData }, + { data: integratorsData }, + { data: openInterestData }, + { data: tradingFeesData }, + { data: swapsData }, + { data: graphqlResponsePerps }, + ] = await Promise.all([ axios.get(STAKED_SNX_DATA_URL), getSnxPrice(), + axios.get(VOLUME_DATA_URL, { + headers: { 'x-dune-api-key': apiKey }, + }), + axios.get(ACTIVE_STAKERS_URL, { + headers: { 'x-dune-api-key': apiKey }, + }), + axios.get(INTEGRATORS_VOLUME_URL, { + headers: { 'x-dune-api-key': apiKey }, + }), + axios.get(OPEN_INTEREST_URL, { + headers: { 'x-dune-api-key': apiKey }, + }), + axios.get(TRADING_FEES_URL, { + headers: { 'x-dune-api-key': apiKey }, + }), + axios.get(SWAPS_URL, { + headers: { 'x-dune-api-key': apiKey }, + }), + axios.post(graphqlUrlPerps, { + query: graphqlQuery, + }), ]); + const { data: { stakedSnx }, } = stakesSnxResponse; const totalStakedSnx = stakedSnx.optimism + stakedSnx.ethereum; const valueTotalStaked = snxPrice * totalStakedSnx; + + const tradingVolume = volumeData.result.rows.sort((a, b) => + b.time > a.time ? 1 : -1, + )[0]; + + const activeStakers = activeStakersData.result.rows.sort((a, b) => + b.time > a.time ? 1 : -1, + )[0]; + + const integratorsVolume = integratorsData.result.rows.sort((a, b) => + b.day > a.day ? 1 : -1, + ); + + // Get the integrator volume for the latest date + // and sort by daily fee + const integratorForLatestDate = integratorsVolume + .filter(item => item.day === integratorsVolume[0].day) + .sort((a, b) => (a.daily_fee > b.daily_fee ? -1 : 1)) + .map(item => item.tracking_code.split('\x00')[0]); + + const openInterest = openInterestData.result.rows.sort((a, b) => + a.day > b.day ? -1 : 1, + ); + + const openInterestForLatestDate = openInterest + .filter(item => item.day === openInterest[0].day) + .reduce((acc, item) => acc + Math.abs(item.size_usd), 0); + + const tradingFees = tradingFeesData.result.rows.sort((a, b) => + a.day > b.day ? -1 : 1, + ); + + const markets = graphqlResponsePerps?.data?.futuresMarkets.filter( + ({ marketKey }) => utils.parseBytes32String(marketKey).includes('PERP'), + ).length; + + const uniqueTradingAccounts = + graphqlResponsePerps?.data?.dailyStats[0]?.cumulativeTraders; + + let swapsVolumeTotal: { name: string; amount: number }[] = []; + + swapsData?.result?.rows?.forEach(item => { + const { source, dest, source_amount, dest_amount } = item; + + const sourceAmount = Number(source_amount); + const destAmount = Number(dest_amount); + const total = sourceAmount + destAmount; + + const pair1 = swapsVolumeTotal.find( + item => item.name === `${source}-${dest}`, + ); + const pair2 = swapsVolumeTotal.find( + item => item.name === `${dest}-${source}`, + ); + + if (!pair1 && !pair2) { + swapsVolumeTotal.push({ + name: `${source}-${dest}`, + amount: total, + }); + } + }); + + const swapsVolumeTotalReduced = swapsVolumeTotal.reduce( + (acc, item) => item.amount + acc, + 0, + ); + if (isNaN(valueTotalStaked)) { throw Error('Unexpected NaN getting total staked value'); } + return { props: { totalStakedValue: valueTotalStaked, + swapsVolumeTotal: swapsVolumeTotalReduced, + tradingVolume, + activeStakers, + integratorForLatestDate, + openInterestForLatestDate, + tradingFees: tradingFees[0], + markets, + uniqueTradingAccounts, }, + revalidate: 600 * 10, }; } catch (e) { console.log(e); return { props: { - totalStakedValue: 0, + totalStakedValue: null, + swapsVolumeTotal: null, + tradingVolume: null, + activeStakers: null, + inegratorForLatestDate: null, + openInterestForLatestDate: null, + tradingFees: null, + markets: null, + uniqueTradingAccounts: null, }, }; } diff --git a/public/blocknative.svg b/public/blocknative.svg new file mode 100644 index 00000000..611a02bf --- /dev/null +++ b/public/blocknative.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/cannon.svg b/public/cannon.svg new file mode 100644 index 00000000..17b71a34 --- /dev/null +++ b/public/cannon.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/chainlink.svg b/public/chainlink.svg new file mode 100644 index 00000000..fbade855 --- /dev/null +++ b/public/chainlink.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/chainlinkText.svg b/public/chainlinkText.svg new file mode 100644 index 00000000..4384a73a --- /dev/null +++ b/public/chainlinkText.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/curve.svg b/public/curve.svg new file mode 100644 index 00000000..21ea3d85 --- /dev/null +++ b/public/curve.svg @@ -0,0 +1,1523 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/dhedge.svg b/public/dhedge.svg new file mode 100644 index 00000000..c4a0ff41 --- /dev/null +++ b/public/dhedge.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/infura.svg b/public/infura.svg new file mode 100644 index 00000000..56e2a9fe --- /dev/null +++ b/public/infura.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/public/iosiro.svg b/public/iosiro.svg new file mode 100644 index 00000000..f05aa307 --- /dev/null +++ b/public/iosiro.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/kwenta.svg b/public/kwenta.svg new file mode 100644 index 00000000..dc6032bd --- /dev/null +++ b/public/kwenta.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/lyra.svg b/public/lyra.svg new file mode 100644 index 00000000..f27fa2f2 --- /dev/null +++ b/public/lyra.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/macro.svg b/public/macro.svg new file mode 100644 index 00000000..254f06c5 --- /dev/null +++ b/public/macro.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/optimism.svg b/public/optimism.svg new file mode 100644 index 00000000..98babb73 --- /dev/null +++ b/public/optimism.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/overtime.svg b/public/overtime.svg new file mode 100644 index 00000000..d30054be --- /dev/null +++ b/public/overtime.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/polynomial.svg b/public/polynomial.svg new file mode 100644 index 00000000..677c67d3 --- /dev/null +++ b/public/polynomial.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/pyth.svg b/public/pyth.svg new file mode 100644 index 00000000..640c97d2 --- /dev/null +++ b/public/pyth.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/public/pythText.svg b/public/pythText.svg new file mode 100644 index 00000000..8fa96640 --- /dev/null +++ b/public/pythText.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/thales.svg b/public/thales.svg new file mode 100644 index 00000000..e2cc3ad0 --- /dev/null +++ b/public/thales.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/toros.svg b/public/toros.svg new file mode 100644 index 00000000..3d35a3ff --- /dev/null +++ b/public/toros.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/components/ArrowPath.tsx b/src/components/ArrowPath/ArrowPath.tsx similarity index 75% rename from src/components/ArrowPath.tsx rename to src/components/ArrowPath/ArrowPath.tsx index 2d96be17..d7a0877c 100644 --- a/src/components/ArrowPath.tsx +++ b/src/components/ArrowPath/ArrowPath.tsx @@ -30,19 +30,25 @@ const absolutePathEl = ' L '; const quadraticBezierCurveEl = ' Q '; const getClientRects = (id: string) => { - if (process.browser) return document.getElementById(id)?.getClientRects().item(0); + if (process.browser) + return document.getElementById(id)?.getClientRects().item(0); }; const sliceCoords = (coords: string) => { const pureCoords = coords.includes(absolutePathEl) ? coords.slice(3) : coords; const indexOfComma = pureCoords.indexOf(','); - return [pureCoords.slice(0, indexOfComma), pureCoords.slice(indexOfComma + 1)]; + return [ + pureCoords.slice(0, indexOfComma), + pureCoords.slice(indexOfComma + 1), + ]; }; -const offsetToRightBottom = (xCoords: number, yCoords: number) => `${xCoords + 15},${yCoords + 15}`; -const offsetToLeft = (xCoords: number, yCoords: number) => `${xCoords - 15},${yCoords}`; +const offsetToRightBottom = (xCoords: number, yCoords: number) => + `${xCoords + 15},${yCoords + 15}`; +const offsetToLeft = (xCoords: number, yCoords: number) => + `${xCoords - 15},${yCoords}`; -export default function ArrowPath({ +export function ArrowPath({ edges = [], startPosition, endPosition, @@ -84,18 +90,42 @@ export default function ArrowPath({ }; const arrowPointsDictionary: Record = { - left: `${endOffset.left - globalOffset.left + 2} ${endOffset.top - globalOffset.top}, - ${endOffset.left - globalOffset.left - 10} ${endOffset.top - globalOffset.top - 6}, - ${endOffset.left - globalOffset.left - 10} ${endOffset.top - globalOffset.top + 6}`, - right: `${endOffset.left - globalOffset.left - 2} ${endOffset.top - globalOffset.top}, - ${endOffset.left - globalOffset.left + 10} ${endOffset.top - globalOffset.top - 6}, - ${endOffset.left - globalOffset.left + 10} ${endOffset.top - globalOffset.top + 6}`, - bottom: `${endOffset.left - globalOffset.left} ${endOffset.top - globalOffset.top - 2}, - ${endOffset.left - globalOffset.left - 6} ${endOffset.top - globalOffset.top + 10}, - ${endOffset.left - globalOffset.left + 6} ${endOffset.top - globalOffset.top + 10}`, - top: `${endOffset.left - globalOffset.left} ${endOffset.top - globalOffset.top + 2}, - ${endOffset.left - globalOffset.left - 6} ${endOffset.top - globalOffset.top - 10}, - ${endOffset.left - globalOffset.left + 6} ${endOffset.top - globalOffset.top - 10}`, + left: `${endOffset.left - globalOffset.left + 2} ${ + endOffset.top - globalOffset.top + }, + ${endOffset.left - globalOffset.left - 10} ${ + endOffset.top - globalOffset.top - 6 + }, + ${endOffset.left - globalOffset.left - 10} ${ + endOffset.top - globalOffset.top + 6 + }`, + right: `${endOffset.left - globalOffset.left - 2} ${ + endOffset.top - globalOffset.top + }, + ${endOffset.left - globalOffset.left + 10} ${ + endOffset.top - globalOffset.top - 6 + }, + ${endOffset.left - globalOffset.left + 10} ${ + endOffset.top - globalOffset.top + 6 + }`, + bottom: `${endOffset.left - globalOffset.left} ${ + endOffset.top - globalOffset.top - 2 + }, + ${endOffset.left - globalOffset.left - 6} ${ + endOffset.top - globalOffset.top + 10 + }, + ${endOffset.left - globalOffset.left + 6} ${ + endOffset.top - globalOffset.top + 10 + }`, + top: `${endOffset.left - globalOffset.left} ${ + endOffset.top - globalOffset.top + 2 + }, + ${endOffset.left - globalOffset.left - 6} ${ + endOffset.top - globalOffset.top - 10 + }, + ${endOffset.left - globalOffset.left + 6} ${ + endOffset.top - globalOffset.top - 10 + }`, }; const calculateAllEdges = (edges: ArrowPathProps['edges']) => { @@ -113,7 +143,9 @@ export default function ArrowPath({ ? (edge.y - globalOffset.top + startOffset.top).toFixed(0) : calculateYPosition(edge.y).toFixed(0); - previousCoords = absolutePathEl.concat(xCoords.concat(',').concat(yCoords)); + previousCoords = absolutePathEl.concat( + xCoords.concat(',').concat(yCoords), + ); return previousCoords; } previousCoords = absolutePathEl @@ -121,14 +153,14 @@ export default function ArrowPath({ (typeof edge.x === 'number' ? Number(sliceCoords(previousCoords)[0]) + edge.x : calculateXPosition(edge.x) - ).toFixed(0) + ).toFixed(0), ) .concat(',') .concat( (typeof edge.y === 'number' ? Number(sliceCoords(previousCoords)[1]) + edge.y : calculateYPosition(edge.y) - ).toFixed(0) + ).toFixed(0), ); return previousCoords; }); @@ -139,11 +171,15 @@ export default function ArrowPath({ const calculateAllCurves = (edges: string[]) => { let prevCurveCoords: string; return edges.map((edge, index) => { - const [xCoords, yCoords] = sliceCoords(edge).map((coords) => Number(coords)); + const [xCoords, yCoords] = sliceCoords(edge).map(coords => + Number(coords), + ); let nextCoords: number[]; const hasMoreThanOneEdge = !!edges[index + 1]; if (hasMoreThanOneEdge) { - nextCoords = sliceCoords(edges[index + 1]).map((coords) => Number(coords)); + nextCoords = sliceCoords(edges[index + 1]).map(coords => + Number(coords), + ); } else { nextCoords = [endOffset.left, endOffset.top]; } @@ -153,29 +189,46 @@ export default function ArrowPath({ prevCurveCoords = `${xCoords - 15},${yCoords - 15}`; return edge .concat(quadraticBezierCurveEl) - .concat(`${xCoords - 15},${yCoords + 5} ${xCoords - 15},${yCoords - 15}`); + .concat( + `${xCoords - 15},${yCoords + 5} ${xCoords - 15},${ + yCoords - 15 + }`, + ); } if (!hasMoreThanOneEdge && yCoords < nextCoords[1]) { return edge .concat(quadraticBezierCurveEl) - .concat(`${xCoords - 15},${yCoords + 5} ${xCoords - 15},${yCoords - 15}`); + .concat( + `${xCoords - 15},${yCoords + 5} ${xCoords - 15},${ + yCoords - 15 + }`, + ); } prevCurveCoords = `${xCoords - 15},${yCoords + 15}`; return edge .concat(quadraticBezierCurveEl) - .concat(`${xCoords - 15},${yCoords + 5} ${xCoords - 15},${yCoords + 15}`); + .concat( + `${xCoords - 15},${yCoords + 5} ${xCoords - 15},${yCoords + 15}`, + ); } if (startPosition.position === 'right') { if (yCoords > nextCoords[1]) { prevCurveCoords = `${xCoords + 15},${yCoords - 15}`; return edge .concat(quadraticBezierCurveEl) - .concat(` ${xCoords + 15},${yCoords} ${xCoords + 15},${yCoords - 15}`); + .concat( + ` ${xCoords + 15},${yCoords} ${xCoords + 15},${yCoords - 15}`, + ); } prevCurveCoords = `${offsetToRightBottom(xCoords, yCoords)}`; return edge .concat(quadraticBezierCurveEl) - .concat(`${xCoords + 15},${yCoords + 5} ${offsetToRightBottom(xCoords, yCoords)}`); + .concat( + `${xCoords + 15},${yCoords + 5} ${offsetToRightBottom( + xCoords, + yCoords, + )}`, + ); } if (startPosition.position === 'bottom') { if (!hasMoreThanOneEdge && endPosition.position === 'left') { @@ -194,12 +247,22 @@ export default function ArrowPath({ .concat(',') .concat((yCoords - 35).toFixed(0)) .concat(quadraticBezierCurveEl) - .concat(`${xCoords},${yCoords - 5} ${offsetToLeft(xCoords - 15, yCoords)}`); + .concat( + `${xCoords},${yCoords - 5} ${offsetToLeft( + xCoords - 15, + yCoords, + )}`, + ); } prevCurveCoords = `${offsetToRightBottom(xCoords, yCoords)}`; return edge .concat(quadraticBezierCurveEl) - .concat(`${xCoords},${yCoords + 15} ${offsetToRightBottom(xCoords, yCoords)}`); + .concat( + `${xCoords},${yCoords + 15} ${offsetToRightBottom( + xCoords, + yCoords, + )}`, + ); } if (startPosition.position === 'top') { if (!hasMoreThanOneEdge && endPosition.position === 'right') { @@ -209,7 +272,9 @@ export default function ArrowPath({ .concat(',') .concat((yCoords + 15).toFixed(0)) .concat(quadraticBezierCurveEl) - .concat(`${xCoords},${yCoords} ${offsetToLeft(xCoords, yCoords)}`); + .concat( + `${xCoords},${yCoords} ${offsetToLeft(xCoords, yCoords)}`, + ); } if (!hasMoreThanOneEdge && endPosition.position === 'left') { prevCurveCoords = `${offsetToRightBottom(xCoords, yCoords)}`; @@ -223,12 +288,17 @@ export default function ArrowPath({ prevCurveCoords = `${offsetToRightBottom(xCoords, yCoords)}`; return edge .concat(quadraticBezierCurveEl) - .concat(`${xCoords},${yCoords + 15} ${offsetToRightBottom(xCoords, yCoords)}`); + .concat( + `${xCoords},${yCoords + 15} ${offsetToRightBottom( + xCoords, + yCoords, + )}`, + ); } return edge; } - const [prevXCoords, prevYCoords] = sliceCoords(prevCurveCoords).map((coords) => - Number(coords) + const [prevXCoords, prevYCoords] = sliceCoords(prevCurveCoords).map( + coords => Number(coords), ); if (index === edges.length - 1) { if (endPosition.position === 'left') { @@ -239,7 +309,7 @@ export default function ArrowPath({ .concat(',') .concat((yCoords - 15).toFixed(0)); const curve = quadraticBezierCurveEl.concat( - `${xCoords - 15},${yCoords} ${xCoords + 5},${yCoords}` + `${xCoords - 15},${yCoords} ${xCoords + 5},${yCoords}`, ); return startPointOfCurve.concat(curve); } @@ -250,7 +320,7 @@ export default function ArrowPath({ .concat(',') .concat((yCoords + 15).toFixed(0)); const curve = quadraticBezierCurveEl.concat( - `${xCoords - 5},${yCoords} ${xCoords + 15},${yCoords}` + `${xCoords - 5},${yCoords} ${xCoords + 15},${yCoords}`, ); return startPointOfCurve.concat(curve); } @@ -260,7 +330,7 @@ export default function ArrowPath({ .concat(',') .concat((yCoords - 15).toFixed(0)); const curve = quadraticBezierCurveEl.concat( - `${xCoords + 15},${yCoords} ${xCoords + 30},${yCoords}` + `${xCoords + 15},${yCoords} ${xCoords + 30},${yCoords}`, ); return startPointOfCurve.concat(curve); } @@ -270,7 +340,7 @@ export default function ArrowPath({ .concat(',') .concat((yCoords + 15).toFixed(0)); const curve = quadraticBezierCurveEl.concat( - `${xCoords + 5},${yCoords} ${xCoords + 15},${yCoords}` + `${xCoords + 5},${yCoords} ${xCoords + 15},${yCoords}`, ); return startPointOfCurve.concat(curve); } @@ -283,7 +353,7 @@ export default function ArrowPath({ .concat(',') .concat(prevYCoords.toFixed(0)); const curve = quadraticBezierCurveEl.concat( - `${xCoords},${yCoords + 15} ${xCoords},${yCoords + 30}` + `${xCoords},${yCoords + 15} ${xCoords},${yCoords + 30}`, ); return startPointOfCurve.concat(curve); } @@ -294,7 +364,7 @@ export default function ArrowPath({ .concat(',') .concat((yCoords - 15).toFixed(0)); const curve = quadraticBezierCurveEl.concat( - `${xCoords + 15},${yCoords} ${offsetToLeft(xCoords, yCoords)}` + `${xCoords + 15},${yCoords} ${offsetToLeft(xCoords, yCoords)}`, ); return startPointOfCurve.concat(curve); } @@ -331,7 +401,11 @@ export default function ArrowPath({ .concat(',') .concat(yCoords.toFixed(0)) .concat(quadraticBezierCurveEl) - .concat(`${offsetToLeft(xCoords, yCoords)} ${xCoords - 15},${yCoords + 15}`); + .concat( + `${offsetToLeft(xCoords, yCoords)} ${xCoords - 15},${ + yCoords + 15 + }`, + ); } prevCurveCoords = `${xCoords - 5},${yCoords - 15}`; return absolutePathEl @@ -349,7 +423,9 @@ export default function ArrowPath({ .concat(',') .concat((yCoords - 15).toFixed(0)) .concat(quadraticBezierCurveEl) - .concat(`${xCoords + 5},${yCoords} ${offsetToLeft(xCoords, yCoords)}`); + .concat( + `${xCoords + 5},${yCoords} ${offsetToLeft(xCoords, yCoords)}`, + ); } return edge; }); @@ -357,10 +433,16 @@ export default function ArrowPath({ useEffect(() => { if (arrowWrapper) { - setGlobalOffset({ top: Math.round(arrowWrapper.top), left: Math.round(arrowWrapper.left) }); + setGlobalOffset({ + top: Math.round(arrowWrapper.top), + left: Math.round(arrowWrapper.left), + }); } if (startElement) { - if (startPosition.position === 'left' || startPosition.position === 'right') { + if ( + startPosition.position === 'left' || + startPosition.position === 'right' + ) { setStartOffset({ top: Math.round(startElement.top + startElement.height / 2), left: Math.round(startElement[startPosition.position]), @@ -385,7 +467,9 @@ export default function ArrowPath({ }); } } - const combinedEdgesWithArches = calculateAllCurves(calculateAllEdges(edges)); + const combinedEdgesWithArches = calculateAllCurves( + calculateAllEdges(edges), + ); setAllEdges(combinedEdgesWithArches); if (startElement && endElement) { const length = ( @@ -441,12 +525,14 @@ export default function ArrowPath({ ))} { + return ( + + {icon} + {title} + {description} + {linkText} + + ); +}; diff --git a/src/components/BoxLink/index.tsx b/src/components/BoxLink/index.tsx new file mode 100644 index 00000000..eb816ed7 --- /dev/null +++ b/src/components/BoxLink/index.tsx @@ -0,0 +1 @@ +export * from './BoxLink'; diff --git a/src/components/Button.tsx b/src/components/Button/Button.tsx similarity index 100% rename from src/components/Button.tsx rename to src/components/Button/Button.tsx diff --git a/src/components/Button/index.tsx b/src/components/Button/index.tsx new file mode 100644 index 00000000..8b166a86 --- /dev/null +++ b/src/components/Button/index.tsx @@ -0,0 +1 @@ +export * from './Button'; diff --git a/src/components/EllipticalGradient/EllipticalGradient.tsx b/src/components/EllipticalGradient/EllipticalGradient.tsx new file mode 100644 index 00000000..2c3017dd --- /dev/null +++ b/src/components/EllipticalGradient/EllipticalGradient.tsx @@ -0,0 +1,74 @@ +import { Icon, IconProps } from '@chakra-ui/react'; + +export const EllipticalGradient = ({ + width = '1920px', + height = '1903px', + ...props +}: IconProps) => { + return ( + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/src/components/EllipticalGradient/index.tsx b/src/components/EllipticalGradient/index.tsx new file mode 100644 index 00000000..daa3943e --- /dev/null +++ b/src/components/EllipticalGradient/index.tsx @@ -0,0 +1 @@ +export * from './EllipticalGradient'; diff --git a/src/components/Footer.tsx b/src/components/Footer/Footer.tsx similarity index 98% rename from src/components/Footer.tsx rename to src/components/Footer/Footer.tsx index d62c8830..18bacd7e 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer/Footer.tsx @@ -1,5 +1,5 @@ import { Fragment } from 'react'; -import { Logo, Socials } from './'; +import { Logo, Socials } from '../'; import { Box, Divider, Flex, Link, Show, Text } from '@chakra-ui/react'; import { Accordion, @@ -75,7 +75,7 @@ const footerMenu = [ ], ]; -export default function Footer() { +export function Footer() { return ( <> diff --git a/src/components/Footer/index.tsx b/src/components/Footer/index.tsx new file mode 100644 index 00000000..ddcc5a9c --- /dev/null +++ b/src/components/Footer/index.tsx @@ -0,0 +1 @@ +export * from './Footer'; diff --git a/src/components/GradientText/GradientText.tsx b/src/components/GradientText/GradientText.tsx new file mode 100644 index 00000000..6bcb36b9 --- /dev/null +++ b/src/components/GradientText/GradientText.tsx @@ -0,0 +1,21 @@ +import { ReactNode } from 'react'; +import { Box, BoxProps } from '@chakra-ui/react'; + +interface GradientTextProps extends BoxProps { + children: ReactNode; +} + +export const GradientText = ({ children, ...props }: GradientTextProps) => { + return ( + + {children} + + ); +}; diff --git a/src/components/GradientText/index.tsx b/src/components/GradientText/index.tsx new file mode 100644 index 00000000..a9802ff5 --- /dev/null +++ b/src/components/GradientText/index.tsx @@ -0,0 +1 @@ +export * from './GradientText'; diff --git a/src/components/Header.tsx b/src/components/Header/Header.tsx similarity index 95% rename from src/components/Header.tsx rename to src/components/Header/Header.tsx index 931fcc85..c36f0b7c 100644 --- a/src/components/Header.tsx +++ b/src/components/Header/Header.tsx @@ -1,10 +1,10 @@ import { useState, useEffect } from 'react'; import HamburgerMenu from 'react-hamburger-menu'; -import { Menu } from './'; import { useRouter } from 'next/router'; import { Image, Flex, Show, Box } from '@chakra-ui/react'; +import { Menu } from '..'; -const HeaderComponent = () => { +export const Header = () => { const [isOpen, setIsOpen] = useState(false); const { push } = useRouter(); @@ -50,6 +50,7 @@ const HeaderComponent = () => { onClick={() => push('/')} cursor="pointer" mr={{ base: '', xl: '32px' }} + alt="logo" /> {/* if using below="xl" we will see both, menu and hamburger menu */} @@ -81,5 +82,3 @@ const HeaderComponent = () => { }; export const headerHeight = 65; - -export default HeaderComponent; diff --git a/src/components/Header/index.tsx b/src/components/Header/index.tsx new file mode 100644 index 00000000..266dec8a --- /dev/null +++ b/src/components/Header/index.tsx @@ -0,0 +1 @@ +export * from './Header'; diff --git a/src/components/IntegratorCard/IntegratorCard.tsx b/src/components/IntegratorCard/IntegratorCard.tsx new file mode 100644 index 00000000..85bc18b1 --- /dev/null +++ b/src/components/IntegratorCard/IntegratorCard.tsx @@ -0,0 +1,101 @@ +import { + Flex, + Heading, + Text, + Image, + Tag, + TagLabel, + FlexProps, + LinkBox, + LinkOverlay, + Box, + Show, +} from '@chakra-ui/react'; + +interface IntegratorCardProps extends FlexProps { + uri?: string; + name?: string; + description?: string; + largestDescription?: string; + link?: string; + tag?: string; + enabled?: boolean; +} + +export const IntegratorCard = ({ + uri, + name, + description, + largestDescription, + link, + tag, + enabled = true, + ...props +}: IntegratorCardProps) => { + return ( + + + + {`${name}-logo`} + + + {tag} + + + + + {name} + + + + + {description} + + {/* NOTE: Hack to make items same height. */} + + {largestDescription} + + + + + + ); +}; diff --git a/src/components/IntegratorCard/index.tsx b/src/components/IntegratorCard/index.tsx new file mode 100644 index 00000000..6c9dcfea --- /dev/null +++ b/src/components/IntegratorCard/index.tsx @@ -0,0 +1 @@ +export * from './IntegratorCard'; diff --git a/src/components/IntegratorCardPerps/IntegratorCardPerps.tsx b/src/components/IntegratorCardPerps/IntegratorCardPerps.tsx new file mode 100644 index 00000000..b786e52b --- /dev/null +++ b/src/components/IntegratorCardPerps/IntegratorCardPerps.tsx @@ -0,0 +1,113 @@ +import { + Button, + Flex, + Heading, + Hide, + Icon, + Link, + Show, + Text, + Image, + FlexProps, +} from '@chakra-ui/react'; + +interface IntegratorCardProps extends FlexProps { + uri: string; + name: string; + description: string | string[]; + link: string; +} + +export const IntegratorCardPerps = ({ + uri, + name, + description, + link, + ...props +}: IntegratorCardProps) => { + return ( + + + + + + {name} + + + + {Array.isArray(description) ? ( + <> + {description[0]}{' '} + + perps@snxdao.io. + + + ) : ( + description + )} + + + + + + {name} + + + {description} + + + + + ); +}; diff --git a/src/components/IntegratorCardPerps/index.tsx b/src/components/IntegratorCardPerps/index.tsx new file mode 100644 index 00000000..d340ca4a --- /dev/null +++ b/src/components/IntegratorCardPerps/index.tsx @@ -0,0 +1 @@ +export * from './IntegratorCardPerps'; diff --git a/src/components/Logo.tsx b/src/components/Logo/Logo.tsx similarity index 74% rename from src/components/Logo.tsx rename to src/components/Logo/Logo.tsx index 8d92bf7e..00561746 100644 --- a/src/components/Logo.tsx +++ b/src/components/Logo/Logo.tsx @@ -4,7 +4,7 @@ interface LogoProps extends LinkProps { small?: boolean; } -const LogoComponent = ({ small, ...rest }: LogoProps) => { +export const Logo = ({ small, ...rest }: LogoProps) => { const src = small ? '/logo-x.svg' : '/logo.svg'; return ( @@ -13,5 +13,3 @@ const LogoComponent = ({ small, ...rest }: LogoProps) => { ); }; - -export default LogoComponent; diff --git a/src/components/Logo/index.tsx b/src/components/Logo/index.tsx new file mode 100644 index 00000000..d97c6951 --- /dev/null +++ b/src/components/Logo/index.tsx @@ -0,0 +1 @@ +export * from './Logo'; diff --git a/src/components/Menu.tsx b/src/components/Menu/Menu.tsx similarity index 95% rename from src/components/Menu.tsx rename to src/components/Menu/Menu.tsx index ca54bff2..f173b59d 100644 --- a/src/components/Menu.tsx +++ b/src/components/Menu/Menu.tsx @@ -1,6 +1,6 @@ import { ImArrowUpRight2 } from 'react-icons/im'; import { useRouter } from 'next/router'; -import { ExternalLink } from '../styles/common'; +import { ExternalLink } from '../../styles/common'; import { Box, Button, Flex, Link as ChakraLink, Text } from '@chakra-ui/react'; import { ReactNode } from 'react'; @@ -43,7 +43,7 @@ interface MenuProps { isOpen?: boolean; } -const MenuComponent = ({ isOpen, ...rest }: MenuProps) => { +export const Menu = ({ isOpen, ...rest }: MenuProps) => { const { pathname } = useRouter(); const urlFolderPathName = pathname.split('/')[1]; @@ -121,6 +121,7 @@ const MenuComponent = ({ isOpen, ...rest }: MenuProps) => { key={item.label} rightIcon={} mt={{ base: '8px', xl: '0' }} + borderRadius="4px" > {item.label} @@ -143,5 +144,3 @@ export const MenuItem = ({ children, ...rest }: { children: ReactNode }) => ( {children} ); - -export default MenuComponent; diff --git a/src/components/Menu/index.tsx b/src/components/Menu/index.tsx new file mode 100644 index 00000000..629d3d0a --- /dev/null +++ b/src/components/Menu/index.tsx @@ -0,0 +1 @@ +export * from './Menu'; diff --git a/src/components/PageLayout.tsx b/src/components/PageLayout/PageLayout.tsx similarity index 86% rename from src/components/PageLayout.tsx rename to src/components/PageLayout/PageLayout.tsx index 761b817b..bb64621d 100644 --- a/src/components/PageLayout.tsx +++ b/src/components/PageLayout/PageLayout.tsx @@ -1,16 +1,12 @@ import { Divider, Flex, FlexProps } from '@chakra-ui/react'; import { PropsWithChildren } from 'react'; -import { Footer, Header } from '.'; +import { Footer, Header } from '..'; interface PageLayoutProps extends PropsWithChildren, FlexProps { useChakra?: boolean; } -export default function PageLayout({ - children, - useChakra, - ...props -}: PageLayoutProps) { +export function PageLayout({ children, useChakra, ...props }: PageLayoutProps) { if (useChakra) { return ( diff --git a/src/components/PageLayout/index.tsx b/src/components/PageLayout/index.tsx new file mode 100644 index 00000000..a0535228 --- /dev/null +++ b/src/components/PageLayout/index.tsx @@ -0,0 +1 @@ +export * from './PageLayout'; diff --git a/src/components/Socials.tsx b/src/components/Socials/Socials.tsx similarity index 77% rename from src/components/Socials.tsx rename to src/components/Socials/Socials.tsx index 8e33a58c..d7a0ed73 100644 --- a/src/components/Socials.tsx +++ b/src/components/Socials/Socials.tsx @@ -1,6 +1,6 @@ -import Discord from '../svg/Discord'; -import Twitter from '../svg/Twitter'; -import Github from '../svg/Github'; +import Discord from '../../svg/Discord'; +import Twitter from '../../svg/Twitter'; +import Github from '../../svg/Github'; import { Flex, Link } from '@chakra-ui/react'; @@ -22,7 +22,13 @@ const data = (fill?: string) => [ }, ]; -const Socials = ({ isFooter, fill }: { fill?: string; isFooter?: boolean }) => { +export const Socials = ({ + isFooter, + fill, +}: { + fill?: string; + isFooter?: boolean; +}) => { return ( { ); }; - -export default Socials; diff --git a/src/components/Socials/index.tsx b/src/components/Socials/index.tsx new file mode 100644 index 00000000..2ef77365 --- /dev/null +++ b/src/components/Socials/index.tsx @@ -0,0 +1 @@ +export * from './Socials'; diff --git a/src/components/index.ts b/src/components/index.ts index f04ca8c5..20eba173 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -1,10 +1,15 @@ -import Header from './Header'; -import Menu from './Menu'; -import Socials from './Socials'; -import Footer from './Footer'; -import Button from './Button'; -import Logo from './Logo'; -import PageLayout from './PageLayout'; -import ArrowPath from './ArrowPath'; - -export { Header, Menu, Footer, Button, Socials, Logo, PageLayout, ArrowPath }; +export * from './Header'; +export * from './Menu'; +export * from './Socials'; +export * from './Footer'; +export * from './Button'; +export * from './Logo'; +export * from './PageLayout'; +export * from './ArrowPath'; +export * from './BoxLink'; +export * from './IntegratorCard'; +export * from './PageLayout'; +export * from './IntegratorCardPerps'; +export * from './EllipticalGradient'; +export * from './GradientText'; +export * from './ArrowWrapper'; diff --git a/src/sections/governance/main.tsx b/src/sections/governance/main.tsx index d661743c..799e06b1 100644 --- a/src/sections/governance/main.tsx +++ b/src/sections/governance/main.tsx @@ -1,6 +1,4 @@ import { useEffect, useState } from 'react'; -import { ArrowPath } from 'src/components'; -import ArrowWrapper from 'src/components/ArrowWrapper'; import { ExternalLink, FlexDiv, @@ -17,6 +15,7 @@ import SvgPlus from 'src/svg/Plus'; import { CyanSpotlight, PinkSpotLight } from 'src/svg/Spotlights'; import styled from 'styled-components'; import { StyledButtonWrapperLinearGradient } from './furtherLinking'; +import { ArrowPath, ArrowWrapper } from 'src/components'; export default function GovernanceMain() { const [activeArrowIds, setActiveArrowIds] = useState(['']); @@ -44,19 +43,20 @@ export default function GovernanceMain() { Governance - Synthetix protocol is governed, maintained and built by a combination of community - members, core contributors, and several elected committees and councils that are voted on - by SNX stakers. Learn more about how these governing bodies interact, what they're - responsible for, and how they influence protocol improvements via SIPs, SCCPs and other - work. + Synthetix protocol is governed, maintained and built by a combination + of community members, core contributors, and several elected + committees and councils that are voted on by SNX stakers. Learn more + about how these governing bodies interact, what they're + responsible for, and how they influence protocol improvements via + SIPs, SCCPs and other work. COUNCIL MEMBERS - View the history of past council elections
and vote in any currently open - elections. + View the history of past council elections
and vote in + any currently open elections.
@@ -95,12 +95,14 @@ export default function GovernanceMain() { Governance Structure - The Synthetix governance structure is composed of Councils, Committees, Core Contributors - and a DAO. Each governance component is assigned a specific aspect of protocol governance. - Councils are directly elected by SNX stakers, while other governance bodies are appointed - according to the existing governance procedures. All of the components work together to - ensure that the protocol is governed in a fair, transparent and legitimate way in accordance - with the direction provided by token holders. + The Synthetix governance structure is composed of Councils, Committees, + Core Contributors and a DAO. Each governance component is assigned a + specific aspect of protocol governance. Councils are directly elected by + SNX stakers, while other governance bodies are appointed according to + the existing governance procedures. All of the components work together + to ensure that the protocol is governed in a fair, transparent and + legitimate way in accordance with the direction provided by token + holders. {/* FIRST ROW */} @@ -173,7 +175,7 @@ export default function GovernanceMain() { { + onClick={e => { setActiveArrows([ 'implement-sips', 'core-contributors', @@ -322,7 +324,10 @@ export default function GovernanceMain() { ]) } > - + Spartan @@ -335,7 +340,7 @@ export default function GovernanceMain() { left="90%" id="spartan-council-arrow-label" focus={activeArrowIds.includes('spartan-council-arrow-label')} - onClick={(e) => { + onClick={e => { e.stopPropagation(); setActiveArrows([ 'spartan-council-plus-sign', @@ -397,7 +402,10 @@ export default function GovernanceMain() { > Pay Contributors - + @@ -415,7 +423,11 @@ export default function GovernanceMain() { id="hire-cc" focus={activeArrowIds.includes('hire-cc')} onClick={() => - setActiveArrows(['hire-cc', 'vouch-for-cc', 'core-contributor-committee']) + setActiveArrows([ + 'hire-cc', + 'vouch-for-cc', + 'core-contributor-committee', + ]) } > Hire Core Contributors @@ -430,7 +442,9 @@ export default function GovernanceMain() { Manage Ecosystem Governance - Ecosystem Governance Participation + + Ecosystem Governance Participation + Advocate Ecosystem Partnership - + Ambassadors @@ -478,7 +495,10 @@ export default function GovernanceMain() { ]) } > - + protocol @@ -491,14 +511,26 @@ export default function GovernanceMain() { id="execute-sips" addMarginBottom focus={activeArrowIds.includes('execute-sips')} - onClick={() => setActiveArrows(['execute-sips', 'protocol-dao', 'implement-sips'])} + onClick={() => + setActiveArrows([ + 'execute-sips', + 'protocol-dao', + 'implement-sips', + ]) + } > Execute SIPs setActiveArrows(['execute-sccps', 'protocol-dao', 'implement-sips'])} + onClick={() => + setActiveArrows([ + 'execute-sccps', + 'protocol-dao', + 'implement-sips', + ]) + } > Execute SCCPs @@ -557,7 +589,10 @@ export default function GovernanceMain() { ]) } > - + grants @@ -568,7 +603,7 @@ export default function GovernanceMain() { color="cyan" top="130px" focus={activeArrowIds.includes('pay-contributors')} - onClick={(e) => { + onClick={e => { e.stopPropagation(); setActiveArrows([ 'grants-dao', @@ -606,7 +641,10 @@ export default function GovernanceMain() { ]) } > - + Risk @@ -711,7 +749,10 @@ export default function GovernanceMain() { ]) } > - + Treasury @@ -756,7 +797,10 @@ export default function GovernanceMain() { @@ -939,7 +990,8 @@ export default function GovernanceMain() { { x: 'endRight', y: 'heightAsEndEl' }, ]} active={ - activeArrowIds.includes('implement-sips') && activeArrowIds.includes('execute-sccps') + activeArrowIds.includes('implement-sips') && + activeArrowIds.includes('execute-sccps') } /> @@ -956,7 +1008,8 @@ export default function GovernanceMain() { { x: 0, y: 'heightAsEndEl' }, ]} active={ - activeArrowIds.includes('implement-sips') && activeArrowIds.includes('vote-sips') + activeArrowIds.includes('implement-sips') && + activeArrowIds.includes('vote-sips') } /> @@ -970,7 +1023,10 @@ export default function GovernanceMain() { { x: 20, y: 0 }, { x: 0, y: 'heightAsEndEl' }, ]} - active={activeArrowIds.includes('vouch-for-cc') && activeArrowIds.includes('hire-cc')} + active={ + activeArrowIds.includes('vouch-for-cc') && + activeArrowIds.includes('hire-cc') + } /> @@ -1002,7 +1059,9 @@ export default function GovernanceMain() { active={ activeArrowIds.includes('snx-community') && activeArrowIds.includes('treasury-council-plus-sign') && - activeArrowIds.includes('snx-community-treasury-council-plus-sign-main-arrow') + activeArrowIds.includes( + 'snx-community-treasury-council-plus-sign-main-arrow', + ) } /> @@ -1033,7 +1094,9 @@ export default function GovernanceMain() { active={ activeArrowIds.includes('snx-community') && activeArrowIds.includes('ambassadors-council-plus-sign') && - activeArrowIds.includes('snx-community-ambassadors-council-plus-sign-main-arrow') + activeArrowIds.includes( + 'snx-community-ambassadors-council-plus-sign-main-arrow', + ) } /> @@ -1089,7 +1160,10 @@ export default function GovernanceMain() { @@ -1282,7 +1365,8 @@ const DAOCircle = styled.div<{ focus?: boolean }>` background-color: #1d1d3d; cursor: pointer; transition: all 200ms linear; - ${({ theme, focus }) => (focus ? `box-shadow: 0px 0px 30px ${theme.colors.pink}` : '')}; + ${({ theme, focus }) => + focus ? `box-shadow: 0px 0px 30px ${theme.colors.pink}` : ''}; `; const CommitteeCircle = styled.div<{ @@ -1302,7 +1386,8 @@ const CommitteeCircle = styled.div<{ border: 3px solid ${({ theme }) => theme.colors.cyan}; cursor: pointer; transition: all 200ms linear; - ${({ theme, focus }) => (focus ? `box-shadow: 0px 0px 30px ${theme.colors.cyan}` : '')}; + ${({ theme, focus }) => + focus ? `box-shadow: 0px 0px 30px ${theme.colors.cyan}` : ''}; ${({ first }) => (first ? 'margin-right: auto;' : '')} ${({ edge }) => { if (edge === 'right') { @@ -1327,7 +1412,8 @@ const DAOActionCircle = styled.div<{ focus?: boolean }>` border: 1px solid ${({ theme }) => theme.colors.green}; background-color: ${({ theme }) => theme.colors.bgBlack}; transition: all 200ms linear; - ${({ theme, focus }) => (focus ? `box-shadow: 0px 0px 20px ${theme.colors.green}` : '')}; + ${({ theme, focus }) => + focus ? `box-shadow: 0px 0px 20px ${theme.colors.green}` : ''}; `; const DAOPlusSignWrapper = styled.div<{ @@ -1388,17 +1474,20 @@ const DAODutiesCircle = styled.div<{ margin-top: ${({ addMarginTop }) => (addMarginTop ? '8px' : '0px')}; cursor: pointer; transition: all 200ms linear; - ${({ theme, focus }) => (focus ? `box-shadow: 0px 0px 20px ${theme.colors.cyan}` : '')}; + ${({ theme, focus }) => + focus ? `box-shadow: 0px 0px 20px ${theme.colors.cyan}` : ''}; `; const DAODescription = styled(FlexDivCol)<{ alignItems?: 'end' | 'start' }>` - align-items: ${({ alignItems }) => (alignItems === 'end' ? 'flex-end' : 'flex-start')}; + align-items: ${({ alignItems }) => + alignItems === 'end' ? 'flex-end' : 'flex-start'}; min-width: 190px; font-size: 11px; `; const StyledText = styled.span<{ bold?: boolean; color?: 'pink' | 'white' }>` - color: ${({ theme, color }) => (color === 'white' ? 'white' : theme.colors.pink)}; + color: ${({ theme, color }) => + color === 'white' ? 'white' : theme.colors.pink}; font-weight: ${({ bold }) => (bold ? 900 : 0)}; `; @@ -1430,7 +1519,8 @@ const ArrowLabel = styled.div<{ width: fit-content; padding: 0px 8px; border: 1px solid - ${({ color, theme }) => (color ? theme.colors[color] : theme.colors.lightViolet)}; + ${({ color, theme }) => + color ? theme.colors[color] : theme.colors.lightViolet}; z-index: 10; white-space: nowrap; cursor: pointer; diff --git a/src/sections/home/aggregatedStats.tsx b/src/sections/home/aggregatedStats.tsx new file mode 100644 index 00000000..6fcf8a26 --- /dev/null +++ b/src/sections/home/aggregatedStats.tsx @@ -0,0 +1,104 @@ +import { Flex, Text, Box, Link, Button } from '@chakra-ui/react'; +import millify from 'millify'; +import { VolumeData } from 'src/typings'; +import { links } from 'src/utils/constants'; +import { numberWithCommas } from 'src/utils/formatters/number'; + +interface AggregatedStatsProps { + tradingVolume: VolumeData; + openInterestForLatestDate: number; + markets: string; + uniqueTradingAccounts: string; +} + +export const AggregatedStats = ({ + tradingVolume, + openInterestForLatestDate, + markets, + uniqueTradingAccounts, +}: AggregatedStatsProps) => { + const volumeMillified = millify( + Math.floor(tradingVolume?.cumulative_volume || 13590466291), + ); + + const oiMillified = millify( + Math.floor(openInterestForLatestDate || 122087440), + ); + + return ( + + + + + ALL TIME VOLUME + + ${volumeMillified} + + + + OPEN INTEREST + + ${oiMillified} + + + + UNIQUE TRADING ACCOUNTS + + + {numberWithCommas(uniqueTradingAccounts)} + + + + + MARKETS + + {markets} + + + + + + + + + ); +}; diff --git a/src/sections/home/collateral.tsx b/src/sections/home/collateral.tsx new file mode 100644 index 00000000..9a649edd --- /dev/null +++ b/src/sections/home/collateral.tsx @@ -0,0 +1,76 @@ +import { Box, Button, Flex, Link, Text } from '@chakra-ui/react'; +import { GradientText } from 'src/components'; +import { links } from 'src/utils/constants'; + +export const Collateral = () => { + return ( + + + + SYNTHETIX STAKING + + + Staking Collateral with Synthetix{' '} + helps support deep liquidity, low + slippage, and highly competitive trading fees for our derivatives + markets.{' '} + + Stakers get rewarded for helping to + support a more robust ecosystem. + + + + Stakers get rewarded for helping to + support a more robust ecosystem. + + + + + + + + + + ); +}; diff --git a/src/sections/home/ecosystem.tsx b/src/sections/home/ecosystem.tsx index 50684c1f..8b5f4d59 100644 --- a/src/sections/home/ecosystem.tsx +++ b/src/sections/home/ecosystem.tsx @@ -1,136 +1,63 @@ -import { ExternalLink, Section, SectionTitle } from '../../styles/common'; -import { Subline } from 'src/styles/common'; -import styled from 'styled-components'; -import media from 'styled-media-query'; -import OneInch from '/public/powered-by/1inch.svg'; -import Curve from '/public/powered-by/crv.svg'; -import Dhedge from '/public/powered-by/dhedge.svg'; -import Paraswap from '/public/powered-by/para.svg'; -import Yearn from '/public/powered-by/yearn.svg'; -import Aelin from '/public/powered-by/aelin.svg'; -import Image, { StaticImageData } from 'next/image'; +import { Heading, Text, Box } from '@chakra-ui/react'; -interface ImageProps { - title: string; - image: StaticImageData; - link: string; -} - -const images: ImageProps[] = [ - { - image: OneInch, - title: '1INCH', - link: 'https://1inch.io/', - }, - { - image: Curve, - title: 'CURVE', - link: 'https://curve.fi/', - }, - { - image: Dhedge, - title: 'DHEDGE', - link: 'https://www.dhedge.org/', - }, - { - image: Paraswap, - title: 'PARASWAP', - link: 'https://paraswap.io/', - }, - { - image: Yearn, - title: 'YEARN', - link: 'https://yearn.finance/', - }, - { - image: Aelin, - title: 'AELIN', - link: 'https://aelin.xyz/', - }, -]; - -export default function Ecosystem() { +export const Ecosystem = () => { return ( - - SYNTHETIX ECOSYSTEM - - Many platforms already leverage the deep liquidity and composability of Synthetix to deliver - better trades with lower slippage, hedging, and other unique use cases. - - - {images.map((image) => ( - - - {image.title} - - ))} - - + + + + + SYNTHETIX ECOSYSTEM + + + + A Network of DeFi Apps Powered by Synthetix + + + Explore the growing ecosystem of decentralized apps built on top + of Synthetix liquidity. The Synthetix ecosystem is comprised of + derivatives exchanges, sUSD utility, and more. + + + + + + ); -} - -const EcoSystemSection = styled(Section)` - display: flex; - flex-direction: column; - align-items: center; - background-color: ${({ theme }) => theme.colors.bgBlackHighlighted}; - padding: 0px 100px 120px; - - ${media.lessThan('medium')` - padding: 20px 40px; - background-color: transparent; - `} -`; - -const EcosystemSectionTitle = styled(SectionTitle)` - text-align: center; - margin-bottom: 14px; - ${media.greaterThan('large')` - padding-top:40px; - `} -`; - -const EcosystemSubline = styled(Subline)` - max-width: 700px; - text-align: center; -`; - -const ImageContainer = styled.div` - max-width: ${({ theme }) => theme.maxContentWidth}; - display: flex; - flex-wrap: wrap; - justify-content: space-evenly; - margin-top: 80px; - width: 100%; - cursor: pointer; - - ${media.lessThan('large')` - display: grid; - grid-template-columns: 1fr 1fr; - grid-gap: 40px; - `} - - ${media.lessThan('medium')` - margin-bottom: 40px; - `} -`; - -const ImageInner = styled(ExternalLink)` - display: flex; - flex-direction: column; - align-items: center; -`; - -const StyledImage = styled(Image)` - width: 114px; - height: 114px; -`; +}; -const ImageTitle = styled.span` - font-family: GT America; - font-style: normal; - font-weight: bold; - font-size: 14px; - color: white; - font-stretch: expanded; -`; +export default Ecosystem; diff --git a/src/sections/home/futures.tsx b/src/sections/home/futures.tsx deleted file mode 100644 index d1db4546..00000000 --- a/src/sections/home/futures.tsx +++ /dev/null @@ -1,189 +0,0 @@ -import styled from 'styled-components'; -import media from 'styled-media-query'; -import Accordion, { - AccordionItemsType, -} from 'src/components/Accordion/Accordion'; -import { useState } from 'react'; -import { FlexDivCol, Section, SectionTitle } from 'src/styles/common'; -import { useRouter } from 'next/router'; -import { Button, Link } from '@chakra-ui/react'; - -const FuturesSection = () => { - const [activeIndex, setActiveIndex] = useState(0); - const { push } = useRouter(); - return ( - - - - - - - - Decentralized
Perpetual Futures -
- - push('/futures')} - w="146px" - marginTop="32px" - borderRadius="4px" - bg="cyan.500" - boxShadow="0px 0px 10px rgba(0, 209, 255, 0.9)" - py={4} - width="147px" - color="black" - textTransform="uppercase" - fontFamily="GT America" - fontWeight="700" - fontSize="14px" - lineHeight="24px" - textAlign="center" - _hover={{ textDecoration: 'none', bg: 'cyan.300' }} - > - Learn More - -
-
- ); -}; - -const FuturesContainer = styled(Section)` - min-height: 600px; - position: relative; - display: flex; - justify-content: space-between; - align-items: center; - padding-right: 153px; - padding-top: 50px; - - ${media.lessThan('large')` - padding-right: 40px; - min-height: 800px; - `} - - ${media.lessThan('medium')` - min-height: 950px; - flex-direction: column; - justify-content: flex-start; - align-items: flex-start; - background-color: transparent; - padding: 0 40px; - `} -`; - -const Left = styled.div` - position: relative; - width: 100%; - min-height: 430px; - max-width: 766px; - right: 0; - background-image: url('/graph.svg'); - background-repeat: no-repeat; - background-position: right; - background-size: contain; - - ${media.lessThan('large')` - background-size: contain; - `} - - ${media.lessThan('medium')` - background-size: cover; - position: absolute; - right: 0; - left: 0; - `} - - ${media.lessThan('small')` - background-size: contain; - transform: scale(1.2); - `} -`; - -const AccordionContainer = styled(FlexDivCol)` - max-width: 596px; - height: 470px; - width: 100%; - - ${media.lessThan('medium')` - min-width: unset; - width: 100%; - margin-top: 450px; - `} - - ${media.lessThan('small')` - margin-top: 400px; - height: 580px; - `} -`; - -const FadeToBlack = styled.div<{ ltr: boolean }>` - position: absolute; - top: 0; - bottom: 60px; - z-index: 10; - width: 150px; - - ${media.lessThan('large')` - width: 80px; - `} - - ${({ ltr, theme }) => - ltr - ? /* We can't use the keyword `transparent` here cause Safari thinks transparent is fade to black and not - fade to color from the parent node that has a specified background color. - https://ambientimpact.com/web/snippets/safari-bug-with-gradients-that-fade-to-transparent */ - `right: 0px; background: linear-gradient(90deg, rgba(6, 6, 27, 0), ${theme.colors.bgBlack} 90%);` - : `left: 0px; background: linear-gradient(90deg, ${theme.colors.bgBlack} 20%, rgba(6, 6, 27, 0));`} - - ${({ ltr, theme }) => { - if (!ltr) - return media.lessThan('medium')` - display: none;`; - else - return media.lessThan('medium')` - width: 100px; - background: linear-gradient(90deg, transparent, ${theme.colors.bgBlack} 70%); - `; - }} -`; - -const accordionItems: AccordionItemsType[] = [ - { - title: 'Best Price Execution', - descriptions: [ -
- Leveraging the Synthetix debt pool and our innovative liquidity - framework, our traders are guaranteed to have some of the best price - execution around, with little to no slippage and fills you can’t get - elsewhere. -
, - ], - }, - { - title: 'Lowest Downtime & Liquidation Risk', - descriptions: [ -
- Say goodbye to downtime during periods of high volatility. As an added - bonus, our futures contracts remove the risk of cascading liquidations - due to forced selloffs. -
, - ], - }, - { - title: 'Permissionless & Composable', - descriptions: [ -
- Get all the benefits of DeFi with a fully on-chain permissionless - futures trading experience. Looking to build with leveraged perpetual - futures contracts? Learn more about how to integrate perpetual futures - powered by Synthetix into your project. -
, - ], - }, -]; - -export default FuturesSection; diff --git a/src/sections/home/governance.tsx b/src/sections/home/governance.tsx new file mode 100644 index 00000000..a4b89658 --- /dev/null +++ b/src/sections/home/governance.tsx @@ -0,0 +1,96 @@ +import Link from 'next/link'; +import { Button, Flex, Text, Show } from '@chakra-ui/react'; +import { Spartan } from 'src/svg/Spartan'; +import { links } from 'src/utils/constants'; + +export const Governance = () => { + return ( + + + + SYNTHETIX GOVERNANCE + + + Protocol Governance + + + The Synthetix protocol is governed by a decentralized set of + representative councils that are voted on by stakers. The protocol and + ecosystem is more broadly maintained and improved by a combination of + core contributors, ecosystem partners, and community members. + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/src/sections/home/hero.tsx b/src/sections/home/hero.tsx new file mode 100644 index 00000000..035bcf62 --- /dev/null +++ b/src/sections/home/hero.tsx @@ -0,0 +1,77 @@ +import { Box, Button, Flex, Text } from '@chakra-ui/react'; +import SNXMainLooper from 'src/svg/SNXMainLooper'; + +export const Hero = () => { + const onClick = () => { + if (typeof window !== 'undefined') { + const ecosystem = document.getElementById('ecosystem'); + if (ecosystem) { + ecosystem.scrollIntoView({ behavior: 'smooth' }); + } + } + }; + + return ( + + + + The Liquidity Layer of DeFi + + + Synthetix provides liquidity for permissionless derivatives like + perpetual futures, options, parimutuel markets, and more across EVM + chains. Powering the next generation of permissionless protocols. + + + + + + + ); +}; diff --git a/src/sections/home/index.tsx b/src/sections/home/index.tsx new file mode 100644 index 00000000..30f36a09 --- /dev/null +++ b/src/sections/home/index.tsx @@ -0,0 +1,13 @@ +export * from './hero'; +export * from './ecosystem'; +export * from './volume'; +export * from './integrators'; +export * from './interested'; +export * from './collateral'; +export * from './stats'; +export * from './interfaces'; +export * from './staking'; +export * from './perps'; +export * from './aggregatedStats'; +export * from './governance'; +export * from './partners'; diff --git a/src/sections/home/integrators.tsx b/src/sections/home/integrators.tsx new file mode 100644 index 00000000..9e267e20 --- /dev/null +++ b/src/sections/home/integrators.tsx @@ -0,0 +1,83 @@ +import { Flex } from '@chakra-ui/react'; +import { IntegratorCard } from 'src/components'; +import { integrators } from 'src/utils/integrators'; + +interface IntegratorsProps { + sortList: string[]; +} + +export const Integrators = ({ sortList }: IntegratorsProps) => { + // We use this element (with display none) to get the largest description length. + // This means we will have consistent heights across cards. + const largestDescription = integrators.reduce((prev, current) => { + return prev.description.length > current.description.length + ? prev + : current; + }); + + return ( + + {integrators + .sort((a, b) => { + const aIndex = sortList.indexOf(a.name); + const bIndex = sortList.indexOf(b.name); + if (aIndex === -1) { + return 1; + } + if (bIndex === -1) { + return -1; + } + return aIndex - bIndex; + }) + .map(({ description, link, name, uri, tag }, i) => ( + + ))} + + + ); +}; diff --git a/src/sections/home/interested.tsx b/src/sections/home/interested.tsx new file mode 100644 index 00000000..b649b3d6 --- /dev/null +++ b/src/sections/home/interested.tsx @@ -0,0 +1,90 @@ +import { Button, Flex, Link, Show, Text } from '@chakra-ui/react'; +import { InterestedLooper } from 'src/svg/InterestedLooper'; +import { links } from 'src/utils/constants'; + +export const Interested = () => { + return ( + + + + + + + + + + Interested in building in the Synthetix Ecosystem? + + + Learn more about how to integrate Perps and other Synthetix markets + by visiting the developer documentation and joining the Synthetix + Discord + + + + + + + + + + + + ); +}; diff --git a/src/sections/home/interfaces.tsx b/src/sections/home/interfaces.tsx new file mode 100644 index 00000000..1efb9b41 --- /dev/null +++ b/src/sections/home/interfaces.tsx @@ -0,0 +1,130 @@ +import { + Flex, + Text, + Box, + Tag, + TagLabel, + LinkBox, + LinkOverlay, +} from '@chakra-ui/react'; +import { Logo } from 'src/components'; +import { ArrowDiagonal } from 'src/svg'; +import { links } from 'src/utils/constants'; + +export const Interfaces = () => { + return ( + + + STAKING INTERFACES + + + + + + Staking Interface V2 + + + Stake your collateral via the Synthetix staking dapp to provide + liquidity to the Synthetix ecosystem. Earn weekly inflation + incentives and fees generated from your liquidity. + + + + + + Stake on V2 + + + + + + + + + + + + COMING SOON + + + + + Staking Interface V3 + + + V3 staking is now live. Provide liquidity directly to the V3 system + with greater flexibility over which pools and markets you have + exposure to. + + + + + ); +}; diff --git a/src/sections/home/main.tsx b/src/sections/home/main.tsx deleted file mode 100644 index 5685a4f8..00000000 --- a/src/sections/home/main.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import { ArrowDownIcon } from '@chakra-ui/icons'; -import { PageTitle, Section, Subline } from 'src/styles/common'; -import SNXWave from 'src/svg/SNXWave'; -import styled from 'styled-components'; -import media from 'styled-media-query'; -import { headerHeight } from '../../components/Header'; - -const MainSection = () => { - const scrollToFeaturesSection = () => { - document.querySelector('#futures')?.scrollIntoView({ behavior: 'smooth' }); - }; - return ( - - - The derivatives liquidity protocol - - Synthetix is a new financial primitive enabling the creation of - synthetic assets, offering unique derivatives and exposure to - real-world assets on the blockchain. - - - Learn More - - - - - ); -}; - -const MainContainer = styled(Section)` - margin-top: 60px; - position: relative; - ${({ theme }) => theme.animations.show}; - opacity: 0; - animation-delay: 400ms; - height: calc(100vh - ${headerHeight}px); - min-height: 753px; - display: flex; - justify-content: space-between; - align-items: center; - overflow: hidden; - padding: 0 0 0 153px; - - ${media.lessThan('medium')` - flex-direction: column; - justify-content: flex-start; - height: auto; - padding: 0 24px; - `} -`; - -const SectionDescription = styled(Subline)` - margin-top: 18px; - max-width: 290px; -`; - -const Left = styled.div` - max-width: 397px; - height: 364px; - position: absolute; - margin-top: -84px; - - ${media.lessThan('medium')` - margin-top: 11px; - max-width: 350px; - height: 338px; - position: relative; - text-align: center; - display: flex; - flex-direction: column; - align-items: center; - `} -`; - -const Right = styled(SNXWave)` - position: absolute; - pointer-events: none; - height: 100%; - width: 150%; - - ${media.greaterThan('huge')` - right: -20px; - width: 85%; - left: auto; - `} - - ${media.lessThan('large')` - width: 1606px; - left: auto; - `} - - ${media.lessThan('medium')` - bottom: 100px; - - height: 300px; - `} -`; - -const LearnMoreButton = styled.button` - display: flex; - align-items: center; - cursor: pointer; - background-color: transparent; - margin-top: 21px; - width: 150px; - border: 0px; - padding-left: 0; - ${({ theme }) => theme.fonts.largeButton}; - color: ${({ theme }) => theme.colors.cyan}; - - :focus { - outline: 0; - } - > * { - margin-left: 8px; - } - - ${media.lessThan('medium')` - justify-content: center; - `} -`; - -export default MainSection; diff --git a/src/sections/home/partners.tsx b/src/sections/home/partners.tsx new file mode 100644 index 00000000..eda15b78 --- /dev/null +++ b/src/sections/home/partners.tsx @@ -0,0 +1,37 @@ +import { Box, Flex, Image, Text } from '@chakra-ui/react'; + +export const Partners = () => { + return ( + + + INFRASTRUCTURE PARTNERS + + + blocknative + cannon + chainlink + infura + iosiro + macro + optimism + pyth + + + ); +}; diff --git a/src/sections/home/perps.tsx b/src/sections/home/perps.tsx new file mode 100644 index 00000000..ad485cd1 --- /dev/null +++ b/src/sections/home/perps.tsx @@ -0,0 +1,60 @@ +import { Box, Button, Flex, Text } from '@chakra-ui/react'; +import { GradientText } from 'src/components'; + +export const Perps = () => { + const onClick = () => { + if (typeof window !== 'undefined') { + const ecosystem = document.getElementById('ecosystem'); + if (ecosystem) { + ecosystem.scrollIntoView({ behavior: 'smooth' }); + } + } + }; + + return ( + + + + SYNTHETIX PERPS + + + Synthetix perpetual futures are a set of + composable and decentralized smart contracts{' '} + powering an ecosystem of derivatives + projects + + + + + + ); +}; diff --git a/src/sections/home/poweredBy.tsx b/src/sections/home/poweredBy.tsx deleted file mode 100644 index 98ba64d1..00000000 --- a/src/sections/home/poweredBy.tsx +++ /dev/null @@ -1,372 +0,0 @@ -import styled from 'styled-components'; -import media from 'styled-media-query'; -import { Arrow } from '../../svg'; -import { ExternalLink, Section, SectionTitle, Subline } from '../../styles/common'; -import { useRef, useState } from 'react'; -import PoweredBySNXLogo from 'src/svg/PoweredBySNXLogo'; -import PoweredByBlur from 'src/svg/PoweredByBlur'; -import PoweredByGrid from 'src/svg/PoweredByGrid'; -import PoweredByBackground from 'src/svg/PoweredByBackground'; -import PoweredByBackgroundMobile from 'src/svg/PoweredByBackgroundMobile'; -import Image from 'next/image'; - -type PoweredByCards = { - name: string; - description: string; - link: string; - logo: string; -}; - -const poweredByCards: PoweredByCards[] = [ - { - name: 'Kwenta', - description: - 'Trade with up to 10x leverage and simulated liquidity for the best price fills. Coming soon.', - link: 'https://kwenta.eth.limo', - logo: '/kwenta.png', - }, - { - name: 'Lyra', - description: ' The first completely decentralized options protocol.', - link: 'https://www.lyra.finance/', - logo: '/lyra.png', - }, - { - name: 'Thales', - description: - 'A Parimutuel Markets protocol for trading on price action, sports, and other events.', - link: 'https://thalesmarket.io/', - logo: '/thales.png', - }, -]; - -type CustomSliderArrow = { - onClick: () => void; - disabled?: boolean; -}; - -const ArrowWrapper = styled.button` - cursor: pointer; - transition: 100ms ease-in-out; - background-color: transparent; - border: none; - - :active:enabled { - transform: scale(0.9); - } - - ${media.greaterThan('900px' as any)` - display: none; - `} - - ${media.lessThan('medium')` - display: none; - `} -`; - -function NextArrow({ onClick }: CustomSliderArrow) { - return ( - - - - ); -} - -function PrevArrow({ onClick, disabled }: CustomSliderArrow) { - return ( - - - - ); -} - -const slideMargin = 16; - -const PoweredBy = () => { - const sliderRef = useRef(null); - const [accumulatedOffset, setAccumulatedOffset] = useState(0); - - const handleScroll = (ltr: boolean) => { - const ref = sliderRef.current!; - const clientWidthWithMargin = ref.clientWidth + slideMargin; - setAccumulatedOffset((state) => { - const calculatedOffset = ltr ? clientWidthWithMargin + state : state - clientWidthWithMargin; - /* If returning to the beginning or at the end: set initial value */ - if (calculatedOffset <= 0 || calculatedOffset >= ref.scrollWidth) { - scroll(0); - return 0; - } else { - scroll(calculatedOffset); - return calculatedOffset; - } - }); - }; - - const scroll = (offset: number) => { - sliderRef.current - ? sliderRef.current.scroll({ - behavior: 'smooth', - left: offset, - }) - : console.warn('SliderRef is undefined'); - }; - - return ( - - - - - - - - Powered by Synthetix - - Learn more about the platforms built on top of the Synthetix protocol. Synthetix powers - decentralized perpetual futures, options markets, deal coordination markets, and more. - - - handleScroll(false)} - disabled={accumulatedOffset === 0} - data-test-id="slider-arrow-prev" - /> - - {poweredByCards.map((card) => { - return ( - - - - {card.name} -

{card.description}

-
-
- ); - })} -
- handleScroll(true)} data-test-id="slider-arrow-next" /> -
-
-
- ); -}; - -const PoweredByContainer = styled(Section)` - min-height: 1000px; - position: relative; - background-position: top center; - background-repeat: no-repeat; - background-size: cover; - display: flex; - flex-direction: column; - align-items: center; - background-color: ${({ theme }) => theme.colors.bgBlackHighlighted}; - padding: 70px 40px 30px; - - ${media.lessThan('1920px' as any)` - min-height: 800px; - `} - - ${media.lessThan('medium')` - background-image: url('/home/powered-by/background-tablet.svg'); - background-color: transparent; - padding: 20px 40px; - min-height: 700px; - `} - - ${media.lessThan('small')` - background-image: none; - `} -`; - -const ContentWrapper = styled.div` - padding: 70px 40px 30px; - position: absolute; - z-index: 10; - display: flex; - flex-direction: column; - align-items: center; - width: 100%; - height: auto; - - ${media.lessThan('medium')` - padding: 20px 40px;`} -`; - -const StyledPoweredByBackground = styled(PoweredByBackground)` - display: none; - position: absolute; - top: 0; - left: auto; - right: auto; - width: auto; - height: 100%; - - ${media.lessThan('large')` - display: block; - `} - - ${media.lessThan('medium')` - display: none; - `} -`; - -const StyledPoweredBySNXLogo = styled(PoweredBySNXLogo)` - position: absolute; - top: 0; - left: auto; - right: auto; - width: 100%; - height: 70%; - - ${media.lessThan('large')` - display:none - `} -`; - -const StyledPoweredByGrid = styled(PoweredByGrid)` - position: absolute; - bottom: 0; - width: 100%; - height: auto; - ${media.lessThan('large')` - display:none - `} -`; - -const StyledPoweredByBlur = styled(PoweredByBlur)` - position: absolute; - top: 0; - right: 0; - left: 0; - bottom: 0; - width: 100%; - height: auto; - ${media.lessThan('large')` - display:none - `} -`; - -const StyledBackgroundByBackgroundMobile = styled(PoweredByBackgroundMobile)` - display: none; - ${media.lessThan('small')` - display: block; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: auto; -`} -`; - -const PoweredBySectionTitle = styled(SectionTitle)` - width: 100%; - text-align: center; - margin-bottom: 12px; -`; - -const PoweredBySubline = styled(Subline)` - max-width: 700px; - text-align: center; -`; - -const SliderWrapper = styled.div` - margin-top: 105px; - display: flex; - align-self: center; - align-items: center; - justify-content: space-around; - - ${media.lessThan('medium')` - margin-top: 0px; - padding-top: 135px; - `} - - ${media.lessThan('medium')` - padding-top: 50px; - `} -`; - -const Slider = styled.div` - overflow: hidden; - display: flex; - height: 290px; - margin: 0 16px; - width: 812px; - - ${media.lessThan('900px' as any)` - width: 538px; - margin: 0 32px; - `} - - ${media.lessThan('medium')` - overflow: scroll hidden; - scroll-snap-type: x mandatory; - margin: 0 32px; - width: 380px; - `} - - ${media.lessThan('550px' as any)` - width: 100vw; -`} - - ::-webkit-scrollbar { - height: 0px; - } -`; - -const Slide = styled.div` - background-image: url('home/tile-background.png'); - @supports (backdrop-filter: blur(14px)) { - background: rgba(255, 255, 255, 0.1); - backdrop-filter: blur(14px); - background-image: none; - } - margin-right: ${slideMargin}px; - position: relative; - min-width: 260px; - height: 289px; - scroll-snap-align: start; - :last-of-type { - margin-right: 0px; - } - ${media.lessThan('medium')` - scroll-snap-align: center; - :first-of-type { - margin-left: 20px; - } - :last-of-type { - margin-right: 20px; - }`} -`; - -const Card = styled(ExternalLink)` - /* Needs to be absolute and a high z index because of the backdrop polyfill, otherwise font is milkyish */ - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 10; - display: flex; - flex-direction: column; - align-items: center; - height: 100%; - padding: 18px; - - p { - ${({ theme }) => theme.fonts.subline}; - text-align: center; - } -`; - -const CardImage = styled(Image)` - width: 100%; - height: 120px; - margin-bottom: 16px; -`; - -const CardHeadline = styled.h4` - ${({ theme }) => theme.fonts.smallHeadline}; -`; - -export default PoweredBy; diff --git a/src/sections/home/staking.tsx b/src/sections/home/staking.tsx new file mode 100644 index 00000000..3427829e --- /dev/null +++ b/src/sections/home/staking.tsx @@ -0,0 +1,87 @@ +import { Button, Flex, Link, Show, Text } from '@chakra-ui/react'; +import { StakingLooper } from 'src/svg/StakingLooper'; +import { links } from 'src/utils/constants'; + +export const Staking = () => { + return ( + + + + + + + + + + Synthetix Staking Guide + + + Learn more about the mechanics of staking with Synthetix. Staked + collateral underwrites the liquidity of the protocol and powers our + ecosystem. Stakers are rewarded for provisioning this liquidity. + + + + + + + + + + + ); +}; diff --git a/src/sections/home/stats.tsx b/src/sections/home/stats.tsx new file mode 100644 index 00000000..9bceda71 --- /dev/null +++ b/src/sections/home/stats.tsx @@ -0,0 +1,85 @@ +import { Flex, Text, Box, Link, Button } from '@chakra-ui/react'; +import millify from 'millify'; +import { ActiveStakersData, VolumeData } from 'src/typings'; +import { links } from 'src/utils/constants'; +import { numberWithCommas } from 'src/utils/formatters/number'; + +interface StatsProps { + activeStakers: ActiveStakersData; + tradingVolume: VolumeData; + totalStakedValue: number; +} + +export const Stats = ({ + activeStakers, + tradingVolume, + totalStakedValue, +}: StatsProps) => { + const uniqueStakers = numberWithCommas(activeStakers?.All_stakers.toFixed(0)); + const cumulativeTradingFeesMillified = millify( + Math.floor(tradingVolume?.cumulative_fees || 12457449), + ); + const tvlMillified = millify(totalStakedValue); + return ( + + + + + TVL + + ${tvlMillified} + + + + UNIQUE STAKERS + + {uniqueStakers} + + + + TOTAL TRADING FEES + + ${cumulativeTradingFeesMillified} + + + + + + + + + ); +}; diff --git a/src/sections/home/synths.tsx b/src/sections/home/synths.tsx deleted file mode 100644 index aa7ed61b..00000000 --- a/src/sections/home/synths.tsx +++ /dev/null @@ -1,214 +0,0 @@ -import styled from 'styled-components'; -import { Button } from '../../components'; -import media from 'styled-media-query'; -import Accordion, { - AccordionItemsType, -} from 'src/components/Accordion/Accordion'; -import { useState } from 'react'; -import { FlexDiv, Section, SectionTitle } from 'src/styles/common'; - -const SynthSection = () => { - const [activeIndex, setActiveIndex] = useState(0); - - const graphics = [ - , - , - , - , - ]; - - return ( - - - Why Synthetix - - - {graphics[activeIndex]} - - ); -}; - -const SynthContainer = styled(Section)` - min-height: 700px; - display: flex; - align-items: center; - padding: 0 0 0 153px; - - ${media.lessThan('medium')` - flex-direction: column-reverse; - justify-content: flex-end; - align-items: flex-start; - min-height: 1000px; - padding: 0 40px; - `} - - ${media.lessThan('small')` - min-height: 1050px; - `} - - ${media.lessThan('320px' as any)` - min-height: 1120px; - `} -`; - -const Left = styled.div` - max-width: 480px; - height: 364px; - margin-right: auto; -`; - -const SynthGraphicAbsolute = styled.img` - height: 444px; - position: absolute; - right: 0; - pointer-events: none; - ${props => props.theme.animations.show}; - animation-delay: 100ms; - opacity: 0; - - ${media.lessThan('1200px' as any)` - left: 480px; - `} - - ${media.lessThan('medium')` - position: static; - margin-bottom: 16px; - `} -`; - -const SynthGraphic = styled.img` - height: 500px; - pointer-events: none; - ${props => props.theme.animations.show}; - animation-delay: 100ms; - opacity: 0; - margin-right: 100px; - - ${media.lessThan('large')` - margin-right: 0; - height: 400px; - `} - - ${media.lessThan('950px' as any)` - height: 300px; - `} - - ${media.lessThan('medium')` - width: 100%; - height: 444px; - margin-bottom: 16px; - transform: none; - `} -`; - -const BuildButton = styled(Button)<{ margin?: string }>` - margin: ${({ margin }) => (margin ? margin : '29px 14px 0px 0px')}; - width: 147px; - height: 56px; - - ${media.lessThan('medium')` - width: 100%; - height: 40px; - max-width: 224px; - `}; -`; - -const FlexDivRowResponsive = styled(FlexDiv)` - ${media.lessThan('medium')` - width: 100%; - `}; -`; - -const accordionItems: AccordionItemsType[] = [ - { - title: 'Synthetix Assets', - descriptions: [ -
- Capture the price movements of popular cryptocurrencies, fiat - currencies, stocks, commodities and more with zero slippage. -
, -
, -
- Synthetic assets, or Synths, are assets voted into existence by the - community and can come in the form of fiat currencies, cryptocurrencies, - stocks, commodities and anything else with a price. -
, - ], - }, - { - title: 'Stake & Earn', - descriptions: [ -
- Staking SNX provides collateral for the debt pool and earns weekly - rewards that are a combination of protocol fees and inflationary supply. -
, - ], - buttons: [ - - - STAKE NOW - - - DOCS - - , - ], - }, - { - title: 'Trade Synth', - descriptions: [ -
- Trade any synths with low to no slippage and deep liquidity in every - asset. Available in spot and futures markets. -
, - ], - buttons: [ - - EXCHANGE SYNTHS - , - ], - }, - { - title: 'Build', - descriptions: [ -
- With improved composability, we welcome builders to leverage the - protocol and bootstrap your community through Synthetix. -
, - ], - buttons: [ - - DOCS - , - ], - }, -]; - -export default SynthSection; diff --git a/src/sections/home/total.tsx b/src/sections/home/total.tsx deleted file mode 100644 index 73221a33..00000000 --- a/src/sections/home/total.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import styled from 'styled-components'; -import numeral from 'numeral'; -import { Section, SectionTitle } from '../../styles/common'; -import { ApiStatsProps } from '../../../pages'; -import media from 'styled-media-query'; - -const currencyFormat = '$0,0'; - -const TotalSection = ({ totalStakedValue }: ApiStatsProps) => { - if (!totalStakedValue) { - // If we missing data here don't render the section - return null; - } - return ( - - - Total value staked - - {totalStakedValue - ? numeral(totalStakedValue).format(currencyFormat) - : '--'} - - - - ); -}; - -const TotalContainer = styled(Section)` - height: 285px; - padding: 0; - - ${media.lessThan('medium')` - height: 206px; - `} -`; - -const TotalStakedBar = styled.div` - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; -`; - -const StakedHeader = styled(SectionTitle)` - // This one is special in the design flow - font-size: 29px; - line-height: 39px; - margin: 0px; - ${media.lessThan('medium')` - max-width: 295px; - font-size: 20px; - text-align: center; - line-height: 24px; - `} -`; - -const StakedValue = styled.span` - font-family: GT America; - font-weight: 900; - font-size: 64px; - height: 72px; - line-height: 80px; - font-stretch: expanded; - text-align: center; - text-transform: uppercase; - background-clip: text; - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - text-fill-color: transparent; - background-image: linear-gradient( - to right, - #00d1ff 0%, - #00d1ff 15%, - #ed1eff 85%, - #ed1eff 100% - ); - - ${media.lessThan('medium')` - margin-top: 8px; - font-size: 28px; - line-height: 48px; - `} -`; - -export default TotalSection; diff --git a/src/sections/home/volume.tsx b/src/sections/home/volume.tsx new file mode 100644 index 00000000..fc54e05b --- /dev/null +++ b/src/sections/home/volume.tsx @@ -0,0 +1,91 @@ +import { Box, Button, Flex, Heading, Link, Text } from '@chakra-ui/react'; +import { VolumeData } from 'src/typings'; +import { links } from 'src/utils/constants'; +import { numberWithCommas } from 'src/utils/formatters/number'; + +interface VolumeProps { + totalStakedValue: number; + swapsVolumeTotal: number; + tradingVolume: VolumeData; +} + +export const Volume = ({ + totalStakedValue, + tradingVolume, + swapsVolumeTotal, +}: VolumeProps) => { + const tvl = `${numberWithCommas(totalStakedValue?.toFixed(0))}`; + + const cumulativeTradingVolume = `${numberWithCommas( + ( + tradingVolume?.cumulative_volume + + 5765647285 + // Note Include Perps V1 Volume https://dune.com/queries/541996/1018884 (retired product) + swapsVolumeTotal + ).toFixed(), + )}`; + + return ( + + + + + + TRADING VOLUME + + + {cumulativeTradingVolume} + + + + + TOTAL VALUE LOCKED + + + {tvl} + + + + + + + + + + + ); +}; diff --git a/src/sections/perps/callout.tsx b/src/sections/perps/callout.tsx index a727373e..8d36f137 100644 --- a/src/sections/perps/callout.tsx +++ b/src/sections/perps/callout.tsx @@ -1,5 +1,6 @@ import { Box, Flex, Text } from '@chakra-ui/react'; import { ReactNode } from 'react'; +import { GradientText } from 'src/components'; export default function Callout() { return ( @@ -31,16 +32,3 @@ export default function Callout() {
); } - -const GradientText = ({ children }: { children: ReactNode }) => { - return ( - - {children} - - ); -}; diff --git a/src/sections/perps/frontends.tsx b/src/sections/perps/frontends.tsx index 42776443..680bec19 100644 --- a/src/sections/perps/frontends.tsx +++ b/src/sections/perps/frontends.tsx @@ -1,60 +1,6 @@ -import { - Flex, - Text, - FlexProps, - Heading, - Button, - Link, - Image, - Icon, - Hide, - Show, -} from '@chakra-ui/react'; - -const FrontendCards = [ - { - logo: , - name: 'Kwenta', - description: - 'Kwenta is a decentralized derivatives trading platform offering perpetual futures and options trading on Optimism. Gain exposure to a variety of crypto and real-world assets, and advanced tooling through Kwenta Smart Margin.', - link: 'https://kwenta.eth.limo/dashboard/markets/', - }, - { - logo: , - name: 'Polynomial', - description: - 'Polynomial is a DeFi derivatives powerhouse that offers derivatives-based products built on top of Synthetix such as perps, power perps, and vaults. It is a one-stop solution built on top of Polynomial smart contract wallets.', - link: 'https://trade.polynomial.fi/', - }, - { - logo: , - name: 'Decentrex', - description: - 'Decentrex is a decentralized perpetual futures exchange and leverage aggregator. On Decentrex, users have access to deep liquidity and lightning fast trades, thanks to the powerful infrastructure provided by Synthetix and Optimism.', - link: 'https://decentrex.com/trade/ETH-USD', - }, - { - logo: , - name: 'dHedge', - description: - 'dHEDGE is a decentralized asset management protocol. It empowers users to access high-performing vaults managed by skilled asset managers. Asset managers can utilize sophisticated DeFi instruments like Kwenta perpetual futures and Lyra options to generate returns.', - link: 'https://app.dhedge.org/#', - }, - { - logo: , - name: 'Conduit', - description: - 'Conduit is a community-centric, perpetual trading platform that provides a high performing, modular user experience. It introduces novel features that are intuitive to users, with Synthetix as the backbone. Your gateway to crypto trading.', - link: 'https://alpha.conduit.lol/', - }, - { - logo: , - name: 'Lyra', - description: - 'Lyra is an option AMM that allows traders to buy and sell options on cryptocurrencies against a pool of liquidity. Lyra leverages Synthetix perpetual futures to hedge delta exposure and provide market neutral, organic yield to its liquidity providers.', - link: 'https://app.lyra.finance/#/trade/optimism/seth-susd', - }, -]; +import { Flex, Text, FlexProps, Heading, Image } from '@chakra-ui/react'; +import { IntegratorCardPerps } from 'src/components'; +import { perpsPageIntegrators } from 'src/utils/integrators'; const FrontEnds = ({ ...props }: FlexProps) => { return ( @@ -93,113 +39,22 @@ const FrontEnds = ({ ...props }: FlexProps) => { justifyContent={{ lg: 'flex-start' }} columnGap={{ lg: '16px', xl: '24px' }} > - {FrontendCards.map((card, i) => ( - + {perpsPageIntegrators.map(({ description, link, name, uri }, i) => ( + ))} ); }; -function FrontendCard({ - logo, - name, - description, - link, -}: { - logo: JSX.Element; - name: string; - description: string | string[]; - link: string; -}) { - return ( - - - - {logo} - - {name} - - - - {Array.isArray(description) ? ( - <> - {description[0]}{' '} - - perps@snxdao.io. - - - ) : ( - description - )} - - - - {logo} - - {name} - - - {description} - - - - - ); -} - export default FrontEnds; diff --git a/src/sections/perps/usp.tsx b/src/sections/perps/usp.tsx index 79252b8e..0e0ef5fc 100644 --- a/src/sections/perps/usp.tsx +++ b/src/sections/perps/usp.tsx @@ -21,8 +21,17 @@ const USPS = [ }, { label: 'Revenue Share', - description: - 'Integrators receive a share of the fees they process, based on a volume and paid in $SNX: 10% of first $1m in fees, 7.5% for $1M - $5M, and 5% for >$5M. Protocols have discretion to use these rewards as they see fit.', + description: [ + 'Integrators are rewarded for driving volume through Synthetix Perps. ', + + Learn more. + , + ], }, { label: 'Easy to Integrate', @@ -32,6 +41,7 @@ const USPS = [ href="https://docs.synthetix.io/synthetix-protocol/welcome-to-synthetix" color="cyan.500" key="link-component" + target="_blank" > docs.synthetix.io , diff --git a/src/svg/ArrowDiagonal.tsx b/src/svg/ArrowDiagonal.tsx new file mode 100644 index 00000000..222be399 --- /dev/null +++ b/src/svg/ArrowDiagonal.tsx @@ -0,0 +1,29 @@ +import { Icon, IconProps } from '@chakra-ui/react'; + +export const ArrowDiagonal = ({ + width = '14px', + height = '14px', + ...props +}: IconProps) => { + return ( + + + + + + + + + + + ); +}; diff --git a/src/svg/InterestedLooper.tsx b/src/svg/InterestedLooper.tsx new file mode 100644 index 00000000..36d61ca1 --- /dev/null +++ b/src/svg/InterestedLooper.tsx @@ -0,0 +1,1702 @@ +import { Icon, IconProps } from '@chakra-ui/react'; + +export const InterestedLooper = ({ + width = '590px', + height = '288px', + ...props +}: IconProps) => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/src/svg/SNXMainLooper.tsx b/src/svg/SNXMainLooper.tsx new file mode 100644 index 00000000..c04e8953 --- /dev/null +++ b/src/svg/SNXMainLooper.tsx @@ -0,0 +1,3168 @@ +import { Icon, IconProps } from '@chakra-ui/react'; + +export default function SNXMainLooper({ + width = '1920px', + height = '495px', + ...props +}: IconProps) { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/src/svg/SNXPerpsLooper.tsx b/src/svg/SNXPerpsLooper.tsx index b75d2269..2c7b498b 100644 --- a/src/svg/SNXPerpsLooper.tsx +++ b/src/svg/SNXPerpsLooper.tsx @@ -3170,9 +3170,9 @@ export default function SNXPerpsLooper({ ...props }: SNXPerpsLooperProps) { width="396.853" height="396.853" filterUnits="userSpaceOnUse" - color-interpolation-filters="sRGB" + colorInterpolationFilters="sRGB" > - + { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/src/svg/StakingLooper.tsx b/src/svg/StakingLooper.tsx new file mode 100644 index 00000000..ca4cbcd6 --- /dev/null +++ b/src/svg/StakingLooper.tsx @@ -0,0 +1,1620 @@ +import { Icon, IconProps } from '@chakra-ui/react'; + +export const StakingLooper = ({ + width = '387px', + height = '264px', + ...props +}: IconProps) => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/src/svg/index.tsx b/src/svg/index.tsx index 081e41e7..ca14772a 100644 --- a/src/svg/index.tsx +++ b/src/svg/index.tsx @@ -12,3 +12,4 @@ export { default as Plus } from './Plus'; export { default as LooperGroup } from './LooperGroup'; export { default as Decentrex } from './Decentrex'; export { default as SuperSynthyIcon } from './SuperSynthyIcon'; +export * from './ArrowDiagonal'; diff --git a/src/typings/index.d.ts b/src/typings/index.d.ts new file mode 100644 index 00000000..6e7eca14 --- /dev/null +++ b/src/typings/index.d.ts @@ -0,0 +1,123 @@ +export type StakedSNXResponse = { + systemStakingPercent: number; + timestamp: number; + stakedSnx: { + ethereum: number; + optimism: number; + }; +}; + +export type VolumeData = { + cumulative_fees: number; + cumulative_volume: number; + days30_fee: number; + days30_total_fee: number; + days30_vol: number; + days7_fee: number; + days7_total_fee: number; + days7_vol: number; + time: string; + total_fees: number; + total_volume: number; +}; + +export type VolumeResponse = { + result: { + rows: VolumeData[]; + }; +}; + +export type ActiveStakersData = { + All_stakers: number; + L1_stakers: number; + L2_stakers: number; + time: string; +}; + +export type ActiveStakerResponse = { + result: { + rows: ActiveStakersData[]; + }; +}; + +export type IntegratorsVolumeData = { + daily_fee: number; + day: string; + integrator_cum_fee: number; + tracking_code: string; +}; + +export type IntegratorsVolumeResponse = { + result: { + rows: IntegratorsVolumeData[]; + }; +}; + +export type OpenInterestData = { + _col2: string; + day: string; + size: number; + size_usd: number; +}; + +export type OpenInterestResponse = { + result: { + rows: OpenInterestData[]; + }; +}; + +export type TradingFeesData = { + _30_day_L1: number; + _30_day_L2: number; + _30_day_combined: number; + _30_day_cumulative: number; + _7_day_L1: number; + _7_day_L2: number; + _7_day_combined: number; + _7_day_cumulative: number; + combined: number; + day: string; + l1fee: number; + l2fee: number; +}; + +export type TradingFeesResponse = { + result: { + rows: TradingFeesData[]; + }; +}; + +export type SwapsData = { + dest: string; + dest_amount: number; + dest_avg: number; + median_dest: number; + median_source: number; + ninenine_dest: number; + ninenine_source: number; + one_percentile_dest: number; + one_percentile_source: number; + source: string; + source_amount: number; + source_avg: number; + swaps: number; +}; + +export type SwapsResponse = { + result: { + rows: SwapsData[]; + }; +}; + +export type GraphqlResponse = { + data: { + futuresMarkets: { + id: string; + isActive: boolean; + marketKey: string; + }[]; + dailyStats: { + cumulativeTraders: number; + }[]; + }; +}; diff --git a/src/utils/constants/index.ts b/src/utils/constants/index.ts new file mode 100644 index 00000000..1bed3ad4 --- /dev/null +++ b/src/utils/constants/index.ts @@ -0,0 +1,8 @@ +export const links = { + duneLink: 'https://dune.com/synthquest/synthetix-perps-v2', + stakingV2: 'https://staking.synthetix.io/', + stakingV3: 'https://v3.synthetix.io/', + stakingGuide: 'https://docs.synthetix.io/staking/staking-guide', + v3IntegrationGuide: 'https://docs.synthetix.io/v/v3/', + governanceApp: 'https://governance.synthetix.io/', +}; diff --git a/src/utils/formatters/number.ts b/src/utils/formatters/number.ts index aea996c6..7998d70b 100644 --- a/src/utils/formatters/number.ts +++ b/src/utils/formatters/number.ts @@ -28,7 +28,10 @@ export type FormatCurrencyOptions = { export const toBigNumber = (value: NumericValue) => new BigNumber(value); // TODO: implement max decimals -export const formatNumber = (value: NumericValue, options?: FormatNumberOptions) => { +export const formatNumber = ( + value: NumericValue, + options?: FormatNumberOptions, +) => { const prefix = options?.prefix; const suffix = options?.suffix; @@ -37,7 +40,11 @@ export const formatNumber = (value: NumericValue, options?: FormatNumberOptions) formattedValue.push(prefix); } - formattedValue.push(toBigNumber(value).toFormat(options?.minDecimals ?? DEFAULT_NUMBER_DECIMALS)); + formattedValue.push( + toBigNumber(value).toFormat( + options?.minDecimals ?? DEFAULT_NUMBER_DECIMALS, + ), + ); if (suffix) { formattedValue.push(` ${suffix}`); } @@ -45,7 +52,10 @@ export const formatNumber = (value: NumericValue, options?: FormatNumberOptions) return formattedValue.join(''); }; -export const formatFiatCurrency = (value: NumericValue, options?: FormatCurrencyOptions) => +export const formatFiatCurrency = ( + value: NumericValue, + options?: FormatCurrencyOptions, +) => formatNumber(value, { prefix: options?.sign, suffix: options?.currencyKey, @@ -53,8 +63,20 @@ export const formatFiatCurrency = (value: NumericValue, options?: FormatCurrency maxDecimals: options?.maxDecimals, }); -export const formatPercent = (value: NumericValue, options?: { minDecimals: number }) => { +export const formatPercent = ( + value: NumericValue, + options?: { minDecimals: number }, +) => { const decimals = options?.minDecimals ?? 2; return `${toBigNumber(value).multipliedBy(100).toFixed(decimals)}%`; }; + +export function numberWithCommas(value: string, decimals?: number) { + const parts = value.split('.'); + parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ','); + const joinedParts = parts.join('.'); + return decimals + ? joinedParts.substring(0, joinedParts.indexOf('.') + decimals) + : joinedParts; +} diff --git a/src/utils/integrators.tsx b/src/utils/integrators.tsx new file mode 100644 index 00000000..e562d8d1 --- /dev/null +++ b/src/utils/integrators.tsx @@ -0,0 +1,93 @@ +interface integratorItem { + uri: string; + name: string; + description: string; + link: string; + tag: + | 'PERPS' + | 'ASST MGMT' + | 'OPTIONS' + | 'PARIMUTUEL' + | 'SPOT' + | 'AMM' + | 'ORACLE'; +} + +export const integrators: integratorItem[] = [ + { + uri: '/kwenta.svg', + name: 'Kwenta', + description: + 'Trade crypto, forex, and commodities with up to 50x leverage and deep liquidity.', + link: 'https://kwenta.eth.limo/dashboard/markets/', + tag: 'PERPS', + }, + { + uri: '/polynomial.svg', + name: 'Polynomial', + description: + "Trade perps with Polynomial's smart wallet to access up to 50x leverage.", + link: 'https://trade.polynomial.fi/', + tag: 'PERPS', + }, + { + uri: '/dhedge.svg', + name: 'dHedge', + description: + 'Use your sUSD to find permissionless investment managers and automated strategies.', + link: 'https://app.dhedge.org/#', + tag: 'ASST MGMT', + }, + { + uri: '/lyra.svg', + name: 'Lyra', + description: + 'Lyra is the leading decentralized options protocol and uses Synthetix to delta hedge their AMM.', + link: 'https://app.lyra.finance/#/trade/optimism/seth-susd', + tag: 'OPTIONS', + }, + { + uri: '/thales.svg', + name: 'Thales', + description: + 'Use your sUSD to take positions on parimutuel crypto markets.', + link: 'https://thalesmarket.io/', + tag: 'PARIMUTUEL', + }, + { + uri: '/curve.svg', + name: 'Curve', + description: + 'Deposit synths into Curve pools to provide liquidity to the ecosystem and earn yield.', + link: 'https://curve.fi/', + tag: 'SPOT', + }, + { + uri: '/toros.svg', + name: 'Toros', + description: + 'Toros enables a suite of one-click financial tools that simplify complex strategies.', + link: 'https://toros.finance/', + tag: 'ASST MGMT', + }, + { + uri: '/overtime.svg', + name: 'Overtime Markets', + description: + "Use your sUSD to take positions on sporting events with Overtime's sports AMM.", + link: 'https://overtimemarkets.xyz/', + tag: 'AMM', + }, +]; + +const perpsIntegrators = [ + 'Kwenta', + 'Polynomial', + 'Decentrex', + 'dHedge', + 'Lyra', +]; + +export const perpsPageIntegrators = integrators.filter(integrator => + perpsIntegrators.includes(integrator.name), +); diff --git a/src/utils/svgTemplate.ts b/src/utils/svgTemplate.ts index 67fa9839..c757df60 100644 --- a/src/utils/svgTemplate.ts +++ b/src/utils/svgTemplate.ts @@ -6,9 +6,12 @@ * @see https://www.smooth-code.com/open-source/svgr/docs/typescript/ * @see https://github.com/smooth-code/svgr */ -/* @ts-ignore */ -// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -function template({ template }, opts, { imports, componentName, props, jsx, exports }) { + +export function template( + { template }: any, + _opts: any, + { componentName, jsx }: any, +) { const typeScriptTpl = template.smart({ plugins: ['typescript'] }); return typeScriptTpl.ast` @@ -27,5 +30,3 @@ type Props = { export default ${componentName}; `; } - -module.exports = template; diff --git a/tests/e2e/specs/landing-page.spec.js b/tests/e2e/specs/landing-page.spec.js index e72c6726..60f474de 100644 --- a/tests/e2e/specs/landing-page.spec.js +++ b/tests/e2e/specs/landing-page.spec.js @@ -1,34 +1,6 @@ describe('Landing Page', () => { it('Learn more button should scroll the view to the futures section', () => { cy.visit('http://localhost:3000/'); - cy.get('button[data-test-id="learn-more-btn"]').click(); - cy.get('section[id="futures"]').should('be.visible'); - }); - - it('should hide slider arrows if viewport width is smaller than 750px', () => { - cy.visit('http://localhost:3000/'); - cy.viewport(750, 750); - cy.get('button[data-test-id="slider-arrow-next"]').should('not.exist'); - cy.get('button[data-test-id="slider-arrow-prev"]').should('not.exist'); - }); - - it('should set the attribute of the slider to "x mandatory" when viewport width is below 500px', () => { - cy.visit('http://localhost:3000/'); - cy.viewport(500, 500); - cy.get('div[data-test-id="powered-by-slider"]').should( - 'have.css', - 'scroll-snap-type', - 'x mandatory' - ); - }); - - it('should set the attribute of the slide to "x mandatory" when viewport width is below 500px', () => { - cy.visit('http://localhost:3000/'); - cy.viewport(500, 500); - cy.get('div[data-test-id="powered-by-slide"]').should( - 'have.css', - 'scroll-snap-align', - 'center' - ); + cy.get('#hero').should('be.visible'); }); }); diff --git a/tsconfig.json b/tsconfig.json index 1143b92a..0f4ddb9d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,10 +14,23 @@ "skipLibCheck": true, "sourceMap": true, "strict": true, - "target": "es6", + "target": "ES2020", "baseUrl": ".", "incremental": true }, - "exclude": [".github", ".next", "_site", "coverage", "cypress", "node_modules", "public"], - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "./node_modules/@sanity/base/types/**/*.ts"] + "exclude": [ + ".github", + ".next", + "_site", + "coverage", + "cypress", + "node_modules", + "public" + ], + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + "./node_modules/@sanity/base/types/**/*.ts" + ] } diff --git a/yarn.lock b/yarn.lock index 4cc86891..82f95c82 100644 --- a/yarn.lock +++ b/yarn.lock @@ -721,6 +721,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.20.7": + version: 7.22.5 + resolution: "@babel/runtime@npm:7.22.5" + dependencies: + regenerator-runtime: ^0.13.11 + checksum: 12a50b7de2531beef38840d17af50c55a094253697600cee255311222390c68eed704829308d4fd305e1b3dfbce113272e428e9d9d45b1730e0fede997eaceb1 + languageName: node + linkType: hard + "@babel/template@npm:^7.18.10, @babel/template@npm:^7.18.6, @babel/template@npm:^7.3.3": version: 7.18.10 resolution: "@babel/template@npm:7.18.10" @@ -3746,100 +3755,81 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:12.2.5": - version: 12.2.5 - resolution: "@next/env@npm:12.2.5" - checksum: a44939e59b46d5951831529a43dba9daa2e4e467e8680ea96e21ae127d1bf7f11757aaf3a6cff8a51273abfe7af782903e1304405a481361c7ba3e66d47e3238 +"@next/env@npm:13.4.8": + version: 13.4.8 + resolution: "@next/env@npm:13.4.8" + checksum: 24e8966c9963879e7f9bab09248bebb89d8615b740dad286e0eb5f92909dddfc30e80ef9df29da757dbf50dcdf483037e65521fc9ea68582fb78d752273d4ba6 languageName: node linkType: hard -"@next/swc-android-arm-eabi@npm:12.2.5": - version: 12.2.5 - resolution: "@next/swc-android-arm-eabi@npm:12.2.5" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@next/swc-android-arm64@npm:12.2.5": - version: 12.2.5 - resolution: "@next/swc-android-arm64@npm:12.2.5" - conditions: os=android & cpu=arm64 +"@next/eslint-plugin-next@npm:13.4.7": + version: 13.4.7 + resolution: "@next/eslint-plugin-next@npm:13.4.7" + dependencies: + glob: 7.1.7 + checksum: 7c9d6d3a44355dfda06982057a309502284add7d9e7a375782e24551f8faab726b7d4d260a053182f536f0928bf5b9c26b81267c437dc3e716a7acd70fd5b1a3 languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:12.2.5": - version: 12.2.5 - resolution: "@next/swc-darwin-arm64@npm:12.2.5" +"@next/swc-darwin-arm64@npm:13.4.8": + version: 13.4.8 + resolution: "@next/swc-darwin-arm64@npm:13.4.8" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:12.2.5": - version: 12.2.5 - resolution: "@next/swc-darwin-x64@npm:12.2.5" +"@next/swc-darwin-x64@npm:13.4.8": + version: 13.4.8 + resolution: "@next/swc-darwin-x64@npm:13.4.8" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-freebsd-x64@npm:12.2.5": - version: 12.2.5 - resolution: "@next/swc-freebsd-x64@npm:12.2.5" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@next/swc-linux-arm-gnueabihf@npm:12.2.5": - version: 12.2.5 - resolution: "@next/swc-linux-arm-gnueabihf@npm:12.2.5" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@next/swc-linux-arm64-gnu@npm:12.2.5": - version: 12.2.5 - resolution: "@next/swc-linux-arm64-gnu@npm:12.2.5" +"@next/swc-linux-arm64-gnu@npm:13.4.8": + version: 13.4.8 + resolution: "@next/swc-linux-arm64-gnu@npm:13.4.8" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:12.2.5": - version: 12.2.5 - resolution: "@next/swc-linux-arm64-musl@npm:12.2.5" +"@next/swc-linux-arm64-musl@npm:13.4.8": + version: 13.4.8 + resolution: "@next/swc-linux-arm64-musl@npm:13.4.8" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:12.2.5": - version: 12.2.5 - resolution: "@next/swc-linux-x64-gnu@npm:12.2.5" +"@next/swc-linux-x64-gnu@npm:13.4.8": + version: 13.4.8 + resolution: "@next/swc-linux-x64-gnu@npm:13.4.8" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:12.2.5": - version: 12.2.5 - resolution: "@next/swc-linux-x64-musl@npm:12.2.5" +"@next/swc-linux-x64-musl@npm:13.4.8": + version: 13.4.8 + resolution: "@next/swc-linux-x64-musl@npm:13.4.8" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:12.2.5": - version: 12.2.5 - resolution: "@next/swc-win32-arm64-msvc@npm:12.2.5" +"@next/swc-win32-arm64-msvc@npm:13.4.8": + version: 13.4.8 + resolution: "@next/swc-win32-arm64-msvc@npm:13.4.8" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-ia32-msvc@npm:12.2.5": - version: 12.2.5 - resolution: "@next/swc-win32-ia32-msvc@npm:12.2.5" +"@next/swc-win32-ia32-msvc@npm:13.4.8": + version: 13.4.8 + resolution: "@next/swc-win32-ia32-msvc@npm:13.4.8" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:12.2.5": - version: 12.2.5 - resolution: "@next/swc-win32-x64-msvc@npm:12.2.5" +"@next/swc-win32-x64-msvc@npm:13.4.8": + version: 13.4.8 + resolution: "@next/swc-win32-x64-msvc@npm:13.4.8" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3911,6 +3901,20 @@ __metadata: languageName: node linkType: hard +"@pkgr/utils@npm:^2.3.1": + version: 2.4.1 + resolution: "@pkgr/utils@npm:2.4.1" + dependencies: + cross-spawn: ^7.0.3 + fast-glob: ^3.2.12 + is-glob: ^4.0.3 + open: ^9.1.0 + picocolors: ^1.0.0 + tslib: ^2.5.0 + checksum: 654682860272541a40485b01e0763b155ec31faeba85b2c51e38b59c4ff1f8918c37b87b5ecbda3ff482d8486eba086e92b991fe4a8ed62efbbbdf83c0f64409 + languageName: node + linkType: hard + "@playwright/test@npm:^1.27.1": version: 1.27.1 resolution: "@playwright/test@npm:1.27.1" @@ -3998,6 +4002,13 @@ __metadata: languageName: node linkType: hard +"@rushstack/eslint-patch@npm:^1.1.3": + version: 1.3.2 + resolution: "@rushstack/eslint-patch@npm:1.3.2" + checksum: 010c87ef2d901faaaf70ea1bf86fd3e7b74f24e23205f836e9a32790bca2076afe5de58ded03c35cb482f83691c8d22b1a0c34291b075bfe81afd26cfa5d14cc + languageName: node + linkType: hard + "@sanity/color@npm:^2.1.6": version: 2.1.14 resolution: "@sanity/color@npm:2.1.14" @@ -4252,12 +4263,12 @@ __metadata: languageName: node linkType: hard -"@swc/helpers@npm:0.4.3": - version: 0.4.3 - resolution: "@swc/helpers@npm:0.4.3" +"@swc/helpers@npm:0.5.1": + version: 0.5.1 + resolution: "@swc/helpers@npm:0.5.1" dependencies: tslib: ^2.4.0 - checksum: 5c2f173e950dd3929d84ae48b3586a274d5a874e7cf2013b3d8081e4f8c723fa3a4d4e63b263e84bb7f06431f87b640e91a12655410463c81a3dc2bbc15eceda + checksum: 71e0e27234590435e4c62b97ef5e796f88e786841a38c7116a5e27a3eafa7b9ead7cdec5249b32165902076de78446945311c973e59bddf77c1e24f33a8f272a languageName: node linkType: hard @@ -4344,18 +4355,18 @@ __metadata: languageName: node linkType: hard -"@synthetixio/v3-theme@npm:1.1.0": - version: 1.1.0 - resolution: "@synthetixio/v3-theme@npm:1.1.0" +"@synthetixio/v3-theme@npm:^3.1.1": + version: 3.1.1 + resolution: "@synthetixio/v3-theme@npm:3.1.1" peerDependencies: - "@chakra-ui/icons": ^2.0.9 - "@chakra-ui/react": ^2.2.8 - "@emotion/react": ^11.10.0 - "@emotion/styled": ^11.10.0 - framer-motion: ^7.0.0 + "@chakra-ui/icons": ^2.0.19 + "@chakra-ui/react": ^2.6.1 + "@emotion/react": ^11.11.0 + "@emotion/styled": ^11.11.0 + framer-motion: ^10.12.16 react: ^18.2.0 react-dom: ^18.2.0 - checksum: 1032ac2c75dcd72dda8a0649c13cc68ab349ea5757cd574e89a47e93a9ca31629a3efaac9ffab0fd2a56fff7ae3ea6f4f90258033491c79a986539d8413a1a37 + checksum: 724e34fc3bfd523cc8c0bfc802f8f2d0b89a27e97d8575de54c12c613fd885a175803055863d5cda9e19fd79cbbf5912e11abf9cb95711eb80f55967cf29f69b languageName: node linkType: hard @@ -5290,6 +5301,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:^5.42.0": + version: 5.60.0 + resolution: "@typescript-eslint/parser@npm:5.60.0" + dependencies: + "@typescript-eslint/scope-manager": 5.60.0 + "@typescript-eslint/types": 5.60.0 + "@typescript-eslint/typescript-estree": 5.60.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 94e7931a5b356b16638b281b8e1d661f8b1660f0c75a323537f68b311dae91b7a575a0a019d4ea05a79cc5d42b5cb41cc367205691cdfd292ef96a3b66b1e58b + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:5.36.1": version: 5.36.1 resolution: "@typescript-eslint/scope-manager@npm:5.36.1" @@ -5300,6 +5328,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:5.60.0": + version: 5.60.0 + resolution: "@typescript-eslint/scope-manager@npm:5.60.0" + dependencies: + "@typescript-eslint/types": 5.60.0 + "@typescript-eslint/visitor-keys": 5.60.0 + checksum: b21ee1ef57be948a806aa31fd65a9186766b3e1a727030dc47025edcadc54bd1aa6133a439acd5f44a93e2b983dd55bc5571bb01cb834461dab733682d66256a + languageName: node + linkType: hard + "@typescript-eslint/types@npm:5.36.1": version: 5.36.1 resolution: "@typescript-eslint/types@npm:5.36.1" @@ -5307,6 +5345,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.60.0": + version: 5.60.0 + resolution: "@typescript-eslint/types@npm:5.60.0" + checksum: 48f29e5c084c5663cfed1a6c4458799a6690a213e7861a24501f9b96698ae59e89a1df1c77e481777e4da78f1b0a5573a549f7b8880e3f4071a7a8b686254db8 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.36.1": version: 5.36.1 resolution: "@typescript-eslint/typescript-estree@npm:5.36.1" @@ -5325,6 +5370,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:5.60.0": + version: 5.60.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.60.0" + dependencies: + "@typescript-eslint/types": 5.60.0 + "@typescript-eslint/visitor-keys": 5.60.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 0f4f342730ead42ba60b5fca4bf1950abebd83030010c38b5df98ff9fd95d0ce1cfc3974a44c90c65f381f4f172adcf1a540e018d7968cc845d937bf6c734dae + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:5.36.1, @typescript-eslint/utils@npm:^5.13.0": version: 5.36.1 resolution: "@typescript-eslint/utils@npm:5.36.1" @@ -5351,6 +5414,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.60.0": + version: 5.60.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.60.0" + dependencies: + "@typescript-eslint/types": 5.60.0 + eslint-visitor-keys: ^3.3.0 + checksum: d39b2485d030f9755820d0f6f3748a8ec44e1ca23cb36ddcba67a9eb1f258c8ec83c61fc015c50e8f4a00d05df62d719dbda445625e3e71a64a659f1d248157e + languageName: node + linkType: hard + "@vercel/node-bridge@npm:2.2.2": version: 2.2.2 resolution: "@vercel/node-bridge@npm:2.2.2" @@ -6078,6 +6151,25 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:^5.1.3": + version: 5.3.0 + resolution: "aria-query@npm:5.3.0" + dependencies: + dequal: ^2.0.3 + checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9 + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "array-buffer-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + is-array-buffer: ^3.0.1 + checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 + languageName: node + linkType: hard + "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" @@ -6105,6 +6197,19 @@ __metadata: languageName: node linkType: hard +"array-includes@npm:^3.1.5, array-includes@npm:^3.1.6": + version: 3.1.6 + resolution: "array-includes@npm:3.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 + is-string: ^1.0.7 + checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 + languageName: node + linkType: hard + "array-union@npm:^1.0.1": version: 1.0.2 resolution: "array-union@npm:1.0.2" @@ -6140,6 +6245,18 @@ __metadata: languageName: node linkType: hard +"array.prototype.flatmap@npm:^1.3.1": + version: 1.3.1 + resolution: "array.prototype.flatmap@npm:1.3.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-shim-unscopables: ^1.0.0 + checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987 + languageName: node + linkType: hard + "array.prototype.reduce@npm:^1.0.4": version: 1.0.4 resolution: "array.prototype.reduce@npm:1.0.4" @@ -6153,6 +6270,19 @@ __metadata: languageName: node linkType: hard +"array.prototype.tosorted@npm:^1.1.1": + version: 1.1.1 + resolution: "array.prototype.tosorted@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-shim-unscopables: ^1.0.0 + get-intrinsic: ^1.1.3 + checksum: 7923324a67e70a2fc0a6e40237405d92395e45ebd76f5cb89c2a5cf1e66b47aca6baacd0cd628ffd88830b90d47fff268071493d09c9ae123645613dac2c2ca3 + languageName: node + linkType: hard + "asn1.js@npm:^5.2.0": version: 5.4.1 resolution: "asn1.js@npm:5.4.1" @@ -6188,6 +6318,13 @@ __metadata: languageName: node linkType: hard +"ast-types-flow@npm:^0.0.7": + version: 0.0.7 + resolution: "ast-types-flow@npm:0.0.7" + checksum: a26dcc2182ffee111cad7c471759b0bda22d3b7ebacf27c348b22c55f16896b18ab0a4d03b85b4020dce7f3e634b8f00b593888f622915096ea1927fa51866c4 + languageName: node + linkType: hard + "astral-regex@npm:^2.0.0": version: 2.0.0 resolution: "astral-regex@npm:2.0.0" @@ -6278,6 +6415,13 @@ __metadata: languageName: node linkType: hard +"axe-core@npm:^4.6.2": + version: 4.7.2 + resolution: "axe-core@npm:4.7.2" + checksum: 5d86fa0f45213b0e54cbb5d713ce885c4a8fe3a72b92dd915a47aa396d6fd149c4a87fec53aa978511f6d941402256cfeb26f2db35129e370f25a453c688655a + languageName: node + linkType: hard + "axios@npm:0.23.0": version: 0.23.0 resolution: "axios@npm:0.23.0" @@ -6336,6 +6480,15 @@ __metadata: languageName: node linkType: hard +"axobject-query@npm:^3.1.1": + version: 3.2.1 + resolution: "axobject-query@npm:3.2.1" + dependencies: + dequal: ^2.0.3 + checksum: a94047e702b57c91680e6a952ec4a1aaa2cfd0d80ead76bc8c954202980d8c51968a6ea18b4d8010e8e2cf95676533d8022a8ebba9abc1dfe25686721df26fd2 + languageName: node + linkType: hard + "babel-code-frame@npm:^6.26.0": version: 6.26.0 resolution: "babel-code-frame@npm:6.26.0" @@ -7214,6 +7367,13 @@ __metadata: languageName: node linkType: hard +"big-integer@npm:^1.6.44": + version: 1.6.51 + resolution: "big-integer@npm:1.6.51" + checksum: 3d444173d1b2e20747e2c175568bedeebd8315b0637ea95d75fd27830d3b8e8ba36c6af40374f36bdaea7b5de376dcada1b07587cb2a79a928fccdb6e6e3c518 + languageName: node + linkType: hard + "big.js@npm:^5.2.2": version: 5.2.2 resolution: "big.js@npm:5.2.2" @@ -7402,6 +7562,15 @@ __metadata: languageName: node linkType: hard +"bplist-parser@npm:^0.2.0": + version: 0.2.0 + resolution: "bplist-parser@npm:0.2.0" + dependencies: + big-integer: ^1.6.44 + checksum: d5339dd16afc51de6c88f88f58a45b72ed6a06aa31f5557d09877575f220b7c1d3fbe375da0b62e6a10d4b8ed80523567e351f24014f5bc886ad523758142cdd + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -7675,6 +7844,24 @@ __metadata: languageName: node linkType: hard +"bundle-name@npm:^3.0.0": + version: 3.0.0 + resolution: "bundle-name@npm:3.0.0" + dependencies: + run-applescript: ^5.0.0 + checksum: edf2b1fbe6096ed32e7566947ace2ea937ee427391744d7510a2880c4b9a5b3543d3f6c551236a29e5c87d3195f8e2912516290e638c15bcbede7b37cc375615 + languageName: node + linkType: hard + +"busboy@npm:1.6.0": + version: 1.6.0 + resolution: "busboy@npm:1.6.0" + dependencies: + streamsearch: ^1.1.0 + checksum: 32801e2c0164e12106bf236291a00795c3c4e4b709ae02132883fe8478ba2ae23743b11c5735a0aae8afe65ac4b6ca4568b91f0d9fed1fdbc32ede824a73746e + languageName: node + linkType: hard + "bytes32@npm:^0.0.3": version: 0.0.3 resolution: "bytes32@npm:0.0.3" @@ -7852,13 +8039,20 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30000844, caniuse-lite@npm:^1.0.30001332, caniuse-lite@npm:^1.0.30001370": +"caniuse-lite@npm:^1.0.30000844, caniuse-lite@npm:^1.0.30001370": version: 1.0.30001390 resolution: "caniuse-lite@npm:1.0.30001390" checksum: 5ba4ae64e27c61e1c7d7125223159d6cf7fa3cdbf8f00b9ec83a06f274ff45ddcbfebe509716fa31ae2664b70ef9e1d1c4a5b9430e717852992358121d9ee9be languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001406": + version: 1.0.30001508 + resolution: "caniuse-lite@npm:1.0.30001508" + checksum: 0a083ed92194d87e608fc35cac65830a27900249729eb8a68e270f866f2c4f83396c2e54eb47b0ef71360682174dd74e2e68eac0b8d407d125611c7bc12488eb + languageName: node + linkType: hard + "caseless@npm:~0.12.0": version: 0.12.0 resolution: "caseless@npm:0.12.0" @@ -8251,6 +8445,13 @@ __metadata: languageName: node linkType: hard +"client-only@npm:0.0.1": + version: 0.0.1 + resolution: "client-only@npm:0.0.1" + checksum: 0c16bf660dadb90610553c1d8946a7fdfb81d624adea073b8440b7d795d5b5b08beb3c950c6a2cf16279365a3265158a236876d92bce16423c485c322d7dfaf8 + languageName: node + linkType: hard + "clipboardy@npm:3.0.0": version: 3.0.0 resolution: "clipboardy@npm:3.0.0" @@ -8306,6 +8507,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + "clone-deep@npm:^4.0.1": version: 4.0.1 resolution: "clone-deep@npm:4.0.1" @@ -9155,6 +9367,13 @@ __metadata: languageName: node linkType: hard +"damerau-levenshtein@npm:^1.0.8": + version: 1.0.8 + resolution: "damerau-levenshtein@npm:1.0.8" + checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de + languageName: node + linkType: hard + "dashdash@npm:^1.12.0": version: 1.14.1 resolution: "dashdash@npm:1.14.1" @@ -9391,6 +9610,28 @@ __metadata: languageName: node linkType: hard +"default-browser-id@npm:^3.0.0": + version: 3.0.0 + resolution: "default-browser-id@npm:3.0.0" + dependencies: + bplist-parser: ^0.2.0 + untildify: ^4.0.0 + checksum: 279c7ad492542e5556336b6c254a4eaf31b2c63a5433265655ae6e47301197b6cfb15c595a6fdc6463b2ff8e1a1a1ed3cba56038a60e1527ba4ab1628c6b9941 + languageName: node + linkType: hard + +"default-browser@npm:^4.0.0": + version: 4.0.0 + resolution: "default-browser@npm:4.0.0" + dependencies: + bundle-name: ^3.0.0 + default-browser-id: ^3.0.0 + execa: ^7.1.1 + titleize: ^3.0.0 + checksum: 40c5af984799042b140300be5639c9742599bda76dc9eba5ac9ad5943c83dd36cebc4471eafcfddf8e0ec817166d5ba89d56f08e66a126c7c7908a179cead1a7 + languageName: node + linkType: hard + "default-gateway@npm:^6.0.3": version: 6.0.3 resolution: "default-gateway@npm:6.0.3" @@ -9432,6 +9673,13 @@ __metadata: languageName: node linkType: hard +"define-lazy-prop@npm:^3.0.0": + version: 3.0.0 + resolution: "define-lazy-prop@npm:3.0.0" + checksum: 54884f94caac0791bf6395a3ec530ce901cf71c47b0196b8754f3fd17edb6c0e80149c1214429d851873bb0d689dbe08dcedbb2306dc45c8534a5934723851b6 + languageName: node + linkType: hard + "define-properties@npm:^1.1.2, define-properties@npm:^1.1.3, define-properties@npm:^1.1.4": version: 1.1.4 resolution: "define-properties@npm:1.1.4" @@ -9477,6 +9725,13 @@ __metadata: languageName: node linkType: hard +"dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 + languageName: node + linkType: hard + "des.js@npm:^1.0.0": version: 1.0.1 resolution: "des.js@npm:1.0.1" @@ -9984,6 +10239,16 @@ __metadata: languageName: node linkType: hard +"enhanced-resolve@npm:^5.12.0": + version: 5.15.0 + resolution: "enhanced-resolve@npm:5.15.0" + dependencies: + graceful-fs: ^4.2.4 + tapable: ^2.2.0 + checksum: fbd8cdc9263be71cc737aa8a7d6c57b43d6aa38f6cc75dde6fcd3598a130cc465f979d2f4d01bb3bf475acb43817749c79f8eef9be048683602ca91ab52e4f11 + languageName: node + linkType: hard + "enquirer@npm:^2.3.5, enquirer@npm:^2.3.6": version: 2.3.6 resolution: "enquirer@npm:2.3.6" @@ -10072,6 +10337,48 @@ __metadata: languageName: node linkType: hard +"es-abstract@npm:^1.20.4": + version: 1.21.2 + resolution: "es-abstract@npm:1.21.2" + dependencies: + array-buffer-byte-length: ^1.0.0 + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + es-set-tostringtag: ^2.0.1 + es-to-primitive: ^1.2.1 + function.prototype.name: ^1.1.5 + get-intrinsic: ^1.2.0 + get-symbol-description: ^1.0.0 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has: ^1.0.3 + has-property-descriptors: ^1.0.0 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.5 + is-array-buffer: ^3.0.2 + is-callable: ^1.2.7 + is-negative-zero: ^2.0.2 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + is-string: ^1.0.7 + is-typed-array: ^1.1.10 + is-weakref: ^1.0.2 + object-inspect: ^1.12.3 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.4.3 + safe-regex-test: ^1.0.0 + string.prototype.trim: ^1.2.7 + string.prototype.trimend: ^1.0.6 + string.prototype.trimstart: ^1.0.6 + typed-array-length: ^1.0.4 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.9 + checksum: 037f55ee5e1cdf2e5edbab5524095a4f97144d95b94ea29e3611b77d852fd8c8a40e7ae7101fa6a759a9b9b1405f188c3c70928f2d3cd88d543a07fc0d5ad41a + languageName: node + linkType: hard + "es-array-method-boxes-properly@npm:^1.0.0": version: 1.0.0 resolution: "es-array-method-boxes-properly@npm:1.0.0" @@ -10079,6 +10386,17 @@ __metadata: languageName: node linkType: hard +"es-set-tostringtag@npm:^2.0.1": + version: 2.0.1 + resolution: "es-set-tostringtag@npm:2.0.1" + dependencies: + get-intrinsic: ^1.1.3 + has: ^1.0.3 + has-tostringtag: ^1.0.0 + checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 + languageName: node + linkType: hard + "es-shim-unscopables@npm:^1.0.0": version: 1.0.0 resolution: "es-shim-unscopables@npm:1.0.0" @@ -10211,6 +10529,29 @@ __metadata: languageName: node linkType: hard +"eslint-config-next@npm:latest": + version: 13.4.7 + resolution: "eslint-config-next@npm:13.4.7" + dependencies: + "@next/eslint-plugin-next": 13.4.7 + "@rushstack/eslint-patch": ^1.1.3 + "@typescript-eslint/parser": ^5.42.0 + eslint-import-resolver-node: ^0.3.6 + eslint-import-resolver-typescript: ^3.5.2 + eslint-plugin-import: ^2.26.0 + eslint-plugin-jsx-a11y: ^6.5.1 + eslint-plugin-react: ^7.31.7 + eslint-plugin-react-hooks: ^4.5.0 + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: ">=3.3.1" + peerDependenciesMeta: + typescript: + optional: true + checksum: fb86da6aaab337c87c202c5a35828f57adeaa9cf33ccd3530c20f196c4b103cc35e76318fab111b24b62a3c089214c8ed1df783e1c128152a88cd60130e050fc + languageName: node + linkType: hard + "eslint-config-prettier@npm:^8.5.0": version: 8.5.0 resolution: "eslint-config-prettier@npm:8.5.0" @@ -10222,6 +10563,17 @@ __metadata: languageName: node linkType: hard +"eslint-config-prettier@npm:^8.8.0": + version: 8.8.0 + resolution: "eslint-config-prettier@npm:8.8.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 1e94c3882c4d5e41e1dcfa2c368dbccbfe3134f6ac7d40101644d3bfbe3eb2f2ffac757f3145910b5eacf20c0e85e02b91293d3126d770cbf3dc390b3564681c + languageName: node + linkType: hard + "eslint-config-standard@npm:^17.0.0": version: 17.0.0 resolution: "eslint-config-standard@npm:17.0.0" @@ -10244,6 +10596,25 @@ __metadata: languageName: node linkType: hard +"eslint-import-resolver-typescript@npm:^3.5.2": + version: 3.5.5 + resolution: "eslint-import-resolver-typescript@npm:3.5.5" + dependencies: + debug: ^4.3.4 + enhanced-resolve: ^5.12.0 + eslint-module-utils: ^2.7.4 + get-tsconfig: ^4.5.0 + globby: ^13.1.3 + is-core-module: ^2.11.0 + is-glob: ^4.0.3 + synckit: ^0.8.5 + peerDependencies: + eslint: "*" + eslint-plugin-import: "*" + checksum: 27e6276fdff5d377c9036362ff736ac29852106e883ff589ea9092dc57d4bc2a67a82d75134221124f05045f9a7e2114a159b2c827d1f9f64d091f7afeab0f58 + languageName: node + linkType: hard + "eslint-module-utils@npm:^2.7.3": version: 2.7.4 resolution: "eslint-module-utils@npm:2.7.4" @@ -10256,6 +10627,18 @@ __metadata: languageName: node linkType: hard +"eslint-module-utils@npm:^2.7.4": + version: 2.8.0 + resolution: "eslint-module-utils@npm:2.8.0" + dependencies: + debug: ^3.2.7 + peerDependenciesMeta: + eslint: + optional: true + checksum: 74c6dfea7641ebcfe174be61168541a11a14aa8d72e515f5f09af55cd0d0862686104b0524aa4b8e0ce66418a44aa38a94d2588743db5fd07a6b49ffd16921d2 + languageName: node + linkType: hard + "eslint-plugin-chai-friendly@npm:^0.7.2": version: 0.7.2 resolution: "eslint-plugin-chai-friendly@npm:0.7.2" @@ -10311,6 +10694,32 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-jsx-a11y@npm:^6.5.1": + version: 6.7.1 + resolution: "eslint-plugin-jsx-a11y@npm:6.7.1" + dependencies: + "@babel/runtime": ^7.20.7 + aria-query: ^5.1.3 + array-includes: ^3.1.6 + array.prototype.flatmap: ^1.3.1 + ast-types-flow: ^0.0.7 + axe-core: ^4.6.2 + axobject-query: ^3.1.1 + damerau-levenshtein: ^1.0.8 + emoji-regex: ^9.2.2 + has: ^1.0.3 + jsx-ast-utils: ^3.3.3 + language-tags: =1.0.5 + minimatch: ^3.1.2 + object.entries: ^1.1.6 + object.fromentries: ^2.0.6 + semver: ^6.3.0 + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: f166dd5fe7257c7b891c6692e6a3ede6f237a14043ae3d97581daf318fc5833ddc6b4871aa34ab7656187430170500f6d806895747ea17ecdf8231a666c3c2fd + languageName: node + linkType: hard + "eslint-plugin-node@npm:^11.1.0": version: 11.1.0 resolution: "eslint-plugin-node@npm:11.1.0" @@ -10351,23 +10760,46 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-standard@npm:^4.1.0": - version: 4.1.0 - resolution: "eslint-plugin-standard@npm:4.1.0" +"eslint-plugin-react-hooks@npm:^4.5.0": + version: 4.6.0 + resolution: "eslint-plugin-react-hooks@npm:4.6.0" peerDependencies: - eslint: ">=5.0.0" - checksum: d9c1943ebbbd64e4541f4362d4dccda252d3f3164b763499233382cce2050f89f5f65bae42342700d6b252e2688a16864d80e7557671fd0671863808aae3e0c3 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + checksum: 23001801f14c1d16bf0a837ca7970d9dd94e7b560384b41db378b49b6e32dc43d6e2790de1bd737a652a86f81a08d6a91f402525061b47719328f586a57e86c3 languageName: node linkType: hard -"eslint-plugin-testing-library@npm:^5.6.1": - version: 5.6.1 - resolution: "eslint-plugin-testing-library@npm:5.6.1" +"eslint-plugin-react@npm:^7.31.7": + version: 7.32.2 + resolution: "eslint-plugin-react@npm:7.32.2" dependencies: - "@typescript-eslint/utils": ^5.13.0 + array-includes: ^3.1.6 + array.prototype.flatmap: ^1.3.1 + array.prototype.tosorted: ^1.1.1 + doctrine: ^2.1.0 + estraverse: ^5.3.0 + jsx-ast-utils: ^2.4.1 || ^3.0.0 + minimatch: ^3.1.2 + object.entries: ^1.1.6 + object.fromentries: ^2.0.6 + object.hasown: ^1.1.2 + object.values: ^1.1.6 + prop-types: ^15.8.1 + resolve: ^2.0.0-next.4 + semver: ^6.3.0 + string.prototype.matchall: ^4.0.8 peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - checksum: bf081c6a44eece3ee56ff8b789785001ea15158b631f9982aed57b6b8113cf300cc8467b4956b38f303908727188b10e22da038d42cc3245a151a7d989a05c3c + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: 2232b3b8945aa50b7773919c15cd96892acf35d2f82503667a79e2f55def90f728ed4f0e496f0f157acbe1bd4397c5615b676ae7428fe84488a544ca53feb944 + languageName: node + linkType: hard + +"eslint-plugin-standard@npm:^4.1.0": + version: 4.1.0 + resolution: "eslint-plugin-standard@npm:4.1.0" + peerDependencies: + eslint: ">=5.0.0" + checksum: d9c1943ebbbd64e4541f4362d4dccda252d3f3164b763499233382cce2050f89f5f65bae42342700d6b252e2688a16864d80e7557671fd0671863808aae3e0c3 languageName: node linkType: hard @@ -10644,7 +11076,7 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b @@ -11456,6 +11888,23 @@ __metadata: languageName: node linkType: hard +"execa@npm:^7.1.1": + version: 7.1.1 + resolution: "execa@npm:7.1.1" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.1 + human-signals: ^4.3.0 + is-stream: ^3.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^5.1.0 + onetime: ^6.0.0 + signal-exit: ^3.0.7 + strip-final-newline: ^3.0.0 + checksum: 21fa46fc69314ace4068cf820142bdde5b643a5d89831c2c9349479c1555bff137a291b8e749e7efca36535e4e0a8c772c11008ca2e84d2cbd6ca141a3c8f937 + languageName: node + linkType: hard + "executable@npm:^4.1.1": version: 4.1.1 resolution: "executable@npm:4.1.1" @@ -11672,6 +12121,19 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.12": + version: 3.2.12 + resolution: "fast-glob@npm:3.2.12" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2 + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -12369,6 +12831,18 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0": + version: 1.2.1 + resolution: "get-intrinsic@npm:1.2.1" + dependencies: + function-bind: ^1.1.1 + has: ^1.0.3 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f + languageName: node + linkType: hard + "get-nonce@npm:^1.0.0": version: 1.0.1 resolution: "get-nonce@npm:1.0.1" @@ -12418,7 +12892,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^6.0.0": +"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad @@ -12435,6 +12909,15 @@ __metadata: languageName: node linkType: hard +"get-tsconfig@npm:^4.5.0": + version: 4.6.0 + resolution: "get-tsconfig@npm:4.6.0" + dependencies: + resolve-pkg-maps: ^1.0.0 + checksum: fd2589a50e21543cf416285e5c4ac605359f49209b6c2e66bb8698fac907356e060de0a681e40881f00182b6f19771377411a88adcc78fd3954732ff54f4a54d + languageName: node + linkType: hard + "getos@npm:^3.2.1": version: 3.2.1 resolution: "getos@npm:3.2.1" @@ -12489,6 +12972,13 @@ __metadata: languageName: node linkType: hard +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 + languageName: node + linkType: hard + "glob@npm:7.1.2": version: 7.1.2 resolution: "glob@npm:7.1.2" @@ -12503,6 +12993,20 @@ __metadata: languageName: node linkType: hard +"glob@npm:7.1.7": + version: 7.1.7 + resolution: "glob@npm:7.1.7" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: b61f48973bbdcf5159997b0874a2165db572b368b931135832599875919c237fc05c12984e38fe828e69aa8a921eb0e8a4997266211c517c9cfaae8a93988bb8 + languageName: node + linkType: hard + "glob@npm:^7.0.3, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:~7.2.3": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -12572,6 +13076,15 @@ __metadata: languageName: node linkType: hard +"globalthis@npm:^1.0.3": + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" + dependencies: + define-properties: ^1.1.3 + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 + languageName: node + linkType: hard + "globby@npm:11.0.4": version: 11.0.4 resolution: "globby@npm:11.0.4" @@ -12600,6 +13113,19 @@ __metadata: languageName: node linkType: hard +"globby@npm:^13.1.3": + version: 13.2.0 + resolution: "globby@npm:13.2.0" + dependencies: + dir-glob: ^3.0.1 + fast-glob: ^3.2.11 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^4.0.0 + checksum: 0a3dd786571788adef1c894f22112834cff5bbe061ae6e0a01c5118c39d44b3f1937ef1dae3f8b9bc24756eba84a0923e565b1ad9a4ec52831d7e2a04c035e75 + languageName: node + linkType: hard + "globby@npm:^6.1.0": version: 6.1.0 resolution: "globby@npm:6.1.0" @@ -12613,6 +13139,15 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + "got@npm:9.6.0": version: 9.6.0 resolution: "got@npm:9.6.0" @@ -12686,6 +13221,13 @@ __metadata: languageName: node linkType: hard +"graceful-fs@npm:^4.2.4": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + "grapheme-splitter@npm:^1.0.4": version: 1.0.4 resolution: "grapheme-splitter@npm:1.0.4" @@ -12783,6 +13325,13 @@ __metadata: languageName: node linkType: hard +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e + languageName: node + linkType: hard + "has-symbol-support-x@npm:^1.4.1": version: 1.4.2 resolution: "has-symbol-support-x@npm:1.4.2" @@ -13273,6 +13822,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^4.3.0": + version: 4.3.1 + resolution: "human-signals@npm:4.3.1" + checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 + languageName: node + linkType: hard + "humanize-ms@npm:^1.2.1": version: 1.2.1 resolution: "humanize-ms@npm:1.2.1" @@ -13473,6 +14029,17 @@ __metadata: languageName: node linkType: hard +"internal-slot@npm:^1.0.5": + version: 1.0.5 + resolution: "internal-slot@npm:1.0.5" + dependencies: + get-intrinsic: ^1.2.0 + has: ^1.0.3 + side-channel: ^1.0.4 + checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a + languageName: node + linkType: hard + "into-stream@npm:^3.1.0": version: 3.1.0 resolution: "into-stream@npm:3.1.0" @@ -13547,6 +14114,17 @@ __metadata: languageName: node linkType: hard +"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": + version: 3.0.2 + resolution: "is-array-buffer@npm:3.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.0 + is-typed-array: ^1.1.10 + checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 + languageName: node + linkType: hard + "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -13605,6 +14183,13 @@ __metadata: languageName: node linkType: hard +"is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac + languageName: node + linkType: hard + "is-ci@npm:^3.0.0": version: 3.0.1 resolution: "is-ci@npm:3.0.1" @@ -13616,6 +14201,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.11.0": + version: 2.12.1 + resolution: "is-core-module@npm:2.12.1" + dependencies: + has: ^1.0.3 + checksum: f04ea30533b5e62764e7b2e049d3157dc0abd95ef44275b32489ea2081176ac9746ffb1cdb107445cf1ff0e0dfcad522726ca27c27ece64dadf3795428b8e468 + languageName: node + linkType: hard + "is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": version: 2.10.0 resolution: "is-core-module@npm:2.10.0" @@ -13650,6 +14244,15 @@ __metadata: languageName: node linkType: hard +"is-docker@npm:^3.0.0": + version: 3.0.0 + resolution: "is-docker@npm:3.0.0" + bin: + is-docker: cli.js + checksum: b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -13740,6 +14343,17 @@ __metadata: languageName: node linkType: hard +"is-inside-container@npm:^1.0.0": + version: 1.0.0 + resolution: "is-inside-container@npm:1.0.0" + dependencies: + is-docker: ^3.0.0 + bin: + is-inside-container: cli.js + checksum: c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 + languageName: node + linkType: hard + "is-installed-globally@npm:~0.4.0": version: 0.4.0 resolution: "is-installed-globally@npm:0.4.0" @@ -13887,6 +14501,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 + languageName: node + linkType: hard + "is-string-and-not-blank@npm:^0.0.2": version: 0.0.2 resolution: "is-string-and-not-blank@npm:0.0.2" @@ -13921,6 +14542,19 @@ __metadata: languageName: node linkType: hard +"is-typed-array@npm:^1.1.10": + version: 1.1.10 + resolution: "is-typed-array@npm:1.1.10" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + checksum: aac6ecb59d4c56a1cdeb69b1f129154ef462bbffe434cb8a8235ca89b42f258b7ae94073c41b3cb7bce37f6a1733ad4499f07882d5d5093a7ba84dfc4ebb8017 + languageName: node + linkType: hard + "is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": version: 1.1.9 resolution: "is-typed-array@npm:1.1.9" @@ -15067,6 +15701,16 @@ __metadata: languageName: node linkType: hard +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.3": + version: 3.3.3 + resolution: "jsx-ast-utils@npm:3.3.3" + dependencies: + array-includes: ^3.1.5 + object.assign: ^4.1.3 + checksum: a2ed78cac49a0f0c4be8b1eafe3c5257a1411341d8e7f1ac740debae003de04e5f6372bfcfbd9d082e954ffd99aac85bcda85b7c6bc11609992483f4cdc0f745 + languageName: node + linkType: hard + "keccak@npm:^1.0.2": version: 1.4.0 resolution: "keccak@npm:1.4.0" @@ -15143,6 +15787,22 @@ __metadata: languageName: node linkType: hard +"language-subtag-registry@npm:~0.3.2": + version: 0.3.22 + resolution: "language-subtag-registry@npm:0.3.22" + checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a + languageName: node + linkType: hard + +"language-tags@npm:=1.0.5": + version: 1.0.5 + resolution: "language-tags@npm:1.0.5" + dependencies: + language-subtag-registry: ~0.3.2 + checksum: c81b5d8b9f5f9cfd06ee71ada6ddfe1cf83044dd5eeefcd1e420ad491944da8957688db4a0a9bc562df4afdc2783425cbbdfd152c01d93179cf86888903123cf + languageName: node + linkType: hard + "lazy-ass@npm:1.6.0, lazy-ass@npm:^1.6.0": version: 1.6.0 resolution: "lazy-ass@npm:1.6.0" @@ -15786,6 +16446,17 @@ __metadata: languageName: node linkType: hard +"millify@npm:^6.1.0": + version: 6.1.0 + resolution: "millify@npm:6.1.0" + dependencies: + yargs: ^17.0.1 + bin: + millify: bin/millify + checksum: f5e33f4c9413d697d8b64967c8cfaca32c9796c17c691fe986a139322f7387aad6727cdbd9eeb9e3b20615bcb3dec067eabb10c119d4c19f3e35d975b0a4eab8 + languageName: node + linkType: hard + "mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2, mime-db@npm:^1.28.0": version: 1.52.0 resolution: "mime-db@npm:1.52.0" @@ -15841,6 +16512,13 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 + languageName: node + linkType: hard + "mimic-response@npm:^1.0.0, mimic-response@npm:^1.0.1": version: 1.0.1 resolution: "mimic-response@npm:1.0.1" @@ -16232,48 +16910,38 @@ __metadata: languageName: node linkType: hard -"next@npm:^12.2.5": - version: 12.2.5 - resolution: "next@npm:12.2.5" - dependencies: - "@next/env": 12.2.5 - "@next/swc-android-arm-eabi": 12.2.5 - "@next/swc-android-arm64": 12.2.5 - "@next/swc-darwin-arm64": 12.2.5 - "@next/swc-darwin-x64": 12.2.5 - "@next/swc-freebsd-x64": 12.2.5 - "@next/swc-linux-arm-gnueabihf": 12.2.5 - "@next/swc-linux-arm64-gnu": 12.2.5 - "@next/swc-linux-arm64-musl": 12.2.5 - "@next/swc-linux-x64-gnu": 12.2.5 - "@next/swc-linux-x64-musl": 12.2.5 - "@next/swc-win32-arm64-msvc": 12.2.5 - "@next/swc-win32-ia32-msvc": 12.2.5 - "@next/swc-win32-x64-msvc": 12.2.5 - "@swc/helpers": 0.4.3 - caniuse-lite: ^1.0.30001332 +"next@npm:13.4.8": + version: 13.4.8 + resolution: "next@npm:13.4.8" + dependencies: + "@next/env": 13.4.8 + "@next/swc-darwin-arm64": 13.4.8 + "@next/swc-darwin-x64": 13.4.8 + "@next/swc-linux-arm64-gnu": 13.4.8 + "@next/swc-linux-arm64-musl": 13.4.8 + "@next/swc-linux-x64-gnu": 13.4.8 + "@next/swc-linux-x64-musl": 13.4.8 + "@next/swc-win32-arm64-msvc": 13.4.8 + "@next/swc-win32-ia32-msvc": 13.4.8 + "@next/swc-win32-x64-msvc": 13.4.8 + "@swc/helpers": 0.5.1 + busboy: 1.6.0 + caniuse-lite: ^1.0.30001406 postcss: 8.4.14 - styled-jsx: 5.0.4 - use-sync-external-store: 1.2.0 + styled-jsx: 5.1.1 + watchpack: 2.4.0 + zod: 3.21.4 peerDependencies: + "@opentelemetry/api": ^1.1.0 fibers: ">= 3.1.0" - node-sass: ^6.0.0 || ^7.0.0 - react: ^17.0.2 || ^18.0.0-0 - react-dom: ^17.0.2 || ^18.0.0-0 + react: ^18.2.0 + react-dom: ^18.2.0 sass: ^1.3.0 dependenciesMeta: - "@next/swc-android-arm-eabi": - optional: true - "@next/swc-android-arm64": - optional: true "@next/swc-darwin-arm64": optional: true "@next/swc-darwin-x64": optional: true - "@next/swc-freebsd-x64": - optional: true - "@next/swc-linux-arm-gnueabihf": - optional: true "@next/swc-linux-arm64-gnu": optional: true "@next/swc-linux-arm64-musl": @@ -16289,15 +16957,15 @@ __metadata: "@next/swc-win32-x64-msvc": optional: true peerDependenciesMeta: - fibers: + "@opentelemetry/api": optional: true - node-sass: + fibers: optional: true sass: optional: true bin: next: dist/bin/next - checksum: e8fcbd93d74fda81640fd174a9d380f22db404d3ce0893730db3db806317ae18c86d1dbb502e63e47c92fb21a93812de62639c2f1204330cb569fdac4d3d0573 + checksum: 9af39db490707b93f7354457400997423655c59af3888f4a2db15a562711adadd83c17fba562f56341e4e020b43569d86b0a5630c0811c1a97c68f01b647dfc6 languageName: node linkType: hard @@ -16478,6 +17146,15 @@ __metadata: languageName: node linkType: hard +"npm-run-path@npm:^5.1.0": + version: 5.1.0 + resolution: "npm-run-path@npm:5.1.0" + dependencies: + path-key: ^4.0.0 + checksum: dc184eb5ec239d6a2b990b43236845332ef12f4e0beaa9701de724aa797fe40b6bbd0157fb7639d24d3ab13f5d5cf22d223a19c6300846b8126f335f788bee66 + languageName: node + linkType: hard + "npmlog@npm:^6.0.0": version: 6.0.2 resolution: "npmlog@npm:6.0.2" @@ -16597,6 +17274,13 @@ __metadata: languageName: node linkType: hard +"object-inspect@npm:^1.12.3": + version: 1.12.3 + resolution: "object-inspect@npm:1.12.3" + checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db + languageName: node + linkType: hard + "object-is@npm:^1.0.1": version: 1.1.5 resolution: "object-is@npm:1.1.5" @@ -16621,7 +17305,7 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.4": +"object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": version: 4.1.4 resolution: "object.assign@npm:4.1.4" dependencies: @@ -16633,6 +17317,28 @@ __metadata: languageName: node linkType: hard +"object.entries@npm:^1.1.6": + version: 1.1.6 + resolution: "object.entries@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 0f8c47517e6a9a980241eafe3b73de11e59511883173c2b93d67424a008e47e11b77c80e431ad1d8a806f6108b225a1cab9223e53e555776c612a24297117d28 + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.6": + version: 2.0.6 + resolution: "object.fromentries@npm:2.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 453c6d694180c0c30df451b60eaf27a5b9bca3fb43c37908fd2b78af895803dc631242bcf05582173afa40d8d0e9c96e16e8874b39471aa53f3ac1f98a085d85 + languageName: node + linkType: hard + "object.getownpropertydescriptors@npm:^2.0.3, object.getownpropertydescriptors@npm:^2.1.0": version: 2.1.4 resolution: "object.getownpropertydescriptors@npm:2.1.4" @@ -16645,6 +17351,16 @@ __metadata: languageName: node linkType: hard +"object.hasown@npm:^1.1.2": + version: 1.1.2 + resolution: "object.hasown@npm:1.1.2" + dependencies: + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: b936572536db0cdf38eb30afd2f1026a8b6f2cc5d2c4497c9d9bbb01eaf3e980dead4fd07580cfdd098e6383e5a9db8212d3ea0c6bdd2b5e68c60aa7e3b45566 + languageName: node + linkType: hard + "object.values@npm:^1.1.0, object.values@npm:^1.1.5": version: 1.1.5 resolution: "object.values@npm:1.1.5" @@ -16656,6 +17372,17 @@ __metadata: languageName: node linkType: hard +"object.values@npm:^1.1.6": + version: 1.1.6 + resolution: "object.values@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: f6fff9fd817c24cfd8107f50fb33061d81cd11bacc4e3dbb3852e9ff7692fde4dbce823d4333ea27cd9637ef1b6690df5fbb61f1ed314fa2959598dc3ae23d8e + languageName: node + linkType: hard + "oboe@npm:2.1.5": version: 2.1.5 resolution: "oboe@npm:2.1.5" @@ -16715,6 +17442,15 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: ^4.0.0 + checksum: 0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 + languageName: node + linkType: hard + "open@npm:^8.0.9": version: 8.4.0 resolution: "open@npm:8.4.0" @@ -16726,6 +17462,18 @@ __metadata: languageName: node linkType: hard +"open@npm:^9.1.0": + version: 9.1.0 + resolution: "open@npm:9.1.0" + dependencies: + default-browser: ^4.0.0 + define-lazy-prop: ^3.0.0 + is-inside-container: ^1.0.0 + is-wsl: ^2.2.0 + checksum: 3993c0f61d51fed8ac290e99c9c3cf45d3b6cfb3e2aa2b74cafd312c3486c22fd81df16ac8f3ab91dd8a4e3e729a16fc2480cfc406c4833416cf908acf1ae7c9 + languageName: node + linkType: hard + "openzeppelin-solidity-2.3.0@npm:openzeppelin-solidity@2.3.0": version: 2.3.0 resolution: "openzeppelin-solidity@npm:2.3.0" @@ -17166,6 +17914,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 + languageName: node + linkType: hard + "path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -17479,6 +18234,15 @@ __metadata: languageName: node linkType: hard +"prettier@npm:^2.8.8": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 + languageName: node + linkType: hard + "pretty-bytes@npm:^5.6.0": version: 5.6.0 resolution: "pretty-bytes@npm:5.6.0" @@ -17906,7 +18670,7 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.2.0": +"react-dom@npm:18.2.0": version: 18.2.0 resolution: "react-dom@npm:18.2.0" dependencies: @@ -18179,7 +18943,7 @@ __metadata: languageName: node linkType: hard -"react@npm:^18.2.0": +"react@npm:18.2.0": version: 18.2.0 resolution: "react@npm:18.2.0" dependencies: @@ -18326,6 +19090,13 @@ __metadata: languageName: node linkType: hard +"regenerator-runtime@npm:^0.13.11": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 + languageName: node + linkType: hard + "regenerator-runtime@npm:^0.13.4": version: 0.13.9 resolution: "regenerator-runtime@npm:0.13.9" @@ -18579,6 +19350,13 @@ __metadata: languageName: node linkType: hard +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 1012afc566b3fdb190a6309cc37ef3b2dcc35dff5fa6683a9d00cd25c3247edfbc4691b91078c97adc82a29b77a2660c30d791d65dab4fc78bfc473f60289977 + languageName: node + linkType: hard + "resolve.exports@npm:^1.1.0": version: 1.1.0 resolution: "resolve.exports@npm:1.1.0" @@ -18599,6 +19377,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^2.0.0-next.4": + version: 2.0.0-next.4 + resolution: "resolve@npm:2.0.0-next.4" + dependencies: + is-core-module: ^2.9.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: c438ac9a650f2030fd074219d7f12ceb983b475da2d89ad3d6dd05fbf6b7a0a8cd37d4d10b43cb1f632bc19f22246ab7f36ebda54d84a29bfb2910a0680906d3 + languageName: node + linkType: hard + "resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.10.1#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin, resolve@patch:resolve@~1.22.1#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" @@ -18612,6 +19403,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@^2.0.0-next.4#~builtin": + version: 2.0.0-next.4 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#~builtin::version=2.0.0-next.4&hash=07638b" + dependencies: + is-core-module: ^2.9.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 4bf9f4f8a458607af90518ff73c67a4bc1a38b5a23fef2bb0ccbd45e8be89820a1639b637b0ba377eb2be9eedfb1739a84cde24fe4cd670c8207d8fea922b011 + languageName: node + linkType: hard + "responselike@npm:1.0.2, responselike@npm:^1.0.2": version: 1.0.2 resolution: "responselike@npm:1.0.2" @@ -18728,6 +19532,15 @@ __metadata: languageName: node linkType: hard +"run-applescript@npm:^5.0.0": + version: 5.0.0 + resolution: "run-applescript@npm:5.0.0" + dependencies: + execa: ^5.0.0 + checksum: d00c2dbfa5b2d774de7451194b8b125f40f65fc183de7d9dcae97f57f59433586d3c39b9001e111c38bfa24c3436c99df1bb4066a2a0c90d39a8c4cd6889af77 + languageName: node + linkType: hard + "run-async@npm:^2.2.0, run-async@npm:^2.3.0": version: 2.4.1 resolution: "run-async@npm:2.4.1" @@ -18792,6 +19605,17 @@ __metadata: languageName: node linkType: hard +"safe-regex-test@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-regex-test@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + is-regex: ^1.1.4 + checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + languageName: node + linkType: hard + "safe-regex@npm:^2.1.1": version: 2.1.1 resolution: "safe-regex@npm:2.1.1" @@ -19293,6 +20117,13 @@ __metadata: languageName: node linkType: hard +"slash@npm:^4.0.0": + version: 4.0.0 + resolution: "slash@npm:4.0.0" + checksum: da8e4af73712253acd21b7853b7e0dbba776b786e82b010a5bfc8b5051a1db38ed8aba8e1e8f400dd2c9f373be91eb1c42b66e91abb407ff42b10feece5e1d2d + languageName: node + linkType: hard + "slice-ansi@npm:^3.0.0": version: 3.0.0 resolution: "slice-ansi@npm:3.0.0" @@ -19700,6 +20531,13 @@ __metadata: languageName: node linkType: hard +"streamsearch@npm:^1.1.0": + version: 1.1.0 + resolution: "streamsearch@npm:1.1.0" + checksum: 1cce16cea8405d7a233d32ca5e00a00169cc0e19fbc02aa839959985f267335d435c07f96e5e0edd0eadc6d39c98d5435fb5bbbdefc62c41834eadc5622ad942 + languageName: node + linkType: hard + "strict-uri-encode@npm:^1.0.0": version: 1.1.0 resolution: "strict-uri-encode@npm:1.1.0" @@ -19778,6 +20616,33 @@ __metadata: languageName: node linkType: hard +"string.prototype.matchall@npm:^4.0.8": + version: 4.0.8 + resolution: "string.prototype.matchall@npm:4.0.8" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 + has-symbols: ^1.0.3 + internal-slot: ^1.0.3 + regexp.prototype.flags: ^1.4.3 + side-channel: ^1.0.4 + checksum: 952da3a818de42ad1c10b576140a5e05b4de7b34b8d9dbf00c3ac8c1293e9c0f533613a39c5cda53e0a8221f2e710bc2150e730b1c2278d60004a8a35726efb6 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.7": + version: 1.2.7 + resolution: "string.prototype.trim@npm:1.2.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 05b7b2d6af63648e70e44c4a8d10d8cc457536df78b55b9d6230918bde75c5987f6b8604438c4c8652eb55e4fc9725d2912789eb4ec457d6995f3495af190c09 + languageName: node + linkType: hard + "string.prototype.trim@npm:~1.2.6": version: 1.2.6 resolution: "string.prototype.trim@npm:1.2.6" @@ -19800,6 +20665,17 @@ __metadata: languageName: node linkType: hard +"string.prototype.trimend@npm:^1.0.6": + version: 1.0.6 + resolution: "string.prototype.trimend@npm:1.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 0fdc34645a639bd35179b5a08227a353b88dc089adf438f46be8a7c197fc3f22f8514c1c9be4629b3cd29c281582730a8cbbad6466c60f76b5f99cf2addb132e + languageName: node + linkType: hard + "string.prototype.trimstart@npm:^1.0.5": version: 1.0.5 resolution: "string.prototype.trimstart@npm:1.0.5" @@ -19811,6 +20687,17 @@ __metadata: languageName: node linkType: hard +"string.prototype.trimstart@npm:^1.0.6": + version: 1.0.6 + resolution: "string.prototype.trimstart@npm:1.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 89080feef416621e6ef1279588994305477a7a91648d9436490d56010a1f7adc39167cddac7ce0b9884b8cdbef086987c4dcb2960209f2af8bac0d23ceff4f41 + languageName: node + linkType: hard + "string_decoder@npm:^1.1.1": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" @@ -19920,6 +20807,13 @@ __metadata: languageName: node linkType: hard +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: 23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 + languageName: node + linkType: hard + "strip-hex-prefix@npm:1.0.0": version: 1.0.0 resolution: "strip-hex-prefix@npm:1.0.0" @@ -20010,9 +20904,11 @@ __metadata: languageName: node linkType: hard -"styled-jsx@npm:5.0.4": - version: 5.0.4 - resolution: "styled-jsx@npm:5.0.4" +"styled-jsx@npm:5.1.1": + version: 5.1.1 + resolution: "styled-jsx@npm:5.1.1" + dependencies: + client-only: 0.0.1 peerDependencies: react: ">= 16.8.0 || 17.x.x || ^18.0.0-0" peerDependenciesMeta: @@ -20020,7 +20916,7 @@ __metadata: optional: true babel-plugin-macros: optional: true - checksum: db7530155626e5eebc9d80ca117ea5aed6219b0a65469196b0b5727550fbe743117d7eea1499d80511ccb312d31f4a1027a58d1f94a83f0986c9acfdcce8bdd1 + checksum: 523a33b38603492547e861b98e29c873939b04e15fbe5ef16132c6f1e15958126647983c7d4675325038b428a5e91183d996e90141b18bdd1bbadf6e2c45b2fa languageName: node linkType: hard @@ -20184,6 +21080,16 @@ __metadata: languageName: node linkType: hard +"synckit@npm:^0.8.5": + version: 0.8.5 + resolution: "synckit@npm:0.8.5" + dependencies: + "@pkgr/utils": ^2.3.1 + tslib: ^2.5.0 + checksum: 8a9560e5d8f3d94dc3cf5f7b9c83490ffa30d320093560a37b88f59483040771fd1750e76b9939abfbb1b5a23fd6dfbae77f6b338abffe7cae7329cd9b9bb86b + languageName: node + linkType: hard + "synthetix-js@npm:^2.74.1": version: 2.74.1 resolution: "synthetix-js@npm:2.74.1" @@ -20219,7 +21125,7 @@ __metadata: "@svgr/cli": ^5.5.0 "@synthetixio/contracts-interface": ^2.74.3 "@synthetixio/synpress": ^3.0.0 - "@synthetixio/v3-theme": 1.1.0 + "@synthetixio/v3-theme": ^3.1.1 "@testing-library/dom": ^8.11.0 "@testing-library/jest-dom": ^5.15.0 "@testing-library/react": ^13.4.0 @@ -20243,24 +21149,22 @@ __metadata: bignumber.js: 9.0.1 codegen-graph-ts: ^0.1.2 eslint: ^8.6.0 - eslint-config-prettier: ^8.5.0 - eslint-plugin-chai-friendly: ^0.7.2 - eslint-plugin-cypress: ^2.12.1 - eslint-plugin-import: ^2.26.0 + eslint-config-next: latest + eslint-config-prettier: ^8.8.0 eslint-plugin-prettier: ^4.2.1 - eslint-plugin-testing-library: ^5.6.1 - eslint-plugin-ui-testing: ^2.0.1 ethers: 5.6.9 framer-motion: ^7 husky: ^7.0.4 jest: ^27.0.0 jsonpath: ^1.1.1 - next: ^12.2.5 + millify: ^6.1.0 + next: 13.4.8 next-sitemap: 1.3.2 numeral: 2.0.6 + prettier: ^2.8.8 prop-types: ^15.7 - react: ^18.2.0 - react-dom: ^18.2.0 + react: 18.2.0 + react-dom: 18.2.0 react-hamburger-menu: 1.2.1 react-icons: ^4.3.1 react-instantsearch-dom: ^6.32.1 @@ -20357,7 +21261,7 @@ __metadata: languageName: node linkType: hard -"tapable@npm:^2.0.0": +"tapable@npm:^2.0.0, tapable@npm:^2.2.0": version: 2.2.1 resolution: "tapable@npm:2.2.1" checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 @@ -20571,6 +21475,13 @@ __metadata: languageName: node linkType: hard +"titleize@npm:^3.0.0": + version: 3.0.0 + resolution: "titleize@npm:3.0.0" + checksum: 71fbbeabbfb36ccd840559f67f21e356e1d03da2915b32d2ae1a60ddcc13a124be2739f696d2feb884983441d159a18649e8d956648d591bdad35c430a6b6d28 + languageName: node + linkType: hard + "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -20758,6 +21669,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.5.0": + version: 2.5.3 + resolution: "tslib@npm:2.5.3" + checksum: 88902b309afaf83259131c1e13da1dceb0ad1682a213143a1346a649143924d78cf3760c448b84d796938fd76127183894f8d85cbb3bf9c4fddbfcc140c0003c + languageName: node + linkType: hard + "tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" @@ -20883,6 +21801,17 @@ __metadata: languageName: node linkType: hard +"typed-array-length@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-length@npm:1.0.4" + dependencies: + call-bind: ^1.0.2 + for-each: ^0.3.3 + is-typed-array: ^1.1.9 + checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 + languageName: node + linkType: hard + "typedarray-to-buffer@npm:3.1.5, typedarray-to-buffer@npm:^3.1.5": version: 3.1.5 resolution: "typedarray-to-buffer@npm:3.1.5" @@ -21204,15 +22133,6 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:1.2.0": - version: 1.2.0 - resolution: "use-sync-external-store@npm:1.2.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 5c639e0f8da3521d605f59ce5be9e094ca772bd44a4ce7322b055a6f58eeed8dda3c94cabd90c7a41fb6fa852210092008afe48f7038792fd47501f33299116a - languageName: node - linkType: hard - "user-home@npm:^2.0.0": version: 2.0.0 resolution: "user-home@npm:2.0.0" @@ -21447,6 +22367,16 @@ __metadata: languageName: node linkType: hard +"watchpack@npm:2.4.0": + version: 2.4.0 + resolution: "watchpack@npm:2.4.0" + dependencies: + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.1.2 + checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131 + languageName: node + linkType: hard + "wbuf@npm:^1.1.0, wbuf@npm:^1.7.3": version: 1.7.3 resolution: "wbuf@npm:1.7.3" @@ -22027,6 +22957,20 @@ __metadata: languageName: node linkType: hard +"which-typed-array@npm:^1.1.9": + version: 1.1.9 + resolution: "which-typed-array@npm:1.1.9" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + is-typed-array: ^1.1.10 + checksum: fe0178ca44c57699ca2c0e657b64eaa8d2db2372a4e2851184f568f98c478ae3dc3fdb5f7e46c384487046b0cf9e23241423242b277e03e8ba3dabc7c84c98ef + languageName: node + linkType: hard + "which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -22400,6 +23344,13 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + "yargs@npm:^13.2.4": version: 13.3.2 resolution: "yargs@npm:13.3.2" @@ -22452,6 +23403,21 @@ __metadata: languageName: node linkType: hard +"yargs@npm:^17.0.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + languageName: node + linkType: hard + "yargs@npm:^4.7.1": version: 4.8.1 resolution: "yargs@npm:4.8.1" @@ -22504,3 +23470,10 @@ __metadata: checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 languageName: node linkType: hard + +"zod@npm:3.21.4": + version: 3.21.4 + resolution: "zod@npm:3.21.4" + checksum: f185ba87342ff16f7a06686767c2b2a7af41110c7edf7c1974095d8db7a73792696bcb4a00853de0d2edeb34a5b2ea6a55871bc864227dace682a0a28de33e1f + languageName: node + linkType: hard