From c3341570d983aea9ecc419979d5a01de658c9d67 Mon Sep 17 00:00:00 2001 From: Noel Date: Tue, 6 Sep 2022 19:48:33 +0200 Subject: [PATCH] refactor: website components (#8600) --- packages/actions/package.json | 6 +- packages/api-extractor-utils/package.json | 2 +- .../src/ApiNodeJSONEncoder.ts | 2 +- packages/builders/package.json | 6 +- packages/collection/package.json | 6 +- packages/discord.js/package.json | 2 +- packages/docgen/package.json | 2 +- packages/proxy-container/package.json | 2 +- packages/proxy/package.json | 6 +- packages/rest/package.json | 6 +- packages/scripts/package.json | 6 +- packages/voice/package.json | 6 +- packages/website/next.config.js | 4 + packages/website/package.json | 24 +- packages/website/src/assets/code-sample.png | Bin 86702 -> 0 bytes .../src/assets/djs_logo_rainbow_400x400.png | Bin 9800 -> 0 bytes .../assets}/powered-by-vercel.svg | 0 .../website/src/components/CodeListing.tsx | 80 +- .../website/src/components/DocContainer.tsx | 141 +- .../src/components/HyperlinkedText.tsx | 13 +- .../src/components/InheritanceText.tsx | 11 +- .../website/src/components/MethodItem.tsx | 125 +- .../website/src/components/MethodList.tsx | 17 +- .../website/src/components/ParameterTable.tsx | 26 +- .../website/src/components/PropertyList.tsx | 17 +- .../src/components/RouterTransition.tsx | 25 - packages/website/src/components/Section.tsx | 89 +- packages/website/src/components/Sections.tsx | 75 +- .../website/src/components/SidebarItems.tsx | 69 +- .../website/src/components/SidebarLayout.tsx | 549 ++--- .../src/components/SyntaxHighlighter.tsx | 31 + packages/website/src/components/Table.tsx | 54 +- .../src/components/TableOfContentItems.tsx | 124 +- .../website/src/components/TypeParamTable.tsx | 24 +- .../website/src/components/model/Class.tsx | 12 +- .../website/src/components/model/Enum.tsx | 35 +- .../website/src/components/model/Function.tsx | 8 +- .../src/components/model/Interface.tsx | 12 +- .../src/components/tsdoc/BlockComment.tsx | 23 +- .../website/src/components/tsdoc/TSDoc.tsx | 179 +- packages/website/src/middleware.ts | 16 +- packages/website/src/pages/404.tsx | 39 +- packages/website/src/pages/_app.tsx | 136 +- packages/website/src/pages/_document.tsx | 70 +- packages/website/src/pages/docs/[...slug].tsx | 135 +- .../pages/docs/packages/[package]/index.tsx | 108 +- .../website/src/pages/docs/packages/index.tsx | 161 +- packages/website/src/pages/index.tsx | 159 +- packages/website/src/styles/main.css | 41 +- packages/website/src/util/constants.ts | 22 + packages/website/src/util/packages.ts | 1 - packages/website/src/util/search.ts | 6 - packages/website/unocss.config.ts | 54 +- packages/ws/package.json | 6 +- yarn.lock | 1810 +++++++---------- 55 files changed, 1910 insertions(+), 2673 deletions(-) delete mode 100644 packages/website/src/assets/code-sample.png delete mode 100644 packages/website/src/assets/djs_logo_rainbow_400x400.png rename packages/website/{public => src/assets}/powered-by-vercel.svg (100%) delete mode 100644 packages/website/src/components/RouterTransition.tsx create mode 100644 packages/website/src/components/SyntaxHighlighter.tsx create mode 100644 packages/website/src/util/constants.ts delete mode 100644 packages/website/src/util/packages.ts delete mode 100644 packages/website/src/util/search.ts diff --git a/packages/actions/package.json b/packages/actions/package.json index 40e2559fd..8f5141e03 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -43,14 +43,14 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.23.0", + "@types/node": "^16.11.57", + "@vitest/coverage-c8": "^0.23.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/api-extractor-utils/package.json b/packages/api-extractor-utils/package.json index e36a91002..5a01ef64b 100644 --- a/packages/api-extractor-utils/package.json +++ b/packages/api-extractor-utils/package.json @@ -35,7 +35,7 @@ "@microsoft/tsdoc": "^0.14.1" }, "devDependencies": { - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", diff --git a/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts b/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts index 81d180569..4f485fded 100644 --- a/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts +++ b/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts @@ -164,7 +164,7 @@ export class ApiNodeJSONEncoder { case ApiItemKind.Variable: return this.encodeVariable(model, node as ApiVariable, version); default: - console.log(`Unknown API item kind: ${node.kind}`); + // console.log(`Unknown API item kind: ${node.kind}`); return undefined; } } diff --git a/packages/builders/package.json b/packages/builders/package.json index 711f284d2..1939a1ec5 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -64,15 +64,15 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", - "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.23.0", + "@types/node": "^16.11.57", + "@vitest/coverage-c8": "^0.23.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/collection/package.json b/packages/collection/package.json index 196eb016d..7e9b09e9e 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -53,15 +53,15 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", - "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.23.0", + "@types/node": "^16.11.57", + "@vitest/coverage-c8": "^0.23.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/discord.js/package.json b/packages/discord.js/package.json index ea3dc77b8..a50498df2 100644 --- a/packages/discord.js/package.json +++ b/packages/discord.js/package.json @@ -64,7 +64,7 @@ "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "dtslint": "^4.2.1", "eslint": "^8.23.0", "jest": "^29.0.2", diff --git a/packages/docgen/package.json b/packages/docgen/package.json index c4d068a39..cb455afd9 100644 --- a/packages/docgen/package.json +++ b/packages/docgen/package.json @@ -50,7 +50,7 @@ "devDependencies": { "@favware/cliff-jumper": "^1.8.7", "@types/jsdoc-to-markdown": "^7.0.3", - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", diff --git a/packages/proxy-container/package.json b/packages/proxy-container/package.json index 6886dcb14..5c6f8e44d 100644 --- a/packages/proxy-container/package.json +++ b/packages/proxy-container/package.json @@ -49,7 +49,7 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 169e369a4..7868c55e7 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -62,9 +62,9 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "@types/supertest": "^2.0.12", - "@vitest/coverage-c8": "^0.23.0", + "@vitest/coverage-c8": "^0.23.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", @@ -72,7 +72,7 @@ "supertest": "^6.2.4", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/rest/package.json b/packages/rest/package.json index 226fdd1e8..3ce1a869f 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -64,15 +64,15 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", - "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.23.0", + "@types/node": "^16.11.57", + "@vitest/coverage-c8": "^0.23.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 2b951a288..5c7955ef7 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -52,14 +52,14 @@ "undici": "^5.10.0" }, "devDependencies": { - "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.23.0", + "@types/node": "^16.11.57", + "@vitest/coverage-c8": "^0.23.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/voice/package.json b/packages/voice/package.json index aba04ab0f..7bd648f87 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -59,14 +59,14 @@ "ws": "^8.8.1" }, "devDependencies": { - "@babel/core": "^7.18.13", - "@babel/preset-env": "^7.18.10", + "@babel/core": "^7.19.0", + "@babel/preset-env": "^7.19.0", "@babel/preset-typescript": "^7.18.6", "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", "@types/jest": "^29.0.0", - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", diff --git a/packages/website/next.config.js b/packages/website/next.config.js index 83828df53..71eb42b67 100644 --- a/packages/website/next.config.js +++ b/packages/website/next.config.js @@ -1,3 +1,6 @@ +/* eslint-disable tsdoc/syntax */ +import { URL, fileURLToPath } from 'node:url'; + /** * @type {import('next').NextConfig} */ @@ -12,6 +15,7 @@ export default { images: { allowFutureImage: true, }, + outputFileTracingRoot: fileURLToPath(new URL('../../', import.meta.url)), }, images: { dangerouslyAllowSVG: true, diff --git a/packages/website/package.json b/packages/website/package.json index 25a4e6ee9..434c53cb7 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -41,52 +41,50 @@ "dependencies": { "@discordjs/api-extractor-utils": "workspace:^", "@discordjs/scripts": "workspace:^", - "@emotion/react": "^11.10.4", - "@emotion/server": "^11.10.0", - "@mantine/core": "^5.2.5", - "@mantine/hooks": "^5.2.5", - "@mantine/next": "^5.2.5", - "@mantine/nprogress": "^5.2.5", - "@mantine/spotlight": "^5.2.5", "@microsoft/api-extractor-model": "7.24.0", "@microsoft/tsdoc": "0.14.1", "@vscode/codicons": "^0.0.32", + "ariakit": "^2.0.0-next.41", "minisearch": "^5.0.0", "next": "^12.2.5", "next-mdx-remote": "^4.1.0", + "next-progress": "^2.2.0", + "next-themes": "^0.2.0", "react": "^18.2.0", + "react-custom-scrollbars-2": "^4.5.0", "react-dom": "^18.2.0", "react-icons": "^4.4.0", "react-syntax-highlighter": "^15.5.0", + "react-use": "^17.4.0", "rehype-ignore": "^1.0.1", "rehype-pretty-code": "^0.3.2", "rehype-raw": "^6.1.1", "rehype-slug": "^5.0.1", "remark-gfm": "^3.0.1", - "sharp": "^0.30.7", + "sharp": "^0.31.0", "shiki": "^0.11.1", "swr": "^1.3.0" }, "devDependencies": { "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "@types/react-dom": "^18.0.6", "@types/react-syntax-highlighter": "^15.5.5", "@unocss/cli": "^0.45.15", - "@unocss/preset-web-fonts": "^0.45.15", "@unocss/reset": "^0.45.15", - "@vitejs/plugin-react": "^2.0.1", - "@vitest/coverage-c8": "^0.23.0", + "@vitejs/plugin-react": "^2.1.0", + "@vitest/coverage-c8": "^0.23.1", "concurrently": "^7.3.0", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "happy-dom": "^6.0.4", "prettier": "^2.7.1", + "prettier-plugin-tailwindcss": "^0.1.13", "typescript": "^4.8.2", "unocss": "^0.45.15", "vercel": "^28.2.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/website/src/assets/code-sample.png b/packages/website/src/assets/code-sample.png deleted file mode 100644 index a1e37da047ea58a2f91850ff0939e29718eb5ae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86702 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 diff --git a/packages/website/public/powered-by-vercel.svg b/packages/website/src/assets/powered-by-vercel.svg similarity index 100% rename from packages/website/public/powered-by-vercel.svg rename to packages/website/src/assets/powered-by-vercel.svg diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index 521907ae4..5a3f1dd4c 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -1,6 +1,4 @@ import type { TokenDocumentation, ApiItemJSON, AnyDocNodeJSON, InheritanceData } from '@discordjs/api-extractor-utils'; -import { ActionIcon, Badge, Box, createStyles, Group, MediaQuery, Stack, Title } from '@mantine/core'; -import { useMediaQuery } from '@mantine/hooks'; import type { PropsWithChildren } from 'react'; import { FiLink } from 'react-icons/fi'; import { HyperlinkedText } from './HyperlinkedText'; @@ -12,19 +10,6 @@ export enum CodeListingSeparatorType { Value = '=', } -const useStyles = createStyles((theme) => ({ - outer: { - display: 'flex', - alignItems: 'center', - gap: 16, - - [theme.fn.smallerThan('sm')]: { - flexDirection: 'column', - alignItems: 'unset', - }, - }, -})); - export function CodeListing({ name, separator = CodeListingSeparatorType.Type, @@ -47,48 +32,51 @@ export function CodeListing({ summary?: ApiItemJSON['summary']; typeTokens: TokenDocumentation[]; }>) { - const { classes } = useStyles(); - const matches = useMediaQuery('(max-width: 768px)'); - return ( - - - - - - - + + {summary || inheritanceData ? ( +
{deprecation ? : null} - {summary && } - {comment && } + {summary ? : null} + {comment ? : null} {inheritanceData ? : null} {children} - - - +
+ ) : null} + ); } diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 934f7880f..4f7ddf778 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -5,22 +5,8 @@ import type { ApiClassJSON, ApiInterfaceJSON, } from '@discordjs/api-extractor-utils'; -import { - Group, - Stack, - Title, - Text, - Box, - MediaQuery, - Aside, - ScrollArea, - Skeleton, - Divider, - useMantineColorScheme, -} from '@mantine/core'; -import { useMediaQuery } from '@mantine/hooks'; -import { useRouter } from 'next/router'; import { Fragment, type PropsWithChildren } from 'react'; +import { Scrollbars } from 'react-custom-scrollbars-2'; import { VscSymbolClass, VscSymbolMethod, @@ -30,10 +16,10 @@ import { VscListSelection, VscSymbolParameter, } from 'react-icons/vsc'; -import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { vscDarkPlus, ghcolors } from 'react-syntax-highlighter/dist/cjs/styles/prism'; +import { useMedia } from 'react-use'; import { HyperlinkedText } from './HyperlinkedText'; import { Section } from './Section'; +import { SyntaxHighlighter } from './SyntaxHighlighter'; import { TableOfContentItems } from './TableOfContentItems'; import { TypeParamTable } from './TypeParamTable'; import { TSDoc } from './tsdoc/TSDoc'; @@ -75,95 +61,76 @@ export function DocContainer({ methods, properties, }: DocContainerProps) { - const router = useRouter(); - const matches = useMediaQuery('(max-width: 768px)'); - const { colorScheme } = useMantineColorScheme(); + const matches = useMedia('(max-width: 768px)', true); return ( - - - - - <Group> - {generateIcon(kind)} - {name} - </Group> - - + <> +
+

+ {generateIcon(kind)} + {name} +

- -
} padded dense={matches}> - {summary ? : No summary provided.} - -
-
+
} padded dense={matches}> + {summary ? : No summary provided.} +
+
- - - - {excerpt} - - - + {extendsTokens?.length ? ( - - - Extends - - +
+

Extends

+ - - + +
) : null} {implementsTokens?.length ? ( - - - Implements - - +
+

Implements

+ {implementsTokens.map((token, idx) => ( {idx < implementsTokens.length - 1 ? ', ' : ''} ))} - - + +
) : null} - - - {typeParams?.length ? ( -
} - padded - dense={matches} - defaultClosed - > - -
- ) : null} - {children} -
-
- +
+ {typeParams?.length ? ( +
} + padded + dense={matches} + defaultClosed + > + +
+ ) : null} + {children} +
+
{(kind === 'Class' || kind === 'Interface') && (methods?.length || properties?.length) ? ( - - - + ) : null} -
+ ); } diff --git a/packages/website/src/components/HyperlinkedText.tsx b/packages/website/src/components/HyperlinkedText.tsx index bad5e93ed..b1fa9d7fd 100644 --- a/packages/website/src/components/HyperlinkedText.tsx +++ b/packages/website/src/components/HyperlinkedText.tsx @@ -1,5 +1,4 @@ import type { TokenDocumentation } from '@discordjs/api-extractor-utils'; -import { Anchor, Text } from '@mantine/core'; import Link from 'next/link'; export function HyperlinkedText({ tokens }: { tokens: TokenDocumentation[] }) { @@ -8,19 +7,13 @@ export function HyperlinkedText({ tokens }: { tokens: TokenDocumentation[] }) { {tokens.map((token, idx) => { if (token.path) { return ( - - - {token.text} - + + {token.text} ); } - return ( - - {token.text} - - ); + return {token.text}; })} ); diff --git a/packages/website/src/components/InheritanceText.tsx b/packages/website/src/components/InheritanceText.tsx index 744d6b7e6..b97ceaf30 100644 --- a/packages/website/src/components/InheritanceText.tsx +++ b/packages/website/src/components/InheritanceText.tsx @@ -1,16 +1,13 @@ import type { InheritanceData } from '@discordjs/api-extractor-utils'; -import { Anchor, Text } from '@mantine/core'; import Link from 'next/link'; export function InheritanceText({ data }: { data: InheritanceData }) { return ( - + {'Inherited from '} - - - {data.parentName} - + + {data.parentName} - + ); } diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 3ef6f1d37..3b41f6caa 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -1,86 +1,77 @@ import type { ApiMethodJSON, ApiMethodSignatureJSON } from '@discordjs/api-extractor-utils'; -import { ActionIcon, Badge, Box, createStyles, Group, MediaQuery, Stack, Title } from '@mantine/core'; -import { useMediaQuery } from '@mantine/hooks'; +import { useCallback, useMemo } from 'react'; import { FiLink } from 'react-icons/fi'; import { HyperlinkedText } from './HyperlinkedText'; import { InheritanceText } from './InheritanceText'; import { ParameterTable } from './ParameterTable'; import { TSDoc } from './tsdoc/TSDoc'; -const useStyles = createStyles((theme) => ({ - outer: { - display: 'flex', - alignItems: 'center', - gap: 16, - - [theme.fn.smallerThan('sm')]: { - flexDirection: 'column', - alignItems: 'unset', - }, - }, -})); - -function getShorthandName(data: ApiMethodJSON | ApiMethodSignatureJSON) { - return `${data.name}${data.optional ? '?' : ''}(${data.parameters.reduce((prev, cur, index) => { - if (index === 0) { - return `${prev}${cur.isOptional ? `${cur.name}?` : cur.name}`; - } - - return `${prev}, ${cur.isOptional ? `${cur.name}?` : cur.name}`; - }, '')})`; -} - export function MethodItem({ data }: { data: ApiMethodJSON | ApiMethodSignatureJSON }) { - const { classes } = useStyles(); - const matches = useMediaQuery('(max-width: 768px)'); const method = data as ApiMethodJSON; - const key = `${data.name}${data.overloadIndex && data.overloadIndex > 1 ? `:${data.overloadIndex}` : ''}`; + const key = useMemo( + () => `${data.name}${data.overloadIndex && data.overloadIndex > 1 ? `:${data.overloadIndex}` : ''}`, + [data.name, data.overloadIndex], + ); + + const getShorthandName = useCallback( + (data: ApiMethodJSON | ApiMethodSignatureJSON) => + `${data.name}${data.optional ? '?' : ''}(${data.parameters.reduce((prev, cur, index) => { + if (index === 0) { + return `${prev}${cur.isOptional ? `${cur.name}?` : cur.name}`; + } + + return `${prev}, ${cur.isOptional ? `${cur.name}?` : cur.name}`; + }, '')})`, + [], + ); return ( - - - - - - - - - - {data.deprecated || - (data.kind === 'Method' && method.protected) || - (data.kind === 'Method' && method.static) ? ( - - {data.deprecated ? ( - - Deprecated - - ) : null} - {data.kind === 'Method' && method.protected ? Protected : null} - {data.kind === 'Method' && method.static ? Static : null} - - ) : null} - - {`${getShorthandName( - data, - )}`} - : - - <HyperlinkedText tokens={data.returnTypeTokens} /> - - - - - - - +
+
+
+ + + + {data.deprecated || + (data.kind === 'Method' && method.protected) || + (data.kind === 'Method' && method.static) ? ( +
+ {data.deprecated ? ( +
+ Deprecated +
+ ) : null} + {data.kind === 'Method' && method.protected ? ( +
+ Protected +
+ ) : null} + {data.kind === 'Method' && method.static ? ( +
+ Static +
+ ) : null} +
+ ) : null} +
+

{`${getShorthandName(data)}`}

+

:

+

+ +

+
+
+
+ {data.summary || data.parameters.length ? ( +
{data.deprecated ? : null} {data.summary ? : null} {data.remarks ? : null} {data.comment ? : null} {data.parameters.length ? : null} {data.inheritanceData ? : null} - - - +
+ ) : null} +
); } diff --git a/packages/website/src/components/MethodList.tsx b/packages/website/src/components/MethodList.tsx index 6f994fec3..431b3e2aa 100644 --- a/packages/website/src/components/MethodList.tsx +++ b/packages/website/src/components/MethodList.tsx @@ -1,19 +1,20 @@ import type { ApiMethodJSON, ApiMethodSignatureJSON } from '@discordjs/api-extractor-utils'; -import { Divider, Stack } from '@mantine/core'; -import { Fragment } from 'react'; +import { Fragment, useMemo } from 'react'; import { MethodItem } from './MethodItem'; export function MethodList({ data }: { data: (ApiMethodJSON | ApiMethodSignatureJSON)[] }) { - return ( - - {data.map((method) => ( + const methodItems = useMemo( + () => + data.map((method) => ( 1 ? `:${method.overloadIndex}` : ''}`} > - +
- ))} - + )), + [data], ); + + return
{methodItems}
; } diff --git a/packages/website/src/components/ParameterTable.tsx b/packages/website/src/components/ParameterTable.tsx index 4666f387b..a2ef8fbb4 100644 --- a/packages/website/src/components/ParameterTable.tsx +++ b/packages/website/src/components/ParameterTable.tsx @@ -1,5 +1,5 @@ import type { ParameterDocumentation } from '@discordjs/api-extractor-utils'; -import { Box, ScrollArea } from '@mantine/core'; +import { useMemo } from 'react'; import { HyperlinkedText } from './HyperlinkedText'; import { Table } from './Table'; import { TSDoc } from './tsdoc/TSDoc'; @@ -10,18 +10,20 @@ const columnStyles = { }; export function ParameterTable({ data }: { data: ParameterDocumentation[] }) { - const rows = data.map((param) => ({ - Name: param.name, - Type: , - Optional: param.isOptional ? 'Yes' : 'No', - Description: param.paramCommentBlock ? : 'None', - })); + const rows = useMemo( + () => + data.map((param) => ({ + Name: param.name, + Type: , + Optional: param.isOptional ? 'Yes' : 'No', + Description: param.paramCommentBlock ? : 'None', + })), + [data], + ); return ( - - - - - +
+
+ ); } diff --git a/packages/website/src/components/PropertyList.tsx b/packages/website/src/components/PropertyList.tsx index 02305f571..61b7e2d37 100644 --- a/packages/website/src/components/PropertyList.tsx +++ b/packages/website/src/components/PropertyList.tsx @@ -1,12 +1,11 @@ import type { ApiPropertyItemJSON } from '@discordjs/api-extractor-utils'; -import { Divider, Stack } from '@mantine/core'; -import { Fragment } from 'react'; +import { Fragment, useMemo } from 'react'; import { CodeListing } from './CodeListing'; export function PropertyList({ data }: { data: ApiPropertyItemJSON[] }) { - return ( - - {data.map((prop) => ( + const propertyItems = useMemo( + () => + data.map((prop) => ( - +
- ))} - + )), + [data], ); + + return
{propertyItems}
; } diff --git a/packages/website/src/components/RouterTransition.tsx b/packages/website/src/components/RouterTransition.tsx deleted file mode 100644 index 8d9a3005a..000000000 --- a/packages/website/src/components/RouterTransition.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { startNavigationProgress, resetNavigationProgress, NavigationProgress } from '@mantine/nprogress'; -import { useRouter } from 'next/router'; -import { useEffect } from 'react'; - -export function RouterTransition() { - const router = useRouter(); - - useEffect(() => { - const handleStart = (url: string) => url !== router.asPath && startNavigationProgress(); - const handleComplete = () => resetNavigationProgress(); - - router.events.on('routeChangeStart', handleStart); - router.events.on('routeChangeComplete', handleComplete); - router.events.on('routeChangeError', handleComplete); - - return () => { - router.events.off('routeChangeStart', handleStart); - router.events.off('routeChangeComplete', handleComplete); - router.events.off('routeChangeError', handleComplete); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [router.asPath]); - - return ; -} diff --git a/packages/website/src/components/Section.tsx b/packages/website/src/components/Section.tsx index 68dd8c09f..aa4a2560d 100644 --- a/packages/website/src/components/Section.tsx +++ b/packages/website/src/components/Section.tsx @@ -1,37 +1,7 @@ -import { - createStyles, - UnstyledButton, - Group, - ThemeIcon, - Collapse, - Box, - Text, - useMantineColorScheme, -} from '@mantine/core'; -import { useState, useEffect, type PropsWithChildren } from 'react'; +import { Disclosure, DisclosureContent, useDisclosureState } from 'ariakit/disclosure'; +import type { PropsWithChildren } from 'react'; import { VscChevronDown } from 'react-icons/vsc'; -const useStyles = createStyles((theme, { opened }: { opened: boolean }) => ({ - control: { - display: 'block', - width: '100%', - padding: theme.spacing.xs, - color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![7] : 'transparent', - borderRadius: theme.radius.xs, - - '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![5] : theme.colors.gray![2], - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - }, - }, - - icon: { - transition: 'transform 150ms ease', - transform: opened ? 'rotate(180deg)' : 'rotate(0deg)', - }, -})); - export function Section({ title, icon, @@ -46,41 +16,28 @@ export function Section({ padded?: boolean; title: string; }>) { - const [opened, setOpened] = useState(!defaultClosed); - const { colorScheme } = useMantineColorScheme(); - const { classes } = useStyles({ opened }); - - useEffect(() => { - setOpened(!defaultClosed); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + const disclosure = useDisclosureState({ defaultOpen: !defaultClosed }); return ( - - setOpened((isOpen) => !isOpen)}> - - - {icon ? ( - - {icon} - - ) : null} - - {title} - - - - - - - {padded ? ( - - {children} - - ) : ( - children - )} - - +
+ +
+
+ {icon ?? null} + {title} +
+ +
+
+ + {padded ?
{children}
: children} +
+
); } diff --git a/packages/website/src/components/Sections.tsx b/packages/website/src/components/Sections.tsx index 6a809b2fb..3d34c1400 100644 --- a/packages/website/src/components/Sections.tsx +++ b/packages/website/src/components/Sections.tsx @@ -4,9 +4,9 @@ import type { ParameterDocumentation, ApiConstructorJSON, } from '@discordjs/api-extractor-utils'; -import { Stack, Group, Badge, Title } from '@mantine/core'; -import { useMediaQuery } from '@mantine/hooks'; +import { useMemo } from 'react'; import { VscSymbolConstant, VscSymbolMethod, VscSymbolProperty } from 'react-icons/vsc'; +import { useMedia } from 'react-use'; import { MethodList } from './MethodList'; import { ParameterTable } from './ParameterTable'; import { PropertyList } from './PropertyList'; @@ -14,7 +14,7 @@ import { Section } from './Section'; import { TSDoc } from './tsdoc/TSDoc'; export function PropertiesSection({ data }: { data: ApiClassJSON['properties'] | ApiInterfaceJSON['properties'] }) { - const matches = useMediaQuery('(max-width: 768px)'); + const matches = useMedia('(max-width: 768px)', true); return data.length ? (
} padded dense={matches}> @@ -24,7 +24,7 @@ export function PropertiesSection({ data }: { data: ApiClassJSON['properties'] | } export function MethodsSection({ data }: { data: ApiClassJSON['methods'] | ApiInterfaceJSON['methods'] }) { - const matches = useMediaQuery('(max-width: 768px)'); + const matches = useMedia('(max-width: 768px)', true); return data.length ? (
} padded dense={matches}> @@ -34,7 +34,7 @@ export function MethodsSection({ data }: { data: ApiClassJSON['methods'] | ApiIn } export function ParametersSection({ data }: { data: ParameterDocumentation[] }) { - const matches = useMediaQuery('(max-width: 768px)'); + const matches = useMedia('(max-width: 768px)', true); return data.length ? (
} padded dense={matches}> @@ -44,45 +44,52 @@ export function ParametersSection({ data }: { data: ParameterDocumentation[] }) } export function ConstructorSection({ data }: { data: ApiConstructorJSON }) { - const matches = useMediaQuery('(max-width: 768px)'); + const matches = useMedia('(max-width: 768px)', true); - const getShorthandName = () => - `constructor(${data.parameters.reduce((prev, cur, index) => { - if (index === 0) { - return `${prev}${cur.isOptional ? `${cur.name}?` : cur.name}`; - } + const getShorthandName = useMemo( + () => + `constructor(${data.parameters.reduce((prev, cur, index) => { + if (index === 0) { + return `${prev}${cur.isOptional ? `${cur.name}?` : cur.name}`; + } - return `${prev}, ${cur.isOptional ? `${cur.name}?` : cur.name}`; - }, '')})`; + return `${prev}, ${cur.isOptional ? `${cur.name}?` : cur.name}`; + }, '')})`, + [data.parameters], + ); return data.parameters.length ? (
} padded dense={matches}> - - - - - {data.deprecated ? ( - - Deprecated - - ) : null} - {data.protected ? Protected : null} - - {getShorthandName()} - - - - - - +
+
+
+ {data.deprecated || data.protected ? ( +
+ {data.deprecated ? ( +
+ Deprecated +
+ ) : null} + {data.protected ? ( +
+ Protected +
+ ) : null} +
+ ) : null} +

{getShorthandName}

+
+
+ {data.summary || data.parameters.length ? ( +
{data.deprecated ? : null} {data.summary ? : null} {data.remarks ? : null} {data.comment ? : null} {data.parameters.length ? : null} - - - +
+ ) : null} +
) : null; } diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index a190e5751..cad89411d 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -1,4 +1,3 @@ -import { createStyles, Group, Text, NavLink, Box } from '@mantine/core'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { type Dispatch, type SetStateAction, useEffect, useState, useMemo } from 'react'; @@ -66,32 +65,6 @@ function resolveIcon(item: keyof GroupedMembers) { } } -const useStyles = createStyles((theme) => ({ - link: { - ...theme.fn.focusStyles(), - fontWeight: 500, - display: 'block', - width: 'unset', - padding: 5, - paddingLeft: 31, - marginLeft: 25, - fontSize: theme.fontSizes.sm, - color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.colors.gray![7], - borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark![4] : theme.colors.gray![3]}`, - - '&[data-active]': { - '&:hover': { - color: theme.white, - }, - }, - - '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - }, - }, -})); - export function SidebarItems({ members, setOpened, @@ -101,7 +74,6 @@ export function SidebarItems({ }) { const router = useRouter(); const [asPathWithoutQueryAndAnchor, setAsPathWithoutQueryAndAnchor] = useState(''); - const { classes } = useStyles(); const groupItems = useMemo(() => groupMembers(members), [members]); useEffect(() => { @@ -109,36 +81,33 @@ export function SidebarItems({ }, [router.asPath]); return ( - ({ paddingBottom: 48, [theme.fn.smallerThan('md')]: { paddingBottom: 128 } })}> +
{(Object.keys(groupItems) as (keyof GroupedMembers)[]) .filter((group) => groupItems[group].length) .map((group, idx) => (
{groupItems[group].map((member, index) => ( - - setOpened((isOpened) => !isOpened)} - label={ - - - {member.name} - - {member.overloadIndex && member.overloadIndex > 1 ? ( - - {member.overloadIndex} - - ) : null} - - } - active={asPathWithoutQueryAndAnchor === member.path} - variant="filled" - /> + + setOpened(false)} + > +
+ {member.name} + {member.overloadIndex && member.overloadIndex > 1 ? ( + {member.overloadIndex} + ) : null} +
+
))}
))} - +
); } diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 4449665b4..dc20bdbde 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -1,41 +1,20 @@ import type { getMembers, ApiItemJSON } from '@discordjs/api-extractor-utils'; -import { - useMantineTheme, - AppShell, - Navbar, - MediaQuery, - Header, - Burger, - Anchor, - Breadcrumbs, - ScrollArea, - Group, - Text, - ThemeIcon, - Box, - UnstyledButton, - createStyles, - Menu, - ActionIcon, - useMantineColorScheme, - Stack, - Skeleton, - LoadingOverlay, - Container, - Title, -} from '@mantine/core'; -import { NextLink } from '@mantine/next'; +import { Button } from 'ariakit/button'; +import { Menu, MenuButton, MenuItem, useMenuState } from 'ariakit/menu'; import Image from 'next/future/image'; import Link from 'next/link'; import { useRouter } from 'next/router'; import type { MDXRemoteSerializeResult } from 'next-mdx-remote'; -import { type PropsWithChildren, useState, useEffect, useMemo } from 'react'; -import { VscChevronDown, VscGithubInverted, VscPackage, VscVersions } from 'react-icons/vsc'; -import { WiDaySunny, WiNightClear } from 'react-icons/wi'; +import { useTheme } from 'next-themes'; +import { type PropsWithChildren, useState, useEffect, useMemo, Fragment } from 'react'; +import { Scrollbars } from 'react-custom-scrollbars-2'; +import { VscChevronDown, VscColorMode, VscGithubInverted, VscMenu, VscPackage, VscVersions } from 'react-icons/vsc'; +import { useMedia /* useLockBodyScroll */ } from 'react-use'; import useSWR from 'swr'; +import vercelLogo from '../assets/powered-by-vercel.svg'; import { SidebarItems } from './SidebarItems'; +import { PACKAGES } from '~/util/constants'; import type { findMember } from '~/util/model.server'; -import { PACKAGES } from '~/util/packages'; const fetcher = async (url: string) => { const res = await fetch(url); @@ -66,89 +45,6 @@ export interface GroupedMembers { Variables: Members; } -const useStyles = createStyles( - (theme, { openedLib, openedVersion }: { openedLib: boolean; openedVersion: boolean }) => ({ - control: { - display: 'block', - width: '100%', - padding: theme.spacing.xs, - color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![1], - borderRadius: theme.radius.xs, - - '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![5] : theme.colors.gray![2], - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - }, - }, - - iconLib: { - transition: 'transform 150ms ease', - transform: openedLib ? 'rotate(180deg)' : 'rotate(0deg)', - }, - - iconVersion: { - transition: 'transform 150ms ease', - transform: openedVersion ? 'rotate(180deg)' : 'rotate(0deg)', - }, - - content: { - position: 'relative', - minHeight: 'calc(100vh - 50px)', - zIndex: 1, - background: theme.colorScheme === 'dark' ? theme.colors.dark![8] : theme.colors.gray![0], - boxShadow: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)', - }, - - footer: { - position: 'fixed', - bottom: 0, - left: 0, - right: 0, - height: 200, - background: theme.colorScheme === 'dark' ? theme.colors.dark![7] : theme.colors.gray![0], - paddingLeft: 324, - - [theme.fn.smallerThan('lg')]: { - paddingRight: 54, - }, - - [theme.fn.smallerThan('md')]: { - paddingLeft: 24, - }, - - [theme.fn.smallerThan('sm')]: { - paddingRight: 24, - height: 300, - }, - }, - - links: { - display: 'flex', - justifyContent: 'space-between', - - [theme.fn.smallerThan('sm')]: { - flexDirection: 'column', - alignItems: 'center', - gap: 50, - }, - }, - - link: { color: theme.colorScheme === 'dark' ? theme.white : theme.black }, - }), -); - -const packageMenuItems = PACKAGES.map((pkg) => ( - ({ color: theme.colorScheme === 'dark' ? theme.white : theme.black })} - > - {pkg} - -)); - export function SidebarLayout({ packageName, branchName, @@ -157,261 +53,244 @@ export function SidebarLayout({ }: PropsWithChildren>) { const router = useRouter(); const [asPathWithoutQueryAndAnchor, setAsPathWithoutQueryAndAnchor] = useState(''); - const { data: versions } = useSWR( - `https://docs.discordjs.dev/api/info?package=${packageName ?? 'builders'}`, - fetcher, - ); - const theme = useMantineTheme(); - // eslint-disable-next-line @typescript-eslint/unbound-method - const { colorScheme, toggleColorScheme } = useMantineColorScheme(); - + const { data: versions } = useSWR(`https://docs.discordjs.dev/api/info?package=${packageName}`, fetcher); + const { resolvedTheme, setTheme } = useTheme(); + const toggleTheme = () => setTheme(resolvedTheme === 'light' ? 'dark' : 'light'); + const matches = useMedia('(min-width: 992px)', false); const [opened, setOpened] = useState(false); - const [openedLibPicker, setOpenedLibPicker] = useState(false); - const [openedVersionPicker, setOpenedVersionPicker] = useState(false); + const packageMenu = useMenuState({ gutter: 8, sameWidth: true }); + const versionMenu = useMenuState({ gutter: 8, sameWidth: true }); + // useLockBodyScroll(opened); useEffect(() => { - setOpened(false); - setOpenedLibPicker(false); - setOpenedVersionPicker(false); - }, []); + if (matches) { + setOpened(false); + } + }, [matches]); useEffect(() => { setAsPathWithoutQueryAndAnchor(router.asPath.split('?')[0]?.split('#')[0]?.split(':')[0] ?? ''); }, [router.asPath]); - const { classes } = useStyles({ openedLib: openedLibPicker, openedVersion: openedVersionPicker }); + const packageMenuItems = PACKAGES.map((pkg) => ( + + + {pkg} + + + )); const versionMenuItems = useMemo( () => - versions?.map((item) => ( - ({ color: theme.colorScheme === 'dark' ? theme.white : theme.black })} - > - {item} - - )) ?? [], + versions + ?.map((item) => ( + + + {item} + + + )) + .reverse() ?? [], + // eslint-disable-next-line react-hooks/exhaustive-deps [versions, packageName], ); - const breadcrumbs = useMemo( + const pathElements = useMemo( () => asPathWithoutQueryAndAnchor.split('/').map((path, idx, original) => ( - - ({ color: theme.colorScheme === 'dark' ? theme.white : theme.black })}> - {path} - + + {path} )), [asPathWithoutQueryAndAnchor], ); + const breadcrumbs = useMemo( + () => + pathElements.flatMap((el, idx, array) => { + if (idx !== array.length - 1) { + return ( + + {el} +
/
+
+ ); + } + + return {el}; + }), + [pathElements], + ); + return ( - ({ - main: { - background: theme.colorScheme === 'dark' ? theme.colors.dark![8] : theme.colors.gray![0], - overflowX: 'auto', - }, - })} - padding={0} - navbarOffsetBreakpoint="md" - asideOffsetBreakpoint="md" - navbar={ - <> - - - - - - } - header={ -
({ - boxShadow: - theme.colorScheme === 'dark' - ? '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)' - : 'unset', - })} - height={70} - p="md" + <> +
+
+
+ +
{breadcrumbs}
+
+ + +
+
+
+
+ +
+
- } - > - -
+ +
+ + + + + + + + ); } diff --git a/packages/website/src/components/SyntaxHighlighter.tsx b/packages/website/src/components/SyntaxHighlighter.tsx new file mode 100644 index 000000000..0ed5ddf93 --- /dev/null +++ b/packages/website/src/components/SyntaxHighlighter.tsx @@ -0,0 +1,31 @@ +import { PrismAsyncLight } from 'react-syntax-highlighter'; +import { vscDarkPlus, prism } from 'react-syntax-highlighter/dist/cjs/styles/prism'; + +export function SyntaxHighlighter({ language = 'typescript', code }: { code: string; language?: string }) { + return ( + <> +
+ + {code} + +
+
+ + {code} + +
+ + ); +} diff --git a/packages/website/src/components/Table.tsx b/packages/website/src/components/Table.tsx index af30348c1..c6340fee4 100644 --- a/packages/website/src/components/Table.tsx +++ b/packages/website/src/components/Table.tsx @@ -1,5 +1,4 @@ -import { Table as MantineTable } from '@mantine/core'; -import type { ReactNode } from 'react'; +import { useMemo, type ReactNode } from 'react'; export function Table({ rows, @@ -10,28 +9,39 @@ export function Table({ columns: string[]; rows: Record[]; }) { - return ( - -
- - {columns.map((column) => ( - + const cols = useMemo( + () => + columns.map((column) => ( + + )), + [columns], + ); + + const data = useMemo( + () => + rows.map((row, idx) => ( + + {Object.entries(row).map(([colName, val]) => ( + ))} + )), + [columnStyles, rows], + ); + + return ( +
- {column} - + {column} +
+ {val} +
+ + {cols} - - {rows.map((row, idx) => ( - - {Object.entries(row).map(([colName, val]) => ( - - ))} - - ))} - - + {data} +
- {val} -
); } diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index 89e1452fe..7726fdf44 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -1,31 +1,7 @@ import type { ApiClassJSON, ApiInterfaceJSON } from '@discordjs/api-extractor-utils'; -import { createStyles, Group, Text, Box, Stack, ThemeIcon, useMantineColorScheme } from '@mantine/core'; import { useMemo } from 'react'; import { VscListSelection, VscSymbolMethod, VscSymbolProperty } from 'react-icons/vsc'; -const useStyles = createStyles((theme) => ({ - link: { - ...theme.fn.focusStyles(), - fontWeight: 500, - display: 'block', - textDecoration: 'none', - color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.colors.gray![7], - lineHeight: 1.2, - fontSize: theme.fontSizes.sm, - padding: 5, - paddingLeft: theme.spacing.md, - marginLeft: 14, - borderTopRightRadius: theme.radius.sm, - borderBottomRightRadius: theme.radius.sm, - borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark![4] : theme.colors.gray![3]}`, - - '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - }, - }, -})); - export function TableOfContentItems({ methods, properties, @@ -33,22 +9,19 @@ export function TableOfContentItems({ methods: ApiClassJSON['methods'] | ApiInterfaceJSON['methods']; properties: ApiClassJSON['properties'] | ApiInterfaceJSON['properties']; }) { - const { colorScheme } = useMantineColorScheme(); - const { classes } = useStyles(); - const propertyItems = useMemo( () => properties.map((prop) => ( - key={prop.name} href={`#${prop.name}`} component="a" className={classes.link}> - - - {prop.name} - - -
+ + {prop.name} + )), - // eslint-disable-next-line react-hooks/exhaustive-deps - [properties, colorScheme], + [properties], ); const methodItems = useMemo( @@ -59,61 +32,52 @@ export function TableOfContentItems({ }`; return ( - key={key} component="a" href={`#${key}`} className={classes.link}> - - - {member.name} - - {member.overloadIndex && member.overloadIndex > 1 ? ( - - {member.overloadIndex} - - ) : null} - - + + {member.name} + {member.overloadIndex && member.overloadIndex > 1 ? ( + {member.overloadIndex} + ) : null} + ); }), - [methods, classes.link], + [methods], ); return ( - - +
+
- Table of contents - - + Contents +
+
{propertyItems.length ? ( - - - - - - - - Properties - - - +
+
+ +
+ Properties +
+
{propertyItems} - +
) : null} {methodItems.length ? ( - - - - - - - - Methods - - - +
+
+ +
+ Methods +
+
{methodItems} - +
) : null} - -
+
+
); } diff --git a/packages/website/src/components/TypeParamTable.tsx b/packages/website/src/components/TypeParamTable.tsx index 063e96e49..3d2cc9b60 100644 --- a/packages/website/src/components/TypeParamTable.tsx +++ b/packages/website/src/components/TypeParamTable.tsx @@ -1,5 +1,5 @@ import type { TypeParameterData } from '@discordjs/api-extractor-utils'; -import { ScrollArea } from '@mantine/core'; +import { useMemo } from 'react'; import { HyperlinkedText } from './HyperlinkedText'; import { Table } from './Table'; import { TSDoc } from './tsdoc/TSDoc'; @@ -11,21 +11,25 @@ const rowElements = { }; export function TypeParamTable({ data }: { data: TypeParameterData[] }) { - const rows = data.map((typeParam) => ({ - Name: typeParam.name, - Constraints: , - Optional: typeParam.optional ? 'Yes' : 'No', - Default: , - Description: typeParam.commentBlock ? : 'None', - })); + const rows = useMemo( + () => + data.map((typeParam) => ({ + Name: typeParam.name, + Constraints: , + Optional: typeParam.optional ? 'Yes' : 'No', + Default: , + Description: typeParam.commentBlock ? : 'None', + })), + [data], + ); return ( - +
- + ); } diff --git a/packages/website/src/components/model/Class.tsx b/packages/website/src/components/model/Class.tsx index 24d080930..08124e245 100644 --- a/packages/website/src/components/model/Class.tsx +++ b/packages/website/src/components/model/Class.tsx @@ -1,12 +1,8 @@ import type { ApiClassJSON } from '@discordjs/api-extractor-utils'; -import { Skeleton } from '@mantine/core'; -import { useRouter } from 'next/router'; import { DocContainer } from '../DocContainer'; import { ConstructorSection, MethodsSection, PropertiesSection } from '../Sections'; export function Class({ data }: { data: ApiClassJSON }) { - const router = useRouter(); - return ( {data.constructor ? : null} - - - - - - + + ); } diff --git a/packages/website/src/components/model/Enum.tsx b/packages/website/src/components/model/Enum.tsx index 490106ff2..b79f64349 100644 --- a/packages/website/src/components/model/Enum.tsx +++ b/packages/website/src/components/model/Enum.tsx @@ -1,33 +1,28 @@ import type { ApiEnumJSON } from '@discordjs/api-extractor-utils'; -import { Skeleton, Stack } from '@mantine/core'; -import { useMediaQuery } from '@mantine/hooks'; -import { useRouter } from 'next/router'; import { VscSymbolEnumMember } from 'react-icons/vsc'; +import { useMedia } from 'react-use'; import { CodeListing, CodeListingSeparatorType } from '../CodeListing'; import { DocContainer } from '../DocContainer'; import { Section } from '../Section'; export function Enum({ data }: { data: ApiEnumJSON }) { - const router = useRouter(); - const matches = useMediaQuery('(max-width: 768px)'); + const matches = useMedia('(max-width: 768px)', true); return ( - -
} padded dense={matches}> - - {data.members.map((member) => ( - - ))} - -
-
+
} padded dense={matches}> +
+ {data.members.map((member) => ( + + ))} +
+
); } diff --git a/packages/website/src/components/model/Function.tsx b/packages/website/src/components/model/Function.tsx index 9c81ef484..86ea8e5e5 100644 --- a/packages/website/src/components/model/Function.tsx +++ b/packages/website/src/components/model/Function.tsx @@ -1,12 +1,8 @@ import type { ApiFunctionJSON } from '@discordjs/api-extractor-utils'; -import { Skeleton } from '@mantine/core'; -import { useRouter } from 'next/router'; import { DocContainer } from '../DocContainer'; import { ParametersSection } from '../Sections'; export function Function({ data }: { data: ApiFunctionJSON }) { - const router = useRouter(); - return ( 1 ? ` (${data.overloadIndex})` : ''}`} @@ -15,9 +11,7 @@ export function Function({ data }: { data: ApiFunctionJSON }) { summary={data.summary} typeParams={data.typeParameters} > - - - + ); } diff --git a/packages/website/src/components/model/Interface.tsx b/packages/website/src/components/model/Interface.tsx index 72a9315d3..a380c5c85 100644 --- a/packages/website/src/components/model/Interface.tsx +++ b/packages/website/src/components/model/Interface.tsx @@ -1,12 +1,8 @@ import type { ApiInterfaceJSON } from '@discordjs/api-extractor-utils'; -import { Skeleton } from '@mantine/core'; -import { useRouter } from 'next/router'; import { DocContainer } from '../DocContainer'; import { MethodsSection, PropertiesSection } from '../Sections'; export function Interface({ data }: { data: ApiInterfaceJSON }) { - const router = useRouter(); - return ( - - - - - - + + ); } diff --git a/packages/website/src/components/tsdoc/BlockComment.tsx b/packages/website/src/components/tsdoc/BlockComment.tsx index 729d2c4b1..3b0bb4952 100644 --- a/packages/website/src/components/tsdoc/BlockComment.tsx +++ b/packages/website/src/components/tsdoc/BlockComment.tsx @@ -1,14 +1,13 @@ -import { Alert, Box, Title, Text } from '@mantine/core'; import { StandardTags } from '@microsoft/tsdoc'; import type { PropsWithChildren } from 'react'; import { VscWarning } from 'react-icons/vsc'; export function Block({ children, title }: PropsWithChildren<{ title: string }>) { return ( - - {title} +
+
{title}
{children} - +
); } @@ -21,9 +20,17 @@ export function ExampleBlock({ export function DeprecatedBlock({ children }: PropsWithChildren): JSX.Element { return ( - } title="Deprecated" variant="outline" color="red" radius="sm"> - {children} - +
+
+ + + +
+ Deprecated + {children} +
+
+
); } @@ -54,7 +61,7 @@ export function BlockComment({ return {children}; case StandardTags.typeParam.tagNameWithUpperCase: case StandardTags.param.tagNameWithUpperCase: - return {children}; + return {children}; default: // TODO: Support more blocks in the future. return <>{children}; } diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index 3d81b4a35..2e649c03b 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -7,132 +7,113 @@ import type { DocBlockJSON, DocCommentJSON, } from '@discordjs/api-extractor-utils'; -import { Anchor, Box, Code, Text, useMantineColorScheme } from '@mantine/core'; import { DocNodeKind, StandardTags } from '@microsoft/tsdoc'; import Link from 'next/link'; import { Fragment, useCallback, type ReactNode } from 'react'; -import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { vscDarkPlus, ghcolors } from 'react-syntax-highlighter/dist/cjs/styles/prism'; +import { SyntaxHighlighter } from '../SyntaxHighlighter'; import { BlockComment } from './BlockComment'; export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { - const { colorScheme } = useMantineColorScheme(); + const createNode = useCallback((node: AnyDocNodeJSON, idx?: number): ReactNode => { + let numberOfExamples = 0; + let exampleIndex = 0; - const createNode = useCallback( - (node: AnyDocNodeJSON, idx?: number): ReactNode => { - let numberOfExamples = 0; - let exampleIndex = 0; + switch (node.kind) { + case DocNodeKind.PlainText: + return ( + + {(node as DocPlainTextJSON).text} + + ); + case DocNodeKind.Paragraph: + return ( + + {(node as DocNodeContainerJSON).nodes.map((node, idx) => createNode(node, idx))} + + ); + case DocNodeKind.SoftBreak: + return ; + case DocNodeKind.LinkTag: { + const { codeDestination, urlDestination, text } = node as DocLinkTagJSON; - switch (node.kind) { - case DocNodeKind.PlainText: + if (codeDestination) { return ( - - {(node as DocPlainTextJSON).text} - + + {text ?? codeDestination.name} + ); - case DocNodeKind.Paragraph: + } + + if (urlDestination) { return ( - - {(node as DocNodeContainerJSON).nodes.map((node, idx) => createNode(node, idx))} - + + {text ?? urlDestination} + ); - case DocNodeKind.SoftBreak: - return ; - case DocNodeKind.LinkTag: { - const { codeDestination, urlDestination, text } = node as DocLinkTagJSON; + } - if (codeDestination) { - return ( - - - {text ?? codeDestination.name} - - - ); - } + return null; + } - if (urlDestination) { - return ( - - - {text ?? urlDestination} - - - ); - } + case DocNodeKind.CodeSpan: { + const { code } = node as DocFencedCodeJSON; + return ( + + {code} + + ); + } + case DocNodeKind.FencedCode: { + const { language, code } = node as DocFencedCodeJSON; + return ; + } + + case DocNodeKind.ParamBlock: + case DocNodeKind.Block: { + const { tag } = node as DocBlockJSON; + + if (tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase) { + exampleIndex++; + } + + const index = numberOfExamples > 1 ? exampleIndex : undefined; + + return ( + + {(node as DocBlockJSON).content.map((node, idx) => createNode(node, idx))} + + ); + } + + case DocNodeKind.Comment: { + const comment = node as DocCommentJSON; + + if (!comment.customBlocks.length) { return null; } - case DocNodeKind.CodeSpan: { - const { code } = node as DocFencedCodeJSON; - return ( - - {code} - - ); - } + // Cheat a bit by finding out how many comments we have beforehand... + numberOfExamples = comment.customBlocks.filter( + (block) => block.tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase, + ).length; - case DocNodeKind.FencedCode: { - const { language, code } = node as DocFencedCodeJSON; - return ( - - {code} - - ); - } - - case DocNodeKind.ParamBlock: - case DocNodeKind.Block: { - const { tag } = node as DocBlockJSON; - - if (tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase) { - exampleIndex++; - } - - const index = numberOfExamples > 1 ? exampleIndex : undefined; - - return ( - - {(node as DocBlockJSON).content.map((node, idx) => createNode(node, idx))} - - ); - } - - case DocNodeKind.Comment: { - const comment = node as DocCommentJSON; - // Cheat a bit by finding out how many comments we have beforehand... - numberOfExamples = comment.customBlocks.filter( - (block) => block.tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase, - ).length; - - return {comment.customBlocks.map((node, idx) => createNode(node, idx))}; - } - - default: - console.log(`Captured unknown node kind: ${node.kind}`); - break; + return
{comment.customBlocks.map((node, idx) => createNode(node, idx))}
; } - return null; - }, - [colorScheme], - ); + default: + // console.log(`Captured unknown node kind: ${node.kind}`); + return null; + } + }, []); return ( - + <> {node.kind === 'Paragraph' || node.kind === 'Section' ? ( <>{(node as DocNodeContainerJSON).nodes.map((node, idx) => createNode(node, idx))} ) : ( createNode(node) )} - + ); } diff --git a/packages/website/src/middleware.ts b/packages/website/src/middleware.ts index e11cc3f80..4139000e9 100644 --- a/packages/website/src/middleware.ts +++ b/packages/website/src/middleware.ts @@ -1,9 +1,21 @@ import { NextResponse, type NextRequest } from 'next/server'; +import { PACKAGES } from './util/constants'; + +export default async function middleware(request: NextRequest) { + if (PACKAGES.some((pkg) => request.nextUrl.pathname.includes(pkg))) { + const packageName = /\/docs\/packages\/([^/]+)\/.*/.exec(request.nextUrl.pathname)?.[1] ?? 'builders'; + const res = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName}`); + const data: string[] = await res.json(); + + const latestVersion = data.at(-2); + return NextResponse.redirect( + new URL(request.nextUrl.pathname.replace('stable', latestVersion ?? 'main'), request.url), + ); + } -export default function middleware(request: NextRequest) { return NextResponse.redirect(new URL('/docs/packages', request.url)); } export const config = { - matcher: ['/docs'], + matcher: ['/docs', '/docs/packages/:package/stable/:member*'], }; diff --git a/packages/website/src/pages/404.tsx b/packages/website/src/pages/404.tsx index 896cc214a..e4d5419af 100644 --- a/packages/website/src/pages/404.tsx +++ b/packages/website/src/pages/404.tsx @@ -1,41 +1,22 @@ -import { Container, Title, Group, Button, Box, createStyles } from '@mantine/core'; import Head from 'next/head'; import Link from 'next/link'; -const useStyles = createStyles((theme) => ({ - label: { - textAlign: 'center', - fontWeight: 900, - fontSize: 220, - lineHeight: 1, - marginBottom: theme.spacing.xl * 1.5, - color: theme.colorScheme === 'dark' ? theme.colors.dark![4] : theme.colors.gray![2], - - [theme.fn.smallerThan('sm')]: { - fontSize: 120, - }, - }, -})); - export default function FourOhFourPage() { - const { classes } = useStyles(); - return ( <> discord.js | 404 + - - 404 - Not found. - - - - - - +
+

404

+

Not found.

+ + + Take me back + + +
); } diff --git a/packages/website/src/pages/_app.tsx b/packages/website/src/pages/_app.tsx index 0451c156d..dc4d5450b 100644 --- a/packages/website/src/pages/_app.tsx +++ b/packages/website/src/pages/_app.tsx @@ -1,135 +1,31 @@ -import { type ColorScheme, ColorSchemeProvider, MantineProvider } from '@mantine/core'; -import { useLocalStorage } from '@mantine/hooks'; -import { type SpotlightAction, SpotlightProvider } from '@mantine/spotlight'; import type { AppProps } from 'next/app'; import Head from 'next/head'; -import { type NextRouter, useRouter } from 'next/router'; -import { VscPackage } from 'react-icons/vsc'; -import { RouterTransition } from '../components/RouterTransition'; +import NextProgress from 'next-progress'; +import { ThemeProvider } from 'next-themes'; +import '@unocss/reset/antfu.css'; import '../styles/unocss.css'; import '../styles/main.css'; -import { miniSearch } from '~/util/search'; - -const actions: (router: NextRouter) => SpotlightAction[] = (router: NextRouter) => [ - { - title: 'Home', - description: 'Go to landing page', - onTrigger: () => void router.push('/'), - icon: , - }, - { - title: 'Packages', - description: 'Go to the package selection', - onTrigger: () => void router.push('/docs/packages'), - icon: , - }, - { - id: 'packages-builders', - title: 'Builders', - description: 'Go to the @discordjs/builders documentation', - onTrigger: () => void router.push('/docs/packages/builders'), - icon: , - }, - { - id: 'packages-collection', - title: 'Collection', - description: 'Go to the @discordjs/collection documentation', - onTrigger: () => void router.push('/docs/packages/collection'), - icon: , - }, - { - id: 'packages-proxy', - title: 'Proxy', - description: 'Go to the @discordjs/proxy documentation', - onTrigger: () => void router.push('/docs/packages/proxy'), - icon: , - }, - { - id: 'packages-rest', - title: 'REST', - description: 'Go to the @discordjs/rest documentation', - onTrigger: () => void router.push('/docs/packages/voice'), - icon: , - }, - { - id: 'packages-voice', - title: 'Voice', - description: 'Go to the @discordjs/voice documentation', - onTrigger: () => void router.push('/docs/packages/ws'), - icon: , - }, - { - id: 'packages-ws', - title: 'WS', - description: 'Go to the @discordjs/ws documentation', - onTrigger: () => void router.push('/docs'), - icon: , - }, -]; export default function MyApp({ Component, pageProps }: AppProps) { - const router = useRouter(); - const [colorScheme, setColorScheme] = useLocalStorage({ - key: 'theme', - defaultValue: 'dark', - getInitialValueInEffect: true, - }); - const toggleColorScheme = (value?: ColorScheme) => - setColorScheme(value ?? (colorScheme === 'dark' ? 'light' : 'dark')); - return ( <> discord.js + - - - { - if (!query) { - return actions; - } - - const search = miniSearch.search(query); - return actions.filter((action) => search.some((res) => res.name === action.title)); - }} - > - - - - - + + + + ); } diff --git a/packages/website/src/pages/_document.tsx b/packages/website/src/pages/_document.tsx index bc5736543..3c4235adc 100644 --- a/packages/website/src/pages/_document.tsx +++ b/packages/website/src/pages/_document.tsx @@ -1,43 +1,33 @@ -import { createGetInitialProps } from '@mantine/next'; -import Document, { Html, Head, Main, NextScript } from 'next/document'; +import { Html, Head, Main, NextScript } from 'next/document'; +import { DESCRIPTION } from '~/util/constants'; -const getInitialProps = createGetInitialProps(); +export default function Document() { + return ( + + + + + + + -export default class _Document extends Document { - public static override getInitialProps = getInitialProps; - - public override render() { - return ( - - - - - - - - - - - - - - - - - - - - -
- - - - ); - } + + + + + + + + + + + + + + +
+ + + + ); } diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 85ad5b012..f69a06c2e 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -13,22 +13,23 @@ import { type ApiEnumJSON, } from '@discordjs/api-extractor-utils'; import { createApiModel } from '@discordjs/scripts'; -import { ActionIcon, Affix, Box, LoadingOverlay, Transition } from '@mantine/core'; -import { useMediaQuery, useWindowScroll } from '@mantine/hooks'; -import { registerSpotlightActions } from '@mantine/spotlight'; import { ApiFunction, ApiItemKind, type ApiPackage } from '@microsoft/api-extractor-model'; import Head from 'next/head'; import { useRouter } from 'next/router'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; import { MDXRemote } from 'next-mdx-remote'; import { serialize } from 'next-mdx-remote/serialize'; -import { useEffect } from 'react'; -import { VscChevronUp } from 'react-icons/vsc'; +import { useMemo } from 'react'; import rehypeIgnore from 'rehype-ignore'; -import rehypePrettyCode from 'rehype-pretty-code'; +import rehypePrettyCode, { type Options } from 'rehype-pretty-code'; import rehypeRaw from 'rehype-raw'; import rehypeSlug from 'rehype-slug'; import remarkGfm from 'remark-gfm'; +import { getHighlighter } from 'shiki'; +import shikiLangJavascript from 'shiki/languages/javascript.tmLanguage.json'; +import shikiLangTypescript from 'shiki/languages/typescript.tmLanguage.json'; +import shikiThemeDarkPlus from 'shiki/themes/dark-plus.json'; +import shikiThemeLightPlus from 'shiki/themes/light-plus.json'; import { SidebarLayout, type SidebarLayoutProps } from '~/components/SidebarLayout'; import { Class } from '~/components/model/Class'; import { Enum } from '~/components/model/Enum'; @@ -37,9 +38,9 @@ import { Interface } from '~/components/model/Interface'; import { TypeAlias } from '~/components/model/TypeAlias'; import { Variable } from '~/components/model/Variable'; import { MemberProvider } from '~/contexts/member'; +import { PACKAGES } from '~/util/constants'; import { findMember, findMemberByKey } from '~/util/model.server'; -import { PACKAGES } from '~/util/packages'; -import { miniSearch } from '~/util/search'; +// import { miniSearch } from '~/util/search'; export const getStaticPaths: GetStaticPaths = async () => { const pkgs = ( @@ -54,6 +55,7 @@ export const getStaticPaths: GetStaticPaths = async () => { } else { const response = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName}`); versions = await response.json(); + versions = versions.slice(-2); for (const version of versions) { const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/${version}.api.json`); @@ -123,7 +125,13 @@ export const getStaticPaths: GetStaticPaths = async () => { }; export const getStaticProps: GetStaticProps = async ({ params }) => { - const [, packageName = 'builders', branchName = 'main', member] = params!.slug as string[]; + const [path, packageName = 'builders', branchName = 'main', member] = params!.slug as string[]; + + if (path !== 'packages' || !PACKAGES.includes(packageName)) { + return { + notFound: true, + }; + } const [memberName, overloadIndex] = member?.split(':') ?? []; @@ -134,7 +142,30 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { mdxOptions: { remarkPlugins: [remarkGfm], remarkRehypeOptions: { allowDangerousHtml: true }, - rehypePlugins: [rehypeRaw, rehypeIgnore, rehypeSlug, [rehypePrettyCode, { theme: 'dark-plus' }]], + rehypePlugins: [ + rehypeRaw, + rehypeIgnore, + rehypeSlug, + [ + rehypePrettyCode, + { + theme: { + dark: shikiThemeDarkPlus, + light: shikiThemeLightPlus, + }, + getHighlighter: async (options?: Partial) => + getHighlighter({ + ...options, + langs: [ + // @ts-expect-error: Working as intended + { id: 'javascript', aliases: ['js'], scopeName: 'source.js', grammar: shikiLangJavascript }, + // @ts-expect-error: Working as intended + { id: 'typescript', aliases: ['ts'], scopeName: 'source.ts', grammar: shikiLangTypescript }, + ], + }), + }, + ], + ], format: 'md', }, }); @@ -186,7 +217,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { props: { error: error_, }, - revalidate: 3_600, + revalidate: 1, }; } }; @@ -206,46 +237,30 @@ const member = (props?: ApiItemJSON | undefined) => { case 'Enum': return ; default: - return Cannot render that item type; + return
Cannot render that item type
; } }; export default function SlugPage(props: Partial) { const router = useRouter(); - const [scroll, scrollTo] = useWindowScroll(); - const matches = useMediaQuery('(max-width: 1200px)'); - - useEffect(() => { - if (props.data?.searchIndex) { - const searchIndex = props.data?.searchIndex.map((idx, index) => ({ id: index, ...idx })) ?? []; - miniSearch.addAll(searchIndex); - - registerSpotlightActions( - searchIndex.map((idx) => ({ - title: idx.name, - description: idx.summary ?? '', - onTrigger: () => void router.push(idx.path), - })), - ); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - const name = `discord.js${props.data?.member?.name ? ` | ${props.data.member.name}` : ''}`; + const name = useMemo( + () => `discord.js${props.data?.member?.name ? ` | ${props.data.member.name}` : ''}`, + [props.data?.member?.name], + ); + const ogTitle = useMemo( + () => `${props.packageName ?? 'discord.js'}${props.data?.member?.name ? ` | ${props.data.member.name}` : ''}`, + [props.packageName, props.data?.member?.name], + ); if (router.isFallback) { - return ( - - - - ); + return null; } // Just in case // return ; return props.error ? ( - {props.error} +
{props.error}
) : ( @@ -253,50 +268,20 @@ export default function SlugPage(props: Partial {name} + {member(props.data.member)} ) : props.data?.source ? ( - ({ - a: { - backgroundColor: 'transparent', - color: theme.colors.blurple![0], - textDecoration: 'none', - }, - img: { - borderStyle: 'none', - maxWidth: '100%', - boxSizing: 'content-box', - }, - })} - px="xl" - > +
- +
) : null} - - 200}> - {(transitionStyles) => ( - scrollTo({ y: 0 })} - > - - - )} - -
); } + +export const config = { + unstable_includeFiles: ['../{builders,collection,proxy,rest,voice,ws}/README.md'], +}; diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 756747901..c7b3dbc7e 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -1,21 +1,7 @@ -import { - Container, - UnstyledButton, - createStyles, - Group, - ThemeIcon, - Text, - Stack, - Box, - Title, - useMantineColorScheme, - Affix, -} from '@mantine/core'; import Link from 'next/link'; -import { useRouter } from 'next/router'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; import { VscArrowLeft, VscArrowRight, VscVersions } from 'react-icons/vsc'; -import { PACKAGES } from '~/util/packages'; +import { PACKAGES } from '~/util/constants'; interface VersionProps { data: { @@ -34,20 +20,21 @@ export const getStaticPaths: GetStaticPaths = () => { }; export const getStaticProps: GetStaticProps = async ({ params }) => { - const packageName = params!.package as string | undefined; + const packageName = params!.package as string; + + if (!PACKAGES.includes(packageName)) { + return { + notFound: true, + }; + } try { - const res = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName ?? 'builders'}`); + const res = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName}`); const data: string[] = await res.json(); if (!data.length) { - console.error('No tags'); - return { - props: { - error: 'No tags', - }, - revalidate: 3_600, + notFound: true, }; } @@ -55,7 +42,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { props: { packageName, data: { - versions: data, + versions: data.reverse(), }, }, revalidate: 3_600, @@ -68,66 +55,39 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { props: { error: error_, }, - revalidate: 3_600, + revalidate: 1, }; } }; -const useStyles = createStyles((theme) => ({ - outer: { - display: 'flex', - height: '100%', - alignItems: 'center', - }, - - control: { - padding: theme.spacing.xs, - color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, - borderRadius: theme.radius.xs, - - '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - }, - }, -})); - export default function VersionsRoute(props: Partial & { error?: string }) { - const router = useRouter(); - const { classes } = useStyles(); - const { colorScheme } = useMantineColorScheme(); - return props.error ? ( - {props.error} +
+ {props.error} +
) : ( - - - - Select a version: - +
+
+

Select a version:

{props.data?.versions.map((version) => ( - - - - - - - - - {version} - - + + +
+
+ +

{version}

+
- - +
+
)) ?? null} - - - void router.push('/docs/packages')}> - - - - + + + Go back + + +
+
); } diff --git a/packages/website/src/pages/docs/packages/index.tsx b/packages/website/src/pages/docs/packages/index.tsx index 928af3e36..459facc74 100644 --- a/packages/website/src/pages/docs/packages/index.tsx +++ b/packages/website/src/pages/docs/packages/index.tsx @@ -1,95 +1,98 @@ -import { - Container, - UnstyledButton, - createStyles, - Group, - ThemeIcon, - Text, - Stack, - Title, - useMantineColorScheme, - Button, -} from '@mantine/core'; +import { Button } from 'ariakit/button'; import Link from 'next/link'; import { useRouter } from 'next/router'; -import type { MouseEvent } from 'react'; -import { VscArrowRight, VscPackage } from 'react-icons/vsc'; -import { PACKAGES } from '~/util/packages'; +import type { GetStaticProps } from 'next/types'; +import { useCallback, type MouseEvent } from 'react'; +import { VscArrowLeft, VscArrowRight, VscPackage } from 'react-icons/vsc'; +import { PACKAGES } from '~/util/constants'; -const useStyles = createStyles((theme) => ({ - outer: { - display: 'flex', - height: '100%', - alignItems: 'center', - }, +interface PackageProps { + data: { + versions: { packageName: string; version: string }[]; + }; +} - control: { - padding: theme.spacing.xs, - color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, - borderRadius: theme.radius.xs, +export const getStaticProps: GetStaticProps = async () => { + try { + const versions = await Promise.all( + PACKAGES.map(async (pkg) => { + const response = await fetch(`https://docs.discordjs.dev/api/info?package=${pkg}`); + const versions = await response.json(); + const latestVersion = versions.at(-2); + return { packageName: pkg, version: latestVersion }; + }), + ); - '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - }, - }, -})); + return { + props: { + versions, + }, + revalidate: 3_600, + }; + } catch (error_) { + const error = error_ as Error; + console.error(error); -export default function PackagesRoute() { - const { classes } = useStyles(); - const { colorScheme } = useMantineColorScheme(); + return { + props: { + error: error_, + }, + revalidate: 1, + }; + } +}; + +export default function PackagesRoute(props: Partial & { error?: string }) { const router = useRouter(); + const findLatestVersion = useCallback( + (pkg: string) => props.data?.versions.find((version) => version.packageName === pkg), + [props.data?.versions], + ); const handleClick = async (ev: MouseEvent, packageName: string) => { ev.stopPropagation(); - - const res = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName ?? 'builders'}`); - const data: string[] = await res.json(); - - const latestVersion = data.at(-2); - void router.push(`/docs/packages/${packageName}/${latestVersion}`); + void router.push(`/docs/packages/${packageName}`); }; - return ( - - - - Select a package: - + return props.error ? ( +
+ {props.error} +
+ ) : ( +
+
+

Select a package:

{PACKAGES.map((pkg) => ( - ) => void handleClick(ev, pkg)} - > - - - - - - - - {pkg} - - - - - - - - - + + +
+
+
+ +

{pkg}

+
+ + + +
+ +
+
+ ))} - - + + + Go back + + +
+
); } diff --git a/packages/website/src/pages/index.tsx b/packages/website/src/pages/index.tsx index 38a966fd4..91d3394d5 100644 --- a/packages/website/src/pages/index.tsx +++ b/packages/website/src/pages/index.tsx @@ -1,133 +1,52 @@ -import { createStyles, Container, Title, Button, Group, Text, Center, Box, useMantineColorScheme } from '@mantine/core'; import Image from 'next/future/image'; import Link from 'next/link'; import { FiExternalLink } from 'react-icons/fi'; -import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { vscDarkPlus, ghcolors } from 'react-syntax-highlighter/dist/cjs/styles/prism'; - -const useStyles = createStyles((theme) => ({ - outer: { - display: 'flex', - flexDirection: 'column', - height: '100%', - justifyContent: 'center', - gap: 50, - padding: 32, - - [theme.fn.smallerThan('md')]: { - height: 'unset', - }, - }, - - inner: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center', - - [theme.fn.smallerThan('md')]: { - flexDirection: 'column', - gap: 50, - }, - }, - - content: { - maxWidth: 480, - marginRight: theme.spacing.xl, - - [theme.fn.smallerThan('md')]: { - marginRight: 0, - }, - }, - - title: { - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - fontSize: 44, - lineHeight: 1.2, - fontWeight: 900, - - [theme.fn.smallerThan('xs')]: { - fontSize: 28, - }, - }, - - highlight: { - position: 'relative', - backgroundColor: theme.fn.variant({ variant: 'light', color: theme.primaryColor }).background!, - borderRadius: theme.radius.sm, - padding: '4px 12px', - }, -})); +import vercelLogo from '../assets/powered-by-vercel.svg'; +import { SyntaxHighlighter } from '~/components/SyntaxHighlighter'; +import { CODE_EXAMPLE } from '~/util/constants'; export default function IndexRoute() { - const { classes } = useStyles(); - const { colorScheme } = useMantineColorScheme(); - return ( - - - - - The <span className={classes.highlight}>most popular</span> way to build Discord <br /> bots. - - +
+
+
+

+ The most popular way to build + Discord
bots. +

+

discord.js is a powerful node.js module that allows you to interact with the Discord API very easily. It takes a much more object-oriented approach than most other JS Discord libraries, making your bot's code significantly tidier and easier to comprehend. - - - - - + - - - - - - - - {`import { Client, GatewayIntentBits } from 'discord.js'; - -const client = new Client({ intents: [GatewayIntentBits.Guilds] }); - -client.on('ready', () => { - console.log(\`Logged in as \${client.user.tag}!\`); -}); - -client.on('interactionCreate', async (interaction) => { - if (!interaction.isChatInputCommand()) return; - - if (interaction.commandName === 'ping') { - await interaction.reply('Pong!'); - } -}); - -await client.login('token');`} - - - -

- - - - - -
- + + Guide + +
+
+ +
+
+ + + +
+ ); } diff --git a/packages/website/src/styles/main.css b/packages/website/src/styles/main.css index 8c7b5733c..c38c8ea7a 100644 --- a/packages/website/src/styles/main.css +++ b/packages/website/src/styles/main.css @@ -1,29 +1,43 @@ @import url('https://rsms.me/inter/inter.css'); +:root { + font-family: 'Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue; + font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11'; +} + @supports (font-variation-settings: normal) { - html { - font-family: 'Inter var', sans-serif; - font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11'; + :root { + font-family: 'Inter var', Arial, Noto Sans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', Segoe UI Symbol, + 'Noto Color Emoji'; } } html, body { - height: 100vh; - margin: 0; - font-family: 'Inter var', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, - Helvetica Neue, Arial, Noto Sans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', Segoe UI Symbol, - 'Noto Color Emoji'; - font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11'; + height: 100%; } #__next { - max-width: 100%; - max-height: 100%; - width: 100%; height: 100%; } +.light [data-theme='dark'] { + display: none; +} + +.dark [data-theme='light'] { + display: none; +} + +pre[data-theme='light'] { + background: #ffffff; + border: 1px solid #dddddd; +} + +pre[data-theme='dark'] { + background: #1e1e1e; +} + pre { font-size: 13px !important; white-space: pre; @@ -35,10 +49,9 @@ pre { padding: 1em; margin: 0.5em 0; overflow: auto; - background: #1e1e1e; border-radius: 4px; } code { - font-family: 'JetBrains Mono' !important; + font-family: 'JetBrains Mono', monospace !important; } diff --git a/packages/website/src/util/constants.ts b/packages/website/src/util/constants.ts new file mode 100644 index 000000000..7c1098487 --- /dev/null +++ b/packages/website/src/util/constants.ts @@ -0,0 +1,22 @@ +export const PACKAGES = ['builders', 'collection', 'proxy', 'rest', 'voice', 'ws']; + +export const DESCRIPTION = + "discord.js is a powerful node.js module that allows you to interact with the Discord API very easily. It takes a much more object-oriented approach than most other JS Discord libraries, making your bot's code significantly tidier and easier to comprehend."; + +export const CODE_EXAMPLE = `import { Client, GatewayIntentBits } from 'discord.js'; + +const client = new Client({ intents: [GatewayIntentBits.Guilds] }); + +client.on('ready', () => { + console.log(\`Logged in as \${client.user.tag}!\`); +}); + +client.on('interactionCreate', async (interaction) => { + if (!interaction.isChatInputCommand()) return; + + if (interaction.commandName === 'ping') { + await interaction.reply('Pong!'); + } +}); + +await client.login('token');`; diff --git a/packages/website/src/util/packages.ts b/packages/website/src/util/packages.ts deleted file mode 100644 index 8b02eb866..000000000 --- a/packages/website/src/util/packages.ts +++ /dev/null @@ -1 +0,0 @@ -export const PACKAGES = ['builders', 'collection', 'proxy', 'rest', 'voice', 'ws']; diff --git a/packages/website/src/util/search.ts b/packages/website/src/util/search.ts deleted file mode 100644 index c48895b9d..000000000 --- a/packages/website/src/util/search.ts +++ /dev/null @@ -1,6 +0,0 @@ -import MiniSearch from 'minisearch'; - -export const miniSearch = new MiniSearch({ - fields: ['name', 'summary'], - storeFields: ['name', 'summary', 'path'], -}); diff --git a/packages/website/unocss.config.ts b/packages/website/unocss.config.ts index 7aa539329..17086a0ab 100644 --- a/packages/website/unocss.config.ts +++ b/packages/website/unocss.config.ts @@ -1,10 +1,20 @@ -import presetWebFonts from '@unocss/preset-web-fonts'; -import { defineConfig, presetUno } from 'unocss'; +import { defineConfig, presetTypography, presetUno, presetWebFonts } from 'unocss'; export default defineConfig({ theme: { colors: { - blurple: '#5865F2', + blurple: { + 50: '#e0e3ff', + 100: '#cdd2ff', + 200: '#9ea7ff', + 300: '#7782fa', + DEFAULT: '#5865F2', + 500: '#3d48c3', + 600: '#293294', + 700: '#1a2165', + 800: '#0e1137', + 900: '#020208', + }, }, }, presets: [ @@ -12,7 +22,43 @@ export default defineConfig({ presetWebFonts({ provider: 'google', fonts: { - mono: ['JetBrains Mono', 'JetBrains Mono:400,600'], + mono: ['JetBrains Mono', 'JetBrains Mono:400,600,700'], + }, + }), + presetTypography({ + cssExtend: { + pre: { + padding: '1em', + 'line-height': '1.5', + 'border-radius': '4px', + }, + code: { + 'font-size': '1em', + 'font-weight': 'unset', + }, + ':where(:not(pre) > code)::before': { + content: '""', + }, + ':where(:not(pre) > code)::after': { + content: '""', + }, + a: { + color: '#5865F2', + 'text-decoration': 'none', + }, + 'a > img': { + display: 'inline-block', + }, + h2: { + 'margin-top': '1.25em', + }, + h3: { + 'margin-top': '0.75em', + }, + // eslint-disable-next-line id-length + p: { + margin: '.5em 0', + }, }, }), ], diff --git a/packages/ws/package.json b/packages/ws/package.json index ac2aab165..ea685bfe1 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -65,8 +65,8 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", - "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.23.0", + "@types/node": "^16.11.57", + "@vitest/coverage-c8": "^0.23.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", @@ -75,7 +75,7 @@ "tsup": "^6.2.3", "typescript": "^4.8.2", "undici": "^5.10.0", - "vitest": "^0.23.0", + "vitest": "^0.23.1", "zlib-sync": "^0.1.7" }, "engines": { diff --git a/yarn.lock b/yarn.lock index 597ee31b5..751ec1956 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,7 +128,14 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.10, @babel/core@npm:^7.18.13": +"@babel/compat-data@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/compat-data@npm:7.19.0" + checksum: f90d25a3779578c230ad0632e12ffd5ee1033614dee2786f7f1567823a78923da7185638eedd7166f31e4771a3398ae6a28ab8e680b96cc25bafb38a3b66ff11 + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.13": version: 7.18.13 resolution: "@babel/core@npm:7.18.13" dependencies: @@ -151,6 +158,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/core@npm:7.19.0" + dependencies: + "@ampproject/remapping": ^2.1.0 + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.19.0 + "@babel/helper-compilation-targets": ^7.19.0 + "@babel/helper-module-transforms": ^7.19.0 + "@babel/helpers": ^7.19.0 + "@babel/parser": ^7.19.0 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.19.0 + "@babel/types": ^7.19.0 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.1 + semver: ^6.3.0 + checksum: 0d5b52b552e215802d2fd7b266611c390d90b28dece09db8a142666c32928c5d404eb72a95630b4cb726c4d80a53fcdc2d6464cd7ad28bb26087475f1b2205e2 + languageName: node + linkType: hard + "@babel/generator@npm:^7.18.13, @babel/generator@npm:^7.7.2": version: 7.18.13 resolution: "@babel/generator@npm:7.18.13" @@ -162,6 +192,17 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/generator@npm:7.19.0" + dependencies: + "@babel/types": ^7.19.0 + "@jridgewell/gen-mapping": ^0.3.2 + jsesc: ^2.5.1 + checksum: aa3d5785cf8f8e81672dcc61aef351188efeadb20d9f66d79113d82cbcf3bbbdeb829989fa14582108572ddbc4e4027bdceb06ccaf5ec40fa93c2dda8fbcd4aa + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" @@ -195,6 +236,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-compilation-targets@npm:7.19.0" + dependencies: + "@babel/compat-data": ^7.19.0 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.20.2 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 5f1be9811d53a5e43eb4b9b402517dec79bfa3a55e9fbc131a106914a78b435bc08a4b35591e424665c36c2c1eceb864ec2ca2c2f3dcf240a1551a28530428f9 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.18.9": version: 7.18.13 resolution: "@babel/helper-create-class-features-plugin@npm:7.18.13" @@ -224,6 +279,18 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-regexp-features-plugin@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.19.0" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + regexpu-core: ^5.1.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 811cc90afe9fc25a74ed37fc0c1361a4a91b0b940235dd3958e3f03b366d40a903b40fc93b51bcb93be774aba573219f8f215664bea1d1301f58797ca6854f3f + languageName: node + linkType: hard + "@babel/helper-define-polyfill-provider@npm:^0.3.2": version: 0.3.2 resolution: "@babel/helper-define-polyfill-provider@npm:0.3.2" @@ -266,6 +333,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-function-name@npm:7.19.0" + dependencies: + "@babel/template": ^7.18.10 + "@babel/types": ^7.19.0 + checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e + languageName: node + linkType: hard + "@babel/helper-hoist-variables@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-hoist-variables@npm:7.18.6" @@ -284,7 +361,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.18.6": +"@babel/helper-module-imports@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-module-imports@npm:7.18.6" dependencies: @@ -309,6 +386,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-module-transforms@npm:7.19.0" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-simple-access": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.18.6 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.19.0 + "@babel/types": ^7.19.0 + checksum: 4483276c66f56cf3b5b063634092ad9438c2593725de5c143ba277dda82f1501e6d73b311c1b28036f181dbe36eaeff29f24726cde37a599d4e735af294e5359 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" @@ -325,6 +418,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-plugin-utils@npm:7.19.0" + checksum: eedc996c633c8c207921c26ec2989eae0976336ecd9b9f1ac526498f52b5d136f7cd03c32b6fdf8d46a426f907c142de28592f383c42e5fba1e904cbffa05345 + languageName: node + linkType: hard + "@babel/helper-remap-async-to-generator@npm:^7.18.6, @babel/helper-remap-async-to-generator@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" @@ -423,6 +523,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helpers@npm:7.19.0" + dependencies: + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.19.0 + "@babel/types": ^7.19.0 + checksum: e50e78e0dbb0435075fa3f85021a6bcae529589800bca0292721afd7f7c874bea54508d6dc57eca16e5b8224f8142c6b0e32e3b0140029dc09865da747da4623 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" @@ -443,6 +554,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/parser@npm:7.19.0" + bin: + parser: ./bin/babel-parser.js + checksum: af86d829bfeb60e0dcf54a43489c2514674b6c8d9bb24cf112706772125752fcd517877ad30501d533fa85f70a439d02eebeec3be9c2e95499853367184e0da7 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" @@ -467,17 +587,17 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-async-generator-functions@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.18.10" +"@babel/plugin-proposal-async-generator-functions@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.19.0" dependencies: "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-remap-async-to-generator": ^7.18.9 "@babel/plugin-syntax-async-generators": ^7.8.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3a6c25085021053830f6c57780118d3337935ac3309eef7f09b11e413d189eed8119d50cbddeb4c8c02f42f8cc01e62a4667b869be6e158f40030bafb92a0629 + checksum: f1876286d608650928f60ac6091b9a6e7839e005941be483df47693b98c90649202aa1793f28f6e9b4ce69bf0773552144fa40f38751f56dc5d02051a8ee0461 languageName: node linkType: hard @@ -755,7 +875,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.17.12, @babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": +"@babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.18.6 resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" dependencies: @@ -911,21 +1031,22 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-classes@npm:7.18.9" +"@babel/plugin-transform-classes@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-transform-classes@npm:7.19.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-compilation-targets": ^7.19.0 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-replace-supers": ^7.18.9 "@babel/helper-split-export-declaration": ^7.18.6 globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d7e953c0cf32af64e75db1277d2556c04635f32691ef462436897840be6f8021d4f85ee96134cb796a12dda549cf53346fedf96b671885f881bc4037c9d120ad + checksum: 5500953031fc3eae73f717c7b59ef406158a4a710d566a0f78a4944240bcf98f817f07cf1d6af0e749e21f0dfee29c36412b75d57b0a753c3ad823b70c596b79 languageName: node linkType: hard @@ -940,7 +1061,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.18.9": +"@babel/plugin-transform-destructuring@npm:^7.18.13": version: 7.18.13 resolution: "@babel/plugin-transform-destructuring@npm:7.18.13" dependencies: @@ -1059,18 +1180,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.18.9" +"@babel/plugin-transform-modules-systemjs@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.19.0" dependencies: "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-module-transforms": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-module-transforms": ^7.19.0 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-validator-identifier": ^7.18.6 babel-plugin-dynamic-import-node: ^2.3.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6122d9901ed5dc56d9db843efc9249fe20d769a11989bbbf5a806ed4f086def949185198aa767888481babf70fc52b6b3e297a991e2b02b4f34ffb03d998d1e3 + checksum: a0742deee4a076d6fc303d036c1ea2bea9b7d91af390483fe91fc415f9cb43925bb5dd930fdcb8fcdc9d4c7a22774a3cec521c67f1422a9b473debcb85ee57f9 languageName: node linkType: hard @@ -1086,15 +1207,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.18.6" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.19.0" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-create-regexp-features-plugin": ^7.19.0 + "@babel/helper-plugin-utils": ^7.19.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 6ef64aa3dad68df139eeaa7b6e9bb626be8f738ed5ed4db765d516944b1456d513b6bad3bb60fff22babe73de26436fd814a4228705b2d3d2fdb272c31da35e2 + checksum: 60f7b2c537fa3e8392f19b1f1026ba68844c5dc7942867e7a96a636d8a52d4766629b898e59aa690d3806bf02a7fa52e12d1f7c1ca2ef4fa2b53f3fe0a835117 languageName: node linkType: hard @@ -1225,15 +1346,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-spread@npm:7.18.9" +"@babel/plugin-transform-spread@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-transform-spread@npm:7.19.0" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 59489dd6212bd21debdf77746d9fa02dfe36f7062dc08742b8841d04312a26ea37bc0d71c71a6e37c3ab81dce744faa7f23fa94b0915593458f6adc35c087766 + checksum: e73a4deb095999185e70b524d0ff4e35df50fcda58299e700a6149a15bbc1a9b369ef1cef384e15a54b3c3ce316cc0f054dbf249dcd0d1ca59f4281dd4df9718 languageName: node linkType: hard @@ -1306,17 +1427,17 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/preset-env@npm:7.18.10" +"@babel/preset-env@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/preset-env@npm:7.19.0" dependencies: - "@babel/compat-data": ^7.18.8 - "@babel/helper-compilation-targets": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/compat-data": ^7.19.0 + "@babel/helper-compilation-targets": ^7.19.0 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-validator-option": ^7.18.6 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.9 - "@babel/plugin-proposal-async-generator-functions": ^7.18.10 + "@babel/plugin-proposal-async-generator-functions": ^7.19.0 "@babel/plugin-proposal-class-properties": ^7.18.6 "@babel/plugin-proposal-class-static-block": ^7.18.6 "@babel/plugin-proposal-dynamic-import": ^7.18.6 @@ -1350,9 +1471,9 @@ __metadata: "@babel/plugin-transform-async-to-generator": ^7.18.6 "@babel/plugin-transform-block-scoped-functions": ^7.18.6 "@babel/plugin-transform-block-scoping": ^7.18.9 - "@babel/plugin-transform-classes": ^7.18.9 + "@babel/plugin-transform-classes": ^7.19.0 "@babel/plugin-transform-computed-properties": ^7.18.9 - "@babel/plugin-transform-destructuring": ^7.18.9 + "@babel/plugin-transform-destructuring": ^7.18.13 "@babel/plugin-transform-dotall-regex": ^7.18.6 "@babel/plugin-transform-duplicate-keys": ^7.18.9 "@babel/plugin-transform-exponentiation-operator": ^7.18.6 @@ -1362,9 +1483,9 @@ __metadata: "@babel/plugin-transform-member-expression-literals": ^7.18.6 "@babel/plugin-transform-modules-amd": ^7.18.6 "@babel/plugin-transform-modules-commonjs": ^7.18.6 - "@babel/plugin-transform-modules-systemjs": ^7.18.9 + "@babel/plugin-transform-modules-systemjs": ^7.19.0 "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.18.6 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.19.0 "@babel/plugin-transform-new-target": ^7.18.6 "@babel/plugin-transform-object-super": ^7.18.6 "@babel/plugin-transform-parameters": ^7.18.8 @@ -1372,14 +1493,14 @@ __metadata: "@babel/plugin-transform-regenerator": ^7.18.6 "@babel/plugin-transform-reserved-words": ^7.18.6 "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.18.9 + "@babel/plugin-transform-spread": ^7.19.0 "@babel/plugin-transform-sticky-regex": ^7.18.6 "@babel/plugin-transform-template-literals": ^7.18.9 "@babel/plugin-transform-typeof-symbol": ^7.18.9 "@babel/plugin-transform-unicode-escapes": ^7.18.10 "@babel/plugin-transform-unicode-regex": ^7.18.6 "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.18.10 + "@babel/types": ^7.19.0 babel-plugin-polyfill-corejs2: ^0.3.2 babel-plugin-polyfill-corejs3: ^0.5.3 babel-plugin-polyfill-regenerator: ^0.4.0 @@ -1387,7 +1508,7 @@ __metadata: semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 36eeb7157021091c8047703833b7a28e4963865d16968a5b9dbffe1eb05e44307a8d29ad45d81fd23817f68290b52921c42f513a93996c7083d23d5e2cea0c6b + checksum: ae1866b9a6c9749d52618f39aab8c369e0d6dc88e327341fae932411a0d51db2ec51b882cebc62ff3d49443261a6940e3fc03762ff3925d165884e7990eb612c languageName: node linkType: hard @@ -1429,7 +1550,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.8.4": +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.8.4": version: 7.18.9 resolution: "@babel/runtime@npm:7.18.9" dependencies: @@ -1467,6 +1588,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/traverse@npm:7.19.0" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.19.0 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.19.0 + "@babel/types": ^7.19.0 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: dcbd1316c9f4bf3cefee45b6f5194590563aa5d123500a60d3c8d714bef279205014c8e599ebafc469967199a7622e1444cd0235c16d4243da437e3f1281771e + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.10.3, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.18.13 resolution: "@babel/types@npm:7.18.13" @@ -1478,6 +1617,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/types@npm:7.19.0" + dependencies: + "@babel/helper-string-parser": ^7.18.10 + "@babel/helper-validator-identifier": ^7.18.6 + to-fast-properties: ^2.0.0 + checksum: 9b346715a68aeede70ba9c685a144b0b26c53bcd595d448e24c8fa8df4d5956a5712e56ebadb7c85dcc32f218ee42788e37b93d50d3295c992072224cb3ef3fe + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -1731,15 +1881,15 @@ __metadata: resolution: "@discordjs/actions@workspace:packages/actions" dependencies: "@actions/core": ^1.9.1 - "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.23.0 + "@types/node": ^16.11.57 + "@vitest/coverage-c8": ^0.23.1 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 prettier: ^2.7.1 tslib: ^2.4.0 tsup: ^6.2.3 typescript: ^4.8.2 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -1749,7 +1899,7 @@ __metadata: dependencies: "@microsoft/api-extractor-model": 7.24.0 "@microsoft/tsdoc": ^0.14.1 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 prettier: ^2.7.1 @@ -1766,8 +1916,8 @@ __metadata: "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.30.0 "@sapphire/shapeshift": ^3.6.0 - "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.23.0 + "@types/node": ^16.11.57 + "@vitest/coverage-c8": ^0.23.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 @@ -1778,7 +1928,7 @@ __metadata: tslib: ^2.4.0 tsup: ^6.2.3 typescript: ^4.8.2 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -1789,15 +1939,15 @@ __metadata: "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.30.0 - "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.23.0 + "@types/node": ^16.11.57 + "@vitest/coverage-c8": ^0.23.1 downlevel-dts: ^0.10.1 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 prettier: ^2.7.1 tsup: ^6.2.3 typescript: ^4.8.2 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -1825,7 +1975,7 @@ __metadata: dependencies: "@favware/cliff-jumper": ^1.8.7 "@types/jsdoc-to-markdown": ^7.0.3 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 commander: ^9.4.0 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 @@ -1846,7 +1996,7 @@ __metadata: dependencies: "@discordjs/proxy": ^1.1.0 "@discordjs/rest": ^1.1.0 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 prettier: ^2.7.1 @@ -1864,9 +2014,9 @@ __metadata: "@discordjs/rest": ^1.0.0 "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.30.0 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 "@types/supertest": ^2.0.12 - "@vitest/coverage-c8": ^0.23.0 + "@vitest/coverage-c8": ^0.23.1 downlevel-dts: ^0.10.1 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 @@ -1876,7 +2026,7 @@ __metadata: tsup: ^6.2.3 typescript: ^4.8.2 undici: ^5.10.0 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -1890,8 +2040,8 @@ __metadata: "@microsoft/api-extractor": ^7.30.0 "@sapphire/async-queue": ^1.5.0 "@sapphire/snowflake": ^3.2.2 - "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.23.0 + "@types/node": ^16.11.57 + "@vitest/coverage-c8": ^0.23.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 @@ -1902,7 +2052,7 @@ __metadata: tsup: ^6.2.3 typescript: ^4.8.2 undici: ^5.10.0 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -1914,8 +2064,8 @@ __metadata: "@microsoft/api-extractor-model": 7.24.0 "@microsoft/tsdoc": ^0.14.1 "@microsoft/tsdoc-config": 0.16.1 - "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.23.0 + "@types/node": ^16.11.57 + "@vitest/coverage-c8": ^0.23.1 commander: ^9.4.0 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 @@ -1924,7 +2074,7 @@ __metadata: tsup: ^6.2.3 typescript: ^4.8.2 undici: ^5.10.0 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -1932,14 +2082,14 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/voice@workspace:packages/voice" dependencies: - "@babel/core": ^7.18.13 - "@babel/preset-env": ^7.18.10 + "@babel/core": ^7.19.0 + "@babel/preset-env": ^7.19.0 "@babel/preset-typescript": ^7.18.6 "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.30.0 "@types/jest": ^29.0.0 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 "@types/ws": ^8.5.3 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 @@ -1964,26 +2114,19 @@ __metadata: dependencies: "@discordjs/api-extractor-utils": "workspace:^" "@discordjs/scripts": "workspace:^" - "@emotion/react": ^11.10.4 - "@emotion/server": ^11.10.0 - "@mantine/core": ^5.2.5 - "@mantine/hooks": ^5.2.5 - "@mantine/next": ^5.2.5 - "@mantine/nprogress": ^5.2.5 - "@mantine/spotlight": ^5.2.5 "@microsoft/api-extractor-model": 7.24.0 "@microsoft/tsdoc": 0.14.1 "@testing-library/react": ^13.4.0 "@testing-library/user-event": ^14.4.3 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 "@types/react-dom": ^18.0.6 "@types/react-syntax-highlighter": ^15.5.5 "@unocss/cli": ^0.45.15 - "@unocss/preset-web-fonts": ^0.45.15 "@unocss/reset": ^0.45.15 - "@vitejs/plugin-react": ^2.0.1 - "@vitest/coverage-c8": ^0.23.0 + "@vitejs/plugin-react": ^2.1.0 + "@vitest/coverage-c8": ^0.23.1 "@vscode/codicons": ^0.0.32 + ariakit: ^2.0.0-next.41 concurrently: ^7.3.0 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 @@ -1991,23 +2134,28 @@ __metadata: minisearch: ^5.0.0 next: ^12.2.5 next-mdx-remote: ^4.1.0 + next-progress: ^2.2.0 + next-themes: ^0.2.0 prettier: ^2.7.1 + prettier-plugin-tailwindcss: ^0.1.13 react: ^18.2.0 + react-custom-scrollbars-2: ^4.5.0 react-dom: ^18.2.0 react-icons: ^4.4.0 react-syntax-highlighter: ^15.5.0 + react-use: ^17.4.0 rehype-ignore: ^1.0.1 rehype-pretty-code: ^0.3.2 rehype-raw: ^6.1.1 rehype-slug: ^5.0.1 remark-gfm: ^3.0.1 - sharp: ^0.30.7 + sharp: ^0.31.0 shiki: ^0.11.1 swr: ^1.3.0 typescript: ^4.8.2 unocss: ^0.45.15 vercel: ^28.2.2 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -2021,9 +2169,9 @@ __metadata: "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.30.0 "@sapphire/async-queue": ^1.5.0 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 "@types/ws": ^8.5.3 - "@vitest/coverage-c8": ^0.23.0 + "@vitest/coverage-c8": ^0.23.1 "@vladfrangu/async_event_emitter": ^2.0.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 @@ -2035,7 +2183,7 @@ __metadata: tsup: ^6.2.3 typescript: ^4.8.2 undici: ^5.10.0 - vitest: ^0.23.0 + vitest: ^0.23.1 ws: ^8.8.1 zlib-sync: ^0.1.7 languageName: unknown @@ -2073,146 +2221,6 @@ __metadata: languageName: node linkType: hard -"@emotion/babel-plugin@npm:^11.10.0": - version: 11.10.2 - resolution: "@emotion/babel-plugin@npm:11.10.2" - dependencies: - "@babel/helper-module-imports": ^7.16.7 - "@babel/plugin-syntax-jsx": ^7.17.12 - "@babel/runtime": ^7.18.3 - "@emotion/hash": ^0.9.0 - "@emotion/memoize": ^0.8.0 - "@emotion/serialize": ^1.1.0 - babel-plugin-macros: ^3.1.0 - convert-source-map: ^1.5.0 - escape-string-regexp: ^4.0.0 - find-root: ^1.1.0 - source-map: ^0.5.7 - stylis: 4.0.13 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 7f9e84b3c00b4db5a829c6880549c6a816b3defcaf828cb37808737f3c17b22a45a06e48334f38f5729b218812252857ced27d3a12dd8ca1e260e4b1d0045dfd - languageName: node - linkType: hard - -"@emotion/cache@npm:^11.10.0": - version: 11.10.3 - resolution: "@emotion/cache@npm:11.10.3" - dependencies: - "@emotion/memoize": ^0.8.0 - "@emotion/sheet": ^1.2.0 - "@emotion/utils": ^1.2.0 - "@emotion/weak-memoize": ^0.3.0 - stylis: 4.0.13 - checksum: d31291eff1b270d8db6f471b2b9b3bc5d786c296838631f101837747ff5afa8e8890655279457c68ce2cee23256ab02a25c177f5487b5061da82c7354c1bdce5 - languageName: node - linkType: hard - -"@emotion/hash@npm:^0.9.0": - version: 0.9.0 - resolution: "@emotion/hash@npm:0.9.0" - checksum: b63428f7c8186607acdca5d003700cecf0ded519d0b5c5cc3b3154eafcad6ff433f8361bd2bac8882715b557e6f06945694aeb6ba8b25c6095d7a88570e2e0bb - languageName: node - linkType: hard - -"@emotion/memoize@npm:^0.8.0": - version: 0.8.0 - resolution: "@emotion/memoize@npm:0.8.0" - checksum: c87bb110b829edd8e1c13b90a6bc37cebc39af29c7599a1e66a48e06f9bec43e8e53495ba86278cc52e7589549492c8dfdc81d19f4fdec0cee6ba13d2ad2c928 - languageName: node - linkType: hard - -"@emotion/react@npm:^11.10.4": - version: 11.10.4 - resolution: "@emotion/react@npm:11.10.4" - dependencies: - "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.10.0 - "@emotion/cache": ^11.10.0 - "@emotion/serialize": ^1.1.0 - "@emotion/use-insertion-effect-with-fallbacks": ^1.0.0 - "@emotion/utils": ^1.2.0 - "@emotion/weak-memoize": ^0.3.0 - hoist-non-react-statics: ^3.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - react: ">=16.8.0" - peerDependenciesMeta: - "@babel/core": - optional: true - "@types/react": - optional: true - checksum: 7555f6a1840c71d841386be2ec98ebfd6399923bd6a61247c7b07283f9a056f57e83c4fdd9ea7a7fcc3d88e5e04bb03168b4f0557934bcd501c88af4db16e1e0 - languageName: node - linkType: hard - -"@emotion/serialize@npm:^1.1.0": - version: 1.1.0 - resolution: "@emotion/serialize@npm:1.1.0" - dependencies: - "@emotion/hash": ^0.9.0 - "@emotion/memoize": ^0.8.0 - "@emotion/unitless": ^0.8.0 - "@emotion/utils": ^1.2.0 - csstype: ^3.0.2 - checksum: 8f22f83194ad76cb3bbee481daa57fdc65ca3078a5db9e219c04151341ef93af80c7057aea17b64446682d275918f7ecc0c20e977c1af153c79a1485503fe717 - languageName: node - linkType: hard - -"@emotion/server@npm:^11.10.0": - version: 11.10.0 - resolution: "@emotion/server@npm:11.10.0" - dependencies: - "@emotion/utils": ^1.2.0 - html-tokenize: ^2.0.0 - multipipe: ^1.0.2 - through: ^2.3.8 - peerDependencies: - "@emotion/css": ^11.0.0-rc.0 - peerDependenciesMeta: - "@emotion/css": - optional: true - checksum: 15b7135a578630e36f551b8856d658a50876fb62fe042819ad57895adaf45b79e2d21b3464f1874319f48b5f6209ce09dd387ce1df6aea6f98a20c43a78221b2 - languageName: node - linkType: hard - -"@emotion/sheet@npm:^1.2.0": - version: 1.2.0 - resolution: "@emotion/sheet@npm:1.2.0" - checksum: b3771e47963d36c179f9a1119055d7e5d18e2718e73ebe2b4b1c56f4bbf4ea6b12c50bbc52cd502f03f7981beb2fbb3fee2638b6f5ef6c5f223b06f8bf88ec7b - languageName: node - linkType: hard - -"@emotion/unitless@npm:^0.8.0": - version: 0.8.0 - resolution: "@emotion/unitless@npm:0.8.0" - checksum: 176141117ed23c0eb6e53a054a69c63e17ae532ec4210907a20b2208f91771821835f1c63dd2ec63e30e22fcc984026d7f933773ee6526dd038e0850919fae7a - languageName: node - linkType: hard - -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.0": - version: 1.0.0 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.0" - peerDependencies: - react: ">=16.8.0" - checksum: 4f06a3b48258c832aa8022a262572061a31ff078d377e9164cccc99951309d70f4466e774fe704461b2f8715007a82ed625a54a5c7a127c89017d3ce3187d4f1 - languageName: node - linkType: hard - -"@emotion/utils@npm:^1.2.0": - version: 1.2.0 - resolution: "@emotion/utils@npm:1.2.0" - checksum: 55457a49ddd4db6a014ea0454dc09eaa23eedfb837095c8ff90470cb26a303f7ceb5fcc1e2190ef64683e64cfd33d3ba3ca3109cd87d12bc9e379e4195c9a4dd - languageName: node - linkType: hard - -"@emotion/weak-memoize@npm:^0.3.0": - version: 0.3.0 - resolution: "@emotion/weak-memoize@npm:0.3.0" - checksum: f43ef4c8b7de70d9fa5eb3105921724651e4188e895beb71f0c5919dc899a7b8743e1fdd99d38b9092dd5722c7be2312ebb47fbdad0c4e38bea58f6df5885cc0 - languageName: node - linkType: hard - "@es-joy/jsdoccomment@npm:~0.31.0": version: 0.31.0 resolution: "@es-joy/jsdoccomment@npm:0.31.0" @@ -2231,9 +2239,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.15.6": - version: 0.15.6 - resolution: "@esbuild/linux-loong64@npm:0.15.6" +"@esbuild/linux-loong64@npm:0.15.7": + version: 0.15.7 + resolution: "@esbuild/linux-loong64@npm:0.15.7" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -2294,46 +2302,19 @@ __metadata: languageName: node linkType: hard -"@floating-ui/core@npm:^0.7.3": - version: 0.7.3 - resolution: "@floating-ui/core@npm:0.7.3" - checksum: f48f9fb0d19dcbe7a68c38e8de7fabb11f0c0e6e0ef215ae60b5004900bacb1386e7b89cb377d91a90ff7d147ea1f06c2905136ecf34dea162d9696d8f448d5f +"@floating-ui/core@npm:^1.0.1": + version: 1.0.1 + resolution: "@floating-ui/core@npm:1.0.1" + checksum: c8a5f1a491788e5bebfe747e9372df2c7cbee0d8790ddf95e25149ac91ccf1a2cca8f768029826cfd3d687617c1d0f3241b97f1648bdf2a28d421f39e79c2eee languageName: node linkType: hard -"@floating-ui/dom@npm:^0.5.3": - version: 0.5.4 - resolution: "@floating-ui/dom@npm:0.5.4" +"@floating-ui/dom@npm:^1.0.0": + version: 1.0.1 + resolution: "@floating-ui/dom@npm:1.0.1" dependencies: - "@floating-ui/core": ^0.7.3 - checksum: 9f9d8a51a828c6be5f187204aa6d293c6c9ef70d51dcc5891a4d85683745fceebf79ff8826d0f75ae41b45c3b138367d339756f27f41be87a8770742ebc0de42 - languageName: node - linkType: hard - -"@floating-ui/react-dom-interactions@npm:0.6.6": - version: 0.6.6 - resolution: "@floating-ui/react-dom-interactions@npm:0.6.6" - dependencies: - "@floating-ui/react-dom": ^0.7.2 - aria-hidden: ^1.1.3 - use-isomorphic-layout-effect: ^1.1.1 - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 3c6cf848c0d9cee6a4f68817a2b32a9addf6f3057f9f120e4d537efe1d2935cdf8a368d9b599b49b97c8cbcf9f25c8da1683f41c563754dd5eca47b622a74cc5 - languageName: node - linkType: hard - -"@floating-ui/react-dom@npm:^0.7.2": - version: 0.7.2 - resolution: "@floating-ui/react-dom@npm:0.7.2" - dependencies: - "@floating-ui/dom": ^0.5.3 - use-isomorphic-layout-effect: ^1.1.1 - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: bc3f2b5557f87f6f4bbccfe3e8d097abafad61a41083d3b79f3499f27590e273bcb3dc7136c2444841ee7a8c0d2a70cc1385458c16103fa8b70eade80c24af52 + "@floating-ui/core": ^1.0.1 + checksum: 617d5b45d6454e9f2b5bba26d0181d1c5863c92960b8e867b9539763291dee0506077d338df805c116ea73330900e657da65af411df85b8ba99e8d4e5fc4e745 languageName: node linkType: hard @@ -2491,15 +2472,6 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/expect-utils@npm:29.0.1" - dependencies: - jest-get-type: ^29.0.0 - checksum: d2cfe72f91fcb86a3f2ffc7c09e02cba7e9da0c41705a98e7fbed016b2141ab29764b15615806ece4ed6a21b60252f024b121be68c2bd66d055305a1d34b10f8 - languageName: node - linkType: hard - "@jest/expect-utils@npm:^29.0.2": version: 29.0.2 resolution: "@jest/expect-utils@npm:29.0.2" @@ -2659,20 +2631,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/types@npm:29.0.1" - dependencies: - "@jest/schemas": ^29.0.0 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: 50a3658d69cad32fe270ef22e9a21cbad38c387d0b17cb1f23b144f9c9081e81623feda940b6b23459df656f88153ffe7765f36cd3bc3f3b2d8cd0ca246d75b2 - languageName: node - linkType: hard - "@jest/types@npm:^29.0.2": version: 29.0.2 resolution: "@jest/types@npm:29.0.2" @@ -2749,112 +2707,6 @@ __metadata: languageName: node linkType: hard -"@mantine/core@npm:^5.2.5": - version: 5.2.5 - resolution: "@mantine/core@npm:5.2.5" - dependencies: - "@floating-ui/react-dom-interactions": 0.6.6 - "@mantine/styles": 5.2.5 - "@mantine/utils": 5.2.5 - "@radix-ui/react-scroll-area": 1.0.0 - react-textarea-autosize: 8.3.4 - peerDependencies: - "@mantine/hooks": 5.2.5 - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: a7ccb98bf0dd5b845580ca9c89d01ada63cb329546097fa818f41ccd6118ce0e89af27b668a66fd51dd292f1080b31f376c747c95230353892cc51f6db18c3cc - languageName: node - linkType: hard - -"@mantine/hooks@npm:^5.2.5": - version: 5.2.5 - resolution: "@mantine/hooks@npm:5.2.5" - peerDependencies: - react: ">=16.8.0" - checksum: c4358d22acc3d2017115836a1b08c11c9eec64220a9ed9ba4828b14687f8a87367ef19ce7ea21c32a2c112046337afbc9e1ad55d3cbcb4ace20074c14c4233c3 - languageName: node - linkType: hard - -"@mantine/next@npm:^5.2.5": - version: 5.2.5 - resolution: "@mantine/next@npm:5.2.5" - dependencies: - "@mantine/ssr": 5.2.5 - "@mantine/styles": 5.2.5 - peerDependencies: - next: "*" - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: a4b543a83e2af43bf96a4a4d3ad9f16f13d8830fcbbbdff47a144760eaf7059191f5e1b279b79c2a6469740f0c772a708437d42cf31811ef0748673096a7d16d - languageName: node - linkType: hard - -"@mantine/nprogress@npm:^5.2.5": - version: 5.2.5 - resolution: "@mantine/nprogress@npm:5.2.5" - dependencies: - "@mantine/utils": 5.2.5 - peerDependencies: - "@mantine/core": 5.2.5 - "@mantine/hooks": 5.2.5 - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: ce0971c6df3ea5978397647939288a9d00f80e26feb8389c773485937ff6d5bb0ebf53aadcf354b5abf1665a2657364caa9e91ecf484431e58f027ee5d2d5546 - languageName: node - linkType: hard - -"@mantine/spotlight@npm:^5.2.5": - version: 5.2.5 - resolution: "@mantine/spotlight@npm:5.2.5" - dependencies: - "@mantine/utils": 5.2.5 - peerDependencies: - "@mantine/core": 5.2.5 - "@mantine/hooks": 5.2.5 - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: a895b39ff7c6475272213708d41a55c2a4e885f4882efca1e143d8c1393761fa015ef594ad1d9f3c093db8a6069b5cabe56c51cbac2c7154351a09434810184a - languageName: node - linkType: hard - -"@mantine/ssr@npm:5.2.5": - version: 5.2.5 - resolution: "@mantine/ssr@npm:5.2.5" - dependencies: - "@mantine/styles": 5.2.5 - html-react-parser: 1.4.12 - peerDependencies: - "@emotion/react": ">=11.9.0" - "@emotion/server": ">=11.4.0" - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 5369c0af18c7046c8552e3f8fcc4cc452f673fd201cb5d12c443b3c82e2a219201fb9f7435d2a3b4ac2cb34eed23a4725f9535afa9dc03d361fe1f23bc478f68 - languageName: node - linkType: hard - -"@mantine/styles@npm:5.2.5": - version: 5.2.5 - resolution: "@mantine/styles@npm:5.2.5" - dependencies: - clsx: 1.1.1 - csstype: 3.0.9 - peerDependencies: - "@emotion/react": ">=11.9.0" - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 4ef12a86da320f87d6f6fa6647bc56c266325b3dbef1c913104d4995784776fcea73aaccfc5b69217355628777ecc386d1691d786e623ff15a96613d01e6a602 - languageName: node - linkType: hard - -"@mantine/utils@npm:5.2.5": - version: 5.2.5 - resolution: "@mantine/utils@npm:5.2.5" - peerDependencies: - react: ">=16.8.0" - checksum: 9ee266a9eb5c877a8b3fb4cbf918e5ee0a816ab8f459f13d6a31ba4eae45c1321e6f7bc0fa910019f781f6c8e0ae53737ed1084e6e34d9768b78de1bae4a69ee - languageName: node - linkType: hard - "@mapbox/node-pre-gyp@npm:^1.0.5": version: 1.0.9 resolution: "@mapbox/node-pre-gyp@npm:1.0.9" @@ -3159,139 +3011,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/number@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/number@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - checksum: 517ac0790e05cceb41401154d1bc55d4738accd51095e2a918ef9bcedac6a455cd7179201e88e76121bedec19cd93a37b2c20288b084fb224b69c74e67935457 - languageName: node - linkType: hard - -"@radix-ui/primitive@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/primitive@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - checksum: 72996afaf346ec4f4c73422f14f6cb2d0de994801ba7cbb9a4a67b0050e0cd74625182c349ef8017ccae1406579d4b74a34a225ef2efe61e8e5337decf235deb - languageName: node - linkType: hard - -"@radix-ui/react-compose-refs@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-compose-refs@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: fb98be2e275a1a758ccac647780ff5b04be8dcf25dcea1592db3b691fecf719c4c0700126da605b2f512dd89caa111352b9fad59528d736b4e0e9a0e134a74a1 - languageName: node - linkType: hard - -"@radix-ui/react-context@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-context@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: 43c6b6f2183398161fe6b109e83fff240a6b7babbb27092b815932342a89d5ca42aa9806bfae5927970eed5ff90feed04c67aa29c6721f84ae826f17fcf34ce0 - languageName: node - linkType: hard - -"@radix-ui/react-direction@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-direction@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: 92a40de4087b161a56957872daf204a7735bd21f2fccbd42deff322d759977d085ad3dcdae05af437b7e64e628e939e0d67e5bc468a3027e1b02e0a7dc90c485 - languageName: node - linkType: hard - -"@radix-ui/react-presence@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-presence@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - "@radix-ui/react-compose-refs": 1.0.0 - "@radix-ui/react-use-layout-effect": 1.0.0 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: a607d67795aa265e88f1765dcc7c18bebf6d88d116cb7f529ebe5a3fbbe751a42763aff0c1c89cdd8ce7f7664355936c4070fd3d4685774aff1a80fa95f4665b - languageName: node - linkType: hard - -"@radix-ui/react-primitive@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-primitive@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - "@radix-ui/react-slot": 1.0.0 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: fb3fe8c8c5a57995716cce4d7e9039e474c09ba5d714994419ad4940bc954da670f1188813cc931f189b23d9bd5a67adf7087bf44fe1d4272b4a334a3514d38b - languageName: node - linkType: hard - -"@radix-ui/react-scroll-area@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-scroll-area@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - "@radix-ui/number": 1.0.0 - "@radix-ui/primitive": 1.0.0 - "@radix-ui/react-compose-refs": 1.0.0 - "@radix-ui/react-context": 1.0.0 - "@radix-ui/react-direction": 1.0.0 - "@radix-ui/react-presence": 1.0.0 - "@radix-ui/react-primitive": 1.0.0 - "@radix-ui/react-use-callback-ref": 1.0.0 - "@radix-ui/react-use-layout-effect": 1.0.0 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 0b7756f1df19ac13c570941461794668d0fb15fd576f37a698a6d0a39f48b728db751455f8de202e5ccb8750c3d9f31a02ada7b79d9f064347aa96e780d8f104 - languageName: node - linkType: hard - -"@radix-ui/react-slot@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-slot@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - "@radix-ui/react-compose-refs": 1.0.0 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: 60c0190ebdca21785b4f8b58a0c52717600c98953fc49da9580870519c60f52d5cf873dffa05446f4bb539066326ccec0827f4ca252b02ec4ff1a4ae203f59d7 - languageName: node - linkType: hard - -"@radix-ui/react-use-callback-ref@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-use-callback-ref@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: a8dda76ba0a26e23dc6ab5003831ad7439f59ba9d696a517643b9ee6a7fb06b18ae7a8f5a3c00c530d5c8104745a466a077b7475b99b4c0f5c15f5fc29474471 - languageName: node - linkType: hard - -"@radix-ui/react-use-layout-effect@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-use-layout-effect@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: fcdc8cfa79bd45766ebe3de11039c58abe3fed968cb39c12b2efce5d88013c76fe096ea4cee464d42576d02fe7697779b682b4268459bca3c4e48644f5b4ac5e - languageName: node - linkType: hard - "@rollup/pluginutils@npm:^4.2.1": version: 4.2.1 resolution: "@rollup/pluginutils@npm:4.2.1" @@ -3395,9 +3114,9 @@ __metadata: linkType: hard "@sinclair/typebox@npm:^0.24.1": - version: 0.24.34 - resolution: "@sinclair/typebox@npm:0.24.34" - checksum: 35adcc7698fe751951e75fefe748a1d6e928afa3e52c153d1984a9d47c2a4f39e89f6adf727daef5cc12a58c71c2a0f63e3d88d105e4435252cfb68231518687 + version: 0.24.35 + resolution: "@sinclair/typebox@npm:0.24.35" + checksum: 41fdadc7692f5b62acbc2155d693977bf5bdffb934ba046c1a55624c46dfa12a9a4a3878c4ce89a4c5625ce90e2210a02c256e564262b3ec4f4738b195033f57 languageName: node linkType: hard @@ -3737,6 +3456,13 @@ __metadata: languageName: node linkType: hard +"@types/js-cookie@npm:^2.2.6": + version: 2.2.7 + resolution: "@types/js-cookie@npm:2.2.7" + checksum: 851f47e94ca1fc43661d8f51614d67a613e7810c91b876d0a3b311ce72f7df800107fd02a08cb6948184e12c120b4f058edca2f50424d8798bdcffd6627281e3 + languageName: node + linkType: hard + "@types/js-yaml@npm:^4.0.0": version: 4.0.5 resolution: "@types/js-yaml@npm:4.0.5" @@ -3849,10 +3575,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^16.11.56": - version: 16.11.56 - resolution: "@types/node@npm:16.11.56" - checksum: b4efade16eb08a39810921c54a1637e69c8f3184a20d87e8fe74d557d9bda73f0829ac318e2a30a32b1903e4b099812defd1dfe438be70b98dbfbea5b0d99a53 +"@types/node@npm:^16.11.57": + version: 16.11.57 + resolution: "@types/node@npm:16.11.57" + checksum: 7c34f5e50e38460fd0f18ae939ad62d5ecf992be7b9db7b1b86b9cc76a4d153b55bf3a94c6379da23df0803c11ad1a96be54c45d3ce612206cb8a18ce433028b languageName: node linkType: hard @@ -4321,7 +4047,7 @@ __metadata: languageName: node linkType: hard -"@unocss/preset-web-fonts@npm:0.45.15, @unocss/preset-web-fonts@npm:^0.45.15": +"@unocss/preset-web-fonts@npm:0.45.15": version: 0.45.15 resolution: "@unocss/preset-web-fonts@npm:0.45.15" dependencies: @@ -4550,11 +4276,11 @@ __metadata: languageName: node linkType: hard -"@vitejs/plugin-react@npm:^2.0.1": - version: 2.0.1 - resolution: "@vitejs/plugin-react@npm:2.0.1" +"@vitejs/plugin-react@npm:^2.1.0": + version: 2.1.0 + resolution: "@vitejs/plugin-react@npm:2.1.0" dependencies: - "@babel/core": ^7.18.10 + "@babel/core": ^7.18.13 "@babel/plugin-transform-react-jsx": ^7.18.10 "@babel/plugin-transform-react-jsx-development": ^7.18.6 "@babel/plugin-transform-react-jsx-self": ^7.18.6 @@ -4563,17 +4289,17 @@ __metadata: react-refresh: ^0.14.0 peerDependencies: vite: ^3.0.0 - checksum: 90702768ee34bd7e5021398ab827c682cfe1ebfce0988a532a678b664d80b9ad991d1c24f81045626b811c9aa2aae7d9d0fd563db5c6b7b8fd36c8eecdfc04b9 + checksum: cd13ad549f33e579e0e1d14f5b8a4ad60d5fbbc8cd579e4381d52bb426700118e876644a619a19c5cec4efeb4f8a0ff50b6c9456d5c24836071190b46d781fef languageName: node linkType: hard -"@vitest/coverage-c8@npm:^0.23.0": - version: 0.23.0 - resolution: "@vitest/coverage-c8@npm:0.23.0" +"@vitest/coverage-c8@npm:^0.23.1": + version: 0.23.1 + resolution: "@vitest/coverage-c8@npm:0.23.1" dependencies: c8: ^7.12.0 - vitest: 0.23.0 - checksum: dfe9c55876c6570ef3da2e4764c3c5168f0551f7399f3c1973c214210fc6ab4c4efadc29cd688abd6ffb2154870bf5abf5c7adbe52ce49d4388bdafedb31602e + vitest: 0.23.1 + checksum: 632788d2579e029d53ba42fa3a4d432fc50f8b4feb974900c8ae734bed8afae02f56dae1feadf92aacc60a113884a37c2cbf454240725985eba705dc501f2976 languageName: node linkType: hard @@ -4591,6 +4317,13 @@ __metadata: languageName: node linkType: hard +"@xobotyi/scrollbar-width@npm:^1.9.5": + version: 1.9.5 + resolution: "@xobotyi/scrollbar-width@npm:1.9.5" + checksum: e880c8696bd6c7eedaad4e89cc7bcfcd502c22dc6c061288ffa7f5a4fe5dab4aa2358bdd68e7357bf0334dc8b56724ed9bee05e010b60d83a3bb0d855f3d886f + languageName: node + linkType: hard + "JSONStream@npm:^1.0.4": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" @@ -4635,6 +4368,13 @@ __metadata: languageName: node linkType: hard +"add-px-to-style@npm:1.0.0": + version: 1.0.0 + resolution: "add-px-to-style@npm:1.0.0" + checksum: 673831d81d86d717e3a9f4f644059476ca74990dd28310d9bffe6cb35fac8007865351d37a885af168a8613f5cdb054db728a3df19e9ee1457b75a668003c729 + languageName: node + linkType: hard + "add-stream@npm:^1.0.0": version: 1.0.0 resolution: "add-stream@npm:1.0.0" @@ -4879,21 +4619,6 @@ __metadata: languageName: node linkType: hard -"aria-hidden@npm:^1.1.3": - version: 1.2.1 - resolution: "aria-hidden@npm:1.2.1" - dependencies: - tslib: ^2.0.0 - peerDependencies: - "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.9.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: cd8047a0113d5ecc11bce1616ae2772abcb0a6e1da5a70cbfc3555e8da063b0416d62cced3e704b6d424cbf408c1fc21225d69723cd62c3f1f0cf3b41d674c2b - languageName: node - linkType: hard - "aria-query@npm:5.0.0": version: 5.0.0 resolution: "aria-query@npm:5.0.0" @@ -4918,6 +4643,28 @@ __metadata: languageName: node linkType: hard +"ariakit-utils@npm:0.17.0-next.26": + version: 0.17.0-next.26 + resolution: "ariakit-utils@npm:0.17.0-next.26" + peerDependencies: + react: ^17.0.0 || ^18.0.0 + checksum: dc41a324c74561dfc6afa6037ac4227b06f73a16336d670285392d630bab42d259269ca1afe1c05cc3d5b2bdbc941a518053ba7427edec60080bd8bb3dffd226 + languageName: node + linkType: hard + +"ariakit@npm:^2.0.0-next.41": + version: 2.0.0-next.41 + resolution: "ariakit@npm:2.0.0-next.41" + dependencies: + "@floating-ui/dom": ^1.0.0 + ariakit-utils: 0.17.0-next.26 + peerDependencies: + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + checksum: a0384dbc4e44211f31e7347a9613a02e98965d4f675bda0a0d9ce002adfe7921abe1b1f77a56569cec93750feb05fd28809adf959006df145b679b94e143786d + languageName: node + linkType: hard + "array-back@npm:^1.0.2, array-back@npm:^1.0.3": version: 1.0.4 resolution: "array-back@npm:1.0.4" @@ -5199,17 +4946,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-macros@npm:^3.1.0": - version: 3.1.0 - resolution: "babel-plugin-macros@npm:3.1.0" - dependencies: - "@babel/runtime": ^7.12.5 - cosmiconfig: ^7.0.0 - resolve: ^1.19.0 - checksum: 765de4abebd3e4688ebdfbff8571ddc8cd8061f839bb6c3e550b0344a4027b04c60491f843296ce3f3379fb356cc873d57a9ee6694262547eb822c14a25be9a6 - languageName: node - linkType: hard - "babel-plugin-polyfill-corejs2@npm:^0.3.2": version: 0.3.2 resolution: "babel-plugin-polyfill-corejs2@npm:0.3.2" @@ -5443,13 +5179,6 @@ __metadata: languageName: node linkType: hard -"buffer-from@npm:~0.1.1": - version: 0.1.2 - resolution: "buffer-from@npm:0.1.2" - checksum: 50a1fa5da97d2081b7d945483c8967d3b89a096fa585eb55000bb2100e827c647c9370280ec9bd057da8f9fa5abc1d3b764228851a31fa8a67f659f70c0052d8 - languageName: node - linkType: hard - "buffer@npm:^5.5.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" @@ -5919,13 +5648,6 @@ __metadata: languageName: node linkType: hard -"clsx@npm:1.1.1": - version: 1.1.1 - resolution: "clsx@npm:1.1.1" - checksum: ff052650329773b9b245177305fc4c4dc3129f7b2be84af4f58dc5defa99538c61d4207be7419405a5f8f3d92007c954f4daba5a7b74e563d5de71c28c830063 - languageName: node - linkType: hard - "co@npm:^4.6.0": version: 4.6.0 resolution: "co@npm:4.6.0" @@ -6470,7 +6192,7 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": +"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.8.0 resolution: "convert-source-map@npm:1.8.0" dependencies: @@ -6486,6 +6208,15 @@ __metadata: languageName: node linkType: hard +"copy-to-clipboard@npm:^3.3.1": + version: 3.3.2 + resolution: "copy-to-clipboard@npm:3.3.2" + dependencies: + toggle-selection: ^1.0.6 + checksum: 968ec7ec3d0cf3067542b63dd244ba5d05e743899d7a0361fb0a3130e731d277f5ea54ea4d90fc88cc66eea2e4c67dc2dd8698e4ed360f921af5aa7c60b889ac + languageName: node + linkType: hard + "core-js-compat@npm:^3.21.0, core-js-compat@npm:^3.22.1": version: 3.25.0 resolution: "core-js-compat@npm:3.25.0" @@ -6576,6 +6307,16 @@ __metadata: languageName: node linkType: hard +"css-in-js-utils@npm:^2.0.0": + version: 2.0.1 + resolution: "css-in-js-utils@npm:2.0.1" + dependencies: + hyphenate-style-name: ^1.0.2 + isobject: ^3.0.1 + checksum: c9964c4708216954c468b69bbee2d971fd759ada4f40637b8ca4d3f79caba4818d0532a4f190ac560227c08742ad063ffec7a30afddc4d96b66a18c3a008f0d8 + languageName: node + linkType: hard + "css-selector-parser@npm:^1.0.0": version: 1.4.1 resolution: "css-selector-parser@npm:1.4.1" @@ -6583,6 +6324,16 @@ __metadata: languageName: node linkType: hard +"css-tree@npm:^1.1.2": + version: 1.1.3 + resolution: "css-tree@npm:1.1.3" + dependencies: + mdn-data: 2.0.14 + source-map: ^0.6.1 + checksum: 79f9b81803991b6977b7fcb1588799270438274d89066ce08f117f5cdb5e20019b446d766c61506dd772c839df84caa16042d6076f20c97187f5abe3b50e7d1f + languageName: node + linkType: hard + "css-tree@npm:^2.2.1": version: 2.2.1 resolution: "css-tree@npm:2.2.1" @@ -6609,14 +6360,7 @@ __metadata: languageName: node linkType: hard -"csstype@npm:3.0.9": - version: 3.0.9 - resolution: "csstype@npm:3.0.9" - checksum: 199f9af7e673f9f188525c3102a329d637ff46c52f6385a4427ff5cb17adcb736189150170a7af7c5701d18d7704bdad130273f4aa7e44c6c4f9967e6115dc93 - languageName: node - linkType: hard - -"csstype@npm:^3.0.2": +"csstype@npm:^3.0.2, csstype@npm:^3.0.6": version: 3.1.0 resolution: "csstype@npm:3.1.0" checksum: 644e986cefab86525f0b674a06889cfdbb1f117e5b7d1ce0fc55b0423ecc58807a1ea42ecc75c4f18999d14fc42d1d255f84662a45003a52bb5840e977eb2ffd @@ -6931,7 +6675,7 @@ __metadata: "@discordjs/rest": "workspace:^" "@favware/cliff-jumper": ^1.8.7 "@sapphire/snowflake": ^3.2.2 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 "@types/ws": ^8.5.3 discord-api-types: ^0.37.5 dtslint: ^4.2.1 @@ -6994,41 +6738,14 @@ __metadata: languageName: node linkType: hard -"dom-serializer@npm:^1.0.1": - version: 1.4.1 - resolution: "dom-serializer@npm:1.4.1" +"dom-css@npm:^2.0.0": + version: 2.1.0 + resolution: "dom-css@npm:2.1.0" dependencies: - domelementtype: ^2.0.1 - domhandler: ^4.2.0 - entities: ^2.0.0 - checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 - languageName: node - linkType: hard - -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": - version: 2.3.0 - resolution: "domelementtype@npm:2.3.0" - checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 - languageName: node - linkType: hard - -"domhandler@npm:4.3.1, domhandler@npm:^4.2.0, domhandler@npm:^4.2.2": - version: 4.3.1 - resolution: "domhandler@npm:4.3.1" - dependencies: - domelementtype: ^2.2.0 - checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa - languageName: node - linkType: hard - -"domutils@npm:^2.8.0": - version: 2.8.0 - resolution: "domutils@npm:2.8.0" - dependencies: - dom-serializer: ^1.0.1 - domelementtype: ^2.2.0 - domhandler: ^4.2.0 - checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 + add-px-to-style: 1.0.0 + prefix-style: 2.0.1 + to-camel-case: 1.0.0 + checksum: f61cc63e88771e1800ff4b7d98b17be2b311de984d94c3d3e0be692794502eb021d28c5c40ba08d4370a6d8bd96caf7a56d15c635451c2db1a2233c94ca0fcc0 languageName: node linkType: hard @@ -7092,15 +6809,6 @@ __metadata: languageName: node linkType: hard -"duplexer2@npm:^0.1.2": - version: 0.1.4 - resolution: "duplexer2@npm:0.1.4" - dependencies: - readable-stream: ^2.0.2 - checksum: 744961f03c7f54313f90555ac20284a3fb7bf22fdff6538f041a86c22499560eb6eac9d30ab5768054137cb40e6b18b40f621094e0261d7d8c35a37b7a5ad241 - languageName: node - linkType: hard - "duplexer3@npm:^0.1.4": version: 0.1.5 resolution: "duplexer3@npm:0.1.5" @@ -7152,9 +6860,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.4.202": - version: 1.4.240 - resolution: "electron-to-chromium@npm:1.4.240" - checksum: 6590e2cddd2e6a564cc491fb1ece5719c35dcbbeed34fc66e878b1659753653d0e344908b36b11741968dfc47a0141759e3780546384bb5308d38bc5232e0cb5 + version: 1.4.241 + resolution: "electron-to-chromium@npm:1.4.241" + checksum: a3d77207f4c46b64633eab3dcb46b4dcbd3e7e03f12ab81928a20ac4f585a9f04968176094318995f376645436325ddc8085f99bc985bc53b04d6c2016f1f9b0 languageName: node linkType: hard @@ -7197,20 +6905,6 @@ __metadata: languageName: node linkType: hard -"entities@npm:^2.0.0": - version: 2.2.0 - resolution: "entities@npm:2.2.0" - checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 - languageName: node - linkType: hard - -"entities@npm:^3.0.1": - version: 3.0.1 - resolution: "entities@npm:3.0.1" - checksum: aaf7f12033f0939be91f5161593f853f2da55866db55ccbf72f45430b8977e2b79dbd58c53d0fdd2d00bd7d313b75b0968d09f038df88e308aa97e39f9456572 - languageName: node - linkType: hard - "entities@npm:~2.1.0": version: 2.1.0 resolution: "entities@npm:2.1.0" @@ -7241,6 +6935,15 @@ __metadata: languageName: node linkType: hard +"error-stack-parser@npm:^2.0.6": + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" + dependencies: + stackframe: ^1.3.4 + checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18 + languageName: node + linkType: hard + "es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.1": version: 1.20.2 resolution: "es-abstract@npm:1.20.2" @@ -7313,9 +7016,9 @@ __metadata: languageName: node linkType: hard -"esbuild-android-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-android-64@npm:0.15.6" +"esbuild-android-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-android-64@npm:0.15.7" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -7334,9 +7037,9 @@ __metadata: languageName: node linkType: hard -"esbuild-android-arm64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-android-arm64@npm:0.15.6" +"esbuild-android-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-android-arm64@npm:0.15.7" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -7355,9 +7058,9 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-darwin-64@npm:0.15.6" +"esbuild-darwin-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-darwin-64@npm:0.15.7" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -7376,9 +7079,9 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-arm64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-darwin-arm64@npm:0.15.6" +"esbuild-darwin-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-darwin-arm64@npm:0.15.7" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -7397,9 +7100,9 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-freebsd-64@npm:0.15.6" +"esbuild-freebsd-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-freebsd-64@npm:0.15.7" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -7418,9 +7121,9 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-arm64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-freebsd-arm64@npm:0.15.6" +"esbuild-freebsd-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-freebsd-arm64@npm:0.15.7" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -7439,9 +7142,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-32@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-32@npm:0.15.6" +"esbuild-linux-32@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-32@npm:0.15.7" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -7460,9 +7163,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-64@npm:0.15.6" +"esbuild-linux-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-64@npm:0.15.7" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -7481,9 +7184,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-arm64@npm:0.15.6" +"esbuild-linux-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-arm64@npm:0.15.7" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -7502,9 +7205,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-arm@npm:0.15.6" +"esbuild-linux-arm@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-arm@npm:0.15.7" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -7523,9 +7226,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-mips64le@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-mips64le@npm:0.15.6" +"esbuild-linux-mips64le@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-mips64le@npm:0.15.7" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -7544,9 +7247,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-ppc64le@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-ppc64le@npm:0.15.6" +"esbuild-linux-ppc64le@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-ppc64le@npm:0.15.7" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -7565,9 +7268,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-riscv64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-riscv64@npm:0.15.6" +"esbuild-linux-riscv64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-riscv64@npm:0.15.7" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -7586,9 +7289,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-s390x@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-s390x@npm:0.15.6" +"esbuild-linux-s390x@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-s390x@npm:0.15.7" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -7607,9 +7310,9 @@ __metadata: languageName: node linkType: hard -"esbuild-netbsd-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-netbsd-64@npm:0.15.6" +"esbuild-netbsd-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-netbsd-64@npm:0.15.7" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -7628,9 +7331,9 @@ __metadata: languageName: node linkType: hard -"esbuild-openbsd-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-openbsd-64@npm:0.15.6" +"esbuild-openbsd-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-openbsd-64@npm:0.15.7" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -7649,9 +7352,9 @@ __metadata: languageName: node linkType: hard -"esbuild-sunos-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-sunos-64@npm:0.15.6" +"esbuild-sunos-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-sunos-64@npm:0.15.7" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -7670,9 +7373,9 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-32@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-windows-32@npm:0.15.6" +"esbuild-windows-32@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-windows-32@npm:0.15.7" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -7691,9 +7394,9 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-windows-64@npm:0.15.6" +"esbuild-windows-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-windows-64@npm:0.15.7" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -7712,9 +7415,9 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-arm64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-windows-arm64@npm:0.15.6" +"esbuild-windows-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-windows-arm64@npm:0.15.7" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -7865,30 +7568,30 @@ __metadata: linkType: hard "esbuild@npm:^0.15.1": - version: 0.15.6 - resolution: "esbuild@npm:0.15.6" + version: 0.15.7 + resolution: "esbuild@npm:0.15.7" dependencies: - "@esbuild/linux-loong64": 0.15.6 - esbuild-android-64: 0.15.6 - esbuild-android-arm64: 0.15.6 - esbuild-darwin-64: 0.15.6 - esbuild-darwin-arm64: 0.15.6 - esbuild-freebsd-64: 0.15.6 - esbuild-freebsd-arm64: 0.15.6 - esbuild-linux-32: 0.15.6 - esbuild-linux-64: 0.15.6 - esbuild-linux-arm: 0.15.6 - esbuild-linux-arm64: 0.15.6 - esbuild-linux-mips64le: 0.15.6 - esbuild-linux-ppc64le: 0.15.6 - esbuild-linux-riscv64: 0.15.6 - esbuild-linux-s390x: 0.15.6 - esbuild-netbsd-64: 0.15.6 - esbuild-openbsd-64: 0.15.6 - esbuild-sunos-64: 0.15.6 - esbuild-windows-32: 0.15.6 - esbuild-windows-64: 0.15.6 - esbuild-windows-arm64: 0.15.6 + "@esbuild/linux-loong64": 0.15.7 + esbuild-android-64: 0.15.7 + esbuild-android-arm64: 0.15.7 + esbuild-darwin-64: 0.15.7 + esbuild-darwin-arm64: 0.15.7 + esbuild-freebsd-64: 0.15.7 + esbuild-freebsd-arm64: 0.15.7 + esbuild-linux-32: 0.15.7 + esbuild-linux-64: 0.15.7 + esbuild-linux-arm: 0.15.7 + esbuild-linux-arm64: 0.15.7 + esbuild-linux-mips64le: 0.15.7 + esbuild-linux-ppc64le: 0.15.7 + esbuild-linux-riscv64: 0.15.7 + esbuild-linux-s390x: 0.15.7 + esbuild-netbsd-64: 0.15.7 + esbuild-openbsd-64: 0.15.7 + esbuild-sunos-64: 0.15.7 + esbuild-windows-32: 0.15.7 + esbuild-windows-64: 0.15.7 + esbuild-windows-arm64: 0.15.7 dependenciesMeta: "@esbuild/linux-loong64": optional: true @@ -7934,7 +7637,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: e351cd5647311aa857fa30fb3fa7055b39d7c82ebd96a7abd2657e42e62b5960aeb1dd9466ba97699ab1a1fbc0f0217b26b266fe5e9301590855c53b3133282f + checksum: 54ddaa6cf96798d817861b4f68cb8d176075dc09b6e0ed511c57e5db6fd86d2c673ac2ec631ad9b11678d58ad4a77cd6b7a3853b9c6eac29b7f5c6d38e42f92e languageName: node linkType: hard @@ -8246,8 +7949,8 @@ __metadata: linkType: hard "eslint-plugin-react@npm:^7.31.1": - version: 7.31.1 - resolution: "eslint-plugin-react@npm:7.31.1" + version: 7.31.5 + resolution: "eslint-plugin-react@npm:7.31.5" dependencies: array-includes: ^3.1.5 array.prototype.flatmap: ^1.3.0 @@ -8265,7 +7968,7 @@ __metadata: string.prototype.matchall: ^4.0.7 peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 6217d4c4e36c8fea24facd0cdcf22b2fd38a3603db94ec7c0a6f430046c8564b6c6884e0a9d4a4b8766201f66e8b18af594002210421bf9b6623b1fc32e15a3a + checksum: 9ec72d5ab2da9a2dd6374f91ec0aefca297cc93f84dddfa16fe9a10acd31e78962a702f524b6855d41669c3ae5133d10e3ce8d596a4f1e61c4da47f4a6d3841b languageName: node linkType: hard @@ -8691,20 +8394,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0": - version: 29.0.1 - resolution: "expect@npm:29.0.1" - dependencies: - "@jest/expect-utils": ^29.0.1 - jest-get-type: ^29.0.0 - jest-matcher-utils: ^29.0.1 - jest-message-util: ^29.0.1 - jest-util: ^29.0.1 - checksum: 103d9ecd00d5caefa0e536cde7abefa767f66d0e9ed8e00cf9e1bc1a14dfcee02080ebb9857974250dc68f3e525a85d81796fc37e405838d4cdb3613d76e48a4 - languageName: node - linkType: hard - -"expect@npm:^29.0.2": +"expect@npm:^29.0.0, expect@npm:^29.0.2": version: 29.0.2 resolution: "expect@npm:29.0.2" dependencies: @@ -8779,6 +8469,20 @@ __metadata: languageName: node linkType: hard +"fast-shallow-equal@npm:^1.0.0": + version: 1.0.0 + resolution: "fast-shallow-equal@npm:1.0.0" + checksum: ae89318ce43c0c46410d9511ac31520d59cfe675bad3d0b1cb5f900b2d635943d788b8370437178e91ae0d0412decc394229c03e69925ade929a8c02da241610 + languageName: node + linkType: hard + +"fastest-stable-stringify@npm:^2.0.2": + version: 2.0.2 + resolution: "fastest-stable-stringify@npm:2.0.2" + checksum: 5e2cb166c7bb6f16ac25a1e4be17f6b8d2923234c80739e12c9d21dea376b3128b2c63f90aa2aae7746cfec4dcf188d1d4eb6a964bb484ca133f17c8e9acfacc + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.13.0 resolution: "fastq@npm:1.13.0" @@ -8861,13 +8565,6 @@ __metadata: languageName: node linkType: hard -"find-root@npm:^1.1.0": - version: 1.1.0 - resolution: "find-root@npm:1.1.0" - checksum: b2a59fe4b6c932eef36c45a048ae8f93c85640212ebe8363164814990ee20f154197505965f3f4f102efc33bfb1cbc26fd17c4a2fc739ebc51b886b137cbefaf - languageName: node - linkType: hard - "find-up@npm:^2.0.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" @@ -9864,15 +9561,6 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.3.1": - version: 3.3.2 - resolution: "hoist-non-react-statics@npm:3.3.2" - dependencies: - react-is: ^16.7.0 - checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 - languageName: node - linkType: hard - "hosted-git-info@npm:^2.1.4": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -9898,16 +9586,6 @@ __metadata: languageName: node linkType: hard -"html-dom-parser@npm:1.2.0": - version: 1.2.0 - resolution: "html-dom-parser@npm:1.2.0" - dependencies: - domhandler: 4.3.1 - htmlparser2: 7.2.0 - checksum: d5e72baba7e1a9da334f023f3b3669247c5cebaf51b23011764202c11b3850339aa0fef9f26e00c2b0510e75fe6183453fcba33304a006f9fcde3d037bf60f3d - languageName: node - linkType: hard - "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -9915,35 +9593,6 @@ __metadata: languageName: node linkType: hard -"html-react-parser@npm:1.4.12": - version: 1.4.12 - resolution: "html-react-parser@npm:1.4.12" - dependencies: - domhandler: 4.3.1 - html-dom-parser: 1.2.0 - react-property: 2.0.0 - style-to-js: 1.1.0 - peerDependencies: - react: 0.14 || 15 || 16 || 17 || 18 - checksum: ddc62b2f8d0f8836ca7aa18e51ddd3e329b51d77810547cd6bcb194aa36c61533ed64a8356283b64d57e1b4b96eb7c2fbf6e657e1b4c6d0fad8577132efa6f30 - languageName: node - linkType: hard - -"html-tokenize@npm:^2.0.0": - version: 2.0.1 - resolution: "html-tokenize@npm:2.0.1" - dependencies: - buffer-from: ~0.1.1 - inherits: ~2.0.1 - minimist: ~1.2.5 - readable-stream: ~1.0.27-1 - through2: ~0.4.1 - bin: - html-tokenize: bin/cmd.js - checksum: 4e04078fd22cf274fc1fa430490af3feda1c3bc4dd2fc88880caf6c2e816992d508bc44a7b16721b713a6b98d880f43e10ea4b169529056134cd488403adc8fc - languageName: node - linkType: hard - "html-void-elements@npm:^2.0.0": version: 2.0.1 resolution: "html-void-elements@npm:2.0.1" @@ -9951,18 +9600,6 @@ __metadata: languageName: node linkType: hard -"htmlparser2@npm:7.2.0": - version: 7.2.0 - resolution: "htmlparser2@npm:7.2.0" - dependencies: - domelementtype: ^2.0.1 - domhandler: ^4.2.2 - domutils: ^2.8.0 - entities: ^3.0.1 - checksum: 96563d9965729cfcb3f5f19c26d013c6831b4cb38d79d8c185e9cd669ea6a9ffe8fb9ccc74d29a068c9078aa0e2767053ed6b19aa32723c41550340d0094bea0 - languageName: node - linkType: hard - "http-basic@npm:^8.1.1": version: 8.1.3 resolution: "http-basic@npm:8.1.3" @@ -10062,6 +9699,13 @@ __metadata: languageName: node linkType: hard +"hyphenate-style-name@npm:^1.0.2": + version: 1.0.4 + resolution: "hyphenate-style-name@npm:1.0.4" + checksum: 4f5bf4b055089754924babebaa23c17845937bcca6aee95d5d015f8fa1e6814279002bd6a9e541e3fac2cd02519fc76305396727066c57c8e21a7e73e7a12137 + languageName: node + linkType: hard + "iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" @@ -10152,7 +9796,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.0, inherits@npm:~2.0.1, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.0, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -10180,6 +9824,15 @@ __metadata: languageName: node linkType: hard +"inline-style-prefixer@npm:^6.0.0": + version: 6.0.1 + resolution: "inline-style-prefixer@npm:6.0.1" + dependencies: + css-in-js-utils: ^2.0.0 + checksum: 0bfa6fa89faa21e425c71425910c37c7b35a16ea753586c408fcc9246c84937c1b8184e6ce792139cda5de5cce8e1bc9eb0ba9f30968bdc97e7a06ece21c0737 + languageName: node + linkType: hard + "internal-slot@npm:^1.0.3": version: 1.0.3 resolution: "internal-slot@npm:1.0.3" @@ -10599,13 +10252,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:0.0.1": - version: 0.0.1 - resolution: "isarray@npm:0.0.1" - checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 - languageName: node - linkType: hard - "isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" @@ -10620,6 +10266,13 @@ __metadata: languageName: node linkType: hard +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + "isstream@npm:~0.1.2": version: 0.1.2 resolution: "isstream@npm:0.1.2" @@ -10793,18 +10446,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-diff@npm:29.0.1" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.0.0 - jest-get-type: ^29.0.0 - pretty-format: ^29.0.1 - checksum: f6f80ab9af14dee8046342d074ab64b1c0c4eb5d4a5d71aec0c71eba0192be1864fc5c270a33c6163184561b1fe516c0e2ecd3f21b267340cf710bab61441b3d - languageName: node - linkType: hard - "jest-diff@npm:^29.0.2": version: 29.0.2 resolution: "jest-diff@npm:29.0.2" @@ -10900,18 +10541,6 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-matcher-utils@npm:29.0.1" - dependencies: - chalk: ^4.0.0 - jest-diff: ^29.0.1 - jest-get-type: ^29.0.0 - pretty-format: ^29.0.1 - checksum: 1ad41a91d05703b3396c9a344a4c1afd9155913403289b0d5282e42e67540418f17f802a60bae4e3931eb80a08d42b4e6f1e04835d4d122cc83ccd68fe181524 - languageName: node - linkType: hard - "jest-matcher-utils@npm:^29.0.2": version: 29.0.2 resolution: "jest-matcher-utils@npm:29.0.2" @@ -10924,23 +10553,6 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-message-util@npm:29.0.1" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.0.1 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^29.0.1 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: cef700aeb8746d1e55a39ba4d9bfc91d580373cf4afca22ee9499dee7ab0147ea8349ccb0c2b2d89ab5f374a9f67ec0560dc6eeb123a28795fafb6bf0ac5f9a3 - languageName: node - linkType: hard - "jest-message-util@npm:^29.0.2": version: 29.0.2 resolution: "jest-message-util@npm:29.0.2" @@ -11105,20 +10717,6 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-util@npm:29.0.1" - dependencies: - "@jest/types": ^29.0.1 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: 7404658788d9a8f3c69b946cbf7d9a773f1b353474792ab4d63b0e7f44cf07be87999102b49f2396e205a43b1b995a742ccc1d4a23966594c4b8976d0d116935 - languageName: node - linkType: hard - "jest-util@npm:^29.0.2": version: 29.0.2 resolution: "jest-util@npm:29.0.2" @@ -11226,6 +10824,13 @@ __metadata: languageName: node linkType: hard +"js-cookie@npm:^2.2.1": + version: 2.2.1 + resolution: "js-cookie@npm:2.2.1" + checksum: 9b1fb980a1c5e624fd4b28ea4867bb30c71e04c4484bb3a42766344c533faa684de9498e443425479ec68609e96e27b60614bfe354877c449c631529b6d932f2 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -12268,6 +11873,13 @@ __metadata: languageName: node linkType: hard +"mdn-data@npm:2.0.14": + version: 2.0.14 + resolution: "mdn-data@npm:2.0.14" + checksum: 9d0128ed425a89f4cba8f787dca27ad9408b5cb1b220af2d938e2a0629d17d879a34d2cb19318bdb26c3f14c77dd5dfbae67211f5caaf07b61b1f2c5c8c7dc16 + languageName: node + linkType: hard + "mdn-data@npm:2.0.28": version: 2.0.28 resolution: "mdn-data@npm:2.0.28" @@ -12876,7 +12488,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:~1.2.5": +"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6": version: 1.2.6 resolution: "minimist@npm:1.2.6" checksum: d15428cd1e11eb14e1233bcfb88ae07ed7a147de251441d61158619dfb32c4d7e9061d09cab4825fdee18ecd6fce323228c8c47b5ba7cd20af378ca4048fb3fb @@ -13053,16 +12665,6 @@ __metadata: languageName: node linkType: hard -"multipipe@npm:^1.0.2": - version: 1.0.2 - resolution: "multipipe@npm:1.0.2" - dependencies: - duplexer2: ^0.1.2 - object-assign: ^4.1.0 - checksum: 99cf8934714da7f9ce03e1f0a99621a41443217d80849c62e22b31b6ac356b9acd22f41e555fd7a759f1c7c9d3273e7abff2fb82dff8285f00a6a1022727e4ab - languageName: node - linkType: hard - "mz@npm:^2.7.0": version: 2.7.0 resolution: "mz@npm:2.7.0" @@ -13083,6 +12685,25 @@ __metadata: languageName: node linkType: hard +"nano-css@npm:^5.3.1": + version: 5.3.5 + resolution: "nano-css@npm:5.3.5" + dependencies: + css-tree: ^1.1.2 + csstype: ^3.0.6 + fastest-stable-stringify: ^2.0.2 + inline-style-prefixer: ^6.0.0 + rtl-css-js: ^1.14.0 + sourcemap-codec: ^1.4.8 + stacktrace-js: ^2.0.2 + stylis: ^4.0.6 + peerDependencies: + react: "*" + react-dom: "*" + checksum: 8d4e59a2a29477221af47320d850a7dcee1ac51774fb5a0dce6ee59b22174c7149f75108235de85559581fbb2b93aa222a2b32ea53c93ba3f5d322c4d098c355 + languageName: node + linkType: hard + "nanoid@npm:^3.3.4": version: 3.3.4 resolution: "nanoid@npm:3.3.4" @@ -13142,6 +12763,29 @@ __metadata: languageName: node linkType: hard +"next-progress@npm:^2.2.0": + version: 2.2.0 + resolution: "next-progress@npm:2.2.0" + dependencies: + nprogress: ^0.2.0 + peerDependencies: + next: ">=6.0.0" + react: ">=16.0.0" + checksum: ef0e2c66c6990a6d0cf20c28896461ab32a3322972d52f3cb3ee2d2d58bdc2b620a402b1d7df9e0340b230d9ec9a9457584871ea0b8b890b1fc334d1886d2b97 + languageName: node + linkType: hard + +"next-themes@npm:^0.2.0": + version: 0.2.0 + resolution: "next-themes@npm:0.2.0" + peerDependencies: + next: "*" + react: "*" + react-dom: "*" + checksum: cee02db16bee471856557db9572ffa041b1d77254798e345fad09e1bd8b878e937cdacc73bb73c598eb3b042f20fff0201bd73d2de42e2061fa818585415e857 + languageName: node + linkType: hard + "next@npm:^12.2.5": version: 12.2.5 resolution: "next@npm:12.2.5" @@ -13443,6 +13087,13 @@ __metadata: languageName: node linkType: hard +"nprogress@npm:^0.2.0": + version: 0.2.0 + resolution: "nprogress@npm:0.2.0" + checksum: 66b7bec5d563ecf2d1c3d2815e6d5eb74ed815eee8563e0afa63d3f185ab1b9cf2ddd97e1ded263b9995c5019d26d600320e849e50f3747984daa033744619dc + languageName: node + linkType: hard + "nth-check@npm:^2.0.0, nth-check@npm:^2.0.1": version: 2.1.1 resolution: "nth-check@npm:2.1.1" @@ -13494,13 +13145,6 @@ __metadata: languageName: node linkType: hard -"object-keys@npm:~0.4.0": - version: 0.4.0 - resolution: "object-keys@npm:0.4.0" - checksum: 1be3ebe9b48c0d5eda8e4a30657d887a748cb42435e0e2eaf49faf557bdd602cd2b7558b8ce90a4eb2b8592d16b875a1900bce859cbb0f35b21c67e11a45313c - languageName: node - linkType: hard - "object-to-spawn-args@npm:^2.0.1": version: 2.0.1 resolution: "object-to-spawn-args@npm:2.0.1" @@ -14078,6 +13722,13 @@ __metadata: languageName: node linkType: hard +"prefix-style@npm:2.0.1": + version: 2.0.1 + resolution: "prefix-style@npm:2.0.1" + checksum: 79c3559b74417a1552a91d2008d64cc7f326ff4fe8ed2053519663677238f28455bfda0dd935cb1d6690ac7281aff14361e15cfcf83ec263a8183827df7b2a90 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -14092,6 +13743,15 @@ __metadata: languageName: node linkType: hard +"prettier-plugin-tailwindcss@npm:^0.1.13": + version: 0.1.13 + resolution: "prettier-plugin-tailwindcss@npm:0.1.13" + peerDependencies: + prettier: ">=2.2.0" + checksum: 1b9000686e661be81de7d36d514c5ee34a98b11639b538bce8dd3a482c073c0148feb9d54b526babaede681d1c5ecb318ad97f38e8d71dd5cc26c33dfcaf8344 + languageName: node + linkType: hard + "prettier@npm:^2.7.1": version: 2.7.1 resolution: "prettier@npm:2.7.1" @@ -14131,18 +13791,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.0.1": - version: 29.0.1 - resolution: "pretty-format@npm:29.0.1" - dependencies: - "@jest/schemas": ^29.0.0 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: d31e72769b0bc0453123c52259dba28551cfc3f02b4968fa286c14dcaed08c1e68e45d5383d425f1ac5ab829c908ebe18f9aee4e4df507be5fc82ab51b1e8995 - languageName: node - linkType: hard - -"pretty-format@npm:^29.0.2": +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.0.2": version: 29.0.2 resolution: "pretty-format@npm:29.0.2" dependencies: @@ -14247,7 +13896,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.8.1": +"prop-types@npm:^15.5.10, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -14351,6 +14000,15 @@ __metadata: languageName: node linkType: hard +"raf@npm:^3.1.0": + version: 3.4.1 + resolution: "raf@npm:3.4.1" + dependencies: + performance-now: ^2.1.0 + checksum: 50ba284e481c8185dbcf45fc4618ba3aec580bb50c9121385d5698cb6012fe516d2015b1df6dd407a7b7c58d44be8086108236affbce1861edd6b44637c8cd52 + languageName: node + linkType: hard + "rc@npm:1.2.8, rc@npm:^1.2.7, rc@npm:^1.2.8": version: 1.2.8 resolution: "rc@npm:1.2.8" @@ -14365,6 +14023,20 @@ __metadata: languageName: node linkType: hard +"react-custom-scrollbars-2@npm:^4.5.0": + version: 4.5.0 + resolution: "react-custom-scrollbars-2@npm:4.5.0" + dependencies: + dom-css: ^2.0.0 + prop-types: ^15.5.10 + raf: ^3.1.0 + peerDependencies: + react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: b264629c0bfcc292106540f802e4d4281fb4acfab93ab259dcde096b72f135a1be6f2fcf636478f9e9bce6e15a9c6eb624c799184bb478073bb7ace86588a1de + languageName: node + linkType: hard + "react-dom@npm:^18.2.0": version: 18.2.0 resolution: "react-dom@npm:18.2.0" @@ -14386,7 +14058,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.13.1, react-is@npm:^16.7.0": +"react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f @@ -14407,13 +14079,6 @@ __metadata: languageName: node linkType: hard -"react-property@npm:2.0.0": - version: 2.0.0 - resolution: "react-property@npm:2.0.0" - checksum: 8a444df30ef0937689c7968dae2501a0ca523777169f450e1f7ef5beeb855d6509bd058bf612f6ed8f459aa35468335d356e50264492e1938586e59fdb988262 - languageName: node - linkType: hard - "react-refresh@npm:^0.14.0": version: 0.14.0 resolution: "react-refresh@npm:0.14.0" @@ -14436,16 +14101,38 @@ __metadata: languageName: node linkType: hard -"react-textarea-autosize@npm:8.3.4": - version: 8.3.4 - resolution: "react-textarea-autosize@npm:8.3.4" - dependencies: - "@babel/runtime": ^7.10.2 - use-composed-ref: ^1.3.0 - use-latest: ^1.2.1 +"react-universal-interface@npm:^0.6.2": + version: 0.6.2 + resolution: "react-universal-interface@npm:0.6.2" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 87360d4392276d4e87511a73be9b0634b8bcce8f4f648cf659334d993f25ad3d4062f468f1e1944fc614123acae4299580aad00b760c6a96cec190e076f847f5 + react: "*" + tslib: "*" + checksum: 070a7e9e3cdd8b0ec91a2ac9ac0a8df6bcb3fd183d2775bf0f439b9870fc1faf5b4fa9fe9741abd5187f0a35be645cb4004e1c9ebda9ada7e5d0a624f94910cb + languageName: node + linkType: hard + +"react-use@npm:^17.4.0": + version: 17.4.0 + resolution: "react-use@npm:17.4.0" + dependencies: + "@types/js-cookie": ^2.2.6 + "@xobotyi/scrollbar-width": ^1.9.5 + copy-to-clipboard: ^3.3.1 + fast-deep-equal: ^3.1.3 + fast-shallow-equal: ^1.0.0 + js-cookie: ^2.2.1 + nano-css: ^5.3.1 + react-universal-interface: ^0.6.2 + resize-observer-polyfill: ^1.5.1 + screenfull: ^5.1.0 + set-harmonic-interval: ^1.0.1 + throttle-debounce: ^3.0.1 + ts-easing: ^0.2.0 + tslib: ^2.1.0 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 0889da919b49a186de375ec15d2778b954ae981c523acd17dd496e4a4da7b6190efe7993491e1b85fdd6de3e745d08a4eaba4caa35408d570b5f1de550f35d11 languageName: node linkType: hard @@ -14513,7 +14200,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.6, readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.6, readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" dependencies: @@ -14528,18 +14215,6 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:~1.0.17, readable-stream@npm:~1.0.27-1": - version: 1.0.34 - resolution: "readable-stream@npm:1.0.34" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.1 - isarray: 0.0.1 - string_decoder: ~0.10.x - checksum: 85042c537e4f067daa1448a7e257a201070bfec3dd2706abdbd8ebc7f3418eb4d3ed4b8e5af63e2544d69f88ab09c28d5da3c0b77dc76185fddd189a59863b60 - languageName: node - linkType: hard - "readable-web-to-node-stream@npm:^3.0.2": version: 3.0.2 resolution: "readable-web-to-node-stream@npm:3.0.2" @@ -14894,6 +14569,13 @@ __metadata: languageName: node linkType: hard +"resize-observer-polyfill@npm:^1.5.1": + version: 1.5.1 + resolution: "resize-observer-polyfill@npm:1.5.1" + checksum: 57e7f79489867b00ba43c9c051524a5c8f162a61d5547e99333549afc23e15c44fd43f2f318ea0261ea98c0eb3158cca261e6f48d66e1ed1cd1f340a43977094 + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -14933,7 +14615,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.3.2": +"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.3.2": version: 1.22.1 resolution: "resolve@npm:1.22.1" dependencies: @@ -14978,7 +14660,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.3.2#~builtin": +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.3.2#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" dependencies: @@ -15122,6 +14804,15 @@ __metadata: languageName: node linkType: hard +"rtl-css-js@npm:^1.14.0": + version: 1.16.0 + resolution: "rtl-css-js@npm:1.16.0" + dependencies: + "@babel/runtime": ^7.1.2 + checksum: 51756329f691cacd3e1b48f0f9d04a69338a90013f2d2942ca1ae3b069c952f70055f5fd76c66921e9a5cb956276252376a847c3294bd0ee54be9ceb32ea868c + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -15205,6 +14896,13 @@ __metadata: languageName: node linkType: hard +"screenfull@npm:^5.1.0": + version: 5.2.0 + resolution: "screenfull@npm:5.2.0" + checksum: 21eae33b780eb4679ea0ea2d14734b11168cf35049c45a2bf24ddeb39c67a788e7a8fb46d8b61ca6d8367fd67ce9dd4fc8bfe476489249c7189c2a79cf83f51a + languageName: node + linkType: hard + "semver-diff@npm:^3.1.1": version: 3.1.1 resolution: "semver-diff@npm:3.1.1" @@ -15268,9 +14966,16 @@ __metadata: languageName: node linkType: hard -"sharp@npm:^0.30.7": - version: 0.30.7 - resolution: "sharp@npm:0.30.7" +"set-harmonic-interval@npm:^1.0.1": + version: 1.0.1 + resolution: "set-harmonic-interval@npm:1.0.1" + checksum: c122b831c2e0b1fb812e5e9d065094b9d174bd0576f9a779ab7a7d8881c8f6dd7d5fcab9a2553da15eea670eb598f9dd4d5162b626d45cc9c529706aa1444a84 + languageName: node + linkType: hard + +"sharp@npm:^0.31.0": + version: 0.31.0 + resolution: "sharp@npm:0.31.0" dependencies: color: ^4.2.3 detect-libc: ^2.0.1 @@ -15281,7 +14986,7 @@ __metadata: simple-get: ^4.0.1 tar-fs: ^2.1.1 tunnel-agent: ^0.6.0 - checksum: bbc63ca3c7ea8a5bff32cd77022cfea30e25a03f5bd031e935924bf6cf0e11e3388e8b0e22b3137bf8816aa73407f1e4fbeb190f3a35605c27ffca9f32b91601 + checksum: 1ab73fea3a506f0bf290eb9dff6e7bab7947813e69bf8ca3eebcbe96498cb23dd6c8d8d02d67575fd8e9b555b01d9529d140c5a66e3a774855ba758455a90f3e languageName: node linkType: hard @@ -15506,6 +15211,13 @@ __metadata: languageName: node linkType: hard +"source-map@npm:0.5.6": + version: 0.5.6 + resolution: "source-map@npm:0.5.6" + checksum: 390b3f5165c9631a74fb6fb55ba61e62a7f9b7d4026ae0e2bfc2899c241d71c1bccb8731c496dc7f7cb79a5f523406eb03d8c5bebe8448ee3fc38168e2d209c8 + languageName: node + linkType: hard + "source-map@npm:0.8.0-beta.0": version: 0.8.0-beta.0 resolution: "source-map@npm:0.8.0-beta.0" @@ -15515,13 +15227,6 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.5.7": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d - languageName: node - linkType: hard - "source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" @@ -15662,6 +15367,15 @@ __metadata: languageName: node linkType: hard +"stack-generator@npm:^2.0.5": + version: 2.0.10 + resolution: "stack-generator@npm:2.0.10" + dependencies: + stackframe: ^1.3.4 + checksum: 4fc3978a934424218a0aa9f398034e1f78153d5ff4f4ff9c62478c672debb47dd58de05b09fc3900530cbb526d72c93a6e6c9353bacc698e3b1c00ca3dda0c47 + languageName: node + linkType: hard + "stack-utils@npm:^2.0.3": version: 2.0.5 resolution: "stack-utils@npm:2.0.5" @@ -15671,6 +15385,34 @@ __metadata: languageName: node linkType: hard +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d + languageName: node + linkType: hard + +"stacktrace-gps@npm:^3.0.4": + version: 3.1.2 + resolution: "stacktrace-gps@npm:3.1.2" + dependencies: + source-map: 0.5.6 + stackframe: ^1.3.4 + checksum: 85daa232d138239b6ae0f4bcdd87d15d302a045d93625db17614030945b5314e204b5fbcf9bee5b6f4f9e6af5fca05f65c27fe910894b861ef6853b99470aa1c + languageName: node + linkType: hard + +"stacktrace-js@npm:^2.0.2": + version: 2.0.2 + resolution: "stacktrace-js@npm:2.0.2" + dependencies: + error-stack-parser: ^2.0.6 + stack-generator: ^2.0.5 + stacktrace-gps: ^3.0.4 + checksum: 081e786d56188ac04ac6604c09cd863b3ca2b4300ec061366cf68c3e4ad9edaa34fb40deea03cc23a05f442aa341e9171f47313f19bd588f9bec6c505a396286 + languageName: node + linkType: hard + "stream-connect@npm:^1.0.2": version: 1.0.2 resolution: "stream-connect@npm:1.0.2" @@ -15784,13 +15526,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:~0.10.x": - version: 0.10.31 - resolution: "string_decoder@npm:0.10.31" - checksum: fe00f8e303647e5db919948ccb5ce0da7dea209ab54702894dd0c664edd98e5d4df4b80d6fabf7b9e92b237359d21136c95bf068b2f7760b772ca974ba970202 - languageName: node - linkType: hard - "string_decoder@npm:~1.1.1": version: 1.1.1 resolution: "string_decoder@npm:1.1.1" @@ -15907,16 +15642,7 @@ __metadata: languageName: node linkType: hard -"style-to-js@npm:1.1.0": - version: 1.1.0 - resolution: "style-to-js@npm:1.1.0" - dependencies: - style-to-object: 0.3.0 - checksum: 8facf902b55271de8edf105d7b5d5017869518e34a2ee4b8e25093ea3ecf25ead9cc4b6a7fee7c17f7ac3ff95d36198d81aa4d53a46d4fee7d856903a097557d - languageName: node - linkType: hard - -"style-to-object@npm:0.3.0, style-to-object@npm:^0.3.0": +"style-to-object@npm:^0.3.0": version: 0.3.0 resolution: "style-to-object@npm:0.3.0" dependencies: @@ -15939,10 +15665,10 @@ __metadata: languageName: node linkType: hard -"stylis@npm:4.0.13": - version: 4.0.13 - resolution: "stylis@npm:4.0.13" - checksum: 8ea7a87028b6383c6a982231c4b5b6150031ce028e0fdaf7b2ace82253d28a8af50cc5a9da8a421d3c7c4441592f393086e332795add672aa4a825f0fe3713a3 +"stylis@npm:^4.0.6": + version: 4.1.1 + resolution: "stylis@npm:4.1.1" + checksum: e9b0a086996a94c44d45933287731313f6ecdbf9334410231d882d31a1890fb36e34a7b163487e2d7f992c2044e4cb37179810fc6f758f359a431343c2374ed2 languageName: node linkType: hard @@ -16257,6 +15983,13 @@ __metadata: languageName: node linkType: hard +"throttle-debounce@npm:^3.0.1": + version: 3.0.1 + resolution: "throttle-debounce@npm:3.0.1" + checksum: e34ef638e8df3a9154249101b68afcbf2652a139c803415ef8a2f6a8bc577bcd4d79e4bb914ad3cd206523ac78b9fb7e80885bfa049f64fbb1927f99d98b5736 + languageName: node + linkType: hard + "through2@npm:^2.0.0": version: 2.0.5 resolution: "through2@npm:2.0.5" @@ -16276,16 +16009,6 @@ __metadata: languageName: node linkType: hard -"through2@npm:~0.4.1": - version: 0.4.2 - resolution: "through2@npm:0.4.2" - dependencies: - readable-stream: ~1.0.17 - xtend: ~2.1.1 - checksum: 50e41d272db4a74b10a62b7e92eeeb8d30e426a7a8a772cd85fac0f8e21d92c6e5cb5012d7db5f7a20f6e147e1f14f87062058c77b05bc9d463ae4d8b3eb1e42 - languageName: node - linkType: hard - "through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.8": version: 2.3.8 resolution: "through@npm:2.3.8" @@ -16339,6 +16062,15 @@ __metadata: languageName: node linkType: hard +"to-camel-case@npm:1.0.0": + version: 1.0.0 + resolution: "to-camel-case@npm:1.0.0" + dependencies: + to-space-case: ^1.0.0 + checksum: 2f74cfcffa58e8ddede7e01a03eda2cc3f0ab50efdad1d0f1092d55b4e499be43846d1f9087c458fa9efde4958e407738197d65858272c56c915b649b9ca1e62 + languageName: node + linkType: hard + "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" @@ -16346,6 +16078,13 @@ __metadata: languageName: node linkType: hard +"to-no-case@npm:^1.0.0": + version: 1.0.2 + resolution: "to-no-case@npm:1.0.2" + checksum: 1d85326eeb89f9f3a805bf5b395bcabb8556e882350164c1faa10846076732f4cec02ac95b016e7d6bb2f55e448ce5dd227c7699ec43e387c705a5b2b1ee2963 + languageName: node + linkType: hard + "to-readable-stream@npm:^1.0.0": version: 1.0.0 resolution: "to-readable-stream@npm:1.0.0" @@ -16362,6 +16101,22 @@ __metadata: languageName: node linkType: hard +"to-space-case@npm:^1.0.0": + version: 1.0.0 + resolution: "to-space-case@npm:1.0.0" + dependencies: + to-no-case: ^1.0.0 + checksum: 157cebe3e98e7cb465fe1978cf26450cc8ea8e637a01039854fac7ed60ad074e5e18b32333cc5f30df81b81ca374d63df768cd4c1fa0fe672605f965376227f4 + languageName: node + linkType: hard + +"toggle-selection@npm:^1.0.6": + version: 1.0.6 + resolution: "toggle-selection@npm:1.0.6" + checksum: a90dc80ed1e7b18db8f4e16e86a5574f87632dc729cfc07d9ea3ced50021ad42bb4e08f22c0913e0b98e3837b0b717e0a51613c65f30418e21eb99da6556a74c + languageName: node + linkType: hard + "token-types@npm:^5.0.1": version: 5.0.1 resolution: "token-types@npm:5.0.1" @@ -16435,6 +16190,13 @@ __metadata: languageName: node linkType: hard +"ts-easing@npm:^0.2.0": + version: 0.2.0 + resolution: "ts-easing@npm:0.2.0" + checksum: e67ee862acca3b2e2718e736f31999adcef862d0df76d76a0e138588728d8a87dfec9978556044640bd0e90203590ad88ac2fe8746d0e9959b8d399132315150 + languageName: node + linkType: hard + "ts-interface-checker@npm:^0.1.9": version: 0.1.13 resolution: "ts-interface-checker@npm:0.1.13" @@ -16963,12 +16725,12 @@ __metadata: linkType: hard "typescript@npm:next": - version: 4.9.0-dev.20220902 - resolution: "typescript@npm:4.9.0-dev.20220902" + version: 4.9.0-dev.20220904 + resolution: "typescript@npm:4.9.0-dev.20220904" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 7a70c76cb5ac454eae4d15bd673f94f589dbe2e4ebd63c2d00d2bffee059c8f6b9dbdb45c567e175562ba0a3fcf9d3b433f72869fe12578f9949367001c873d8 + checksum: a3699604c77df70768aeef24a512453e8fa8d1a510fb8738052dcd38d70da4c19360e08dfdcfdbb1221bb5227afe3f0da8d5a872302f9b4b66e7e494b598162b languageName: node linkType: hard @@ -17003,12 +16765,12 @@ __metadata: linkType: hard "typescript@patch:typescript@next#~builtin": - version: 4.9.0-dev.20220902 - resolution: "typescript@patch:typescript@npm%3A4.9.0-dev.20220902#~builtin::version=4.9.0-dev.20220902&hash=7ad353" + version: 4.9.0-dev.20220904 + resolution: "typescript@patch:typescript@npm%3A4.9.0-dev.20220904#~builtin::version=4.9.0-dev.20220904&hash=7ad353" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: fded29ff273c5b76d97ad0ab4dd6a38e746add0a102a6a8fa8bec755f35237e505d73d13a1a966513e6fd38934ba9f7db8cd0a628148d9dfe6c7cc64584c21ca + checksum: 1f6ab5e5517cb999752eca08c1a77f5c76d9d810081776ab6e0ccf3c1e126be1d6bc8703ec45c26311044c7c2734ece51135cc313d2a1cd12a864d4208e87a2c languageName: node linkType: hard @@ -17355,41 +17117,6 @@ __metadata: languageName: node linkType: hard -"use-composed-ref@npm:^1.3.0": - version: 1.3.0 - resolution: "use-composed-ref@npm:1.3.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: f771cbadfdc91e03b7ab9eb32d0fc0cc647755711801bf507e891ad38c4bbc5f02b2509acadf9c965ec9c5f2f642fd33bdfdfb17b0873c4ad0a9b1f5e5e724bf - languageName: node - linkType: hard - -"use-isomorphic-layout-effect@npm:^1.1.1": - version: 1.1.2 - resolution: "use-isomorphic-layout-effect@npm:1.1.2" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: a6532f7fc9ae222c3725ff0308aaf1f1ddbd3c00d685ef9eee6714fd0684de5cb9741b432fbf51e61a784e2955424864f7ea9f99734a02f237b17ad3e18ea5cb - languageName: node - linkType: hard - -"use-latest@npm:^1.2.1": - version: 1.2.1 - resolution: "use-latest@npm:1.2.1" - dependencies: - use-isomorphic-layout-effect: ^1.1.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: ed3f2ddddf6f21825e2ede4c2e0f0db8dcce5129802b69d1f0575fc1b42380436e8c76a6cd885d4e9aa8e292e60fb8b959c955f33c6a9123b83814a1a1875367 - languageName: node - linkType: hard - "use-sync-external-store@npm:1.2.0": version: 1.2.0 resolution: "use-sync-external-store@npm:1.2.0" @@ -17599,9 +17326,9 @@ __metadata: languageName: node linkType: hard -"vitest@npm:0.23.0, vitest@npm:^0.23.0": - version: 0.23.0 - resolution: "vitest@npm:0.23.0" +"vitest@npm:0.23.1, vitest@npm:^0.23.1": + version: 0.23.1 + resolution: "vitest@npm:0.23.1" dependencies: "@types/chai": ^4.3.3 "@types/chai-subset": ^1.3.3 @@ -17633,7 +17360,7 @@ __metadata: optional: true bin: vitest: vitest.mjs - checksum: e35db8a2618b95cda9c98a8e1b5a6c83e7c84c7500296614829adef21ca7ac3e9580b19062f379e57df8d847a53eb6bfd8d66c501b5fb666e504c35ca5b18107 + checksum: 26ca78dc0979c435f2b2f265fc94d13d4e2da5e72680812471cd0b802e5727784c1c05b7dff945bb6638da0ae50ada06dfea5c28cec318575cad95d8a769c131 languageName: node linkType: hard @@ -17923,15 +17650,6 @@ __metadata: languageName: node linkType: hard -"xtend@npm:~2.1.1": - version: 2.1.2 - resolution: "xtend@npm:2.1.2" - dependencies: - object-keys: ~0.4.0 - checksum: a8b79f31502c163205984eaa2b196051cd2fab0882b49758e30f2f9018255bc6c462e32a090bf3385d1bda04755ad8cc0052a09e049b0038f49eb9b950d9c447 - languageName: node - linkType: hard - "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3"
+
+ + + {deprecation || readonly || optional ? ( - +
{deprecation ? ( - +
Deprecated - +
) : null} - {readonly ? Readonly : null} - {optional ? Optional : null} - + {readonly ? ( +
+ Readonly +
+ ) : null} + {optional ? ( +
+ Optional +
+ ) : null} +
) : null} - - + <div className="flex flex-row flex-wrap place-items-center gap-1"> + <h4 className="break-all font-mono text-lg font-bold"> {name} {optional ? '?' : ''} - - {separator} - + </h4> + <h4 className="font-mono text-lg font-bold">{separator}</h4> + <h4 className="break-all font-mono text-lg font-bold"> <HyperlinkedText tokens={typeTokens} /> - - - - - + +
+