Skip to content

Mermaid

نمودارهای Mermaid (فلوچارت، توالی، کلاس، وضعیت، گانت…) را به‌شکل وب‌کامپوننتی مستقل از فریم‌ورک رندر می‌کند. <r-mermaid> کتابخانهٔ mermaid را در نخستین رندر به‌شکل تنبل بار می‌کند (برنامه‌هایی که هرگز از آن استفاده نمی‌کنند چیزی نمی‌پردازند) و نمودار را در shadow root خودش می‌کشد، پس از استایل‌های صفحه جدا می‌ماند.

کجا به کارش ببرید: وقتی می‌خواهید نموداری را که به‌شکل متن نوشته شده در هر صفحه‌ای بگذارید، بی‌آنکه خودتان mermaid را سیم‌کشی کنید — و در صورت نیاز با نوار رونوشت / دانلود / تمام‌صفحه و نمایشگرِ جابه‌جایی و بزرگ‌نمایی.

شروع سریع

graph LR; A[Request] --> B[Validate]; B --> C[Store]; C --> D[Respond]
html
<r-mermaid>graph LR; A[Request] --> B[Validate]; B --> C[Store]</r-mermaid>
js
import 'ranui'; // یا نقطهٔ ورود مستقل:
import 'ranui/mermaid';

منبع نمودار از محتوای متنی عنصر خوانده می‌شود، یا از ویژگی code که به‌شکل URI کدگذاری شده است (وقتی نحو شامل < است — مثلاً <|-- در classDiagram — از code استفاده کنید تا از تجزیهٔ HTML جان سالم به در ببرد):

js
el.code = 'classDiagram\n  Dog --|> Animal'; // ستِرِ خصیصه، خودش URI را کدگذاری می‌کند

کنترل‌ها

هر کنترل با یک ویژگی بولی به‌خواست خودتان روشن می‌شود؛ <r-mermaid> خالی یک نمودار ایستای تمیز است. نوار ابزار با نگه‌داشتن نشانگر (بالا سمت راست) پیدا می‌شود.

graph TD; A[Start] --> B[Do work]; B --> C[End]
html
<r-mermaid copy download fullscreen>graph TD; A --> B; B --> C</r-mermaid>
  • copy: منبع نمودار را در تخته‌گیره رونوشت می‌کند.
  • download: SVG / PNG / منبع (.mmd)؛ اگر یک قالب باشد مستقیم دانلود می‌شود و اگر چند تا باشد منویی نشان می‌دهد. با download="svg" یا download="svg png" محدودش کنید.
  • fullscreen: جعبهٔ نوری بدون سربرگ (r-modal) را با جابه‌جایی و بزرگ‌نمایی باز می‌کند (چرخ ماوس برای بزرگ‌نمایی، کشیدن برای جابه‌جایی، و بازنشانی)؛ بستن با ✕، کلیک روی پس‌زمینه، یا Esc.

مرجع API

ویژگی‌ها

ویژگینوعپیش‌فرضتوضیح
codestring (کدگذاری‌شدهٔ URI)منبع نمودار. نبودِ آن به محتوای متنی عنصر برمی‌گردد.
theme'auto' | 'light' | 'dark''auto'پوستهٔ mermaid. auto از صفحه پیروی می‌کند (.dark / [data-ran-theme]) و هنگام تعویض دوباره رندر می‌کند.
copyبولیخاموشدکمهٔ رونوشت منبع را نشان می‌دهد.
downloadبولی / "svg png source"خاموشدکمهٔ دانلود را نشان می‌دهد؛ مقدار، قالب‌های پیشنهادی را محدود می‌کند.
fullscreenبولیخاموشدکمهٔ تمام‌صفحه را نشان می‌دهد.
sheetstringCSS اضافی که به shadow root تزریق می‌شود.
label-*stringانگلیسیبازنویسی برچسب کنترل‌ها: label-copy، label-download، label-fullscreen، label-zoom-in، label-zoom-out، label-reset، label-diagram (نام پنجرهٔ تمام‌صفحه).

رویدادها

همهٔ رویدادها حباب می‌کنند و از مرز shadow می‌گذرند (composed).

رویدادdetailچه زمانی
render{ ok: true }رندر یک نمودار تمام شد
copied{ kind: 'source' }منبع رونوشت شد
download{ format: 'svg' | 'png' | 'source' }فایلی دانلود شد
error{ message: string }تجزیه یا رندر نمودار شکست خورد
fullscreenchange{ open: boolean }جعبهٔ نوری تمام‌صفحه باز یا بسته شد

Part‌های CSS

Partتوضیح
mermaidپوشش بیرونی.
diagramنگه‌دارندهٔ نمودار رندرشده.
toolbarنوار کنترل که با نگه‌داشتن نشانگر می‌آید.
buttonهر دکمهٔ آیکون در نوار.
errorجعبهٔ پیام خطا (هنگام شکست رندر).
css
r-mermaid::part(toolbar) {
  background: var(--surface);
}

متغیرهای CSS

روی خود عنصر بازنویسی کنید (هرکدام نخست به یک توکن معنایی و سپس به مقداری عینی برمی‌گردند): --ran-mermaid-padding، --ran-mermaid-toolbar-background، --ran-mermaid-toolbar-gap، --ran-mermaid-button-size، --ran-mermaid-button-color، --ran-mermaid-button-hover-background، --ran-mermaid-error-color.

یادداشت‌ها

  • بارگذاری تنبل: mermaid (و r-modal که برای تمام‌صفحه به کار می‌رود) import پویا هستند، پس تنها هنگام رندر یک نمودار یا باز شدن تمام‌صفحه، به‌شکل تکه‌های ناهمگام جداگانه می‌رسند.
  • وفاداری رندر: <r-mermaid> از رندر خودِ mermaid استفاده می‌کند، پس همهٔ گونه‌های نمودار و همهٔ پوسته‌ها پشتیبانی می‌شوند.
  • خروجی PNG: نمودارهایی که برچسب HTML دارند (htmlLabels در mermaid) از راه <foreignObject> ترسیم می‌شوند و این می‌تواند canvas را آلوده کند و خروجی PNG را شکست دهد؛ در آن حالت رویداد error ارسال می‌شود. خروجی SVG و منبع همیشه کار می‌کند.

منتشرشده تحت مجوز MIT.