@riebeckite/plugin-mermaid 0.0.32 → 0.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -31,6 +31,17 @@ export default defineConfig({
31
31
  });
32
32
  ```
33
33
 
34
+ ## Live example
35
+
36
+ This site renders `mermaid` fences with Mermaid (Pele), not the headless browser build. Both plugins accept the same fence:
37
+
38
+ ~~~mermaid
39
+ flowchart LR
40
+ Draft --> Review --> Published
41
+ ~~~
42
+
43
+ See [Mermaid (Pele)](../mermaid-pele/README.md) for the renderer used here.
44
+
34
45
  ## Behavior
35
46
 
36
47
  ### Build
package/README_ja.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ヘッドレスブラウザを使わずに静的 SVG を生成したい場合は [Mermaid (Pele)](../mermaid-pele/README_ja.md) を使ってください。
10
10
 
11
- ## 設定する
11
+ ## 使い方
12
12
 
13
13
  ```ts
14
14
  import { defineConfig } from "@riebeckite/core";
@@ -27,17 +27,28 @@ export default defineConfig({
27
27
 
28
28
  このプラグインは `order: -10` で実行されます。Mermaid のコードブロックを先に処理したい場合に適した順序です。
29
29
 
30
- ## どのように描画されるか
30
+ ## 実行例
31
31
 
32
- ` ```mermaid ` のコードブロックは `figure.rr-mermaid` に置き換わります。図のタイトルはコードブロックの title、またはソース内の `%% caption: ...` 行から取得します。図には代替テキスト相当の `role="img"` を付け、必要に応じて元の記法を折りたたみ表示します。
32
+ このサイトでは `mermaid` フェンスを headless browser 版ではなく Mermaid (Pele) で描画しています。どちらのプラグインも同じフェンスを受け付けます。
33
33
 
34
- `render: "build"` では、Puppeteer が起動するヘッドレス Chromium 上で Mermaid を実行し、静的な SVG を生成します。簡易な DOM 実装や寸法の推測には頼らないため、ブラウザと同じレイアウトエンジンで図を作れます。Mermaid は `securityLevel: "strict"` で実行されます。
34
+ ~~~mermaid
35
+ flowchart LR
36
+ Draft --> Review --> Published
37
+ ~~~
35
38
 
36
- 構文エラーは `invalid-diagram`、描画環境の問題は `renderer-error` として区別して診断します。ビルド時の描画に失敗した場合、既定ではビルドを失敗させます。失敗した図を成功したコンテンツとして保存しません。SVG ID は図の ID をシードにして決定的に生成します。
39
+ ここで使っている描画器は [Mermaid (Pele)](../mermaid-pele/README_ja.md) です。
40
+
41
+ ## 描画の仕組み
42
+
43
+ ` ```mermaid ` のコードブロックは `figure.rr-mermaid` に置き換わります。図のタイトルはコードブロックの `title`、またはソース内の `%% caption: ...` 行から取得します。図には `role="img"` を付け、キャプションがあればそれをラベルにします。元の記法は必要に応じて折りたたみで残します。
44
+
45
+ `render: "build"` では、Puppeteer が起動するヘッドレス Chromium 上で Mermaid を実行し、静的な SVG を生成します。JSDOM のような簡易な DOM 実装や寸法の推測には頼らないため、ブラウザと同じレイアウトエンジンで図を作れます。Mermaid は `securityLevel: "strict"` で実行されます。
46
+
47
+ 構文エラーは `invalid-diagram`、描画環境の問題は `renderer-error` として区別して診断します。ビルド時の描画に失敗した場合、既定ではビルドを失敗させます。失敗した描画が成功したコンテンツとして保存されることはありません。SVG ID は図の ID をシードにして決定的に生成します。
37
48
 
38
49
  ## クライアント側の再試行
39
50
 
40
- `initMermaidDiagrams` は保留中の図だけを描画します。Mermaid のインスタンスがなければ jsDelivr から Mermaid 11 を読み込みます。描画に失敗した場合は `data-mermaid="error"` となり、CSS のプレースホルダー表示に切り替わります。
51
+ `initMermaidDiagrams` は未描画の図だけを描画します。Mermaid のインスタンスがなければ jsDelivr から Mermaid 11 を読み込みます。描画に失敗した場合は `data-mermaid="error"` となり、CSS のプレースホルダー表示に切り替わります。
41
52
 
42
53
  明暗別のテーマを指定した場合は、`html[data-theme]` を優先し、なければ OS の配色設定に従います。
43
54
 
@@ -51,7 +62,7 @@ export default defineConfig({
51
62
  | `caption` | `true` | タイトルまたは `%% caption:` をキャプションとして表示する |
52
63
  | `fallback` | `true` | 元の Mermaid 記法を `<details>` に残す |
53
64
 
54
- `"client"` はビルド時の描画を行いません。`render: "build"` で `onRenderError: "client"` を指定するときだけ、ビルド時の描画失敗をクライアント側へ明示的に委譲します。この設定では生成HTMLが描画環境の可用性に依存します。
65
+ `"client"` はビルド時の描画を行いません。`render: "build"` で `onRenderError: "client"` を指定するときだけ、ビルド時の描画失敗をクライアント側へ明示的に委譲します。この設定では、生成される HTML がレンダラーの可用性に左右されます。
55
66
 
56
67
  ## 主なエクスポート
57
68
 
package/dist/index.js CHANGED
@@ -19,7 +19,6 @@ import {
19
19
  getStringProperty as sharedGetStringProperty,
20
20
  getTextContent as sharedGetTextContent,
21
21
  hasClass as sharedHasClass,
22
- mergeClassName as sharedMergeClassName,
23
22
  text as sharedText,
24
23
  visitElements as sharedVisitElements
25
24
  } from "@riebeckite/diagram";
@@ -107,10 +106,14 @@ function buildFigure(input) {
107
106
  );
108
107
  if (input.fallback) {
109
108
  children.push(
110
- element("details", { className: "rr-mermaid__fallback" }, [
111
- element("summary", {}, [text("Diagram source")]),
112
- element("pre", {}, [element("code", {}, [text(input.source)])])
113
- ])
109
+ element(
110
+ "details",
111
+ { className: "rr-mermaid__fallback rb-source-fallback" },
112
+ [
113
+ element("summary", {}, [text("Diagram source")]),
114
+ element("pre", {}, [element("code", {}, [text(input.source)])])
115
+ ]
116
+ )
114
117
  );
115
118
  }
116
119
  return element(
@@ -1,4 +1,3 @@
1
- import { mergeClassName as sharedMergeClassName } from "@riebeckite/diagram";
2
1
  import type { ElementNode, HastNode, ParentNode, TextNode } from "./types.js";
3
2
  export declare const element: (tagName: string, properties?: Record<string, unknown>, children?: HastNode[]) => ElementNode;
4
3
  export declare const text: (value: string) => TextNode;
@@ -6,4 +5,3 @@ export declare const getTextContent: (node: HastNode) => string;
6
5
  export declare const getStringProperty: (node: ElementNode, key: string) => string | null;
7
6
  export declare const hasClass: (node: ElementNode, className: string) => boolean;
8
7
  export declare const visitElements: (node: HastNode, visitor: (node: ElementNode, parent?: ParentNode, index?: number) => void, parent?: ParentNode, index?: number) => void;
9
- export declare const mergeClassName: typeof sharedMergeClassName;
@@ -1,8 +1,6 @@
1
1
  import type { Browser } from "puppeteer";
2
2
  import type { MermaidRenderSession } from "./types.js";
3
- export declare const MERMAID_HEADLESS_MODE: "shell";
4
- export declare const MERMAID_PUPPETEER_BROWSER = "chrome-headless-shell";
5
- export type MermaidSessionDependencies = {
3
+ type MermaidSessionDependencies = {
6
4
  /**
7
5
  * Overrides browser launch. Tests inject a fake browser so session
8
6
  * lifecycle can be asserted without launching Chrome.
@@ -21,3 +19,4 @@ export type MermaidSessionDependencies = {
21
19
  * the plugin `buildEnd`/`dispose` hooks.
22
20
  */
23
21
  export declare function createMermaidRenderSession(dependencies?: MermaidSessionDependencies): MermaidRenderSession;
22
+ export {};
@@ -20,7 +20,7 @@ export type MermaidBuildRenderResult = {
20
20
  kind: MermaidBuildRenderErrorKind;
21
21
  message: string;
22
22
  };
23
- export type MermaidBuildRenderer = (id: string, source: string, theme: string) => Promise<MermaidBuildRenderResult>;
23
+ type MermaidBuildRenderer = (id: string, source: string, theme: string) => Promise<MermaidBuildRenderResult>;
24
24
  /**
25
25
  * Build-scoped render resource. Owns one browser/page session, serializes
26
26
  * renders, and releases the browser on `dispose`.
@@ -34,7 +34,7 @@ export type MermaidClientOptions = {
34
34
  mermaid?: MermaidApi;
35
35
  scriptUrl?: string;
36
36
  };
37
- export type MermaidApi = {
37
+ type MermaidApi = {
38
38
  initialize(options: Record<string, unknown>): void;
39
39
  render(id: string, source: string): Promise<{
40
40
  svg: string;
@@ -55,7 +55,7 @@ export type TextNode = {
55
55
  type: "text";
56
56
  value: string;
57
57
  };
58
- export type RawNode = {
58
+ type RawNode = {
59
59
  type: "raw";
60
60
  value: string;
61
61
  };
@@ -63,3 +63,4 @@ export type HastNode = ElementNode | TextNode | RawNode | {
63
63
  type: string;
64
64
  [key: string]: unknown;
65
65
  };
66
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riebeckite/plugin-mermaid",
3
- "version": "0.0.32",
3
+ "version": "0.0.33",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -21,10 +21,10 @@
21
21
  "./style.css": "./style.css"
22
22
  },
23
23
  "dependencies": {
24
+ "@riebeckite/core": "0.0.33",
25
+ "@riebeckite/diagram": "0.0.33",
24
26
  "mermaid": "^11.12.2",
25
- "puppeteer": "^25.11.0",
26
- "@riebeckite/core": "0.0.32",
27
- "@riebeckite/diagram": "0.0.32"
27
+ "puppeteer": "^25.16.0"
28
28
  },
29
29
  "publishConfig": {
30
30
  "access": "public"
package/style.css CHANGED
@@ -36,26 +36,6 @@
36
36
  height: auto;
37
37
  }
38
38
 
39
- .rr-mermaid__fallback {
40
- border-top: 1px solid var(--rr-mermaid-rule);
41
- color: var(--rr-mermaid-muted);
42
- font-size: 0.8125rem;
43
- }
44
-
45
- .rr-mermaid__fallback summary {
46
- cursor: pointer;
47
- padding: 0.5rem 0.75rem;
48
- }
49
-
50
- .rr-mermaid__fallback pre {
51
- overflow: auto;
52
- margin: 0 1rem;
53
- padding: 0.75rem;
54
- border-top: 1px solid var(--rr-mermaid-rule);
55
- color: var(--rr-mermaid-ink);
56
- background: color-mix(in srgb, var(--rr-mermaid-ink) 6%, transparent);
57
- }
58
-
59
39
  .rr-mermaid[data-mermaid="error"] .rr-mermaid__canvas::before,
60
40
  .rr-mermaid[data-mermaid="pending"] .rr-mermaid__canvas:empty::before {
61
41
  content: "Diagram could not be rendered.";