@lofcz/platejs-code-drawing 52.3.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/LICENSE +24 -0
- package/README.md +11 -0
- package/dist/BaseCodeDrawingPlugin-BTeDVejh.js +16 -0
- package/dist/BaseCodeDrawingPlugin-BTeDVejh.js.map +1 -0
- package/dist/index.d.ts +91 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +215 -0
- package/dist/index.js.map +1 -0
- package/dist/react/index.d.ts +5 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +9 -0
- package/dist/react/index.js.map +1 -0
- package/package.json +75 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) Ziad Beyens, Dylan Schiemann, Joe Anderson, Felix Feng
|
|
4
|
+
|
|
5
|
+
Unless otherwise specified in a LICENSE file within an individual package directory,
|
|
6
|
+
this license applies to all files in this repository outside of those package directories.
|
|
7
|
+
|
|
8
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
10
|
+
in the Software without restriction, including without limitation the rights
|
|
11
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
13
|
+
furnished to do so, subject to the following conditions:
|
|
14
|
+
|
|
15
|
+
The above copyright notice and this permission notice shall be included in
|
|
16
|
+
all copies or substantial portions of the Software.
|
|
17
|
+
|
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24
|
+
THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Plate code-drawing plugin
|
|
2
|
+
|
|
3
|
+
This package implements the code-drawing plugin for Plate, supporting PlantUml, Graphviz, Flowchart, and Mermaid diagrams.
|
|
4
|
+
|
|
5
|
+
## Documentation
|
|
6
|
+
|
|
7
|
+
Check out [Code Drawing](https://platejs.org/docs/code-drawing).
|
|
8
|
+
|
|
9
|
+
## License
|
|
10
|
+
|
|
11
|
+
[MIT](../../LICENSE)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createSlatePlugin } from "platejs";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/BaseCodeDrawingPlugin.ts
|
|
4
|
+
const CODE_DRAWING_KEY = "code_drawing";
|
|
5
|
+
/** Enables support for code drawing (PlantUml, Graphviz, Flowchart, Mermaid) within a Slate document */
|
|
6
|
+
const BaseCodeDrawingPlugin = createSlatePlugin({
|
|
7
|
+
key: CODE_DRAWING_KEY,
|
|
8
|
+
node: {
|
|
9
|
+
isElement: true,
|
|
10
|
+
isVoid: true
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { CODE_DRAWING_KEY as n, BaseCodeDrawingPlugin as t };
|
|
16
|
+
//# sourceMappingURL=BaseCodeDrawingPlugin-BTeDVejh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseCodeDrawingPlugin-BTeDVejh.js","names":["TElement","createSlatePlugin","CodeDrawingData","CODE_DRAWING_KEY","const","TCodeDrawingElement","data","BaseCodeDrawingPlugin","key","node","isElement","isVoid"],"sources":["../src/lib/BaseCodeDrawingPlugin.ts"],"sourcesContent":["import { type TElement, createSlatePlugin } from 'platejs';\n\nimport type { CodeDrawingData } from './types';\n\nexport const CODE_DRAWING_KEY = 'code_drawing' as const;\n\nexport interface TCodeDrawingElement extends TElement {\n data?: CodeDrawingData;\n}\n\n/** Enables support for code drawing (PlantUml, Graphviz, Flowchart, Mermaid) within a Slate document */\nexport const BaseCodeDrawingPlugin = createSlatePlugin({\n key: CODE_DRAWING_KEY,\n node: { isElement: true, isVoid: true },\n});\n"],"mappings":";;;AAIA,MAAaG,mBAAmB;;AAOhC,MAAaI,wBAAwBN,kBAAkB;CACrDO,KAAKL;CACLM,MAAM;EAAEC,WAAW;EAAMC,QAAQ;EAAK;CACvC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { InsertNodesOptions, NodeProps, SlateEditor, TElement } from "platejs";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/constants.d.ts
|
|
4
|
+
declare const CODE_DRAWING_TYPE: {
|
|
5
|
+
readonly PlantUml: "PlantUml";
|
|
6
|
+
readonly Graphviz: "Graphviz";
|
|
7
|
+
readonly Flowchart: "Flowchart";
|
|
8
|
+
readonly Mermaid: "Mermaid";
|
|
9
|
+
};
|
|
10
|
+
declare const CODE_DRAWING_TYPE_ARRAY: readonly [{
|
|
11
|
+
readonly value: "PlantUml";
|
|
12
|
+
readonly label: "PlantUml";
|
|
13
|
+
}, {
|
|
14
|
+
readonly value: "Graphviz";
|
|
15
|
+
readonly label: "Graphviz";
|
|
16
|
+
}, {
|
|
17
|
+
readonly value: "Flowchart";
|
|
18
|
+
readonly label: "Flowchart";
|
|
19
|
+
}, {
|
|
20
|
+
readonly value: "Mermaid";
|
|
21
|
+
readonly label: "Mermaid";
|
|
22
|
+
}];
|
|
23
|
+
type CodeDrawingType = (typeof CODE_DRAWING_TYPE)[keyof typeof CODE_DRAWING_TYPE];
|
|
24
|
+
declare const VIEW_MODE: {
|
|
25
|
+
readonly Both: "Both";
|
|
26
|
+
readonly Code: "Code";
|
|
27
|
+
readonly Image: "Image";
|
|
28
|
+
};
|
|
29
|
+
declare const VIEW_MODE_ARRAY: readonly [{
|
|
30
|
+
readonly value: "Both";
|
|
31
|
+
readonly label: "Both";
|
|
32
|
+
}, {
|
|
33
|
+
readonly value: "Code";
|
|
34
|
+
readonly label: "Code";
|
|
35
|
+
}, {
|
|
36
|
+
readonly value: "Image";
|
|
37
|
+
readonly label: "Image";
|
|
38
|
+
}];
|
|
39
|
+
type ViewMode = (typeof VIEW_MODE)[keyof typeof VIEW_MODE];
|
|
40
|
+
declare const DEFAULT_MIN_HEIGHT = 300;
|
|
41
|
+
declare const RENDER_DEBOUNCE_DELAY = 500;
|
|
42
|
+
declare const DOWNLOAD_FILENAME = "code-drawing.png";
|
|
43
|
+
//#endregion
|
|
44
|
+
//#region src/lib/types.d.ts
|
|
45
|
+
type CodeDrawingData = {
|
|
46
|
+
drawingType?: CodeDrawingType;
|
|
47
|
+
drawingMode?: ViewMode;
|
|
48
|
+
code?: string;
|
|
49
|
+
};
|
|
50
|
+
//#endregion
|
|
51
|
+
//#region src/lib/BaseCodeDrawingPlugin.d.ts
|
|
52
|
+
declare const CODE_DRAWING_KEY: "code_drawing";
|
|
53
|
+
interface TCodeDrawingElement extends TElement {
|
|
54
|
+
data?: CodeDrawingData;
|
|
55
|
+
}
|
|
56
|
+
/** Enables support for code drawing (PlantUml, Graphviz, Flowchart, Mermaid) within a Slate document */
|
|
57
|
+
declare const BaseCodeDrawingPlugin: any;
|
|
58
|
+
//#endregion
|
|
59
|
+
//#region src/lib/transforms/insertCodeDrawing.d.ts
|
|
60
|
+
declare const insertCodeDrawing: (editor: SlateEditor, props?: NodeProps<TCodeDrawingElement>, options?: InsertNodesOptions) => void;
|
|
61
|
+
//#endregion
|
|
62
|
+
//#region src/lib/utils/download.d.ts
|
|
63
|
+
/**
|
|
64
|
+
* Download image from data URL
|
|
65
|
+
*/
|
|
66
|
+
declare function downloadImage(imageDataUrl: string, filename?: string): void;
|
|
67
|
+
//#endregion
|
|
68
|
+
//#region src/lib/utils/renderers.d.ts
|
|
69
|
+
/**
|
|
70
|
+
* Render PlantUml diagram
|
|
71
|
+
* Uses plantuml-encoder to encode content and fetches SVG from PlantUml server
|
|
72
|
+
*/
|
|
73
|
+
declare function renderPlantUml(content: string): Promise<string>;
|
|
74
|
+
/**
|
|
75
|
+
* Render Graphviz diagram
|
|
76
|
+
* Uses viz.js to render Graphviz DOT syntax to SVG
|
|
77
|
+
*/
|
|
78
|
+
declare function renderGraphviz(content: string): Promise<string>;
|
|
79
|
+
/**
|
|
80
|
+
* Render Flowchart diagram
|
|
81
|
+
* Uses flowchart.js to parse and render flowchart syntax
|
|
82
|
+
*/
|
|
83
|
+
declare function renderFlowchart(content: string): Promise<string>;
|
|
84
|
+
declare function renderMermaid(content: string): Promise<string>;
|
|
85
|
+
/**
|
|
86
|
+
* Render code drawing based on type
|
|
87
|
+
*/
|
|
88
|
+
declare function renderCodeDrawing(type: CodeDrawingType, content: string): Promise<string>;
|
|
89
|
+
//#endregion
|
|
90
|
+
export { BaseCodeDrawingPlugin, CODE_DRAWING_KEY, CODE_DRAWING_TYPE, CODE_DRAWING_TYPE_ARRAY, CodeDrawingData, CodeDrawingType, DEFAULT_MIN_HEIGHT, DOWNLOAD_FILENAME, RENDER_DEBOUNCE_DELAY, TCodeDrawingElement, VIEW_MODE, VIEW_MODE_ARRAY, ViewMode, downloadImage, insertCodeDrawing, renderCodeDrawing, renderFlowchart, renderGraphviz, renderMermaid, renderPlantUml };
|
|
91
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/lib/constants.ts","../src/lib/types.ts","../src/lib/BaseCodeDrawingPlugin.ts","../src/lib/transforms/insertCodeDrawing.ts","../src/lib/utils/download.ts","../src/lib/utils/renderers.ts"],"sourcesContent":[],"mappings":";;;cAAa;;;EAAA,SAAA,SAAA,EAKH,WAAA;EAEG,SAAA,OAAA,EAAA,SAiBH;AAEV,CAAA;AAIa,cAvBA,uBA2BH,EAAA,SAAA,CAAA;EAEG,SAAA,KAAA,EAAA,UAaH;EAEE,SAAA,KAAQ,EAAA,UAAW;AAG/B,CAAA,EAAA;EACa,SAAA,KAAA,EAAA,UAAqB;EACrB,SAAA,KAAA,EAAA,UAAiB;;;;ACtD9B,CAAA,EAAA;;;;ACEa,KFsBD,eAAA,GEtB2C,CAAA,OFuB7C,iBEvB6C,CAAA,CAAA,MAAA,OFuBb,iBEvBa,CAAA;AAEtC,cFwBJ,SExBwB,EAAA;EAKxB,SAAA,IAAA,EAAA,MAAA;;;;ACNA,cH+BA,eGPZ,EAAA,SAAA,CAAA;EAvBS,SAAA,KAAA,EAAA,MAAA;EACS,SAAA,KAAA,EAAA,MAAA;CAAV,EAAA;EACE,SAAA,KAAA,EAAA,MAAA;EAAuB,SAAA,KAAA,EAAA,MAAA;;;;ACLlC,CAAA,CAAA;KJgDY,QAAA,WAAmB,wBAAwB;cAG1C,kBAAA;cACA,qBAAA;AKxBS,cLyBT,iBAAA,GKzBiD,kBAAA;;;KJ7BlD,eAAA;gBACI;EDHH,WAAA,CAAA,ECIG,QDCN;EAEG,IAAA,CAAA,EAAA,MAAA;AAmBb,CAAA;;;cEtBa;AFJA,UEMI,mBAAA,SAA4B,QFDnC,CAAA;EAEG,IAAA,CAAA,EEAJ,eFAI;AAmBb;AAIA;AAMa,cEzBA,qBFsCH,EAAA,GAAA;;;cG5CG,4BACH,qBACD,UAAU,gCACR;;;;;;AHRE,iBIGG,aAAA,CJEN,YAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,MAAA,CAAA,EAAA,IAAA;;;;;AALV;AAOA;AAmBY,iBKKU,cAAA,CLJZ,OAAA,EAAA,MAAgC,CAAA,EKIa,OLJb,CAAA,MAAiB,CAAA;AAG3D;AAMA;AAeA;AAGA;AACa,iBKAS,cAAA,CLAY,OAAA,EAAA,MAAA,CAAA,EKAqB,OLArB,CAAA,MAAA,CAAA;AAClC;;;;ACtDY,iBI8FU,eAAA,CJ7FN,OAAA,EAAA,MACA,CAAA,EI4FwC,OJ5FhC,CAAA,MAAA,CAAA;iBIuHF,aAAA,mBAAgC;;;AHvHtD;AAEiB,iBGgJK,iBAAA,CH/Ib,IAAA,EGgJD,eHjJ6C,EAAA,OAAA,EAAA,MAAA,CAAA,EGmJlD,OHnJkD,CAAA,MAAA,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { n as CODE_DRAWING_KEY, t as BaseCodeDrawingPlugin } from "./BaseCodeDrawingPlugin-BTeDVejh.js";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/constants.ts
|
|
4
|
+
const CODE_DRAWING_TYPE = {
|
|
5
|
+
PlantUml: "PlantUml",
|
|
6
|
+
Graphviz: "Graphviz",
|
|
7
|
+
Flowchart: "Flowchart",
|
|
8
|
+
Mermaid: "Mermaid"
|
|
9
|
+
};
|
|
10
|
+
const CODE_DRAWING_TYPE_ARRAY = [
|
|
11
|
+
{
|
|
12
|
+
value: CODE_DRAWING_TYPE.PlantUml,
|
|
13
|
+
label: CODE_DRAWING_TYPE.PlantUml
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
value: CODE_DRAWING_TYPE.Graphviz,
|
|
17
|
+
label: CODE_DRAWING_TYPE.Graphviz
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
value: CODE_DRAWING_TYPE.Flowchart,
|
|
21
|
+
label: CODE_DRAWING_TYPE.Flowchart
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
value: CODE_DRAWING_TYPE.Mermaid,
|
|
25
|
+
label: CODE_DRAWING_TYPE.Mermaid
|
|
26
|
+
}
|
|
27
|
+
];
|
|
28
|
+
const VIEW_MODE = {
|
|
29
|
+
Both: "Both",
|
|
30
|
+
Code: "Code",
|
|
31
|
+
Image: "Image"
|
|
32
|
+
};
|
|
33
|
+
const VIEW_MODE_ARRAY = [
|
|
34
|
+
{
|
|
35
|
+
value: VIEW_MODE.Both,
|
|
36
|
+
label: VIEW_MODE.Both
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
value: VIEW_MODE.Code,
|
|
40
|
+
label: VIEW_MODE.Code
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
value: VIEW_MODE.Image,
|
|
44
|
+
label: VIEW_MODE.Image
|
|
45
|
+
}
|
|
46
|
+
];
|
|
47
|
+
const DEFAULT_MIN_HEIGHT = 300;
|
|
48
|
+
const RENDER_DEBOUNCE_DELAY = 500;
|
|
49
|
+
const DOWNLOAD_FILENAME = "code-drawing.png";
|
|
50
|
+
|
|
51
|
+
//#endregion
|
|
52
|
+
//#region src/lib/transforms/insertCodeDrawing.ts
|
|
53
|
+
const insertCodeDrawing = (editor, props = {}, options = {}) => {
|
|
54
|
+
editor.tf.insertNodes({
|
|
55
|
+
children: [{ text: "" }],
|
|
56
|
+
type: editor.getType(CODE_DRAWING_KEY),
|
|
57
|
+
data: {
|
|
58
|
+
drawingType: "Mermaid",
|
|
59
|
+
drawingMode: "Both",
|
|
60
|
+
code: "",
|
|
61
|
+
...typeof props.data === "object" && props.data !== null ? props.data : {}
|
|
62
|
+
},
|
|
63
|
+
...props && typeof props === "object" ? props : {}
|
|
64
|
+
}, {
|
|
65
|
+
nextBlock: true,
|
|
66
|
+
...options && typeof options === "object" ? options : {}
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
//#endregion
|
|
71
|
+
//#region src/lib/utils/download.ts
|
|
72
|
+
/**
|
|
73
|
+
* Download image from data URL
|
|
74
|
+
*/
|
|
75
|
+
function downloadImage(imageDataUrl, filename = "code-drawing.png") {
|
|
76
|
+
const imageEl = new Image();
|
|
77
|
+
imageEl.src = imageDataUrl;
|
|
78
|
+
imageEl.onload = () => {
|
|
79
|
+
const canvas = document.createElement("canvas");
|
|
80
|
+
canvas.width = imageEl.width;
|
|
81
|
+
canvas.height = imageEl.height;
|
|
82
|
+
const context = canvas.getContext("2d");
|
|
83
|
+
if (context) {
|
|
84
|
+
context.drawImage(imageEl, 0, 0);
|
|
85
|
+
const a = document.createElement("a");
|
|
86
|
+
a.href = canvas.toDataURL("image/png");
|
|
87
|
+
a.download = filename;
|
|
88
|
+
a.click();
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
//#endregion
|
|
94
|
+
//#region src/lib/utils/renderers.ts
|
|
95
|
+
/**
|
|
96
|
+
* Generate a random string for unique IDs
|
|
97
|
+
*/
|
|
98
|
+
function randomString(length, type = "lowerCase") {
|
|
99
|
+
const chars = type === "lowerCase" ? "abcdefghijklmnopqrstuvwxyz" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
100
|
+
let result = "";
|
|
101
|
+
for (let i = 0; i < length; i++) result += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Convert SVG string to data URL
|
|
106
|
+
*/
|
|
107
|
+
function svgToDataUrl(svg) {
|
|
108
|
+
return `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(svg)))}`;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Render PlantUml diagram
|
|
112
|
+
* Uses plantuml-encoder to encode content and fetches SVG from PlantUml server
|
|
113
|
+
*/
|
|
114
|
+
async function renderPlantUml(content) {
|
|
115
|
+
try {
|
|
116
|
+
const svgUrl = `https://www.plantuml.com/plantuml/svg/${(await import("plantuml-encoder")).default.encode(content)}`;
|
|
117
|
+
const response = await fetch(svgUrl);
|
|
118
|
+
if (!response.ok) throw new Error("Failed to fetch PlantUml SVG");
|
|
119
|
+
return svgToDataUrl(await response.text());
|
|
120
|
+
} catch (error) {
|
|
121
|
+
console.error("PlantUml rendering error:", error);
|
|
122
|
+
throw error;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Render Graphviz diagram
|
|
127
|
+
* Uses viz.js to render Graphviz DOT syntax to SVG
|
|
128
|
+
*/
|
|
129
|
+
async function renderGraphviz(content) {
|
|
130
|
+
try {
|
|
131
|
+
let Viz;
|
|
132
|
+
let Module;
|
|
133
|
+
let render;
|
|
134
|
+
try {
|
|
135
|
+
const vizModule = await import("viz.js");
|
|
136
|
+
Viz = vizModule.default || vizModule;
|
|
137
|
+
const fullRender = await import("viz.js/full.render.js");
|
|
138
|
+
Module = fullRender.Module;
|
|
139
|
+
render = fullRender.render;
|
|
140
|
+
} catch (_importError) {
|
|
141
|
+
const vizModule = await import("viz.js");
|
|
142
|
+
Viz = vizModule.default || vizModule;
|
|
143
|
+
const fullRender = await import("viz.js/full.render");
|
|
144
|
+
Module = fullRender.Module;
|
|
145
|
+
render = fullRender.render;
|
|
146
|
+
}
|
|
147
|
+
return svgToDataUrl(await new Viz({
|
|
148
|
+
Module,
|
|
149
|
+
render
|
|
150
|
+
}).renderString(content, {
|
|
151
|
+
format: "svg",
|
|
152
|
+
engine: "dot"
|
|
153
|
+
}));
|
|
154
|
+
} catch (error) {
|
|
155
|
+
console.error("Graphviz rendering error:", error);
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Render Flowchart diagram
|
|
161
|
+
* Uses flowchart.js to parse and render flowchart syntax
|
|
162
|
+
*/
|
|
163
|
+
async function renderFlowchart(content) {
|
|
164
|
+
try {
|
|
165
|
+
const chart = (await import("flowchart.js")).default.parse(content);
|
|
166
|
+
const el = document.createElement("div");
|
|
167
|
+
el.style.display = "none";
|
|
168
|
+
document.body.appendChild(el);
|
|
169
|
+
chart.drawSVG(el);
|
|
170
|
+
const svg = el.innerHTML;
|
|
171
|
+
document.body.removeChild(el);
|
|
172
|
+
return svgToDataUrl(svg);
|
|
173
|
+
} catch (error) {
|
|
174
|
+
console.error("Flowchart rendering error:", error);
|
|
175
|
+
throw error;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Render Mermaid diagram
|
|
180
|
+
* Uses mermaid to render Mermaid syntax
|
|
181
|
+
*/
|
|
182
|
+
let mermaidInitialized = false;
|
|
183
|
+
async function renderMermaid(content) {
|
|
184
|
+
try {
|
|
185
|
+
const mermaid = await import("mermaid");
|
|
186
|
+
if (!mermaidInitialized) {
|
|
187
|
+
mermaid.default.initialize({ startOnLoad: false });
|
|
188
|
+
mermaidInitialized = true;
|
|
189
|
+
}
|
|
190
|
+
const id = `mermaid-${randomString(6, "lowerCase")}`;
|
|
191
|
+
const { svg } = await mermaid.default.render(id, content);
|
|
192
|
+
if (svg) return svgToDataUrl(svg);
|
|
193
|
+
throw new Error("Mermaid rendering failed");
|
|
194
|
+
} catch (error) {
|
|
195
|
+
console.error("Mermaid rendering error:", error);
|
|
196
|
+
throw error;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Render code drawing based on type
|
|
201
|
+
*/
|
|
202
|
+
async function renderCodeDrawing(type, content) {
|
|
203
|
+
if (!content || !content.trim()) return "";
|
|
204
|
+
switch (type) {
|
|
205
|
+
case "PlantUml": return renderPlantUml(content);
|
|
206
|
+
case "Graphviz": return renderGraphviz(content);
|
|
207
|
+
case "Flowchart": return renderFlowchart(content);
|
|
208
|
+
case "Mermaid": return renderMermaid(content);
|
|
209
|
+
default: throw new Error(`Unsupported drawing type: ${type}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
//#endregion
|
|
214
|
+
export { BaseCodeDrawingPlugin, CODE_DRAWING_KEY, CODE_DRAWING_TYPE, CODE_DRAWING_TYPE_ARRAY, DEFAULT_MIN_HEIGHT, DOWNLOAD_FILENAME, RENDER_DEBOUNCE_DELAY, VIEW_MODE, VIEW_MODE_ARRAY, downloadImage, insertCodeDrawing, renderCodeDrawing, renderFlowchart, renderGraphviz, renderMermaid, renderPlantUml };
|
|
215
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["CODE_DRAWING_TYPE","PlantUml","Graphviz","Flowchart","Mermaid","const","CODE_DRAWING_TYPE_ARRAY","value","label","CodeDrawingType","VIEW_MODE","Both","Code","Image","VIEW_MODE_ARRAY","ViewMode","DEFAULT_MIN_HEIGHT","RENDER_DEBOUNCE_DELAY","DOWNLOAD_FILENAME","InsertNodesOptions","NodeProps","SlateEditor","TCodeDrawingElement","CODE_DRAWING_KEY","insertCodeDrawing","editor","props","options","tf","insertNodes","children","text","type","getType","data","drawingType","drawingMode","code","nextBlock","downloadImage","imageDataUrl","filename","imageEl","Image","src","onload","canvas","document","createElement","width","height","context","getContext","drawImage","a","href","toDataURL","download","click","CodeDrawingType","randomString","length","type","chars","result","i","charAt","Math","floor","random","svgToDataUrl","svg","window","btoa","unescape","encodeURIComponent","renderPlantUml","content","Promise","plantumlEncoder","encoded","default","encode","svgUrl","response","fetch","ok","Error","text","error","console","renderGraphviz","Viz","Module","render","vizModule","fullRender","_importError","viz","renderString","format","engine","renderFlowchart","flowchart","chart","parse","el","document","createElement","style","display","body","appendChild","drawSVG","innerHTML","removeChild","mermaidInitialized","renderMermaid","mermaid","initialize","startOnLoad","id","renderCodeDrawing","trim"],"sources":["../src/lib/constants.ts","../src/lib/transforms/insertCodeDrawing.ts","../src/lib/utils/download.ts","../src/lib/utils/renderers.ts"],"sourcesContent":["export const CODE_DRAWING_TYPE = {\n PlantUml: 'PlantUml',\n Graphviz: 'Graphviz',\n Flowchart: 'Flowchart',\n Mermaid: 'Mermaid',\n} as const;\n\nexport const CODE_DRAWING_TYPE_ARRAY = [\n {\n value: CODE_DRAWING_TYPE.PlantUml,\n label: CODE_DRAWING_TYPE.PlantUml,\n },\n {\n value: CODE_DRAWING_TYPE.Graphviz,\n label: CODE_DRAWING_TYPE.Graphviz,\n },\n {\n value: CODE_DRAWING_TYPE.Flowchart,\n label: CODE_DRAWING_TYPE.Flowchart,\n },\n {\n value: CODE_DRAWING_TYPE.Mermaid,\n label: CODE_DRAWING_TYPE.Mermaid,\n },\n] as const;\n\nexport type CodeDrawingType =\n (typeof CODE_DRAWING_TYPE)[keyof typeof CODE_DRAWING_TYPE];\n\n// View mode constants\nexport const VIEW_MODE = {\n Both: 'Both',\n Code: 'Code',\n Image: 'Image',\n} as const;\n\nexport const VIEW_MODE_ARRAY = [\n {\n value: VIEW_MODE.Both,\n label: VIEW_MODE.Both,\n },\n {\n value: VIEW_MODE.Code,\n label: VIEW_MODE.Code,\n },\n {\n value: VIEW_MODE.Image,\n label: VIEW_MODE.Image,\n },\n] as const;\n\nexport type ViewMode = (typeof VIEW_MODE)[keyof typeof VIEW_MODE];\n\n// UI constants\nexport const DEFAULT_MIN_HEIGHT = 300;\nexport const RENDER_DEBOUNCE_DELAY = 500;\nexport const DOWNLOAD_FILENAME = 'code-drawing.png';\n","import type { InsertNodesOptions, NodeProps, SlateEditor } from 'platejs';\n\nimport type { TCodeDrawingElement } from '../BaseCodeDrawingPlugin';\nimport { CODE_DRAWING_KEY } from '../BaseCodeDrawingPlugin';\n\nexport const insertCodeDrawing = (\n editor: SlateEditor,\n props: NodeProps<TCodeDrawingElement> = {},\n options: InsertNodesOptions = {}\n): void => {\n editor.tf.insertNodes<TCodeDrawingElement>(\n {\n children: [{ text: '' }],\n type: editor.getType(CODE_DRAWING_KEY),\n data: {\n drawingType: 'Mermaid',\n drawingMode: 'Both',\n code: '',\n ...(typeof props.data === 'object' && props.data !== null\n ? props.data\n : {}),\n },\n ...(props && typeof props === 'object' ? props : {}),\n },\n {\n nextBlock: true,\n ...(options && typeof options === 'object' ? options : {}),\n }\n );\n};\n","/**\n * Download image from data URL\n */\nexport function downloadImage(\n imageDataUrl: string,\n filename = 'code-drawing.png'\n): void {\n const imageEl = new Image();\n imageEl.src = imageDataUrl;\n imageEl.onload = () => {\n const canvas = document.createElement('canvas');\n canvas.width = imageEl.width;\n canvas.height = imageEl.height;\n const context = canvas.getContext('2d');\n if (context) {\n context.drawImage(imageEl, 0, 0);\n const a = document.createElement('a');\n a.href = canvas.toDataURL('image/png');\n a.download = filename;\n a.click();\n }\n };\n}\n","import type { CodeDrawingType } from '../constants';\n\n/**\n * Generate a random string for unique IDs\n */\nfunction randomString(\n length: number,\n type: 'lowerCase' | 'upperCase' = 'lowerCase'\n): string {\n const chars =\n type === 'lowerCase'\n ? 'abcdefghijklmnopqrstuvwxyz'\n : 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let result = '';\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n}\n\n/**\n * Convert SVG string to data URL\n */\nfunction svgToDataUrl(svg: string): string {\n return `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(svg)))}`;\n}\n\n/**\n * Render PlantUml diagram\n * Uses plantuml-encoder to encode content and fetches SVG from PlantUml server\n */\nexport async function renderPlantUml(content: string): Promise<string> {\n try {\n // Dynamic import of plantuml-encoder\n const plantumlEncoder = await import('plantuml-encoder');\n const encoded = plantumlEncoder.default.encode(content);\n const svgUrl = `https://www.plantuml.com/plantuml/svg/${encoded}`;\n\n // Fetch SVG\n const response = await fetch(svgUrl);\n if (!response.ok) {\n throw new Error('Failed to fetch PlantUml SVG');\n }\n const svg = await response.text();\n return svgToDataUrl(svg);\n } catch (error) {\n console.error('PlantUml rendering error:', error);\n throw error;\n }\n}\n\n/**\n * Render Graphviz diagram\n * Uses viz.js to render Graphviz DOT syntax to SVG\n */\nexport async function renderGraphviz(content: string): Promise<string> {\n try {\n // Dynamic import of viz.js\n // Try different import patterns for compatibility\n let Viz: any;\n let Module: any;\n let render: any;\n\n try {\n const vizModule = await import('viz.js');\n Viz = vizModule.default || vizModule;\n\n const fullRender = await import('viz.js/full.render.js');\n Module = fullRender.Module;\n render = fullRender.render;\n } catch (_importError) {\n // Fallback: try alternative import\n const vizModule = await import('viz.js');\n Viz = vizModule.default || vizModule;\n const fullRender = await import('viz.js/full.render');\n Module = fullRender.Module;\n render = fullRender.render;\n }\n\n const viz = new Viz({ Module, render });\n const svg = await viz.renderString(content, {\n format: 'svg',\n engine: 'dot',\n });\n\n return svgToDataUrl(svg);\n } catch (error) {\n console.error('Graphviz rendering error:', error);\n throw error;\n }\n}\n\n/**\n * Render Flowchart diagram\n * Uses flowchart.js to parse and render flowchart syntax\n */\nexport async function renderFlowchart(content: string): Promise<string> {\n try {\n // Dynamic import of flowchart.js\n const flowchart = (await import('flowchart.js')).default;\n\n const chart = flowchart.parse(content);\n const el = document.createElement('div');\n el.style.display = 'none';\n document.body.appendChild(el);\n\n chart.drawSVG(el);\n const svg = el.innerHTML;\n document.body.removeChild(el);\n\n return svgToDataUrl(svg);\n } catch (error) {\n console.error('Flowchart rendering error:', error);\n throw error;\n }\n}\n\n/**\n * Render Mermaid diagram\n * Uses mermaid to render Mermaid syntax\n */\nlet mermaidInitialized = false;\n\nexport async function renderMermaid(content: string): Promise<string> {\n try {\n // Dynamic import of mermaid\n const mermaid = await import('mermaid');\n\n if (!mermaidInitialized) {\n mermaid.default.initialize({ startOnLoad: false });\n mermaidInitialized = true;\n }\n\n const id = `mermaid-${randomString(6, 'lowerCase')}`;\n const { svg } = await mermaid.default.render(id, content);\n\n if (svg) {\n return svgToDataUrl(svg);\n }\n\n throw new Error('Mermaid rendering failed');\n } catch (error) {\n console.error('Mermaid rendering error:', error);\n throw error;\n }\n}\n\n/**\n * Render code drawing based on type\n */\nexport async function renderCodeDrawing(\n type: CodeDrawingType,\n content: string\n): Promise<string> {\n if (!content || !content.trim()) {\n return '';\n }\n\n switch (type) {\n case 'PlantUml':\n return renderPlantUml(content);\n case 'Graphviz':\n return renderGraphviz(content);\n case 'Flowchart':\n return renderFlowchart(content);\n case 'Mermaid':\n return renderMermaid(content);\n default:\n throw new Error(`Unsupported drawing type: ${type}`);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/react/CodeDrawingPlugin.tsx"],"sourcesContent":[],"mappings":";cAIa"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { t as BaseCodeDrawingPlugin } from "../BaseCodeDrawingPlugin-BTeDVejh.js";
|
|
2
|
+
import { toPlatePlugin } from "platejs/react";
|
|
3
|
+
|
|
4
|
+
//#region src/react/CodeDrawingPlugin.tsx
|
|
5
|
+
const CodeDrawingPlugin = toPlatePlugin(BaseCodeDrawingPlugin);
|
|
6
|
+
|
|
7
|
+
//#endregion
|
|
8
|
+
export { CodeDrawingPlugin };
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["toPlatePlugin","BaseCodeDrawingPlugin","CodeDrawingPlugin"],"sources":["../../src/react/CodeDrawingPlugin.tsx"],"sourcesContent":["import { toPlatePlugin } from 'platejs/react';\n\nimport { BaseCodeDrawingPlugin } from '../lib';\n\nexport const CodeDrawingPlugin = toPlatePlugin(BaseCodeDrawingPlugin);\n"],"mappings":";;;;AAIA,MAAaE,oBAAoBF,cAAcC,sBAAsB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lofcz/platejs-code-drawing",
|
|
3
|
+
"version": "52.3.0",
|
|
4
|
+
"description": "Code drawing plugin for Plate (PlantUml, Graphviz, Flowchart, Mermaid)",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"plate",
|
|
7
|
+
"plugin",
|
|
8
|
+
"slate",
|
|
9
|
+
"code-drawing",
|
|
10
|
+
"plantuml",
|
|
11
|
+
"graphviz",
|
|
12
|
+
"flowchart",
|
|
13
|
+
"mermaid"
|
|
14
|
+
],
|
|
15
|
+
"homepage": "https://platejs.org",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/udecode/plate/issues"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "https://github.com/lofcz/plate.git",
|
|
22
|
+
"directory": "packages/code-drawing"
|
|
23
|
+
},
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"sideEffects": false,
|
|
26
|
+
"exports": {
|
|
27
|
+
".": "./dist/index.js",
|
|
28
|
+
"./react": "./dist/react/index.js",
|
|
29
|
+
"./package.json": "./package.json"
|
|
30
|
+
},
|
|
31
|
+
"main": "./dist/index.js",
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"files": [
|
|
34
|
+
"dist/**/*"
|
|
35
|
+
],
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@codemirror/lang-javascript": "6.2.4",
|
|
38
|
+
"@codemirror/theme-one-dark": "6.1.3",
|
|
39
|
+
"@uiw/react-codemirror": "4.25.4",
|
|
40
|
+
"flowchart.js": "^1.15.0",
|
|
41
|
+
"lodash": "^4.17.21",
|
|
42
|
+
"mermaid": "^11.6.1",
|
|
43
|
+
"plantuml-encoder": "^1.4.0",
|
|
44
|
+
"react-compiler-runtime": "^1.0.0",
|
|
45
|
+
"viz.js": "^2.1.2",
|
|
46
|
+
"@platejs/utils": "npm:@lofcz/platejs-utils@52.3.4"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/lodash": "^4.17.13",
|
|
50
|
+
"@types/plantuml-encoder": "^1.4.2",
|
|
51
|
+
"@types/viz.js": "^2.1.5",
|
|
52
|
+
"@plate/scripts": "1.0.0"
|
|
53
|
+
},
|
|
54
|
+
"peerDependencies": {
|
|
55
|
+
"platejs": ">=52.0.11",
|
|
56
|
+
"react": ">=18.0.0",
|
|
57
|
+
"react-dom": ">=18.0.0"
|
|
58
|
+
},
|
|
59
|
+
"publishConfig": {
|
|
60
|
+
"access": "public"
|
|
61
|
+
},
|
|
62
|
+
"type": "module",
|
|
63
|
+
"module": "./dist/index.js",
|
|
64
|
+
"scripts": {
|
|
65
|
+
"brl": "plate-pkg p:brl",
|
|
66
|
+
"build": "plate-pkg p:build",
|
|
67
|
+
"build:watch": "plate-pkg p:build:watch",
|
|
68
|
+
"clean": "plate-pkg p:clean",
|
|
69
|
+
"lint": "plate-pkg p:lint",
|
|
70
|
+
"lint:fix": "plate-pkg p:lint:fix",
|
|
71
|
+
"test": "plate-pkg p:test",
|
|
72
|
+
"test:watch": "plate-pkg p:test:watch",
|
|
73
|
+
"typecheck": "plate-pkg p:typecheck"
|
|
74
|
+
}
|
|
75
|
+
}
|