@richhtmleditor/diagrams 1.1.0
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/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +515 -0
- package/dist/index.js.map +1 -0
- package/package.json +27 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { EditorPlugin } from "@richhtmleditor/core";
|
|
2
|
+
export type DiagramsPluginOptions = {
|
|
3
|
+
/**
|
|
4
|
+
* Render diagram source code to an HTML/SVG string for insertion into the editor.
|
|
5
|
+
* The returned HTML goes through editor.setContent() so embedded <style> blocks may be
|
|
6
|
+
* stripped — use inline styles or a data-URL if needed.
|
|
7
|
+
* If omitted the raw code is displayed in a styled `<pre>` block.
|
|
8
|
+
*/
|
|
9
|
+
renderDiagram?: (code: string) => string | Promise<string>;
|
|
10
|
+
/**
|
|
11
|
+
* Optional separate renderer used only for the modal live-preview panel.
|
|
12
|
+
* Because the preview never goes through editor.setContent(), you can return
|
|
13
|
+
* the raw SVG (with its embedded <style>) for correct color/font rendering.
|
|
14
|
+
* Falls back to renderDiagram when not provided.
|
|
15
|
+
*/
|
|
16
|
+
renderPreview?: (code: string) => string | Promise<string>;
|
|
17
|
+
/** Starter code shown in the modal. Default: 'graph TD\n A[Start] --> B[End]' */
|
|
18
|
+
placeholder?: string;
|
|
19
|
+
/** Label shown on the toolbar button. Default: 'Diagram' */
|
|
20
|
+
label?: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Mermaid / flowchart diagram blocks plugin.
|
|
24
|
+
*
|
|
25
|
+
* Adds an `insertDiagram` toolbar button. Diagrams are stored as
|
|
26
|
+
* `<figure class="de-diagram" data-diagram="...">` in the HTML.
|
|
27
|
+
* Click a diagram in the editor to edit it.
|
|
28
|
+
*
|
|
29
|
+
* Pass `renderDiagram` to enable live preview and rendered output:
|
|
30
|
+
* ```ts
|
|
31
|
+
* import mermaid from "mermaid";
|
|
32
|
+
* mermaid.initialize({ startOnLoad: false });
|
|
33
|
+
*
|
|
34
|
+
* createEditor({
|
|
35
|
+
* plugins: [createDiagramsPlugin({
|
|
36
|
+
* renderDiagram: async (code) => {
|
|
37
|
+
* const { svg } = await mermaid.render("d" + Date.now(), code);
|
|
38
|
+
* return svg;
|
|
39
|
+
* }
|
|
40
|
+
* })]
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function createDiagramsPlugin(options?: DiagramsPluginOptions): EditorPlugin;
|
|
45
|
+
/** Strip rendered content from diagram figures, leaving only the `data-diagram` source attribute. */
|
|
46
|
+
export declare function prepareDiagramsForExport(html: string): string;
|
|
47
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzE,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAwYF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,YAAY,CAoKtF;AAED,qGAAqG;AACrG,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ7D"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
const DIAGRAM_CLASS = "de-diagram";
|
|
2
|
+
const DIAGRAM_MODAL_CLASS = "de-diagram-modal";
|
|
3
|
+
const DEFAULT_PLACEHOLDER = "graph TD\n A[Start] --> B[End]";
|
|
4
|
+
const DIAGRAM_STARTERS = [
|
|
5
|
+
{
|
|
6
|
+
label: "Flowchart",
|
|
7
|
+
code: "graph TD\n A[Start] --> B{Decision}\n B -->|Yes| C[Do it]\n B -->|No| D[Skip]\n C --> E[End]\n D --> E"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
label: "Sequence",
|
|
11
|
+
code: "sequenceDiagram\n Alice->>Bob: Hello Bob!\n Bob-->>Alice: Hi Alice!\n Alice->>Bob: How are you?\n Bob-->>Alice: Great, thanks!"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
label: "Pie chart",
|
|
15
|
+
code: "pie title Browser Usage\n \"Chrome\" : 65\n \"Safari\" : 19\n \"Firefox\" : 9\n \"Other\" : 7"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
label: "Gantt",
|
|
19
|
+
code: "gantt\n title Project Timeline\n dateFormat YYYY-MM-DD\n section Planning\n Research :a1, 2024-01-01, 10d\n Design :a2, after a1, 7d\n section Build\n Development :b1, after a2, 20d\n Testing :b2, after b1, 5d"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
label: "Class",
|
|
23
|
+
code: "classDiagram\n class Animal {\n +String name\n +speak() void\n }\n class Dog {\n +fetch() void\n }\n Animal <|-- Dog"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
label: "State",
|
|
27
|
+
code: "stateDiagram-v2\n [*] --> Idle\n Idle --> Active : start\n Active --> Idle : stop\n Active --> [*] : finish"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
label: "ER",
|
|
31
|
+
code: "erDiagram\n CUSTOMER ||--o{ ORDER : places\n ORDER ||--|{ LINE-ITEM : contains\n CUSTOMER { string name\n string email }\n ORDER { int id\n date created }"
|
|
32
|
+
}
|
|
33
|
+
];
|
|
34
|
+
function escapeHtml(s) {
|
|
35
|
+
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
36
|
+
}
|
|
37
|
+
async function renderOrFallback(code, renderer) {
|
|
38
|
+
if (!code.trim())
|
|
39
|
+
return "";
|
|
40
|
+
if (renderer) {
|
|
41
|
+
try {
|
|
42
|
+
return await Promise.resolve(renderer(code));
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
return `<span style="color:#dc2626;font-size:.8em;">Render error: ${escapeHtml(String(e))}</span>`;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return `<pre class="${DIAGRAM_CLASS}__code" style="font-family:monospace;font-size:.85rem;background:#f1f5f9;padding:12px;border-radius:6px;overflow:auto;white-space:pre;">${escapeHtml(code)}</pre>`;
|
|
49
|
+
}
|
|
50
|
+
/** Apply syntax highlighting to Mermaid code. Receives raw code, returns HTML string. */
|
|
51
|
+
function highlightMermaid(code) {
|
|
52
|
+
return code
|
|
53
|
+
.split("\n")
|
|
54
|
+
.map((rawLine) => {
|
|
55
|
+
let line = escapeHtml(rawLine);
|
|
56
|
+
const trimmed = rawLine.trim();
|
|
57
|
+
// Comment lines
|
|
58
|
+
if (trimmed.startsWith("%%")) {
|
|
59
|
+
return `<span style="color:#64748b;font-style:italic">${line}</span>`;
|
|
60
|
+
}
|
|
61
|
+
// Diagram-type keyword at start of line
|
|
62
|
+
line = line.replace(/^(graph|sequenceDiagram|classDiagram|stateDiagram(?:-v2)?|erDiagram|gantt|pie(?:\s+title)?|flowchart|journey|gitGraph|mindmap|timeline)/, '<span style="color:#c084fc;font-weight:600">$1</span>');
|
|
63
|
+
// Direction keywords
|
|
64
|
+
line = line.replace(/\b(TD|TB|LR|RL|BT)\b/g, '<span style="color:#38bdf8">$1</span>');
|
|
65
|
+
// Block keywords
|
|
66
|
+
line = line.replace(/\b(section|dateFormat|title|participant|actor|loop|end|alt|else|opt|par|autonumber|note|over|activate|deactivate|rect|critical|break|class|namespace)\b/g, (m) => `<span style="color:#a78bfa">${m}</span>`);
|
|
67
|
+
// Escaped arrows (HTML-escaped forms of -->, ->>, etc.)
|
|
68
|
+
line = line.replace(/(-->>?|\.\.>>?|->>?|==>|-->|\.\.>|->|<-->?|<->>?)/g, '<span style="color:#38bdf8">$1</span>');
|
|
69
|
+
// ER / class relationship symbols (||--o{, <|--, etc.)
|
|
70
|
+
line = line.replace(/(\|\|--o\{|\|\|--\|\{|o\|--\|\||<\|--|--\|>)/g, '<span style="color:#38bdf8">$1</span>');
|
|
71
|
+
// Pipe labels |label| — content must not span lines or contain < >
|
|
72
|
+
line = line.replace(/\|([^|<>]{0,60})\|/g, '|<span style="color:#fbbf24">$1</span>|');
|
|
73
|
+
// Square bracket node labels [...]
|
|
74
|
+
line = line.replace(/\[([^\]<>]{0,80})\]/g, '[<span style="color:#4ade80">$1</span>]');
|
|
75
|
+
// Curly brace conditions {...}
|
|
76
|
+
line = line.replace(/\{([^}<>]{0,60})\}/g, '{<span style="color:#fb923c">$1</span>}');
|
|
77
|
+
// Quoted strings "..."
|
|
78
|
+
line = line.replace(/(")([^&]{0,80})(")/g, '$1<span style="color:#fbbf24">$2</span>$3');
|
|
79
|
+
return line;
|
|
80
|
+
})
|
|
81
|
+
.join("\n");
|
|
82
|
+
}
|
|
83
|
+
const ALIGN_BTNS = [
|
|
84
|
+
{ value: "left", label: "⇤", title: "Align left" },
|
|
85
|
+
{ value: "center", label: "↔", title: "Align center" },
|
|
86
|
+
{ value: "right", label: "⇥", title: "Align right" },
|
|
87
|
+
];
|
|
88
|
+
function buildAlignBtns() {
|
|
89
|
+
return (`<span class="${DIAGRAM_CLASS}__align-btns" style="display:inline-flex;gap:2px;">` +
|
|
90
|
+
ALIGN_BTNS.map(({ value, label, title }) => `<button type="button" class="${DIAGRAM_CLASS}__align-btn" data-align-btn="${value}" title="${title}" ` +
|
|
91
|
+
`style="width:22px;height:18px;border:1px solid rgba(100,116,139,.25);border-radius:3px;background:none;` +
|
|
92
|
+
`cursor:pointer;font-size:11px;color:#64748b;padding:0;line-height:1;">${label}</button>`).join("") +
|
|
93
|
+
`</span>`);
|
|
94
|
+
}
|
|
95
|
+
function alignToJustify(align) {
|
|
96
|
+
return align === "left" ? "flex-start" : align === "right" ? "flex-end" : "center";
|
|
97
|
+
}
|
|
98
|
+
function buildFigureHtml(code, renderedHtml, align = "center") {
|
|
99
|
+
return (`<figure class="${DIAGRAM_CLASS}" data-diagram="${escapeHtml(code)}" data-align="${align}" contenteditable="false">` +
|
|
100
|
+
`<div class="${DIAGRAM_CLASS}__content" style="display:flex;justify-content:${alignToJustify(align)};">` +
|
|
101
|
+
renderedHtml +
|
|
102
|
+
`</div>` +
|
|
103
|
+
`<figcaption class="${DIAGRAM_CLASS}__edit-hint" style="align-items:center;justify-content:center;gap:8px;font-size:.75rem;color:#64748b;margin-top:6px;">` +
|
|
104
|
+
buildAlignBtns() +
|
|
105
|
+
`<span style="cursor:pointer;margin:0 4px;">Click to edit</span>` +
|
|
106
|
+
`<button type="button" class="${DIAGRAM_CLASS}__remove" title="Remove diagram" aria-label="Remove diagram" ` +
|
|
107
|
+
`style="width:18px;height:18px;border-radius:50%;border:none;background:rgba(100,116,139,.15);` +
|
|
108
|
+
`cursor:pointer;font-size:10px;color:#64748b;padding:0;display:inline-flex;align-items:center;justify-content:center;">✕</button>` +
|
|
109
|
+
`</figcaption>` +
|
|
110
|
+
`</figure>`);
|
|
111
|
+
}
|
|
112
|
+
const HELP_STARTERS = {
|
|
113
|
+
"graph TD": "graph TD\n A[Start] --> B{Decision}\n B -->|Yes| C[Do it]\n B -->|No| D[Skip]\n C --> E[End]\n D --> E",
|
|
114
|
+
"sequenceDiagram": "sequenceDiagram\n Alice->>Bob: Hello Bob!\n Bob-->>Alice: Hi Alice!\n Alice->>Bob: How are you?\n Bob-->>Alice: Great, thanks!",
|
|
115
|
+
"classDiagram": "classDiagram\n class Animal {\n +String name\n +speak() void\n }\n class Dog {\n +fetch() void\n }\n Animal <|-- Dog",
|
|
116
|
+
"stateDiagram-v2": "stateDiagram-v2\n [*] --> Idle\n Idle --> Active : start\n Active --> Idle : stop\n Active --> [*] : finish",
|
|
117
|
+
"erDiagram": "erDiagram\n CUSTOMER ||--o{ ORDER : places\n ORDER ||--|{ LINE-ITEM : contains\n CUSTOMER { string name\n string email }\n ORDER { int id\n date created }",
|
|
118
|
+
"gantt": "gantt\n title Project Timeline\n dateFormat YYYY-MM-DD\n section Planning\n Research :a1, 2024-01-01, 10d\n Design :a2, after a1, 7d\n section Build\n Development :b1, after a2, 20d\n Testing :b2, after b1, 5d",
|
|
119
|
+
"pie title X": "pie title Browser Usage\n \"Chrome\" : 65\n \"Safari\" : 19\n \"Firefox\" : 9\n \"Other\" : 7",
|
|
120
|
+
"mindmap": "mindmap\n root((Topic))\n Branch A\n Leaf 1\n Leaf 2\n Branch B\n Leaf 3",
|
|
121
|
+
};
|
|
122
|
+
function buildHelpHtml() {
|
|
123
|
+
const baseCode = "background:#1e293b;border:1px solid #334155;border-radius:4px;padding:2px 7px;font-family:monospace;font-size:.75rem;";
|
|
124
|
+
function staticChip(text, color) {
|
|
125
|
+
return `<code style="${baseCode}color:${color};">${escapeHtml(text)}</code>`;
|
|
126
|
+
}
|
|
127
|
+
function typeBtn(keyword) {
|
|
128
|
+
const starter = HELP_STARTERS[keyword] ?? keyword;
|
|
129
|
+
return `<button type="button" class="${DIAGRAM_MODAL_CLASS}__help-type" data-insert="${escapeHtml(starter)}" ` +
|
|
130
|
+
`title="Insert ${keyword} template" ` +
|
|
131
|
+
`style="${baseCode}color:#c084fc;cursor:pointer;border:1px solid #334155;transition:background .12s,border-color .12s;">${escapeHtml(keyword)}</button>`;
|
|
132
|
+
}
|
|
133
|
+
function labeled(code, color, label) {
|
|
134
|
+
return `<span style="display:inline-flex;align-items:center;gap:4px;">${staticChip(code, color)}<span style="color:#64748b;font-size:.7rem;">${label}</span></span>`;
|
|
135
|
+
}
|
|
136
|
+
const diagramTypes = ["graph TD", "sequenceDiagram", "classDiagram", "stateDiagram-v2", "erDiagram", "gantt", "pie title X", "mindmap"];
|
|
137
|
+
const nodeShapes = [["[Rect]", "Rectangle"], ["(Round)", "Rounded"], ["{Diamond}", "Decision"], ["((Circle))", "Circle"], ["[/Parallel/]", "Parallelogram"], ["([Stadium])", "Stadium"]];
|
|
138
|
+
const arrowStyles = [["-->", "arrow"], ["---", "no arrow"], ["-.->", "dotted"], ["==>", "thick"], ["--x", "cross"], ["-- label -->", "labelled"]];
|
|
139
|
+
return (`<div style="background:#0f172a;border-radius:8px;padding:14px 16px;display:flex;flex-direction:column;gap:12px;">` +
|
|
140
|
+
`<div><p style="font-size:.65rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#64748b;margin:0 0 7px;">Diagram types — click to insert</p>` +
|
|
141
|
+
`<div style="display:flex;flex-wrap:wrap;gap:5px;">${diagramTypes.map((k) => typeBtn(k)).join("")}</div></div>` +
|
|
142
|
+
`<div><p style="font-size:.65rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#64748b;margin:0 0 7px;">Flowchart node shapes</p>` +
|
|
143
|
+
`<div style="display:flex;flex-wrap:wrap;gap:6px;align-items:center;">${nodeShapes.map(([c, l]) => labeled(c, "#4ade80", l)).join("")}</div></div>` +
|
|
144
|
+
`<div><p style="font-size:.65rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#64748b;margin:0 0 7px;">Arrow styles</p>` +
|
|
145
|
+
`<div style="display:flex;flex-wrap:wrap;gap:8px;align-items:center;">${arrowStyles.map(([a, l]) => labeled(a, "#38bdf8", l)).join("")}</div></div>` +
|
|
146
|
+
`<a href="https://mermaid.js.org/intro/" target="_blank" rel="noopener noreferrer" ` +
|
|
147
|
+
`style="font-size:.75rem;color:#60a5fa;text-decoration:none;display:inline-flex;align-items:center;gap:4px;width:fit-content;">` +
|
|
148
|
+
`Full Mermaid documentation ↗</a>` +
|
|
149
|
+
`</div>`);
|
|
150
|
+
}
|
|
151
|
+
function openDiagramModal(host, options, initialCode, initialAlign, onConfirm) {
|
|
152
|
+
// Inject modal CSS once (chip hover + textarea placeholder color)
|
|
153
|
+
const modalStyleId = "de-diagram-modal-styles";
|
|
154
|
+
if (!document.getElementById(modalStyleId)) {
|
|
155
|
+
const st = document.createElement("style");
|
|
156
|
+
st.id = modalStyleId;
|
|
157
|
+
st.textContent =
|
|
158
|
+
`.${DIAGRAM_MODAL_CLASS}__chip:hover{background:var(--de-primary-hover,#eff6ff)!important;border-color:var(--de-primary,#2563eb)!important;color:var(--de-primary,#2563eb)!important;}` +
|
|
159
|
+
`.${DIAGRAM_MODAL_CLASS}__input::placeholder{color:#475569;}` +
|
|
160
|
+
`.${DIAGRAM_MODAL_CLASS}__help-type:hover{background:#334155!important;border-color:#64748b!important;}` +
|
|
161
|
+
`.${DIAGRAM_MODAL_CLASS}__help-toggle:hover{background:rgba(100,116,139,.1)!important;border-color:#94a3b8!important;color:#334155!important;}`;
|
|
162
|
+
document.head.appendChild(st);
|
|
163
|
+
}
|
|
164
|
+
const backdrop = document.createElement("div");
|
|
165
|
+
backdrop.style.cssText = "position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:9999;display:flex;align-items:center;justify-content:center;";
|
|
166
|
+
const panel = document.createElement("div");
|
|
167
|
+
panel.className = DIAGRAM_MODAL_CLASS;
|
|
168
|
+
panel.setAttribute("role", "dialog");
|
|
169
|
+
panel.setAttribute("aria-modal", "true");
|
|
170
|
+
panel.setAttribute("aria-label", "Insert diagram");
|
|
171
|
+
panel.style.cssText = "background:var(--de-toolbar-bg,#fff);border-radius:12px;padding:24px;width:min(960px,96vw);max-height:94vh;overflow:auto;box-shadow:0 16px 48px rgba(0,0,0,.2);display:flex;flex-direction:column;gap:12px;";
|
|
172
|
+
// Build starter chips HTML
|
|
173
|
+
const chipsHtml = DIAGRAM_STARTERS.map((s) => `<button type="button" class="${DIAGRAM_MODAL_CLASS}__chip" data-code="${escapeHtml(s.code)}"` +
|
|
174
|
+
` style="padding:4px 11px;border:1px solid var(--de-border,#e2e8f0);border-radius:999px;` +
|
|
175
|
+
`background:none;cursor:pointer;font-size:.75rem;font-weight:500;color:#475569;` +
|
|
176
|
+
`white-space:nowrap;transition:border-color .12s,background .12s;">${s.label}</button>`).join("");
|
|
177
|
+
// Dark syntax-highlighted code editor: highlight layer (absolute) + transparent textarea on top
|
|
178
|
+
const editorWrapCss = "position:relative;height:320px;border-radius:8px;overflow:hidden;border:1px solid #334155;";
|
|
179
|
+
const highlightLayerCss = "position:absolute;inset:0;overflow:auto;padding:8px 10px;margin:0;" +
|
|
180
|
+
"font-family:monospace;font-size:.85rem;line-height:1.5;" +
|
|
181
|
+
"white-space:pre-wrap;word-wrap:break-word;" +
|
|
182
|
+
"background:#0f172a;color:#e2e8f0;pointer-events:none;box-sizing:border-box;";
|
|
183
|
+
const textareaCss = "position:absolute;inset:0;overflow:auto;padding:8px 10px;" +
|
|
184
|
+
"border:none;outline:none;resize:none;box-sizing:border-box;" +
|
|
185
|
+
"font-family:monospace;font-size:.85rem;line-height:1.5;" +
|
|
186
|
+
"white-space:pre-wrap;word-wrap:break-word;" +
|
|
187
|
+
"background:transparent;color:transparent;caret-color:#e2e8f0;z-index:1;";
|
|
188
|
+
const helpBtnStyle = "display:inline-flex;align-items:center;gap:6px;padding:5px 10px 5px 8px;border:1px solid var(--de-border,#e2e8f0);border-radius:6px;background:none;cursor:pointer;font-size:.8rem;font-weight:600;color:#64748b;transition:color .12s,background .12s,border-color .12s;";
|
|
189
|
+
const helpCircleStyle = "display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:999px;border:1.5px solid currentColor;font-size:.65rem;font-weight:800;flex-shrink:0;line-height:1;";
|
|
190
|
+
panel.innerHTML = `
|
|
191
|
+
<h3 style="margin:0;font-size:1rem;font-weight:600;">Insert diagram</h3>
|
|
192
|
+
<div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
|
|
193
|
+
<div style="display:flex;flex-direction:column;gap:8px;">
|
|
194
|
+
<p style="font-size:.75rem;font-weight:600;margin:0;text-transform:uppercase;letter-spacing:.04em;color:#64748b;">Diagram code</p>
|
|
195
|
+
<div style="${editorWrapCss}">
|
|
196
|
+
<div class="${DIAGRAM_MODAL_CLASS}__highlight" style="${highlightLayerCss}"></div>
|
|
197
|
+
<textarea class="${DIAGRAM_MODAL_CLASS}__input" spellcheck="false"
|
|
198
|
+
placeholder="${escapeHtml(options.placeholder ?? DEFAULT_PLACEHOLDER)}"
|
|
199
|
+
style="${textareaCss}">${escapeHtml(initialCode)}</textarea>
|
|
200
|
+
</div>
|
|
201
|
+
<div>
|
|
202
|
+
<p style="font-size:.7rem;font-weight:600;margin:0 0 6px;text-transform:uppercase;letter-spacing:.04em;color:#94a3b8;">Quick start</p>
|
|
203
|
+
<div class="${DIAGRAM_MODAL_CLASS}__chips" style="display:flex;flex-wrap:wrap;gap:6px;">${chipsHtml}</div>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
<div style="display:flex;flex-direction:column;gap:8px;">
|
|
207
|
+
<p style="font-size:.75rem;font-weight:600;margin:0;text-transform:uppercase;letter-spacing:.04em;color:#64748b;">Preview</p>
|
|
208
|
+
<div class="${DIAGRAM_MODAL_CLASS}__preview" style="height:280px;padding:8px;border:1px solid var(--de-border,#e2e8f0);border-radius:8px;background:var(--de-content-bg,#fff);overflow:auto;"></div>
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
211
|
+
<div>
|
|
212
|
+
<button type="button" class="${DIAGRAM_MODAL_CLASS}__help-toggle" style="${helpBtnStyle}">
|
|
213
|
+
<span style="${helpCircleStyle}">?</span>
|
|
214
|
+
Syntax reference
|
|
215
|
+
<span class="${DIAGRAM_MODAL_CLASS}__help-chevron" style="font-size:.7rem;transition:transform .2s;margin-left:2px;">▾</span>
|
|
216
|
+
</button>
|
|
217
|
+
<div class="${DIAGRAM_MODAL_CLASS}__help" hidden style="margin-top:8px;">${buildHelpHtml()}</div>
|
|
218
|
+
</div>
|
|
219
|
+
<div style="display:flex;justify-content:flex-end;gap:8px;margin-top:4px;">
|
|
220
|
+
<button type="button" class="${DIAGRAM_MODAL_CLASS}__cancel" style="padding:7px 16px;border:1px solid var(--de-border,#e2e8f0);background:none;border-radius:8px;cursor:pointer;font-size:.875rem;">Cancel</button>
|
|
221
|
+
<button type="button" class="${DIAGRAM_MODAL_CLASS}__confirm" style="padding:7px 16px;background:var(--de-primary,#2563eb);color:#fff;border:none;border-radius:8px;cursor:pointer;font-size:.875rem;font-weight:500;">Insert</button>
|
|
222
|
+
</div>
|
|
223
|
+
`;
|
|
224
|
+
backdrop.appendChild(panel);
|
|
225
|
+
document.body.appendChild(backdrop);
|
|
226
|
+
const textarea = panel.querySelector(`.${DIAGRAM_MODAL_CLASS}__input`);
|
|
227
|
+
const highlight = panel.querySelector(`.${DIAGRAM_MODAL_CLASS}__highlight`);
|
|
228
|
+
const preview = panel.querySelector(`.${DIAGRAM_MODAL_CLASS}__preview`);
|
|
229
|
+
const cancelBtn = panel.querySelector(`.${DIAGRAM_MODAL_CLASS}__cancel`);
|
|
230
|
+
const confirmBtn = panel.querySelector(`.${DIAGRAM_MODAL_CLASS}__confirm`);
|
|
231
|
+
let lastRendered = "";
|
|
232
|
+
let previewTimer = null;
|
|
233
|
+
const currentAlign = initialAlign;
|
|
234
|
+
const updateHighlight = () => {
|
|
235
|
+
highlight.innerHTML = highlightMermaid(textarea.value);
|
|
236
|
+
};
|
|
237
|
+
const updatePreview = () => {
|
|
238
|
+
if (previewTimer)
|
|
239
|
+
clearTimeout(previewTimer);
|
|
240
|
+
previewTimer = setTimeout(async () => {
|
|
241
|
+
// Use renderPreview (raw SVG, styles intact) for display; renderDiagram for insertion
|
|
242
|
+
const editorHtml = await renderOrFallback(textarea.value, options.renderDiagram);
|
|
243
|
+
lastRendered = editorHtml;
|
|
244
|
+
const previewHtml = options.renderPreview
|
|
245
|
+
? await renderOrFallback(textarea.value, options.renderPreview)
|
|
246
|
+
: editorHtml;
|
|
247
|
+
preview.innerHTML = previewHtml || `<span style="color:#94a3b8;font-size:.85rem;">Preview will appear here…</span>`;
|
|
248
|
+
// Scale SVG to fit preview container
|
|
249
|
+
const svgEl = preview.querySelector("svg");
|
|
250
|
+
if (svgEl) {
|
|
251
|
+
svgEl.removeAttribute("width");
|
|
252
|
+
svgEl.removeAttribute("height");
|
|
253
|
+
svgEl.style.width = "100%";
|
|
254
|
+
svgEl.style.height = "auto";
|
|
255
|
+
svgEl.style.display = "block";
|
|
256
|
+
}
|
|
257
|
+
}, 300);
|
|
258
|
+
};
|
|
259
|
+
// Sync scroll between transparent textarea and highlight layer
|
|
260
|
+
textarea.addEventListener("scroll", () => {
|
|
261
|
+
highlight.scrollTop = textarea.scrollTop;
|
|
262
|
+
highlight.scrollLeft = textarea.scrollLeft;
|
|
263
|
+
});
|
|
264
|
+
textarea.addEventListener("input", () => {
|
|
265
|
+
updateHighlight();
|
|
266
|
+
updatePreview();
|
|
267
|
+
});
|
|
268
|
+
// Initial render
|
|
269
|
+
updateHighlight();
|
|
270
|
+
updatePreview();
|
|
271
|
+
// Wire starter chips
|
|
272
|
+
panel.querySelectorAll(`.${DIAGRAM_MODAL_CLASS}__chip`).forEach((chip) => {
|
|
273
|
+
chip.addEventListener("click", () => {
|
|
274
|
+
textarea.value = chip.dataset.code ?? "";
|
|
275
|
+
textarea.focus();
|
|
276
|
+
updateHighlight();
|
|
277
|
+
updatePreview();
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
// Wire help toggle
|
|
281
|
+
const helpToggle = panel.querySelector(`.${DIAGRAM_MODAL_CLASS}__help-toggle`);
|
|
282
|
+
const helpPanel = panel.querySelector(`.${DIAGRAM_MODAL_CLASS}__help`);
|
|
283
|
+
const helpChevron = helpToggle.querySelector(`.${DIAGRAM_MODAL_CLASS}__help-chevron`);
|
|
284
|
+
helpToggle.addEventListener("click", () => {
|
|
285
|
+
const isOpen = !helpPanel.hidden;
|
|
286
|
+
helpPanel.hidden = isOpen;
|
|
287
|
+
helpChevron.style.transform = isOpen ? "" : "rotate(180deg)";
|
|
288
|
+
});
|
|
289
|
+
// Wire help type chips — click inserts starter code into editor
|
|
290
|
+
panel.querySelectorAll(`.${DIAGRAM_MODAL_CLASS}__help-type`).forEach((btn) => {
|
|
291
|
+
btn.addEventListener("click", () => {
|
|
292
|
+
textarea.value = btn.dataset.insert ?? "";
|
|
293
|
+
textarea.focus();
|
|
294
|
+
updateHighlight();
|
|
295
|
+
updatePreview();
|
|
296
|
+
});
|
|
297
|
+
});
|
|
298
|
+
const close = () => {
|
|
299
|
+
if (previewTimer)
|
|
300
|
+
clearTimeout(previewTimer);
|
|
301
|
+
backdrop.remove();
|
|
302
|
+
};
|
|
303
|
+
cancelBtn.addEventListener("click", close);
|
|
304
|
+
backdrop.addEventListener("click", (e) => { if (e.target === backdrop)
|
|
305
|
+
close(); });
|
|
306
|
+
panel.addEventListener("keydown", (e) => { if (e.key === "Escape")
|
|
307
|
+
close(); });
|
|
308
|
+
confirmBtn.addEventListener("click", async () => {
|
|
309
|
+
const code = textarea.value.trim();
|
|
310
|
+
if (!code) {
|
|
311
|
+
close();
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
const rendered = lastRendered || await renderOrFallback(code, options.renderDiagram);
|
|
315
|
+
onConfirm(code, rendered, currentAlign);
|
|
316
|
+
close();
|
|
317
|
+
});
|
|
318
|
+
setTimeout(() => textarea.focus(), 50);
|
|
319
|
+
void host;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Mermaid / flowchart diagram blocks plugin.
|
|
323
|
+
*
|
|
324
|
+
* Adds an `insertDiagram` toolbar button. Diagrams are stored as
|
|
325
|
+
* `<figure class="de-diagram" data-diagram="...">` in the HTML.
|
|
326
|
+
* Click a diagram in the editor to edit it.
|
|
327
|
+
*
|
|
328
|
+
* Pass `renderDiagram` to enable live preview and rendered output:
|
|
329
|
+
* ```ts
|
|
330
|
+
* import mermaid from "mermaid";
|
|
331
|
+
* mermaid.initialize({ startOnLoad: false });
|
|
332
|
+
*
|
|
333
|
+
* createEditor({
|
|
334
|
+
* plugins: [createDiagramsPlugin({
|
|
335
|
+
* renderDiagram: async (code) => {
|
|
336
|
+
* const { svg } = await mermaid.render("d" + Date.now(), code);
|
|
337
|
+
* return svg;
|
|
338
|
+
* }
|
|
339
|
+
* })]
|
|
340
|
+
* });
|
|
341
|
+
* ```
|
|
342
|
+
*/
|
|
343
|
+
export function createDiagramsPlugin(options = {}) {
|
|
344
|
+
return {
|
|
345
|
+
id: "richhtmleditor-diagrams",
|
|
346
|
+
tools: [
|
|
347
|
+
{
|
|
348
|
+
id: "insertDiagram",
|
|
349
|
+
type: "button",
|
|
350
|
+
label: options.label ?? "Diagram",
|
|
351
|
+
icon: "diagram",
|
|
352
|
+
display: "icon",
|
|
353
|
+
tooltip: "Insert Mermaid / flowchart diagram",
|
|
354
|
+
onClick: (editor) => {
|
|
355
|
+
const host = editor.element;
|
|
356
|
+
openDiagramModal(host, options, options.placeholder ?? DEFAULT_PLACEHOLDER, "center", async (code, rendered, align) => {
|
|
357
|
+
const figHtml = buildFigureHtml(code, rendered, align);
|
|
358
|
+
const current = editor.getHTML();
|
|
359
|
+
editor.setContent(`${current}<p>${figHtml}</p>`);
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
],
|
|
364
|
+
attach: (editor) => {
|
|
365
|
+
const host = editor.element;
|
|
366
|
+
// Prevent re-entrant calls to rerenderAll triggered by our own setContent
|
|
367
|
+
let isRerendering = false;
|
|
368
|
+
/** Re-render figures that have no SVG yet, then sync the editor model. */
|
|
369
|
+
const rerenderAll = async () => {
|
|
370
|
+
if (!options.renderDiagram || isRerendering)
|
|
371
|
+
return;
|
|
372
|
+
const temp = document.createElement("div");
|
|
373
|
+
temp.innerHTML = editor.getHTML();
|
|
374
|
+
const figs = Array.from(temp.querySelectorAll(`figure.${DIAGRAM_CLASS}`));
|
|
375
|
+
// Only process figures that are not yet rendered (no svg or img child)
|
|
376
|
+
const toRender = figs.filter((fig) => !fig.querySelector("svg, img"));
|
|
377
|
+
if (!toRender.length)
|
|
378
|
+
return;
|
|
379
|
+
for (const fig of toRender) {
|
|
380
|
+
const code = fig.dataset.diagram ?? "";
|
|
381
|
+
if (!code)
|
|
382
|
+
continue;
|
|
383
|
+
const rendered = await renderOrFallback(code, options.renderDiagram);
|
|
384
|
+
const align = fig.dataset.align ?? "center";
|
|
385
|
+
const tmpl = document.createElement("template");
|
|
386
|
+
tmpl.innerHTML = buildFigureHtml(code, rendered, align);
|
|
387
|
+
fig.replaceWith(tmpl.content.firstChild);
|
|
388
|
+
}
|
|
389
|
+
isRerendering = true;
|
|
390
|
+
editor.setContent(temp.innerHTML);
|
|
391
|
+
isRerendering = false;
|
|
392
|
+
};
|
|
393
|
+
/** Return the 0-based index of a DOM figure among all diagram figures in the host. */
|
|
394
|
+
const figIndex = (fig) => Array.from(host.querySelectorAll(`figure.${DIAGRAM_CLASS}`)).indexOf(fig);
|
|
395
|
+
/** Replace the model figure at `idx` with `newFigHtml` and commit via setContent. */
|
|
396
|
+
const commitFigureUpdate = (idx, newFigHtml) => {
|
|
397
|
+
const temp = document.createElement("div");
|
|
398
|
+
temp.innerHTML = editor.getHTML();
|
|
399
|
+
const modelFigs = Array.from(temp.querySelectorAll(`figure.${DIAGRAM_CLASS}`));
|
|
400
|
+
const target = modelFigs[idx];
|
|
401
|
+
if (!target)
|
|
402
|
+
return;
|
|
403
|
+
const tmpl = document.createElement("template");
|
|
404
|
+
tmpl.innerHTML = newFigHtml;
|
|
405
|
+
target.replaceWith(tmpl.content.firstChild);
|
|
406
|
+
isRerendering = true;
|
|
407
|
+
editor.setContent(temp.innerHTML);
|
|
408
|
+
isRerendering = false;
|
|
409
|
+
};
|
|
410
|
+
const onFigureClick = (e) => {
|
|
411
|
+
const target = e.target;
|
|
412
|
+
// ── Alignment buttons ────────────────────────────────────────
|
|
413
|
+
const alignBtn = target.closest(`[data-align-btn]`);
|
|
414
|
+
if (alignBtn) {
|
|
415
|
+
e.preventDefault();
|
|
416
|
+
e.stopPropagation();
|
|
417
|
+
const fig = alignBtn.closest(`figure.${DIAGRAM_CLASS}`);
|
|
418
|
+
if (!fig)
|
|
419
|
+
return;
|
|
420
|
+
const newAlign = alignBtn.dataset.alignBtn;
|
|
421
|
+
const idx = figIndex(fig);
|
|
422
|
+
const temp = document.createElement("div");
|
|
423
|
+
temp.innerHTML = editor.getHTML();
|
|
424
|
+
const modelFigs = Array.from(temp.querySelectorAll(`figure.${DIAGRAM_CLASS}`));
|
|
425
|
+
if (modelFigs[idx]) {
|
|
426
|
+
modelFigs[idx].setAttribute("data-align", newAlign);
|
|
427
|
+
const contentDiv = modelFigs[idx].querySelector(`.${DIAGRAM_CLASS}__content`);
|
|
428
|
+
if (contentDiv)
|
|
429
|
+
contentDiv.style.justifyContent = alignToJustify(newAlign);
|
|
430
|
+
isRerendering = true;
|
|
431
|
+
editor.setContent(temp.innerHTML);
|
|
432
|
+
isRerendering = false;
|
|
433
|
+
}
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
// ── Delete button ────────────────────────────────────────────
|
|
437
|
+
if (target.closest(`.${DIAGRAM_CLASS}__remove`)) {
|
|
438
|
+
e.preventDefault();
|
|
439
|
+
e.stopPropagation();
|
|
440
|
+
const fig = target.closest(`figure.${DIAGRAM_CLASS}`);
|
|
441
|
+
if (!fig)
|
|
442
|
+
return;
|
|
443
|
+
const idx = figIndex(fig);
|
|
444
|
+
const temp = document.createElement("div");
|
|
445
|
+
temp.innerHTML = editor.getHTML();
|
|
446
|
+
const modelFigs = Array.from(temp.querySelectorAll(`figure.${DIAGRAM_CLASS}`));
|
|
447
|
+
if (idx >= 0 && modelFigs[idx]) {
|
|
448
|
+
// Remove the wrapping <p> too if it is empty after removal
|
|
449
|
+
const parent = modelFigs[idx].parentElement;
|
|
450
|
+
modelFigs[idx].remove();
|
|
451
|
+
if (parent && parent.tagName === "P" && !parent.textContent?.trim() && !parent.children.length) {
|
|
452
|
+
parent.remove();
|
|
453
|
+
}
|
|
454
|
+
isRerendering = true;
|
|
455
|
+
editor.setContent(temp.innerHTML);
|
|
456
|
+
isRerendering = false;
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
fig.remove();
|
|
460
|
+
}
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
// ── Edit click ───────────────────────────────────────────────
|
|
464
|
+
const fig = target.closest(`figure.${DIAGRAM_CLASS}`);
|
|
465
|
+
if (!fig)
|
|
466
|
+
return;
|
|
467
|
+
e.preventDefault();
|
|
468
|
+
const code = fig.dataset.diagram ?? "";
|
|
469
|
+
const idx = figIndex(fig);
|
|
470
|
+
const currentAlign = fig.dataset.align ?? "center";
|
|
471
|
+
openDiagramModal(host, options, code, currentAlign, (newCode, rendered, align) => {
|
|
472
|
+
commitFigureUpdate(idx, buildFigureHtml(newCode, rendered, align));
|
|
473
|
+
});
|
|
474
|
+
};
|
|
475
|
+
const offChange = editor.on("change", () => { void rerenderAll(); });
|
|
476
|
+
host.addEventListener("click", onFigureClick);
|
|
477
|
+
// Inject CSS
|
|
478
|
+
const styleId = "de-diagrams-styles";
|
|
479
|
+
if (!document.getElementById(styleId)) {
|
|
480
|
+
const style = document.createElement("style");
|
|
481
|
+
style.id = styleId;
|
|
482
|
+
style.textContent = `
|
|
483
|
+
figure.de-diagram{display:block;margin:1rem 0;padding:12px;border:1px solid var(--de-border,#e2e8f0);border-radius:8px;background:var(--de-content-bg,#fff);cursor:pointer;}
|
|
484
|
+
figure.de-diagram:hover{border-color:var(--de-primary,#2563eb);}
|
|
485
|
+
figure.de-diagram svg,figure.de-diagram img{max-width:100%;height:auto;}
|
|
486
|
+
.de-diagram__content{display:flex;}
|
|
487
|
+
figure.de-diagram .de-diagram__edit-hint{display:none;}
|
|
488
|
+
[contenteditable="true"] figure.de-diagram .de-diagram__edit-hint{display:flex;}
|
|
489
|
+
figure.de-diagram[data-align="left"] [data-align-btn="left"],
|
|
490
|
+
figure.de-diagram[data-align="center"] [data-align-btn="center"],
|
|
491
|
+
figure.de-diagram[data-align="right"] [data-align-btn="right"]{background:var(--de-primary,#2563eb)!important;color:#fff!important;border-color:var(--de-primary,#2563eb)!important;}
|
|
492
|
+
.de-diagram__remove:hover{background:rgba(220,38,38,.18)!important;color:#dc2626!important;}
|
|
493
|
+
`.trim();
|
|
494
|
+
document.head.appendChild(style);
|
|
495
|
+
}
|
|
496
|
+
// Initial render
|
|
497
|
+
void rerenderAll();
|
|
498
|
+
return () => {
|
|
499
|
+
offChange();
|
|
500
|
+
host.removeEventListener("click", onFigureClick);
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
};
|
|
504
|
+
}
|
|
505
|
+
/** Strip rendered content from diagram figures, leaving only the `data-diagram` source attribute. */
|
|
506
|
+
export function prepareDiagramsForExport(html) {
|
|
507
|
+
const template = document.createElement("template");
|
|
508
|
+
template.innerHTML = html;
|
|
509
|
+
for (const fig of Array.from(template.content.querySelectorAll(`figure.${DIAGRAM_CLASS}`))) {
|
|
510
|
+
const code = fig.dataset.diagram ?? "";
|
|
511
|
+
fig.innerHTML = `<pre class="${DIAGRAM_CLASS}__code">${escapeHtml(code)}</pre>`;
|
|
512
|
+
}
|
|
513
|
+
return template.innerHTML;
|
|
514
|
+
}
|
|
515
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@richhtmleditor/diagrams",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Mermaid / flowchart diagram blocks plugin for Rich HTML Editor.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": ["dist", "README.md"],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc -p tsconfig.json",
|
|
18
|
+
"prepack": "node ../../scripts/assert-pack-ready.mjs"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@richhtmleditor/core": "^1.1.0"
|
|
22
|
+
},
|
|
23
|
+
"keywords": ["richhtmleditor", "diagrams", "mermaid", "flowchart", "technical-docs"],
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"publishConfig": { "access": "public" },
|
|
26
|
+
"engines": { "node": ">=18" }
|
|
27
|
+
}
|