From 6e95273544d3b6fca75f84bf0e9f4b779341398b Mon Sep 17 00:00:00 2001 From: iCrawl Date: Sat, 5 Apr 2025 05:13:11 +0200 Subject: [PATCH] refactor: website facelift --- apps/website/.prettierignore | 1 + apps/website/next-env.d.ts | 2 +- .../{next.config.mjs => next.config.ts} | 16 +- apps/website/package.json | 77 +- apps/website/postcss.config.cjs | 6 - apps/website/postcss.config.js | 5 + .../packages/[packageName]/[version]/CmdK.tsx | 14 + .../[version]/[item]/opengraph-image.tsx | 40 +- .../[packageName]/[version]/[item]/page.tsx | 26 +- .../[packageName]/[version]/layout.tsx | 137 +- .../packages/[packageName]/[version]/page.tsx | 29 +- apps/website/src/app/layout.tsx | 30 +- apps/website/src/app/not-found.tsx | 4 +- apps/website/src/app/opengraph-image.tsx | 19 +- apps/website/src/app/page.tsx | 33 +- apps/website/src/app/providers.tsx | 20 +- apps/website/src/assets/Geist-Black.ttf | Bin 0 -> 78244 bytes apps/website/src/assets/Geist-Bold.ttf | Bin 0 -> 78276 bytes apps/website/src/components/Badges.tsx | 2 +- apps/website/src/components/{ui => }/CmdK.tsx | 27 +- .../src/components/ConstructorNode.tsx | 12 +- apps/website/src/components/DocItem.tsx | 33 +- apps/website/src/components/DocNode.tsx | 27 +- .../website/src/components/EnumMemberNode.tsx | 14 +- apps/website/src/components/EventNode.tsx | 20 +- apps/website/src/components/ExampleNode.tsx | 2 +- apps/website/src/components/ExcerptNode.tsx | 14 +- .../src/components/{ui => }/Footer.tsx | 6 +- .../src/components/InformationNode.tsx | 4 +- .../src/components/InheritanceNode.tsx | 4 +- .../src/components/InheritedFromNode.tsx | 6 +- .../src/components/{ui => }/InstallButton.tsx | 4 +- apps/website/src/components/MethodNode.tsx | 20 +- apps/website/src/components/Navigation.tsx | 349 +- .../website/src/components/NavigationItem.tsx | 17 +- apps/website/src/components/Outline.tsx | 32 +- .../src/components/OverlayScrollbars.tsx | 13 +- apps/website/src/components/PackageSelect.tsx | 30 + apps/website/src/components/ParameterNode.tsx | 6 +- apps/website/src/components/PropertyNode.tsx | 16 +- .../src/components/{ui => }/SearchButton.tsx | 15 +- .../src/components/SyntaxHighlighter.tsx | 11 +- apps/website/src/components/ThemeSwitch.tsx | 21 + .../src/components/TypeParameterNode.tsx | 15 +- apps/website/src/components/UnionMember.tsx | 4 +- apps/website/src/components/VersionSelect.tsx | 35 + apps/website/src/components/ui/Alert.tsx | 6 +- apps/website/src/components/ui/Button.tsx | 27 +- apps/website/src/components/ui/Dialog.tsx | 175 + apps/website/src/components/ui/Drawer.tsx | 37 - apps/website/src/components/ui/Dropdown.tsx | 166 + apps/website/src/components/ui/Field.tsx | 117 + apps/website/src/components/ui/Keyboard.tsx | 38 + apps/website/src/components/ui/ListBox.tsx | 66 +- .../src/components/ui/PackageSelect.tsx | 95 - apps/website/src/components/ui/Popover.tsx | 158 +- apps/website/src/components/ui/Select.tsx | 132 +- apps/website/src/components/ui/Sheet.tsx | 148 + apps/website/src/components/ui/Sidebar.tsx | 485 ++ .../website/src/components/ui/ThemeSwitch.tsx | 16 - .../src/components/ui/VersionSelect.tsx | 102 - apps/website/src/styles/base.css | 228 + apps/website/src/styles/cva.ts | 34 + apps/website/src/styles/main.css | 76 - apps/website/src/styles/ui/button.ts | 193 + apps/website/src/styles/ui/focusRing.ts | 11 + apps/website/src/styles/util.ts | 9 + apps/website/src/util/fetchDependencies.ts | 4 +- apps/website/src/util/fetchNode.ts | 4 +- apps/website/src/util/fetchSitemap.ts | 6 +- apps/website/src/util/shiki.bundle.ts | 59 + apps/website/tailwind.config.js | 100 - apps/website/tsconfig.json | 2 +- eslint.config.js | 1 + .../api-extractor-model/src/items/ApiItem.ts | 1 - .../api-extractor-model/src/model/ApiModel.ts | 1 - ... => @microsoft__tsdoc-config@0.16.2.patch} | 2 +- pnpm-lock.yaml | 4749 ++++++++++++----- pnpm-workspace.yaml | 7 +- turbo.json | 34 +- 80 files changed, 6057 insertions(+), 2450 deletions(-) rename apps/website/{next.config.mjs => next.config.ts} (75%) delete mode 100644 apps/website/postcss.config.cjs create mode 100644 apps/website/postcss.config.js create mode 100644 apps/website/src/app/docs/packages/[packageName]/[version]/CmdK.tsx create mode 100644 apps/website/src/assets/Geist-Black.ttf create mode 100644 apps/website/src/assets/Geist-Bold.ttf rename apps/website/src/components/{ui => }/CmdK.tsx (82%) rename apps/website/src/components/{ui => }/Footer.tsx (94%) rename apps/website/src/components/{ui => }/InstallButton.tsx (86%) create mode 100644 apps/website/src/components/PackageSelect.tsx rename apps/website/src/components/{ui => }/SearchButton.tsx (50%) create mode 100644 apps/website/src/components/ThemeSwitch.tsx create mode 100644 apps/website/src/components/VersionSelect.tsx create mode 100644 apps/website/src/components/ui/Dialog.tsx delete mode 100644 apps/website/src/components/ui/Drawer.tsx create mode 100644 apps/website/src/components/ui/Dropdown.tsx create mode 100644 apps/website/src/components/ui/Field.tsx create mode 100644 apps/website/src/components/ui/Keyboard.tsx delete mode 100644 apps/website/src/components/ui/PackageSelect.tsx create mode 100644 apps/website/src/components/ui/Sheet.tsx create mode 100644 apps/website/src/components/ui/Sidebar.tsx delete mode 100644 apps/website/src/components/ui/ThemeSwitch.tsx delete mode 100644 apps/website/src/components/ui/VersionSelect.tsx create mode 100644 apps/website/src/styles/base.css create mode 100644 apps/website/src/styles/cva.ts delete mode 100644 apps/website/src/styles/main.css create mode 100644 apps/website/src/styles/ui/button.ts create mode 100644 apps/website/src/styles/ui/focusRing.ts create mode 100644 apps/website/src/styles/util.ts create mode 100644 apps/website/src/util/shiki.bundle.ts delete mode 100644 apps/website/tailwind.config.js rename patches/{@microsoft__tsdoc-config.patch => @microsoft__tsdoc-config@0.16.2.patch} (97%) diff --git a/apps/website/.prettierignore b/apps/website/.prettierignore index 82325298c94d..abc9d0f972ac 100644 --- a/apps/website/.prettierignore +++ b/apps/website/.prettierignore @@ -6,3 +6,4 @@ public/searchIndex src/assets/readme src/styles/unocss.css next-env.d.ts +src/util/shiki.bundle.ts diff --git a/apps/website/next-env.d.ts b/apps/website/next-env.d.ts index 4f11a03dc6cc..1b3be0840f3f 100644 --- a/apps/website/next-env.d.ts +++ b/apps/website/next-env.d.ts @@ -2,4 +2,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/website/next.config.mjs b/apps/website/next.config.ts similarity index 75% rename from apps/website/next.config.mjs rename to apps/website/next.config.ts index 1cc7ec1570c1..c98b2d61c7a1 100644 --- a/apps/website/next.config.mjs +++ b/apps/website/next.config.ts @@ -1,13 +1,19 @@ -/** - * @type {import('next').NextConfig} - */ +import type { NextConfig } from 'next'; + export default { reactStrictMode: true, images: { dangerouslyAllowSVG: true, contentDispositionType: 'attachment', contentSecurityPolicy: "default-src 'self'; frame-src 'none'; sandbox;", + remotePatterns: [ + { + protocol: 'http', + hostname: 'localhost', + }, + ], }, + poweredByHeader: false, logging: { fetches: { fullUrl: true, @@ -16,6 +22,8 @@ export default { experimental: { ppr: true, reactCompiler: true, + useCache: true, + dynamicOnHover: true, }, eslint: { ignoreDuringBuilds: true, @@ -37,4 +45,4 @@ export default { }, ]; }, -}; +} satisfies NextConfig; diff --git a/apps/website/package.json b/apps/website/package.json index 93f1c7cba96d..29ce386990e9 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -13,7 +13,7 @@ "build:search_indices": "pnpm node scripts/generateAllIndices.js", "build:analyze": "turbo run docs --filter='@discordjs/*' --concurrency=4 && cross-env ANALYZE=true NEXT_PUBLIC_LOCAL_DEV=true pnpm run build:prod", "preview": "next start", - "dev": "next dev", + "dev": "next dev --turbopack", "lint": "pnpm run build:check && prettier --check . && cross-env TIMING=1 eslint --format=pretty src ", "format": "pnpm run build:check && prettier --write . && cross-env TIMING=1 eslint --fix --format=pretty src ", "fmt": "pnpm run format" @@ -46,57 +46,78 @@ "homepage": "https://discord.js.org", "funding": "https://github.com/discordjs/discord.js?sponsor", "dependencies": { - "@radix-ui/react-collapsible": "^1.1.2", + "@radix-ui/react-collapsible": "^1.1.3", "@react-icons/all-files": "^4.1.0", - "@vercel/analytics": "^1.4.1", + "@vercel/analytics": "^1.5.0", "@vercel/edge-config": "^1.4.0", - "@vercel/og": "^0.6.4", - "@vercel/postgres": "^0.9.0", - "cmdk": "^1.0.4", + "@vercel/og": "^0.6.8", + "@vercel/postgres": "^0.10.0", + "cmdk": "^1.1.1", + "cva": "1.0.0-beta.3", "geist": "^1.3.1", - "jotai": "^2.11.0", - "lucide-react": "^0.379.0", - "meilisearch": "^0.40.0", - "next": "15.0.0-rc.0", - "next-mdx-remote-client": "^1.0.3", - "next-themes": "^0.3.0", - "overlayscrollbars": "^2.10.1", + "immer": "^10.1.1", + "jotai": "^2.12.2", + "jotai-immer": "^0.4.1", + "lucide-react": "^0.487.0", + "meilisearch": "^0.49.0", + "motion": "^12.6.3", + "next": "15.3.1-canary.2", + "next-mdx-remote-client": "^2.1.1", + "next-themes": "^0.4.6", + "nuqs": "^2.4.1", + "overlayscrollbars": "^2.11.1", "overlayscrollbars-react": "^0.5.6", - "react": "19.1.0", - "react-aria-components": "^1.5.0", - "react-dom": "19.1.0", + "react": "^19.1.0", + "react-aria": "^3.38.1", + "react-aria-components": "^1.7.1", + "react-dom": "^19.1.0", + "react-error-boundary": "^5.0.0", "sharp": "^0.33.5", - "usehooks-ts": "^3.1.0", + "tailwind-merge": "^3.1.0", + "tw-animate-css": "^1.2.5", + "usehooks-ts": "^3.1.1", "vaul": "^1.1.2" }, "devDependencies": { - "@shikijs/rehype": "^1.24.4", - "@tailwindcss/typography": "^0.5.15", + "@next/env": "^15.2.4", + "@playwright/test": "^1.51.1", + "@shikijs/rehype": "^3.2.1", + "@tailwindcss/postcss": "^4.1.3", + "@tailwindcss/typography": "^0.5.16", + "@tailwindcss/vite": "^4.1.3", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", "@types/node": "^22.14.0", "@types/react": "^19.1.0", "@types/react-dom": "^19.1.1", "@vitejs/plugin-react": "^4.3.4", + "@vitest/browser": "^3.1.1", + "@vitest/coverage-v8": "^2.1.8", "autoprefixer": "^10.4.21", - "babel-plugin-react-compiler": "0.0.0-experimental-592953e-20240517", + "babel-plugin-react-compiler": "19.0.0-beta-e993439-20250328", "cpy-cli": "^5.0.0", "cross-env": "^7.0.3", "eslint": "^9.24.0", "eslint-config-neon": "^0.2.7", - "eslint-formatter-compact": "^8.40.0", "eslint-formatter-pretty": "^6.0.1", + "git-describe": "^4.1.1", "happy-dom": "^17.4.4", + "msw": "^2.7.3", + "playwright": "^1.51.1", "postcss": "^8.5.3", "prettier": "^3.5.3", - "prettier-plugin-tailwindcss": "^0.5.14", - "remark-gfm": "^4.0.0", - "remark-rehype": "^11.1.1", - "shiki": "^1.24.4", - "tailwindcss": "^3.4.17", + "prettier-plugin-tailwindcss": "^0.6.11", + "remark-gfm": "^4.0.1", + "remark-rehype": "^11.1.2", + "shiki": "^3.2.1", + "tailwindcss": "^4.1.3", + "tailwindcss-react-aria-components": "^2.0.0", "turbo": "^2.5.0", - "typescript": "~5.8.3", - "vercel": "^41.4.1" + "typescript": "^5.8.2", + "vercel": "^41.4.1", + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^2.1.8", + "vitest-browser-react": "^0.1.1" }, "engines": { "node": ">=22.12.0" diff --git a/apps/website/postcss.config.cjs b/apps/website/postcss.config.cjs deleted file mode 100644 index e873f1a4f235..000000000000 --- a/apps/website/postcss.config.cjs +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/apps/website/postcss.config.js b/apps/website/postcss.config.js new file mode 100644 index 000000000000..1970487b544b --- /dev/null +++ b/apps/website/postcss.config.js @@ -0,0 +1,5 @@ +export default { + plugins: { + '@tailwindcss/postcss': {}, + }, +}; diff --git a/apps/website/src/app/docs/packages/[packageName]/[version]/CmdK.tsx b/apps/website/src/app/docs/packages/[packageName]/[version]/CmdK.tsx new file mode 100644 index 000000000000..c4cc4cebd65c --- /dev/null +++ b/apps/website/src/app/docs/packages/[packageName]/[version]/CmdK.tsx @@ -0,0 +1,14 @@ +import { CmdKNoSRR } from '@/components/CmdK'; +import { fetchDependencies } from '@/util/fetchDependencies'; + +export async function CmdK({ + params, +}: { + readonly params: Promise<{ readonly packageName: string; readonly version: string }>; +}) { + const { packageName, version } = await params; + + const dependencies = await fetchDependencies({ packageName, version }); + + return ; +} diff --git a/apps/website/src/app/docs/packages/[packageName]/[version]/[item]/opengraph-image.tsx b/apps/website/src/app/docs/packages/[packageName]/[version]/[item]/opengraph-image.tsx index c72b261d47c0..ebc257e77216 100644 --- a/apps/website/src/app/docs/packages/[packageName]/[version]/[item]/opengraph-image.tsx +++ b/apps/website/src/app/docs/packages/[packageName]/[version]/[item]/opengraph-image.tsx @@ -1,7 +1,7 @@ /* eslint-disable react/no-unknown-property */ import { ImageResponse } from 'next/og'; -import { resolveKind } from '~/util/resolveNodeKind'; +import { resolveKind } from '@/util/resolveNodeKind'; export const runtime = 'edge'; @@ -15,14 +15,24 @@ export const contentType = 'image/png'; export default async function Image({ params, }: { - readonly params: { readonly item: string; readonly packageName: string; readonly version: string }; + readonly params: Promise<{ readonly item: string; readonly packageName: string; readonly version: string }>; }) { - const normalizeItem = params.item.split(encodeURIComponent(':')).join('.').toLowerCase(); + const { item, packageName, version } = await params; - const isMainVersion = params.version === 'main'; + const [fontDataBold, fontDataBlack] = await Promise.all([ + fetch(new URL('../../../../../../assets/Geist-Bold.ttf', import.meta.url), { + next: { revalidate: 604_800 }, + }).then(async (res) => res.arrayBuffer()), + fetch(new URL('../../../../../../assets/Geist-Black.ttf', import.meta.url), { + next: { revalidate: 604_800 }, + }).then(async (res) => res.arrayBuffer()), + ]); + const normalizeItem = item.split(encodeURIComponent(':')).join('.').toLowerCase(); + + const isMain = version === 'main'; const fileContent = await fetch( - `${process.env.BLOB_STORAGE_URL}/rewrite/${params.packageName}/${params.version}.${normalizeItem}.api.json`, - { next: isMainVersion ? { revalidate: 0 } : { revalidate: 604_800 } }, + `${process.env.BLOB_STORAGE_URL}/rewrite/${packageName}/${version}.${normalizeItem}.api.json`, + { next: { revalidate: isMain ? 0 : 604_800 } }, ); const node = await fileContent.json(); @@ -30,7 +40,7 @@ export default async function Image({ (
-
{params.packageName}
+
{packageName}
{resolveKind(node.kind, 94)} @@ -40,7 +50,7 @@ export default async function Image({ whiteSpace: 'nowrap', overflow: 'hidden', }} - tw="text-[5.5rem] font-bold w-full" + tw="text-[5.5rem] font-bold w-full" > {node.displayName} @@ -94,6 +104,20 @@ export default async function Image({ ), { ...size, + fonts: [ + { + name: 'Geist', + data: fontDataBold, + weight: 700, + style: 'normal', + }, + { + name: 'Geist', + data: fontDataBlack, + weight: 900, + style: 'normal', + }, + ], }, ); } diff --git a/apps/website/src/app/docs/packages/[packageName]/[version]/[item]/page.tsx b/apps/website/src/app/docs/packages/[packageName]/[version]/[item]/page.tsx index dc188019eb80..41e5b17d292f 100644 --- a/apps/website/src/app/docs/packages/[packageName]/[version]/[item]/page.tsx +++ b/apps/website/src/app/docs/packages/[packageName]/[version]/[item]/page.tsx @@ -1,38 +1,44 @@ +'use cache'; + import type { Metadata } from 'next'; import { notFound } from 'next/navigation'; -import { DocItem } from '~/components/DocItem'; -import { fetchNode } from '~/util/fetchNode'; +import { DocItem } from '@/components/DocItem'; +import { fetchNode } from '@/util/fetchNode'; export async function generateMetadata({ params, }: { - readonly params: { + readonly params: Promise<{ readonly item: string; readonly packageName: string; readonly version: string; - }; + }>; }): Promise { - const normalizeItem = params.item.split(encodeURIComponent(':'))[0]; + const { item, packageName, version } = await params; + + const normalizeItem = item.split(encodeURIComponent(':'))[0]; return { - title: `${normalizeItem} (${params.packageName} - ${params.version})`, + title: `${normalizeItem} (${packageName} - ${version})`, }; } export default async function Page({ params, }: { - readonly params: { readonly item: string; readonly packageName: string; readonly version: string }; + readonly params: Promise<{ readonly item: string; readonly packageName: string; readonly version: string }>; }) { - const node = await fetchNode({ item: params.item, packageName: params.packageName, version: params.version }); + const { item, packageName, version } = await params; + + const node = await fetchNode({ item, packageName, version }); if (!node) { notFound(); } return ( -
- +
+
); } diff --git a/apps/website/src/app/docs/packages/[packageName]/[version]/layout.tsx b/apps/website/src/app/docs/packages/[packageName]/[version]/layout.tsx index efacd0105d22..2312d60d4a90 100644 --- a/apps/website/src/app/docs/packages/[packageName]/[version]/layout.tsx +++ b/apps/website/src/app/docs/packages/[packageName]/[version]/layout.tsx @@ -1,24 +1,33 @@ -import type { Metadata } from 'next'; -import dynamic from 'next/dynamic'; -import type { PropsWithChildren } from 'react'; -import { Navigation } from '~/components/Navigation'; -import { OverlayScrollbarsComponent } from '~/components/OverlayScrollbars'; -import { Drawer } from '~/components/ui/Drawer'; -import { Footer } from '~/components/ui/Footer'; -import { fetchDependencies } from '~/util/fetchDependencies'; +'use cache'; -// eslint-disable-next-line promise/prefer-await-to-then -const CmdK = dynamic(async () => import('~/components/ui/CmdK').then((mod) => mod.CmdK), { ssr: false }); +import { VscGithubInverted } from '@react-icons/all-files/vsc/VscGithubInverted'; +import type { Metadata } from 'next'; +import Link from 'next/link'; +import { Suspense, type PropsWithChildren } from 'react'; +import { Footer } from '@/components/Footer'; +import { Navigation } from '@/components/Navigation'; +import { Scrollbars } from '@/components/OverlayScrollbars'; +import { PackageSelect } from '@/components/PackageSelect'; +import { SearchButton } from '@/components/SearchButton'; +import { ThemeSwitchNoSRR } from '@/components/ThemeSwitch'; +import { VersionSelect } from '@/components/VersionSelect'; +import { Sidebar, SidebarContent, SidebarHeader, SidebarInset, SidebarTrigger } from '@/components/ui/Sidebar'; +import { buttonStyles } from '@/styles/ui/button'; +import { ENV } from '@/util/env'; +import { fetchVersions } from '@/util/fetchVersions'; +import { CmdK } from './CmdK'; export async function generateMetadata({ params, }: { - readonly params: { readonly packageName: string; readonly version: string }; + readonly params: Promise<{ readonly packageName: string; readonly version: string }>; }): Promise { + const { packageName, version } = await params; + return { title: { template: '%s | discord.js', - default: `${params.packageName} (${params.version})`, + default: `${packageName} (${version})`, }, }; } @@ -26,44 +35,74 @@ export async function generateMetadata({ export default async function Layout({ params, children, -}: PropsWithChildren<{ readonly params: { readonly packageName: string; readonly version: string } }>) { - const dependencies = await fetchDependencies({ packageName: params.packageName, version: params.version }); +}: PropsWithChildren<{ readonly params: Promise<{ readonly packageName: string; readonly version: string }> }>) { + const { packageName, version } = await params; + + const versions = fetchVersions(packageName); return ( - // eslint-disable-next-line react/no-unknown-property -
-
- - - -
-
- {children} -
-
-
- - - -
- -
+ <> + + +
+
+ + {packageName} + +
+ + + + +
+
+ + {/*

{version}

*/} + + +
+
+ + + + + +
+ + {ENV.IS_LOCAL_DEV ? ( +
+ Local test environment +
+ ) : null} + {ENV.IS_PREVIEW ? ( +
+ Preview environment +
+ ) : null} +
+
+
+ +
+
+ + {packageName} + +
+
+ {children} +
+
+
+ + + + ); } diff --git a/apps/website/src/app/docs/packages/[packageName]/[version]/page.tsx b/apps/website/src/app/docs/packages/[packageName]/[version]/page.tsx index d83cf8bd1fdc..765cceea010a 100644 --- a/apps/website/src/app/docs/packages/[packageName]/[version]/page.tsx +++ b/apps/website/src/app/docs/packages/[packageName]/[version]/page.tsx @@ -1,29 +1,19 @@ +'use cache'; + import { readFile } from 'node:fs/promises'; import { join } from 'node:path'; import rehypeShikiFromHighlighter from '@shikijs/rehype/core'; import { MDXRemote } from 'next-mdx-remote-client/rsc'; import remarkGfm from 'remark-gfm'; -import { getHighlighterCore } from 'shiki/core'; -import getWasm from 'shiki/wasm'; +import { getSingletonHighlighter } from '@/util/shiki.bundle'; -const highlighter = await getHighlighterCore({ - themes: [import('shiki/themes/github-light.mjs'), import('shiki/themes/github-dark-dimmed.mjs')], - langs: [ - import('shiki/langs/typescript.mjs'), - import('shiki/langs/javascript.mjs'), - import('shiki/langs/shellscript.mjs'), - ], - loadWasm: getWasm, -}); +export default async function Page({ params }: { readonly params: Promise<{ readonly packageName: string }> }) { + const { packageName } = await params; -export default async function Page({ params }: { readonly params: { readonly packageName: string } }) { - const fileContent = await readFile( - join(process.cwd(), `src/assets/readme/${params.packageName}/home-README.md`), - 'utf8', - ); + const fileContent = await readFile(join(process.cwd(), `src/assets/readme/${packageName}/home-README.md`), 'utf8'); return ( -
+
- - - - {ENV.IS_LOCAL_DEV ? ( -
- Local test environment -
- ) : null} - {ENV.IS_PREVIEW ? ( -
- Preview environment -
- ) : null} - {children} -
+ + {children} diff --git a/apps/website/src/app/not-found.tsx b/apps/website/src/app/not-found.tsx index cb839e522cc8..7410362eff86 100644 --- a/apps/website/src/app/not-found.tsx +++ b/apps/website/src/app/not-found.tsx @@ -3,10 +3,10 @@ import Link from 'next/link'; export default function NotFound() { return (
-

404

+

404

Not found.

Take me back diff --git a/apps/website/src/app/opengraph-image.tsx b/apps/website/src/app/opengraph-image.tsx index 0429e4eece43..8582201fc4a9 100644 --- a/apps/website/src/app/opengraph-image.tsx +++ b/apps/website/src/app/opengraph-image.tsx @@ -1,4 +1,5 @@ /* eslint-disable react/no-unknown-property */ + import { ImageResponse } from 'next/og'; export const runtime = 'edge'; @@ -11,15 +12,19 @@ export const size = { export const contentType = 'image/png'; export default async function Image() { + const fontData = await fetch(new URL('../assets/Geist-Black.ttf', import.meta.url), { + next: { revalidate: 604_800 }, + }).then(async (res) => res.arrayBuffer()); + return new ImageResponse( ( -
+
-
+
- The most popular + The most popular
way to build Discord bots. @@ -31,6 +36,14 @@ export default async function Image() { ), { ...size, + fonts: [ + { + name: 'Geist', + data: fontData, + weight: 900, + style: 'normal', + }, + ], }, ); } diff --git a/apps/website/src/app/page.tsx b/apps/website/src/app/page.tsx index d367dbf2b079..864b919f82da 100644 --- a/apps/website/src/app/page.tsx +++ b/apps/website/src/app/page.tsx @@ -1,43 +1,42 @@ import { ExternalLink } from 'lucide-react'; import Image from 'next/image'; import Link from 'next/link'; -import vercelLogo from '~/assets/powered-by-vercel.svg'; -import workersLogo from '~/assets/powered-by-workers.png'; -import { InstallButton } from '~/components/ui/InstallButton'; -import { DESCRIPTION } from '~/util/constants'; +import vercelLogo from '@/assets/powered-by-vercel.svg'; +import workersLogo from '@/assets/powered-by-workers.png'; +import { InstallButton } from '@/components/InstallButton'; +import { buttonStyles } from '@/styles/ui/button'; +import { DESCRIPTION } from '@/util/constants'; export default async function Page() { return ( -
+
-

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

+ The{' '} + most popular{' '} + way to build Discord bots.

-

{DESCRIPTION}

+

{DESCRIPTION}

diff --git a/apps/website/src/app/providers.tsx b/apps/website/src/app/providers.tsx index cac09ead3e74..404ea64f35f2 100644 --- a/apps/website/src/app/providers.tsx +++ b/apps/website/src/app/providers.tsx @@ -3,10 +3,12 @@ import { Provider as JotaiProvider } from 'jotai'; import { useRouter } from 'next/navigation'; import { ThemeProvider } from 'next-themes'; +import { NuqsAdapter } from 'nuqs/adapters/next/app'; import type { PropsWithChildren } from 'react'; import { RouterProvider } from 'react-aria-components'; -import { useSystemThemeFallback } from '~/hooks/useSystemThemeFallback'; -import { useUnregisterServiceWorker } from '~/hooks/useUnregisterServiceWorker'; +import { SidebarProvider } from '@/components/ui/Sidebar'; +import { useSystemThemeFallback } from '@/hooks/useSystemThemeFallback'; +import { useUnregisterServiceWorker } from '@/hooks/useUnregisterServiceWorker'; export function Providers({ children }: PropsWithChildren) { const router = useRouter(); @@ -14,10 +16,14 @@ export function Providers({ children }: PropsWithChildren) { useSystemThemeFallback(); return ( - - - {children} - - + + + + + {children} + + + + ); } diff --git a/apps/website/src/assets/Geist-Black.ttf b/apps/website/src/assets/Geist-Black.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c0258e39df68f7616ef7d3b438620e2490a67e93 GIT binary patch literal 78244 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 Z5Usrjt$awj%q5!0zuG|juQv!Q{$JTFZMOgb literal 0 HcmV?d00001 diff --git a/apps/website/src/assets/Geist-Bold.ttf b/apps/website/src/assets/Geist-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5830512ac3797858140e0b722509f273d9412f94 GIT binary patch literal 78276 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 cJ!Fr1VuEPheSto+KpXjYn}`4X=3veL0jQ() { return ( {children} diff --git a/apps/website/src/components/ui/CmdK.tsx b/apps/website/src/components/CmdK.tsx similarity index 82% rename from apps/website/src/components/ui/CmdK.tsx rename to apps/website/src/components/CmdK.tsx index a74c27794e3c..44768ad7baab 100644 --- a/apps/website/src/components/ui/CmdK.tsx +++ b/apps/website/src/components/CmdK.tsx @@ -4,13 +4,15 @@ import { Command } from 'cmdk'; import { useAtom, useSetAtom } from 'jotai'; import { ArrowRight } from 'lucide-react'; import MeiliSearch from 'meilisearch'; +import dynamic from 'next/dynamic'; import { usePathname, useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; -import { useDebounceValue } from 'usehooks-ts'; -import { isCmdKOpenAtom } from '~/stores/cmdk'; -import { isDrawerOpenAtom } from '~/stores/drawer'; -import { resolveKind } from '~/util/resolveNodeKind'; -import { OverlayScrollbarsComponent } from '../OverlayScrollbars'; +import { useDebounceValue, useMediaQuery } from 'usehooks-ts'; +import { Scrollbars } from '@/components/OverlayScrollbars'; +import { isCmdKOpenAtom } from '@/stores/cmdk'; +import { isDrawerOpenAtom } from '@/stores/drawer'; +import { cx } from '@/styles/cva'; +import { resolveKind } from '@/util/resolveNodeKind'; const client = new MeiliSearch({ host: 'https://search.discordjs.dev', @@ -24,6 +26,7 @@ export function CmdK({ dependencies }: { readonly dependencies: string[] }) { const setDrawerOpen = useSetAtom(isDrawerOpenAtom); const [search, setSearch] = useDebounceValue('', 250); const [searchResults, setSearchResults] = useState([]); + const isMobile = useMediaQuery('(max-width: 600px)'); const packageName = pathname?.split('/').slice(3, 4)[0]; const branchName = pathname?.split('/').slice(4, 5)[0]; @@ -41,9 +44,9 @@ export function CmdK({ dependencies }: { readonly dependencies: string[] }) { > {resolveKind(item.kind)}
- {item.name} - {item.summary} - {item.path} + {item.name} + {item.summary} + {item.path}
@@ -114,11 +117,11 @@ export function CmdK({ dependencies }: { readonly dependencies: string[] }) { shouldFilter={false} > - )} - + ); } + +export const CmdKNoSRR = dynamic(async () => CmdK, { ssr: false }); diff --git a/apps/website/src/components/ConstructorNode.tsx b/apps/website/src/components/ConstructorNode.tsx index d6bf791a402b..50d3c352d891 100644 --- a/apps/website/src/components/ConstructorNode.tsx +++ b/apps/website/src/components/ConstructorNode.tsx @@ -1,25 +1,25 @@ import { VscSymbolMethod } from '@react-icons/all-files/vsc/VscSymbolMethod'; import { Code2, LinkIcon } from 'lucide-react'; import Link from 'next/link'; -import { ENV } from '~/util/env'; +import { ENV } from '@/util/env'; import { ParameterNode } from './ParameterNode'; import { SummaryNode } from './SummaryNode'; export async function ConstructorNode({ node, version }: { readonly node: any; readonly version: string }) { return ( -
+

Constructors

-
+

{/* constructor({parsedContent.constructor.parametersString}) */} - + constructor({node.parameters?.length ? : null}) @@ -44,7 +44,7 @@ export async function ConstructorNode({ node, version }: { readonly node: any; r ) : null} -
+
diff --git a/apps/website/src/components/DocItem.tsx b/apps/website/src/components/DocItem.tsx index 81cfe9895b56..16b47a40f95e 100644 --- a/apps/website/src/components/DocItem.tsx +++ b/apps/website/src/components/DocItem.tsx @@ -6,7 +6,7 @@ import { EventNode } from './EventNode'; import { InformationNode } from './InformationNode'; import { MethodNode } from './MethodNode'; import { Outline } from './Outline'; -import { OverlayScrollbarsComponent } from './OverlayScrollbars'; +import { Scrollbars } from './OverlayScrollbars'; import { ParameterNode } from './ParameterNode'; import { PropertyNode } from './PropertyNode'; import { ReturnNode } from './ReturnNode'; @@ -26,12 +26,14 @@ async function OverloadNode({ readonly packageName: string; readonly version: string; }) { + 'use cache'; + return ( {node.overloads.map((overload: any) => ( @@ -41,7 +43,7 @@ async function OverloadNode({ {node.overloads.map((overload: any) => ( @@ -52,7 +54,7 @@ async function OverloadNode({ ); } -export function DocItem({ +export async function DocItem({ node, packageName, version, @@ -61,6 +63,8 @@ export function DocItem({ readonly packageName: string; readonly version: string; }) { + 'use cache'; + if (node.overloads?.length) { return ; } @@ -69,16 +73,13 @@ export function DocItem({ <> - - - + + + {node.summary?.deprecatedBlock.length ? ( @@ -95,7 +96,7 @@ export function DocItem({ {node.constructor?.parametersString ? : null} {node.typeParameters?.length ? ( -
+

Type Parameters @@ -105,7 +106,7 @@ export function DocItem({ ) : null} {node.parameters?.length ? ( -
+

Parameters diff --git a/apps/website/src/components/DocNode.tsx b/apps/website/src/components/DocNode.tsx index 9fd0332241ef..487a0a82420b 100644 --- a/apps/website/src/components/DocNode.tsx +++ b/apps/website/src/components/DocNode.tsx @@ -1,6 +1,6 @@ import Link from 'next/link'; -import { BuiltinDocumentationLinks } from '~/util/builtinDocumentationLinks'; -import { OverlayScrollbarsComponent } from './OverlayScrollbars'; +import { BuiltinDocumentationLinks } from '@/util/builtinDocumentationLinks'; +import { Scrollbars } from './OverlayScrollbars'; import { SyntaxHighlighter } from './SyntaxHighlighter'; export async function DocNode({ node, version }: { readonly node?: any; readonly version: string }) { @@ -12,9 +12,11 @@ export async function DocNode({ node, version }: { readonly node?: any; readonly if (node.resolvedPackage) { return ( {node.text} @@ -24,7 +26,7 @@ export async function DocNode({ node, version }: { readonly node?: any; readonly if (node.uri) { return ( - - + + ); } diff --git a/apps/website/src/components/EnumMemberNode.tsx b/apps/website/src/components/EnumMemberNode.tsx index 6743c19eadf4..daba76b3f571 100644 --- a/apps/website/src/components/EnumMemberNode.tsx +++ b/apps/website/src/components/EnumMemberNode.tsx @@ -2,7 +2,7 @@ import { VscSymbolEnumMember } from '@react-icons/all-files/vsc/VscSymbolEnumMem import { Code2, LinkIcon } from 'lucide-react'; import Link from 'next/link'; import { Fragment } from 'react'; -import { ENV } from '~/util/env'; +import { ENV } from '@/util/env'; import { Badges } from './Badges'; import { DeprecatedNode } from './DeprecatedNode'; import { ExampleNode } from './ExampleNode'; @@ -23,25 +23,25 @@ export async function EnumMemberNode({ readonly version: string; }) { return ( -
+

Members

-
+
{node.map((enumMember: any, idx: number) => (
-
+

@@ -100,7 +100,7 @@ export async function EnumMemberNode({ ) : null}

-
+
diff --git a/apps/website/src/components/EventNode.tsx b/apps/website/src/components/EventNode.tsx index 3330d037d8f4..020a6fc0ee91 100644 --- a/apps/website/src/components/EventNode.tsx +++ b/apps/website/src/components/EventNode.tsx @@ -1,7 +1,7 @@ import { VscSymbolEvent } from '@react-icons/all-files/vsc/VscSymbolEvent'; import { ChevronDown, ChevronUp, Code2, LinkIcon } from 'lucide-react'; import Link from 'next/link'; -import { ENV } from '~/util/env'; +import { ENV } from '@/util/env'; import { Badges } from './Badges'; import { DeprecatedNode } from './DeprecatedNode'; import { ExampleNode } from './ExampleNode'; @@ -28,14 +28,14 @@ async function EventBodyNode({ return ( <>
-
+

{event.displayName} - + {event.typeParameters?.length ? ( @@ -86,7 +86,7 @@ async function EventBodyNode({ {event.summary?.seeBlocks.length ? : null}

-
+
@@ -107,7 +107,7 @@ async function OverloadNode({ {event.overloads.map((overload: any) => ( @@ -117,7 +117,7 @@ async function OverloadNode({ {event.overloads.map((overload: any) => ( @@ -138,8 +138,8 @@ export async function EventNode({ readonly version: string; }) { return ( - - + +

Events

@@ -148,7 +148,7 @@ export async function EventNode({
-
+
{node.map((event: any) => event.overloads?.length ? ( +
Examples:
diff --git a/apps/website/src/components/ExcerptNode.tsx b/apps/website/src/components/ExcerptNode.tsx index 50427be3b602..5c59612bdd1f 100644 --- a/apps/website/src/components/ExcerptNode.tsx +++ b/apps/website/src/components/ExcerptNode.tsx @@ -1,9 +1,9 @@ import Link from 'next/link'; import { Fragment } from 'react'; -import { BuiltinDocumentationLinks } from '~/util/builtinDocumentationLinks'; +import { BuiltinDocumentationLinks } from '@/util/builtinDocumentationLinks'; export async function ExcerptNode({ node, version }: { readonly node?: any; readonly version: string }) { - const createExcerpt = (excerpts: any) => { + const createExcerpt = (excerpts: any, idx: number) => { const excerpt = Array.isArray(excerpts) ? excerpts : (excerpts.excerpts ?? [excerpts]); return ( @@ -13,14 +13,17 @@ export async function ExcerptNode({ node, version }: { readonly node?: any; read ? 'after:content-[",_"] last-of-type:after:content-none' : '' } + key={`${excerpt.text}-${idx}`} > {excerpt.map((excerpt: any, idx: number) => { if (excerpt.resolvedItem) { return ( {excerpt.text} @@ -30,7 +33,7 @@ export async function ExcerptNode({ node, version }: { readonly node?: any; read if (excerpt.href) { return ( +