@clevertask/scribe 0.1.12 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/README.md +1 -1
  2. package/dist/{BarMenu-5M9g9Y1j.js → BarMenu-O2IVhHXx.js} +1 -1
  3. package/dist/assets/index.css +1 -1
  4. package/dist/components/Menu/BarMenu.js +1 -1
  5. package/dist/components/Menu/BubbleMenu.js +2 -2
  6. package/dist/components/Menu/CalloutBubbleMenu.js +2 -2
  7. package/dist/components/Menu/LinkBubbleMenu.js +2 -2
  8. package/dist/components/Menu/Mobile/ListOptionBar.js +1 -1
  9. package/dist/components/Menu/TableBubbleMenu.js +2 -2
  10. package/dist/components/Scribe/extension/callout.js +1 -1
  11. package/dist/components/Scribe/extension/emoji/suggest.js +1 -1
  12. package/dist/components/Scribe/extension/extension-link.js +1 -1
  13. package/dist/components/Scribe/extension/extension-markdown-paste.js +1 -1
  14. package/dist/components/Scribe/extension/extension-selectedText.js +1 -1
  15. package/dist/components/Scribe/extension/index.js +1 -1
  16. package/dist/components/Scribe/extension/resizable-table.js +1 -1
  17. package/dist/components/Scribe/extension/slashCommand/index.js +1 -1
  18. package/dist/components/Scribe/extension/slashCommand/renderItems.js +1 -1
  19. package/dist/components/Scribe/extension/tableOfContents.js +1 -1
  20. package/dist/components/Scribe/index.js +3 -3
  21. package/dist/{dist-Dw4STOPE.js → dist-BoYfa2nz.js} +1 -1
  22. package/dist/{dist-DFua_Xbu.js → dist-W9E-K577.js} +980 -618
  23. package/dist/{extension-_8uh0Ik9.js → extension-D5WIAWhc.js} +2106 -2070
  24. package/dist/{extension-link-CjfUZ90W.js → extension-link-D8Zi7OSa.js} +36 -36
  25. package/dist/{menus-_EXlLMjz.js → menus-B1Zz0GjH.js} +17 -17
  26. package/dist/{resizable-table-Ddw3l6DJ.js → resizable-table-Bf-fb9iv.js} +36 -18
  27. package/dist/{slashCommand-CxX07Nbk.js → slashCommand-47omO4ob.js} +2 -2
  28. package/dist/utils/index.js +2 -2
  29. package/package.json +48 -48
@@ -1,4 +1,4 @@
1
- import { M as e, N as t, _ as n, f as r, h as i, i as a, j as o, m as s, o as c, r as l, u } from "./dist-DFua_Xbu.js";
1
+ import { M as e, N as t, P as n, _ as r, f as i, h as a, i as o, m as s, o as c, r as l, u } from "./dist-W9E-K577.js";
2
2
  import { Plugin as d, PluginKey as f } from "@tiptap/pm/state";
3
3
  //#region node_modules/.pnpm/linkifyjs@4.3.3/node_modules/linkifyjs/dist/linkify.mjs
4
4
  var p = "aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2odyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rck0msd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2oodside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2", m = "ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2", h = "numeric", g = "ascii", _ = "alpha", v = "asciinumeric", y = "alphanumeric", b = "domain", x = "emoji", ee = "scheme", S = "slashscheme", C = "whitespace";
@@ -511,7 +511,7 @@ function yt(e, t = null, n = null) {
511
511
  return a;
512
512
  }
513
513
  //#endregion
514
- //#region node_modules/.pnpm/@tiptap+extension-link@3.29.2_@tiptap+core@3.29.2_@tiptap+pm@3.29.2__@tiptap+pm@3.29.2/node_modules/@tiptap/extension-link/dist/index.js
514
+ //#region node_modules/.pnpm/@tiptap+extension-link@3.30.1_@tiptap+core@3.30.1_@tiptap+pm@3.30.1__@tiptap+pm@3.30.1/node_modules/@tiptap/extension-link/dist/index.js
515
515
  var bt = "[\0- \xA0 ᠎ -\u2029  ]", xt = new RegExp(bt), St = RegExp(`${bt}$`), Ct = new RegExp(bt, "g");
516
516
  function wt(e) {
517
517
  return e.length === 1 ? e[0].isLink : e.length === 3 && e[1].isLink ? ["()", "[]"].includes(e[0].value + e[2].value) : !1;
@@ -519,31 +519,31 @@ function wt(e) {
519
519
  function Tt(e) {
520
520
  return new d({
521
521
  key: new f("autolink"),
522
- appendTransaction: (t, a, o) => {
523
- let s = t.some((e) => e.docChanged) && !a.doc.eq(o.doc), c = t.some((e) => e.getMeta("preventAutolink"));
522
+ appendTransaction: (t, n, o) => {
523
+ let s = t.some((e) => e.docChanged) && !n.doc.eq(o.doc), c = t.some((e) => e.getMeta("preventAutolink"));
524
524
  if (!s || c) return;
525
- let { tr: l } = o, d = u(a.doc, [...t]);
526
- if (i(d).forEach(({ newRange: t }) => {
527
- let i = r(o.doc, t, (e) => e.isTextblock), a, s;
528
- if (i.length > 1) a = i[0], s = o.doc.textBetween(a.pos, a.pos + a.node.nodeSize, void 0, " ");
529
- else if (i.length) {
525
+ let { tr: l } = o, d = u(n.doc, [...t]);
526
+ if (a(d).forEach(({ newRange: t }) => {
527
+ let n = i(o.doc, t, (e) => e.isTextblock), a, s;
528
+ if (n.length > 1) a = n[0], s = o.doc.textBetween(a.pos, a.pos + a.node.nodeSize, void 0, " ");
529
+ else if (n.length) {
530
530
  let e = o.doc.textBetween(t.from, t.to, " ", " ");
531
531
  if (!St.test(e)) return;
532
- a = i[0], s = o.doc.textBetween(a.pos, t.to, void 0, " ");
532
+ a = n[0], s = o.doc.textBetween(a.pos, t.to, void 0, " ");
533
533
  }
534
534
  if (a && s) {
535
535
  let t = s.split(xt).filter(Boolean);
536
536
  if (t.length <= 0) return !1;
537
- let r = t[t.length - 1], i = a.pos + s.lastIndexOf(r);
538
- if (!r) return !1;
539
- let c = vt(r).map((t) => t.toObject(e.defaultProtocol));
537
+ let n = t[t.length - 1], i = a.pos + s.lastIndexOf(n);
538
+ if (!n) return !1;
539
+ let c = vt(n).map((t) => t.toObject(e.defaultProtocol));
540
540
  if (!wt(c)) return !1;
541
541
  c.filter((e) => e.isLink).map((e) => ({
542
542
  ...e,
543
543
  from: i + e.start + 1,
544
544
  to: i + e.end + 1
545
545
  })).filter((e) => !o.schema.marks.code || !o.doc.rangeHasMark(e.from, e.to, o.schema.marks.code)).filter((t) => e.validate(t.value)).filter((t) => e.shouldAutoLink(t.value)).forEach((t) => {
546
- n(t.from, t.to, o.doc).some((t) => t.mark.type === e.type) || l.addMark(t.from, t.to, e.type.create({ href: t.href }));
546
+ r(t.from, t.to, o.doc).some((t) => t.mark.type === e.type) || l.addMark(t.from, t.to, e.type.create({ href: t.href }));
547
547
  });
548
548
  }
549
549
  }), l.steps.length) return l;
@@ -622,32 +622,32 @@ function Pt(e) {
622
622
  title: e.data?.title ?? null
623
623
  };
624
624
  }
625
- function Ft(e) {
626
- let t = o({
627
- find: (t) => {
628
- let n = Dt.exec(t);
629
- return !n || !jt(t, n, e.isAllowedHref) ? null : Mt(n);
625
+ function Ft(t) {
626
+ let n = e({
627
+ find: (e) => {
628
+ let n = Dt.exec(e);
629
+ return !n || !jt(e, n, t.isAllowedHref) ? null : Mt(n);
630
630
  },
631
- type: e.type,
631
+ type: t.type,
632
632
  getAttributes: Pt
633
633
  });
634
634
  return new l({
635
- find: t.find,
635
+ find: n.find,
636
636
  handler: (e) => {
637
- let n = t.handler(e);
638
- return n !== null && e.state.tr.steps.length && e.state.tr.setMeta("preventAutolink", !0), n;
637
+ let t = n.handler(e);
638
+ return t !== null && e.state.tr.steps.length && e.state.tr.setMeta("preventAutolink", !0), t;
639
639
  }
640
640
  });
641
641
  }
642
- function It(t) {
643
- let n = e({
644
- find: (e) => {
642
+ function It(e) {
643
+ let n = t({
644
+ find: (t) => {
645
645
  let n = [];
646
- for (let r of e.matchAll(Ot)) jt(e, r, t.isAllowedHref) && n.push(Mt(r));
647
- let r = (t.findPlainUrls?.call(t, e) ?? []).filter((e) => !n.some((t) => Nt(t, e)));
646
+ for (let r of t.matchAll(Ot)) jt(t, r, e.isAllowedHref) && n.push(Mt(r));
647
+ let r = (e.findPlainUrls?.call(e, t) ?? []).filter((e) => !n.some((t) => Nt(t, e)));
648
648
  return [...n, ...r];
649
649
  },
650
- type: t.type,
650
+ type: e.type,
651
651
  getAttributes: Pt
652
652
  });
653
653
  return new c({
@@ -691,7 +691,7 @@ function $(e, t) {
691
691
  t && n.push(t);
692
692
  }), !e || e.replace(Ct, "").match(RegExp(`^(?:(?:${n.map((e) => e.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&")).join("|")}):|[^a-z]|[a-z0-9+.\\-]+(?:[^a-z+.\\-:]|$))`, "i"));
693
693
  }
694
- var Rt = a.create({
694
+ var Rt = o.create({
695
695
  name: "link",
696
696
  priority: 1e3,
697
697
  keepOnSplit: !1,
@@ -769,11 +769,11 @@ var Rt = a.create({
769
769
  defaultProtocol: this.options.defaultProtocol
770
770
  }) ? [
771
771
  "a",
772
- t(this.options.HTMLAttributes, e),
772
+ n(this.options.HTMLAttributes, e),
773
773
  0
774
774
  ] : [
775
775
  "a",
776
- t(this.options.HTMLAttributes, {
776
+ n(this.options.HTMLAttributes, {
777
777
  ...e,
778
778
  href: ""
779
779
  }),
@@ -821,7 +821,7 @@ var Rt = a.create({
821
821
  })] : [];
822
822
  },
823
823
  addPasteRules() {
824
- let t = (e) => {
824
+ let e = (e) => {
825
825
  let t = [];
826
826
  if (e) {
827
827
  let { protocols: n, defaultProtocol: r } = this.options;
@@ -846,9 +846,9 @@ var Rt = a.create({
846
846
  protocols: this.options.protocols,
847
847
  defaultProtocol: this.options.defaultProtocol
848
848
  }),
849
- findPlainUrls: t
850
- })] : [e({
851
- find: t,
849
+ findPlainUrls: e
850
+ })] : [t({
851
+ find: e,
852
852
  type: this.type,
853
853
  getAttributes: (e) => ({ href: e.data?.href })
854
854
  })];
@@ -1,17 +1,17 @@
1
- import { r as e } from "./dist-Dw4STOPE.js";
2
- import { A as t, C as n, I as r, S as i, n as a } from "./dist-DFua_Xbu.js";
1
+ import { r as e } from "./dist-BoYfa2nz.js";
2
+ import { C as t, L as n, j as r, n as i, w as a } from "./dist-W9E-K577.js";
3
3
  import { a as o, c as s, i as c, l, n as u, o as d, s as f, t as p, u as m } from "./floating-ui.dom-CmJ6iBdh.js";
4
4
  import h, { useEffect as g, useLayoutEffect as _, useRef as v, useState as y } from "react";
5
5
  import { createPortal as b } from "react-dom";
6
6
  import { NodeSelection as x, Plugin as S, PluginKey as C } from "@tiptap/pm/state";
7
7
  import { CellSelection as w } from "@tiptap/pm/tables";
8
- //#region node_modules/.pnpm/@tiptap+extension-bubble-menu@3.29.2_@tiptap+core@3.29.2_@tiptap+pm@3.29.2__@tiptap+pm@3.29.2/node_modules/@tiptap/extension-bubble-menu/dist/index.js
8
+ //#region node_modules/.pnpm/@tiptap+extension-bubble-menu@3.30.1_@tiptap+core@3.30.1_@tiptap+pm@3.30.1__@tiptap+pm@3.30.1/node_modules/@tiptap/extension-bubble-menu/dist/index.js
9
9
  function T(e, t) {
10
10
  let n = Math.min(e.top, t.top), r = Math.max(e.bottom, t.bottom), i = Math.min(e.left, t.left), a = Math.max(e.right, t.right) - i, o = r - n;
11
11
  return new DOMRect(i, n, a, o);
12
12
  }
13
13
  var E = class {
14
- constructor({ editor: e, element: n, view: r, pluginKey: i = "bubbleMenu", updateDelay: a = 250, resizeDelay: o = 60, shouldShow: s, appendTo: c, getReferencedVirtualElement: l, options: u }) {
14
+ constructor({ editor: e, element: t, view: n, pluginKey: i = "bubbleMenu", updateDelay: a = 250, resizeDelay: o = 60, shouldShow: s, appendTo: c, getReferencedVirtualElement: l, options: u }) {
15
15
  this.preventHide = !1, this.isVisible = !1, this.scrollTarget = window, this.floatingUIOptions = {
16
16
  strategy: "absolute",
17
17
  placement: "top",
@@ -27,8 +27,8 @@ var E = class {
27
27
  onHide: void 0,
28
28
  onUpdate: void 0,
29
29
  onDestroy: void 0
30
- }, this.shouldShow = ({ view: e, state: n, from: r, to: i }) => {
31
- let { doc: a, selection: o } = n, { empty: s } = o, c = !a.textBetween(r, i).length && t(n.selection), l = this.element.contains(document.activeElement);
30
+ }, this.shouldShow = ({ view: e, state: t, from: n, to: i }) => {
31
+ let { doc: a, selection: o } = t, { empty: s } = o, c = !a.textBetween(n, i).length && r(t.selection), l = this.element.contains(document.activeElement);
32
32
  return !(!(e.hasFocus() || l) || s || c || !this.editor.isEditable);
33
33
  }, this.mousedownHandler = () => {
34
34
  this.preventHide = !0;
@@ -67,10 +67,10 @@ var E = class {
67
67
  }, this.transactionHandler = ({ transaction: e }) => {
68
68
  let t = e.getMeta(this.pluginKey);
69
69
  t === "updatePosition" ? this.updatePosition() : t && typeof t == "object" && t.type === "updateOptions" ? this.updateOptions(t.options) : t === "hide" ? this.hide() : t === "show" && (this.updatePosition(), this.show());
70
- }, this.editor = e, this.element = n, this.view = r, this.pluginKey = i, this.updateDelay = a, this.resizeDelay = o, this.appendTo = c, this.scrollTarget = u?.scrollTarget ?? window, this.getReferencedVirtualElement = l, this.floatingUIOptions = {
70
+ }, this.editor = e, this.element = t, this.view = n, this.pluginKey = i, this.updateDelay = a, this.resizeDelay = o, this.appendTo = c, this.scrollTarget = u?.scrollTarget ?? window, this.getReferencedVirtualElement = l, this.floatingUIOptions = {
71
71
  ...this.floatingUIOptions,
72
72
  ...u
73
- }, this.element.tabIndex = 0, s && (this.shouldShow = s), this.element.addEventListener("mousedown", this.mousedownHandler, { capture: !0 }), this.view.dom.addEventListener("dragstart", this.dragstartHandler), this.editor.on("focus", this.focusHandler), this.editor.on("blur", this.blurHandler), this.editor.on("transaction", this.transactionHandler), window.addEventListener("resize", this.resizeHandler), this.scrollTarget.addEventListener("scroll", this.resizeHandler), this.update(r, r.state), this.getShouldShow() && (this.show(), this.updatePosition());
73
+ }, this.element.tabIndex = 0, s && (this.shouldShow = s), this.element.addEventListener("mousedown", this.mousedownHandler, { capture: !0 }), this.view.dom.addEventListener("dragstart", this.dragstartHandler), this.editor.on("focus", this.focusHandler), this.editor.on("blur", this.blurHandler), this.editor.on("transaction", this.transactionHandler), window.addEventListener("resize", this.resizeHandler), this.scrollTarget.addEventListener("scroll", this.resizeHandler), this.update(n, n.state), this.getShouldShow() && (this.show(), this.updatePosition());
74
74
  }
75
75
  get middlewares() {
76
76
  let e = [];
@@ -80,9 +80,9 @@ var E = class {
80
80
  let { selection: e } = this.editor.state, t = this.getReferencedVirtualElement?.call(this);
81
81
  if (t) return t;
82
82
  if (!this.view?.dom?.parentNode) return;
83
- let n = r(this.view, e.from, e.to), i = {
84
- getBoundingClientRect: () => n,
85
- getClientRects: () => [n]
83
+ let r = n(this.view, e.from, e.to), i = {
84
+ getBoundingClientRect: () => r,
85
+ getClientRects: () => [r]
86
86
  };
87
87
  if (e instanceof x) {
88
88
  let t = this.view.nodeDOM(e.from), n = t.dataset.nodeViewWrapper ? t : t.querySelector("[data-node-view-wrapper]");
@@ -166,7 +166,7 @@ var E = class {
166
166
  ...e
167
167
  })
168
168
  });
169
- a.create({
169
+ i.create({
170
170
  name: "bubbleMenu",
171
171
  addOptions() {
172
172
  return {
@@ -191,7 +191,7 @@ a.create({
191
191
  }
192
192
  });
193
193
  //#endregion
194
- //#region node_modules/.pnpm/@tiptap+extension-floating-menu@3.29.2_@floating-ui+dom@1.8.0_@tiptap+core@3.29.2_@tiptap+pm@3.29.2__@tiptap+pm@3.29.2/node_modules/@tiptap/extension-floating-menu/dist/index.js
194
+ //#region node_modules/.pnpm/@tiptap+extension-floating-menu@3.30.1_@floating-ui+dom@1.8.0_@tiptap+core@3.30.1_@tiptap+pm@3.30.1__@tiptap+pm@3.30.1/node_modules/@tiptap/extension-floating-menu/dist/index.js
195
195
  var O = class {
196
196
  constructor({ editor: e, element: t, view: n, pluginKey: r = "floatingMenu", updateDelay: i = 250, resizeDelay: a = 60, options: o, appendTo: s, shouldShow: c }) {
197
197
  this.preventHide = !1, this.isVisible = !1, this.scrollTarget = window, this.shouldShow = ({ view: e, state: t }) => {
@@ -240,7 +240,7 @@ var O = class {
240
240
  }, this.element.tabIndex = 0, c && (this.shouldShow = c), this.element.addEventListener("mousedown", this.mousedownHandler, { capture: !0 }), this.editor.on("focus", this.focusHandler), this.editor.on("blur", this.blurHandler), this.editor.on("transaction", this.transactionHandler), window.addEventListener("resize", this.resizeHandler), this.scrollTarget.addEventListener("scroll", this.resizeHandler), this.update(n, n.state), this.getShouldShow() && (this.show(), this.updatePosition());
241
241
  }
242
242
  getTextContent(e) {
243
- return i(e, { textSerializers: n(this.editor.schema) });
243
+ return t(e, { textSerializers: a(this.editor.schema) });
244
244
  }
245
245
  get middlewares() {
246
246
  let e = [];
@@ -268,7 +268,7 @@ var O = class {
268
268
  }
269
269
  updatePosition() {
270
270
  if (!this.view?.dom?.parentNode) return;
271
- let { selection: e } = this.editor.state, t = r(this.view, e.from, e.to);
271
+ let { selection: e } = this.editor.state, t = n(this.view, e.from, e.to);
272
272
  c({
273
273
  getBoundingClientRect: () => t,
274
274
  getClientRects: () => [t]
@@ -305,7 +305,7 @@ var O = class {
305
305
  ...e
306
306
  })
307
307
  });
308
- a.create({
308
+ i.create({
309
309
  name: "floatingMenu",
310
310
  addOptions() {
311
311
  return {
@@ -335,7 +335,7 @@ a.create({
335
335
  }
336
336
  });
337
337
  //#endregion
338
- //#region node_modules/.pnpm/@tiptap+react@3.29.2_@floating-ui+dom@1.8.0_@tiptap+core@3.29.2_@tiptap+pm@3.29.2__@tip_6ae02cdf395ababc98513a112803373d/node_modules/@tiptap/react/dist/menus/index.js
338
+ //#region node_modules/.pnpm/@tiptap+react@3.30.1_@floating-ui+dom@1.8.0_@tiptap+core@3.30.1_@tiptap+pm@3.30.1__@tip_11778a9e3ce7f1a067932c0c4f0a2645/node_modules/@tiptap/react/dist/menus/index.js
339
339
  function A(e, t) {
340
340
  return e ?? new C(t);
341
341
  }
@@ -1,7 +1,7 @@
1
- import { N as e, a as t, c as n, g as r, n as i, p as a } from "./dist-DFua_Xbu.js";
1
+ import { P as e, a as t, c as n, g as r, n as i, p as a } from "./dist-W9E-K577.js";
2
2
  import { TextSelection as o } from "@tiptap/pm/state";
3
3
  import { CellSelection as s, addColumnAfter as c, addColumnBefore as l, addRowAfter as u, addRowBefore as d, columnResizing as f, columnResizingPluginKey as p, deleteColumn as m, deleteRow as h, deleteTable as g, fixTables as _, goToNextCell as v, mergeCells as y, setCellAttr as b, splitCell as x, tableEditing as S, toggleHeader as C, toggleHeaderCell as w } from "@tiptap/pm/tables";
4
- //#region node_modules/.pnpm/@tiptap+extension-table@3.29.2_@tiptap+core@3.29.2_@tiptap+pm@3.29.2__@tiptap+pm@3.29.2/node_modules/@tiptap/extension-table/dist/index.js
4
+ //#region node_modules/.pnpm/@tiptap+extension-table@3.30.1_@tiptap+core@3.30.1_@tiptap+pm@3.30.1__@tiptap+pm@3.30.1/node_modules/@tiptap/extension-table/dist/index.js
5
5
  function T(e) {
6
6
  return e === "left" || e === "right" || e === "center" ? e : null;
7
7
  }
@@ -224,7 +224,15 @@ var G = ({ editor: e }) => {
224
224
  ["tableCell", "tableHeader"].includes(e.type.name) && (n += 1);
225
225
  }), n === t.ranges.length && (e.commands.deleteTable(), !0);
226
226
  };
227
- function K(e) {
227
+ function K(e, t) {
228
+ let n = e.mapping.map(t);
229
+ if (a(e.selection.$from, (e) => e.type.name === "table")?.pos === n) return;
230
+ let r = e.doc.nodeAt(n);
231
+ if (!r) return;
232
+ let i = n + r.nodeSize - 1;
233
+ e.setSelection(o.near(e.doc.resolve(i), -1));
234
+ }
235
+ function q(e) {
228
236
  let t = "", n = 0;
229
237
  for (; n < e.length;) {
230
238
  if (e[n] === "\\" && n + 1 < e.length) {
@@ -247,7 +255,7 @@ function K(e) {
247
255
  for (; i + o < e.length && e[i + o] === "`";) o += 1;
248
256
  if (o === r) {
249
257
  let o = e.slice(n + r, i);
250
- t += e.slice(n, n + r) + o.replace(/(?<!\\)\|/g, "\\|") + e.slice(i, i + r), n = i + r, a = !0;
258
+ t += e.slice(n, n + r) + o.replace(/\\\||\|/g, (e) => e === "|" ? "\\|" : e) + e.slice(i, i + r), n = i + r, a = !0;
251
259
  break;
252
260
  }
253
261
  i += o;
@@ -256,13 +264,13 @@ function K(e) {
256
264
  }
257
265
  return t;
258
266
  }
259
- function q(e) {
260
- return e.split("\n").map((e) => !e.includes("|") || !e.includes("`") ? e : K(e)).join("\n");
261
- }
262
267
  function J(e) {
268
+ return e.split("\n").map((e) => !e.includes("|") || !e.includes("`") ? e : q(e)).join("\n");
269
+ }
270
+ function Y(e) {
263
271
  return (e || "").replace(/\s+/g, " ").trim();
264
272
  }
265
- function Y(e, t, n = {}) {
273
+ function X(e, t, n = {}) {
266
274
  let r = n.cellLineSeparator ?? "";
267
275
  if (!e || !e.content || e.content.length === 0) return "";
268
276
  let i = [];
@@ -271,7 +279,7 @@ function Y(e, t, n = {}) {
271
279
  e.content && e.content.forEach((e) => {
272
280
  let i = "";
273
281
  i = e.content && Array.isArray(e.content) && e.content.length > 1 ? e.content.map((e) => t.renderChildren(e)).join(r) : e.content ? t.renderChildren(e.content) : "";
274
- let a = J(i.split(r).join("\n").replace(/[ \t]*\r?\n[ \t]*/g, "<br>")), o = e.type === "tableHeader", s = D(e.attrs);
282
+ let a = Y(i.split(r).join("\n").replace(/[ \t]*\r?\n[ \t]*/g, "<br>")), o = e.type === "tableHeader", s = D(e.attrs);
275
283
  n.push({
276
284
  text: a,
277
285
  isHeader: o,
@@ -303,7 +311,7 @@ function Y(e, t, n = {}) {
303
311
  `;
304
312
  }), d;
305
313
  }
306
- var X = Y, Z = t.create({
314
+ var Z = X, Q = t.create({
307
315
  name: "table",
308
316
  addOptions() {
309
317
  return {
@@ -364,7 +372,7 @@ var X = Y, Z = t.create({
364
372
  }), n.push(t.createNode("tableRow", {}, i));
365
373
  }), t.createNode("table", void 0, n);
366
374
  },
367
- renderMarkdown: (e, t) => X(e, t),
375
+ renderMarkdown: (e, t) => Z(e, t),
368
376
  markdownTokenizer: {
369
377
  name: "table",
370
378
  level: "block",
@@ -379,7 +387,7 @@ var X = Y, Z = t.create({
379
387
  if (a.length < 2) return;
380
388
  let o = a[1];
381
389
  if (!/^[ \t|:]*-[ \t|:-]*$/.test(o) || !o.includes("|")) return;
382
- let s = q(i);
390
+ let s = J(i);
383
391
  if (s === i) return;
384
392
  let c = n.blockTokens(s)[0];
385
393
  if (c?.type !== "table" || !c.raw) return;
@@ -402,10 +410,20 @@ var X = Y, Z = t.create({
402
410
  },
403
411
  addColumnBefore: () => ({ state: e, dispatch: t }) => l(e, t),
404
412
  addColumnAfter: () => ({ state: e, dispatch: t }) => c(e, t),
405
- deleteColumn: () => ({ state: e, dispatch: t }) => m(e, t),
413
+ deleteColumn: () => ({ state: e, dispatch: t }) => {
414
+ let n = a(e.selection.$from, (e) => e.type.name === "table");
415
+ return m(e, t && ((e) => {
416
+ n && K(e, n.pos), t(e);
417
+ }));
418
+ },
406
419
  addRowBefore: () => ({ state: e, dispatch: t }) => d(e, t),
407
420
  addRowAfter: () => ({ state: e, dispatch: t }) => u(e, t),
408
- deleteRow: () => ({ state: e, dispatch: t }) => h(e, t),
421
+ deleteRow: () => ({ state: e, dispatch: t }) => {
422
+ let n = a(e.selection.$from, (e) => e.type.name === "table");
423
+ return h(e, t && ((e) => {
424
+ n && K(e, n.pos), t(e);
425
+ }));
426
+ },
409
427
  deleteTable: () => ({ state: e, dispatch: t }) => g(e, t),
410
428
  mergeCells: () => ({ state: e, dispatch: t }) => y(e, t),
411
429
  splitCell: () => ({ state: e, dispatch: t }) => x(e, t),
@@ -460,13 +478,13 @@ var X = Y, Z = t.create({
460
478
  };
461
479
  return { tableRole: n(r(e, "tableRole", t)) };
462
480
  }
463
- }), Q = i.create({
481
+ }), $ = i.create({
464
482
  name: "tableKit",
465
483
  addExtensions() {
466
484
  let e = [];
467
- return this.options.table !== !1 && e.push(Z.configure(this.options.table)), this.options.tableCell !== !1 && e.push(P.configure(this.options.tableCell)), this.options.tableHeader !== !1 && e.push(F.configure(this.options.tableHeader)), this.options.tableRow !== !1 && e.push(I.configure(this.options.tableRow)), e;
485
+ return this.options.table !== !1 && e.push(Q.configure(this.options.table)), this.options.tableCell !== !1 && e.push(P.configure(this.options.tableCell)), this.options.tableHeader !== !1 && e.push(F.configure(this.options.tableHeader)), this.options.tableRow !== !1 && e.push(I.configure(this.options.tableRow)), e;
468
486
  }
469
- }), $ = Z.extend({
487
+ }), ee = Q.extend({
470
488
  onUpdate() {
471
489
  if (this.editor.isEditable) return;
472
490
  let e = p.getState(this.editor.state);
@@ -486,4 +504,4 @@ var X = Y, Z = t.create({
486
504
  }
487
505
  }).configure({ resizable: !0 });
488
506
  //#endregion
489
- export { Q as n, $ as t };
507
+ export { $ as n, ee as t };
@@ -1,8 +1,8 @@
1
- import { d as e, n as t } from "./dist-DFua_Xbu.js";
1
+ import { d as e, n as t } from "./dist-W9E-K577.js";
2
2
  import { a as n, c as r, i, r as a } from "./floating-ui.dom-CmJ6iBdh.js";
3
3
  import { Plugin as o, PluginKey as s } from "@tiptap/pm/state";
4
4
  import { Decoration as c, DecorationSet as l } from "@tiptap/pm/view";
5
- //#region node_modules/.pnpm/@tiptap+suggestion@3.29.2_@floating-ui+dom@1.8.0_@tiptap+core@3.29.2_@tiptap+pm@3.29.2__@tiptap+pm@3.29.2/node_modules/@tiptap/suggestion/dist/index.js
5
+ //#region node_modules/.pnpm/@tiptap+suggestion@3.30.1_@floating-ui+dom@1.8.0_@tiptap+core@3.30.1_@tiptap+pm@3.30.1__@tiptap+pm@3.30.1/node_modules/@tiptap/suggestion/dist/index.js
6
6
  function u(t) {
7
7
  let { char: n, allowSpaces: r, allowToIncludeChar: i, allowedPrefixes: a, startOfLine: o, $position: s } = t, c = r && !i, l = e(n), u = RegExp(`\\s${l}$`), d = o ? "^" : "", f = i ? "" : l, p = RegExp(c ? `${d}${l}.*?(?=\\s${f}|$)` : `${d}(?:^)?${l}[^\\s${f}]*`, "gm"), m = s.nodeBefore?.isText && s.nodeBefore.text;
8
8
  if (!m) return null;
@@ -1,9 +1,9 @@
1
- import { t as e } from "../dist-DFua_Xbu.js";
1
+ import { t as e } from "../dist-W9E-K577.js";
2
2
  import { t } from "../html-to-markdown-C920nQtn.js";
3
3
  import { t as n } from "../markdown-to-html-CW0Nb9Ye.js";
4
4
  import { isInViewport as r } from "./is-in-viewport.js";
5
5
  import { convertLegacyMathDelimiters as i } from "./convert-legacy-math-delimiters.js";
6
- import { t as a } from "../extension-_8uh0Ik9.js";
6
+ import { t as a } from "../extension-D5WIAWhc.js";
7
7
  //#region lib/utils/create-scribe-editor.ts
8
8
  function o({ content: n = "", editable: r = !1, onContentChange: i }) {
9
9
  return new e({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clevertask/scribe",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "private": false,
5
5
  "description": "A Radix-based Tiptap rich text editor with a Notion-style block interface for viewing and creating content. Perfect for diverse needs like notes, documents, AI chat, Markdown parsing, and comments.",
6
6
  "keywords": [
@@ -45,14 +45,14 @@
45
45
  "registry": "https://registry.npmjs.org/"
46
46
  },
47
47
  "dependencies": {
48
- "@tiptap/core": "3.29.2",
49
- "@tiptap/extension-bubble-menu": "3.29.2",
50
- "@tiptap/extension-floating-menu": "3.29.2",
51
- "@tiptap/react": "3.29.2",
52
- "@tiptap/suggestion": "3.29.2",
48
+ "@tiptap/core": "3.30.1",
49
+ "@tiptap/extension-bubble-menu": "3.30.1",
50
+ "@tiptap/extension-floating-menu": "3.30.1",
51
+ "@tiptap/react": "3.30.1",
52
+ "@tiptap/suggestion": "3.30.1",
53
53
  "clsx": "^2.1.1",
54
54
  "dompurify": "^3.4.13",
55
- "katex": "^0.17.0",
55
+ "katex": "^0.18.4",
56
56
  "marked": "^18.0.9",
57
57
  "tippy.js": "^6.3.7",
58
58
  "turndown": "^7.2.4"
@@ -61,45 +61,45 @@
61
61
  "@playwright/test": "^1.62.1",
62
62
  "@radix-ui/themes": "^3.3.0",
63
63
  "@testing-library/dom": "^10.4.1",
64
- "@testing-library/jest-dom": "^7.0.0",
64
+ "@testing-library/jest-dom": "^7.0.1",
65
65
  "@testing-library/react": "^16.3.2",
66
- "@tiptap/extension-blockquote": "3.29.2",
67
- "@tiptap/extension-bold": "3.29.2",
68
- "@tiptap/extension-bullet-list": "3.29.2",
69
- "@tiptap/extension-code": "3.29.2",
70
- "@tiptap/extension-code-block": "3.29.2",
71
- "@tiptap/extension-document": "3.29.2",
72
- "@tiptap/extension-dropcursor": "3.29.2",
73
- "@tiptap/extension-emoji": "3.29.2",
74
- "@tiptap/extension-focus": "3.29.2",
75
- "@tiptap/extension-gapcursor": "3.29.2",
76
- "@tiptap/extension-hard-break": "3.29.2",
77
- "@tiptap/extension-heading": "3.29.2",
78
- "@tiptap/extension-highlight": "3.29.2",
79
- "@tiptap/extension-horizontal-rule": "3.29.2",
80
- "@tiptap/extension-image": "3.29.2",
81
- "@tiptap/extension-italic": "3.29.2",
82
- "@tiptap/extension-link": "3.29.2",
83
- "@tiptap/extension-list": "3.29.2",
84
- "@tiptap/extension-list-item": "3.29.2",
85
- "@tiptap/extension-list-keymap": "3.29.2",
86
- "@tiptap/extension-mathematics": "3.29.2",
87
- "@tiptap/extension-ordered-list": "3.29.2",
88
- "@tiptap/extension-paragraph": "3.29.2",
89
- "@tiptap/extension-placeholder": "3.29.2",
90
- "@tiptap/extension-strike": "3.29.2",
91
- "@tiptap/extension-table": "3.29.2",
92
- "@tiptap/extension-table-cell": "3.29.2",
93
- "@tiptap/extension-table-header": "3.29.2",
94
- "@tiptap/extension-table-row": "3.29.2",
95
- "@tiptap/extension-task-item": "3.29.2",
96
- "@tiptap/extension-task-list": "3.29.2",
97
- "@tiptap/extension-text": "3.29.2",
98
- "@tiptap/extension-typography": "3.29.2",
99
- "@tiptap/extension-underline": "3.29.2",
100
- "@tiptap/extensions": "3.29.2",
101
- "@tiptap/pm": "3.29.2",
102
- "@tiptap/starter-kit": "3.29.2",
66
+ "@tiptap/extension-blockquote": "3.30.1",
67
+ "@tiptap/extension-bold": "3.30.1",
68
+ "@tiptap/extension-bullet-list": "3.30.1",
69
+ "@tiptap/extension-code": "3.30.1",
70
+ "@tiptap/extension-code-block": "3.30.1",
71
+ "@tiptap/extension-document": "3.30.1",
72
+ "@tiptap/extension-dropcursor": "3.30.1",
73
+ "@tiptap/extension-emoji": "3.30.1",
74
+ "@tiptap/extension-focus": "3.30.1",
75
+ "@tiptap/extension-gapcursor": "3.30.1",
76
+ "@tiptap/extension-hard-break": "3.30.1",
77
+ "@tiptap/extension-heading": "3.30.1",
78
+ "@tiptap/extension-highlight": "3.30.1",
79
+ "@tiptap/extension-horizontal-rule": "3.30.1",
80
+ "@tiptap/extension-image": "3.30.1",
81
+ "@tiptap/extension-italic": "3.30.1",
82
+ "@tiptap/extension-link": "3.30.1",
83
+ "@tiptap/extension-list": "3.30.1",
84
+ "@tiptap/extension-list-item": "3.30.1",
85
+ "@tiptap/extension-list-keymap": "3.30.1",
86
+ "@tiptap/extension-mathematics": "3.30.1",
87
+ "@tiptap/extension-ordered-list": "3.30.1",
88
+ "@tiptap/extension-paragraph": "3.30.1",
89
+ "@tiptap/extension-placeholder": "3.30.1",
90
+ "@tiptap/extension-strike": "3.30.1",
91
+ "@tiptap/extension-table": "3.30.1",
92
+ "@tiptap/extension-table-cell": "3.30.1",
93
+ "@tiptap/extension-table-header": "3.30.1",
94
+ "@tiptap/extension-table-row": "3.30.1",
95
+ "@tiptap/extension-task-item": "3.30.1",
96
+ "@tiptap/extension-task-list": "3.30.1",
97
+ "@tiptap/extension-text": "3.30.1",
98
+ "@tiptap/extension-typography": "3.30.1",
99
+ "@tiptap/extension-underline": "3.30.1",
100
+ "@tiptap/extensions": "3.30.1",
101
+ "@tiptap/pm": "3.30.1",
102
+ "@tiptap/starter-kit": "3.30.1",
103
103
  "@types/lodash": "^4.17.25",
104
104
  "@types/node": "^24.13.3",
105
105
  "@types/react": "^19.2.18",
@@ -109,8 +109,8 @@
109
109
  "glob": "^13.0.6",
110
110
  "jsdom": "^30.0.1",
111
111
  "lodash": "^4.18.1",
112
- "oxfmt": "^0.62.0",
113
- "oxlint": "^1.77.0",
112
+ "oxfmt": "^0.63.0",
113
+ "oxlint": "^1.78.0",
114
114
  "typescript": "~7.0.2",
115
115
  "vite": "^8.2.1",
116
116
  "vite-plugin-lib-inject-css": "^2.2.2",
@@ -118,7 +118,7 @@
118
118
  },
119
119
  "peerDependencies": {
120
120
  "@radix-ui/themes": ">=3.3.0",
121
- "@tiptap/pm": "3.29.2",
121
+ "@tiptap/pm": "3.30.1",
122
122
  "react": ">=18.3.1 <20.0.0",
123
123
  "react-dom": ">=18.3.1 <20.0.0"
124
124
  },