2025-09-21 18:07:30 +08: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 ua ( 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 , u = Math . min ( s . text . length , l . text . length ) ; for ( ; c < u && 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 = ua ( s . content , l . content , n - 1 , r - 1 ) ; if ( c ) return c } n -= a , r -= a } } var x = 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 u = l + 1 ; a . nodesBetween ( Math . max ( 0 , e - u ) , Math . min ( a . content . size , n - u ) , r , o + u ) } 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(Wh(t));while(t.eat("|"));return e.length==1?e[0]:{type:"choice",exprs:e}}function Wh(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=Jh(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=Kh(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 Kh(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 Uh(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 Jh(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=Uh(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 qh(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 u=n();o(i(s.expr,a),u),a=u}if(s.max==-1)o(i(s.expr,a),a);else for(let c=s.min;c<s.max;c++){let u=n();r(a,u),o(i(s.expr,a),u),a=u}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 Gh(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 u=0;u<o.length;u++)o[u][0]==l&&(c=o[u][1]);na(t,a).forEach(u=>{c||o.push([l,c=[]]),c.indexOf(u)==-1&&c.push(u)})})});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 Yh(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 ; va . hasOwnProperty ( s ) && this . parser . normalizeLists && tp ( e ) ; let a = this . options . ruleFromNode && this . options . ruleFromNode ( e ) || ( l = this . parser . matchTag ( e , this , r ) ) ; e : if ( a ? a . ignore : ep . 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 , u = 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 d = a && a . skip ? n : this . readStyles ( e , n ) ; d && this . addAll ( e , d ) , c && this . sync ( i ) , this . needsBlock = u } 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 mp(t,e,n){let r=t.resolve(e),o=r.index();return r.parent.canReplaceWith(o,o+1,n)}function gp(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(x.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,u=n-2;c>i;c--,u--){let d=o.node(c),f=o.index(c);if(d.type.spec.isolating)return!1;let h=d.content.cutByIndex(f,d.childCount),p=r&&r[u+1];p&&(h=h.replaceChild(0,p.type.create(p.attrs)));let m=r&&r[u]||d;if(!d.canReplace(f+1,d.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 yp(t,e,n=1,r){let o=t.doc.resolve(e),i=x.empty,s=x.empty;for(let l=o.depth,a=o.depth-n,c=n-1;l>a;l--,c--){i=x.from(o.node(l).copy(i));let u=r&&r[c];s=x.from(u?u.type.create(u.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 bp(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&&bp(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 xp(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 u=s.whitespace=="pre",d=!!s.contentMatch.matchType(o);u&&!d?r=!1:!u&&d&&(r=!0)}let l=t.steps.length;if(r===!1){let u=t.doc.resolve(e+n);Pa(t,u.node(),u.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 u=t.doc.resolve(c);Da(t,u.node(),u.before(),t.steps.length)}return t}function wp(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),u=!1;if(i==1)u=c.canReplace(a,a,o);else{let d=c.contentMatchAt(a).findWrapping(o.firstChild.type);u=d&&c.canReplaceWith(a,a,d[0])}if(u)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=x.empty;for(let o=0;o<=e.depth;o++){let i=e.node(o);this.fro
` ) , d && 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 : ue ( g ) + 1 } ) ; break } let y = m . pmViewDesc ; if ( y && y . node && y . node . isBlock ) break } } else { let m = h . childNodes [ p - 1 ] ; d = m && ( m . nodeName == "BR" || m . contentEditable == "false" ) } } if ( Pe && u . focusNode && u . focusNode != a . node && u . focusNode . nodeType == 1 ) { let h = u . focusNode . childNodes [ u . focusOffset ] ; h && h . contentEditable == "false" && ( o = ! 0 ) } if ( ! ( o || d && xe ) && qt ( l . node , l . offset , u . anchorNode , u . anchorOffset ) && qt ( a . node , a . offset , u . focusNode , u . focusOffset ) ) return ; let f = ! 1 ; if ( ( c . extend || e == n ) && ! ( d && 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 ) , u = c && c . dom , d = c && c . contentDOM ; if ( n . isText ) { if ( ! u ) u = 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(x.from(t.state.schema.text(e.replace(/ \r \n ?/g, `
` ))),0,0),t.someProp("transformPasted",f=>{l=f(l,t,!0)}),l;let d=t.someProp("clipboardTextParser",f=>f(e,o,r,t));if(d)l=d;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",d=>{n=d(n,t)}),s=ym(n),Yn&&bm(s);let c=s&&s.querySelector("[data-pm-slice]"),u=c&&/^( \d +) ( \d +)(?: -( \d +))? (.*)/.exec(c.getAttribute("data-pm-slice")||"");if(u&&u[3])for(let d=+u[3];d>0;d--){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||u),context:o,ruleFromNode(f){return f.nodeName=="BR"&&!f.nextSibling&&f.parentNode&&!pm.test(f.parentNode.nodeName)?{ignore:!0}:null}})),u)l=xm(hc(l,+u[1],+u[2]),u[4]);else if(l=A.maxOpen(mm(l.content,o),!0),l.openStart||l.openEnd){let d=0,f=0;for(let h=l.content.firstChild;d<l.openStart&&!h.type.spec.isolating;d++,h=h.firstChild);for(let h=l.content.lastChild;f<l.openEnd&&!h.type.spec.isolating;f++,h=h.lastChild);l=hc(l,d,f)}return t.someProp("transformPasted",d=>{l=d(l,t,a)}),l}var pm=/^(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 mm(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 u=_c(l,a);s.push(u),o=o.matchType(u.type),i=a}}),s)return x.from(s)}return t}function _c(t,e,n=0){for(let r=e.length-1;r>=n;r--)t=e[r].create(null,x.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(x.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(x.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(x.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 gm(t){let e=window.trustedTypes;return e?(_i||(_i=e.defaultPolicy||e.createPolicy("ProseMirrorClipboard",{createHTML:n=>n})),_i.createHTML(t)):t}function ym(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=gm(t),o)for(let i=0;i<o.length;i++)n=n.querySelector(o[i])||n;return n}function bm(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==" \x A0"&&r.parentNode&&r.parentNode.replaceChild(t.ownerDocument.createTextNode(" "),r)}}function xm(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 ( O . 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 lg ( 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 u = e . tr ; ( e . selection instanceof O || e . selection instanceof be ) && u . deleteSelection ( ) ; let d = u . mapping . map ( r . pos ) , f = Ae ( u . doc , d , i . length , i ) ; if ( f || ( i [ 0 ] = l ? { type : l } : null , f = Ae ( u . doc , d , i . length , i ) ) , ! f ) return ! 1 ; if ( u . split ( d , i . length , i ) , ! a && c && r . node ( s ) . type != l ) { let h = u . mapping . map ( r . before ( s ) ) , p = u . doc . resolve ( h ) ; l && r . node ( s - 1 ) . canReplaceWith ( p . index ( ) , p . index ( ) + 1 , l ) && u . setNodeMarkup ( u . mapping . map ( r . before ( s ) ) , l ) } return n && n ( u . scrollIntoView ( ) ) , ! 0 } } var ag = lg ( ) ; var hu = ( 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 ) } , cg = ( t , e ) => ( e && e ( t . tr . setSelection ( new be ( t . doc ) ) ) , ! 0 ) ; function ug ( 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 pu ( t , e , n , r ) { let o = e . nodeBefore , i = e . nodeAfter , s , l , a = o . type . spec . isolating || i . type . spec . isolating ; if ( ! a && ug ( 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 = x . empty ; for ( let y = s . length - 1 ; y >= 0 ; y -- ) p = x . from ( s [ y ] . create ( null , p ) ) ; p = x . 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 u = i . type . spec . isolating || r > 0 && a ? null : D . findFrom ( e , 1 ) , d = u && u . $from . blockRange ( u . $to ) , f = d && at ( d ) ; if ( f != null && f >= e . depth ) return n && n ( t . tr . lift ( d , 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 = x . empty ; for ( let C = p . length - 1 ; C >= 0 ; C -- ) y = x . from ( p [ C ] . 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 mu ( 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 ( O . create ( e . doc , t < 0 ? o . start ( i ) : o . end ( i ) ) ) ) , ! 0 ) : ! 1 }
` ,textSerializers:s={}}=n||{},l="";return t.nodesBetween(r,o,(a,c,u,d)=>{var f;a.isBlock&&c>r&&(l+=i);let h=s?.[a.type.name];if(h)return u&&(l+=h({node:a,pos:c,parent:u,index:d,range:e})),!1;a.isText&&(l+=(f=a?.text)==null?void 0:f.slice(Math.max(r,c)-c,o-c))}),l}function kg(t,e){let n={from:0,to:t.content.size};return Pu(t,n,e)}function Iu(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 Lu(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 Z(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 Cg(t,e){let n=Z(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"?Cg(t,e):n==="mark"?Lu(t,e):{}}function vg(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 Mg(t){let e=vg(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),u=e.slice(i).map(a),d=e.invert().map(c,-1),f=e.invert().map(u);r.push({oldRange:{from:d,to:f},newRange:{from:c,to:u}})})}),Mg(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 Bu(t,e,n={}){return t.find(r=>r.type===e&&no(Object.fromEntries(Object.keys(n).map(o=>[o,r.attrs[o]])),n))}function ku(t,e,n={}){return!!Bu(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(u=>u.type===e))&&(o=t.parent.childBefore(t.parentOffset)),!o.node||!o.node.marks.some(u=>u.type===e)||(n=n||((r=o.node.marks[0])==null?void 0:r.attrs),!Bu([...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&&ku([...t.parent.child(s-1).marks],e,n);)s-=1,l-=t.parent.child(s).nodeSize;for(;a<t.parent.childCount&&ku([...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 zu=(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 Tg=(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 u=((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?u:u.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 Ng ( t ) { return Object . prototype . toString . call ( t ) . slice ( 8 , - 1 ) } function Qr ( t ) { return Ng ( t ) !== "Object" ? ! 1 : t . constructor === Object && Object . getPrototypeOf ( t ) === Object . prototype } function _u ( t , e ) { let n = { ... t } ; return Qr ( t ) && Qr ( e ) && Object . keys ( e ) . forEach ( r => { Qr ( e [ r ] ) && Qr ( t [ r ] ) ? n [ r ] = _u ( 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 : ( ) => _u ( 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 } } , ne = class Wu extends Ys { constructor ( ) { super ( ... arguments ) , this . type = "mark" } static create ( e = { } ) { let n = typeof e == "function" ? e ( ) : e ; return new Wu ( 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 Rg ( t ) { return typeof t == "number" } var Dg = class { constructor ( t ) { this . find = t . find , this . handler = t . handler } } , Pg = ( 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 Ig ( t ) { let { editor : e , state : n , from : r , to : o , rule : i , pasteEvent : s , dropEvent : l } = t , { commands : a , chain : c , can : u } = new oo ( { editor : e , state : n } ) , d = [ ] ; return n . doc . nodesBetween ( r , o , ( h , p ) => { var m , g , y , b , C ; if ( ( g = ( m = h . type ) == null ? void 0 : m . spec ) != null && g . code || ! ( h . isText || h . isTextblock || h . isInline ) ) return ; let E = ( C = ( b = ( y = h . content ) == null ? void 0 : y . size ) != null ? b : h . nodeSize ) != null ? C : 0 , w = Math . max ( r , p ) , k = Math . min ( o , p + E ) ; if ( w >= k ) return ; let S = h . isText ? h . text || "" : h . textBetween ( w - p , k - p , void 0 , "\uFFFC" ) ; Pg ( S , i . find , s ) . forEach ( R => { if ( R . index === void 0 ) return ; let T = w + R . index + 1 , F = T + R [ 0 ] . length , _ = { from : n . tr . mapping . map ( T ) , to : n . tr . mapping . map ( F ) } , G = i . handler ( { state : n , range : _ , match : R , commands : a , chain : c , can : u , pasteEvent : s , dropEvent : l } ) ; d . push ( G ) } ) } ) , d . every ( h => h !== null ) } var Zr = null , Lg = t => { var e ; let n = new ClipboardEvent ( "paste" , { clipboardData : new DataTransfer } ) ; return ( e = n . clipboardData ) == null || e . setData ( "text/html" , t ) , n } ; function Bg ( 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 : u , from : d , to : f , rule : h , pasteEvt : p } ) => { let m = u . tr , g = ro ( { state : u , transaction : m } ) ; if ( ! ( ! Ig ( { editor : e , state : g , from : Math . max ( d - 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 ( u => new I ( { view ( d ) { let f = p => { var m ; r = ( m = d . dom . parentElement ) != null && m . contains ( p . target ) ? d . 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 : ( d , f ) => { if ( i = r === d . 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 : ( d , 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 : ( d , f , h ) => { let p = d [ 0 ] ,
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 ;
} ` ;function qy(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 rd=class extends yg{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=Vu(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=qy(Jy,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
` , textSerializers : n = { } } = t || { } ; return kg ( this . state . doc , { blockSeparator : e , textSerializers : { ... Iu ( 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 Uy ( 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 ) , u = 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 ; u < n . to && i . delete ( u , 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 ] ) , u = s + c ; u > l ? u = l : l = u + r [ 1 ] . length ; let d = r [ 0 ] [ r [ 0 ] . length - 1 ] ; i . insertText ( d , s + r [ 0 ] . length - 1 ) , i . replaceWith ( u , 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 && un ( a , t . type , i ) ; if ( ! c ) return null ; if ( s . wrap ( a , c ) , t . keepMarks && t . editor ) { let { selection : d , storedMarks : f } = e , { splittableMarks : h } = t . editor . extensionManager , p = f || d . $to . parentOffset && d . $from . marks ( ) ; if ( p ) { let m = p . filter ( g => h . includes ( g . type . name ) ) ; s . ensureMarks ( m ) } } if ( t . keepAttributes ) { let d = t . type . name === "bulletList" || t . type . name === "orderedList" ? "listItem" : "taskList" ; o ( ) . updateAttributes ( d , i ) . run ( ) } let u = s . doc . resolve ( n . from - 1 ) . nodeBefore ; u && u . type === t . type && Ne ( s . doc , n . from - 1 ) && ( ! t . joinPredicate || t . joinPredicate ( r , u ) ) && s . join ( n . from - 1 ) } } ) } function od ( 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 id ( t ) { return t . replace ( /[-/\\^$*+?.()|[\]{}]/g , "\\$&" ) } function Gy ( t , e , n = { } ) { let { state : r } = e , { doc : o , tr : i } = r , s = t ; o . descendants ( ( l , a ) => { let c = i . mapping . map ( a ) , u = i . mapping . map ( a ) + l . nodeSize , d = null ; if ( l . marks . forEach ( h => { if ( h !== s ) return ! 1 ; d = h } ) , ! d ) return ; let f = ! 1 ; if ( Object . keys ( n ) . forEach ( h => { n [ h ] !== d . attrs [ h ] && ( f = ! 0 ) } ) , f ) { let h = t . type . create ( { ... t . attrs , ... n } ) ; i . removeMark ( c , u , t . type ) , i . addMark ( c , u , h ) } } ) , i . docChanged && e . view . dispatch ( i ) } var H = class sd extends Ys { constructor ( ) { super ( ... arguments ) , this . type = "node" } static create ( e = { } ) { let n = typeof e == "function" ? e ( ) : e ; return new sd ( 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 Dg ( { 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 u = a . search ( /\S/ ) , d = n . from + a . indexOf ( l ) , f = d + 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 > d ) . length ) return null ; f < n . to && s . delete ( f , n . to ) , d > n . from && s . delete ( n . from + u , d ) , c = n . from + u + l . length , s . addMark ( n . from + u , c , t . type . create ( i || { } ) ) , s . removeStoredMark ( t . type ) } } } ) } function ld ( t = { } ) { return new I ( { view ( e ) { retur
` , `
` ).split( `
` ).map(f=>i+f).join( `
` );return s.replaceWith(l,a,e.schema.text(d)),!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(),d=e.doc.textBetween(a,c, `
` , `
` ).split( `
` ),f=0,h=0,p=l-a;for(let E=0;E<d.length;E+=1){if(h+d[E].length>=p){f=E;break}h+=d[E].length+1}let g=((s=d[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+=d[E].length+1;return i.delete(b,b+y),l-b<=y&&i.setSelection(O.create(i.doc,b)),!0}):t.commands.command(({tr:i})=>{let{from:s,to:l}=n,u=e.doc.textBetween(s,l, `
` , `
` ).split( `
` ).map(d=>{var f;let h=((f=d.match(/^ */))==null?void 0:f[0])||"",p=Math.min(h.length,this.options.tabSize);return d.slice(p)}).join( `
` );return i.replaceWith(s,l,e.schema.text(u)),!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( `
` );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:w0,type:this.type,getAttributes:t=>({language:t[1]})}),nr({find:S0,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(O.near(s.doc.resolve(Math.max(0,s.selection.from-2)))),s.setMeta("paste",!0),t.dispatch(s),!0}}})]}}),wd=k0;var Sd=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 u=document.createElement("button");u.className="fi-icon-btn",u.type="button",u.innerHTML=i.options.editCustomBlockButtonIconHtml,u.addEventListener("click",()=>i.options.editCustomBlockUsing(e.attrs.id,e.attrs.config)),c.appendChild(u)}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 u=document.createElement("button");u.className="fi-icon-btn",u.type="button",u.innerHTML=i.options.deleteCustomBlockButtonIconHtml,u.addEventListener("click",()=>t.chain().setNodeSelection(n()).deleteSelection().run()),c.appendChild(u)}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),u=>u.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",N(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,C0=(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}}},kd=(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 u=Ye(y=>y.type===i.nodes.details)(s);if(!u)return!1;let d=kn(u.node,y=>y.type===i.nodes.detailsContent);if(!d.length||yo(u.start+d[0].pos+1,t))return!1;let h=n.doc.resolve(u.pos+u.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},Cd=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 : u } ) => { if ( u && a && s ) { let d = a . filter ( f => l . includes ( f . type . name ) ) ; c . ensureMarks ( d ) } return ! 0 } ) . run ( ) } ) ] ) } } , addKeyboardShortcuts ( ) { return { "Mod-Enter" : ( ) => this . editor . commands . setHardBreak ( ) , "Shift-Enter" : ( ) => this . editor . commands . setHardBreak ( ) } } } ) , Ad = M0 ; var T0 = 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 ] } ` , N ( 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 } } ) ) } } ) , Ed = T0 ; var A0 = /(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))$/ , E0 = /(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))/g , O0 = ne . 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" , N ( 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 : A0 , type : this . type } ) ] } , addPasteRules ( ) { return [ Ce ( { find : E0 , type : this . type } ) ] } } ) , Od = O0 ; var N0 = H . create ( { name : "horizontalRule" , addOptions ( ) { return { HTMLAttributes : { } } } , group : "block" , parseHTML ( ) { return [ { tag : "hr" } ] } , renderHTML ( { HTMLAttributes : t } ) { return [ "hr" , N ( this . options . HTMLAttributes , t ) ] } , addCommands ( ) { return { setHorizontalRule : ( ) => ( { chain : t , state : e } ) => { if ( ! od ( 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 ( O . create ( i . doc , a . pos + 1 ) ) : a . nodeAfter . isBlock ? i . setSelection ( P . create ( i . doc , a . pos ) ) : i . setSelection ( O . create ( i . doc , a . pos ) ) ; else { let u = ( l = a . parent . type . contentMatch . defaultType ) == null ? void 0 : l . create ( ) ; u && ( i . insert ( c , u ) , i . setSelection ( O . create ( i . doc , c + 1 ) ) ) } i . scrollIntoView ( ) } return ! 0 } ) . run ( ) } } } , addInputRules ( ) { return [ fo ( { find : /^(?:---|—-|___\s|\*\*\*\s)$/ , type : this . type } ) ] } } ) , Nd = N0 ; var R0 = /(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))$/ , D0 = /(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))/g , P0 = /(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))$/ , I0 = /(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))/g , L0 = ne . 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" , N ( this . options . HTMLAttributes , t ) , 0 ] } , addCommands ( ) { return { setItalic : ( ) => ( { commands : t
` ,j0=" \u FE0F",K0=" \u 200D",ul=" \u FFFC",bo=null,xo=null;function U0(t=[]){let e={};ve.groups=e;let n=new ve;bo==null&&(bo=zd(H0)),xo==null&&(xo=zd(F0)),M(n,"'",zo),M(n,"{",sr),M(n,"}",lr),M(n,"[",ko),M(n,"]",Co),M(n,"(",vo),M(n,")",Mo),M(n,"<",To),M(n,">",Ao),M(n," \u FF08",Eo),M(n," \u FF09",Oo),M(n," \u 300C",No),M(n," \u 300D",Ro),M(n," \u 300E",Do),M(n," \u 300F",Po),M(n," \u FF1C",Io),M(n," \u FF1E",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,'" ' , vl ) , M ( n , "/" , tt ) , M ( n , ";" , Ml ) , M ( n , "~" , ur ) , M ( n , "_" , Jo ) , M ( n , "\\" , Fo ) , M ( n , "\u30FB" , jd ) ; let r = ee ( n , yt , wl , { [ fl ] : ! 0 } ) ; ee ( r , yt , r ) ; let o = ee ( r , gt , _d , { [ ir ] : ! 0 } ) , i = ee ( r , rr , Wd , { [ or ] : ! 0 } ) , s = ee ( n , gt , bt , { [ hl ] : ! 0 } ) ; ee ( s , yt , o ) , ee ( s , gt , s ) , ee ( o , yt , o ) , ee ( o , gt , o ) ; let l = ee ( n , rr , gl , { [ pl ] : ! 0 } ) ; ee ( l , gt ) , ee ( l , yt , i ) , ee ( l , rr , l ) , ee ( i , yt , i ) , ee ( i , gt ) , ee ( i , rr , i ) ; let a = M ( n , cl , Sl , { [ sl ] : ! 0 } ) , c = M ( n , Bd , xl , { [ sl ] : ! 0 } ) , u = ee ( n , al , xl , { [ sl ] : ! 0 } ) ; M ( n , ul , u ) , M ( c , cl , a ) , M ( c , ul , u ) , ee ( c , al , u ) , M ( u , Bd ) , M ( u , cl ) , ee ( u , al , u ) , M ( u , ul , u ) ; let d = ee ( n , ll , Kd , { [ Vd ] : ! 0 } ) ; M ( d , "#" ) , ee ( d , ll , d ) , M ( d , j0 , d ) ; let f = M ( d , K0 ) ; M ( f , "#" ) , ee ( f , ll , d ) ; 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" , vn , bt , h ) , Nt ( n , "https" , vn , bt , h ) , Nt ( n , "ftp" , vn , bt , h ) , Nt ( n , "ftps" , vn , bt , h ) , Qt ( So , { scheme : ! 0 , ascii : ! 0 } , e ) , Qt ( vn , { 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 ] ? { [ $0 ] : ! 0 } : { [ V0 ] : ! 0 } ; g . indexOf ( "-" ) >= 0 ? b [ ml ] = ! 0 : gt . test ( g ) ? yt . test ( g ) ? b [ ir ] = ! 0 : b [ hl ] = ! 0 : b [ fl ] = ! 0 , Ld ( n , g , g , b ) } return Ld ( n , "localhost" , dr , { ascii : ! 0 } ) , n . jd = new ve ( qo ) , { start : n , tokens : Object . assign ( { groups : e } , Ud ) } } function Jd ( t , e ) { let n = J0 ( 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 , u = null , d = - 1 , f = - 1 ; for ( ; s < r && ( a = l . go ( n [ s ] ) ) ; ) l = a , l . accepts ( ) ? ( d = 0 , f = 0 , u = l ) : d >= 0 && ( d += n [ s ] . length , f ++ ) , c += n [ s ] . length , i += n [ s ] . length , s ++ ; i -= d , s -= f , c -= d , o . push ( { t : u . t , v : e . slice ( i - c , i ) , s : i - c , e : i } ) } return o } function J0 ( 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 ve ( r ) , i . jr = o . slice ( ) , t . j [ a ] = i ) , t = i } return i = new ve ( n ) , i . jr = o . slice ( ) , t . j [ e [ s - 1 ] ] = i , i } function zd ( 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 : Hd , formatHref : Hd , 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 Hd ( t ) { return t } function qd ( t , e ) { this . t = "token" , this . v = t , this . tk = e } qd . 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
1. Must only contain digits , lowercase ASCII letters or "-"
2. Cannot start or end with "-"
3. "-" cannot repeat ` );X.customSchemes.push([t,e])}function Z0(){X.scanner=U0(X.customSchemes);for(let t=0;t<X.tokenQueue.length;t++)X.tokenQueue[t][1]({scanner:X.scanner});X.parser=G0(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||Z0(),Y0(X.parser.start,t,Jd(X.scanner.start,t))}Yo.scan=Jd;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 - \x A0 \u 1680 \u 180E \u 2000- \u 2029 \u 205F \u 3000]",eb=new RegExp(El),tb=new RegExp( ` $ { El } $ ` ),nb=new RegExp(El,"g");function rb(t){return t.length===1?t[0].isLink:t.length===3&&t[1].isLink?["()","[]"].includes(t[0].value+t[2].value):!1}function ob(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 u=Ou(r.doc,c,h=>h.isTextblock),d,f;if(u.length>1)d=u[0],f=r.doc.textBetween(d.pos,d.pos+d.node.nodeSize,void 0," ");else if(u.length){let h=r.doc.textBetween(c.from,c.to," "," ");if(!tb.test(h))return;d=u[0],f=r.doc.textBetween(d.pos,c.to,void 0," ")}if(d&&f){let h=f.split(eb).filter(Boolean);if(h.length<=0)return!1;let p=h[h.length-1],m=d.pos+f.lastIndexOf(p);if(!p)return!1;let g=Yo(p).map(y=>y.toObject(t.defaultProtocol));if(!rb(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 ib(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 u=r.target,d=[];for(;u.nodeName!=="DIV";)d.push(u),u=u.parentNode;s=d.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 sb(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(nb,"").match(new RegExp( ` ^ ( ? : ( ? : $ { n . join ( "|" ) } ) : | [ ^ a - z ] | [ a - z0 - 9 + . - ] + ( ? : [ ^ a - z + . - : ] | $ ) ) ` ,"i"))}var lb=ne.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(){Gd()},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:thi