@jupyterlab/mermaid 4.1.0-alpha.1
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 +3 -0
- package/lib/index.d.ts +8 -0
- package/lib/index.js +11 -0
- package/lib/index.js.map +1 -0
- package/lib/manager.d.ts +65 -0
- package/lib/manager.js +258 -0
- package/lib/manager.js.map +1 -0
- package/lib/markdown.d.ts +29 -0
- package/lib/markdown.js +30 -0
- package/lib/markdown.js.map +1 -0
- package/lib/mime.d.ts +30 -0
- package/lib/mime.js +98 -0
- package/lib/mime.js.map +1 -0
- package/lib/tokens.d.ts +88 -0
- package/lib/tokens.js +24 -0
- package/lib/tokens.js.map +1 -0
- package/package.json +62 -0
- package/src/index.ts +11 -0
- package/src/manager.ts +325 -0
- package/src/markdown.ts +48 -0
- package/src/mime.ts +118 -0
- package/src/tokens.ts +112 -0
- package/style/base.css +47 -0
- package/style/index.css +9 -0
- package/style/index.js +10 -0
package/README.md
ADDED
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
/**
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
* @module mermaid
|
|
6
|
+
*/
|
|
7
|
+
export * from './manager';
|
|
8
|
+
export * from './markdown';
|
|
9
|
+
export * from './mime';
|
|
10
|
+
export * from './tokens';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAC3D;;;GAGG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC"}
|
package/lib/manager.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type MermaidType from 'mermaid';
|
|
2
|
+
import { LruCache } from '@jupyterlab/coreutils';
|
|
3
|
+
import { IThemeManager } from '@jupyterlab/apputils';
|
|
4
|
+
import { IMermaidManager } from './tokens';
|
|
5
|
+
/**
|
|
6
|
+
* A mermaid diagram manager with cache.
|
|
7
|
+
*/
|
|
8
|
+
export declare class MermaidManager implements IMermaidManager {
|
|
9
|
+
protected _diagrams: LruCache<string, HTMLElement>;
|
|
10
|
+
protected _themes: IThemeManager | null;
|
|
11
|
+
constructor(options?: MermaidManager.IOptions);
|
|
12
|
+
/**
|
|
13
|
+
* Handle (re)-initializing mermaid based on external values.
|
|
14
|
+
*/
|
|
15
|
+
initialize(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Get the underlying, potentially un-initialized mermaid module.
|
|
18
|
+
*/
|
|
19
|
+
getMermaid(): Promise<typeof MermaidType>;
|
|
20
|
+
/**
|
|
21
|
+
* Get the version of the currently-loaded mermaid module
|
|
22
|
+
*/
|
|
23
|
+
getMermaidVersion(): string | null;
|
|
24
|
+
/**
|
|
25
|
+
* Get a pre-cached mermaid figure.
|
|
26
|
+
*
|
|
27
|
+
* This primarily exists for the needs of `marked`, which supports async node
|
|
28
|
+
* visitors, but not async rendering.
|
|
29
|
+
*/
|
|
30
|
+
getCachedFigure(text: string): HTMLElement | null;
|
|
31
|
+
/**
|
|
32
|
+
* Attempt a raw rendering of mermaid to an SVG string, extracting some metadata.
|
|
33
|
+
*/
|
|
34
|
+
renderSvg(text: string): Promise<IMermaidManager.IRenderInfo>;
|
|
35
|
+
/**
|
|
36
|
+
* Provide and cache a fully-rendered element, checking the cache first.
|
|
37
|
+
*/
|
|
38
|
+
renderFigure(text: string): Promise<HTMLElement>;
|
|
39
|
+
/**
|
|
40
|
+
* Provide a code block with the mermaid source.
|
|
41
|
+
*/
|
|
42
|
+
makeMermaidCode(text: string): HTMLElement;
|
|
43
|
+
/**
|
|
44
|
+
* Get the parser message element from a failed parse.
|
|
45
|
+
*
|
|
46
|
+
* This doesn't do much of anything if the text is successfully parsed.
|
|
47
|
+
*/
|
|
48
|
+
makeMermaidError(text: string): Promise<HTMLElement>;
|
|
49
|
+
/**
|
|
50
|
+
* Extract extra attributes to add to a generated figure.
|
|
51
|
+
*/
|
|
52
|
+
makeMermaidFigure(info: IMermaidManager.IRenderInfo): HTMLElement;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* A namespace for implementation-specific details of this mermaid manager.
|
|
56
|
+
*/
|
|
57
|
+
export declare namespace MermaidManager {
|
|
58
|
+
/**
|
|
59
|
+
* Initialization options for the mermaid manager.
|
|
60
|
+
*/
|
|
61
|
+
interface IOptions {
|
|
62
|
+
maxCacheSize?: number | null;
|
|
63
|
+
themes?: IThemeManager | null;
|
|
64
|
+
}
|
|
65
|
+
}
|
package/lib/manager.js
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
import { PromiseDelegate } from '@lumino/coreutils';
|
|
4
|
+
import { LruCache } from '@jupyterlab/coreutils';
|
|
5
|
+
import { DETAILS_CLASS, MERMAID_CLASS, MERMAID_CODE_CLASS, MERMAID_DARK_THEME, MERMAID_DEFAULT_THEME, SUMMARY_CLASS, WARNING_CLASS } from './tokens';
|
|
6
|
+
/**
|
|
7
|
+
* A mermaid diagram manager with cache.
|
|
8
|
+
*/
|
|
9
|
+
export class MermaidManager {
|
|
10
|
+
constructor(options = {}) {
|
|
11
|
+
this._diagrams = new LruCache({ maxSize: options.maxCacheSize || null });
|
|
12
|
+
// handle reacting to themes
|
|
13
|
+
if (options.themes) {
|
|
14
|
+
Private.initThemes(options.themes || null);
|
|
15
|
+
options.themes.themeChanged.connect(this.initialize, this);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Handle (re)-initializing mermaid based on external values.
|
|
20
|
+
*/
|
|
21
|
+
initialize() {
|
|
22
|
+
this._diagrams.clear();
|
|
23
|
+
Private.initMermaid();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get the underlying, potentially un-initialized mermaid module.
|
|
27
|
+
*/
|
|
28
|
+
async getMermaid() {
|
|
29
|
+
return await Private.ensureMermaid();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get the version of the currently-loaded mermaid module
|
|
33
|
+
*/
|
|
34
|
+
getMermaidVersion() {
|
|
35
|
+
return Private.version();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get a pre-cached mermaid figure.
|
|
39
|
+
*
|
|
40
|
+
* This primarily exists for the needs of `marked`, which supports async node
|
|
41
|
+
* visitors, but not async rendering.
|
|
42
|
+
*/
|
|
43
|
+
getCachedFigure(text) {
|
|
44
|
+
return this._diagrams.get(text);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Attempt a raw rendering of mermaid to an SVG string, extracting some metadata.
|
|
48
|
+
*/
|
|
49
|
+
async renderSvg(text) {
|
|
50
|
+
const _mermaid = await this.getMermaid();
|
|
51
|
+
const id = `jp-mermaid-${Private.nextMermaidId()}`;
|
|
52
|
+
// create temporary element into which to render
|
|
53
|
+
const el = document.createElement('div');
|
|
54
|
+
document.body.appendChild(el);
|
|
55
|
+
try {
|
|
56
|
+
const { svg } = await _mermaid.render(id, text, el);
|
|
57
|
+
const parser = new DOMParser();
|
|
58
|
+
const doc = parser.parseFromString(svg, 'image/svg+xml');
|
|
59
|
+
const info = { text, svg };
|
|
60
|
+
const svgEl = doc.querySelector('svg');
|
|
61
|
+
const { maxWidth } = (svgEl === null || svgEl === void 0 ? void 0 : svgEl.style) || {};
|
|
62
|
+
info.width = maxWidth ? parseFloat(maxWidth) : null;
|
|
63
|
+
const firstTitle = doc.querySelector('title');
|
|
64
|
+
const firstDesc = doc.querySelector('desc');
|
|
65
|
+
if (firstTitle) {
|
|
66
|
+
info.accessibleTitle = firstTitle.textContent;
|
|
67
|
+
}
|
|
68
|
+
if (firstDesc) {
|
|
69
|
+
info.accessibleDescription = firstDesc.textContent;
|
|
70
|
+
}
|
|
71
|
+
return info;
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
el.remove();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Provide and cache a fully-rendered element, checking the cache first.
|
|
79
|
+
*/
|
|
80
|
+
async renderFigure(text) {
|
|
81
|
+
// bail if already cached
|
|
82
|
+
let output = this._diagrams.get(text);
|
|
83
|
+
if (output != null) {
|
|
84
|
+
return output;
|
|
85
|
+
}
|
|
86
|
+
let className = MERMAID_CLASS;
|
|
87
|
+
let result = null;
|
|
88
|
+
// the element that will be returned
|
|
89
|
+
output = document.createElement('div');
|
|
90
|
+
output.className = className;
|
|
91
|
+
try {
|
|
92
|
+
const response = await this.renderSvg(text);
|
|
93
|
+
result = this.makeMermaidFigure(response);
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
output.classList.add(WARNING_CLASS);
|
|
97
|
+
result = await this.makeMermaidError(text);
|
|
98
|
+
}
|
|
99
|
+
let version = this.getMermaidVersion();
|
|
100
|
+
if (version) {
|
|
101
|
+
result.dataset.jpMermaidVersion = version;
|
|
102
|
+
}
|
|
103
|
+
output.appendChild(result);
|
|
104
|
+
// update the cache for use when rendering synchronously
|
|
105
|
+
this._diagrams.set(text, output);
|
|
106
|
+
return output;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Provide a code block with the mermaid source.
|
|
110
|
+
*/
|
|
111
|
+
makeMermaidCode(text) {
|
|
112
|
+
// append the source
|
|
113
|
+
const pre = document.createElement('pre');
|
|
114
|
+
const code = document.createElement('code');
|
|
115
|
+
code.innerText = text;
|
|
116
|
+
pre.appendChild(code);
|
|
117
|
+
code.className = MERMAID_CODE_CLASS;
|
|
118
|
+
code.textContent = text;
|
|
119
|
+
return pre;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get the parser message element from a failed parse.
|
|
123
|
+
*
|
|
124
|
+
* This doesn't do much of anything if the text is successfully parsed.
|
|
125
|
+
*/
|
|
126
|
+
async makeMermaidError(text) {
|
|
127
|
+
const _mermaid = await this.getMermaid();
|
|
128
|
+
let errorMessage = '';
|
|
129
|
+
try {
|
|
130
|
+
await _mermaid.parse(text);
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
errorMessage = `${err}`;
|
|
134
|
+
}
|
|
135
|
+
const result = document.createElement('details');
|
|
136
|
+
result.className = DETAILS_CLASS;
|
|
137
|
+
const summary = document.createElement('summary');
|
|
138
|
+
summary.className = SUMMARY_CLASS;
|
|
139
|
+
summary.appendChild(this.makeMermaidCode(text));
|
|
140
|
+
result.appendChild(summary);
|
|
141
|
+
const warning = document.createElement('pre');
|
|
142
|
+
warning.innerText = errorMessage;
|
|
143
|
+
result.appendChild(warning);
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Extract extra attributes to add to a generated figure.
|
|
148
|
+
*/
|
|
149
|
+
makeMermaidFigure(info) {
|
|
150
|
+
const figure = document.createElement('figure');
|
|
151
|
+
const img = document.createElement('img');
|
|
152
|
+
figure.appendChild(img);
|
|
153
|
+
img.setAttribute('src', `data:image/svg+xml,${encodeURIComponent(info.svg)}`);
|
|
154
|
+
// add dimension information
|
|
155
|
+
if (info.width) {
|
|
156
|
+
img.width = info.width;
|
|
157
|
+
}
|
|
158
|
+
// add accessible alt title
|
|
159
|
+
if (info.accessibleTitle) {
|
|
160
|
+
img.setAttribute('alt', info.accessibleTitle);
|
|
161
|
+
}
|
|
162
|
+
figure.appendChild(this.makeMermaidCode(info.text));
|
|
163
|
+
// add accessible caption, with fallback to raw mermaid source
|
|
164
|
+
if (info.accessibleDescription) {
|
|
165
|
+
const caption = document.createElement('figcaption');
|
|
166
|
+
caption.className = 'sr-only';
|
|
167
|
+
caption.textContent = info.accessibleDescription;
|
|
168
|
+
figure.appendChild(caption);
|
|
169
|
+
}
|
|
170
|
+
return figure;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* A namespace for global, private mermaid data.
|
|
175
|
+
*/
|
|
176
|
+
var Private;
|
|
177
|
+
(function (Private) {
|
|
178
|
+
let _themes = null;
|
|
179
|
+
let _mermaid = null;
|
|
180
|
+
let _loading = null;
|
|
181
|
+
let _nextMermaidId = 0;
|
|
182
|
+
let _version = null;
|
|
183
|
+
/**
|
|
184
|
+
* Cache a reference to the theme manager.
|
|
185
|
+
*/
|
|
186
|
+
function initThemes(themes) {
|
|
187
|
+
_themes = themes;
|
|
188
|
+
}
|
|
189
|
+
Private.initThemes = initThemes;
|
|
190
|
+
/**
|
|
191
|
+
* Get the version of mermaid used for rendering.
|
|
192
|
+
*/
|
|
193
|
+
function version() {
|
|
194
|
+
return _version;
|
|
195
|
+
}
|
|
196
|
+
Private.version = version;
|
|
197
|
+
/**
|
|
198
|
+
* (Re-)initialize mermaid with lab-specific theme information
|
|
199
|
+
*/
|
|
200
|
+
function initMermaid() {
|
|
201
|
+
if (!_mermaid) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
let theme = MERMAID_DEFAULT_THEME;
|
|
205
|
+
if (_themes) {
|
|
206
|
+
const jpTheme = _themes.theme;
|
|
207
|
+
theme =
|
|
208
|
+
jpTheme && _themes.isLight(jpTheme)
|
|
209
|
+
? MERMAID_DEFAULT_THEME
|
|
210
|
+
: MERMAID_DARK_THEME;
|
|
211
|
+
}
|
|
212
|
+
const fontFamily = window
|
|
213
|
+
.getComputedStyle(document.body)
|
|
214
|
+
.getPropertyValue('--jp-ui-font-family');
|
|
215
|
+
_mermaid.mermaidAPI.globalReset();
|
|
216
|
+
_mermaid.mermaidAPI.initialize({
|
|
217
|
+
theme,
|
|
218
|
+
fontFamily,
|
|
219
|
+
maxTextSize: 100000,
|
|
220
|
+
startOnLoad: false
|
|
221
|
+
});
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
224
|
+
Private.initMermaid = initMermaid;
|
|
225
|
+
/**
|
|
226
|
+
* Determine whether mermaid has been loaded yet.
|
|
227
|
+
*/
|
|
228
|
+
function getMermaid() {
|
|
229
|
+
return _mermaid;
|
|
230
|
+
}
|
|
231
|
+
Private.getMermaid = getMermaid;
|
|
232
|
+
/**
|
|
233
|
+
* Provide a globally-unique, but unstable, ID for disambiguation.
|
|
234
|
+
*/
|
|
235
|
+
function nextMermaidId() {
|
|
236
|
+
return _nextMermaidId++;
|
|
237
|
+
}
|
|
238
|
+
Private.nextMermaidId = nextMermaidId;
|
|
239
|
+
/**
|
|
240
|
+
* Ensure mermaid has been lazily loaded once, initialized, and cached.
|
|
241
|
+
*/
|
|
242
|
+
async function ensureMermaid() {
|
|
243
|
+
if (_mermaid != null) {
|
|
244
|
+
return _mermaid;
|
|
245
|
+
}
|
|
246
|
+
if (_loading) {
|
|
247
|
+
return _loading.promise;
|
|
248
|
+
}
|
|
249
|
+
_loading = new PromiseDelegate();
|
|
250
|
+
_version = (await import('mermaid/package.json')).version;
|
|
251
|
+
_mermaid = (await import('mermaid')).default;
|
|
252
|
+
initMermaid();
|
|
253
|
+
_loading.resolve(_mermaid);
|
|
254
|
+
return _mermaid;
|
|
255
|
+
}
|
|
256
|
+
Private.ensureMermaid = ensureMermaid;
|
|
257
|
+
})(Private || (Private = {}));
|
|
258
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { IMermaidManager, IMermaidMarkdown } from './tokens';
|
|
2
|
+
/**
|
|
3
|
+
* An implementation of mermaid fenced code blocks in markdown.
|
|
4
|
+
*/
|
|
5
|
+
export declare class MermaidMarkdown implements IMermaidMarkdown {
|
|
6
|
+
protected _mermaid: IMermaidManager;
|
|
7
|
+
readonly languages: string[];
|
|
8
|
+
readonly rank = 100;
|
|
9
|
+
constructor(options: MermaidMarkdown.IOptions);
|
|
10
|
+
/**
|
|
11
|
+
* Pre-parse and cache the rendered text.
|
|
12
|
+
*/
|
|
13
|
+
walk(text: string): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Render the diagram.
|
|
16
|
+
*/
|
|
17
|
+
render(text: string): string | null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A namespace for mermaid markdown
|
|
21
|
+
*/
|
|
22
|
+
export declare namespace MermaidMarkdown {
|
|
23
|
+
/**
|
|
24
|
+
* Initialization options for mermaid markdown
|
|
25
|
+
*/
|
|
26
|
+
interface IOptions {
|
|
27
|
+
mermaid: IMermaidManager;
|
|
28
|
+
}
|
|
29
|
+
}
|
package/lib/markdown.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
/**
|
|
4
|
+
* An implementation of mermaid fenced code blocks in markdown.
|
|
5
|
+
*/
|
|
6
|
+
export class MermaidMarkdown {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.languages = ['mermaid'];
|
|
9
|
+
this.rank = 100;
|
|
10
|
+
this._mermaid = options.mermaid;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Pre-parse and cache the rendered text.
|
|
14
|
+
*/
|
|
15
|
+
async walk(text) {
|
|
16
|
+
await this._mermaid.renderFigure(text);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Render the diagram.
|
|
20
|
+
*/
|
|
21
|
+
render(text) {
|
|
22
|
+
// handle pre-cached mermaid figures
|
|
23
|
+
let cachedFigure = this._mermaid.getCachedFigure(text);
|
|
24
|
+
if (cachedFigure) {
|
|
25
|
+
return cachedFigure.outerHTML;
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAI3D;;GAEG;AACH,MAAM,OAAO,eAAe;IAK1B,YAAY,OAAiC;QAHpC,cAAS,GAAG,CAAC,SAAS,CAAC,CAAC;QACxB,SAAI,GAAG,GAAG,CAAC;QAGlB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,IAAY;QACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY;QACjB,oCAAoC;QACpC,IAAI,YAAY,GAAuB,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,YAAY,EAAE;YAChB,OAAO,YAAY,CAAC,SAAS,CAAC;SAC/B;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
package/lib/mime.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
* @module mermaid-extension
|
|
4
|
+
*/
|
|
5
|
+
import { IMermaidManager } from './tokens';
|
|
6
|
+
import { IRenderMime } from '@jupyterlab/rendermime-interfaces';
|
|
7
|
+
import { PromiseDelegate } from '@lumino/coreutils';
|
|
8
|
+
import { Widget } from '@lumino/widgets';
|
|
9
|
+
/**
|
|
10
|
+
* A widget for rendering mermaid text-based diagrams, for usage with rendermime.
|
|
11
|
+
*/
|
|
12
|
+
export declare class RenderedMermaid extends Widget implements IRenderMime.IRenderer {
|
|
13
|
+
protected static _manager: IMermaidManager | null;
|
|
14
|
+
protected static _managerReady: PromiseDelegate<IMermaidManager>;
|
|
15
|
+
protected _lastRendered: string | null;
|
|
16
|
+
/**
|
|
17
|
+
* Create a new widget for rendering Vega/Vega-Lite.
|
|
18
|
+
*/
|
|
19
|
+
constructor(options: IRenderMime.IRendererOptions);
|
|
20
|
+
static set manager(manager: IMermaidManager);
|
|
21
|
+
/**
|
|
22
|
+
* Render mermaid text-based diagrams into this widget's node.
|
|
23
|
+
*/
|
|
24
|
+
renderModel(model: IRenderMime.IMimeModel): Promise<void>;
|
|
25
|
+
private _mimeType;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A mime renderer factory for mermaid text-based diagrams.
|
|
29
|
+
*/
|
|
30
|
+
export declare const rendererFactory: IRenderMime.IRendererFactory;
|
package/lib/mime.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/* -----------------------------------------------------------------------------
|
|
2
|
+
| Copyright (c) Jupyter Development Team.
|
|
3
|
+
| Distributed under the terms of the Modified BSD License.
|
|
4
|
+
|----------------------------------------------------------------------------*/
|
|
5
|
+
/**
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module mermaid-extension
|
|
8
|
+
*/
|
|
9
|
+
import { MERMAID_CLASS, MERMAID_MIME_TYPE, WARNING_CLASS } from './tokens';
|
|
10
|
+
import { PromiseDelegate } from '@lumino/coreutils';
|
|
11
|
+
import { Widget } from '@lumino/widgets';
|
|
12
|
+
const SVG_MIME = 'image/svg+xml';
|
|
13
|
+
/**
|
|
14
|
+
* A widget for rendering mermaid text-based diagrams, for usage with rendermime.
|
|
15
|
+
*/
|
|
16
|
+
class RenderedMermaid extends Widget {
|
|
17
|
+
/**
|
|
18
|
+
* Create a new widget for rendering Vega/Vega-Lite.
|
|
19
|
+
*/
|
|
20
|
+
constructor(options) {
|
|
21
|
+
super();
|
|
22
|
+
this._lastRendered = null;
|
|
23
|
+
this._mimeType = options.mimeType;
|
|
24
|
+
this.addClass(MERMAID_CLASS);
|
|
25
|
+
}
|
|
26
|
+
static set manager(manager) {
|
|
27
|
+
if (RenderedMermaid._manager) {
|
|
28
|
+
console.warn('Mermaid manager may only be set once, and is already set.');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
RenderedMermaid._manager = manager;
|
|
32
|
+
RenderedMermaid._managerReady.resolve(manager);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Render mermaid text-based diagrams into this widget's node.
|
|
36
|
+
*/
|
|
37
|
+
async renderModel(model) {
|
|
38
|
+
const manager = await RenderedMermaid._managerReady.promise;
|
|
39
|
+
const text = model.data[this._mimeType];
|
|
40
|
+
if (text == null || text === this._lastRendered) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this._lastRendered = text;
|
|
44
|
+
// get a div containing a figure or parser message
|
|
45
|
+
const figure = await manager.renderFigure(text);
|
|
46
|
+
if (figure.classList.contains(WARNING_CLASS)) {
|
|
47
|
+
this.node.classList.add(WARNING_CLASS);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.node.classList.remove(WARNING_CLASS);
|
|
51
|
+
}
|
|
52
|
+
if (!figure.firstChild) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (this.node.innerHTML !== figure.innerHTML) {
|
|
56
|
+
this.node.innerHTML = figure.innerHTML;
|
|
57
|
+
}
|
|
58
|
+
// capture the version of mermaid used
|
|
59
|
+
const version = manager.getMermaidVersion();
|
|
60
|
+
const mermaidMetadata = {
|
|
61
|
+
...(model.metadata[MERMAID_MIME_TYPE] || {}),
|
|
62
|
+
version
|
|
63
|
+
};
|
|
64
|
+
const metadata = {
|
|
65
|
+
...model.metadata,
|
|
66
|
+
[MERMAID_MIME_TYPE]: mermaidMetadata
|
|
67
|
+
};
|
|
68
|
+
// if available, set the fully-rendered SVG
|
|
69
|
+
const img = figure.querySelector('img');
|
|
70
|
+
if (img) {
|
|
71
|
+
const svg = decodeURIComponent(img.src.split(',')[1]);
|
|
72
|
+
const oldSvg = model.data[SVG_MIME];
|
|
73
|
+
if (svg !== oldSvg) {
|
|
74
|
+
model.setData({
|
|
75
|
+
data: { ...model.data, [SVG_MIME]: svg },
|
|
76
|
+
metadata
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
const dataWithoutSvg = { ...model.data };
|
|
82
|
+
delete dataWithoutSvg[SVG_MIME];
|
|
83
|
+
model.setData({ data: dataWithoutSvg, metadata });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
RenderedMermaid._manager = null;
|
|
88
|
+
RenderedMermaid._managerReady = new PromiseDelegate();
|
|
89
|
+
export { RenderedMermaid };
|
|
90
|
+
/**
|
|
91
|
+
* A mime renderer factory for mermaid text-based diagrams.
|
|
92
|
+
*/
|
|
93
|
+
export const rendererFactory = {
|
|
94
|
+
safe: true,
|
|
95
|
+
mimeTypes: [MERMAID_MIME_TYPE],
|
|
96
|
+
createRenderer: options => new RenderedMermaid(options)
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=mime.js.map
|
package/lib/mime.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mime.js","sourceRoot":"","sources":["../src/mime.ts"],"names":[],"mappings":"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"}
|
package/lib/tokens.d.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Token } from '@lumino/coreutils';
|
|
2
|
+
import type MermaidType from 'mermaid';
|
|
3
|
+
export declare const MERMAID_MIME_TYPE = "text/vnd.mermaid";
|
|
4
|
+
export declare const MERMAID_FILE_EXTENSIONS: string[];
|
|
5
|
+
export declare const MERMAID_DEFAULT_THEME = "default";
|
|
6
|
+
export declare const MERMAID_DARK_THEME = "dark";
|
|
7
|
+
export declare const MERMAID_CLASS = "jp-RenderedMermaid";
|
|
8
|
+
export declare const MERMAID_CODE_CLASS = "mermaid";
|
|
9
|
+
export declare const WARNING_CLASS = "jp-mod-warning";
|
|
10
|
+
export declare const DETAILS_CLASS = "jp-RenderedMermaid-Details";
|
|
11
|
+
export declare const SUMMARY_CLASS = "jp-RenderedMermaid-Summary";
|
|
12
|
+
/**
|
|
13
|
+
* The exported token for a mermaid manager
|
|
14
|
+
*/
|
|
15
|
+
export declare const IMermaidManager: Token<IMermaidManager>;
|
|
16
|
+
/**
|
|
17
|
+
* A namespace for public mermaid interfaces.
|
|
18
|
+
*/
|
|
19
|
+
export interface IMermaidManager {
|
|
20
|
+
/**
|
|
21
|
+
* Get the (potentially uninitialized) mermaid module.
|
|
22
|
+
*/
|
|
23
|
+
getMermaid(): Promise<typeof MermaidType>;
|
|
24
|
+
/**
|
|
25
|
+
* Get the version of the currently-loaded mermaid module
|
|
26
|
+
*/
|
|
27
|
+
getMermaidVersion(): string | null;
|
|
28
|
+
/**
|
|
29
|
+
* Render mermaid source to an SVG string with extraced metadata.
|
|
30
|
+
*/
|
|
31
|
+
renderSvg(text: string): Promise<IMermaidManager.IRenderInfo>;
|
|
32
|
+
/**
|
|
33
|
+
* Render and cache mermaid source as a figure of an image, or a unsuccessful parser message.
|
|
34
|
+
*/
|
|
35
|
+
renderFigure(text: string): Promise<HTMLElement>;
|
|
36
|
+
/**
|
|
37
|
+
* Get the pre-cached element for a mermaid string, if available.
|
|
38
|
+
*/
|
|
39
|
+
getCachedFigure(text: string): HTMLElement | null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* A namespace for the mermaid manager.
|
|
43
|
+
*/
|
|
44
|
+
export declare namespace IMermaidManager {
|
|
45
|
+
/**
|
|
46
|
+
* The results of a successful rendering of a mermaid text-based diagram.
|
|
47
|
+
*/
|
|
48
|
+
interface IRenderInfo {
|
|
49
|
+
/** the original source of the diagram. */
|
|
50
|
+
text: string;
|
|
51
|
+
/** The raw rendered SVG. */
|
|
52
|
+
svg: string;
|
|
53
|
+
/** The extracted accessible description, if found. */
|
|
54
|
+
accessibleDescription?: string | null;
|
|
55
|
+
/** The extracted accessible title, if found. */
|
|
56
|
+
accessibleTitle?: string | null;
|
|
57
|
+
/** The extracted width of the digaram, if found. */
|
|
58
|
+
width?: number | null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The exported token for a mermaid manager
|
|
63
|
+
*/
|
|
64
|
+
export declare const IMermaidMarkdown: Token<IMermaidMarkdown>;
|
|
65
|
+
/**
|
|
66
|
+
* A handler for mermaid fenced code blocks in markdown
|
|
67
|
+
*
|
|
68
|
+
* This duplicates the (currently) private `IFencedBlockRenderer` in
|
|
69
|
+
* `@jupyterlab/markedparser-extension`.
|
|
70
|
+
*/
|
|
71
|
+
export interface IMermaidMarkdown {
|
|
72
|
+
/**
|
|
73
|
+
* The languages this block accepts.
|
|
74
|
+
*/
|
|
75
|
+
languages: string[];
|
|
76
|
+
/**
|
|
77
|
+
* The order in which the block would be processed
|
|
78
|
+
*/
|
|
79
|
+
rank: number;
|
|
80
|
+
/**
|
|
81
|
+
* Handle up-front loading/parsing mermaid
|
|
82
|
+
*/
|
|
83
|
+
walk: (text: string) => Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Provide pre-rendered diagram content
|
|
86
|
+
*/
|
|
87
|
+
render: (text: string) => string | null;
|
|
88
|
+
}
|
package/lib/tokens.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Copyright (c) Jupyter Development Team.
|
|
2
|
+
// Distributed under the terms of the Modified BSD License.
|
|
3
|
+
import { Token } from '@lumino/coreutils';
|
|
4
|
+
// documented upstream constants
|
|
5
|
+
export const MERMAID_MIME_TYPE = 'text/vnd.mermaid';
|
|
6
|
+
export const MERMAID_FILE_EXTENSIONS = ['.mmd', '.mermaid'];
|
|
7
|
+
// mermaid themes
|
|
8
|
+
export const MERMAID_DEFAULT_THEME = 'default';
|
|
9
|
+
export const MERMAID_DARK_THEME = 'dark';
|
|
10
|
+
// DOM
|
|
11
|
+
export const MERMAID_CLASS = 'jp-RenderedMermaid';
|
|
12
|
+
export const MERMAID_CODE_CLASS = 'mermaid';
|
|
13
|
+
export const WARNING_CLASS = 'jp-mod-warning';
|
|
14
|
+
export const DETAILS_CLASS = 'jp-RenderedMermaid-Details';
|
|
15
|
+
export const SUMMARY_CLASS = 'jp-RenderedMermaid-Summary';
|
|
16
|
+
/**
|
|
17
|
+
* The exported token for a mermaid manager
|
|
18
|
+
*/
|
|
19
|
+
export const IMermaidManager = new Token('@jupyterlab/mermaid:IMermaidManager', `a manager for rendering mermaid text-based diagrams`);
|
|
20
|
+
/**
|
|
21
|
+
* The exported token for a mermaid manager
|
|
22
|
+
*/
|
|
23
|
+
export const IMermaidMarkdown = new Token('@jupyterlab/mermaid:IMermaidMarkdown', `a manager for rendering mermaid text-based diagrams in markdown fenced code blocks`);
|
|
24
|
+
//# sourceMappingURL=tokens.js.map
|