Code Blockv1.0.0
نمایشِ کد با ظاهرِ ترمینال: نوارِ عنوان با نقطههای رنگیِ تزئینی، دکمهٔ کپی و سینتکسهایلایتِ سبک (کلیدواژه/رشته/کامنت/عدد) بدونِ هیچ وابستگیِ بیرونی — یک regex-tokenizer ساده، نه یک AST واقعی. برای نمایشِ دستورهای نصب، مثالهای کد یا کدهای معرفیِ محصول در صفحهٔ فرود.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی digdesign کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
npx digdesign@latest add https://docs.digdesign.ir/r/code-block.jsonpnpm dlx digdesign@latest add https://docs.digdesign.ir/r/code-block.jsonyarn dlx digdesign@latest add https://docs.digdesign.ir/r/code-block.jsonbunx --bun digdesign@latest add https://docs.digdesign.ir/r/code-block.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
استفاده
import { CodeBlock } from "@/components/ui/code-block"این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
ترکیب اجزا
هایلایترِ داخلی یک regex-tokenizer است، نه یک AST واقعی؛ برای tsx/ts/jsx/js کلیدواژه، رشته، کامنت، عدد و فراخوانیِ تابع را تشخیص میدهد، برای css پراپرتی و مقدار، و برای bash دستورهای رایج (npm، git، …). برای ادیتورِ واقعی یا زبانهای پیچیدهتر، یک هایلایترِ کامل مثل Shiki یا Prism را جایگزین تابعِ tokenizeLine کنید — رابطِ بیرونیِ کامپوننت عوض نمیشود.
رنگِ توکنها از توکنهای --chart-1 تا --chart-4 میآید (همان پالتِ دستهبندیِ Chart)، پس بدونِ رنگِ اضافه در تمِ روشن/تیره هماهنگ میماند.
variant="terminal" پسزمینه را همیشه تیره نگه میدارد (مستقل از تمِ سایت) — برای وقتی میخواهید حسِ «ترمینالِ واقعی» را حفظ کنید، مثلاً در معرفیِ CLI.
دسترسپذیری
- خودِ pre/code استانداردند و با فونتِ مونو رندر میشوند؛ رنگهای سینتکس فقط تزئینیاند و اطلاعات را فقط با رنگ منتقل نمیکنند.
- دکمهٔ کپی aria-label="کپی کد" دارد و بعد از کپیِ موفق آیکونش موقتاً به تیک تغییر میکند تا بازخوردِ بصری بدهد.
مرجع API
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| code | string | — | متنِ کد. |
| language | "tsx" | "ts" | "jsx" | "js" | "bash" | "json" | "css" | "plain" | "plain" | زبانِ کد؛ تعیینکنندهٔ قواعدِ هایلایت. |
| variant | "default" | "terminal" | "default" | default از توکنهای تم پیروی میکند؛ terminal همیشه تیره است. |
| title | React.ReactNode | — | عنوانِ نوارِ بالا؛ معمولاً نامِ فایل یا دستور. |
| showDots | boolean | true | نمایشِ سه نقطهٔ رنگیِ تزئینیِ سبکِ ترمینال. |
| showLineNumbers | boolean | false | نمایشِ شمارهٔ خط در سمتِ چپِ هر سطر. |
| copyable | boolean | true | نمایشِ دکمهٔ کپی در نوارِ عنوان. |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
نمونهها
زبانهای مختلف
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
با شمارهٔ خط
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
حالتِ ترمینالِ تیره
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
بدونِ نوارِ عنوان
با title و showDots و copyable خالی/false، فقط خودِ کد نمایش داده میشود.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| زبانهای مختلف | — |
| با شمارهٔ خط | — |
| حالتِ ترمینالِ تیره | معرفیِ دستورِ CLI در صفحهٔ فرود |
| بدونِ نوارِ عنوان | با title و showDots و copyable خالی/false، فقط خودِ کد نمایش داده میشود. |
دستورالعمل استفاده
برای کدهای کوتاه و نمایشی
npx digdesign@latest add buttonانجام بده
برای یک مثالِ نصب یا یک قطعهکدِ کوتاهِ معرفیِ محصول، CodeBlock همان حسِ ترمینالیِ آشنا را میدهد.
برای نمایشِ کدِ کاملِ یک فایلِ بزرگ، از یک ادیتورِ کد (مثلاً Monaco) استفاده کنید.
انجام نده
برای یک فایلِ کدِ چندصدخطی از یک ادیتورِ واقعی (با تاشدنِ کد، جستوجو، شمارهٔ خط دقیق) استفاده کنید؛ هایلایترِ سبکِ این کامپوننت برای آن مقیاس ساخته نشده.