飯魚 FanYu | 個人網站飯魚 FanYu | 個人網站
c063

c063

一款用於顯示語法高亮代碼片段的 React 組件庫。

TypeScriptReactFrontendNPMJavaScriptGit / GitHub
LicenseStarsForksIssuesLast commitCreated atRepo sizeCommit Activity/yLanguages/top

關於

語言

  • TypeScript100%
c063

c063

🎨 輕量、主題豐富、可高度自定義的 React 語法高亮元件庫


c063 是一款以 React + TypeScript 打造的語法高亮元件庫,提供 <CodeBlock /><CodeLine /><CodeToken /> 三層式元件架構,以及 c063 token 建構器。

內建 12 款精選主題(涵蓋 VS Code、GitHub 的亮色與暗色系列),讓你在文件網站、技術部落格、互動教學平台中,快速嵌入精美的程式碼區塊——完全不依賴 Prism.js 或 highlight.js 等外部 runtime。


✨ Features

特色說明
🎨 12 款內建主題涵蓋 VS Code Dark/Light Modern、GitHub Dark/Light 及其 Colorblind 變體
🧩 三層元件架構CodeBlockCodeLineCodeToken,粒度靈活,按需組合
c063 建構器Proxy-based 的 token 工廠,以 c063.keyword1("const") 快速建立 token
🔢 行號顯示內建行號欄位,可開關並自訂樣式
🔗 as prop 支援每個元件可替換底層 HTML 元素或 React 元件,保留完整型別推導
🔷 完整 TypeScript附帶 .d.ts,精確泛型推導,無需額外安裝 @types/*
📦 零額外 Runtime不依賴 Prism、highlight.js 或任何第三方解析引擎

📦 Installation

bash

Peer Dependencies:需自行安裝 react >= 19react-dom >= 19


🚀 Quick Start

30 秒內顯示第一個語法高亮程式碼區塊:

tsx

輸出效果: 帶行號、關鍵字藍色、字串橘色的程式碼區塊。


📖 Usage

方式一:c063 建構器(手動精確控制)

需要精確控制每個 token 的類型與樣式時使用。

tsx

方式二:手動組合元件

需要完整控制佈局與行為時,可直接使用底層元件。

tsx

切換主題

tsx

🔌 API Reference

<CodeBlock />

顯示完整多行程式碼區塊,內建行號欄位,以 <pre> + <table> 結構確保行號對齊。

ts

Props 一覽

Prop型別預設說明
tokenLinesCodeTokenProps[][]每行為一個 token 陣列(必填)
showLineNumbersbooleantrue是否顯示行號欄位
lineNumberStyleReact.CSSProperties{ color: "#888" }行號欄位的樣式
themeCodeTheme"default-dark-modern"語法高亮主題
autoWrapbooleantrue是否自動換行

<CodeLine />

渲染單一程式碼行,包含多個 <CodeToken />,以 <code> 包裹。

ts

<CodeToken />

渲染單一語法 token,以 <span>(或自訂元素)輸出帶有語法顏色的文字。使用 React.memo 優化重渲染。

ts

c063 — Token 建構器

Proxy-based 的語法 token 工廠,以 c063.<type>(children, props?) 建立 token 物件。

ts

使用範例

ts

⚠️ 傳入不存在的型別鍵時會拋出 Error: Invalid CodeTokenType: <key>


whiteSpace(count?) — 空白 Token

產生指定數量空白字元的 token,用於縮排或空格。

ts
ts

其他工具函式

函式簽名說明
isCodeTokenType(value: any) => value is CodeTokenType驗證是否為合法的 CodeTokenType
extractTokenContent(token: CodeTokenProps) => string遞迴提取 token 的純文字內容
isTokenEqual(a, b: CodeTokenProps) => boolean比較兩個 token 的 type 與內容是否相同
groupTokensByType(lines: CodeTokenProps[][]) => Record<CodeTokenType, CodeTokenProps[]>將所有 token 按語法類型分類

💡 Examples

基本:手動 token + default-dark-modern

tsx

進階:自訂行號樣式 + 關閉自動換行

tsx

React:主題切換器

tsx

Next.js(App Router)

tsx

工具函式:分析 token 組成

ts

⚙️ Configuration

CodeTheme — 可用主題

主題名稱風格
default-dark-modernVS Code 深色現代(預設)
default-darkVS Code 深色
default-dark-plusVS Code 深色加強
default-light-modernVS Code 亮色現代
default-light-plusVS Code 亮色加強
visual-studio-lightVisual Studio 亮色
github-darkGitHub 深色
github-dark-defaultGitHub 深色預設
github-dark-colorblindGitHub 深色色盲模式
github-lightGitHub 亮色
github-light-defaultGitHub 亮色預設
github-light-colorblindGitHub 亮色色盲模式

CodeTokenType — Token 類型對照

類型說明範例
keyword1控制流、宣告關鍵字const, return, import
keyword2值關鍵字、內建物件true, null, undefined
function函式名稱fetch, console
string字串常值'text', `template`
number數字常值42, 3.14
comment註解// ..., /* ... */
type型別定義interface, enum
variable變數、識別符號myVar, ClassName
constant常數值PI, MAX_VALUE
brackets1第一層括號(, )
brackets2第二層括號[, ]
brackets3第三層括號{, }
operator運算符=, ===, =>
default其他符號;, ,,

括號層級會依嵌套深度自動輪替:brackets1 → brackets2 → brackets3 → brackets1 ...


🔷 TypeScript Support

泛型 as prop

所有元件透過泛型 T extends React.ElementType 支援 as prop,並精確推導對應元素屬性:

tsx

匯出的型別

ts

🌐 Environment Support

環境支援
React 19+
Next.js App Router✅(元件需加 'use client'
Next.js Pages Router
Vite + React
Bun
SSR✅(無 document / window 依賴)
Deno未測試
Cloudflare Workers未測試

🤝 Contributing

歡迎任何形式的貢獻!

bash

貢獻方向建議

  • 🎨 新增主題(Monokai、Dracula、One Dark …)
  • 🐛 Bug 修復 / 效能優化
  • 📖 文件補充或範例新增

請先開 Issue 討論,再建立 Pull Request,並附上使用範例或截圖。


📄 License

MIT

討論區