From a677da9968d6047f08c76665e813a20d642a4e12 Mon Sep 17 00:00:00 2001 From: Nyoman Sunima Date: Thu, 19 Dec 2024 15:21:15 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=8D=20feat(docs):=20adding=20docs=20an?= =?UTF-8?q?d=20navigations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 22 ++-- bun.lockb | Bin 191690 -> 246831 bytes package.json | 35 +++--- src/app/apple-icon.png | Bin 0 -> 3988 bytes src/app/docs/[[...slug]]/layout.tsx | 26 ++++ src/app/docs/[[...slug]]/page.tsx | 60 +++++++++ src/app/docs/page.tsx | 31 ----- src/app/layout.tsx | 11 +- src/features/docs/breadcrumb.tsx | 33 +++++ src/features/docs/center-content.tsx | 21 ++++ src/features/docs/content/configuration.mdx | 89 +++++++++++++ src/features/docs/content/installation.mdx | 89 +++++++++++++ src/features/docs/content/introduction.mdx | 89 +++++++++++++ .../docs/content/setup-clean-editor.mdx | 89 +++++++++++++ src/features/docs/content/simplify-looks.mdx | 89 +++++++++++++ src/features/docs/docs-content.tsx | 22 ++++ src/features/docs/docs-service.ts | 119 ++++++++++++++++++ src/features/docs/index.ts | 8 ++ src/features/docs/left-content.tsx | 10 ++ src/features/docs/navigation.tsx | 98 +++++++++++++++ src/features/docs/right-content.tsx | 14 +++ src/features/docs/table-of-content.tsx | 41 ++++++ src/features/landing/hero/hero-section.tsx | 23 +++- src/shared/components/animation/meteors.tsx | 3 +- src/shared/components/common/content.tsx | 2 +- src/shared/components/common/header.tsx | 4 +- src/shared/providers/animation-provider.tsx | 2 +- src/shared/styles/globals.css | 2 +- 28 files changed, 961 insertions(+), 71 deletions(-) create mode 100644 src/app/apple-icon.png create mode 100644 src/app/docs/[[...slug]]/layout.tsx create mode 100644 src/app/docs/[[...slug]]/page.tsx delete mode 100644 src/app/docs/page.tsx create mode 100644 src/features/docs/breadcrumb.tsx create mode 100644 src/features/docs/center-content.tsx create mode 100644 src/features/docs/content/configuration.mdx create mode 100644 src/features/docs/content/installation.mdx create mode 100644 src/features/docs/content/introduction.mdx create mode 100644 src/features/docs/content/setup-clean-editor.mdx create mode 100644 src/features/docs/content/simplify-looks.mdx create mode 100644 src/features/docs/docs-content.tsx create mode 100644 src/features/docs/docs-service.ts create mode 100644 src/features/docs/index.ts create mode 100644 src/features/docs/left-content.tsx create mode 100644 src/features/docs/navigation.tsx create mode 100644 src/features/docs/right-content.tsx create mode 100644 src/features/docs/table-of-content.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index c809f56..2523c65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,24 +3,28 @@ ## [v2.0.1](https://github.com/brook-code-theme/official-website/releases/tag/v2.0.1) - 2024-12-10 06:53:30 ## What's Changed -* npm(deps): bump next from 15.0.3 to 15.0.4 by @dependabot in https://github.com/brook-code-theme/official-website/pull/10 -* npm(deps-dev): bump eslint-config-next from 15.0.3 to 15.0.4 by @dependabot in https://github.com/brook-code-theme/official-website/pull/8 -* npm(deps-dev): bump @types/node from 20.17.9 to 22.10.1 by @dependabot in https://github.com/brook-code-theme/official-website/pull/6 -* npm(deps-dev): bump eslint from 8.57.1 to 9.16.0 by @dependabot in https://github.com/brook-code-theme/official-website/pull/7 -* npm(deps): bump react-dom from 19.0.0-rc-66855b96-20241106 to 19.0.0 by @dependabot in https://github.com/brook-code-theme/official-website/pull/9 + +- npm(deps): bump next from 15.0.3 to 15.0.4 by @dependabot in https://github.com/brook-code-theme/official-website/pull/10 +- npm(deps-dev): bump eslint-config-next from 15.0.3 to 15.0.4 by @dependabot in https://github.com/brook-code-theme/official-website/pull/8 +- npm(deps-dev): bump @types/node from 20.17.9 to 22.10.1 by @dependabot in https://github.com/brook-code-theme/official-website/pull/6 +- npm(deps-dev): bump eslint from 8.57.1 to 9.16.0 by @dependabot in https://github.com/brook-code-theme/official-website/pull/7 +- npm(deps): bump react-dom from 19.0.0-rc-66855b96-20241106 to 19.0.0 by @dependabot in https://github.com/brook-code-theme/official-website/pull/9 ## New Contributors -* @dependabot made their first contribution in https://github.com/brook-code-theme/official-website/pull/10 + +- @dependabot made their first contribution in https://github.com/brook-code-theme/official-website/pull/10 **Full Changelog**: https://github.com/brook-code-theme/official-website/compare/v2.0.0...v2.0.1 ## [v2.0.0](https://github.com/brook-code-theme/official-website/releases/tag/v2.0.0) - 2024-11-29 13:37:07 ## What's Changed -* Add multiple pages by @nyomansunima in https://github.com/brook-code-theme/official-website/pull/5 + +- Add multiple pages by @nyomansunima in https://github.com/brook-code-theme/official-website/pull/5 ## New Contributors -* @nyomansunima made their first contribution in https://github.com/brook-code-theme/official-website/pull/5 + +- @nyomansunima made their first contribution in https://github.com/brook-code-theme/official-website/pull/5 **Full Changelog**: https://github.com/brook-code-theme/official-website/compare/v1.0.0...v2.0.0 @@ -28,4 +32,4 @@ **Full Changelog**: https://github.com/brook-code-theme/official-website/commits/v1.0.0 -\* *This CHANGELOG was automatically generated by [auto-generate-changelog](https://github.com/BobAnkh/auto-generate-changelog)* +\* _This CHANGELOG was automatically generated by [auto-generate-changelog](https://github.com/BobAnkh/auto-generate-changelog)_ diff --git a/bun.lockb b/bun.lockb index f78a8c55e1faa906b4edc3d8fdfe91bc93085c3d..9a9781b05f40847cc8a9377a7cc96c7fdef89471 100755 GIT binary patch delta 79589 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 delta 43594 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 diff --git a/package.json b/package.json index 5ea42c2..5fb79f7 100644 --- a/package.json +++ b/package.json @@ -13,35 +13,38 @@ }, "dependencies": { "@flaticon/flaticon-uicons": "^3.3.1", - "@radix-ui/react-accordion": "^1.2.1", - "@radix-ui/react-slot": "^1.1.0", - "@radix-ui/react-toast": "^1.2.2", - "@radix-ui/react-tooltip": "^1.1.4", + "@radix-ui/react-accordion": "^1.2.2", + "@radix-ui/react-slot": "^1.1.1", + "@radix-ui/react-toast": "^1.2.4", + "@radix-ui/react-tooltip": "^1.1.6", "dayjs": "^1.11.13", - "lenis": "^1.1.16", - "motion": "^11.13.3", - "next": "15.1.0", - "next-themes": "^0.4.3", - "posthog-js": "^1.188.0", + "lenis": "^1.1.18", + "motion": "^11.15.0", + "next": "15.1.1", + "next-mdx-remote-client": "^1.0.3", + "next-themes": "^0.4.4", + "posthog-js": "^1.202.2", "react": "19.0.0", - "react-dom": "19.0.0" + "react-dom": "19.0.0", + "rehype-slug": "^6.0.0", + "remark-flexible-toc": "^1.1.1" }, "devDependencies": { "@tailwindcss/forms": "^0.5.9", "@tailwindcss/typography": "^0.5.15", "@types/node": "^22", - "@types/react": "^18", + "@types/react": "^19", "@types/react-dom": "^19", "autoprefixer": "^10.4.20", - "class-variance-authority": "^0.7.0", + "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "eslint": "^9", - "eslint-config-next": "15.1.0", + "eslint-config-next": "15.1.1", "eslint-config-prettier": "^9.1.0", "postcss": "^8.4.49", - "prettier": "^3.3.3", - "tailwind-merge": "^2.5.4", - "tailwindcss": "^3.4.15", + "prettier": "^3.4.2", + "tailwind-merge": "^2.5.5", + "tailwindcss": "^3.4.17", "tailwindcss-animate": "^1.0.7", "typescript": "^5" } diff --git a/src/app/apple-icon.png b/src/app/apple-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..70da7590a4b9acc32d5760c43ad83b0437b16609 GIT binary patch literal 3988 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 +} + +export default async function DocsLayout({ + children, + params, +}: DocsLayoutProps): Promise { + const { slug } = await params + + return ( +
+ + {children} + +
+ ) +} diff --git a/src/app/docs/[[...slug]]/page.tsx b/src/app/docs/[[...slug]]/page.tsx new file mode 100644 index 0000000..d8139cd --- /dev/null +++ b/src/app/docs/[[...slug]]/page.tsx @@ -0,0 +1,60 @@ +import { DocsContent, getAllDocsPaths, getDocMetadata } from '@features/docs' +import { sharedMetadata } from '@shared/libs' +import { Metadata, ResolvingMetadata } from 'next' +import * as React from 'react' + +type Params = { + slug: string[] | undefined +} + +type DocsPageProps = { + params: Promise +} + +export async function generateMetadata( + { params }: DocsPageProps, + parent: ResolvingMetadata, +): Promise { + const { slug } = await params + const meta = await getDocMetadata(slug) + const previousOgImages = (await parent).openGraph?.images || [] + const previousTwitterImages = (await parent).twitter?.images || [] + + return { + title: meta.title, + description: meta.description, + openGraph: { + ...sharedMetadata.openGraph, + title: meta.title, + description: meta.description, + images: [...previousOgImages], + }, + twitter: { + ...sharedMetadata.twitter, + title: meta.title, + description: meta.description, + images: [...previousTwitterImages], + }, + } +} + +export async function generateStaticParams(): Promise { + const paths = await getAllDocsPaths() + const staticParams = paths.map((path) => ({ + slug: [path], + })) + + return staticParams +} + +export default async function DocsPage({ + params, +}: DocsPageProps): Promise { + const { slug } = await params + + return ( +
+ +
+ ) +} diff --git a/src/app/docs/page.tsx b/src/app/docs/page.tsx deleted file mode 100644 index e16c521..0000000 --- a/src/app/docs/page.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { sharedMetadata } from '@shared/libs' -import { Metadata } from 'next' -import * as React from 'react' - -export const metadata: Metadata = { - title: 'Docs', - description: - 'Read the docs to find the tips and tricks to get started with brook code theme', - openGraph: { - ...sharedMetadata.openGraph, - title: 'Docs', - description: - 'Read the docs to find the tips and tricks to get started with brook code theme', - }, - twitter: { - ...sharedMetadata.twitter, - title: 'Docs', - description: - 'Read the docs to find the tips and tricks to get started with brook code theme', - }, -} - -export default function TermsPage(): React.ReactElement { - return ( -
-
-
-
-
- ) -} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 3160ada..93c107a 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -58,13 +58,14 @@ export default function RootLayout({ children, }: Readonly): React.ReactElement { return ( - + - + { + const { title, link } = await getBreadcrumb(slug) + + return ( +
+ + Docs + + + + + + {title} + +
+ ) +} diff --git a/src/features/docs/center-content.tsx b/src/features/docs/center-content.tsx new file mode 100644 index 0000000..3fee4d8 --- /dev/null +++ b/src/features/docs/center-content.tsx @@ -0,0 +1,21 @@ +import * as React from 'react' +import { Breadcrumb } from './breadcrumb' + +type CenterContentProps = { + children: React.ReactNode + slug: string[] | undefined +} + +export function CenterContent({ + children, + slug, +}: CenterContentProps): React.ReactElement { + return ( +
+
+ +
{children}
+
+
+ ) +} diff --git a/src/features/docs/content/configuration.mdx b/src/features/docs/content/configuration.mdx new file mode 100644 index 0000000..c35be02 --- /dev/null +++ b/src/features/docs/content/configuration.mdx @@ -0,0 +1,89 @@ +--- +title: Introduction +description: Welcome to Brook Code Theme! +publishedAt: 2024-12-19 +--- + +Brook Code Theme is your ultimate companion for an elegant and productive coding experience. Designed with developers in mind, this theme brings a **clean**, **balanced**, and **visually appealing** look to your favorite code editors. + +## 🌟 Why Brook Code Theme? + +Brook Code Theme stands out by offering: + +- **Elegant Syntax Highlighting** + Say goodbye to cluttered code. Enjoy a balanced color palette that improves readability and keeps your focus intact during long coding sessions. + +- **Dark and Light Modes** + Switch effortlessly between dark and light themes to match your coding environment and preference. + +- **Multi-Editor Support** + Compatible with popular editors, including: + + - **VSCode** + +- **JetBrains IDEs** + + - **Zed** + - And more! + +- **Language Versatility** + Optimized for a wide range of programming languages, including: + - **JavaScript**, **TypeScript**, **Python**, **Go**, **Rust**, **HTML**, and **CSS**. + +## 🎨 Key Features + +1. **Aesthetic Design** + Enjoy a polished theme with carefully selected colors that are easy on the eyes. + +2. **Focus-Driven Color Palette** + Each color is chosen to emphasize the structure and syntax of your code, reducing cognitive load and improving productivity. + +3. **Flexible Variants** + Choose between subtle pastel tones or vibrant colors to suit your coding style. + +4. **Cross-Platform Compatibility** + Works seamlessly across multiple platforms and editors for a consistent experience. + +## 🚀 Installation Guide + +### For VSCode + +1. Open the Extensions Marketplace. +2. Search for **Brook Code Theme**. +3. Click "Install" and select the theme from your settings. + +### For JetBrains IDEs + +1. Download the theme file from the official website (coming soon!). +2. Import the theme in **Preferences > Appearance & Behavior > Themes**. +3. Apply the theme and start coding. + +### For Zed + +1. Follow the Zed documentation for custom theme installation. +2. Copy the Brook Code Theme configuration file. +3. Activate the theme in Zed. + +## 📸 Preview + +Here’s a sneak peek of Brook Code Theme in action: + +- **Dark Mode**: A moody, elegant theme with perfect contrast. +- **Light Mode**: Bright and vibrant for daylight coding sessions. + +_Full previews and live demos will be available on our official website._ + +## ✨ Future Plans + +Brook Code Theme is evolving! Here’s what’s next: + +- **More Editor Support**: Expand compatibility to editors like Sublime Text and Atom. +- **Terminal Themes**: Matching themes for terminal applications like iTerm2 and Warp. +- **Customizable Options**: Tools to tweak the theme and make it truly yours. + +Brook Code Theme is designed to enhance your coding experience, whether you're +building apps, writing scripts, or crafting web designs. + +**Get ready to code in style. Let Brook Code Theme be your go-to choice for a seamless coding environment!** + +Stay tuned for updates, or follow us on [GitHub](#) for the latest releases. diff --git a/src/features/docs/content/installation.mdx b/src/features/docs/content/installation.mdx new file mode 100644 index 0000000..df8c63e --- /dev/null +++ b/src/features/docs/content/installation.mdx @@ -0,0 +1,89 @@ +--- +title: Installation +description: How to install Brook Code Theme +publishedAt: 2024-12-19 +--- + +Brook Code Theme is your ultimate companion for an elegant and productive coding experience. Designed with developers in mind, this theme brings a **clean**, **balanced**, and **visually appealing** look to your favorite code editors. + +## 🌟 Why Brook Code Theme? + +Brook Code Theme stands out by offering: + +- **Elegant Syntax Highlighting** + Say goodbye to cluttered code. Enjoy a balanced color palette that improves readability and keeps your focus intact during long coding sessions. + +- **Dark and Light Modes** + Switch effortlessly between dark and light themes to match your coding environment and preference. + +- **Multi-Editor Support** + Compatible with popular editors, including: + + - **VSCode** + +- **JetBrains IDEs** + + - **Zed** + - And more! + +- **Language Versatility** + Optimized for a wide range of programming languages, including: + - **JavaScript**, **TypeScript**, **Python**, **Go**, **Rust**, **HTML**, and **CSS**. + +## 🎨 Key Features + +1. **Aesthetic Design** + Enjoy a polished theme with carefully selected colors that are easy on the eyes. + +2. **Focus-Driven Color Palette** + Each color is chosen to emphasize the structure and syntax of your code, reducing cognitive load and improving productivity. + +3. **Flexible Variants** + Choose between subtle pastel tones or vibrant colors to suit your coding style. + +4. **Cross-Platform Compatibility** + Works seamlessly across multiple platforms and editors for a consistent experience. + +## 🚀 Installation Guide + +### For VSCode + +1. Open the Extensions Marketplace. +2. Search for **Brook Code Theme**. +3. Click "Install" and select the theme from your settings. + +### For JetBrains IDEs + +1. Download the theme file from the official website (coming soon!). +2. Import the theme in **Preferences > Appearance & Behavior > Themes**. +3. Apply the theme and start coding. + +### For Zed + +1. Follow the Zed documentation for custom theme installation. +2. Copy the Brook Code Theme configuration file. +3. Activate the theme in Zed. + +## 📸 Preview + +Here’s a sneak peek of Brook Code Theme in action: + +- **Dark Mode**: A moody, elegant theme with perfect contrast. +- **Light Mode**: Bright and vibrant for daylight coding sessions. + +_Full previews and live demos will be available on our official website._ + +## ✨ Future Plans + +Brook Code Theme is evolving! Here’s what’s next: + +- **More Editor Support**: Expand compatibility to editors like Sublime Text and Atom. +- **Terminal Themes**: Matching themes for terminal applications like iTerm2 and Warp. +- **Customizable Options**: Tools to tweak the theme and make it truly yours. + +Brook Code Theme is designed to enhance your coding experience, whether you're +building apps, writing scripts, or crafting web designs. + +**Get ready to code in style. Let Brook Code Theme be your go-to choice for a seamless coding environment!** + +Stay tuned for updates, or follow us on [GitHub](#) for the latest releases. diff --git a/src/features/docs/content/introduction.mdx b/src/features/docs/content/introduction.mdx new file mode 100644 index 0000000..20c12e6 --- /dev/null +++ b/src/features/docs/content/introduction.mdx @@ -0,0 +1,89 @@ +--- +title: Introduction +description: Simple and clean code editor theme for developers +publishedAt: 2024-12-19 +--- + +Brook Code Theme is your ultimate companion for an elegant and productive coding experience. Designed with developers in mind, this theme brings a **clean**, **balanced**, and **visually appealing** look to your favorite code editors. + +## 🌟 Why Brook Code Theme? + +Brook Code Theme stands out by offering: + +- **Elegant Syntax Highlighting** + Say goodbye to cluttered code. Enjoy a balanced color palette that improves readability and keeps your focus intact during long coding sessions. + +- **Dark and Light Modes** + Switch effortlessly between dark and light themes to match your coding environment and preference. + +- **Multi-Editor Support** + Compatible with popular editors, including: + + - **VSCode** + +- **JetBrains IDEs** + + - **Zed** + - And more! + +- **Language Versatility** + Optimized for a wide range of programming languages, including: + - **JavaScript**, **TypeScript**, **Python**, **Go**, **Rust**, **HTML**, and **CSS**. + +## 🎨 Key Features + +1. **Aesthetic Design** + Enjoy a polished theme with carefully selected colors that are easy on the eyes. + +2. **Focus-Driven Color Palette** + Each color is chosen to emphasize the structure and syntax of your code, reducing cognitive load and improving productivity. + +3. **Flexible Variants** + Choose between subtle pastel tones or vibrant colors to suit your coding style. + +4. **Cross-Platform Compatibility** + Works seamlessly across multiple platforms and editors for a consistent experience. + +## 🚀 Installation Guide + +### For VSCode + +1. Open the Extensions Marketplace. +2. Search for **Brook Code Theme**. +3. Click "Install" and select the theme from your settings. + +### For JetBrains IDEs + +1. Download the theme file from the official website (coming soon!). +2. Import the theme in **Preferences > Appearance & Behavior > Themes**. +3. Apply the theme and start coding. + +### For Zed + +1. Follow the Zed documentation for custom theme installation. +2. Copy the Brook Code Theme configuration file. +3. Activate the theme in Zed. + +## 📸 Preview + +Here’s a sneak peek of Brook Code Theme in action: + +- **Dark Mode**: A moody, elegant theme with perfect contrast. +- **Light Mode**: Bright and vibrant for daylight coding sessions. + +_Full previews and live demos will be available on our official website._ + +## ✨ Future Plans + +Brook Code Theme is evolving! Here’s what’s next: + +- **More Editor Support**: Expand compatibility to editors like Sublime Text and Atom. +- **Terminal Themes**: Matching themes for terminal applications like iTerm2 and Warp. +- **Customizable Options**: Tools to tweak the theme and make it truly yours. + +Brook Code Theme is designed to enhance your coding experience, whether you're +building apps, writing scripts, or crafting web designs. + +**Get ready to code in style. Let Brook Code Theme be your go-to choice for a seamless coding environment!** + +Stay tuned for updates, or follow us on [GitHub](#) for the latest releases. diff --git a/src/features/docs/content/setup-clean-editor.mdx b/src/features/docs/content/setup-clean-editor.mdx new file mode 100644 index 0000000..0d0ef9b --- /dev/null +++ b/src/features/docs/content/setup-clean-editor.mdx @@ -0,0 +1,89 @@ +--- +title: Setup Clean Editor +description: Setup the editor more simple and focus for productivity +publishedAt: 2024-12-19 +--- + +Brook Code Theme is your ultimate companion for an elegant and productive coding experience. Designed with developers in mind, this theme brings a **clean**, **balanced**, and **visually appealing** look to your favorite code editors. + +## 🌟 Why Brook Code Theme? + +Brook Code Theme stands out by offering: + +- **Elegant Syntax Highlighting** + Say goodbye to cluttered code. Enjoy a balanced color palette that improves readability and keeps your focus intact during long coding sessions. + +- **Dark and Light Modes** + Switch effortlessly between dark and light themes to match your coding environment and preference. + +- **Multi-Editor Support** + Compatible with popular editors, including: + + - **VSCode** + +- **JetBrains IDEs** + + - **Zed** + - And more! + +- **Language Versatility** + Optimized for a wide range of programming languages, including: + - **JavaScript**, **TypeScript**, **Python**, **Go**, **Rust**, **HTML**, and **CSS**. + +## 🎨 Key Features + +1. **Aesthetic Design** + Enjoy a polished theme with carefully selected colors that are easy on the eyes. + +2. **Focus-Driven Color Palette** + Each color is chosen to emphasize the structure and syntax of your code, reducing cognitive load and improving productivity. + +3. **Flexible Variants** + Choose between subtle pastel tones or vibrant colors to suit your coding style. + +4. **Cross-Platform Compatibility** + Works seamlessly across multiple platforms and editors for a consistent experience. + +## 🚀 Installation Guide + +### For VSCode + +1. Open the Extensions Marketplace. +2. Search for **Brook Code Theme**. +3. Click "Install" and select the theme from your settings. + +### For JetBrains IDEs + +1. Download the theme file from the official website (coming soon!). +2. Import the theme in **Preferences > Appearance & Behavior > Themes**. +3. Apply the theme and start coding. + +### For Zed + +1. Follow the Zed documentation for custom theme installation. +2. Copy the Brook Code Theme configuration file. +3. Activate the theme in Zed. + +## 📸 Preview + +Here’s a sneak peek of Brook Code Theme in action: + +- **Dark Mode**: A moody, elegant theme with perfect contrast. +- **Light Mode**: Bright and vibrant for daylight coding sessions. + +_Full previews and live demos will be available on our official website._ + +## ✨ Future Plans + +Brook Code Theme is evolving! Here’s what’s next: + +- **More Editor Support**: Expand compatibility to editors like Sublime Text and Atom. +- **Terminal Themes**: Matching themes for terminal applications like iTerm2 and Warp. +- **Customizable Options**: Tools to tweak the theme and make it truly yours. + +Brook Code Theme is designed to enhance your coding experience, whether you're +building apps, writing scripts, or crafting web designs. + +**Get ready to code in style. Let Brook Code Theme be your go-to choice for a seamless coding environment!** + +Stay tuned for updates, or follow us on [GitHub](#) for the latest releases. diff --git a/src/features/docs/content/simplify-looks.mdx b/src/features/docs/content/simplify-looks.mdx new file mode 100644 index 0000000..8f1f8bb --- /dev/null +++ b/src/features/docs/content/simplify-looks.mdx @@ -0,0 +1,89 @@ +--- +title: Simplify Looks +description: Simplify the looks for editors and terminals +publishedAt: 2024-12-19 +--- + +Brook Code Theme is your ultimate companion for an elegant and productive coding experience. Designed with developers in mind, this theme brings a **clean**, **balanced**, and **visually appealing** look to your favorite code editors. + +## 🌟 Why Brook Code Theme? + +Brook Code Theme stands out by offering: + +- **Elegant Syntax Highlighting** + Say goodbye to cluttered code. Enjoy a balanced color palette that improves readability and keeps your focus intact during long coding sessions. + +- **Dark and Light Modes** + Switch effortlessly between dark and light themes to match your coding environment and preference. + +- **Multi-Editor Support** + Compatible with popular editors, including: + + - **VSCode** + +- **JetBrains IDEs** + + - **Zed** + - And more! + +- **Language Versatility** + Optimized for a wide range of programming languages, including: + - **JavaScript**, **TypeScript**, **Python**, **Go**, **Rust**, **HTML**, and **CSS**. + +## 🎨 Key Features + +1. **Aesthetic Design** + Enjoy a polished theme with carefully selected colors that are easy on the eyes. + +2. **Focus-Driven Color Palette** + Each color is chosen to emphasize the structure and syntax of your code, reducing cognitive load and improving productivity. + +3. **Flexible Variants** + Choose between subtle pastel tones or vibrant colors to suit your coding style. + +4. **Cross-Platform Compatibility** + Works seamlessly across multiple platforms and editors for a consistent experience. + +## 🚀 Installation Guide + +### For VSCode + +1. Open the Extensions Marketplace. +2. Search for **Brook Code Theme**. +3. Click "Install" and select the theme from your settings. + +### For JetBrains IDEs + +1. Download the theme file from the official website (coming soon!). +2. Import the theme in **Preferences > Appearance & Behavior > Themes**. +3. Apply the theme and start coding. + +### For Zed + +1. Follow the Zed documentation for custom theme installation. +2. Copy the Brook Code Theme configuration file. +3. Activate the theme in Zed. + +## 📸 Preview + +Here’s a sneak peek of Brook Code Theme in action: + +- **Dark Mode**: A moody, elegant theme with perfect contrast. +- **Light Mode**: Bright and vibrant for daylight coding sessions. + +_Full previews and live demos will be available on our official website._ + +## ✨ Future Plans + +Brook Code Theme is evolving! Here’s what’s next: + +- **More Editor Support**: Expand compatibility to editors like Sublime Text and Atom. +- **Terminal Themes**: Matching themes for terminal applications like iTerm2 and Warp. +- **Customizable Options**: Tools to tweak the theme and make it truly yours. + +Brook Code Theme is designed to enhance your coding experience, whether you're +building apps, writing scripts, or crafting web designs. + +**Get ready to code in style. Let Brook Code Theme be your go-to choice for a seamless coding environment!** + +Stay tuned for updates, or follow us on [GitHub](#) for the latest releases. diff --git a/src/features/docs/docs-content.tsx b/src/features/docs/docs-content.tsx new file mode 100644 index 0000000..65cb8e6 --- /dev/null +++ b/src/features/docs/docs-content.tsx @@ -0,0 +1,22 @@ +import { ArticleContent } from '@shared/components' +import * as React from 'react' +import { getDocDetail } from './docs-service' + +type DocsContentProps = { + slug: string[] | undefined +} + +export async function DocsContent({ + slug, +}: DocsContentProps): Promise { + const { content, frontmatter } = await getDocDetail(slug) + return ( +
+ +

{frontmatter.title}

+

{frontmatter.description}

+ {content} +
+
+ ) +} diff --git a/src/features/docs/docs-service.ts b/src/features/docs/docs-service.ts new file mode 100644 index 0000000..e592beb --- /dev/null +++ b/src/features/docs/docs-service.ts @@ -0,0 +1,119 @@ +'use server' + +import * as fs from 'fs/promises' +import { evaluate } from 'next-mdx-remote-client/rsc' +import { getFrontmatter } from 'next-mdx-remote-client/utils' +import remarkFlexibleToc, { TocItem } from 'remark-flexible-toc' +import rehypeSlug from 'rehype-slug' +import path from 'path' +import * as React from 'react' + +type Metadata = { + title: string + description: string +} + +type DocFrontMatter = { + title: string + description: string + publishedAt: string +} + +type DocsScope = { + toc: TocItem[] +} + +type DocDetail = { + frontmatter: DocFrontMatter + content: React.ReactNode +} + +type BreadScrumb = { + title: string + link: string +} + +const DOCS_PATH = '/src/features/docs/content' + +function parseSlug(slug: string[] | undefined): string { + return slug?.[0] || '/introduction' +} + +export async function getAllDocsPaths(): Promise { + const folderPath = path.join(process.cwd(), DOCS_PATH) + const files = await fs.readdir(folderPath) + const paths = files + .filter((file) => file.endsWith('.mdx') || file.endsWith('.md')) + .map((file) => file.replace(/\.mdx?$/, '')) + + return paths || [] +} + +export async function getDocMetadata( + slug: string[] | undefined, +): Promise { + const parsedSlug = parseSlug(slug) + const filePath = path.join(process.cwd(), DOCS_PATH, `${parsedSlug}.mdx`) + const rawContent = await fs.readFile(filePath, 'utf8') + const { frontmatter } = getFrontmatter(rawContent) + + return { + title: frontmatter.title, + description: frontmatter.description, + } +} + +export async function getBreadcrumb( + slug: string[] | undefined, +): Promise { + const parsedSlug = parseSlug(slug) + const filePath = path.join(process.cwd(), DOCS_PATH, `${parsedSlug}.mdx`) + const rawContent = await fs.readFile(filePath, 'utf8') + const { frontmatter } = getFrontmatter(rawContent) + + return { + title: frontmatter.title, + link: `/docs/${parsedSlug}`, + } +} + +export async function getToc(slug: string[] | undefined): Promise { + const parsedSlug = parseSlug(slug) + const filePath = path.join(process.cwd(), DOCS_PATH, `${parsedSlug}.mdx`) + const rawContent = await fs.readFile(filePath, 'utf8') + const { scope } = await evaluate({ + source: rawContent, + options: { + mdxOptions: { + remarkPlugins: [remarkFlexibleToc], + }, + parseFrontmatter: true, + vfileDataIntoScope: 'toc', + }, + }) + + const toc = scope.toc + return toc +} + +export async function getDocDetail( + slug: string[] | undefined, +): Promise { + const parsedSlug = parseSlug(slug) + const filePath = path.join(process.cwd(), DOCS_PATH, `${parsedSlug}.mdx`) + const rawContent = await fs.readFile(filePath, 'utf8') + const { frontmatter, content } = await evaluate({ + source: rawContent, + options: { + mdxOptions: { + rehypePlugins: [rehypeSlug], + }, + parseFrontmatter: true, + }, + }) + + return { + frontmatter, + content, + } +} diff --git a/src/features/docs/index.ts b/src/features/docs/index.ts new file mode 100644 index 0000000..42cbb0a --- /dev/null +++ b/src/features/docs/index.ts @@ -0,0 +1,8 @@ +export * from './breadcrumb' +export * from './left-content' +export * from './right-content' +export * from './center-content' +export * from './navigation' +export * from './table-of-content' +export * from './docs-service' +export * from './docs-content' diff --git a/src/features/docs/left-content.tsx b/src/features/docs/left-content.tsx new file mode 100644 index 0000000..6f40f70 --- /dev/null +++ b/src/features/docs/left-content.tsx @@ -0,0 +1,10 @@ +import * as React from 'react' +import { Navigation } from './navigation' + +export function LeftContent(): React.ReactElement { + return ( + + ) +} diff --git a/src/features/docs/navigation.tsx b/src/features/docs/navigation.tsx new file mode 100644 index 0000000..f3f6e12 --- /dev/null +++ b/src/features/docs/navigation.tsx @@ -0,0 +1,98 @@ +'use client' + +import { mergeClass } from '@shared/utils' +import Link from 'next/link' +import { usePathname } from 'next/navigation' +import * as React from 'react' + +type navigationItem = { + label: string + link: string +} + +type Navigation = { + group: string + list: navigationItem[] +} + +type NavigationGroupProps = { + group: Navigation +} + +type NavigationItemProps = { + item: navigationItem +} + +const navigations: Navigation[] = [ + { + group: 'Getting Started', + list: [ + { label: 'Introduction', link: '/docs' }, + { + label: 'Installation', + link: '/docs/installation', + }, + { + label: 'Configuration', + link: '/docs/configuration', + }, + ], + }, + { + group: 'Guides', + list: [ + { + label: 'Simplify Looks', + link: '/docs/simplify-looks', + }, + { + label: 'Setup Clean Editor', + link: '/docs/setup-clean-editor', + }, + ], + }, +] + +function NavigationItem({ item }: NavigationItemProps): React.ReactElement { + const { label, link } = item + const pathName = usePathname() + const isActive = pathName === `${link}` + + return ( +
  • + + {label} + +
  • + ) +} + +function NavigationGroup({ group }: NavigationGroupProps): React.ReactElement { + const { group: groupName, list } = group + + return ( +
    + {groupName} +
      + {list.map((item, index) => ( + + ))} +
    +
    + ) +} + +export function Navigation(): React.ReactElement { + return ( +
    + {navigations.map((group, index) => ( + + ))} +
    + ) +} diff --git a/src/features/docs/right-content.tsx b/src/features/docs/right-content.tsx new file mode 100644 index 0000000..e7763dd --- /dev/null +++ b/src/features/docs/right-content.tsx @@ -0,0 +1,14 @@ +import * as React from 'react' +import { TableOfContent } from './table-of-content' + +type RightContentProps = { + slug: string[] | undefined +} + +export function RightContent({ slug }: RightContentProps): React.ReactElement { + return ( + + ) +} diff --git a/src/features/docs/table-of-content.tsx b/src/features/docs/table-of-content.tsx new file mode 100644 index 0000000..7f89214 --- /dev/null +++ b/src/features/docs/table-of-content.tsx @@ -0,0 +1,41 @@ +import Link from 'next/link' +import * as React from 'react' +import { getToc } from './docs-service' +import { mergeClass } from '@shared/utils' + +type TableOfContentProps = { + slug: string[] | undefined +} + +export async function TableOfContent({ + slug, +}: TableOfContentProps): Promise { + const toc = await getToc(slug) + + return ( +
    + On this page + +
    +
      + {toc.map((item, index) => ( +
    • + + {item.value} + +
    • + ))} +
    +
    +
    + ) +} diff --git a/src/features/landing/hero/hero-section.tsx b/src/features/landing/hero/hero-section.tsx index 5653ff9..67dfbb5 100644 --- a/src/features/landing/hero/hero-section.tsx +++ b/src/features/landing/hero/hero-section.tsx @@ -1,14 +1,24 @@ 'use client' -import { SectionLabel, Button } from '@shared/components' +import { SectionLabel, Button, Meteors } from '@shared/components' import * as React from 'react' import { ImageShot } from './image-shot' import { motion } from 'motion/react' +import { useLenis } from 'lenis/react' export function HeroSection(): React.ReactElement { + const lenis = useLenis() + + const goToGetStarted = () => { + lenis?.scrollTo('#get-started') + } + return ( -
    -
    +
    +
    New Release: Zed Theme - @@ -50,6 +63,8 @@ export function HeroSection(): React.ReactElement {
    + +
    ) } diff --git a/src/shared/components/animation/meteors.tsx b/src/shared/components/animation/meteors.tsx index a58db90..2fd2a15 100644 --- a/src/shared/components/animation/meteors.tsx +++ b/src/shared/components/animation/meteors.tsx @@ -25,7 +25,8 @@ export const Meteors = ({ animationDelay: Math.random() * (0.8 - 0.2) + 0.2 + 's', animationDuration: Math.floor(Math.random() * (10 - 2) + 2) + 's', }} - > + suppressHydrationWarning + /> ))} ) diff --git a/src/shared/components/common/content.tsx b/src/shared/components/common/content.tsx index f5d4234..5b9047f 100644 --- a/src/shared/components/common/content.tsx +++ b/src/shared/components/common/content.tsx @@ -40,7 +40,7 @@ export function ArticleContent({ return (
    diff --git a/src/shared/components/common/header.tsx b/src/shared/components/common/header.tsx index 98f689f..a21ba19 100644 --- a/src/shared/components/common/header.tsx +++ b/src/shared/components/common/header.tsx @@ -53,7 +53,7 @@ function ProductsNavigationItem({ function Navigation(): React.ReactElement { return ( -