@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.mjs CHANGED
@@ -749,10 +749,16 @@ var BubbleMenuContent = ({ editor, onLinkClick }) => {
749
749
  } = useEditorState({
750
750
  editor,
751
751
  selector: (ctx) => {
752
+ let canAvalable = false;
753
+ try {
754
+ ctx.editor.can().undo();
755
+ canAvalable = true;
756
+ } catch {
757
+ }
752
758
  return {
753
- canUndo: ctx.editor.can().undo(),
754
- canRedo: ctx.editor.can().redo(),
755
- canClearMarks: ctx.editor.can().unsetAllMarks(),
759
+ canUndo: canAvalable ? ctx.editor.can().undo() : false,
760
+ canRedo: canAvalable ? ctx.editor.can().redo() : false,
761
+ canClearMarks: canAvalable ? ctx.editor.can().unsetAllMarks() : false,
756
762
  isHeading2: ctx.editor.isActive("heading", { level: 2 }),
757
763
  isHeading3: ctx.editor.isActive("heading", { level: 3 }),
758
764
  isHeading4: ctx.editor.isActive("heading", { level: 4 }),
@@ -1446,10 +1452,12 @@ var CharacterCount = ({ editor }) => {
1446
1452
  const translations2 = useTiptapTranslations();
1447
1453
  const { charactersCount, wordsCount } = useEditorState2({
1448
1454
  editor,
1449
- selector: (context) => ({
1450
- charactersCount: context.editor.storage.characterCount.characters(),
1451
- wordsCount: context.editor.storage.characterCount.words()
1452
- })
1455
+ selector: (context) => {
1456
+ return {
1457
+ charactersCount: context.editor.storage.characterCount?.characters() || 0,
1458
+ wordsCount: context.editor.storage.characterCount?.words() || 0
1459
+ };
1460
+ }
1453
1461
  });
1454
1462
  return /* @__PURE__ */ jsxs14("div", { className: "tiptap__character-count", children: [
1455
1463
  /* @__PURE__ */ jsxs14("span", { className: "tiptap__character-count-item", children: [
@@ -2013,7 +2021,6 @@ var ImageDialog = ({
2013
2021
  setIsUploading(true);
2014
2022
  try {
2015
2023
  const result = await uploadHandler(formState.file);
2016
- console.log("\u{1F440} ~ handleAddImage ~ result:", result);
2017
2024
  onImageAdd({
2018
2025
  fileId: result.fileId,
2019
2026
  src: result.fileUrl,
@@ -3092,10 +3099,11 @@ var BaseCustomQuoteSign = Node2.create({
3092
3099
 
3093
3100
  // src/extensions/base/link.ts
3094
3101
  import Link, { isAllowedUri } from "@tiptap/extension-link";
3095
- import { markPasteRule } from "@tiptap/core";
3102
+ import { getMarkRange, markPasteRule } from "@tiptap/core";
3103
+ import { Plugin, TextSelection as TextSelection3 } from "@tiptap/pm/state";
3096
3104
 
3097
3105
  // node_modules/linkifyjs/dist/linkify.mjs
3098
- var encodedTlds = "aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5m\xF6gensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2";
3106
+ var encodedTlds = "aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2odyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rck0msd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5m\xF6gensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2oodside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2";
3099
3107
  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";
3100
3108
  var numeric = "numeric";
3101
3109
  var ascii = "ascii";
@@ -4026,8 +4034,6 @@ function init$1({
4026
4034
  ta(Email$1, groups.domain, EmailDomain);
4027
4035
  tt(Email$1, DOT, EmailDomainDot);
4028
4036
  tt(Email$1, HYPHEN, EmailDomainHyphen);
4029
- const EmailColon = tt(Email$1, COLON);
4030
- ta(EmailColon, groups.numeric, Email);
4031
4037
  const DomainHyphen = tt(Domain, HYPHEN);
4032
4038
  const DomainDot = tt(Domain, DOT);
4033
4039
  tt(DomainHyphen, HYPHEN, DomainHyphen);
@@ -4091,11 +4097,11 @@ function init$1({
4091
4097
  const [OPEN, CLOSE] = bracketPairs[i];
4092
4098
  const UrlOpen = tt(Url$1, OPEN);
4093
4099
  tt(UrlNonaccept, OPEN, UrlOpen);
4094
- tt(UrlOpen, CLOSE, Url$1);
4095
4100
  const UrlOpenQ = makeState(Url);
4096
4101
  ta(UrlOpen, qsAccepting, UrlOpenQ);
4097
4102
  const UrlOpenSyms = makeState();
4098
- ta(UrlOpen, qsNonAccepting);
4103
+ ta(UrlOpen, qsNonAccepting, UrlOpenSyms);
4104
+ tt(UrlOpen, CLOSE, Url$1);
4099
4105
  ta(UrlOpenQ, qsAccepting, UrlOpenQ);
4100
4106
  ta(UrlOpenQ, qsNonAccepting, UrlOpenSyms);
4101
4107
  ta(UrlOpenSyms, qsAccepting, UrlOpenQ);
@@ -4273,6 +4279,23 @@ var LinkExtension = Link.extend({
4273
4279
  }
4274
4280
  })
4275
4281
  ];
4282
+ },
4283
+ addProseMirrorPlugins() {
4284
+ return [
4285
+ ...this.parent?.() ?? [],
4286
+ new Plugin({
4287
+ props: {
4288
+ handleClick: (view, pos) => {
4289
+ if (!view.editable) return false;
4290
+ const range = getMarkRange(view.state.doc.resolve(pos), this.type);
4291
+ if (!range) return false;
4292
+ const selection = TextSelection3.create(view.state.doc, range.from, range.to);
4293
+ view.dispatch(view.state.tr.setSelection(selection));
4294
+ return true;
4295
+ }
4296
+ }
4297
+ })
4298
+ ];
4276
4299
  }
4277
4300
  }).configure({
4278
4301
  openOnClick: false,
@@ -4319,7 +4342,7 @@ var BaseMythReality = Node3.create({
4319
4342
 
4320
4343
  // src/extensions/base/prompt.ts
4321
4344
  import { Node as Node4, mergeAttributes as mergeAttributes5 } from "@tiptap/core";
4322
- import { TextSelection as TextSelection3 } from "@tiptap/pm/state";
4345
+ import { TextSelection as TextSelection4 } from "@tiptap/pm/state";
4323
4346
  var BasePrompt = Node4.create({
4324
4347
  name: "prompt",
4325
4348
  group: "block",
@@ -4351,7 +4374,7 @@ var BasePrompt = Node4.create({
4351
4374
  const paragraphNode = schema.nodes.paragraph.createAndFill();
4352
4375
  if (!paragraphNode) return false;
4353
4376
  tr2.insert(posAfter, paragraphNode);
4354
- tr2.setSelection(TextSelection3.create(tr2.doc, posAfter + 1));
4377
+ tr2.setSelection(TextSelection4.create(tr2.doc, posAfter + 1));
4355
4378
  view.dispatch(tr2);
4356
4379
  return true;
4357
4380
  }
@@ -4593,7 +4616,7 @@ var BaseFigure = Image2.extend({
4593
4616
 
4594
4617
  // src/extensions/base/compatibility.ts
4595
4618
  import { mergeAttributes as mergeAttributes7, Node as Node6 } from "@tiptap/core";
4596
- import { TextSelection as TextSelection4 } from "@tiptap/pm/state";
4619
+ import { TextSelection as TextSelection5 } from "@tiptap/pm/state";
4597
4620
  import Image3 from "@tiptap/extension-image";
4598
4621
  var BaseLegacyBookAlert = Node6.create({
4599
4622
  name: "calloutAlert",
@@ -4737,7 +4760,7 @@ var BaseLegacySEQuote = Node6.create({
4737
4760
  const paragraphNode = schema.nodes.paragraph.createAndFill();
4738
4761
  if (!paragraphNode) return false;
4739
4762
  tr2.insert(posAfter, paragraphNode);
4740
- tr2.setSelection(TextSelection4.create(tr2.doc, posAfter + 1));
4763
+ tr2.setSelection(TextSelection5.create(tr2.doc, posAfter + 1));
4741
4764
  view.dispatch(tr2);
4742
4765
  return true;
4743
4766
  }
@@ -4785,7 +4808,7 @@ var BaseLegacyPromptSE = Node6.create({
4785
4808
  const paragraphNode = schema.nodes.paragraph.createAndFill();
4786
4809
  if (!paragraphNode) return false;
4787
4810
  tr2.insert(posAfter, paragraphNode);
4788
- tr2.setSelection(TextSelection4.create(tr2.doc, posAfter + 1));
4811
+ tr2.setSelection(TextSelection5.create(tr2.doc, posAfter + 1));
4789
4812
  view.dispatch(tr2);
4790
4813
  return true;
4791
4814
  }
@@ -5990,11 +6013,11 @@ import TextAlign from "@tiptap/extension-text-align";
5990
6013
 
5991
6014
  // node_modules/@tiptap/extension-text-style/dist/index.js
5992
6015
  import { Mark as Mark2, mergeAttributes as mergeAttributes8 } from "@tiptap/core";
5993
- import { Extension as Extension2 } from "@tiptap/core";
5994
- import { Extension as Extension22 } from "@tiptap/core";
5995
- import { Extension as Extension3 } from "@tiptap/core";
5996
- import { Extension as Extension4 } from "@tiptap/core";
5997
- import { Extension as Extension5 } from "@tiptap/core";
6016
+ import { Extension as Extension2, getStyleProperty } from "@tiptap/core";
6017
+ import { Extension as Extension22, getStyleProperty as getStyleProperty2 } from "@tiptap/core";
6018
+ import { Extension as Extension3, getStyleProperty as getStyleProperty3 } from "@tiptap/core";
6019
+ import { Extension as Extension4, getStyleProperty as getStyleProperty4 } from "@tiptap/core";
6020
+ import { Extension as Extension5, getStyleProperty as getStyleProperty5 } from "@tiptap/core";
5998
6021
  import { Extension as Extension6 } from "@tiptap/core";
5999
6022
  var MAX_FIND_CHILD_SPAN_DEPTH = 20;
6000
6023
  var findChildSpans = (element, depth = 0) => {
@@ -6092,21 +6115,8 @@ var BackgroundColor = Extension2.create({
6092
6115
  default: null,
6093
6116
  parseHTML: (element) => {
6094
6117
  var _a;
6095
- const styleAttr = element.getAttribute("style");
6096
- if (styleAttr) {
6097
- const decls = styleAttr.split(";").map((s) => s.trim()).filter(Boolean);
6098
- for (let i = decls.length - 1; i >= 0; i -= 1) {
6099
- const parts = decls[i].split(":");
6100
- if (parts.length >= 2) {
6101
- const prop = parts[0].trim().toLowerCase();
6102
- const val = parts.slice(1).join(":").trim();
6103
- if (prop === "background-color") {
6104
- return val.replace(/['"]+/g, "");
6105
- }
6106
- }
6107
- }
6108
- }
6109
- return (_a = element.style.backgroundColor) == null ? void 0 : _a.replace(/['"]+/g, "");
6118
+ const value = (_a = getStyleProperty(element, "background-color")) != null ? _a : element.style.backgroundColor;
6119
+ return value == null ? void 0 : value.replace(/['"]+/g, "");
6110
6120
  },
6111
6121
  renderHTML: (attributes) => {
6112
6122
  if (!attributes.backgroundColor) {
@@ -6148,21 +6158,8 @@ var Color = Extension22.create({
6148
6158
  default: null,
6149
6159
  parseHTML: (element) => {
6150
6160
  var _a;
6151
- const styleAttr = element.getAttribute("style");
6152
- if (styleAttr) {
6153
- const decls = styleAttr.split(";").map((s) => s.trim()).filter(Boolean);
6154
- for (let i = decls.length - 1; i >= 0; i -= 1) {
6155
- const parts = decls[i].split(":");
6156
- if (parts.length >= 2) {
6157
- const prop = parts[0].trim().toLowerCase();
6158
- const val = parts.slice(1).join(":").trim();
6159
- if (prop === "color") {
6160
- return val.replace(/['"]+/g, "");
6161
- }
6162
- }
6163
- }
6164
- }
6165
- return (_a = element.style.color) == null ? void 0 : _a.replace(/['"]+/g, "");
6161
+ const value = (_a = getStyleProperty2(element, "color")) != null ? _a : element.style.color;
6162
+ return value == null ? void 0 : value.replace(/['"]+/g, "");
6166
6163
  },
6167
6164
  renderHTML: (attributes) => {
6168
6165
  if (!attributes.color) {
@@ -6202,7 +6199,14 @@ var FontFamily = Extension3.create({
6202
6199
  attributes: {
6203
6200
  fontFamily: {
6204
6201
  default: null,
6205
- parseHTML: (element) => element.style.fontFamily,
6202
+ // Prefer the raw inline `style` attribute so unquoted or
6203
+ // single-quoted multi-word names are preserved instead of being
6204
+ // canonicalized by `element.style.fontFamily`, which forces double
6205
+ // quotes that then get HTML-encoded to `"` on serialization.
6206
+ parseHTML: (element) => {
6207
+ var _a;
6208
+ return (_a = getStyleProperty3(element, "font-family")) != null ? _a : element.style.fontFamily;
6209
+ },
6206
6210
  renderHTML: (attributes) => {
6207
6211
  if (!attributes.fontFamily) {
6208
6212
  return {};
@@ -6241,7 +6245,13 @@ var FontSize = Extension4.create({
6241
6245
  attributes: {
6242
6246
  fontSize: {
6243
6247
  default: null,
6244
- parseHTML: (element) => element.style.fontSize,
6248
+ // Prefer the raw inline `style` attribute so the original format
6249
+ // is preserved instead of the canonicalized value returned by
6250
+ // `element.style.fontSize`.
6251
+ parseHTML: (element) => {
6252
+ var _a;
6253
+ return (_a = getStyleProperty4(element, "font-size")) != null ? _a : element.style.fontSize;
6254
+ },
6245
6255
  renderHTML: (attributes) => {
6246
6256
  if (!attributes.fontSize) {
6247
6257
  return {};
@@ -6280,7 +6290,13 @@ var LineHeight = Extension5.create({
6280
6290
  attributes: {
6281
6291
  lineHeight: {
6282
6292
  default: null,
6283
- parseHTML: (element) => element.style.lineHeight,
6293
+ // Prefer the raw inline `style` attribute so the original format
6294
+ // is preserved instead of the canonicalized value returned by
6295
+ // `element.style.lineHeight`.
6296
+ parseHTML: (element) => {
6297
+ var _a;
6298
+ return (_a = getStyleProperty5(element, "line-height")) != null ? _a : element.style.lineHeight;
6299
+ },
6284
6300
  renderHTML: (attributes) => {
6285
6301
  if (!attributes.lineHeight) {
6286
6302
  return {};
@@ -6650,7 +6666,7 @@ function getEditorExtensions(options) {
6650
6666
  }
6651
6667
 
6652
6668
  // src/editor/handlers/dialog-handlers.ts
6653
- import { TextSelection as TextSelection5 } from "@tiptap/pm/state";
6669
+ import { TextSelection as TextSelection6 } from "@tiptap/pm/state";
6654
6670
  var createHandleImageAdd = (editor, closeDialogCommand, savedPos) => {
6655
6671
  return (attrs) => {
6656
6672
  if (!editor) return;
@@ -6661,10 +6677,10 @@ var createHandleImageAdd = (editor, closeDialogCommand, savedPos) => {
6661
6677
  const imageNode = state2.schema.nodes.image.create({ ...attrs });
6662
6678
  if ($pos.parent.type.name === "paragraph" && $pos.parent.textContent === "") {
6663
6679
  tr2.replaceWith($pos.before(), $pos.after(), imageNode);
6664
- tr2.setSelection(TextSelection5.near(tr2.doc.resolve($pos.before())));
6680
+ tr2.setSelection(TextSelection6.near(tr2.doc.resolve($pos.before())));
6665
6681
  } else {
6666
6682
  tr2.insert(insertPos, imageNode);
6667
- tr2.setSelection(TextSelection5.near(tr2.doc.resolve(insertPos)));
6683
+ tr2.setSelection(TextSelection6.near(tr2.doc.resolve(insertPos)));
6668
6684
  }
6669
6685
  return true;
6670
6686
  }).run();
@@ -6688,40 +6704,29 @@ var createHandleVideoAdd = (editor, closeDialogCommand, savedPos) => {
6688
6704
  const videoNode = state2.schema.nodes.video.create({ src: url });
6689
6705
  if ($pos.parent.type.name === "paragraph" && $pos.parent.textContent === "") {
6690
6706
  tr2.replaceWith($pos.before(), $pos.after(), videoNode);
6691
- tr2.setSelection(TextSelection5.near(tr2.doc.resolve($pos.before())));
6707
+ tr2.setSelection(TextSelection6.near(tr2.doc.resolve($pos.before())));
6692
6708
  } else {
6693
6709
  tr2.insert(insertPos, videoNode);
6694
- tr2.setSelection(TextSelection5.near(tr2.doc.resolve(insertPos)));
6710
+ tr2.setSelection(TextSelection6.near(tr2.doc.resolve(insertPos)));
6695
6711
  }
6696
6712
  return true;
6697
6713
  }).run();
6698
6714
  closeDialogCommand();
6699
6715
  };
6700
6716
  };
6701
- var createHandleLinkAdd = (editor, closeDialogCommand, linkParams, savedPos) => {
6717
+ var createHandleLinkAdd = (editor, closeDialogCommand, linkParams, savedRange) => {
6702
6718
  if (!editor) return;
6703
- const hasSelection = !editor.state.selection.empty;
6704
- const titleLength = linkParams.title?.length ?? 0;
6705
- if (hasSelection) {
6706
- editor.chain().focus().command(({ tr: tr2, state }) => {
6707
- const { from, to } = state.selection;
6708
- tr2.insertText(linkParams.title ?? "", from, to);
6709
- tr2.removeMark(from, from + titleLength);
6710
- tr2.addMark(from, from + titleLength, editor.schema.marks.link.create({ ...linkParams }));
6711
- return true;
6712
- }).run();
6713
- } else {
6714
- const { state } = editor;
6715
- const insertPos = savedPos ?? state.selection.from;
6716
- const titleLength2 = linkParams.title?.length ?? 0;
6717
- editor.chain().focus().command(({ tr: tr2 }) => {
6718
- const linkMark = editor.schema.marks.link.create({ ...linkParams });
6719
- const textNode = editor.schema.text(linkParams.title ?? "", [linkMark]);
6720
- tr2.insert(insertPos, textNode);
6721
- tr2.setSelection(TextSelection5.create(tr2.doc, insertPos, insertPos + titleLength2));
6722
- return true;
6723
- }).run();
6724
- }
6719
+ const title = linkParams.title ?? "";
6720
+ const titleLength = title.length;
6721
+ const from = savedRange?.from ?? editor.state.selection.from;
6722
+ const to = savedRange?.to ?? editor.state.selection.to;
6723
+ editor.chain().focus().command(({ tr: tr2 }) => {
6724
+ tr2.insertText(title, from, to);
6725
+ tr2.removeMark(from, from + titleLength);
6726
+ tr2.addMark(from, from + titleLength, editor.schema.marks.link.create({ ...linkParams }));
6727
+ tr2.setSelection(TextSelection6.create(tr2.doc, from, from + titleLength));
6728
+ return true;
6729
+ }).run();
6725
6730
  closeDialogCommand();
6726
6731
  };
6727
6732
  var createHandleKatexAdd = (editor, closeDialogCommand, savedPos) => {
@@ -6735,7 +6740,7 @@ var createHandleKatexAdd = (editor, closeDialogCommand, savedPos) => {
6735
6740
  editor.chain().focus().command(({ tr: tr2, state: state2 }) => {
6736
6741
  const inlineMathNode = state2.schema.nodes.inlineMath.create({ latex });
6737
6742
  tr2.insert(insertPos, inlineMathNode);
6738
- tr2.setSelection(TextSelection5.near(tr2.doc.resolve(insertPos)));
6743
+ tr2.setSelection(TextSelection6.near(tr2.doc.resolve(insertPos)));
6739
6744
  return true;
6740
6745
  }).run();
6741
6746
  }
@@ -6772,6 +6777,31 @@ function collectFragmentChildren(fragment, stack) {
6772
6777
  }
6773
6778
  }
6774
6779
 
6780
+ // src/editor/handlers/markup-insertion.ts
6781
+ function collectRehostableImages(slice) {
6782
+ const imagesToNodes = [];
6783
+ prosemirrorIterator(slice, (node) => {
6784
+ if (node.type.name === "image" && !node.attrs.fileId) {
6785
+ try {
6786
+ const url = new URL(node.attrs.src).toString();
6787
+ imagesToNodes.push([url, node]);
6788
+ } catch {
6789
+ }
6790
+ }
6791
+ });
6792
+ return imagesToNodes;
6793
+ }
6794
+ function applyUploadResultsToNodes(imagesToNodes, results) {
6795
+ results.forEach((result, index) => {
6796
+ if (!result) return;
6797
+ const node = imagesToNodes[index]?.[1];
6798
+ if (!node) return;
6799
+ node.attrs.src = result.fileUrl ?? null;
6800
+ node.attrs.fileId = result.fileId;
6801
+ node.attrs.storageKey = result.storageKey;
6802
+ });
6803
+ }
6804
+
6775
6805
  // src/editor/handlers/insertion-handlers.ts
6776
6806
  function useInsertionHandlers() {
6777
6807
  const [insertedImage, setInsertedImage] = useState12(null);
@@ -6810,24 +6840,10 @@ function useInsertionHandlers() {
6810
6840
  hasMarkupInsertion = true;
6811
6841
  }
6812
6842
  if (hasMarkupInsertion) {
6813
- const imagesToNodes = [];
6843
+ const imagesToNodes = collectRehostableImages(slice);
6814
6844
  setDisabled(true);
6815
- prosemirrorIterator(slice, (node) => {
6816
- if (node.type.name === "image" && !node.attrs.fileId) {
6817
- try {
6818
- const url = new URL(node.attrs.src).toString();
6819
- imagesToNodes.push([url, node]);
6820
- } catch {
6821
- }
6822
- }
6823
- });
6824
6845
  uploadMultipleByURL(imagesToNodes.map(([url]) => url)).then((results) => {
6825
- results.forEach((result, index) => {
6826
- const node = imagesToNodes[index][1];
6827
- node.attrs.src = null;
6828
- node.attrs.fileId = result?.fileId;
6829
- node.attrs.storageKey = result?.storageKey;
6830
- });
6846
+ applyUploadResultsToNodes(imagesToNodes, results);
6831
6847
  view.dispatch(view.state.tr.replaceSelection(slice));
6832
6848
  }).finally(() => {
6833
6849
  setDisabled(false);
@@ -7608,6 +7624,9 @@ function TiptapContent({
7608
7624
  );
7609
7625
  const [editFigureContext, setEditFigureContext] = useState13(null);
7610
7626
  const [savedDialogCursorPos, setSavedDialogCursorPos] = useState13(void 0);
7627
+ const [savedDialogRange, setSavedDialogRange] = useState13(
7628
+ void 0
7629
+ );
7611
7630
  const { activeDialog, closeDialogCommand, openDialogCommand } = useDialogCommand();
7612
7631
  const translations2 = useTiptapTranslations();
7613
7632
  const [isDisabledInternal, setIsDisabledInternal] = useState13(isDisabled);
@@ -7692,8 +7711,9 @@ function TiptapContent({
7692
7711
  );
7693
7712
  useEffect11(() => {
7694
7713
  if (activeDialog && editor && !editor.isDestroyed) {
7695
- const pos = editor.state.selection.from;
7696
- setSavedDialogCursorPos(pos);
7714
+ const { from, to } = editor.state.selection;
7715
+ setSavedDialogCursorPos(from);
7716
+ setSavedDialogRange({ from, to });
7697
7717
  }
7698
7718
  }, [activeDialog, editor]);
7699
7719
  const handleCloseDialog = () => {
@@ -7701,6 +7721,7 @@ function TiptapContent({
7701
7721
  setKatexDialogContext(null);
7702
7722
  setEditFigureContext(null);
7703
7723
  setSavedDialogCursorPos(void 0);
7724
+ setSavedDialogRange(void 0);
7704
7725
  closeDialogCommand();
7705
7726
  };
7706
7727
  const handleImageAdd = (attrs) => {
@@ -7711,7 +7732,7 @@ function TiptapContent({
7711
7732
  createHandleVideoAdd(editor, handleCloseDialog, savedDialogCursorPos)(url);
7712
7733
  };
7713
7734
  const handleLinkAdd = (params) => {
7714
- createHandleLinkAdd(editor, handleCloseDialog, params, savedDialogCursorPos);
7735
+ createHandleLinkAdd(editor, handleCloseDialog, params, savedDialogRange);
7715
7736
  };
7716
7737
  const handleKatexAdd = (latex) => {
7717
7738
  const katexHandler = createHandleKatexAdd(editor, handleCloseDialog, savedDialogCursorPos);