WebberUI

Code Block

語法高亮程式碼區塊含複製鈕,內建輕量 tokenizer 與逐行進場動畫。

零依賴的語法高亮程式碼區塊:自帶 regex tokenizer(不需 shiki / prism),支援檔名頂欄、行號、指定行強調、一鍵複製與逐行 stagger 淡入。

載入預覽⋯

Playground

即時調整 props、程式碼片段同步更新——直接試出你要的樣子再複製。

<CodeBlock />

安裝

npx shadcn@latest add https://webberui.com/r/code-block.json

或在 components.json 設定 registries 後,改用 @webberui/code-block 安裝。

安裝依賴後,從 registry JSON(/r/code-block.jsonfiles[0].content)複製 code-block.tsx 原始碼到你的 components/ui/ 目錄:

npm install motion lucide-react clsx tailwind-merge

使用

import { CodeBlock } from "@/components/ui/code-block";

<CodeBlock
  code={`const hello = "world";`}
  language="tsx"
  filename="example.tsx"
  showLineNumbers
/>

支援的語言關鍵字:tsxjsxtsjspythonbashcssjsonhtml。未知語言會退回通用模式,仍會高亮字串、註解與數字。

Props

Prop型別預設值說明
codestring要顯示的程式碼字串
languagestring"tsx"語言標記,決定關鍵字與註解語法
filenamestring頂欄左側顯示的檔名/標題
showLineNumbersbooleanfalse是否顯示行號
highlightLinesnumber[][]要強調的行號(1-based),加底色
copybooleantrue是否顯示複製鈕
trafficbooleanfalse頂欄顯示 macOS 風格紅黃綠圓點
animatebooleantrue進入視口時逐行 stagger 淡入
maxHeightnumber內容區最大高度(px),超出則捲動

可及性

  • 使用者系統開啟「減少動態效果」時,直接靜態渲染,不套用逐行動畫
  • 複製鈕帶 aria-label,複製成功後在複製與勾選圖示間平滑切換
  • 首次渲染與 SSR 一致,掛載後才啟用動畫,避免 hydration mismatch

On this page