@cyberyozh/text-editor 0.1.15 → 0.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/render.mjs CHANGED
@@ -29,7 +29,7 @@ function handleExitNode(editor, nodeName) {
29
29
  if (!isInsideTargetNode || !isCurrentNodeEmptyParagraph) {
30
30
  return false;
31
31
  }
32
- const { tr } = state;
32
+ const { tr: tr2 } = state;
33
33
  const posAfterTargetNode = $pos.after(targetNodeDepth);
34
34
  const targetNode = $pos.node(targetNodeDepth);
35
35
  let newPosAfterTargetNode = posAfterTargetNode;
@@ -37,14 +37,14 @@ function handleExitNode(editor, nodeName) {
37
37
  const emptyParagraphStart = $pos.before();
38
38
  const emptyParagraphEnd = $pos.after();
39
39
  const deletionLength = emptyParagraphEnd - emptyParagraphStart;
40
- tr.delete(emptyParagraphStart, emptyParagraphEnd);
40
+ tr2.delete(emptyParagraphStart, emptyParagraphEnd);
41
41
  newPosAfterTargetNode = posAfterTargetNode - deletionLength;
42
42
  }
43
43
  const paragraphNode = schema.nodes.paragraph.createAndFill();
44
44
  if (!paragraphNode) return false;
45
- tr.insert(newPosAfterTargetNode, paragraphNode);
46
- tr.setSelection(TextSelection.create(tr.doc, newPosAfterTargetNode + 1));
47
- view.dispatch(tr);
45
+ tr2.insert(newPosAfterTargetNode, paragraphNode);
46
+ tr2.setSelection(TextSelection.create(tr2.doc, newPosAfterTargetNode + 1));
47
+ view.dispatch(tr2);
48
48
  return true;
49
49
  }
50
50
 
@@ -64,7 +64,7 @@ function migrateLegacyCallouts(editor) {
64
64
  }
65
65
  });
66
66
  if (calloutsToMigrate.length === 0) return;
67
- const tr = editor.state.tr;
67
+ const tr2 = editor.state.tr;
68
68
  calloutsToMigrate.sort((a, b) => b.pos - a.pos);
69
69
  for (const { node, pos } of calloutsToMigrate) {
70
70
  const oldType = node.attrs.calloutType;
@@ -73,7 +73,7 @@ function migrateLegacyCallouts(editor) {
73
73
  if (hasInlineContent) {
74
74
  const paragraph = schema.nodes.paragraph?.create(null, node.content);
75
75
  const newContent = paragraph ? [paragraph] : [];
76
- tr.replaceRangeWith(
76
+ tr2.replaceRangeWith(
77
77
  pos,
78
78
  pos + node.nodeSize,
79
79
  schema.nodes.callout.create(
@@ -86,7 +86,7 @@ function migrateLegacyCallouts(editor) {
86
86
  )
87
87
  );
88
88
  } else {
89
- tr.setNodeMarkup(pos, void 0, {
89
+ tr2.setNodeMarkup(pos, void 0, {
90
90
  ...node.attrs,
91
91
  type: newType,
92
92
  calloutType: null,
@@ -94,7 +94,7 @@ function migrateLegacyCallouts(editor) {
94
94
  });
95
95
  }
96
96
  }
97
- editor.view.dispatch(tr);
97
+ editor.view.dispatch(tr2);
98
98
  }
99
99
 
100
100
  // src/extensions/base/callout.ts
@@ -302,13 +302,13 @@ var BaseCustomQuote = Node2.create({
302
302
  if (!isInsideCustomQuote) {
303
303
  return false;
304
304
  }
305
- const { tr } = state;
305
+ const { tr: tr2 } = state;
306
306
  const posAfter = $pos.after(depth);
307
307
  const paragraphNode = schema.nodes.paragraph.createAndFill();
308
308
  if (!paragraphNode) return false;
309
- tr.insert(posAfter, paragraphNode);
310
- tr.setSelection(TextSelection2.create(tr.doc, posAfter + 1));
311
- view.dispatch(tr);
309
+ tr2.insert(posAfter, paragraphNode);
310
+ tr2.setSelection(TextSelection2.create(tr2.doc, posAfter + 1));
311
+ view.dispatch(tr2);
312
312
  return true;
313
313
  }
314
314
  };
@@ -341,7 +341,7 @@ var BaseCustomQuoteText = Node2.create({
341
341
  return {
342
342
  Enter: () => {
343
343
  const { view, state } = this.editor;
344
- const { tr, selection } = state;
344
+ const { tr: tr2, selection } = state;
345
345
  const { $from } = selection;
346
346
  if ($from.parent.type.name !== "customQuoteText") {
347
347
  return false;
@@ -350,8 +350,8 @@ var BaseCustomQuoteText = Node2.create({
350
350
  const nextNode = state.doc.nodeAt(posAfter);
351
351
  if (!nextNode || nextNode.type.name !== "customQuoteAuthor") return false;
352
352
  const nextNodeEnd = posAfter + nextNode.nodeSize - 1;
353
- tr.setSelection(TextSelection2.create(tr.doc, nextNodeEnd));
354
- view.dispatch(tr);
353
+ tr2.setSelection(TextSelection2.create(tr2.doc, nextNodeEnd));
354
+ view.dispatch(tr2);
355
355
  return true;
356
356
  }
357
357
  };
@@ -376,7 +376,7 @@ var BaseCustomQuoteAuthor = Node2.create({
376
376
  return {
377
377
  Enter: () => {
378
378
  const { view, state } = this.editor;
379
- const { tr, selection } = state;
379
+ const { tr: tr2, selection } = state;
380
380
  const { $from } = selection;
381
381
  if ($from.parent.type.name !== "customQuoteAuthor") {
382
382
  return false;
@@ -385,8 +385,8 @@ var BaseCustomQuoteAuthor = Node2.create({
385
385
  const nextNode = state.doc.nodeAt(posAfter);
386
386
  if (!nextNode || nextNode.type.name !== "customQuoteSign") return false;
387
387
  const nextNodeEnd = posAfter + nextNode.nodeSize - 1;
388
- tr.setSelection(TextSelection2.create(tr.doc, nextNodeEnd));
389
- view.dispatch(tr);
388
+ tr2.setSelection(TextSelection2.create(tr2.doc, nextNodeEnd));
389
+ view.dispatch(tr2);
390
390
  return true;
391
391
  }
392
392
  };
@@ -420,16 +420,1188 @@ var BaseCustomQuoteSign = Node2.create({
420
420
  });
421
421
 
422
422
  // src/extensions/base/link.ts
423
- import Link from "@tiptap/extension-link";
423
+ import Link, { isAllowedUri } from "@tiptap/extension-link";
424
+ import { markPasteRule } from "@tiptap/core";
425
+
426
+ // node_modules/linkifyjs/dist/linkify.mjs
427
+ var encodedTlds = "aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5m\xF6gensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2";
428
+ var encodedUtlds = "\u03B5\u03BB1\u03C52\u0431\u04331\u0435\u043B3\u0434\u0435\u0442\u04384\u0435\u044E2\u043A\u0430\u0442\u043E\u043B\u0438\u043A6\u043E\u043C3\u043C\u043A\u04342\u043E\u043D1\u0441\u043A\u0432\u04306\u043E\u043D\u043B\u0430\u0439\u043D5\u0440\u04333\u0440\u0443\u04412\u04442\u0441\u0430\u0439\u04423\u0440\u04313\u0443\u043A\u04403\u049B\u0430\u04373\u0570\u0561\u05753\u05D9\u05E9\u05E8\u05D0\u05DC5\u05E7\u05D5\u05DD3\u0627\u0628\u0648\u0638\u0628\u064A5\u0631\u0627\u0645\u0643\u06485\u0644\u0627\u0631\u062F\u06464\u0628\u062D\u0631\u064A\u06465\u062C\u0632\u0627\u0626\u06315\u0633\u0639\u0648\u062F\u064A\u06296\u0639\u0644\u064A\u0627\u06465\u0645\u063A\u0631\u06285\u0645\u0627\u0631\u0627\u062A5\u06CC\u0631\u0627\u06465\u0628\u0627\u0631\u062A2\u0632\u0627\u06314\u064A\u062A\u06433\u06BE\u0627\u0631\u062A5\u062A\u0648\u0646\u06334\u0633\u0648\u062F\u0627\u06463\u0631\u064A\u06295\u0634\u0628\u0643\u06294\u0639\u0631\u0627\u06422\u06282\u0645\u0627\u06464\u0641\u0644\u0633\u0637\u064A\u06466\u0642\u0637\u06313\u0643\u0627\u062B\u0648\u0644\u064A\u06436\u0648\u06453\u0645\u0635\u06312\u0644\u064A\u0633\u064A\u06275\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u06277\u0642\u06394\u0647\u0645\u0631\u0627\u06475\u067E\u0627\u06A9\u0633\u062A\u0627\u06467\u0680\u0627\u0631\u062A4\u0915\u0949\u092E3\u0928\u0947\u091F3\u092D\u093E\u0930\u09240\u092E\u094D3\u094B\u09245\u0938\u0902\u0917\u0920\u09285\u09AC\u09BE\u0982\u09B2\u09BE5\u09AD\u09BE\u09B0\u09A42\u09F0\u09A44\u0A2D\u0A3E\u0A30\u0A244\u0AAD\u0ABE\u0AB0\u0AA44\u0B2D\u0B3E\u0B30\u0B244\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE6\u0BB2\u0B99\u0BCD\u0B95\u0BC86\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD11\u0C2D\u0C3E\u0C30\u0C24\u0C4D5\u0CAD\u0CBE\u0CB0\u0CA44\u0D2D\u0D3E\u0D30\u0D24\u0D025\u0DBD\u0D82\u0D9A\u0DCF4\u0E04\u0E2D\u0E213\u0E44\u0E17\u0E223\u0EA5\u0EB2\u0EA73\u10D2\u10D42\u307F\u3093\u306A3\u30A2\u30DE\u30BE\u30F34\u30AF\u30E9\u30A6\u30C94\u30B0\u30FC\u30B0\u30EB4\u30B3\u30E02\u30B9\u30C8\u30A23\u30BB\u30FC\u30EB3\u30D5\u30A1\u30C3\u30B7\u30E7\u30F36\u30DD\u30A4\u30F3\u30C84\u4E16\u754C2\u4E2D\u4FE11\u56FD1\u570B1\u6587\u7F513\u4E9A\u9A6C\u900A3\u4F01\u4E1A2\u4F5B\u5C712\u4FE1\u606F2\u5065\u5EB72\u516B\u53662\u516C\u53F81\u76CA2\u53F0\u6E7E1\u70632\u5546\u57CE1\u5E971\u68072\u5609\u91CC0\u5927\u9152\u5E975\u5728\u7EBF2\u5927\u62FF2\u5929\u4E3B\u65593\u5A31\u4E502\u5BB6\u96FB2\u5E7F\u4E1C2\u5FAE\u535A2\u6148\u55842\u6211\u7231\u4F603\u624B\u673A2\u62DB\u80582\u653F\u52A11\u5E9C2\u65B0\u52A0\u57612\u95FB2\u65F6\u5C1A2\u66F8\u7C4D2\u673A\u67842\u6DE1\u9A6C\u95213\u6E38\u620F2\u6FB3\u95802\u70B9\u770B2\u79FB\u52A82\u7EC4\u7EC7\u673A\u67844\u7F51\u57401\u5E971\u7AD91\u7EDC2\u8054\u901A2\u8C37\u6B4C2\u8D2D\u72692\u901A\u8CA92\u96C6\u56E22\u96FB\u8A0A\u76C8\u79D14\u98DE\u5229\u6D663\u98DF\u54C12\u9910\u53852\u9999\u683C\u91CC\u62C93\u6E2F2\uB2F7\uB1371\uCEF42\uC0BC\uC1312\uD55C\uAD6D2";
429
+ var numeric = "numeric";
430
+ var ascii = "ascii";
431
+ var alpha = "alpha";
432
+ var asciinumeric = "asciinumeric";
433
+ var alphanumeric = "alphanumeric";
434
+ var domain = "domain";
435
+ var emoji = "emoji";
436
+ var scheme = "scheme";
437
+ var slashscheme = "slashscheme";
438
+ var whitespace = "whitespace";
439
+ function registerGroup(name, groups) {
440
+ if (!(name in groups)) {
441
+ groups[name] = [];
442
+ }
443
+ return groups[name];
444
+ }
445
+ function addToGroups(t, flags, groups) {
446
+ if (flags[numeric]) {
447
+ flags[asciinumeric] = true;
448
+ flags[alphanumeric] = true;
449
+ }
450
+ if (flags[ascii]) {
451
+ flags[asciinumeric] = true;
452
+ flags[alpha] = true;
453
+ }
454
+ if (flags[asciinumeric]) {
455
+ flags[alphanumeric] = true;
456
+ }
457
+ if (flags[alpha]) {
458
+ flags[alphanumeric] = true;
459
+ }
460
+ if (flags[alphanumeric]) {
461
+ flags[domain] = true;
462
+ }
463
+ if (flags[emoji]) {
464
+ flags[domain] = true;
465
+ }
466
+ for (const k in flags) {
467
+ const group = registerGroup(k, groups);
468
+ if (group.indexOf(t) < 0) {
469
+ group.push(t);
470
+ }
471
+ }
472
+ }
473
+ function flagsForToken(t, groups) {
474
+ const result = {};
475
+ for (const c in groups) {
476
+ if (groups[c].indexOf(t) >= 0) {
477
+ result[c] = true;
478
+ }
479
+ }
480
+ return result;
481
+ }
482
+ function State(token = null) {
483
+ this.j = {};
484
+ this.jr = [];
485
+ this.jd = null;
486
+ this.t = token;
487
+ }
488
+ State.groups = {};
489
+ State.prototype = {
490
+ accepts() {
491
+ return !!this.t;
492
+ },
493
+ /**
494
+ * Follow an existing transition from the given input to the next state.
495
+ * Does not mutate.
496
+ * @param {string} input character or token type to transition on
497
+ * @returns {?State<T>} the next state, if any
498
+ */
499
+ go(input) {
500
+ const state = this;
501
+ const nextState = state.j[input];
502
+ if (nextState) {
503
+ return nextState;
504
+ }
505
+ for (let i = 0; i < state.jr.length; i++) {
506
+ const regex = state.jr[i][0];
507
+ const nextState2 = state.jr[i][1];
508
+ if (nextState2 && regex.test(input)) {
509
+ return nextState2;
510
+ }
511
+ }
512
+ return state.jd;
513
+ },
514
+ /**
515
+ * Whether the state has a transition for the given input. Set the second
516
+ * argument to true to only look for an exact match (and not a default or
517
+ * regular-expression-based transition)
518
+ * @param {string} input
519
+ * @param {boolean} exactOnly
520
+ */
521
+ has(input, exactOnly = false) {
522
+ return exactOnly ? input in this.j : !!this.go(input);
523
+ },
524
+ /**
525
+ * Short for "transition all"; create a transition from the array of items
526
+ * in the given list to the same final resulting state.
527
+ * @param {string | string[]} inputs Group of inputs to transition on
528
+ * @param {Transition<T> | State<T>} [next] Transition options
529
+ * @param {Flags} [flags] Collections flags to add token to
530
+ * @param {Collections<T>} [groups] Master list of token groups
531
+ */
532
+ ta(inputs, next, flags, groups) {
533
+ for (let i = 0; i < inputs.length; i++) {
534
+ this.tt(inputs[i], next, flags, groups);
535
+ }
536
+ },
537
+ /**
538
+ * Short for "take regexp transition"; defines a transition for this state
539
+ * when it encounters a token which matches the given regular expression
540
+ * @param {RegExp} regexp Regular expression transition (populate first)
541
+ * @param {T | State<T>} [next] Transition options
542
+ * @param {Flags} [flags] Collections flags to add token to
543
+ * @param {Collections<T>} [groups] Master list of token groups
544
+ * @returns {State<T>} taken after the given input
545
+ */
546
+ tr(regexp, next, flags, groups) {
547
+ groups = groups || State.groups;
548
+ let nextState;
549
+ if (next && next.j) {
550
+ nextState = next;
551
+ } else {
552
+ nextState = new State(next);
553
+ if (flags && groups) {
554
+ addToGroups(next, flags, groups);
555
+ }
556
+ }
557
+ this.jr.push([regexp, nextState]);
558
+ return nextState;
559
+ },
560
+ /**
561
+ * Short for "take transitions", will take as many sequential transitions as
562
+ * the length of the given input and returns the
563
+ * resulting final state.
564
+ * @param {string | string[]} input
565
+ * @param {T | State<T>} [next] Transition options
566
+ * @param {Flags} [flags] Collections flags to add token to
567
+ * @param {Collections<T>} [groups] Master list of token groups
568
+ * @returns {State<T>} taken after the given input
569
+ */
570
+ ts(input, next, flags, groups) {
571
+ let state = this;
572
+ const len = input.length;
573
+ if (!len) {
574
+ return state;
575
+ }
576
+ for (let i = 0; i < len - 1; i++) {
577
+ state = state.tt(input[i]);
578
+ }
579
+ return state.tt(input[len - 1], next, flags, groups);
580
+ },
581
+ /**
582
+ * Short for "take transition", this is a method for building/working with
583
+ * state machines.
584
+ *
585
+ * If a state already exists for the given input, returns it.
586
+ *
587
+ * If a token is specified, that state will emit that token when reached by
588
+ * the linkify engine.
589
+ *
590
+ * If no state exists, it will be initialized with some default transitions
591
+ * that resemble existing default transitions.
592
+ *
593
+ * If a state is given for the second argument, that state will be
594
+ * transitioned to on the given input regardless of what that input
595
+ * previously did.
596
+ *
597
+ * Specify a token group flags to define groups that this token belongs to.
598
+ * The token will be added to corresponding entires in the given groups
599
+ * object.
600
+ *
601
+ * @param {string} input character, token type to transition on
602
+ * @param {T | State<T>} [next] Transition options
603
+ * @param {Flags} [flags] Collections flags to add token to
604
+ * @param {Collections<T>} [groups] Master list of groups
605
+ * @returns {State<T>} taken after the given input
606
+ */
607
+ tt(input, next, flags, groups) {
608
+ groups = groups || State.groups;
609
+ const state = this;
610
+ if (next && next.j) {
611
+ state.j[input] = next;
612
+ return next;
613
+ }
614
+ const t = next;
615
+ let nextState, templateState = state.go(input);
616
+ if (templateState) {
617
+ nextState = new State();
618
+ Object.assign(nextState.j, templateState.j);
619
+ nextState.jr.push.apply(nextState.jr, templateState.jr);
620
+ nextState.jd = templateState.jd;
621
+ nextState.t = templateState.t;
622
+ } else {
623
+ nextState = new State();
624
+ }
625
+ if (t) {
626
+ if (groups) {
627
+ if (nextState.t && typeof nextState.t === "string") {
628
+ const allFlags = Object.assign(flagsForToken(nextState.t, groups), flags);
629
+ addToGroups(t, allFlags, groups);
630
+ } else if (flags) {
631
+ addToGroups(t, flags, groups);
632
+ }
633
+ }
634
+ nextState.t = t;
635
+ }
636
+ state.j[input] = nextState;
637
+ return nextState;
638
+ }
639
+ };
640
+ var ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups);
641
+ var tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);
642
+ var ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups);
643
+ var tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups);
644
+ var WORD = "WORD";
645
+ var UWORD = "UWORD";
646
+ var ASCIINUMERICAL = "ASCIINUMERICAL";
647
+ var ALPHANUMERICAL = "ALPHANUMERICAL";
648
+ var LOCALHOST = "LOCALHOST";
649
+ var TLD = "TLD";
650
+ var UTLD = "UTLD";
651
+ var SCHEME = "SCHEME";
652
+ var SLASH_SCHEME = "SLASH_SCHEME";
653
+ var NUM = "NUM";
654
+ var WS = "WS";
655
+ var NL = "NL";
656
+ var OPENBRACE = "OPENBRACE";
657
+ var CLOSEBRACE = "CLOSEBRACE";
658
+ var OPENBRACKET = "OPENBRACKET";
659
+ var CLOSEBRACKET = "CLOSEBRACKET";
660
+ var OPENPAREN = "OPENPAREN";
661
+ var CLOSEPAREN = "CLOSEPAREN";
662
+ var OPENANGLEBRACKET = "OPENANGLEBRACKET";
663
+ var CLOSEANGLEBRACKET = "CLOSEANGLEBRACKET";
664
+ var FULLWIDTHLEFTPAREN = "FULLWIDTHLEFTPAREN";
665
+ var FULLWIDTHRIGHTPAREN = "FULLWIDTHRIGHTPAREN";
666
+ var LEFTCORNERBRACKET = "LEFTCORNERBRACKET";
667
+ var RIGHTCORNERBRACKET = "RIGHTCORNERBRACKET";
668
+ var LEFTWHITECORNERBRACKET = "LEFTWHITECORNERBRACKET";
669
+ var RIGHTWHITECORNERBRACKET = "RIGHTWHITECORNERBRACKET";
670
+ var FULLWIDTHLESSTHAN = "FULLWIDTHLESSTHAN";
671
+ var FULLWIDTHGREATERTHAN = "FULLWIDTHGREATERTHAN";
672
+ var AMPERSAND = "AMPERSAND";
673
+ var APOSTROPHE = "APOSTROPHE";
674
+ var ASTERISK = "ASTERISK";
675
+ var AT = "AT";
676
+ var BACKSLASH = "BACKSLASH";
677
+ var BACKTICK = "BACKTICK";
678
+ var CARET = "CARET";
679
+ var COLON = "COLON";
680
+ var COMMA = "COMMA";
681
+ var DOLLAR = "DOLLAR";
682
+ var DOT = "DOT";
683
+ var EQUALS = "EQUALS";
684
+ var EXCLAMATION = "EXCLAMATION";
685
+ var HYPHEN = "HYPHEN";
686
+ var PERCENT = "PERCENT";
687
+ var PIPE = "PIPE";
688
+ var PLUS = "PLUS";
689
+ var POUND = "POUND";
690
+ var QUERY = "QUERY";
691
+ var QUOTE = "QUOTE";
692
+ var FULLWIDTHMIDDLEDOT = "FULLWIDTHMIDDLEDOT";
693
+ var SEMI = "SEMI";
694
+ var SLASH = "SLASH";
695
+ var TILDE = "TILDE";
696
+ var UNDERSCORE = "UNDERSCORE";
697
+ var EMOJI$1 = "EMOJI";
698
+ var SYM = "SYM";
699
+ var tk = /* @__PURE__ */ Object.freeze({
700
+ __proto__: null,
701
+ ALPHANUMERICAL,
702
+ AMPERSAND,
703
+ APOSTROPHE,
704
+ ASCIINUMERICAL,
705
+ ASTERISK,
706
+ AT,
707
+ BACKSLASH,
708
+ BACKTICK,
709
+ CARET,
710
+ CLOSEANGLEBRACKET,
711
+ CLOSEBRACE,
712
+ CLOSEBRACKET,
713
+ CLOSEPAREN,
714
+ COLON,
715
+ COMMA,
716
+ DOLLAR,
717
+ DOT,
718
+ EMOJI: EMOJI$1,
719
+ EQUALS,
720
+ EXCLAMATION,
721
+ FULLWIDTHGREATERTHAN,
722
+ FULLWIDTHLEFTPAREN,
723
+ FULLWIDTHLESSTHAN,
724
+ FULLWIDTHMIDDLEDOT,
725
+ FULLWIDTHRIGHTPAREN,
726
+ HYPHEN,
727
+ LEFTCORNERBRACKET,
728
+ LEFTWHITECORNERBRACKET,
729
+ LOCALHOST,
730
+ NL,
731
+ NUM,
732
+ OPENANGLEBRACKET,
733
+ OPENBRACE,
734
+ OPENBRACKET,
735
+ OPENPAREN,
736
+ PERCENT,
737
+ PIPE,
738
+ PLUS,
739
+ POUND,
740
+ QUERY,
741
+ QUOTE,
742
+ RIGHTCORNERBRACKET,
743
+ RIGHTWHITECORNERBRACKET,
744
+ SCHEME,
745
+ SEMI,
746
+ SLASH,
747
+ SLASH_SCHEME,
748
+ SYM,
749
+ TILDE,
750
+ TLD,
751
+ UNDERSCORE,
752
+ UTLD,
753
+ UWORD,
754
+ WORD,
755
+ WS
756
+ });
757
+ var ASCII_LETTER = /[a-z]/;
758
+ var LETTER = /\p{L}/u;
759
+ var EMOJI = /\p{Emoji}/u;
760
+ var DIGIT = /\d/;
761
+ var SPACE = /\s/;
762
+ var CR = "\r";
763
+ var LF = "\n";
764
+ var EMOJI_VARIATION = "\uFE0F";
765
+ var EMOJI_JOINER = "\u200D";
766
+ var OBJECT_REPLACEMENT = "\uFFFC";
767
+ var tlds = null;
768
+ var utlds = null;
769
+ function init$2(customSchemes = []) {
770
+ const groups = {};
771
+ State.groups = groups;
772
+ const Start = new State();
773
+ if (tlds == null) {
774
+ tlds = decodeTlds(encodedTlds);
775
+ }
776
+ if (utlds == null) {
777
+ utlds = decodeTlds(encodedUtlds);
778
+ }
779
+ tt(Start, "'", APOSTROPHE);
780
+ tt(Start, "{", OPENBRACE);
781
+ tt(Start, "}", CLOSEBRACE);
782
+ tt(Start, "[", OPENBRACKET);
783
+ tt(Start, "]", CLOSEBRACKET);
784
+ tt(Start, "(", OPENPAREN);
785
+ tt(Start, ")", CLOSEPAREN);
786
+ tt(Start, "<", OPENANGLEBRACKET);
787
+ tt(Start, ">", CLOSEANGLEBRACKET);
788
+ tt(Start, "\uFF08", FULLWIDTHLEFTPAREN);
789
+ tt(Start, "\uFF09", FULLWIDTHRIGHTPAREN);
790
+ tt(Start, "\u300C", LEFTCORNERBRACKET);
791
+ tt(Start, "\u300D", RIGHTCORNERBRACKET);
792
+ tt(Start, "\u300E", LEFTWHITECORNERBRACKET);
793
+ tt(Start, "\u300F", RIGHTWHITECORNERBRACKET);
794
+ tt(Start, "\uFF1C", FULLWIDTHLESSTHAN);
795
+ tt(Start, "\uFF1E", FULLWIDTHGREATERTHAN);
796
+ tt(Start, "&", AMPERSAND);
797
+ tt(Start, "*", ASTERISK);
798
+ tt(Start, "@", AT);
799
+ tt(Start, "`", BACKTICK);
800
+ tt(Start, "^", CARET);
801
+ tt(Start, ":", COLON);
802
+ tt(Start, ",", COMMA);
803
+ tt(Start, "$", DOLLAR);
804
+ tt(Start, ".", DOT);
805
+ tt(Start, "=", EQUALS);
806
+ tt(Start, "!", EXCLAMATION);
807
+ tt(Start, "-", HYPHEN);
808
+ tt(Start, "%", PERCENT);
809
+ tt(Start, "|", PIPE);
810
+ tt(Start, "+", PLUS);
811
+ tt(Start, "#", POUND);
812
+ tt(Start, "?", QUERY);
813
+ tt(Start, '"', QUOTE);
814
+ tt(Start, "/", SLASH);
815
+ tt(Start, ";", SEMI);
816
+ tt(Start, "~", TILDE);
817
+ tt(Start, "_", UNDERSCORE);
818
+ tt(Start, "\\", BACKSLASH);
819
+ tt(Start, "\u30FB", FULLWIDTHMIDDLEDOT);
820
+ const Num = tr(Start, DIGIT, NUM, {
821
+ [numeric]: true
822
+ });
823
+ tr(Num, DIGIT, Num);
824
+ const Asciinumeric = tr(Num, ASCII_LETTER, ASCIINUMERICAL, {
825
+ [asciinumeric]: true
826
+ });
827
+ const Alphanumeric = tr(Num, LETTER, ALPHANUMERICAL, {
828
+ [alphanumeric]: true
829
+ });
830
+ const Word = tr(Start, ASCII_LETTER, WORD, {
831
+ [ascii]: true
832
+ });
833
+ tr(Word, DIGIT, Asciinumeric);
834
+ tr(Word, ASCII_LETTER, Word);
835
+ tr(Asciinumeric, DIGIT, Asciinumeric);
836
+ tr(Asciinumeric, ASCII_LETTER, Asciinumeric);
837
+ const UWord = tr(Start, LETTER, UWORD, {
838
+ [alpha]: true
839
+ });
840
+ tr(UWord, ASCII_LETTER);
841
+ tr(UWord, DIGIT, Alphanumeric);
842
+ tr(UWord, LETTER, UWord);
843
+ tr(Alphanumeric, DIGIT, Alphanumeric);
844
+ tr(Alphanumeric, ASCII_LETTER);
845
+ tr(Alphanumeric, LETTER, Alphanumeric);
846
+ const Nl2 = tt(Start, LF, NL, {
847
+ [whitespace]: true
848
+ });
849
+ const Cr = tt(Start, CR, WS, {
850
+ [whitespace]: true
851
+ });
852
+ const Ws = tr(Start, SPACE, WS, {
853
+ [whitespace]: true
854
+ });
855
+ tt(Start, OBJECT_REPLACEMENT, Ws);
856
+ tt(Cr, LF, Nl2);
857
+ tt(Cr, OBJECT_REPLACEMENT, Ws);
858
+ tr(Cr, SPACE, Ws);
859
+ tt(Ws, CR);
860
+ tt(Ws, LF);
861
+ tr(Ws, SPACE, Ws);
862
+ tt(Ws, OBJECT_REPLACEMENT, Ws);
863
+ const Emoji = tr(Start, EMOJI, EMOJI$1, {
864
+ [emoji]: true
865
+ });
866
+ tt(Emoji, "#");
867
+ tr(Emoji, EMOJI, Emoji);
868
+ tt(Emoji, EMOJI_VARIATION, Emoji);
869
+ const EmojiJoiner = tt(Emoji, EMOJI_JOINER);
870
+ tt(EmojiJoiner, "#");
871
+ tr(EmojiJoiner, EMOJI, Emoji);
872
+ const wordjr = [[ASCII_LETTER, Word], [DIGIT, Asciinumeric]];
873
+ const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord], [DIGIT, Alphanumeric]];
874
+ for (let i = 0; i < tlds.length; i++) {
875
+ fastts(Start, tlds[i], TLD, WORD, wordjr);
876
+ }
877
+ for (let i = 0; i < utlds.length; i++) {
878
+ fastts(Start, utlds[i], UTLD, UWORD, uwordjr);
879
+ }
880
+ addToGroups(TLD, {
881
+ tld: true,
882
+ ascii: true
883
+ }, groups);
884
+ addToGroups(UTLD, {
885
+ utld: true,
886
+ alpha: true
887
+ }, groups);
888
+ fastts(Start, "file", SCHEME, WORD, wordjr);
889
+ fastts(Start, "mailto", SCHEME, WORD, wordjr);
890
+ fastts(Start, "http", SLASH_SCHEME, WORD, wordjr);
891
+ fastts(Start, "https", SLASH_SCHEME, WORD, wordjr);
892
+ fastts(Start, "ftp", SLASH_SCHEME, WORD, wordjr);
893
+ fastts(Start, "ftps", SLASH_SCHEME, WORD, wordjr);
894
+ addToGroups(SCHEME, {
895
+ scheme: true,
896
+ ascii: true
897
+ }, groups);
898
+ addToGroups(SLASH_SCHEME, {
899
+ slashscheme: true,
900
+ ascii: true
901
+ }, groups);
902
+ customSchemes = customSchemes.sort((a, b) => a[0] > b[0] ? 1 : -1);
903
+ for (let i = 0; i < customSchemes.length; i++) {
904
+ const sch = customSchemes[i][0];
905
+ const optionalSlashSlash = customSchemes[i][1];
906
+ const flags = optionalSlashSlash ? {
907
+ [scheme]: true
908
+ } : {
909
+ [slashscheme]: true
910
+ };
911
+ if (sch.indexOf("-") >= 0) {
912
+ flags[domain] = true;
913
+ } else if (!ASCII_LETTER.test(sch)) {
914
+ flags[numeric] = true;
915
+ } else if (DIGIT.test(sch)) {
916
+ flags[asciinumeric] = true;
917
+ } else {
918
+ flags[ascii] = true;
919
+ }
920
+ ts(Start, sch, sch, flags);
921
+ }
922
+ ts(Start, "localhost", LOCALHOST, {
923
+ ascii: true
924
+ });
925
+ Start.jd = new State(SYM);
926
+ return {
927
+ start: Start,
928
+ tokens: Object.assign({
929
+ groups
930
+ }, tk)
931
+ };
932
+ }
933
+ function run$1(start, str) {
934
+ const iterable = stringToArray(str.replace(/[A-Z]/g, (c) => c.toLowerCase()));
935
+ const charCount = iterable.length;
936
+ const tokens = [];
937
+ let cursor = 0;
938
+ let charCursor = 0;
939
+ while (charCursor < charCount) {
940
+ let state = start;
941
+ let nextState = null;
942
+ let tokenLength = 0;
943
+ let latestAccepting = null;
944
+ let sinceAccepts = -1;
945
+ let charsSinceAccepts = -1;
946
+ while (charCursor < charCount && (nextState = state.go(iterable[charCursor]))) {
947
+ state = nextState;
948
+ if (state.accepts()) {
949
+ sinceAccepts = 0;
950
+ charsSinceAccepts = 0;
951
+ latestAccepting = state;
952
+ } else if (sinceAccepts >= 0) {
953
+ sinceAccepts += iterable[charCursor].length;
954
+ charsSinceAccepts++;
955
+ }
956
+ tokenLength += iterable[charCursor].length;
957
+ cursor += iterable[charCursor].length;
958
+ charCursor++;
959
+ }
960
+ cursor -= sinceAccepts;
961
+ charCursor -= charsSinceAccepts;
962
+ tokenLength -= sinceAccepts;
963
+ tokens.push({
964
+ t: latestAccepting.t,
965
+ // token type/name
966
+ v: str.slice(cursor - tokenLength, cursor),
967
+ // string value
968
+ s: cursor - tokenLength,
969
+ // start index
970
+ e: cursor
971
+ // end index (excluding)
972
+ });
973
+ }
974
+ return tokens;
975
+ }
976
+ function stringToArray(str) {
977
+ const result = [];
978
+ const len = str.length;
979
+ let index = 0;
980
+ while (index < len) {
981
+ let first = str.charCodeAt(index);
982
+ let second;
983
+ let char = first < 55296 || first > 56319 || index + 1 === len || (second = str.charCodeAt(index + 1)) < 56320 || second > 57343 ? str[index] : str.slice(index, index + 2);
984
+ result.push(char);
985
+ index += char.length;
986
+ }
987
+ return result;
988
+ }
989
+ function fastts(state, input, t, defaultt, jr) {
990
+ let next;
991
+ const len = input.length;
992
+ for (let i = 0; i < len - 1; i++) {
993
+ const char = input[i];
994
+ if (state.j[char]) {
995
+ next = state.j[char];
996
+ } else {
997
+ next = new State(defaultt);
998
+ next.jr = jr.slice();
999
+ state.j[char] = next;
1000
+ }
1001
+ state = next;
1002
+ }
1003
+ next = new State(t);
1004
+ next.jr = jr.slice();
1005
+ state.j[input[len - 1]] = next;
1006
+ return next;
1007
+ }
1008
+ function decodeTlds(encoded) {
1009
+ const words = [];
1010
+ const stack = [];
1011
+ let i = 0;
1012
+ let digits = "0123456789";
1013
+ while (i < encoded.length) {
1014
+ let popDigitCount = 0;
1015
+ while (digits.indexOf(encoded[i + popDigitCount]) >= 0) {
1016
+ popDigitCount++;
1017
+ }
1018
+ if (popDigitCount > 0) {
1019
+ words.push(stack.join(""));
1020
+ for (let popCount = parseInt(encoded.substring(i, i + popDigitCount), 10); popCount > 0; popCount--) {
1021
+ stack.pop();
1022
+ }
1023
+ i += popDigitCount;
1024
+ } else {
1025
+ stack.push(encoded[i]);
1026
+ i++;
1027
+ }
1028
+ }
1029
+ return words;
1030
+ }
1031
+ var defaults = {
1032
+ defaultProtocol: "http",
1033
+ events: null,
1034
+ format: noop,
1035
+ formatHref: noop,
1036
+ nl2br: false,
1037
+ tagName: "a",
1038
+ target: null,
1039
+ rel: null,
1040
+ validate: true,
1041
+ truncate: Infinity,
1042
+ className: null,
1043
+ attributes: null,
1044
+ ignoreTags: [],
1045
+ render: null
1046
+ };
1047
+ function Options(opts, defaultRender = null) {
1048
+ let o = Object.assign({}, defaults);
1049
+ if (opts) {
1050
+ o = Object.assign(o, opts instanceof Options ? opts.o : opts);
1051
+ }
1052
+ const ignoredTags = o.ignoreTags;
1053
+ const uppercaseIgnoredTags = [];
1054
+ for (let i = 0; i < ignoredTags.length; i++) {
1055
+ uppercaseIgnoredTags.push(ignoredTags[i].toUpperCase());
1056
+ }
1057
+ this.o = o;
1058
+ if (defaultRender) {
1059
+ this.defaultRender = defaultRender;
1060
+ }
1061
+ this.ignoreTags = uppercaseIgnoredTags;
1062
+ }
1063
+ Options.prototype = {
1064
+ o: defaults,
1065
+ /**
1066
+ * @type string[]
1067
+ */
1068
+ ignoreTags: [],
1069
+ /**
1070
+ * @param {IntermediateRepresentation} ir
1071
+ * @returns {any}
1072
+ */
1073
+ defaultRender(ir) {
1074
+ return ir;
1075
+ },
1076
+ /**
1077
+ * Returns true or false based on whether a token should be displayed as a
1078
+ * link based on the user options.
1079
+ * @param {MultiToken} token
1080
+ * @returns {boolean}
1081
+ */
1082
+ check(token) {
1083
+ return this.get("validate", token.toString(), token);
1084
+ },
1085
+ // Private methods
1086
+ /**
1087
+ * Resolve an option's value based on the value of the option and the given
1088
+ * params. If operator and token are specified and the target option is
1089
+ * callable, automatically calls the function with the given argument.
1090
+ * @template {keyof Opts} K
1091
+ * @param {K} key Name of option to use
1092
+ * @param {string} [operator] will be passed to the target option if it's a
1093
+ * function. If not specified, RAW function value gets returned
1094
+ * @param {MultiToken} [token] The token from linkify.tokenize
1095
+ * @returns {Opts[K] | any}
1096
+ */
1097
+ get(key, operator, token) {
1098
+ const isCallable = operator != null;
1099
+ let option = this.o[key];
1100
+ if (!option) {
1101
+ return option;
1102
+ }
1103
+ if (typeof option === "object") {
1104
+ option = token.t in option ? option[token.t] : defaults[key];
1105
+ if (typeof option === "function" && isCallable) {
1106
+ option = option(operator, token);
1107
+ }
1108
+ } else if (typeof option === "function" && isCallable) {
1109
+ option = option(operator, token.t, token);
1110
+ }
1111
+ return option;
1112
+ },
1113
+ /**
1114
+ * @template {keyof Opts} L
1115
+ * @param {L} key Name of options object to use
1116
+ * @param {string} [operator]
1117
+ * @param {MultiToken} [token]
1118
+ * @returns {Opts[L] | any}
1119
+ */
1120
+ getObj(key, operator, token) {
1121
+ let obj = this.o[key];
1122
+ if (typeof obj === "function" && operator != null) {
1123
+ obj = obj(operator, token.t, token);
1124
+ }
1125
+ return obj;
1126
+ },
1127
+ /**
1128
+ * Convert the given token to a rendered element that may be added to the
1129
+ * calling-interface's DOM
1130
+ * @param {MultiToken} token Token to render to an HTML element
1131
+ * @returns {any} Render result; e.g., HTML string, DOM element, React
1132
+ * Component, etc.
1133
+ */
1134
+ render(token) {
1135
+ const ir = token.render(this);
1136
+ const renderFn = this.get("render", null, token) || this.defaultRender;
1137
+ return renderFn(ir, token.t, token);
1138
+ }
1139
+ };
1140
+ function noop(val) {
1141
+ return val;
1142
+ }
1143
+ function MultiToken(value, tokens) {
1144
+ this.t = "token";
1145
+ this.v = value;
1146
+ this.tk = tokens;
1147
+ }
1148
+ MultiToken.prototype = {
1149
+ isLink: false,
1150
+ /**
1151
+ * Return the string this token represents.
1152
+ * @return {string}
1153
+ */
1154
+ toString() {
1155
+ return this.v;
1156
+ },
1157
+ /**
1158
+ * What should the value for this token be in the `href` HTML attribute?
1159
+ * Returns the `.toString` value by default.
1160
+ * @param {string} [scheme]
1161
+ * @return {string}
1162
+ */
1163
+ toHref(scheme2) {
1164
+ return this.toString();
1165
+ },
1166
+ /**
1167
+ * @param {Options} options Formatting options
1168
+ * @returns {string}
1169
+ */
1170
+ toFormattedString(options) {
1171
+ const val = this.toString();
1172
+ const truncate = options.get("truncate", val, this);
1173
+ const formatted = options.get("format", val, this);
1174
+ return truncate && formatted.length > truncate ? formatted.substring(0, truncate) + "\u2026" : formatted;
1175
+ },
1176
+ /**
1177
+ *
1178
+ * @param {Options} options
1179
+ * @returns {string}
1180
+ */
1181
+ toFormattedHref(options) {
1182
+ return options.get("formatHref", this.toHref(options.get("defaultProtocol")), this);
1183
+ },
1184
+ /**
1185
+ * The start index of this token in the original input string
1186
+ * @returns {number}
1187
+ */
1188
+ startIndex() {
1189
+ return this.tk[0].s;
1190
+ },
1191
+ /**
1192
+ * The end index of this token in the original input string (up to this
1193
+ * index but not including it)
1194
+ * @returns {number}
1195
+ */
1196
+ endIndex() {
1197
+ return this.tk[this.tk.length - 1].e;
1198
+ },
1199
+ /**
1200
+ Returns an object of relevant values for this token, which includes keys
1201
+ * type - Kind of token ('url', 'email', etc.)
1202
+ * value - Original text
1203
+ * href - The value that should be added to the anchor tag's href
1204
+ attribute
1205
+ @method toObject
1206
+ @param {string} [protocol] `'http'` by default
1207
+ */
1208
+ toObject(protocol = defaults.defaultProtocol) {
1209
+ return {
1210
+ type: this.t,
1211
+ value: this.toString(),
1212
+ isLink: this.isLink,
1213
+ href: this.toHref(protocol),
1214
+ start: this.startIndex(),
1215
+ end: this.endIndex()
1216
+ };
1217
+ },
1218
+ /**
1219
+ *
1220
+ * @param {Options} options Formatting option
1221
+ */
1222
+ toFormattedObject(options) {
1223
+ return {
1224
+ type: this.t,
1225
+ value: this.toFormattedString(options),
1226
+ isLink: this.isLink,
1227
+ href: this.toFormattedHref(options),
1228
+ start: this.startIndex(),
1229
+ end: this.endIndex()
1230
+ };
1231
+ },
1232
+ /**
1233
+ * Whether this token should be rendered as a link according to the given options
1234
+ * @param {Options} options
1235
+ * @returns {boolean}
1236
+ */
1237
+ validate(options) {
1238
+ return options.get("validate", this.toString(), this);
1239
+ },
1240
+ /**
1241
+ * Return an object that represents how this link should be rendered.
1242
+ * @param {Options} options Formattinng options
1243
+ */
1244
+ render(options) {
1245
+ const token = this;
1246
+ const href = this.toHref(options.get("defaultProtocol"));
1247
+ const formattedHref = options.get("formatHref", href, this);
1248
+ const tagName = options.get("tagName", href, token);
1249
+ const content = this.toFormattedString(options);
1250
+ const attributes = {};
1251
+ const className = options.get("className", href, token);
1252
+ const target = options.get("target", href, token);
1253
+ const rel = options.get("rel", href, token);
1254
+ const attrs = options.getObj("attributes", href, token);
1255
+ const eventListeners = options.getObj("events", href, token);
1256
+ attributes.href = formattedHref;
1257
+ if (className) {
1258
+ attributes.class = className;
1259
+ }
1260
+ if (target) {
1261
+ attributes.target = target;
1262
+ }
1263
+ if (rel) {
1264
+ attributes.rel = rel;
1265
+ }
1266
+ if (attrs) {
1267
+ Object.assign(attributes, attrs);
1268
+ }
1269
+ return {
1270
+ tagName,
1271
+ attributes,
1272
+ content,
1273
+ eventListeners
1274
+ };
1275
+ }
1276
+ };
1277
+ function createTokenClass(type, props) {
1278
+ class Token extends MultiToken {
1279
+ constructor(value, tokens) {
1280
+ super(value, tokens);
1281
+ this.t = type;
1282
+ }
1283
+ }
1284
+ for (const p in props) {
1285
+ Token.prototype[p] = props[p];
1286
+ }
1287
+ Token.t = type;
1288
+ return Token;
1289
+ }
1290
+ var Email = createTokenClass("email", {
1291
+ isLink: true,
1292
+ toHref() {
1293
+ return "mailto:" + this.toString();
1294
+ }
1295
+ });
1296
+ var Text = createTokenClass("text");
1297
+ var Nl = createTokenClass("nl");
1298
+ var Url = createTokenClass("url", {
1299
+ isLink: true,
1300
+ /**
1301
+ Lowercases relevant parts of the domain and adds the protocol if
1302
+ required. Note that this will not escape unsafe HTML characters in the
1303
+ URL.
1304
+ @param {string} [scheme] default scheme (e.g., 'https')
1305
+ @return {string} the full href
1306
+ */
1307
+ toHref(scheme2 = defaults.defaultProtocol) {
1308
+ return this.hasProtocol() ? this.v : `${scheme2}://${this.v}`;
1309
+ },
1310
+ /**
1311
+ * Check whether this URL token has a protocol
1312
+ * @return {boolean}
1313
+ */
1314
+ hasProtocol() {
1315
+ const tokens = this.tk;
1316
+ return tokens.length >= 2 && tokens[0].t !== LOCALHOST && tokens[1].t === COLON;
1317
+ }
1318
+ });
1319
+ var makeState = (arg) => new State(arg);
1320
+ function init$1({
1321
+ groups
1322
+ }) {
1323
+ const qsAccepting = groups.domain.concat([AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, NUM, PERCENT, PIPE, PLUS, POUND, SLASH, SYM, TILDE, UNDERSCORE]);
1324
+ const qsNonAccepting = [APOSTROPHE, COLON, COMMA, DOT, EXCLAMATION, PERCENT, QUERY, QUOTE, SEMI, OPENANGLEBRACKET, CLOSEANGLEBRACKET, OPENBRACE, CLOSEBRACE, CLOSEBRACKET, OPENBRACKET, OPENPAREN, CLOSEPAREN, FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN, LEFTCORNERBRACKET, RIGHTCORNERBRACKET, LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET, FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN];
1325
+ const localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, OPENBRACE, CLOSEBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, UNDERSCORE];
1326
+ const Start = makeState();
1327
+ const Localpart = tt(Start, TILDE);
1328
+ ta(Localpart, localpartAccepting, Localpart);
1329
+ ta(Localpart, groups.domain, Localpart);
1330
+ const Domain = makeState(), Scheme = makeState(), SlashScheme = makeState();
1331
+ ta(Start, groups.domain, Domain);
1332
+ ta(Start, groups.scheme, Scheme);
1333
+ ta(Start, groups.slashscheme, SlashScheme);
1334
+ ta(Domain, localpartAccepting, Localpart);
1335
+ ta(Domain, groups.domain, Domain);
1336
+ const LocalpartAt = tt(Domain, AT);
1337
+ tt(Localpart, AT, LocalpartAt);
1338
+ tt(Scheme, AT, LocalpartAt);
1339
+ tt(SlashScheme, AT, LocalpartAt);
1340
+ const LocalpartDot = tt(Localpart, DOT);
1341
+ ta(LocalpartDot, localpartAccepting, Localpart);
1342
+ ta(LocalpartDot, groups.domain, Localpart);
1343
+ const EmailDomain = makeState();
1344
+ ta(LocalpartAt, groups.domain, EmailDomain);
1345
+ ta(EmailDomain, groups.domain, EmailDomain);
1346
+ const EmailDomainDot = tt(EmailDomain, DOT);
1347
+ ta(EmailDomainDot, groups.domain, EmailDomain);
1348
+ const Email$1 = makeState(Email);
1349
+ ta(EmailDomainDot, groups.tld, Email$1);
1350
+ ta(EmailDomainDot, groups.utld, Email$1);
1351
+ tt(LocalpartAt, LOCALHOST, Email$1);
1352
+ const EmailDomainHyphen = tt(EmailDomain, HYPHEN);
1353
+ tt(EmailDomainHyphen, HYPHEN, EmailDomainHyphen);
1354
+ ta(EmailDomainHyphen, groups.domain, EmailDomain);
1355
+ ta(Email$1, groups.domain, EmailDomain);
1356
+ tt(Email$1, DOT, EmailDomainDot);
1357
+ tt(Email$1, HYPHEN, EmailDomainHyphen);
1358
+ const EmailColon = tt(Email$1, COLON);
1359
+ ta(EmailColon, groups.numeric, Email);
1360
+ const DomainHyphen = tt(Domain, HYPHEN);
1361
+ const DomainDot = tt(Domain, DOT);
1362
+ tt(DomainHyphen, HYPHEN, DomainHyphen);
1363
+ ta(DomainHyphen, groups.domain, Domain);
1364
+ ta(DomainDot, localpartAccepting, Localpart);
1365
+ ta(DomainDot, groups.domain, Domain);
1366
+ const DomainDotTld = makeState(Url);
1367
+ ta(DomainDot, groups.tld, DomainDotTld);
1368
+ ta(DomainDot, groups.utld, DomainDotTld);
1369
+ ta(DomainDotTld, groups.domain, Domain);
1370
+ ta(DomainDotTld, localpartAccepting, Localpart);
1371
+ tt(DomainDotTld, DOT, DomainDot);
1372
+ tt(DomainDotTld, HYPHEN, DomainHyphen);
1373
+ tt(DomainDotTld, AT, LocalpartAt);
1374
+ const DomainDotTldColon = tt(DomainDotTld, COLON);
1375
+ const DomainDotTldColonPort = makeState(Url);
1376
+ ta(DomainDotTldColon, groups.numeric, DomainDotTldColonPort);
1377
+ const Url$1 = makeState(Url);
1378
+ const UrlNonaccept = makeState();
1379
+ ta(Url$1, qsAccepting, Url$1);
1380
+ ta(Url$1, qsNonAccepting, UrlNonaccept);
1381
+ ta(UrlNonaccept, qsAccepting, Url$1);
1382
+ ta(UrlNonaccept, qsNonAccepting, UrlNonaccept);
1383
+ tt(DomainDotTld, SLASH, Url$1);
1384
+ tt(DomainDotTldColonPort, SLASH, Url$1);
1385
+ const SchemeColon = tt(Scheme, COLON);
1386
+ const SlashSchemeColon = tt(SlashScheme, COLON);
1387
+ const SlashSchemeColonSlash = tt(SlashSchemeColon, SLASH);
1388
+ const UriPrefix = tt(SlashSchemeColonSlash, SLASH);
1389
+ ta(Scheme, groups.domain, Domain);
1390
+ tt(Scheme, DOT, DomainDot);
1391
+ tt(Scheme, HYPHEN, DomainHyphen);
1392
+ ta(SlashScheme, groups.domain, Domain);
1393
+ tt(SlashScheme, DOT, DomainDot);
1394
+ tt(SlashScheme, HYPHEN, DomainHyphen);
1395
+ ta(SchemeColon, groups.domain, Url$1);
1396
+ tt(SchemeColon, SLASH, Url$1);
1397
+ tt(SchemeColon, QUERY, Url$1);
1398
+ ta(UriPrefix, groups.domain, Url$1);
1399
+ ta(UriPrefix, qsAccepting, Url$1);
1400
+ tt(UriPrefix, SLASH, Url$1);
1401
+ const bracketPairs = [
1402
+ [OPENBRACE, CLOSEBRACE],
1403
+ // {}
1404
+ [OPENBRACKET, CLOSEBRACKET],
1405
+ // []
1406
+ [OPENPAREN, CLOSEPAREN],
1407
+ // ()
1408
+ [OPENANGLEBRACKET, CLOSEANGLEBRACKET],
1409
+ // <>
1410
+ [FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN],
1411
+ // ()
1412
+ [LEFTCORNERBRACKET, RIGHTCORNERBRACKET],
1413
+ // 「」
1414
+ [LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET],
1415
+ // 『』
1416
+ [FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN]
1417
+ // <>
1418
+ ];
1419
+ for (let i = 0; i < bracketPairs.length; i++) {
1420
+ const [OPEN, CLOSE] = bracketPairs[i];
1421
+ const UrlOpen = tt(Url$1, OPEN);
1422
+ tt(UrlNonaccept, OPEN, UrlOpen);
1423
+ tt(UrlOpen, CLOSE, Url$1);
1424
+ const UrlOpenQ = makeState(Url);
1425
+ ta(UrlOpen, qsAccepting, UrlOpenQ);
1426
+ const UrlOpenSyms = makeState();
1427
+ ta(UrlOpen, qsNonAccepting);
1428
+ ta(UrlOpenQ, qsAccepting, UrlOpenQ);
1429
+ ta(UrlOpenQ, qsNonAccepting, UrlOpenSyms);
1430
+ ta(UrlOpenSyms, qsAccepting, UrlOpenQ);
1431
+ ta(UrlOpenSyms, qsNonAccepting, UrlOpenSyms);
1432
+ tt(UrlOpenQ, CLOSE, Url$1);
1433
+ tt(UrlOpenSyms, CLOSE, Url$1);
1434
+ }
1435
+ tt(Start, LOCALHOST, DomainDotTld);
1436
+ tt(Start, NL, Nl);
1437
+ return {
1438
+ start: Start,
1439
+ tokens: tk
1440
+ };
1441
+ }
1442
+ function run(start, input, tokens) {
1443
+ let len = tokens.length;
1444
+ let cursor = 0;
1445
+ let multis = [];
1446
+ let textTokens = [];
1447
+ while (cursor < len) {
1448
+ let state = start;
1449
+ let secondState = null;
1450
+ let nextState = null;
1451
+ let multiLength = 0;
1452
+ let latestAccepting = null;
1453
+ let sinceAccepts = -1;
1454
+ while (cursor < len && !(secondState = state.go(tokens[cursor].t))) {
1455
+ textTokens.push(tokens[cursor++]);
1456
+ }
1457
+ while (cursor < len && (nextState = secondState || state.go(tokens[cursor].t))) {
1458
+ secondState = null;
1459
+ state = nextState;
1460
+ if (state.accepts()) {
1461
+ sinceAccepts = 0;
1462
+ latestAccepting = state;
1463
+ } else if (sinceAccepts >= 0) {
1464
+ sinceAccepts++;
1465
+ }
1466
+ cursor++;
1467
+ multiLength++;
1468
+ }
1469
+ if (sinceAccepts < 0) {
1470
+ cursor -= multiLength;
1471
+ if (cursor < len) {
1472
+ textTokens.push(tokens[cursor]);
1473
+ cursor++;
1474
+ }
1475
+ } else {
1476
+ if (textTokens.length > 0) {
1477
+ multis.push(initMultiToken(Text, input, textTokens));
1478
+ textTokens = [];
1479
+ }
1480
+ cursor -= sinceAccepts;
1481
+ multiLength -= sinceAccepts;
1482
+ const Multi = latestAccepting.t;
1483
+ const subtokens = tokens.slice(cursor - multiLength, cursor);
1484
+ multis.push(initMultiToken(Multi, input, subtokens));
1485
+ }
1486
+ }
1487
+ if (textTokens.length > 0) {
1488
+ multis.push(initMultiToken(Text, input, textTokens));
1489
+ }
1490
+ return multis;
1491
+ }
1492
+ function initMultiToken(Multi, input, tokens) {
1493
+ const startIdx = tokens[0].s;
1494
+ const endIdx = tokens[tokens.length - 1].e;
1495
+ const value = input.slice(startIdx, endIdx);
1496
+ return new Multi(value, tokens);
1497
+ }
1498
+ var INIT = {
1499
+ scanner: null,
1500
+ parser: null,
1501
+ tokenQueue: [],
1502
+ pluginQueue: [],
1503
+ customSchemes: [],
1504
+ initialized: false
1505
+ };
1506
+ function init() {
1507
+ INIT.scanner = init$2(INIT.customSchemes);
1508
+ for (let i = 0; i < INIT.tokenQueue.length; i++) {
1509
+ INIT.tokenQueue[i][1]({
1510
+ scanner: INIT.scanner
1511
+ });
1512
+ }
1513
+ INIT.parser = init$1(INIT.scanner.tokens);
1514
+ for (let i = 0; i < INIT.pluginQueue.length; i++) {
1515
+ INIT.pluginQueue[i][1]({
1516
+ scanner: INIT.scanner,
1517
+ parser: INIT.parser
1518
+ });
1519
+ }
1520
+ INIT.initialized = true;
1521
+ return INIT;
1522
+ }
1523
+ function tokenize(str) {
1524
+ if (!INIT.initialized) {
1525
+ init();
1526
+ }
1527
+ return run(INIT.parser.start, str, run$1(INIT.scanner.start, str));
1528
+ }
1529
+ tokenize.scan = run$1;
1530
+ function find(str, type = null, opts = null) {
1531
+ if (type && typeof type === "object") {
1532
+ if (opts) {
1533
+ throw Error(`linkifyjs: Invalid link type ${type}; must be a string`);
1534
+ }
1535
+ opts = type;
1536
+ type = null;
1537
+ }
1538
+ const options = new Options(opts);
1539
+ const tokens = tokenize(str);
1540
+ const filtered = [];
1541
+ for (let i = 0; i < tokens.length; i++) {
1542
+ const token = tokens[i];
1543
+ if (token.isLink && (!type || token.t === type) && options.check(token)) {
1544
+ filtered.push(token.toFormattedObject(options));
1545
+ }
1546
+ }
1547
+ return filtered;
1548
+ }
1549
+
1550
+ // src/extensions/base/link.ts
1551
+ var isSameDomain = (url) => {
1552
+ if (typeof window === "undefined") return false;
1553
+ try {
1554
+ return new URL(url).hostname === window.location.hostname;
1555
+ } catch {
1556
+ return false;
1557
+ }
1558
+ };
424
1559
  var LinkExtension = Link.extend({
425
- addOptions() {
1560
+ addAttributes() {
426
1561
  return {
427
1562
  ...this.parent?.(),
428
- openOnClick: false,
429
- linkOnPaste: true,
430
- autolink: true,
431
- protocols: ["http", "https", "mailto", "tel"]
1563
+ target: {
1564
+ default: "_blank",
1565
+ parseHTML: (element) => {
1566
+ const href = element.getAttribute("href") ?? "";
1567
+ return isSameDomain(href) ? "_self" : "_blank";
1568
+ }
1569
+ },
1570
+ rel: {
1571
+ default: null,
1572
+ parseHTML: (element) => {
1573
+ const href = element.getAttribute("href") ?? "";
1574
+ return isSameDomain(href) ? null : "noopener noreferrer nofollow";
1575
+ }
1576
+ }
432
1577
  };
1578
+ },
1579
+ addPasteRules() {
1580
+ if (!this.options.linkOnPaste) {
1581
+ return this.parent?.() ?? [];
1582
+ }
1583
+ const { protocols, defaultProtocol } = this.options;
1584
+ return [
1585
+ markPasteRule({
1586
+ find: (text) => find(text).filter(
1587
+ (link) => link.isLink && this.options.isAllowedUri(link.value, {
1588
+ defaultValidate: (href) => !!isAllowedUri(href, protocols),
1589
+ protocols,
1590
+ defaultProtocol
1591
+ })
1592
+ ).filter((link) => this.options.shouldAutoLink?.(link.value) !== false).map((link) => ({ text: link.value, data: { href: link.href }, index: link.start })),
1593
+ type: this.type,
1594
+ getAttributes: (match) => {
1595
+ const href = match.data?.href ?? "";
1596
+ const sameDomain = isSameDomain(href);
1597
+ return {
1598
+ href,
1599
+ target: sameDomain ? "_self" : "_blank",
1600
+ rel: sameDomain ? null : "noopener noreferrer nofollow"
1601
+ };
1602
+ }
1603
+ })
1604
+ ];
433
1605
  }
434
1606
  }).configure({
435
1607
  openOnClick: false,
@@ -503,13 +1675,13 @@ var BasePrompt = Node4.create({
503
1675
  if (!isInsidePrompt) {
504
1676
  return false;
505
1677
  }
506
- const { tr } = state;
1678
+ const { tr: tr2 } = state;
507
1679
  const posAfter = $pos.after(depth);
508
1680
  const paragraphNode = schema.nodes.paragraph.createAndFill();
509
1681
  if (!paragraphNode) return false;
510
- tr.insert(posAfter, paragraphNode);
511
- tr.setSelection(TextSelection3.create(tr.doc, posAfter + 1));
512
- view.dispatch(tr);
1682
+ tr2.insert(posAfter, paragraphNode);
1683
+ tr2.setSelection(TextSelection3.create(tr2.doc, posAfter + 1));
1684
+ view.dispatch(tr2);
513
1685
  return true;
514
1686
  }
515
1687
  };
@@ -638,6 +1810,43 @@ var BaseFigure = Image.extend({
638
1810
  addAttributes() {
639
1811
  return {
640
1812
  ...this.parent?.(),
1813
+ src: {
1814
+ default: null,
1815
+ parseHTML: (element) => {
1816
+ const img = element.tagName === "FIGURE" ? element.querySelector("img") : element;
1817
+ return img?.getAttribute("src") ?? null;
1818
+ }
1819
+ },
1820
+ alt: {
1821
+ default: null,
1822
+ parseHTML: (element) => {
1823
+ const img = element.tagName === "FIGURE" ? element.querySelector("img") : element;
1824
+ return img?.getAttribute("alt") ?? null;
1825
+ }
1826
+ },
1827
+ title: {
1828
+ default: null,
1829
+ parseHTML: (element) => {
1830
+ const img = element.tagName === "FIGURE" ? element.querySelector("img") : element;
1831
+ return img?.getAttribute("title") ?? null;
1832
+ }
1833
+ },
1834
+ width: {
1835
+ default: null,
1836
+ parseHTML: (element) => {
1837
+ const img = element.tagName === "FIGURE" ? element.querySelector("img") : element;
1838
+ const val = img?.getAttribute("width");
1839
+ return val ? parseInt(val) : null;
1840
+ }
1841
+ },
1842
+ height: {
1843
+ default: null,
1844
+ parseHTML: (element) => {
1845
+ const img = element.tagName === "FIGURE" ? element.querySelector("img") : element;
1846
+ const val = img?.getAttribute("height");
1847
+ return val ? parseInt(val) : null;
1848
+ }
1849
+ },
641
1850
  fileId: {
642
1851
  default: null,
643
1852
  parseHTML: (element) => {
@@ -816,14 +2025,14 @@ var TextStyle = Mark2.create({
816
2025
  toggleTextStyle: (attributes) => ({ commands }) => {
817
2026
  return commands.toggleMark(this.name, attributes);
818
2027
  },
819
- removeEmptyTextStyle: () => ({ tr }) => {
820
- const { selection } = tr;
821
- tr.doc.nodesBetween(selection.from, selection.to, (node, pos) => {
2028
+ removeEmptyTextStyle: () => ({ tr: tr2 }) => {
2029
+ const { selection } = tr2;
2030
+ tr2.doc.nodesBetween(selection.from, selection.to, (node, pos) => {
822
2031
  if (node.isTextblock) {
823
2032
  return true;
824
2033
  }
825
2034
  if (!node.marks.filter((mark) => mark.type === this.type).some((mark) => Object.values(mark.attrs).some((value) => !!value))) {
826
- tr.removeMark(pos, pos + node.nodeSize, this.type);
2035
+ tr2.removeMark(pos, pos + node.nodeSize, this.type);
827
2036
  }
828
2037
  });
829
2038
  return true;
@@ -1227,13 +2436,13 @@ var BaseLegacySEQuote = Node6.create({
1227
2436
  if (!isInsideCustomQuoteV2) {
1228
2437
  return false;
1229
2438
  }
1230
- const { tr } = state;
2439
+ const { tr: tr2 } = state;
1231
2440
  const posAfter = $pos.after(depth);
1232
2441
  const paragraphNode = schema.nodes.paragraph.createAndFill();
1233
2442
  if (!paragraphNode) return false;
1234
- tr.insert(posAfter, paragraphNode);
1235
- tr.setSelection(TextSelection4.create(tr.doc, posAfter + 1));
1236
- view.dispatch(tr);
2443
+ tr2.insert(posAfter, paragraphNode);
2444
+ tr2.setSelection(TextSelection4.create(tr2.doc, posAfter + 1));
2445
+ view.dispatch(tr2);
1237
2446
  return true;
1238
2447
  }
1239
2448
  };
@@ -1275,13 +2484,13 @@ var BaseLegacyPromptSE = Node6.create({
1275
2484
  if (!isInsidePromptV2) {
1276
2485
  return false;
1277
2486
  }
1278
- const { tr } = state;
2487
+ const { tr: tr2 } = state;
1279
2488
  const posAfter = $pos.after(depth);
1280
2489
  const paragraphNode = schema.nodes.paragraph.createAndFill();
1281
2490
  if (!paragraphNode) return false;
1282
- tr.insert(posAfter, paragraphNode);
1283
- tr.setSelection(TextSelection4.create(tr.doc, posAfter + 1));
1284
- view.dispatch(tr);
2491
+ tr2.insert(posAfter, paragraphNode);
2492
+ tr2.setSelection(TextSelection4.create(tr2.doc, posAfter + 1));
2493
+ view.dispatch(tr2);
1285
2494
  return true;
1286
2495
  }
1287
2496
  };
@@ -1785,19 +2994,19 @@ var legacyTypeMap3 = {
1785
2994
  info: "success",
1786
2995
  error: "error"
1787
2996
  };
1788
- var Callout = ({ type, bgColor, emoji, children, iconWrapper, calloutType }) => {
2997
+ var Callout = ({ type, bgColor, emoji: emoji2, children, iconWrapper, calloutType }) => {
1789
2998
  const isLegacySECallout = !!calloutType;
1790
2999
  const finalType = isLegacySECallout ? legacyTypeMap3[calloutType] : type;
1791
3000
  const hasCustomColor = !!bgColor;
1792
3001
  const className = hasCustomColor ? "callout-node" : `callout-node callout-${finalType}`;
1793
3002
  const style = hasCustomColor ? { backgroundColor: bgColor } : void 0;
1794
3003
  let icon;
1795
- if (emoji) {
1796
- if (emoji in calloutIconComponents) {
1797
- const IconComponent = calloutIconComponents[emoji];
3004
+ if (emoji2) {
3005
+ if (emoji2 in calloutIconComponents) {
3006
+ const IconComponent = calloutIconComponents[emoji2];
1798
3007
  icon = /* @__PURE__ */ jsx5(IconComponent, {});
1799
3008
  } else {
1800
- icon = emoji;
3009
+ icon = emoji2;
1801
3010
  }
1802
3011
  } else {
1803
3012
  icon = calloutIcons[finalType];
@@ -1809,7 +3018,7 @@ var Callout = ({ type, bgColor, emoji, children, iconWrapper, calloutType }) =>
1809
3018
  className,
1810
3019
  "data-callout-type": hasCustomColor ? void 0 : type,
1811
3020
  "data-bg-color": bgColor || void 0,
1812
- "data-emoji": emoji || void 0,
3021
+ "data-emoji": emoji2 || void 0,
1813
3022
  style,
1814
3023
  children: [
1815
3024
  iconContent,