@cyberyozh/text-editor 0.2.0 → 0.2.2

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/editor.js CHANGED
@@ -37,7 +37,7 @@ module.exports = __toCommonJS(editor_exports);
37
37
 
38
38
  // src/editor/editor.tsx
39
39
  var import_react37 = require("react");
40
- var import_state6 = require("@tiptap/pm/state");
40
+ var import_state7 = require("@tiptap/pm/state");
41
41
  var import_model2 = require("@tiptap/pm/model");
42
42
  var import_react38 = require("@tiptap/react");
43
43
  var import_menus = require("@tiptap/react/menus");
@@ -786,10 +786,16 @@ var BubbleMenuContent = ({ editor, onLinkClick }) => {
786
786
  } = (0, import_react4.useEditorState)({
787
787
  editor,
788
788
  selector: (ctx) => {
789
+ let canAvalable = false;
790
+ try {
791
+ ctx.editor.can().undo();
792
+ canAvalable = true;
793
+ } catch {
794
+ }
789
795
  return {
790
- canUndo: ctx.editor.can().undo(),
791
- canRedo: ctx.editor.can().redo(),
792
- canClearMarks: ctx.editor.can().unsetAllMarks(),
796
+ canUndo: canAvalable ? ctx.editor.can().undo() : false,
797
+ canRedo: canAvalable ? ctx.editor.can().redo() : false,
798
+ canClearMarks: canAvalable ? ctx.editor.can().unsetAllMarks() : false,
793
799
  isHeading2: ctx.editor.isActive("heading", { level: 2 }),
794
800
  isHeading3: ctx.editor.isActive("heading", { level: 3 }),
795
801
  isHeading4: ctx.editor.isActive("heading", { level: 4 }),
@@ -1483,10 +1489,12 @@ var CharacterCount = ({ editor }) => {
1483
1489
  const translations2 = useTiptapTranslations();
1484
1490
  const { charactersCount, wordsCount } = (0, import_react8.useEditorState)({
1485
1491
  editor,
1486
- selector: (context) => ({
1487
- charactersCount: context.editor.storage.characterCount.characters(),
1488
- wordsCount: context.editor.storage.characterCount.words()
1489
- })
1492
+ selector: (context) => {
1493
+ return {
1494
+ charactersCount: context.editor.storage.characterCount?.characters() || 0,
1495
+ wordsCount: context.editor.storage.characterCount?.words() || 0
1496
+ };
1497
+ }
1490
1498
  });
1491
1499
  return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "tiptap__character-count", children: [
1492
1500
  /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("span", { className: "tiptap__character-count-item", children: [
@@ -2050,7 +2058,6 @@ var ImageDialog = ({
2050
2058
  setIsUploading(true);
2051
2059
  try {
2052
2060
  const result = await uploadHandler(formState.file);
2053
- console.log("\u{1F440} ~ handleAddImage ~ result:", result);
2054
2061
  onImageAdd({
2055
2062
  fileId: result.fileId,
2056
2063
  src: result.fileUrl,
@@ -3130,9 +3137,10 @@ var BaseCustomQuoteSign = import_core3.Node.create({
3130
3137
  // src/extensions/base/link.ts
3131
3138
  var import_extension_link = __toESM(require("@tiptap/extension-link"));
3132
3139
  var import_core4 = require("@tiptap/core");
3140
+ var import_state3 = require("@tiptap/pm/state");
3133
3141
 
3134
3142
  // node_modules/linkifyjs/dist/linkify.mjs
3135
- var encodedTlds = "aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5m\xF6gensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2";
3143
+ var encodedTlds = "aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2odyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rck0msd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5m\xF6gensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2oodside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2";
3136
3144
  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";
3137
3145
  var numeric = "numeric";
3138
3146
  var ascii = "ascii";
@@ -4063,8 +4071,6 @@ function init$1({
4063
4071
  ta(Email$1, groups.domain, EmailDomain);
4064
4072
  tt(Email$1, DOT, EmailDomainDot);
4065
4073
  tt(Email$1, HYPHEN, EmailDomainHyphen);
4066
- const EmailColon = tt(Email$1, COLON);
4067
- ta(EmailColon, groups.numeric, Email);
4068
4074
  const DomainHyphen = tt(Domain, HYPHEN);
4069
4075
  const DomainDot = tt(Domain, DOT);
4070
4076
  tt(DomainHyphen, HYPHEN, DomainHyphen);
@@ -4128,11 +4134,11 @@ function init$1({
4128
4134
  const [OPEN, CLOSE] = bracketPairs[i];
4129
4135
  const UrlOpen = tt(Url$1, OPEN);
4130
4136
  tt(UrlNonaccept, OPEN, UrlOpen);
4131
- tt(UrlOpen, CLOSE, Url$1);
4132
4137
  const UrlOpenQ = makeState(Url);
4133
4138
  ta(UrlOpen, qsAccepting, UrlOpenQ);
4134
4139
  const UrlOpenSyms = makeState();
4135
- ta(UrlOpen, qsNonAccepting);
4140
+ ta(UrlOpen, qsNonAccepting, UrlOpenSyms);
4141
+ tt(UrlOpen, CLOSE, Url$1);
4136
4142
  ta(UrlOpenQ, qsAccepting, UrlOpenQ);
4137
4143
  ta(UrlOpenQ, qsNonAccepting, UrlOpenSyms);
4138
4144
  ta(UrlOpenSyms, qsAccepting, UrlOpenQ);
@@ -4310,6 +4316,23 @@ var LinkExtension = import_extension_link.default.extend({
4310
4316
  }
4311
4317
  })
4312
4318
  ];
4319
+ },
4320
+ addProseMirrorPlugins() {
4321
+ return [
4322
+ ...this.parent?.() ?? [],
4323
+ new import_state3.Plugin({
4324
+ props: {
4325
+ handleClick: (view, pos) => {
4326
+ if (!view.editable) return false;
4327
+ const range = (0, import_core4.getMarkRange)(view.state.doc.resolve(pos), this.type);
4328
+ if (!range) return false;
4329
+ const selection = import_state3.TextSelection.create(view.state.doc, range.from, range.to);
4330
+ view.dispatch(view.state.tr.setSelection(selection));
4331
+ return true;
4332
+ }
4333
+ }
4334
+ })
4335
+ ];
4313
4336
  }
4314
4337
  }).configure({
4315
4338
  openOnClick: false,
@@ -4356,7 +4379,7 @@ var BaseMythReality = import_core5.Node.create({
4356
4379
 
4357
4380
  // src/extensions/base/prompt.ts
4358
4381
  var import_core6 = require("@tiptap/core");
4359
- var import_state3 = require("@tiptap/pm/state");
4382
+ var import_state4 = require("@tiptap/pm/state");
4360
4383
  var BasePrompt = import_core6.Node.create({
4361
4384
  name: "prompt",
4362
4385
  group: "block",
@@ -4388,7 +4411,7 @@ var BasePrompt = import_core6.Node.create({
4388
4411
  const paragraphNode = schema.nodes.paragraph.createAndFill();
4389
4412
  if (!paragraphNode) return false;
4390
4413
  tr2.insert(posAfter, paragraphNode);
4391
- tr2.setSelection(import_state3.TextSelection.create(tr2.doc, posAfter + 1));
4414
+ tr2.setSelection(import_state4.TextSelection.create(tr2.doc, posAfter + 1));
4392
4415
  view.dispatch(tr2);
4393
4416
  return true;
4394
4417
  }
@@ -4630,7 +4653,7 @@ var BaseFigure = import_extension_image.default.extend({
4630
4653
 
4631
4654
  // src/extensions/base/compatibility.ts
4632
4655
  var import_core9 = require("@tiptap/core");
4633
- var import_state4 = require("@tiptap/pm/state");
4656
+ var import_state5 = require("@tiptap/pm/state");
4634
4657
  var import_extension_image2 = __toESM(require("@tiptap/extension-image"));
4635
4658
  var BaseLegacyBookAlert = import_core9.Node.create({
4636
4659
  name: "calloutAlert",
@@ -4774,7 +4797,7 @@ var BaseLegacySEQuote = import_core9.Node.create({
4774
4797
  const paragraphNode = schema.nodes.paragraph.createAndFill();
4775
4798
  if (!paragraphNode) return false;
4776
4799
  tr2.insert(posAfter, paragraphNode);
4777
- tr2.setSelection(import_state4.TextSelection.create(tr2.doc, posAfter + 1));
4800
+ tr2.setSelection(import_state5.TextSelection.create(tr2.doc, posAfter + 1));
4778
4801
  view.dispatch(tr2);
4779
4802
  return true;
4780
4803
  }
@@ -4822,7 +4845,7 @@ var BaseLegacyPromptSE = import_core9.Node.create({
4822
4845
  const paragraphNode = schema.nodes.paragraph.createAndFill();
4823
4846
  if (!paragraphNode) return false;
4824
4847
  tr2.insert(posAfter, paragraphNode);
4825
- tr2.setSelection(import_state4.TextSelection.create(tr2.doc, posAfter + 1));
4848
+ tr2.setSelection(import_state5.TextSelection.create(tr2.doc, posAfter + 1));
4826
4849
  view.dispatch(tr2);
4827
4850
  return true;
4828
4851
  }
@@ -6129,21 +6152,8 @@ var BackgroundColor = import_core12.Extension.create({
6129
6152
  default: null,
6130
6153
  parseHTML: (element) => {
6131
6154
  var _a;
6132
- const styleAttr = element.getAttribute("style");
6133
- if (styleAttr) {
6134
- const decls = styleAttr.split(";").map((s) => s.trim()).filter(Boolean);
6135
- for (let i = decls.length - 1; i >= 0; i -= 1) {
6136
- const parts = decls[i].split(":");
6137
- if (parts.length >= 2) {
6138
- const prop = parts[0].trim().toLowerCase();
6139
- const val = parts.slice(1).join(":").trim();
6140
- if (prop === "background-color") {
6141
- return val.replace(/['"]+/g, "");
6142
- }
6143
- }
6144
- }
6145
- }
6146
- return (_a = element.style.backgroundColor) == null ? void 0 : _a.replace(/['"]+/g, "");
6155
+ const value = (_a = (0, import_core12.getStyleProperty)(element, "background-color")) != null ? _a : element.style.backgroundColor;
6156
+ return value == null ? void 0 : value.replace(/['"]+/g, "");
6147
6157
  },
6148
6158
  renderHTML: (attributes) => {
6149
6159
  if (!attributes.backgroundColor) {
@@ -6185,21 +6195,8 @@ var Color = import_core13.Extension.create({
6185
6195
  default: null,
6186
6196
  parseHTML: (element) => {
6187
6197
  var _a;
6188
- const styleAttr = element.getAttribute("style");
6189
- if (styleAttr) {
6190
- const decls = styleAttr.split(";").map((s) => s.trim()).filter(Boolean);
6191
- for (let i = decls.length - 1; i >= 0; i -= 1) {
6192
- const parts = decls[i].split(":");
6193
- if (parts.length >= 2) {
6194
- const prop = parts[0].trim().toLowerCase();
6195
- const val = parts.slice(1).join(":").trim();
6196
- if (prop === "color") {
6197
- return val.replace(/['"]+/g, "");
6198
- }
6199
- }
6200
- }
6201
- }
6202
- return (_a = element.style.color) == null ? void 0 : _a.replace(/['"]+/g, "");
6198
+ const value = (_a = (0, import_core13.getStyleProperty)(element, "color")) != null ? _a : element.style.color;
6199
+ return value == null ? void 0 : value.replace(/['"]+/g, "");
6203
6200
  },
6204
6201
  renderHTML: (attributes) => {
6205
6202
  if (!attributes.color) {
@@ -6239,7 +6236,14 @@ var FontFamily = import_core14.Extension.create({
6239
6236
  attributes: {
6240
6237
  fontFamily: {
6241
6238
  default: null,
6242
- parseHTML: (element) => element.style.fontFamily,
6239
+ // Prefer the raw inline `style` attribute so unquoted or
6240
+ // single-quoted multi-word names are preserved instead of being
6241
+ // canonicalized by `element.style.fontFamily`, which forces double
6242
+ // quotes that then get HTML-encoded to `"` on serialization.
6243
+ parseHTML: (element) => {
6244
+ var _a;
6245
+ return (_a = (0, import_core14.getStyleProperty)(element, "font-family")) != null ? _a : element.style.fontFamily;
6246
+ },
6243
6247
  renderHTML: (attributes) => {
6244
6248
  if (!attributes.fontFamily) {
6245
6249
  return {};
@@ -6278,7 +6282,13 @@ var FontSize = import_core15.Extension.create({
6278
6282
  attributes: {
6279
6283
  fontSize: {
6280
6284
  default: null,
6281
- parseHTML: (element) => element.style.fontSize,
6285
+ // Prefer the raw inline `style` attribute so the original format
6286
+ // is preserved instead of the canonicalized value returned by
6287
+ // `element.style.fontSize`.
6288
+ parseHTML: (element) => {
6289
+ var _a;
6290
+ return (_a = (0, import_core15.getStyleProperty)(element, "font-size")) != null ? _a : element.style.fontSize;
6291
+ },
6282
6292
  renderHTML: (attributes) => {
6283
6293
  if (!attributes.fontSize) {
6284
6294
  return {};
@@ -6317,7 +6327,13 @@ var LineHeight = import_core16.Extension.create({
6317
6327
  attributes: {
6318
6328
  lineHeight: {
6319
6329
  default: null,
6320
- parseHTML: (element) => element.style.lineHeight,
6330
+ // Prefer the raw inline `style` attribute so the original format
6331
+ // is preserved instead of the canonicalized value returned by
6332
+ // `element.style.lineHeight`.
6333
+ parseHTML: (element) => {
6334
+ var _a;
6335
+ return (_a = (0, import_core16.getStyleProperty)(element, "line-height")) != null ? _a : element.style.lineHeight;
6336
+ },
6321
6337
  renderHTML: (attributes) => {
6322
6338
  if (!attributes.lineHeight) {
6323
6339
  return {};
@@ -6687,7 +6703,7 @@ function getEditorExtensions(options) {
6687
6703
  }
6688
6704
 
6689
6705
  // src/editor/handlers/dialog-handlers.ts
6690
- var import_state5 = require("@tiptap/pm/state");
6706
+ var import_state6 = require("@tiptap/pm/state");
6691
6707
  var createHandleImageAdd = (editor, closeDialogCommand, savedPos) => {
6692
6708
  return (attrs) => {
6693
6709
  if (!editor) return;
@@ -6698,10 +6714,10 @@ var createHandleImageAdd = (editor, closeDialogCommand, savedPos) => {
6698
6714
  const imageNode = state2.schema.nodes.image.create({ ...attrs });
6699
6715
  if ($pos.parent.type.name === "paragraph" && $pos.parent.textContent === "") {
6700
6716
  tr2.replaceWith($pos.before(), $pos.after(), imageNode);
6701
- tr2.setSelection(import_state5.TextSelection.near(tr2.doc.resolve($pos.before())));
6717
+ tr2.setSelection(import_state6.TextSelection.near(tr2.doc.resolve($pos.before())));
6702
6718
  } else {
6703
6719
  tr2.insert(insertPos, imageNode);
6704
- tr2.setSelection(import_state5.TextSelection.near(tr2.doc.resolve(insertPos)));
6720
+ tr2.setSelection(import_state6.TextSelection.near(tr2.doc.resolve(insertPos)));
6705
6721
  }
6706
6722
  return true;
6707
6723
  }).run();
@@ -6725,40 +6741,29 @@ var createHandleVideoAdd = (editor, closeDialogCommand, savedPos) => {
6725
6741
  const videoNode = state2.schema.nodes.video.create({ src: url });
6726
6742
  if ($pos.parent.type.name === "paragraph" && $pos.parent.textContent === "") {
6727
6743
  tr2.replaceWith($pos.before(), $pos.after(), videoNode);
6728
- tr2.setSelection(import_state5.TextSelection.near(tr2.doc.resolve($pos.before())));
6744
+ tr2.setSelection(import_state6.TextSelection.near(tr2.doc.resolve($pos.before())));
6729
6745
  } else {
6730
6746
  tr2.insert(insertPos, videoNode);
6731
- tr2.setSelection(import_state5.TextSelection.near(tr2.doc.resolve(insertPos)));
6747
+ tr2.setSelection(import_state6.TextSelection.near(tr2.doc.resolve(insertPos)));
6732
6748
  }
6733
6749
  return true;
6734
6750
  }).run();
6735
6751
  closeDialogCommand();
6736
6752
  };
6737
6753
  };
6738
- var createHandleLinkAdd = (editor, closeDialogCommand, linkParams, savedPos) => {
6754
+ var createHandleLinkAdd = (editor, closeDialogCommand, linkParams, savedRange) => {
6739
6755
  if (!editor) return;
6740
- const hasSelection = !editor.state.selection.empty;
6741
- const titleLength = linkParams.title?.length ?? 0;
6742
- if (hasSelection) {
6743
- editor.chain().focus().command(({ tr: tr2, state }) => {
6744
- const { from, to } = state.selection;
6745
- tr2.insertText(linkParams.title ?? "", from, to);
6746
- tr2.removeMark(from, from + titleLength);
6747
- tr2.addMark(from, from + titleLength, editor.schema.marks.link.create({ ...linkParams }));
6748
- return true;
6749
- }).run();
6750
- } else {
6751
- const { state } = editor;
6752
- const insertPos = savedPos ?? state.selection.from;
6753
- const titleLength2 = linkParams.title?.length ?? 0;
6754
- editor.chain().focus().command(({ tr: tr2 }) => {
6755
- const linkMark = editor.schema.marks.link.create({ ...linkParams });
6756
- const textNode = editor.schema.text(linkParams.title ?? "", [linkMark]);
6757
- tr2.insert(insertPos, textNode);
6758
- tr2.setSelection(import_state5.TextSelection.create(tr2.doc, insertPos, insertPos + titleLength2));
6759
- return true;
6760
- }).run();
6761
- }
6756
+ const title = linkParams.title ?? "";
6757
+ const titleLength = title.length;
6758
+ const from = savedRange?.from ?? editor.state.selection.from;
6759
+ const to = savedRange?.to ?? editor.state.selection.to;
6760
+ editor.chain().focus().command(({ tr: tr2 }) => {
6761
+ tr2.insertText(title, from, to);
6762
+ tr2.removeMark(from, from + titleLength);
6763
+ tr2.addMark(from, from + titleLength, editor.schema.marks.link.create({ ...linkParams }));
6764
+ tr2.setSelection(import_state6.TextSelection.create(tr2.doc, from, from + titleLength));
6765
+ return true;
6766
+ }).run();
6762
6767
  closeDialogCommand();
6763
6768
  };
6764
6769
  var createHandleKatexAdd = (editor, closeDialogCommand, savedPos) => {
@@ -6772,7 +6777,7 @@ var createHandleKatexAdd = (editor, closeDialogCommand, savedPos) => {
6772
6777
  editor.chain().focus().command(({ tr: tr2, state: state2 }) => {
6773
6778
  const inlineMathNode = state2.schema.nodes.inlineMath.create({ latex });
6774
6779
  tr2.insert(insertPos, inlineMathNode);
6775
- tr2.setSelection(import_state5.TextSelection.near(tr2.doc.resolve(insertPos)));
6780
+ tr2.setSelection(import_state6.TextSelection.near(tr2.doc.resolve(insertPos)));
6776
6781
  return true;
6777
6782
  }).run();
6778
6783
  }
@@ -6809,6 +6814,31 @@ function collectFragmentChildren(fragment, stack) {
6809
6814
  }
6810
6815
  }
6811
6816
 
6817
+ // src/editor/handlers/markup-insertion.ts
6818
+ function collectRehostableImages(slice) {
6819
+ const imagesToNodes = [];
6820
+ prosemirrorIterator(slice, (node) => {
6821
+ if (node.type.name === "image" && !node.attrs.fileId) {
6822
+ try {
6823
+ const url = new URL(node.attrs.src).toString();
6824
+ imagesToNodes.push([url, node]);
6825
+ } catch {
6826
+ }
6827
+ }
6828
+ });
6829
+ return imagesToNodes;
6830
+ }
6831
+ function applyUploadResultsToNodes(imagesToNodes, results) {
6832
+ results.forEach((result, index) => {
6833
+ if (!result) return;
6834
+ const node = imagesToNodes[index]?.[1];
6835
+ if (!node) return;
6836
+ node.attrs.src = result.fileUrl ?? null;
6837
+ node.attrs.fileId = result.fileId;
6838
+ node.attrs.storageKey = result.storageKey;
6839
+ });
6840
+ }
6841
+
6812
6842
  // src/editor/handlers/insertion-handlers.ts
6813
6843
  function useInsertionHandlers() {
6814
6844
  const [insertedImage, setInsertedImage] = (0, import_react35.useState)(null);
@@ -6847,24 +6877,10 @@ function useInsertionHandlers() {
6847
6877
  hasMarkupInsertion = true;
6848
6878
  }
6849
6879
  if (hasMarkupInsertion) {
6850
- const imagesToNodes = [];
6880
+ const imagesToNodes = collectRehostableImages(slice);
6851
6881
  setDisabled(true);
6852
- prosemirrorIterator(slice, (node) => {
6853
- if (node.type.name === "image" && !node.attrs.fileId) {
6854
- try {
6855
- const url = new URL(node.attrs.src).toString();
6856
- imagesToNodes.push([url, node]);
6857
- } catch {
6858
- }
6859
- }
6860
- });
6861
6882
  uploadMultipleByURL(imagesToNodes.map(([url]) => url)).then((results) => {
6862
- results.forEach((result, index) => {
6863
- const node = imagesToNodes[index][1];
6864
- node.attrs.src = null;
6865
- node.attrs.fileId = result?.fileId;
6866
- node.attrs.storageKey = result?.storageKey;
6867
- });
6883
+ applyUploadResultsToNodes(imagesToNodes, results);
6868
6884
  view.dispatch(view.state.tr.replaceSelection(slice));
6869
6885
  }).finally(() => {
6870
6886
  setDisabled(false);
@@ -7645,6 +7661,9 @@ function TiptapContent({
7645
7661
  );
7646
7662
  const [editFigureContext, setEditFigureContext] = (0, import_react37.useState)(null);
7647
7663
  const [savedDialogCursorPos, setSavedDialogCursorPos] = (0, import_react37.useState)(void 0);
7664
+ const [savedDialogRange, setSavedDialogRange] = (0, import_react37.useState)(
7665
+ void 0
7666
+ );
7648
7667
  const { activeDialog, closeDialogCommand, openDialogCommand } = useDialogCommand();
7649
7668
  const translations2 = useTiptapTranslations();
7650
7669
  const [isDisabledInternal, setIsDisabledInternal] = (0, import_react37.useState)(isDisabled);
@@ -7729,8 +7748,9 @@ function TiptapContent({
7729
7748
  );
7730
7749
  (0, import_react37.useEffect)(() => {
7731
7750
  if (activeDialog && editor && !editor.isDestroyed) {
7732
- const pos = editor.state.selection.from;
7733
- setSavedDialogCursorPos(pos);
7751
+ const { from, to } = editor.state.selection;
7752
+ setSavedDialogCursorPos(from);
7753
+ setSavedDialogRange({ from, to });
7734
7754
  }
7735
7755
  }, [activeDialog, editor]);
7736
7756
  const handleCloseDialog = () => {
@@ -7738,6 +7758,7 @@ function TiptapContent({
7738
7758
  setKatexDialogContext(null);
7739
7759
  setEditFigureContext(null);
7740
7760
  setSavedDialogCursorPos(void 0);
7761
+ setSavedDialogRange(void 0);
7741
7762
  closeDialogCommand();
7742
7763
  };
7743
7764
  const handleImageAdd = (attrs) => {
@@ -7748,7 +7769,7 @@ function TiptapContent({
7748
7769
  createHandleVideoAdd(editor, handleCloseDialog, savedDialogCursorPos)(url);
7749
7770
  };
7750
7771
  const handleLinkAdd = (params) => {
7751
- createHandleLinkAdd(editor, handleCloseDialog, params, savedDialogCursorPos);
7772
+ createHandleLinkAdd(editor, handleCloseDialog, params, savedDialogRange);
7752
7773
  };
7753
7774
  const handleKatexAdd = (latex) => {
7754
7775
  const katexHandler = createHandleKatexAdd(editor, handleCloseDialog, savedDialogCursorPos);
@@ -7761,7 +7782,7 @@ function TiptapContent({
7761
7782
  });
7762
7783
  }, [content, editor]);
7763
7784
  const shouldBubbleMenuShow = ({ state }) => {
7764
- if (state.selection instanceof import_state6.NodeSelection) {
7785
+ if (state.selection instanceof import_state7.NodeSelection) {
7765
7786
  return false;
7766
7787
  }
7767
7788
  if (state.selection.empty) {