diff --git a/.github/workflows/docs-validation.yml b/.github/workflows/docs-validation.yml index 77dad776b8..247eb39343 100644 --- a/.github/workflows/docs-validation.yml +++ b/.github/workflows/docs-validation.yml @@ -12,53 +12,53 @@ on: - main jobs: -link-check: - name: Broken link checker - runs-on: ubuntu-latest + link-check: + name: Broken link checker + runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 + steps: + - name: Checkout code + uses: actions/checkout@v4 - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: "20" - cache: "pnpm" + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "pnpm" - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Install dependencies + run: pnpm install --frozen-lockfile - - name: Build static site - run: pnpm build + - name: Build static site + run: pnpm build - - name: Set up Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable + - name: Set up Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable - - name: Install lychee - run: cargo install lychee + - name: Install lychee + run: cargo install lychee - - name: Check links - run: lychee --verbose --no-progress './out/**/*.html' + - name: Check links + run: lychee --verbose --no-progress './out/**/*.html' -code-validate: - name: Code snippet and GraphQL validation - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 + code-validate: + name: Code snippet and GraphQL validation + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - cache: "pnpm" + - uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "pnpm" - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Install dependencies + run: pnpm install --frozen-lockfile - - name: Run validation w/ annotations - run: pnpm lint:docs:ci + - name: Run validation w/ annotations + run: pnpm lint:docs:ci - - name: Validate code snippets - run: pnpm validate:snippets + - name: Validate code snippets + run: pnpm validate:snippets diff --git a/.vscode/settings.json b/.vscode/settings.json index 02d49400e5..e746d28ff4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,5 +9,8 @@ "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "tailwindCSS.classFunctions": ["clsx"] + "tailwindCSS.classFunctions": ["clsx"], + "editor.quickSuggestions": { + "strings": "on" + } } diff --git a/next.config.js b/next.config.js index 55ac068367..8d7395ddb3 100644 --- a/next.config.js +++ b/next.config.js @@ -1,18 +1,28 @@ /* eslint-env node */ +// @ts-check import nextra from "nextra" import path from "node:path" import withLess from "next-with-less" -import { remarkGraphiQLComment } from "./src/remark-graphiql-comment.js" +import nextBundleAnalyzer from "@next/bundle-analyzer" import fs from "fs" +import rehypeMermaid from "rehype-mermaid" + +import { remarkGraphiQLComment } from "./src/remark-graphiql-comment.js" +import { syntaxHighlightingThemes } from "./src/_design-system/syntax/index.js" const vercelJSON = JSON.parse(fs.readFileSync("./vercel.json", "utf-8")) const withNextra = nextra({ + autoImportThemeStyle: false, theme: "nextra-theme-docs", themeConfig: "./theme.config.tsx", mdxOptions: { remarkPlugins: [remarkGraphiQLComment], + rehypePlugins: [mermaidConfig()], + rehypePrettyCodeOptions: { + theme: syntaxHighlightingThemes, + }, }, }) @@ -23,131 +33,184 @@ const ALLOWED_SVG_REGEX = new RegExp(`${sep}icons${sep}.+\\.svg$`) /** * @type {import('next').NextConfig} */ -export default withLess( - withNextra({ - // reactStrictMode: true, provoke duplicated codemirror editors - webpack(config) { - // #region MDX - const mdxRule = config.module.rules.find(rule => - rule.test?.test?.(".mdx"), - ) - if (mdxRule) { - mdxRule.resourceQuery = { - not: /raw/, - } +const config = { + // reactStrictMode: true, provoke duplicated codemirror editors + webpack(config) { + // #region MDX + const mdxRule = config.module.rules.find(rule => rule.test?.test?.(".mdx")) + if (mdxRule) { + mdxRule.resourceQuery = { + not: /raw/, } - // Instead of transforming MDX, with ?source we can get - // the raw content to process in a Server Component. - config.module.rules.push({ - test: /\.mdx$/i, - resourceQuery: /raw/, - type: "asset/source", - }) - // #endregion MDX + } + // Instead of transforming MDX, with ?source we can get + // the raw content to process in a Server Component. + config.module.rules.push({ + test: /\.mdx$/i, + resourceQuery: /raw/, + type: "asset/source", + }) + // #endregion MDX - // #region SVGs - const fileLoaderRule = config.module.rules.find(rule => - rule.test?.test?.(".svg"), - ) + // #region SVGs + const fileLoaderRule = config.module.rules.find(rule => + rule.test?.test?.(".svg"), + ) - fileLoaderRule.exclude = /\.svg$/i + fileLoaderRule.exclude = /\.svg$/i - config.module.rules.push( - // All .svg from /icons/ and with ?svgr are going to be processed by @svgr/webpack - { - test: ALLOWED_SVG_REGEX, - use: ["@svgr/webpack"], - }, - { - test: /\.svg$/i, - exclude: ALLOWED_SVG_REGEX, - resourceQuery: /svgr/, - use: [ - { - loader: "@svgr/webpack", - options: { - dimensions: false, // **adds** viewBox. + config.module.rules.push( + // All .svg from /icons/ and with ?svgr are going to be processed by @svgr/webpack + { + test: ALLOWED_SVG_REGEX, + use: ["@svgr/webpack"], + }, + { + test: /\.svg$/i, + exclude: ALLOWED_SVG_REGEX, + resourceQuery: /svgr/, + use: [ + { + loader: "@svgr/webpack", + options: { + typescript: true, + svgoConfig: { + plugins: [ + { + name: "preset-default", + params: { + overrides: { + minifyStyles: false, + removeViewBox: false, + removeTitle: false, + }, + }, + }, + "removeXMLNS", + "removeXlink", + "prefixIds", + ], }, }, - ], - }, - // Otherwise, we use the default file loader - { - ...fileLoaderRule, - test: /\.svg$/i, - exclude: ALLOWED_SVG_REGEX, - resourceQuery: { - not: [...fileLoaderRule.resourceQuery.not, /svgr/], }, + ], + }, + // Otherwise, we use the default file loader + { + ...fileLoaderRule, + test: /\.svg$/i, + exclude: ALLOWED_SVG_REGEX, + resourceQuery: { + not: [...fileLoaderRule.resourceQuery.not, /svgr/], }, - ) - // #endregion SVGs + }, + ) + // #endregion SVGs - return config - }, - // Comment this out if you're working on OG images. - output: "export", - images: { - loader: "custom", - imageSizes: [16, 32, 48, 64, 96, 128, 256, 384], - deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840], - }, - transpilePackages: ["next-image-export-optimizer"], - env: { - nextImageExportOptimizer_imageFolderPath: "public/images", - nextImageExportOptimizer_exportFolderPath: "out", - nextImageExportOptimizer_quality: "75", - nextImageExportOptimizer_storePicturesInWEBP: "true", - nextImageExportOptimizer_exportFolderName: "nextImageExportOptimizer", - // If you do not want to use blurry placeholder images, then you can set - // nextImageExportOptimizer_generateAndUseBlurImages to false and pass - // `placeholder="empty"` to all components. - nextImageExportOptimizer_generateAndUseBlurImages: "true", - // If you want to cache the remote images, you can set the time to live of the cache in seconds. - // The default value is 0 seconds. - nextImageExportOptimizer_remoteImageCacheTTL: "0", - NEXT_PUBLIC_GA_ID: - process.env.NODE_ENV === "production" ? "UA-44373548-16" : "", - }, - headers: async () => { - return [ - { - source: "/graphql", - headers: [ - { - key: "Access-Control-Allow-Origin", - value: "*", - }, - { - key: "Access-Control-Allow-Methods", - value: "GET, POST, OPTIONS", - }, - { - key: "Access-Control-Allow-Headers", - value: "Content-Type", - }, - ], - }, - ] - }, - trailingSlash: true, - // Only for local development, skip 200 statusCode due following error: - // - // `statusCode` is not undefined or valid statusCode for route {"source":"/conf/attendee/:path*","destination":"https://graphql-conf-attendee-nextjs.vercel.app/:path*","statusCode":200} - // `statusCode` is not undefined or valid statusCode for route {"source":"/swapi-graphql/:path*","destination":"https://graphql.github.io/swapi-graphql/:path*","statusCode":200} - // Valid redirect statusCode values are 301, 302, 303, 307, 308 - redirects: () => vercelJSON.redirects.filter(o => o.statusCode !== 200), - async rewrites() { - return [ - { - source: "/swapi-graphql/:path*", - destination: "https://swapi-graphql.netlify.app/:path*", - }, - { - source: "/graphql", - destination: "https://swapi-graphql.netlify.app/graphql", + return config + }, + // Comment this out if you're working on OG images. + output: "export", + images: { + loader: "custom", + imageSizes: [16, 32, 48, 64, 96, 128, 256, 384], + deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840], + }, + transpilePackages: ["next-image-export-optimizer"], + env: { + nextImageExportOptimizer_imageFolderPath: "public/images", + nextImageExportOptimizer_exportFolderPath: "out", + nextImageExportOptimizer_quality: "75", + nextImageExportOptimizer_storePicturesInWEBP: "true", + nextImageExportOptimizer_exportFolderName: "nextImageExportOptimizer", + // If you do not want to use blurry placeholder images, then you can set + // nextImageExportOptimizer_generateAndUseBlurImages to false and pass + // `placeholder="empty"` to all components. + nextImageExportOptimizer_generateAndUseBlurImages: "true", + // If you want to cache the remote images, you can set the time to live of the cache in seconds. + // The default value is 0 seconds. + nextImageExportOptimizer_remoteImageCacheTTL: "0", + NEXT_PUBLIC_GA_ID: + process.env.NODE_ENV === "production" ? "UA-44373548-16" : "", + }, + headers: async () => { + return [ + { + source: "/graphql", + headers: [ + { + key: "Access-Control-Allow-Origin", + value: "*", + }, + { + key: "Access-Control-Allow-Methods", + value: "GET, POST, OPTIONS", + }, + { + key: "Access-Control-Allow-Headers", + value: "Content-Type", + }, + ], + }, + ] + }, + trailingSlash: true, + // Only for local development, skip 200 statusCode due following error: + // + // `statusCode` is not undefined or valid statusCode for route {"source":"/conf/attendee/:path*","destination":"https://graphql-conf-attendee-nextjs.vercel.app/:path*","statusCode":200} + // `statusCode` is not undefined or valid statusCode for route {"source":"/swapi-graphql/:path*","destination":"https://graphql.github.io/swapi-graphql/:path*","statusCode":200} + // Valid redirect statusCode values are 301, 302, 303, 307, 308 + redirects: () => vercelJSON.redirects.filter(o => o.statusCode !== 200), + async rewrites() { + return [ + { + source: "/swapi-graphql/:path*", + destination: "https://swapi-graphql.netlify.app/:path*", + }, + { + source: "/graphql", + destination: "https://swapi-graphql.netlify.app/graphql", + }, + ] + }, +} + +const withBundleAnalyzer = nextBundleAnalyzer({ + enabled: process.env.ANALYZE === "true", +}) + +export default withBundleAnalyzer(withLess(withNextra(config))) + +function mermaidConfig() { + return [ + rehypeMermaid, + /** @type {import("rehype-mermaid").RehypeMermaidOptions} */ ({ + mermaidConfig: { + fontFamily: "var(--font-sans)", // we can't use monospace here because it's way too wide + theme: "null", + look: "classic", + flowchart: { + defaultRenderer: "elk", + padding: 6, }, - ] - }, - }), -) + themeCSS: ` + .node rect { + fill: var(--mermaid-node-fill); + stroke: var(--mermaid-node-stroke); + } + .label text, span { + fill: hsl(var(--color-neu-900)); + color: hsl(var(--color-neu-900)); + } + .flowchart-link { + stroke: var(--mermaid-arrow); + } + .marker { + stroke: var(--mermaid-arrow); + fill: var(--mermaid-arrow); + } + `, + }, + }), + ] +} diff --git a/package.json b/package.json index ffa6b624ab..b50ebe9a81 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "private": true, "packageManager": "pnpm@9.15.9", "scripts": { + "analyze": "ANALYZE=true next build", "build": "next build && next-image-export-optimizer", "check:links": "lychee --verbose --no-progress './src/pages/**/*.mdx' --base https://graphql.org", "dev": "next", @@ -15,14 +16,18 @@ "lint:docs:ci": "eslint --ignore-path .gitignore src/pages/learn --format eslint-formatter-github", "postbuild": "next-sitemap", "prebuild": "tsx src/get-github-info.ts", - "start": "next start", - "test": "echo \"no tests\" && exit 1", + "serve": "pnpx serve out", + "test": "playwright test", + "test:ui": "playwright test --ui", "validate:snippets": "node scripts/validate-snippets.js" }, "dependencies": { "@graphql-tools/schema": "10.0.25", "@headlessui/react": "^2.2.4", + "@igorkowalczyk/is-browser": "^5.1.0", + "@next/bundle-analyzer": "^15.4.5", "@radix-ui/react-radio-group": "^1.2.2", + "@sparticuz/chromium": "^138.0.2", "@tailwindcss/container-queries": "^0.1.1", "@tailwindcss/nesting": "0.0.0-insiders.565cd3e", "@tailwindcss/typography": "^0.5.15", @@ -48,16 +53,19 @@ "next-query-params": "^5.0.1", "next-sitemap": "^4.2.3", "next-with-less": "^3.0.1", - "nextra": "3.0.0-alpha.28", - "nextra-theme-docs": "3.0.0-alpha.28", + "nextra": "3.3.1", + "nextra-theme-docs": "3.3.1", "numbro": "2.5.0", "p-limit": "^4.0.0", "parser-front-matter": "1.6.4", + "playwright-core": "^1.54.2", "postcss": "^8.4.49", + "postcss-import": "^16.1.1", "react": "^18.3.1", "react-dom": "^18.3.1", "react-medium-image-zoom": "5.2.13", "react-use-measure": "^2.1.7", + "rehype-mermaid": "^3.0.0", "rss": "1.2.2", "server-only": "0.0.1", "string-similarity": "^4.0.4", @@ -68,9 +76,13 @@ "unist-util-visit": "^5.0.0", "use-query-params": "^2.2.1" }, + "optionalDependencies": { + "playwright": "^1.54.2" + }, "devDependencies": { "@graphql-eslint/eslint-plugin": "4.4.0", "@next/eslint-plugin-next": "^15.3.3", + "@playwright/test": "^1.54.2", "@svgr/webpack": "^8.1.0", "@types/codemirror": "5.60.16", "@types/hast": "3.0.4", @@ -95,9 +107,20 @@ "tsx": "^4.19.4", "typescript": "^5.8.3" }, + "browserslist": [ + "chrome >0 and last 2.5 years", + "edge >0 and last 2.5 years", + "safari >0 and last 2.5 years", + "firefox >0 and last 2.5 years", + "and_chr >0 and last 2.5 years", + "and_ff >0 and last 2.5 years", + "ios >0 and last 2.5 years" + ], "pnpm": { "patchedDependencies": { - "nextra@3.0.0-alpha.28": "patches/nextra@3.0.0-alpha.22.patch" + "nextra": "patches/nextra.patch", + "nextra-theme-docs": "patches/nextra-theme-docs.patch", + "mermaid-isomorphic": "patches/mermaid-isomorphic.patch" } } } diff --git a/patches/mermaid-isomorphic.patch b/patches/mermaid-isomorphic.patch new file mode 100644 index 0000000000..55b3a3a3f5 --- /dev/null +++ b/patches/mermaid-isomorphic.patch @@ -0,0 +1,44 @@ +diff --git a/dist/mermaid-isomorphic.js b/dist/mermaid-isomorphic.js +index aa5dc09a5dfb58a98d3f12cd2fc473caddd97b0d..d0fa3ca8e690233d0b50e4f992ab6ac33c11585b 100644 +--- a/dist/mermaid-isomorphic.js ++++ b/dist/mermaid-isomorphic.js +@@ -1,4 +1,5 @@ +-import { chromium } from 'playwright'; ++import { chromium as playwright } from 'playwright'; ++import chromium from '@sparticuz/chromium'; + const html = import.meta.resolve('../index.html'); + const mermaidScript = { + url: import.meta.resolve('mermaid/dist/mermaid.js') +@@ -7,6 +8,9 @@ const faStyle = { + // We use url, not path. If we use path, the fonts can’t be resolved. + url: import.meta.resolve('@fortawesome/fontawesome-free/css/all.css') + }; ++ ++chromium.setGraphicsMode = false; ++ + /* c8 ignore start */ + /** + * Render mermaid diagrams in the browser. +@@ -122,7 +126,21 @@ async function getBrowser(browserType, launchOptions) { + * A function that renders Mermaid diagrams in the browser. + */ + export function createMermaidRenderer(options = {}) { +- const { browserType = chromium, launchOptions } = options; ++ let { browserType = playwright, launchOptions } = options; ++ ++ if (process.env.CI) { ++ if (options.browserType) { ++ throw new Error('options.browserType is not supported because @hasparus patched it to run on Vercel builds, sorry'); ++ } ++ browserType = { ++ launch: async () => playwright.launch({ ++ ...launchOptions, ++ args: chromium.args, ++ executablePath: await chromium.executablePath(), ++ }) ++ } ++ } ++ + let browserPromise; + let count = 0; + return async (diagrams, renderOptions) => { diff --git a/patches/nextra-theme-docs.patch b/patches/nextra-theme-docs.patch new file mode 100644 index 0000000000..b6375d172f --- /dev/null +++ b/patches/nextra-theme-docs.patch @@ -0,0 +1,43 @@ +diff --git a/dist/index.d.mts b/dist/index.d.mts +index 71f87bcd1dde49d7c19ad49fc098e715a76c5c10..6671e29326be99861058895916185910452ced17 100644 +--- a/dist/index.d.mts ++++ b/dist/index.d.mts +@@ -1421,3 +1421,19 @@ declare function ThemeSwitch({ lite, className }: ThemeSwitchProps): ReactElemen + declare function Layout({ children, themeConfig, pageOpts }: NextraThemeLayoutProps): ReactElement; + + export { Bleed, Collapse, type PartialDocsThemeConfig as DocsThemeConfig, Link, LocaleSwitch, Navbar, NotFoundPage, SkipNavContent, SkipNavLink, ThemeSwitch, Layout as default, getComponents, useConfig, useMenu, useThemeConfig }; ++ ++export type ActiveAnchor = Record< ++ string, ++ { ++ isActive?: boolean ++ aboveHalfViewport: boolean ++ index: number ++ insideHalfViewport: boolean ++ } ++> ++ ++export declare const useActiveAnchor: () => ActiveAnchor ++export declare const useSetActiveAnchor: () => Dispatch> ++export declare const useIntersectionObserver: () => IntersectionObserver | null ++export declare const useSlugs: () => WeakMap ++ +diff --git a/dist/index.js b/dist/index.js +index 56201641fd965dcc5ab7c5df53e444c41293c00e..860b8cfd297e82da041c4d8287ed266691d75a0e 100644 +--- a/dist/index.js ++++ b/dist/index.js +@@ -100,10 +100,10 @@ IntersectionObserverContext.displayName = "IntersectionObserver"; + var slugs = /* @__PURE__ */ new WeakMap(); + var SlugsContext = createContext(slugs); + SlugsContext.displayName = "Slugs"; +-var useActiveAnchor = () => useContext(ActiveAnchorContext); +-var useSetActiveAnchor = () => useContext(SetActiveAnchorContext); +-var useIntersectionObserver = () => useContext(IntersectionObserverContext); +-var useSlugs = () => useContext(SlugsContext); ++export var useActiveAnchor = () => useContext(ActiveAnchorContext); ++export var useSetActiveAnchor = () => useContext(SetActiveAnchorContext); ++export var useIntersectionObserver = () => useContext(IntersectionObserverContext); ++export var useSlugs = () => useContext(SlugsContext); + var ActiveAnchorProvider = ({ + children + }) => { diff --git a/patches/nextra.patch b/patches/nextra.patch new file mode 100644 index 0000000000..05e844c69b --- /dev/null +++ b/patches/nextra.patch @@ -0,0 +1,69 @@ +diff --git a/dist/client/components/image.js b/dist/client/components/image.js +index 239d72f5921e2d1b7359e569ae5b74c12d7c9d8a..ebeb619da1e3ccb7722e9388c92c1e2192527027 100644 +--- a/dist/client/components/image.js ++++ b/dist/client/components/image.js +@@ -1,5 +1,5 @@ + import { jsx } from "react/jsx-runtime"; +-import NextImage from "next/image"; ++import NextImage from "next-image-export-optimizer"; + import { forwardRef } from "react"; + const Image = forwardRef((props, ref) => { + const ComponentToUse = typeof props.src === "object" ? NextImage : "img"; +diff --git a/dist/client/components/index.js b/dist/client/components/index.js +index 9d05118d3d10e746cd2c020785a0f34465bb8570..218107600d7efed1b5f9d49f0a696b166917d1ce 100644 +--- a/dist/client/components/index.js ++++ b/dist/client/components/index.js +@@ -14,7 +14,7 @@ import { Tabs } from "./tabs/index.js"; + import { Td } from "./td.js"; + import { Th } from "./th.js"; + import { Tr } from "./tr.js"; +-import { Mermaid } from "@theguild/remark-mermaid/mermaid"; ++// import { Mermaid } from "@theguild/remark-mermaid/mermaid"; + import { MathJax, MathJaxContext } from "better-react-mathjax"; + import { Playground } from "./playground.js"; + import { Popup } from "./popup.js"; +@@ -29,7 +29,7 @@ export { + ImageZoom, + MathJax, + MathJaxContext, +- Mermaid, ++ // Mermaid, // disabled to use rehype-mermaid and remove cytoscape from the bundle + Playground, + Popup, + Pre, +diff --git a/dist/client/normalize-pages.js b/dist/client/normalize-pages.js +index 15afee0c1de26f47d781f423e5ec32e33ad925d3..fefd01736bd2b778df275bf50ac48384d5f63845 100644 +--- a/dist/client/normalize-pages.js ++++ b/dist/client/normalize-pages.js +@@ -103,7 +103,9 @@ The field key "${metaKey}.items.${key}" in \`_meta\` file refers to a page that + } + if (item) continue; + if (typeof window === "undefined") { +- const isValid = metaItem.type === "separator" || metaItem.type === "menu" || metaItem.href; ++ const isValid = metaItem.type === "separator" || metaItem.type === "menu" || metaItem.href ++ // workaround ++ || metaKey === 'conf'; + if (!isValid) { + throw new Error( + `Validation of "_meta" file has failed. +diff --git a/dist/server/compile.js b/dist/server/compile.js +index c266efec3fe344a81c6d5791b93ab1b2bd268782..4866148a725800ef2326732f78807cca0f04cb7b 100644 +--- a/dist/server/compile.js ++++ b/dist/server/compile.js +@@ -1,6 +1,6 @@ + import path from "path"; + import { createProcessor } from "@mdx-js/mdx"; +-import { remarkMermaid } from "@theguild/remark-mermaid"; ++// import { remarkMermaid } from "@theguild/remark-mermaid"; + import { remarkNpm2Yarn } from "@theguild/remark-npm2yarn"; + import rehypeKatex from "rehype-katex"; + import rehypePrettyCode from "rehype-pretty-code"; +@@ -143,7 +143,7 @@ async function compileMdx(source, { + development: process.env.NODE_ENV === "development", + remarkPlugins: [ + ...remarkPlugins || [], +- remarkMermaid, ++ // remarkMermaid, // disabled to use rehype-mermaid and remove cytoscape from the bundle + // should be before remarkRemoveImports because contains `import { Mermaid } from ...` + [ + remarkNpm2Yarn, diff --git a/patches/nextra@3.0.0-alpha.22.patch b/patches/nextra@3.0.0-alpha.22.patch deleted file mode 100644 index 6f4a58ebf6..0000000000 --- a/patches/nextra@3.0.0-alpha.22.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/dist/client/mdx.js b/dist/client/mdx.js -index af0891e3c2084edd326f40e6e18107b193640e0b..885858fa17285fb75649cf0ebd2576d1411c1076 100644 ---- a/dist/client/mdx.js -+++ b/dist/client/mdx.js -@@ -1,5 +1,5 @@ - import { useMDXComponents as originalUseMDXComponents } from "@mdx-js/react"; --import Image from "next/image"; -+import Image from "next-image-export-optimizer"; - import { createElement } from "react"; - const DEFAULT_COMPONENTS = { - img: (props) => createElement( -diff --git a/package.json b/package.json -index 0625691ebc1d79d7b7d22bb3b001f00a57519772..53d4b0c951a762ae056004789c9aca819e0ade62 100644 ---- a/package.json -+++ b/package.json -@@ -20,6 +20,10 @@ - "import": "./dist/server/remark-plugins/index.js", - "types": "./dist/server/remark-plugins/index.d.ts" - }, -+ "./rehype-plugins": { -+ "import": "./dist/server/rehype-plugins/index.js", -+ "types": "./dist/server/rehype-plugins/index.d.ts" -+ }, - "./hooks": { - "import": "./dist/client/hooks/index.js", - "types": "./dist/client/hooks/index.d.ts" diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000000..de0ed7f7d4 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,31 @@ +import { defineConfig, devices } from "@playwright/test" + +/** + * @see https://playwright.dev/docs/test-configuration + */ +export default defineConfig({ + testDir: "./test/e2e", + outputDir: "./test/out", + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: "html", + use: { + baseURL: "http://localhost:3000", + trace: "on-first-retry", + }, + + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + ], + + webServer: { + command: "pnpm dev", + url: "http://localhost:3000", + reuseExistingServer: !process.env.CI, + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8bd1a62095..b524ad2fd7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,9 +5,15 @@ settings: excludeLinksFromLockfile: false patchedDependencies: - nextra@3.0.0-alpha.28: - hash: rlrllt7ydx3t6f2hccqi2i2pf4 - path: patches/nextra@3.0.0-alpha.22.patch + mermaid-isomorphic: + hash: tt5abewtk4kmqtpqfe2f44hnpa + path: patches/mermaid-isomorphic.patch + nextra: + hash: 6ssvmycplmexou7j5jtwzrnhmy + path: patches/nextra.patch + nextra-theme-docs: + hash: 6nt5xhmisiwamimp7yowa7aoxq + path: patches/nextra-theme-docs.patch importers: @@ -18,10 +24,19 @@ importers: version: 10.0.25(graphql@16.10.0) '@headlessui/react': specifier: ^2.2.4 - version: 2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@igorkowalczyk/is-browser': + specifier: ^5.1.0 + version: 5.1.0(tailwindcss@3.4.17) + '@next/bundle-analyzer': + specifier: ^15.4.5 + version: 15.4.5 '@radix-ui/react-radio-group': specifier: ^1.2.2 version: 1.2.2(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@sparticuz/chromium': + specifier: ^138.0.2 + version: 138.0.2 '@tailwindcss/container-queries': specifier: ^0.1.1 version: 0.1.1(tailwindcss@3.4.17) @@ -84,25 +99,25 @@ importers: version: 12.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: specifier: ^14.2.22 - version: 14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-image-export-optimizer: specifier: ^1.18.0 - version: 1.18.0(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 1.18.0(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) next-query-params: specifier: ^5.0.1 - version: 5.0.1(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(use-query-params@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 5.0.1(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(use-query-params@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) next-sitemap: specifier: ^4.2.3 - version: 4.2.3(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 4.2.3(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) next-with-less: specifier: ^3.0.1 - version: 3.0.1(less-loader@12.2.0(less@4.2.1))(less@4.2.1)(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 3.0.1(less-loader@12.2.0(less@4.2.1))(less@4.2.1)(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) nextra: - specifier: 3.0.0-alpha.28 - version: 3.0.0-alpha.28(patch_hash=rlrllt7ydx3t6f2hccqi2i2pf4)(@types/react@18.3.23)(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + specifier: 3.3.1 + version: 3.3.1(patch_hash=6ssvmycplmexou7j5jtwzrnhmy)(@types/react@18.3.23)(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) nextra-theme-docs: - specifier: 3.0.0-alpha.28 - version: 3.0.0-alpha.28(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.0.0-alpha.28(patch_hash=rlrllt7ydx3t6f2hccqi2i2pf4)(@types/react@18.3.23)(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 3.3.1 + version: 3.3.1(patch_hash=6nt5xhmisiwamimp7yowa7aoxq)(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.3.1(patch_hash=6ssvmycplmexou7j5jtwzrnhmy)(@types/react@18.3.23)(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) numbro: specifier: 2.5.0 version: 2.5.0 @@ -112,9 +127,15 @@ importers: parser-front-matter: specifier: 1.6.4 version: 1.6.4 + playwright-core: + specifier: ^1.54.2 + version: 1.54.2 postcss: specifier: ^8.4.49 version: 8.4.49 + postcss-import: + specifier: ^16.1.1 + version: 16.1.1(postcss@8.4.49) react: specifier: ^18.3.1 version: 18.3.1 @@ -127,6 +148,9 @@ importers: react-use-measure: specifier: ^2.1.7 version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rehype-mermaid: + specifier: ^3.0.0 + version: 3.0.0(playwright@1.54.2) rss: specifier: 1.2.2 version: 1.2.2 @@ -154,6 +178,10 @@ importers: use-query-params: specifier: ^2.2.1 version: 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + optionalDependencies: + playwright: + specifier: ^1.54.2 + version: 1.54.2 devDependencies: '@graphql-eslint/eslint-plugin': specifier: 4.4.0 @@ -161,6 +189,9 @@ importers: '@next/eslint-plugin-next': specifier: ^15.3.3 version: 15.3.3 + '@playwright/test': + specifier: ^1.54.2 + version: 1.54.2 '@svgr/webpack': specifier: ^8.1.0 version: 8.1.0(typescript@5.8.3) @@ -245,6 +276,12 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + + '@antfu/utils@8.1.1': + resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} + '@ardatan/sync-fetch@0.0.1': resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} engines: {node: '>=14'} @@ -823,8 +860,23 @@ packages: resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} engines: {node: '>=6.9.0'} - '@braintree/sanitize-url@6.0.4': - resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} + '@braintree/sanitize-url@7.1.1': + resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==} + + '@chevrotain/cst-dts-gen@11.0.3': + resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} + + '@chevrotain/gast@11.0.3': + resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==} + + '@chevrotain/regexp-to-ast@11.0.3': + resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==} + + '@chevrotain/types@11.0.3': + resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==} + + '@chevrotain/utils@11.0.3': + resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} '@codemirror/language@0.20.2': resolution: {integrity: sha512-WB3Bnuusw0xhVvhBocieYKwJm04SOk5bPoOEYksVHKHcGHFOaYaw+eZVxR4gIqMMcGzOIUil0FsCmFk8yrhHpw==} @@ -838,6 +890,10 @@ packages: '@corex/deepmerge@4.0.43': resolution: {integrity: sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==} + '@discoveryjs/json-ext@0.5.7': + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} + '@emnapi/runtime@1.3.1': resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} @@ -1030,6 +1086,16 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + + '@formatjs/intl-localematcher@0.5.10': + resolution: {integrity: sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q==} + + '@fortawesome/fontawesome-free@6.7.2': + resolution: {integrity: sha512-JUOtgFW6k9u4Y+xeIaEiLr3+cjoUPiAuLXoyKOJSia6Duzb7pq+A76P9ZdPDoAoxHdHzq6gE9/jKBGXlZT8FbA==} + engines: {node: '>=6'} + '@graphql-eslint/eslint-plugin@4.4.0': resolution: {integrity: sha512-dhW6fpk3Souuaphhc38uMAGCcgKMgtCJWFygIKODw/Kns43wiQqRPVay0aNFY1JBx3aevn4KPT/BCOdm6HNncA==} engines: {node: '>=18'} @@ -1155,15 +1221,8 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@headlessui/react@1.7.19': - resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==} - engines: {node: '>=10'} - peerDependencies: - react: ^16 || ^17 || ^18 - react-dom: ^16 || ^17 || ^18 - - '@headlessui/react@2.2.7': - resolution: {integrity: sha512-WKdTymY8Y49H8/gUc/lIyYK1M+/6dq0Iywh4zTZVAaiTDprRfioxSgD0wnXTQTBpjpGJuTL1NO/mqEvc//5SSg==} + '@headlessui/react@2.2.4': + resolution: {integrity: sha512-lz+OGcAH1dK93rgSMzXmm1qKOJkBUqZf1L4M8TWLNplftQD3IkoEDdUFNfAn4ylsN6WOTVtWaLmvmaHOUk1dTA==} engines: {node: '>=10'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -1182,6 +1241,18 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@2.3.0': + resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} + + '@igorkowalczyk/is-browser@5.1.0': + resolution: {integrity: sha512-OwyO+ocRLbo/iQsTBlCbx8S33esB35LgH4xhJJZk6MzpMKv8UFzEKWpzg2KI02syrPXvJ3hlU//Cq8fwxp/3sQ==} + engines: {node: '>=16'} + peerDependencies: + tailwindcss: '>=3.0.0 || >=4.0.0' + '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -1333,6 +1404,9 @@ packages: '@types/react': '>=16' react: '>=16' + '@mermaid-js/parser@0.5.0': + resolution: {integrity: sha512-AiaN7+VjXC+3BYE+GwNezkpjIcCI2qIMB/K4S2/vMWe0q/XJCBbx5+K7iteuz7VyltX9iAK4FmVTvGc9kjOV4w==} + '@napi-rs/simple-git-android-arm-eabi@0.1.16': resolution: {integrity: sha512-dbrCL0Pl5KZG7x7tXdtVsA5CO6At5ohDX3myf5xIYn9kN4jDFxsocl8bNt6Vb/hZQoJd8fI+k5VlJt+rFhbdVw==} engines: {node: '>= 10'} @@ -1403,6 +1477,9 @@ packages: resolution: {integrity: sha512-C5wRPw9waqL2jk3jEDeJv+f7ScuO3N0a39HVdyFLkwKxHH4Sya4ZbzZsu2JLi6eEqe7RuHipHL6mC7B2OfYZZw==} engines: {node: '>= 10'} + '@next/bundle-analyzer@15.4.5': + resolution: {integrity: sha512-S2o5Zn5u1iKdn9GrsUd86jvjXRXmKNT/JpQuovfLgUigPC+fshyKvNebvnYSshmztsZL1U7AuUPg71PzAaiHcg==} + '@next/env@13.5.6': resolution: {integrity: sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==} @@ -1498,8 +1575,13 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@popperjs/core@2.11.8': - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + '@playwright/test@1.54.2': + resolution: {integrity: sha512-A+znathYxPf+72riFd1r1ovOLqsIIB0jKIoPjyK2kqEIe30/6jF6BC7QNluHuwUmsD2tv1XZVugN8GqfTMOxsA==} + engines: {node: '>=18'} + hasBin: true + + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} '@radix-ui/primitive@1.1.1': resolution: {integrity: sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==} @@ -1705,6 +1787,10 @@ packages: '@shikijs/twoslash@1.2.1': resolution: {integrity: sha512-QyrBtKhIXjByPbC2dS/8LAqCLfoVmZHgNqc4eqLVIkOxZp6AAkAak1A3E+oiMP9vLaMY9qQI1pnV45c8FB5PRw==} + '@sparticuz/chromium@138.0.2': + resolution: {integrity: sha512-vs5qUiK6kFCzLCxZ2buWONcB6jdF3VWdYp6kH1tt56tZ78p51dMAxfWsfk9P62z/jAeqbVg4V6Rb3Ic4aAeOKQ==} + engines: {node: '>=20.11.0'} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} @@ -1816,13 +1902,13 @@ packages: '@tanstack/virtual-core@3.13.12': resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} - '@theguild/remark-mermaid@0.0.7': - resolution: {integrity: sha512-sh2xlwOllU6Abh+MPWdJDlNwirDcjdlH1wrDWxNLFNVbEzyVb1BTwhecc6ot5hxBUe38z1Ecja8xor9Wkb61gg==} + '@theguild/remark-mermaid@0.1.3': + resolution: {integrity: sha512-2FjVlaaKXK7Zj7UJAgOVTyaahn/3/EAfqYhyXg0BfDBVUl+lXcoIWRaxzqfnDr2rv8ax6GsC5mNh6hAaT86PDw==} peerDependencies: react: ^18.2.0 - '@theguild/remark-npm2yarn@0.3.0': - resolution: {integrity: sha512-Fofw+9airYgjBd9G6PiHHCrptjyUybQ50JH9/5o9LCH54kggJ7stpCofzHjICB8L7VQbQ1Gwu23P/3CMVY1R4Q==} + '@theguild/remark-npm2yarn@0.3.3': + resolution: {integrity: sha512-ma6DvR03gdbvwqfKx1omqhg9May/VYGdMHvTzB4VuxkyS7KzfZ/lzrj43hmcsggpMje0x7SADA/pcMph0ejRnA==} '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} @@ -1837,15 +1923,99 @@ packages: '@types/concat-stream@2.0.3': resolution: {integrity: sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==} + '@types/d3-array@3.2.1': + resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} + + '@types/d3-axis@3.0.6': + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + + '@types/d3-brush@3.0.6': + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + + '@types/d3-chord@3.0.6': + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-contour@3.0.6': + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + + '@types/d3-delaunay@6.0.4': + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + + '@types/d3-dispatch@3.0.6': + resolution: {integrity: sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==} + + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + + '@types/d3-dsv@3.0.7': + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-fetch@3.0.7': + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + + '@types/d3-force@3.0.10': + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + + '@types/d3-format@3.0.4': + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + + '@types/d3-geo@3.1.0': + resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} + + '@types/d3-hierarchy@3.1.7': + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + + '@types/d3-polygon@3.0.2': + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + + '@types/d3-quadtree@3.0.6': + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + + '@types/d3-random@3.0.3': + resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} + '@types/d3-scale-chromatic@3.0.3': resolution: {integrity: sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==} '@types/d3-scale@4.0.8': resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==} + '@types/d3-selection@3.0.11': + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + + '@types/d3-shape@3.1.7': + resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==} + + '@types/d3-time-format@4.0.3': + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + '@types/d3-time@3.0.3': resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==} + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.8': + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + + '@types/d3@7.4.3': + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -1855,6 +2025,9 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -1909,6 +2082,9 @@ packages: '@types/tern@0.23.9': resolution: {integrity: sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==} + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/unist@2.0.10': resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} @@ -2007,11 +2183,20 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -2042,12 +2227,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - - arg@1.0.0: - resolution: {integrity: sha512-Wk7TEzl1KqvTGs/uyhmHO/3XLd3t1UeU4IstvPXVzGPM522cTjqjNZ99esCkcL52sjqjo8e8CTBcWhkxvGzoAw==} - arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -2115,6 +2294,9 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + babel-plugin-polyfill-corejs2@0.4.12: resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} peerDependencies: @@ -2136,6 +2318,36 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + bare-events@2.6.1: + resolution: {integrity: sha512-AuTJkq9XmE6Vk0FJVNq5QxETrSA/vKHarWVBG5l/JbdCL1prJemiyJqUS0jrlXO0MftuPq4m3YVYhoNc5+aE/g==} + + bare-fs@4.2.0: + resolution: {integrity: sha512-oRfrw7gwwBVAWx9S5zPMo2iiOjxyiZE12DmblmMQREgcogbNO0AFaZ+QBxxkEXiPspcpvO/Qtqn8LabUx4uYXg==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.6.1: + resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.6.5: + resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + better-react-mathjax@2.0.3: resolution: {integrity: sha512-wfifT8GFOKb1TWm2+E50I6DJpLZ5kLbch283Lu043EJtwSv0XvZDjr4YfR4d2MjAhqP6SH4VjjrKgbX8R00oCQ==} peerDependencies: @@ -2214,10 +2426,6 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chalk@2.3.0: - resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==} - engines: {node: '>=4'} - chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -2226,6 +2434,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -2247,6 +2459,14 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chevrotain-allstar@0.3.1: + resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==} + peerDependencies: + chevrotain: ^11.0.0 + + chevrotain@11.0.3: + resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2258,9 +2478,9 @@ packages: client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - clipboardy@1.2.2: - resolution: {integrity: sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw==} - engines: {node: '>=4'} + clipboardy@4.0.0: + resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} + engines: {node: '>=18'} clone-deep@4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} @@ -2336,6 +2556,12 @@ packages: resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} engines: {'0': node >= 6.0} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -2348,6 +2574,9 @@ packages: cose-base@1.0.3: resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -2361,9 +2590,6 @@ packages: resolution: {integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==} engines: {node: '>=16.0.0'} - cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} - cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -2404,8 +2630,13 @@ packages: peerDependencies: cytoscape: ^3.2.0 - cytoscape@3.28.1: - resolution: {integrity: sha512-xyItz4O/4zp9/239wCcH8ZcFuuZooEeF8KHRmzjDfGdXsj3OG9MFSMA0pJE0uX3uCN/ygof6hHf4L7lst+JaDg==} + cytoscape-fcose@2.2.0: + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape@3.32.0: + resolution: {integrity: sha512-5JHBC9n75kz5851jeklCPmZWcg3hUe6sjqJvyk3+hVqFaKcHwHgxsjeN1yLmggoUc6STbtm9/NQyabQehfjvWQ==} engines: {node: '>=0.10'} d3-array@2.12.1: @@ -2547,8 +2778,8 @@ packages: resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} engines: {node: '>=12'} - dagre-d3-es@7.0.10: - resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} + dagre-d3-es@7.0.11: + resolution: {integrity: sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==} data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} @@ -2572,6 +2803,12 @@ packages: dayjs@1.11.10: resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -2663,8 +2900,8 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} - dompurify@3.0.11: - resolution: {integrity: sha512-Fan4uMuyB26gFV3ovPoEoQbxRRPfTu3CvImyZnhGq5fsIEO+gEFLp45ISFt+kQBWsK5ulDdT0oV28jS1UrwQLg==} + dompurify@3.2.6: + resolution: {integrity: sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==} domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} @@ -2680,6 +2917,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -2689,9 +2929,6 @@ packages: electron-to-chromium@1.5.74: resolution: {integrity: sha512-ck3//9RC+6oss/1Bh9tiAVFy5vfSKbRHAFh7Z3/eTRkEqJeWgymloShB17Vg3Z4nmDNp35vAd1BZ6CMW4Wt6Iw==} - elkjs@0.9.2: - resolution: {integrity: sha512-2Y/RaA1pdgSHpY0YG4TYuYCD2wh97CRvu22eLG3Kz0pgQ/6KbIFTxsTnDc4MH/6hFlg2L/9qXrDMG0nMjP63iw==} - emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -2701,6 +2938,9 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -2879,9 +3119,12 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - execa@0.8.0: - resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==} - engines: {node: '>=4'} + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + exsolve@1.0.7: + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} @@ -2900,6 +3143,9 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} @@ -2949,8 +3195,14 @@ packages: flexsearch@0.7.43: resolution: {integrity: sha512-c5o/+Um8aqCSOXGcZoqZOm+NqtVwNsvVpWv6lfmSclU954O3wvQKxxK8zj74fPaSJbXpSLTs4PRhh+wnoCXnKg==} - focus-visible@5.2.0: - resolution: {integrity: sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ==} + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} @@ -2988,6 +3240,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3015,9 +3272,9 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stream@3.0.0: - resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} - engines: {node: '>=4'} + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} @@ -3058,6 +3315,10 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -3116,14 +3377,17 @@ packages: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} + gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + + hachure-fill@0.5.2: + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} - has-flag@2.0.0: - resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==} - engines: {node: '>=0.10.0'} - has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -3193,15 +3457,19 @@ packages: hastscript@8.0.0: resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} - heap@0.2.7: - resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} - html-entities@2.6.0: resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -3266,9 +3534,6 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} - intersection-observer@0.12.2: - resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} - is-alphabetical@1.0.4: resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} @@ -3340,6 +3605,11 @@ packages: is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-empty@1.2.0: resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} @@ -3377,6 +3647,11 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -3409,6 +3684,10 @@ packages: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + is-reference@3.0.2: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} @@ -3424,9 +3703,9 @@ packages: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} - is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} @@ -3459,6 +3738,14 @@ packages: resolution: {integrity: sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==} engines: {node: '>=0.10.0'} + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + is64bit@2.0.0: + resolution: {integrity: sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==} + engines: {node: '>=18'} + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -3565,9 +3852,19 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + langium@3.3.1: + resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==} + engines: {node: '>=16.0.0'} + layout-base@1.0.2: resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + lazy-cache@2.0.2: resolution: {integrity: sha512-7vp2Acd2+Kz4XkzxGxaB1FWOi8KjWIWsgdfD5MCb86DWvlLqhRPM+d6Pro3iNEL5VT9mstz5hKAlcd+QR6H3aA==} engines: {node: '>=0.10.0'} @@ -3611,6 +3908,10 @@ packages: load-plugin@6.0.2: resolution: {integrity: sha512-3KRkTvCOsyNrx4zvBl/+ZMqPdVyp26TIf6xkmfEGuGwCfNQ/HzhktwbJCxd1KJpzPbK42t/WVOL3cX+TDaMRuQ==} + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} + engines: {node: '>=14'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -3633,9 +3934,6 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -3649,9 +3947,6 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3681,6 +3976,11 @@ packages: peerDependencies: react: '>= 0.14.0' + marked@15.0.12: + resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} + engines: {node: '>= 18'} + hasBin: true + marked@5.1.2: resolution: {integrity: sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==} engines: {node: '>= 16'} @@ -3699,12 +3999,12 @@ packages: mdast-util-from-markdown@0.8.5: resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} - mdast-util-from-markdown@1.3.1: - resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} - mdast-util-from-markdown@2.0.0: resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + mdast-util-frontmatter@2.0.1: resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} @@ -3744,8 +4044,8 @@ packages: mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - mdast-util-to-hast@13.1.0: - resolution: {integrity: sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==} + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} mdast-util-to-markdown@2.1.0: resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} @@ -3753,9 +4053,6 @@ packages: mdast-util-to-string@2.0.0: resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} - mdast-util-to-string@3.2.0: - resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} - mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} @@ -3765,12 +4062,23 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - mermaid@10.9.0: - resolution: {integrity: sha512-swZju0hFox/B/qoLKK0rOxxgh8Cf7rJSfAUc1u8fezVihYMvrJAS45GzAxTVf4Q+xn9uMgitBcmWk7nWGXOs/g==} + mermaid-isomorphic@3.0.4: + resolution: {integrity: sha512-XQTy7H1XwHK3DPEHf+ZNWiqUEd9BwX3Xws38R9Fj2gx718srmgjlZoUzHr+Tca+O+dqJOJsAJaKzCoP65QDfDg==} + peerDependencies: + playwright: '1' + peerDependenciesMeta: + playwright: + optional: true + + mermaid@11.7.0: + resolution: {integrity: sha512-/1/5R0rt0Z1Ak0CuznAnCF3HtQgayRXUz6SguzOwN4L+DuCobz0UxnQ+ZdTSZ3AugKVVh78tiVmsHpHWV25TCw==} meros@1.3.0: resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} @@ -3784,9 +4092,6 @@ packages: mhchemparser@4.2.1: resolution: {integrity: sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==} - micromark-core-commonmark@1.1.0: - resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} - micromark-core-commonmark@2.0.0: resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} @@ -3832,132 +4137,72 @@ packages: micromark-extension-mdxjs@3.0.0: resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} - micromark-factory-destination@1.1.0: - resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} - micromark-factory-destination@2.0.0: resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} - micromark-factory-label@1.1.0: - resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} - micromark-factory-label@2.0.0: resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} micromark-factory-mdx-expression@2.0.1: resolution: {integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==} - micromark-factory-space@1.1.0: - resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} - micromark-factory-space@2.0.0: resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} - micromark-factory-title@1.1.0: - resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} - micromark-factory-title@2.0.0: resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} - micromark-factory-whitespace@1.1.0: - resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} - micromark-factory-whitespace@2.0.0: resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} - micromark-util-character@1.2.0: - resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} - micromark-util-character@2.1.0: resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} - micromark-util-chunked@1.1.0: - resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} - micromark-util-chunked@2.0.0: resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} - micromark-util-classify-character@1.1.0: - resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} - micromark-util-classify-character@2.0.0: resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} - micromark-util-combine-extensions@1.1.0: - resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} - micromark-util-combine-extensions@2.0.0: resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} - micromark-util-decode-numeric-character-reference@1.1.0: - resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} - micromark-util-decode-numeric-character-reference@2.0.1: resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} - micromark-util-decode-string@1.1.0: - resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} - micromark-util-decode-string@2.0.0: resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} - micromark-util-encode@1.1.0: - resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} - micromark-util-encode@2.0.0: resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} micromark-util-events-to-acorn@2.0.2: resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} - micromark-util-html-tag-name@1.2.0: - resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} - micromark-util-html-tag-name@2.0.0: resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} - micromark-util-normalize-identifier@1.1.0: - resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} - micromark-util-normalize-identifier@2.0.0: resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} - micromark-util-resolve-all@1.1.0: - resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} - micromark-util-resolve-all@2.0.0: resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} - micromark-util-sanitize-uri@1.2.0: - resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} - micromark-util-sanitize-uri@2.0.0: resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} - micromark-util-subtokenize@1.1.0: - resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} - micromark-util-subtokenize@2.0.0: resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} - micromark-util-symbol@1.1.0: - resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - micromark-util-symbol@2.0.0: resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} - micromark-util-types@1.1.0: - resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - micromark-util-types@2.0.0: resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} - micromark@3.2.0: - resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} - micromark@4.0.0: resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} @@ -3978,6 +4223,14 @@ packages: engines: {node: '>=4'} hasBin: true + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mini-svg-data-uri@1.4.4: + resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} + hasBin: true + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -3999,6 +4252,9 @@ packages: mj-context-menu@0.6.1: resolution: {integrity: sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==} + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + motion-dom@12.11.0: resolution: {integrity: sha512-CItkGYJenn5ZsbzTX0D9mE0UWdjdd9r535FrxEXhzR8Kwa9I2dLr1uhEJgQPWbgaIJ6i0sNFnf2T9NvVDWQVBw==} @@ -4023,6 +4279,10 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -4045,6 +4305,10 @@ packages: engines: {node: '>= 4.4.x'} hasBin: true + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + next-image-export-optimizer@1.18.0: resolution: {integrity: sha512-8yJO2QzBYMx2E1Lr67gWX3uqWbLZfBa7SwPjPjko4ki81SsJjsNeV7MID7VCcQ99aJW4mLgrWWRHCFNXF7gzlA==} engines: {node: '>=16.0.0'} @@ -4067,11 +4331,11 @@ packages: peerDependencies: next: '*' - next-themes@0.3.0: - resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==} + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} peerDependencies: - react: ^16.8 || ^17 || ^18 - react-dom: ^16.8 || ^17 || ^18 + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc next-with-less@3.0.1: resolution: {integrity: sha512-lVJQ+dNWGpR1ccWM/LjY+8i28DC2oPa1Ivrc+h4+DFPJJN6O2EGKZIFBGrd9GLbwAEjFzKPs7yUk6bnrbY0qcw==} @@ -4098,21 +4362,21 @@ packages: sass: optional: true - nextra-theme-docs@3.0.0-alpha.28: - resolution: {integrity: sha512-6n200ue1EKv/Eo7chkoKDLJ2gQ01R+hfdwp5xhzpSaqdiudqtsbUlDPEuwBBW0mQbLCUN80yNQanV4GjUg6/oA==} + nextra-theme-docs@3.3.1: + resolution: {integrity: sha512-P305m2UcW2IDyQhjrcAu0qpdPArikofinABslUCAyixYShsmcdDRUhIMd4QBHYru4gQuVjGWX9PhWZZCbNvzDQ==} peerDependencies: next: '>=13' - nextra: 3.0.0-alpha.28 - react: '>=16.13.1' - react-dom: '>=16.13.1' + nextra: 3.3.1 + react: '>=18' + react-dom: '>=18' - nextra@3.0.0-alpha.28: - resolution: {integrity: sha512-sw/Jdp/c1jS1Hpk2aPs7Y2G3c5lU3ijyXTATr9zUfn35zpneNf+70No8XKxXFo+nWO0CRHwVB15Ya+DNsvaYtQ==} + nextra@3.3.1: + resolution: {integrity: sha512-jiwj+LfUPHHeAxJAEqFuglxnbjFgzAOnDWFsjv7iv3BWiX8OksDwd3I2Sv3j2zba00iIBDEPdNeylfzTtTLZVg==} engines: {node: '>=18'} peerDependencies: next: '>=13' - react: '>=16.13.1' - react-dom: '>=16.13.1' + react: '>=18' + react-dom: '>=18' nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} @@ -4132,9 +4396,6 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - non-layered-tidy-tree-layout@2.0.2: - resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} - nopt@7.2.0: resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -4156,12 +4417,12 @@ packages: resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - npm-to-yarn@2.2.1: - resolution: {integrity: sha512-O/j/ROyX0KGLG7O6Ieut/seQ0oiTpHF2tXAcFbpdTLQFiaNtkyTXXocM1fwpaa60dg1qpWj0nHlbNhx6qwuENQ==} + npm-to-yarn@3.0.1: + resolution: {integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} nth-check@2.1.1: @@ -4208,6 +4469,14 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -4216,10 +4485,6 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -4239,6 +4504,9 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-manager-detector@1.3.0: + resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4274,6 +4542,9 @@ packages: resolution: {integrity: sha512-eqtUnI5+COkf1CQOYo8FmykN5Zs+5Yr60f/7GcPgQDZEEjdE/VZ4WMaMo9g37foof8h64t/TH2Uvk2Sq0fDy/g==} engines: {node: '>=0.10.0'} + path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -4282,14 +4553,14 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -4301,6 +4572,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} @@ -4323,6 +4597,28 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.1.0: + resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + + playwright-core@1.54.2: + resolution: {integrity: sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.54.2: + resolution: {integrity: sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==} + engines: {node: '>=18'} + hasBin: true + + points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + + points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -4333,6 +4629,12 @@ packages: peerDependencies: postcss: ^8.0.0 + postcss-import@16.1.1: + resolution: {integrity: sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + postcss: ^8.0.0 + postcss-js@4.0.1: resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} @@ -4471,13 +4773,16 @@ packages: prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -4577,11 +4882,19 @@ packages: rehype-katex@7.0.0: resolution: {integrity: sha512-h8FPkGE00r2XKU+/acgqwWUlyzve1IiOKwsEkg4pDL3k48PiE0Pt+/uLtVHDVkN1yA4iurZN6UES8ivHVEQV6Q==} + rehype-mermaid@3.0.0: + resolution: {integrity: sha512-fxrD5E4Fa1WXUjmjNDvLOMT4XB1WaxcfycFIWiYU0yEMQhcTDElc9aDFnbDFRLxG1Cfo1I3mfD5kg4sjlWaB+Q==} + peerDependencies: + playwright: '1' + peerDependenciesMeta: + playwright: + optional: true + rehype-parse@9.0.0: resolution: {integrity: sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==} - rehype-pretty-code@0.13.2: - resolution: {integrity: sha512-F+PaFMscfJOcSHcR2b//+hk/0jT56hmGDqXcVD6VC9j0CUSGiqv8YxaWUyhR7qEIRRSbzAVxx+0uxzk+akXs+w==} + rehype-pretty-code@0.14.0: + resolution: {integrity: sha512-hBeKF/Wkkf3zyUS8lal9RCUuhypDWLQc+h9UrP9Pav25FUm/AQAVh4m5gdvJxh4Oz+U+xKvdsV01p1LdvsZTiQ==} engines: {node: '>=18'} peerDependencies: shiki: ^1.3.0 @@ -4672,6 +4985,9 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + roughjs@4.6.6: + resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + rss@1.2.2: resolution: {integrity: sha512-xUhRTgslHeCBeHAqaWSbOYTydN2f0tAzNXvzh3stjz7QDhQMzdgHf3pfgNIngeytQflrFPfy6axHilTETr6gDg==} @@ -4764,18 +5080,10 @@ packages: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} @@ -4799,9 +5107,6 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -4809,6 +5114,10 @@ packages: simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -4850,6 +5159,9 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} + streamx@2.22.1: + resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + string-collapse-leading-whitespace@7.0.9: resolution: {integrity: sha512-lEuTHlogBT9PWipfk0FOyvoMKX8syiE03QoFk5MDh8oS0AJ2C07IlstR5cGkxz48nKkOIuvkC28w9Rx/cVRNDg==} engines: {node: '>=14.18.0'} @@ -4922,9 +5234,9 @@ packages: resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} engines: {node: '>=0.10.0'} - strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} @@ -4952,18 +5264,14 @@ packages: babel-plugin-macros: optional: true - stylis@4.3.1: - resolution: {integrity: sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==} + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true - supports-color@4.5.0: - resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} - engines: {node: '>=4'} - supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -4992,6 +5300,10 @@ packages: resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} engines: {node: ^14.18.0 || >=16.0.0} + system-architecture@0.1.0: + resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} + engines: {node: '>=18'} + tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} @@ -5000,6 +5312,15 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + tar-fs@3.1.0: + resolution: {integrity: sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -5016,13 +5337,12 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - title@3.5.3: - resolution: {integrity: sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q==} - hasBin: true + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} - titleize@1.0.0: - resolution: {integrity: sha512-TARUb7z1pGvlLxgPk++7wJ6aycXF3GJ0sNSBTAsTuJrQG5QuZlkUQP+zl+nbjAh4gMX9yDw9ZYklMd7vAfJKEw==} - engines: {node: '>=0.10.0'} + title@4.0.1: + resolution: {integrity: sha512-xRnPkJx9nvE5MF6LkB5e8QJjE2FW8269wTu/LQdf7zZqBgPly0QJPf/CWAo7srj5so4yXfoLEdCFgurlpi47zg==} + hasBin: true to-object-path@0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} @@ -5032,6 +5352,10 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -5113,6 +5437,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -5254,8 +5581,8 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true uvu@0.5.6: @@ -5291,9 +5618,26 @@ packages: vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + vscode-languageserver-types@3.17.5: resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} @@ -5306,12 +5650,14 @@ packages: web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - web-worker@1.3.0: - resolution: {integrity: sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==} - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webpack-bundle-analyzer@4.10.1: + resolution: {integrity: sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==} + engines: {node: '>= 10.13.0'} + hasBin: true + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -5331,10 +5677,6 @@ packages: resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -5354,7 +5696,19 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.18.0: + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: @@ -5373,20 +5727,12 @@ packages: resolution: {integrity: sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw==} engines: {node: '>=0.1'} - yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.4.1: - resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} - engines: {node: '>= 14'} - hasBin: true - yaml@2.6.1: resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} engines: {node: '>= 14'} @@ -5427,6 +5773,13 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.3.0 + tinyexec: 1.0.1 + + '@antfu/utils@8.1.1': {} + '@ardatan/sync-fetch@0.0.1': dependencies: node-fetch: 2.7.0 @@ -6183,7 +6536,24 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@braintree/sanitize-url@6.0.4': {} + '@braintree/sanitize-url@7.1.1': {} + + '@chevrotain/cst-dts-gen@11.0.3': + dependencies: + '@chevrotain/gast': 11.0.3 + '@chevrotain/types': 11.0.3 + lodash-es: 4.17.21 + + '@chevrotain/gast@11.0.3': + dependencies: + '@chevrotain/types': 11.0.3 + lodash-es: 4.17.21 + + '@chevrotain/regexp-to-ast@11.0.3': {} + + '@chevrotain/types@11.0.3': {} + + '@chevrotain/utils@11.0.3': {} '@codemirror/language@0.20.2': dependencies: @@ -6204,6 +6574,8 @@ snapshots: '@corex/deepmerge@4.0.43': {} + '@discoveryjs/json-ext@0.5.7': {} + '@emnapi/runtime@1.3.1': dependencies: tslib: 2.8.1 @@ -6325,13 +6697,21 @@ snapshots: '@floating-ui/react@0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@floating-ui/utils': 0.2.10 + '@floating-ui/utils': 0.2.9 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tabbable: 6.2.0 '@floating-ui/utils@0.2.10': {} + '@floating-ui/utils@0.2.9': {} + + '@formatjs/intl-localematcher@0.5.10': + dependencies: + tslib: 2.8.1 + + '@fortawesome/fontawesome-free@6.7.2': {} + '@graphql-eslint/eslint-plugin@4.4.0(@types/node@22.10.5)(eslint@8.57.1)(graphql@16.10.0)(typescript@5.8.3)': dependencies: '@graphql-tools/code-file-loader': 8.1.10(graphql@16.10.0) @@ -6537,14 +6917,7 @@ snapshots: dependencies: graphql: 16.10.0 - '@headlessui/react@1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@tanstack/react-virtual': 3.13.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - client-only: 0.0.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@headlessui/react@2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@headlessui/react@2.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/focus': 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -6566,6 +6939,25 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} + '@iconify/types@2.0.0': {} + + '@iconify/utils@2.3.0': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@antfu/utils': 8.1.1 + '@iconify/types': 2.0.0 + debug: 4.4.0 + globals: 15.15.0 + kolorist: 1.8.0 + local-pkg: 1.1.1 + mlly: 1.7.4 + transitivePeerDependencies: + - supports-color + + '@igorkowalczyk/is-browser@5.1.0(tailwindcss@3.4.17)': + dependencies: + tailwindcss: 3.4.17 + '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 @@ -6715,6 +7107,10 @@ snapshots: '@types/react': 18.3.23 react: 18.3.1 + '@mermaid-js/parser@0.5.0': + dependencies: + langium: 3.3.1 + '@napi-rs/simple-git-android-arm-eabi@0.1.16': optional: true @@ -6762,6 +7158,13 @@ snapshots: '@napi-rs/simple-git-win32-arm64-msvc': 0.1.16 '@napi-rs/simple-git-win32-x64-msvc': 0.1.16 + '@next/bundle-analyzer@15.4.5': + dependencies: + webpack-bundle-analyzer: 4.10.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + '@next/env@13.5.6': {} '@next/env@14.2.29': {} @@ -6834,7 +7237,11 @@ snapshots: '@pkgr/core@0.1.1': {} - '@popperjs/core@2.11.8': {} + '@playwright/test@1.54.2': + dependencies: + playwright: 1.54.2 + + '@polka/url@1.0.0-next.29': {} '@radix-ui/primitive@1.1.1': {} @@ -7024,6 +7431,14 @@ snapshots: - supports-color - typescript + '@sparticuz/chromium@138.0.2': + dependencies: + follow-redirects: 1.15.11 + tar-fs: 3.1.0 + transitivePeerDependencies: + - bare-buffer + - debug + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -7153,17 +7568,17 @@ snapshots: '@tanstack/virtual-core@3.13.12': {} - '@theguild/remark-mermaid@0.0.7(react@18.3.1)': + '@theguild/remark-mermaid@0.1.3(react@18.3.1)': dependencies: - mermaid: 10.9.0 + mermaid: 11.7.0 react: 18.3.1 unist-util-visit: 5.0.0 transitivePeerDependencies: - supports-color - '@theguild/remark-npm2yarn@0.3.0': + '@theguild/remark-npm2yarn@0.3.3': dependencies: - npm-to-yarn: 2.2.1 + npm-to-yarn: 3.0.1 unist-util-visit: 5.0.0 '@trysound/sax@0.2.0': {} @@ -7180,14 +7595,123 @@ snapshots: dependencies: '@types/node': 22.10.5 + '@types/d3-array@3.2.1': {} + + '@types/d3-axis@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-brush@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-chord@3.0.6': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-contour@3.0.6': + dependencies: + '@types/d3-array': 3.2.1 + '@types/geojson': 7946.0.16 + + '@types/d3-delaunay@6.0.4': {} + + '@types/d3-dispatch@3.0.6': {} + + '@types/d3-drag@3.0.7': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-dsv@3.0.7': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-fetch@3.0.7': + dependencies: + '@types/d3-dsv': 3.0.7 + + '@types/d3-force@3.0.10': {} + + '@types/d3-format@3.0.4': {} + + '@types/d3-geo@3.1.0': + dependencies: + '@types/geojson': 7946.0.16 + + '@types/d3-hierarchy@3.1.7': {} + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.1': {} + + '@types/d3-polygon@3.0.2': {} + + '@types/d3-quadtree@3.0.6': {} + + '@types/d3-random@3.0.3': {} + '@types/d3-scale-chromatic@3.0.3': {} '@types/d3-scale@4.0.8': dependencies: '@types/d3-time': 3.0.3 + '@types/d3-selection@3.0.11': {} + + '@types/d3-shape@3.1.7': + dependencies: + '@types/d3-path': 3.1.1 + + '@types/d3-time-format@4.0.3': {} + '@types/d3-time@3.0.3': {} + '@types/d3-timer@3.0.2': {} + + '@types/d3-transition@3.0.9': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-zoom@3.0.8': + dependencies: + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 + + '@types/d3@7.4.3': + dependencies: + '@types/d3-array': 3.2.1 + '@types/d3-axis': 3.0.6 + '@types/d3-brush': 3.0.6 + '@types/d3-chord': 3.0.6 + '@types/d3-color': 3.1.3 + '@types/d3-contour': 3.0.6 + '@types/d3-delaunay': 6.0.4 + '@types/d3-dispatch': 3.0.6 + '@types/d3-drag': 3.0.7 + '@types/d3-dsv': 3.0.7 + '@types/d3-ease': 3.0.2 + '@types/d3-fetch': 3.0.7 + '@types/d3-force': 3.0.10 + '@types/d3-format': 3.0.4 + '@types/d3-geo': 3.1.0 + '@types/d3-hierarchy': 3.1.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-path': 3.1.1 + '@types/d3-polygon': 3.0.2 + '@types/d3-quadtree': 3.0.6 + '@types/d3-random': 3.0.3 + '@types/d3-scale': 4.0.8 + '@types/d3-scale-chromatic': 3.0.3 + '@types/d3-selection': 3.0.11 + '@types/d3-shape': 3.1.7 + '@types/d3-time': 3.0.3 + '@types/d3-time-format': 4.0.3 + '@types/d3-timer': 3.0.2 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.8 + '@types/debug@4.1.12': dependencies: '@types/ms': 0.7.34 @@ -7198,6 +7722,8 @@ snapshots: '@types/estree@1.0.5': {} + '@types/geojson@7946.0.16': {} + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.2 @@ -7253,6 +7779,9 @@ snapshots: dependencies: '@types/estree': 1.0.5 + '@types/trusted-types@2.0.7': + optional: true + '@types/unist@2.0.10': {} '@types/unist@3.0.2': {} @@ -7377,8 +7906,18 @@ snapshots: dependencies: acorn: 8.11.3 + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.15.0 + acorn@8.11.3: {} + acorn@8.15.0: {} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -7407,10 +7946,6 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - arch@2.2.0: {} - - arg@1.0.0: {} - arg@5.0.2: {} argparse@1.0.10: @@ -7500,6 +8035,8 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 + b4a@1.6.7: {} + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): dependencies: '@babel/compat-data': 7.26.3 @@ -7528,6 +8065,31 @@ snapshots: balanced-match@1.0.2: {} + bare-events@2.6.1: + optional: true + + bare-fs@4.2.0: + dependencies: + bare-events: 2.6.1 + bare-path: 3.0.0 + bare-stream: 2.6.5(bare-events@2.6.1) + optional: true + + bare-os@3.6.1: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.6.1 + optional: true + + bare-stream@2.6.5(bare-events@2.6.1): + dependencies: + streamx: 2.22.1 + optionalDependencies: + bare-events: 2.6.1 + optional: true + better-react-mathjax@2.0.3(react@18.3.1): dependencies: mathjax-full: 3.2.2 @@ -7605,12 +8167,6 @@ snapshots: ccount@2.0.1: {} - chalk@2.3.0: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 4.5.0 - chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -7622,6 +8178,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.4.1: {} + character-entities-html4@2.1.0: {} character-entities-legacy@1.1.4: {} @@ -7636,6 +8194,20 @@ snapshots: character-reference-invalid@2.0.1: {} + chevrotain-allstar@0.3.1(chevrotain@11.0.3): + dependencies: + chevrotain: 11.0.3 + lodash-es: 4.17.21 + + chevrotain@11.0.3: + dependencies: + '@chevrotain/cst-dts-gen': 11.0.3 + '@chevrotain/gast': 11.0.3 + '@chevrotain/regexp-to-ast': 11.0.3 + '@chevrotain/types': 11.0.3 + '@chevrotain/utils': 11.0.3 + lodash-es: 4.17.21 + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -7652,10 +8224,11 @@ snapshots: client-only@0.0.1: {} - clipboardy@1.2.2: + clipboardy@4.0.0: dependencies: - arch: 2.2.0 - execa: 0.8.0 + execa: 8.0.1 + is-wsl: 3.1.0 + is64bit: 2.0.0 clone-deep@4.0.1: dependencies: @@ -7723,6 +8296,10 @@ snapshots: readable-stream: 3.6.2 typedarray: 0.0.6 + confbox@0.1.8: {} + + confbox@0.2.2: {} + convert-source-map@2.0.0: {} copy-anything@2.0.6: @@ -7737,6 +8314,10 @@ snapshots: dependencies: layout-base: 1.0.2 + cose-base@2.2.0: + dependencies: + layout-base: 2.0.1 + cosmiconfig@8.3.6(typescript@5.8.3): dependencies: import-fresh: 3.3.0 @@ -7750,12 +8331,6 @@ snapshots: dependencies: tslib: 2.8.1 - cross-spawn@5.1.0: - dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 - cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -7796,15 +8371,17 @@ snapshots: csstype@3.1.3: {} - cytoscape-cose-bilkent@4.1.0(cytoscape@3.28.1): + cytoscape-cose-bilkent@4.1.0(cytoscape@3.32.0): dependencies: cose-base: 1.0.3 - cytoscape: 3.28.1 + cytoscape: 3.32.0 - cytoscape@3.28.1: + cytoscape-fcose@2.2.0(cytoscape@3.32.0): dependencies: - heap: 0.2.7 - lodash: 4.17.21 + cose-base: 2.2.0 + cytoscape: 3.32.0 + + cytoscape@3.32.0: {} d3-array@2.12.1: dependencies: @@ -7973,7 +8550,7 @@ snapshots: d3-transition: 3.0.1(d3-selection@3.0.0) d3-zoom: 3.0.0 - dagre-d3-es@7.0.10: + dagre-d3-es@7.0.11: dependencies: d3: 7.9.0 lodash-es: 4.17.21 @@ -8004,6 +8581,10 @@ snapshots: dayjs@1.11.10: {} + dayjs@1.11.13: {} + + debounce@1.2.1: {} + debug@4.3.4: dependencies: ms: 2.1.2 @@ -8078,7 +8659,9 @@ snapshots: dependencies: domelementtype: 2.3.0 - dompurify@3.0.11: {} + dompurify@3.2.6: + optionalDependencies: + '@types/trusted-types': 2.0.7 domutils@3.1.0: dependencies: @@ -8099,20 +8682,24 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + duplexer@0.1.2: {} + eastasianwidth@0.2.0: {} electron-to-chromium@1.5.179: {} electron-to-chromium@1.5.74: {} - elkjs@0.9.2: {} - emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + entities@4.5.0: {} errno@0.1.8: @@ -8449,15 +9036,19 @@ snapshots: esutils@2.0.3: {} - execa@0.8.0: + execa@8.0.1: dependencies: - cross-spawn: 5.1.0 - get-stream: 3.0.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + exsolve@1.0.7: {} extend-shallow@2.0.1: dependencies: @@ -8471,6 +9062,8 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.1: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8531,7 +9124,7 @@ snapshots: flexsearch@0.7.43: {} - focus-visible@5.2.0: {} + follow-redirects@1.15.11: {} for-each@0.3.5: dependencies: @@ -8559,6 +9152,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -8595,7 +9191,7 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stream@3.0.0: {} + get-stream@8.0.1: {} get-symbol-description@1.1.0: dependencies: @@ -8649,6 +9245,8 @@ snapshots: dependencies: type-fest: 0.20.2 + globals@15.15.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -8721,9 +9319,13 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 - has-bigints@1.1.0: {} + gzip-size@6.0.0: + dependencies: + duplexer: 0.1.2 - has-flag@2.0.0: {} + hachure-fill@0.5.2: {} + + has-bigints@1.1.0: {} has-flag@3.0.0: {} @@ -8796,7 +9398,7 @@ snapshots: hast-util-from-parse5: 8.0.1 hast-util-to-parse5: 8.0.0 html-void-elements: 3.0.0 - mdast-util-to-hast: 13.1.0 + mdast-util-to-hast: 13.2.0 parse5: 7.1.2 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 @@ -8878,12 +9480,14 @@ snapshots: property-information: 6.4.1 space-separated-tokens: 2.0.2 - heap@0.2.7: {} - html-entities@2.6.0: {} + html-escaper@2.0.2: {} + html-void-elements@3.0.0: {} + human-signals@5.0.0: {} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -8939,8 +9543,6 @@ snapshots: internmap@2.0.3: {} - intersection-observer@0.12.2: {} - is-alphabetical@1.0.4: {} is-alphabetical@2.0.1: {} @@ -9015,6 +9617,8 @@ snapshots: is-decimal@2.0.1: {} + is-docker@3.0.0: {} + is-empty@1.2.0: {} is-extendable@0.1.1: {} @@ -9046,6 +9650,10 @@ snapshots: is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-map@2.0.3: {} is-negative-zero@2.0.3: {} @@ -9067,6 +9675,8 @@ snapshots: dependencies: isobject: 3.0.1 + is-plain-object@5.0.0: {} + is-reference@3.0.2: dependencies: '@types/estree': 1.0.5 @@ -9084,7 +9694,7 @@ snapshots: dependencies: call-bound: 1.0.4 - is-stream@1.1.0: {} + is-stream@3.0.0: {} is-string@1.1.1: dependencies: @@ -9116,6 +9726,14 @@ snapshots: is-whitespace@0.3.0: {} + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + is64bit@2.0.0: + dependencies: + system-architecture: 0.1.0 + isarray@2.0.5: {} isexe@2.0.0: {} @@ -9205,8 +9823,20 @@ snapshots: kleur@4.1.5: {} + kolorist@1.8.0: {} + + langium@3.3.1: + dependencies: + chevrotain: 11.0.3 + chevrotain-allstar: 0.3.1(chevrotain@11.0.3) + vscode-languageserver: 9.0.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.0.8 + layout-base@1.0.2: {} + layout-base@2.0.1: {} + lazy-cache@2.0.2: dependencies: set-getter: 0.1.1 @@ -9247,6 +9877,12 @@ snapshots: '@npmcli/config': 8.2.0 import-meta-resolve: 4.0.0 + local-pkg@1.1.1: + dependencies: + mlly: 1.7.4 + pkg-types: 2.1.0 + quansync: 0.2.10 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -9263,8 +9899,6 @@ snapshots: lodash.merge@4.6.2: {} - lodash@4.17.21: {} - longest-streak@3.1.0: {} loose-envify@1.4.0: @@ -9277,11 +9911,6 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@4.1.5: - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -9308,6 +9937,8 @@ snapshots: dependencies: react: 18.3.1 + marked@15.0.12: {} + marked@5.1.2: {} math-intrinsics@1.1.0: {} @@ -9336,24 +9967,24 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-from-markdown@1.3.1: + mdast-util-from-markdown@2.0.0: dependencies: - '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 decode-named-character-reference: 1.0.2 - mdast-util-to-string: 3.2.0 - micromark: 3.2.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-decode-string: 1.1.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - unist-util-stringify-position: 3.0.3 - uvu: 0.5.6 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color - mdast-util-from-markdown@2.0.0: + mdast-util-from-markdown@2.0.2: dependencies: '@types/mdast': 4.0.3 '@types/unist': 3.0.2 @@ -9393,7 +10024,7 @@ snapshots: dependencies: '@types/mdast': 4.0.3 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 micromark-util-normalize-identifier: 2.0.0 transitivePeerDependencies: @@ -9402,7 +10033,7 @@ snapshots: mdast-util-gfm-strikethrough@2.0.0: dependencies: '@types/mdast': 4.0.3 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color @@ -9412,7 +10043,7 @@ snapshots: '@types/mdast': 4.0.3 devlop: 1.1.0 markdown-table: 3.0.3 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color @@ -9421,14 +10052,14 @@ snapshots: dependencies: '@types/mdast': 4.0.3 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color mdast-util-gfm@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-gfm-autolink-literal: 2.0.0 mdast-util-gfm-footnote: 2.0.0 mdast-util-gfm-strikethrough: 2.0.0 @@ -9444,7 +10075,7 @@ snapshots: '@types/mdast': 4.0.3 devlop: 1.1.0 longest-streak: 3.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.0 unist-util-remove-position: 5.0.0 transitivePeerDependencies: @@ -9481,7 +10112,7 @@ snapshots: mdast-util-mdx@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.2 mdast-util-mdx-expression: 2.0.0 mdast-util-mdx-jsx: 3.1.2 mdast-util-mdxjs-esm: 2.0.1 @@ -9505,7 +10136,7 @@ snapshots: '@types/mdast': 4.0.3 unist-util-is: 6.0.0 - mdast-util-to-hast@13.1.0: + mdast-util-to-hast@13.2.0: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.3 @@ -9530,10 +10161,6 @@ snapshots: mdast-util-to-string@2.0.0: {} - mdast-util-to-string@3.2.0: - dependencies: - '@types/mdast': 3.0.15 - mdast-util-to-string@4.0.0: dependencies: '@types/mdast': 4.0.3 @@ -9542,30 +10169,41 @@ snapshots: mdn-data@2.0.30: {} + merge-stream@2.0.0: {} + merge2@1.4.1: {} - mermaid@10.9.0: + mermaid-isomorphic@3.0.4(patch_hash=tt5abewtk4kmqtpqfe2f44hnpa)(playwright@1.54.2): dependencies: - '@braintree/sanitize-url': 6.0.4 - '@types/d3-scale': 4.0.8 - '@types/d3-scale-chromatic': 3.0.3 - cytoscape: 3.28.1 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.28.1) + '@fortawesome/fontawesome-free': 6.7.2 + mermaid: 11.7.0 + optionalDependencies: + playwright: 1.54.2 + transitivePeerDependencies: + - supports-color + + mermaid@11.7.0: + dependencies: + '@braintree/sanitize-url': 7.1.1 + '@iconify/utils': 2.3.0 + '@mermaid-js/parser': 0.5.0 + '@types/d3': 7.4.3 + cytoscape: 3.32.0 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.32.0) + cytoscape-fcose: 2.2.0(cytoscape@3.32.0) d3: 7.9.0 d3-sankey: 0.12.3 - dagre-d3-es: 7.0.10 - dayjs: 1.11.10 - dompurify: 3.0.11 - elkjs: 0.9.2 + dagre-d3-es: 7.0.11 + dayjs: 1.11.13 + dompurify: 3.2.6 katex: 0.16.10 khroma: 2.1.0 lodash-es: 4.17.21 - mdast-util-from-markdown: 1.3.1 - non-layered-tidy-tree-layout: 2.0.2 - stylis: 4.3.1 + marked: 15.0.12 + roughjs: 4.6.6 + stylis: 4.3.6 ts-dedent: 2.2.0 - uuid: 9.0.1 - web-worker: 1.3.0 + uuid: 11.1.0 transitivePeerDependencies: - supports-color @@ -9575,25 +10213,6 @@ snapshots: mhchemparser@4.2.1: {} - micromark-core-commonmark@1.1.0: - dependencies: - decode-named-character-reference: 1.0.2 - micromark-factory-destination: 1.1.0 - micromark-factory-label: 1.1.0 - micromark-factory-space: 1.1.0 - micromark-factory-title: 1.1.0 - micromark-factory-whitespace: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-chunked: 1.1.0 - micromark-util-classify-character: 1.1.0 - micromark-util-html-tag-name: 1.2.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-resolve-all: 1.1.0 - micromark-util-subtokenize: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - micromark-core-commonmark@2.0.0: dependencies: decode-named-character-reference: 1.0.2 @@ -9730,8 +10349,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) micromark-extension-mdx-expression: 3.0.0 micromark-extension-mdx-jsx: 3.0.0 micromark-extension-mdx-md: 2.0.0 @@ -9739,25 +10358,12 @@ snapshots: micromark-util-combine-extensions: 2.0.0 micromark-util-types: 2.0.0 - micromark-factory-destination@1.1.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - micromark-factory-destination@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-factory-label@1.1.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - micromark-factory-label@2.0.0: dependencies: devlop: 1.1.0 @@ -9776,23 +10382,11 @@ snapshots: unist-util-position-from-estree: 2.0.0 vfile-message: 4.0.2 - micromark-factory-space@1.1.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-types: 1.1.0 - micromark-factory-space@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-types: 2.0.0 - micromark-factory-title@1.1.0: - dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - micromark-factory-title@2.0.0: dependencies: micromark-factory-space: 2.0.0 @@ -9800,13 +10394,6 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-factory-whitespace@1.1.0: - dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - micromark-factory-whitespace@2.0.0: dependencies: micromark-factory-space: 2.0.0 @@ -9814,61 +10401,30 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-util-character@1.2.0: - dependencies: - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - micromark-util-character@2.1.0: dependencies: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-util-chunked@1.1.0: - dependencies: - micromark-util-symbol: 1.1.0 - micromark-util-chunked@2.0.0: dependencies: micromark-util-symbol: 2.0.0 - micromark-util-classify-character@1.1.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - micromark-util-classify-character@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-util-combine-extensions@1.1.0: - dependencies: - micromark-util-chunked: 1.1.0 - micromark-util-types: 1.1.0 - micromark-util-combine-extensions@2.0.0: dependencies: micromark-util-chunked: 2.0.0 micromark-util-types: 2.0.0 - micromark-util-decode-numeric-character-reference@1.1.0: - dependencies: - micromark-util-symbol: 1.1.0 - micromark-util-decode-numeric-character-reference@2.0.1: dependencies: micromark-util-symbol: 2.0.0 - micromark-util-decode-string@1.1.0: - dependencies: - decode-named-character-reference: 1.0.2 - micromark-util-character: 1.2.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-decode-string@2.0.0: dependencies: decode-named-character-reference: 1.0.2 @@ -9876,8 +10432,6 @@ snapshots: micromark-util-decode-numeric-character-reference: 2.0.1 micromark-util-symbol: 2.0.0 - micromark-util-encode@1.1.0: {} - micromark-util-encode@2.0.0: {} micromark-util-events-to-acorn@2.0.2: @@ -9891,45 +10445,22 @@ snapshots: micromark-util-types: 2.0.0 vfile-message: 4.0.2 - micromark-util-html-tag-name@1.2.0: {} - micromark-util-html-tag-name@2.0.0: {} - micromark-util-normalize-identifier@1.1.0: - dependencies: - micromark-util-symbol: 1.1.0 - micromark-util-normalize-identifier@2.0.0: dependencies: micromark-util-symbol: 2.0.0 - micromark-util-resolve-all@1.1.0: - dependencies: - micromark-util-types: 1.1.0 - micromark-util-resolve-all@2.0.0: dependencies: micromark-util-types: 2.0.0 - micromark-util-sanitize-uri@1.2.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-encode: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-sanitize-uri@2.0.0: dependencies: micromark-util-character: 2.1.0 micromark-util-encode: 2.0.0 micromark-util-symbol: 2.0.0 - micromark-util-subtokenize@1.1.0: - dependencies: - micromark-util-chunked: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - micromark-util-subtokenize@2.0.0: dependencies: devlop: 1.1.0 @@ -9937,12 +10468,8 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-util-symbol@1.1.0: {} - micromark-util-symbol@2.0.0: {} - micromark-util-types@1.1.0: {} - micromark-util-types@2.0.0: {} micromark@2.11.4: @@ -9952,28 +10479,6 @@ snapshots: transitivePeerDependencies: - supports-color - micromark@3.2.0: - dependencies: - '@types/debug': 4.1.12 - debug: 4.4.0 - decode-named-character-reference: 1.0.2 - micromark-core-commonmark: 1.1.0 - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-chunked: 1.1.0 - micromark-util-combine-extensions: 1.1.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-encode: 1.1.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-resolve-all: 1.1.0 - micromark-util-sanitize-uri: 1.2.0 - micromark-util-subtokenize: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - transitivePeerDependencies: - - supports-color - micromark@4.0.0: dependencies: '@types/debug': 4.1.12 @@ -10010,6 +10515,10 @@ snapshots: mime@1.6.0: optional: true + mimic-fn@4.0.0: {} + + mini-svg-data-uri@1.4.4: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -10029,6 +10538,13 @@ snapshots: mj-context-menu@0.6.1: {} + mlly@1.7.4: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + motion-dom@12.11.0: dependencies: motion-utils: 12.9.4 @@ -10045,6 +10561,8 @@ snapshots: mri@1.2.0: {} + mrmime@2.0.1: {} + ms@2.1.2: {} ms@2.1.3: {} @@ -10065,41 +10583,43 @@ snapshots: sax: 1.4.1 optional: true - next-image-export-optimizer@1.18.0(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): + negotiator@1.0.0: {} + + next-image-export-optimizer@1.18.0(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): dependencies: - next: 14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 sharp: 0.33.5 typescript: 5.8.3 - next-query-params@5.0.1(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(use-query-params@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + next-query-params@5.0.1(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(use-query-params@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: - next: 14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 tslib: 2.8.1 use-query-params: 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next-sitemap@4.2.3(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + next-sitemap@4.2.3(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: '@corex/deepmerge': 4.0.43 '@next/env': 13.5.6 fast-glob: 3.3.3 minimist: 1.2.8 - next: 14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-themes@0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next-with-less@3.0.1(less-loader@12.2.0(less@4.2.1))(less@4.2.1)(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + next-with-less@3.0.1(less-loader@12.2.0(less@4.2.1))(less@4.2.1)(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: clone-deep: 4.0.1 less: 4.2.1 less-loader: 12.2.0(less@4.2.1) - next: 14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.29 '@swc/helpers': 0.5.5 @@ -10120,36 +10640,35 @@ snapshots: '@next/swc-win32-arm64-msvc': 14.2.29 '@next/swc-win32-ia32-msvc': 14.2.29 '@next/swc-win32-x64-msvc': 14.2.29 + '@playwright/test': 1.54.2 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - nextra-theme-docs@3.0.0-alpha.28(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.0.0-alpha.28(patch_hash=rlrllt7ydx3t6f2hccqi2i2pf4)(@types/react@18.3.23)(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + nextra-theme-docs@3.3.1(patch_hash=6nt5xhmisiwamimp7yowa7aoxq)(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(nextra@3.3.1(patch_hash=6ssvmycplmexou7j5jtwzrnhmy)(@types/react@18.3.23)(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@headlessui/react': 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@popperjs/core': 2.11.8 + '@headlessui/react': 2.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) clsx: 2.1.1 escape-string-regexp: 5.0.0 flexsearch: 0.7.43 - focus-visible: 5.2.0 - intersection-observer: 0.12.2 - next: 14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next-themes: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - nextra: 3.0.0-alpha.28(patch_hash=rlrllt7ydx3t6f2hccqi2i2pf4)(@types/react@18.3.23)(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + next: 14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-themes: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + nextra: 3.3.1(patch_hash=6ssvmycplmexou7j5jtwzrnhmy)(@types/react@18.3.23)(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) scroll-into-view-if-needed: 3.1.0 zod: 3.22.4 - nextra@3.0.0-alpha.28(patch_hash=rlrllt7ydx3t6f2hccqi2i2pf4)(@types/react@18.3.23)(next@14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3): + nextra@3.3.1(patch_hash=6ssvmycplmexou7j5jtwzrnhmy)(@types/react@18.3.23)(next@14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3): dependencies: - '@headlessui/react': 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@formatjs/intl-localematcher': 0.5.10 + '@headlessui/react': 2.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mdx-js/mdx': 3.0.1 '@mdx-js/react': 3.0.1(@types/react@18.3.23)(react@18.3.1) '@napi-rs/simple-git': 0.1.16 '@shikijs/twoslash': 1.2.1(typescript@5.8.3) - '@theguild/remark-mermaid': 0.0.7(react@18.3.1) - '@theguild/remark-npm2yarn': 0.3.0 + '@theguild/remark-mermaid': 0.1.3(react@18.3.1) + '@theguild/remark-npm2yarn': 0.3.3 better-react-mathjax: 2.0.3(react@18.3.1) clsx: 2.1.1 estree-util-to-js: 2.0.0 @@ -10159,12 +10678,17 @@ snapshots: gray-matter: 4.0.3 hast-util-to-estree: 3.1.0 katex: 0.16.10 - next: 14.2.29(@babel/core@7.26.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm: 3.0.0 + mdast-util-to-hast: 13.2.0 + negotiator: 1.0.0 + next: 14.2.29(@babel/core@7.26.0)(@playwright/test@1.54.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) p-limit: 6.1.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + react-medium-image-zoom: 5.2.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rehype-katex: 7.0.0 - rehype-pretty-code: 0.13.2(shiki@1.2.1) + rehype-pretty-code: 0.14.0(shiki@1.2.1) rehype-raw: 7.0.0 remark-frontmatter: 5.0.0 remark-gfm: 4.0.0 @@ -10173,10 +10697,10 @@ snapshots: remark-smartypants: 3.0.2 shiki: 1.2.1 slash: 5.1.0 - title: 3.5.3 + title: 4.0.1 unist-util-remove: 4.0.0 unist-util-visit: 5.0.0 - yaml: 2.4.1 + yaml: 2.6.1 zod: 3.22.4 zod-validation-error: 3.3.0(zod@3.22.4) transitivePeerDependencies: @@ -10199,8 +10723,6 @@ snapshots: node-releases@2.0.19: {} - non-layered-tidy-tree-layout@2.0.2: {} - nopt@7.2.0: dependencies: abbrev: 2.0.0 @@ -10215,11 +10737,11 @@ snapshots: npm-normalize-package-bin@3.0.1: {} - npm-run-path@2.0.2: + npm-run-path@5.3.0: dependencies: - path-key: 2.0.1 + path-key: 4.0.0 - npm-to-yarn@2.2.1: {} + npm-to-yarn@3.0.1: {} nth-check@2.1.1: dependencies: @@ -10273,6 +10795,12 @@ snapshots: dependencies: wrappy: 1.0.2 + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + opener@1.5.2: {} + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 @@ -10288,8 +10816,6 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - p-finally@1.0.0: {} - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -10308,6 +10834,8 @@ snapshots: package-json-from-dist@1.0.1: {} + package-manager-detector@1.3.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -10374,14 +10902,16 @@ snapshots: mixin-deep: 1.3.2 trim-leading-lines: 0.1.1 + path-data-parser@0.1.0: {} + path-exists@4.0.0: {} path-is-absolute@1.0.1: {} - path-key@2.0.1: {} - path-key@3.1.1: {} + path-key@4.0.0: {} + path-parse@1.0.7: {} path-scurry@1.11.1: @@ -10391,6 +10921,8 @@ snapshots: path-type@4.0.0: {} + pathe@2.0.3: {} + periscopic@3.1.0: dependencies: '@types/estree': 1.0.5 @@ -10408,6 +10940,33 @@ snapshots: pirates@4.0.6: {} + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + + pkg-types@2.1.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.7 + pathe: 2.0.3 + + playwright-core@1.54.2: {} + + playwright@1.54.2: + dependencies: + playwright-core: 1.54.2 + optionalDependencies: + fsevents: 2.3.2 + + points-on-curve@0.2.0: {} + + points-on-path@0.2.1: + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + possible-typed-array-names@1.1.0: {} postcss-import@15.1.0(postcss@8.4.49): @@ -10417,6 +10976,13 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.9 + postcss-import@16.1.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.9 + postcss-js@4.0.1(postcss@8.4.49): dependencies: camelcase-css: 2.0.1 @@ -10488,10 +11054,15 @@ snapshots: prr@1.0.1: optional: true - pseudomap@1.0.2: {} + pump@3.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 punycode@2.3.1: {} + quansync@0.2.10: {} + queue-microtask@1.2.3: {} ranges-apply@7.0.20: @@ -10614,13 +11185,29 @@ snapshots: unist-util-visit-parents: 6.0.1 vfile: 6.0.1 + rehype-mermaid@3.0.0(playwright@1.54.2): + dependencies: + '@types/hast': 3.0.4 + hast-util-from-html-isomorphic: 2.0.0 + hast-util-to-text: 4.0.0 + mermaid-isomorphic: 3.0.4(patch_hash=tt5abewtk4kmqtpqfe2f44hnpa)(playwright@1.54.2) + mini-svg-data-uri: 1.4.4 + space-separated-tokens: 2.0.2 + unified: 11.0.5 + unist-util-visit-parents: 6.0.1 + vfile: 6.0.1 + optionalDependencies: + playwright: 1.54.2 + transitivePeerDependencies: + - supports-color + rehype-parse@9.0.0: dependencies: '@types/hast': 3.0.4 hast-util-from-html: 2.0.1 unified: 11.0.5 - rehype-pretty-code@0.13.2(shiki@1.2.1): + rehype-pretty-code@0.14.0(shiki@1.2.1): dependencies: '@types/hast': 3.0.4 hast-util-to-string: 3.0.1 @@ -10708,7 +11295,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.3 - mdast-util-to-hast: 13.1.0 + mdast-util-to-hast: 13.2.0 unified: 11.0.5 vfile: 6.0.1 @@ -10780,6 +11367,13 @@ snapshots: robust-predicates@3.0.2: {} + roughjs@4.6.6: + dependencies: + hachure-fill: 0.5.2 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 + rss@1.2.2: dependencies: mime-types: 2.1.13 @@ -10905,16 +11499,10 @@ snapshots: '@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-x64': 0.33.5 - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - shebang-regex@1.0.0: {} - shebang-regex@3.0.0: {} shiki@1.2.1: @@ -10949,14 +11537,18 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - signal-exit@3.0.7: {} - signal-exit@4.1.0: {} simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 + sirv@2.0.4: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + slash@3.0.0: {} slash@5.1.0: {} @@ -10990,6 +11582,13 @@ snapshots: streamsearch@1.1.0: {} + streamx@2.22.1: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.6.1 + string-collapse-leading-whitespace@7.0.9: {} string-env-interpolation@1.0.1: {} @@ -11094,7 +11693,7 @@ snapshots: strip-bom-string@1.0.0: {} - strip-eof@1.0.0: {} + strip-final-newline@3.0.0: {} strip-json-comments@3.1.1: {} @@ -11115,7 +11714,7 @@ snapshots: optionalDependencies: '@babel/core': 7.26.0 - stylis@4.3.1: {} + stylis@4.3.6: {} sucrase@3.35.0: dependencies: @@ -11127,10 +11726,6 @@ snapshots: pirates: 4.0.6 ts-interface-checker: 0.1.13 - supports-color@4.5.0: - dependencies: - has-flag: 2.0.0 - supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -11160,6 +11755,8 @@ snapshots: '@pkgr/core': 0.1.1 tslib: 2.8.1 + system-architecture@0.1.0: {} + tabbable@6.2.0: {} tailwindcss@3.4.17: @@ -11189,6 +11786,26 @@ snapshots: transitivePeerDependencies: - ts-node + tar-fs@3.1.0: + dependencies: + pump: 3.0.3 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.2.0 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-buffer + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.1 + + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + text-table@0.2.0: {} thenify-all@1.6.0: @@ -11203,14 +11820,13 @@ snapshots: tiny-invariant@1.3.3: {} - title@3.5.3: - dependencies: - arg: 1.0.0 - chalk: 2.3.0 - clipboardy: 1.2.2 - titleize: 1.0.0 + tinyexec@1.0.1: {} - titleize@1.0.0: {} + title@4.0.1: + dependencies: + arg: 5.0.2 + chalk: 5.4.1 + clipboardy: 4.0.0 to-object-path@0.3.0: dependencies: @@ -11220,6 +11836,8 @@ snapshots: dependencies: is-number: 7.0.0 + totalist@3.0.1: {} + tr46@0.0.3: {} trim-leading-lines@0.1.1: @@ -11304,6 +11922,8 @@ snapshots: typescript@5.8.3: {} + ufo@1.6.1: {} + unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -11505,7 +12125,7 @@ snapshots: util-deprecate@1.0.2: {} - uuid@9.0.1: {} + uuid@11.1.0: {} uvu@0.5.6: dependencies: @@ -11565,8 +12185,23 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 + vscode-jsonrpc@8.2.0: {} + + vscode-languageserver-protocol@3.17.5: + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + + vscode-languageserver-textdocument@1.0.12: {} + vscode-languageserver-types@3.17.5: {} + vscode-languageserver@9.0.1: + dependencies: + vscode-languageserver-protocol: 3.17.5 + + vscode-uri@3.0.8: {} + w3c-keyname@2.2.8: {} walk-up-path@3.0.1: {} @@ -11577,10 +12212,27 @@ snapshots: web-namespaces@2.0.1: {} - web-worker@1.3.0: {} - webidl-conversions@3.0.1: {} + webpack-bundle-analyzer@4.10.1: + dependencies: + '@discoveryjs/json-ext': 0.5.7 + acorn: 8.15.0 + acorn-walk: 8.3.4 + commander: 7.2.0 + debounce: 1.2.1 + escape-string-regexp: 4.0.0 + gzip-size: 6.0.0 + html-escaper: 2.0.2 + is-plain-object: 5.0.0 + opener: 1.5.2 + picocolors: 1.1.1 + sirv: 2.0.4 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -11627,10 +12279,6 @@ snapshots: gopd: 1.2.0 has-tostringtag: 1.0.2 - which@1.3.1: - dependencies: - isexe: 2.0.0 - which@2.0.2: dependencies: isexe: 2.0.0 @@ -11651,20 +12299,18 @@ snapshots: wrappy@1.0.2: {} + ws@7.5.10: {} + ws@8.18.0: {} xml@1.0.1: {} xmldom-sre@0.1.31: {} - yallist@2.1.2: {} - yallist@3.1.1: {} yallist@4.0.0: {} - yaml@2.4.1: {} - yaml@2.6.1: {} yocto-queue@0.1.0: {} diff --git a/postcss.config.cjs b/postcss.config.cjs index 1dbd9b69d3..67f8bb3254 100644 --- a/postcss.config.cjs +++ b/postcss.config.cjs @@ -5,5 +5,6 @@ module.exports = { "tailwindcss/nesting": {}, tailwindcss: {}, autoprefixer: {}, + "postcss-import": {}, }, } diff --git a/public/images/next-image-export-optimizer-hashes.json b/public/images/next-image-export-optimizer-hashes.json index d4d8015a93..0a24a53bb1 100644 --- a/public/images/next-image-export-optimizer-hashes.json +++ b/public/images/next-image-export-optimizer-hashes.json @@ -1,8 +1,17 @@ { + "/1.982233db.webp": "DAZPItJcsNWkv9k6YWJRHGDMi+PHF5ASyKfFTfrFrls=", + "/1.9f150adb.webp": "mAmxZUks6dKIsZemF9Mf2li9s3QSJWXb+IXGZiKjGsM=", "/1.b9d923f4.jpg": "keiubC5QVfPeVlBLL-obe2+O-Br5pxC1J41FhkUkVLU=", + "/10.58399898.webp": "wGhlbDHJv6GR6bOf7l12Ly1XRyWYKpWpDPLNxiSIEHE=", "/10_53228256862_o.bede884c.jpg": "IY4m-OjhIMpy-8gPjIMeYEZJCyuEgayd1gKBaWX97BM=", + "/11.25c07c94.webp": "emuRlCiEIkq6x1TEcj0o-xqRx2uppHiHrtPdZw2T87c=", + "/11.b8f87c28.webp": "CfMMpl-2L-PdvfKb9PktNcq3FY+iywQ2r-tBPNwTL2c=", "/11_53229130936_o.11efec5f.jpg": "diSe5JVfbzlK9K0w5GaVx67dAjah9rKBP28CM7RvPdI=", + "/12.1f5de7e8.webp": "0nn5tPRcCBdpHCBNHR8SRNitdBhqPbjMUl77RgWXwmM=", + "/12.80edfe31.webp": "Utp6vJk98yeE3eTUslQ3I36uu0FKLwWlAbJlLNobK6Y=", "/12_53229130901_o.0594c3d9.jpg": "tBAU5LhNzFBWjvCS+R381Oxv1aLJ4p2lI5Yuyk60Oag=", + "/13.2ed60bb6.webp": "FRuEsjvn5yxf0Xgk0rfri6yHOKeXc8EQsxA-VwrsEao=", + "/13.372592cd.webp": "KIF2PXmz3C1D7MlMkF2m95lrqkjmkqJh0+rzwGknz-4=", "/13_53229431753_o.312ed4c6.jpg": "UWubZOcIMlv52LYSBZc68bN6cJ21V-bIoONu93fbMxc=", "/14_53228256817_o.e967eba8.jpg": "I5ISHXYPMPhVvXcapBBJSjiBT-kpugnxPaVb-FLA+Ko=", "/151_53229506084_o.2e2d8d93.jpg": "HxYTSOHfoDBVCIY2FaaxUcOV6+geraqYKjTq19z0Cgk=", @@ -11,27 +20,49 @@ "/17_53229431688_o.4c21d256.jpg": "yrv5EILkRoNtrU9XsUL0cFZ9Uw1xLhMh9MB4KSOpRIA=", "/18_53229629645_o.379c2659.jpg": "ttOW81TbKCtikFu1WUJLgoS2TGUeFXjt6n8DVHxrwHc=", "/1_53229506279_o.f0bca9c1.jpg": "yHvLYpCAhVTmTg39yDNokfYqQ8S1ZZi86xI26NYQbbU=", + "/2.45dac2f6.webp": "5giIntTvHEtW4YKcvzWyr93T19WbBYiYHZ7-97m8CQ4=", + "/2.4607ed4f.webp": "f2NDIzjfiAUIHTlg3Y+gcWiRNdM8JbN6BA2RXycEBNQ=", "/2.99d027a1.jpg": "uPiLK06UD56JNe68gW0QEyLoLf446VRNy7Ia0FuQ7HI=", "/2_53229431883_o.cddf7051.jpg": "Wr8okGNc7WieV3dpspNi5MMv3BXqySV1fDAIJY842gI=", "/3.2ed01ad0.jpg": "Ftp2218Nf9X1YQA342243Q-iklHDBJ8IdA59-iIDmD4=", + "/3.40539a03.webp": "gAgt3cACfsDGa+uQImhFMzBo-dX7pGtULWRK8po6sgc=", + "/3.8b9a97e4.webp": "mwfpC-0F9HGau5iTkDdxPX4MgEXGSIrrme1AuIjNfZE=", "/31_53228256917_o.f420933f.jpg": "v33-soBSAXKQGEsKU+XbNNaQqoPwl7kybxfZTsB7sco=", "/3_53229131021_o.dfd0081f.jpg": "goLNvvOrHmTqYk4K9ZeEGX6KZeXBN6zpSIS3C-GwR+0=", + "/4.9cea345b.webp": "OIJvuaLA+UuPet-VkSw16vOg6E+w6dmqbbKxRnNQLxw=", + "/4.a081ca23.webp": "cdq3dvJh8XnUlcCYS+wilStqck1-6IQ-cvvGBrIlLfc=", "/4.f41621f8.jpg": "liG36J+08jIQzmQIrMcMsQ5BzjKhxLX5HGclFdDoOIs=", "/5.5e7fbfc8.jpg": "wjKxQX2w8yb2zbNvWf+-4kkqC3FXw7M6CuUvgGuu0pw=", + "/5.95dd3cfa.webp": "hukBtqFbxuyoVSnFI99BeYqh1esjUfP9gYHMuxHZw7A=", "/5_53228256882_o.2173b47b.jpg": "vodeR1lNx7CWO6e3j7MsD0MuvPBv8D1Mey+iRA36crU=", "/6.7cec175d.jpg": "+AGRr5xsz14uZrdLFOZ3nTT7vvhBdg-PgC4Kty1toSs=", + "/6.a9e9ef54.webp": "LoTArxYxGSkkO57CnkKMsZ3+jcxF5DQ74M9TEtoQFLI=", + "/6.f303b2b0.webp": "x+9YVxnjfiZ8eWKUeQvbty82O6IGi-TZSYcjgYP9AmY=", + "/7.5c473a95.webp": "ymbpxb2EUD9eCfSa8Yc+0XQr7AIzn8jUAZCX+JDvS6E=", + "/7.8a7605d4.webp": "dnxvSxaDK0KpDdHIDD02+Sv59R64V3QN9uklMNN-T6Y=", "/7_53229506199_o.9bbeb0b1.jpg": "JunA4ywMiDM4xmQpFUo6YW8Q03gYrB-6NNj6zfmgk4A=", + "/8.36a60072.webp": "WkLbG000irZwPexBmq4XfB770l0Bx4VNBbbofOIDFsI=", + "/8.9d69d599.webp": "H+BpdMeJnUaUowq8vJvVdDxg9KrJfh+2-rI1ZFeW-cw=", "/8.eafdc50d.jpg": "Xpw7kJ8jCbKlDu-wLxBevA52CZfp9mlbfQ43ldHeZmw=", "/8_53229629805_o.290e35be.jpg": "NfsXTg4KKkt1csv79IiZ3FyU3-CW1WTkp4883NgZam4=", "/9.4a558c85.jpg": "-iUSFWjVs4vunEea7FxDeNMOOvUs4VOEpScXJAwi0DA=", + "/9.844b3dd8.webp": "sw21n8SoYJfqMMmrPDoHuk7rPkgbAcSelf99kZeujmo=", + "/9.aee863a4.webp": "qu+xa-dpm5C8AByc3HChjPET+FKw9VyvztrNKY1QbRY=", + "/Comparison_Method.b12d6d2c.gif": "O9Anxn1Z52YzvH8Ygfb2F485U1maEOTt5LKAk45963I=", "/annual-report-1.5ebe2b34.png": "HmbFFbaUL79rvnCKQ-2oRSLETM2FFh5v5dZxwWquuVM=", "/audience.f60c1c99.jpg": "pqx3E31xAO87mNEBlZKqCTX+LRiPlOuQThWQZf08A4A=", "/banner.10d4d66b.jpg": "9UJqBQ9RQu2sxDdJ5uaQr3crx2ZXrlOKMAmY82R8ZBA=", + "/blur-bean-cropped.62af4aa2.webp": "rdPhhzi5e+RLv-u0B-uPkp-eCYnyGlO84Yn0zCLLG4c=", + "/blur-bean.21b930bd.webp": "eTUigN2JSyvccNXMnRwneZJ1YIeNnrVs3klseGSUa7o=", + "/blur-bean.314cdc4a.webp": "YAysN2NZeYYWHNI8cFCabzsTifCknmbp-r+P1LAs1bE=", + "/blur-bean.d5aa6d13.webp": "30xrtHSB6py7q6r2HxdKzm4gt8WoCiWRownamqyf3wM=", + "/blur-bean.e3e29fde.webp": "P51vlY-ohTlEurj7zyND+Xs2UCfBaUZuNZhj9OEvmq4=", + "/blur-blob.806d2505.webp": "BInXgg69BRLrWxxX-vMwO09WhUgC8umt6F17w9-4lP0=", + "/blur.701b3d8a.webp": "WzjpcF01ReIsRBgeKAs0KyCfB8h6tZk2lzY89i9xlKk=", "/business_layer.68bf746f.png": "DwCtOs-q1Y-DgBxEj6NqyVaOAiq5zCB8xPF-rZ5Qe1U=", - "/coursera.968d6897.png": "FmQxkHPToU9hZQFvKVSRa6+-5xppLy6lJJhqCEIiCzk=", "/dataloader-query.9c90539e.png": "2xPPUoCjbgMKsH3EPLBAImfsNb-MYPb-Qf6gXg8QCn4=", - "/facebook.0e9e1517.png": "GF7faknjzTM3GcnR7UBMPO52mQxAsVKt9y-XhCkbomI=", - "/github.0821dbe0.png": "lt2XclE2g9CgsYuX4rz1sLs0oP94o+Etx0HbeiJje6Y=", + "/fernando.8a674f38.webp": "VLcChFQr-iiIKTZ2OftoAAWS8cjUYAaBV0C-U9vcKS4=", + "/frances.033cc832.webp": "WDYuYaN-sUoPKcZWY6udTedmfrgDg80CQW2Jr4LF8ng=", "/graphql-cover-1_53228256677_o.f1214f00.jpg": "OVKx+JK+SA2wdzmUs3VN+eHR7Fk2CXhTLYdNIyNbehg=", "/graphql-cover-2_53228256672_o.80b12e74.jpg": "eRqA89yK+I9hdGfjSlv7sIpExOhByCXKn7xY86Lt2yA=", "/graphql-cover-3_53228256612_o.a5360272.jpg": "MDj38ijAhAyJTMvi0vNE7JVj+uXRXNLUhdSXtZvEMT4=", @@ -134,22 +165,26 @@ "/graphqlconf-202395_53229430163_o.83d6ce30.jpg": "wGPGuLNhdPy1AKSdem7dB2U3hCnLNt0m7A697OKpMLA=", "/graphqlconf-202396_53229628185_o.e02e8158.jpg": "CwcPIFPl3qMN77xrq3PNo3IDu2xdE5t-XAmqMN7vvrA=", "/graphqlconf-2023graphqlconf-2023_53228255062_o.29b776c3.jpg": "iXr9Z8xwKZhM1pUZPRRTFEHbvwYlw81k6ZIqW5zh3x4=", + "/hero-photo.19f66b71.jpeg": "+1M5NcPmN+FvAM3dalHY2LN1vv+LNURKJEVZUw-yEZo=", "/hero1.2c973c2e.jpg": "jY1RePeWthuOOa5c59Yl4TQD4J731poNxeaqzKDFmfg=", "/hero2.fa425ea9.jpg": "siZR-Q3HPEB5l2gU0DAbheWVVUOCsrOuOv-Ch0xCR7M=", "/idit.feda6f62.jpg": "9oybNQ8aiuV++33v8KDL8ZgIL0H2T5UF3EjnhsksM5g=", - "/intuit.04140a09.png": "m84fUDz2YQxlNNMmbthcNfYr3bWhp23zEPxvP5ruo9Q=", "/layers-2x.9859cd12.png": "3D8k4Go-oWvQTcmIDFOwHTfm1eagZIqjwar3vFcoZY8=", "/layers.ef6db872.png": "fbR0XaZWR0olI2fUKeOWruBZ6HxRDSEYGXCzktrW4XA=", "/lee.dfa51298.png": "rG86vKMradTmaq1FH-F2-zwDzRkcw-qXK18Slp34VPs=", "/leebyron.4adb0a93.jpg": "poBi-hIdozz-Mn2PIKun7ZpX9q200f7m-5SkUt1XU-0=", + "/location-photo.8c4a71ef.webp": "D2r5lWoyQSdcclBUQB0bcxPdRdbfaiizSWJocmD7uZ4=", + "/logo-blurred.94c9eff4.webp": "+MCg5-u6UTMKypwln1HeLvrNm-13OHneZ8fkK8A1fjs=", + "/logo-mask.1694fb96.webp": "w1mI242Cka6-grRJCeOT5lWF2uf5hol5IRLjTwlqFZA=", "/marcandre.b8692933.jpg": "mUbreFySTVojHKZTl0VKcMQ9gHdSVCL47mSBnUYITBI=", "/marker-icon.d577052a.png": "L15ETF3vWj9pjeLgXar+ibZOYNJYXoQal5lJmpTWTbA=", + "/mask.d8b3d3a1.webp": "ooHSo7veWXOjMT0Db6aLQN+zHXY7gzxQlsdLnBLk2es=", "/pathological-query.2de43465.png": "Xoi58Mnu6FqfvNp4+gXgt-IyMDdMpdbqPUyNzlH5YJQ=", - "/pinterest.36b58187.png": "TlwGD0W-rRqoDgDND5x+cQrzz09xU+dmW6oP8+qSBug=", "/playground-transition-banner.2458871d.png": "ffm4o7utOWkmwaWC2KVVHPOz9zsaD6fG2P269pHT8uQ=", "/rest-api-people.c2b56e20.png": "KDbPJA1rAhVT43LeGLckdesx+bISV+6g0q9fJQNl5Tg=", - "/shopify.2cb330ea.png": "LRiC9+uEG-gHl-XYi4qrSXMAlpFglZLNZj1kBGF-Cag=", + "/speaker.5a4b04b3.webp": "rm++82SXr9oqVCuxwkK345jZeh0SmcJUoNDEMSOk2Bk=", "/speaker.674c5b86.jpg": "ISlnB9At3nuMk70rfRuMAu+k9aEhUNSwp7XgFMx5Bls=", + "/trudie.02ae47d4.webp": "usfvAbw1lOVGAmQ3-F5HNJJ33x7npr7aC1KKO4WgyeY=", "/unconf.651492c3.jpg": "mlpvU8glWqqsRn2n3-pgwRI+Jnk3sT7VQjsCL01e30c=", "/uri.387cb001.jpg": "kSx4huEjQidwIg6bF8UEWLiPACDl0nQ0aqxA2R2LIe0=", "/whiteboard.60eac8e3.jpg": "NodBqUaO+IanhuPaP9o5jCIe+gSrwyZ9TZ3QUdlWbBg=", diff --git a/public/img/graph-wash.png b/public/img/graph-wash.png deleted file mode 100644 index 678844a070..0000000000 Binary files a/public/img/graph-wash.png and /dev/null differ diff --git a/public/nextImageExportOptimizer/1.982233db-opt-10.WEBP b/public/nextImageExportOptimizer/1.982233db-opt-10.WEBP new file mode 100644 index 0000000000..6fb563c8fb Binary files /dev/null and b/public/nextImageExportOptimizer/1.982233db-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/1.982233db-opt-128.WEBP b/public/nextImageExportOptimizer/1.982233db-opt-128.WEBP new file mode 100644 index 0000000000..0409bcff2e Binary files /dev/null and b/public/nextImageExportOptimizer/1.982233db-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/1.982233db-opt-16.WEBP b/public/nextImageExportOptimizer/1.982233db-opt-16.WEBP new file mode 100644 index 0000000000..759517a1d4 Binary files /dev/null and b/public/nextImageExportOptimizer/1.982233db-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/1.982233db-opt-256.WEBP b/public/nextImageExportOptimizer/1.982233db-opt-256.WEBP new file mode 100644 index 0000000000..5a56c867ef Binary files /dev/null and b/public/nextImageExportOptimizer/1.982233db-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/1.982233db-opt-32.WEBP b/public/nextImageExportOptimizer/1.982233db-opt-32.WEBP new file mode 100644 index 0000000000..6084a18b85 Binary files /dev/null and b/public/nextImageExportOptimizer/1.982233db-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/1.982233db-opt-384.WEBP b/public/nextImageExportOptimizer/1.982233db-opt-384.WEBP new file mode 100644 index 0000000000..7a6ef8af38 Binary files /dev/null and b/public/nextImageExportOptimizer/1.982233db-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/1.982233db-opt-48.WEBP b/public/nextImageExportOptimizer/1.982233db-opt-48.WEBP new file mode 100644 index 0000000000..84e236eec2 Binary files /dev/null and b/public/nextImageExportOptimizer/1.982233db-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/1.982233db-opt-64.WEBP b/public/nextImageExportOptimizer/1.982233db-opt-64.WEBP new file mode 100644 index 0000000000..13551d15e6 Binary files /dev/null and b/public/nextImageExportOptimizer/1.982233db-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/1.982233db-opt-640.WEBP b/public/nextImageExportOptimizer/1.982233db-opt-640.WEBP new file mode 100644 index 0000000000..94eb79d05c Binary files /dev/null and b/public/nextImageExportOptimizer/1.982233db-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/1.982233db-opt-750.WEBP b/public/nextImageExportOptimizer/1.982233db-opt-750.WEBP new file mode 100644 index 0000000000..1a413055c7 Binary files /dev/null and b/public/nextImageExportOptimizer/1.982233db-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/1.982233db-opt-828.WEBP b/public/nextImageExportOptimizer/1.982233db-opt-828.WEBP new file mode 100644 index 0000000000..27fb4a8668 Binary files /dev/null and b/public/nextImageExportOptimizer/1.982233db-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/1.982233db-opt-96.WEBP b/public/nextImageExportOptimizer/1.982233db-opt-96.WEBP new file mode 100644 index 0000000000..39dbdcacf2 Binary files /dev/null and b/public/nextImageExportOptimizer/1.982233db-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/1.9f150adb-opt-10.WEBP b/public/nextImageExportOptimizer/1.9f150adb-opt-10.WEBP new file mode 100644 index 0000000000..cdb43a963b Binary files /dev/null and b/public/nextImageExportOptimizer/1.9f150adb-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/1.9f150adb-opt-128.WEBP b/public/nextImageExportOptimizer/1.9f150adb-opt-128.WEBP new file mode 100644 index 0000000000..1d9ae5ce51 Binary files /dev/null and b/public/nextImageExportOptimizer/1.9f150adb-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/1.9f150adb-opt-16.WEBP b/public/nextImageExportOptimizer/1.9f150adb-opt-16.WEBP new file mode 100644 index 0000000000..651643119a Binary files /dev/null and b/public/nextImageExportOptimizer/1.9f150adb-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/1.9f150adb-opt-256.WEBP b/public/nextImageExportOptimizer/1.9f150adb-opt-256.WEBP new file mode 100644 index 0000000000..98440cf348 Binary files /dev/null and b/public/nextImageExportOptimizer/1.9f150adb-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/1.9f150adb-opt-32.WEBP b/public/nextImageExportOptimizer/1.9f150adb-opt-32.WEBP new file mode 100644 index 0000000000..7362706339 Binary files /dev/null and b/public/nextImageExportOptimizer/1.9f150adb-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/1.9f150adb-opt-384.WEBP b/public/nextImageExportOptimizer/1.9f150adb-opt-384.WEBP new file mode 100644 index 0000000000..d31920582d Binary files /dev/null and b/public/nextImageExportOptimizer/1.9f150adb-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/1.9f150adb-opt-48.WEBP b/public/nextImageExportOptimizer/1.9f150adb-opt-48.WEBP new file mode 100644 index 0000000000..831d15354e Binary files /dev/null and b/public/nextImageExportOptimizer/1.9f150adb-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/1.9f150adb-opt-64.WEBP b/public/nextImageExportOptimizer/1.9f150adb-opt-64.WEBP new file mode 100644 index 0000000000..43b4604f20 Binary files /dev/null and b/public/nextImageExportOptimizer/1.9f150adb-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/1.9f150adb-opt-640.WEBP b/public/nextImageExportOptimizer/1.9f150adb-opt-640.WEBP new file mode 100644 index 0000000000..49521ac1ad Binary files /dev/null and b/public/nextImageExportOptimizer/1.9f150adb-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/1.9f150adb-opt-750.WEBP b/public/nextImageExportOptimizer/1.9f150adb-opt-750.WEBP new file mode 100644 index 0000000000..2c94351709 Binary files /dev/null and b/public/nextImageExportOptimizer/1.9f150adb-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/1.9f150adb-opt-828.WEBP b/public/nextImageExportOptimizer/1.9f150adb-opt-828.WEBP new file mode 100644 index 0000000000..e375455e65 Binary files /dev/null and b/public/nextImageExportOptimizer/1.9f150adb-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/1.9f150adb-opt-96.WEBP b/public/nextImageExportOptimizer/1.9f150adb-opt-96.WEBP new file mode 100644 index 0000000000..f7896bf670 Binary files /dev/null and b/public/nextImageExportOptimizer/1.9f150adb-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/10.58399898-opt-10.WEBP b/public/nextImageExportOptimizer/10.58399898-opt-10.WEBP new file mode 100644 index 0000000000..06c2e8e322 Binary files /dev/null and b/public/nextImageExportOptimizer/10.58399898-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/10.58399898-opt-128.WEBP b/public/nextImageExportOptimizer/10.58399898-opt-128.WEBP new file mode 100644 index 0000000000..eb1335a5ac Binary files /dev/null and b/public/nextImageExportOptimizer/10.58399898-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/10.58399898-opt-16.WEBP b/public/nextImageExportOptimizer/10.58399898-opt-16.WEBP new file mode 100644 index 0000000000..f9b6ffae8d Binary files /dev/null and b/public/nextImageExportOptimizer/10.58399898-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/10.58399898-opt-256.WEBP b/public/nextImageExportOptimizer/10.58399898-opt-256.WEBP new file mode 100644 index 0000000000..14c8af33fb Binary files /dev/null and b/public/nextImageExportOptimizer/10.58399898-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/10.58399898-opt-32.WEBP b/public/nextImageExportOptimizer/10.58399898-opt-32.WEBP new file mode 100644 index 0000000000..fcf178b013 Binary files /dev/null and b/public/nextImageExportOptimizer/10.58399898-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/10.58399898-opt-384.WEBP b/public/nextImageExportOptimizer/10.58399898-opt-384.WEBP new file mode 100644 index 0000000000..0cb8793c12 Binary files /dev/null and b/public/nextImageExportOptimizer/10.58399898-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/10.58399898-opt-48.WEBP b/public/nextImageExportOptimizer/10.58399898-opt-48.WEBP new file mode 100644 index 0000000000..b4c0a2079e Binary files /dev/null and b/public/nextImageExportOptimizer/10.58399898-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/10.58399898-opt-64.WEBP b/public/nextImageExportOptimizer/10.58399898-opt-64.WEBP new file mode 100644 index 0000000000..ea961cab05 Binary files /dev/null and b/public/nextImageExportOptimizer/10.58399898-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/10.58399898-opt-640.WEBP b/public/nextImageExportOptimizer/10.58399898-opt-640.WEBP new file mode 100644 index 0000000000..9c3e4b4bee Binary files /dev/null and b/public/nextImageExportOptimizer/10.58399898-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/10.58399898-opt-750.WEBP b/public/nextImageExportOptimizer/10.58399898-opt-750.WEBP new file mode 100644 index 0000000000..b1a206b828 Binary files /dev/null and b/public/nextImageExportOptimizer/10.58399898-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/10.58399898-opt-828.WEBP b/public/nextImageExportOptimizer/10.58399898-opt-828.WEBP new file mode 100644 index 0000000000..8cbb91f760 Binary files /dev/null and b/public/nextImageExportOptimizer/10.58399898-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/10.58399898-opt-96.WEBP b/public/nextImageExportOptimizer/10.58399898-opt-96.WEBP new file mode 100644 index 0000000000..c8b0719b21 Binary files /dev/null and b/public/nextImageExportOptimizer/10.58399898-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/11.25c07c94-opt-10.WEBP b/public/nextImageExportOptimizer/11.25c07c94-opt-10.WEBP new file mode 100644 index 0000000000..1b00e97c1b Binary files /dev/null and b/public/nextImageExportOptimizer/11.25c07c94-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/11.25c07c94-opt-128.WEBP b/public/nextImageExportOptimizer/11.25c07c94-opt-128.WEBP new file mode 100644 index 0000000000..8f5b6e07b7 Binary files /dev/null and b/public/nextImageExportOptimizer/11.25c07c94-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/11.25c07c94-opt-16.WEBP b/public/nextImageExportOptimizer/11.25c07c94-opt-16.WEBP new file mode 100644 index 0000000000..6a3a54e519 Binary files /dev/null and b/public/nextImageExportOptimizer/11.25c07c94-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/11.25c07c94-opt-256.WEBP b/public/nextImageExportOptimizer/11.25c07c94-opt-256.WEBP new file mode 100644 index 0000000000..1bba11f190 Binary files /dev/null and b/public/nextImageExportOptimizer/11.25c07c94-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/11.25c07c94-opt-32.WEBP b/public/nextImageExportOptimizer/11.25c07c94-opt-32.WEBP new file mode 100644 index 0000000000..21a08a8c11 Binary files /dev/null and b/public/nextImageExportOptimizer/11.25c07c94-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/11.25c07c94-opt-384.WEBP b/public/nextImageExportOptimizer/11.25c07c94-opt-384.WEBP new file mode 100644 index 0000000000..8cbf6b3f9e Binary files /dev/null and b/public/nextImageExportOptimizer/11.25c07c94-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/11.25c07c94-opt-48.WEBP b/public/nextImageExportOptimizer/11.25c07c94-opt-48.WEBP new file mode 100644 index 0000000000..de6ac2618b Binary files /dev/null and b/public/nextImageExportOptimizer/11.25c07c94-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/11.25c07c94-opt-64.WEBP b/public/nextImageExportOptimizer/11.25c07c94-opt-64.WEBP new file mode 100644 index 0000000000..20e9ee2470 Binary files /dev/null and b/public/nextImageExportOptimizer/11.25c07c94-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/11.25c07c94-opt-640.WEBP b/public/nextImageExportOptimizer/11.25c07c94-opt-640.WEBP new file mode 100644 index 0000000000..7af22ee83a Binary files /dev/null and b/public/nextImageExportOptimizer/11.25c07c94-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/11.25c07c94-opt-750.WEBP b/public/nextImageExportOptimizer/11.25c07c94-opt-750.WEBP new file mode 100644 index 0000000000..4f683222dc Binary files /dev/null and b/public/nextImageExportOptimizer/11.25c07c94-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/11.25c07c94-opt-828.WEBP b/public/nextImageExportOptimizer/11.25c07c94-opt-828.WEBP new file mode 100644 index 0000000000..4d4697d5f9 Binary files /dev/null and b/public/nextImageExportOptimizer/11.25c07c94-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/11.25c07c94-opt-96.WEBP b/public/nextImageExportOptimizer/11.25c07c94-opt-96.WEBP new file mode 100644 index 0000000000..f4acfe6e68 Binary files /dev/null and b/public/nextImageExportOptimizer/11.25c07c94-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/11.b8f87c28-opt-10.WEBP b/public/nextImageExportOptimizer/11.b8f87c28-opt-10.WEBP new file mode 100644 index 0000000000..16228ebc68 Binary files /dev/null and b/public/nextImageExportOptimizer/11.b8f87c28-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/11.b8f87c28-opt-128.WEBP b/public/nextImageExportOptimizer/11.b8f87c28-opt-128.WEBP new file mode 100644 index 0000000000..9b9cc539ba Binary files /dev/null and b/public/nextImageExportOptimizer/11.b8f87c28-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/11.b8f87c28-opt-16.WEBP b/public/nextImageExportOptimizer/11.b8f87c28-opt-16.WEBP new file mode 100644 index 0000000000..a0564c6152 Binary files /dev/null and b/public/nextImageExportOptimizer/11.b8f87c28-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/11.b8f87c28-opt-256.WEBP b/public/nextImageExportOptimizer/11.b8f87c28-opt-256.WEBP new file mode 100644 index 0000000000..44abd1486f Binary files /dev/null and b/public/nextImageExportOptimizer/11.b8f87c28-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/11.b8f87c28-opt-32.WEBP b/public/nextImageExportOptimizer/11.b8f87c28-opt-32.WEBP new file mode 100644 index 0000000000..e55496a2a2 Binary files /dev/null and b/public/nextImageExportOptimizer/11.b8f87c28-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/11.b8f87c28-opt-384.WEBP b/public/nextImageExportOptimizer/11.b8f87c28-opt-384.WEBP new file mode 100644 index 0000000000..3c4a21042a Binary files /dev/null and b/public/nextImageExportOptimizer/11.b8f87c28-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/11.b8f87c28-opt-48.WEBP b/public/nextImageExportOptimizer/11.b8f87c28-opt-48.WEBP new file mode 100644 index 0000000000..3af9b32857 Binary files /dev/null and b/public/nextImageExportOptimizer/11.b8f87c28-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/11.b8f87c28-opt-64.WEBP b/public/nextImageExportOptimizer/11.b8f87c28-opt-64.WEBP new file mode 100644 index 0000000000..9868f56611 Binary files /dev/null and b/public/nextImageExportOptimizer/11.b8f87c28-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/11.b8f87c28-opt-640.WEBP b/public/nextImageExportOptimizer/11.b8f87c28-opt-640.WEBP new file mode 100644 index 0000000000..15cc05b3e0 Binary files /dev/null and b/public/nextImageExportOptimizer/11.b8f87c28-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/11.b8f87c28-opt-750.WEBP b/public/nextImageExportOptimizer/11.b8f87c28-opt-750.WEBP new file mode 100644 index 0000000000..dce96afbb8 Binary files /dev/null and b/public/nextImageExportOptimizer/11.b8f87c28-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/11.b8f87c28-opt-828.WEBP b/public/nextImageExportOptimizer/11.b8f87c28-opt-828.WEBP new file mode 100644 index 0000000000..652dad6601 Binary files /dev/null and b/public/nextImageExportOptimizer/11.b8f87c28-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/11.b8f87c28-opt-96.WEBP b/public/nextImageExportOptimizer/11.b8f87c28-opt-96.WEBP new file mode 100644 index 0000000000..06da51ab44 Binary files /dev/null and b/public/nextImageExportOptimizer/11.b8f87c28-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/12.1f5de7e8-opt-10.WEBP b/public/nextImageExportOptimizer/12.1f5de7e8-opt-10.WEBP new file mode 100644 index 0000000000..d8674c44ad Binary files /dev/null and b/public/nextImageExportOptimizer/12.1f5de7e8-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/12.1f5de7e8-opt-128.WEBP b/public/nextImageExportOptimizer/12.1f5de7e8-opt-128.WEBP new file mode 100644 index 0000000000..5181dc1b76 Binary files /dev/null and b/public/nextImageExportOptimizer/12.1f5de7e8-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/12.1f5de7e8-opt-16.WEBP b/public/nextImageExportOptimizer/12.1f5de7e8-opt-16.WEBP new file mode 100644 index 0000000000..ee8be32c9c Binary files /dev/null and b/public/nextImageExportOptimizer/12.1f5de7e8-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/12.1f5de7e8-opt-256.WEBP b/public/nextImageExportOptimizer/12.1f5de7e8-opt-256.WEBP new file mode 100644 index 0000000000..0c953aff83 Binary files /dev/null and b/public/nextImageExportOptimizer/12.1f5de7e8-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/12.1f5de7e8-opt-32.WEBP b/public/nextImageExportOptimizer/12.1f5de7e8-opt-32.WEBP new file mode 100644 index 0000000000..dfc4a32f67 Binary files /dev/null and b/public/nextImageExportOptimizer/12.1f5de7e8-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/12.1f5de7e8-opt-384.WEBP b/public/nextImageExportOptimizer/12.1f5de7e8-opt-384.WEBP new file mode 100644 index 0000000000..27fad66ee5 Binary files /dev/null and b/public/nextImageExportOptimizer/12.1f5de7e8-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/12.1f5de7e8-opt-48.WEBP b/public/nextImageExportOptimizer/12.1f5de7e8-opt-48.WEBP new file mode 100644 index 0000000000..b1122edab6 Binary files /dev/null and b/public/nextImageExportOptimizer/12.1f5de7e8-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/12.1f5de7e8-opt-64.WEBP b/public/nextImageExportOptimizer/12.1f5de7e8-opt-64.WEBP new file mode 100644 index 0000000000..1143b6ed58 Binary files /dev/null and b/public/nextImageExportOptimizer/12.1f5de7e8-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/12.1f5de7e8-opt-640.WEBP b/public/nextImageExportOptimizer/12.1f5de7e8-opt-640.WEBP new file mode 100644 index 0000000000..cef7eff707 Binary files /dev/null and b/public/nextImageExportOptimizer/12.1f5de7e8-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/12.1f5de7e8-opt-750.WEBP b/public/nextImageExportOptimizer/12.1f5de7e8-opt-750.WEBP new file mode 100644 index 0000000000..76baab7ae0 Binary files /dev/null and b/public/nextImageExportOptimizer/12.1f5de7e8-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/12.1f5de7e8-opt-828.WEBP b/public/nextImageExportOptimizer/12.1f5de7e8-opt-828.WEBP new file mode 100644 index 0000000000..d6fb7f9ce9 Binary files /dev/null and b/public/nextImageExportOptimizer/12.1f5de7e8-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/12.1f5de7e8-opt-96.WEBP b/public/nextImageExportOptimizer/12.1f5de7e8-opt-96.WEBP new file mode 100644 index 0000000000..902102c388 Binary files /dev/null and b/public/nextImageExportOptimizer/12.1f5de7e8-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/12.80edfe31-opt-10.WEBP b/public/nextImageExportOptimizer/12.80edfe31-opt-10.WEBP new file mode 100644 index 0000000000..cf987ec4d8 Binary files /dev/null and b/public/nextImageExportOptimizer/12.80edfe31-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/12.80edfe31-opt-128.WEBP b/public/nextImageExportOptimizer/12.80edfe31-opt-128.WEBP new file mode 100644 index 0000000000..1759d909dc Binary files /dev/null and b/public/nextImageExportOptimizer/12.80edfe31-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/12.80edfe31-opt-16.WEBP b/public/nextImageExportOptimizer/12.80edfe31-opt-16.WEBP new file mode 100644 index 0000000000..ff74a670c5 Binary files /dev/null and b/public/nextImageExportOptimizer/12.80edfe31-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/12.80edfe31-opt-256.WEBP b/public/nextImageExportOptimizer/12.80edfe31-opt-256.WEBP new file mode 100644 index 0000000000..ab60c1f849 Binary files /dev/null and b/public/nextImageExportOptimizer/12.80edfe31-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/12.80edfe31-opt-32.WEBP b/public/nextImageExportOptimizer/12.80edfe31-opt-32.WEBP new file mode 100644 index 0000000000..b4002b1fbf Binary files /dev/null and b/public/nextImageExportOptimizer/12.80edfe31-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/12.80edfe31-opt-384.WEBP b/public/nextImageExportOptimizer/12.80edfe31-opt-384.WEBP new file mode 100644 index 0000000000..d922c221fb Binary files /dev/null and b/public/nextImageExportOptimizer/12.80edfe31-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/12.80edfe31-opt-48.WEBP b/public/nextImageExportOptimizer/12.80edfe31-opt-48.WEBP new file mode 100644 index 0000000000..0ed80c140d Binary files /dev/null and b/public/nextImageExportOptimizer/12.80edfe31-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/12.80edfe31-opt-64.WEBP b/public/nextImageExportOptimizer/12.80edfe31-opt-64.WEBP new file mode 100644 index 0000000000..6e5bd7028c Binary files /dev/null and b/public/nextImageExportOptimizer/12.80edfe31-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/12.80edfe31-opt-640.WEBP b/public/nextImageExportOptimizer/12.80edfe31-opt-640.WEBP new file mode 100644 index 0000000000..269c668e06 Binary files /dev/null and b/public/nextImageExportOptimizer/12.80edfe31-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/12.80edfe31-opt-750.WEBP b/public/nextImageExportOptimizer/12.80edfe31-opt-750.WEBP new file mode 100644 index 0000000000..48c466bc27 Binary files /dev/null and b/public/nextImageExportOptimizer/12.80edfe31-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/12.80edfe31-opt-828.WEBP b/public/nextImageExportOptimizer/12.80edfe31-opt-828.WEBP new file mode 100644 index 0000000000..072141477f Binary files /dev/null and b/public/nextImageExportOptimizer/12.80edfe31-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/12.80edfe31-opt-96.WEBP b/public/nextImageExportOptimizer/12.80edfe31-opt-96.WEBP new file mode 100644 index 0000000000..17fe31b0fc Binary files /dev/null and b/public/nextImageExportOptimizer/12.80edfe31-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/13.2ed60bb6-opt-10.WEBP b/public/nextImageExportOptimizer/13.2ed60bb6-opt-10.WEBP new file mode 100644 index 0000000000..358a58a8e7 Binary files /dev/null and b/public/nextImageExportOptimizer/13.2ed60bb6-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/13.2ed60bb6-opt-128.WEBP b/public/nextImageExportOptimizer/13.2ed60bb6-opt-128.WEBP new file mode 100644 index 0000000000..08306f247e Binary files /dev/null and b/public/nextImageExportOptimizer/13.2ed60bb6-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/13.2ed60bb6-opt-16.WEBP b/public/nextImageExportOptimizer/13.2ed60bb6-opt-16.WEBP new file mode 100644 index 0000000000..647a4d2db7 Binary files /dev/null and b/public/nextImageExportOptimizer/13.2ed60bb6-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/13.2ed60bb6-opt-256.WEBP b/public/nextImageExportOptimizer/13.2ed60bb6-opt-256.WEBP new file mode 100644 index 0000000000..1f38dcf211 Binary files /dev/null and b/public/nextImageExportOptimizer/13.2ed60bb6-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/13.2ed60bb6-opt-32.WEBP b/public/nextImageExportOptimizer/13.2ed60bb6-opt-32.WEBP new file mode 100644 index 0000000000..9b915cee66 Binary files /dev/null and b/public/nextImageExportOptimizer/13.2ed60bb6-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/13.2ed60bb6-opt-384.WEBP b/public/nextImageExportOptimizer/13.2ed60bb6-opt-384.WEBP new file mode 100644 index 0000000000..3bd3d44993 Binary files /dev/null and b/public/nextImageExportOptimizer/13.2ed60bb6-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/13.2ed60bb6-opt-48.WEBP b/public/nextImageExportOptimizer/13.2ed60bb6-opt-48.WEBP new file mode 100644 index 0000000000..9d034d6abe Binary files /dev/null and b/public/nextImageExportOptimizer/13.2ed60bb6-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/13.2ed60bb6-opt-64.WEBP b/public/nextImageExportOptimizer/13.2ed60bb6-opt-64.WEBP new file mode 100644 index 0000000000..113bfdc212 Binary files /dev/null and b/public/nextImageExportOptimizer/13.2ed60bb6-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/13.2ed60bb6-opt-640.WEBP b/public/nextImageExportOptimizer/13.2ed60bb6-opt-640.WEBP new file mode 100644 index 0000000000..a0c819cd01 Binary files /dev/null and b/public/nextImageExportOptimizer/13.2ed60bb6-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/13.2ed60bb6-opt-750.WEBP b/public/nextImageExportOptimizer/13.2ed60bb6-opt-750.WEBP new file mode 100644 index 0000000000..faf0364b73 Binary files /dev/null and b/public/nextImageExportOptimizer/13.2ed60bb6-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/13.2ed60bb6-opt-828.WEBP b/public/nextImageExportOptimizer/13.2ed60bb6-opt-828.WEBP new file mode 100644 index 0000000000..8c1891a469 Binary files /dev/null and b/public/nextImageExportOptimizer/13.2ed60bb6-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/13.2ed60bb6-opt-96.WEBP b/public/nextImageExportOptimizer/13.2ed60bb6-opt-96.WEBP new file mode 100644 index 0000000000..0559965102 Binary files /dev/null and b/public/nextImageExportOptimizer/13.2ed60bb6-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/13.372592cd-opt-10.WEBP b/public/nextImageExportOptimizer/13.372592cd-opt-10.WEBP new file mode 100644 index 0000000000..ddefca3047 Binary files /dev/null and b/public/nextImageExportOptimizer/13.372592cd-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/13.372592cd-opt-128.WEBP b/public/nextImageExportOptimizer/13.372592cd-opt-128.WEBP new file mode 100644 index 0000000000..148cf785d8 Binary files /dev/null and b/public/nextImageExportOptimizer/13.372592cd-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/13.372592cd-opt-16.WEBP b/public/nextImageExportOptimizer/13.372592cd-opt-16.WEBP new file mode 100644 index 0000000000..29165605a5 Binary files /dev/null and b/public/nextImageExportOptimizer/13.372592cd-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/13.372592cd-opt-256.WEBP b/public/nextImageExportOptimizer/13.372592cd-opt-256.WEBP new file mode 100644 index 0000000000..4f1c4d59b4 Binary files /dev/null and b/public/nextImageExportOptimizer/13.372592cd-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/13.372592cd-opt-32.WEBP b/public/nextImageExportOptimizer/13.372592cd-opt-32.WEBP new file mode 100644 index 0000000000..bcafbee233 Binary files /dev/null and b/public/nextImageExportOptimizer/13.372592cd-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/13.372592cd-opt-384.WEBP b/public/nextImageExportOptimizer/13.372592cd-opt-384.WEBP new file mode 100644 index 0000000000..7a5f6f33c6 Binary files /dev/null and b/public/nextImageExportOptimizer/13.372592cd-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/13.372592cd-opt-48.WEBP b/public/nextImageExportOptimizer/13.372592cd-opt-48.WEBP new file mode 100644 index 0000000000..bae20cd092 Binary files /dev/null and b/public/nextImageExportOptimizer/13.372592cd-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/13.372592cd-opt-64.WEBP b/public/nextImageExportOptimizer/13.372592cd-opt-64.WEBP new file mode 100644 index 0000000000..143e5bac42 Binary files /dev/null and b/public/nextImageExportOptimizer/13.372592cd-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/13.372592cd-opt-640.WEBP b/public/nextImageExportOptimizer/13.372592cd-opt-640.WEBP new file mode 100644 index 0000000000..5e67577bd7 Binary files /dev/null and b/public/nextImageExportOptimizer/13.372592cd-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/13.372592cd-opt-750.WEBP b/public/nextImageExportOptimizer/13.372592cd-opt-750.WEBP new file mode 100644 index 0000000000..4be8828dbd Binary files /dev/null and b/public/nextImageExportOptimizer/13.372592cd-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/13.372592cd-opt-828.WEBP b/public/nextImageExportOptimizer/13.372592cd-opt-828.WEBP new file mode 100644 index 0000000000..9573950219 Binary files /dev/null and b/public/nextImageExportOptimizer/13.372592cd-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/13.372592cd-opt-96.WEBP b/public/nextImageExportOptimizer/13.372592cd-opt-96.WEBP new file mode 100644 index 0000000000..e53dbde6e2 Binary files /dev/null and b/public/nextImageExportOptimizer/13.372592cd-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/2.45dac2f6-opt-10.WEBP b/public/nextImageExportOptimizer/2.45dac2f6-opt-10.WEBP new file mode 100644 index 0000000000..28889b6a68 Binary files /dev/null and b/public/nextImageExportOptimizer/2.45dac2f6-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/2.45dac2f6-opt-128.WEBP b/public/nextImageExportOptimizer/2.45dac2f6-opt-128.WEBP new file mode 100644 index 0000000000..612d389a2b Binary files /dev/null and b/public/nextImageExportOptimizer/2.45dac2f6-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/2.45dac2f6-opt-16.WEBP b/public/nextImageExportOptimizer/2.45dac2f6-opt-16.WEBP new file mode 100644 index 0000000000..851ddce261 Binary files /dev/null and b/public/nextImageExportOptimizer/2.45dac2f6-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/2.45dac2f6-opt-256.WEBP b/public/nextImageExportOptimizer/2.45dac2f6-opt-256.WEBP new file mode 100644 index 0000000000..29aabed736 Binary files /dev/null and b/public/nextImageExportOptimizer/2.45dac2f6-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/2.45dac2f6-opt-32.WEBP b/public/nextImageExportOptimizer/2.45dac2f6-opt-32.WEBP new file mode 100644 index 0000000000..839542d255 Binary files /dev/null and b/public/nextImageExportOptimizer/2.45dac2f6-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/2.45dac2f6-opt-384.WEBP b/public/nextImageExportOptimizer/2.45dac2f6-opt-384.WEBP new file mode 100644 index 0000000000..f54a61e04b Binary files /dev/null and b/public/nextImageExportOptimizer/2.45dac2f6-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/2.45dac2f6-opt-48.WEBP b/public/nextImageExportOptimizer/2.45dac2f6-opt-48.WEBP new file mode 100644 index 0000000000..8640ec1649 Binary files /dev/null and b/public/nextImageExportOptimizer/2.45dac2f6-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/2.45dac2f6-opt-64.WEBP b/public/nextImageExportOptimizer/2.45dac2f6-opt-64.WEBP new file mode 100644 index 0000000000..3f3e94447d Binary files /dev/null and b/public/nextImageExportOptimizer/2.45dac2f6-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/2.45dac2f6-opt-640.WEBP b/public/nextImageExportOptimizer/2.45dac2f6-opt-640.WEBP new file mode 100644 index 0000000000..2cbf5d23c8 Binary files /dev/null and b/public/nextImageExportOptimizer/2.45dac2f6-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/2.45dac2f6-opt-750.WEBP b/public/nextImageExportOptimizer/2.45dac2f6-opt-750.WEBP new file mode 100644 index 0000000000..05fdc030bb Binary files /dev/null and b/public/nextImageExportOptimizer/2.45dac2f6-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/2.45dac2f6-opt-828.WEBP b/public/nextImageExportOptimizer/2.45dac2f6-opt-828.WEBP new file mode 100644 index 0000000000..a9a8d153ae Binary files /dev/null and b/public/nextImageExportOptimizer/2.45dac2f6-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/2.45dac2f6-opt-96.WEBP b/public/nextImageExportOptimizer/2.45dac2f6-opt-96.WEBP new file mode 100644 index 0000000000..82a9ee4734 Binary files /dev/null and b/public/nextImageExportOptimizer/2.45dac2f6-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/2.4607ed4f-opt-10.WEBP b/public/nextImageExportOptimizer/2.4607ed4f-opt-10.WEBP new file mode 100644 index 0000000000..293d840ca5 Binary files /dev/null and b/public/nextImageExportOptimizer/2.4607ed4f-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/2.4607ed4f-opt-128.WEBP b/public/nextImageExportOptimizer/2.4607ed4f-opt-128.WEBP new file mode 100644 index 0000000000..940986dd55 Binary files /dev/null and b/public/nextImageExportOptimizer/2.4607ed4f-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/2.4607ed4f-opt-16.WEBP b/public/nextImageExportOptimizer/2.4607ed4f-opt-16.WEBP new file mode 100644 index 0000000000..8bb8504f46 Binary files /dev/null and b/public/nextImageExportOptimizer/2.4607ed4f-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/2.4607ed4f-opt-256.WEBP b/public/nextImageExportOptimizer/2.4607ed4f-opt-256.WEBP new file mode 100644 index 0000000000..b751e65520 Binary files /dev/null and b/public/nextImageExportOptimizer/2.4607ed4f-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/2.4607ed4f-opt-32.WEBP b/public/nextImageExportOptimizer/2.4607ed4f-opt-32.WEBP new file mode 100644 index 0000000000..ee913c7c03 Binary files /dev/null and b/public/nextImageExportOptimizer/2.4607ed4f-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/2.4607ed4f-opt-384.WEBP b/public/nextImageExportOptimizer/2.4607ed4f-opt-384.WEBP new file mode 100644 index 0000000000..6845d9aff5 Binary files /dev/null and b/public/nextImageExportOptimizer/2.4607ed4f-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/2.4607ed4f-opt-48.WEBP b/public/nextImageExportOptimizer/2.4607ed4f-opt-48.WEBP new file mode 100644 index 0000000000..69d2443116 Binary files /dev/null and b/public/nextImageExportOptimizer/2.4607ed4f-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/2.4607ed4f-opt-64.WEBP b/public/nextImageExportOptimizer/2.4607ed4f-opt-64.WEBP new file mode 100644 index 0000000000..3416e6584c Binary files /dev/null and b/public/nextImageExportOptimizer/2.4607ed4f-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/2.4607ed4f-opt-640.WEBP b/public/nextImageExportOptimizer/2.4607ed4f-opt-640.WEBP new file mode 100644 index 0000000000..a7fe745f9c Binary files /dev/null and b/public/nextImageExportOptimizer/2.4607ed4f-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/2.4607ed4f-opt-750.WEBP b/public/nextImageExportOptimizer/2.4607ed4f-opt-750.WEBP new file mode 100644 index 0000000000..7259723267 Binary files /dev/null and b/public/nextImageExportOptimizer/2.4607ed4f-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/2.4607ed4f-opt-828.WEBP b/public/nextImageExportOptimizer/2.4607ed4f-opt-828.WEBP new file mode 100644 index 0000000000..640c4ad71b Binary files /dev/null and b/public/nextImageExportOptimizer/2.4607ed4f-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/2.4607ed4f-opt-96.WEBP b/public/nextImageExportOptimizer/2.4607ed4f-opt-96.WEBP new file mode 100644 index 0000000000..27a82d978d Binary files /dev/null and b/public/nextImageExportOptimizer/2.4607ed4f-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/3.40539a03-opt-10.WEBP b/public/nextImageExportOptimizer/3.40539a03-opt-10.WEBP new file mode 100644 index 0000000000..0af2f709ce Binary files /dev/null and b/public/nextImageExportOptimizer/3.40539a03-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/3.40539a03-opt-128.WEBP b/public/nextImageExportOptimizer/3.40539a03-opt-128.WEBP new file mode 100644 index 0000000000..3f7103ef5a Binary files /dev/null and b/public/nextImageExportOptimizer/3.40539a03-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/3.40539a03-opt-16.WEBP b/public/nextImageExportOptimizer/3.40539a03-opt-16.WEBP new file mode 100644 index 0000000000..c4c9f98e7f Binary files /dev/null and b/public/nextImageExportOptimizer/3.40539a03-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/3.40539a03-opt-256.WEBP b/public/nextImageExportOptimizer/3.40539a03-opt-256.WEBP new file mode 100644 index 0000000000..b4bbabe6d7 Binary files /dev/null and b/public/nextImageExportOptimizer/3.40539a03-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/3.40539a03-opt-32.WEBP b/public/nextImageExportOptimizer/3.40539a03-opt-32.WEBP new file mode 100644 index 0000000000..10c0f14714 Binary files /dev/null and b/public/nextImageExportOptimizer/3.40539a03-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/3.40539a03-opt-384.WEBP b/public/nextImageExportOptimizer/3.40539a03-opt-384.WEBP new file mode 100644 index 0000000000..5a2038d659 Binary files /dev/null and b/public/nextImageExportOptimizer/3.40539a03-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/3.40539a03-opt-48.WEBP b/public/nextImageExportOptimizer/3.40539a03-opt-48.WEBP new file mode 100644 index 0000000000..8c8f4c5b5c Binary files /dev/null and b/public/nextImageExportOptimizer/3.40539a03-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/3.40539a03-opt-64.WEBP b/public/nextImageExportOptimizer/3.40539a03-opt-64.WEBP new file mode 100644 index 0000000000..9e6091b0d9 Binary files /dev/null and b/public/nextImageExportOptimizer/3.40539a03-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/3.40539a03-opt-640.WEBP b/public/nextImageExportOptimizer/3.40539a03-opt-640.WEBP new file mode 100644 index 0000000000..f8bbed32d1 Binary files /dev/null and b/public/nextImageExportOptimizer/3.40539a03-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/3.40539a03-opt-750.WEBP b/public/nextImageExportOptimizer/3.40539a03-opt-750.WEBP new file mode 100644 index 0000000000..79dbbc47a7 Binary files /dev/null and b/public/nextImageExportOptimizer/3.40539a03-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/3.40539a03-opt-828.WEBP b/public/nextImageExportOptimizer/3.40539a03-opt-828.WEBP new file mode 100644 index 0000000000..7cf1830c99 Binary files /dev/null and b/public/nextImageExportOptimizer/3.40539a03-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/3.40539a03-opt-96.WEBP b/public/nextImageExportOptimizer/3.40539a03-opt-96.WEBP new file mode 100644 index 0000000000..2fe17fff86 Binary files /dev/null and b/public/nextImageExportOptimizer/3.40539a03-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/3.8b9a97e4-opt-10.WEBP b/public/nextImageExportOptimizer/3.8b9a97e4-opt-10.WEBP new file mode 100644 index 0000000000..0740eb931b Binary files /dev/null and b/public/nextImageExportOptimizer/3.8b9a97e4-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/3.8b9a97e4-opt-128.WEBP b/public/nextImageExportOptimizer/3.8b9a97e4-opt-128.WEBP new file mode 100644 index 0000000000..6663717dc7 Binary files /dev/null and b/public/nextImageExportOptimizer/3.8b9a97e4-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/3.8b9a97e4-opt-16.WEBP b/public/nextImageExportOptimizer/3.8b9a97e4-opt-16.WEBP new file mode 100644 index 0000000000..ee6b1a237d Binary files /dev/null and b/public/nextImageExportOptimizer/3.8b9a97e4-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/3.8b9a97e4-opt-256.WEBP b/public/nextImageExportOptimizer/3.8b9a97e4-opt-256.WEBP new file mode 100644 index 0000000000..cc134759ac Binary files /dev/null and b/public/nextImageExportOptimizer/3.8b9a97e4-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/3.8b9a97e4-opt-32.WEBP b/public/nextImageExportOptimizer/3.8b9a97e4-opt-32.WEBP new file mode 100644 index 0000000000..56b1a7e5ef Binary files /dev/null and b/public/nextImageExportOptimizer/3.8b9a97e4-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/3.8b9a97e4-opt-384.WEBP b/public/nextImageExportOptimizer/3.8b9a97e4-opt-384.WEBP new file mode 100644 index 0000000000..5155e56e2c Binary files /dev/null and b/public/nextImageExportOptimizer/3.8b9a97e4-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/3.8b9a97e4-opt-48.WEBP b/public/nextImageExportOptimizer/3.8b9a97e4-opt-48.WEBP new file mode 100644 index 0000000000..dadaac211c Binary files /dev/null and b/public/nextImageExportOptimizer/3.8b9a97e4-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/3.8b9a97e4-opt-64.WEBP b/public/nextImageExportOptimizer/3.8b9a97e4-opt-64.WEBP new file mode 100644 index 0000000000..1ef4297b83 Binary files /dev/null and b/public/nextImageExportOptimizer/3.8b9a97e4-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/3.8b9a97e4-opt-640.WEBP b/public/nextImageExportOptimizer/3.8b9a97e4-opt-640.WEBP new file mode 100644 index 0000000000..0dabfdc202 Binary files /dev/null and b/public/nextImageExportOptimizer/3.8b9a97e4-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/3.8b9a97e4-opt-750.WEBP b/public/nextImageExportOptimizer/3.8b9a97e4-opt-750.WEBP new file mode 100644 index 0000000000..95352ccf2a Binary files /dev/null and b/public/nextImageExportOptimizer/3.8b9a97e4-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/3.8b9a97e4-opt-828.WEBP b/public/nextImageExportOptimizer/3.8b9a97e4-opt-828.WEBP new file mode 100644 index 0000000000..22c20307c0 Binary files /dev/null and b/public/nextImageExportOptimizer/3.8b9a97e4-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/3.8b9a97e4-opt-96.WEBP b/public/nextImageExportOptimizer/3.8b9a97e4-opt-96.WEBP new file mode 100644 index 0000000000..09317704ac Binary files /dev/null and b/public/nextImageExportOptimizer/3.8b9a97e4-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/4.9cea345b-opt-10.WEBP b/public/nextImageExportOptimizer/4.9cea345b-opt-10.WEBP new file mode 100644 index 0000000000..81db197d47 Binary files /dev/null and b/public/nextImageExportOptimizer/4.9cea345b-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/4.9cea345b-opt-128.WEBP b/public/nextImageExportOptimizer/4.9cea345b-opt-128.WEBP new file mode 100644 index 0000000000..47a8ba7b88 Binary files /dev/null and b/public/nextImageExportOptimizer/4.9cea345b-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/4.9cea345b-opt-16.WEBP b/public/nextImageExportOptimizer/4.9cea345b-opt-16.WEBP new file mode 100644 index 0000000000..dab819018d Binary files /dev/null and b/public/nextImageExportOptimizer/4.9cea345b-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/4.9cea345b-opt-256.WEBP b/public/nextImageExportOptimizer/4.9cea345b-opt-256.WEBP new file mode 100644 index 0000000000..f19dc5cb4d Binary files /dev/null and b/public/nextImageExportOptimizer/4.9cea345b-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/4.9cea345b-opt-32.WEBP b/public/nextImageExportOptimizer/4.9cea345b-opt-32.WEBP new file mode 100644 index 0000000000..db367f81d6 Binary files /dev/null and b/public/nextImageExportOptimizer/4.9cea345b-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/4.9cea345b-opt-384.WEBP b/public/nextImageExportOptimizer/4.9cea345b-opt-384.WEBP new file mode 100644 index 0000000000..9281744793 Binary files /dev/null and b/public/nextImageExportOptimizer/4.9cea345b-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/4.9cea345b-opt-48.WEBP b/public/nextImageExportOptimizer/4.9cea345b-opt-48.WEBP new file mode 100644 index 0000000000..99333bad16 Binary files /dev/null and b/public/nextImageExportOptimizer/4.9cea345b-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/4.9cea345b-opt-64.WEBP b/public/nextImageExportOptimizer/4.9cea345b-opt-64.WEBP new file mode 100644 index 0000000000..d9e029e537 Binary files /dev/null and b/public/nextImageExportOptimizer/4.9cea345b-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/4.9cea345b-opt-640.WEBP b/public/nextImageExportOptimizer/4.9cea345b-opt-640.WEBP new file mode 100644 index 0000000000..2210bd85a1 Binary files /dev/null and b/public/nextImageExportOptimizer/4.9cea345b-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/4.9cea345b-opt-750.WEBP b/public/nextImageExportOptimizer/4.9cea345b-opt-750.WEBP new file mode 100644 index 0000000000..bca9b637a4 Binary files /dev/null and b/public/nextImageExportOptimizer/4.9cea345b-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/4.9cea345b-opt-828.WEBP b/public/nextImageExportOptimizer/4.9cea345b-opt-828.WEBP new file mode 100644 index 0000000000..1aeb108f81 Binary files /dev/null and b/public/nextImageExportOptimizer/4.9cea345b-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/4.9cea345b-opt-96.WEBP b/public/nextImageExportOptimizer/4.9cea345b-opt-96.WEBP new file mode 100644 index 0000000000..ac8d9325d2 Binary files /dev/null and b/public/nextImageExportOptimizer/4.9cea345b-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/4.a081ca23-opt-10.WEBP b/public/nextImageExportOptimizer/4.a081ca23-opt-10.WEBP new file mode 100644 index 0000000000..4ffeb40f6b Binary files /dev/null and b/public/nextImageExportOptimizer/4.a081ca23-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/4.a081ca23-opt-128.WEBP b/public/nextImageExportOptimizer/4.a081ca23-opt-128.WEBP new file mode 100644 index 0000000000..12fbb92b28 Binary files /dev/null and b/public/nextImageExportOptimizer/4.a081ca23-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/4.a081ca23-opt-16.WEBP b/public/nextImageExportOptimizer/4.a081ca23-opt-16.WEBP new file mode 100644 index 0000000000..1e242347a4 Binary files /dev/null and b/public/nextImageExportOptimizer/4.a081ca23-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/4.a081ca23-opt-256.WEBP b/public/nextImageExportOptimizer/4.a081ca23-opt-256.WEBP new file mode 100644 index 0000000000..0e4a7b723e Binary files /dev/null and b/public/nextImageExportOptimizer/4.a081ca23-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/4.a081ca23-opt-32.WEBP b/public/nextImageExportOptimizer/4.a081ca23-opt-32.WEBP new file mode 100644 index 0000000000..3b01e7edca Binary files /dev/null and b/public/nextImageExportOptimizer/4.a081ca23-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/4.a081ca23-opt-384.WEBP b/public/nextImageExportOptimizer/4.a081ca23-opt-384.WEBP new file mode 100644 index 0000000000..6cb6406395 Binary files /dev/null and b/public/nextImageExportOptimizer/4.a081ca23-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/4.a081ca23-opt-48.WEBP b/public/nextImageExportOptimizer/4.a081ca23-opt-48.WEBP new file mode 100644 index 0000000000..73c18382b0 Binary files /dev/null and b/public/nextImageExportOptimizer/4.a081ca23-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/4.a081ca23-opt-64.WEBP b/public/nextImageExportOptimizer/4.a081ca23-opt-64.WEBP new file mode 100644 index 0000000000..9488d10546 Binary files /dev/null and b/public/nextImageExportOptimizer/4.a081ca23-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/4.a081ca23-opt-640.WEBP b/public/nextImageExportOptimizer/4.a081ca23-opt-640.WEBP new file mode 100644 index 0000000000..f562281f24 Binary files /dev/null and b/public/nextImageExportOptimizer/4.a081ca23-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/4.a081ca23-opt-750.WEBP b/public/nextImageExportOptimizer/4.a081ca23-opt-750.WEBP new file mode 100644 index 0000000000..5363ac2915 Binary files /dev/null and b/public/nextImageExportOptimizer/4.a081ca23-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/4.a081ca23-opt-828.WEBP b/public/nextImageExportOptimizer/4.a081ca23-opt-828.WEBP new file mode 100644 index 0000000000..a1e7bf6be5 Binary files /dev/null and b/public/nextImageExportOptimizer/4.a081ca23-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/4.a081ca23-opt-96.WEBP b/public/nextImageExportOptimizer/4.a081ca23-opt-96.WEBP new file mode 100644 index 0000000000..53dbf2bff7 Binary files /dev/null and b/public/nextImageExportOptimizer/4.a081ca23-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/5.95dd3cfa-opt-10.WEBP b/public/nextImageExportOptimizer/5.95dd3cfa-opt-10.WEBP new file mode 100644 index 0000000000..a6c9e26c46 Binary files /dev/null and b/public/nextImageExportOptimizer/5.95dd3cfa-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/5.95dd3cfa-opt-128.WEBP b/public/nextImageExportOptimizer/5.95dd3cfa-opt-128.WEBP new file mode 100644 index 0000000000..69623dade0 Binary files /dev/null and b/public/nextImageExportOptimizer/5.95dd3cfa-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/5.95dd3cfa-opt-16.WEBP b/public/nextImageExportOptimizer/5.95dd3cfa-opt-16.WEBP new file mode 100644 index 0000000000..38223c9b33 Binary files /dev/null and b/public/nextImageExportOptimizer/5.95dd3cfa-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/5.95dd3cfa-opt-256.WEBP b/public/nextImageExportOptimizer/5.95dd3cfa-opt-256.WEBP new file mode 100644 index 0000000000..501f91bbd2 Binary files /dev/null and b/public/nextImageExportOptimizer/5.95dd3cfa-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/5.95dd3cfa-opt-32.WEBP b/public/nextImageExportOptimizer/5.95dd3cfa-opt-32.WEBP new file mode 100644 index 0000000000..2bfa6d48d7 Binary files /dev/null and b/public/nextImageExportOptimizer/5.95dd3cfa-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/5.95dd3cfa-opt-384.WEBP b/public/nextImageExportOptimizer/5.95dd3cfa-opt-384.WEBP new file mode 100644 index 0000000000..effe6cd767 Binary files /dev/null and b/public/nextImageExportOptimizer/5.95dd3cfa-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/5.95dd3cfa-opt-48.WEBP b/public/nextImageExportOptimizer/5.95dd3cfa-opt-48.WEBP new file mode 100644 index 0000000000..b5ba3e5134 Binary files /dev/null and b/public/nextImageExportOptimizer/5.95dd3cfa-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/5.95dd3cfa-opt-64.WEBP b/public/nextImageExportOptimizer/5.95dd3cfa-opt-64.WEBP new file mode 100644 index 0000000000..ec6499b263 Binary files /dev/null and b/public/nextImageExportOptimizer/5.95dd3cfa-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/5.95dd3cfa-opt-640.WEBP b/public/nextImageExportOptimizer/5.95dd3cfa-opt-640.WEBP new file mode 100644 index 0000000000..8818bfa0f9 Binary files /dev/null and b/public/nextImageExportOptimizer/5.95dd3cfa-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/5.95dd3cfa-opt-750.WEBP b/public/nextImageExportOptimizer/5.95dd3cfa-opt-750.WEBP new file mode 100644 index 0000000000..686e2bca53 Binary files /dev/null and b/public/nextImageExportOptimizer/5.95dd3cfa-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/5.95dd3cfa-opt-828.WEBP b/public/nextImageExportOptimizer/5.95dd3cfa-opt-828.WEBP new file mode 100644 index 0000000000..04e82c2700 Binary files /dev/null and b/public/nextImageExportOptimizer/5.95dd3cfa-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/5.95dd3cfa-opt-96.WEBP b/public/nextImageExportOptimizer/5.95dd3cfa-opt-96.WEBP new file mode 100644 index 0000000000..dc7992c444 Binary files /dev/null and b/public/nextImageExportOptimizer/5.95dd3cfa-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/6.a9e9ef54-opt-10.WEBP b/public/nextImageExportOptimizer/6.a9e9ef54-opt-10.WEBP new file mode 100644 index 0000000000..6df1f30439 Binary files /dev/null and b/public/nextImageExportOptimizer/6.a9e9ef54-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/6.a9e9ef54-opt-128.WEBP b/public/nextImageExportOptimizer/6.a9e9ef54-opt-128.WEBP new file mode 100644 index 0000000000..56e9c39b70 Binary files /dev/null and b/public/nextImageExportOptimizer/6.a9e9ef54-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/6.a9e9ef54-opt-16.WEBP b/public/nextImageExportOptimizer/6.a9e9ef54-opt-16.WEBP new file mode 100644 index 0000000000..d2c5874340 Binary files /dev/null and b/public/nextImageExportOptimizer/6.a9e9ef54-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/6.a9e9ef54-opt-256.WEBP b/public/nextImageExportOptimizer/6.a9e9ef54-opt-256.WEBP new file mode 100644 index 0000000000..137df7a71b Binary files /dev/null and b/public/nextImageExportOptimizer/6.a9e9ef54-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/6.a9e9ef54-opt-32.WEBP b/public/nextImageExportOptimizer/6.a9e9ef54-opt-32.WEBP new file mode 100644 index 0000000000..b13f481bae Binary files /dev/null and b/public/nextImageExportOptimizer/6.a9e9ef54-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/6.a9e9ef54-opt-384.WEBP b/public/nextImageExportOptimizer/6.a9e9ef54-opt-384.WEBP new file mode 100644 index 0000000000..df38fba22b Binary files /dev/null and b/public/nextImageExportOptimizer/6.a9e9ef54-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/6.a9e9ef54-opt-48.WEBP b/public/nextImageExportOptimizer/6.a9e9ef54-opt-48.WEBP new file mode 100644 index 0000000000..29e9fdf98b Binary files /dev/null and b/public/nextImageExportOptimizer/6.a9e9ef54-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/6.a9e9ef54-opt-64.WEBP b/public/nextImageExportOptimizer/6.a9e9ef54-opt-64.WEBP new file mode 100644 index 0000000000..000b6ea75e Binary files /dev/null and b/public/nextImageExportOptimizer/6.a9e9ef54-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/6.a9e9ef54-opt-640.WEBP b/public/nextImageExportOptimizer/6.a9e9ef54-opt-640.WEBP new file mode 100644 index 0000000000..1f8bccd1a0 Binary files /dev/null and b/public/nextImageExportOptimizer/6.a9e9ef54-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/6.a9e9ef54-opt-750.WEBP b/public/nextImageExportOptimizer/6.a9e9ef54-opt-750.WEBP new file mode 100644 index 0000000000..33385b5e52 Binary files /dev/null and b/public/nextImageExportOptimizer/6.a9e9ef54-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/6.a9e9ef54-opt-828.WEBP b/public/nextImageExportOptimizer/6.a9e9ef54-opt-828.WEBP new file mode 100644 index 0000000000..50abdaeedb Binary files /dev/null and b/public/nextImageExportOptimizer/6.a9e9ef54-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/6.a9e9ef54-opt-96.WEBP b/public/nextImageExportOptimizer/6.a9e9ef54-opt-96.WEBP new file mode 100644 index 0000000000..ec7fd1f62d Binary files /dev/null and b/public/nextImageExportOptimizer/6.a9e9ef54-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/6.f303b2b0-opt-10.WEBP b/public/nextImageExportOptimizer/6.f303b2b0-opt-10.WEBP new file mode 100644 index 0000000000..bf46a46801 Binary files /dev/null and b/public/nextImageExportOptimizer/6.f303b2b0-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/6.f303b2b0-opt-128.WEBP b/public/nextImageExportOptimizer/6.f303b2b0-opt-128.WEBP new file mode 100644 index 0000000000..1255cf9466 Binary files /dev/null and b/public/nextImageExportOptimizer/6.f303b2b0-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/6.f303b2b0-opt-16.WEBP b/public/nextImageExportOptimizer/6.f303b2b0-opt-16.WEBP new file mode 100644 index 0000000000..7e55306156 Binary files /dev/null and b/public/nextImageExportOptimizer/6.f303b2b0-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/6.f303b2b0-opt-256.WEBP b/public/nextImageExportOptimizer/6.f303b2b0-opt-256.WEBP new file mode 100644 index 0000000000..f1330105a7 Binary files /dev/null and b/public/nextImageExportOptimizer/6.f303b2b0-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/6.f303b2b0-opt-32.WEBP b/public/nextImageExportOptimizer/6.f303b2b0-opt-32.WEBP new file mode 100644 index 0000000000..edafa0fe5c Binary files /dev/null and b/public/nextImageExportOptimizer/6.f303b2b0-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/6.f303b2b0-opt-384.WEBP b/public/nextImageExportOptimizer/6.f303b2b0-opt-384.WEBP new file mode 100644 index 0000000000..c94df3dc7d Binary files /dev/null and b/public/nextImageExportOptimizer/6.f303b2b0-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/6.f303b2b0-opt-48.WEBP b/public/nextImageExportOptimizer/6.f303b2b0-opt-48.WEBP new file mode 100644 index 0000000000..f86fb175f4 Binary files /dev/null and b/public/nextImageExportOptimizer/6.f303b2b0-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/6.f303b2b0-opt-64.WEBP b/public/nextImageExportOptimizer/6.f303b2b0-opt-64.WEBP new file mode 100644 index 0000000000..88e5829321 Binary files /dev/null and b/public/nextImageExportOptimizer/6.f303b2b0-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/6.f303b2b0-opt-640.WEBP b/public/nextImageExportOptimizer/6.f303b2b0-opt-640.WEBP new file mode 100644 index 0000000000..005b1b8fd5 Binary files /dev/null and b/public/nextImageExportOptimizer/6.f303b2b0-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/6.f303b2b0-opt-750.WEBP b/public/nextImageExportOptimizer/6.f303b2b0-opt-750.WEBP new file mode 100644 index 0000000000..1e4e952480 Binary files /dev/null and b/public/nextImageExportOptimizer/6.f303b2b0-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/6.f303b2b0-opt-828.WEBP b/public/nextImageExportOptimizer/6.f303b2b0-opt-828.WEBP new file mode 100644 index 0000000000..c0bc2be5f8 Binary files /dev/null and b/public/nextImageExportOptimizer/6.f303b2b0-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/6.f303b2b0-opt-96.WEBP b/public/nextImageExportOptimizer/6.f303b2b0-opt-96.WEBP new file mode 100644 index 0000000000..fbd4ffe54a Binary files /dev/null and b/public/nextImageExportOptimizer/6.f303b2b0-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/7.5c473a95-opt-10.WEBP b/public/nextImageExportOptimizer/7.5c473a95-opt-10.WEBP new file mode 100644 index 0000000000..c4c13e893c Binary files /dev/null and b/public/nextImageExportOptimizer/7.5c473a95-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/7.5c473a95-opt-128.WEBP b/public/nextImageExportOptimizer/7.5c473a95-opt-128.WEBP new file mode 100644 index 0000000000..6b8f4a5ba9 Binary files /dev/null and b/public/nextImageExportOptimizer/7.5c473a95-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/7.5c473a95-opt-16.WEBP b/public/nextImageExportOptimizer/7.5c473a95-opt-16.WEBP new file mode 100644 index 0000000000..cdeff269d6 Binary files /dev/null and b/public/nextImageExportOptimizer/7.5c473a95-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/7.5c473a95-opt-256.WEBP b/public/nextImageExportOptimizer/7.5c473a95-opt-256.WEBP new file mode 100644 index 0000000000..28416be7e1 Binary files /dev/null and b/public/nextImageExportOptimizer/7.5c473a95-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/7.5c473a95-opt-32.WEBP b/public/nextImageExportOptimizer/7.5c473a95-opt-32.WEBP new file mode 100644 index 0000000000..ce5b771850 Binary files /dev/null and b/public/nextImageExportOptimizer/7.5c473a95-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/7.5c473a95-opt-384.WEBP b/public/nextImageExportOptimizer/7.5c473a95-opt-384.WEBP new file mode 100644 index 0000000000..58faeae591 Binary files /dev/null and b/public/nextImageExportOptimizer/7.5c473a95-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/7.5c473a95-opt-48.WEBP b/public/nextImageExportOptimizer/7.5c473a95-opt-48.WEBP new file mode 100644 index 0000000000..c0bb03fdc4 Binary files /dev/null and b/public/nextImageExportOptimizer/7.5c473a95-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/7.5c473a95-opt-64.WEBP b/public/nextImageExportOptimizer/7.5c473a95-opt-64.WEBP new file mode 100644 index 0000000000..291506afd1 Binary files /dev/null and b/public/nextImageExportOptimizer/7.5c473a95-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/7.5c473a95-opt-640.WEBP b/public/nextImageExportOptimizer/7.5c473a95-opt-640.WEBP new file mode 100644 index 0000000000..19b335fd9e Binary files /dev/null and b/public/nextImageExportOptimizer/7.5c473a95-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/7.5c473a95-opt-750.WEBP b/public/nextImageExportOptimizer/7.5c473a95-opt-750.WEBP new file mode 100644 index 0000000000..c2b46abc06 Binary files /dev/null and b/public/nextImageExportOptimizer/7.5c473a95-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/7.5c473a95-opt-828.WEBP b/public/nextImageExportOptimizer/7.5c473a95-opt-828.WEBP new file mode 100644 index 0000000000..08073f984d Binary files /dev/null and b/public/nextImageExportOptimizer/7.5c473a95-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/7.5c473a95-opt-96.WEBP b/public/nextImageExportOptimizer/7.5c473a95-opt-96.WEBP new file mode 100644 index 0000000000..4d7321fe70 Binary files /dev/null and b/public/nextImageExportOptimizer/7.5c473a95-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/7.8a7605d4-opt-10.WEBP b/public/nextImageExportOptimizer/7.8a7605d4-opt-10.WEBP new file mode 100644 index 0000000000..c20a6d9611 Binary files /dev/null and b/public/nextImageExportOptimizer/7.8a7605d4-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/7.8a7605d4-opt-128.WEBP b/public/nextImageExportOptimizer/7.8a7605d4-opt-128.WEBP new file mode 100644 index 0000000000..f796b722df Binary files /dev/null and b/public/nextImageExportOptimizer/7.8a7605d4-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/7.8a7605d4-opt-16.WEBP b/public/nextImageExportOptimizer/7.8a7605d4-opt-16.WEBP new file mode 100644 index 0000000000..4e695b2fec Binary files /dev/null and b/public/nextImageExportOptimizer/7.8a7605d4-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/7.8a7605d4-opt-256.WEBP b/public/nextImageExportOptimizer/7.8a7605d4-opt-256.WEBP new file mode 100644 index 0000000000..ff5ef59871 Binary files /dev/null and b/public/nextImageExportOptimizer/7.8a7605d4-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/7.8a7605d4-opt-32.WEBP b/public/nextImageExportOptimizer/7.8a7605d4-opt-32.WEBP new file mode 100644 index 0000000000..7224861c82 Binary files /dev/null and b/public/nextImageExportOptimizer/7.8a7605d4-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/7.8a7605d4-opt-384.WEBP b/public/nextImageExportOptimizer/7.8a7605d4-opt-384.WEBP new file mode 100644 index 0000000000..0245246cfb Binary files /dev/null and b/public/nextImageExportOptimizer/7.8a7605d4-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/7.8a7605d4-opt-48.WEBP b/public/nextImageExportOptimizer/7.8a7605d4-opt-48.WEBP new file mode 100644 index 0000000000..3bc2e268f0 Binary files /dev/null and b/public/nextImageExportOptimizer/7.8a7605d4-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/7.8a7605d4-opt-64.WEBP b/public/nextImageExportOptimizer/7.8a7605d4-opt-64.WEBP new file mode 100644 index 0000000000..c55607e4b1 Binary files /dev/null and b/public/nextImageExportOptimizer/7.8a7605d4-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/7.8a7605d4-opt-640.WEBP b/public/nextImageExportOptimizer/7.8a7605d4-opt-640.WEBP new file mode 100644 index 0000000000..337bd7dec3 Binary files /dev/null and b/public/nextImageExportOptimizer/7.8a7605d4-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/7.8a7605d4-opt-750.WEBP b/public/nextImageExportOptimizer/7.8a7605d4-opt-750.WEBP new file mode 100644 index 0000000000..310f99673b Binary files /dev/null and b/public/nextImageExportOptimizer/7.8a7605d4-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/7.8a7605d4-opt-828.WEBP b/public/nextImageExportOptimizer/7.8a7605d4-opt-828.WEBP new file mode 100644 index 0000000000..22558a9c89 Binary files /dev/null and b/public/nextImageExportOptimizer/7.8a7605d4-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/7.8a7605d4-opt-96.WEBP b/public/nextImageExportOptimizer/7.8a7605d4-opt-96.WEBP new file mode 100644 index 0000000000..9d362751c8 Binary files /dev/null and b/public/nextImageExportOptimizer/7.8a7605d4-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/8.36a60072-opt-10.WEBP b/public/nextImageExportOptimizer/8.36a60072-opt-10.WEBP new file mode 100644 index 0000000000..01856d401b Binary files /dev/null and b/public/nextImageExportOptimizer/8.36a60072-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/8.36a60072-opt-128.WEBP b/public/nextImageExportOptimizer/8.36a60072-opt-128.WEBP new file mode 100644 index 0000000000..ba261934f4 Binary files /dev/null and b/public/nextImageExportOptimizer/8.36a60072-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/8.36a60072-opt-16.WEBP b/public/nextImageExportOptimizer/8.36a60072-opt-16.WEBP new file mode 100644 index 0000000000..ab799c4ee2 Binary files /dev/null and b/public/nextImageExportOptimizer/8.36a60072-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/8.36a60072-opt-256.WEBP b/public/nextImageExportOptimizer/8.36a60072-opt-256.WEBP new file mode 100644 index 0000000000..cbd231be08 Binary files /dev/null and b/public/nextImageExportOptimizer/8.36a60072-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/8.36a60072-opt-32.WEBP b/public/nextImageExportOptimizer/8.36a60072-opt-32.WEBP new file mode 100644 index 0000000000..0a8c1941c9 Binary files /dev/null and b/public/nextImageExportOptimizer/8.36a60072-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/8.36a60072-opt-384.WEBP b/public/nextImageExportOptimizer/8.36a60072-opt-384.WEBP new file mode 100644 index 0000000000..feeca46cce Binary files /dev/null and b/public/nextImageExportOptimizer/8.36a60072-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/8.36a60072-opt-48.WEBP b/public/nextImageExportOptimizer/8.36a60072-opt-48.WEBP new file mode 100644 index 0000000000..693725d083 Binary files /dev/null and b/public/nextImageExportOptimizer/8.36a60072-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/8.36a60072-opt-64.WEBP b/public/nextImageExportOptimizer/8.36a60072-opt-64.WEBP new file mode 100644 index 0000000000..f597152bf1 Binary files /dev/null and b/public/nextImageExportOptimizer/8.36a60072-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/8.36a60072-opt-640.WEBP b/public/nextImageExportOptimizer/8.36a60072-opt-640.WEBP new file mode 100644 index 0000000000..843a641801 Binary files /dev/null and b/public/nextImageExportOptimizer/8.36a60072-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/8.36a60072-opt-750.WEBP b/public/nextImageExportOptimizer/8.36a60072-opt-750.WEBP new file mode 100644 index 0000000000..fd5f1b6d9a Binary files /dev/null and b/public/nextImageExportOptimizer/8.36a60072-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/8.36a60072-opt-828.WEBP b/public/nextImageExportOptimizer/8.36a60072-opt-828.WEBP new file mode 100644 index 0000000000..3c1b9f1f3f Binary files /dev/null and b/public/nextImageExportOptimizer/8.36a60072-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/8.36a60072-opt-96.WEBP b/public/nextImageExportOptimizer/8.36a60072-opt-96.WEBP new file mode 100644 index 0000000000..fa29943fda Binary files /dev/null and b/public/nextImageExportOptimizer/8.36a60072-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/8.9d69d599-opt-10.WEBP b/public/nextImageExportOptimizer/8.9d69d599-opt-10.WEBP new file mode 100644 index 0000000000..55a30b4169 Binary files /dev/null and b/public/nextImageExportOptimizer/8.9d69d599-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/8.9d69d599-opt-128.WEBP b/public/nextImageExportOptimizer/8.9d69d599-opt-128.WEBP new file mode 100644 index 0000000000..6bd5b6e68b Binary files /dev/null and b/public/nextImageExportOptimizer/8.9d69d599-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/8.9d69d599-opt-16.WEBP b/public/nextImageExportOptimizer/8.9d69d599-opt-16.WEBP new file mode 100644 index 0000000000..4456a11dd3 Binary files /dev/null and b/public/nextImageExportOptimizer/8.9d69d599-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/8.9d69d599-opt-256.WEBP b/public/nextImageExportOptimizer/8.9d69d599-opt-256.WEBP new file mode 100644 index 0000000000..97b68ecc4c Binary files /dev/null and b/public/nextImageExportOptimizer/8.9d69d599-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/8.9d69d599-opt-32.WEBP b/public/nextImageExportOptimizer/8.9d69d599-opt-32.WEBP new file mode 100644 index 0000000000..ae1c67589e Binary files /dev/null and b/public/nextImageExportOptimizer/8.9d69d599-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/8.9d69d599-opt-384.WEBP b/public/nextImageExportOptimizer/8.9d69d599-opt-384.WEBP new file mode 100644 index 0000000000..24e2b94744 Binary files /dev/null and b/public/nextImageExportOptimizer/8.9d69d599-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/8.9d69d599-opt-48.WEBP b/public/nextImageExportOptimizer/8.9d69d599-opt-48.WEBP new file mode 100644 index 0000000000..c20de2b82b Binary files /dev/null and b/public/nextImageExportOptimizer/8.9d69d599-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/8.9d69d599-opt-64.WEBP b/public/nextImageExportOptimizer/8.9d69d599-opt-64.WEBP new file mode 100644 index 0000000000..e3bd085b95 Binary files /dev/null and b/public/nextImageExportOptimizer/8.9d69d599-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/8.9d69d599-opt-640.WEBP b/public/nextImageExportOptimizer/8.9d69d599-opt-640.WEBP new file mode 100644 index 0000000000..27b1d5dd49 Binary files /dev/null and b/public/nextImageExportOptimizer/8.9d69d599-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/8.9d69d599-opt-750.WEBP b/public/nextImageExportOptimizer/8.9d69d599-opt-750.WEBP new file mode 100644 index 0000000000..1a166ad8b2 Binary files /dev/null and b/public/nextImageExportOptimizer/8.9d69d599-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/8.9d69d599-opt-828.WEBP b/public/nextImageExportOptimizer/8.9d69d599-opt-828.WEBP new file mode 100644 index 0000000000..38b244418b Binary files /dev/null and b/public/nextImageExportOptimizer/8.9d69d599-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/8.9d69d599-opt-96.WEBP b/public/nextImageExportOptimizer/8.9d69d599-opt-96.WEBP new file mode 100644 index 0000000000..aab02fe4c1 Binary files /dev/null and b/public/nextImageExportOptimizer/8.9d69d599-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/9.844b3dd8-opt-10.WEBP b/public/nextImageExportOptimizer/9.844b3dd8-opt-10.WEBP new file mode 100644 index 0000000000..65718814a9 Binary files /dev/null and b/public/nextImageExportOptimizer/9.844b3dd8-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/9.844b3dd8-opt-128.WEBP b/public/nextImageExportOptimizer/9.844b3dd8-opt-128.WEBP new file mode 100644 index 0000000000..9eb803de5c Binary files /dev/null and b/public/nextImageExportOptimizer/9.844b3dd8-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/9.844b3dd8-opt-16.WEBP b/public/nextImageExportOptimizer/9.844b3dd8-opt-16.WEBP new file mode 100644 index 0000000000..03e1e65965 Binary files /dev/null and b/public/nextImageExportOptimizer/9.844b3dd8-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/9.844b3dd8-opt-256.WEBP b/public/nextImageExportOptimizer/9.844b3dd8-opt-256.WEBP new file mode 100644 index 0000000000..b1c711d744 Binary files /dev/null and b/public/nextImageExportOptimizer/9.844b3dd8-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/9.844b3dd8-opt-32.WEBP b/public/nextImageExportOptimizer/9.844b3dd8-opt-32.WEBP new file mode 100644 index 0000000000..c607803d38 Binary files /dev/null and b/public/nextImageExportOptimizer/9.844b3dd8-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/9.844b3dd8-opt-384.WEBP b/public/nextImageExportOptimizer/9.844b3dd8-opt-384.WEBP new file mode 100644 index 0000000000..e750219fdb Binary files /dev/null and b/public/nextImageExportOptimizer/9.844b3dd8-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/9.844b3dd8-opt-48.WEBP b/public/nextImageExportOptimizer/9.844b3dd8-opt-48.WEBP new file mode 100644 index 0000000000..419962d417 Binary files /dev/null and b/public/nextImageExportOptimizer/9.844b3dd8-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/9.844b3dd8-opt-64.WEBP b/public/nextImageExportOptimizer/9.844b3dd8-opt-64.WEBP new file mode 100644 index 0000000000..ab404b0e60 Binary files /dev/null and b/public/nextImageExportOptimizer/9.844b3dd8-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/9.844b3dd8-opt-640.WEBP b/public/nextImageExportOptimizer/9.844b3dd8-opt-640.WEBP new file mode 100644 index 0000000000..50fcfd978a Binary files /dev/null and b/public/nextImageExportOptimizer/9.844b3dd8-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/9.844b3dd8-opt-750.WEBP b/public/nextImageExportOptimizer/9.844b3dd8-opt-750.WEBP new file mode 100644 index 0000000000..45ee604f4b Binary files /dev/null and b/public/nextImageExportOptimizer/9.844b3dd8-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/9.844b3dd8-opt-828.WEBP b/public/nextImageExportOptimizer/9.844b3dd8-opt-828.WEBP new file mode 100644 index 0000000000..79bef1b42c Binary files /dev/null and b/public/nextImageExportOptimizer/9.844b3dd8-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/9.844b3dd8-opt-96.WEBP b/public/nextImageExportOptimizer/9.844b3dd8-opt-96.WEBP new file mode 100644 index 0000000000..950bcfe6d3 Binary files /dev/null and b/public/nextImageExportOptimizer/9.844b3dd8-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/9.aee863a4-opt-10.WEBP b/public/nextImageExportOptimizer/9.aee863a4-opt-10.WEBP new file mode 100644 index 0000000000..f1460d1eb4 Binary files /dev/null and b/public/nextImageExportOptimizer/9.aee863a4-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/9.aee863a4-opt-128.WEBP b/public/nextImageExportOptimizer/9.aee863a4-opt-128.WEBP new file mode 100644 index 0000000000..99de03b6c9 Binary files /dev/null and b/public/nextImageExportOptimizer/9.aee863a4-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/9.aee863a4-opt-16.WEBP b/public/nextImageExportOptimizer/9.aee863a4-opt-16.WEBP new file mode 100644 index 0000000000..08ab35e444 Binary files /dev/null and b/public/nextImageExportOptimizer/9.aee863a4-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/9.aee863a4-opt-256.WEBP b/public/nextImageExportOptimizer/9.aee863a4-opt-256.WEBP new file mode 100644 index 0000000000..711b1ea59c Binary files /dev/null and b/public/nextImageExportOptimizer/9.aee863a4-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/9.aee863a4-opt-32.WEBP b/public/nextImageExportOptimizer/9.aee863a4-opt-32.WEBP new file mode 100644 index 0000000000..289acaee14 Binary files /dev/null and b/public/nextImageExportOptimizer/9.aee863a4-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/9.aee863a4-opt-384.WEBP b/public/nextImageExportOptimizer/9.aee863a4-opt-384.WEBP new file mode 100644 index 0000000000..d002e06c26 Binary files /dev/null and b/public/nextImageExportOptimizer/9.aee863a4-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/9.aee863a4-opt-48.WEBP b/public/nextImageExportOptimizer/9.aee863a4-opt-48.WEBP new file mode 100644 index 0000000000..15799ad35f Binary files /dev/null and b/public/nextImageExportOptimizer/9.aee863a4-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/9.aee863a4-opt-64.WEBP b/public/nextImageExportOptimizer/9.aee863a4-opt-64.WEBP new file mode 100644 index 0000000000..dba424dc34 Binary files /dev/null and b/public/nextImageExportOptimizer/9.aee863a4-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/9.aee863a4-opt-640.WEBP b/public/nextImageExportOptimizer/9.aee863a4-opt-640.WEBP new file mode 100644 index 0000000000..1670158340 Binary files /dev/null and b/public/nextImageExportOptimizer/9.aee863a4-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/9.aee863a4-opt-750.WEBP b/public/nextImageExportOptimizer/9.aee863a4-opt-750.WEBP new file mode 100644 index 0000000000..960c645754 Binary files /dev/null and b/public/nextImageExportOptimizer/9.aee863a4-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/9.aee863a4-opt-828.WEBP b/public/nextImageExportOptimizer/9.aee863a4-opt-828.WEBP new file mode 100644 index 0000000000..5d1146197d Binary files /dev/null and b/public/nextImageExportOptimizer/9.aee863a4-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/9.aee863a4-opt-96.WEBP b/public/nextImageExportOptimizer/9.aee863a4-opt-96.WEBP new file mode 100644 index 0000000000..e05923eb89 Binary files /dev/null and b/public/nextImageExportOptimizer/9.aee863a4-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-10.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-10.WEBP new file mode 100644 index 0000000000..4b392cc6fa Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-1080.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-1080.WEBP new file mode 100644 index 0000000000..093e845937 Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-1080.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-1200.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-1200.WEBP new file mode 100644 index 0000000000..ec65c6750d Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-1200.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-128.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-128.WEBP new file mode 100644 index 0000000000..58d7894cb1 Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-16.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-16.WEBP new file mode 100644 index 0000000000..d9bc64748c Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-1920.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-1920.WEBP new file mode 100644 index 0000000000..bfe474e62e Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-1920.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-256.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-256.WEBP new file mode 100644 index 0000000000..15c25c5a74 Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-32.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-32.WEBP new file mode 100644 index 0000000000..609de399a6 Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-384.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-384.WEBP new file mode 100644 index 0000000000..62991075a7 Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-48.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-48.WEBP new file mode 100644 index 0000000000..019678c431 Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-64.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-64.WEBP new file mode 100644 index 0000000000..764f89ad99 Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-640.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-640.WEBP new file mode 100644 index 0000000000..951e9de0d6 Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-750.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-750.WEBP new file mode 100644 index 0000000000..bfa456a022 Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-828.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-828.WEBP new file mode 100644 index 0000000000..b8e565719d Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-96.WEBP b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-96.WEBP new file mode 100644 index 0000000000..b90550eaeb Binary files /dev/null and b/public/nextImageExportOptimizer/Comparison_Method.b12d6d2c-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-10.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-10.WEBP new file mode 100644 index 0000000000..06375f1a2b Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-1080.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-1080.WEBP new file mode 100644 index 0000000000..8032e8e385 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-1080.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-1200.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-1200.WEBP new file mode 100644 index 0000000000..aaabe8f309 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-1200.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-128.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-128.WEBP new file mode 100644 index 0000000000..cbe0a5d724 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-16.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-16.WEBP new file mode 100644 index 0000000000..0fa9a98db5 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-1920.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-1920.WEBP new file mode 100644 index 0000000000..f526e4c7c6 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-1920.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-2048.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-2048.WEBP new file mode 100644 index 0000000000..6b624110fd Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-2048.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-256.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-256.WEBP new file mode 100644 index 0000000000..3df2994156 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-32.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-32.WEBP new file mode 100644 index 0000000000..f879906964 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-384.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-384.WEBP new file mode 100644 index 0000000000..be3e9ea657 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-3840.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-3840.WEBP new file mode 100644 index 0000000000..e57bd7047f Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-3840.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-48.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-48.WEBP new file mode 100644 index 0000000000..ba78f3dbdc Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-64.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-64.WEBP new file mode 100644 index 0000000000..49d16192d5 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-640.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-640.WEBP new file mode 100644 index 0000000000..9acf9c733e Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-750.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-750.WEBP new file mode 100644 index 0000000000..972eb8c4b3 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-828.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-828.WEBP new file mode 100644 index 0000000000..9f1a745d3d Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-96.WEBP b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-96.WEBP new file mode 100644 index 0000000000..f225073ba6 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean-cropped.62af4aa2-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-10.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-10.WEBP new file mode 100644 index 0000000000..c8cf6929c8 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-1080.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-1080.WEBP new file mode 100644 index 0000000000..16ba0a5a6b Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-1080.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-1200.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-1200.WEBP new file mode 100644 index 0000000000..0d5d816a75 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-1200.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-128.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-128.WEBP new file mode 100644 index 0000000000..5a2907c765 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-16.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-16.WEBP new file mode 100644 index 0000000000..ef70ab3478 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-1920.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-1920.WEBP new file mode 100644 index 0000000000..ac4446c539 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-1920.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-256.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-256.WEBP new file mode 100644 index 0000000000..ca1c395cdb Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-32.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-32.WEBP new file mode 100644 index 0000000000..bed65195de Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-384.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-384.WEBP new file mode 100644 index 0000000000..a8e8886f4f Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-48.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-48.WEBP new file mode 100644 index 0000000000..17ced7d2d4 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-64.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-64.WEBP new file mode 100644 index 0000000000..c9d764d993 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-640.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-640.WEBP new file mode 100644 index 0000000000..12271d7cf0 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-750.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-750.WEBP new file mode 100644 index 0000000000..399bcd1372 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-828.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-828.WEBP new file mode 100644 index 0000000000..0fb2767475 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-96.WEBP b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-96.WEBP new file mode 100644 index 0000000000..9d62fe2f15 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.21b930bd-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-10.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-10.WEBP new file mode 100644 index 0000000000..fe9341a3ea Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-1080.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-1080.WEBP new file mode 100644 index 0000000000..1d26604582 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-1080.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-1200.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-1200.WEBP new file mode 100644 index 0000000000..b0862beade Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-1200.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-128.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-128.WEBP new file mode 100644 index 0000000000..6ca691b49e Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-16.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-16.WEBP new file mode 100644 index 0000000000..0790813277 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-1920.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-1920.WEBP new file mode 100644 index 0000000000..fbd8f28ef3 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-1920.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-2048.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-2048.WEBP new file mode 100644 index 0000000000..79cd612fa5 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-2048.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-256.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-256.WEBP new file mode 100644 index 0000000000..30912d222f Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-32.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-32.WEBP new file mode 100644 index 0000000000..9ba95d8265 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-384.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-384.WEBP new file mode 100644 index 0000000000..eb7cb7e4ac Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-3840.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-3840.WEBP new file mode 100644 index 0000000000..f72fc17ab5 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-3840.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-48.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-48.WEBP new file mode 100644 index 0000000000..129e22d108 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-64.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-64.WEBP new file mode 100644 index 0000000000..9d91681e08 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-640.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-640.WEBP new file mode 100644 index 0000000000..cb1d85239c Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-750.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-750.WEBP new file mode 100644 index 0000000000..cca1e4e241 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-828.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-828.WEBP new file mode 100644 index 0000000000..baf019269a Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-96.WEBP b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-96.WEBP new file mode 100644 index 0000000000..4d436f27c5 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.314cdc4a-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-10.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-10.WEBP new file mode 100644 index 0000000000..9a1b77967f Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-1080.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-1080.WEBP new file mode 100644 index 0000000000..653f248e96 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-1080.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-1200.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-1200.WEBP new file mode 100644 index 0000000000..6555d7608f Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-1200.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-128.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-128.WEBP new file mode 100644 index 0000000000..c8e5b5b609 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-16.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-16.WEBP new file mode 100644 index 0000000000..f68d885aea Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-1920.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-1920.WEBP new file mode 100644 index 0000000000..5d0e635105 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-1920.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-2048.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-2048.WEBP new file mode 100644 index 0000000000..3f99076742 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-2048.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-256.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-256.WEBP new file mode 100644 index 0000000000..3dcde356f8 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-32.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-32.WEBP new file mode 100644 index 0000000000..848a9175a7 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-384.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-384.WEBP new file mode 100644 index 0000000000..904782214c Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-3840.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-3840.WEBP new file mode 100644 index 0000000000..1378fc949e Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-3840.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-48.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-48.WEBP new file mode 100644 index 0000000000..2efa0881bc Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-64.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-64.WEBP new file mode 100644 index 0000000000..2b664cb756 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-640.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-640.WEBP new file mode 100644 index 0000000000..c5141b7f57 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-750.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-750.WEBP new file mode 100644 index 0000000000..a152fc7c70 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-828.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-828.WEBP new file mode 100644 index 0000000000..e41fa163ec Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-96.WEBP b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-96.WEBP new file mode 100644 index 0000000000..3a522a7eb7 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.d5aa6d13-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-10.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-10.WEBP new file mode 100644 index 0000000000..111321466f Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-1080.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-1080.WEBP new file mode 100644 index 0000000000..c68d468bff Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-1080.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-1200.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-1200.WEBP new file mode 100644 index 0000000000..0d9397788f Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-1200.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-128.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-128.WEBP new file mode 100644 index 0000000000..b669e354e1 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-16.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-16.WEBP new file mode 100644 index 0000000000..1c5751d4c2 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-1920.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-1920.WEBP new file mode 100644 index 0000000000..2dd85947ca Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-1920.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-2048.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-2048.WEBP new file mode 100644 index 0000000000..4c6ecdfda4 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-2048.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-256.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-256.WEBP new file mode 100644 index 0000000000..f2ecc763e1 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-32.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-32.WEBP new file mode 100644 index 0000000000..19151010da Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-384.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-384.WEBP new file mode 100644 index 0000000000..474f594508 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-3840.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-3840.WEBP new file mode 100644 index 0000000000..e43d188b4c Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-3840.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-48.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-48.WEBP new file mode 100644 index 0000000000..3b0a2cb42b Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-64.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-64.WEBP new file mode 100644 index 0000000000..216a5bbcd7 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-640.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-640.WEBP new file mode 100644 index 0000000000..0f9896778a Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-750.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-750.WEBP new file mode 100644 index 0000000000..653d4c8c9b Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-828.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-828.WEBP new file mode 100644 index 0000000000..94a0c711d6 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-96.WEBP b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-96.WEBP new file mode 100644 index 0000000000..4565d4fb26 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-bean.e3e29fde-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-10.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-10.WEBP new file mode 100644 index 0000000000..e67841c480 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-1080.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-1080.WEBP new file mode 100644 index 0000000000..64b66525f9 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-1080.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-1200.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-1200.WEBP new file mode 100644 index 0000000000..59e2a9c1ea Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-1200.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-128.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-128.WEBP new file mode 100644 index 0000000000..7f0d86a818 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-16.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-16.WEBP new file mode 100644 index 0000000000..f4e2b730e7 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-1920.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-1920.WEBP new file mode 100644 index 0000000000..8968993206 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-1920.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-2048.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-2048.WEBP new file mode 100644 index 0000000000..98222346de Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-2048.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-256.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-256.WEBP new file mode 100644 index 0000000000..a6bb3c688e Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-32.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-32.WEBP new file mode 100644 index 0000000000..c8878c96d6 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-384.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-384.WEBP new file mode 100644 index 0000000000..593380ba23 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-3840.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-3840.WEBP new file mode 100644 index 0000000000..e66ba424cb Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-3840.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-48.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-48.WEBP new file mode 100644 index 0000000000..83d186ed08 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-64.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-64.WEBP new file mode 100644 index 0000000000..a586fedb46 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-640.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-640.WEBP new file mode 100644 index 0000000000..4d640e555d Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-750.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-750.WEBP new file mode 100644 index 0000000000..4ba8c814ce Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-828.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-828.WEBP new file mode 100644 index 0000000000..ec8a62a9b4 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/blur-blob.806d2505-opt-96.WEBP b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-96.WEBP new file mode 100644 index 0000000000..112c2acd84 Binary files /dev/null and b/public/nextImageExportOptimizer/blur-blob.806d2505-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-10.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-10.WEBP new file mode 100644 index 0000000000..964d344c50 Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-1080.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-1080.WEBP new file mode 100644 index 0000000000..cf746fe33b Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-1080.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-1200.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-1200.WEBP new file mode 100644 index 0000000000..b0a52312f1 Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-1200.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-128.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-128.WEBP new file mode 100644 index 0000000000..117b4a9937 Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-16.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-16.WEBP new file mode 100644 index 0000000000..4267af5c97 Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-1920.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-1920.WEBP new file mode 100644 index 0000000000..7a9a9b4b08 Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-1920.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-256.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-256.WEBP new file mode 100644 index 0000000000..ffa0a4a542 Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-32.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-32.WEBP new file mode 100644 index 0000000000..77ff75e6db Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-384.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-384.WEBP new file mode 100644 index 0000000000..191aa0a19e Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-48.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-48.WEBP new file mode 100644 index 0000000000..000e05d578 Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-64.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-64.WEBP new file mode 100644 index 0000000000..19f216be58 Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-640.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-640.WEBP new file mode 100644 index 0000000000..86ec2378bd Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-750.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-750.WEBP new file mode 100644 index 0000000000..95a8a4ddc0 Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-828.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-828.WEBP new file mode 100644 index 0000000000..67352e7709 Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/blur.701b3d8a-opt-96.WEBP b/public/nextImageExportOptimizer/blur.701b3d8a-opt-96.WEBP new file mode 100644 index 0000000000..61abf3d26a Binary files /dev/null and b/public/nextImageExportOptimizer/blur.701b3d8a-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/coursera.968d6897-opt-10.WEBP b/public/nextImageExportOptimizer/coursera.968d6897-opt-10.WEBP deleted file mode 100644 index 58310c3f53..0000000000 Binary files a/public/nextImageExportOptimizer/coursera.968d6897-opt-10.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/coursera.968d6897-opt-1080.WEBP b/public/nextImageExportOptimizer/coursera.968d6897-opt-1080.WEBP deleted file mode 100644 index d38c450711..0000000000 Binary files a/public/nextImageExportOptimizer/coursera.968d6897-opt-1080.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/coursera.968d6897-opt-128.WEBP b/public/nextImageExportOptimizer/coursera.968d6897-opt-128.WEBP deleted file mode 100644 index 7686170eaa..0000000000 Binary files a/public/nextImageExportOptimizer/coursera.968d6897-opt-128.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/coursera.968d6897-opt-16.WEBP b/public/nextImageExportOptimizer/coursera.968d6897-opt-16.WEBP deleted file mode 100644 index cb292fe67b..0000000000 Binary files a/public/nextImageExportOptimizer/coursera.968d6897-opt-16.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/coursera.968d6897-opt-256.WEBP b/public/nextImageExportOptimizer/coursera.968d6897-opt-256.WEBP deleted file mode 100644 index 15cda3cada..0000000000 Binary files a/public/nextImageExportOptimizer/coursera.968d6897-opt-256.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/coursera.968d6897-opt-32.WEBP b/public/nextImageExportOptimizer/coursera.968d6897-opt-32.WEBP deleted file mode 100644 index fdaee78d64..0000000000 Binary files a/public/nextImageExportOptimizer/coursera.968d6897-opt-32.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/coursera.968d6897-opt-384.WEBP b/public/nextImageExportOptimizer/coursera.968d6897-opt-384.WEBP deleted file mode 100644 index c89bdd1462..0000000000 Binary files a/public/nextImageExportOptimizer/coursera.968d6897-opt-384.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/coursera.968d6897-opt-48.WEBP b/public/nextImageExportOptimizer/coursera.968d6897-opt-48.WEBP deleted file mode 100644 index b6a973cfcd..0000000000 Binary files a/public/nextImageExportOptimizer/coursera.968d6897-opt-48.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/coursera.968d6897-opt-64.WEBP b/public/nextImageExportOptimizer/coursera.968d6897-opt-64.WEBP deleted file mode 100644 index a130aa0ca4..0000000000 Binary files a/public/nextImageExportOptimizer/coursera.968d6897-opt-64.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/coursera.968d6897-opt-640.WEBP b/public/nextImageExportOptimizer/coursera.968d6897-opt-640.WEBP deleted file mode 100644 index b5c5a64268..0000000000 Binary files a/public/nextImageExportOptimizer/coursera.968d6897-opt-640.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/coursera.968d6897-opt-750.WEBP b/public/nextImageExportOptimizer/coursera.968d6897-opt-750.WEBP deleted file mode 100644 index e91ca697ad..0000000000 Binary files a/public/nextImageExportOptimizer/coursera.968d6897-opt-750.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/coursera.968d6897-opt-828.WEBP b/public/nextImageExportOptimizer/coursera.968d6897-opt-828.WEBP deleted file mode 100644 index 2fcc819bd1..0000000000 Binary files a/public/nextImageExportOptimizer/coursera.968d6897-opt-828.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/coursera.968d6897-opt-96.WEBP b/public/nextImageExportOptimizer/coursera.968d6897-opt-96.WEBP deleted file mode 100644 index ddad24761e..0000000000 Binary files a/public/nextImageExportOptimizer/coursera.968d6897-opt-96.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-10.WEBP b/public/nextImageExportOptimizer/facebook.0e9e1517-opt-10.WEBP deleted file mode 100644 index 9d86bb30fa..0000000000 Binary files a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-10.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-128.WEBP b/public/nextImageExportOptimizer/facebook.0e9e1517-opt-128.WEBP deleted file mode 100644 index 195f5a2b12..0000000000 Binary files a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-128.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-16.WEBP b/public/nextImageExportOptimizer/facebook.0e9e1517-opt-16.WEBP deleted file mode 100644 index 9db699b24e..0000000000 Binary files a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-16.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-256.WEBP b/public/nextImageExportOptimizer/facebook.0e9e1517-opt-256.WEBP deleted file mode 100644 index bba7ff18bf..0000000000 Binary files a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-256.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-32.WEBP b/public/nextImageExportOptimizer/facebook.0e9e1517-opt-32.WEBP deleted file mode 100644 index ab515aa698..0000000000 Binary files a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-32.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-384.WEBP b/public/nextImageExportOptimizer/facebook.0e9e1517-opt-384.WEBP deleted file mode 100644 index 8895590dee..0000000000 Binary files a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-384.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-48.WEBP b/public/nextImageExportOptimizer/facebook.0e9e1517-opt-48.WEBP deleted file mode 100644 index d92f19eaaf..0000000000 Binary files a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-48.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-64.WEBP b/public/nextImageExportOptimizer/facebook.0e9e1517-opt-64.WEBP deleted file mode 100644 index 076b23c54a..0000000000 Binary files a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-64.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-640.WEBP b/public/nextImageExportOptimizer/facebook.0e9e1517-opt-640.WEBP deleted file mode 100644 index f971c80f1c..0000000000 Binary files a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-640.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-96.WEBP b/public/nextImageExportOptimizer/facebook.0e9e1517-opt-96.WEBP deleted file mode 100644 index 726732a6c6..0000000000 Binary files a/public/nextImageExportOptimizer/facebook.0e9e1517-opt-96.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/fernando.8a674f38-opt-10.WEBP b/public/nextImageExportOptimizer/fernando.8a674f38-opt-10.WEBP new file mode 100644 index 0000000000..3ea291cf1d Binary files /dev/null and b/public/nextImageExportOptimizer/fernando.8a674f38-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/fernando.8a674f38-opt-16.WEBP b/public/nextImageExportOptimizer/fernando.8a674f38-opt-16.WEBP new file mode 100644 index 0000000000..751a449911 Binary files /dev/null and b/public/nextImageExportOptimizer/fernando.8a674f38-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/fernando.8a674f38-opt-32.WEBP b/public/nextImageExportOptimizer/fernando.8a674f38-opt-32.WEBP new file mode 100644 index 0000000000..a35158d5f9 Binary files /dev/null and b/public/nextImageExportOptimizer/fernando.8a674f38-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/fernando.8a674f38-opt-48.WEBP b/public/nextImageExportOptimizer/fernando.8a674f38-opt-48.WEBP new file mode 100644 index 0000000000..299c805eb9 Binary files /dev/null and b/public/nextImageExportOptimizer/fernando.8a674f38-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/frances.033cc832-opt-10.WEBP b/public/nextImageExportOptimizer/frances.033cc832-opt-10.WEBP new file mode 100644 index 0000000000..a9b3452172 Binary files /dev/null and b/public/nextImageExportOptimizer/frances.033cc832-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/frances.033cc832-opt-16.WEBP b/public/nextImageExportOptimizer/frances.033cc832-opt-16.WEBP new file mode 100644 index 0000000000..cca7410d5a Binary files /dev/null and b/public/nextImageExportOptimizer/frances.033cc832-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/frances.033cc832-opt-32.WEBP b/public/nextImageExportOptimizer/frances.033cc832-opt-32.WEBP new file mode 100644 index 0000000000..fee77a0801 Binary files /dev/null and b/public/nextImageExportOptimizer/frances.033cc832-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/frances.033cc832-opt-48.WEBP b/public/nextImageExportOptimizer/frances.033cc832-opt-48.WEBP new file mode 100644 index 0000000000..dc90a8b9de Binary files /dev/null and b/public/nextImageExportOptimizer/frances.033cc832-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/github.0821dbe0-opt-10.WEBP b/public/nextImageExportOptimizer/github.0821dbe0-opt-10.WEBP deleted file mode 100644 index 0e7ae4f68d..0000000000 Binary files a/public/nextImageExportOptimizer/github.0821dbe0-opt-10.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/github.0821dbe0-opt-128.WEBP b/public/nextImageExportOptimizer/github.0821dbe0-opt-128.WEBP deleted file mode 100644 index ffc81eb7cb..0000000000 Binary files a/public/nextImageExportOptimizer/github.0821dbe0-opt-128.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/github.0821dbe0-opt-16.WEBP b/public/nextImageExportOptimizer/github.0821dbe0-opt-16.WEBP deleted file mode 100644 index 980c0fb03f..0000000000 Binary files a/public/nextImageExportOptimizer/github.0821dbe0-opt-16.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/github.0821dbe0-opt-256.WEBP b/public/nextImageExportOptimizer/github.0821dbe0-opt-256.WEBP deleted file mode 100644 index bfb2f02c44..0000000000 Binary files a/public/nextImageExportOptimizer/github.0821dbe0-opt-256.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/github.0821dbe0-opt-32.WEBP b/public/nextImageExportOptimizer/github.0821dbe0-opt-32.WEBP deleted file mode 100644 index 0189e412dc..0000000000 Binary files a/public/nextImageExportOptimizer/github.0821dbe0-opt-32.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/github.0821dbe0-opt-384.WEBP b/public/nextImageExportOptimizer/github.0821dbe0-opt-384.WEBP deleted file mode 100644 index 03b0f786e5..0000000000 Binary files a/public/nextImageExportOptimizer/github.0821dbe0-opt-384.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/github.0821dbe0-opt-48.WEBP b/public/nextImageExportOptimizer/github.0821dbe0-opt-48.WEBP deleted file mode 100644 index 3b12fe3998..0000000000 Binary files a/public/nextImageExportOptimizer/github.0821dbe0-opt-48.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/github.0821dbe0-opt-64.WEBP b/public/nextImageExportOptimizer/github.0821dbe0-opt-64.WEBP deleted file mode 100644 index 8466abb6de..0000000000 Binary files a/public/nextImageExportOptimizer/github.0821dbe0-opt-64.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/github.0821dbe0-opt-640.WEBP b/public/nextImageExportOptimizer/github.0821dbe0-opt-640.WEBP deleted file mode 100644 index 09dfe7b99d..0000000000 Binary files a/public/nextImageExportOptimizer/github.0821dbe0-opt-640.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/github.0821dbe0-opt-96.WEBP b/public/nextImageExportOptimizer/github.0821dbe0-opt-96.WEBP deleted file mode 100644 index 9e8b09eea7..0000000000 Binary files a/public/nextImageExportOptimizer/github.0821dbe0-opt-96.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-10.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-10.WEBP new file mode 100644 index 0000000000..06fd5a97af Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-1080.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-1080.WEBP new file mode 100644 index 0000000000..f634405898 Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-1080.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-1200.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-1200.WEBP new file mode 100644 index 0000000000..1803aba80f Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-1200.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-128.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-128.WEBP new file mode 100644 index 0000000000..b1c077faf0 Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-16.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-16.WEBP new file mode 100644 index 0000000000..adeb97c3ba Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-1920.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-1920.WEBP new file mode 100644 index 0000000000..59f5b99cf1 Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-1920.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-2048.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-2048.WEBP new file mode 100644 index 0000000000..d23fbbc1d4 Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-2048.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-256.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-256.WEBP new file mode 100644 index 0000000000..bb576c9231 Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-32.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-32.WEBP new file mode 100644 index 0000000000..7809c19ad9 Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-384.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-384.WEBP new file mode 100644 index 0000000000..e03533c999 Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-48.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-48.WEBP new file mode 100644 index 0000000000..732c95077f Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-64.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-64.WEBP new file mode 100644 index 0000000000..55e070c2dc Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-640.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-640.WEBP new file mode 100644 index 0000000000..5f63332042 Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-750.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-750.WEBP new file mode 100644 index 0000000000..bce9591d0a Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-828.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-828.WEBP new file mode 100644 index 0000000000..119d004d3e Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-96.WEBP b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-96.WEBP new file mode 100644 index 0000000000..2f41d55865 Binary files /dev/null and b/public/nextImageExportOptimizer/hero-photo.19f66b71-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/intuit.04140a09-opt-10.WEBP b/public/nextImageExportOptimizer/intuit.04140a09-opt-10.WEBP deleted file mode 100644 index 4a22ac5524..0000000000 Binary files a/public/nextImageExportOptimizer/intuit.04140a09-opt-10.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/intuit.04140a09-opt-128.WEBP b/public/nextImageExportOptimizer/intuit.04140a09-opt-128.WEBP deleted file mode 100644 index d9d9a43018..0000000000 Binary files a/public/nextImageExportOptimizer/intuit.04140a09-opt-128.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/intuit.04140a09-opt-16.WEBP b/public/nextImageExportOptimizer/intuit.04140a09-opt-16.WEBP deleted file mode 100644 index 54e08c0be5..0000000000 Binary files a/public/nextImageExportOptimizer/intuit.04140a09-opt-16.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/intuit.04140a09-opt-256.WEBP b/public/nextImageExportOptimizer/intuit.04140a09-opt-256.WEBP deleted file mode 100644 index 083521fba0..0000000000 Binary files a/public/nextImageExportOptimizer/intuit.04140a09-opt-256.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/intuit.04140a09-opt-32.WEBP b/public/nextImageExportOptimizer/intuit.04140a09-opt-32.WEBP deleted file mode 100644 index 138ad16fe1..0000000000 Binary files a/public/nextImageExportOptimizer/intuit.04140a09-opt-32.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/intuit.04140a09-opt-384.WEBP b/public/nextImageExportOptimizer/intuit.04140a09-opt-384.WEBP deleted file mode 100644 index 49c5709bd5..0000000000 Binary files a/public/nextImageExportOptimizer/intuit.04140a09-opt-384.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/intuit.04140a09-opt-48.WEBP b/public/nextImageExportOptimizer/intuit.04140a09-opt-48.WEBP deleted file mode 100644 index a52b865f7c..0000000000 Binary files a/public/nextImageExportOptimizer/intuit.04140a09-opt-48.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/intuit.04140a09-opt-64.WEBP b/public/nextImageExportOptimizer/intuit.04140a09-opt-64.WEBP deleted file mode 100644 index 8d982c651f..0000000000 Binary files a/public/nextImageExportOptimizer/intuit.04140a09-opt-64.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/intuit.04140a09-opt-640.WEBP b/public/nextImageExportOptimizer/intuit.04140a09-opt-640.WEBP deleted file mode 100644 index 3297515056..0000000000 Binary files a/public/nextImageExportOptimizer/intuit.04140a09-opt-640.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/intuit.04140a09-opt-750.WEBP b/public/nextImageExportOptimizer/intuit.04140a09-opt-750.WEBP deleted file mode 100644 index e3561de6b1..0000000000 Binary files a/public/nextImageExportOptimizer/intuit.04140a09-opt-750.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/intuit.04140a09-opt-828.WEBP b/public/nextImageExportOptimizer/intuit.04140a09-opt-828.WEBP deleted file mode 100644 index 602f845504..0000000000 Binary files a/public/nextImageExportOptimizer/intuit.04140a09-opt-828.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/intuit.04140a09-opt-96.WEBP b/public/nextImageExportOptimizer/intuit.04140a09-opt-96.WEBP deleted file mode 100644 index b6bad3d039..0000000000 Binary files a/public/nextImageExportOptimizer/intuit.04140a09-opt-96.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-10.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-10.WEBP new file mode 100644 index 0000000000..a443e501a1 Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-1080.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-1080.WEBP new file mode 100644 index 0000000000..4db2fd3c13 Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-1080.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-1200.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-1200.WEBP new file mode 100644 index 0000000000..8aa5822b89 Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-1200.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-128.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-128.WEBP new file mode 100644 index 0000000000..b05a0d0e2d Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-16.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-16.WEBP new file mode 100644 index 0000000000..9d66ca6ed6 Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-1920.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-1920.WEBP new file mode 100644 index 0000000000..595e887a9e Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-1920.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-2048.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-2048.WEBP new file mode 100644 index 0000000000..98f7209053 Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-2048.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-256.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-256.WEBP new file mode 100644 index 0000000000..3af6cd0571 Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-32.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-32.WEBP new file mode 100644 index 0000000000..308e21ea56 Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-384.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-384.WEBP new file mode 100644 index 0000000000..be346adf7c Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-3840.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-3840.WEBP new file mode 100644 index 0000000000..81f903e431 Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-3840.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-48.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-48.WEBP new file mode 100644 index 0000000000..da39f8570a Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-64.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-64.WEBP new file mode 100644 index 0000000000..33edc81d52 Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-640.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-640.WEBP new file mode 100644 index 0000000000..118533b5b4 Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-750.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-750.WEBP new file mode 100644 index 0000000000..a889f31a78 Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-828.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-828.WEBP new file mode 100644 index 0000000000..ace80ecbae Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-96.WEBP b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-96.WEBP new file mode 100644 index 0000000000..dc52dee62f Binary files /dev/null and b/public/nextImageExportOptimizer/location-photo.8c4a71ef-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-10.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-10.WEBP new file mode 100644 index 0000000000..4961b7c222 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-1080.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-1080.WEBP new file mode 100644 index 0000000000..65c29990c5 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-1080.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-1200.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-1200.WEBP new file mode 100644 index 0000000000..d8214b9089 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-1200.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-128.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-128.WEBP new file mode 100644 index 0000000000..69da4bb95c Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-16.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-16.WEBP new file mode 100644 index 0000000000..2e385671e1 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-1920.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-1920.WEBP new file mode 100644 index 0000000000..15990c33fc Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-1920.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-256.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-256.WEBP new file mode 100644 index 0000000000..4eede1807b Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-32.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-32.WEBP new file mode 100644 index 0000000000..9bbfdc3c21 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-384.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-384.WEBP new file mode 100644 index 0000000000..8a5917f234 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-48.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-48.WEBP new file mode 100644 index 0000000000..f760169cdd Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-64.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-64.WEBP new file mode 100644 index 0000000000..89474d06a0 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-640.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-640.WEBP new file mode 100644 index 0000000000..4ad9b173b8 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-750.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-750.WEBP new file mode 100644 index 0000000000..ce97911ea7 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-828.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-828.WEBP new file mode 100644 index 0000000000..30bdaee90f Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-96.WEBP b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-96.WEBP new file mode 100644 index 0000000000..eaf20905c6 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-blurred.94c9eff4-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-10.WEBP b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-10.WEBP new file mode 100644 index 0000000000..0c31892d01 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-1080.WEBP b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-1080.WEBP new file mode 100644 index 0000000000..d2128901f2 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-1080.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-128.WEBP b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-128.WEBP new file mode 100644 index 0000000000..1fc4b2db74 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-16.WEBP b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-16.WEBP new file mode 100644 index 0000000000..599c215a34 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-256.WEBP b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-256.WEBP new file mode 100644 index 0000000000..07a354fc30 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-32.WEBP b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-32.WEBP new file mode 100644 index 0000000000..0aeeb090a1 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-384.WEBP b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-384.WEBP new file mode 100644 index 0000000000..6b83443c3f Binary files /dev/null and b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-48.WEBP b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-48.WEBP new file mode 100644 index 0000000000..382b3114aa Binary files /dev/null and b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-64.WEBP b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-64.WEBP new file mode 100644 index 0000000000..97776e3e10 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-640.WEBP b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-640.WEBP new file mode 100644 index 0000000000..6cf46636ab Binary files /dev/null and b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-750.WEBP b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-750.WEBP new file mode 100644 index 0000000000..db018b802c Binary files /dev/null and b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-828.WEBP b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-828.WEBP new file mode 100644 index 0000000000..69547afaf1 Binary files /dev/null and b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-96.WEBP b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-96.WEBP new file mode 100644 index 0000000000..f3304061ed Binary files /dev/null and b/public/nextImageExportOptimizer/logo-mask.1694fb96-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-10.WEBP b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-10.WEBP new file mode 100644 index 0000000000..9a05f304bc Binary files /dev/null and b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-128.WEBP b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-128.WEBP new file mode 100644 index 0000000000..1302f4f2e9 Binary files /dev/null and b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-16.WEBP b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-16.WEBP new file mode 100644 index 0000000000..cc8edc0502 Binary files /dev/null and b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-32.WEBP b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-32.WEBP new file mode 100644 index 0000000000..f207a99da2 Binary files /dev/null and b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-48.WEBP b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-48.WEBP new file mode 100644 index 0000000000..4993df57bd Binary files /dev/null and b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-64.WEBP b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-64.WEBP new file mode 100644 index 0000000000..32b35ef068 Binary files /dev/null and b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-96.WEBP b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-96.WEBP new file mode 100644 index 0000000000..aa41a03d4e Binary files /dev/null and b/public/nextImageExportOptimizer/mask.d8b3d3a1-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/pinterest.36b58187-opt-10.WEBP b/public/nextImageExportOptimizer/pinterest.36b58187-opt-10.WEBP deleted file mode 100644 index 38783fbc8f..0000000000 Binary files a/public/nextImageExportOptimizer/pinterest.36b58187-opt-10.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/pinterest.36b58187-opt-128.WEBP b/public/nextImageExportOptimizer/pinterest.36b58187-opt-128.WEBP deleted file mode 100644 index 713de12c87..0000000000 Binary files a/public/nextImageExportOptimizer/pinterest.36b58187-opt-128.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/pinterest.36b58187-opt-16.WEBP b/public/nextImageExportOptimizer/pinterest.36b58187-opt-16.WEBP deleted file mode 100644 index bdebf7c088..0000000000 Binary files a/public/nextImageExportOptimizer/pinterest.36b58187-opt-16.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/pinterest.36b58187-opt-256.WEBP b/public/nextImageExportOptimizer/pinterest.36b58187-opt-256.WEBP deleted file mode 100644 index 6f6374ee9f..0000000000 Binary files a/public/nextImageExportOptimizer/pinterest.36b58187-opt-256.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/pinterest.36b58187-opt-32.WEBP b/public/nextImageExportOptimizer/pinterest.36b58187-opt-32.WEBP deleted file mode 100644 index 580a6b8577..0000000000 Binary files a/public/nextImageExportOptimizer/pinterest.36b58187-opt-32.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/pinterest.36b58187-opt-384.WEBP b/public/nextImageExportOptimizer/pinterest.36b58187-opt-384.WEBP deleted file mode 100644 index 8464f4467a..0000000000 Binary files a/public/nextImageExportOptimizer/pinterest.36b58187-opt-384.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/pinterest.36b58187-opt-48.WEBP b/public/nextImageExportOptimizer/pinterest.36b58187-opt-48.WEBP deleted file mode 100644 index d2635b61c0..0000000000 Binary files a/public/nextImageExportOptimizer/pinterest.36b58187-opt-48.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/pinterest.36b58187-opt-64.WEBP b/public/nextImageExportOptimizer/pinterest.36b58187-opt-64.WEBP deleted file mode 100644 index 637bd4d6bb..0000000000 Binary files a/public/nextImageExportOptimizer/pinterest.36b58187-opt-64.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/pinterest.36b58187-opt-640.WEBP b/public/nextImageExportOptimizer/pinterest.36b58187-opt-640.WEBP deleted file mode 100644 index d56f09ff53..0000000000 Binary files a/public/nextImageExportOptimizer/pinterest.36b58187-opt-640.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/pinterest.36b58187-opt-96.WEBP b/public/nextImageExportOptimizer/pinterest.36b58187-opt-96.WEBP deleted file mode 100644 index 3b91a4245f..0000000000 Binary files a/public/nextImageExportOptimizer/pinterest.36b58187-opt-96.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-10.WEBP b/public/nextImageExportOptimizer/shopify.2cb330ea-opt-10.WEBP deleted file mode 100644 index a88502ee25..0000000000 Binary files a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-10.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-128.WEBP b/public/nextImageExportOptimizer/shopify.2cb330ea-opt-128.WEBP deleted file mode 100644 index 25e12792ae..0000000000 Binary files a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-128.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-16.WEBP b/public/nextImageExportOptimizer/shopify.2cb330ea-opt-16.WEBP deleted file mode 100644 index b67d5de5b5..0000000000 Binary files a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-16.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-256.WEBP b/public/nextImageExportOptimizer/shopify.2cb330ea-opt-256.WEBP deleted file mode 100644 index afa8ec3905..0000000000 Binary files a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-256.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-32.WEBP b/public/nextImageExportOptimizer/shopify.2cb330ea-opt-32.WEBP deleted file mode 100644 index d516cd12c1..0000000000 Binary files a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-32.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-384.WEBP b/public/nextImageExportOptimizer/shopify.2cb330ea-opt-384.WEBP deleted file mode 100644 index eeae64cd68..0000000000 Binary files a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-384.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-48.WEBP b/public/nextImageExportOptimizer/shopify.2cb330ea-opt-48.WEBP deleted file mode 100644 index 9c22d23445..0000000000 Binary files a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-48.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-64.WEBP b/public/nextImageExportOptimizer/shopify.2cb330ea-opt-64.WEBP deleted file mode 100644 index 2867219675..0000000000 Binary files a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-64.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-640.WEBP b/public/nextImageExportOptimizer/shopify.2cb330ea-opt-640.WEBP deleted file mode 100644 index e438bd82fa..0000000000 Binary files a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-640.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-96.WEBP b/public/nextImageExportOptimizer/shopify.2cb330ea-opt-96.WEBP deleted file mode 100644 index fcd35d32ab..0000000000 Binary files a/public/nextImageExportOptimizer/shopify.2cb330ea-opt-96.WEBP and /dev/null differ diff --git a/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-10.WEBP b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-10.WEBP new file mode 100644 index 0000000000..986d533955 Binary files /dev/null and b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-1080.WEBP b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-1080.WEBP new file mode 100644 index 0000000000..597c2732a9 Binary files /dev/null and b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-1080.WEBP differ diff --git a/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-128.WEBP b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-128.WEBP new file mode 100644 index 0000000000..b5e42fd429 Binary files /dev/null and b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-128.WEBP differ diff --git a/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-16.WEBP b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-16.WEBP new file mode 100644 index 0000000000..c3ecb88546 Binary files /dev/null and b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-256.WEBP b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-256.WEBP new file mode 100644 index 0000000000..9a9165784e Binary files /dev/null and b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-256.WEBP differ diff --git a/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-32.WEBP b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-32.WEBP new file mode 100644 index 0000000000..9a04a6c44f Binary files /dev/null and b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-384.WEBP b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-384.WEBP new file mode 100644 index 0000000000..2288470736 Binary files /dev/null and b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-384.WEBP differ diff --git a/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-48.WEBP b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-48.WEBP new file mode 100644 index 0000000000..2f885cf559 Binary files /dev/null and b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-48.WEBP differ diff --git a/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-64.WEBP b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-64.WEBP new file mode 100644 index 0000000000..bd1e0e0305 Binary files /dev/null and b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-64.WEBP differ diff --git a/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-640.WEBP b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-640.WEBP new file mode 100644 index 0000000000..e65e9220c3 Binary files /dev/null and b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-640.WEBP differ diff --git a/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-750.WEBP b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-750.WEBP new file mode 100644 index 0000000000..8fccd31025 Binary files /dev/null and b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-750.WEBP differ diff --git a/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-828.WEBP b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-828.WEBP new file mode 100644 index 0000000000..de583c39cb Binary files /dev/null and b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-828.WEBP differ diff --git a/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-96.WEBP b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-96.WEBP new file mode 100644 index 0000000000..d7c4d96568 Binary files /dev/null and b/public/nextImageExportOptimizer/speaker.5a4b04b3-opt-96.WEBP differ diff --git a/public/nextImageExportOptimizer/trudie.02ae47d4-opt-10.WEBP b/public/nextImageExportOptimizer/trudie.02ae47d4-opt-10.WEBP new file mode 100644 index 0000000000..7e3a78dfb1 Binary files /dev/null and b/public/nextImageExportOptimizer/trudie.02ae47d4-opt-10.WEBP differ diff --git a/public/nextImageExportOptimizer/trudie.02ae47d4-opt-16.WEBP b/public/nextImageExportOptimizer/trudie.02ae47d4-opt-16.WEBP new file mode 100644 index 0000000000..33ced8fb42 Binary files /dev/null and b/public/nextImageExportOptimizer/trudie.02ae47d4-opt-16.WEBP differ diff --git a/public/nextImageExportOptimizer/trudie.02ae47d4-opt-32.WEBP b/public/nextImageExportOptimizer/trudie.02ae47d4-opt-32.WEBP new file mode 100644 index 0000000000..4ac91b9fb5 Binary files /dev/null and b/public/nextImageExportOptimizer/trudie.02ae47d4-opt-32.WEBP differ diff --git a/public/nextImageExportOptimizer/trudie.02ae47d4-opt-48.WEBP b/public/nextImageExportOptimizer/trudie.02ae47d4-opt-48.WEBP new file mode 100644 index 0000000000..315dd1a9b8 Binary files /dev/null and b/public/nextImageExportOptimizer/trudie.02ae47d4-opt-48.WEBP differ diff --git a/src/_design-system/mdx-components/get-mdx-headings.tsx b/src/_design-system/mdx-components/get-mdx-headings.tsx new file mode 100644 index 0000000000..a162126a90 --- /dev/null +++ b/src/_design-system/mdx-components/get-mdx-headings.tsx @@ -0,0 +1,99 @@ +/** + * @file MDX Heading components. + * Copied from `nextra-theme-docs` and restyled. + */ + +import { clsx } from "clsx" +import { + useSetActiveAnchor, + useIntersectionObserver, + useSlugs, +} from "nextra-theme-docs" + +import { useEffect, useRef } from "react" + +const headingClasses = { + h1: "typography-h2 mt-2", + h2: "typography-h3 mt-10", + h3: "typography-body-lg mt-8", + h4: "typography-body-md font-semibold mt-8", + h5: "typography-label", + h6: "typography-label", +} + +const createHeading = ( + Tag: `h${2 | 3 | 4 | 5 | 6}`, + context: { index: number }, +) => + function Heading({ + children, + id, + className, + ...props + }: React.ComponentPropsWithoutRef<"h2">): React.ReactElement { + // Nextra tracks anchors in context + const setActiveAnchor = useSetActiveAnchor() + const slugs = useSlugs() + const observer = useIntersectionObserver() + const obRef = useRef(null) + + useEffect(() => { + const heading = obRef.current + if (!id || !observer || !heading) return + observer.observe(heading) + slugs.set(heading, [id, (context.index += 1)]) + + return () => { + observer.disconnect() + slugs.delete(heading) + setActiveAnchor(f => { + const ret = { ...f } + delete ret[id] + return ret + }) + } + }, [id, slugs, observer, setActiveAnchor]) + + return ( + + {children} + {id && ( + + )} + + ) + } + +export function getMdxHeadings() { + const counter = ((globalThis as Record).__headingsCounter ||= { + index: 0, + }) + + return { + h1: (props: React.ComponentPropsWithoutRef<"h1">) => ( +

+ ), + h2: createHeading("h2", counter), + h3: createHeading("h3", counter), + h4: createHeading("h4", counter), + h5: createHeading("h5", counter), + h6: createHeading("h6", counter), + } +} diff --git a/src/_design-system/mdx-components/index.tsx b/src/_design-system/mdx-components/index.tsx new file mode 100644 index 0000000000..bec4faee2c --- /dev/null +++ b/src/_design-system/mdx-components/index.tsx @@ -0,0 +1,7 @@ +import { getMdxHeadings } from "./get-mdx-headings" +import { MdxLink } from "./mdx-link" + +export const mdxComponents = { + a: MdxLink, + ...getMdxHeadings(), +} diff --git a/src/_design-system/mdx-components/mdx-link.tsx b/src/_design-system/mdx-components/mdx-link.tsx new file mode 100644 index 0000000000..cf18dafdfc --- /dev/null +++ b/src/_design-system/mdx-components/mdx-link.tsx @@ -0,0 +1,23 @@ +import { forwardRef } from "react" +import { clsx } from "clsx" + +import { Anchor } from "@/app/conf/_design-system/anchor" + +export const MdxLink = forwardRef< + HTMLAnchorElement, + React.ComponentPropsWithoutRef<"a"> +>(function MdxLink(props, ref) { + return ( + + {props.children} + + ) +}) diff --git a/src/_design-system/syntax/dark.json b/src/_design-system/syntax/dark.json new file mode 100644 index 0000000000..6897a3fe5b --- /dev/null +++ b/src/_design-system/syntax/dark.json @@ -0,0 +1,552 @@ +{ + "name": "k-colorable dark, based on GitHub Dark", + "type": "dark", + "semanticHighlighting": true, + "colors": { + "activityBar.activeBorder": "#f9826c", + "activityBar.background": "#24292C", + "activityBar.border": "#1b1f20", + "activityBar.foreground": "#e1e4e8", + "activityBar.inactiveForeground": "#6a737d", + "activityBarBadge.background": "#0366d6", + "activityBarBadge.foreground": "#fff", + "badge.background": "#044289", + "badge.foreground": "#c8e1ff", + "breadcrumb.activeSelectionForeground": "#d1d5da", + "breadcrumb.focusForeground": "#e1e4e8", + "breadcrumb.foreground": "#959da5", + "breadcrumbPicker.background": "#2b3036", + "button.background": "#176f2c", + "button.foreground": "#dcffe4", + "button.hoverBackground": "#22863a", + "button.secondaryBackground": "#444d56", + "button.secondaryForeground": "#fff", + "button.secondaryHoverBackground": "#586069", + "checkbox.background": "#444d56", + "checkbox.border": "#1b1f20", + "debugToolBar.background": "#2b3036", + "descriptionForeground": "#959da5", + "diffEditor.insertedTextBackground": "#28a74530", + "diffEditor.removedTextBackground": "#d73a4930", + "dropdown.background": "#2f363d", + "dropdown.border": "#1b1f20", + "dropdown.foreground": "#e1e4e8", + "dropdown.listBackground": "#24292C", + "editor.background": "#24292c", + "editor.findMatchBackground": "#ffd33d44", + "editor.findMatchHighlightBackground": "#ffd33d22", + "editor.focusedStackFrameHighlightBackground": "#2b6a3033", + "editor.foldBackground": "#58606915", + "editor.foreground": "#CFD3C5", + "editor.inactiveSelectionBackground": "#3392FF22", + "editor.lineHighlightBackground": "#2b3036", + "editor.linkedEditingBackground": "#3392FF22", + "editor.selectionBackground": "#3392FF44", + "editor.selectionHighlightBackground": "#17E5E633", + "editor.selectionHighlightBorder": "#17E5E600", + "editor.stackFrameHighlightBackground": "#C6902625", + "editor.wordHighlightBackground": "#17E5E600", + "editor.wordHighlightBorder": "#17E5E699", + "editor.wordHighlightStrongBackground": "#17E5E600", + "editor.wordHighlightStrongBorder": "#17E5E666", + "editorBracketHighlight.foreground1": "#79b8ff", + "editorBracketHighlight.foreground2": "#ffab70", + "editorBracketHighlight.foreground3": "#b392f0", + "editorBracketHighlight.foreground4": "#79b8ff", + "editorBracketHighlight.foreground5": "#ffab70", + "editorBracketHighlight.foreground6": "#b392f0", + "editorBracketMatch.background": "#17E5E650", + "editorBracketMatch.border": "#17E5E600", + "editorCursor.foreground": "#c8e1ff", + "editorError.foreground": "#f97583", + "editorGroup.border": "#1b1f20", + "editorGroupHeader.tabsBackground": "#24292C", + "editorGroupHeader.tabsBorder": "#1b1f20", + "editorGutter.addedBackground": "#28a745", + "editorGutter.deletedBackground": "#ea4a5a", + "editorGutter.modifiedBackground": "#2188ff", + "editorIndentGuide.activeBackground": "#444d56", + "editorIndentGuide.background": "#2f363d", + "editorLineNumber.activeForeground": "#e1e4e8", + "editorLineNumber.foreground": "#444d56", + "editorOverviewRuler.border": "#1b1f20", + "editorWarning.foreground": "#ffea7f", + "editorWhitespace.foreground": "#444d56", + "editorWidget.background": "#24292C", + "errorForeground": "#f97583", + "focusBorder": "#005cc5", + "foreground": "#d1d5da", + "gitDecoration.addedResourceForeground": "#34d058", + "gitDecoration.conflictingResourceForeground": "#ffab70", + "gitDecoration.deletedResourceForeground": "#ea4a5a", + "gitDecoration.ignoredResourceForeground": "#6a737d", + "gitDecoration.modifiedResourceForeground": "#79b8ff", + "gitDecoration.submoduleResourceForeground": "#6a737d", + "gitDecoration.untrackedResourceForeground": "#34d058", + "input.background": "#2f363b", + "input.border": "#1b1f20", + "input.foreground": "#e1e4e8", + "input.placeholderForeground": "#959da5", + "list.activeSelectionBackground": "#39414a", + "list.activeSelectionForeground": "#e1e4e8", + "list.focusBackground": "#044289", + "list.hoverBackground": "#282e34", + "list.hoverForeground": "#e1e4e8", + "list.inactiveFocusBackground": "#1d2d3e", + "list.inactiveSelectionBackground": "#282e34", + "list.inactiveSelectionForeground": "#e1e4e8", + "notificationCenterHeader.background": "#24292b", + "notificationCenterHeader.foreground": "#959da5", + "notifications.background": "#2f363b", + "notifications.border": "#1b1f20", + "notifications.foreground": "#e1e4e8", + "notificationsErrorIcon.foreground": "#ea4a5a", + "notificationsInfoIcon.foreground": "#79b8ff", + "notificationsWarningIcon.foreground": "#ffab70", + "panel.background": "#24292C", + "panel.border": "#1b1f20", + "panelInput.border": "#2f363d", + "panelTitle.activeBorder": "#f9826c", + "panelTitle.activeForeground": "#e1e4e8", + "panelTitle.inactiveForeground": "#959da5", + "peekViewEditor.background": "#24292C88", + "peekViewEditor.matchHighlightBackground": "#ffd33d33", + "peekViewResult.background": "#1f2425", + "peekViewResult.matchHighlightBackground": "#ffd33d33", + "pickerGroup.border": "#444d56", + "pickerGroup.foreground": "#e1e4e8", + "progressBar.background": "#0366d6", + "quickInput.background": "#24292C", + "quickInput.foreground": "#e1e4e8", + "scrollbar.shadow": "#0008", + "scrollbarSlider.activeBackground": "#6a737d88", + "scrollbarSlider.background": "#6a737d33", + "scrollbarSlider.hoverBackground": "#6a737d44", + "settings.headerForeground": "#e1e4e8", + "settings.modifiedItemIndicator": "#0366d6", + "sideBar.background": "#1f2425", + "sideBar.border": "#1b1f20", + "sideBar.foreground": "#d1d5da", + "sideBarSectionHeader.background": "#24292C", + "sideBarSectionHeader.border": "#1b1f20", + "sideBarSectionHeader.foreground": "#e1e4e8", + "sideBarTitle.foreground": "#e1e4e8", + "statusBar.background": "#24292C", + "statusBar.border": "#1b1f20", + "statusBar.debuggingBackground": "#931c06", + "statusBar.debuggingForeground": "#fff", + "statusBar.foreground": "#d1d5da", + "statusBar.noFolderBackground": "#24292C", + "statusBarItem.prominentBackground": "#282e34", + "statusBarItem.remoteBackground": "#24292C", + "statusBarItem.remoteForeground": "#d1d5da", + "tab.activeBackground": "#24292C", + "tab.activeBorder": "#24292C", + "tab.activeBorderTop": "#f9826c", + "tab.activeForeground": "#e1e4e8", + "tab.border": "#1b1f20", + "tab.hoverBackground": "#24292C", + "tab.inactiveBackground": "#24292C", + "tab.inactiveForeground": "#959da5", + "tab.unfocusedActiveBorder": "#24292C", + "tab.unfocusedActiveBorderTop": "#1b1f20", + "tab.unfocusedHoverBackground": "#24292C", + "terminal.ansiBlack": "#586069", + "terminal.ansiBlue": "#2188ff", + "terminal.ansiBrightBlack": "#959da5", + "terminal.ansiBrightBlue": "#79b8ff", + "terminal.ansiBrightCyan": "#56d4dd", + "terminal.ansiBrightGreen": "#85e89d", + "terminal.ansiBrightMagenta": "#b392f0", + "terminal.ansiBrightRed": "#f97583", + "terminal.ansiBrightWhite": "#fafbfc", + "terminal.ansiBrightYellow": "#ffea7f", + "terminal.ansiCyan": "#39c5cf", + "terminal.ansiGreen": "#34d058", + "terminal.ansiMagenta": "#b392f0", + "terminal.ansiRed": "#ea4a5a", + "terminal.ansiWhite": "#d1d5da", + "terminal.ansiYellow": "#ffea7f", + "terminal.foreground": "#d1d5da", + "terminal.tab.activeBorder": "#f9826c", + "terminalCursor.background": "#586069", + "terminalCursor.foreground": "#79b8ff", + "textBlockQuote.background": "#24292C", + "textBlockQuote.border": "#444d56", + "textCodeBlock.background": "#2f363d", + "textLink.activeForeground": "#c8e1ff", + "textLink.foreground": "#79b8ff", + "textPreformat.foreground": "#d1d5da", + "textSeparator.foreground": "#586069", + "titleBar.activeBackground": "#24292C", + "titleBar.activeForeground": "#e1e4e8", + "titleBar.border": "#1b1f20", + "titleBar.inactiveBackground": "#24292C", + "titleBar.inactiveForeground": "#959da5", + "tree.indentGuidesStroke": "#2f363d", + "welcomePage.buttonBackground": "#2f363d", + "welcomePage.buttonHoverBackground": "#444d56" + }, + "tokenColors": [ + { + "scope": ["comment", "punctuation.definition.comment", "string.comment"], + "settings": { + "foreground": "#6a737d" + } + }, + { + "scope": [ + "entity.name.constant", + "variable.other.constant", + "variable.other.enummember", + "variable.language" + ], + "settings": { + "foreground": "#79b8ff" + } + }, + { + "scope": "constant", + "settings": { + "foreground": "#F3F4F0" + } + }, + { + "scope": [ + "keyword.other.unit.deg.css", + "keyword.other.unit.ex.css", + "keyword.other.unit.fr.css", + "keyword.other.unit.in.css", + "keyword.other.unit.mm.css", + "keyword.other.unit.pc.css", + "keyword.other.unit.pt.css", + "keyword.other.unit.px.css", + "keyword.other.unit.rem.css", + "keyword.other.unit.vh.css", + "keyword.other.unit.vw.css", + "keyword.other.unit.vmin.css", + "keyword.other.unit.vmax.css", + "keyword.other.unit.percentage.css" + ], + "settings": { + "foreground": "#FFAc71" + } + }, + { + "scope": ["entity", "entity.name", "variable.parameter.graphql"], + "settings": { + "foreground": "#F3F4F0" + } + }, + { + "scope": "variable.parameter.function", + "settings": { + "foreground": "#e1e4e8" + } + }, + { + "scope": "entity.name.tag", + "settings": { + "foreground": "#85e89d" + } + }, + { + "scope": "keyword", + "settings": { + "foreground": "#C2F653" + } + }, + { + "scope": "keyword.operator", + "settings": { + "foreground": "#ECFAD1" + } + }, + { + "scope": ["storage", "storage.type"], + "settings": { + "foreground": "#f97583" + } + }, + { + "scope": [ + "storage.modifier.package", + "storage.modifier.import", + "storage.type.java" + ], + "settings": { + "foreground": "#e1e4e8" + } + }, + { + "scope": [ + "string", + "punctuation.definition.string", + "string punctuation.section.embedded source" + ], + "settings": { + "foreground": "#9ecbff" + } + }, + { + "scope": ["support", "support.type.graphql"], + "settings": { + "foreground": "#FF99E0" + } + }, + { + "scope": "meta.property-name", + "settings": { + "foreground": "#79b8ff" + } + }, + { + "scope": ["variable", "support.type.property-name.json"], + "settings": { + "foreground": "#dbf6a2" + } + }, + { + "scope": "variable.other", + "settings": { + "foreground": "#e1e4e8" + } + }, + { + "scope": "invalid.broken", + "settings": { + "fontStyle": "italic", + "foreground": "#fdaeb7" + } + }, + { + "scope": "invalid.deprecated", + "settings": { + "fontStyle": "italic", + "foreground": "#fdaeb7" + } + }, + { + "scope": "invalid.illegal", + "settings": { + "fontStyle": "italic", + "foreground": "#fdaeb7" + } + }, + { + "scope": "invalid.unimplemented", + "settings": { + "fontStyle": "italic", + "foreground": "#fdaeb7" + } + }, + { + "scope": "carriage-return", + "settings": { + "background": "#f97583", + "content": "^M", + "fontStyle": "italic underline", + "foreground": "#24292C" + } + }, + { + "scope": "message.error", + "settings": { + "foreground": "#fdaeb7" + } + }, + { + "scope": ["string variable"], + "settings": { + "foreground": "#79b8ff" + } + }, + { + "scope": ["source.regexp", "string.regexp"], + "settings": { + "foreground": "#dbedff" + } + }, + { + "scope": [ + "string.regexp.character-class", + "string.regexp constant.character.escape", + "string.regexp source.ruby.embedded", + "string.regexp string.regexp.arbitrary-repitition" + ], + "settings": { + "foreground": "#dbedff" + } + }, + { + "scope": "string.regexp constant.character.escape", + "settings": { + "fontStyle": "bold", + "foreground": "#85e89d" + } + }, + { + "scope": "support.constant", + "settings": { + "foreground": "#79b8ff" + } + }, + { + "scope": "support.variable", + "settings": { + "foreground": "#79b8ff" + } + }, + { + "scope": "meta.module-reference", + "settings": { + "foreground": "#79b8ff" + } + }, + { + "scope": "punctuation.definition.list.begin.markdown", + "settings": { + "foreground": "#dbf6a2" + } + }, + { + "scope": ["markup.heading", "markup.heading entity.name"], + "settings": { + "fontStyle": "bold", + "foreground": "#79b8ff" + } + }, + { + "scope": "markup.quote", + "settings": { + "foreground": "#85e89d" + } + }, + { + "scope": "markup.italic", + "settings": { + "fontStyle": "italic", + "foreground": "#e1e4e8" + } + }, + { + "scope": "markup.bold", + "settings": { + "fontStyle": "bold", + "foreground": "#e1e4e8" + } + }, + { + "scope": ["markup.underline"], + "settings": { + "fontStyle": "underline" + } + }, + { + "scope": ["markup.strikethrough"], + "settings": { + "fontStyle": "strikethrough" + } + }, + { + "scope": "markup.inline.raw", + "settings": { + "foreground": "#79b8ff" + } + }, + { + "scope": [ + "markup.deleted", + "meta.diff.header.from-file", + "punctuation.definition.deleted" + ], + "settings": { + "background": "#86181d", + "foreground": "#fdaeb7" + } + }, + { + "scope": [ + "markup.inserted", + "meta.diff.header.to-file", + "punctuation.definition.inserted" + ], + "settings": { + "background": "#144620", + "foreground": "#85e89d" + } + }, + { + "scope": ["markup.changed", "punctuation.definition.changed"], + "settings": { + "background": "#c24e00", + "foreground": "#ffab70" + } + }, + { + "scope": ["markup.ignored", "markup.untracked"], + "settings": { + "background": "#79b8ff", + "foreground": "#2f363d" + } + }, + { + "scope": "meta.diff.range", + "settings": { + "fontStyle": "bold", + "foreground": "#b392f0" + } + }, + { + "scope": "meta.diff.header", + "settings": { + "foreground": "#79b8ff" + } + }, + { + "scope": "meta.separator", + "settings": { + "fontStyle": "bold", + "foreground": "#79b8ff" + } + }, + { + "scope": "meta.output", + "settings": { + "foreground": "#79b8ff" + } + }, + { + "scope": [ + "brackethighlighter.tag", + "brackethighlighter.curly", + "brackethighlighter.round", + "brackethighlighter.square", + "brackethighlighter.angle", + "brackethighlighter.quote" + ], + "settings": { + "foreground": "#d1d5da" + } + }, + { + "scope": "brackethighlighter.unmatched", + "settings": { + "foreground": "#fdaeb7" + } + }, + { + "scope": ["constant.other.reference.link", "string.other.link"], + "settings": { + "fontStyle": "underline", + "foreground": "#dbedff" + } + }, + { + "scope": ["punctuation", "meta.selectionset.graphql"], + "settings": { + "foreground": "#6E7557" + } + } + ] +} diff --git a/src/_design-system/syntax/index.js b/src/_design-system/syntax/index.js new file mode 100644 index 0000000000..028fad3b7a --- /dev/null +++ b/src/_design-system/syntax/index.js @@ -0,0 +1,14 @@ +// @ts-check + +import fs from "fs/promises" + +const [dark, light] = await Promise.all([ + fs + .readFile(new URL("./dark.json", import.meta.url), "utf-8") + .then(JSON.parse), + fs + .readFile(new URL("./light.json", import.meta.url), "utf-8") + .then(JSON.parse), +]) + +export const syntaxHighlightingThemes = { light, dark } diff --git a/src/_design-system/syntax/light.json b/src/_design-system/syntax/light.json new file mode 100644 index 0000000000..781f2ea182 --- /dev/null +++ b/src/_design-system/syntax/light.json @@ -0,0 +1,327 @@ +{ + "name": "k-colorable light, based on Min Light", + "type": "light", + "semanticHighlighting": true, + "colors": { + "activityBar.background": "#f6f6f6", + "activityBar.foreground": "#9E9E9E", + "activityBarBadge.background": "#616161", + "badge.background": "#E0E0E0", + "badge.foreground": "#616161", + "button.background": "#757575", + "button.hoverBackground": "#616161", + "debugIcon.breakpointCurrentStackframeForeground": "#1976D2", + "debugIcon.breakpointDisabledForeground": "#848484", + "debugIcon.breakpointForeground": "#D32F2F", + "debugIcon.breakpointStackframeForeground": "#1976D2", + "debugIcon.continueForeground": "#6f42c1", + "debugIcon.disconnectForeground": "#6f42c1", + "debugIcon.pauseForeground": "#6f42c1", + "debugIcon.restartForeground": "#1976D2", + "debugIcon.startForeground": "#1976D2", + "debugIcon.stepBackForeground": "#6f42c1", + "debugIcon.stepIntoForeground": "#6f42c1", + "debugIcon.stepOutForeground": "#6f42c1", + "debugIcon.stepOverForeground": "#6f42c1", + "debugIcon.stopForeground": "#1976D2", + "diffEditor.insertedTextBackground": "#b7e7a44b", + "diffEditor.removedTextBackground": "#e597af52", + "editor.background": "#ffffff", + "editor.foreground": "#4f533f", + "editor.lineHighlightBorder": "#f2f2f2", + "editorBracketMatch.background": "#E7F3FF", + "editorBracketMatch.border": "#c8e1ff", + "editorGroupHeader.tabsBackground": "#f6f6f6", + "editorGroupHeader.tabsBorder": "#fff", + "editorIndentGuide.background": "#EEE", + "editorLineNumber.activeForeground": "#757575", + "editorLineNumber.foreground": "#CCC", + "editorSuggestWidget.background": "#F3F3F3", + "extensionButton.prominentBackground": "#000000AA", + "extensionButton.prominentHoverBackground": "#000000BB", + "focusBorder": "#D0D0D0", + "foreground": "#757575", + "gitDecoration.ignoredResourceForeground": "#AAAAAA", + "input.border": "#E9E9E9", + "inputOption.activeBackground": "#EDEDED", + "list.activeSelectionBackground": "#EEE", + "list.activeSelectionForeground": "#212121", + "list.focusBackground": "#ddd", + "list.focusForeground": "#212121", + "list.highlightForeground": "#212121", + "list.inactiveSelectionBackground": "#E0E0E0", + "list.inactiveSelectionForeground": "#212121", + "panel.background": "#fff", + "panel.border": "#f4f4f4", + "panelTitle.activeBorder": "#fff", + "panelTitle.inactiveForeground": "#BDBDBD", + "peekView.border": "#E0E0E0", + "peekViewEditor.background": "#f8f8f8", + "pickerGroup.foreground": "#000", + "progressBar.background": "#000", + "scrollbar.shadow": "#FFF", + "sideBar.background": "#f6f6f6", + "sideBar.border": "#f6f6f6", + "sideBarSectionHeader.background": "#EEE", + "sideBarTitle.foreground": "#999", + "statusBar.background": "#f6f6f6", + "statusBar.border": "#f6f6f6", + "statusBar.debuggingBackground": "#f6f6f6", + "statusBar.foreground": "#7E7E7E", + "statusBar.noFolderBackground": "#f6f6f6", + "statusBarItem.prominentBackground": "#0000001a", + "statusBarItem.remoteBackground": "#f6f6f600", + "statusBarItem.remoteForeground": "#7E7E7E", + "symbolIcon.classForeground": "#dd8500", + "symbolIcon.constructorForeground": "#6f42c1", + "symbolIcon.enumeratorForeground": "#dd8500", + "symbolIcon.enumeratorMemberForeground": "#1976D2", + "symbolIcon.eventForeground": "#dd8500", + "symbolIcon.fieldForeground": "#1976D2", + "symbolIcon.functionForeground": "#6f42c1", + "symbolIcon.interfaceForeground": "#1976D2", + "symbolIcon.methodForeground": "#6f42c1", + "symbolIcon.variableForeground": "#1976D2", + "tab.activeBorder": "#FFF", + "tab.activeForeground": "#424242", + "tab.border": "#f6f6f6", + "tab.inactiveBackground": "#f6f6f6", + "tab.inactiveForeground": "#BDBDBD", + "tab.unfocusedActiveBorder": "#fff", + "terminal.ansiBlack": "#333", + "terminal.ansiBlue": "#e0e0e0", + "terminal.ansiBrightBlack": "#a1a1a1", + "terminal.ansiBrightBlue": "#6871ff", + "terminal.ansiBrightCyan": "#57d9ad", + "terminal.ansiBrightGreen": "#a3d900", + "terminal.ansiBrightMagenta": "#a37acc", + "terminal.ansiBrightRed": "#d6656a", + "terminal.ansiBrightWhite": "#7E7E7E", + "terminal.ansiBrightYellow": "#e7c547", + "terminal.ansiCyan": "#4dbf99", + "terminal.ansiGreen": "#77cc00", + "terminal.ansiMagenta": "#9966cc", + "terminal.ansiRed": "#D32F2F", + "terminal.ansiWhite": "#c7c7c7", + "terminal.ansiYellow": "#f29718", + "terminal.background": "#fff", + "textLink.activeForeground": "#000", + "textLink.foreground": "#000", + "titleBar.activeBackground": "#f6f6f6", + "titleBar.border": "#FFFFFF00", + "titleBar.inactiveBackground": "#f6f6f6" + }, + "tokenColors": [ + { + "settings": { + "foreground": "#24292eff" + } + }, + { + "scope": [ + "keyword.operator.accessor", + "meta.group.braces.round.function.arguments", + "meta.template.expression", + "markup.fenced_code meta.embedded.block" + ], + "settings": { + "foreground": "#363A2C" + } + }, + { + "scope": "emphasis", + "settings": { + "fontStyle": "italic" + } + }, + { + "scope": ["strong", "markup.heading.markdown", "markup.bold.markdown"], + "settings": { + "fontStyle": "bold" + } + }, + { + "scope": ["markup.italic.markdown"], + "settings": { + "fontStyle": "italic" + } + }, + { + "scope": "meta.link.inline.markdown", + "settings": { + "fontStyle": "underline", + "foreground": "#1976D2" + } + }, + { + "scope": ["string", "markup.fenced_code", "markup.inline"], + "settings": { + "foreground": "#2b5581" + } + }, + { + "scope": ["comment", "string.quoted.docstring.multi"], + "settings": { + "foreground": "#c2c3c5" + } + }, + { + "scope": [ + "constant.numeric", + "constant.language", + "constant.other.placeholder", + "constant.character.format.placeholder", + "variable.language.this", + "variable.other.object", + "variable.other.class", + "variable.other.constant", + "meta.property-name", + "meta.property-value", + "support" + ], + "settings": { + "foreground": "#1976D2" + } + }, + { + "scope": [ + "keyword", + "storage.modifier", + "storage.type", + "storage.control.clojure", + "entity.name.function.clojure", + "entity.name.tag.yaml", + "support.function.node", + "support.type.property-name.json", + "punctuation.definition.template-expression" + ], + "settings": { + "foreground": "#E10198" + } + }, + { + "scope": "variable.parameter.function", + "settings": { + "foreground": "#FF9800" + } + }, + { + "scope": [ + "support.function", + "entity.name.type", + "entity.other.inherited-class", + "meta.function-call", + "meta.instance.constructor", + "entity.other.attribute-name", + "entity.name.function", + "constant.keyword.clojure", + "variable.parameter.graphql" + ], + "settings": { + "foreground": "#0E0F0B" + } + }, + { + "scope": [ + "entity.name.tag", + "string.quoted", + "string.regexp", + "string.interpolated", + "string.template", + "string.unquoted.plain.out.yaml", + "keyword.other.template" + ], + "settings": { + "foreground": "#609a06" + } + }, + { + "scope": "token.info-token", + "settings": { + "foreground": "#316bcd" + } + }, + { + "scope": "token.warn-token", + "settings": { + "foreground": "#cd9731" + } + }, + { + "scope": "token.error-token", + "settings": { + "foreground": "#cd3131" + } + }, + { + "scope": "token.debug-token", + "settings": { + "foreground": "#800080" + } + }, + { + "scope": ["strong", "markup.heading.markdown", "markup.bold.markdown"], + "settings": { + "foreground": "#6f42c1" + } + }, + { + "scope": [ + "punctuation.definition.arguments", + "punctuation.definition.dict", + "meta.function-call.arguments" + ], + "settings": { + "foreground": "#212121" + } + }, + { + "scope": [ + "markup.underline.link", + "punctuation.definition.metadata.markdown" + ], + "settings": { + "foreground": "#609008" + } + }, + { + "scope": ["beginning.punctuation.definition.list.markdown"], + "settings": { + "foreground": "#6f42c1" + } + }, + { + "scope": [ + "punctuation.definition.string.begin.markdown", + "punctuation.definition.string.end.markdown", + "string.other.link.title.markdown", + "string.other.link.description.markdown" + ], + "settings": { + "foreground": "#d32f2f" + } + }, + { + "scope": ["variable.graphql"], + "settings": { + "foreground": "#E10198" + } + }, + { + "scope": ["punctuation", "meta.selectionset.graphql"], + "settings": { + "foreground": "#6E7557" + } + }, + { + "scope": [ + "keyword.type.graphql", + "keyword.operation.graphql", + "keyword.fragment.graphql" + ], + "settings": { + "foreground": "#990069" + } + } + ] +} diff --git a/src/app/(development)/workroom/page.tsx b/src/app/(development)/workroom/page.tsx index 3df0ab62c2..736cd3e4da 100644 --- a/src/app/(development)/workroom/page.tsx +++ b/src/app/(development)/workroom/page.tsx @@ -40,7 +40,7 @@ export default function WorkroomPage() { } return ( -
+

SpeakerOpengraphImage

diff --git a/src/app/conf/2024/page.tsx b/src/app/conf/2024/page.tsx index e8dcc80f94..bd503604ae 100644 --- a/src/app/conf/2024/page.tsx +++ b/src/app/conf/2024/page.tsx @@ -127,7 +127,7 @@ export default function Page() { alt={speaker.name} />
-
+
{speaker.name.split(" ")[0]} diff --git a/src/app/conf/2025/code-of-conduct/page.tsx b/src/app/conf/2025/code-of-conduct/page.tsx index 619061fc1f..b54efb1afc 100644 --- a/src/app/conf/2025/code-of-conduct/page.tsx +++ b/src/app/conf/2025/code-of-conduct/page.tsx @@ -65,7 +65,7 @@ export default function ResourcesPage() {
-
+
-
+

Become a Sponsor

diff --git a/src/app/conf/2025/components/call-for-proposals.tsx b/src/app/conf/2025/components/call-for-proposals.tsx index b7084564ff..2b4b2b297a 100644 --- a/src/app/conf/2025/components/call-for-proposals.tsx +++ b/src/app/conf/2025/components/call-for-proposals.tsx @@ -329,7 +329,7 @@ export function CallForProposals() {
diff --git a/src/app/conf/2025/components/cta-card-section/index.tsx b/src/app/conf/2025/components/cta-card-section/index.tsx index e690003db7..cf7d94fc1e 100644 --- a/src/app/conf/2025/components/cta-card-section/index.tsx +++ b/src/app/conf/2025/components/cta-card-section/index.tsx @@ -17,7 +17,7 @@ export function CtaCardSection({ ...rest }: CtaCardSectionProps) { return ( -
+
-
+

Get your ticket diff --git a/src/app/conf/2025/components/graphql-foundation-card.tsx b/src/app/conf/2025/components/graphql-foundation-card.tsx index ab3155f3fb..c70d76ca23 100644 --- a/src/app/conf/2025/components/graphql-foundation-card.tsx +++ b/src/app/conf/2025/components/graphql-foundation-card.tsx @@ -4,7 +4,7 @@ import FoundationWordmark from "../assets/graphql-foundation-wordmark.svg?svgr" export function GraphQLFoundationCard({ className }: { className?: string }) { return ( -
+
diff --git a/src/app/conf/2025/components/hero/index.tsx b/src/app/conf/2025/components/hero/index.tsx index 1c2ac61332..eeaa4bc8ad 100644 --- a/src/app/conf/2025/components/hero/index.tsx +++ b/src/app/conf/2025/components/hero/index.tsx @@ -38,7 +38,7 @@ export function Hero(props: HeroProps) { >
{props.stripes || } -
+
{props.pageName ? (
diff --git a/src/app/conf/2025/components/image-loaded.tsx b/src/app/conf/2025/components/image-loaded.tsx index 6e26ef4c7a..9917cf1d2e 100644 --- a/src/app/conf/2025/components/image-loaded.tsx +++ b/src/app/conf/2025/components/image-loaded.tsx @@ -7,9 +7,14 @@ const _cache = new Map() export interface ImageLoadedProps extends React.HTMLAttributes { image: string | StaticImageData + fetchPriority?: "high" | "low" | "auto" } -export function ImageLoaded({ image, ...rest }: ImageLoadedProps) { +export function ImageLoaded({ + image, + fetchPriority = "auto", + ...rest +}: ImageLoadedProps) { const [loaded, setLoaded] = useState(false) const src = typeof image === "string" ? image : image.src @@ -27,10 +32,11 @@ export function ImageLoaded({ image, ...rest }: ImageLoadedProps) { } else { img = new Image() img.src = src + img.fetchPriority = fetchPriority img.addEventListener("load", () => setLoaded(true)) _cache.set(src, img) } - }, [src]) + }, [src, fetchPriority]) return
} diff --git a/src/app/conf/2025/components/register-section/index.tsx b/src/app/conf/2025/components/register-section/index.tsx index 8b4b18ff96..148e4c3fe5 100644 --- a/src/app/conf/2025/components/register-section/index.tsx +++ b/src/app/conf/2025/components/register-section/index.tsx @@ -9,7 +9,7 @@ export function RegisterSection({ className, ...props }: RegisterSectionProps) { return (
diff --git a/src/app/conf/2025/components/sponsors.tsx b/src/app/conf/2025/components/sponsors.tsx index 3502d81a08..fc4074a800 100644 --- a/src/app/conf/2025/components/sponsors.tsx +++ b/src/app/conf/2025/components/sponsors.tsx @@ -108,7 +108,7 @@ const sponsorTiers: Tier[] = [ export function Sponsors({ heading }: SponsorsProps) { return ( -
+

{heading}

diff --git a/src/app/conf/2025/components/testimonials/index.tsx b/src/app/conf/2025/components/testimonials/index.tsx index 4ae007a082..ae03d84ecd 100644 --- a/src/app/conf/2025/components/testimonials/index.tsx +++ b/src/app/conf/2025/components/testimonials/index.tsx @@ -6,7 +6,7 @@ import maskBlur from "./mask.webp" export interface TestimonialsProps extends React.HTMLAttributes {} -interface Testimonial { +export interface Testimonial { quote: string author: { name: string @@ -33,7 +33,7 @@ const testimonials: Testimonial[] = [ name: "Nicolai Draslov", role: "Danish Agency for Digital Government", avatar: - "https://media.licdn.com/dms/image/v2/C4E03AQGlrdt3GpJI9w/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1528203207471?e=1753920000&v=beta&t=H6CMhDZFoXJxGUu4XYwC_rEX9Jjwh7OdPIDm8JaeXAU", + "https://vnckqn1t2xchefuj.public.blob.vercel-storage.com/nicolai.webp", }, }, { @@ -52,7 +52,7 @@ export function Testimonials({ className, ...rest }: TestimonialsProps) { return (
How was the previous edition?

-
- {testimonials.map((testimonial, i) => ( -
-
-

- {testimonial.quote} -

- -
- -
- ))} -
+
) } -function TestimonialAuthor({ author }: { author: Testimonial["author"] }) { +export function TestimonialsList({ + testimonials, + className, +}: { + testimonials: Testimonial[] + className?: string +}) { + return ( +
+ {testimonials.map((testimonial, i) => ( +
+
+

+ {testimonial.quote} +

+ +
+ +
+ ))} +
+ ) +} + +export function TestimonialAuthor({ + author, +}: { + author: Testimonial["author"] +}) { return (
@@ -92,9 +113,10 @@ function TestimonialAuthor({ author }: { author: Testimonial["author"] }) { alt={author.name} width={128} height={128} - className="size-16 saturate-0 xl:size-32" + className="size-16 saturate-[.1] xl:size-32" + fetchPriority="low" /> -
+
diff --git a/src/app/conf/2025/components/top-minds/index.tsx b/src/app/conf/2025/components/top-minds/index.tsx index b276d384cb..e2d7c7cac5 100644 --- a/src/app/conf/2025/components/top-minds/index.tsx +++ b/src/app/conf/2025/components/top-minds/index.tsx @@ -71,7 +71,7 @@ export default function TopMindsSection({ return (
diff --git a/src/app/conf/2025/components/what-to-expect.tsx b/src/app/conf/2025/components/what-to-expect.tsx index 0bfd71a116..9d4585ba16 100644 --- a/src/app/conf/2025/components/what-to-expect.tsx +++ b/src/app/conf/2025/components/what-to-expect.tsx @@ -11,7 +11,7 @@ export default function WhatToExpectSection({ }: WhatToExpectSectionProps) { return (

What to expect

diff --git a/src/app/conf/2025/faq.tsx b/src/app/conf/2025/faq.tsx index 9696270e18..a95deaddd2 100644 --- a/src/app/conf/2025/faq.tsx +++ b/src/app/conf/2025/faq.tsx @@ -203,7 +203,7 @@ export function FAQ({ className }: { className?: string }) {
diff --git a/src/app/conf/2025/page.tsx b/src/app/conf/2025/page.tsx index 106881110a..18a5b7e836 100644 --- a/src/app/conf/2025/page.tsx +++ b/src/app/conf/2025/page.tsx @@ -33,7 +33,7 @@ export default function Page() { Get your tickets -
+
-
+
-
+
-
+
diff --git a/src/app/conf/2025/schedule/[id]/page.tsx b/src/app/conf/2025/schedule/[id]/page.tsx index c64649d3c6..055ca10fa0 100644 --- a/src/app/conf/2025/schedule/[id]/page.tsx +++ b/src/app/conf/2025/schedule/[id]/page.tsx @@ -79,8 +79,8 @@ export default function SessionPage({ params }: SessionProps) {
-
-
+
+
-
+
-
+
-
+
-
-
+
+
-
+
*/} {/*
*/} -
+
{speakers.map(speaker => ( @@ -38,7 +38,7 @@ export default function Page() {
-
+
{ + count?: 4 | 6 +} + export function SocialIcons({ className, + count = 6, ...rest -}: React.HTMLAttributes) { +}: SocialIconsProps) { return (
- + - + - + - - - - - - + {count === 6 && ( + <> + + + + + + + + )}
) } diff --git a/src/app/conf/_design-system/pixelarticons/bullseye.svg b/src/app/conf/_design-system/pixelarticons/bullseye.svg new file mode 100644 index 0000000000..f165de50af --- /dev/null +++ b/src/app/conf/_design-system/pixelarticons/bullseye.svg @@ -0,0 +1,11 @@ + + + diff --git a/src/app/conf/_design-system/pixelarticons/check.svg b/src/app/conf/_design-system/pixelarticons/check.svg new file mode 100644 index 0000000000..d59c8683a9 --- /dev/null +++ b/src/app/conf/_design-system/pixelarticons/check.svg @@ -0,0 +1,11 @@ + + + diff --git a/src/app/conf/_design-system/pixelarticons/gift.svg b/src/app/conf/_design-system/pixelarticons/gift.svg new file mode 100644 index 0000000000..1154911dd3 --- /dev/null +++ b/src/app/conf/_design-system/pixelarticons/gift.svg @@ -0,0 +1,13 @@ + + + diff --git a/src/app/conf/_design-system/pixelarticons/info.svg b/src/app/conf/_design-system/pixelarticons/info.svg new file mode 100644 index 0000000000..6eb5979a70 --- /dev/null +++ b/src/app/conf/_design-system/pixelarticons/info.svg @@ -0,0 +1,7 @@ + + + diff --git a/src/app/conf/_design-system/pixelarticons/modem.svg b/src/app/conf/_design-system/pixelarticons/modem.svg new file mode 100644 index 0000000000..7264407b31 --- /dev/null +++ b/src/app/conf/_design-system/pixelarticons/modem.svg @@ -0,0 +1,12 @@ + + + + diff --git a/src/app/conf/_design-system/pixelarticons/search.svg b/src/app/conf/_design-system/pixelarticons/search.svg new file mode 100644 index 0000000000..0eb37b1b91 --- /dev/null +++ b/src/app/conf/_design-system/pixelarticons/search.svg @@ -0,0 +1,11 @@ + + + diff --git a/src/app/conf/_design-system/pixelarticons/tournament.svg b/src/app/conf/_design-system/pixelarticons/tournament.svg new file mode 100644 index 0000000000..7d81515d35 --- /dev/null +++ b/src/app/conf/_design-system/pixelarticons/tournament.svg @@ -0,0 +1,11 @@ + + + diff --git a/src/app/conf/_design-system/pixelarticons/zap.svg b/src/app/conf/_design-system/pixelarticons/zap.svg new file mode 100644 index 0000000000..659729363b --- /dev/null +++ b/src/app/conf/_design-system/pixelarticons/zap.svg @@ -0,0 +1,11 @@ + + + diff --git a/src/app/conf/_design-system/section-label.tsx b/src/app/conf/_design-system/section-label.tsx new file mode 100644 index 0000000000..7ed64e7e8d --- /dev/null +++ b/src/app/conf/_design-system/section-label.tsx @@ -0,0 +1,25 @@ +import { clsx } from "clsx" +import { ChevronRight } from "./pixelarticons/chevron-right" + +export function SectionLabel({ + children, + className, + ...rest +}: { + children: React.ReactNode + className?: string + rest?: React.HTMLAttributes +}) { + return ( + + + {children} + + ) +} diff --git a/src/app/conf/_design-system/utils/isSpanElement.tsx b/src/app/conf/_design-system/utils/isSpanElement.tsx new file mode 100644 index 0000000000..45a0ebc96d --- /dev/null +++ b/src/app/conf/_design-system/utils/isSpanElement.tsx @@ -0,0 +1,11 @@ +import { ReactElement } from "react" + +export function isSpanElement( + child: React.ReactNode, +): child is ReactElement<{ children: React.ReactNode }> { + return ( + typeof child === "object" && + !!child && + (child as ReactElement).type === "span" + ) +} diff --git a/src/app/conf/_design-system/utils/throttle.tsx b/src/app/conf/_design-system/utils/throttle.tsx new file mode 100644 index 0000000000..c8646123e0 --- /dev/null +++ b/src/app/conf/_design-system/utils/throttle.tsx @@ -0,0 +1,10 @@ +export function throttle(fn: () => void, delay: number) { + let timeout: NodeJS.Timeout | null = null + return () => { + if (timeout) return + timeout = setTimeout(() => { + fn() + timeout = null + }, delay) + } +} diff --git a/src/app/conf/_design-system/utils/useOnClickOutside.tsx b/src/app/conf/_design-system/utils/useOnClickOutside.tsx new file mode 100644 index 0000000000..d48fb39dd4 --- /dev/null +++ b/src/app/conf/_design-system/utils/useOnClickOutside.tsx @@ -0,0 +1,20 @@ +import { useEffect } from "react" + +export function useOnClickOutside( + refs: React.RefObject[], + handler: (event: MouseEvent) => void, +) { + useEffect(() => { + const listener = (event: MouseEvent) => { + const path = event.composedPath() + if (refs.every(ref => !ref.current || !path.includes(ref.current))) { + handler(event) + return + } + } + + document.addEventListener("click", listener) + return () => document.removeEventListener("click", listener) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) +} diff --git a/src/app/env.d.ts b/src/app/env.d.ts index 9692f82cd7..57835bb125 100644 --- a/src/app/env.d.ts +++ b/src/app/env.d.ts @@ -12,7 +12,7 @@ declare module "*.svg?svgr" { export default content } -declare module "*.mdx?raw" { +declare module "*?raw" { const content: string export default content } diff --git a/src/components/code-blocks/index.tsx b/src/components/code-blocks/index.tsx index b130879a76..dd58a6679c 100644 --- a/src/components/code-blocks/index.tsx +++ b/src/components/code-blocks/index.tsx @@ -1,4 +1,8 @@ -import { Code, Pre } from "nextra/components" +import { Code } from "nextra/components" +import { ComponentPropsWithoutRef } from "react" +import { clsx } from "clsx" + +import { Pre } from "@/components/pre" import _CodeA from "./describe-your-data.mdx" import _CodeB from "./ask-for-what-you-want.mdx" @@ -8,13 +12,13 @@ import _Code1 from "./code1.mdx" import _Code2 from "./code2.mdx" import _Code3 from "./code3.mdx" import _Code4 from "./code4.mdx" -import _V1 from "./v1.mdx" -import _V2 from "./v2.mdx" -import _V3 from "./v3.mdx" -import _V4 from "./v4.mdx" -import _V5 from "./v5.mdx" -import _Query from "./query.mdx" -import _Schema from "./schema.mdx" +export { default as V1 } from "./v1.mdx" +export { default as V2 } from "./v2.mdx" +export { default as V3 } from "./v3.mdx" +export { default as V4 } from "./v4.mdx" +export { default as V5 } from "./v5.mdx" +export { default as Query } from "./query.mdx" +export { default as Schema } from "./schema.mdx" import _QueryHeroFriends from "./query.hero-friends.mdx" import _ResponseHeroFriends from "./response.hero-friends.mdx" import _PredictableResult from "./predictable-result.mdx" @@ -24,6 +28,17 @@ const components = { code: Code, } +export const LandingPagePre = (props: ComponentPropsWithoutRef) => ( +
+)
+
 // Since we use `layout: 'raw'` in index page, only `` element will be replaced, but not
 // `
` and ``, for this reason we pass `components` to each MDX partial file.
 // This code could be removed in Nextra v4
@@ -33,22 +48,13 @@ export const Code2 = () => <_Code2 components={components} />
 export const Code3 = () => <_Code3 components={components} />
 export const Code4 = () => <_Code4 components={components} />
 
-export const Query = () => <_Query components={components} />
-export const Schema = () => <_Schema components={components} />
 export const CodeA = () => <_CodeA components={components} />
 export const CodeB = () => <_CodeB components={components} />
 export const CodeC = () => <_CodeC components={components} />
-export const V1 = () => <_V1 components={components} />
-export const V2 = () => <_V2 components={components} />
-export const V3 = () => <_V3 components={components} />
-export const V4 = () => <_V4 components={components} />
-export const V5 = () => <_V5 components={components} />
+
 export const QueryHeroFriends = () => (
   <_QueryHeroFriends components={components} />
 )
 export const ResponseHeroFriends = () => (
   <_ResponseHeroFriends components={components} />
 )
-export const PredictableResult = () => (
-  <_PredictableResult components={components} />
-)
diff --git a/src/components/footer/conference-footer-box.tsx b/src/components/footer/conference-footer-box.tsx
new file mode 100644
index 0000000000..69016a8c25
--- /dev/null
+++ b/src/components/footer/conference-footer-box.tsx
@@ -0,0 +1,42 @@
+import { clsx } from "clsx"
+
+import { Anchor } from "@/app/conf/_design-system/anchor"
+import ArrowDownIcon from "@/app/conf/_design-system/pixelarticons/arrow-down.svg?svgr"
+
+interface ConferenceFooterBoxProps {
+  href: string
+  className?: string
+}
+
+export function ConferenceFooterBox({
+  href,
+  className,
+}: ConferenceFooterBoxProps) {
+  return (
+    
+      
+

+ Join GraphQLConf 2025 +

+
+ +
+
+ September 08–10 +
+ Amsterdam, Netherlands +
+ +
+ +
+
+
+ ) +} diff --git a/src/components/footer/index.tsx b/src/components/footer/index.tsx new file mode 100644 index 0000000000..90116e2290 --- /dev/null +++ b/src/components/footer/index.tsx @@ -0,0 +1,240 @@ +import NextLink from "next/link" +import { useConfig, useThemeConfig } from "nextra-theme-docs" + +import { GraphQLWordmarkLogo } from "@/icons" +import { SocialIcons } from "@/app/conf/_components/social-icons" +import { StripesDecoration } from "@/app/conf/_design-system/stripes-decoration" +import blurBean from "@/app/conf/2025/components/footer/blur-bean.webp" + +import { renderComponent } from "../utils" +import { Anchor } from "@/app/conf/_design-system/anchor" +import type { ReactNode } from "react" +import { ConferenceFooterBox } from "./conference-footer-box" + +interface FooterLink { + title: ReactNode + route: string +} + +interface FooterSection { + title?: ReactNode + route?: string + links: FooterLink[] +} + +const FOOTER_SECTIONS: FooterSection[] = [ + { + title: "Learn", + route: "/learn", + links: [ + { title: "Introduction", route: "/learn" }, + { title: "Best Practices", route: "/learn/best-practices" }, + { + title: ( + + Frequently Asked Questions + FAQ + + ), + route: "/faq", + }, + { + title: "Training Courses", + route: "/community/resources/training-courses", + }, + ], + }, + { + title: "Code", + links: [ + { title: "GitHub", route: "https://github.com/graphql" }, + { + title: "Specification", + route: "https://spec.graphql.org", + }, + { title: "Libraries & Tools", route: "/code" }, + { + title: "Services & Vendors", + route: "/code/?tags=services", + }, + ], + }, + { + title: "Community", + links: [ + { + title: "Resources", + route: "/community/resources/official-channels", + }, + { + title: "Events & Meetups", + route: "/community/events", + }, + { + title: ( + + Contribute to GraphQL + + ), + route: "/community/contribute/essential-links", + }, + { title: "Landscape", route: "https://landscape.graphql.org" }, + { title: "Shop", route: "https://store.graphql.org/" }, + ], + }, + { + title: "& More", + links: [ + { title: "Blog", route: "/blog" }, + { + title: "GraphQL Foundation", + route: "/foundation", + }, + { + title: "Community Grant", + route: "/foundation/community-grant", + }, + { + title: "Brand Guidelines", + route: "/brand", + }, + { + title: "Code of Conduct", + route: "/codeofconduct", + }, + ], + }, +] + +const CONFERENCE_YEAR = 2025 +const HAS_CONFERENCE_BOX = true + +export function Footer() { + const themeConfig = useThemeConfig() + + return ( +
+ + +
+
+ + + +
+ {renderComponent(themeConfig.themeSwitch.component)} +
+
+ +
+ {FOOTER_SECTIONS.map((section, i) => ( +
+ {section.title && ( +

+ {section.route ? ( + + {section.title} + + ) : ( + + {section.title} + + )} +

+ )} + {section.links.map((link, i) => ( + + {link.title} + + ))} +
+ ))} +
+ {HAS_CONFERENCE_BOX && ( + + )} + +
+
+ +
+ {themeConfig.darkMode && ( + // todo: new theme switch component +
+ {renderComponent(themeConfig.themeSwitch.component)} +
+ )} +

+ {renderComponent(themeConfig.footer.content)} +

+
+
+
+ ) +} + +function Stripes() { + return ( +
+ +
+ ) +} diff --git a/src/components/index-page/bring-your-own-code.tsx b/src/components/index-page/bring-your-own-code.tsx deleted file mode 100644 index f69098fbb1..0000000000 --- a/src/components/index-page/bring-your-own-code.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Code1, Code2, Code3, Code4 } from "@/components/code-blocks" -import { InfiniteMovingCards } from "./infinite-moving-cards" - -export function BringYourOwnCode() { - return ( - <> -
-
-

Bring your own data and code

- {/*Illustration of each field becoming a function?]*/} -

- GraphQL creates a uniform API across your entire application without - being limited by a specific storage engine. Write GraphQL APIs that - leverage your existing data and code with GraphQL engines available - in many languages. You provide functions for each field in the type - system, and GraphQL calls them with optimal concurrency. -

-
-
- - - - - - - - ) -} diff --git a/src/components/index-page/data-colocation/component-tree.tsx b/src/components/index-page/data-colocation/component-tree.tsx new file mode 100644 index 0000000000..7b1aaeffcd --- /dev/null +++ b/src/components/index-page/data-colocation/component-tree.tsx @@ -0,0 +1,184 @@ +import ModemIcon from "@/app/conf/_design-system/pixelarticons/modem.svg?svgr" +import clsx from "clsx" +import { forwardRef } from "react" + +const INNER_BOX_SIZE = 16 + +interface ComponentTreeProps extends React.HTMLAttributes { + names: [string, string, string, string] +} + +export const ComponentTree = forwardRef(function ComponentTree( + { names, className, ...rest }: ComponentTreeProps, + ref: React.Ref, +) { + return ( +
+
+
+ + {names[0]} + +
+ +
+ +
+ + {names[1]} + +
+ +
+ +
+ + {names[2]} + +
+ +
+ +
+ + {names[3]} + +
+
+ +
+
+ +
+ +
+ + + + + +
+
+ + +
+ + +
+
+
+ + +
+ + +
+
+
+
+
+ ) +}) + +interface NestedBoxProps extends React.HTMLAttributes { + bgColor: string + middleColor?: string + innerColor: string +} + +function NestedBox({ + bgColor, + middleColor, + innerColor, + ...rest +}: NestedBoxProps) { + const padding = INNER_BOX_SIZE / 2 + + return ( +
+
+
+
+
+ ) +} + +interface ComponentLabelProps extends React.HTMLAttributes { + children: React.ReactNode + className: string +} + +function ComponentLabel({ children, className, ...rest }: ComponentLabelProps) { + return ( +
+ {children} +
+ ) +} + +function LeafBox(props: React.HTMLAttributes) { + return ( + + ) +} + +function Fork(props: React.SVGProps) { + return ( + + + + + ) +} diff --git a/src/components/index-page/data-colocation/data-colocation.css b/src/components/index-page/data-colocation/data-colocation.css new file mode 100644 index 0000000000..4f806441d3 --- /dev/null +++ b/src/components/index-page/data-colocation/data-colocation.css @@ -0,0 +1,32 @@ +.sector-opacity { + & [data-sector] { + transition: opacity 0.2s ease-in; + transition-delay: 0.1s; + } + + [data-active-sector] & [data-sector] { + opacity: 0.4; + transition-delay: 0s; + transition-timing-function: ease-out; + } + + [data-active-sector="1"] & [data-sector="1"], + [data-active-sector="2"] & [data-sector="2"], + [data-active-sector="3"] & [data-sector="3"], + [data-active-sector="4"] & [data-sector="4"] { + opacity: 1; + } +} + +.sector-ring { + & [data-sector] { + @apply ring-2 ring-transparent ring-offset-2 ring-offset-transparent transition-shadow duration-200 ease-in; + } + + [data-active-sector="1"] & [data-sector="1"], + [data-active-sector="2"] & [data-sector="2"], + [data-active-sector="3"] & [data-sector="3"], + [data-active-sector="4"] & [data-sector="4"] { + @apply ring-2 ring-neu-500 ring-offset-neu-0 duration-200 ease-out dark:ring-neu-400; + } +} diff --git a/src/components/index-page/data-colocation/data-colocation.json b/src/components/index-page/data-colocation/data-colocation.json new file mode 100644 index 0000000000..10e69f2c2a --- /dev/null +++ b/src/components/index-page/data-colocation/data-colocation.json @@ -0,0 +1,31 @@ +{ + "friends": [ + { + "name": "Trudie", + "profilePic": "trudie.webp", + "mutualFriendsCount": 120, + "isSubscribed": true, + "username": "funkytrudster89", + "email": "trudie@mail.com", + "location": "New York, USA" + }, + { + "name": "Frances", + "profilePic": "frances.webp", + "mutualFriendsCount": 42, + "isSubscribed": false, + "username": "frannyfran12", + "email": "frances@mail.com", + "location": "Madrid, Spain" + }, + { + "name": "Fernando", + "profilePic": "fernando.webp", + "mutualFriendsCount": 114, + "isSubscribed": true, + "username": "fern_whirlwind", + "email": "fernando@mail.com", + "location": "Amsterdam, Netherlands" + } + ] +} diff --git a/src/components/index-page/data-colocation/data-colocation.mdx b/src/components/index-page/data-colocation/data-colocation.mdx new file mode 100644 index 0000000000..c59e61735b --- /dev/null +++ b/src/components/index-page/data-colocation/data-colocation.mdx @@ -0,0 +1,25 @@ +```graphql +query GetFriendList { + ...FriendList +} + +fragment FriendList on Query { + friends { + ...FriendListItem + } +} + +fragment FriendListItem on Friend { + name + profilePic + mutualFriendsCount + isSubscribed + ...FriendInfo +} + +fragment FriendInfo on Friend { + username + email + location +} +``` diff --git a/src/components/index-page/data-colocation/friend-avatars/fernando.webp b/src/components/index-page/data-colocation/friend-avatars/fernando.webp new file mode 100644 index 0000000000..f8491caf15 Binary files /dev/null and b/src/components/index-page/data-colocation/friend-avatars/fernando.webp differ diff --git a/src/components/index-page/data-colocation/friend-avatars/frances.webp b/src/components/index-page/data-colocation/friend-avatars/frances.webp new file mode 100644 index 0000000000..22729367da Binary files /dev/null and b/src/components/index-page/data-colocation/friend-avatars/frances.webp differ diff --git a/src/components/index-page/data-colocation/friend-avatars/index.tsx b/src/components/index-page/data-colocation/friend-avatars/index.tsx new file mode 100644 index 0000000000..3bfa2890f0 --- /dev/null +++ b/src/components/index-page/data-colocation/friend-avatars/index.tsx @@ -0,0 +1,9 @@ +import trudie from "./trudie.webp" +import frances from "./frances.webp" +import fernando from "./fernando.webp" + +export const friendAvatars = { + trudie, + frances, + fernando, +} diff --git a/src/components/index-page/data-colocation/friend-avatars/trudie.webp b/src/components/index-page/data-colocation/friend-avatars/trudie.webp new file mode 100644 index 0000000000..fd467d89b3 Binary files /dev/null and b/src/components/index-page/data-colocation/friend-avatars/trudie.webp differ diff --git a/src/components/index-page/data-colocation/friend-list.tsx b/src/components/index-page/data-colocation/friend-list.tsx new file mode 100644 index 0000000000..514b85b014 --- /dev/null +++ b/src/components/index-page/data-colocation/friend-list.tsx @@ -0,0 +1,114 @@ +import { friendAvatars } from "./friend-avatars" + +interface FriendList { + friends: FriendListItem[] +} + +export function FriendList({ friends }: FriendList) { + return ( +
+

+ Friends +

+
    + {friends.map(friend => ( + + ))} +
+
+ ) +} + +interface FriendListItem extends FriendInfo { + name: string + profilePic: string + mutualFriendsCount: number + isSubscribed: boolean +} + +export function FriendListItem({ + isSubscribed, + mutualFriendsCount, + name, + profilePic, + ...friendInfo +}: FriendListItem) { + const avatar = + friendAvatars[profilePic.replace(".webp", "") as keyof typeof friendAvatars] + + return ( +
  • + +
    +
    +
    + {name} +
    + {mutualFriendsCount} mutual friends +
    +
    + +
    + +
    +
  • + ) +} + +interface FriendInfo { + username: string + email: string + location: string +} + +const friendInfoKeys: (keyof FriendInfo)[] = ["username", "email", "location"] + +export function FriendInfo(props: FriendInfo) { + return ( +
    + {friendInfoKeys.map(key => ( +
    +
    {key}
    +
    {props[key]}
    +
    + ))} +
    + ) +} + +function SubscribeIconButton() { + return ( +
    + + + + +
    + ) +} diff --git a/src/components/index-page/data-colocation/index.tsx b/src/components/index-page/data-colocation/index.tsx new file mode 100644 index 0000000000..1f54f51de2 --- /dev/null +++ b/src/components/index-page/data-colocation/index.tsx @@ -0,0 +1,207 @@ +import * as React from "react" +import { clsx } from "clsx" +import { Code } from "nextra/components" +import { + cloneElement, + ComponentPropsWithoutRef, + ReactElement, + useRef, +} from "react" + +import { Pre } from "@/components/pre" +import { SectionLabel } from "@/app/conf/_design-system/section-label" +import InfoIcon from "@/app/conf/_design-system/pixelarticons/info.svg?svgr" +import { useOnClickOutside } from "@/app/conf/_design-system/utils/useOnClickOutside" +import { isSpanElement } from "@/app/conf/_design-system/utils/isSpanElement" + +import { ComponentTree } from "./component-tree" +import { FriendList } from "./friend-list" + +import json from "./data-colocation.json" +import Query from "./data-colocation.mdx" +import "./data-colocation.css" + +const highlightedFragments = { + GetFriendList: 1, + FriendList: 2, + FriendListItem: 3, + FriendInfo: 4, +} + +const components = { + pre: (props: ComponentPropsWithoutRef) => ( +
    +  ),
    +  code: function Code2({
    +    children,
    +    ...rest
    +  }: ComponentPropsWithoutRef) {
    +    const childrenTransformed = React.useMemo(() => {
    +      let sectorIndex: number | undefined
    +      let depth = 0
    +
    +      return React.Children.map(children, child => {
    +        if (isSpanElement(child)) {
    +          let children = (child as ReactElement).props.children
    +
    +          if (isSpanElement(children)) {
    +            children = children.props.children
    +          } else if (Array.isArray(children)) {
    +            children = children
    +              .map(child => {
    +                if (isSpanElement(child)) {
    +                  return child.props.children
    +                }
    +                return child
    +              })
    +              .join("")
    +          }
    +
    +          if (/query|fragment/.test(children)) {
    +            for (const [name, index] of Object.entries(highlightedFragments)) {
    +              if (children.includes(` ${name} `)) sectorIndex = index
    +              depth++
    +            }
    +          }
    +
    +          if (children.includes("{")) depth++
    +          if (children.includes("}")) {
    +            depth--
    +            if (depth === 0) sectorIndex = undefined
    +          }
    +
    +          if (sectorIndex) {
    +            return cloneElement(child, {
    +              ...child.props,
    +              "data-sector": sectorIndex,
    +            } as React.HTMLAttributes)
    +          }
    +
    +          return child
    +        }
    +
    +        return child
    +      })
    +    }, [children])
    +
    +    return {childrenTransformed}
    +  },
    +}
    +
    +export function DataColocation() {
    +  const markSector = (event: React.MouseEvent) => {
    +    const target =
    +      event.target && event.target instanceof HTMLElement ? event.target : null
    +
    +    const sectorElement = target?.closest("[data-sector]") as HTMLElement | null
    +    const sector = sectorElement?.dataset.sector
    +
    +    if (sector == null) return
    +
    +    const currentTarget = event.currentTarget
    +
    +    if (currentTarget.dataset.activeSector !== sector) {
    +      currentTarget.dataset.activeSector = sector
    +    }
    +  }
    +
    +  const unmarkSector = (event: React.MouseEvent) => {
    +    if (window.matchMedia("(hover: none)").matches) return
    +
    +    const target =
    +      event.relatedTarget && event.relatedTarget instanceof HTMLElement
    +        ? event.relatedTarget
    +        : null
    +
    +    const currentTarget = event.currentTarget
    +
    +    const sectorElement = target?.closest("[data-sector]") as HTMLElement | null
    +    const targetSector = sectorElement?.dataset.sector
    +    const currentActiveSector = currentTarget.dataset.activeSector
    +
    +    if (!targetSector) {
    +      delete currentTarget.dataset.activeSector
    +      return
    +    }
    +
    +    if (!currentActiveSector) return
    +
    +    currentTarget.dataset.activeSector = targetSector
    +  }
    +
    +  const sectionRef = useRef(null)
    +  const figureRef = useRef(null)
    +  const componentTreeRef = useRef(null)
    +  useOnClickOutside([figureRef, componentTreeRef], () => {
    +    const section = sectionRef.current
    +    if (section && section.dataset.activeSector) {
    +      delete section.dataset.activeSector
    +    }
    +  })
    +
    +  return (
    +    
    +
    +
    + Data Colocation +

    Data Colocation

    +

    + GraphQL fragments let you define each component’s data needs close + to it, and satisfy them with a single query. +

    +
    + ", + "", + "", + ]} + /> +
    +
    +
    + +
    + +
    +
    +
    + +
    +
    +
    + ) +} + +function FigureInfo() { + return ( +
    + +

    + Click on + Hover over the components to + see their GraphQL fragments. +

    +
    + ) +} diff --git a/src/components/index-page/five-pillars.tsx b/src/components/index-page/five-pillars.tsx new file mode 100644 index 0000000000..cad895efa7 --- /dev/null +++ b/src/components/index-page/five-pillars.tsx @@ -0,0 +1,83 @@ +import { SectionLabel } from "@/app/conf/_design-system/section-label" + +import GiftIcon from "@/app/conf/_design-system/pixelarticons/gift.svg?svgr" +import TournamentIcon from "@/app/conf/_design-system/pixelarticons/tournament.svg?svgr" +import ZapIcon from "@/app/conf/_design-system/pixelarticons/zap.svg?svgr" +import BullseyeIcon from "@/app/conf/_design-system/pixelarticons/bullseye.svg?svgr" +import SearchIcon from "@/app/conf/_design-system/pixelarticons/search.svg?svgr" + +const items = [ + { + icon: GiftIcon, + title: "Product-centric", + description: + "GraphQL is unapologetically built for front-end engineers, aligning with their way of thinking, how views are structured and how data is consumed.", + }, + { + icon: TournamentIcon, + title: "Hierarchical", + description: + "Most product development involves the creation and manipulation of view hierarchies. GraphQL queries mirror UI structures, ensuring a natural way to request data that matches the shape of the response.", + }, + { + icon: ZapIcon, + title: "Strong-typing", + description: + "Every GraphQL service defines a type system, enabling tools to syntactically validate queries before execution and ensuring predictable responses.", + }, + { + icon: BullseyeIcon, + title: "Client-specified response", + description: + "A GraphQL service publishes the capabilities that its clients are allowed to consume. It is the client who control the data they receive, requesting only what they need at a field level, unlike traditional fixed endpoints.", + }, + { + icon: SearchIcon, + title: "Self-documenting", + description: + "GraphQL APIs can describe themselves, allowing tools and clients to query the schema for available types and capabilities. It serves as a powerful platform for building common tools and client software libraries.", + }, +] + +export function FivePillars() { + return ( +
    + design principles +

    + Five Pillars of GraphQL +

    + +
    + {items.map(({ title, icon: Icon, description }, index) => ( +
    +
    +
    +
    + +
    +

    + {title} +

    +
    +

    + {description} +

    +
    + {index < items.length - 1 && } +
    + ))} +
    +
    + ) +} + +function Separator() { + return ( +
    + ) +} diff --git a/src/components/index-page/graphql-advantages/consistency.tsx b/src/components/index-page/graphql-advantages/consistency.tsx new file mode 100644 index 0000000000..428bf507d4 --- /dev/null +++ b/src/components/index-page/graphql-advantages/consistency.tsx @@ -0,0 +1,64 @@ +import { useEffect, useRef } from "react" +import { Code } from "nextra/components" + +import { LandingPagePre, Query, Schema } from "../../code-blocks" + +const components = { + pre: LandingPagePre, + code: Code, +} + +export function ConsistencyFigure() { + const queryRef = useRef(null) + useEffect(() => { + const [queryCode, responseCode] = queryRef.current!.querySelectorAll( + "code", + ) as unknown as HTMLElement[] + let i = 0 + const typeLines = [1, 5, 6, 5, 7, 12, 13, 8, 17, 18, 19, 12] + const queryLines = [1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13] + let timer: ReturnType | undefined = undefined + + const highlightLine = () => { + // Reset previous line + queryCode.children[queryLines.at(i - 1)!].classList.remove("highlighted") + responseCode.children[typeLines.at(i - 1)!].classList.remove( + "highlighted", + ) + + queryCode.children[queryLines.at(i)!].classList.add("highlighted") + responseCode.children[typeLines.at(i)!].classList.add("highlighted") + + // We're scrolling to top when the first line is highlighted and we're + // scrolling to the bottom when the last line is highlighted. + const pre = responseCode.parentElement! + if (i === 0) { + pre.scrollTo({ top: 0, behavior: "smooth" }) + } else if (i === typeLines.length - 3) { + pre.scrollTo({ top: pre.scrollHeight, behavior: "smooth" }) + } + + i = (i + 1) % typeLines.length + + timer = setTimeout(highlightLine, 1_000 + Math.random() * 200) + } + highlightLine() + return () => clearTimeout(timer) + }, []) + + return ( +
    +
    + + +
    +
    + ) +} diff --git a/src/components/index-page/graphql-advantages/index.tsx b/src/components/index-page/graphql-advantages/index.tsx new file mode 100644 index 0000000000..5a1c8e9435 --- /dev/null +++ b/src/components/index-page/graphql-advantages/index.tsx @@ -0,0 +1,131 @@ +import { Button } from "@/app/conf/_design-system/button" +import { SectionLabel } from "@/app/conf/_design-system/section-label" +import { ReactNode } from "react" +import { clsx } from "clsx" + +import { PrecisionFigure } from "./precision" +import { OptimizationFigure } from "./optimization" +import { ProductivityFigure } from "./productivity" +import { ConsistencyFigure } from "./consistency" +import { VersionlessFigure } from "./versionless" +import { IntegrationFigure } from "./integration" + +export function GraphQLAdvantages() { + return ( +
    +
    + GraphQL advantages +
    + } + cta={ + + } + /> + } + cta={ + + } + /> + } + cta={ + + } + /> + } + cta={ + + } + /> + } + cta={ + + } + /> + } + cta={ + + } + /> +
    +
    +
    + ) +} + +function Subsection({ + name, + bigText, + cta, + figure, + text, + className, +}: { + name: string + bigText: ReactNode + cta: ReactNode + figure: ReactNode + text: ReactNode + className?: string +}) { + return ( +
    +

    + {name} +

    + + {bigText} + +
    + {figure} +
    +

    + {text} +

    +
    {cta}
    +
    + ) +} diff --git a/src/components/index-page/graphql-advantages/integration.tsx b/src/components/index-page/graphql-advantages/integration.tsx new file mode 100644 index 0000000000..473cd12668 --- /dev/null +++ b/src/components/index-page/graphql-advantages/integration.tsx @@ -0,0 +1,38 @@ +export function IntegrationFigure() { + const languages = [ + "C SHARP", + "NODE.JS", + "PYTHON", + "RUST", + "POSTGRES", + "JAVASCRIPT", + ] + + return ( +
    +
    + + GRAPHQL + +
    + +
    +
    + {[...languages, ...languages].map((language, index) => ( +
    + + {language} + +
    + ))} +
    +
    +
    + ) +} diff --git a/src/components/index-page/graphql-advantages/optimization.svg b/src/components/index-page/graphql-advantages/optimization.svg new file mode 100644 index 0000000000..ba18779d22 --- /dev/null +++ b/src/components/index-page/graphql-advantages/optimization.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/index-page/graphql-advantages/optimization.tsx b/src/components/index-page/graphql-advantages/optimization.tsx new file mode 100644 index 0000000000..35e1814655 --- /dev/null +++ b/src/components/index-page/graphql-advantages/optimization.tsx @@ -0,0 +1,12 @@ +import OptimizationSvg from "./optimization.svg?svgr" + +export function OptimizationFigure() { + return ( +
    + +
    + ) +} diff --git a/src/components/index-page/predictable-results/index.module.css b/src/components/index-page/graphql-advantages/precision.module.css similarity index 100% rename from src/components/index-page/predictable-results/index.module.css rename to src/components/index-page/graphql-advantages/precision.module.css diff --git a/src/components/index-page/graphql-advantages/precision.tsx b/src/components/index-page/graphql-advantages/precision.tsx new file mode 100644 index 0000000000..fdbe24d1bb --- /dev/null +++ b/src/components/index-page/graphql-advantages/precision.tsx @@ -0,0 +1,128 @@ +import { ComponentPropsWithoutRef, useEffect, useRef } from "react" +import { Code } from "nextra/components" +import { clsx } from "clsx" + +import { Pre } from "@/components/pre" + +import PredictableResult from "../../code-blocks/predictable-result.mdx" + +import classes from "./precision.module.css" + +const components = { + pre: (props: ComponentPropsWithoutRef) => ( +
    +  ),
    +  code: Code,
    +}
    +
    +export function PrecisionFigure() {
    +  const ref = useRef(null)
    +
    +  useEffect(() => {
    +    const showResponse = (num: Number) => {
    +      const lines = ref.current!.querySelectorAll(
    +        "code > span",
    +      ) as unknown as HTMLSpanElement[] & { children: HTMLSpanElement[] }[]
    +
    +      if (num === 1) {
    +        Array.from(lines[2].children).at(-1)!.style.display = "none"
    +        lines[3].style.display = "none"
    +        lines[4].style.display = "none"
    +      } else if (num === 2 || num === 3) {
    +        Array.from(lines[2].children).at(-1)!.style.display = "inline"
    +        lines[3].style.display = "inline"
    +        if (num === 2) {
    +          Array.from(lines[3].children).at(-1)!.style.display = "none"
    +        } else {
    +          Array.from(lines[3].children).at(-1)!.style.display = "inline"
    +          lines[4].style.display = "inline"
    +        }
    +      }
    +    }
    +    let i = 0
    +    let forward = true
    +    let timer: any
    +    timer = setTimeout(type, 2000)
    +    showResponse(1)
    +
    +    function type() {
    +      if (forward) {
    +        if (document.getElementById("ch" + i)) {
    +          document.getElementById("ch" + i)!.style.display = "inline"
    +          i++
    +          if (i === 20) {
    +            forward = false
    +            showResponse(3)
    +            timer = setTimeout(type, 1500)
    +          } else if (i === 11) {
    +            showResponse(2)
    +            timer = setTimeout(type, 1500)
    +          } else {
    +            timer = setTimeout(type, Math.random() * 180 + 70)
    +          }
    +        }
    +      } else {
    +        i--
    +        if (document.getElementById("ch" + i)) {
    +          document.getElementById("ch" + i)!.style.display = "none"
    +          if (i === 0) {
    +            forward = true
    +            showResponse(1)
    +            timer = setTimeout(type, 2000)
    +          } else {
    +            timer = setTimeout(type, 80)
    +          }
    +        }
    +      }
    +    }
    +
    +    return () => clearTimeout(timer)
    +  }, [])
    +
    +  const Pre = components.pre
    +
    +  return (
    +    
    +
    +        {"{"}
    +        {"\n  "}
    +        {"hero"}
    +        {" {"}
    +        
    +          {"\n    name"}
    +        
    +        {"\n    height\n    mass".split("").map((char, i) => (
    +          
    +            {char === "\n" ? 
    : char} +
    + ))} + + {"\n }"} + {"\n}"} +
    + +
    + ) +} diff --git a/src/components/index-page/graphql-advantages/productivity.tsx b/src/components/index-page/graphql-advantages/productivity.tsx new file mode 100644 index 0000000000..68963f278d --- /dev/null +++ b/src/components/index-page/graphql-advantages/productivity.tsx @@ -0,0 +1,38 @@ +const VIDEOS_DIR = + "https://github.com/graphql/graphql.github.io/raw/refs/heads/source/public/img" + +export function ProductivityFigure() { + return ( +
    +
    +
    + +
    +
    +
    + ) +} diff --git a/src/components/index-page/graphql-advantages/versionless.css b/src/components/index-page/graphql-advantages/versionless.css new file mode 100644 index 0000000000..90aeb26a6f --- /dev/null +++ b/src/components/index-page/graphql-advantages/versionless.css @@ -0,0 +1,121 @@ +.add, +.remove { + @apply shadow-[2px_0_currentColor_inset]; +} + +.add { + @apply !bg-green-200/35 text-green-300 dark:!bg-green-200/15; + + &::before { + @apply absolute start-1.5 content-['+']; + } +} + +.remove { + @apply !bg-red-200/35 text-red-300 dark:!bg-red-200/15; + + &::before { + @apply absolute start-1.5 content-['-']; + } +} + +.versionless-figure { + @apply relative left-0 flex h-full select-none; + + & pre, + & code, + .v1, + .v2, + .v3, + .v4, + .v5 { + @apply h-full; + } + + & pre { + @apply border-none; + background: none !important; + } + + & code { + grid-auto-rows: min-content; + } + + .v1, + .v2, + .v3, + .v4 { + @apply w-1/2 shrink-0 border-r border-neu-200 dark:border-neu-50; + } + + .v5 { + @apply w-full shrink-0; + } + + &[data-step="1"] { + .v2 { + opacity: 1; + transition: opacity 0.5s ease-in-out; + } + } + + &[data-step="2"] { + left: calc(-1 * 50%); + transition: left 0.5s ease-in-out; + } + + &[data-step="3"] { + left: calc(-2 * 50%); + transition: left 0.5s ease-in-out; + } + + &[data-step="4"] { + left: calc(-3 * 50%); + transition: left 0.5s ease-in-out; + } + + &[data-step="5"] { + left: calc(-4 * 50%); + transition: left 0.5s ease-in-out; + } + + &[data-step="6"] { + .v5 { + left: calc(-4 * 50%); + opacity: 0; + transition: opacity 0.5s ease-in-out; + } + } + + &[data-step="0"], + &[data-step="6"] { + .v2 { + @apply opacity-0; + } + } + + &[data-step="1"] .v2 code > span:nth-child(5) { + @apply add; + } + + &[data-step="2"] .v3 code > span:nth-child(6) { + @apply add; + } + + &[data-step="3"] .v4 code > { + span:nth-child(7), + span:nth-last-child(-n + 5) { + @apply add; + } + } + + &[data-step="4"] { + .v4 code > span:nth-child(6) { + @apply remove; + } + + .v5 code > span:nth-child(6) { + @apply add; + } + } +} diff --git a/src/components/index-page/graphql-advantages/versionless.tsx b/src/components/index-page/graphql-advantages/versionless.tsx new file mode 100644 index 0000000000..97e3d78352 --- /dev/null +++ b/src/components/index-page/graphql-advantages/versionless.tsx @@ -0,0 +1,66 @@ +import { useEffect, useRef } from "react" +import { Code } from "nextra/components" +import { clsx } from "clsx" + +import { LandingPagePre, V1, V2, V3, V4, V5 } from "../../code-blocks" + +import "./versionless.css" + +const components = { + pre: LandingPagePre, + code: Code, +} + +export function VersionlessFigure() { + const ref = useRef(null) + + useEffect(() => { + let i = -1 + const inView = ref.current! + + function move() { + i = (i + 1) % 7 + inView.dataset.step = i.toString() + } + + move() + const interval = setInterval(move, 2200) + return () => { + clearInterval(interval) + } + }, []) + + return ( +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + ) +} diff --git a/src/components/index-page/hero.tsx b/src/components/index-page/hero.tsx deleted file mode 100644 index 93797581ba..0000000000 --- a/src/components/index-page/hero.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import Link from "next/link" -import { CodeA, CodeB, CodeC } from "../code-blocks" -import { GraphQLLogo } from "@/icons" -import { clsx } from "clsx" - -export function Hero() { - return ( -
    -
    -
    -
    - -

    GraphQL

    -
    - -
    -

    Describe your data

    - -
    - -
    -

    Ask for what you want

    - -
    - -
    -

    Get predictable results

    - -
    -
    - - - Get Started - -
    -
    - ) -} diff --git a/src/components/index-page/hero/index.tsx b/src/components/index-page/hero/index.tsx new file mode 100644 index 0000000000..ee935df106 --- /dev/null +++ b/src/components/index-page/hero/index.tsx @@ -0,0 +1,71 @@ +import { StripesDecoration } from "@/app/conf/_design-system/stripes-decoration" +import CheckIcon from "@/app/conf/_design-system/pixelarticons/check.svg?svgr" +import { Button } from "@/app/conf/_design-system/button" +import { ImageLoaded } from "@/app/conf/2025/components/image-loaded" + +import logoBlurred from "./logo-blurred.webp" +import Head from "next/head" + +export function Hero() { + return ( +
    +
    +
    +

    + The query language for modern APIs +

    + +
      + {[ + "Deliver high-performance user experience at any scale", + "Secure and stabilize your API with a strongly typed schema and validated requests", + "Reduce dependencies through efficient, distributed development", + ].map((item, index) => ( +
    • + +

      {item}

      +
    • + ))} +
    + +
    + +
    +
    + +
    +
    + ) +} + +function HeroStripes() { + return ( +
    + + + + + +
    + ) +} diff --git a/src/components/index-page/hero/logo-blurred.webp b/src/components/index-page/hero/logo-blurred.webp new file mode 100644 index 0000000000..be81d9fbbb Binary files /dev/null and b/src/components/index-page/hero/logo-blurred.webp differ diff --git a/src/components/index-page/how-it-works.tsx b/src/components/index-page/how-it-works.tsx new file mode 100644 index 0000000000..e20aea999f --- /dev/null +++ b/src/components/index-page/how-it-works.tsx @@ -0,0 +1,43 @@ +import { Button } from "@/app/conf/_design-system/button" +import { SectionLabel } from "@/app/conf/_design-system/section-label" + +import { CodeA, CodeB, CodeC } from "../code-blocks" + +const TRY_IT_OUT_URL = "https://graphql.org/swapi-graphql" + +export function HowItWorks() { + return ( +
    + How it works +

    A GraphQL Query

    +
      + } /> + } /> + } /> +
    + + +
    + ) +} + +function ListItem({ + text, + code, +}: { + text: React.ReactNode + code: React.ReactNode +}) { + return ( +
  • +
    + {text} +
    +
    + {code} +
    +
  • + ) +} diff --git a/src/components/index-page/index.tsx b/src/components/index-page/index.tsx index 05c5da595f..9277e21c19 100644 --- a/src/components/index-page/index.tsx +++ b/src/components/index-page/index.tsx @@ -1,33 +1,39 @@ +import Head from "next/head" + import { Hero } from "./hero" -import { PredictableResults } from "./predictable-results" -import { SingleRequest } from "./single-request" -import { TypeSystem } from "./type-system" -import { PowerFulTools } from "./powerful-tools" -import { WithoutVersion } from "./without-version" -import { BringYourOwnCode } from "./bring-your-own-code" -import { WhoIsUsing } from "./who-is-using" +import { TrustedBy } from "./trusted-by" +import { HowItWorks } from "./how-it-works" +import { ProvenSolution } from "./proven-solution" +import { FivePillars } from "./five-pillars" +import { PoweredByCommunity } from "./powered-by-community" +import { GraphQLAdvantages } from "./graphql-advantages" +import { QuotesFromTheIndustry } from "./quotes-from-the-industry" +import { JoinTheCommunity } from "./join-the-community" +import { DataColocation } from "./data-colocation" +import { WhatIsGraphQL } from "./what-is-graphql" +import { UseCases } from "./use-cases" export function IndexPage() { return ( -
    +
    + + + -
    -

    A query language for your API

    -

    - GraphQL is a query language for APIs and a runtime for fulfilling - those queries with your existing data. GraphQL provides a complete and - understandable description of the data in your API, gives clients the - power to ask for exactly what they need and nothing more, makes it - easier to evolve APIs over time, and enables powerful developer tools. -

    -
    - - - - - - - + + + + + + + + + + +
    ) } diff --git a/src/components/index-page/join-the-community.tsx b/src/components/index-page/join-the-community.tsx new file mode 100644 index 0000000000..f43ca690f7 --- /dev/null +++ b/src/components/index-page/join-the-community.tsx @@ -0,0 +1,37 @@ +import { Anchor } from "@/app/conf/_design-system/anchor" + +import ArrowDownIcon from "@/app/conf/_design-system/pixelarticons/arrow-down.svg?svgr" +import { DiscordIcon } from "@/icons" + +export function JoinTheCommunity() { + return ( +
    +
    +
    +

    Join the community

    +

    + GraphQL is community-driven, backed by thousands of developers and + companies worldwide. Become part of a network shaping the future of + API development. +

    +
    +
    + + Discord + + + + Explore community resources + + +
    +
    +
    + ) +} diff --git a/src/components/index-page/powered-by-community.tsx b/src/components/index-page/powered-by-community.tsx new file mode 100644 index 0000000000..2aafcaaedc --- /dev/null +++ b/src/components/index-page/powered-by-community.tsx @@ -0,0 +1,46 @@ +import { Anchor } from "@/app/conf/_design-system/anchor" + +import ArrowDownIcon from "@/app/conf/_design-system/pixelarticons/arrow-down.svg?svgr" + +export function PoweredByCommunity() { + return ( +
    +
    +
    +

    + Powered by the community +

    +

    + GraphQL is an ecosystem shaped by thousands of collaborating + developers and companies around the world. From solo contributors to + full-time maintainers, the GraphQL community builds libraries, runs + meetups, funds innovation and helps move the technology forward. +

    +
    +
    + + Browse libraries + + + + Explore events & meetups + + + + Learn about GraphQL Foundation + + +
    +
    +
    + ) +} diff --git a/src/components/index-page/powerful-tools.tsx b/src/components/index-page/powerful-tools.tsx index f56f703ee4..4944bd1f91 100644 --- a/src/components/index-page/powerful-tools.tsx +++ b/src/components/index-page/powerful-tools.tsx @@ -21,35 +21,6 @@ export function PowerFulTools() { by leveraging your API’s type system.

    -
    - - -
    ) } diff --git a/src/components/index-page/predictable-results/index.tsx b/src/components/index-page/predictable-results/index.tsx deleted file mode 100644 index 0d670546c7..0000000000 --- a/src/components/index-page/predictable-results/index.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import { useEffect, useRef } from "react" -import { PredictableResult } from "../../code-blocks" -import { Pre } from "nextra/components" -import { clsx } from "clsx" -import classes from "./index.module.css" - -export function PredictableResults() { - const ref = useRef(null) - useEffect(() => { - const showResponse = (num: Number) => { - const lines = ref.current!.querySelectorAll( - "code > span", - ) as unknown as HTMLSpanElement[] & { children: HTMLSpanElement[] }[] - - if (num === 1) { - Array.from(lines[2].children).at(-1)!.style.display = "none" - lines[3].style.display = "none" - lines[4].style.display = "none" - } else if (num === 2 || num === 3) { - Array.from(lines[2].children).at(-1)!.style.display = "inline" - lines[3].style.display = "inline" - if (num === 2) { - Array.from(lines[3].children).at(-1)!.style.display = "none" - } else { - Array.from(lines[3].children).at(-1)!.style.display = "inline" - lines[4].style.display = "inline" - } - } - } - let i = 0 - let forward = true - let timer: any - timer = setTimeout(type, 2000) - showResponse(1) - - function type() { - if (forward) { - if (document.getElementById("ch" + i)) { - document.getElementById("ch" + i)!.style.display = "inline" - i++ - if (i === 20) { - forward = false - showResponse(3) - timer = setTimeout(type, 1500) - } else if (i === 11) { - showResponse(2) - timer = setTimeout(type, 1500) - } else { - timer = setTimeout(type, Math.random() * 180 + 70) - } - } - } else { - i-- - if (document.getElementById("ch" + i)) { - document.getElementById("ch" + i)!.style.display = "none" - if (i === 0) { - forward = true - showResponse(1) - timer = setTimeout(type, 2000) - } else { - timer = setTimeout(type, 80) - } - } - } - } - - return () => clearTimeout(timer) - }, []) - return ( -
    -
    -
    -

    - Ask for what you need,
    - get exactly that -

    - {/*[Illustration: just a simple query and response?]*/} -

    - Send a GraphQL query to your API and get exactly what you need, - nothing more and nothing less. GraphQL queries always return - predictable results. Apps using GraphQL are fast and stable because - they control the data they get, not the server. -

    -
    -
    -
    -            {"{"}
    -            {"\n  hero {"}
    -            {"\n    name"}
    -            {"\n    height\n    mass".split("").map((char, i) => (
    -              
    -                {char === "\n" ? 
    : char} -
    - ))} - - {"\n }"} - {"\n}"} -
    - -
    -
    -
    - ) -} diff --git a/src/components/index-page/proven-solution/blur-bean.webp b/src/components/index-page/proven-solution/blur-bean.webp new file mode 100644 index 0000000000..8ee3171865 Binary files /dev/null and b/src/components/index-page/proven-solution/blur-bean.webp differ diff --git a/src/components/index-page/proven-solution/index.tsx b/src/components/index-page/proven-solution/index.tsx new file mode 100644 index 0000000000..1244906c18 --- /dev/null +++ b/src/components/index-page/proven-solution/index.tsx @@ -0,0 +1,126 @@ +import { ImageLoaded } from "@/app/conf/2025/components/image-loaded" +import { Button } from "@/app/conf/_design-system/button" +import { SectionLabel } from "@/app/conf/_design-system/section-label" +import CheckIcon from "@/app/conf/_design-system/pixelarticons/check.svg?svgr" + +import blurBean from "./blur-bean.webp" +import { StripesDecoration } from "@/app/conf/_design-system/stripes-decoration" + +export function ProvenSolution() { + return ( +
    + +
    +
    + + Business perspective + +

    + A proven solution for startups and enterprises +

    +
    + + The best user{" "} +
    + experience + + } + description="Deliver high-performing user experiences at scale. The world’s leading apps use GraphQL to create faster, more responsive digital experiences." + bullets={[ + "Faster data retrieval and load times", + "Improved bandwith efficiency", + ]} + /> + + Stability &{" "} +
    + Security + + } + description="Protect your APIs while maintaining full visibility into data consumption. GraphQL allows you to monitor, secure, and optimize API usage while ensuring compliance." + bullets={[ + "Stronger access control", + "Improved business intelligence & cost analysis", + ]} + /> + + Efficient distributed{" "} +
    + development + + } + description="Let your teams ship faster with GraphQL’s flexible, decoupled architecture. GraphQL allows frontend and backend teams to work independently and efficiently." + bullets={[ + "More rapid iterations", + "Improved cross-team collaboration", + ]} + /> +
    + +
    +
    +
    + ) +} + +function ProvenSolutionCard({ + title, + description, + bullets, +}: { + title: React.ReactNode + description: React.ReactNode + bullets: string[] +}) { + return ( +
    +

    + {title} +

    +

    {description}

    +
      + {bullets.map(bullet => ( +
    • + + {bullet} +
    • + ))} +
    +
    + ) +} + +function Stripes() { + return ( + + + + ) +} diff --git a/src/components/index-page/quotes-from-the-industry.tsx b/src/components/index-page/quotes-from-the-industry.tsx new file mode 100644 index 0000000000..3b1951aef2 --- /dev/null +++ b/src/components/index-page/quotes-from-the-industry.tsx @@ -0,0 +1,77 @@ +import { + TestimonialsList, + type Testimonial, +} from "@/app/conf/2025/components/testimonials" +import { SectionLabel } from "@/app/conf/_design-system/section-label" + +const testimonials: Testimonial[] = [ + { + quote: + "GraphQL is evolving to new use cases every day and it's really a competitive advantage to experience them first hand with everyone that matters.", + author: { + name: "Vincent Desmares", + role: "Teamstarter, CTO", + avatar: + "https://avatars.sched.co/d/cc/21066875/avatar.jpg.320x320px.jpg?f80", + }, + }, + { + quote: + "GraphQL is evolving to new use cases every day and it's really a competitive advantage to experience them first hand with everyone that matters.", + author: { + name: "Vincent Desmares", + role: "Teamstarter, CTO", + avatar: + "https://avatars.sched.co/d/cc/21066875/avatar.jpg.320x320px.jpg?f80", + }, + }, + { + quote: + "GraphQL is evolving to new use cases every day and it's really a competitive advantage to experience them first hand with everyone that matters.", + author: { + name: "Vincent Desmares", + role: "Teamstarter, CTO", + avatar: + "https://avatars.sched.co/d/cc/21066875/avatar.jpg.320x320px.jpg?f80", + }, + }, + { + quote: + "GraphQL is evolving to new use cases every day and it's really a competitive advantage to experience them first hand with everyone that matters.", + author: { + name: "Vincent Desmares", + role: "Teamstarter, CTO", + avatar: + "https://avatars.sched.co/d/cc/21066875/avatar.jpg.320x320px.jpg?f80", + }, + }, + { + quote: + "GraphQL is evolving to new use cases every day and it's really a competitive advantage to experience them first hand with everyone that matters.", + author: { + name: "Vincent Desmares", + role: "Teamstarter, CTO", + avatar: + "https://avatars.sched.co/d/cc/21066875/avatar.jpg.320x320px.jpg?f80", + }, + }, +] + +export function QuotesFromTheIndustry() { + return ( +
    +
    + + Quotes from the industry + +

    + Loved by world‑class devs +

    +
    + +
    + ) +} diff --git a/src/components/index-page/single-request/index.module.css b/src/components/index-page/single-request/index.module.css deleted file mode 100644 index 672158a126..0000000000 --- a/src/components/index-page/single-request/index.module.css +++ /dev/null @@ -1,59 +0,0 @@ -.query, -.response { - @apply absolute left-1/2; - @apply [&_pre]:bg-transparent [&_pre]:ring-0; -} - -.query { - animation: query-up 8s 0s infinite ease-in both; - @apply -translate-x-full; - - @keyframes query-up { - from { - opacity: 0; - top: 180px; - } - - 5%, - 25% { - opacity: 1; - } - - 40% { - opacity: 0; - } - - 50%, - 100% { - top: 70px; - opacity: 0; - } - } -} - -.response { - animation: response-down 8s 2.5s infinite ease-in both; - @apply -translate-x-1/2; - - @keyframes response-down { - 0% { - opacity: 0; - top: 95px; - } - - 10% { - opacity: 0; - } - - 25%, - 45% { - opacity: 1; - } - - 50%, - 100% { - opacity: 0; - top: 160px; - } - } -} diff --git a/src/components/index-page/single-request/index.tsx b/src/components/index-page/single-request/index.tsx deleted file mode 100644 index efab2127d6..0000000000 --- a/src/components/index-page/single-request/index.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { QueryHeroFriends, ResponseHeroFriends } from "../../code-blocks" -import classes from "./index.module.css" -import phoneImage from "public/img/phone.svg" -import serverImage from "public/img/server.svg" -import NextImage from "next-image-export-optimizer" - -export function SingleRequest() { - return ( -
    -
    -

    - Get many resources
    - in a single request -

    - {/*Illustration: a query 2 or 3 levels deep]*/} -

    - GraphQL queries access not just the properties of one resource but - also smoothly follow references between them. While typical REST APIs - require loading from multiple URLs, GraphQL APIs get all the data your - app needs in a single request. Apps using GraphQL can be quick even on - slow mobile network connections. -

    -
    -
    - - -
    - -
    -
    - -
    -
    -
    - ) -} diff --git a/src/components/index-page/trusted-by/index.tsx b/src/components/index-page/trusted-by/index.tsx new file mode 100644 index 0000000000..42c2a987c4 --- /dev/null +++ b/src/components/index-page/trusted-by/index.tsx @@ -0,0 +1,146 @@ +import { clsx } from "clsx" + +import { Button } from "@/app/conf/_design-system/button" + +import MetaLockup from "./logos/Meta.svg?svgr" +import IBMWordmark from "./logos/IBM.svg?svgr" +import AirBnBLockup from "./logos/AirBnB.svg?svgr" +import IntuitWordmark from "./logos/Intuit.svg?svgr" +import AWSLogo from "./logos/AWS.svg?svgr" +import PayPalWordmark from "./logos/PayPal.svg?svgr" +import NewYorkTimesWordmark from "./logos/NewYorkTimes.svg?svgr" +import StarbucksWordmark from "./logos/Starbucks.svg?svgr" +import ShopifyLockup from "./logos/Shopify.svg?svgr" +import ShopifyMonotoneLockup from "./logos/ShopifyMonotone.svg?svgr" +import GitHubLockup from "./logos/GitHub.svg?svgr" + +import styles from "./style.module.css" + +const logos: LogoListItem[] = [ + { + href: "https://meta.com", + alt: "Meta", + component: MetaLockup, + }, + { + href: "https://aws.amazon.com", + alt: "AWS", + component: props => ( + + ), + }, + // todo: Netflix? + // { + // href: "https://netflix.com", + // alt: "Netflix", + // component: NetflixWordmark, + // }, + { + href: "https://airbnb.com", + alt: "Airbnb", + component: AirBnBLockup, + }, + { + href: "https://intuit.com", + alt: "Intuit", + component: IntuitWordmark, + }, + + { + href: "https://ibm.com", + alt: "IBM", + component: props => ( + + ), + }, + + { + href: "https://paypal.com", + alt: "PayPal", + component: PayPalWordmark, + }, + { + href: "https://nytimes.com", + alt: "New York Times", + component: NewYorkTimesWordmark, + }, + { + href: "https://starbucks.com", + alt: "Starbucks", + component: StarbucksWordmark, + }, + { + href: "https://shopify.com", + alt: "Shopify", + component: ({ className, ...rest }) => ( +
    + + +
    + ), + }, + { + href: "https://github.com", + alt: "GitHub", + component: GitHubLockup, + }, +] + +export function TrustedBy() { + return ( +
    + ) +} + +interface LogoListItem { + href: string + alt: string + component: React.FC<{ className?: string }> +} diff --git a/src/components/index-page/trusted-by/logos/AWS.svg b/src/components/index-page/trusted-by/logos/AWS.svg new file mode 100644 index 0000000000..ee21400eae --- /dev/null +++ b/src/components/index-page/trusted-by/logos/AWS.svg @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/components/index-page/trusted-by/logos/AirBnB.svg b/src/components/index-page/trusted-by/logos/AirBnB.svg new file mode 100644 index 0000000000..a34faeca18 --- /dev/null +++ b/src/components/index-page/trusted-by/logos/AirBnB.svg @@ -0,0 +1,16 @@ + + + + diff --git a/src/components/index-page/trusted-by/logos/GitHub.svg b/src/components/index-page/trusted-by/logos/GitHub.svg new file mode 100644 index 0000000000..b1f0459b94 --- /dev/null +++ b/src/components/index-page/trusted-by/logos/GitHub.svg @@ -0,0 +1,54 @@ + + + + + + + + + diff --git a/src/components/index-page/trusted-by/logos/IBM.svg b/src/components/index-page/trusted-by/logos/IBM.svg new file mode 100644 index 0000000000..c080864325 --- /dev/null +++ b/src/components/index-page/trusted-by/logos/IBM.svg @@ -0,0 +1,18 @@ + + + + diff --git a/src/components/index-page/trusted-by/logos/Intuit.svg b/src/components/index-page/trusted-by/logos/Intuit.svg new file mode 100644 index 0000000000..4618f6f402 --- /dev/null +++ b/src/components/index-page/trusted-by/logos/Intuit.svg @@ -0,0 +1,19 @@ + + + + diff --git a/src/components/index-page/trusted-by/logos/Meta.svg b/src/components/index-page/trusted-by/logos/Meta.svg new file mode 100644 index 0000000000..e677a07bb4 --- /dev/null +++ b/src/components/index-page/trusted-by/logos/Meta.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + diff --git a/src/components/index-page/trusted-by/logos/NewYorkTimes.svg b/src/components/index-page/trusted-by/logos/NewYorkTimes.svg new file mode 100644 index 0000000000..6d413cad37 --- /dev/null +++ b/src/components/index-page/trusted-by/logos/NewYorkTimes.svg @@ -0,0 +1,17 @@ + + + + diff --git a/src/components/index-page/trusted-by/logos/PayPal.svg b/src/components/index-page/trusted-by/logos/PayPal.svg new file mode 100644 index 0000000000..534e047567 --- /dev/null +++ b/src/components/index-page/trusted-by/logos/PayPal.svg @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/src/components/index-page/trusted-by/logos/Shopify.svg b/src/components/index-page/trusted-by/logos/Shopify.svg new file mode 100755 index 0000000000..7022211575 --- /dev/null +++ b/src/components/index-page/trusted-by/logos/Shopify.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + diff --git a/src/components/index-page/trusted-by/logos/ShopifyMonotone.svg b/src/components/index-page/trusted-by/logos/ShopifyMonotone.svg new file mode 100755 index 0000000000..31ef8769fc --- /dev/null +++ b/src/components/index-page/trusted-by/logos/ShopifyMonotone.svg @@ -0,0 +1,11 @@ + + + diff --git a/src/components/index-page/trusted-by/logos/Starbucks.svg b/src/components/index-page/trusted-by/logos/Starbucks.svg new file mode 100644 index 0000000000..ab524019ed --- /dev/null +++ b/src/components/index-page/trusted-by/logos/Starbucks.svg @@ -0,0 +1,17 @@ + + + + diff --git a/src/components/index-page/trusted-by/style.module.css b/src/components/index-page/trusted-by/style.module.css new file mode 100644 index 0000000000..e71cc46a31 --- /dev/null +++ b/src/components/index-page/trusted-by/style.module.css @@ -0,0 +1,29 @@ +.logos { + & .shopify > svg { + transition: opacity 300ms cubic-bezier(0.075, 0.82, 0.165, 1); + } + + & > a { + transition: background-color 300ms cubic-bezier(0.075, 0.82, 0.165, 1); + + &::before { + transition: background-color 300ms cubic-bezier(0.075, 0.82, 0.165, 1); + } + + & :is(svg, path) { + transition: fill 300ms cubic-bezier(0.075, 0.82, 0.165, 1); + } + + &:not(:hover) svg, + &:not(:hover) path { + fill: hsl(var(--color-neu-600)); + } + + html[class~="dark"] & { + &:not(:hover) svg, + &:not(:hover) path { + fill: hsl(var(--color-neu-200)); + } + } + } +} diff --git a/src/components/index-page/type-system.tsx b/src/components/index-page/type-system.tsx deleted file mode 100644 index 1b6d954f6e..0000000000 --- a/src/components/index-page/type-system.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import { useEffect, useRef } from "react" -import { Query, Schema } from "../code-blocks" -import { clsx } from "clsx" - -export function TypeSystem() { - const queryRef = useRef(null) - useEffect(() => { - const [queryCode, responseCode] = queryRef.current!.querySelectorAll( - "code", - ) as unknown as HTMLElement[] - let line = 0 - const typeLines = [1, 5, 6, 5, 7, 12, 13, 8, 17, 18, 19, 12] - const queryLines = [1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13] - let timer: any - - const highlightLine = () => { - // Reset previous line - queryCode.children[queryLines.at(line - 1)!].classList.remove( - "highlighted", - ) - responseCode.children[typeLines.at(line - 1)!].classList.remove( - "highlighted", - ) - - queryCode.children[queryLines.at(line)!].classList.add("highlighted") - responseCode.children[typeLines.at(line)!].classList.add("highlighted") - line = (line + 1) % typeLines.length - - timer = setTimeout(highlightLine, 1_000 + Math.random() * 200) - } - highlightLine() - return () => clearTimeout(timer) - }, []) - - return ( -
    -
    -
    -

    - Describe what's possible
    - with a type system -

    - {/*Illustration of a type IDL following a query by line*/} - {/*Under: a server <-> client (Capabilities, Requirements)?*/} -

    - GraphQL APIs are organized in terms of types and fields, not - endpoints. Access the full capabilities of your data from a single - endpoint. GraphQL uses types to ensure Apps only ask for what's - possible and provide clear and helpful errors. Apps can use types to - avoid writing manual parsing code. -

    -
    -
    - - -
    -
    -
    - ) -} diff --git a/src/components/index-page/use-cases/blur-bean.webp b/src/components/index-page/use-cases/blur-bean.webp new file mode 100644 index 0000000000..0b3b1a0e96 Binary files /dev/null and b/src/components/index-page/use-cases/blur-bean.webp differ diff --git a/src/components/index-page/use-cases/index.tsx b/src/components/index-page/use-cases/index.tsx new file mode 100644 index 0000000000..a190590ead --- /dev/null +++ b/src/components/index-page/use-cases/index.tsx @@ -0,0 +1,213 @@ +"use client" + +import clsx from "clsx" +import { useState, Fragment, ReactNode } from "react" + +import { Button } from "@/app/conf/_design-system/button" +import { StripesDecoration } from "@/app/conf/_design-system/stripes-decoration" +import ArrowDownIcon from "@/app/conf/_design-system/pixelarticons/arrow-down.svg?svgr" + +import blurBean from "./blur-bean.webp" + +type UseCase = { + label: string + description: ReactNode + cta: string + href: string +} + +const USE_CASES: UseCase[] = [ + { + label: "A large backend with many services", + description: + "GraphQL serves as a unified data layer across multiple services. This way you simplify API management and reduce dependencies between teams. It enables efficient data fetching while keeping the API surface flexible and maintainable.", + cta: "Best Practices for Large-Scale Systems", + href: "/learn/best-practices", + }, + { + label: "A mobile app", + description: ( + <> + GraphQL lets you request exactly what you need in one call with no + overfetching to preserve battery and work on slow networks. With + libraries like{" "} + + GraphCache + {" "} + your app can work offline on planes and trains, and versionless schema + evolution makes it easy to iterate without breaking old versions of the + app. + + ), + cta: "Performance Optimization", + href: "/learn/performance", + }, + { + label: "A frontend-heavy app with advanced UI needs", + description: + "GraphQL makes building complex UIs easier by allowing components to declare their data needs directly alongside their code with no performance hit. You can aggregate data from multiple services into a single request and maintain consistent state without creating custom endpoints for every view.", + cta: "GraphQL Queries", + href: "/learn/queries", + }, + { + label: "An app with real-time updates", + description: + "Replace polling and complex WebSocket management with GraphQL subscriptions. Your app gets notified instantly when data changes, using the same queries and types you already have. Real-time becomes part of your API instead of a separate system to maintain.", + cta: "Real-time with Subscriptions", + href: "/learn/subscriptions", + }, + { + label: "A simple full stack TypeScript app", + description: + "Define your GraphQL schema once and GraphQL Codegen does the rest. Your frontend gets perfectly typed API calls, your backend stays in sync, and any schema changes immediately show up as TypeScript errors throughout your app. Full-stack type safety reduces bugs and makes pivots and refactors easier.", + cta: "Schema-First Development", + href: "/learn/schema", + }, + { + label: "An AI-powered app", + description: + "Build apps with soft core using GraphQL MCP. Your schema documents itself, so AI agents can discover your API capabilities, understand data relationships, and generate valid queries without custom integration work.", + cta: "MCP GraphQL", + href: "https://github.com/graphql/graphql-mcp", + }, +] + +export function UseCases({ + className, + ...props +}: React.HTMLAttributes) { + const [selectedIndex, setSelectedIndex] = useState(0) + const selected = USE_CASES[selectedIndex] + + return ( +
    +
    +
    +

    Is GraphQL right for me?

    +

    + Choose a use case most relevant for your project and learn how + GraphQL can help you build faster, modern solutions. +

    + +
    +
    + {USE_CASES.map((useCase, i) => ( + + ))} +
    +
    +
    + +
    + +
    + {USE_CASES.map((useCase, i) => ( + + +
    +
    +

    + {useCase.label} +

    +

    + {useCase.description} +

    +
    + +
    +
    +
    +
    + ))} +
    +
    +
    +
    + ) +} + +function Stripes() { + const mask = `url(${blurBean.src})` + return ( +
    + +
    + ) +} + +function arrowsMoveSideways(event: React.KeyboardEvent) { + if (event.key === "ArrowLeft" || event.key === "ArrowUp") { + const previousElement = event.currentTarget.previousElementSibling + if (previousElement) { + event.preventDefault() + ;(previousElement as HTMLElement).focus() + } + } else if (event.key === "ArrowRight" || event.key === "ArrowDown") { + const nextElement = event.currentTarget.nextElementSibling + if (nextElement) { + event.preventDefault() + ;(nextElement as HTMLElement).focus() + } + } +} diff --git a/src/components/index-page/what-is-graphql/api-gateway-query.mdx b/src/components/index-page/what-is-graphql/api-gateway-query.mdx new file mode 100644 index 0000000000..ff554c21ef --- /dev/null +++ b/src/components/index-page/what-is-graphql/api-gateway-query.mdx @@ -0,0 +1,11 @@ +```graphql word-wrap=false +query getCity($city: String) { + cities(name: $city) { + population + weather { + temperature + precipitation + } + } +} +``` diff --git a/src/components/index-page/what-is-graphql/api-gateway-response.mdx b/src/components/index-page/what-is-graphql/api-gateway-response.mdx new file mode 100644 index 0000000000..2e24120f72 --- /dev/null +++ b/src/components/index-page/what-is-graphql/api-gateway-response.mdx @@ -0,0 +1,15 @@ +```json word-wrap=false +{ + "data": { + "cities": [ + { + "population": 8675309, + "weather": { + "temperature": 22.5, + "precipitation": 1.2 + } + } + ] + } +} +``` diff --git a/src/components/index-page/what-is-graphql/icons.tsx b/src/components/index-page/what-is-graphql/icons.tsx new file mode 100644 index 0000000000..e2430faf6e --- /dev/null +++ b/src/components/index-page/what-is-graphql/icons.tsx @@ -0,0 +1,80 @@ +import { type SVGProps } from "react" + +export function DesktopIcon(props: SVGProps) { + return +} + +export function PhoneIcon(props: SVGProps) { + return ( + + ) +} + +export function TelevisionIcon(props: SVGProps) { + return ( + + ) +} + +export function TabletIcon(props: SVGProps) { + return ( + + ) +} + +export function WristwatchIcon(props: SVGProps) { + return ( + + ) +} + +export function LabirynthIcon(props: SVGProps) { + return ( + + ) +} + +export function ServerIcon(props: SVGProps) { + return ( + + ) +} + +export function ModemIcon(props: SVGProps) { + return ( + <> + + + + ) +} + +export function CloudIcon(props: SVGProps) { + return ( + + ) +} diff --git a/src/components/index-page/what-is-graphql/index.tsx b/src/components/index-page/what-is-graphql/index.tsx new file mode 100644 index 0000000000..6e71873dbc --- /dev/null +++ b/src/components/index-page/what-is-graphql/index.tsx @@ -0,0 +1,27 @@ +import { SectionLabel } from "@/app/conf/_design-system/section-label" +import { Button } from "@/app/conf/_design-system/button" + +import { Wires } from "./wires" + +export function WhatIsGraphQL() { + return ( +
    + Introduction +
    +

    What is GraphQL?

    +

    + GraphQL is an open‑source query language for APIs and + a server‑side runtime. It provides a strongly‑typed schema to + define relationships between data, making APIs more flexible and + predictable. And it isn’t tied to a specific database or storage + engine — it works with your existing code and data, making it easier + to evolve APIs over time. +

    +
    + + +
    + ) +} diff --git a/src/components/index-page/what-is-graphql/wires.module.css b/src/components/index-page/what-is-graphql/wires.module.css new file mode 100644 index 0000000000..52b608861f --- /dev/null +++ b/src/components/index-page/what-is-graphql/wires.module.css @@ -0,0 +1,96 @@ +.wires { + & rect, + & path { + transition: + fill 1s linear, + stroke 1s linear, + opacity 1s linear, + stroke-width 1s linear; + } +} + +.highlightsQuery, +.highlightsResponse { + overflow: hidden; + + & pre > code:global(.nextra-code) > span { + position: relative; + + &::before { + transition: opacity 1s ease-out; + } + } +} + +.highlightsQuery { + & pre > code:global(.nextra-code) > span::before { + position: absolute; + inset: 0; + content: ""; + transition: opacity 1s ease-out; + transition-delay: 1s; + opacity: var(--highlight-opacity, 0); + + &:nth-child(2), + &:nth-child(3) { + @apply bg-pri-lighter/20 dark:bg-pri-light/5; + } + &:nth-child(4) { + @apply bg-gradient-to-b from-pri-lighter/20 to-sec-light/20 dark:from-pri-light/5 dark:to-sec-light/5; + background-image: linear-gradient( + to bottom in oklch, + var(--tw-gradient-stops) + ); + } + &:nth-child(5), + &:nth-child(6), + &:nth-child(7) { + @apply bg-sec-light/20 dark:bg-sec-light/5; + } + } +} + +.highlightsResponse { + & pre > code:global(.nextra-code) > span::before { + position: absolute; + inset: 0; + content: ""; + transition-delay: 1s; + + &:nth-child(3), + &:nth-child(4), + &:nth-child(5) { + @apply bg-pri-lighter/20 dark:bg-pri-light/5; + } + &:nth-child(6) { + @apply bg-gradient-to-b from-pri-lighter/20 to-sec-light/20 dark:from-pri-light/5 dark:to-sec-light/5; + background-image: linear-gradient( + to bottom in oklch, + var(--tw-gradient-stops) + ); + } + &:nth-child(7), + &:nth-child(8), + &:nth-child(9) { + @apply bg-sec-light/20 dark:bg-sec-light/5; + } + } +} + +@keyframes query-exit { + from { + transform: rotateX(0deg) translateY(0px) translateZ(150px); + } + to { + transform: rotateX(-90deg) translateY(60px) translateZ(150px); + } +} + +@keyframes query-exit-sm { + from { + transform: rotateY(0deg) translateX(0px) translateZ(150px); + } + to { + transform: rotateY(90deg) translateX(60px) translateZ(150px); + } +} diff --git a/src/components/index-page/what-is-graphql/wires.tsx b/src/components/index-page/what-is-graphql/wires.tsx new file mode 100644 index 0000000000..963bf4efd3 --- /dev/null +++ b/src/components/index-page/what-is-graphql/wires.tsx @@ -0,0 +1,892 @@ +import clsx from "clsx" +import { + ComponentPropsWithoutRef, + Fragment, + ReactNode, + useEffect, + useMemo, + useReducer, + useRef, +} from "react" +import { throttle } from "@/app/conf/_design-system/utils/throttle" + +import { Code } from "nextra/components" + +import { Pre } from "@/components/pre" + +import { + DesktopIcon, + PhoneIcon, + TelevisionIcon, + TabletIcon, + WristwatchIcon, + CloudIcon, + LabirynthIcon, + ModemIcon, + ServerIcon, +} from "./icons" +import QueryMdx from "./api-gateway-query.mdx" +import ResponseMdx from "./api-gateway-response.mdx" +import styles from "./wires.module.css" + +const bigScreenClientEdges = [ + "M514.5 220H424.5V76H72", + "M446 220H424.5V112H144", + "M446 220H424.5V147H72", + "M446 220H424.5V184H144", + "M528 220H514.206L72 220", + "M528 220L424.866 220V256H144", + "M446 220L424.5 220V291.75H72", + "M528.5 220H424.5V328H144", + "M528 220H424.772V365H72", +] + +function ClientEdges({ + highlightedEdge, + highlightedVisible, + edges, + baseStroke = "url(#paint_lr_light_linear_671_9150)", + highlightedStroke = "url(#paint_lr_dark_linear_671_9150)", +}: { + highlightedEdge?: number + highlightedVisible: boolean + edges: string[] + baseStroke?: string + highlightedStroke?: string +}) { + return ( + <> + {moveHighlightedToTop( + highlightedEdge, + edges.map((path, index) => ( + + + {highlightedEdge === index && ( + + )} + + )), + )} + + ) +} + +const bigScreenServerEdges = [ + "M696 159.5H811.5V75H1176", + "M696 175.5L833.5 175.5V112H1104.5", + "M696 191.5H855.5V148.5H1176", + "M696 206.5L876 206.5V184.5H1104", + "M696 220.5H704.5H1176", + "M696 234.5L876 234.5V256.5H1104", + "M696 249.5H855.5V292.5H1176", + "M696 265.5L833.5 265.5V329H1104", + "M696 281.5H811.5V366H1176", +] + +function ServerEdges({ + highlighted, + highlightedVisible, + edges, + baseStroke, + oddStroke, + evenStroke, +}: { + highlighted: number[] + highlightedVisible: boolean + edges: string[] + baseStroke: string + oddStroke: string + evenStroke: string +}) { + return ( + <> + {edges.map((d, index) => { + const isHighlighted = highlighted?.includes(index) + return ( + + + {isHighlighted && ( + + )} + + ) + })} + + ) +} + +function Box({ + transform, + children, + className, +}: { + transform: string + fill?: string + children: React.ReactNode + className?: string +}) { + return ( + path]:translate-x-3 [&>path]:translate-y-3 sm:[&>path]:translate-x-4 sm:[&>path]:translate-y-4 [:where(&>path:not([fill]))]:fill-neu-600", + className, + )} + > + + {children} + + ) +} + +/* eslint-disable react/jsx-key */ +const bigScreenClientBoxes: Array<[string, React.ReactNode]> = [ + ["translate(16, 48)", ], + ["translate(88, 84)", ], + ["translate(16, 120)", ], + ["translate(88, 156)", ], + ["translate(16, 192)", ], + ["translate(88, 228)", ], + ["translate(16, 264)", ], + ["translate(88, 300)", ], + ["translate(16, 336)", ], +] +/* eslint-enable react/jsx-key */ + +function ClientBoxes({ + highlighted, + boxes, +}: { + highlighted?: number + boxes: Array<[string, React.ReactNode]> +}) { + return ( + <> + {boxes.map(([transform, children], index) => { + const isHighlighted = index === highlighted + return ( + + {children} + + ) + })} + + ) +} + +/* eslint-disable react/jsx-key */ +const bigScreenServerBoxes: Array<[string, React.ReactNode]> = [ + ["translate(1176, 48)", ], + ["translate(1104, 84)", ], + ["translate(1176, 120)", ], + ["translate(1104, 156)", ], + ["translate(1176, 192)", ], + ["translate(1104, 228)", ], + ["translate(1176, 264)", ], + ["translate(1104, 300)", ], + ["translate(1176, 336)", ], +] +/* eslint-enable react/jsx-key */ + +function ServerBoxes({ + highlighted, + boxes, +}: { + highlighted: number[] + boxes: Array<[string, React.ReactNode]> +}) { + return ( + <> + {boxes.map(([transform, children], index) => { + const isHighlighted = highlighted.includes(index) + return ( + + {children} + + ) + })} + + ) +} + +function SVGDefinitions() { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +const components = { + pre: (props: ComponentPropsWithoutRef) => ( +
    +      {props.children}
    +    
    + ), + code: Code, +} + +export function Wires({ className }: { className?: string }) { + const STEPS = 3 + const [step, inc] = useReducer(x => (x + 1) % STEPS, 0) + + const ref = useRef(null) + + useEffect(() => { + const animate = document.querySelector( + "#paint_sr_pri_highlight_linear_671_9150 animate", + ) + + const onAnimationRepeat = () => { + inc() + } + + if (animate && animate instanceof SVGAnimateElement) { + animate.addEventListener("repeatEvent", onAnimationRepeat) + } + + return () => animate?.removeEventListener("repeatEvent", onAnimationRepeat) + }, []) + + return ( +
    + + + + + 0} + edges={bigScreenServerEdges} + baseStroke="stroke-[url(#paint_sr_light_linear_671_9150)]" + oddStroke="stroke-[url(#paint_sr_pri_highlight_linear_671_9150)] motion-reduce:stroke-[url(#paint_sr_pri_highlight_linear_static_671_9150)]" + evenStroke="stroke-[url(#paint_sr_sec_highlight_linear_671_9150)] motion-reduce:stroke-[url(#paint_sr_sec_highlight_linear_static_671_9150)]" + /> + 0 ? [1, 6] : []} + boxes={bigScreenServerBoxes} + /> + + + + {process.env.NODE_ENV === "development" && ( + + )} + +
    + +
    +
    + +
    + +
    + ) +} + +function moveHighlightedToTop(index: number | undefined, nodes: ReactNode[]) { + if (index === undefined) return nodes + const newNodes = nodes.filter((_, i) => i !== index) + newNodes.push(nodes[index] as ReactNode) + return newNodes +} + +function Curtain() { + return ( +
    + ) +} + +const mobileClientEdges = [ + "M154 157L155 85L24 84.8443L24 48", + "M154 157L154 84.9209L88 84.9209L88 48", + "M154 107.855L154 157L155 48", + "M154 157L154 85L219 85L219 48", + "M154 157L154.002 85L284 85L284 48", +] + +/* eslint-disable react/jsx-key */ +const mobileClientBoxes: Array<[string, React.ReactNode]> = [ + ["translate(0, 0)", ], + ["translate(65, 0)", ], + ["translate(130, 0)", ], + ["translate(195, 0)", ], + ["translate(260, 0)", ], +] + +const mobileServerBoxes: Array<[string, React.ReactNode]> = [ + ["translate(2, 454)", ], + ["translate(67, 454)", ], + ["translate(132, 454)", ], + ["translate(197, 454)", ], + ["translate(262, 454)", ], +] +/* eslint-enable react/jsx-key */ + +const mobileServerEdges = [ + "M181.918 344L181.916 426L220.335 426L220.337 454", + "M210.512 344L210.512 398L286.008 398L286.008 454", + "M156.002 344L156.002 345.948L156.002 454", + "M101.504 344L101.504 398.5L26.0075 398.5L26.0075 454", + "M130.094 344L130.094 426L91.6745 426L91.6745 454", +] + +function MobileSVGDefinitions() { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +function MobileDiagram({ step }: { step: number }) { + return ( + + + + 0} + baseStroke="stroke-[url(#smallscreen_linear2)]" + evenStroke="stroke-[url(#smallscreen_linear2_pri)]" + oddStroke="stroke-[url(#smallscreen_linear2_sec)]" + /> + 0 ? [1, 4] : []} + boxes={mobileServerBoxes} + /> + + + ) +} + +const NextStepButton = + process.env.NODE_ENV === "development" + ? ({ onClick }: { onClick: () => void }) => { + const backgroundRef = useRef(null) + + const onBackgroundClick = useMemo( + () => + throttle(() => { + const button = backgroundRef.current + if (!button) return + button.disabled = true + onClick() + setTimeout(() => { + button.disabled = false + }, 750) + }, 500), + [], + ) + + return ( + + ) + }} + + + // eslint-disable-next-line tailwindcss/no-custom-classname + clsx( + "gql-navbar-menu-items", + "motion-reduce:transition-none", + "focus-visible:outline-none", + open ? "opacity-100" : "opacity-0", + "nextra-scrollbar overflow-visible transition-opacity", + "z-20 rounded-md py-1 text-sm", + // headlessui adds max-height as style, use !important to override + "!max-h-[min(calc(100vh-5rem),256px)]", + ) + } + anchor={{ to: "top start", gap: 21, padding: 16, offset: -8 }} + > + {Object.entries(menu.items || {}).map(([key, item]) => ( + + + + {item.title} + + + + ))} + + + ) +} + +export function Navbar({ items }: NavBarProps): ReactElement { + const themeConfig = useThemeConfig() + + const activeRoute = useFSRoute() + const { menu, setMenu } = useMenu() + const [submenuOpen, setSubmenuOpen] = useState(false) + + return ( +
    + + + +
    + ) +} + +function BackdropBlur() { + const thickness = "1px" + + const mask = "linear-gradient(to bottom, #000 0% 50%, transparent 50% 100%)" + const edgeMask = `linear-gradient(to bottom, black 0, black ${thickness}, transparent ${thickness})` + return ( + <> +
    +
    + + ) +} + +export function NavbarPlaceholder({ + className, + ...rest +}: React.HTMLAttributes) { + return ( +
    + ) +} + +function SubmenuBackdrop({ className }: { className: string }) { + return ( +
    + ) +} diff --git a/src/components/pre/index.tsx b/src/components/pre/index.tsx new file mode 100644 index 0000000000..25bf431ff8 --- /dev/null +++ b/src/components/pre/index.tsx @@ -0,0 +1,95 @@ +import cn from "clsx" +import type { ComponentPropsWithoutRef, FC, ReactElement } from "react" +import { useRef } from "react" +import { WordWrapIcon } from "nextra/icons" +import { Button, CopyToClipboard } from "nextra/components" + +import classes from "./pre.module.css" + +interface PreProps extends ComponentPropsWithoutRef<"pre"> { + "data-filename"?: string + "data-copy"?: "" + "data-language"?: string + "data-word-wrap"?: "" + icon?: FC<{ className?: string }> + containerClassName?: string +} + +export function Pre({ + children, + className, + "data-filename": filename, + "data-copy": copy, + "data-language": _language, + "data-word-wrap": hasWordWrap, + icon: Icon, + containerClassName, + ...props +}: PreProps): ReactElement { + const preRef = useRef(null) + + const copyButton = copy === "" && ( + preRef.current?.querySelector("code")?.textContent || ""} + /> + ) + + return ( +
    + {filename && ( +
    + {Icon && } + {filename} + {copyButton} +
    + )} +
    +        {children}
    +      
    +
    &]:_opacity-100 focus-within:_opacity-100", + "_flex _gap-1 _absolute _right-4", + filename ? "_top-14" : "_top-2", + )} + > + {hasWordWrap === "" && ( + + )} + {!filename && copyButton} +
    +
    + ) +} + +function toggleWordWrap() { + const htmlDataset = document.documentElement.dataset + const hasWordWrap = "nextraWordWrap" in htmlDataset + if (hasWordWrap) { + delete htmlDataset.nextraWordWrap + } else { + htmlDataset.nextraWordWrap = "" + } +} diff --git a/src/components/pre/pre.module.css b/src/components/pre/pre.module.css new file mode 100644 index 0000000000..54a0ddf66a --- /dev/null +++ b/src/components/pre/pre.module.css @@ -0,0 +1,32 @@ +.pre { + & :global(._h-12) { + height: unset; + } +} + +:global(.nextra-codeblocks) div.pre:not(:last-child) > div:first-child { + border-right: none; +} + +:global(.nextra-codeblocks) { + & .pre pre { + height: 100%; + } + + & .pre:not(:last-child) pre { + border-right: none; + border-bottom-right-radius: 0; + } + + & :not(:last-child) .filename { + border-top-right-radius: 0; + } + + & :not(:first-child) .filename { + border-top-left-radius: 0; + } + + & .pre:not(:first-child) pre { + border-bottom-left-radius: 0; + } +} diff --git a/src/components/utils.tsx b/src/components/utils.tsx new file mode 100644 index 0000000000..9074a85647 --- /dev/null +++ b/src/components/utils.tsx @@ -0,0 +1,8 @@ +export function renderComponent( + ComponentOrNode: React.FC | React.ReactNode, + props?: T, +) { + if (!ComponentOrNode) return null + if (typeof ComponentOrNode !== "function") return ComponentOrNode + return +} diff --git a/src/globals.css b/src/globals.css index ac04ce6d8d..432e4f3ef1 100644 --- a/src/globals.css +++ b/src/globals.css @@ -1,6 +1,7 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; +@import "./nextra-theme-docs.css"; +@import "tailwindcss/base"; +@import "tailwindcss/utilities"; +@import "tailwindcss/components"; :root { --foreground-rgb: 0, 0, 0; @@ -102,14 +103,6 @@ div[id^="headlessui-menu-items"] { @apply first:mr-0 hover:!text-primary; } - button[id^="headlessui-menu-button"] { - @apply hover:text-primary; - - + div > a { - @apply hover:text-primary; - } - } - .nextra-search { @apply ml-auto; @@ -149,7 +142,7 @@ div[id^="headlessui-menu-items"] { } ::selection { - @apply bg-primary/50 dark:bg-primary/50; + @apply bg-pri-base/25 dark:bg-pri-light/50; } @media (prefers-color-scheme: dark) { @@ -286,20 +279,6 @@ div[id^="headlessui-menu-items"] { @apply rounded border border-current px-2.5 py-1 text-sm font-bold transition-colors; } -.index { - p { - @apply mb-5 max-w-2xl text-lg lg:text-xl/9; - } - - h2 { - @apply mb-10 text-balance text-3xl font-bold lg:text-5xl; - } - - pre { - @apply bg-white; - } -} - .add, .remove { @apply shadow-[2px_0_currentColor_inset]; @@ -321,38 +300,6 @@ div[id^="headlessui-menu-items"] { } } -.step0, -.step6 { - .v2 { - @apply opacity-0; - } -} - -.step1 .v2 code > span:nth-child(5) { - @apply add; -} - -.step2 .v3 code > span:nth-child(6) { - @apply add; -} - -.step3 .v4 code > { - span:nth-child(7), - span:nth-last-child(-n + 5) { - @apply add; - } -} - -.step4 { - .v4 code > span:nth-child(6) { - @apply remove; - } - - .v5 code > span:nth-child(6) { - @apply add; - } -} - .index-button { @apply rounded-md border border-current px-6 py-2.5 transition-colors; @@ -416,60 +363,6 @@ div[id^="headlessui-menu-items"] { @apply bg-gradient-to-b from-transparent to-primary/5 dark:to-primary/10; } -.type-evolution { - @apply w-full overflow-hidden; - - #typeEvolveView { - @apply relative left-0 flex h-full select-none; - - .v1, - .v2, - .v3, - .v4 { - @apply w-1/2 shrink-0 border-r dark:border-neutral-800; - } - - .v5 { - @apply w-full shrink-0; - } - - &.step1 { - .v2 { - opacity: 1; - transition: opacity 0.5s ease-in-out; - } - } - - &.step2 { - left: calc(-1 * 50%); - transition: left 0.5s ease-in-out; - } - - &.step3 { - left: calc(-2 * 50%); - transition: left 0.5s ease-in-out; - } - - &.step4 { - left: calc(-3 * 50%); - transition: left 0.5s ease-in-out; - } - - &.step5 { - left: calc(-4 * 50%); - transition: left 0.5s ease-in-out; - } - - &.step6 { - .v5 { - left: calc(-4 * 50%); - opacity: 0; - transition: opacity 0.5s ease-in-out; - } - } - } -} - .apiIndex { @apply mt-6; } @@ -516,18 +409,34 @@ div[id^="headlessui-menu-items"] { @apply focus-visible:outline focus-visible:outline-[3px] focus-visible:outline-offset-[5px] focus-visible:outline-neu-900; } -.gql-conf-container { +.gql-container { @apply mx-auto w-full max-w-[120rem]; } -.gql-conf-section { +.gql-section { @apply px-4 py-8 lg:px-12 xl:gap-x-24 xl:px-24 3xl:px-[240px]; } +.gql-navbar-strip, .gql-conf-navbar-strip { @apply relative [contain:paint] before:sticky before:top-0 before:z-[9] before:-mt-[var(--navbar-h)] before:block before:h-[var(--navbar-h)] before:w-full before:content-['']; } +.gql-navbar-strip { + --navbar-h: var(--nextra-navbar-height); +} + +.gql-radial-gradient { + background-image: radial-gradient( + ellipse at 50% 50%, + hsl(var(--color-neu-600)) 0%, + transparent 75% + ); + background-size: 100% 100%; + background-position: center; + background-repeat: no-repeat; +} + :root { --navbar-h: 70px; } @@ -537,3 +446,33 @@ html:has([role="listbox"][data-open]), html:has([role="menu"][data-open]) { overflow: visible !important; } + +@supports (background: -webkit-named-image(i)) { + html { + /* Safari moves the fixed Navbar when overscrolling and it looks bad */ + overscroll-behavior-y: none; + } +} + +.flowchart { + --mermaid-node-fill: hsl(var(--color-neu-100)); + --mermaid-node-stroke: hsl(var(--color-neu-200)); + --mermaid-arrow: hsl(var(--color-neu-500)); + + margin: 1.5rem auto 0 auto; + + & .label text, + span { + font-size: 14px !important; + } + + & div:has(> .nodeLabel) { + display: unset !important; + } +} + +.dark .flowchart { + --mermaid-node-fill: hsl(var(--color-neu-50) / 0.5); + --mermaid-node-stroke: hsl(var(--color-neu-100)); + --mermaid-arrow: hsl(var(--color-neu-300)); +} diff --git a/src/nextra-theme-docs.css b/src/nextra-theme-docs.css new file mode 100644 index 0000000000..40b2f0449f --- /dev/null +++ b/src/nextra-theme-docs.css @@ -0,0 +1,2977 @@ +*, +:before, +:after, +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: #3b82f680; + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} +*, +:before, +:after { + box-sizing: border-box; + border: 0 solid #e5e7eb; +} +:before, +:after { + --tw-content: ""; +} +html, +:host { + -webkit-text-size-adjust: 100%; + tab-size: 4; + font-feature-settings: normal; + font-variation-settings: normal; + -webkit-tap-highlight-color: transparent; + font-family: + ui-sans-serif, + system-ui, + sans-serif, + Apple Color Emoji, + Segoe UI Emoji, + Segoe UI Symbol, + Noto Color Emoji; + line-height: 1.5; +} +body { + line-height: inherit; + margin: 0; +} +hr { + color: inherit; + border-top-width: 1px; + height: 0; +} +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} +a { + color: inherit; + -webkit-text-decoration: inherit; + text-decoration: inherit; +} +b, +strong { + font-weight: bolder; +} +code, +kbd, +samp, +pre { + font-feature-settings: normal; + font-variation-settings: normal; + font-family: + ui-monospace, + SFMono-Regular, + Menlo, + Monaco, + Consolas, + Liberation Mono, + Courier New, + monospace; + font-size: 1em; +} +small { + font-size: 80%; +} +sub, +sup { + vertical-align: baseline; + font-size: 75%; + line-height: 0; + position: relative; +} +sub { + bottom: -0.25em; +} +sup { + top: -0.5em; +} +table { + text-indent: 0; + border-color: inherit; + border-collapse: collapse; +} +button, +input, +optgroup, +select, +textarea { + font-feature-settings: inherit; + font-variation-settings: inherit; + font-family: inherit; + font-size: 100%; + font-weight: inherit; + line-height: inherit; + letter-spacing: inherit; + color: inherit; + margin: 0; + padding: 0; +} +button, +select { + text-transform: none; +} +button, +input:where([type="button"]), +input:where([type="reset"]), +input:where([type="submit"]) { + -webkit-appearance: button; + background-color: #0000; + background-image: none; +} +:-moz-focusring { + outline: auto; +} +:-moz-ui-invalid { + box-shadow: none; +} +progress { + vertical-align: baseline; +} +::-webkit-inner-spin-button { + height: auto; +} +::-webkit-outer-spin-button { + height: auto; +} +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} +::-webkit-search-decoration { + -webkit-appearance: none; +} +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} +summary { + display: list-item; +} +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} +fieldset { + margin: 0; + padding: 0; +} +legend { + padding: 0; +} +ol, +ul, +menu { + margin: 0; + padding: 0; + list-style: none; +} +dialog { + padding: 0; +} +textarea { + resize: vertical; +} +input::placeholder, +textarea::placeholder { + opacity: 1; + color: #9ca3af; +} +button, +[role="button"] { + cursor: pointer; +} +:disabled { + cursor: default; +} +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + vertical-align: middle; + display: block; +} +img, +video { + max-width: 100%; + height: auto; +} +[hidden]:where(:not([hidden="until-found"])) { + display: none; +} +._sr-only { + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + position: absolute; + overflow: hidden; +} +._pointer-events-none { + pointer-events: none; +} +._fixed { + position: fixed; +} +._absolute { + position: absolute; +} +._relative { + position: relative; +} +._sticky { + position: sticky; +} +._inset-0 { + inset: 0; +} +._bottom-0 { + bottom: 0; +} +._right-4 { + right: 1rem; +} +._top-0 { + top: 0; +} +._top-14 { + top: 3.5rem; +} +._top-2 { + top: 0.5rem; +} +._top-\[--nextra-navbar-height\] { + top: var(--nextra-navbar-height); +} +._z-10 { + z-index: 10; +} +._z-20 { + z-index: 20; +} +._z-\[1\] { + z-index: 1; +} +._order-first { + order: -9999; +} +._order-last { + order: 9999; +} +._m-0 { + margin: 0; +} +._-mx-6 { + margin-left: -1.5rem; + margin-right: -1.5rem; +} +._mx-1\.5 { + margin-left: 0.375rem; + margin-right: 0.375rem; +} +._mx-2 { + margin-left: 0.5rem; + margin-right: 0.5rem; +} +._mx-2\.5 { + margin-left: 0.625rem; + margin-right: 0.625rem; +} +._mx-3 { + margin-left: 0.75rem; + margin-right: 0.75rem; +} +._mx-4 { + margin-left: 1rem; + margin-right: 1rem; +} +._mx-auto { + margin-left: auto; + margin-right: auto; +} +._my-1\.5 { + margin-top: 0.375rem; + margin-bottom: 0.375rem; +} +._my-2 { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} +._my-4 { + margin-top: 1rem; + margin-bottom: 1rem; +} +._my-8 { + margin-top: 2rem; + margin-bottom: 2rem; +} +._-mb-0\.5 { + margin-bottom: -0.125rem; +} +._mb-12 { + margin-bottom: 3rem; +} +._mb-2 { + margin-bottom: 0.5rem; +} +._mb-8 { + margin-bottom: 2rem; +} +._ml-1 { + margin-left: 0.25rem; +} +._ml-2 { + margin-left: 0.5rem; +} +._ml-auto { + margin-left: auto; +} +._ms-12 { + margin-inline-start: 3rem; +} +._ms-16 { + margin-inline-start: 4rem; +} +._ms-4 { + margin-inline-start: 1rem; +} +._ms-8 { + margin-inline-start: 2rem; +} +._mt-1 { + margin-top: 0.25rem; +} +._mt-1\.5 { + margin-top: 0.375rem; +} +._mt-10 { + margin-top: 2.5rem; +} +._mt-12 { + margin-top: 3rem; +} +._mt-16 { + margin-top: 4rem; +} +._mt-2 { + margin-top: 0.5rem; +} +._mt-4 { + margin-top: 1rem; +} +._mt-6 { + margin-top: 1.5rem; +} +._mt-8 { + margin-top: 2rem; +} +._block { + display: block; +} +._inline-block { + display: inline-block; +} +._inline { + display: inline; +} +._flex { + display: flex; +} +._inline-flex { + display: inline-flex; +} +._grid { + display: grid; +} +._hidden { + display: none; +} +._size-5 { + width: 1.25rem; + height: 1.25rem; +} +._h-0 { + height: 0; +} +._h-12 { + height: 3rem; +} +._h-3\.5 { + height: 0.875rem; +} +._h-4 { + height: 1rem; +} +._h-5 { + height: 1.25rem; +} +._h-7 { + height: 1.75rem; +} +._h-\[var\(--nextra-banner-height\)\] { + height: var(--nextra-banner-height); +} +._h-\[var\(--nextra-navbar-height\)\] { + height: var(--nextra-navbar-height); +} +.\!_max-h-\[min\(calc\(100vh-5rem\)\,256px\)\] { + max-height: min(100vh - 5rem, 256px) !important; +} +._max-h-64 { + max-height: 16rem; +} +._max-h-\[calc\(100vh-var\(--nextra-navbar-height\)\)\] { + max-height: calc(100vh - var(--nextra-navbar-height)); +} +._min-h-\[calc\(100vh-var\(--nextra-navbar-height\)\)\] { + min-height: calc(100vh - var(--nextra-navbar-height)); +} +._w-5 { + width: 1.25rem; +} +._w-64 { + width: 16rem; +} +._w-auto { + width: auto; +} +._w-full { + width: 100%; +} +._min-w-0 { + min-width: 0; +} +._min-w-6 { + min-width: 1.5rem; +} +._min-w-\[--button-width\] { + min-width: var(--button-width); +} +.\!_max-w-2xl { + max-width: 42rem !important; +} +._max-w-6 { + max-width: 1.5rem; +} +._max-w-6xl { + max-width: 72rem; +} +._max-w-\[50\%\] { + max-width: 50%; +} +._max-w-\[90rem\] { + max-width: 90rem; +} +._shrink-0 { + flex-shrink: 0; +} +._grow { + flex-grow: 1; +} +._-rotate-90 { + --tw-rotate: -90deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) + rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +._transform-gpu { + transform: translate3d(var(--tw-translate-x), var(--tw-translate-y), 0) + rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +@keyframes _spin { + to { + transform: rotate(360deg); + } +} +._animate-spin { + animation: 1s linear infinite _spin; +} +._cursor-default { + cursor: default; +} +._cursor-pointer { + cursor: pointer; +} +._select-none { + -webkit-user-select: none; + user-select: none; +} +._scroll-m-12 { + scroll-margin: 3rem; +} +._scroll-my-6 { + scroll-margin-top: 1.5rem; + scroll-margin-bottom: 1.5rem; +} +._scroll-py-6 { + scroll-padding-top: 1.5rem; + scroll-padding-bottom: 1.5rem; +} +._list-decimal { + list-style-type: decimal; +} +._list-disc { + list-style-type: disc; +} +._list-none { + list-style-type: none; +} +._grid-rows-\[min-content_1fr_min-content\] { + grid-template-rows: min-content 1fr min-content; +} +._flex-col { + flex-direction: column; +} +._flex-wrap { + flex-wrap: wrap; +} +._items-start { + align-items: flex-start; +} +._items-center { + align-items: center; +} +._justify-start { + justify-content: flex-start; +} +._justify-end { + justify-content: flex-end; +} +._justify-center { + justify-content: center; +} +._justify-between { + justify-content: space-between; +} +._gap-1 { + gap: 0.25rem; +} +._gap-1\.5 { + gap: 0.375rem; +} +._gap-2 { + gap: 0.5rem; +} +._gap-3 { + gap: 0.75rem; +} +._gap-4 { + gap: 1rem; +} +._overflow-hidden { + overflow: hidden; +} +._overflow-x-auto { + overflow-x: auto; +} +._overflow-y-auto { + overflow-y: auto; +} +._overflow-y-hidden { + overflow-y: hidden; +} +._overscroll-y-contain { + overscroll-behavior-y: contain; +} +._overscroll-x-contain { + overscroll-behavior-x: contain; +} +._truncate { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} +._text-ellipsis { + text-overflow: ellipsis; +} +._hyphens-auto { + -webkit-hyphens: auto; + hyphens: auto; +} +._whitespace-nowrap { + white-space: nowrap; +} +._whitespace-pre-wrap { + white-space: pre-wrap; +} +._break-words { + overflow-wrap: break-word; +} +._rounded { + border-radius: 0.25rem; +} +._rounded-full { + border-radius: 9999px; +} +._rounded-b-md { + border-bottom-right-radius: 0.375rem; + border-bottom-left-radius: 0.375rem; +} +._rounded-t { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +._rounded-t-md { + border-top-left-radius: 0.375rem; + border-top-right-radius: 0.375rem; +} +._border { + border-width: 1px; +} +._border-b { + border-bottom-width: 1px; +} +._border-b-0 { + border-bottom-width: 0; +} +._border-b-2 { + border-bottom-width: 2px; +} +._border-s { + border-inline-start-width: 1px; +} +._border-t { + border-top-width: 1px; +} +._border-black\/10 { + border-color: #0000001a; +} +._border-black\/5 { + border-color: #0000000d; +} +._border-blue-200 { + --tw-border-opacity: 1; + border-color: rgb(191 219 254 / var(--tw-border-opacity, 1)); +} +._border-current { + border-color: currentColor; +} +._border-gray-200 { + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity, 1)); +} +._border-gray-300 { + --tw-border-opacity: 1; + border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); +} +._border-neutral-200\/70 { + border-color: #e5e5e5b3; +} +._border-orange-100 { + --tw-border-opacity: 1; + border-color: rgb(255 237 213 / var(--tw-border-opacity, 1)); +} +._border-red-200 { + --tw-border-opacity: 1; + border-color: rgb(254 202 202 / var(--tw-border-opacity, 1)); +} +._border-transparent { + border-color: #0000; +} +._border-yellow-100 { + --tw-border-opacity: 1; + border-color: rgb(254 249 195 / var(--tw-border-opacity, 1)); +} +._bg-\[rgb\(var\(--nextra-bg\)\,\.8\)\] { + background-color: rgb(var(--nextra-bg), 0.8); +} +._bg-black\/80 { + background-color: #000c; +} +._bg-black\/\[\.05\] { + background-color: #0000000d; +} +._bg-blue-100 { + --tw-bg-opacity: 1; + background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1)); +} +._bg-gray-100 { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); +} +._bg-gray-200 { + --tw-bg-opacity: 1; + background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); +} +._bg-gray-400\/20 { + background-color: #9ca3af33; +} +._bg-neutral-900 { + --tw-bg-opacity: 1; + background-color: rgb(23 23 23 / var(--tw-bg-opacity, 1)); +} +._bg-orange-50 { + --tw-bg-opacity: 1; + background-color: rgb(255 247 237 / var(--tw-bg-opacity, 1)); +} +._bg-primary-100 { + --tw-bg-opacity: 1; + background-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 49%) / var(--tw-bg-opacity, 1) + ); +} +._bg-primary-50 { + --tw-bg-opacity: 1; + background-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 52%) / var(--tw-bg-opacity, 1) + ); +} +._bg-primary-500\/10 { + background-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 5%) / 0.1 + ); +} +._bg-red-100 { + --tw-bg-opacity: 1; + background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1)); +} +._bg-transparent { + background-color: #0000; +} +._bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} +._bg-yellow-50 { + --tw-bg-opacity: 1; + background-color: rgb(254 252 232 / var(--tw-bg-opacity, 1)); +} +._p-0 { + padding: 0; +} +._p-0\.5 { + padding: 0.125rem; +} +._p-1 { + padding: 0.25rem; +} +._p-1\.5 { + padding: 0.375rem; +} +._p-2 { + padding: 0.5rem; +} +._p-4 { + padding: 1rem; +} +._p-8 { + padding: 2rem; +} +._px-1 { + padding-left: 0.25rem; + padding-right: 0.25rem; +} +._px-1\.5 { + padding-left: 0.375rem; + padding-right: 0.375rem; +} +._px-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} +._px-2\.5 { + padding-left: 0.625rem; + padding-right: 0.625rem; +} +._px-3 { + padding-left: 0.75rem; + padding-right: 0.75rem; +} +._px-4 { + padding-left: 1rem; + padding-right: 1rem; +} +._px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; +} +._py-1 { + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} +._py-1\.5 { + padding-top: 0.375rem; + padding-bottom: 0.375rem; +} +._py-12 { + padding-top: 3rem; + padding-bottom: 3rem; +} +._py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} +._py-2\.5 { + padding-top: 0.625rem; + padding-bottom: 0.625rem; +} +._py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} +._pb-1 { + padding-bottom: 0.25rem; +} +._pb-1\.5 { + padding-bottom: 0.375rem; +} +._pb-2 { + padding-bottom: 0.5rem; +} +._pb-4 { + padding-bottom: 1rem; +} +._pb-8 { + padding-bottom: 2rem; +} +._pb-\[env\(safe-area-inset-bottom\)\] { + padding-bottom: env(safe-area-inset-bottom); +} +._pb-px { + padding-bottom: 1px; +} +._pl-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\] { + padding-left: max(env(safe-area-inset-left), 1.5rem); +} +._pr-\[calc\(env\(safe-area-inset-right\)-1\.5rem\)\] { + padding-right: calc(env(safe-area-inset-right) - 1.5rem); +} +._pr-\[max\(env\(safe-area-inset-right\)\,1\.5rem\)\] { + padding-right: max(env(safe-area-inset-right), 1.5rem); +} +._ps-10 { + padding-inline-start: 2.5rem; +} +._ps-6 { + padding-inline-start: 1.5rem; +} +._pt-1 { + padding-top: 0.25rem; +} +._pt-4 { + padding-top: 1rem; +} +._pt-6 { + padding-top: 1.5rem; +} +._pt-8 { + padding-top: 2rem; +} +._text-left { + text-align: left; +} +._text-center { + text-align: center; +} +._font-mono { + @apply font-mono; +} +._text-2xl { + font-size: 1.5rem; +} +._text-3xl { + font-size: 1.875rem; +} +._text-4xl { + font-size: 2.25rem; +} +._text-\[\.9em\] { + font-size: 0.9em; +} +._text-\[11px\] { + font-size: 11px; +} +._text-base { + font-size: 1rem; +} +._text-lg { + font-size: 1.125rem; +} +._text-sm { + font-size: 0.875rem; +} +._text-xl { + font-size: 1.25rem; +} +._text-xs { + font-size: 0.75rem; +} +._font-bold { + font-weight: 700; +} +._font-extrabold { + font-weight: 800; +} +._font-medium { + font-weight: 500; +} +._font-normal { + font-weight: 400; +} +._font-semibold { + font-weight: 600; +} +._uppercase { + text-transform: uppercase; +} +._capitalize { + text-transform: capitalize; +} +._italic { + font-style: italic; +} +._leading-5 { + line-height: 1.25rem; +} +._leading-7 { + line-height: 1.75rem; +} +._leading-\[1\.35rem\] { + line-height: 1.35rem; +} +._leading-tight { + line-height: 1.25; +} +._tracking-tight { + letter-spacing: -0.015em; +} +._text-black { + --tw-text-opacity: 1; + color: rgb(0 0 0 / var(--tw-text-opacity, 1)); +} +._text-blue-900 { + --tw-text-opacity: 1; + color: rgb(30 58 138 / var(--tw-text-opacity, 1)); +} +._text-current { + color: currentColor; +} +._text-gray-100 { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity, 1)); +} +._text-gray-400 { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +._text-gray-500 { + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} +._text-gray-600 { + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity, 1)); +} +._text-gray-700 { + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity, 1)); +} +._text-gray-800 { + --tw-text-opacity: 1; + color: rgb(31 41 55 / var(--tw-text-opacity, 1)); +} +._text-gray-900 { + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +._text-orange-800 { + --tw-text-opacity: 1; + color: rgb(154 52 18 / var(--tw-text-opacity, 1)); +} +._text-primary-800 { + --tw-text-opacity: 1; + color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + -13%) / var(--tw-text-opacity, 1) + ); +} +._text-red-500 { + --tw-text-opacity: 1; + color: rgb(239 68 68 / var(--tw-text-opacity, 1)); +} +._text-red-900 { + --tw-text-opacity: 1; + color: rgb(127 29 29 / var(--tw-text-opacity, 1)); +} +._text-slate-50 { + --tw-text-opacity: 1; + color: rgb(248 250 252 / var(--tw-text-opacity, 1)); +} +._text-slate-900 { + --tw-text-opacity: 1; + color: rgb(15 23 42 / var(--tw-text-opacity, 1)); +} +._text-yellow-900 { + --tw-text-opacity: 1; + color: rgb(113 63 18 / var(--tw-text-opacity, 1)); +} +._underline { + text-decoration-line: underline; +} +._no-underline { + text-decoration-line: none; +} +._decoration-from-font { + text-decoration-thickness: from-font; +} +._subpixel-antialiased { + -webkit-font-smoothing: auto; + -moz-osx-font-smoothing: auto; +} +._opacity-0 { + opacity: 0; +} +._opacity-100 { + opacity: 1; +} +._opacity-25 { + opacity: 0.25; +} +._opacity-60 { + opacity: 0.6; +} +._opacity-75 { + opacity: 0.75; +} +._opacity-80 { + opacity: 0.8; +} +._shadow { + --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a; + --tw-shadow-colored: + 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); +} +._shadow-\[0_12px_16px_rgb\(var\(--nextra-bg\)\)\] { + --tw-shadow: 0 12px 16px rgb(var(--nextra-bg)); + --tw-shadow-colored: 0 12px 16px var(--tw-shadow-color); + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); +} +._shadow-lg { + --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a; + --tw-shadow-colored: + 0 10px 15px -3px var(--tw-shadow-color), + 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); +} +._shadow-sm { + --tw-shadow: 0 1px 2px 0 #0000000d; + --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); +} +._shadow-xl { + --tw-shadow: 0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a; + --tw-shadow-colored: + 0 20px 25px -5px var(--tw-shadow-color), + 0 8px 10px -6px var(--tw-shadow-color); + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); +} +._shadow-gray-100 { + --tw-shadow-color: #f3f4f6; + --tw-shadow: var(--tw-shadow-colored); +} +._outline-none { + outline-offset: 2px; + outline: 2px solid #0000; +} +._ring-1 { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 + var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 + calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: + var(--tw-ring-offset-shadow), var(--tw-ring-shadow), + var(--tw-shadow, 0 0 #0000); +} +._ring-inset { + --tw-ring-inset: inset; +} +._ring-gray-300 { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity, 1)); +} +._backdrop-blur-lg { + --tw-backdrop-blur: blur(16px); + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) + var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) + var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) + var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) + var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) + var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) + var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) + var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) + var(--tw-backdrop-sepia); +} +._transition { + transition-property: + color, + background-color, + border-color, + text-decoration-color, + fill, + stroke, + opacity, + box-shadow, + transform, + filter, + -webkit-backdrop-filter, + backdrop-filter; + transition-duration: 0.15s; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} +._transition-all { + transition-property: all; + transition-duration: 0.15s; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} +._transition-colors { + transition-property: + color, background-color, border-color, text-decoration-color, fill, stroke; + transition-duration: 0.15s; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} +._transition-opacity { + transition-property: opacity; + transition-duration: 0.15s; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} +._duration-200 { + transition-duration: 0.2s; +} +._ease-in-out { + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} +.\[counter-reset\:line\] { + counter-reset: line; +} +.\[text-underline-position\:from-font\] { + text-underline-position: from-font; +} +.\[transition\:background-color_1\.5s_ease\] { + transition: background-color 1.5s; +} +.\[word-break\:break-word\] { + word-break: break-word; +} +.nextra-code span { + background-color: var(--shiki-light-bg); + color: var(--shiki-light); +} +.nextra-code span:is(html[class~="dark"] *) { + background-color: var(--shiki-dark-bg); + color: var(--shiki-dark); +} +code.nextra-code { + -webkit-box-decoration-break: slice; + box-decoration-break: slice; + font-feature-settings: + "rlig" 1, + "calt" 1, + "ss01" 1; + font-size: 0.875rem; +} +:not(pre) > code.nextra-code:not([class*="twoslash-"]) { + overflow-wrap: break-word; + border-width: 1px; + border-color: rgb(0 0 0 / var(--tw-border-opacity, 1)); + --tw-border-opacity: 0.04; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); + --tw-bg-opacity: 0.03; + border-radius: 0.375rem; + padding: 0.125rem 0.25em; + font-size: 0.9em; +} +:not(pre) + > code.nextra-code:not([class*="twoslash-"]):is(html[class~="dark"] *) { + background-color: #ffffff1a; + border-color: #ffffff1a; +} +pre code.nextra-code:not([class*="twoslash-"]) { + display: grid; +} +pre code.nextra-code:not([class*="twoslash-"])[data-line-numbers] > span { + padding-left: 0.5rem; +} +pre + code.nextra-code:not([class*="twoslash-"])[data-line-numbers] + > span:before { + counter-increment: line; + content: counter(line); + text-align: right; + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); + min-width: 2.6rem; + padding-right: 1rem; + display: inline-block; +} +pre code.nextra-code:not([class*="twoslash-"]) > span { + padding-left: 1rem; + padding-right: 1rem; +} +pre code.nextra-code:not([class*="twoslash-"]) > span[data-highlighted-line] { + background-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 0%) / 0.1 + ); + --tw-shadow: 2px 0 currentColor inset; + --tw-shadow-colored: inset 2px 0 var(--tw-shadow-color); + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); + color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 0%) / 0.8 + ) !important; +} +pre + code.nextra-code:not([class*="twoslash-"]) + > span[data-highlighted-line]:is(html[class~="dark"] *) { + background-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 0%) / 0.2 + ); +} +pre code.nextra-code:not([class*="twoslash-"]) > span [data-highlighted-chars] { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 + var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 + calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: + var(--tw-ring-offset-shadow), var(--tw-ring-shadow), + var(--tw-shadow, 0 0 #0000); + --tw-ring-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 0%) / 0.2 + ); + border-radius: 0.125rem; +} +pre + code.nextra-code:not([class*="twoslash-"]) + > span + [data-highlighted-chars]:is(html[class~="dark"] *) { + --tw-ring-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 0%) / 0.4 + ); +} +pre code.nextra-code:not([class*="twoslash-"]) > span [data-highlighted-chars] { + background-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 0%) / 0.2 + ); +} +pre + code.nextra-code:not([class*="twoslash-"]) + > span + [data-highlighted-chars]:is(html[class~="dark"] *) { + background-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 0%) / 0.4 + ); +} +@media not all and (min-width: 768px) { + html[data-nextra-word-wrap] pre code.nextra-code:not([class*="twoslash-"]) { + white-space: pre-wrap; + } +} +.nextra-copy-icon { + animation: 0.3s forwards fade-in; +} +@keyframes fade-in { + 0% { + opacity: 0; + } + to { + opacity: 1; + } +} +:root { + --twoslash-border-color: #8888; + --twoslash-underline-color: currentColor; + --twoslash-highlighted-border: 195, 125, 13; + --twoslash-popup-bg: #f8f8f8; + --twoslash-popup-color: inherit; + --twoslash-popup-shadow: #000 0px 1px 4px; + --twoslash-docs-color: #888; + --twoslash-docs-font: sans-serif; + --twoslash-matched-color: inherit; + --twoslash-unmatched-color: #888; + --twoslash-cursor-color: #8888; + --twoslash-error-color: 212, 86, 86; + --twoslash-error-bg: rgba(var(--twoslash-error-color), 0.13); + --twoslash-tag-color: 55, 114, 207; + --twoslash-tag-warn-color: 195, 125, 13; + --twoslash-tag-annotate-color: 27, 166, 115; +} +.dark { + --twoslash-popup-bg: #000; + --twoslash-border-color: #404040; +} +@media (prefers-reduced-motion: reduce) { + .twoslash * { + transition: none !important; + } +} +.twoslash:hover .twoslash-hover { + border-color: var(--twoslash-underline-color); +} +.twoslash-hover { + border-bottom: 1px dotted #0000; + transition: border-color 0.3s; + position: relative; +} +.twoslash-popup-container { + z-index: 10; + color: var(--twoslash-popup-color); + border: 1px solid var(--twoslash-border-color); + text-align: left; + border-radius: 0.25rem; + flex-direction: column; + margin-top: 0.375rem; + transition-property: opacity; + transition-duration: 0.3s; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + display: inline-flex; + position: absolute; + transform: translateY(1.1em); + background: var(--twoslash-popup-bg) !important; +} +.twoslash-query-presisted .twoslash-popup-container { + z-index: 9; + transform: translateY(1.5em); +} +.twoslash-popup-arrow { + --tw-rotate: -45deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) + rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); + border-top-width: 1px; + border-right-width: 1px; + border-color: var(--twoslash-border-color); + background-color: var(--twoslash-popup-bg); + pointer-events: none; + width: 0.375rem; + height: 0.375rem; + position: absolute; + top: -0.25rem; + left: 1em; +} +.twoslash-popup-code, +.twoslash-popup-docs { + padding: 6px 8px; +} +.twoslash-popup-docs { + color: var(--twoslash-docs-color); + font-size: 0.875rem; + font-family: var(--twoslash-docs-font); + border-top: 1px solid var(--twoslash-border-color); +} +.twoslash-popup-docs-tags { + font-family: var(--twoslash-docs-font); + flex-direction: column; + display: flex; +} +.twoslash-popup-docs-tags, +.twoslash-popup-docs-tag-name { + margin-right: 0.5em; +} +.twoslash-error-line { + background-color: var(--twoslash-error-bg); + color: rgb(var(--twoslash-error-color)); + border-left: 3px solid; + margin: 0.2em 0; + padding: 6px 12px; + position: relative; +} +.twoslash-error { + background: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%206%203'%20enable-background%3D'new%200%200%206%203'%20height%3D'3'%20width%3D'6'%3E%3Cg%20fill%3D'%23c94824'%3E%3Cpolygon%20points%3D'5.5%2C0%202.5%2C3%201.1%2C3%204.1%2C0'%2F%3E%3Cpolygon%20points%3D'4%2C0%206%2C2%206%2C0.6%205.4%2C0'%2F%3E%3Cpolygon%20points%3D'0%2C2%201%2C3%202.4%2C3%200%2C0.6'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") + 0 100% repeat-x; + padding-bottom: 2px; +} +.twoslash-completion-cursor { + position: relative; +} +.twoslash-completion-cursor .twoslash-completion-list { + background: var(--twoslash-popup-bg); + border-width: 1px; + border-color: var(--twoslash-border-color); + border-radius: 0.25rem; + position: absolute; + top: 0.25rem; + left: 0; + transform: translateY(1.2em); +} +.twoslash-completion-list { + width: 15rem; + padding: 0.25rem 0.5rem; +} +.twoslash-completion-list:before { + background-color: var(--twoslash-cursor-color); + content: " "; + width: 2px; + height: 1.4em; + position: absolute; + top: -1.6em; + left: -1px; +} +.twoslash-completion-list li { + align-items: center; + gap: 0.25em; + line-height: 1em; + display: flex; + overflow: hidden; +} +.twoslash-completion-list li span.twoslash-completions-unmatched { + color: var(--twoslash-unmatched-color); +} +.twoslash-completion-list .deprecated { + opacity: 0.5; + text-decoration: line-through; +} +.twoslash-completion-list li span.twoslash-completions-matched { + color: var(--twoslash-matched-color); +} +.twoslash-highlighted { + background-color: rgba(var(--twoslash-highlighted-border), 0.13); + border: 1px solid rgba(var(--twoslash-highlighted-border), 0.31); + border-radius: 4px; + margin: -1px -3px; + padding: 1px 2px; +} +.twoslash-completion-list .twoslash-completions-icon { + color: var(--twoslash-unmatched-color); + flex: none; + width: 1em; +} +.twoslash-tag-line { + background-color: rgba(var(--twoslash-tag-color), 0.13); + color: rgb(var(--twoslash-tag-color)); + border-left: 3px solid; + align-items: center; + gap: 0.3em; + margin: 0.2em 0; + padding: 6px 10px; + display: flex; + position: relative; +} +.twoslash-tag-line .twoslash-tag-icon { + color: inherit; + width: 1.1em; +} +.twoslash-tag-line.twoslash-tag-error-line { + background-color: var(--twoslash-error-bg); + color: rgb(var(--twoslash-error-color)); +} +.twoslash-tag-line.twoslash-tag-warn-line { + background-color: rgba(var(--twoslash-tag-warn-color), 0.13); + color: rgb(var(--twoslash-tag-warn-color)); +} +.twoslash-tag-line.twoslash-tag-annotate-line { + background-color: rgba(var(--twoslash-tag-annotate-color), 0.13); + color: rgb(var(--twoslash-tag-annotate-color)); +} +.subheading-anchor { + opacity: 0; + transition-property: opacity; + transition-duration: 0.15s; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} +.subheading-anchor:where([dir="ltr"], [dir="ltr"] *) { + margin-left: 0.25rem; +} +.subheading-anchor:where([dir="rtl"], [dir="rtl"] *) { + margin-right: 0.25rem; +} +:target > .subheading-anchor, +.subheading-anchor:hover, +.subheading-anchor:focus { + opacity: 1; +} +:target > .subheading-anchor:after { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +:target > .subheading-anchor:is(html[class~="dark"] *):after { + --tw-text-opacity: 1; + color: rgb(115 115 115 / var(--tw-text-opacity, 1)); +} +.subheading-anchor:after { + --tw-content: "#"; + content: var(--tw-content); + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity, 1)); + padding-left: 0.25rem; + padding-right: 0.25rem; +} +.subheading-anchor:is(html[class~="dark"] *):after { + --tw-text-opacity: 1; + color: rgb(64 64 64 / var(--tw-text-opacity, 1)); +} +.nextra-scrollbar { + scrollbar-width: thin; + scrollbar-color: #73737366 transparent; + scrollbar-gutter: stable; +} +.nextra-scrollbar::-webkit-scrollbar { + width: 0.75rem; + height: 0.75rem; +} +.nextra-scrollbar::-webkit-scrollbar-track { + background-color: #0000; +} +.nextra-scrollbar::-webkit-scrollbar-thumb { + border-radius: 10px; +} +.nextra-scrollbar::-webkit-scrollbar-thumb:hover { + background-color: var(--tw-shadow-color); + --tw-shadow-color: #73737333; + --tw-shadow: var(--tw-shadow-colored); + background-clip: content-box; + border: 3px solid #0000; +} +.nextra-scrollbar::-webkit-scrollbar-thumb:hover:hover { + --tw-shadow-color: #73737366; + --tw-shadow: var(--tw-shadow-colored); +} +.no-scrollbar { + scrollbar-width: none; + -ms-overflow-style: none; +} +.no-scrollbar::-webkit-scrollbar { + display: none; +} +.nextra-steps h2, +.nextra-steps h3, +.nextra-steps h4 { + counter-increment: var(--counter-id); + letter-spacing: -0.015em; + border-width: 0; + margin-top: 2rem; + padding-bottom: 0; + font-size: 1.5rem; + font-weight: 600; +} +.nextra-steps h2:before, +.nextra-steps h3:before, +.nextra-steps h4:before { + border-width: 4px; + border-color: rgb(var(--nextra-bg)); + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); + width: 33px; + height: 33px; + position: absolute; +} +.nextra-steps h2:is(html[class~="dark"] *):before, +.nextra-steps h3:is(html[class~="dark"] *):before, +.nextra-steps h4:is(html[class~="dark"] *):before { + --tw-bg-opacity: 1; + background-color: rgb(38 38 38 / var(--tw-bg-opacity, 1)); +} +.nextra-steps h2:before, +.nextra-steps h3:before, +.nextra-steps h4:before { + text-align: center; + text-indent: -1px; + --tw-text-opacity: 1; + color: rgb(163 163 163 / var(--tw-text-opacity, 1)); + margin-top: 3px; + content: counter(var(--counter-id)); + border-radius: 9999px; + margin-inline-start: -41px; + font-size: 1rem; + font-weight: 400; +} +.nextra-cards { + grid-template-columns: repeat( + auto-fill, + minmax(max(250px, calc((100% - 1rem * 2) / var(--rows))), 1fr) + ); +} +.nextra-card img { + -webkit-user-select: none; + user-select: none; +} +.nextra-card svg { + color: #0000004d; + flex-shrink: 0; + width: 1.5rem; + height: auto; + transition-property: + color, + background-color, + border-color, + text-decoration-color, + fill, + stroke, + opacity, + box-shadow, + transform, + filter, + -webkit-backdrop-filter, + backdrop-filter; + transition-duration: 0.15s; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} +.nextra-card svg:is(html[class~="dark"] *) { + color: #fff6; +} +.nextra-card:hover svg { + color: currentColor !important; +} +.nextra-card p { + margin-top: 0.5rem; +} +[data-rmiz-ghost] { + pointer-events: none; + position: absolute; +} +[data-rmiz-btn-zoom], +[data-rmiz-btn-unzoom] { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); + background-color: #000000b3; + border-radius: 9999px; + width: 2.5rem; + height: 2.5rem; +} +[data-rmiz-btn-zoom]:is(html[class~="dark"] *), +[data-rmiz-btn-unzoom]:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(0 0 0 / var(--tw-text-opacity, 1)); + background-color: #ffffffb3; +} +[data-rmiz-btn-zoom], +[data-rmiz-btn-unzoom] { + outline-offset: 2px; + touch-action: manipulation; + appearance: none; + padding: 9px; +} +[data-rmiz-btn-zoom] { + cursor: zoom-in; + position: absolute; + inset: 10px 10px auto auto; +} +[data-rmiz-btn-zoom]:not(:focus):not(:active) { + clip: rect(0 0 0 0); + clip-path: inset(50%); + pointer-events: none; + white-space: nowrap; + width: 1px; + height: 1px; + position: absolute; + overflow: hidden; +} +[data-rmiz-btn-unzoom] { + cursor: zoom-out; + z-index: 1; + position: absolute; + inset: 20px 20px auto auto; +} +[data-rmiz-content="found"] img, +[data-rmiz-content="found"] svg, +[data-rmiz-content="found"] [role="img"], +[data-rmiz-content="found"] [data-zoom] { + cursor: zoom-in; +} +[data-rmiz-modal]::backdrop { + display: none; +} +[data-rmiz-modal][open] { + background: 0 0; + border: 0; + width: 100dvw; + max-width: none; + height: 100dvh; + max-height: none; + margin: 0; + padding: 0; + position: fixed; + overflow: hidden; +} +[data-rmiz-modal-overlay] { + background: rgba(var(--nextra-bg), 0.8); + transition: opacity 0.3s; + position: absolute; + inset: 0; +} +[data-rmiz-modal-overlay="hidden"] { + opacity: 0; +} +[data-rmiz-modal-overlay="visible"] { + opacity: 1; +} +[data-rmiz-modal-content] { + width: 100%; + height: 100%; + position: relative; +} +[data-rmiz-modal-img] { + cursor: zoom-out; + image-rendering: high-quality; + transform-origin: 0 0; + transition: transform 0.3s; + position: absolute; +} +@media (prefers-reduced-motion: reduce) { + [data-rmiz-modal-overlay], + [data-rmiz-modal-img] { + transition-duration: 0.01ms; + } + .nextra-hamburger svg g, + .nextra-hamburger svg path { + transition-property: none !important; + } +} +.nextra-hamburger svg { + --transition: transform 0.15s cubic-bezier(0.25, 1, 0.5, 1); +} +.nextra-hamburger svg g { + transform-origin: 50%; + transition: var(--transition); +} +.nextra-hamburger svg path { + opacity: 1; + transition: + var(--transition) 0.15s, + opacity 0.15s ease 0.15s; +} +.nextra-hamburger svg.open path { + transition: + var(--transition), + opacity 0s ease 0.15s; +} +.nextra-hamburger svg.open g { + transition: var(--transition) 0.15s; +} +.nextra-hamburger svg.open > path { + opacity: 0; +} +.nextra-hamburger svg.open > g:first-of-type { + transform: rotate(45deg); +} +.nextra-hamburger svg.open > g:first-of-type path { + transform: translateY(6px); +} +.nextra-hamburger svg.open > g:nth-of-type(2) { + transform: rotate(-45deg); +} +.nextra-hamburger svg.open > g:nth-of-type(2) path { + transform: translateY(-6px); +} +article.nextra-body-typesetting-article { + font-feature-settings: + "rlig" 1, + "calt" 1; + font-size: 17px; +} +article.nextra-body-typesetting-article h1 { + text-align: center; + margin-top: 1.5rem; + margin-bottom: 1rem; + font-size: 2.5rem; +} +article.nextra-body-typesetting-article h2 { + border-style: none; +} +article.nextra-body-typesetting-article a { + text-decoration-line: none; +} +article.nextra-body-typesetting-article a:hover { + text-decoration-line: underline; +} +article.nextra-body-typesetting-article p { + line-height: 2rem; +} +article.nextra-body-typesetting-article code { + border-style: none; +} +article.nextra-body-typesetting-article code:is(html[class~="dark"] *) { + --tw-bg-opacity: 1; + background-color: rgb(64 64 64 / var(--tw-bg-opacity, 1)); +} +article.nextra-body-typesetting-article pre code:is(html[class~="dark"] *) { + background-color: #0000; +} +article.nextra-body-typesetting-article .subheading-anchor:hover { + text-decoration-line: none; +} +html { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-feature-settings: + "rlig" 1, + "calt" 1, + "ss01" 1; + -webkit-tap-highlight-color: transparent; + font-size: 1rem; +} +html:not(:has(:focus)) { + scroll-padding-top: var(--nextra-navbar-height); +} +body { + width: 100%; +} +body:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity, 1)); +} +.nextra-focusable, +.nextra-focus:focus-visible { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 + var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 + calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: + var(--tw-ring-offset-shadow), var(--tw-ring-shadow), + var(--tw-shadow, 0 0 #0000); + --tw-ring-opacity: 1; + --tw-ring-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 41%) / var(--tw-ring-opacity, 1) + ); + --tw-ring-offset-width: 1px; + --tw-ring-offset-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 32%) + ); +} +.nextra-focusable:is(html[class~="dark"] *), +.nextra-focus:focus-visible:is(html[class~="dark"] *) { + --tw-ring-opacity: 1; + --tw-ring-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + -13%) / var(--tw-ring-opacity, 1) + ); + --tw-ring-offset-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + -6%) + ); +} +.nextra-focusable:focus-visible, +.nextra-focus:focus-visible { + outline-offset: 2px; + outline: 2px solid #0000; +} +.nextra-content { + --tw-text-opacity: 1; + color: hsl(var(--color-neu-800) / var(--tw-text-opacity, 1)); +} +@media (max-width: 767px) { + .nextra-sidebar-container { + z-index: 15; + overscroll-behavior: contain; + padding-top: calc(var(--nextra-navbar-height)); + will-change: transform, opacity; + contain: layout style; + backface-visibility: hidden; + width: 100%; + transition: transform 0.6s cubic-bezier(0.52, 0.16, 0.04, 1); + position: fixed; + top: 0; + bottom: 0; + } + .nextra-sidebar-container > .nextra-scrollbar { + -webkit-mask-image: + linear-gradient(#0000, #000 20px), + linear-gradient(270deg, #000 10px, #0000 10px); + mask-image: + linear-gradient(#0000, #000 20px), + linear-gradient(270deg, #000 10px, #0000 10px); + } + .nextra-banner-container ~ div .nextra-sidebar-container { + padding-top: 6.5rem; + } + .nextra-banner-container ~ div.nextra-nav-container { + top: 2.5rem; + } + @media (min-width: 768px) { + .nextra-banner-container ~ div.nextra-nav-container { + top: 0; + } + } + .nextra-banner-hidden + .nextra-banner-container + ~ div + .nextra-sidebar-container { + padding-top: 4rem; + } + .nextra-banner-hidden .nextra-nav-container { + top: 0 !important; + } + .nextra-search .excerpt { + text-overflow: ellipsis; + line-clamp: 1; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + display: -webkit-box; + overflow: hidden; + } +} +@media (min-width: 768px) { + .nextra-toc > .div, + .nextra-sidebar-container { + -webkit-mask-image: + linear-gradient(#0000, #000 20px), + linear-gradient(270deg, #000 10px, #0000 10px); + mask-image: + linear-gradient(#0000, #000 20px), + linear-gradient(270deg, #000 10px, #0000 10px); + } +} +.contains-task-list { + margin-left: 0; + list-style-type: none; +} +.contains-task-list input[type="checkbox"] { + margin-right: 0.25rem; +} +.nextra-sidebar-container [data-toggle-animation="show"] button { + opacity: 0; + animation: 1s 0.2s forwards nextra-fadein; +} +.nextra-sidebar-container [data-toggle-animation="hide"] button { + opacity: 0; + animation: 1s 0.2s forwards nextra-fadein2; +} +.footnotes a[data-footnote-backref] { + font-family: initial; +} +@keyframes nextra-fadein { + 0% { + opacity: 0; + } + to { + opacity: 1; + } +} +@keyframes nextra-fadein2 { + 0% { + opacity: 0; + } + to { + opacity: 1; + } +} +body, +.nextra-nav-container-blur, +.nextra-sidebar-footer { + background-color: rgb(var(--nextra-bg)); +} +@media not all and (min-width: 768px) { + .nextra-sidebar-container { + background-color: rgb(var(--nextra-bg)); + } +} +.nextra-toc-footer, +.nextra-sidebar-footer { + border-top-width: 1px; +} +.nextra-toc-footer:is(html[class~="dark"] *), +.nextra-sidebar-footer:is(html[class~="dark"] *) { + --tw-border-opacity: 1; + border-color: rgb(38 38 38 / var(--tw-border-opacity, 1)); +} +@media (prefers-contrast: more) { + .nextra-toc-footer, + .nextra-sidebar-footer { + --tw-border-opacity: 1; + border-color: rgb(163 163 163 / var(--tw-border-opacity, 1)); + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); + } + .nextra-toc-footer:is(html[class~="dark"] *), + .nextra-sidebar-footer:is(html[class~="dark"] *) { + --tw-border-opacity: 1; + border-color: rgb(163 163 163 / var(--tw-border-opacity, 1)); + } +} +.nextra-toc-footer, +.nextra-sidebar-footer { + --tw-shadow: 0 -12px 16px rgb(var(--nextra-bg)); + --tw-shadow-colored: 0 -12px 16px var(--tw-shadow-color); + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); +} +.\*\:_origin-center > * { + transform-origin: 50%; +} +.\*\:_rotate-90 > * { + --tw-rotate: 90deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) + rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.\*\:_transition-transform > * { + transition-property: transform; + transition-duration: 0.15s; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} +.placeholder\:_text-gray-500::placeholder { + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity, 1)); +} +.before\:_absolute:before { + content: var(--tw-content); + position: absolute; +} +.before\:_inset-y-1:before { + content: var(--tw-content); + top: 0.25rem; + bottom: 0.25rem; +} +.before\:_w-px:before { + content: var(--tw-content); + width: 1px; +} +.before\:_bg-gray-200:before { + content: var(--tw-content); + --tw-bg-opacity: 1; + background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1)); +} +.before\:_opacity-25:before { + content: var(--tw-content); + opacity: 0.25; +} +.before\:_content-\[\"\"\]:before { + --tw-content: ""; + content: var(--tw-content); +} +.before\:_content-\[\"\#\"\]:before { + --tw-content: "#"; + content: var(--tw-content); +} +.after\:_transition-transform:after { + content: var(--tw-content); + transition-property: transform; + transition-duration: 0.15s; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} +.after\:_duration-75:after { + content: var(--tw-content); + transition-duration: 75ms; +} +.after\:_content-\[\"→\"\]:after { + --tw-content: "→"; + content: var(--tw-content); +} +.first\:\*\:_origin-\[35\%\] > :first-child { + transform-origin: 35%; +} +.first\:\*\:_rotate-180 > :first-child { + --tw-rotate: 180deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) + rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.even\:_bg-gray-100:nth-child(2n) { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); +} +.empty\:_invisible:empty { + visibility: hidden; +} +.focus-within\:_opacity-100:focus-within { + opacity: 1; +} +.hover\:_border-gray-300:hover { + --tw-border-opacity: 1; + border-color: rgb(209 213 219 / var(--tw-border-opacity, 1)); +} +.hover\:_bg-gray-100:hover { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1)); +} +.hover\:_bg-gray-800\/5:hover { + background-color: #1f29370d; +} +.hover\:_bg-slate-50:hover { + --tw-bg-opacity: 1; + background-color: rgb(248 250 252 / var(--tw-bg-opacity, 1)); +} +.hover\:_text-gray-800:hover { + --tw-text-opacity: 1; + color: rgb(31 41 55 / var(--tw-text-opacity, 1)); +} +.hover\:_text-gray-900:hover { + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.hover\:_no-underline:hover { + text-decoration-line: none; +} +.hover\:_opacity-75:hover { + opacity: 0.75; +} +.hover\:_shadow-lg:hover { + --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a; + --tw-shadow-colored: + 0 10px 15px -3px var(--tw-shadow-color), + 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); +} +.hover\:_shadow-md:hover { + --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a; + --tw-shadow-colored: + 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); +} +.hover\:_shadow-gray-100:hover { + --tw-shadow-color: #f3f4f6; + --tw-shadow: var(--tw-shadow-colored); +} +.focus\:_not-sr-only:focus { + clip: auto; + white-space: normal; + width: auto; + height: auto; + margin: 0; + padding: 0; + position: static; + overflow: visible; +} +.focus\:_fixed:focus { + position: fixed; +} +.focus\:_z-50:focus { + z-index: 50; +} +.focus\:_m-3:focus { + margin: 0.75rem; +} +.focus\:_ml-4:focus { + margin-left: 1rem; +} +.focus\:_h-\[calc\(var\(--nextra-navbar-height\)-1\.5rem\)\]:focus { + height: calc(var(--nextra-navbar-height) - 1.5rem); +} +.focus\:_rounded-lg:focus { + border-radius: 0.5rem; +} +.focus\:_border:focus { + border-width: 1px; +} +.focus\:_border-neutral-400:focus { + --tw-border-opacity: 1; + border-color: rgb(163 163 163 / var(--tw-border-opacity, 1)); +} +.focus\:_bg-white:focus { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1)); +} +.focus\:_px-3:focus { + padding-left: 0.75rem; + padding-right: 0.75rem; +} +.focus\:_py-2:focus { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} +.focus\:_align-middle:focus { + vertical-align: middle; +} +.focus\:_text-sm:focus { + font-size: 0.875rem; +} +.focus\:_font-bold:focus { + font-weight: 700; +} +.focus\:_text-gray-900:focus { + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); +} +.active\:_shadow-sm:active { + --tw-shadow: 0 1px 2px 0 #0000000d; + --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); +} +.active\:_shadow-gray-200:active { + --tw-shadow-color: #e5e7eb; + --tw-shadow: var(--tw-shadow-colored); +} +._group:hover .after\:group-hover\:_translate-x-0\.5:after { + content: var(--tw-content); + --tw-translate-x: 0.125rem; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) + rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +@media (prefers-reduced-motion: reduce) { + .motion-reduce\:_transform-none { + transform: none; + } + .motion-reduce\:_transition-none, + .motion-reduce\:\*\:_transition-none > * { + transition-property: none; + } +} +@media (prefers-contrast: more) { + .contrast-more\:_border { + border-width: 1px; + } + .contrast-more\:_border-current { + border-color: currentColor; + } + .contrast-more\:_border-gray-600 { + --tw-border-opacity: 1; + border-color: rgb(75 85 99 / var(--tw-border-opacity, 1)); + } + .contrast-more\:_border-gray-900 { + --tw-border-opacity: 1; + border-color: rgb(17 24 39 / var(--tw-border-opacity, 1)); + } + .contrast-more\:_border-neutral-400 { + --tw-border-opacity: 1; + border-color: rgb(163 163 163 / var(--tw-border-opacity, 1)); + } + .contrast-more\:_border-primary-500 { + --tw-border-opacity: 1; + border-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 5%) / var(--tw-border-opacity, 1) + ); + } + .contrast-more\:_border-transparent { + border-color: #0000; + } + .contrast-more\:_font-bold { + font-weight: 700; + } + .contrast-more\:_text-current { + color: currentColor; + } + .contrast-more\:_text-gray-700 { + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity, 1)); + } + .contrast-more\:_text-gray-800 { + --tw-text-opacity: 1; + color: rgb(31 41 55 / var(--tw-text-opacity, 1)); + } + .contrast-more\:_text-gray-900 { + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity, 1)); + } + .contrast-more\:_underline { + text-decoration-line: underline; + } + .contrast-more\:_shadow-none { + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); + } + .contrast-more\:_ring-gray-900 { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(17 24 39 / var(--tw-ring-opacity, 1)); + } + .contrast-more\:_contrast-150 { + --tw-contrast: contrast(1.5); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) + var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) + var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); + } + .contrast-more\:hover\:_border-gray-900:hover { + --tw-border-opacity: 1; + border-color: rgb(17 24 39 / var(--tw-border-opacity, 1)); + } +} +.dark\:_border-blue-200\/30:is(html[class~="dark"] *) { + border-color: #bfdbfe4d; +} +.dark\:_border-gray-100\/20:is(html[class~="dark"] *) { + border-color: #f3f4f633; +} +.dark\:_border-gray-600:is(html[class~="dark"] *) { + --tw-border-opacity: 1; + border-color: rgb(75 85 99 / var(--tw-border-opacity, 1)); +} +.dark\:_border-gray-700:is(html[class~="dark"] *) { + --tw-border-opacity: 1; + border-color: rgb(55 65 81 / var(--tw-border-opacity, 1)); +} +.dark\:_border-neutral-700:is(html[class~="dark"] *) { + --tw-border-opacity: 1; + border-color: rgb(64 64 64 / var(--tw-border-opacity, 1)); +} +.dark\:_border-neutral-800:is(html[class~="dark"] *) { + --tw-border-opacity: 1; + border-color: rgb(38 38 38 / var(--tw-border-opacity, 1)); +} +.dark\:_border-orange-400\/30:is(html[class~="dark"] *) { + border-color: #fb923c4d; +} +.dark\:_border-primary-100\/10:is(html[class~="dark"] *) { + border-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 49%) / 0.1 + ); +} +.dark\:_border-red-200\/30:is(html[class~="dark"] *) { + border-color: #fecaca4d; +} +.dark\:_border-white\/20:is(html[class~="dark"] *) { + border-color: #fff3; +} +.dark\:_border-yellow-200\/30:is(html[class~="dark"] *) { + border-color: #fef08a4d; +} +.dark\:_bg-black:is(html[class~="dark"] *) { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1)); +} +.dark\:_bg-black\/50:is(html[class~="dark"] *) { + background-color: #00000080; +} +.dark\:_bg-black\/60:is(html[class~="dark"] *) { + background-color: #0009; +} +.dark\:_bg-blue-900\/30:is(html[class~="dark"] *) { + background-color: #1e3a8a4d; +} +.dark\:_bg-gray-50\/10:is(html[class~="dark"] *) { + background-color: #f9fafb1a; +} +.dark\:_bg-neutral-800:is(html[class~="dark"] *) { + --tw-bg-opacity: 1; + background-color: rgb(38 38 38 / var(--tw-bg-opacity, 1)); +} +.dark\:_bg-neutral-900:is(html[class~="dark"] *) { + --tw-bg-opacity: 1; + background-color: rgb(23 23 23 / var(--tw-bg-opacity, 1)); +} +.dark\:_bg-orange-400\/20:is(html[class~="dark"] *) { + background-color: #fb923c33; +} +.dark\:_bg-primary-100\/10:is(html[class~="dark"] *) { + background-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 49%) / 0.1 + ); +} +.dark\:_bg-primary-100\/5:is(html[class~="dark"] *) { + background-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 49%) / 0.05 + ); +} +.dark\:_bg-primary-400\/10:is(html[class~="dark"] *) { + background-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 21%) / 0.1 + ); +} +.dark\:_bg-primary-500\/10:is(html[class~="dark"] *) { + background-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 5%) / 0.1 + ); +} +.dark\:_bg-red-900\/30:is(html[class~="dark"] *) { + background-color: #7f1d1d4d; +} +.dark\:_bg-yellow-700\/30:is(html[class~="dark"] *) { + background-color: #a162074d; +} +.dark\:_bg-\[linear-gradient\(1deg\,\#383838\,\#212121\)\]:is( + html[class~="dark"] * + ) { + background-image: linear-gradient(1deg, #383838, #212121); +} +.dark\:_text-blue-200:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(191 219 254 / var(--tw-text-opacity, 1)); +} +.dark\:_text-gray-100:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity, 1)); +} +.dark\:_text-gray-200:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(229 231 235 / var(--tw-text-opacity, 1)); +} +.dark\:_text-gray-300:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity, 1)); +} +.dark\:_text-gray-400:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.dark\:_text-gray-50:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(249 250 251 / var(--tw-text-opacity, 1)); +} +.dark\:_text-neutral-200:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(229 229 229 / var(--tw-text-opacity, 1)); +} +.dark\:_text-neutral-400:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(163 163 163 / var(--tw-text-opacity, 1)); +} +.dark\:_text-neutral-600:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(82 82 82 / var(--tw-text-opacity, 1)); +} +.dark\:_text-orange-300:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(253 186 116 / var(--tw-text-opacity, 1)); +} +.dark\:_text-red-200:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(254 202 202 / var(--tw-text-opacity, 1)); +} +.dark\:_text-slate-100:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(241 245 249 / var(--tw-text-opacity, 1)); +} +.dark\:_text-white:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} +.dark\:_text-yellow-200:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(254 240 138 / var(--tw-text-opacity, 1)); +} +.dark\:_shadow-none:is(html[class~="dark"] *) { + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); +} +.dark\:_ring-neutral-700:is(html[class~="dark"] *) { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(64 64 64 / var(--tw-ring-opacity, 1)); +} +.dark\:placeholder\:_text-gray-400:is(html[class~="dark"] *)::placeholder { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity, 1)); +} +.dark\:before\:_bg-neutral-800:is(html[class~="dark"] *):before { + content: var(--tw-content); + --tw-bg-opacity: 1; + background-color: rgb(38 38 38 / var(--tw-bg-opacity, 1)); +} +.even\:dark\:_bg-gray-600\/20:is(html[class~="dark"] *):nth-child(2n) { + background-color: #4b556333; +} +.dark\:hover\:_border-neutral-500:hover:is(html[class~="dark"] *) { + --tw-border-opacity: 1; + border-color: rgb(115 115 115 / var(--tw-border-opacity, 1)); +} +.dark\:hover\:_border-neutral-700:hover:is(html[class~="dark"] *) { + --tw-border-opacity: 1; + border-color: rgb(64 64 64 / var(--tw-border-opacity, 1)); +} +.dark\:hover\:_bg-gray-100\/5:hover:is(html[class~="dark"] *) { + background-color: #f3f4f60d; +} +.dark\:hover\:_bg-neutral-700:hover:is(html[class~="dark"] *) { + --tw-bg-opacity: 1; + background-color: rgb(64 64 64 / var(--tw-bg-opacity, 1)); +} +.dark\:hover\:_bg-neutral-800:hover:is(html[class~="dark"] *) { + --tw-bg-opacity: 1; + background-color: rgb(38 38 38 / var(--tw-bg-opacity, 1)); +} +.dark\:hover\:_bg-neutral-900:hover:is(html[class~="dark"] *) { + --tw-bg-opacity: 1; + background-color: rgb(23 23 23 / var(--tw-bg-opacity, 1)); +} +.dark\:hover\:_bg-primary-100\/5:hover:is(html[class~="dark"] *) { + background-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 49%) / 0.05 + ); +} +.dark\:hover\:_text-gray-100:hover:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity, 1)); +} +.dark\:hover\:_text-gray-200:hover:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(229 231 235 / var(--tw-text-opacity, 1)); +} +.dark\:hover\:_text-gray-300:hover:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity, 1)); +} +.dark\:hover\:_text-gray-50:hover:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(249 250 251 / var(--tw-text-opacity, 1)); +} +.dark\:hover\:_text-neutral-50:hover:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(250 250 250 / var(--tw-text-opacity, 1)); +} +.dark\:hover\:_shadow-none:hover:is(html[class~="dark"] *) { + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + box-shadow: + var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); +} +.focus\:dark\:_border-neutral-800:is(html[class~="dark"] *):focus { + --tw-border-opacity: 1; + border-color: rgb(38 38 38 / var(--tw-border-opacity, 1)); +} +.focus\:dark\:_bg-neutral-900:is(html[class~="dark"] *):focus { + --tw-bg-opacity: 1; + background-color: rgb(23 23 23 / var(--tw-bg-opacity, 1)); +} +.focus\:dark\:_text-gray-100:is(html[class~="dark"] *):focus { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity, 1)); +} +@media (prefers-contrast: more) { + .contrast-more\:dark\:_border-current:is(html[class~="dark"] *) { + border-color: currentColor; + } + .contrast-more\:dark\:_border-gray-50:is(html[class~="dark"] *) { + --tw-border-opacity: 1; + border-color: rgb(249 250 251 / var(--tw-border-opacity, 1)); + } + .contrast-more\:dark\:_border-neutral-400:is(html[class~="dark"] *) { + --tw-border-opacity: 1; + border-color: rgb(163 163 163 / var(--tw-border-opacity, 1)); + } + .contrast-more\:dark\:_border-primary-500:is(html[class~="dark"] *) { + --tw-border-opacity: 1; + border-color: hsl( + var(--nextra-primary-hue) var(--nextra-primary-saturation) + calc(var(--nextra-primary-lightness) + 5%) / var(--tw-border-opacity, 1) + ); + } + .dark\:contrast-more\:_border-neutral-400:is(html[class~="dark"] *) { + --tw-border-opacity: 1; + border-color: rgb(163 163 163 / var(--tw-border-opacity, 1)); + } + .contrast-more\:dark\:_text-current:is(html[class~="dark"] *) { + color: currentColor; + } + .contrast-more\:dark\:_text-gray-100:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity, 1)); + } + .contrast-more\:dark\:_text-gray-300:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity, 1)); + } + .contrast-more\:dark\:_text-gray-50:is(html[class~="dark"] *) { + --tw-text-opacity: 1; + color: rgb(249 250 251 / var(--tw-text-opacity, 1)); + } + .contrast-more\:dark\:_ring-gray-50:is(html[class~="dark"] *) { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(249 250 251 / var(--tw-ring-opacity, 1)); + } + .contrast-more\:dark\:hover\:_border-gray-50:hover:is(html[class~="dark"] *) { + --tw-border-opacity: 1; + border-color: rgb(249 250 251 / var(--tw-border-opacity, 1)); + } +} +@media not all and (min-width: 1280px) { + .max-xl\:_hidden { + display: none; + } +} +@media not all and (min-width: 768px) { + .max-md\:_sticky { + position: sticky; + } + .max-md\:_hidden { + display: none; + } + .max-md\:_h-full { + height: 100%; + } + .max-md\:_grow { + flex-grow: 1; + } + .max-md\:_overflow-hidden { + overflow: hidden; + } + .max-md\:\[transform\:translate3d\(0\,-100\%\,0\)\] { + transform: translateY(-100%); + } + .max-md\:\[transform\:translate3d\(0\,0\,0\)\] { + transform: translate(0, 0); + } +} +@media not all and (min-width: 640px) { + .max-sm\:_hidden { + display: none; + } +} +@media (min-width: 768px) { + .md\:_sticky { + position: sticky; + } + .md\:_top-16 { + top: 4rem; + } + .md\:_-mx-8 { + margin-left: -2rem; + margin-right: -2rem; + } + .md\:_hidden { + display: none; + } + .md\:_h-\[100px\] { + height: 100px; + } + .md\:_h-\[calc\(100vh-var\(--nextra-navbar-height\)-var\(--nextra-menu-height\)\)\] { + height: calc( + 100vh - var(--nextra-navbar-height) - var(--nextra-menu-height) + ); + } + .md\:\!_max-h-\[min\(calc\(100vh-5rem\)\,400px\)\] { + max-height: min(100vh - 5rem, 400px) !important; + } + .md\:_w-20 { + width: 5rem; + } + .md\:_w-64 { + width: 16rem; + } + .md\:_w-\[576px\] { + width: 576px; + } + .md\:_shrink-0 { + flex-shrink: 0; + } + .md\:_justify-start { + justify-content: flex-start; + } + .md\:_self-start { + align-self: flex-start; + } + .md\:_px-12 { + padding-left: 3rem; + padding-right: 3rem; + } + .md\:_text-lg { + font-size: 1.125rem; + } + .md\:_text-sm { + font-size: 0.875rem; + } +} +@media (min-width: 1536px) { + .\32 xl\:_-mx-24 { + margin-left: -6rem; + margin-right: -6rem; + } +} +.ltr\:_right-1\.5:where([dir="ltr"], [dir="ltr"] *) { + right: 0.375rem; +} +.ltr\:_ml-3:where([dir="ltr"], [dir="ltr"] *) { + margin-left: 0.75rem; +} +.ltr\:_ml-6:where([dir="ltr"], [dir="ltr"] *) { + margin-left: 1.5rem; +} +.ltr\:_ml-auto:where([dir="ltr"], [dir="ltr"] *) { + margin-left: auto; +} +.ltr\:_mr-auto:where([dir="ltr"], [dir="ltr"] *) { + margin-right: auto; +} +.ltr\:_rotate-180:where([dir="ltr"], [dir="ltr"] *) { + --tw-rotate: 180deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) + rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.ltr\:_border-l-2:where([dir="ltr"], [dir="ltr"] *) { + border-left-width: 2px; +} +.ltr\:_pl-3:where([dir="ltr"], [dir="ltr"] *) { + padding-left: 0.75rem; +} +.ltr\:_pl-4:where([dir="ltr"], [dir="ltr"] *) { + padding-left: 1rem; +} +.ltr\:_pl-6:where([dir="ltr"], [dir="ltr"] *) { + padding-left: 1.5rem; +} +.ltr\:_pr-2:where([dir="ltr"], [dir="ltr"] *) { + padding-right: 0.5rem; +} +.ltr\:_pr-4:where([dir="ltr"], [dir="ltr"] *) { + padding-right: 1rem; +} +.ltr\:_pr-9:where([dir="ltr"], [dir="ltr"] *) { + padding-right: 2.25rem; +} +.ltr\:_text-right:where([dir="ltr"], [dir="ltr"] *) { + text-align: right; +} +.\*\:ltr\:_rotate-90:where([dir="ltr"], [dir="ltr"] *) > * { + --tw-rotate: 90deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) + rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.ltr\:before\:_left-0:where([dir="ltr"], [dir="ltr"] *):before { + content: var(--tw-content); + left: 0; +} +@media (min-width: 1280px) { + .ltr\:xl\:_ml-\[calc\(50\%-50vw\+16rem\)\]:where([dir="ltr"], [dir="ltr"] *) { + margin-left: calc(50% - 50vw + 16rem); + } + .ltr\:xl\:_mr-\[calc\(50\%-50vw\)\]:where([dir="ltr"], [dir="ltr"] *) { + margin-right: calc(50% - 50vw); + } +} +.rtl\:_left-1\.5:where([dir="rtl"], [dir="rtl"] *) { + left: 0.375rem; +} +.rtl\:_ml-auto:where([dir="rtl"], [dir="rtl"] *) { + margin-left: auto; +} +.rtl\:_mr-3:where([dir="rtl"], [dir="rtl"] *) { + margin-right: 0.75rem; +} +.rtl\:_mr-6:where([dir="rtl"], [dir="rtl"] *) { + margin-right: 1.5rem; +} +.rtl\:_mr-auto:where([dir="rtl"], [dir="rtl"] *) { + margin-right: auto; +} +.rtl\:_rotate-180:where([dir="rtl"], [dir="rtl"] *) { + --tw-rotate: 180deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) + rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.rtl\:_border-r-2:where([dir="rtl"], [dir="rtl"] *) { + border-right-width: 2px; +} +.rtl\:_pl-2:where([dir="rtl"], [dir="rtl"] *) { + padding-left: 0.5rem; +} +.rtl\:_pl-4:where([dir="rtl"], [dir="rtl"] *) { + padding-left: 1rem; +} +.rtl\:_pl-9:where([dir="rtl"], [dir="rtl"] *) { + padding-left: 2.25rem; +} +.rtl\:_pr-3:where([dir="rtl"], [dir="rtl"] *) { + padding-right: 0.75rem; +} +.rtl\:_pr-4:where([dir="rtl"], [dir="rtl"] *) { + padding-right: 1rem; +} +.rtl\:_pr-6:where([dir="rtl"], [dir="rtl"] *) { + padding-right: 1.5rem; +} +.rtl\:_text-left:where([dir="rtl"], [dir="rtl"] *) { + text-align: left; +} +.\*\:rtl\:_-rotate-180:where([dir="rtl"], [dir="rtl"] *) > * { + --tw-rotate: -180deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) + rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.\*\:rtl\:_rotate-\[-270deg\]:where([dir="rtl"], [dir="rtl"] *) > * { + --tw-rotate: -270deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) + rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +.rtl\:before\:_right-0:where([dir="rtl"], [dir="rtl"] *):before { + content: var(--tw-content); + right: 0; +} +@media (min-width: 1280px) { + .rtl\:xl\:_ml-\[calc\(50\%-50vw\)\]:where([dir="rtl"], [dir="rtl"] *) { + margin-left: calc(50% - 50vw); + } + .rtl\:xl\:_mr-\[calc\(50\%-50vw\+16rem\)\]:where([dir="rtl"], [dir="rtl"] *) { + margin-right: calc(50% - 50vw + 16rem); + } +} +@media print { + .print\:_hidden { + display: none; + } + .print\:_bg-transparent { + background-color: #0000; + } +} +.\[\&\:\:-webkit-details-marker\]\:_hidden::-webkit-details-marker { + display: none; +} +.\[\&\:\:-webkit-search-cancel-button\]\:_appearance-none::-webkit-search-cancel-button { + appearance: none; +} +.\[\&\:not\(\:first-child\)\]\:_mt-4:not(:first-child) { + margin-top: 1rem; +} +.\[\&\:not\(\:first-child\)\]\:_mt-5:not(:first-child) { + margin-top: 1.25rem; +} +.\[\&\:not\(\:first-child\)\]\:_mt-6:not(:first-child) { + margin-top: 1.5rem; +} +.\[\&_svg\]\:_text-red-500 svg { + --tw-text-opacity: 1; + color: rgb(239 68 68 / var(--tw-text-opacity, 1)); +} +.resizing .\[\.resizing_\&\]\:_transition-none { + transition-property: none; +} +:is(ol, ul) .\[\:is\(ol\,ul\)_\&\]\:_my-3 { + margin-top: 0.75rem; + margin-bottom: 0.75rem; +} +[data-expanded] + > summary:first-child + > .\[\[data-expanded\]\>summary\:first-child\>\&\]\:_rotate-90 { + --tw-rotate: 90deg; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) + rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) + scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +/* additions */ + +body.nextra-banner-hidden .\[body\.nextra-banner-hidden_\&\]\:_hidden { + display: none; +} +div:hover > .\[div\:hover\>\&\]\:_opacity-100 { + opacity: 1; +} + +kbd._border._gap-1 { + border-bottom-width: 2px; + gap: 0.125rem; + border-color: hsl(var(--color-neu-300)); + color: hsl(var(--color-neu-700)); + + .dark & { + border-color: hsl(var(--color-neu-100) / 0.8); + color: hsl(var(--color-neu-500)); + } +} + +.nextra-search-results { + & .\_text-primary-600 { + color: hsl(var(--color-pri-base)); + } +} +.dark .nextra-search-results { + & .\_text-primary-600 { + color: hsl(var(--color-pri-light)); + } +} diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index e76f2a8888..bb88615211 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -2,16 +2,12 @@ import type { AppProps } from "next/app" import { Roboto_Flex, Roboto_Mono } from "next/font/google" import { useRouter } from "next/router" import { useEffect } from "react" -import "@/globals.css" -import "@/codemirror.less" -const robotoFlex = Roboto_Flex({ - subsets: ["latin"], -}) +import { NewFontsStyleTag } from "@/app/fonts" -const robotoMono = Roboto_Mono({ - subsets: ["latin"], -}) +import "@/globals.css" +import "@/codemirror.less" +import "@/app/colors.css" const gaId = process.env.NEXT_PUBLIC_GA_ID @@ -32,15 +28,7 @@ export default function App({ Component, pageProps }: AppProps) { return ( <> - + ) diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx index 04fc78f7b8..097cb7ff3a 100644 --- a/src/pages/_document.tsx +++ b/src/pages/_document.tsx @@ -1,4 +1,5 @@ import { Html, Head, Main, NextScript } from "next/document" + export default function Document() { return ( diff --git a/src/pages/_meta.tsx b/src/pages/_meta.tsx index 104bf3ae14..20083b625b 100644 --- a/src/pages/_meta.tsx +++ b/src/pages/_meta.tsx @@ -35,7 +35,7 @@ export default { }, spec: { type: "page", - title: Spec, + title: "Spec", href: "https://spec.graphql.org", newWindow: true, }, @@ -80,7 +80,12 @@ export default { }, conf: { type: "page", - title: "GraphQLConf", + title: ( + + GraphQLConf + 2025 + + ), route: "/conf/2025", }, "graphql-js": { @@ -88,3 +93,11 @@ export default { title: "GraphQL.JS Tutorial", }, } + +function Emphasis({ children }: { children: React.ReactNode }) { + return ( + + {children} + + ) +} diff --git a/tailwind.config.ts b/tailwind.config.ts index b33ded3675..66593ba6dd 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -3,6 +3,8 @@ import type { Config } from "tailwindcss" import typography from "@tailwindcss/typography" import plugin from "tailwindcss/plugin" import containerQueries from "@tailwindcss/container-queries" +import browserPlugin from "@igorkowalczyk/is-browser" + const config: Config = { content: ["./src/**/*.{js,ts,jsx,tsx,mdx}", "./theme.config.tsx"], theme: { @@ -190,7 +192,7 @@ const config: Config = { addBase({ ".typography-link": { - color: "theme('colors.neu-800')", + color: "hsl(var(--color-neu-900) / var(--tw-text-opacity, 1))", textDecoration: "underline", "&:hover": { textDecoration: "none", @@ -198,7 +200,17 @@ const config: Config = { }, }) }), + tailwindMediaHover(), + browserPlugin, ], darkMode: ["class", 'html[class~="dark"]'], } + export default config + +function tailwindMediaHover() { + return plugin(({ addVariant }) => { + addVariant("hover-hover", "@media (hover: hover)") + addVariant("hover-none", "@media (hover: none)") + }) +} diff --git a/test/e2e/graphql-interactive.spec.ts b/test/e2e/graphql-interactive.spec.ts new file mode 100644 index 0000000000..990db07467 --- /dev/null +++ b/test/e2e/graphql-interactive.spec.ts @@ -0,0 +1,144 @@ +import { test, expect, type Locator } from "@playwright/test" + +test.describe("interactive examples", () => { + test("adds appearsIn field to hero query and gets correct response", async ({ + page, + }) => { + await page.goto("/learn") + await page.waitForSelector(".CodeMirror", { timeout: 10000 }) + + const editors = page.locator(".miniGraphiQL") + let heroEditor: Locator | null = null + + for (let i = 0; i < (await editors.count()); i++) { + const editor = editors.nth(i) + const content = await editor.textContent() + if (content && content.includes("hero")) { + heroEditor = editor + break + } + } + + if (!heroEditor) { + throw new Error("Could not find hero GraphQL editor") + } + + const codeMirrorEditor = heroEditor.locator(".CodeMirror").first() + await expect(codeMirrorEditor).toBeVisible() + + await codeMirrorEditor.click() + + const codeLines = codeMirrorEditor.locator(".CodeMirror-line") + + // Find the line containing "name" and click after it + for (let i = 0; i < (await codeLines.count()); i++) { + const line = codeLines.nth(i) + const lineText = await line.textContent() + if (lineText && lineText.includes("name")) { + await line.click() + // Move to end of line + await page.keyboard.press("End") + // Add new line + await page.keyboard.press("Enter") + break + } + } + + await page.keyboard.type("ap") + await page.keyboard.press("Control+Space") + + const autoCompleteMenu = page.locator(".CodeMirror-hints") + await expect(autoCompleteMenu).toBeVisible({ timeout: 5000 }) + + const appearsInSuggestion = page + .locator(".CodeMirror-hints li") + .filter({ hasText: "appearsIn" }) + + if (await appearsInSuggestion.isVisible()) { + await appearsInSuggestion.click() + } else { + await page.keyboard.press("Enter") + } + + const resultViewer = heroEditor.locator(".result-window") + await expect(resultViewer).toBeVisible() + + await expect + .poll(async () => { + const resultContent = await resultViewer.textContent() + const jsonMatch = resultContent?.match(/\{[\s\S]*\}/) + if (jsonMatch) { + const responseJson = JSON.parse(jsonMatch[0]) + return responseJson + } + + return {} + }) + .toStrictEqual({ + data: { + hero: { + name: "R2-D2", + appearsIn: ["NEWHOPE", "EMPIRE", "JEDI"], + }, + }, + }) + }) + + test("edits variables and receives an expected mutation result", async ({ + page, + }) => { + await page.goto("/learn/mutations") + await page.waitForLoadState("networkidle") + + // Find the mutation example that has GraphiQL enabled + const editors = page.locator(".miniGraphiQL") + let mutationEditor: Locator | null = null + + for (let i = 0; i < (await editors.count()); i++) { + const editor = editors.nth(i) + const content = await editor.textContent() + if (content && content.includes("CreateReviewForEpisode")) { + mutationEditor = editor + break + } + } + + if (!mutationEditor) { + throw new Error("Could not find mutation GraphQL editor") + } + + const variableEditor = mutationEditor.locator(".variable-editor").first() + + if (await variableEditor.isVisible()) { + await variableEditor.click() + + await page.getByText('"This is a great movie!"').first().click() + await page.keyboard.press("ControlOrMeta+ArrowRight") + for (let i = 0; i < 4; i++) + await page.keyboard.press("Alt+Shift+ArrowLeft") + await page.keyboard.type('almost as good as Andor"') + + const resultViewer = mutationEditor.locator(".result-window") + await expect(resultViewer).toBeVisible() + + await expect + .poll(async () => { + const resultContent = await resultViewer.textContent() + const jsonMatch = resultContent?.match(/\{[\s\S]*\}/) + if (jsonMatch) { + const responseJson = JSON.parse(jsonMatch[0]) + return responseJson + } + return {} + }) + .toStrictEqual({ + data: { + createReview: { + stars: 5, + commentary: "This is almost as good as Andor", + }, + }, + }) + } + }) +}) diff --git a/theme.config.tsx b/theme.config.tsx index 54763f4984..3d832af82d 100644 --- a/theme.config.tsx +++ b/theme.config.tsx @@ -1,174 +1,20 @@ import { DocsThemeConfig, ThemeSwitch, useConfig } from "nextra-theme-docs" -import NextLink from "next/link" -import { - GraphQLWordmarkLogo, - StackOverflowIcon, - GitHubIcon, - DiscordIcon, - TwitterIcon, -} from "./src/icons" + +import { Navbar } from "@/components/navbar/navbar" import { useRouter } from "next/router" -// import { createElement } from "react" -// import NextImage from "next-image-export-optimizer" + +import { GraphQLWordmarkLogo } from "./src/icons" +import { Footer } from "@/components/footer" +import { mdxComponents } from "@/_design-system/mdx-components" const graphQLLogo = ( - + ) -const classes = { - link: "hover:underline decoration-from-font [text-underline-position:from-font]", -} - -function List({ - title, - items, -}: { - title: string - items: { title: string; url: string }[] -}) { - return ( -
      -

      {title}

      - {items.map(item => ( -
    • - - {item.title} - -
    • - ))} -
    - ) -} - -function Footer() { - return ( -
    -
    - - {graphQLLogo} - - - - - -
    -
    -

    - Copyright © {new Date().getFullYear()} The GraphQL Foundation. All - rights reserved. -
    - For web site terms of use, trademark policy and general project - policies please see{" "} - - https://lfprojects.org - -

    -
    -
      - {[ - { url: "https://github.com/graphql", icon: GitHubIcon }, - { url: "https://discord.graphql.org", icon: DiscordIcon }, - { url: "https://twitter.com/graphql", icon: TwitterIcon }, - { - url: "http://stackoverflow.com/questions/tagged/graphql", - icon: StackOverflowIcon, - }, - ].map(({ url, icon: Icon }) => ( -
    • - - - -
    • - ))} -
    - - Powered by{" "} - - - - - -
    -
    -
    - ) -} - export default { backgroundColor: { - dark: "27,27,27", + light: "251,251,249", + dark: "13.7,14.7,10.8", }, head: function useHead() { const { frontMatter, title: pageTitle } = useConfig() @@ -201,34 +47,43 @@ export default { ) }, - banner: { - content: ( - <> - 📣 GraphQLConf 2025 • Sept 08-10 • Amsterdam •{" "} - - Register Today! - - - ), - key: "graphqlconf-2024", - }, + // Hidden for now, new design is done, but not implemented yet. + // banner: { + // content: ( + // <> + // 📣 GraphQLConf 2025 • Sept 08-10 • Amsterdam •{" "} + // + // Register Today! + // + // + // ) + // key: "graphqlconf-2024", + // }, logo: graphQLLogo, docsRepositoryBase: "https://github.com/graphql/graphql.github.io/tree/source", color: { hue: 319, + lightness: { + light: 44.1, + dark: 90, + }, }, sidebar: { defaultMenuCollapseLevel: 1, }, footer: { - content: Footer, + component: () =>
    , + content: "Copyright © 2025 The GraphQL Foundation. All rights reserved.", }, navbar: { - extraContent: , + component: Navbar, + extraContent: ( + + ), }, toc: { backToTop: true, @@ -236,10 +91,5 @@ export default { search: { placeholder: "Search…", }, - // TODO: @dimaMachina try to remove pnpm patch for `nextra` package later - // components: { - // // Override `next/image` imports from `nextra-theme-docs` - // img: (props: any) => - // createElement(typeof props.src === "object" ? NextImage : "img", props), - // }, + components: mdxComponents, } satisfies DocsThemeConfig diff --git a/vercel.json b/vercel.json index 7b49cfd44c..79f2e7a835 100644 --- a/vercel.json +++ b/vercel.json @@ -577,9 +577,19 @@ }, { "source": "/schedule/", - "destination": "/conf/2024/schedule/", + "destination": "/conf/2025/schedule/", "permanent": false }, + { + "source": "/spec", + "destination": "https://spec.graphql.org", + "permanent": true + }, + { + "source": "/landscape", + "destination": "https://landscape.graphql.org", + "permanent": true + }, { "source": "/conf/2025/event-resources", "destination": "https://sites.google.com/linuxfoundation.org/graphqlconf2025event-resources/event-resources",
    +
    +

    + GraphQL is open source and trusted by the industry +

    +

    + Facebook's mobile apps have been powered by GraphQL since 2012. The + GraphQL spec was open-sourced in 2015. Now it is used by + industry-leading companies worldwide and supported by the GraphQL + Foundation, hosted since 2018 by the non-profit Linux Foundation. +

    +
    +
    + + +