blixify-ui-web 1.2.126 → 1.2.128
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/lib/components/input/markdown/headings.d.ts +98 -0
- package/lib/components/input/markdown/headings.d.ts.map +1 -0
- package/lib/components/input/markdown/headings.js +216 -0
- package/lib/components/input/markdown/headings.js.map +1 -0
- package/lib/components/input/markdown/index.d.ts +17 -1
- package/lib/components/input/markdown/index.d.ts.map +1 -1
- package/lib/components/input/markdown/index.js +287 -5
- package/lib/components/input/markdown/index.js.map +1 -1
- package/lib/tail.css +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A document's headings — the outline a reader navigates by.
|
|
3
|
+
*
|
|
4
|
+
* INFO: read from the markdown, not from the rendered DOM. The editor and the
|
|
5
|
+
* static renderer draw a heading through completely different paths (tiptap
|
|
6
|
+
* nodes vs markdown-it html), and an outline built from either one would only
|
|
7
|
+
* be correct in that one. The markdown is the single thing they agree on, so it
|
|
8
|
+
* is what the outline is derived from and what both of them are then labelled
|
|
9
|
+
* against.
|
|
10
|
+
*
|
|
11
|
+
* INFO: no id is ever written INTO the markdown. Ids are slugs computed from
|
|
12
|
+
* the heading text every time, so a note saved before this existed gets an
|
|
13
|
+
* outline with no migration, and adding one changes no stored byte — the same
|
|
14
|
+
* commitment the embed's `data-view` makes by omitting itself for the default.
|
|
15
|
+
*/
|
|
16
|
+
export interface MarkdownHeading {
|
|
17
|
+
/** Slug of the heading text, unique within the document */
|
|
18
|
+
id: string;
|
|
19
|
+
/** 1, 2 or 3 — deeper headings are not offered as navigation */
|
|
20
|
+
level: number;
|
|
21
|
+
text: string;
|
|
22
|
+
}
|
|
23
|
+
export declare const MAX_OUTLINE_LEVEL = 3;
|
|
24
|
+
/**
|
|
25
|
+
* INFO: a document with one or two headings is not navigated, it is read. The
|
|
26
|
+
* rail would cost a column of width to say what the first screen already shows.
|
|
27
|
+
*/
|
|
28
|
+
export declare const MIN_OUTLINE_HEADINGS = 3;
|
|
29
|
+
/**
|
|
30
|
+
* The anchor id for a heading's text.
|
|
31
|
+
*
|
|
32
|
+
* INFO: exported because both renderers have to arrive at the same id from the
|
|
33
|
+
* same text without talking to each other — that identity is the whole
|
|
34
|
+
* mechanism, so it lives in one function rather than being spelled twice.
|
|
35
|
+
*/
|
|
36
|
+
export declare const handleSlugHeading: (text: string) => string;
|
|
37
|
+
/**
|
|
38
|
+
* Makes a slug unique within one document by suffixing repeats.
|
|
39
|
+
*
|
|
40
|
+
* INFO: two "Overview" headings are ordinary in a long page. Without this they
|
|
41
|
+
* share an id, and every click on the second one jumps to the first.
|
|
42
|
+
*/
|
|
43
|
+
export declare const handleDedupeSlug: (slug: string, seen: Map<string, number>) => string;
|
|
44
|
+
/**
|
|
45
|
+
* Reads the outline out of a markdown document.
|
|
46
|
+
*
|
|
47
|
+
* INFO: fenced blocks are tracked and skipped, because a `# comment` inside a
|
|
48
|
+
* ```bash block and a `%% title` inside a ```mermaid one are code, not
|
|
49
|
+
* structure — a diagram-heavy page would otherwise produce an outline of its
|
|
50
|
+
* own source. The closing fence must be at least as long as the opening one,
|
|
51
|
+
* which is how a ``` block nested inside a ```` one stays inside it.
|
|
52
|
+
*/
|
|
53
|
+
export declare const handleParseMarkdownHeadings: (markdown?: string | null) => MarkdownHeading[];
|
|
54
|
+
/**
|
|
55
|
+
* Caps every image in rendered html at the width of its column.
|
|
56
|
+
*
|
|
57
|
+
* INFO: inline, because a stored image carries only a `width` attribute and is
|
|
58
|
+
* otherwise held in check by the prose stylesheet's `max-width: 100%`. Any frame
|
|
59
|
+
* where that stylesheet has not applied — first paint, or a host that does not
|
|
60
|
+
* ship the library's css — renders the image at its stored width, which on a
|
|
61
|
+
* phone is an image several times the width of the screen and a page that scrolls
|
|
62
|
+
* sideways. An inline style cannot be late.
|
|
63
|
+
*
|
|
64
|
+
* INFO: applied at render time only. Nothing is written back to the markdown, so
|
|
65
|
+
* a document still stores `<img src="…" width="420" />` and nothing else.
|
|
66
|
+
*/
|
|
67
|
+
export declare const handleCapImages: (html: string) => string;
|
|
68
|
+
/**
|
|
69
|
+
* Writes the outline's ids into rendered html, in document order.
|
|
70
|
+
*
|
|
71
|
+
* INFO: into the HTML STRING, not onto the mounted DOM. The static renderer sets
|
|
72
|
+
* its html through dangerouslySetInnerHTML, and React re-commits that html
|
|
73
|
+
* whenever it re-renders the element — which wipes every attribute added
|
|
74
|
+
* afterwards. Ids set from an effect therefore survived until the first
|
|
75
|
+
* re-render and then vanished silently, leaving an outline whose entries no
|
|
76
|
+
* longer scrolled anywhere. Being part of the html itself, these cannot be lost.
|
|
77
|
+
*
|
|
78
|
+
* INFO: the heading order is the only thing tying the two together, and it is
|
|
79
|
+
* reliable because both come from one parse of one document — the nth `<h1-3>`
|
|
80
|
+
* in the html is the nth entry in the outline. Levels deeper than the outline
|
|
81
|
+
* carry no id, which is why the pattern stops at h3.
|
|
82
|
+
*/
|
|
83
|
+
export declare const handleInjectHeadingIds: (html: string, headings: MarkdownHeading[]) => string;
|
|
84
|
+
/**
|
|
85
|
+
* The id a heading node carries in the editor, as a ProseMirror decoration.
|
|
86
|
+
*
|
|
87
|
+
* INFO: a decoration rather than a node attribute or a DOM write. An attribute
|
|
88
|
+
* would reach `getHTML()` — turndown's input — and be written into the saved
|
|
89
|
+
* markdown; a DOM write is undone the next time ProseMirror redraws that node.
|
|
90
|
+
* Decorations are recomputed from the document on every redraw by construction,
|
|
91
|
+
* so an anchor cannot drift out of the view or into the file.
|
|
92
|
+
*/
|
|
93
|
+
export declare const handleBuildHeadingAnchors: (doc: any) => {
|
|
94
|
+
from: number;
|
|
95
|
+
to: number;
|
|
96
|
+
id: string;
|
|
97
|
+
}[];
|
|
98
|
+
//# sourceMappingURL=headings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headings.d.ts","sourceRoot":"","sources":["../../../../src/components/input/markdown/headings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAsBtC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,SAAU,MAAM,KAAG,MAgBhD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,SACrB,MAAM,QACN,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KACxB,MAIF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,cAC3B,MAAM,GAAG,IAAI,KACvB,eAAe,EAqCjB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,MAO3C,CAAC;AAEL;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,SAC3B,MAAM,YACF,eAAe,EAAE,KAC1B,MASF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,QAC/B,GAAG,KACP;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAgB1C,CAAC"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A document's headings — the outline a reader navigates by.
|
|
4
|
+
*
|
|
5
|
+
* INFO: read from the markdown, not from the rendered DOM. The editor and the
|
|
6
|
+
* static renderer draw a heading through completely different paths (tiptap
|
|
7
|
+
* nodes vs markdown-it html), and an outline built from either one would only
|
|
8
|
+
* be correct in that one. The markdown is the single thing they agree on, so it
|
|
9
|
+
* is what the outline is derived from and what both of them are then labelled
|
|
10
|
+
* against.
|
|
11
|
+
*
|
|
12
|
+
* INFO: no id is ever written INTO the markdown. Ids are slugs computed from
|
|
13
|
+
* the heading text every time, so a note saved before this existed gets an
|
|
14
|
+
* outline with no migration, and adding one changes no stored byte — the same
|
|
15
|
+
* commitment the embed's `data-view` makes by omitting itself for the default.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.handleBuildHeadingAnchors = exports.handleInjectHeadingIds = exports.handleCapImages = exports.handleParseMarkdownHeadings = exports.handleDedupeSlug = exports.handleSlugHeading = exports.MIN_OUTLINE_HEADINGS = exports.MAX_OUTLINE_LEVEL = void 0;
|
|
19
|
+
exports.MAX_OUTLINE_LEVEL = 3;
|
|
20
|
+
/**
|
|
21
|
+
* INFO: a document with one or two headings is not navigated, it is read. The
|
|
22
|
+
* rail would cost a column of width to say what the first screen already shows.
|
|
23
|
+
*/
|
|
24
|
+
exports.MIN_OUTLINE_HEADINGS = 3;
|
|
25
|
+
var FENCE = /^\s{0,3}(`{3,}|~{3,})/;
|
|
26
|
+
var HEADING = /^(#{1,6})\s+(.*)$/;
|
|
27
|
+
/**
|
|
28
|
+
* Strips the inline markup a heading may carry, so the outline shows the words
|
|
29
|
+
* rather than the syntax around them.
|
|
30
|
+
*/
|
|
31
|
+
var handleCleanHeadingText = function (raw) {
|
|
32
|
+
return raw
|
|
33
|
+
// INFO: trailing #s of a closed atx heading — "## Title ##"
|
|
34
|
+
.replace(/\s+#+\s*$/, "")
|
|
35
|
+
// INFO: link and image syntax reduced to the text that was visible
|
|
36
|
+
.replace(/!\[([^\]]*)\]\([^)]*\)/g, "$1")
|
|
37
|
+
.replace(/\[([^\]]*)\]\([^)]*\)/g, "$1")
|
|
38
|
+
.replace(/`([^`]*)`/g, "$1")
|
|
39
|
+
.replace(/[*_~]/g, "")
|
|
40
|
+
.replace(/<[^>]+>/g, "")
|
|
41
|
+
.replace(/\s+/g, " ")
|
|
42
|
+
.trim();
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* The anchor id for a heading's text.
|
|
46
|
+
*
|
|
47
|
+
* INFO: exported because both renderers have to arrive at the same id from the
|
|
48
|
+
* same text without talking to each other — that identity is the whole
|
|
49
|
+
* mechanism, so it lives in one function rather than being spelled twice.
|
|
50
|
+
*/
|
|
51
|
+
var handleSlugHeading = function (text) {
|
|
52
|
+
var slug = handleCleanHeadingText(text)
|
|
53
|
+
.toLowerCase()
|
|
54
|
+
// INFO: punctuation is REMOVED rather than letters being kept. A
|
|
55
|
+
// `\p{L}`-style whitelist needs the unicode flag, which this library cannot
|
|
56
|
+
// use at an es5 target — and matching `[a-z0-9]` instead would slug a
|
|
57
|
+
// heading in Chinese or Malay to an empty string. Full-width punctuation is
|
|
58
|
+
// listed too, since it is what a CJK heading actually carries.
|
|
59
|
+
.replace(/["'’“”!?@#$%^&*()+=[\]{}<>,.:;/\\|`~]/g, "")
|
|
60
|
+
.replace(/[,。!?:;()【】、「」…]/g, "")
|
|
61
|
+
.replace(/\s+/g, "-")
|
|
62
|
+
.replace(/-+/g, "-")
|
|
63
|
+
.replace(/^-|-$/g, "");
|
|
64
|
+
// INFO: a heading of only punctuation would otherwise slug to "" and every
|
|
65
|
+
// such heading would share one id
|
|
66
|
+
return slug || "section";
|
|
67
|
+
};
|
|
68
|
+
exports.handleSlugHeading = handleSlugHeading;
|
|
69
|
+
/**
|
|
70
|
+
* Makes a slug unique within one document by suffixing repeats.
|
|
71
|
+
*
|
|
72
|
+
* INFO: two "Overview" headings are ordinary in a long page. Without this they
|
|
73
|
+
* share an id, and every click on the second one jumps to the first.
|
|
74
|
+
*/
|
|
75
|
+
var handleDedupeSlug = function (slug, seen) {
|
|
76
|
+
var _a;
|
|
77
|
+
var count = (_a = seen.get(slug)) !== null && _a !== void 0 ? _a : 0;
|
|
78
|
+
seen.set(slug, count + 1);
|
|
79
|
+
return count === 0 ? slug : "".concat(slug, "-").concat(count + 1);
|
|
80
|
+
};
|
|
81
|
+
exports.handleDedupeSlug = handleDedupeSlug;
|
|
82
|
+
/**
|
|
83
|
+
* Reads the outline out of a markdown document.
|
|
84
|
+
*
|
|
85
|
+
* INFO: fenced blocks are tracked and skipped, because a `# comment` inside a
|
|
86
|
+
* ```bash block and a `%% title` inside a ```mermaid one are code, not
|
|
87
|
+
* structure — a diagram-heavy page would otherwise produce an outline of its
|
|
88
|
+
* own source. The closing fence must be at least as long as the opening one,
|
|
89
|
+
* which is how a ``` block nested inside a ```` one stays inside it.
|
|
90
|
+
*/
|
|
91
|
+
var handleParseMarkdownHeadings = function (markdown) {
|
|
92
|
+
if (!markdown)
|
|
93
|
+
return [];
|
|
94
|
+
var headings = [];
|
|
95
|
+
var seen = new Map();
|
|
96
|
+
var fence = "";
|
|
97
|
+
for (var _i = 0, _a = markdown.split("\n"); _i < _a.length; _i++) {
|
|
98
|
+
var eachLine = _a[_i];
|
|
99
|
+
var fenceMatch = eachLine.match(FENCE);
|
|
100
|
+
if (fenceMatch) {
|
|
101
|
+
var marker = fenceMatch[1];
|
|
102
|
+
if (!fence) {
|
|
103
|
+
fence = marker;
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
// INFO: only a fence of the same character and at least the same length
|
|
107
|
+
// closes the block
|
|
108
|
+
if (marker[0] === fence[0] && marker.length >= fence.length)
|
|
109
|
+
fence = "";
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
if (fence)
|
|
113
|
+
continue;
|
|
114
|
+
var headingMatch = eachLine.match(HEADING);
|
|
115
|
+
if (!headingMatch)
|
|
116
|
+
continue;
|
|
117
|
+
var level = headingMatch[1].length;
|
|
118
|
+
if (level > exports.MAX_OUTLINE_LEVEL)
|
|
119
|
+
continue;
|
|
120
|
+
var text = handleCleanHeadingText(headingMatch[2]);
|
|
121
|
+
// INFO: "###" with nothing after it is not a section anyone can navigate to
|
|
122
|
+
if (!text)
|
|
123
|
+
continue;
|
|
124
|
+
headings.push({
|
|
125
|
+
id: (0, exports.handleDedupeSlug)((0, exports.handleSlugHeading)(text), seen),
|
|
126
|
+
level: level,
|
|
127
|
+
text: text,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return headings;
|
|
131
|
+
};
|
|
132
|
+
exports.handleParseMarkdownHeadings = handleParseMarkdownHeadings;
|
|
133
|
+
/**
|
|
134
|
+
* Caps every image in rendered html at the width of its column.
|
|
135
|
+
*
|
|
136
|
+
* INFO: inline, because a stored image carries only a `width` attribute and is
|
|
137
|
+
* otherwise held in check by the prose stylesheet's `max-width: 100%`. Any frame
|
|
138
|
+
* where that stylesheet has not applied — first paint, or a host that does not
|
|
139
|
+
* ship the library's css — renders the image at its stored width, which on a
|
|
140
|
+
* phone is an image several times the width of the screen and a page that scrolls
|
|
141
|
+
* sideways. An inline style cannot be late.
|
|
142
|
+
*
|
|
143
|
+
* INFO: applied at render time only. Nothing is written back to the markdown, so
|
|
144
|
+
* a document still stores `<img src="…" width="420" />` and nothing else.
|
|
145
|
+
*/
|
|
146
|
+
var handleCapImages = function (html) {
|
|
147
|
+
return html.replace(/<img\s([^>]*?)\/?>/g, function (match, attrs) {
|
|
148
|
+
// INFO: an image that already carries a style is left alone — it came from
|
|
149
|
+
// somewhere with its own intent, and merging two style strings to guess at it
|
|
150
|
+
// would be worse than leaving it as the author wrote it
|
|
151
|
+
if (/\sstyle\s*=/.test(" ".concat(attrs)))
|
|
152
|
+
return match;
|
|
153
|
+
return "<img ".concat(attrs, " style=\"max-width:100%;height:auto\" />");
|
|
154
|
+
});
|
|
155
|
+
};
|
|
156
|
+
exports.handleCapImages = handleCapImages;
|
|
157
|
+
/**
|
|
158
|
+
* Writes the outline's ids into rendered html, in document order.
|
|
159
|
+
*
|
|
160
|
+
* INFO: into the HTML STRING, not onto the mounted DOM. The static renderer sets
|
|
161
|
+
* its html through dangerouslySetInnerHTML, and React re-commits that html
|
|
162
|
+
* whenever it re-renders the element — which wipes every attribute added
|
|
163
|
+
* afterwards. Ids set from an effect therefore survived until the first
|
|
164
|
+
* re-render and then vanished silently, leaving an outline whose entries no
|
|
165
|
+
* longer scrolled anywhere. Being part of the html itself, these cannot be lost.
|
|
166
|
+
*
|
|
167
|
+
* INFO: the heading order is the only thing tying the two together, and it is
|
|
168
|
+
* reliable because both come from one parse of one document — the nth `<h1-3>`
|
|
169
|
+
* in the html is the nth entry in the outline. Levels deeper than the outline
|
|
170
|
+
* carry no id, which is why the pattern stops at h3.
|
|
171
|
+
*/
|
|
172
|
+
var handleInjectHeadingIds = function (html, headings) {
|
|
173
|
+
if (!headings.length)
|
|
174
|
+
return html;
|
|
175
|
+
var index = 0;
|
|
176
|
+
return html.replace(/<h([1-3])(\s[^>]*)?>/g, function (match, level, attrs) {
|
|
177
|
+
var heading = headings[index];
|
|
178
|
+
if (!heading)
|
|
179
|
+
return match;
|
|
180
|
+
index += 1;
|
|
181
|
+
return "<h".concat(level).concat(attrs !== null && attrs !== void 0 ? attrs : "", " id=\"").concat(heading.id, "\" data-heading-id=\"").concat(heading.id, "\">");
|
|
182
|
+
});
|
|
183
|
+
};
|
|
184
|
+
exports.handleInjectHeadingIds = handleInjectHeadingIds;
|
|
185
|
+
/**
|
|
186
|
+
* The id a heading node carries in the editor, as a ProseMirror decoration.
|
|
187
|
+
*
|
|
188
|
+
* INFO: a decoration rather than a node attribute or a DOM write. An attribute
|
|
189
|
+
* would reach `getHTML()` — turndown's input — and be written into the saved
|
|
190
|
+
* markdown; a DOM write is undone the next time ProseMirror redraws that node.
|
|
191
|
+
* Decorations are recomputed from the document on every redraw by construction,
|
|
192
|
+
* so an anchor cannot drift out of the view or into the file.
|
|
193
|
+
*/
|
|
194
|
+
var handleBuildHeadingAnchors = function (doc) {
|
|
195
|
+
var anchors = [];
|
|
196
|
+
var seen = new Map();
|
|
197
|
+
doc.descendants(function (node, pos) {
|
|
198
|
+
var _a, _b, _c, _d;
|
|
199
|
+
if (((_a = node.type) === null || _a === void 0 ? void 0 : _a.name) !== "heading")
|
|
200
|
+
return;
|
|
201
|
+
var level = (_c = (_b = node.attrs) === null || _b === void 0 ? void 0 : _b.level) !== null && _c !== void 0 ? _c : 1;
|
|
202
|
+
if (level > exports.MAX_OUTLINE_LEVEL)
|
|
203
|
+
return;
|
|
204
|
+
var text = ((_d = node.textContent) !== null && _d !== void 0 ? _d : "").trim();
|
|
205
|
+
if (!text)
|
|
206
|
+
return;
|
|
207
|
+
anchors.push({
|
|
208
|
+
from: pos,
|
|
209
|
+
to: pos + node.nodeSize,
|
|
210
|
+
id: (0, exports.handleDedupeSlug)((0, exports.handleSlugHeading)(text), seen),
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
return anchors;
|
|
214
|
+
};
|
|
215
|
+
exports.handleBuildHeadingAnchors = handleBuildHeadingAnchors;
|
|
216
|
+
//# sourceMappingURL=headings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headings.js","sourceRoot":"","sources":["../../../../src/components/input/markdown/headings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { ReactElement } from "react";
|
|
2
2
|
import { MermaidLoader } from "./mermaid";
|
|
3
|
+
import { MarkdownHeading } from "./headings";
|
|
3
4
|
export type EmbedView = "grid" | "list";
|
|
4
5
|
export declare const handleParseEmbedView: (value?: string | null) => EmbedView;
|
|
5
6
|
export interface EmbedActions {
|
|
@@ -76,6 +77,16 @@ interface Props {
|
|
|
76
77
|
* until the supplied callback runs, so the host can confirm first.
|
|
77
78
|
*/
|
|
78
79
|
onRequestRemove?: (spaceId: string, remove: () => void) => void;
|
|
80
|
+
/**
|
|
81
|
+
* Called with the document's headings whenever they change, for a host that
|
|
82
|
+
* renders an outline beside the editor.
|
|
83
|
+
*
|
|
84
|
+
* INFO: the headings are read from the markdown rather than from the editor's
|
|
85
|
+
* nodes, so the list a host gets here is identical to the one MarkdownStatic
|
|
86
|
+
* reports for the same document — the editor and a published page cannot show
|
|
87
|
+
* different outlines for the same note.
|
|
88
|
+
*/
|
|
89
|
+
onHeadingsChange?: (headings: MarkdownHeading[]) => void;
|
|
79
90
|
/**
|
|
80
91
|
* Extra entries for the `/` menu, appended after the built-in formatting
|
|
81
92
|
* commands. Use for actions the host app owns, such as creating a database.
|
|
@@ -100,6 +111,11 @@ interface MarkdownStaticProps {
|
|
|
100
111
|
value: string;
|
|
101
112
|
darkMode?: boolean;
|
|
102
113
|
containerClassName?: string;
|
|
114
|
+
/**
|
|
115
|
+
* Called with the document's headings whenever they change, for a host that
|
|
116
|
+
* renders an outline beside the page.
|
|
117
|
+
*/
|
|
118
|
+
onHeadingsChange?: (headings: MarkdownHeading[]) => void;
|
|
103
119
|
lib?: {
|
|
104
120
|
/**
|
|
105
121
|
* Loads mermaid, e.g. `() => import("mermaid")`. When given, ```mermaid
|
|
@@ -115,7 +131,7 @@ interface MarkdownStaticProps {
|
|
|
115
131
|
* many markdown fields stay responsive instead of freezing from 50+ ProseMirror
|
|
116
132
|
* instances or a heavy re-parse.
|
|
117
133
|
*/
|
|
118
|
-
export declare const MarkdownStatic: ({ id, label, labelExtra, subLabel, value, darkMode, containerClassName, lib, }: MarkdownStaticProps) => React.JSX.Element;
|
|
134
|
+
export declare const MarkdownStatic: ({ id, label, labelExtra, subLabel, value, darkMode, containerClassName, onHeadingsChange, lib, }: MarkdownStaticProps) => React.JSX.Element;
|
|
119
135
|
export declare const MarkdownInput: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<unknown>>;
|
|
120
136
|
export {};
|
|
121
137
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/input/markdown/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/input/markdown/index.tsx"],"names":[],"mappings":"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"}
|