@aicayzer/inkkit 0.0.17 → 0.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.
Files changed (81) hide show
  1. package/NOTICE +4 -2
  2. package/README.md +12 -6
  3. package/dist/THIRD-PARTY-NOTICES.txt +2742 -0
  4. package/dist/chunks/core-vtCr4MBS.js +56503 -0
  5. package/dist/chunks/highlight-Daj2fv_u.js +14122 -0
  6. package/dist/core.d.ts +4 -0
  7. package/dist/core.js +2 -0
  8. package/dist/editor.d.ts +261 -48
  9. package/dist/index.d.ts +1 -7
  10. package/dist/index.js +5 -2
  11. package/dist/style.css +242 -221
  12. package/dist/types.d.ts +143 -18
  13. package/package.json +26 -15
  14. package/dist/autolink.d.ts +0 -1
  15. package/dist/autolink.js +0 -18
  16. package/dist/callouts.d.ts +0 -26
  17. package/dist/callouts.js +0 -311
  18. package/dist/clipboard.d.ts +0 -11
  19. package/dist/clipboard.js +0 -261
  20. package/dist/code-fences.d.ts +0 -8
  21. package/dist/code-fences.js +0 -166
  22. package/dist/comments.d.ts +0 -55
  23. package/dist/comments.js +0 -494
  24. package/dist/decorations.d.ts +0 -2
  25. package/dist/decorations.js +0 -67
  26. package/dist/dialect.d.ts +0 -9
  27. package/dist/dialect.js +0 -358
  28. package/dist/editor.js +0 -2441
  29. package/dist/files.d.ts +0 -40
  30. package/dist/files.js +0 -133
  31. package/dist/highlight.d.ts +0 -1
  32. package/dist/highlight.js +0 -136
  33. package/dist/image-blocks.d.ts +0 -71
  34. package/dist/image-blocks.js +0 -286
  35. package/dist/images.d.ts +0 -51
  36. package/dist/images.js +0 -398
  37. package/dist/inline-highlight.d.ts +0 -6
  38. package/dist/inline-highlight.js +0 -112
  39. package/dist/labels.d.ts +0 -36
  40. package/dist/labels.js +0 -34
  41. package/dist/linked-syntax.d.ts +0 -48
  42. package/dist/linked-syntax.js +0 -320
  43. package/dist/literals.d.ts +0 -19
  44. package/dist/literals.js +0 -211
  45. package/dist/mermaid.d.ts +0 -8
  46. package/dist/mermaid.js +0 -321
  47. package/dist/outline.d.ts +0 -22
  48. package/dist/outline.js +0 -79
  49. package/dist/paste-html.d.ts +0 -23
  50. package/dist/paste-html.js +0 -441
  51. package/dist/paste.d.ts +0 -26
  52. package/dist/paste.js +0 -482
  53. package/dist/portable-files.d.ts +0 -10
  54. package/dist/portable-files.js +0 -36
  55. package/dist/preserve.d.ts +0 -21
  56. package/dist/preserve.js +0 -757
  57. package/dist/print.d.ts +0 -7
  58. package/dist/print.js +0 -409
  59. package/dist/reference-clipboard.d.ts +0 -8
  60. package/dist/reference-clipboard.js +0 -201
  61. package/dist/references.d.ts +0 -14
  62. package/dist/references.js +0 -368
  63. package/dist/search.d.ts +0 -15
  64. package/dist/search.js +0 -202
  65. package/dist/selection.d.ts +0 -1
  66. package/dist/selection.js +0 -59
  67. package/dist/source.d.ts +0 -16
  68. package/dist/source.js +0 -57
  69. package/dist/spreadsheet.d.ts +0 -3
  70. package/dist/spreadsheet.js +0 -275
  71. package/dist/table-alignment.d.ts +0 -2
  72. package/dist/table-alignment.js +0 -46
  73. package/dist/tables.d.ts +0 -27
  74. package/dist/tables.js +0 -322
  75. package/dist/tasks.d.ts +0 -3
  76. package/dist/tasks.js +0 -51
  77. package/dist/text-ranges.d.ts +0 -29
  78. package/dist/text-ranges.js +0 -256
  79. package/dist/types.js +0 -8
  80. package/dist/wiki-view.d.ts +0 -21
  81. package/dist/wiki-view.js +0 -78
package/dist/comments.js DELETED
@@ -1,494 +0,0 @@
1
- import { $node, $prose, $remark } from '@milkdown/kit/utils';
2
- import { Fragment } from '@milkdown/kit/prose/model';
3
- import { Plugin, PluginKey } from '@milkdown/kit/prose/state';
4
- import { isImageBlock } from './image-blocks.js';
5
- import { fromMarkdown } from 'mdast-util-from-markdown';
6
- const lineEnding = (code) => code === -3 || code === -4 || code === -5;
7
- const whitespace = (code) => code === 32 || code === -1 || code === -2;
8
- function commentData(effects) {
9
- let open = false;
10
- return {
11
- consume(code) {
12
- if (!open) {
13
- effects.enter('inkkitCommentData');
14
- open = true;
15
- }
16
- effects.consume(code);
17
- },
18
- close() {
19
- if (open) {
20
- effects.exit('inkkitCommentData');
21
- open = false;
22
- }
23
- },
24
- };
25
- }
26
- const inlineComment = function (effects, ok, nok) {
27
- const data = commentData(effects);
28
- return start;
29
- function start(code) {
30
- effects.enter('inkkitCommentInline');
31
- data.consume(code);
32
- return second;
33
- }
34
- function second(code) {
35
- if (code !== 37)
36
- return nok(code);
37
- data.consume(code);
38
- return body;
39
- }
40
- function body(code) {
41
- if (code === null)
42
- return nok(code);
43
- if (lineEnding(code)) {
44
- data.close();
45
- effects.enter('lineEnding');
46
- effects.consume(code);
47
- effects.exit('lineEnding');
48
- return body;
49
- }
50
- data.consume(code);
51
- return code === 37 ? closing : body;
52
- }
53
- function closing(code) {
54
- if (code !== 37)
55
- return body(code);
56
- data.consume(code);
57
- data.close();
58
- effects.exit('inkkitCommentInline');
59
- return ok;
60
- }
61
- };
62
- // A flow construct owns blank lines and Markdown-looking text inside a block comment.
63
- const blockComment = function (effects, ok, nok) {
64
- const data = commentData(effects);
65
- return start;
66
- function start(code) {
67
- effects.enter('inkkitCommentBlock');
68
- data.consume(code);
69
- return second;
70
- }
71
- function second(code) {
72
- if (code !== 37)
73
- return nok(code);
74
- data.consume(code);
75
- return openingEnd;
76
- }
77
- function openingEnd(code) {
78
- if (whitespace(code)) {
79
- data.consume(code);
80
- return openingEnd;
81
- }
82
- if (!lineEnding(code))
83
- return nok(code);
84
- data.close();
85
- effects.enter('lineEnding');
86
- effects.consume(code);
87
- effects.exit('lineEnding');
88
- return lineStart;
89
- }
90
- function lineStart(code) {
91
- if (whitespace(code)) {
92
- data.consume(code);
93
- return lineStart;
94
- }
95
- if (code === 37) {
96
- data.consume(code);
97
- return closingSecond;
98
- }
99
- return body(code);
100
- }
101
- function body(code) {
102
- if (code === null)
103
- return nok(code);
104
- if (lineEnding(code)) {
105
- data.close();
106
- effects.enter('lineEnding');
107
- effects.consume(code);
108
- effects.exit('lineEnding');
109
- return lineStart;
110
- }
111
- data.consume(code);
112
- return lineEnding(code) ? lineStart : body;
113
- }
114
- function closingSecond(code) {
115
- if (code !== 37)
116
- return body(code);
117
- data.consume(code);
118
- return closingEnd;
119
- }
120
- function closingEnd(code) {
121
- if (whitespace(code)) {
122
- data.consume(code);
123
- return closingEnd;
124
- }
125
- if (code !== null && !lineEnding(code))
126
- return body(code);
127
- data.close();
128
- effects.exit('inkkitCommentBlock');
129
- return ok(code);
130
- }
131
- };
132
- const syntax = {
133
- text: { 37: { name: 'inkkitCommentInline', tokenize: inlineComment } },
134
- flow: {
135
- 37: { name: 'inkkitCommentBlock', tokenize: blockComment, concrete: true },
136
- },
137
- };
138
- const from = {
139
- enter: {
140
- inkkitCommentInline(token) {
141
- this.enter({ type: 'inkkitCommentInline', syntax: 'obsidian', value: '' }, token);
142
- },
143
- inkkitCommentBlock(token) {
144
- this.enter({ type: 'inkkitCommentBlock', syntax: 'obsidian', value: '' }, token);
145
- },
146
- },
147
- exit: {
148
- inkkitCommentInline(token) {
149
- const node = this.stack.at(-1);
150
- node.value = this.sliceSerialize(token).slice(2, -2);
151
- this.exit(token);
152
- },
153
- inkkitCommentBlock(token) {
154
- const node = this.stack.at(-1);
155
- node.value = this.sliceSerialize(token)
156
- .replace(/^%%[^\S\r\n]*\r?\n/, '')
157
- .replace(/(?:\r?\n)?[^\S\r\n]*%%[^\S\r\n]*$/, '');
158
- this.exit(token);
159
- },
160
- },
161
- };
162
- export function commentSource(node) {
163
- const body = node.textContent;
164
- return node.attrs.syntax === 'html'
165
- ? `<!--${body}-->`
166
- : node.type.name === 'comment_block' || node.attrs.block
167
- ? `%%\n${body}\n%%`
168
- : `%%${body}%%`;
169
- }
170
- const handler = (node) => {
171
- const comment = node;
172
- const value = comment.value ?? '';
173
- return comment.syntax === 'html'
174
- ? `<!--${value}-->`
175
- : comment.type === 'inkkitCommentBlock' || comment.block
176
- ? `%%\n${value}\n%%`
177
- : `%%${value}%%`;
178
- };
179
- function htmlSpans(value) {
180
- const spans = [];
181
- let inTag = false;
182
- let quote = '';
183
- for (let index = 0; index < value.length; index++) {
184
- const character = value[index];
185
- if (quote) {
186
- if (character === quote)
187
- quote = '';
188
- continue;
189
- }
190
- if (inTag && (character === '"' || character === "'")) {
191
- quote = character;
192
- continue;
193
- }
194
- if (value.startsWith('<!--', index)) {
195
- const end = value.indexOf('-->', index + 4);
196
- if (end < 0)
197
- break;
198
- spans.push({
199
- start: index,
200
- end: end + 3,
201
- syntax: 'html',
202
- value: value.slice(index + 4, end),
203
- });
204
- index = end + 2;
205
- inTag = false;
206
- }
207
- else if (character === '<')
208
- inTag = true;
209
- else if (character === '>')
210
- inTag = false;
211
- }
212
- return spans;
213
- }
214
- // Parse preserved source again rather than hiding delimiter-looking strings in code or escapes.
215
- export function literalCommentSpans(value) {
216
- const tree = fromMarkdown(value, {
217
- extensions: [syntax],
218
- mdastExtensions: [from],
219
- });
220
- const spans = [];
221
- const visit = (node) => {
222
- const start = node.position?.start.offset;
223
- const end = node.position?.end.offset;
224
- if (start != null && end != null) {
225
- if (node.type === 'inkkitCommentInline' ||
226
- node.type === 'inkkitCommentBlock')
227
- spans.push({
228
- start,
229
- end,
230
- syntax: node.syntax,
231
- value: node.value,
232
- block: node.type === 'inkkitCommentBlock',
233
- });
234
- else if (node.type === 'html')
235
- spans.push(...htmlSpans(value.slice(start, end)).map((span) => ({
236
- ...span,
237
- start: start + span.start,
238
- end: start + span.end,
239
- })));
240
- }
241
- if ('children' in node)
242
- node.children.forEach(visit);
243
- };
244
- visit(tree);
245
- return spans.sort((left, right) => left.start - right.start);
246
- }
247
- function remarkComments() {
248
- const data = this.data();
249
- (data.micromarkExtensions ??= []).push(syntax);
250
- (data.fromMarkdownExtensions ??= []).push(from);
251
- (data.toMarkdownExtensions ??= []).push({
252
- handlers: { inkkitCommentInline: handler, inkkitCommentBlock: handler },
253
- unsafe: [{ character: '%', inConstruct: 'phrasing', after: '%' }],
254
- });
255
- return (tree) => {
256
- const visit = (node, inline, parentType) => {
257
- if (parentType === 'listItem' && node.type === 'inkkitCommentBlock')
258
- return {
259
- type: 'paragraph',
260
- children: [{ ...node, type: 'inkkitCommentInline', block: true }],
261
- position: node.position,
262
- };
263
- if (node.type === 'html') {
264
- const spans = htmlSpans(node.value);
265
- if (spans.length === 1 &&
266
- spans[0].start === 0 &&
267
- spans[0].end === node.value.length)
268
- return parentType === 'listItem'
269
- ? {
270
- type: 'paragraph',
271
- children: [
272
- {
273
- type: 'inkkitCommentInline',
274
- syntax: 'html',
275
- value: spans[0].value,
276
- position: node.position,
277
- },
278
- ],
279
- position: node.position,
280
- }
281
- : {
282
- type: inline ? 'inkkitCommentInline' : 'inkkitCommentBlock',
283
- syntax: 'html',
284
- value: spans[0].value,
285
- position: node.position,
286
- };
287
- }
288
- if ('children' in node)
289
- node.children = node.children.map((child) => visit(child, node.type === 'paragraph' ||
290
- node.type === 'heading' ||
291
- node.type === 'tableCell' ||
292
- node.type === 'link' ||
293
- node.type === 'linkReference' ||
294
- inline, node.type));
295
- if (node.type === 'paragraph' &&
296
- parentType !== 'listItem' &&
297
- node.children.length === 1 &&
298
- node.children[0]?.type === 'inkkitCommentInline')
299
- return {
300
- ...node.children[0],
301
- type: 'inkkitCommentBlock',
302
- position: node.position,
303
- };
304
- return node;
305
- };
306
- tree.children = tree.children.map((node) => visit(node, false));
307
- };
308
- }
309
- export const remarkCommentsPlugin = $remark('remarkComments', () => remarkComments);
310
- function commentNode(inline) {
311
- const name = inline ? 'comment_inline' : 'comment_block';
312
- const mdastType = inline ? 'inkkitCommentInline' : 'inkkitCommentBlock';
313
- return $node(name, () => ({
314
- inline,
315
- group: inline ? 'inline' : 'block',
316
- content: 'text*',
317
- marks: '',
318
- code: true,
319
- defining: true,
320
- attrs: { syntax: { default: 'html' }, block: { default: !inline } },
321
- parseDOM: [
322
- {
323
- tag: `${inline ? 'span' : 'div'}[data-inkkit-comment]`,
324
- preserveWhitespace: 'full',
325
- getAttrs: (dom) => ({
326
- syntax: dom.getAttribute('data-inkkit-comment') === 'obsidian'
327
- ? 'obsidian'
328
- : 'html',
329
- }),
330
- },
331
- ],
332
- toDOM: (node) => [
333
- inline ? 'span' : 'div',
334
- {
335
- class: `inkkit-comment inkkit-comment-${inline ? 'inline' : 'block'}`,
336
- 'data-inkkit-comment': node.attrs.syntax,
337
- 'aria-label': 'Author comment',
338
- },
339
- 0,
340
- ],
341
- parseMarkdown: {
342
- match: (node) => node.type === mdastType,
343
- runner: (state, node, type) => {
344
- state.openNode(type, {
345
- syntax: node.syntax,
346
- block: inline ? Boolean(node.block) : true,
347
- });
348
- if (node.value)
349
- state.addText(String(node.value));
350
- state.closeNode();
351
- },
352
- },
353
- toMarkdown: {
354
- match: (node) => node.type.name === name,
355
- runner: (state, node) => {
356
- state.addNode(mdastType, undefined, node.textContent, {
357
- syntax: node.attrs.syntax,
358
- block: node.attrs.block,
359
- });
360
- },
361
- },
362
- }));
363
- }
364
- export const commentInline = commentNode(true);
365
- export const commentBlock = commentNode(false);
366
- const visibilityKey = new PluginKey('inkkit-comments-visible');
367
- export const commentVisibility = $prose(() => new Plugin({
368
- key: visibilityKey,
369
- state: {
370
- init: () => false,
371
- apply: (transaction, value) => transaction.getMeta(visibilityKey) ?? value,
372
- },
373
- view(view) {
374
- const update = () => view.dom.setAttribute('data-inkkit-comments-visible', String(visibilityKey.getState(view.state) ?? false));
375
- update();
376
- return { update };
377
- },
378
- }));
379
- export function setCommentVisibility(view, visible) {
380
- if (visibilityKey.getState(view.state) === visible)
381
- return;
382
- view.dispatch(view.state.tr
383
- .setMeta(visibilityKey, visible)
384
- .setMeta('addToHistory', false));
385
- }
386
- export const comments = [commentInline, commentBlock, commentVisibility].flat();
387
- export function isComment(node) {
388
- return (node.type.name === 'comment_inline' || node.type.name === 'comment_block');
389
- }
390
- // Authored reference metadata can retain comments after their visible nodes are removed.
391
- function commentProvenance(value) {
392
- if (typeof value !== 'string')
393
- return false;
394
- const visit = (value) => {
395
- if (Array.isArray(value))
396
- return value.some(visit);
397
- if (!value || typeof value !== 'object')
398
- return false;
399
- const node = value;
400
- return (node.type === 'inkkitCommentInline' ||
401
- node.type === 'inkkitCommentBlock' ||
402
- (node.type === 'html' &&
403
- typeof node.value === 'string' &&
404
- htmlSpans(node.value).length > 0) ||
405
- Boolean(node.children?.some(visit)));
406
- };
407
- try {
408
- return visit(JSON.parse(value));
409
- }
410
- catch {
411
- return true;
412
- }
413
- }
414
- export function shareableFragment(content) {
415
- const filtered = [];
416
- const labelHasComments = (label) => typeof label === 'string' &&
417
- (label.includes('%%') || label.includes('<!--')) &&
418
- literalCommentSpans(label).length > 0;
419
- content.forEach((node) => {
420
- if (isComment(node))
421
- return;
422
- // Shared output treats a standalone image as the paragraph its Markdown holds.
423
- if (isImageBlock(node)) {
424
- const { paragraph, image } = node.type.schema.nodes;
425
- filtered.push(paragraph.create(null, image.create(node.attrs)));
426
- return;
427
- }
428
- if (node.type.name === 'reference_definition' &&
429
- labelHasComments(node.attrs.label))
430
- return;
431
- node = node.mark(node.marks.map((mark) => {
432
- if (mark.type.name !== 'link')
433
- return mark;
434
- const clearTarget = labelHasComments(mark.attrs.label);
435
- if (!clearTarget && !commentProvenance(mark.attrs.referenceContent))
436
- return mark;
437
- return mark.type.create({
438
- ...mark.attrs,
439
- referenceContent: null,
440
- ...(clearTarget
441
- ? { identifier: null, label: null, referenceType: null }
442
- : {}),
443
- });
444
- }));
445
- if (!node.childCount) {
446
- filtered.push(node);
447
- return;
448
- }
449
- const inner = shareableFragment(node.content);
450
- let whitespaceOnly = true, removedComment = false;
451
- inner.forEach((child) => {
452
- if (!(child.isText && !child.text.trim()) &&
453
- child.type.name !== 'hardbreak')
454
- whitespaceOnly = false;
455
- });
456
- node.content.descendants((child) => {
457
- if (isComment(child)) {
458
- removedComment = true;
459
- return false;
460
- }
461
- });
462
- const commentOnly = removedComment && whitespaceOnly;
463
- const paragraph = () => Fragment.from(node.type.schema.nodes.paragraph.create());
464
- if ((inner.size === 0 || commentOnly) && node.content.size > 0) {
465
- if ([
466
- 'footnote_definition',
467
- 'list_item',
468
- 'table_cell',
469
- 'table_header',
470
- 'inkkit_callout',
471
- ].includes(node.type.name))
472
- filtered.push(node.copy(paragraph()));
473
- return;
474
- }
475
- if (!node.type.validContent(inner)) {
476
- if (node.type.name === 'list_item')
477
- filtered.push(node.copy(paragraph().append(inner)));
478
- return;
479
- }
480
- filtered.push(node.copy(inner));
481
- });
482
- return Fragment.fromArray(filtered);
483
- }
484
- // ProseMirror omits a parent wrapper when a selection is wholly inside its text.
485
- export function commentSelectionContent(doc, from, to, content) {
486
- const start = doc.resolve(from);
487
- const end = doc.resolve(to);
488
- for (let depth = start.depth; depth > 0; depth--) {
489
- const node = start.node(depth);
490
- if (isComment(node) && end.depth >= depth && node === end.node(depth))
491
- return Fragment.from(node.copy(node.content.cut(from - start.start(depth), to - start.start(depth))));
492
- }
493
- return content;
494
- }
@@ -1,2 +0,0 @@
1
- export declare function codeCopyPlugin(onCopy: (text: string) => void): import("@milkdown/kit/utils").$Prose;
2
- export declare const placeholderPlugin: import("@milkdown/kit/utils").$Prose;
@@ -1,67 +0,0 @@
1
- import { Plugin, PluginKey } from '@milkdown/kit/prose/state';
2
- import { Decoration, DecorationSet } from '@milkdown/kit/prose/view';
3
- import { $prose } from '@milkdown/kit/utils';
4
- import { editorLabels } from './labels.js';
5
- const copyIcon = '<svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="5.5" y="5.5" width="8" height="8" rx="1.5"/><path d="M10.5 5.5v-2a1 1 0 0 0-1-1h-6a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2"/></svg>';
6
- const doneIcon = '<svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3.5 8.5l3 3 6-6.5"/></svg>';
7
- // The button reads the block's text when clicked, so the same widget can stay
8
- // mounted while the block is edited.
9
- function copyButton(onCopy, label) {
10
- const button = document.createElement('button');
11
- button.type = 'button';
12
- button.className = 'copy';
13
- button.setAttribute('aria-label', label);
14
- button.innerHTML = copyIcon;
15
- button.addEventListener('mousedown', (event) => event.preventDefault());
16
- button.addEventListener('click', () => {
17
- const code = button.closest('pre')?.querySelector('code');
18
- onCopy(code?.textContent ?? '');
19
- button.dataset.copied = '';
20
- button.innerHTML = doneIcon;
21
- window.setTimeout(() => {
22
- delete button.dataset.copied;
23
- button.innerHTML = copyIcon;
24
- }, 1200);
25
- });
26
- return button;
27
- }
28
- export function codeCopyPlugin(onCopy) {
29
- return $prose((ctx) => new Plugin({
30
- key: new PluginKey('codeCopy'),
31
- props: {
32
- decorations(state) {
33
- const widgets = [];
34
- state.doc.descendants((node, pos) => {
35
- if (node.type.name !== 'code_block')
36
- return true;
37
- widgets.push(Decoration.widget(pos + 1, () => copyButton(onCopy, editorLabels(ctx).copyCode), {
38
- side: -1,
39
- key: 'copy',
40
- ignoreSelection: true,
41
- }));
42
- return false;
43
- });
44
- return DecorationSet.create(state.doc, widgets);
45
- },
46
- },
47
- }));
48
- }
49
- export const placeholderPlugin = $prose((ctx) => new Plugin({
50
- key: new PluginKey('placeholder'),
51
- props: {
52
- decorations(state) {
53
- const first = state.doc.firstChild;
54
- if (state.doc.childCount !== 1 ||
55
- !first?.isTextblock ||
56
- first.type.name === 'heading' ||
57
- first.content.size > 0)
58
- return null;
59
- return DecorationSet.create(state.doc, [
60
- Decoration.node(0, first.nodeSize, {
61
- class: 'empty',
62
- 'data-placeholder': editorLabels(ctx).placeholder,
63
- }),
64
- ]);
65
- },
66
- },
67
- }));
package/dist/dialect.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import type { Ctx, MilkdownPlugin } from '@milkdown/kit/ctx';
2
- import type { Node as ProseNode } from '@milkdown/kit/prose/model';
3
- import { type Options as StringifyOptions } from 'mdast-util-to-markdown';
4
- export declare const remarkDialectPlugin: import("@milkdown/kit/utils").$Remark<"remarkDialect", unknown>;
5
- export declare const tables: MilkdownPlugin[];
6
- export declare function createDialect(images: boolean, wikiLinks?: boolean, files?: boolean): MilkdownPlugin[];
7
- export declare const dialect: MilkdownPlugin[];
8
- export declare const stringifyOptions: StringifyOptions;
9
- export declare function serialize(ctx: Ctx, doc?: ProseNode): string;