diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..f03f5a2 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["biomejs.biome", "unifiedjs.vscode-mdx"] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 368e090..3f8c462 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,8 +1,44 @@ { "editor.codeActionsOnSave": { + "quickfix.biome": "explicit", "source.organizeImports.biome": "explicit", - "quickfix.biome": "explicit" + "source.formatDocument.biome": "explicit" }, + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true, "eslint.enable": false, - "prettier.enable": false + "prettier.enable": false, + "[typescriptreact]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[typescript]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[javascript]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[javascriptreact]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[json]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[jsonc]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[cjs]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[mjs]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[cts]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[mts]": { + "editor.defaultFormatter": "biomejs.biome" + }, + "[css]": { + "editor.defaultFormatter": "biomejs.biome" + } } diff --git a/lefthook.yml b/lefthook.yml index dce7bb7..1718374 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -1,6 +1,6 @@ pre-commit: commands: check: - glob: "*.{js,ts,cjs,mjs,d.cts,d.mts,jsx,tsx,json,jsonc}" + glob: "*.{js,ts,cjs,mjs,d.cts,d.mts,jsx,tsx,json,jsonc,css}" run: npx @biomejs/biome check --write --no-errors-on-unmatched --files-ignore-unknown=true --colors=off {staged_files} stage_fixed: true \ No newline at end of file diff --git a/next.config.ts b/next.config.ts index 87e4159..0e0416f 100644 --- a/next.config.ts +++ b/next.config.ts @@ -9,6 +9,10 @@ const withNextra = nextra({ export default withNextra({ reactStrictMode: true, + i18n: { + locales: ['en', 'zh'], + defaultLocale: 'en', + }, // https://github.com/vercel/turborepo/issues/4832#issuecomment-1751407444 webpack(config) { config.module.rules.push({ diff --git a/public/demo.png b/public/demo.png deleted file mode 100644 index 3751514..0000000 Binary files a/public/demo.png and /dev/null differ diff --git a/src/app/[[...mdxPath]]/page.tsx b/src/app/[lang]/[[...mdxPath]]/page.tsx similarity index 61% rename from src/app/[[...mdxPath]]/page.tsx rename to src/app/[lang]/[[...mdxPath]]/page.tsx index 4b4c412..4c50b6a 100644 --- a/src/app/[[...mdxPath]]/page.tsx +++ b/src/app/[lang]/[[...mdxPath]]/page.tsx @@ -3,19 +3,23 @@ import { useMDXComponents } from '~/mdx-components' export const generateStaticParams = generateStaticParamsFor('mdxPath') -// @ts-ignore -export async function generateMetadata(props) { +export async function generateMetadata(props: PageProps) { const params = await props.params - const { metadata } = await importPage(params.mdxPath) + const { metadata } = await importPage(params.mdxPath, params.lang) return metadata } +type PageProps = Readonly<{ + params: Promise<{ + mdxPath: string[] + lang: string + }> +}> const Wrapper = useMDXComponents().wrapper -// @ts-ignore -export default async function Page(props) { +export default async function Page(props: PageProps) { const params = await props.params - const result = await importPage(params.mdxPath) + const result = await importPage(params.mdxPath, params.lang) const { default: MDXContent, toc, metadata } = result return ( }) { + const { lang } = await params + + const dict = await getDictionary(lang as Locale) + const pageMap = await getPageMap(`/${lang}`) + + const banner = () => { + return ( + +
+ + 🎉 CreateWise 1.0 beta is released. Read more → + +
+
+ ) + } + + const navbar = () => { + return ( + } + chatLink='https://discord.gg/p7kWbxDx' + /> + ) + } + + return ( + + + + } + docsRepositoryBase='https://github.com/CreateWise/createwise-docs' + editLink={dict.editPage} + sidebar={{ defaultMenuCollapseLevel: 2 }} + pageMap={pageMap} + lastUpdated={{dict.lastUpdated}} + i18n={[ + { locale: 'en', name: 'English' }, + { locale: 'zh', name: '简体中文' }, + ]} + themeSwitch={{ + dark: dict.dark, + light: dict.light, + system: dict.system, + }} + nextThemes={{ defaultTheme: 'system' }} + feedback={{ + content: dict.feedback, + labels: '', + }} + > + {children} + + + + ) +} diff --git a/src/app/[lang]/not-found.ts b/src/app/[lang]/not-found.ts new file mode 100644 index 0000000..9c26662 --- /dev/null +++ b/src/app/[lang]/not-found.ts @@ -0,0 +1 @@ +export { NotFoundPage as default } from 'nextra-theme-docs' diff --git a/src/app/layout.tsx b/src/app/layout.tsx deleted file mode 100644 index 82544a7..0000000 --- a/src/app/layout.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { Footer, Layout, Navbar } from 'nextra-theme-docs' -import { Banner, Head } from 'nextra/components' -import { getPageMap } from 'nextra/page-map' -import 'nextra-theme-docs/style.css' -import type { ReactNode } from 'react' -import { Logo } from '~/components/logo' -import '~/styles/globals.css' - -export const metadata = { - metadataBase: new URL('https://nextra.site'), - title: { - template: '%s - CreateWise', - }, - description: 'CreateWise: the Next.js site builder', - applicationName: 'CreateWise', - generator: 'Next.js', - appleWebApp: { - title: 'CreateWise', - }, - other: { - 'msapplication-TileImage': '/ms-icon-144x144.png', - 'msapplication-TileColor': '#fff', - }, - twitter: { - site: 'https://nextra.site', - }, -} - -export default async function RootLayout({ - children, -}: { children: ReactNode }) { - return ( - - - - CreateWise} - navbar={} />} - footer={