2025-10-02 14:58:30 +07:00
function he ( t ){ this . content = t } he . prototype = { constructor : he , find : function ( t ){ for ( var e = 0 ; e < this . content . length ; e += 2 ) if ( this . content [ e ] === t ) return e ; return - 1 }, get : function ( t ){ var e = this . find ( t ); return e ==- 1 ? void 0 : this . content [ e + 1 ]}, update : function ( t , e , n ){ var r = n && n != t ? this . remove ( n ) : this , o = r . find ( t ), i = r . content . slice (); return o ==- 1 ? i . push ( n || t , e ) : ( i [ o + 1 ] = e , n && ( i [ o ] = n )), new he ( i )}, remove : function ( t ){ var e = this . find ( t ); if ( e ==- 1 ) return this ; var n = this . content . slice (); return n . splice ( e , 2 ), new he ( n )}, addToStart : function ( t , e ){ return new he ([ t , e ]. concat ( this . remove ( t ). content ))}, addToEnd : function ( t , e ){ var n = this . remove ( t ). content . slice (); return n . push ( t , e ), new he ( n )}, addBefore : function ( t , e , n ){ var r = this . remove ( e ), o = r . content . slice (), i = r . find ( t ); return o . splice ( i ==- 1 ? o . length : i , 0 , e , n ), new he ( o )}, forEach : function ( t ){ for ( var e = 0 ; e < this . content . length ; e += 2 ) t ( this . content [ e ], this . content [ e + 1 ])}, prepend : function ( t ){ return t = he . from ( t ), t . size ? new he ( t . content . concat ( this . subtract ( t ). content )) : this }, append : function ( t ){ return t = he . from ( t ), t . size ? new he ( this . subtract ( t ). content . concat ( t . content )) : this }, subtract : function ( t ){ var e = this ; t = he . from ( t ); for ( var n = 0 ; n < t . content . length ; n += 2 ) e = e . remove ( t . content [ n ]); return e }, toObject : function (){ var t = {}; return this . forEach ( function ( e , n ){ t [ e ] = n }), t }, get size (){ return this . content . length >> 1 }}; he . from = function ( t ){ if ( t instanceof he ) return t ; var e = []; if ( t ) for ( var n in t ) e . push ( n , t [ n ]); return new he ( e )}; var wi = he ; function ca ( t , e , n ){ for ( let r = 0 ;; r ++ ){ if ( r == t . childCount || r == e . childCount ) return t . childCount == e . childCount ? null : n ; let o = t . child ( r ), i = e . child ( r ); if ( o == i ){ n += o . nodeSize ; continue } if ( ! o . sameMarkup ( i )) return n ; if ( o . isText && o . text != i . text ){ for ( let s = 0 ; o . text [ s ] == i . text [ s ]; s ++ ) n ++ ; return n } if ( o . content . size || i . content . size ){ let s = ca ( o . content , i . content , n + 1 ); if ( s != null ) return s } n += o . nodeSize }} function da ( t , e , n , r ){ for ( let o = t . childCount , i = e . childCount ;;){ if ( o == 0 || i == 0 ) return o == i ? null : { a : n , b : r }; let s = t . child ( -- o ), l = e . child ( -- i ), a = s . nodeSize ; if ( s == l ){ n -= a , r -= a ; continue } if ( ! s . sameMarkup ( l )) return { a : n , b : r }; if ( s . isText && s . text != l . text ){ let c = 0 , d = Math . min ( s . text . length , l . text . length ); for (; c < d && s . text [ s . text . length - c - 1 ] == l . text [ l . text . length - c - 1 ];) c ++ , n -- , r -- ; return { a : n , b : r }} if ( s . content . size || l . content . size ){ let c = da ( s . content , l . content , n - 1 , r - 1 ); if ( c ) return c } n -= a , r -= a }} var w = class t { constructor ( e , n ){ if ( this . content = e , this . size = n || 0 , n == null ) for ( let r = 0 ; r < e . length ; r ++ ) this . size += e [ r ]. nodeSize } nodesBetween ( e , n , r , o = 0 , i ){ for ( let s = 0 , l = 0 ; l < n ; s ++ ){ let a = this . content [ s ], c = l + a . nodeSize ; if ( c > e && r ( a , o + l , i || null , s ) !==! 1 && a . content . size ){ let d = l + 1 ; a . nodesBetween ( Math . max ( 0 , e - d ), Math . min ( a . content . size , n - d ), r , o + d )} l = c }} descendants ( e ){ this . nodesBetween ( 0 , this . size , e )} textBetween ( e , n , r , o ){ let i = "" , s =! 0 ; return this . nodesBetween ( e , n ,( l , a )=>{ let c = l . isText ? l . text . slice ( Math . max ( e , a ) - a , n - a ) : l . isLeaf ? o ? typeof o == "function" ? o ( l ) : o : l . type . spec . leafText ? l . type . spec . leafText ( l ) : "" : "" ; l . isBlock && ( l . isLeaf && c || l . isTextblock ) && r && ( s ? s =! 1 : i += r ), i += c }, 0 ), i } append ( e ){ if ( ! e . size ) return this ; if ( ! this . size ) return e ; let n = this . lastChild , r = e . firstChild , o = this . content . slice (), i = 0 ; for ( n . isText && n . sameMarkup ( r ) && ( o [ o . length - 1 ] = n . withText ( n . text + r . text ), i = 1 ); i < e . content . length ; i ++ ) o . push ( e . content [ i ]); return new t ( o , this . size + e . size )} cut ( e , n = this . size ){ if ( e == 0 && n == this . size ) return this ; let r = [], o = 0 ; if ( n > e ) for ( let i = 0 , s = 0 ; s < n ; i ++ ){ let l = this . content [ i ], a = s + l . nodeSize ; a > e && (( s < e || a > n ) && ( l . isText ? l = l . cut ( Math . max ( 0 , e - s ), Math . min ( l . text . length , n - s )) : l = l . cut ( Math . max ( 0 , e - s - 1 ), Math . min ( l . content . size , n - s - 1 ))), r . push ( l ), o += l . nodeSize ), s = a } return new t ( r , o )} cutByIndex ( e , n ){ return e == n ? t . empty : e == 0 && n == this . content . length ? this : new t ( this . content . slice ( e , n ))} replaceChild ( e , n ){ let r = this . content [ e ]; if ( r == n ) return this ; let o = this . content . slice (), i = this . size + n . nodeSize - r . nodeSize ; return o [ e ] = n , new t ( o , i )} addToStart ( e ){ return new t ([ e ]. concat ( this . content ), this . size + e . nodeSize )} addToEnd ( e ){ return new t ( this . content . concat ( e ), this . size + e . nodeSize )} eq ( e ){ if ( this . content . length != e . content . length ) return ! 1 ; for ( let n = 0 ; n < this . content . length ; n ++ ) if ( ! this . content [ n ]
`)}};Ft.empty=new Ft(!0);var Ti=class{constructor(e,n){this.string=e,this.nodeTypes=n,this.inline=null,this.pos=0,this.tokens=e.split(/\s*(?=\b|\W|$)/),this.tokens[this.tokens.length-1]==""&&this.tokens.pop(),this.tokens[0]==""&&this.tokens.shift()}get next(){return this.tokens[this.pos]}eat(e){return this.next==e&&(this.pos++||!0)}err(e){throw new SyntaxError(e+" (in content expression '"+this.string+"')")}};function ya(t){let e=[];do e.push(Uh(t));while(t.eat("|"));return e.length==1?e[0]:{type:"choice",exprs:e}}function Uh(t){let e=[];do e.push(Jh(t));while(t.next&&t.next!=")"&&t.next!="|");return e.length==1?e[0]:{type:"seq",exprs:e}}function Jh(t){let e=Yh(t);for(;;)if(t.eat("+"))e={type:"plus",expr:e};else if(t.eat("*"))e={type:"star",expr:e};else if(t.eat("?"))e={type:"opt",expr:e};else if(t.eat("{"))e=qh(t,e);else break;return e}function ta(t){/\D/.test(t.next)&&t.err("Expected number, got '"+t.next+"'");let e=Number(t.next);return t.pos++,e}function qh(t,e){let n=ta(t),r=n;return t.eat(",")&&(t.next!="}"?r=ta(t):r=-1),t.eat("}")||t.err("Unclosed braced range"),{type:"range",min:n,max:r,expr:e}}function Gh(t,e){let n=t.nodeTypes,r=n[e];if(r)return[r];let o=[];for(let i in n){let s=n[i];s.isInGroup(e)&&o.push(s)}return o.length==0&&t.err("No node type or group '"+e+"' found"),o}function Yh(t){if(t.eat("(")){let e=ya(t);return t.eat(")")||t.err("Missing closing paren"),e}else if(/\W/.test(t.next))t.err("Unexpected token '"+t.next+"'");else{let e=Gh(t,t.next).map(n=>(t.inline==null?t.inline=n.isInline:t.inline!=n.isInline&&t.err("Mixing inline and block content"),{type:"name",value:n}));return t.pos++,e.length==1?e[0]:{type:"choice",exprs:e}}}function Xh(t){let e=[[]];return o(i(t,0),n()),e;function n(){return e.push([])-1}function r(s,l,a){let c={term:a,to:l};return e[s].push(c),c}function o(s,l){s.forEach(a=>a.to=l)}function i(s,l){if(s.type=="choice")return s.exprs.reduce((a,c)=>a.concat(i(c,l)),[]);if(s.type=="seq")for(let a=0;;a++){let c=i(s.exprs[a],l);if(a==s.exprs.length-1)return c;o(c,l=n())}else if(s.type=="star"){let a=n();return r(l,a),o(i(s.expr,a),a),[r(a)]}else if(s.type=="plus"){let a=n();return o(i(s.expr,l),a),o(i(s.expr,a),a),[r(a)]}else{if(s.type=="opt")return[r(l)].concat(i(s.expr,l));if(s.type=="range"){let a=l;for(let c=0;c<s.min;c++){let d=n();o(i(s.expr,a),d),a=d}if(s.max==-1)o(i(s.expr,a),a);else for(let c=s.min;c<s.max;c++){let d=n();r(a,d),o(i(s.expr,a),d),a=d}return[r(a)]}else{if(s.type=="name")return[r(l,void 0,s.value)];throw new Error("Unknown expr type")}}}}function ba(t,e){return e-t}function na(t,e){let n=[];return r(e),n.sort(ba);function r(o){let i=t[o];if(i.length==1&&!i[0].term)return r(i[0].to);n.push(o);for(let s=0;s<i.length;s++){let{term:l,to:a}=i[s];!l&&n.indexOf(a)==-1&&r(a)}}}function Qh(t){let e=Object.create(null);return n(na(t,0));function n(r){let o=[];r.forEach(s=>{t[s].forEach(({term:l,to:a})=>{if(!l)return;let c;for(let d=0;d<o.length;d++)o[d][0]==l&&(c=o[d][1]);na(t,a).forEach(d=>{c||o.push([l,c=[]]),c.indexOf(d)==-1&&c.push(d)})})});let i=e[r.join(",")]=new Ft(r.indexOf(t.length-1)>-1);for(let s=0;s<o.length;s++){let l=o[s][1].sort(ba);i.next.push({type:o[s][0],next:e[l.join(",")]||n(l)})}return i}}function Zh(t,e){for(let n=0,r=[t];n<r.length;n++){let o=r[n],i=!o.validEnd,s=[];for(let l=0;l<o.next.length;l++){let{type:a,next:c}=o.next[l];s.push(a.name),i&&!(a.isText||a.hasRequiredAttrs())&&(i=!1),r.indexOf(c)==-1&&r.push(c)}i&&e.err("Only non-generatable nodes ("+s.join(", ")+") in a required position (see https://prosemirror.net/docs/guide/#generatable)")}}function xa(t){let e=Object.create(null);for(let n in t){let r=t[n];if(!r.hasDefault)return null;e[n]=r.default}return e}function wa(t,e){let n=Object.create(null);for(let r in t){let o=e&&e[r];if(o===void 0){let i=t[r];if(i.hasDefault)o=i.default;else throw new RangeError("No value supplied for attribute "+r)}n[r]=o}return n}function Sa(t,e,n,r){for(let o in e)if(!(o in t))throw new RangeError(` Unsupported attribute $ { o } for $ { n } of type $ { o } `);for(let o in t){let i=t[o];i.validate&&i.validate(e[o])}}funct
` ); else if ( r = r . replace ( /[ \t\r\n\u000c]+/g , " " ), /^[ \t\r\n\u000c]/ . test ( r ) && this . open == this . nodes . length - 1 ){ let s = o . content [ o . content . length - 1 ], l = e . previousSibling ;( ! s || l && l . nodeName == "BR" || s . isText && /[ \t\r\n\u000c]$/ . test ( s . text )) && ( r = r . slice ( 1 ))} r && this . insertNode ( this . parser . schema . text ( r ), n , ! /\S/ . test ( r )), this . findInText ( e )} else this . findInside ( e )} addElement ( e , n , r ){ let o = this . localPreserveWS , i = this . top ;( e . tagName == "PRE" || /pre/ . test ( e . style && e . style . whiteSpace )) && ( this . localPreserveWS =! 0 ); let s = e . nodeName . toLowerCase (), l ; Ma . hasOwnProperty ( s ) && this . parser . normalizeLists && op ( e ); let a = this . options . ruleFromNode && this . options . ruleFromNode ( e ) || ( l = this . parser . matchTag ( e , this , r )); e : if ( a ? a . ignore : rp . hasOwnProperty ( s )) this . findInside ( e ), this . ignoreFallback ( e , n ); else if ( ! a || a . skip || a . closeParent ){ a && a . closeParent ? this . open = Math . max ( 0 , this . open - 1 ) : a && a . skip . nodeType && ( e = a . skip ); let c , d = this . needsBlock ; if ( Ca . hasOwnProperty ( s )) i . content . length && i . content [ 0 ]. isInline && this . open && ( this . open -- , i = this . top ), c =! 0 , i . type || ( this . needsBlock =! 0 ); else if ( ! e . firstChild ){ this . leafFallback ( e , n ); break e } let u = a && a . skip ? n : this . readStyles ( e , n ); u && this . addAll ( e , u ), c && this . sync ( i ), this . needsBlock = d } else { let c = this . readStyles ( e , n ); c && this . addElementByRule ( e , a , c , a . consuming ===! 1 ? l : void 0 )} this . localPreserveWS = o } leafFallback ( e , n ){ e . nodeName == "BR" && this . top . type && this . top . type . inlineContent && this . addTextNode ( e . ownerDocument . createTextNode ( `
` ), n )} ignoreFallback ( e , n ){ e . nodeName == "BR" && ( ! this . top . type ||! this . top . type . inlineContent ) && this . findPlace ( this . parser . schema . text ( "-" ), n , ! 0 )} readStyles ( e , n ){ let r = e . style ; if ( r && r . length ) for ( let o = 0 ; o < this . parser . matchedStyles . length ; o ++ ){ let i = this . parser . matchedStyles [ o ], s = r . getPropertyValue ( i ); if ( s ) for ( let l = void 0 ;;){ let a = this . parser . matchStyle ( i , s , this , l ); if ( ! a ) break ; if ( a . ignore ) return null ; if ( a . clearMark ? n = n . filter ( c => ! a . clearMark ( c )) : n = n . concat ( this . parser . schema . marks [ a . mark ]. create ( a . attrs )), a . consuming ===! 1 ) l = a ; else break }} return n } addElementByRule ( e , n , r , o ){ let i , s ; if ( n . node ) if ( s = this . parser . schema . nodes [ n . node ], s . isLeaf ) this . insertNode ( s . create ( n . attrs ), r , e . nodeName == "BR" ) || this . leafFallback ( e , r ); else { let a = this . enter ( s , n . attrs || null , r , n . preserveWhitespace ); a && ( i =! 0 , r = a )} else { let a = this . parser . schema . marks [ n . mark ]; r = r . concat ( a . create ( n . attrs ))} let l = this . top ; if ( s && s . isLeaf ) this . findInside ( e ); else if ( o ) this . addElement ( e , r , o ); else if ( n . getContent ) this . findInside ( e ), n . getContent ( e , this . parser . schema ). forEach ( a => this . insertNode ( a , r , ! 1 )); else { let a = e ; typeof n . contentElement == "string" ? a = e . querySelector ( n . contentElement ) : typeof n . contentElement == "function" ? a = n . contentElement ( e ) : n . contentElement && ( a = n . contentElement ), this . findAround ( e , a , ! 0 ), this . addAll ( a , r ), this . findAround ( e , a , ! 1 )} i && this . sync ( l ) && this . open -- } addAll ( e , n , r , o ){ let i = r || 0 ; for ( let s = r ? e . childNodes [ r ] : e . firstChild , l = o == null ? null : e . childNodes [ o ]; s != l ; s = s . nextSibling , ++ i ) this . findAtPoint ( e , i ), this . addDOM ( s , n ); this . findAtPoint ( e , i )} findPlace ( e , n , r ){ let o , i ; for ( let s = this . open , l = 0 ; s >= 0 ; s -- ){ let a = this . nodes [ s ], c = a . findWrapping ( e ); if ( c && ( ! o || o . length > c . length + l ) && ( o = c , i = a , ! c . length )) break ; if ( a . solid ){ if ( r ) break ; l += 2 }} if ( ! o ) return null ; this . sync ( i ); for ( let s = 0 ; s < o . length ; s ++ ) n = this . enterInner ( o [ s ], null , n , ! 1 ); return n } insertNode ( e , n , r ){ if ( e . isInline && this . needsBlock &&! this . top . type ){ let i = this . textblockFromContext (); i && ( n = this . enterInner ( i , null , n ))} let o = this . findPlace ( e , n , r ); if ( o ){ this . closeExtra (); let i = this . top ; i . match && ( i . match = i . match . matchType ( e . type )); let s = K . none ; for ( let l of o . concat ( e . marks ))( i . type ? i . type . allowsMarkType ( l . type ) : sa ( l . type , e . type )) && ( s = l . addToSet ( s )); return i . content . push ( e . mark ( s )), ! 0 } return ! 1 } enter ( e , n , r , o ){ let i = this . findPlace ( e . create ( n ), r , ! 1 ); return i && ( i = this . enterInner ( e , n , r , ! 0 , o )), i } enterInner ( e , n , r , o =! 1 , i ){ this . closeExtra (); let s = this . top ; s . match = s . match && s . match . matchType ( e ); let l = oa ( e , i , s . options ); s . options & Rn && s . content . length == 0 && ( l |= Rn ); let a = K . none ; return r = r . filter ( c =>( s . type ? s . type . allowsMarkType ( c . type ) : sa ( c . type , e )) ? ( a = c . addToSet ( a ), ! 1 ) :! 0 ), this . nodes . push ( new sn ( e , n , a , o , null , l )), this . open ++ , r } closeExtra ( e =! 1 ){ let n = this . nodes . length - 1 ; if ( n > this . open ){ for (; n > this . open ; n -- ) this . nodes [ n - 1 ]. content . push ( this . nodes [ n ]. finish ( e )); this . nodes . length = this . open + 1 }} finish (){ return this . open = 0 , this . closeExtra ( this . isOpen ), this . nodes [ 0 ]. finish ( !! ( this . isOpen || this . options . topOpen ))} sync ( e ){ for ( let n = this . open ; n >= 0 ; n -- ){ if ( this . nodes [ n ] == e ) return this . open = n , ! 0 ; this . localPreserveWS && ( this . nodes [ n ]. options |= Pn )} return ! 1 } get currentPos (){ this . closeExtra (); let e = 0 ; for ( let n = this . open ; n >= 0 ; n -- ){ let r = this . nodes [ n ]. content ; for ( let o = r . length - 1 ; o >= 0 ; o -- ) e += r [ o ]. nodeSize ; n && e ++ } return e } findAtPoint ( e , n ){ if ( this . find ) for ( let r = 0 ; r < this . find . length ; r ++ ) this . find [ r ]. node == e && this . find [ r ]. offset == n && ( this . find [ r ]. pos = this . currentPos )} findInside ( e ){ if ( this . find ) for ( let n = 0 ; n < this . find . length ; n ++ ) this . find [ n ]. pos == null && e . nodeType == 1 && e . contains ( this . find [ n ]. node ) && ( this . find [ n ]. pos = this . currentPos )} findAround ( e , n , r ){ if ( e != n && this . find ) for ( let o = 0 ; o < this . find . length ; o ++ ) this . find [ o ]. pos == null && e . nodeType == 1 && e . contains ( this . find [ o ]. node ) && n . compareDocumentPosition ( this . find [ o ]. node ) & ( r ? 2 : 4 ) && ( this . find [ o ]. pos = this . currentPos )} findInText ( e ){ if ( this . find ) for ( let n = 0 ; n < this . find . length ; n ++ ) this . find [ n ]. node == e && ( this . find [ n ]. pos = this . currentPos - ( e . nodeValue . length - this . find [ n ]. offset ))} matchesContext ( e ){ if ( e . indexOf ( "|" ) >- 1 ) return e . split ( /\s*\|\s*/ ). some ( this . matchesContext , this ); let n = e . split ( "/" ), r = this . options . context , o =! this . isOpen && ( ! r || r .
`))}})}function bp(t,e,n){let r=t.resolve(e),o=r.index();return r.parent.canReplaceWith(o,o+1,n)}function xp(t,e,n,r,o){let i=t.doc.nodeAt(e);if(!i)throw new RangeError("No node at given position");n||(n=i.type);let s=n.create(r,null,o||i.marks);if(i.isLeaf)return t.replaceWith(e,e+i.nodeSize,s);if(!n.validContent(i.content))throw new RangeError("Invalid content for node type "+n.name);t.step(new re(e,e+i.nodeSize,e+1,e+i.nodeSize-1,new A(w.from(s),0,0),1,!0))}function Ae(t,e,n=1,r){let o=t.resolve(e),i=o.depth-n,s=r&&r[r.length-1]||o.parent;if(i<0||o.parent.type.spec.isolating||!o.parent.canReplace(o.index(),o.parent.childCount)||!s.type.validContent(o.parent.content.cutByIndex(o.index(),o.parent.childCount)))return!1;for(let c=o.depth-1,d=n-2;c>i;c--,d--){let u=o.node(c),f=o.index(c);if(u.type.spec.isolating)return!1;let h=u.content.cutByIndex(f,u.childCount),p=r&&r[d+1];p&&(h=h.replaceChild(0,p.type.create(p.attrs)));let m=r&&r[d]||u;if(!u.canReplace(f+1,u.childCount)||!m.type.validContent(h))return!1}let l=o.indexAfter(i),a=r&&r[0];return o.node(i).canReplaceWith(l,l,a?a.type:o.node(i+1).type)}function wp(t,e,n=1,r){let o=t.doc.resolve(e),i=w.empty,s=w.empty;for(let l=o.depth,a=o.depth-n,c=n-1;l>a;l--,c--){i=w.from(o.node(l).copy(i));let d=r&&r[c];s=w.from(d?d.type.create(d.attrs,s):o.node(l).copy(s))}t.step(new pe(e,e,new A(i.append(s),n,n),!0))}function Ne(t,e){let n=t.resolve(e),r=n.index();return Ia(n.nodeBefore,n.nodeAfter)&&n.parent.canReplace(r,r+1)}function Sp(t,e){e.content.size||t.type.compatibleContent(e.type);let n=t.contentMatchAt(t.childCount),{linebreakReplacement:r}=t.type.schema;for(let o=0;o<e.childCount;o++){let i=e.child(o),s=i.type==r?t.type.schema.nodes.text:i.type;if(n=n.matchType(s),!n||!t.type.allowsMarks(i.marks))return!1}return n.validEnd}function Ia(t,e){return!!(t&&e&&!t.isLeaf&&Sp(t,e))}function $t(t,e,n=-1){let r=t.resolve(e);for(let o=r.depth;;o--){let i,s,l=r.index(o);if(o==r.depth?(i=r.nodeBefore,s=r.nodeAfter):n>0?(i=r.node(o+1),l++,s=r.node(o).maybeChild(l)):(i=r.node(o).maybeChild(l-1),s=r.node(o+1)),i&&!i.isTextblock&&Ia(i,s)&&r.node(o).canReplace(l,l+1))return e;if(o==0)break;e=n<0?r.before(o):r.after(o)}}function kp(t,e,n){let r=null,{linebreakReplacement:o}=t.doc.type.schema,i=t.doc.resolve(e-n),s=i.node().type;if(o&&s.inlineContent){let d=s.whitespace=="pre",u=!!s.contentMatch.matchType(o);d&&!u?r=!1:!d&&u&&(r=!0)}let l=t.steps.length;if(r===!1){let d=t.doc.resolve(e+n);Pa(t,d.node(),d.before(),l)}s.inlineContent&&Li(t,e+n-1,s,i.node().contentMatchAt(i.index()),r==null);let a=t.mapping.slice(l),c=a.map(e-n);if(t.step(new pe(c,a.map(e+n,-1),A.empty,!0)),r===!0){let d=t.doc.resolve(c);Da(t,d.node(),d.before(),t.steps.length)}return t}function Cp(t,e,n){let r=t.resolve(e);if(r.parent.canReplaceWith(r.index(),r.index(),n))return e;if(r.parentOffset==0)for(let o=r.depth-1;o>=0;o--){let i=r.index(o);if(r.node(o).canReplaceWith(i,i,n))return r.before(o+1);if(i>0)return null}if(r.parentOffset==r.parent.content.size)for(let o=r.depth-1;o>=0;o--){let i=r.indexAfter(o);if(r.node(o).canReplaceWith(i,i,n))return r.after(o+1);if(i<r.node(o).childCount)return null}return null}function Rr(t,e,n){let r=t.resolve(e);if(!n.content.size)return e;let o=n.content;for(let i=0;i<n.openStart;i++)o=o.firstChild.content;for(let i=1;i<=(n.openStart==0&&n.size?2:1);i++)for(let s=r.depth;s>=0;s--){let l=s==r.depth?0:r.pos<=(r.start(s+1)+r.end(s+1))/2?-1:1,a=r.index(s)+(l>0?1:0),c=r.node(s),d=!1;if(i==1)d=c.canReplace(a,a,o);else{let u=c.contentMatchAt(a).findWrapping(o.firstChild.type);d=u&&c.canReplaceWith(a,a,u[0])}if(d)return l==0?r.pos:l<0?r.before(s+1):r.after(s+1)}return null}function $n(t,e,n=e,r=A.empty){if(e==n&&!r.size)return null;let o=t.resolve(e),i=t.resolve(n);return La(o,i,r)?new pe(e,n,r):new Pi(o,i,r).fit()}function La(t,e,n){return!n.openStart&&!n.openEnd&&t.start()==e.start()&&t.parent.canReplace(t.index(),e.index(),n.content)}var Pi=class{constructor(e,n,r){this.$from=e,this.$to=n,this.unplaced=r,this.frontier=[],this.placed=w.empty;for(let o=0;o<=e.depth;o++){let i=e.node(o);this.fro
` ), u && p == h . nodeValue . length ) for ( let m = h , g ; m ; m = m . parentNode ){ if ( g = m . nextSibling ){ g . nodeName == "BR" && ( l = a = { node : g . parentNode , offset : de ( g ) + 1 }); break } let y = m . pmViewDesc ; if ( y && y . node && y . node . isBlock ) break }} else { let m = h . childNodes [ p - 1 ]; u = m && ( m . nodeName == "BR" || m . contentEditable == "false" )}} if ( Pe && d . focusNode && d . focusNode != a . node && d . focusNode . nodeType == 1 ){ let h = d . focusNode . childNodes [ d . focusOffset ]; h && h . contentEditable == "false" && ( o =! 0 )} if ( ! ( o || u && xe ) && qt ( l . node , l . offset , d . anchorNode , d . anchorOffset ) && qt ( a . node , a . offset , d . focusNode , d . focusOffset )) return ; let f =! 1 ; if (( c . extend || e == n ) &&! ( u && Pe )){ c . collapse ( l . node , l . offset ); try { e != n && c . extend ( a . node , a . offset ), f =! 0 } catch {}} if ( ! f ){ if ( e > n ){ let p = l ; l = a , a = p } let h = document . createRange (); h . setEnd ( a . node , a . offset ), h . setStart ( l . node , l . offset ), c . removeAllRanges (), c . addRange ( h )}} ignoreMutation ( e ){ return ! this . contentDOM && e . type != "selection" } get contentLost (){ return this . contentDOM && this . contentDOM != this . dom &&! this . dom . contains ( this . contentDOM )} markDirty ( e , n ){ for ( let r = 0 , o = 0 ; o < this . children . length ; o ++ ){ let i = this . children [ o ], s = r + i . size ; if ( r == s ? e <= s && n >= r : e < s && n > r ){ let l = r + i . border , a = s - i . border ; if ( e >= l && n <= a ){ this . dirty = e == r || n == s ? Wt : ec , e == l && n == a && ( i . contentLost || i . dom . parentNode != this . contentDOM ) ? i . dirty = qe : i . markDirty ( e - l , n - l ); return } else i . dirty = i . dom == i . contentDOM && i . dom . parentNode == this . contentDOM &&! i . children . length ? Wt : qe } r = s } this . dirty = Wt } markParentsDirty (){ let e = 1 ; for ( let n = this . parent ; n ; n = n . parent , e ++ ){ let r = e == 1 ? Wt : ec ; n . dirty < r && ( n . dirty = r )}} get domAtom (){ return ! 1 } get ignoreForCoords (){ return ! 1 } get ignoreForSelection (){ return ! 1 } isText ( e ){ return ! 1 }}, Lr = class extends Gt { constructor ( e , n , r , o ){ let i , s = n . type . toDOM ; if ( typeof s == "function" && ( s = s ( r ,()=>{ if ( ! i ) return o ; if ( i . parent ) return i . parent . posBeforeChild ( i )})), ! n . type . spec . raw ){ if ( s . nodeType != 1 ){ let l = document . createElement ( "span" ); l . appendChild ( s ), s = l } s . contentEditable = "false" , s . classList . add ( "ProseMirror-widget" )} super ( e ,[], s , null ), this . widget = n , this . widget = n , i = this } matchesWidget ( e ){ return this . dirty == Ie && e . type . eq ( this . widget . type )} parseRule (){ return { ignore :! 0 }} stopEvent ( e ){ let n = this . widget . spec . stopEvent ; return n ? n ( e ) :! 1 } ignoreMutation ( e ){ return e . type != "selection" || this . widget . spec . ignoreSelection } destroy (){ this . widget . type . destroy ( this . dom ), super . destroy ()} get domAtom (){ return ! 0 } get ignoreForSelection (){ return !! this . widget . type . spec . relaxedSide } get side (){ return this . widget . type . side }}, Gi = class extends Gt { constructor ( e , n , r , o ){ super ( e ,[], n , null ), this . textDOM = r , this . text = o } get size (){ return this . text . length } localPosFromDOM ( e , n ){ return e != this . textDOM ? this . posAtStart + ( n ? this . size : 0 ) : this . posAtStart + n } domFromPos ( e ){ return { node : this . textDOM , offset : e }} ignoreMutation ( e ){ return e . type === "characterData" && e . target . nodeValue == e . oldValue }}, xn = class t extends Gt { constructor ( e , n , r , o , i ){ super ( e ,[], r , o ), this . mark = n , this . spec = i } static create ( e , n , r , o ){ let i = o . nodeViews [ n . type . name ], s = i && i ( n , o , r ); return ( ! s ||! s . dom ) && ( s = it . renderSpec ( document , n . type . spec . toDOM ( n , r ), null , n . attrs )), new t ( e , n , s . dom , s . contentDOM || s . dom , s )} parseRule (){ return this . dirty & qe || this . mark . type . spec . reparseInView ? null : { mark : this . mark . type . name , attrs : this . mark . attrs , contentElement : this . contentDOM }} matchesMark ( e ){ return this . dirty != qe && this . mark . eq ( e )} markDirty ( e , n ){ if ( super . markDirty ( e , n ), this . dirty != Ie ){ let r = this . parent ; for (; ! r . node ;) r = r . parent ; r . dirty < this . dirty && ( r . dirty = this . dirty ), this . dirty = Ie }} slice ( e , n , r ){ let o = t . create ( this . parent , this . mark , ! 0 , r ), i = this . children , s = this . size ; n < s && ( i = Zi ( i , n , s , r )), e > 0 && ( i = Zi ( i , 0 , e , r )); for ( let l = 0 ; l < i . length ; l ++ ) i [ l ]. parent = o ; return o . children = i , o } ignoreMutation ( e ){ return this . spec . ignoreMutation ? this . spec . ignoreMutation ( e ) : super . ignoreMutation ( e )} destroy (){ this . spec . destroy && this . spec . destroy (), super . destroy ()}}, At = class t extends Gt { constructor ( e , n , r , o , i , s , l , a , c ){ super ( e ,[], i , s ), this . node = n , this . outerDeco = r , this . innerDeco = o , this . nodeDOM = l } static create ( e , n , r , o , i , s ){ let l = i . nodeViews [ n . type . name ], a , c = l && l ( n , i ,()=>{ if ( ! a ) return s ; if ( a . parent ) return a . parent . posBeforeChild ( a )}, r , o ), d = c && c . dom , u = c && c . contentDOM ; if ( n . isText ){ if ( ! d ) d = document . crea
`);return{dom:a,text:f,slice:e}}function Vc(t,e,n,r,o){let i=o.parent.type.spec.code,s,l;if(!n&&!e)return null;let a=!!e&&(r||i||!n);if(a){if(t.someProp("transformPastedText",f=>{e=f(e,i||r,t)}),i)return l=new A(w.from(t.state.schema.text(e.replace(/\r\n?/g,`
`))),0,0),t.someProp("transformPasted",f=>{l=f(l,t,!0)}),l;let u=t.someProp("clipboardTextParser",f=>f(e,o,r,t));if(u)l=u;else{let f=o.marks(),{schema:h}=t.state,p=it.fromSchema(h);s=document.createElement("div"),e.split(/(?:\r\n?|\n)+/).forEach(m=>{let g=s.appendChild(document.createElement("p"));m&&g.appendChild(p.serializeNode(h.text(m,f)))})}}else t.someProp("transformPastedHTML",u=>{n=u(n,t)}),s=wm(n),Yn&&Sm(s);let c=s&&s.querySelector("[data-pm-slice]"),d=c&&/^(\d+) (\d+)(?: -(\d+))? (.*)/.exec(c.getAttribute("data-pm-slice")||"");if(d&&d[3])for(let u=+d[3];u>0;u--){let f=s.firstChild;for(;f&&f.nodeType!=1;)f=f.nextSibling;if(!f)break;s=f}if(l||(l=(t.someProp("clipboardParser")||t.someProp("domParser")||Ue.fromSchema(t.state.schema)).parseSlice(s,{preserveWhitespace:!!(a||d),context:o,ruleFromNode(f){return f.nodeName=="BR"&&!f.nextSibling&&f.parentNode&&!ym.test(f.parentNode.nodeName)?{ignore:!0}:null}})),d)l=km(hc(l,+d[1],+d[2]),d[4]);else if(l=A.maxOpen(bm(l.content,o),!0),l.openStart||l.openEnd){let u=0,f=0;for(let h=l.content.firstChild;u<l.openStart&&!h.type.spec.isolating;u++,h=h.firstChild);for(let h=l.content.lastChild;f<l.openEnd&&!h.type.spec.isolating;f++,h=h.lastChild);l=hc(l,u,f)}return t.someProp("transformPasted",u=>{l=u(l,t,a)}),l}var ym=/^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i;function bm(t,e){if(t.childCount<2)return t;for(let n=e.depth;n>=0;n--){let o=e.node(n).contentMatchAt(e.index(n)),i,s=[];if(t.forEach(l=>{if(!s)return;let a=o.findWrapping(l.type),c;if(!a)return s=null;if(c=s.length&&i.length&&Wc(a,i,l,s[s.length-1],0))s[s.length-1]=c;else{s.length&&(s[s.length-1]=jc(s[s.length-1],i.length));let d=_c(l,a);s.push(d),o=o.matchType(d.type),i=a}}),s)return w.from(s)}return t}function _c(t,e,n=0){for(let r=e.length-1;r>=n;r--)t=e[r].create(null,w.from(t));return t}function Wc(t,e,n,r,o){if(o<t.length&&o<e.length&&t[o]==e[o]){let i=Wc(t,e,n,r.lastChild,o+1);if(i)return r.copy(r.content.replaceChild(r.childCount-1,i));if(r.contentMatchAt(r.childCount).matchType(o==t.length-1?n.type:t[o+1]))return r.copy(r.content.append(w.from(_c(n,t,o+1))))}}function jc(t,e){if(e==0)return t;let n=t.content.replaceChild(t.childCount-1,jc(t.lastChild,e-1)),r=t.contentMatchAt(t.childCount).fillBefore(w.empty,!0);return t.copy(n.append(r))}function ns(t,e,n,r,o,i){let s=e<0?t.firstChild:t.lastChild,l=s.content;return t.childCount>1&&(i=0),o<r-1&&(l=ns(l,e,n,r,o+1,i)),o>=n&&(l=e<0?s.contentMatchAt(0).fillBefore(l,i<=o).append(l):l.append(s.contentMatchAt(s.childCount).fillBefore(w.empty,!0))),t.replaceChild(e<0?0:t.childCount-1,s.copy(l))}function hc(t,e,n){return e<t.openStart&&(t=new A(ns(t.content,-1,e,t.openStart,0,t.openEnd),e,t.openEnd)),n<t.openEnd&&(t=new A(ns(t.content,1,n,t.openEnd,0,0),t.openStart,n)),t}var Kc={thead:["table"],tbody:["table"],tfoot:["table"],caption:["table"],colgroup:["table"],col:["table","colgroup"],tr:["table","tbody"],td:["table","tbody","tr"],th:["table","tbody","tr"]},pc=null;function Uc(){return pc||(pc=document.implementation.createHTMLDocument("title"))}var _i=null;function xm(t){let e=window.trustedTypes;return e?(_i||(_i=e.defaultPolicy||e.createPolicy("ProseMirrorClipboard",{createHTML:n=>n})),_i.createHTML(t)):t}function wm(t){let e=/^(\s*<meta [^>]*>)*/.exec(t);e&&(t=t.slice(e[0].length));let n=Uc().createElement("div"),r=/<([a-z][^>\s]+)/i.exec(t),o;if((o=r&&Kc[r[1].toLowerCase()])&&(t=o.map(i=>"<"+i+">").join("")+t+o.map(i=>"</"+i+">").reverse().join("")),n.innerHTML=xm(t),o)for(let i=0;i<o.length;i++)n=n.querySelector(o[i])||n;return n}function Sm(t){let e=t.querySelectorAll(ge?"span:not([class]):not([style])":"span.Apple-converted-space");for(let n=0;n<e.length;n++){let r=e[n];r.childNodes.length==1&&r.textContent=="\xA0"&&r.parentNode&&r.parentNode.replaceChild(t.ownerDocument.createTextNode(" "),r)}}function km(t,e){if(!t.size)return t;let n=t.content.firstChild.type.schema,r;try{r=JSON.parse(e)}catch{return t}let{content:o,openStart:i,openEnd:s}=t;for(let l=r.length-2;l>=0;l-=2){let a=n.nodes[r[l]
` ). scrollIntoView ()), ! 0 )}; function As ( t ){ for ( let e = 0 ; e < t . edgeCount ; e ++ ){ let { type : n } = t . edge ( e ); if ( n . isTextblock &&! n . hasRequiredAttrs ()) return n } return null } var Es = ( t , e )=>{ let { $head : n , $anchor : r } = t . selection ; if ( ! n . parent . type . spec . code ||! n . sameParent ( r )) return ! 1 ; let o = n . node ( - 1 ), i = n . indexAfter ( - 1 ), s = As ( o . contentMatchAt ( i )); if ( ! s ||! o . canReplaceWith ( i , i , s )) return ! 1 ; if ( e ){ let l = n . after (), a = t . tr . replaceWith ( l , l , s . createAndFill ()); a . setSelection ( D . near ( a . doc . resolve ( l ), 1 )), e ( a . scrollIntoView ())} return ! 0 }, Os = ( t , e )=>{ let n = t . selection ,{ $from : r , $to : o } = n ; if ( n instanceof be || r . parent . inlineContent || o . parent . inlineContent ) return ! 1 ; let i = As ( o . parent . contentMatchAt ( o . indexAfter ())); if ( ! i ||! i . isTextblock ) return ! 1 ; if ( e ){ let s = ( ! r . parentOffset && o . index () < o . parent . childCount ? r : o ). pos , l = t . tr . insert ( s , i . createAndFill ()); l . setSelection ( R . create ( l . doc , s + 1 )), e ( l . scrollIntoView ())} return ! 0 }, Ns = ( t , e )=>{ let { $cursor : n } = t . selection ; if ( ! n || n . parent . content . size ) return ! 1 ; if ( n . depth > 1 && n . after () != n . end ( - 1 )){ let i = n . before (); if ( Ae ( t . doc , i )) return e && e ( t . tr . split ( i ). scrollIntoView ()), ! 0 } let r = n . blockRange (), o = r && at ( r ); return o == null ?! 1 : ( e && e ( t . tr . lift ( r , o ). scrollIntoView ()), ! 0 )}; function dg ( t ){ return ( e , n )=>{ let { $from : r , $to : o } = e . selection ; if ( e . selection instanceof P && e . selection . node . isBlock ) return ! r . parentOffset ||! Ae ( e . doc , r . pos ) ?! 1 : ( n && n ( e . tr . split ( r . pos ). scrollIntoView ()), ! 0 ); if ( ! r . depth ) return ! 1 ; let i = [], s , l , a =! 1 , c =! 1 ; for ( let h = r . depth ;; h -- ) if ( r . node ( h ). isBlock ){ a = r . end ( h ) == r . pos + ( r . depth - h ), c = r . start ( h ) == r . pos - ( r . depth - h ), l = As ( r . node ( h - 1 ). contentMatchAt ( r . indexAfter ( h - 1 ))); let m = t && t ( o . parent , a , r ); i . unshift ( m || ( a && l ? { type : l } : null )), s = h ; break } else { if ( h == 1 ) return ! 1 ; i . unshift ( null )} let d = e . tr ;( e . selection instanceof R || e . selection instanceof be ) && d . deleteSelection (); let u = d . mapping . map ( r . pos ), f = Ae ( d . doc , u , i . length , i ); if ( f || ( i [ 0 ] = l ? { type : l } : null , f = Ae ( d . doc , u , i . length , i )), ! f ) return ! 1 ; if ( d . split ( u , i . length , i ), ! a && c && r . node ( s ). type != l ){ let h = d . mapping . map ( r . before ( s )), p = d . doc . resolve ( h ); l && r . node ( s - 1 ). canReplaceWith ( p . index (), p . index () + 1 , l ) && d . setNodeMarkup ( d . mapping . map ( r . before ( s )), l )} return n && n ( d . scrollIntoView ()), ! 0 }} var ug = dg (); var hd = ( t , e )=>{ let { $from : n , to : r } = t . selection , o , i = n . sharedDepth ( r ); return i == 0 ?! 1 : ( o = n . before ( i ), e && e ( t . tr . setSelection ( P . create ( t . doc , o ))), ! 0 )}, fg = ( t , e )=>( e && e ( t . tr . setSelection ( new be ( t . doc ))), ! 0 ); function hg ( t , e , n ){ let r = e . nodeBefore , o = e . nodeAfter , i = e . index (); return ! r ||! o ||! r . type . compatibleContent ( o . type ) ?! 1 :! r . content . size && e . parent . canReplace ( i - 1 , i ) ? ( n && n ( t . tr . delete ( e . pos - r . nodeSize , e . pos ). scrollIntoView ()), ! 0 ) :! e . parent . canReplace ( i , i + 1 ) ||! ( o . isTextblock || Ne ( t . doc , e . pos )) ?! 1 : ( n && n ( t . tr . join ( e . pos ). scrollIntoView ()), ! 0 )} function pd ( t , e , n , r ){ let o = e . nodeBefore , i = e . nodeAfter , s , l , a = o . type . spec . isolating || i . type . spec . isolating ; if ( ! a && hg ( t , e , n )) return ! 0 ; let c =! a && e . parent . canReplace ( e . index (), e . index () + 1 ); if ( c && ( s = ( l = o . contentMatchAt ( o . childCount )). findWrapping ( i . type )) && l . matchType ( s [ 0 ] || i . type ). validEnd ){ if ( n ){ let h = e . pos + i . nodeSize , p = w . empty ; for ( let y = s . length - 1 ; y >= 0 ; y -- ) p = w . from ( s [ y ]. create ( null , p )); p = w . from ( o . copy ( p )); let m = t . tr . step ( new re ( e . pos - 1 , h , e . pos , h , new A ( p , 1 , 0 ), s . length , ! 0 )), g = m . doc . resolve ( h + 2 * s . length ); g . nodeAfter && g . nodeAfter . type == o . type && Ne ( m . doc , g . pos ) && m . join ( g . pos ), n ( m . scrollIntoView ())} return ! 0 } let d = i . type . spec . isolating || r > 0 && a ? null : D . findFrom ( e , 1 ), u = d && d . $from . blockRange ( d . $to ), f = u && at ( u ); if ( f != null && f >= e . depth ) return n && n ( t . tr . lift ( u , f ). scrollIntoView ()), ! 0 ; if ( c && wn ( i , "start" , ! 0 ) && wn ( o , "end" )){ let h = o , p = []; for (; p . push ( h ), ! h . isTextblock ;) h = h . lastChild ; let m = i , g = 1 ; for (; ! m . isTextblock ; m = m . firstChild ) g ++ ; if ( h . canReplace ( h . childCount , h . childCount , m . content )){ if ( n ){ let y = w . empty ; for ( let k = p . length - 1 ; k >= 0 ; k -- ) y = w . from ( p [ k ]. copy ( y )); let b = t . tr . step ( new re ( e . pos - p . length , e . pos + i . nodeSize , e . pos + g , e . pos + i . nodeSize - g , new A ( y , p . length , 0 ), 0 , ! 0 )); n ( b . scrollIntoView ())} return ! 0 }} return ! 1 } function md ( t ){ return function ( e , n ){ let r = e . selection , o = t < 0 ? r . $from : r . $to , i = o . depth ; for (; o . node ( i ). isInline ;){ if ( ! i ) return ! 1 ; i -- } return o . node ( i ). isTextblock ? ( n && n ( e . tr . setSelection ( R . create ( e . doc , t < 0 ? o . start ( i ) : o . end ( i )))), ! 0 ) :! 1 }
`,textSerializers:s={}}=n||{},l="";return t.nodesBetween(r,o,(a,c,d,u)=>{var f;a.isBlock&&c>r&&(l+=i);let h=s?.[a.type.name];if(h)return d&&(l+=h({node:a,pos:c,parent:d,index:u,range:e})),!1;a.isText&&(l+=(f=a?.text)==null?void 0:f.slice(Math.max(r,c)-c,o-c))}),l}function vg(t,e){let n={from:0,to:t.content.size};return Pd(t,n,e)}function Id(t){return Object.fromEntries(Object.entries(t.nodes).filter(([,e])=>e.spec.toText).map(([e,n])=>[e,n.spec.toText]))}function mt(t,e){if(typeof t=="string"){if(!e.marks[t])throw Error(` There is no mark type named '${t}' . Maybe you forgot to add the extension ? `);return e.marks[t]}return t}function Ld(t,e){let n=mt(e,t.schema),{from:r,to:o,empty:i}=t.selection,s=[];i?(t.storedMarks&&s.push(...t.storedMarks),s.push(...t.selection.$head.marks())):t.doc.nodesBetween(r,o,a=>{s.push(...a.marks)});let l=s.find(a=>a.type.name===n.name);return l?{...l.attrs}:{}}function ee(t,e){if(typeof t=="string"){if(!e.nodes[t])throw Error(` There is no node type named '${t}' . Maybe you forgot to add the extension ? `);return e.nodes[t]}return t}function Tg(t,e){let n=ee(e,t.schema),{from:r,to:o}=t.selection,i=[];t.doc.nodesBetween(r,o,l=>{i.push(l)});let s=i.reverse().find(l=>l.type.name===n.name);return s?{...s.attrs}:{}}function io(t,e){return e.nodes[t]?"node":e.marks[t]?"mark":null}function Ks(t,e){let n=io(typeof e=="string"?e:e.name,t.schema);return n==="node"?Tg(t,e):n==="mark"?Ld(t,e):{}}function Ag(t,e=JSON.stringify){let n={};return t.filter(r=>{let o=e(r);return Object.prototype.hasOwnProperty.call(n,o)?!1:n[o]=!0})}function Eg(t){let e=Ag(t);return e.length===1?e:e.filter((n,r)=>!e.filter((i,s)=>s!==r).some(i=>n.oldRange.from>=i.oldRange.from&&n.oldRange.to<=i.oldRange.to&&n.newRange.from>=i.newRange.from&&n.newRange.to<=i.newRange.to))}function Us(t){let{mapping:e,steps:n}=t,r=[];return e.maps.forEach((o,i)=>{let s=[];if(o.ranges.length)o.forEach((l,a)=>{s.push({from:l,to:a})});else{let{from:l,to:a}=n[i];if(l===void 0||a===void 0)return;s.push({from:l,to:a})}s.forEach(({from:l,to:a})=>{let c=e.slice(i).map(l,-1),d=e.slice(i).map(a),u=e.invert().map(c,-1),f=e.invert().map(d);r.push({oldRange:{from:u,to:f},newRange:{from:c,to:d}})})}),Eg(r)}function Js(t){return Object.prototype.toString.call(t)==="[object RegExp]"}function no(t,e,n={strict:!0}){let r=Object.keys(e);return r.length?r.every(o=>n.strict?e[o]===t[o]:Js(e[o])?e[o].test(t[o]):e[o]===t[o]):!0}function Bd(t,e,n={}){return t.find(r=>r.type===e&&no(Object.fromEntries(Object.keys(n).map(o=>[o,r.attrs[o]])),n))}function kd(t,e,n={}){return!!Bd(t,e,n)}function qs(t,e,n){var r;if(!t||!e)return;let o=t.parent.childAfter(t.parentOffset);if((!o.node||!o.node.marks.some(d=>d.type===e))&&(o=t.parent.childBefore(t.parentOffset)),!o.node||!o.node.marks.some(d=>d.type===e)||(n=n||((r=o.node.marks[0])==null?void 0:r.attrs),!Bd([...o.node.marks],e,n)))return;let s=o.index,l=t.start()+o.offset,a=s+1,c=l+o.node.nodeSize;for(;s>0&&kd([...t.parent.child(s-1).marks],e,n);)s-=1,l-=t.parent.child(s).nodeSize;for(;a<t.parent.childCount&&kd([...t.parent.child(a).marks],e,n);)c+=t.parent.child(a).nodeSize,a+=1;return{from:l,to:c}}function so(t,e,n){let r=[];return t===e?n.resolve(t).marks().forEach(o=>{let i=n.resolve(t),s=qs(i,o.type);s&&r.push({mark:o,...s})}):n.nodesBetween(t,e,(o,i)=>{!o||o?.nodeSize===void 0||r.push(...o.marks.map(s=>({from:i,to:i+o.nodeSize,mark:s})))}),r}var zd=(t,e,n,r=20)=>{let o=t.doc.resolve(n),i=r,s=null;for(;i>0&&s===null;){let l=o.node(i);l?.type.name===e?s=l:i-=1}return[s,i]};function Ls(t,e){return e.nodes[t]||e.marks[t]||null}function eo(t,e,n){return Object.fromEntries(Object.entries(n).filter(([r])=>{let o=t.find(i=>i.type===e&&i.name===r);return o?o.attribute.keepOnSplit:!1}))}var Og=(t,e=500)=>{let n="",r=t.parentOffset;return t.parent.nodesBetween(Math.max(0,r-e),r,(o,i,s,l)=>{var a,c;let d=((c=(a=o.type.spec).toText)==null?void 0:c.call(a,{node:o,pos:i,parent:s,index:l}))||o.textContent||"%leaf%";n+=o.isAtom&&!o.isText?d:d.slice(0,Math.max(0,r-i))}),n};function Fs(t,e,n={}){let{empty:r,ranges:o}=t.selection,i=e?mt(e,t.schema
` , rules : n , plugin : r }) :! 1 }}, isInputRules :! 0 }); return r } function Pg ( t ){ return Object . prototype . toString . call ( t ). slice ( 8 , - 1 )} function Qr ( t ){ return Pg ( t ) !== "Object" ?! 1 : t . constructor === Object && Object . getPrototypeOf ( t ) === Object . prototype } function _d ( t , e ){ let n = {... t }; return Qr ( t ) && Qr ( e ) && Object . keys ( e ). forEach ( r =>{ Qr ( e [ r ]) && Qr ( t [ r ]) ? n [ r ] = _d ( t [ r ], e [ r ]) : n [ r ] = e [ r ]}), n } var Ys = class { constructor ( t = {}){ this . type = "extendable" , this . parent = null , this . child = null , this . name = "" , this . config = { name : this . name }, this . config = {... this . config ,... t }, this . name = this . config . name } get options (){ return {... U ( L ( this , "addOptions" ,{ name : this . name })) || {}}} get storage (){ return {... U ( L ( this , "addStorage" ,{ name : this . name , options : this . options })) || {}}} configure ( t = {}){ let e = this . extend ({... this . config , addOptions : ()=> _d ( this . options , t )}); return e . name = this . name , e . parent = this . parent , e } extend ( t = {}){ let e = new this . constructor ({... this . config ,... t }); return e . parent = this , this . child = e , e . name = "name" in t ? t . name : e . parent . name , e }}, Z = class Wd extends Ys { constructor (){ super (... arguments ), this . type = "mark" } static create ( e = {}){ let n = typeof e == "function" ? e () : e ; return new Wd ( n )} static handleExit ({ editor : e , mark : n }){ let { tr : r } = e . state , o = e . state . selection . $from ; if ( o . pos === o . end ()){ let s = o . marks (); if ( !!! s . find ( c => c ? . type . name === n . name )) return ! 1 ; let a = s . find ( c => c ? . type . name === n . name ); return a && r . removeStoredMark ( a ), r . insertText ( " " , o . pos ), e . view . dispatch ( r ), ! 0 } return ! 1 } configure ( e ){ return super . configure ( e )} extend ( e ){ let n = typeof e == "function" ? e () : e ; return super . extend ( n )}}; function Ig ( t ){ return typeof t == "number" } var Lg = class { constructor ( t ){ this . find = t . find , this . handler = t . handler }}, Bg = ( t , e , n )=>{ if ( Js ( e )) return [... t . matchAll ( e )]; let r = e ( t , n ); return r ? r . map ( o =>{ let i = [ o . text ]; return i . index = o . index , i . input = t , i . data = o . data , o . replaceWith && ( o . text . includes ( o . replaceWith ) || console . warn ( '[tiptap warn]: "pasteRuleMatch.replaceWith" must be part of "pasteRuleMatch.text".' ), i . push ( o . replaceWith )), i }) : []}; function zg ( t ){ let { editor : e , state : n , from : r , to : o , rule : i , pasteEvent : s , dropEvent : l } = t ,{ commands : a , chain : c , can : d } = new oo ({ editor : e , state : n }), u = []; return n . doc . nodesBetween ( r , o ,( h , p )=>{ var m , g , y , b , k ; if (( g = ( m = h . type ) == null ? void 0 : m . spec ) != null && g . code ||! ( h . isText || h . isTextblock || h . isInline )) return ; let E = ( k = ( b = ( y = h . content ) == null ? void 0 : y . size ) != null ? b : h . nodeSize ) != null ? k : 0 , S = Math . max ( r , p ), C = Math . min ( o , p + E ); if ( S >= C ) return ; let T = h . isText ? h . text || "" : h . textBetween ( S - p , C - p , void 0 , "\uFFFC" ); Bg ( T , i . find , s ). forEach ( N =>{ if ( N . index === void 0 ) return ; let v = S + N . index + 1 , F = v + N [ 0 ]. length , _ = { from : n . tr . mapping . map ( v ), to : n . tr . mapping . map ( F )}, G = i . handler ({ state : n , range : _ , match : N , commands : a , chain : c , can : d , pasteEvent : s , dropEvent : l }); u . push ( G )})}), u . every ( h => h !== null )} var Zr = null , Hg = t =>{ var e ; let n = new ClipboardEvent ( "paste" ,{ clipboardData : new DataTransfer }); return ( e = n . clipboardData ) == null || e . setData ( "text/html" , t ), n }; function Fg ( t ){ let { editor : e , rules : n } = t , r = null , o =! 1 , i =! 1 , s = typeof ClipboardEvent < "u" ? new ClipboardEvent ( "paste" ) : null , l ; try { l = typeof DragEvent < "u" ? new DragEvent ( "drop" ) : null } catch { l = null } let a = ({ state : d , from : u , to : f , rule : h , pasteEvt : p })=>{ let m = d . tr , g = ro ({ state : d , transaction : m }); if ( ! ( ! zg ({ editor : e , state : g , from : Math . max ( u - 1 , 0 ), to : f . b - 1 , rule : h , pasteEvent : p , dropEvent : l }) ||! m . steps . length )){ try { l = typeof DragEvent < "u" ? new DragEvent ( "drop" ) : null } catch { l = null } return s = typeof ClipboardEvent < "u" ? new ClipboardEvent ( "paste" ) : null , m }}; return n . map ( d => new I ({ view ( u ){ let f = p =>{ var m ; r = ( m = u . dom . parentElement ) != null && m . contains ( p . target ) ? u . dom . parentElement : null , r && ( Zr = e )}, h = ()=>{ Zr && ( Zr = null )}; return window . addEventListener ( "dragstart" , f ), window . addEventListener ( "dragend" , h ),{ destroy (){ window . removeEventListener ( "dragstart" , f ), window . removeEventListener ( "dragend" , h )}}}, props : { handleDOMEvents : { drop : ( u , f )=>{ if ( i = r === u . dom . parentElement , l = f , ! i ){ let h = Zr ; h ? . isEditable && setTimeout (()=>{ let p = h . state . selection ; p && h . commands . deleteRange ({ from : p . from , to : p . to })}, 10 )} return ! 1 }, paste : ( u , f )=>{ var h ; let p = ( h = f . clipboardData ) == null ? void 0 : h . getData ( "text/html" ); return s = f , o =!! p ? . includes ( "data-pm-slice" ), ! 1 }}}, appendTransaction : ( u , f , h )=>{ let p = u [ 0 ], m
2025-09-21 18:07:30 +08:00
position : relative ;
2024-12-25 23:09:07 +08:00
}
2025-09-21 18:07:30 +08:00
. ProseMirror {
word - wrap : break - word ;
white - space : pre - wrap ;
white - space : break - spaces ;
- webkit - font - variant - ligatures : none ;
font - variant - ligatures : none ;
font - feature - settings : "liga" 0 ; /* the above doesn't seem to work in Edge */
2024-12-25 23:09:07 +08:00
}
2025-09-21 18:07:30 +08:00
. ProseMirror [ contenteditable = "false" ] {
white - space : normal ;
2024-12-25 23:09:07 +08:00
}
2025-09-21 18:07:30 +08:00
. ProseMirror [ contenteditable = "false" ] [ contenteditable = "true" ] {
white - space : pre - wrap ;
2024-12-25 23:09:07 +08:00
}
2025-09-21 18:07:30 +08:00
. ProseMirror pre {
white - space : pre - wrap ;
2024-12-25 23:09:07 +08:00
}
2025-09-21 18:07:30 +08:00
img . ProseMirror - separator {
display : inline ! important ;
border : none ! important ;
margin : 0 ! important ;
width : 0 ! important ;
height : 0 ! important ;
2024-12-25 23:09:07 +08:00
}
2025-09-21 18:07:30 +08:00
. ProseMirror - gapcursor {
display : none ;
pointer - events : none ;
position : absolute ;
margin : 0 ;
2024-12-25 23:09:07 +08:00
}
2025-09-21 18:07:30 +08:00
. ProseMirror - gapcursor : after {
content : "" ;
display : block ;
position : absolute ;
top : - 2 px ;
width : 20 px ;
border - top : 1 px solid black ;
animation : ProseMirror - cursor - blink 1.1 s steps ( 2 , start ) infinite ;
2024-12-25 23:09:07 +08:00
}
2025-09-21 18:07:30 +08:00
@ keyframes ProseMirror - cursor - blink {
to {
visibility : hidden ;
}
2024-12-25 23:09:07 +08:00
}
2025-09-21 18:07:30 +08:00
. ProseMirror - hideselection *:: selection {
background : transparent ;
2024-12-25 23:09:07 +08:00
}
2025-09-21 18:07:30 +08:00
. ProseMirror - hideselection *::- moz - selection {
background : transparent ;
2024-12-25 23:09:07 +08:00
}
2025-09-21 18:07:30 +08:00
. ProseMirror - hideselection * {
caret - color : transparent ;
2024-12-25 23:09:07 +08:00
}
2025-09-21 18:07:30 +08:00
. ProseMirror - focused . ProseMirror - gapcursor {
display : block ;
2025-10-02 14:58:30 +07:00
} `;function Xy(t,e,n){let r=document.querySelector(` style [ data - tiptap - style$ { n ? `- ${ n } ` : "" }] `);if(r!==null)return r;let o=document.createElement("style");return e&&o.setAttribute("nonce",e),o.setAttribute(` data - tiptap - style$ { n ? `- ${ n } ` : "" } `,""),o.innerHTML=t,document.getElementsByTagName("head")[0].appendChild(o),o}var ru=class extends wg{constructor(t={}){super(),this.css=null,this.editorView=null,this.isFocused=!1,this.isInitialized=!1,this.extensionStorage={},this.instanceId=Math.random().toString(36).slice(2,9),this.options={element:typeof document<"u"?document.createElement("div"):null,content:"",injectCSS:!0,injectNonce:void 0,extensions:[],autofocus:!1,editable:!0,editorProps:{},parseOptions:{},coreExtensionOptions:{},enableInputRules:!0,enablePasteRules:!0,enableCoreExtensions:!0,enableContentCheck:!1,emitContentError:!1,onBeforeCreate:()=>null,onCreate:()=>null,onMount:()=>null,onUnmount:()=>null,onUpdate:()=>null,onSelectionUpdate:()=>null,onTransaction:()=>null,onFocus:()=>null,onBlur:()=>null,onDestroy:()=>null,onContentError:({error:r})=>{throw r},onPaste:()=>null,onDrop:()=>null,onDelete:()=>null},this.isCapturingTransaction=!1,this.capturedTransaction=null,this.setOptions(t),this.createExtensionManager(),this.createCommandManager(),this.createSchema(),this.on("beforeCreate",this.options.onBeforeCreate),this.emit("beforeCreate",{editor:this}),this.on("mount",this.options.onMount),this.on("unmount",this.options.onUnmount),this.on("contentError",this.options.onContentError),this.on("create",this.options.onCreate),this.on("update",this.options.onUpdate),this.on("selectionUpdate",this.options.onSelectionUpdate),this.on("transaction",this.options.onTransaction),this.on("focus",this.options.onFocus),this.on("blur",this.options.onBlur),this.on("destroy",this.options.onDestroy),this.on("drop",({event:r,slice:o,moved:i})=>this.options.onDrop(r,o,i)),this.on("paste",({event:r,slice:o})=>this.options.onPaste(r,o)),this.on("delete",this.options.onDelete);let e=this.createDoc(),n=Vd(e,this.options.autofocus);this.editorState=Ir.create({doc:e,schema:this.schema,selection:n||void 0}),this.options.element&&this.mount(this.options.element)}mount(t){if(typeof document>"u")throw new Error("[tiptap error]: The editor cannot be mounted because there is no 'document' defined in this environment.");this.createView(t),this.emit("mount",{editor:this}),window.setTimeout(()=>{this.isDestroyed||(this.commands.focus(this.options.autofocus),this.emit("create",{editor:this}),this.isInitialized=!0)},0)}unmount(){if(this.editorView){let t=this.editorView.dom;t?.editor&&delete t.editor,this.editorView.destroy()}if(this.editorView=null,this.isInitialized=!1,this.css)try{typeof this.css.remove=="function"?this.css.remove():this.css.parentNode&&this.css.parentNode.removeChild(this.css)}catch(t){console.warn("Failed to remove CSS element:",t)}this.css=null,this.emit("unmount",{editor:this})}get storage(){return this.extensionStorage}get commands(){return this.commandManager.commands}chain(){return this.commandManager.chain()}can(){return this.commandManager.can()}injectCSS(){this.options.injectCSS&&typeof document<"u"&&(this.css=Xy(Yy,this.options.injectNonce))}setOptions(t={}){this.options={...this.options,...t},!(!this.editorView||!this.state||this.isDestroyed)&&(this.options.editorProps&&this.view.setProps(this.options.editorProps),this.view.updateState(this.state))}setEditable(t,e=!0){this.setOptions({editable:t}),e&&this.emit("update",{editor:this,transaction:this.state.tr,appendedTransactions:[]})}get isEditable(){return this.options.editable&&this.view&&this.view.editable}get view(){return this.editorView?this.editorView:new Proxy({state:this.editorState,updateState:t=>{this.editorState=t},dispatch:t=>{this.editorState=this.state.apply(t)},composing:!1,dragging:null,editable:!0,isDestroyed:!1},{get:(t,e)=>{if(e==="state")return this.editorState;if(e in t)return Reflect.get(t,e);throw new Error(` [ tiptap error ] : The editor view is not available . Cannot access view [ '${e}' ]. The editor may not be mounted yet . `)}})}get state(){return this.edit
2025-09-21 18:07:30 +08:00
2025-10-02 14:58:30 +07:00
` , textSerializers : n = {}} = t || {}; return vg ( this . state . doc ,{ blockSeparator : e , textSerializers : {... Id ( this . schema ),... n }})} get isEmpty (){ return tr ( this . state . doc )} destroy (){ this . emit ( "destroy" ), this . unmount (), this . removeAllListeners ()} get isDestroyed (){ var t , e ; return ( e = ( t = this . editorView ) == null ? void 0 : t . isDestroyed ) != null ? e :! 0 } $node ( t , e ){ var n ; return (( n = this . $doc ) == null ? void 0 : n . querySelector ( t , e )) || null } $nodes ( t , e ){ var n ; return (( n = this . $doc ) == null ? void 0 : n . querySelectorAll ( t , e )) || null } $pos ( t ){ let e = this . state . doc . resolve ( t ); return new Gy ( e , this )} get $doc (){ return this . $pos ( 0 )}}; function Le ( t ){ return new co ({ find : t . find , handler : ({ state : e , range : n , match : r })=>{ let o = U ( t . getAttributes , void 0 , r ); if ( o ===! 1 || o === null ) return null ; let { tr : i } = e , s = r [ r . length - 1 ], l = r [ 0 ]; if ( s ){ let a = l . search ( /\S/ ), c = n . from + l . indexOf ( s ), d = c + s . length ; if ( so ( n . from , n . to , e . doc ). filter ( h => h . mark . type . excluded . find ( m => m === t . type && m !== h . mark . type )). filter ( h => h . to > c ). length ) return null ; d < n . to && i . delete ( d , n . to ), c > n . from && i . delete ( n . from + a , c ); let f = n . from + a + s . length ; i . addMark ( n . from + a , f , t . type . create ( o || {})), i . removeStoredMark ( t . type )}}})} function fo ( t ){ return new co ({ find : t . find , handler : ({ state : e , range : n , match : r })=>{ let o = U ( t . getAttributes , void 0 , r ) || {},{ tr : i } = e , s = n . from , l = n . to , a = t . type . create ( o ); if ( r [ 1 ]){ let c = r [ 0 ]. lastIndexOf ( r [ 1 ]), d = s + c ; d > l ? d = l : l = d + r [ 1 ]. length ; let u = r [ 0 ][ r [ 0 ]. length - 1 ]; i . insertText ( u , s + r [ 0 ]. length - 1 ), i . replaceWith ( d , l , a )} else if ( r [ 0 ]){ let c = t . type . isInline ? s : s - 1 ; i . insert ( c , t . type . create ( o )). delete ( i . mapping . map ( s ), i . mapping . map ( l ))} i . scrollIntoView ()}})} function nr ( t ){ return new co ({ find : t . find , handler : ({ state : e , range : n , match : r })=>{ let o = e . doc . resolve ( n . from ), i = U ( t . getAttributes , void 0 , r ) || {}; if ( ! o . node ( - 1 ). canReplaceWith ( o . index ( - 1 ), o . indexAfter ( - 1 ), t . type )) return null ; e . tr . delete ( n . from , n . to ). setBlockType ( n . from , n . from , t . type , i )}})} function Xe ( t ){ return new co ({ find : t . find , handler : ({ state : e , range : n , match : r , chain : o })=>{ let i = U ( t . getAttributes , void 0 , r ) || {}, s = e . tr . delete ( n . from , n . to ), a = s . doc . resolve ( n . from ). blockRange (), c = a && dn ( a , t . type , i ); if ( ! c ) return null ; if ( s . wrap ( a , c ), t . keepMarks && t . editor ){ let { selection : u , storedMarks : f } = e ,{ splittableMarks : h } = t . editor . extensionManager , p = f || u . $to . parentOffset && u . $from . marks (); if ( p ){ let m = p . filter ( g => h . includes ( g . type . name )); s . ensureMarks ( m )}} if ( t . keepAttributes ){ let u = t . type . name === "bulletList" || t . type . name === "orderedList" ? "listItem" : "taskList" ; o (). updateAttributes ( u , i ). run ()} let d = s . doc . resolve ( n . from - 1 ). nodeBefore ; d && d . type === t . type && Ne ( s . doc , n . from - 1 ) && ( ! t . joinPredicate || t . joinPredicate ( r , d )) && s . join ( n . from - 1 )}})} function ou ( t , e ){ let { selection : n } = t ,{ $from : r } = n ; if ( n instanceof P ){ let i = r . index (); return r . parent . canReplaceWith ( i , i + 1 , e )} let o = r . depth ; for (; o >= 0 ;){ let i = r . index ( o ); if ( r . node ( o ). contentMatchAt ( i ). matchType ( e )) return ! 0 ; o -= 1 } return ! 1 } function iu ( t ){ return t . replace ( /[-/\\^$*+?.()|[\]{}]/g , "\\$&" )} function Qy ( t , e , n = {}){ let { state : r } = e ,{ doc : o , tr : i } = r , s = t ; o . descendants (( l , a )=>{ let c = i . mapping . map ( a ), d = i . mapping . map ( a ) + l . nodeSize , u = null ; if ( l . marks . forEach ( h =>{ if ( h !== s ) return ! 1 ; u = h }), ! u ) return ; let f =! 1 ; if ( Object . keys ( n ). forEach ( h =>{ n [ h ] !== u . attrs [ h ] && ( f =! 0 )}), f ){ let h = t . type . create ({... t . attrs ,... n }); i . removeMark ( c , d , t . type ), i . addMark ( c , d , h )}}), i . docChanged && e . view . dispatch ( i )} var H = class su extends Ys { constructor (){ super (... arguments ), this . type = "node" } static create ( e = {}){ let n = typeof e == "function" ? e () : e ; return new su ( n )} configure ( e ){ return super . configure ( e )} extend ( e ){ let n = typeof e == "function" ? e () : e ; return super . extend ( n )}}; function Ce ( t ){ return new Lg ({ find : t . find , handler : ({ state : e , range : n , match : r , pasteEvent : o })=>{ let i = U ( t . getAttributes , void 0 , r , o ); if ( i ===! 1 || i === null ) return null ; let { tr : s } = e , l = r [ r . length - 1 ], a = r [ 0 ], c = n . to ; if ( l ){ let d = a . search ( /\S/ ), u = n . from + a . indexOf ( l ), f = u + l . length ; if ( so ( n . from , n . to , e . doc ). filter ( p => p . mark . type . excluded . find ( g => g === t . type && g !== p . mark . type )). filter ( p => p . to > u ). length ) return null ; f < n . to && s . delete ( f , n . to ), u > n . from && s . delete ( n . from + d , u ), c = n . from + d + l . length , s . addMark ( n . from + d , c , t . type . create ( i || {})), s . removeStoredMark ( t . type )}}})} function lu ( t = {}){ return new I ({ view ( e ){ retur
2025-09-21 18:07:30 +08:00
`,`
`).split(`
`).map(f=>i+f).join(`
2025-10-02 14:58:30 +07:00
`);return s.replaceWith(l,a,e.schema.text(u)),!0})},"Shift-Tab":({editor:t})=>{if(!this.options.enableTabIndentation)return!1;let{state:e}=t,{selection:n}=e,{$from:r,empty:o}=n;return r.parent.type!==this.type?!1:o?t.commands.command(({tr:i})=>{var s;let{pos:l}=r,a=r.start(),c=r.end(),u=e.doc.textBetween(a,c,`
2025-09-21 18:07:30 +08:00
`,`
`).split(`
2025-10-02 14:58:30 +07:00
`),f=0,h=0,p=l-a;for(let E=0;E<u.length;E+=1){if(h+u[E].length>=p){f=E;break}h+=u[E].length+1}let g=((s=u[f].match(/^ */))==null?void 0:s[0])||"",y=Math.min(g.length,this.options.tabSize);if(y===0)return!0;let b=a;for(let E=0;E<f;E+=1)b+=u[E].length+1;return i.delete(b,b+y),l-b<=y&&i.setSelection(R.create(i.doc,b)),!0}):t.commands.command(({tr:i})=>{let{from:s,to:l}=n,d=e.doc.textBetween(s,l,`
2025-09-21 18:07:30 +08:00
`,`
`).split(`
2025-10-02 14:58:30 +07:00
`).map(u=>{var f;let h=((f=u.match(/^ */))==null?void 0:f[0])||"",p=Math.min(h.length,this.options.tabSize);return u.slice(p)}).join(`
`);return i.replaceWith(s,l,e.schema.text(d)),!0})},Enter:({editor:t})=>{if(!this.options.exitOnTripleEnter)return!1;let{state:e}=t,{selection:n}=e,{$from:r,empty:o}=n;if(!o||r.parent.type!==this.type)return!1;let i=r.parentOffset===r.parent.nodeSize-2,s=r.parent.textContent.endsWith(`
2025-09-21 18:07:30 +08:00
2025-10-02 14:58:30 +07:00
`);return!i||!s?!1:t.chain().command(({tr:l})=>(l.delete(r.pos-2,r.pos),!0)).exitCode().run()},ArrowDown:({editor:t})=>{if(!this.options.exitOnArrowDown)return!1;let{state:e}=t,{selection:n,doc:r}=e,{$from:o,empty:i}=n;if(!i||o.parent.type!==this.type||!(o.parentOffset===o.parent.nodeSize-2))return!1;let l=o.after();return l===void 0?!1:r.nodeAt(l)?t.commands.command(({tr:c})=>(c.setSelection(D.near(r.resolve(l))),!0)):t.commands.exitCode()}}},addInputRules(){return[nr({find:C0,type:this.type,getAttributes:t=>({language:t[1]})}),nr({find:M0,type:this.type,getAttributes:t=>({language:t[1]})})]},addProseMirrorPlugins(){return[new I({key:new z("codeBlockVSCodeHandler"),props:{handlePaste:(t,e)=>{if(!e.clipboardData||this.editor.isActive(this.type.name))return!1;let n=e.clipboardData.getData("text/plain"),r=e.clipboardData.getData("vscode-editor-data"),o=r?JSON.parse(r):void 0,i=o?.mode;if(!n||!i)return!1;let{tr:s,schema:l}=t.state,a=l.text(n.replace(/\r\n?/g,`
`));return s.replaceSelectionWith(this.type.create({language:i},a)),s.selection.$from.parent.type!==this.type&&s.setSelection(R.near(s.doc.resolve(Math.max(0,s.selection.from-2)))),s.setMeta("paste",!0),t.dispatch(s),!0}}})]}}),wu=v0;var Su=H.create({name:"customBlock",group:"block",atom:!0,defining:!0,draggable:!0,selectable:!0,isolating:!0,allowGapCursor:!0,inline:!1,addNodeView(){return({editor:t,node:e,getPos:n,HTMLAttributes:r,decorations:o,extension:i})=>{let s=document.createElement("div");s.setAttribute("data-config",e.attrs.config),s.setAttribute("data-id",e.attrs.id),s.setAttribute("data-type","customBlock");let l=document.createElement("div");if(l.className="fi-fo-rich-editor-custom-block-header fi-not-prose",s.appendChild(l),t.isEditable&&typeof e.attrs.config=="object"&&e.attrs.config!==null&&Object.keys(e.attrs.config).length>0){let c=document.createElement("div");c.className="fi-fo-rich-editor-custom-block-edit-btn-ctn",l.appendChild(c);let d=document.createElement("button");d.className="fi-icon-btn",d.type="button",d.innerHTML=i.options.editCustomBlockButtonIconHtml,d.addEventListener("click",()=>i.options.editCustomBlockUsing(e.attrs.id,e.attrs.config)),c.appendChild(d)}let a=document.createElement("p");if(a.className="fi-fo-rich-editor-custom-block-heading",a.textContent=e.attrs.label,l.appendChild(a),t.isEditable){let c=document.createElement("div");c.className="fi-fo-rich-editor-custom-block-delete-btn-ctn",l.appendChild(c);let d=document.createElement("button");d.className="fi-icon-btn",d.type="button",d.innerHTML=i.options.deleteCustomBlockButtonIconHtml,d.addEventListener("click",()=>t.chain().setNodeSelection(n()).deleteSelection().run()),c.appendChild(d)}if(e.attrs.preview){let c=document.createElement("div");c.className="fi-fo-rich-editor-custom-block-preview fi-not-prose",c.innerHTML=new TextDecoder().decode(Uint8Array.from(atob(e.attrs.preview),d=>d.charCodeAt(0))),s.appendChild(c)}return{dom:s}}},addOptions(){return{deleteCustomBlockButtonIconHtml:null,editCustomBlockButtonIconHtml:null,editCustomBlockUsing:()=>{},insertCustomBlockUsing:()=>{}}},addAttributes(){return{config:{default:null,parseHTML:t=>JSON.parse(t.getAttribute("data-config"))},id:{default:null,parseHTML:t=>t.getAttribute("data-id"),renderHTML:t=>t.id?{"data-id":t.id}:{}},label:{default:null,parseHTML:t=>t.getAttribute("data-label"),rendered:!1},preview:{default:null,parseHTML:t=>t.getAttribute("data-preview"),rendered:!1}}},parseHTML(){return[{tag:` div [ data - type = "${this.name}" ] `}]},renderHTML({HTMLAttributes:t}){return["div",O(t)]},addKeyboardShortcuts(){return{Backspace:()=>this.editor.commands.command(({tr:t,state:e})=>{let n=!1,{selection:r}=e,{empty:o,anchor:i}=r;if(!o)return!1;let s=new le,l=0;return e.doc.nodesBetween(i-1,i,(a,c)=>{if(a.type.name===this.name)return n=!0,s=a,l=c,!1}),n})}},addProseMirrorPlugins(){let{insertCustomBlockUsing:t}=this.options;return[new I({props:{handleDrop(e,n){if(!n||(n.preventDefault(),!n.dataTransfer.getData("customBlock")))return!1;let r=n.dataTransfer.getData("customBlock");return t(r,e.posAtCoords({left:n.clientX,top:n.clientY}).pos),!1}}})]}});var yo=(t,e)=>e.view.domAtPos(t).node.offsetParent!==null,T0=(t,e,n)=>{for(let r=t.depth;r>0;r-=1){let o=t.node(r),i=e(o),s=yo(t.start(r),n);if(i&&s)return{pos:r>0?t.before(r):0,start:t.start(r),depth:r,node:o}}},ku=(t,e)=>{let{state:n,view:r,extensionManager:o}=t,{schema:i,selection:s}=n,{empty:l,$anchor:a}=s,c=!!o.extensions.find(y=>y.name==="gapCursor");if(!l||a.parent.type!==i.nodes.detailsSummary||!c||e==="right"&&a.parentOffset!==a.parent.nodeSize-2)return!1;let d=Ye(y=>y.type===i.nodes.details)(s);if(!d)return!1;let u=kn(d.node,y=>y.type===i.nodes.detailsContent);if(!u.length||yo(d.start+u[0].pos+1,t))return!1;let h=n.doc.resolve(d.pos+d.node.nodeSize),p=se.findFrom(h,1,!1);if(!p)return!1;let{tr:m}=n,g=new se(p);return m.setSelection(g),m.scrollIntoView(),r.dispatch(m),!0},Cu=H.create({name:"details",content:"detailsSummary detailsContent",group:"block",defining:!0,isolating:!0,allowGapCursor:!1,addOptions(){return{persist:!1,openClassN
` }, addCommands (){ return { setHardBreak : ()=>({ commands : t , chain : e , state : n , editor : r })=> t . first ([()=> t . exitCode (),()=> t . command (()=>{ let { selection : o , storedMarks : i } = n ; if ( o . $from . parent . type . spec . isolating ) return ! 1 ; let { keepMarks : s } = this . options ,{ splittableMarks : l } = r . extensionManager , a = i || o . $to . parentOffset && o . $from . marks (); return e (). insertContent ({ type : this . name }). command (({ tr : c , dispatch : d })=>{ if ( d && a && s ){ let u = a . filter ( f => l . includes ( f . type . name )); c . ensureMarks ( u )} return ! 0 }). run ()})])}}, addKeyboardShortcuts (){ return { "Mod-Enter" : ()=> this . editor . commands . setHardBreak (), "Shift-Enter" : ()=> this . editor . commands . setHardBreak ()}}}), Ou = E0 ; var O0 = H . create ({ name : "heading" , addOptions (){ return { levels : [ 1 , 2 , 3 , 4 , 5 , 6 ], HTMLAttributes : {}}}, content : "inline*" , group : "block" , defining :! 0 , addAttributes (){ return { level : { default : 1 , rendered :! 1 }}}, parseHTML (){ return this . options . levels . map ( t =>({ tag : `h ${ t } ` , attrs : { level : t }}))}, renderHTML ({ node : t , HTMLAttributes : e }){ return [ `h ${ this . options . levels . includes ( t . attrs . level ) ? t . attrs . level : this . options . levels [ 0 ] } ` , O ( this . options . HTMLAttributes , e ), 0 ]}, addCommands (){ return { setHeading : t =>({ commands : e })=> this . options . levels . includes ( t . level ) ? e . setNode ( this . name , t ) :! 1 , toggleHeading : t =>({ commands : e })=> this . options . levels . includes ( t . level ) ? e . toggleNode ( this . name , "paragraph" , t ) :! 1 }}, addKeyboardShortcuts (){ return this . options . levels . reduce (( t , e )=>({... t ,[ `Mod-Alt- ${ e } ` ] : ()=> this . editor . commands . toggleHeading ({ level : e })}),{})}, addInputRules (){ return this . options . levels . map ( t => nr ({ find : new RegExp ( `^(#{ ${ Math . min (... this . options . levels ) } , ${ t } })\\s$` ), type : this . type , getAttributes : { level : t }}))}}), Nu = O0 ; var N0 = /(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))$/ , R0 = /(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))/g , D0 = Z . create ({ name : "highlight" , addOptions (){ return { multicolor :! 1 , HTMLAttributes : {}}}, addAttributes (){ return this . options . multicolor ? { color : { default : null , parseHTML : t => t . getAttribute ( "data-color" ) || t . style . backgroundColor , renderHTML : t => t . color ? { "data-color" : t . color , style : `background-color: ${ t . color } ; color: inherit` } : {}}} : {}}, parseHTML (){ return [{ tag : "mark" }]}, renderHTML ({ HTMLAttributes : t }){ return [ "mark" , O ( this . options . HTMLAttributes , t ), 0 ]}, addCommands (){ return { setHighlight : t =>({ commands : e })=> e . setMark ( this . name , t ), toggleHighlight : t =>({ commands : e })=> e . toggleMark ( this . name , t ), unsetHighlight : ()=>({ commands : t })=> t . unsetMark ( this . name )}}, addKeyboardShortcuts (){ return { "Mod-Shift-h" : ()=> this . editor . commands . toggleHighlight ()}}, addInputRules (){ return [ Le ({ find : N0 , type : this . type })]}, addPasteRules (){ return [ Ce ({ find : R0 , type : this . type })]}}), Ru = D0 ; var P0 = H . create ({ name : "horizontalRule" , addOptions (){ return { HTMLAttributes : {}}}, group : "block" , parseHTML (){ return [{ tag : "hr" }]}, renderHTML ({ HTMLAttributes : t }){ return [ "hr" , O ( this . options . HTMLAttributes , t )]}, addCommands (){ return { setHorizontalRule : ()=>({ chain : t , state : e })=>{ if ( ! ou ( e , e . schema . nodes [ this . name ])) return ! 1 ; let { selection : n } = e ,{ $to : r } = n , o = t (); return lo ( n ) ? o . insertContentAt ( r . pos ,{ type : this . name }) : o . insertContent ({ type : this . name }), o . command (({ tr : i , dispatch : s })=>{ var l ; if ( s ){ let { $to : a } = i . selection , c = a . end (); if ( a . nodeAfter ) a . nodeAfter . isTextblock ? i . setSelection ( R . create ( i . doc , a . pos + 1 )) : a . nodeAfter . isBlock ? i . setSelection ( P . create ( i . doc , a . pos )) : i . setSelection ( R . create ( i . doc , a . pos )); else { let d = ( l = a . parent . type . contentMatch . defaultType ) == null ? void 0 : l . create (); d && ( i . insert ( c , d ), i . setSelection ( R . create ( i . doc , c + 1 )))} i . scrollIntoView ()} return ! 0 }). run ()}}}, addInputRules (){ return [ fo ({ find : /^(?:---|—-|___\s|\*\*\*\s)$/ , type : this . type })]}}), Du = P0 ; var I0 = /(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))$/ , L0 = /(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))/g , B0 = /(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))$/ , z0 = /(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))/g , H0 = Z . create ({ name : "italic" , addOptions (){ return { HTMLAttributes : {}}}, parseHTML (){ return [{ tag : "em" },{ tag : "i" , getAttrs : t => t . style . fontStyle !== "normal" && null },{ style : "font-style=normal" , clearMark : t => t . type . name === this . name },{ style : "font-style=italic" }]}, renderHTML ({ HTMLAttributes : t }){ return [ "em" , O ( this . options . HTMLAttributes , t ), 0 ]}, addCommands (){ return { setItalic : ()=>({ commands : t })
`,J0="\uFE0F",q0="\u200D",dl="\uFFFC",bo=null,xo=null;function G0(t=[]){let e={};Me.groups=e;let n=new Me;bo==null&&(bo=Fu(V0)),xo==null&&(xo=Fu(_0)),M(n,"'",zo),M(n,"{",sr),M(n,"}",lr),M(n,"[",ko),M(n,"]",Co),M(n,"(",Mo),M(n,")",vo),M(n,"<",To),M(n,">",Ao),M(n,"\uFF08",Eo),M(n,"\uFF09",Oo),M(n,"\u300C",No),M(n,"\u300D",Ro),M(n,"\u300E",Do),M(n,"\u300F",Po),M(n,"\uFF1C",Io),M(n,"\uFF1E",Lo),M(n,"&",Bo),M(n,"*",Ho),M(n,"@",Rt),M(n,"` ",$o),M(n," ^ ",Vo),M(n," : ",Dt),M(n," , ",kl),M(n," $ ",_o),M(n," . ",et),M(n," = ",Wo),M(n," ! ",Cl),M(n," - ",ze),M(n," % ",ar),M(n," | ",jo),M(n," + ",Ko),M(n," # ",Uo),M(n," ? ",cr),M(n,'" ' , Ml ), M ( n , "/" , tt ), M ( n , ";" , vl ), M ( n , "~" , dr ), M ( n , "_" , Jo ), M ( n , "\\" , Fo ), M ( n , "\u30FB" , Uu ); let r = te ( n , yt , wl ,{[ fl ] :! 0 }); te ( r , yt , r ); let o = te ( r , gt , ju ,{[ ir ] :! 0 }), i = te ( r , rr , Ku ,{[ or ] :! 0 }), s = te ( n , gt , bt ,{[ hl ] :! 0 }); te ( s , yt , o ), te ( s , gt , s ), te ( o , yt , o ), te ( o , gt , o ); let l = te ( n , rr , gl ,{[ pl ] :! 0 }); te ( l , gt ), te ( l , yt , i ), te ( l , rr , l ), te ( i , yt , i ), te ( i , gt ), te ( i , rr , i ); let a = M ( n , cl , Sl ,{[ sl ] :! 0 }), c = M ( n , Hu , xl ,{[ sl ] :! 0 }), d = te ( n , al , xl ,{[ sl ] :! 0 }); M ( n , dl , d ), M ( c , cl , a ), M ( c , dl , d ), te ( c , al , d ), M ( d , Hu ), M ( d , cl ), te ( d , al , d ), M ( d , dl , d ); let u = te ( n , ll , Ju ,{[ Wu ] :! 0 }); M ( u , "#" ), te ( u , ll , u ), M ( u , J0 , u ); let f = M ( u , q0 ); M ( f , "#" ), te ( f , ll , u ); let h = [[ gt , s ],[ yt , o ]], p = [[ gt , null ],[ rr , l ],[ yt , i ]]; for ( let m = 0 ; m < bo . length ; m ++ ) Nt ( n , bo [ m ], yl , bt , h ); for ( let m = 0 ; m < xo . length ; m ++ ) Nt ( n , xo [ m ], bl , gl , p ); Qt ( yl ,{ tld :! 0 , ascii :! 0 }, e ), Qt ( bl ,{ utld :! 0 , alpha :! 0 }, e ), Nt ( n , "file" , So , bt , h ), Nt ( n , "mailto" , So , bt , h ), Nt ( n , "http" , Mn , bt , h ), Nt ( n , "https" , Mn , bt , h ), Nt ( n , "ftp" , Mn , bt , h ), Nt ( n , "ftps" , Mn , bt , h ), Qt ( So ,{ scheme :! 0 , ascii :! 0 }, e ), Qt ( Mn ,{ slashscheme :! 0 , ascii :! 0 }, e ), t = t . sort (( m , g )=> m [ 0 ] > g [ 0 ] ? 1 :- 1 ); for ( let m = 0 ; m < t . length ; m ++ ){ let g = t [ m ][ 0 ], b = t [ m ][ 1 ] ? {[ W0 ] :! 0 } : {[ j0 ] :! 0 }; g . indexOf ( "-" ) >= 0 ? b [ ml ] =! 0 : gt . test ( g ) ? yt . test ( g ) ? b [ ir ] =! 0 : b [ hl ] =! 0 : b [ fl ] =! 0 , zu ( n , g , g , b )} return zu ( n , "localhost" , ur ,{ ascii :! 0 }), n . jd = new Me ( qo ),{ start : n , tokens : Object . assign ({ groups : e }, qu )}} function Gu ( t , e ){ let n = Y0 ( e . replace ( /[A-Z]/g , l => l . toLowerCase ())), r = n . length , o = [], i = 0 , s = 0 ; for (; s < r ;){ let l = t , a = null , c = 0 , d = null , u =- 1 , f =- 1 ; for (; s < r && ( a = l . go ( n [ s ]));) l = a , l . accepts () ? ( u = 0 , f = 0 , d = l ) : u >= 0 && ( u += n [ s ]. length , f ++ ), c += n [ s ]. length , i += n [ s ]. length , s ++ ; i -= u , s -= f , c -= u , o . push ({ t : d . t , v : e . slice ( i - c , i ), s : i - c , e : i })} return o } function Y0 ( t ){ let e = [], n = t . length , r = 0 ; for (; r < n ;){ let o = t . charCodeAt ( r ), i , s = o < 55296 || o > 56319 || r + 1 === n || ( i = t . charCodeAt ( r + 1 )) < 56320 || i > 57343 ? t [ r ] : t . slice ( r , r + 2 ); e . push ( s ), r += s . length } return e } function Nt ( t , e , n , r , o ){ let i , s = e . length ; for ( let l = 0 ; l < s - 1 ; l ++ ){ let a = e [ l ]; t . j [ a ] ? i = t . j [ a ] : ( i = new Me ( r ), i . jr = o . slice (), t . j [ a ] = i ), t = i } return i = new Me ( n ), i . jr = o . slice (), t . j [ e [ s - 1 ]] = i , i } function Fu ( t ){ let e = [], n = [], r = 0 , o = "0123456789" ; for (; r < t . length ;){ let i = 0 ; for (; o . indexOf ( t [ r + i ]) >= 0 ;) i ++ ; if ( i > 0 ){ e . push ( n . join ( "" )); for ( let s = parseInt ( t . substring ( r , r + i ), 10 ); s > 0 ; s -- ) n . pop (); r += i } else n . push ( t [ r ]), r ++ } return e } var fr = { defaultProtocol : "http" , events : null , format : $u , formatHref : $u , nl2br :! 1 , tagName : "a" , target : null , rel : null , validate :! 0 , truncate : 1 / 0 , className : null , attributes : null , ignoreTags : [], render : null }; function Tl ( t , e = null ){ let n = Object . assign ({}, fr ); t && ( n = Object . assign ( n , t instanceof Tl ? t . o : t )); let r = n . ignoreTags , o = []; for ( let i = 0 ; i < r . length ; i ++ ) o . push ( r [ i ]. toUpperCase ()); this . o = n , e && ( this . defaultRender = e ), this . ignoreTags = o } Tl . prototype = { o : fr , ignoreTags : [], defaultRender ( t ){ return t }, check ( t ){ return this . get ( "validate" , t . toString (), t )}, get ( t , e , n ){ let r = e != null , o = this . o [ t ]; return o && ( typeof o == "object" ? ( o = n . t in o ? o [ n . t ] : fr [ t ], typeof o == "function" && r && ( o = o ( e , n ))) : typeof o == "function" && r && ( o = o ( e , n . t , n )), o )}, getObj ( t , e , n ){ let r = this . o [ t ]; return typeof r == "function" && e != null && ( r = r ( e , n . t , n )), r }, render ( t ){ let e = t . render ( this ); return ( this . get ( "render" , null , t ) || this . defaultRender )( e , t . t , t )}}; function $u ( t ){ return t } function Yu ( t , e ){ this . t = "token" , this . v = t , this . tk = e } Yu . prototype = { isLink :! 1 , toString (){ return this . v }, toHref ( t ){ return this . toString ()}, toFormattedString ( t ){ let e = this . toString (), n = t . get ( "truncate" , e , this ), r = t . get ( "format" , e , this ); return n && r . length > n ? r . substring ( 0 , n ) + "\u2026" : r }, toFormattedHref ( t ){ return t . get ( "formatHref" , this . toHref ( t . get ( "defaultProtocol" )), this )}, startIndex (){ return this . tk
2025-09-21 18:07:30 +08:00
1. Must only contain digits , lowercase ASCII letters or "-"
2. Cannot start or end with "-"
2025-10-02 14:58:30 +07:00
3. "-" cannot repeat `);X.customSchemes.push([t,e])}function nb(){X.scanner=G0(X.customSchemes);for(let t=0;t<X.tokenQueue.length;t++)X.tokenQueue[t][1]({scanner:X.scanner});X.parser=Q0(X.scanner.tokens);for(let t=0;t<X.pluginQueue.length;t++)X.pluginQueue[t][1]({scanner:X.scanner,parser:X.parser});return X.initialized=!0,X}function Yo(t){return X.initialized||nb(),Z0(X.parser.start,t,Gu(X.scanner.start,t))}Yo.scan=Gu;function Xo(t,e=null,n=null){if(e&&typeof e=="object"){if(n)throw Error(` linkifyjs : Invalid link type $ { e }; must be a string `);n=e,e=null}let r=new Tl(n),o=Yo(t),i=[];for(let s=0;s<o.length;s++){let l=o[s];l.isLink&&(!e||l.t===e)&&r.check(l)&&i.push(l.toFormattedObject(r))}return i}var El="[\0- \xA0\u1680\u180E\u2000-\u2029\u205F\u3000]",rb=new RegExp(El),ob=new RegExp(` $ { El } $ `),ib=new RegExp(El,"g");function sb(t){return t.length===1?t[0].isLink:t.length===3&&t[1].isLink?["()","[]"].includes(t[0].value+t[2].value):!1}function lb(t){return new I({key:new z("autolink"),appendTransaction:(e,n,r)=>{let o=e.some(c=>c.docChanged)&&!n.doc.eq(r.doc),i=e.some(c=>c.getMeta("preventAutolink"));if(!o||i)return;let{tr:s}=r,l=$s(n.doc,[...e]);if(Us(l).forEach(({newRange:c})=>{let d=Od(r.doc,c,h=>h.isTextblock),u,f;if(d.length>1)u=d[0],f=r.doc.textBetween(u.pos,u.pos+u.node.nodeSize,void 0," ");else if(d.length){let h=r.doc.textBetween(c.from,c.to," "," ");if(!ob.test(h))return;u=d[0],f=r.doc.textBetween(u.pos,c.to,void 0," ")}if(u&&f){let h=f.split(rb).filter(Boolean);if(h.length<=0)return!1;let p=h[h.length-1],m=u.pos+f.lastIndexOf(p);if(!p)return!1;let g=Yo(p).map(y=>y.toObject(t.defaultProtocol));if(!sb(g))return!1;g.filter(y=>y.isLink).map(y=>({...y,from:m+y.start+1,to:m+y.end+1})).filter(y=>r.schema.marks.code?!r.doc.rangeHasMark(y.from,y.to,r.schema.marks.code):!0).filter(y=>t.validate(y.value)).filter(y=>t.shouldAutoLink(y.value)).forEach(y=>{so(y.from,y.to,r.doc).some(b=>b.mark.type===t.type)||s.addMark(y.from,y.to,t.type.create({href:y.href}))})}}),!!s.steps.length)return s}})}function ab(t){return new I({key:new z("handleClickLink"),props:{handleClick:(e,n,r)=>{var o,i;if(r.button!==0||!e.editable)return!1;let s=null;if(r.target instanceof HTMLAnchorElement)s=r.target;else{let d=r.target,u=[];for(;d.nodeName!=="DIV";)u.push(d),d=d.parentNode;s=u.find(f=>f.nodeName==="A")}if(!s)return!1;let l=Ks(e.state,t.type.name),a=(o=s?.href)!=null?o:l.href,c=(i=s?.target)!=null?i:l.target;return t.enableClickSelection&&t.editor.commands.extendMarkRange(t.type.name),s&&a?(window.open(a,c),!0):!1}}})}function cb(t){return new I({key:new z("handlePasteLink"),props:{handlePaste:(e,n,r)=>{let{state:o}=e,{selection:i}=o,{empty:s}=i;if(s)return!1;let l="";r.content.forEach(c=>{l+=c.textContent});let a=Xo(l,{defaultProtocol:t.defaultProtocol}).find(c=>c.isLink&&c.value===l);return!l||!a?!1:t.editor.commands.setMark(t.type,{href:a.href})}}})}function Zt(t,e){let n=["http","https","ftp","ftps","mailto","tel","callto","sms","cid","xmpp"];return e&&e.forEach(r=>{let o=typeof r=="string"?r:r.scheme;o&&n.push(o)}),!t||t.replace(ib,"").match(new RegExp(` ^ ( ?: ( ?: $ { n . join ( "|" )}) :| [ ^ a - z ] | [ a - z0 - 9 + . - ] + ( ?: [ ^ a - z + . -: ] | $ )) `,"i"))}var db=Z.create({name:"link",priority:1e3,keepOnSplit:!1,exitable:!0,onCreate(){this.options.validate&&!this.options.shouldAutoLink&&(this.options.shouldAutoLink=this.options.validate,console.warn("The ` validate ` option is deprecated. Rename to the ` shouldAutoLink ` option instead.")),this.options.protocols.forEach(t=>{if(typeof t=="string"){Al(t);return}Al(t.scheme,t.optionalSlashes)})},onDestroy(){Xu()},inclusive(){return this.options.autolink},addOptions(){return{openOnClick:!0,enableClickSelection:!1,linkOnPaste:!0,autolink:!0,protocols:[],defaultProtocol:"http",HTMLAttributes:{target:"_blank",rel:"noopener noreferrer nofollow",class:null},isAllowedUri:(t,e)=>!!Zt(t,e.protocols),validate:t=>!!t,shouldAutoLink:t=>!!t}},addAttributes(){return{href:{default:null,parseHTML(t){return t.getAttribute("href")}},target:{default:this.options.HTMLAttributes.target},rel:{default:this.options.HTMLAttributes.rel},class:{default:this