ablok-components 0.3.34 → 0.3.35

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.
@@ -1,2333 +0,0 @@
1
- import { e as b, a$ as E, aE as y, d as K, aC as B, aB as D, b0 as C, b1 as I, b2 as A, aZ as G, b3 as H, aH as He, i as Ne, at as he, b4 as J, b as w, aP as fe, ar as X, aj as Oe, ai as Re, a2 as me, a0 as _e, a3 as $e, aL as ee, b5 as Be, b6 as De, b7 as te, b8 as ge, b9 as N, ba as j, bb as ze, h as Ke, W as je, as as Ve } from "./index-Ki1Egcx9.mjs";
2
- import { h as ne, B as We } from "./index-Bk6yOA7Y.mjs";
3
- import { Link as Fe } from "./index-DbvQcSeJ.mjs";
4
- var Ue = /^\s*>\s$/, Ge = b.create({
5
- name: "blockquote",
6
- addOptions() {
7
- return {
8
- HTMLAttributes: {}
9
- };
10
- },
11
- content: "block+",
12
- group: "block",
13
- defining: !0,
14
- parseHTML() {
15
- return [{ tag: "blockquote" }];
16
- },
17
- renderHTML({ HTMLAttributes: e }) {
18
- return /* @__PURE__ */ ne("blockquote", { ...y(this.options.HTMLAttributes, e), children: /* @__PURE__ */ ne("slot", {}) });
19
- },
20
- parseMarkdown: (e, t) => t.createNode("blockquote", void 0, t.parseChildren(e.tokens || [])),
21
- renderMarkdown: (e, t) => {
22
- if (!e.content)
23
- return "";
24
- const n = ">", s = [];
25
- return e.content.forEach((r) => {
26
- const a = t.renderChildren([r]).split(`
27
- `).map((l) => l.trim() === "" ? n : `${n} ${l}`);
28
- s.push(a.join(`
29
- `));
30
- }), s.join(`
31
- ${n}
32
- `);
33
- },
34
- addCommands() {
35
- return {
36
- setBlockquote: () => ({ commands: e }) => e.wrapIn(this.name),
37
- toggleBlockquote: () => ({ commands: e }) => e.toggleWrap(this.name),
38
- unsetBlockquote: () => ({ commands: e }) => e.lift(this.name)
39
- };
40
- },
41
- addKeyboardShortcuts() {
42
- return {
43
- "Mod-Shift-b": () => this.editor.commands.toggleBlockquote()
44
- };
45
- },
46
- addInputRules() {
47
- return [
48
- E({
49
- find: Ue,
50
- type: this.type
51
- })
52
- ];
53
- }
54
- }), Xe = /(^|[^`])`([^`]+)`(?!`)$/, qe = /(^|[^`])`([^`]+)`(?!`)/g, Ye = K.create({
55
- name: "code",
56
- addOptions() {
57
- return {
58
- HTMLAttributes: {}
59
- };
60
- },
61
- excludes: "_",
62
- code: !0,
63
- exitable: !0,
64
- parseHTML() {
65
- return [{ tag: "code" }];
66
- },
67
- renderHTML({ HTMLAttributes: e }) {
68
- return ["code", y(this.options.HTMLAttributes, e), 0];
69
- },
70
- markdownTokenName: "codespan",
71
- parseMarkdown: (e, t) => t.applyMark("code", [{ type: "text", text: e.text || "" }]),
72
- renderMarkdown: (e, t) => e.content ? `\`${t.renderChildren(e.content)}\`` : "",
73
- addCommands() {
74
- return {
75
- setCode: () => ({ commands: e }) => e.setMark(this.name),
76
- toggleCode: () => ({ commands: e }) => e.toggleMark(this.name),
77
- unsetCode: () => ({ commands: e }) => e.unsetMark(this.name)
78
- };
79
- },
80
- addKeyboardShortcuts() {
81
- return {
82
- "Mod-e": () => this.editor.commands.toggleCode()
83
- };
84
- },
85
- addInputRules() {
86
- return [
87
- D({
88
- find: Xe,
89
- type: this.type
90
- })
91
- ];
92
- },
93
- addPasteRules() {
94
- return [
95
- B({
96
- find: qe,
97
- type: this.type
98
- })
99
- ];
100
- }
101
- }), W = 4, Je = /^```([a-z]+)?[\s\n]$/, Ze = /^~~~([a-z]+)?[\s\n]$/, Qe = b.create({
102
- name: "codeBlock",
103
- addOptions() {
104
- return {
105
- languageClassPrefix: "language-",
106
- exitOnTripleEnter: !0,
107
- exitOnArrowDown: !0,
108
- defaultLanguage: null,
109
- enableTabIndentation: !1,
110
- tabSize: W,
111
- HTMLAttributes: {}
112
- };
113
- },
114
- content: "text*",
115
- marks: "",
116
- group: "block",
117
- code: !0,
118
- defining: !0,
119
- addAttributes() {
120
- return {
121
- language: {
122
- default: this.options.defaultLanguage,
123
- parseHTML: (e) => {
124
- var t;
125
- const { languageClassPrefix: n } = this.options;
126
- if (!n)
127
- return null;
128
- const i = [...((t = e.firstElementChild) == null ? void 0 : t.classList) || []].filter((o) => o.startsWith(n)).map((o) => o.replace(n, ""))[0];
129
- return i || null;
130
- },
131
- rendered: !1
132
- }
133
- };
134
- },
135
- parseHTML() {
136
- return [
137
- {
138
- tag: "pre",
139
- preserveWhitespace: "full"
140
- }
141
- ];
142
- },
143
- renderHTML({ node: e, HTMLAttributes: t }) {
144
- return [
145
- "pre",
146
- y(this.options.HTMLAttributes, t),
147
- [
148
- "code",
149
- {
150
- class: e.attrs.language ? this.options.languageClassPrefix + e.attrs.language : null
151
- },
152
- 0
153
- ]
154
- ];
155
- },
156
- markdownTokenName: "code",
157
- parseMarkdown: (e, t) => {
158
- var n;
159
- return ((n = e.raw) == null ? void 0 : n.startsWith("```")) === !1 && e.codeBlockStyle !== "indented" ? [] : t.createNode(
160
- "codeBlock",
161
- { language: e.lang || null },
162
- e.text ? [t.createTextNode(e.text)] : []
163
- );
164
- },
165
- renderMarkdown: (e, t) => {
166
- var n;
167
- let s = "";
168
- const r = ((n = e.attrs) == null ? void 0 : n.language) || "";
169
- return e.content ? s = [`\`\`\`${r}`, t.renderChildren(e.content), "```"].join(`
170
- `) : s = `\`\`\`${r}
171
-
172
- \`\`\``, s;
173
- },
174
- addCommands() {
175
- return {
176
- setCodeBlock: (e) => ({ commands: t }) => t.setNode(this.name, e),
177
- toggleCodeBlock: (e) => ({ commands: t }) => t.toggleNode(this.name, "paragraph", e)
178
- };
179
- },
180
- addKeyboardShortcuts() {
181
- return {
182
- "Mod-Alt-c": () => this.editor.commands.toggleCodeBlock(),
183
- // remove code block when at start of document or code block is empty
184
- Backspace: () => {
185
- const { empty: e, $anchor: t } = this.editor.state.selection, n = t.pos === 1;
186
- return !e || t.parent.type.name !== this.name ? !1 : n || !t.parent.textContent.length ? this.editor.commands.clearNodes() : !1;
187
- },
188
- // handle tab indentation
189
- Tab: ({ editor: e }) => {
190
- var t;
191
- if (!this.options.enableTabIndentation)
192
- return !1;
193
- const n = (t = this.options.tabSize) != null ? t : W, { state: s } = e, { selection: r } = s, { $from: i, empty: o } = r;
194
- if (i.parent.type !== this.type)
195
- return !1;
196
- const a = " ".repeat(n);
197
- return o ? e.commands.insertContent(a) : e.commands.command(({ tr: l }) => {
198
- const { from: u, to: p } = r, h = s.doc.textBetween(u, p, `
199
- `, `
200
- `).split(`
201
- `).map((f) => a + f).join(`
202
- `);
203
- return l.replaceWith(u, p, s.schema.text(h)), !0;
204
- });
205
- },
206
- // handle shift+tab reverse indentation
207
- "Shift-Tab": ({ editor: e }) => {
208
- var t;
209
- if (!this.options.enableTabIndentation)
210
- return !1;
211
- const n = (t = this.options.tabSize) != null ? t : W, { state: s } = e, { selection: r } = s, { $from: i, empty: o } = r;
212
- return i.parent.type !== this.type ? !1 : o ? e.commands.command(({ tr: a }) => {
213
- var l;
214
- const { pos: u } = i, p = i.start(), d = i.end(), h = s.doc.textBetween(p, d, `
215
- `, `
216
- `).split(`
217
- `);
218
- let f = 0, m = 0;
219
- const k = u - p;
220
- for (let T = 0; T < h.length; T += 1) {
221
- if (m + h[T].length >= k) {
222
- f = T;
223
- break;
224
- }
225
- m += h[T].length + 1;
226
- }
227
- const Pe = ((l = h[f].match(/^ */)) == null ? void 0 : l[0]) || "", V = Math.min(Pe.length, n);
228
- if (V === 0)
229
- return !0;
230
- let P = p;
231
- for (let T = 0; T < f; T += 1)
232
- P += h[T].length + 1;
233
- return a.delete(P, P + V), u - P <= V && a.setSelection(A.create(a.doc, P)), !0;
234
- }) : e.commands.command(({ tr: a }) => {
235
- const { from: l, to: u } = r, c = s.doc.textBetween(l, u, `
236
- `, `
237
- `).split(`
238
- `).map((h) => {
239
- var f;
240
- const m = ((f = h.match(/^ */)) == null ? void 0 : f[0]) || "", k = Math.min(m.length, n);
241
- return h.slice(k);
242
- }).join(`
243
- `);
244
- return a.replaceWith(l, u, s.schema.text(c)), !0;
245
- });
246
- },
247
- // exit node on triple enter
248
- Enter: ({ editor: e }) => {
249
- if (!this.options.exitOnTripleEnter)
250
- return !1;
251
- const { state: t } = e, { selection: n } = t, { $from: s, empty: r } = n;
252
- if (!r || s.parent.type !== this.type)
253
- return !1;
254
- const i = s.parentOffset === s.parent.nodeSize - 2, o = s.parent.textContent.endsWith(`
255
-
256
- `);
257
- return !i || !o ? !1 : e.chain().command(({ tr: a }) => (a.delete(s.pos - 2, s.pos), !0)).exitCode().run();
258
- },
259
- // exit node on arrow down
260
- ArrowDown: ({ editor: e }) => {
261
- if (!this.options.exitOnArrowDown)
262
- return !1;
263
- const { state: t } = e, { selection: n, doc: s } = t, { $from: r, empty: i } = n;
264
- if (!i || r.parent.type !== this.type || !(r.parentOffset === r.parent.nodeSize - 2))
265
- return !1;
266
- const a = r.after();
267
- return a === void 0 ? !1 : s.nodeAt(a) ? e.commands.command(({ tr: u }) => (u.setSelection(H.near(s.resolve(a))), !0)) : e.commands.exitCode();
268
- }
269
- };
270
- },
271
- addInputRules() {
272
- return [
273
- G({
274
- find: Je,
275
- type: this.type,
276
- getAttributes: (e) => ({
277
- language: e[1]
278
- })
279
- }),
280
- G({
281
- find: Ze,
282
- type: this.type,
283
- getAttributes: (e) => ({
284
- language: e[1]
285
- })
286
- })
287
- ];
288
- },
289
- addProseMirrorPlugins() {
290
- return [
291
- // this plugin creates a code block for pasted content from VS Code
292
- // we can also detect the copied code language
293
- new C({
294
- key: new I("codeBlockVSCodeHandler"),
295
- props: {
296
- handlePaste: (e, t) => {
297
- if (!t.clipboardData || this.editor.isActive(this.type.name))
298
- return !1;
299
- const n = t.clipboardData.getData("text/plain"), s = t.clipboardData.getData("vscode-editor-data"), r = s ? JSON.parse(s) : void 0, i = r?.mode;
300
- if (!n || !i)
301
- return !1;
302
- const { tr: o, schema: a } = e.state, l = a.text(n.replace(/\r\n?/g, `
303
- `));
304
- return o.replaceSelectionWith(this.type.create({ language: i }, l)), o.selection.$from.parent.type !== this.type && o.setSelection(A.near(o.doc.resolve(Math.max(0, o.selection.from - 2)))), o.setMeta("paste", !0), e.dispatch(o), !0;
305
- }
306
- }
307
- })
308
- ];
309
- }
310
- }), et = b.create({
311
- name: "doc",
312
- topNode: !0,
313
- content: "block+",
314
- renderMarkdown: (e, t) => e.content ? t.renderChildren(e.content, `
315
-
316
- `) : ""
317
- }), tt = b.create({
318
- name: "hardBreak",
319
- markdownTokenName: "br",
320
- addOptions() {
321
- return {
322
- keepMarks: !0,
323
- HTMLAttributes: {}
324
- };
325
- },
326
- inline: !0,
327
- group: "inline",
328
- selectable: !1,
329
- linebreakReplacement: !0,
330
- parseHTML() {
331
- return [{ tag: "br" }];
332
- },
333
- renderHTML({ HTMLAttributes: e }) {
334
- return ["br", y(this.options.HTMLAttributes, e)];
335
- },
336
- renderText() {
337
- return `
338
- `;
339
- },
340
- renderMarkdown: () => `
341
- `,
342
- parseMarkdown: () => ({
343
- type: "hardBreak"
344
- }),
345
- addCommands() {
346
- return {
347
- setHardBreak: () => ({ commands: e, chain: t, state: n, editor: s }) => e.first([
348
- () => e.exitCode(),
349
- () => e.command(() => {
350
- const { selection: r, storedMarks: i } = n;
351
- if (r.$from.parent.type.spec.isolating)
352
- return !1;
353
- const { keepMarks: o } = this.options, { splittableMarks: a } = s.extensionManager, l = i || r.$to.parentOffset && r.$from.marks();
354
- return t().insertContent({ type: this.name }).command(({ tr: u, dispatch: p }) => {
355
- if (p && l && o) {
356
- const d = l.filter((c) => a.includes(c.type.name));
357
- u.ensureMarks(d);
358
- }
359
- return !0;
360
- }).run();
361
- })
362
- ])
363
- };
364
- },
365
- addKeyboardShortcuts() {
366
- return {
367
- "Mod-Enter": () => this.editor.commands.setHardBreak(),
368
- "Shift-Enter": () => this.editor.commands.setHardBreak()
369
- };
370
- }
371
- }), nt = b.create({
372
- name: "heading",
373
- addOptions() {
374
- return {
375
- levels: [1, 2, 3, 4, 5, 6],
376
- HTMLAttributes: {}
377
- };
378
- },
379
- content: "inline*",
380
- group: "block",
381
- defining: !0,
382
- addAttributes() {
383
- return {
384
- level: {
385
- default: 1,
386
- rendered: !1
387
- }
388
- };
389
- },
390
- parseHTML() {
391
- return this.options.levels.map((e) => ({
392
- tag: `h${e}`,
393
- attrs: { level: e }
394
- }));
395
- },
396
- renderHTML({ node: e, HTMLAttributes: t }) {
397
- return [`h${this.options.levels.includes(e.attrs.level) ? e.attrs.level : this.options.levels[0]}`, y(this.options.HTMLAttributes, t), 0];
398
- },
399
- parseMarkdown: (e, t) => t.createNode("heading", { level: e.depth || 1 }, t.parseInline(e.tokens || [])),
400
- renderMarkdown: (e, t) => {
401
- var n;
402
- const s = (n = e.attrs) != null && n.level ? parseInt(e.attrs.level, 10) : 1, r = "#".repeat(s);
403
- return e.content ? `${r} ${t.renderChildren(e.content)}` : "";
404
- },
405
- addCommands() {
406
- return {
407
- setHeading: (e) => ({ commands: t }) => this.options.levels.includes(e.level) ? t.setNode(this.name, e) : !1,
408
- toggleHeading: (e) => ({ commands: t }) => this.options.levels.includes(e.level) ? t.toggleNode(this.name, "paragraph", e) : !1
409
- };
410
- },
411
- addKeyboardShortcuts() {
412
- return this.options.levels.reduce(
413
- (e, t) => ({
414
- ...e,
415
- [`Mod-Alt-${t}`]: () => this.editor.commands.toggleHeading({ level: t })
416
- }),
417
- {}
418
- );
419
- },
420
- addInputRules() {
421
- return this.options.levels.map((e) => G({
422
- find: new RegExp(`^(#{${Math.min(...this.options.levels)},${e}})\\s$`),
423
- type: this.type,
424
- getAttributes: {
425
- level: e
426
- }
427
- }));
428
- }
429
- }), rt = b.create({
430
- name: "horizontalRule",
431
- addOptions() {
432
- return {
433
- HTMLAttributes: {},
434
- nextNodeType: "paragraph"
435
- };
436
- },
437
- group: "block",
438
- parseHTML() {
439
- return [{ tag: "hr" }];
440
- },
441
- renderHTML({ HTMLAttributes: e }) {
442
- return ["hr", y(this.options.HTMLAttributes, e)];
443
- },
444
- markdownTokenName: "hr",
445
- parseMarkdown: (e, t) => t.createNode("horizontalRule"),
446
- renderMarkdown: () => "---",
447
- addCommands() {
448
- return {
449
- setHorizontalRule: () => ({ chain: e, state: t }) => {
450
- if (!Ne(t, t.schema.nodes[this.name]))
451
- return !1;
452
- const { selection: n } = t, { $to: s } = n, r = e();
453
- return he(n) ? r.insertContentAt(s.pos, {
454
- type: this.name
455
- }) : r.insertContent({ type: this.name }), r.command(({ state: i, tr: o, dispatch: a }) => {
456
- if (a) {
457
- const { $to: l } = o.selection, u = l.end();
458
- if (l.nodeAfter)
459
- l.nodeAfter.isTextblock ? o.setSelection(A.create(o.doc, l.pos + 1)) : l.nodeAfter.isBlock ? o.setSelection(J.create(o.doc, l.pos)) : o.setSelection(A.create(o.doc, l.pos));
460
- else {
461
- const p = i.schema.nodes[this.options.nextNodeType] || l.parent.type.contentMatch.defaultType, d = p?.create();
462
- d && (o.insert(u, d), o.setSelection(A.create(o.doc, u + 1)));
463
- }
464
- o.scrollIntoView();
465
- }
466
- return !0;
467
- }).run();
468
- }
469
- };
470
- },
471
- addInputRules() {
472
- return [
473
- He({
474
- find: /^(?:---|—-|___\s|\*\*\*\s)$/,
475
- type: this.type
476
- })
477
- ];
478
- }
479
- }), st = /(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))$/, it = /(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))/g, ot = /(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))$/, at = /(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))/g, lt = K.create({
480
- name: "italic",
481
- addOptions() {
482
- return {
483
- HTMLAttributes: {}
484
- };
485
- },
486
- parseHTML() {
487
- return [
488
- {
489
- tag: "em"
490
- },
491
- {
492
- tag: "i",
493
- getAttrs: (e) => e.style.fontStyle !== "normal" && null
494
- },
495
- {
496
- style: "font-style=normal",
497
- clearMark: (e) => e.type.name === this.name
498
- },
499
- {
500
- style: "font-style=italic"
501
- }
502
- ];
503
- },
504
- renderHTML({ HTMLAttributes: e }) {
505
- return ["em", y(this.options.HTMLAttributes, e), 0];
506
- },
507
- addCommands() {
508
- return {
509
- setItalic: () => ({ commands: e }) => e.setMark(this.name),
510
- toggleItalic: () => ({ commands: e }) => e.toggleMark(this.name),
511
- unsetItalic: () => ({ commands: e }) => e.unsetMark(this.name)
512
- };
513
- },
514
- markdownTokenName: "em",
515
- parseMarkdown: (e, t) => t.applyMark("italic", t.parseInline(e.tokens || [])),
516
- renderMarkdown: (e, t) => `*${t.renderChildren(e)}*`,
517
- addKeyboardShortcuts() {
518
- return {
519
- "Mod-i": () => this.editor.commands.toggleItalic(),
520
- "Mod-I": () => this.editor.commands.toggleItalic()
521
- };
522
- },
523
- addInputRules() {
524
- return [
525
- D({
526
- find: st,
527
- type: this.type
528
- }),
529
- D({
530
- find: ot,
531
- type: this.type
532
- })
533
- ];
534
- },
535
- addPasteRules() {
536
- return [
537
- B({
538
- find: it,
539
- type: this.type
540
- }),
541
- B({
542
- find: at,
543
- type: this.type
544
- })
545
- ];
546
- }
547
- }), dt = Object.defineProperty, ut = (e, t) => {
548
- for (var n in t)
549
- dt(e, n, { get: t[n], enumerable: !0 });
550
- }, ct = "listItem", re = "textStyle", se = /^\s*([-+*])\s$/, ke = b.create({
551
- name: "bulletList",
552
- addOptions() {
553
- return {
554
- itemTypeName: "listItem",
555
- HTMLAttributes: {},
556
- keepMarks: !1,
557
- keepAttributes: !1
558
- };
559
- },
560
- group: "block list",
561
- content() {
562
- return `${this.options.itemTypeName}+`;
563
- },
564
- parseHTML() {
565
- return [{ tag: "ul" }];
566
- },
567
- renderHTML({ HTMLAttributes: e }) {
568
- return ["ul", y(this.options.HTMLAttributes, e), 0];
569
- },
570
- markdownTokenName: "list",
571
- parseMarkdown: (e, t) => e.type !== "list" || e.ordered ? [] : {
572
- type: "bulletList",
573
- content: e.items ? t.parseChildren(e.items) : []
574
- },
575
- renderMarkdown: (e, t) => e.content ? t.renderChildren(e.content, `
576
- `) : "",
577
- markdownOptions: {
578
- indentsContent: !0
579
- },
580
- addCommands() {
581
- return {
582
- toggleBulletList: () => ({ commands: e, chain: t }) => this.options.keepAttributes ? t().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ct, this.editor.getAttributes(re)).run() : e.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks)
583
- };
584
- },
585
- addKeyboardShortcuts() {
586
- return {
587
- "Mod-Shift-8": () => this.editor.commands.toggleBulletList()
588
- };
589
- },
590
- addInputRules() {
591
- let e = E({
592
- find: se,
593
- type: this.type
594
- });
595
- return (this.options.keepMarks || this.options.keepAttributes) && (e = E({
596
- find: se,
597
- type: this.type,
598
- keepMarks: this.options.keepMarks,
599
- keepAttributes: this.options.keepAttributes,
600
- getAttributes: () => this.editor.getAttributes(re),
601
- editor: this.editor
602
- })), [e];
603
- }
604
- }), ve = b.create({
605
- name: "listItem",
606
- addOptions() {
607
- return {
608
- HTMLAttributes: {},
609
- bulletListTypeName: "bulletList",
610
- orderedListTypeName: "orderedList"
611
- };
612
- },
613
- content: "paragraph block*",
614
- defining: !0,
615
- parseHTML() {
616
- return [
617
- {
618
- tag: "li"
619
- }
620
- ];
621
- },
622
- renderHTML({ HTMLAttributes: e }) {
623
- return ["li", y(this.options.HTMLAttributes, e), 0];
624
- },
625
- markdownTokenName: "list_item",
626
- parseMarkdown: (e, t) => {
627
- if (e.type !== "list_item")
628
- return [];
629
- let n = [];
630
- if (e.tokens && e.tokens.length > 0)
631
- if (e.tokens.some((r) => r.type === "paragraph"))
632
- n = t.parseChildren(e.tokens);
633
- else {
634
- const r = e.tokens[0];
635
- if (r && r.type === "text" && r.tokens && r.tokens.length > 0) {
636
- if (n = [
637
- {
638
- type: "paragraph",
639
- content: t.parseInline(r.tokens)
640
- }
641
- ], e.tokens.length > 1) {
642
- const o = e.tokens.slice(1), a = t.parseChildren(o);
643
- n.push(...a);
644
- }
645
- } else
646
- n = t.parseChildren(e.tokens);
647
- }
648
- return n.length === 0 && (n = [
649
- {
650
- type: "paragraph",
651
- content: []
652
- }
653
- ]), {
654
- type: "listItem",
655
- content: n
656
- };
657
- },
658
- renderMarkdown: (e, t, n) => fe(
659
- e,
660
- t,
661
- (s) => {
662
- var r, i;
663
- return s.parentType === "bulletList" ? "- " : s.parentType === "orderedList" ? `${(((i = (r = s.meta) == null ? void 0 : r.parentAttrs) == null ? void 0 : i.start) || 1) + s.index}. ` : "- ";
664
- },
665
- n
666
- ),
667
- addKeyboardShortcuts() {
668
- return {
669
- Enter: () => this.editor.commands.splitListItem(this.name),
670
- Tab: () => this.editor.commands.sinkListItem(this.name),
671
- "Shift-Tab": () => this.editor.commands.liftListItem(this.name)
672
- };
673
- }
674
- }), pt = {};
675
- ut(pt, {
676
- findListItemPos: () => O,
677
- getNextListDepth: () => Z,
678
- handleBackspace: () => q,
679
- handleDelete: () => Y,
680
- hasListBefore: () => ye,
681
- hasListItemAfter: () => ht,
682
- hasListItemBefore: () => be,
683
- listItemHasSubList: () => Me,
684
- nextListIsDeeper: () => we,
685
- nextListIsHigher: () => Le
686
- });
687
- var O = (e, t) => {
688
- const { $from: n } = t.selection, s = me(e, t.schema);
689
- let r = null, i = n.depth, o = n.pos, a = null;
690
- for (; i > 0 && a === null; )
691
- r = n.node(i), r.type === s ? a = i : (i -= 1, o -= 1);
692
- return a === null ? null : { $pos: t.doc.resolve(o), depth: a };
693
- }, Z = (e, t) => {
694
- const n = O(e, t);
695
- if (!n)
696
- return !1;
697
- const [, s] = _e(t, e, n.$pos.pos + 4);
698
- return s;
699
- }, ye = (e, t, n) => {
700
- const { $anchor: s } = e.selection, r = Math.max(0, s.pos - 2), i = e.doc.resolve(r).node();
701
- return !(!i || !n.includes(i.type.name));
702
- }, be = (e, t) => {
703
- var n;
704
- const { $anchor: s } = t.selection, r = t.doc.resolve(s.pos - 2);
705
- return !(r.index() === 0 || ((n = r.nodeBefore) == null ? void 0 : n.type.name) !== e);
706
- }, Me = (e, t, n) => {
707
- if (!n)
708
- return !1;
709
- const s = me(e, t.schema);
710
- let r = !1;
711
- return n.descendants((i) => {
712
- i.type === s && (r = !0);
713
- }), r;
714
- }, q = (e, t, n) => {
715
- if (e.commands.undoInputRule())
716
- return !0;
717
- if (e.state.selection.from !== e.state.selection.to)
718
- return !1;
719
- if (!X(e.state, t) && ye(e.state, t, n)) {
720
- const { $anchor: a } = e.state.selection, l = e.state.doc.resolve(a.before() - 1), u = [];
721
- l.node().descendants((c, h) => {
722
- c.type.name === t && u.push({ node: c, pos: h });
723
- });
724
- const p = u.at(-1);
725
- if (!p)
726
- return !1;
727
- const d = e.state.doc.resolve(l.start() + p.pos + 1);
728
- return e.chain().cut({ from: a.start() - 1, to: a.end() + 1 }, d.end()).joinForward().run();
729
- }
730
- if (!X(e.state, t) || !Oe(e.state))
731
- return !1;
732
- const s = O(t, e.state);
733
- if (!s)
734
- return !1;
735
- const i = e.state.doc.resolve(s.$pos.pos - 2).node(s.depth), o = Me(t, e.state, i);
736
- return be(t, e.state) && !o ? e.commands.joinItemBackward() : e.chain().liftListItem(t).run();
737
- }, we = (e, t) => {
738
- const n = Z(e, t), s = O(e, t);
739
- return !s || !n ? !1 : n > s.depth;
740
- }, Le = (e, t) => {
741
- const n = Z(e, t), s = O(e, t);
742
- return !s || !n ? !1 : n < s.depth;
743
- }, Y = (e, t) => {
744
- if (!X(e.state, t) || !Re(e.state, t))
745
- return !1;
746
- const { selection: n } = e.state, { $from: s, $to: r } = n;
747
- return !n.empty && s.sameParent(r) ? !1 : we(t, e.state) ? e.chain().focus(e.state.selection.from + 4).lift(t).joinBackward().run() : Le(t, e.state) ? e.chain().joinForward().joinBackward().run() : e.commands.joinItemForward();
748
- }, ht = (e, t) => {
749
- var n;
750
- const { $anchor: s } = t.selection, r = t.doc.resolve(s.pos - s.parentOffset - 2);
751
- return !(r.index() === r.parent.childCount - 1 || ((n = r.nodeAfter) == null ? void 0 : n.type.name) !== e);
752
- }, Te = w.create({
753
- name: "listKeymap",
754
- addOptions() {
755
- return {
756
- listTypes: [
757
- {
758
- itemName: "listItem",
759
- wrapperNames: ["bulletList", "orderedList"]
760
- },
761
- {
762
- itemName: "taskItem",
763
- wrapperNames: ["taskList"]
764
- }
765
- ]
766
- };
767
- },
768
- addKeyboardShortcuts() {
769
- return {
770
- Delete: ({ editor: e }) => {
771
- let t = !1;
772
- return this.options.listTypes.forEach(({ itemName: n }) => {
773
- e.state.schema.nodes[n] !== void 0 && Y(e, n) && (t = !0);
774
- }), t;
775
- },
776
- "Mod-Delete": ({ editor: e }) => {
777
- let t = !1;
778
- return this.options.listTypes.forEach(({ itemName: n }) => {
779
- e.state.schema.nodes[n] !== void 0 && Y(e, n) && (t = !0);
780
- }), t;
781
- },
782
- Backspace: ({ editor: e }) => {
783
- let t = !1;
784
- return this.options.listTypes.forEach(({ itemName: n, wrapperNames: s }) => {
785
- e.state.schema.nodes[n] !== void 0 && q(e, n, s) && (t = !0);
786
- }), t;
787
- },
788
- "Mod-Backspace": ({ editor: e }) => {
789
- let t = !1;
790
- return this.options.listTypes.forEach(({ itemName: n, wrapperNames: s }) => {
791
- e.state.schema.nodes[n] !== void 0 && q(e, n, s) && (t = !0);
792
- }), t;
793
- }
794
- };
795
- }
796
- }), ie = /^(\s*)(\d+)\.\s+(.*)$/, ft = /^\s/;
797
- function mt(e) {
798
- const t = [];
799
- let n = 0, s = 0;
800
- for (; n < e.length; ) {
801
- const r = e[n], i = r.match(ie);
802
- if (!i)
803
- break;
804
- const [, o, a, l] = i, u = o.length;
805
- let p = l, d = n + 1;
806
- const c = [r];
807
- for (; d < e.length; ) {
808
- const h = e[d];
809
- if (h.match(ie))
810
- break;
811
- if (h.trim() === "")
812
- c.push(h), p += `
813
- `, d += 1;
814
- else if (h.match(ft))
815
- c.push(h), p += `
816
- ${h.slice(u + 2)}`, d += 1;
817
- else
818
- break;
819
- }
820
- t.push({
821
- indent: u,
822
- number: parseInt(a, 10),
823
- content: p.trim(),
824
- raw: c.join(`
825
- `)
826
- }), s = d, n = d;
827
- }
828
- return [t, s];
829
- }
830
- function Ce(e, t, n) {
831
- var s;
832
- const r = [];
833
- let i = 0;
834
- for (; i < e.length; ) {
835
- const o = e[i];
836
- if (o.indent === t) {
837
- const a = o.content.split(`
838
- `), l = ((s = a[0]) == null ? void 0 : s.trim()) || "", u = [];
839
- l && u.push({
840
- type: "paragraph",
841
- raw: l,
842
- tokens: n.inlineTokens(l)
843
- });
844
- const p = a.slice(1).join(`
845
- `).trim();
846
- if (p) {
847
- const h = n.blockTokens(p);
848
- u.push(...h);
849
- }
850
- let d = i + 1;
851
- const c = [];
852
- for (; d < e.length && e[d].indent > t; )
853
- c.push(e[d]), d += 1;
854
- if (c.length > 0) {
855
- const h = Math.min(...c.map((m) => m.indent)), f = Ce(c, h, n);
856
- u.push({
857
- type: "list",
858
- ordered: !0,
859
- start: c[0].number,
860
- items: f,
861
- raw: c.map((m) => m.raw).join(`
862
- `)
863
- });
864
- }
865
- r.push({
866
- type: "list_item",
867
- raw: o.raw,
868
- tokens: u
869
- }), i = d;
870
- } else
871
- i += 1;
872
- }
873
- return r;
874
- }
875
- function gt(e, t) {
876
- return e.map((n) => {
877
- if (n.type !== "list_item")
878
- return t.parseChildren([n])[0];
879
- const s = [];
880
- return n.tokens && n.tokens.length > 0 && n.tokens.forEach((r) => {
881
- if (r.type === "paragraph" || r.type === "list" || r.type === "blockquote" || r.type === "code")
882
- s.push(...t.parseChildren([r]));
883
- else if (r.type === "text" && r.tokens) {
884
- const i = t.parseChildren([r]);
885
- s.push({
886
- type: "paragraph",
887
- content: i
888
- });
889
- } else {
890
- const i = t.parseChildren([r]);
891
- i.length > 0 && s.push(...i);
892
- }
893
- }), {
894
- type: "listItem",
895
- content: s
896
- };
897
- });
898
- }
899
- var kt = "listItem", oe = "textStyle", ae = /^(\d+)\.\s$/, xe = b.create({
900
- name: "orderedList",
901
- addOptions() {
902
- return {
903
- itemTypeName: "listItem",
904
- HTMLAttributes: {},
905
- keepMarks: !1,
906
- keepAttributes: !1
907
- };
908
- },
909
- group: "block list",
910
- content() {
911
- return `${this.options.itemTypeName}+`;
912
- },
913
- addAttributes() {
914
- return {
915
- start: {
916
- default: 1,
917
- parseHTML: (e) => e.hasAttribute("start") ? parseInt(e.getAttribute("start") || "", 10) : 1
918
- },
919
- type: {
920
- default: null,
921
- parseHTML: (e) => e.getAttribute("type")
922
- }
923
- };
924
- },
925
- parseHTML() {
926
- return [
927
- {
928
- tag: "ol"
929
- }
930
- ];
931
- },
932
- renderHTML({ HTMLAttributes: e }) {
933
- const { start: t, ...n } = e;
934
- return t === 1 ? ["ol", y(this.options.HTMLAttributes, n), 0] : ["ol", y(this.options.HTMLAttributes, e), 0];
935
- },
936
- markdownTokenName: "list",
937
- parseMarkdown: (e, t) => {
938
- if (e.type !== "list" || !e.ordered)
939
- return [];
940
- const n = e.start || 1, s = e.items ? gt(e.items, t) : [];
941
- return n !== 1 ? {
942
- type: "orderedList",
943
- attrs: { start: n },
944
- content: s
945
- } : {
946
- type: "orderedList",
947
- content: s
948
- };
949
- },
950
- renderMarkdown: (e, t) => e.content ? t.renderChildren(e.content, `
951
- `) : "",
952
- markdownTokenizer: {
953
- name: "orderedList",
954
- level: "block",
955
- start: (e) => {
956
- const t = e.match(/^(\s*)(\d+)\.\s+/), n = t?.index;
957
- return n !== void 0 ? n : -1;
958
- },
959
- tokenize: (e, t, n) => {
960
- var s;
961
- const r = e.split(`
962
- `), [i, o] = mt(r);
963
- if (i.length === 0)
964
- return;
965
- const a = Ce(i, 0, n);
966
- return a.length === 0 ? void 0 : {
967
- type: "list",
968
- ordered: !0,
969
- start: ((s = i[0]) == null ? void 0 : s.number) || 1,
970
- items: a,
971
- raw: r.slice(0, o).join(`
972
- `)
973
- };
974
- }
975
- },
976
- markdownOptions: {
977
- indentsContent: !0
978
- },
979
- addCommands() {
980
- return {
981
- toggleOrderedList: () => ({ commands: e, chain: t }) => this.options.keepAttributes ? t().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(kt, this.editor.getAttributes(oe)).run() : e.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks)
982
- };
983
- },
984
- addKeyboardShortcuts() {
985
- return {
986
- "Mod-Shift-7": () => this.editor.commands.toggleOrderedList()
987
- };
988
- },
989
- addInputRules() {
990
- let e = E({
991
- find: ae,
992
- type: this.type,
993
- getAttributes: (t) => ({ start: +t[1] }),
994
- joinPredicate: (t, n) => n.childCount + n.attrs.start === +t[1]
995
- });
996
- return (this.options.keepMarks || this.options.keepAttributes) && (e = E({
997
- find: ae,
998
- type: this.type,
999
- keepMarks: this.options.keepMarks,
1000
- keepAttributes: this.options.keepAttributes,
1001
- getAttributes: (t) => ({ start: +t[1], ...this.editor.getAttributes(oe) }),
1002
- joinPredicate: (t, n) => n.childCount + n.attrs.start === +t[1],
1003
- editor: this.editor
1004
- })), [e];
1005
- }
1006
- }), vt = /^\s*(\[([( |x])?\])\s$/, yt = b.create({
1007
- name: "taskItem",
1008
- addOptions() {
1009
- return {
1010
- nested: !1,
1011
- HTMLAttributes: {},
1012
- taskListTypeName: "taskList",
1013
- a11y: void 0
1014
- };
1015
- },
1016
- content() {
1017
- return this.options.nested ? "paragraph block*" : "paragraph+";
1018
- },
1019
- defining: !0,
1020
- addAttributes() {
1021
- return {
1022
- checked: {
1023
- default: !1,
1024
- keepOnSplit: !1,
1025
- parseHTML: (e) => {
1026
- const t = e.getAttribute("data-checked");
1027
- return t === "" || t === "true";
1028
- },
1029
- renderHTML: (e) => ({
1030
- "data-checked": e.checked
1031
- })
1032
- }
1033
- };
1034
- },
1035
- parseHTML() {
1036
- return [
1037
- {
1038
- tag: `li[data-type="${this.name}"]`,
1039
- priority: 51
1040
- }
1041
- ];
1042
- },
1043
- renderHTML({ node: e, HTMLAttributes: t }) {
1044
- return [
1045
- "li",
1046
- y(this.options.HTMLAttributes, t, {
1047
- "data-type": this.name
1048
- }),
1049
- [
1050
- "label",
1051
- [
1052
- "input",
1053
- {
1054
- type: "checkbox",
1055
- checked: e.attrs.checked ? "checked" : null
1056
- }
1057
- ],
1058
- ["span"]
1059
- ],
1060
- ["div", 0]
1061
- ];
1062
- },
1063
- parseMarkdown: (e, t) => {
1064
- const n = [];
1065
- if (e.tokens && e.tokens.length > 0 ? n.push(t.createNode("paragraph", {}, t.parseInline(e.tokens))) : e.text ? n.push(t.createNode("paragraph", {}, [t.createNode("text", { text: e.text })])) : n.push(t.createNode("paragraph", {}, [])), e.nestedTokens && e.nestedTokens.length > 0) {
1066
- const s = t.parseChildren(e.nestedTokens);
1067
- n.push(...s);
1068
- }
1069
- return t.createNode("taskItem", { checked: e.checked || !1 }, n);
1070
- },
1071
- renderMarkdown: (e, t) => {
1072
- var n;
1073
- const r = `- [${(n = e.attrs) != null && n.checked ? "x" : " "}] `;
1074
- return fe(e, t, r);
1075
- },
1076
- addKeyboardShortcuts() {
1077
- const e = {
1078
- Enter: () => this.editor.commands.splitListItem(this.name),
1079
- "Shift-Tab": () => this.editor.commands.liftListItem(this.name)
1080
- };
1081
- return this.options.nested ? {
1082
- ...e,
1083
- Tab: () => this.editor.commands.sinkListItem(this.name)
1084
- } : e;
1085
- },
1086
- addNodeView() {
1087
- return ({ node: e, HTMLAttributes: t, getPos: n, editor: s }) => {
1088
- const r = document.createElement("li"), i = document.createElement("label"), o = document.createElement("span"), a = document.createElement("input"), l = document.createElement("div"), u = (d) => {
1089
- var c, h;
1090
- a.ariaLabel = ((h = (c = this.options.a11y) == null ? void 0 : c.checkboxLabel) == null ? void 0 : h.call(c, d, a.checked)) || `Task item checkbox for ${d.textContent || "empty task item"}`;
1091
- };
1092
- u(e), i.contentEditable = "false", a.type = "checkbox", a.addEventListener("mousedown", (d) => d.preventDefault()), a.addEventListener("change", (d) => {
1093
- if (!s.isEditable && !this.options.onReadOnlyChecked) {
1094
- a.checked = !a.checked;
1095
- return;
1096
- }
1097
- const { checked: c } = d.target;
1098
- s.isEditable && typeof n == "function" && s.chain().focus(void 0, { scrollIntoView: !1 }).command(({ tr: h }) => {
1099
- const f = n();
1100
- if (typeof f != "number")
1101
- return !1;
1102
- const m = h.doc.nodeAt(f);
1103
- return h.setNodeMarkup(f, void 0, {
1104
- ...m?.attrs,
1105
- checked: c
1106
- }), !0;
1107
- }).run(), !s.isEditable && this.options.onReadOnlyChecked && (this.options.onReadOnlyChecked(e, c) || (a.checked = !a.checked));
1108
- }), Object.entries(this.options.HTMLAttributes).forEach(([d, c]) => {
1109
- r.setAttribute(d, c);
1110
- }), r.dataset.checked = e.attrs.checked, a.checked = e.attrs.checked, i.append(a, o), r.append(i, l), Object.entries(t).forEach(([d, c]) => {
1111
- r.setAttribute(d, c);
1112
- });
1113
- let p = new Set(Object.keys(t));
1114
- return {
1115
- dom: r,
1116
- contentDOM: l,
1117
- update: (d) => {
1118
- if (d.type !== this.type)
1119
- return !1;
1120
- r.dataset.checked = d.attrs.checked, a.checked = d.attrs.checked, u(d);
1121
- const c = s.extensionManager.attributes, h = $e(d, c), f = new Set(Object.keys(h)), m = this.options.HTMLAttributes;
1122
- return p.forEach((k) => {
1123
- f.has(k) || (k in m ? r.setAttribute(k, m[k]) : r.removeAttribute(k));
1124
- }), Object.entries(h).forEach(([k, R]) => {
1125
- R == null ? k in m ? r.setAttribute(k, m[k]) : r.removeAttribute(k) : r.setAttribute(k, R);
1126
- }), p = f, !0;
1127
- }
1128
- };
1129
- };
1130
- },
1131
- addInputRules() {
1132
- return [
1133
- E({
1134
- find: vt,
1135
- type: this.type,
1136
- getAttributes: (e) => ({
1137
- checked: e[e.length - 1] === "x"
1138
- })
1139
- })
1140
- ];
1141
- }
1142
- }), bt = b.create({
1143
- name: "taskList",
1144
- addOptions() {
1145
- return {
1146
- itemTypeName: "taskItem",
1147
- HTMLAttributes: {}
1148
- };
1149
- },
1150
- group: "block list",
1151
- content() {
1152
- return `${this.options.itemTypeName}+`;
1153
- },
1154
- parseHTML() {
1155
- return [
1156
- {
1157
- tag: `ul[data-type="${this.name}"]`,
1158
- priority: 51
1159
- }
1160
- ];
1161
- },
1162
- renderHTML({ HTMLAttributes: e }) {
1163
- return ["ul", y(this.options.HTMLAttributes, e, { "data-type": this.name }), 0];
1164
- },
1165
- parseMarkdown: (e, t) => t.createNode("taskList", {}, t.parseChildren(e.items || [])),
1166
- renderMarkdown: (e, t) => e.content ? t.renderChildren(e.content, `
1167
- `) : "",
1168
- markdownTokenizer: {
1169
- name: "taskList",
1170
- level: "block",
1171
- start(e) {
1172
- var t;
1173
- const n = (t = e.match(/^\s*[-+*]\s+\[([ xX])\]\s+/)) == null ? void 0 : t.index;
1174
- return n !== void 0 ? n : -1;
1175
- },
1176
- tokenize(e, t, n) {
1177
- const s = (i) => {
1178
- const o = ee(
1179
- i,
1180
- {
1181
- itemPattern: /^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,
1182
- extractItemData: (a) => ({
1183
- indentLevel: a[1].length,
1184
- mainContent: a[4],
1185
- checked: a[3].toLowerCase() === "x"
1186
- }),
1187
- createToken: (a, l) => ({
1188
- type: "taskItem",
1189
- raw: "",
1190
- mainContent: a.mainContent,
1191
- indentLevel: a.indentLevel,
1192
- checked: a.checked,
1193
- text: a.mainContent,
1194
- tokens: n.inlineTokens(a.mainContent),
1195
- nestedTokens: l
1196
- }),
1197
- // Allow recursive nesting
1198
- customNestedParser: s
1199
- },
1200
- n
1201
- );
1202
- return o ? [
1203
- {
1204
- type: "taskList",
1205
- raw: o.raw,
1206
- items: o.items
1207
- }
1208
- ] : n.blockTokens(i);
1209
- }, r = ee(
1210
- e,
1211
- {
1212
- itemPattern: /^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,
1213
- extractItemData: (i) => ({
1214
- indentLevel: i[1].length,
1215
- mainContent: i[4],
1216
- checked: i[3].toLowerCase() === "x"
1217
- }),
1218
- createToken: (i, o) => ({
1219
- type: "taskItem",
1220
- raw: "",
1221
- mainContent: i.mainContent,
1222
- indentLevel: i.indentLevel,
1223
- checked: i.checked,
1224
- text: i.mainContent,
1225
- tokens: n.inlineTokens(i.mainContent),
1226
- nestedTokens: o
1227
- }),
1228
- // Use the recursive parser for nested content
1229
- customNestedParser: s
1230
- },
1231
- n
1232
- );
1233
- if (r)
1234
- return {
1235
- type: "taskList",
1236
- raw: r.raw,
1237
- items: r.items
1238
- };
1239
- }
1240
- },
1241
- markdownOptions: {
1242
- indentsContent: !0
1243
- },
1244
- addCommands() {
1245
- return {
1246
- toggleTaskList: () => ({ commands: e }) => e.toggleList(this.name, this.options.itemTypeName)
1247
- };
1248
- },
1249
- addKeyboardShortcuts() {
1250
- return {
1251
- "Mod-Shift-9": () => this.editor.commands.toggleTaskList()
1252
- };
1253
- }
1254
- });
1255
- w.create({
1256
- name: "listKit",
1257
- addExtensions() {
1258
- const e = [];
1259
- return this.options.bulletList !== !1 && e.push(ke.configure(this.options.bulletList)), this.options.listItem !== !1 && e.push(ve.configure(this.options.listItem)), this.options.listKeymap !== !1 && e.push(Te.configure(this.options.listKeymap)), this.options.orderedList !== !1 && e.push(xe.configure(this.options.orderedList)), this.options.taskItem !== !1 && e.push(yt.configure(this.options.taskItem)), this.options.taskList !== !1 && e.push(bt.configure(this.options.taskList)), e;
1260
- }
1261
- });
1262
- var le = "&nbsp;", Mt = " ", wt = b.create({
1263
- name: "paragraph",
1264
- priority: 1e3,
1265
- addOptions() {
1266
- return {
1267
- HTMLAttributes: {}
1268
- };
1269
- },
1270
- group: "block",
1271
- content: "inline*",
1272
- parseHTML() {
1273
- return [{ tag: "p" }];
1274
- },
1275
- renderHTML({ HTMLAttributes: e }) {
1276
- return ["p", y(this.options.HTMLAttributes, e), 0];
1277
- },
1278
- parseMarkdown: (e, t) => {
1279
- const n = e.tokens || [];
1280
- if (n.length === 1 && n[0].type === "image")
1281
- return t.parseChildren([n[0]]);
1282
- const s = t.parseInline(n);
1283
- return s.length === 1 && s[0].type === "text" && (s[0].text === le || s[0].text === Mt) ? t.createNode("paragraph", void 0, []) : t.createNode("paragraph", void 0, s);
1284
- },
1285
- renderMarkdown: (e, t) => {
1286
- if (!e)
1287
- return "";
1288
- const n = Array.isArray(e.content) ? e.content : [];
1289
- return n.length === 0 ? le : t.renderChildren(n);
1290
- },
1291
- addCommands() {
1292
- return {
1293
- setParagraph: () => ({ commands: e }) => e.setNode(this.name)
1294
- };
1295
- },
1296
- addKeyboardShortcuts() {
1297
- return {
1298
- "Mod-Alt-0": () => this.editor.commands.setParagraph()
1299
- };
1300
- }
1301
- }), Lt = /(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))$/, Tt = /(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))/g, Ct = K.create({
1302
- name: "strike",
1303
- addOptions() {
1304
- return {
1305
- HTMLAttributes: {}
1306
- };
1307
- },
1308
- parseHTML() {
1309
- return [
1310
- {
1311
- tag: "s"
1312
- },
1313
- {
1314
- tag: "del"
1315
- },
1316
- {
1317
- tag: "strike"
1318
- },
1319
- {
1320
- style: "text-decoration",
1321
- consuming: !1,
1322
- getAttrs: (e) => e.includes("line-through") ? {} : !1
1323
- }
1324
- ];
1325
- },
1326
- renderHTML({ HTMLAttributes: e }) {
1327
- return ["s", y(this.options.HTMLAttributes, e), 0];
1328
- },
1329
- markdownTokenName: "del",
1330
- parseMarkdown: (e, t) => t.applyMark("strike", t.parseInline(e.tokens || [])),
1331
- renderMarkdown: (e, t) => `~~${t.renderChildren(e)}~~`,
1332
- addCommands() {
1333
- return {
1334
- setStrike: () => ({ commands: e }) => e.setMark(this.name),
1335
- toggleStrike: () => ({ commands: e }) => e.toggleMark(this.name),
1336
- unsetStrike: () => ({ commands: e }) => e.unsetMark(this.name)
1337
- };
1338
- },
1339
- addKeyboardShortcuts() {
1340
- return {
1341
- "Mod-Shift-s": () => this.editor.commands.toggleStrike()
1342
- };
1343
- },
1344
- addInputRules() {
1345
- return [
1346
- D({
1347
- find: Lt,
1348
- type: this.type
1349
- })
1350
- ];
1351
- },
1352
- addPasteRules() {
1353
- return [
1354
- B({
1355
- find: Tt,
1356
- type: this.type
1357
- })
1358
- ];
1359
- }
1360
- }), xt = b.create({
1361
- name: "text",
1362
- group: "inline",
1363
- parseMarkdown: (e) => ({
1364
- type: "text",
1365
- text: e.text || ""
1366
- }),
1367
- renderMarkdown: (e) => e.text || ""
1368
- }), It = K.create({
1369
- name: "underline",
1370
- addOptions() {
1371
- return {
1372
- HTMLAttributes: {}
1373
- };
1374
- },
1375
- parseHTML() {
1376
- return [
1377
- {
1378
- tag: "u"
1379
- },
1380
- {
1381
- style: "text-decoration",
1382
- consuming: !1,
1383
- getAttrs: (e) => e.includes("underline") ? {} : !1
1384
- }
1385
- ];
1386
- },
1387
- renderHTML({ HTMLAttributes: e }) {
1388
- return ["u", y(this.options.HTMLAttributes, e), 0];
1389
- },
1390
- parseMarkdown(e, t) {
1391
- return t.applyMark(this.name || "underline", t.parseInline(e.tokens || []));
1392
- },
1393
- renderMarkdown(e, t) {
1394
- return `++${t.renderChildren(e)}++`;
1395
- },
1396
- markdownTokenizer: {
1397
- name: "underline",
1398
- level: "inline",
1399
- start(e) {
1400
- return e.indexOf("++");
1401
- },
1402
- tokenize(e, t, n) {
1403
- const r = /^(\+\+)([\s\S]+?)(\+\+)/.exec(e);
1404
- if (!r)
1405
- return;
1406
- const i = r[2].trim();
1407
- return {
1408
- type: "underline",
1409
- raw: r[0],
1410
- text: i,
1411
- tokens: n.inlineTokens(i)
1412
- };
1413
- }
1414
- },
1415
- addCommands() {
1416
- return {
1417
- setUnderline: () => ({ commands: e }) => e.setMark(this.name),
1418
- toggleUnderline: () => ({ commands: e }) => e.toggleMark(this.name),
1419
- unsetUnderline: () => ({ commands: e }) => e.unsetMark(this.name)
1420
- };
1421
- },
1422
- addKeyboardShortcuts() {
1423
- return {
1424
- "Mod-u": () => this.editor.commands.toggleUnderline(),
1425
- "Mod-U": () => this.editor.commands.toggleUnderline()
1426
- };
1427
- }
1428
- });
1429
- function At(e = {}) {
1430
- return new C({
1431
- view(t) {
1432
- return new St(t, e);
1433
- }
1434
- });
1435
- }
1436
- class St {
1437
- constructor(t, n) {
1438
- var s;
1439
- this.editorView = t, this.cursorPos = null, this.element = null, this.timeout = -1, this.width = (s = n.width) !== null && s !== void 0 ? s : 1, this.color = n.color === !1 ? void 0 : n.color || "black", this.class = n.class, this.handlers = ["dragover", "dragend", "drop", "dragleave"].map((r) => {
1440
- let i = (o) => {
1441
- this[r](o);
1442
- };
1443
- return t.dom.addEventListener(r, i), { name: r, handler: i };
1444
- });
1445
- }
1446
- destroy() {
1447
- this.handlers.forEach(({ name: t, handler: n }) => this.editorView.dom.removeEventListener(t, n));
1448
- }
1449
- update(t, n) {
1450
- this.cursorPos != null && n.doc != t.state.doc && (this.cursorPos > t.state.doc.content.size ? this.setCursor(null) : this.updateOverlay());
1451
- }
1452
- setCursor(t) {
1453
- t != this.cursorPos && (this.cursorPos = t, t == null ? (this.element.parentNode.removeChild(this.element), this.element = null) : this.updateOverlay());
1454
- }
1455
- updateOverlay() {
1456
- let t = this.editorView.state.doc.resolve(this.cursorPos), n = !t.parent.inlineContent, s, r = this.editorView.dom, i = r.getBoundingClientRect(), o = i.width / r.offsetWidth, a = i.height / r.offsetHeight;
1457
- if (n) {
1458
- let d = t.nodeBefore, c = t.nodeAfter;
1459
- if (d || c) {
1460
- let h = this.editorView.nodeDOM(this.cursorPos - (d ? d.nodeSize : 0));
1461
- if (h) {
1462
- let f = h.getBoundingClientRect(), m = d ? f.bottom : f.top;
1463
- d && c && (m = (m + this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top) / 2);
1464
- let k = this.width / 2 * a;
1465
- s = { left: f.left, right: f.right, top: m - k, bottom: m + k };
1466
- }
1467
- }
1468
- }
1469
- if (!s) {
1470
- let d = this.editorView.coordsAtPos(this.cursorPos), c = this.width / 2 * o;
1471
- s = { left: d.left - c, right: d.left + c, top: d.top, bottom: d.bottom };
1472
- }
1473
- let l = this.editorView.dom.offsetParent;
1474
- this.element || (this.element = l.appendChild(document.createElement("div")), this.class && (this.element.className = this.class), this.element.style.cssText = "position: absolute; z-index: 50; pointer-events: none;", this.color && (this.element.style.backgroundColor = this.color)), this.element.classList.toggle("prosemirror-dropcursor-block", n), this.element.classList.toggle("prosemirror-dropcursor-inline", !n);
1475
- let u, p;
1476
- if (!l || l == document.body && getComputedStyle(l).position == "static")
1477
- u = -pageXOffset, p = -pageYOffset;
1478
- else {
1479
- let d = l.getBoundingClientRect(), c = d.width / l.offsetWidth, h = d.height / l.offsetHeight;
1480
- u = d.left - l.scrollLeft * c, p = d.top - l.scrollTop * h;
1481
- }
1482
- this.element.style.left = (s.left - u) / o + "px", this.element.style.top = (s.top - p) / a + "px", this.element.style.width = (s.right - s.left) / o + "px", this.element.style.height = (s.bottom - s.top) / a + "px";
1483
- }
1484
- scheduleRemoval(t) {
1485
- clearTimeout(this.timeout), this.timeout = setTimeout(() => this.setCursor(null), t);
1486
- }
1487
- dragover(t) {
1488
- if (!this.editorView.editable)
1489
- return;
1490
- let n = this.editorView.posAtCoords({ left: t.clientX, top: t.clientY }), s = n && n.inside >= 0 && this.editorView.state.doc.nodeAt(n.inside), r = s && s.type.spec.disableDropCursor, i = typeof r == "function" ? r(this.editorView, n, t) : r;
1491
- if (n && !i) {
1492
- let o = n.pos;
1493
- if (this.editorView.dragging && this.editorView.dragging.slice) {
1494
- let a = Be(this.editorView.state.doc, o, this.editorView.dragging.slice);
1495
- a != null && (o = a);
1496
- }
1497
- this.setCursor(o), this.scheduleRemoval(5e3);
1498
- }
1499
- }
1500
- dragend() {
1501
- this.scheduleRemoval(20);
1502
- }
1503
- drop() {
1504
- this.scheduleRemoval(20);
1505
- }
1506
- dragleave(t) {
1507
- this.editorView.dom.contains(t.relatedTarget) || this.setCursor(null);
1508
- }
1509
- }
1510
- class g extends H {
1511
- /**
1512
- Create a gap cursor.
1513
- */
1514
- constructor(t) {
1515
- super(t, t);
1516
- }
1517
- map(t, n) {
1518
- let s = t.resolve(n.map(this.head));
1519
- return g.valid(s) ? new g(s) : H.near(s);
1520
- }
1521
- content() {
1522
- return ge.empty;
1523
- }
1524
- eq(t) {
1525
- return t instanceof g && t.head == this.head;
1526
- }
1527
- toJSON() {
1528
- return { type: "gapcursor", pos: this.head };
1529
- }
1530
- /**
1531
- @internal
1532
- */
1533
- static fromJSON(t, n) {
1534
- if (typeof n.pos != "number")
1535
- throw new RangeError("Invalid input for GapCursor.fromJSON");
1536
- return new g(t.resolve(n.pos));
1537
- }
1538
- /**
1539
- @internal
1540
- */
1541
- getBookmark() {
1542
- return new Q(this.anchor);
1543
- }
1544
- /**
1545
- @internal
1546
- */
1547
- static valid(t) {
1548
- let n = t.parent;
1549
- if (n.isTextblock || !Et(t) || !Pt(t))
1550
- return !1;
1551
- let s = n.type.spec.allowGapCursor;
1552
- if (s != null)
1553
- return s;
1554
- let r = n.contentMatchAt(t.index()).defaultType;
1555
- return r && r.isTextblock;
1556
- }
1557
- /**
1558
- @internal
1559
- */
1560
- static findGapCursorFrom(t, n, s = !1) {
1561
- e: for (; ; ) {
1562
- if (!s && g.valid(t))
1563
- return t;
1564
- let r = t.pos, i = null;
1565
- for (let o = t.depth; ; o--) {
1566
- let a = t.node(o);
1567
- if (n > 0 ? t.indexAfter(o) < a.childCount : t.index(o) > 0) {
1568
- i = a.child(n > 0 ? t.indexAfter(o) : t.index(o) - 1);
1569
- break;
1570
- } else if (o == 0)
1571
- return null;
1572
- r += n;
1573
- let l = t.doc.resolve(r);
1574
- if (g.valid(l))
1575
- return l;
1576
- }
1577
- for (; ; ) {
1578
- let o = n > 0 ? i.firstChild : i.lastChild;
1579
- if (!o) {
1580
- if (i.isAtom && !i.isText && !J.isSelectable(i)) {
1581
- t = t.doc.resolve(r + i.nodeSize * n), s = !1;
1582
- continue e;
1583
- }
1584
- break;
1585
- }
1586
- i = o, r += n;
1587
- let a = t.doc.resolve(r);
1588
- if (g.valid(a))
1589
- return a;
1590
- }
1591
- return null;
1592
- }
1593
- }
1594
- }
1595
- g.prototype.visible = !1;
1596
- g.findFrom = g.findGapCursorFrom;
1597
- H.jsonID("gapcursor", g);
1598
- class Q {
1599
- constructor(t) {
1600
- this.pos = t;
1601
- }
1602
- map(t) {
1603
- return new Q(t.map(this.pos));
1604
- }
1605
- resolve(t) {
1606
- let n = t.resolve(this.pos);
1607
- return g.valid(n) ? new g(n) : H.near(n);
1608
- }
1609
- }
1610
- function Et(e) {
1611
- for (let t = e.depth; t >= 0; t--) {
1612
- let n = e.index(t), s = e.node(t);
1613
- if (n == 0) {
1614
- if (s.type.spec.isolating)
1615
- return !0;
1616
- continue;
1617
- }
1618
- for (let r = s.child(n - 1); ; r = r.lastChild) {
1619
- if (r.childCount == 0 && !r.inlineContent || r.isAtom || r.type.spec.isolating)
1620
- return !0;
1621
- if (r.inlineContent)
1622
- return !1;
1623
- }
1624
- }
1625
- return !0;
1626
- }
1627
- function Pt(e) {
1628
- for (let t = e.depth; t >= 0; t--) {
1629
- let n = e.indexAfter(t), s = e.node(t);
1630
- if (n == s.childCount) {
1631
- if (s.type.spec.isolating)
1632
- return !0;
1633
- continue;
1634
- }
1635
- for (let r = s.child(n); ; r = r.firstChild) {
1636
- if (r.childCount == 0 && !r.inlineContent || r.isAtom || r.type.spec.isolating)
1637
- return !0;
1638
- if (r.inlineContent)
1639
- return !1;
1640
- }
1641
- }
1642
- return !0;
1643
- }
1644
- function Ht() {
1645
- return new C({
1646
- props: {
1647
- decorations: _t,
1648
- createSelectionBetween(e, t, n) {
1649
- return t.pos == n.pos && g.valid(n) ? new g(n) : null;
1650
- },
1651
- handleClick: Ot,
1652
- handleKeyDown: Nt,
1653
- handleDOMEvents: { beforeinput: Rt }
1654
- }
1655
- });
1656
- }
1657
- const Nt = De({
1658
- ArrowLeft: _("horiz", -1),
1659
- ArrowRight: _("horiz", 1),
1660
- ArrowUp: _("vert", -1),
1661
- ArrowDown: _("vert", 1)
1662
- });
1663
- function _(e, t) {
1664
- const n = e == "vert" ? t > 0 ? "down" : "up" : t > 0 ? "right" : "left";
1665
- return function(s, r, i) {
1666
- let o = s.selection, a = t > 0 ? o.$to : o.$from, l = o.empty;
1667
- if (o instanceof A) {
1668
- if (!i.endOfTextblock(n) || a.depth == 0)
1669
- return !1;
1670
- l = !1, a = s.doc.resolve(t > 0 ? a.after() : a.before());
1671
- }
1672
- let u = g.findGapCursorFrom(a, t, l);
1673
- return u ? (r && r(s.tr.setSelection(new g(u))), !0) : !1;
1674
- };
1675
- }
1676
- function Ot(e, t, n) {
1677
- if (!e || !e.editable)
1678
- return !1;
1679
- let s = e.state.doc.resolve(t);
1680
- if (!g.valid(s))
1681
- return !1;
1682
- let r = e.posAtCoords({ left: n.clientX, top: n.clientY });
1683
- return r && r.inside > -1 && J.isSelectable(e.state.doc.nodeAt(r.inside)) ? !1 : (e.dispatch(e.state.tr.setSelection(new g(s))), !0);
1684
- }
1685
- function Rt(e, t) {
1686
- if (t.inputType != "insertCompositionText" || !(e.state.selection instanceof g))
1687
- return !1;
1688
- let { $from: n } = e.state.selection, s = n.parent.contentMatchAt(n.index()).findWrapping(e.state.schema.nodes.text);
1689
- if (!s)
1690
- return !1;
1691
- let r = te.empty;
1692
- for (let o = s.length - 1; o >= 0; o--)
1693
- r = te.from(s[o].createAndFill(null, r));
1694
- let i = e.state.tr.replace(n.pos, n.pos, new ge(r, 0, 0));
1695
- return i.setSelection(A.near(i.doc.resolve(n.pos + 1))), e.dispatch(i), !1;
1696
- }
1697
- function _t(e) {
1698
- if (!(e.selection instanceof g))
1699
- return null;
1700
- let t = document.createElement("div");
1701
- return t.className = "ProseMirror-gapcursor", N.create(e.doc, [j.widget(e.selection.head, t, { key: "gapcursor" })]);
1702
- }
1703
- var z = 200, v = function() {
1704
- };
1705
- v.prototype.append = function(t) {
1706
- return t.length ? (t = v.from(t), !this.length && t || t.length < z && this.leafAppend(t) || this.length < z && t.leafPrepend(this) || this.appendInner(t)) : this;
1707
- };
1708
- v.prototype.prepend = function(t) {
1709
- return t.length ? v.from(t).append(this) : this;
1710
- };
1711
- v.prototype.appendInner = function(t) {
1712
- return new $t(this, t);
1713
- };
1714
- v.prototype.slice = function(t, n) {
1715
- return t === void 0 && (t = 0), n === void 0 && (n = this.length), t >= n ? v.empty : this.sliceInner(Math.max(0, t), Math.min(this.length, n));
1716
- };
1717
- v.prototype.get = function(t) {
1718
- if (!(t < 0 || t >= this.length))
1719
- return this.getInner(t);
1720
- };
1721
- v.prototype.forEach = function(t, n, s) {
1722
- n === void 0 && (n = 0), s === void 0 && (s = this.length), n <= s ? this.forEachInner(t, n, s, 0) : this.forEachInvertedInner(t, n, s, 0);
1723
- };
1724
- v.prototype.map = function(t, n, s) {
1725
- n === void 0 && (n = 0), s === void 0 && (s = this.length);
1726
- var r = [];
1727
- return this.forEach(function(i, o) {
1728
- return r.push(t(i, o));
1729
- }, n, s), r;
1730
- };
1731
- v.from = function(t) {
1732
- return t instanceof v ? t : t && t.length ? new Ie(t) : v.empty;
1733
- };
1734
- var Ie = /* @__PURE__ */ (function(e) {
1735
- function t(s) {
1736
- e.call(this), this.values = s;
1737
- }
1738
- e && (t.__proto__ = e), t.prototype = Object.create(e && e.prototype), t.prototype.constructor = t;
1739
- var n = { length: { configurable: !0 }, depth: { configurable: !0 } };
1740
- return t.prototype.flatten = function() {
1741
- return this.values;
1742
- }, t.prototype.sliceInner = function(r, i) {
1743
- return r == 0 && i == this.length ? this : new t(this.values.slice(r, i));
1744
- }, t.prototype.getInner = function(r) {
1745
- return this.values[r];
1746
- }, t.prototype.forEachInner = function(r, i, o, a) {
1747
- for (var l = i; l < o; l++)
1748
- if (r(this.values[l], a + l) === !1)
1749
- return !1;
1750
- }, t.prototype.forEachInvertedInner = function(r, i, o, a) {
1751
- for (var l = i - 1; l >= o; l--)
1752
- if (r(this.values[l], a + l) === !1)
1753
- return !1;
1754
- }, t.prototype.leafAppend = function(r) {
1755
- if (this.length + r.length <= z)
1756
- return new t(this.values.concat(r.flatten()));
1757
- }, t.prototype.leafPrepend = function(r) {
1758
- if (this.length + r.length <= z)
1759
- return new t(r.flatten().concat(this.values));
1760
- }, n.length.get = function() {
1761
- return this.values.length;
1762
- }, n.depth.get = function() {
1763
- return 0;
1764
- }, Object.defineProperties(t.prototype, n), t;
1765
- })(v);
1766
- v.empty = new Ie([]);
1767
- var $t = /* @__PURE__ */ (function(e) {
1768
- function t(n, s) {
1769
- e.call(this), this.left = n, this.right = s, this.length = n.length + s.length, this.depth = Math.max(n.depth, s.depth) + 1;
1770
- }
1771
- return e && (t.__proto__ = e), t.prototype = Object.create(e && e.prototype), t.prototype.constructor = t, t.prototype.flatten = function() {
1772
- return this.left.flatten().concat(this.right.flatten());
1773
- }, t.prototype.getInner = function(s) {
1774
- return s < this.left.length ? this.left.get(s) : this.right.get(s - this.left.length);
1775
- }, t.prototype.forEachInner = function(s, r, i, o) {
1776
- var a = this.left.length;
1777
- if (r < a && this.left.forEachInner(s, r, Math.min(i, a), o) === !1 || i > a && this.right.forEachInner(s, Math.max(r - a, 0), Math.min(this.length, i) - a, o + a) === !1)
1778
- return !1;
1779
- }, t.prototype.forEachInvertedInner = function(s, r, i, o) {
1780
- var a = this.left.length;
1781
- if (r > a && this.right.forEachInvertedInner(s, r - a, Math.max(i, a) - a, o + a) === !1 || i < a && this.left.forEachInvertedInner(s, Math.min(r, a), i, o) === !1)
1782
- return !1;
1783
- }, t.prototype.sliceInner = function(s, r) {
1784
- if (s == 0 && r == this.length)
1785
- return this;
1786
- var i = this.left.length;
1787
- return r <= i ? this.left.slice(s, r) : s >= i ? this.right.slice(s - i, r - i) : this.left.slice(s, i).append(this.right.slice(0, r - i));
1788
- }, t.prototype.leafAppend = function(s) {
1789
- var r = this.right.leafAppend(s);
1790
- if (r)
1791
- return new t(this.left, r);
1792
- }, t.prototype.leafPrepend = function(s) {
1793
- var r = this.left.leafPrepend(s);
1794
- if (r)
1795
- return new t(r, this.right);
1796
- }, t.prototype.appendInner = function(s) {
1797
- return this.left.depth >= Math.max(this.right.depth, s.depth) + 1 ? new t(this.left, new t(this.right, s)) : new t(this, s);
1798
- }, t;
1799
- })(v);
1800
- const Bt = 500;
1801
- class M {
1802
- constructor(t, n) {
1803
- this.items = t, this.eventCount = n;
1804
- }
1805
- // Pop the latest event off the branch's history and apply it
1806
- // to a document transform.
1807
- popEvent(t, n) {
1808
- if (this.eventCount == 0)
1809
- return null;
1810
- let s = this.items.length;
1811
- for (; ; s--)
1812
- if (this.items.get(s - 1).selection) {
1813
- --s;
1814
- break;
1815
- }
1816
- let r, i;
1817
- n && (r = this.remapping(s, this.items.length), i = r.maps.length);
1818
- let o = t.tr, a, l, u = [], p = [];
1819
- return this.items.forEach((d, c) => {
1820
- if (!d.step) {
1821
- r || (r = this.remapping(s, c + 1), i = r.maps.length), i--, p.push(d);
1822
- return;
1823
- }
1824
- if (r) {
1825
- p.push(new L(d.map));
1826
- let h = d.step.map(r.slice(i)), f;
1827
- h && o.maybeStep(h).doc && (f = o.mapping.maps[o.mapping.maps.length - 1], u.push(new L(f, void 0, void 0, u.length + p.length))), i--, f && r.appendMap(f, i);
1828
- } else
1829
- o.maybeStep(d.step);
1830
- if (d.selection)
1831
- return a = r ? d.selection.map(r.slice(i)) : d.selection, l = new M(this.items.slice(0, s).append(p.reverse().concat(u)), this.eventCount - 1), !1;
1832
- }, this.items.length, 0), { remaining: l, transform: o, selection: a };
1833
- }
1834
- // Create a new branch with the given transform added.
1835
- addTransform(t, n, s, r) {
1836
- let i = [], o = this.eventCount, a = this.items, l = !r && a.length ? a.get(a.length - 1) : null;
1837
- for (let p = 0; p < t.steps.length; p++) {
1838
- let d = t.steps[p].invert(t.docs[p]), c = new L(t.mapping.maps[p], d, n), h;
1839
- (h = l && l.merge(c)) && (c = h, p ? i.pop() : a = a.slice(0, a.length - 1)), i.push(c), n && (o++, n = void 0), r || (l = c);
1840
- }
1841
- let u = o - s.depth;
1842
- return u > zt && (a = Dt(a, u), o -= u), new M(a.append(i), o);
1843
- }
1844
- remapping(t, n) {
1845
- let s = new ze();
1846
- return this.items.forEach((r, i) => {
1847
- let o = r.mirrorOffset != null && i - r.mirrorOffset >= t ? s.maps.length - r.mirrorOffset : void 0;
1848
- s.appendMap(r.map, o);
1849
- }, t, n), s;
1850
- }
1851
- addMaps(t) {
1852
- return this.eventCount == 0 ? this : new M(this.items.append(t.map((n) => new L(n))), this.eventCount);
1853
- }
1854
- // When the collab module receives remote changes, the history has
1855
- // to know about those, so that it can adjust the steps that were
1856
- // rebased on top of the remote changes, and include the position
1857
- // maps for the remote changes in its array of items.
1858
- rebased(t, n) {
1859
- if (!this.eventCount)
1860
- return this;
1861
- let s = [], r = Math.max(0, this.items.length - n), i = t.mapping, o = t.steps.length, a = this.eventCount;
1862
- this.items.forEach((c) => {
1863
- c.selection && a--;
1864
- }, r);
1865
- let l = n;
1866
- this.items.forEach((c) => {
1867
- let h = i.getMirror(--l);
1868
- if (h == null)
1869
- return;
1870
- o = Math.min(o, h);
1871
- let f = i.maps[h];
1872
- if (c.step) {
1873
- let m = t.steps[h].invert(t.docs[h]), k = c.selection && c.selection.map(i.slice(l + 1, h));
1874
- k && a++, s.push(new L(f, m, k));
1875
- } else
1876
- s.push(new L(f));
1877
- }, r);
1878
- let u = [];
1879
- for (let c = n; c < o; c++)
1880
- u.push(new L(i.maps[c]));
1881
- let p = this.items.slice(0, r).append(u).append(s), d = new M(p, a);
1882
- return d.emptyItemCount() > Bt && (d = d.compress(this.items.length - s.length)), d;
1883
- }
1884
- emptyItemCount() {
1885
- let t = 0;
1886
- return this.items.forEach((n) => {
1887
- n.step || t++;
1888
- }), t;
1889
- }
1890
- // Compressing a branch means rewriting it to push the air (map-only
1891
- // items) out. During collaboration, these naturally accumulate
1892
- // because each remote change adds one. The `upto` argument is used
1893
- // to ensure that only the items below a given level are compressed,
1894
- // because `rebased` relies on a clean, untouched set of items in
1895
- // order to associate old items with rebased steps.
1896
- compress(t = this.items.length) {
1897
- let n = this.remapping(0, t), s = n.maps.length, r = [], i = 0;
1898
- return this.items.forEach((o, a) => {
1899
- if (a >= t)
1900
- r.push(o), o.selection && i++;
1901
- else if (o.step) {
1902
- let l = o.step.map(n.slice(s)), u = l && l.getMap();
1903
- if (s--, u && n.appendMap(u, s), l) {
1904
- let p = o.selection && o.selection.map(n.slice(s));
1905
- p && i++;
1906
- let d = new L(u.invert(), l, p), c, h = r.length - 1;
1907
- (c = r.length && r[h].merge(d)) ? r[h] = c : r.push(d);
1908
- }
1909
- } else o.map && s--;
1910
- }, this.items.length, 0), new M(v.from(r.reverse()), i);
1911
- }
1912
- }
1913
- M.empty = new M(v.empty, 0);
1914
- function Dt(e, t) {
1915
- let n;
1916
- return e.forEach((s, r) => {
1917
- if (s.selection && t-- == 0)
1918
- return n = r, !1;
1919
- }), e.slice(n);
1920
- }
1921
- class L {
1922
- constructor(t, n, s, r) {
1923
- this.map = t, this.step = n, this.selection = s, this.mirrorOffset = r;
1924
- }
1925
- merge(t) {
1926
- if (this.step && t.step && !t.selection) {
1927
- let n = t.step.merge(this.step);
1928
- if (n)
1929
- return new L(n.getMap().invert(), n, this.selection);
1930
- }
1931
- }
1932
- }
1933
- class x {
1934
- constructor(t, n, s, r, i) {
1935
- this.done = t, this.undone = n, this.prevRanges = s, this.prevTime = r, this.prevComposition = i;
1936
- }
1937
- }
1938
- const zt = 20;
1939
- function Kt(e, t, n, s) {
1940
- let r = n.getMeta(S), i;
1941
- if (r)
1942
- return r.historyState;
1943
- n.getMeta(Wt) && (e = new x(e.done, e.undone, null, 0, -1));
1944
- let o = n.getMeta("appendedTransaction");
1945
- if (n.steps.length == 0)
1946
- return e;
1947
- if (o && o.getMeta(S))
1948
- return o.getMeta(S).redo ? new x(e.done.addTransform(n, void 0, s, $(t)), e.undone, de(n.mapping.maps), e.prevTime, e.prevComposition) : new x(e.done, e.undone.addTransform(n, void 0, s, $(t)), null, e.prevTime, e.prevComposition);
1949
- if (n.getMeta("addToHistory") !== !1 && !(o && o.getMeta("addToHistory") === !1)) {
1950
- let a = n.getMeta("composition"), l = e.prevTime == 0 || !o && e.prevComposition != a && (e.prevTime < (n.time || 0) - s.newGroupDelay || !jt(n, e.prevRanges)), u = o ? F(e.prevRanges, n.mapping) : de(n.mapping.maps);
1951
- return new x(e.done.addTransform(n, l ? t.selection.getBookmark() : void 0, s, $(t)), M.empty, u, n.time, a ?? e.prevComposition);
1952
- } else return (i = n.getMeta("rebased")) ? new x(e.done.rebased(n, i), e.undone.rebased(n, i), F(e.prevRanges, n.mapping), e.prevTime, e.prevComposition) : new x(e.done.addMaps(n.mapping.maps), e.undone.addMaps(n.mapping.maps), F(e.prevRanges, n.mapping), e.prevTime, e.prevComposition);
1953
- }
1954
- function jt(e, t) {
1955
- if (!t)
1956
- return !1;
1957
- if (!e.docChanged)
1958
- return !0;
1959
- let n = !1;
1960
- return e.mapping.maps[0].forEach((s, r) => {
1961
- for (let i = 0; i < t.length; i += 2)
1962
- s <= t[i + 1] && r >= t[i] && (n = !0);
1963
- }), n;
1964
- }
1965
- function de(e) {
1966
- let t = [];
1967
- for (let n = e.length - 1; n >= 0 && t.length == 0; n--)
1968
- e[n].forEach((s, r, i, o) => t.push(i, o));
1969
- return t;
1970
- }
1971
- function F(e, t) {
1972
- if (!e)
1973
- return null;
1974
- let n = [];
1975
- for (let s = 0; s < e.length; s += 2) {
1976
- let r = t.map(e[s], 1), i = t.map(e[s + 1], -1);
1977
- r <= i && n.push(r, i);
1978
- }
1979
- return n;
1980
- }
1981
- function Vt(e, t, n) {
1982
- let s = $(t), r = S.get(t).spec.config, i = (n ? e.undone : e.done).popEvent(t, s);
1983
- if (!i)
1984
- return null;
1985
- let o = i.selection.resolve(i.transform.doc), a = (n ? e.done : e.undone).addTransform(i.transform, t.selection.getBookmark(), r, s), l = new x(n ? a : i.remaining, n ? i.remaining : a, null, 0, -1);
1986
- return i.transform.setSelection(o).setMeta(S, { redo: n, historyState: l });
1987
- }
1988
- let U = !1, ue = null;
1989
- function $(e) {
1990
- let t = e.plugins;
1991
- if (ue != t) {
1992
- U = !1, ue = t;
1993
- for (let n = 0; n < t.length; n++)
1994
- if (t[n].spec.historyPreserveItems) {
1995
- U = !0;
1996
- break;
1997
- }
1998
- }
1999
- return U;
2000
- }
2001
- const S = new I("history"), Wt = new I("closeHistory");
2002
- function Ft(e = {}) {
2003
- return e = {
2004
- depth: e.depth || 100,
2005
- newGroupDelay: e.newGroupDelay || 500
2006
- }, new C({
2007
- key: S,
2008
- state: {
2009
- init() {
2010
- return new x(M.empty, M.empty, null, 0, -1);
2011
- },
2012
- apply(t, n, s) {
2013
- return Kt(n, s, t, e);
2014
- }
2015
- },
2016
- config: e,
2017
- props: {
2018
- handleDOMEvents: {
2019
- beforeinput(t, n) {
2020
- let s = n.inputType, r = s == "historyUndo" ? Se : s == "historyRedo" ? Ee : null;
2021
- return r ? (n.preventDefault(), r(t.state, t.dispatch)) : !1;
2022
- }
2023
- }
2024
- }
2025
- });
2026
- }
2027
- function Ae(e, t) {
2028
- return (n, s) => {
2029
- let r = S.getState(n);
2030
- if (!r || (e ? r.undone : r.done).eventCount == 0)
2031
- return !1;
2032
- if (s) {
2033
- let i = Vt(r, n, e);
2034
- i && s(t ? i.scrollIntoView() : i);
2035
- }
2036
- return !0;
2037
- };
2038
- }
2039
- const Se = Ae(!1, !0), Ee = Ae(!0, !0);
2040
- w.create({
2041
- name: "characterCount",
2042
- addOptions() {
2043
- return {
2044
- limit: null,
2045
- mode: "textSize",
2046
- textCounter: (e) => e.length,
2047
- wordCounter: (e) => e.split(" ").filter((t) => t !== "").length
2048
- };
2049
- },
2050
- addStorage() {
2051
- return {
2052
- characters: () => 0,
2053
- words: () => 0
2054
- };
2055
- },
2056
- onBeforeCreate() {
2057
- this.storage.characters = (e) => {
2058
- const t = e?.node || this.editor.state.doc;
2059
- if ((e?.mode || this.options.mode) === "textSize") {
2060
- const s = t.textBetween(0, t.content.size, void 0, " ");
2061
- return this.options.textCounter(s);
2062
- }
2063
- return t.nodeSize;
2064
- }, this.storage.words = (e) => {
2065
- const t = e?.node || this.editor.state.doc, n = t.textBetween(0, t.content.size, " ", " ");
2066
- return this.options.wordCounter(n);
2067
- };
2068
- },
2069
- addProseMirrorPlugins() {
2070
- let e = !1;
2071
- return [
2072
- new C({
2073
- key: new I("characterCount"),
2074
- appendTransaction: (t, n, s) => {
2075
- if (e)
2076
- return;
2077
- const r = this.options.limit;
2078
- if (r == null || r === 0) {
2079
- e = !0;
2080
- return;
2081
- }
2082
- const i = this.storage.characters({ node: s.doc });
2083
- if (i > r) {
2084
- const o = i - r, a = 0, l = o;
2085
- console.warn(
2086
- `[CharacterCount] Initial content exceeded limit of ${r} characters. Content was automatically trimmed.`
2087
- );
2088
- const u = s.tr.deleteRange(a, l);
2089
- return e = !0, u;
2090
- }
2091
- e = !0;
2092
- },
2093
- filterTransaction: (t, n) => {
2094
- const s = this.options.limit;
2095
- if (!t.docChanged || s === 0 || s === null || s === void 0)
2096
- return !0;
2097
- const r = this.storage.characters({ node: n.doc }), i = this.storage.characters({ node: t.doc });
2098
- if (i <= s || r > s && i > s && i <= r)
2099
- return !0;
2100
- if (r > s && i > s && i > r || !t.getMeta("paste"))
2101
- return !1;
2102
- const a = t.selection.$head.pos, l = i - s, u = a - l, p = a;
2103
- return t.deleteRange(u, p), !(this.storage.characters({ node: t.doc }) > s);
2104
- }
2105
- })
2106
- ];
2107
- }
2108
- });
2109
- var Ut = w.create({
2110
- name: "dropCursor",
2111
- addOptions() {
2112
- return {
2113
- color: "currentColor",
2114
- width: 1,
2115
- class: void 0
2116
- };
2117
- },
2118
- addProseMirrorPlugins() {
2119
- return [At(this.options)];
2120
- }
2121
- });
2122
- w.create({
2123
- name: "focus",
2124
- addOptions() {
2125
- return {
2126
- className: "has-focus",
2127
- mode: "all"
2128
- };
2129
- },
2130
- addProseMirrorPlugins() {
2131
- return [
2132
- new C({
2133
- key: new I("focus"),
2134
- props: {
2135
- decorations: ({ doc: e, selection: t }) => {
2136
- const { isEditable: n, isFocused: s } = this.editor, { anchor: r } = t, i = [];
2137
- if (!n || !s)
2138
- return N.create(e, []);
2139
- let o = 0;
2140
- this.options.mode === "deepest" && e.descendants((l, u) => {
2141
- if (l.isText)
2142
- return;
2143
- if (!(r >= u && r <= u + l.nodeSize - 1))
2144
- return !1;
2145
- o += 1;
2146
- });
2147
- let a = 0;
2148
- return e.descendants((l, u) => {
2149
- if (l.isText || !(r >= u && r <= u + l.nodeSize - 1))
2150
- return !1;
2151
- if (a += 1, this.options.mode === "deepest" && o - a > 0 || this.options.mode === "shallowest" && a > 1)
2152
- return this.options.mode === "deepest";
2153
- i.push(
2154
- j.node(u, u + l.nodeSize, {
2155
- class: this.options.className
2156
- })
2157
- );
2158
- }), N.create(e, i);
2159
- }
2160
- }
2161
- })
2162
- ];
2163
- }
2164
- });
2165
- var Gt = w.create({
2166
- name: "gapCursor",
2167
- addProseMirrorPlugins() {
2168
- return [Ht()];
2169
- },
2170
- extendNodeSchema(e) {
2171
- var t;
2172
- const n = {
2173
- name: e.name,
2174
- options: e.options,
2175
- storage: e.storage
2176
- };
2177
- return {
2178
- allowGapCursor: (t = Ke(je(e, "allowGapCursor", n))) != null ? t : null
2179
- };
2180
- }
2181
- }), ce = "placeholder";
2182
- function Xt(e) {
2183
- return e.replace(/\s+/g, "-").replace(/[^a-zA-Z0-9-]/g, "").replace(/^[0-9-]+/, "").replace(/^-+/, "").toLowerCase();
2184
- }
2185
- w.create({
2186
- name: "placeholder",
2187
- addOptions() {
2188
- return {
2189
- emptyEditorClass: "is-editor-empty",
2190
- emptyNodeClass: "is-empty",
2191
- dataAttribute: ce,
2192
- placeholder: "Write something …",
2193
- showOnlyWhenEditable: !0,
2194
- showOnlyCurrent: !0,
2195
- includeChildren: !1
2196
- };
2197
- },
2198
- addProseMirrorPlugins() {
2199
- const e = this.options.dataAttribute ? `data-${Xt(this.options.dataAttribute)}` : `data-${ce}`;
2200
- return [
2201
- new C({
2202
- key: new I("placeholder"),
2203
- props: {
2204
- decorations: ({ doc: t, selection: n }) => {
2205
- const s = this.editor.isEditable || !this.options.showOnlyWhenEditable, { anchor: r } = n, i = [];
2206
- if (!s)
2207
- return null;
2208
- const o = this.editor.isEmpty;
2209
- return t.descendants((a, l) => {
2210
- const u = r >= l && r <= l + a.nodeSize, p = !a.isLeaf && Ve(a);
2211
- if ((u || !this.options.showOnlyCurrent) && p) {
2212
- const d = [this.options.emptyNodeClass];
2213
- o && d.push(this.options.emptyEditorClass);
2214
- const c = j.node(l, l + a.nodeSize, {
2215
- class: d.join(" "),
2216
- [e]: typeof this.options.placeholder == "function" ? this.options.placeholder({
2217
- editor: this.editor,
2218
- node: a,
2219
- pos: l,
2220
- hasAnchor: u
2221
- }) : this.options.placeholder
2222
- });
2223
- i.push(c);
2224
- }
2225
- return this.options.includeChildren;
2226
- }), N.create(t, i);
2227
- }
2228
- }
2229
- })
2230
- ];
2231
- }
2232
- });
2233
- w.create({
2234
- name: "selection",
2235
- addOptions() {
2236
- return {
2237
- className: "selection"
2238
- };
2239
- },
2240
- addProseMirrorPlugins() {
2241
- const { editor: e, options: t } = this;
2242
- return [
2243
- new C({
2244
- key: new I("selection"),
2245
- props: {
2246
- decorations(n) {
2247
- return n.selection.empty || e.isFocused || !e.isEditable || he(n.selection) || e.view.dragging ? null : N.create(n.doc, [
2248
- j.inline(n.selection.from, n.selection.to, {
2249
- class: t.className
2250
- })
2251
- ]);
2252
- }
2253
- }
2254
- })
2255
- ];
2256
- }
2257
- });
2258
- function pe({ types: e, node: t }) {
2259
- return t && Array.isArray(e) && e.includes(t.type) || t?.type === e;
2260
- }
2261
- var qt = w.create({
2262
- name: "trailingNode",
2263
- addOptions() {
2264
- return {
2265
- node: void 0,
2266
- notAfter: []
2267
- };
2268
- },
2269
- addProseMirrorPlugins() {
2270
- var e;
2271
- const t = new I(this.name), n = this.options.node || ((e = this.editor.schema.topNodeType.contentMatch.defaultType) == null ? void 0 : e.name) || "paragraph", s = Object.entries(this.editor.schema.nodes).map(([, r]) => r).filter((r) => (this.options.notAfter || []).concat(n).includes(r.name));
2272
- return [
2273
- new C({
2274
- key: t,
2275
- appendTransaction: (r, i, o) => {
2276
- const { doc: a, tr: l, schema: u } = o, p = t.getState(o), d = a.content.size, c = u.nodes[n];
2277
- if (p)
2278
- return l.insert(d, c.create());
2279
- },
2280
- state: {
2281
- init: (r, i) => {
2282
- const o = i.tr.doc.lastChild;
2283
- return !pe({ node: o, types: s });
2284
- },
2285
- apply: (r, i) => {
2286
- if (!r.docChanged || r.getMeta("__uniqueIDTransaction"))
2287
- return i;
2288
- const o = r.doc.lastChild;
2289
- return !pe({ node: o, types: s });
2290
- }
2291
- }
2292
- })
2293
- ];
2294
- }
2295
- }), Yt = w.create({
2296
- name: "undoRedo",
2297
- addOptions() {
2298
- return {
2299
- depth: 100,
2300
- newGroupDelay: 500
2301
- };
2302
- },
2303
- addCommands() {
2304
- return {
2305
- undo: () => ({ state: e, dispatch: t }) => Se(e, t),
2306
- redo: () => ({ state: e, dispatch: t }) => Ee(e, t)
2307
- };
2308
- },
2309
- addProseMirrorPlugins() {
2310
- return [Ft(this.options)];
2311
- },
2312
- addKeyboardShortcuts() {
2313
- return {
2314
- "Mod-z": () => this.editor.commands.undo(),
2315
- "Shift-Mod-z": () => this.editor.commands.redo(),
2316
- "Mod-y": () => this.editor.commands.redo(),
2317
- // Russian keyboard layouts
2318
- "Mod-я": () => this.editor.commands.undo(),
2319
- "Shift-Mod-я": () => this.editor.commands.redo()
2320
- };
2321
- }
2322
- }), Jt = w.create({
2323
- name: "starterKit",
2324
- addExtensions() {
2325
- var e, t, n, s;
2326
- const r = [];
2327
- return this.options.bold !== !1 && r.push(We.configure(this.options.bold)), this.options.blockquote !== !1 && r.push(Ge.configure(this.options.blockquote)), this.options.bulletList !== !1 && r.push(ke.configure(this.options.bulletList)), this.options.code !== !1 && r.push(Ye.configure(this.options.code)), this.options.codeBlock !== !1 && r.push(Qe.configure(this.options.codeBlock)), this.options.document !== !1 && r.push(et.configure(this.options.document)), this.options.dropcursor !== !1 && r.push(Ut.configure(this.options.dropcursor)), this.options.gapcursor !== !1 && r.push(Gt.configure(this.options.gapcursor)), this.options.hardBreak !== !1 && r.push(tt.configure(this.options.hardBreak)), this.options.heading !== !1 && r.push(nt.configure(this.options.heading)), this.options.undoRedo !== !1 && r.push(Yt.configure(this.options.undoRedo)), this.options.horizontalRule !== !1 && r.push(rt.configure(this.options.horizontalRule)), this.options.italic !== !1 && r.push(lt.configure(this.options.italic)), this.options.listItem !== !1 && r.push(ve.configure(this.options.listItem)), this.options.listKeymap !== !1 && r.push(Te.configure((e = this.options) == null ? void 0 : e.listKeymap)), this.options.link !== !1 && r.push(Fe.configure((t = this.options) == null ? void 0 : t.link)), this.options.orderedList !== !1 && r.push(xe.configure(this.options.orderedList)), this.options.paragraph !== !1 && r.push(wt.configure(this.options.paragraph)), this.options.strike !== !1 && r.push(Ct.configure(this.options.strike)), this.options.text !== !1 && r.push(xt.configure(this.options.text)), this.options.underline !== !1 && r.push(It.configure((n = this.options) == null ? void 0 : n.underline)), this.options.trailingNode !== !1 && r.push(qt.configure((s = this.options) == null ? void 0 : s.trailingNode)), r;
2328
- }
2329
- }), nn = Jt;
2330
- export {
2331
- Jt as StarterKit,
2332
- nn as default
2333
- };