diff --git a/docusaurus.config.js b/docusaurus.config.js index 7cabdd47b8..88c2a3c938 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -34,57 +34,23 @@ module.exports = { navbar: { title: 'Uniswap Docs', logo: { - alt: 'Uniswap Unicorn', - src: 'img/uni_dark_icon.svg', + alt: 'Site Logo', + src: 'img/uni_light_icon.svg', + srcDark: 'img/uni_dark_icon.svg', + href: 'https://docusaurus.io/', + target: '_self', + width: 32, + height: 32, }, items: [ { - to: '/concepts/overview', - label: 'Concepts', + type: 'search', position: 'left', - className: 'V3_active', }, { - to: '/contracts/v4/overview', - label: 'Contracts', - position: 'left', - className: 'V3_active', - }, - { - to: '/sdk/v3/overview', - label: 'SDKs', - position: 'left', - className: 'V3_active', - }, - { - to: '/api/subgraph/overview', - label: 'APIs', - position: 'left', - className: 'V3_active', - }, - { - label: 'Give Feedback', - to: 'https://forms.gle/13XtjmkwdXQ2jMn26', - position: 'right', - className: 'persistent', - }, - { - label: 'Whitepaper', - to: 'https://uniswap.org/whitepaper-v3.pdf', - position: 'right', - className: 'persistent', - }, - { - href: 'https://github.com/uniswap/uniswap-docs', - label: 'GitHub', - position: 'right', - className: 'persistent', - }, - { - href: 'https://unigrants.org/', - label: 'Grants', + type: 'html', position: 'right', - className: 'persistent', + value: '', }, ], }, @@ -180,7 +146,7 @@ module.exports = { ], }, ], - // copyright: `unlicensed`, + copyright: `unlicensed`, }, colorMode: { // "light" | "dark" diff --git a/package.json b/package.json index 7425841e12..8fbff6b7f1 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "@docusaurus/preset-classic": "2.4.3", "@docusaurus/remark-plugin-npm2yarn": "2.4.3", "@docusaurus/theme-search-algolia": "2.4.3", + "@headlessui/react": "^2.2.0", "@mdx-js/react": "^1.6.21", "@saucelabs/theme-github-codeblock": "https://github.com/Uniswap/docusaurus-theme-github-codeblock.git#f55fe4caed9fce974c9b82bf2164f76cc5509eef", "@types/react": "^17.0.11", @@ -33,9 +34,11 @@ "@uniswap/analytics-events": "2.0.0", "algoliasearch": "^4.9.1", "caniuse-lite": "^1.0.30001519", + "classnames": "^2.5.1", "clsx": "^1.1.1", "hast-util-is-element": "1.1.0", "intl-locales-supported": "^1.8.12", + "js-cookie": "^3.0.5", "license-checker": "^25.0.1", "react": "18", "react-dom": "18", diff --git a/src/components/Icons/index.tsx b/src/components/Icons/index.tsx new file mode 100644 index 0000000000..582104ebe1 --- /dev/null +++ b/src/components/Icons/index.tsx @@ -0,0 +1,152 @@ +import React, { FC } from 'react' + +import cn from 'classnames' + +export const MiniUnicon: FC<{ + className?: string + color?: 'accent-1' | 'neutral-1' +}> = ({ className, color = 'accent-1' }) => { + return ( + + + + + + + + + + + + ) +} + +export const Sun: FC<{ + className?: string + color?: 'neutral-2' +}> = ({ className, color = 'neutral-2' }) => { + return ( + + + + ) +} + +export const Menu: FC<{ + className?: string + color?: 'neutral-2' +}> = ({ className, color = 'neutral-2' }) => { + return ( + + + + ) +} +export const Moon: FC<{ + className?: string + color?: 'neutral-2' +}> = ({ className, color = 'neutral-2' }) => { + return ( + + + + ) +} + +export type Icon = 'sun' | 'moon' + +export const IconMap: FC<{ + icon: Icon + className?: string + color?: 'neutral-2' +}> = ({ icon, color, className }) => { + switch (icon) { + case 'sun': + return + case 'moon': + return + default: + console.warn(`Icon ${icon} not found`) + return null + } +} diff --git a/src/components/ThemeSwitch/index.tsx b/src/components/ThemeSwitch/index.tsx new file mode 100644 index 0000000000..7f12fe5aa9 --- /dev/null +++ b/src/components/ThemeSwitch/index.tsx @@ -0,0 +1,57 @@ +import React, { FC, useState, useEffect } from 'react' + +import { Switch } from '@headlessui/react' +import { IconMap, Sun, Moon } from '../Icons' + +import { ThemeManager } from '../../utils/storage' + +import cn from 'classnames' + +const ThemeSwitch: FC<{ className?: string }> = ({ className }) => { + const [theme, setTheme] = useState<'light' | 'dark'>('light') + + useEffect(() => { + if (typeof window !== 'undefined') { + const currentTheme = ThemeManager.get() + + if (!currentTheme) { + ThemeManager.set('light') + } else { + setTheme(currentTheme) + } + } + }, []) + + const toggleTheme = () => { + setTheme((prev) => { + const newTheme = prev === 'dark' ? 'light' : 'dark' + ThemeManager.set(newTheme) + return newTheme + }) + } + + useEffect(() => { + document.documentElement.setAttribute('data-theme', theme) + document.documentElement.setAttribute('class', theme) + }, [theme]) + + return ( + + + + + + + + ) +} + +export default ThemeSwitch diff --git a/src/css/custom.css b/src/css/custom.css index 1ad2d6461e..5a25024124 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -6,6 +6,7 @@ */ /* You can override the default Infima variables here. */ +@import './infma-overrides.css'; @import 'tailwindcss/base'; @import 'tailwindcss/components'; @@ -15,5 +16,8 @@ @import './types.css'; :root { - /* add override here */ + .Navbar { + .Navbar__logo-text { + } + } } diff --git a/src/css/font.css b/src/css/font.css index b5f1af37e4..67a8aef4f8 100644 --- a/src/css/font.css +++ b/src/css/font.css @@ -2,45 +2,45 @@ @font-face { font-family: 'Basel Grotesk'; - src: url('/fonts/baselGrotesk/Basel-Grotesk-Regular.woff2'); + src: url('/fonts/Basel-Grotesk-Regular.woff2') format('woff2'); font-weight: '400'; font-style: 'normal'; } -@font-face { +/* @font-face { font-family: 'Basel Grotesk'; - src: url('/fonts/baselGrotesk/Basel-Grotesk-Regular-Italic.woff2'); + src: url('/fonts/Basel-Grotesk-Regular-Italic.woff2') format('woff2'); font-weight: '400'; font-style: 'italic'; -} +} */ @font-face { font-family: 'Basel Grotesk'; - src: url('/fonts/baselGrotesk/Basel-Grotesk-Book.woff2'); + src: url('/fonts/Basel-Grotesk-Book.woff2') format('woff2'); font-weight: '500'; font-style: 'normal'; } -@font-face { +/* @font-face { font-family: 'Basel Grotesk'; - src: url('/fonts/baselGrotesk/Basel-Grotesk-Book-Italic.woff2'); + src: url('/fonts/Basel-Grotesk-Book-Italic.woff2') format('woff2'); font-weight: '500'; font-style: 'italic'; -} +} */ @font-face { font-family: 'Basel Grotesk'; - src: url('/fonts/baselGrotesk/Basel-Grotesk-Medium.woff2'); + src: url('/fonts/Basel-Grotesk-Medium.woff2') format('woff2'); font-weight: '600'; font-style: 'normal'; } -@font-face { +/* @font-face { font-family: 'Basel Grotesk'; - src: url('/fonts/baselGrotesk/Basel-Grotesk-Medium-Italic.woff2'); + src: url('/fonts/Basel-Grotesk-Medium-Italic.woff2') format('woff2'); font-weight: '600'; font-style: 'italic'; -} +} */ @font-face { font-family: 'Riegraf'; @@ -56,12 +56,12 @@ font-style: 'normal'; } -@font-face { +/* @font-face { font-family: 'Riegraf'; src: url('/fonts/riegraf/Riegraf-Regular-Italic.otf'); font-weight: '400'; font-style: 'italic'; -} +} */ @font-face { font-family: 'Riegraf'; diff --git a/src/css/infma-overrides.css b/src/css/infma-overrides.css new file mode 100644 index 0000000000..05853c06fc --- /dev/null +++ b/src/css/infma-overrides.css @@ -0,0 +1,102 @@ +/* Box sizing rules */ +*, +*::before, +*::after { + box-sizing: border-box; +} + +/* Remove default padding */ +ul[class], +ol[class] { + padding: 0; +} + +/* Remove default margin */ +body, +h1, +h2, +h3, +h4, +p, +ul[class], +ol[class], +li, +figure, +figcaption, +blockquote, +dl, +dd { + margin: 0; +} + +/* Set core body defaults */ +body { + min-height: 100vh; + scroll-behavior: smooth; + text-rendering: optimizeSpeed; + line-height: 1.5; +} + +/* Remove list styles on ul, ol elements with a class attribute */ +ul[class], +ol[class] { + list-style: none; +} + +/* A elements that don't have a class get default styles */ +a:not([class]) { + text-decoration-skip-ink: auto; +} + +/* Make images easier to work with */ +img { + max-width: 100%; + display: block; +} + +/* Natural flow and rhythm in articles by default */ +article > * + * { + margin-top: 1em; +} + +/* Inherit fonts for inputs and buttons */ +input, +button, +textarea, +select { + font: inherit; +} + +/* Remove all animations and transitions for people that prefer not to see them */ +@media (prefers-reduced-motion: reduce) { + * { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + scroll-behavior: auto !important; + } +} + +button { + text-rendering: unset; + color: unset; + letter-spacing: unset; + word-spacing: unset; + line-height: unset; + text-transform: unset; + text-indent: unset; + text-shadow: unset; + display: unset; + text-align: unset; + align-items: unset; + cursor: pointer; + box-sizing: unset; + background-color: unset; + margin: unset; + padding-block: unset; + padding-inline: unset; + border-width: unset; + border-style: unset; + border-color: unset; + border-image: unset; +} diff --git a/src/css/types.css b/src/css/types.css index c96aafc958..ae8532769d 100644 --- a/src/css/types.css +++ b/src/css/types.css @@ -4,7 +4,6 @@ .serif-heading-0 { @apply font-riegraf; font-size: 4rem; - font-style: normal; font-weight: 300; line-height: 4rem; letter-spacing: -0.08rem; @@ -15,7 +14,6 @@ .heading-0 { @apply font-basel-grotesk; font-size: 4rem; - font-style: normal; font-weight: 485; line-height: 4rem; letter-spacing: -0.08rem; @@ -26,7 +24,6 @@ .heading-1 { @apply font-basel-grotesk; font-size: 3.25rem; - font-style: normal; font-weight: 485; line-height: 3.75rem; -webkit-font-smoothing: antialiased; @@ -36,7 +33,6 @@ .serif-heading-2 { @apply font-riegraf; font-size: 2.25rem; - font-style: normal; font-weight: 300; line-height: 2.75rem; -webkit-font-smoothing: antialiased; @@ -46,7 +42,6 @@ .heading-2 { @apply font-basel-grotesk; font-size: 2.25rem; - font-style: normal; font-weight: 485; line-height: 2.75rem; -webkit-font-smoothing: antialiased; @@ -56,7 +51,6 @@ .heading-3 { @apply font-basel-grotesk; font-size: 1.5rem; - font-style: normal; font-weight: 485; line-height: 2rem; -webkit-font-smoothing: antialiased; @@ -66,7 +60,6 @@ .heading-4 { @apply font-basel-grotesk; font-size: 1.25rem; - font-style: normal; font-weight: 485; line-height: 1.625rem; -webkit-font-smoothing: antialiased; @@ -76,7 +69,6 @@ .serif-subheading-1 { @apply font-riegraf; font-size: 1.125rem; - font-style: normal; font-weight: 400; line-height: 1.25rem; -webkit-font-smoothing: antialiased; @@ -86,7 +78,6 @@ .subheading-1 { @apply font-basel-grotesk; font-size: 1.125rem; - font-style: normal; font-weight: 485; line-height: 1.5rem; -webkit-font-smoothing: antialiased; @@ -96,7 +87,6 @@ .subheading-2 { @apply font-basel-grotesk; font-size: 1rem; - font-style: normal; font-weight: 485; line-height: 1.5rem; -webkit-font-smoothing: antialiased; @@ -106,7 +96,6 @@ .body-1 { @apply font-basel-grotesk; font-size: 1.125rem; - font-style: normal; font-weight: 485; line-height: 1.5rem; -webkit-font-smoothing: antialiased; @@ -116,7 +105,6 @@ .body-2 { @apply font-basel-grotesk; font-size: 1rem; - font-style: normal; font-weight: 485; line-height: 1/5rem; -webkit-font-smoothing: antialiased; @@ -126,7 +114,6 @@ .body-3 { @apply font-basel-grotesk; font-size: 0.875rem; - font-style: normal; font-weight: 485; line-height: 1/25rem; -webkit-font-smoothing: antialiased; @@ -136,7 +123,6 @@ .body-4 { @apply font-basel-grotesk; font-size: 0.75rem; - font-style: normal; font-weight: 485; line-height: 1rem; -webkit-font-smoothing: antialiased; @@ -146,7 +132,6 @@ .serif-caption-1 { @apply font-riegraf; font-size: 0.875rem; - font-style: normal; font-weight: 400; line-height: 1.25rem; -webkit-font-smoothing: antialiased; @@ -156,7 +141,6 @@ .caption-1 { @apply font-fragment-mono; font-size: 0.8125rem; - font-style: normal; font-weight: 400; line-height: 1.25rem; -webkit-font-smoothing: antialiased; @@ -186,7 +170,6 @@ .button-label-1 { @apply font-basel-grotesk; font-size: 1.125rem; - font-style: normal; font-weight: 600; line-height: 1.5rem; -webkit-font-smoothing: antialiased; @@ -196,7 +179,6 @@ .button-label-2 { @apply font-basel-grotesk; font-size: 1rem; - font-style: normal; font-weight: 600; line-height: 1.5rem; -webkit-font-smoothing: antialiased; @@ -206,7 +188,6 @@ .button-label-3 { @apply font-basel-grotesk; font-size: 0.875rem; - font-style: normal; font-weight: 600; line-height: 1.25rem; -webkit-font-smoothing: antialiased; @@ -216,7 +197,6 @@ .button-label-4 { @apply font-basel-grotesk; font-size: 0.75rem; - font-style: normal; font-weight: 600; line-height: 1rem; -webkit-font-smoothing: antialiased; diff --git a/src/theme/Navbar.tsx b/src/theme/Navbar.tsx new file mode 100644 index 0000000000..bd4086faf0 --- /dev/null +++ b/src/theme/Navbar.tsx @@ -0,0 +1,38 @@ +import React from 'react' + +import OriginalSearchbar from '@theme-original/SearchBar' +import { MiniUnicon, Menu } from '../components/Icons' +import ThemeSwitch from '../components/ThemeSwitch' + +export default function Navbar(props: { className: string; label: string }) { + return ( + + ) +} diff --git a/src/theme/NavbarItem.tsx b/src/theme/NavbarItem.tsx deleted file mode 100644 index be213947ad..0000000000 --- a/src/theme/NavbarItem.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { useLocation } from '@docusaurus/router' -import OriginalNavBarItem from '@theme-original/NavbarItem' -import { TraceEvent } from '@uniswap/analytics' -import { BrowserEvent, DocsProtocolVersion, SharedEventName } from '@uniswap/analytics-events' -import React from 'react' - -enum ProtocolVersion { - V1 = 'V1', - V2 = 'V2', - V3 = 'V3', -} - -const UNKNOWN_PROTOCOL_VERSION = 'UNKNOWN_PROTOCOL_VERSION' - -const getSection = (version: string) => { - switch (version) { - case ProtocolVersion.V1: - return DocsProtocolVersion.V1 - case ProtocolVersion.V2: - return DocsProtocolVersion.V2 - case ProtocolVersion.V3: - return DocsProtocolVersion.V3 - default: - return UNKNOWN_PROTOCOL_VERSION - } -} - -const getSelectedDocVersion = (docVersion: string) => { - switch (docVersion) { - case ProtocolVersion.V1: - case '1.0.0': - return ProtocolVersion.V1 - case ProtocolVersion.V2: - case '2.0.0': - return ProtocolVersion.V2 - // Default to the current doc version - default: - return ProtocolVersion.V3 - } -} - -const getClassName = (className: string, version: string) => { - return className + ' ' + version -} - -export default function NavbarItem(props: { className: string; label: string }) { - const { pathname } = useLocation() - - const docVersionFromPath = pathname.split('/') - const selectedDocVersion = getSelectedDocVersion(docVersionFromPath[2]) - - return ( - <> - - - - - ) -} diff --git a/src/utils/storage.ts b/src/utils/storage.ts new file mode 100644 index 0000000000..cd7c54c65b --- /dev/null +++ b/src/utils/storage.ts @@ -0,0 +1,33 @@ +import Cookies from 'js-cookie' + +export class StorageManager { + key: string + + constructor(key: string) { + this.key = key + } + + set(value: T): void { + const valueToSet = JSON.stringify(value) + Cookies.set(this.key, valueToSet, { expires: 365 }) + } + + get(): T | undefined { + const value = Cookies.get(this.key) + + if (value) { + return JSON.parse(value) + } + + return undefined + } + + remove(): void { + Cookies.remove(this.key) + } +} + +export type Theme = 'dark' | 'light' + +const THEME_STORAGE_NAME = 'uniswap-ui-theme' +export const ThemeManager = new StorageManager(THEME_STORAGE_NAME) diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Book-Italic.otf b/static/fonts/Basel-Grotesk-Book-Italic.otf similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Book-Italic.otf rename to static/fonts/Basel-Grotesk-Book-Italic.otf diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Book-Italic.woff b/static/fonts/Basel-Grotesk-Book-Italic.woff similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Book-Italic.woff rename to static/fonts/Basel-Grotesk-Book-Italic.woff diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Book-Italic.woff2 b/static/fonts/Basel-Grotesk-Book-Italic.woff2 similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Book-Italic.woff2 rename to static/fonts/Basel-Grotesk-Book-Italic.woff2 diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Book.otf b/static/fonts/Basel-Grotesk-Book.otf similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Book.otf rename to static/fonts/Basel-Grotesk-Book.otf diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Book.woff b/static/fonts/Basel-Grotesk-Book.woff similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Book.woff rename to static/fonts/Basel-Grotesk-Book.woff diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Book.woff2 b/static/fonts/Basel-Grotesk-Book.woff2 similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Book.woff2 rename to static/fonts/Basel-Grotesk-Book.woff2 diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Medium-Italic.otf b/static/fonts/Basel-Grotesk-Medium-Italic.otf similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Medium-Italic.otf rename to static/fonts/Basel-Grotesk-Medium-Italic.otf diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Medium-Italic.woff b/static/fonts/Basel-Grotesk-Medium-Italic.woff similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Medium-Italic.woff rename to static/fonts/Basel-Grotesk-Medium-Italic.woff diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Medium-Italic.woff2 b/static/fonts/Basel-Grotesk-Medium-Italic.woff2 similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Medium-Italic.woff2 rename to static/fonts/Basel-Grotesk-Medium-Italic.woff2 diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Medium.otf b/static/fonts/Basel-Grotesk-Medium.otf similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Medium.otf rename to static/fonts/Basel-Grotesk-Medium.otf diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Medium.woff b/static/fonts/Basel-Grotesk-Medium.woff similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Medium.woff rename to static/fonts/Basel-Grotesk-Medium.woff diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Medium.woff2 b/static/fonts/Basel-Grotesk-Medium.woff2 similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Medium.woff2 rename to static/fonts/Basel-Grotesk-Medium.woff2 diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Regular-Italic.otf b/static/fonts/Basel-Grotesk-Regular-Italic.otf similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Regular-Italic.otf rename to static/fonts/Basel-Grotesk-Regular-Italic.otf diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Regular-Italic.woff b/static/fonts/Basel-Grotesk-Regular-Italic.woff similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Regular-Italic.woff rename to static/fonts/Basel-Grotesk-Regular-Italic.woff diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Regular-Italic.woff2 b/static/fonts/Basel-Grotesk-Regular-Italic.woff2 similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Regular-Italic.woff2 rename to static/fonts/Basel-Grotesk-Regular-Italic.woff2 diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Regular.otf b/static/fonts/Basel-Grotesk-Regular.otf similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Regular.otf rename to static/fonts/Basel-Grotesk-Regular.otf diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Regular.woff b/static/fonts/Basel-Grotesk-Regular.woff similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Regular.woff rename to static/fonts/Basel-Grotesk-Regular.woff diff --git a/static/fonts/baselGrotesk/Basel-Grotesk-Regular.woff2 b/static/fonts/Basel-Grotesk-Regular.woff2 similarity index 100% rename from static/fonts/baselGrotesk/Basel-Grotesk-Regular.woff2 rename to static/fonts/Basel-Grotesk-Regular.woff2 diff --git a/tailwind.config.js b/tailwind.config.js index 2027474462..c02a64054d 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -72,8 +72,7 @@ module.exports = { 'gap-medium': rem(12), 'gap-small': rem(8), 'gap-x-small': rem(4), - 'mobile-nav-h': rem(72), - 'nav-h': rem(59), + 'nav-h': rem(72), }, boxShadow: { 'light-short': '0px 1px 6px 2px rgba(0, 0, 0, 0.03), 0px 1px 2px 0px rgba(0, 0, 0, 0.02)', diff --git a/yarn.lock b/yarn.lock index 7b4f244640..e6c7bd6e25 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1691,6 +1691,42 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@floating-ui/core@^1.6.0": + version "1.6.8" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.8.tgz#aa43561be075815879305965020f492cdb43da12" + integrity sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA== + dependencies: + "@floating-ui/utils" "^0.2.8" + +"@floating-ui/dom@^1.0.0": + version "1.6.12" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.12.tgz#6333dcb5a8ead3b2bf82f33d6bc410e95f54e556" + integrity sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w== + dependencies: + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.8" + +"@floating-ui/react-dom@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31" + integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== + dependencies: + "@floating-ui/dom" "^1.0.0" + +"@floating-ui/react@^0.26.16": + version "0.26.27" + resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.27.tgz#402f7b4b2702650662705fe9cbe0f1d5607846a1" + integrity sha512-jLP72x0Kr2CgY6eTYi/ra3VA9LOkTo4C+DUTrbFgFOExKy3omYVmwMjNKqxAHdsnyLS96BIDLcO2SlnsNf8KUQ== + dependencies: + "@floating-ui/react-dom" "^2.1.2" + "@floating-ui/utils" "^0.2.8" + tabbable "^6.0.0" + +"@floating-ui/utils@^0.2.8": + version "0.2.8" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62" + integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== + "@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": version "9.3.0" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" @@ -1703,6 +1739,16 @@ dependencies: "@hapi/hoek" "^9.0.0" +"@headlessui/react@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-2.2.0.tgz#a8e32f0899862849a1ce1615fa280e7891431ab7" + integrity sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ== + dependencies: + "@floating-ui/react" "^0.26.16" + "@react-aria/focus" "^3.17.1" + "@react-aria/interactions" "^3.21.3" + "@tanstack/react-virtual" "^3.8.1" + "@humanwhocodes/config-array@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" @@ -1859,6 +1905,57 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.28.tgz#d45e01c4a56f143ee69c54dd6b12eade9e270a73" integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw== +"@react-aria/focus@^3.17.1": + version "3.18.4" + resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.18.4.tgz#a6e95896bc8680d1b5bcd855e983fc2c195a1a55" + integrity sha512-91J35077w9UNaMK1cpMUEFRkNNz0uZjnSwiyBCFuRdaVuivO53wNC9XtWSDNDdcO5cGy87vfJRVAiyoCn/mjqA== + dependencies: + "@react-aria/interactions" "^3.22.4" + "@react-aria/utils" "^3.25.3" + "@react-types/shared" "^3.25.0" + "@swc/helpers" "^0.5.0" + clsx "^2.0.0" + +"@react-aria/interactions@^3.21.3", "@react-aria/interactions@^3.22.4": + version "3.22.4" + resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.22.4.tgz#88ed61ab6a485f869bc1f65ae6688d48ca96064b" + integrity sha512-E0vsgtpItmknq/MJELqYJwib+YN18Qag8nroqwjk1qOnBa9ROIkUhWJerLi1qs5diXq9LHKehZDXRlwPvdEFww== + dependencies: + "@react-aria/ssr" "^3.9.6" + "@react-aria/utils" "^3.25.3" + "@react-types/shared" "^3.25.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/ssr@^3.9.6": + version "3.9.6" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.6.tgz#a9e8b351acdc8238f2b5215b0ce904636c6ea690" + integrity sha512-iLo82l82ilMiVGy342SELjshuWottlb5+VefO3jOQqQRNYnJBFpUSadswDPbRimSgJUZuFwIEYs6AabkP038fA== + dependencies: + "@swc/helpers" "^0.5.0" + +"@react-aria/utils@^3.25.3": + version "3.25.3" + resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.25.3.tgz#cad9bffc07b045cdc283df2cb65c18747acbf76d" + integrity sha512-PR5H/2vaD8fSq0H/UB9inNbc8KDcVmW6fYAfSWkkn+OAdhTTMVKqXXrZuZBWyFfSD5Ze7VN6acr4hrOQm2bmrA== + dependencies: + "@react-aria/ssr" "^3.9.6" + "@react-stately/utils" "^3.10.4" + "@react-types/shared" "^3.25.0" + "@swc/helpers" "^0.5.0" + clsx "^2.0.0" + +"@react-stately/utils@^3.10.4": + version "3.10.4" + resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.10.4.tgz#310663a834b67048d305e1680ed258130092fe51" + integrity sha512-gBEQEIMRh5f60KCm7QKQ2WfvhB2gLUr9b72sqUdIZ2EG+xuPgaIlCBeSicvjmjBvYZwOjoOEnmIkcx2GHp/HWw== + dependencies: + "@swc/helpers" "^0.5.0" + +"@react-types/shared@^3.25.0": + version "3.25.0" + resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.25.0.tgz#7223baf72256e918a3c29081bb1ecc6fad4fbf58" + integrity sha512-OZSyhzU6vTdW3eV/mz5i6hQwQUhkRs7xwY2d1aqPvTdMe0+2cY7Fwp45PAiwYLEj73i9ro2FxF9qC4DvHGSCgQ== + "@saucelabs/theme-github-codeblock@https://github.com/Uniswap/docusaurus-theme-github-codeblock.git#f55fe4caed9fce974c9b82bf2164f76cc5509eef": version "0.2.0" resolved "https://github.com/Uniswap/docusaurus-theme-github-codeblock.git#f55fe4caed9fce974c9b82bf2164f76cc5509eef" @@ -2005,6 +2102,13 @@ "@svgr/plugin-jsx" "^6.5.1" "@svgr/plugin-svgo" "^6.5.1" +"@swc/helpers@^0.5.0": + version "0.5.15" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" + integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== + dependencies: + tslib "^2.8.0" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -2012,6 +2116,18 @@ dependencies: defer-to-connect "^1.0.1" +"@tanstack/react-virtual@^3.8.1": + version "3.10.9" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.10.9.tgz#40606b6dd8aba8e977f576d8f7df07f69ca63eea" + integrity sha512-OXO2uBjFqA4Ibr2O3y0YMnkrRWGVNqcvHQXmGvMu6IK8chZl3PrDxFXdGZ2iZkSrKh3/qUYoFqYe+Rx23RoU0g== + dependencies: + "@tanstack/virtual-core" "3.10.9" + +"@tanstack/virtual-core@3.10.9": + version "3.10.9" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.10.9.tgz#55710c92b311fdaa8d8c66682a0dbdd684bc77c4" + integrity sha512-kBknKOKzmeR7lN+vSadaKWXaLS0SZZG+oqpQ/k80Q6g9REn6zRHS/ZYdrIzHnpHgy/eWs00SujveUN/GJT2qTw== + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" @@ -3280,6 +3396,11 @@ ci-info@^3.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== +classnames@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== + clean-css@^5.2.2, clean-css@^5.3.0: version "5.3.3" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" @@ -3332,6 +3453,11 @@ clsx@^1.1.1, clsx@^1.2.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== +clsx@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" @@ -5940,6 +6066,11 @@ joi@^17.6.0: "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" +js-cookie@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" + integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -8721,6 +8852,11 @@ svgo@^2.7.0, svgo@^2.8.0: picocolors "^1.0.0" stable "^0.1.8" +tabbable@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" + integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== + table@^6.0.9: version "6.8.2" resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" @@ -8892,6 +9028,11 @@ tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.4.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== +tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"