@meowdown/core 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -55,7 +55,7 @@ Selection colors are standalone variables, not derived from `--meowdown-accent`,
55
55
 
56
56
  Tags (`#tag`) render as pills via the `.md-tag` class, tinted from `--meowdown-accent`.
57
57
 
58
- Wikilinks (`[[target]]`/`[[target|alias]]`) render in place via a mark view as an immutable label (the alias, or the target when there is no alias), with the raw source hidden in hide and focus modes and shown dimmed in show mode. The label uses the `.md-wikilink-label` class and the raw source the `.md-wikilink-source` class, both dashed-underlined and colored by `--meowdown-accent`. In hide mode the link is a single caret stop: arrowing onto it selects the whole source (ringed with `--meowdown-node-outline`), and Backspace/Delete remove it as a unit. Wire click navigation with `defineWikilinkClickHandler(({ target, event }) => ...)` (or `@meowdown/react`'s `onWikilinkClick` prop).
58
+ Wikilinks (`[[target]]`/`[[target|alias]]`) render in place via a mark view as an immutable label (the alias, or the target when there is no alias), with the raw source hidden in hide and focus modes and shown dimmed in show mode. The label uses the `.md-wikilink-label` class and the raw source the `.md-wikilink-source` class, both dashed-underlined and colored by `--meowdown-accent`. In every mark mode the link is a single immutable caret stop: arrowing onto it selects the whole source (ringed with `--meowdown-node-outline` in hide and focus, the native selection over the visible source in show), and Backspace/Delete remove it as a unit. Wire click navigation with `defineWikilinkClickHandler(({ target, event }) => ...)` (or `@meowdown/react`'s `onWikilinkClick` prop).
59
59
 
60
60
  Markdown links (`[text](url)`) render the label as an `<a href>` with the `.md-link` class, colored by `--meowdown-accent`; the `[`, `]`, and `(url)` syntax dims in show mode and hides in hide and focus modes. Wire click handling with `defineLinkClickHandler(({ href, event }) => ...)` (or `@meowdown/react`'s `onLinkClick` prop). A plain click inside a link the caret already sits in just places the caret; `Mod`-click always fires.
61
61
 
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import{Priority as e,Priority as t,createMarkBuilders as n,createNodeBuilders as r,defineBaseCommands as i,defineBaseKeymap as a,defineCommands as o,defineHistory as s,defineKeymap as c,defineMarkSpec as l,defineMarkView as u,definePlugin as d,getMarkRange as f,getNodeType as p,isApple as ee,isAtBlockStart as te,isTextSelection as m,toggleNode as ne,union as h,unsetBlockType as re,withPriority as ie,withPriority as g,withSkipCodeBlock as ae}from"@prosekit/core";import{defineBlockquote as oe}from"@prosekit/extensions/blockquote";import{defineCodeBlock as se,defineCodeBlockHighlight as ce}from"@prosekit/extensions/code-block";import{defineDoc as le}from"@prosekit/extensions/doc";import{defineGapCursor as ue}from"@prosekit/extensions/gap-cursor";import{defineHorizontalRule as de}from"@prosekit/extensions/horizontal-rule";import{defineList as fe}from"@prosekit/extensions/list";import{defineModClickPrevention as pe}from"@prosekit/extensions/mod-click-prevention";import{defineParagraph as me}from"@prosekit/extensions/paragraph";import{defineText as he}from"@prosekit/extensions/text";import{defineVirtualSelection as ge}from"@prosekit/extensions/virtual-selection";import{Plugin as _,PluginKey as v,TextSelection as y}from"@prosekit/pm/state";import{Decoration as _e,DecorationSet as b}from"@prosekit/pm/view";import{LanguageDescription as ve}from"@codemirror/language";import{languages as x}from"@codemirror/language-data";import{classHighlighter as ye}from"@lezer/highlight";import{createParser as be}from"prosemirror-highlight/lezer";import{defineHeadingCommands as xe,defineHeadingInputRule as Se,defineHeadingSpec as Ce}from"@prosekit/extensions/heading";import{ReplaceStep as we,Step as S,StepResult as Te,Transform as Ee}from"@prosekit/pm/transform";import{Mark as De}from"@prosekit/pm/model";import{GFM as Oe,parser as ke}from"@lezer/markdown";import{once as Ae}from"@ocavue/utils";import{defineTableCellSpec as je,defineTableCommands as Me,defineTableDropIndicator as Ne,defineTableEditingPlugin as Pe,defineTableHeaderCellSpec as Fe,defineTableRowSpec as Ie,defineTableSpec as Le}from"@prosekit/extensions/table";import{closeHistory as Re}from"@prosekit/pm/history";import{definePlaceholder as ze}from"@prosekit/extensions/placeholder";import{defineReadonly as Be}from"@prosekit/extensions/readonly";function C(e,t,n){let r=e.doc.content.size;if(t<0||t>r)return;let i=e.doc.resolve(t);if(!(!i.parent.isTextblock||i.parent.type.spec.code))return f(i,n)}const Ve=new Set([`mdStrong`,`mdEm`,`mdCode`,`mdDel`,`mdLinkText`,`mdLinkUri`,`mdWikilinkSource`,`mdImageSource`]),He=new Set([`mdMark`,`mdLinkUri`]),Ue=new Set([`mdMark`,`mdLinkUri`]),We=new Set([`mdImageSource`,`mdWikilinkSource`]),w=new Set([`mdLinkText`,`mdLinkUri`]),Ge=new Set([`mdStrong`,`mdEm`,`mdCode`,`mdDel`,`mdWikilinkSource`]),Ke=new v(`mark-mode`);function qe(e){return new _({key:Ke,state:{init:()=>e,apply:(e,t)=>t},props:{attributes:{"data-mark-mode":e},decorations:e===`focus`?e=>Ze(e):void 0,clipboardTextSerializer:e===`show`?void 0:Xe}})}function Je(e){return d(qe(e))}function Ye(e){return Ke.getState(e.state)}function Xe(e){let t=[];return e.content.forEach(e=>{let n=[];e.descendants(e=>!e.isText||!e.text?!0:(!e.marks.some(e=>We.has(e.type.name))&&e.marks.some(e=>Ue.has(e.type.name))||n.push(e.text),!1)),t.push(n.join(``))}),t.join(`
2
- `)}function Ze(e){let{$anchor:t,empty:n}=e.selection;if(!n)return b.empty;let r=t.parent;if(!r.isTextblock)return;let i=t.start(),a=t.parentOffset,o=Qe(r,a);if(o.size===0)return b.empty;let s=[],c=new Set,l=!1;for(let e of o)if(w.has(e)){if(l)continue;l=!0,et(r,i,a,s,c)}else $e(r,i,e,a,s,c);let u=s.map(([e,t])=>_e.inline(e,t,{class:`show`}));return b.create(e.doc,u)}function Qe(e,t){let n=new Set,r=0;return e.forEach(e=>{let i=r+e.nodeSize;if(t>=r&&t<=i)for(let t of e.marks){let e=t.type.name;Ve.has(e)&&n.add(e)}r=i}),n}function $e(e,t,n,r,i,a){let o=t,s=0,c=-1,l=-1;e.forEach(u=>{let d=u.marks.some(e=>e.type.name===n);d&&c===-1&&(c=o,l=s),!d&&c!==-1&&(r>=l&&r<=s&&T(e,t,c,o,i,a),c=-1,l=-1),o+=u.nodeSize,s+=u.nodeSize}),c!==-1&&r>=l&&r<=s&&T(e,t,c,o,i,a)}function et(e,t,n,r,i){let a=e.childCount;if(a===0)return;let o=-1,s=0;for(let t=0;t<a;t++){let r=e.child(t),i=s+r.nodeSize;if(n>=s&&n<=i&&r.marks.some(e=>w.has(e.type.name))){o=t;break}s=i}if(o===-1)return;let c=o;for(;c>0&&tt(e.child(c-1));)c--;let l=o;for(;l<a-1&&tt(e.child(l+1));)l++;let u=t;for(let t=0;t<c;t++)u+=e.child(t).nodeSize;let d=u;for(let t=c;t<=l;t++)d+=e.child(t).nodeSize;T(e,t,u,d,r,i)}function tt(e){let t=!1,n=!1,r=!1;for(let i of e.marks){let e=i.type.name;e===`mdMark`?t=!0:w.has(e)?n=!0:Ge.has(e)&&(r=!0)}return!!(n||t&&!r)}function T(e,t,n,r,i,a){let o=t;e.forEach(e=>{let t=o,s=o+e.nodeSize;if(t>=n&&s<=r)for(let n of e.marks){let e=n.type.name;if(He.has(e)){let e=`${t}_${s}`;a.has(e)||(a.add(e),i.push([t,s]));break}}o=s})}function E(e,t,n){for(let r of n){let n=C(e,t,r);if(n)return n}}function D(e,t,n){let r=E(e,t,n);return r&&r.to===t?r:void 0}function O(e,t,n){let r=E(e,t,n);return r&&r.from===t?r:void 0}function k(e,t){let{from:n,to:r,empty:i}=e.selection;if(i)return;let a=E(e,n,t);return a&&a.from===n&&a.to===r?a:void 0}function A(e){return!!e&&Ye(e)===`hide`}function nt(e,t){return y.create(e.doc,t.from,t.to)}function rt(e){return(t,n,r)=>{if(!A(r)||!m(t.selection))return!1;let i=t.selection;if(i.empty){let r=O(t,i.from,e);if(r)return n?.(t.tr.setSelection(nt(t,r))),!0;if(D(t,i.from,e)){let e=t.doc.resolve(i.from);return i.from>=e.end()?!1:(n?.(t.tr.setSelection(y.create(t.doc,i.from+1))),!0)}return!1}let a=k(t,e);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.to))),!0):!1}}function it(e){return(t,n,r)=>{if(!A(r)||!m(t.selection))return!1;let i=t.selection;if(i.empty){let r=D(t,i.from,e);return r?(n?.(t.tr.setSelection(nt(t,r))),!0):!1}let a=k(t,e);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.from))),!0):!1}}function at(e){return(t,n,r)=>{if(!A(r)||!t.selection.empty)return!1;let i=t.selection.from,a=D(t,i,e);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!O(t,i,e)||i<=t.doc.resolve(i).start()?!1:(n?.(t.tr.delete(i-1,i)),!0)}}function ot(e){return(t,n,r)=>{if(!A(r)||!t.selection.empty)return!1;let i=t.selection.from,a=O(t,i,e);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!D(t,i,e)||i>=t.doc.resolve(i).end()?!1:(n?.(t.tr.delete(i,i+1)),!0)}}function st(e,t){return new _({key:new v(`atomic-mark-selection-${t}`),props:{decorations:n=>{let r=k(n,e);if(r)return b.create(n.doc,[_e.inline(r.from,r.to,{class:t})])}}})}function ct({markNames:e,selectedClass:n}){return h(g(c({ArrowRight:rt(e),ArrowLeft:it(e),Backspace:at(e),Delete:ot(e)}),t.high),d(st(e,n)))}const j=new Map;async function lt(e){let t=ve.matchLanguageName(x,e,!0);if(!t){j.set(e,null);return}let n=t.support;if(!n)try{n=await t.load()}catch(t){console.error(`[meowdown] Failed to load language "${e}":`,t),j.set(e,null)}if(j.has(e))return;if(!n){j.set(e,null);return}let r=be({parse:e=>n.language.parser.parse(e.content),highlighter:ye});j.set(e,r)}const ut=e=>{let t=e.language?.trim();if(!t)return[];let n=j.get(t);return n?n(e):n===null?[]:lt(t)};function dt(){return ce({parser:ut,nodeTypes:[`codeBlock`]})}function M(e){return ae(ne({type:`heading`,attrs:{level:e}}))}const ft=(e,t,n)=>te(e,n)?.parent.type.name===`heading`?re()(e,t,n):!1;function pt(){return c({"Mod-1":M(1),"Mod-2":M(2),"Mod-3":M(3),"Mod-4":M(4),"Mod-5":M(5),"Mod-6":M(6),Backspace:ft})}function mt(){return h(Ce(),Se(),xe(),pt())}function ht(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function gt(e,t){let[n,r,i]=t;return[n,r,i.map(t=>De.fromJSON(e,t))]}var N=class e extends S{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return Te.ok(e);let t=e.content.size,n;for(let[r,i,a]of this.chunks){if(r>=i)continue;let o=Math.max(0,Math.min(r,t)),s=Math.max(o,Math.min(i,t));o>=s||e.nodesBetween(o,s,(t,r)=>{if(!t.isText)return!0;let i=Math.max(o,r),c=Math.min(s,r+t.nodeSize);if(i>=c)return!1;let l=t.marks;for(let t of l)t.isInSet(a)||(n??=new Ee(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new Ee(e),n.addMark(i,c,t));return!1})}return Te.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return _t;let t=this.chunks[0][0],n=this.chunks[0][1];for(let[,e]of this.chunks)e>n&&(n=e);let r=e.content.size,i=Math.max(0,Math.min(t,r)),a=Math.max(i,Math.min(n,r));return new we(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(ht)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>gt(t,e)))}};S.jsonID(`batchSetMark`,N);const _t=new N([]),vt=new Set([`com`,`br`,`net`,`jp`,`org`,`in`,`de`,`ru`,`it`,`fr`]),yt=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;function bt(e){let t=e.indexOf(`/`);return t===-1?e:e.slice(0,t)}function xt(e){let t=e.split(`.`);if(t.length<2)return!1;let n=t[t.length-1].toLowerCase();if(!vt.has(n)||t[t.length-2].length<3)return!1;for(let e of t)if(e.length>63||!yt.test(e))return!1;return!0}const St=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+(?:\/[^\s<]*)?/i,Ct=/[\s(*_~]/;function wt(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45}function Tt(e,t,n){let r=0;for(let i=0;i<t;i++)e[i]===n&&r++;return r}function Et(e){let t=e.length;for(;;){let n=e[t-1];if(/[?!.,:*_~]/.test(n)||n===`)`&&Tt(e,t,`)`)>Tt(e,t,`(`))t--;else if(n===`;`){let n=/&(?:#\d+|#x[a-f\d]+|\w+);$/.exec(e.slice(0,t));if(!n)break;t=n.index}else break}return t}const Dt={parseInline:[{name:`BareAutolink`,before:`Link`,parse(e,t,n){if(!wt(t)||e.hasOpenLink)return-1;let r=e.slice(n-1,n);if(r!==``&&!Ct.test(r))return-1;let i=St.exec(e.slice(n,e.end));if(!i)return-1;let a=Et(i[0]);return a===0||!xt(bt(i[0].slice(0,a)))?-1:e.addElement(e.elt(`URL`,n,n+a))}}]};function Ot(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45||e===95||e>127&&/[\p{L}\p{N}]/u.test(String.fromCharCode(e))}function kt(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const At={defineNodes:[{name:`Hashtag`}],parseInline:[{name:`Hashtag`,parse(e,t,n){if(t!==35||!/\s|^$/.test(e.slice(n-1,n)))return-1;let r=n+1,i=!1;for(;r<e.end;){let t=e.char(r);if(!Ot(t))break;i||=kt(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},jt={defineNodes:[{name:`Wikilink`},{name:`WikilinkMark`}],parseInline:[{name:`Wikilink`,before:`Link`,parse(e,t,n){if(t!==91||e.char(n+1)!==91)return-1;let r=!1;for(let t=n+2;t<e.end-1;t++){let i=e.char(t);if(i===93){if(e.char(t+1)!==93||!r)return-1;let i=t+2;return e.addElement(e.elt(`Wikilink`,n,i,[e.elt(`WikilinkMark`,n,n+2),e.elt(`WikilinkMark`,t,i)]))}if(i===91||i===10)return-1;i!==32&&i!==9&&(r=!0)}return-1}}]};function Mt(e){return e.end}const P=ke.configure([Oe,At,jt,Dt]),Nt=P.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:Mt}]});function F(e){return P.parseInline(e,0)}function I(e,t,n=[]){for(let r of e)t(r)&&n.push(r),I(r.children,t,n);return n}function Pt(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const L=Pt(P);function Ft(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!e[n].eq(t[n]))return!1;return!0}function It(e){let t=e.replace(/^\[\[/,``).replace(/\]\]$/,``),n=t.indexOf(`|`);return n<0?{target:t.trim(),display:``}:{target:t.slice(0,n).trim(),display:t.slice(n+1).trim()}}function Lt(){return e=>{let t=e.attrs,n=document.createElement(`span`);n.className=`md-wikilink-view`;let r=document.createElement(`span`);n.appendChild(r);let i=document.createElement(`span`);return i.className=`md-wikilink-label`,i.contentEditable=`false`,i.dataset.testid=`wikilink`,i.textContent=t.display||t.target,n.appendChild(i),{dom:n,contentDOM:r,ignoreMutation:e=>!r.contains(e.target)}}}function Rt(){return u({name:`mdWikilinkView`,constructor:Lt()})}const R=new Map([[L.Emphasis,`mdEm`],[L.StrongEmphasis,`mdStrong`],[L.InlineCode,`mdCode`],[L.Strikethrough,`mdDel`],[L.EmphasisMark,`mdMark`],[L.CodeMark,`mdMark`],[L.LinkMark,`mdMark`],[L.StrikethroughMark,`mdMark`],[L.URL,`mdLinkUri`],[L.Hashtag,`mdTag`],[L.WikilinkMark,`mdMark`]]);function zt(e,t){let n=F(t),r=[];return z(n,[],0,t.length,t,e,r),r}function Bt(e){if(/^[a-z][a-z0-9+.-]*:/i.test(e))return e;if(/^[^\s@]+@[^\s@]+$/.test(e))return`mailto:${e}`;if(/^www\./i.test(e)||xt(bt(e)))return`https://${e}`}function z(e,t,n,r,i,a,o){let s=n;for(let n of e){if(n.from>s&&H(o,s,n.from,t),n.type===L.Link)B(n,t,i,a,o);else if(n.type===L.Image)Vt(n,t,i,a,o);else if(n.type===L.Wikilink)V(n,t,i,a,o);else if(n.type===L.URL){let e=Bt(i.slice(n.from,n.to)),r=e?a.mdLinkText.create({href:e}):a.mdLinkUri.create();H(o,n.from,n.to,[...t,r])}else{let e=R.get(n.type),r=e?[...t,a[e].create()]:t;n.children.length===0?H(o,n.from,n.to,r):z(n.children,r,n.from,n.to,i,a,o)}s=n.to}s<r&&H(o,s,r,t)}function B(e,t,n,r,i){let a=-1,o=null,s=0;for(let t of e.children)t.type===L.LinkMark?(s++,s===2&&(a=t.from)):t.type===L.URL&&o===null&&(o=t);let c=o?n.slice(o.from,o.to):``,l=c?r.mdLinkText.create({href:c}):null,u=e=>a>=0&&e<a&&l!==null,d=e.from;for(let a of e.children){if(a.from>d){let e=u(d)?[...t,l]:t;H(i,d,a.from,e)}let e=u(a.from)?[...t,l]:t;if(a.type===L.Wikilink){V(a,e,n,r,i),d=a.to;continue}let o=R.get(a.type),s=o?[...e,r[o].create()]:e;a.children.length===0?H(i,a.from,a.to,s):z(a.children,s,a.from,a.to,n,r,i),d=a.to}d<e.to&&H(i,d,e.to,t)}function Vt(e,t,n,r,i){let a=e.children.find(e=>e.type===L.URL);if(!a){B(e,t,n,r,i);return}let o=e.children.filter(e=>e.type===L.LinkMark),s=n.slice(a.from,a.to),c=o.length>=2?n.slice(o[0].to,o[1].from):``,l=r.mdImageSource.create({src:s,alt:c}),u=r.mdImageView.create({src:s,alt:c}),d=e.to-1,f=e=>e>=d?[...t,l,u]:[...t,l],p=e.from;for(let t of e.children){t.from>p&&H(i,p,t.from,f(p));let e=R.get(t.type),a=e?[...f(t.from),r[e].create()]:f(t.from);t.children.length===0?H(i,t.from,t.to,a):z(t.children,a,t.from,t.to,n,r,i),p=t.to}p<e.to&&H(i,p,e.to,f(p))}function V(e,t,n,r,i){let{target:a,display:o}=It(n.slice(e.from,e.to)),s=r.mdWikilinkSource.create({target:a}),c=r.mdWikilinkView.create({target:a,display:o}),l=e.to-1,u=e=>e>=l?[...t,s,c]:[...t,s],d=e.from;for(let t of e.children){t.from>d&&H(i,d,t.from,u(d));let e=r.mdMark.create();t.from<l&&t.to>l?(H(i,t.from,l,[...u(t.from),e]),H(i,l,t.to,[...u(l),e])):H(i,t.from,t.to,[...u(t.from),e]),d=t.to}d<e.to&&H(i,d,e.to,u(d))}function H(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&Ft(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const Ht=Ae(()=>{let e=Mn().schema;if(e==null)throw Error(`Unexpected empty schema`);return e}),Ut=Ae(()=>r(Ht())),U=`meowdown_mark_builders`;function Wt(e){let t=e.cached[U];if(t)return t;let r=n(e);return e.cached[U]=r,r}const W=`inline-marks-applied`,Gt=new WeakMap;let Kt=0,qt=0;function Jt(e,t,n){let r=Gt.get(e);if(r?qt++:(Kt++,r=zt(Wt(n),e.textContent),Gt.set(e,r)),t===0)return r;let i=[];for(let[e,n,a]of r)i.push([e+t,n+t,a]);return i}function Yt(e,t){let n=1/0,r=-1/0;for(let t of e)for(let e of t.mapping.maps)e.forEach((e,t,i,a)=>{i<n&&(n=i),a>r&&(r=a)});let i=t.doc.content.size;return n>r?{from:0,to:i}:{from:Math.max(0,n),to:Math.min(i,r)}}function Xt(e,t){let n=[];return e.doc.nodesBetween(t.from,t.to,(t,r)=>{if(t.type.spec.code)return!1;if(!t.isTextblock)return!0;if(t.childCount===0)return!1;let i=Jt(t,r+1,e.schema);return i.length>0&&n.push(...i),!1}),n}function Zt(){return new _({key:new v(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(W))return null;let r=Xt(n,Yt(e,n));if(r.length===0)return null;let i=n.tr.step(new N(r));return i.setMeta(W,!0),i.setMeta(`addToHistory`,!1),i},view(e){return e.dispatch(Qt(e.state)),{}}})}function Qt(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function $t(){return d(Zt())}function en(){return l({name:`mdImageView`,inclusive:!1,attrs:{src:{default:``},alt:{default:``}},toDOM:()=>[`span`,{class:`md-image-anchor`},0],parseDOM:[{tag:`span.md-image-anchor`}]})}function tn(){return l({name:`mdImageSource`,inclusive:!1,attrs:{src:{default:``},alt:{default:``}},toDOM:()=>[`span`,{class:`md-image-source`},0],parseDOM:[{tag:`span.md-image-source`}]})}function nn(){return l({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function rn(){return l({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function an(){return l({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function on(){return l({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function sn(){return l({name:`mdLinkText`,inclusive:!1,attrs:{href:{default:``}},toDOM:e=>[`a`,{class:`md-link`,href:e.attrs.href},0],parseDOM:[{tag:`a`,getAttrs:e=>({href:e.getAttribute(`href`)??``})}]})}function cn(){return l({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function ln(){return l({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function un(){return l({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function dn(){return l({name:`mdWikilinkSource`,inclusive:!1,attrs:{target:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink-source`},0],parseDOM:[{tag:`span.md-wikilink-source`}]})}function fn(){return l({name:`mdWikilinkView`,inclusive:!1,attrs:{target:{default:``},display:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink-anchor`},0],parseDOM:[{tag:`span.md-wikilink-anchor`}]})}function pn(){return h(nn(),rn(),an(),on(),sn(),cn(),ln(),un(),dn(),fn(),tn(),en())}function mn(e,t=0){let n=t,r=0;for(let t=0;t<e.length;t++)e.charCodeAt(t)===96?(r++,r>n&&(n=r)):r=0;return n}const G={em:{node:L.Emphasis,delim:`*`},strong:{node:L.StrongEmphasis,delim:`**`},code:{node:L.InlineCode,delim:"`"},del:{node:L.Strikethrough,delim:`~~`}},hn=new Set([L.EmphasisMark,L.CodeMark,L.LinkMark,L.StrikethroughMark]);function K(e){return[e.children[0],e.children.at(-1)]}function gn(e){let{type:t,children:n}=e;if(t===L.Emphasis||t===L.StrongEmphasis||t===L.Strikethrough)return[n[0].to,n.at(-1).from];if(t===L.Link||t===L.Image){let e=n.find((e,t)=>t>0&&e.type===L.LinkMark);return e?[n[0].to,e.from]:null}return null}function q(e,t,n){for(let r of e){if(r.to<=t||r.from>=n||t<=r.from&&r.to<=n)continue;let i=gn(r);return i&&i[0]<=t&&n<=i[1]?q(r.children,t,n):q(e,Math.min(t,r.from),Math.max(n,r.to))}return[t,n]}function _n(e,t,n){for(let r of e)if(!(r.to<=t||r.from>=n)&&(t>r.from||r.to>n))return _n(e,Math.min(t,r.from),Math.max(n,r.to));return[t,n]}const J=e=>e===` `||e===` `;function vn(e,t,n){for(;t<n&&J(e[t]);)t++;for(;n>t&&J(e[n-1]);)n--;return[t,n]}function yn(e,t,n,r){let i=I(F(e),e=>e.type===r.node||hn.has(e.type));for(let r=t;r<n;r++)if(!J(e[r])&&i.every(e=>!(e.from<=r&&r<e.to)))return!1;return!0}function bn(e,t,n,r,i){let a=F(e),o=I(a,e=>e.type===r.node);return i?Cn(e,o,t,n):xn(e,a,o,t,n,r)}function xn(e,t,n,r,i,a){for(let e=0;e!==i-r;){e=i-r,[r,i]=q(t,r,i);for(let e of n)e.to===r&&(r=e.from),e.from===i&&(i=e.to)}let o=[];for(let e of n)if(r<=e.from&&e.to<=i){let[t,n]=K(e);o.push({from:t.from,to:t.to,insert:``}),o.push({from:n.from,to:n.to,insert:``})}let[s,c]=Sn(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function Sn(e,t,n,r,i){if(i.node!==L.InlineCode)return[i.delim,i.delim];let a=e.slice(t,n);for(let e of[...r].sort((e,t)=>t.from-e.from))a=a.slice(0,e.from-t)+a.slice(e.to-t);let o="`".repeat(mn(a)+1),s=a.startsWith("`")||a.endsWith("`")?` `:``;return[o+s,s+o]}function Cn(e,t,n,r){let i=[];for(let a of t){if(a.to<=n||a.from>=r)continue;let[t,o]=K(a),s=Math.max(n,t.to),c=Math.min(r,o.from);for(s>=c&&([s,c]=[t.to,o.from]),[s,c]=_n(a.children.slice(1,-1),s,c);s>t.to&&J(e[s-1]);)s--;for(;c<o.from&&J(e[c]);)c++;s>t.to?i.push({from:s,to:s,insert:e.slice(o.from,o.to)}):i.push({from:t.from,to:t.to,insert:``}),c<o.from?i.push({from:c,to:c,insert:e.slice(t.from,t.to)}):i.push({from:o.from,to:o.to,insert:``})}return i}function wn(e,t,n){let{delim:r}=n,i=r.length;if(e.slice(t-i,t)===r&&e.startsWith(r,t)&&e[t-i-1]!==r[0]&&e[t+i]!==r[0])return{kind:`unwrap`,from:t-i,to:t+i};let a=F(e),o=I(a,e=>e.type===n.node).findLast(e=>e.from<=t&&t<=e.to);if(o){let[e,n]=K(o);return{kind:`move`,pos:t===o.from?e.to:t===o.to?n.from:o.to}}return Tn(a,t)||e[t-1]===r[0]||e[t]===r[0]?null:{kind:`insert`,pos:t}}function Tn(e,t){for(let n of e)if(n.from<t&&t<n.to){let e=gn(n);return!e||t<e[0]||t>e[1]?!0:Tn(n.children,t)}return!1}function Y(e){return(t,n)=>{if(t.selection.empty)return En(e,t,n);let{from:r,to:i,anchor:a,head:o}=t.selection,s=[];t.doc.nodesBetween(r,i,(t,n)=>{if(t.type.spec.code)return!1;if(!t.isTextblock)return!0;let a=t.textContent,o=n+1,[c,l]=vn(a,Math.max(r-o,0),Math.min(i-o,a.length));return c<l&&s.push({text:a,base:o,from:c,to:l,active:yn(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>bn(t.text,t.from,t.to,e,c).map(e=>({from:e.from+t.base,to:e.to+t.base,insert:e.insert})));if(l.length===0)return!1;if(n){let e=t.tr;l.sort((e,t)=>t.from-e.from||t.to-e.to);for(let t of l)t.insert?e.insertText(t.insert,t.from,t.to):e.delete(t.from,t.to);e.setSelection(y.create(e.doc,e.mapping.map(a,a<=o?1:-1),e.mapping.map(o,o<a?1:-1))),n(e.scrollIntoView())}return!0}}function En(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=wn(i.textContent,r.parentOffset,e);if(!a)return!1;if(n){let i=r.start(),o=t.tr;a.kind===`unwrap`&&o.delete(i+a.from,i+a.to),a.kind===`move`&&o.setSelection(y.create(o.doc,i+a.pos)),a.kind===`insert`&&(o.insertText(e.delim+e.delim,i+a.pos),o.setSelection(y.create(o.doc,i+a.pos+e.delim.length))),n(o.scrollIntoView())}return!0}function Dn(){return o({toggleEm:()=>Y(G.em),toggleStrong:()=>Y(G.strong),toggleCode:()=>Y(G.code),toggleDel:()=>Y(G.del)})}function On(){return c({"Mod-b":Y(G.strong),"Mod-i":Y(G.em),"Mod-e":Y(G.code),"Mod-Shift-x":Y(G.del)})}function kn(){return h(Dn(),On())}function An(){return h(Le(),Ie(),je(),Fe(),Pe({allowTableNodeSelection:!0}),Me(),Ne())}function jn(){return h(me(),le(),he(),oe(),fe(),mt(),An(),se(),de(),pn(),dt(),$t(),kn(),Rt(),ct({markNames:[`mdImageSource`,`mdWikilinkSource`],selectedClass:`md-atomic-selected`}),a(),i(),s(),ue(),ge(),pe())}function Mn(){return jn()}function X(e){let t;return d(new _({key:e.key,props:{handleDOMEvents:{mousedown:e=>{let{from:n,to:r,empty:i}=e.state.selection;return t={from:n,to:r,empty:i},!1}},handleClick:(n,r,i)=>{if(!i.target?.closest?.(e.selector))return!1;let a=e.findHitAt(n.state,r);return!a||!(ee?i.metaKey:i.ctrlKey)&&t?.empty&&t.from>=a.from&&t.to<=a.to?!1:(e.preventDefault&&i.preventDefault(),e.onClick(a.payload,i),!0)}}}))}const Nn=new v(`meowdown-wikilink-click`);function Pn(e,t){let n=C(e,t,`mdWikilinkSource`);if(!n)return;let{target:r}=n.mark.attrs;return{from:n.from,to:n.to,target:r}}function Fn(e){return X({key:Nn,selector:`.md-wikilink-label, .md-wikilink-source`,preventDefault:!1,findHitAt:(e,t)=>{let n=Pn(e,t);return n?{from:n.from,to:n.to,payload:n.target}:void 0},onClick:(t,n)=>e({target:t,event:n})})}const In=new v(`meowdown-link-click`);function Ln(e,t){let n=C(e,t,`mdLinkText`);if(n)return{from:n.from,to:n.to,href:n.mark.attrs.href}}function Rn(e){return X({key:In,selector:`.md-link`,preventDefault:!0,findHitAt:(e,t)=>{let n=Ln(e,t);return n?{from:n.from,to:n.to,payload:n.href}:void 0},onClick:(t,n)=>e({href:t,event:n})})}function zn(){return typeof window>`u`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}const Bn=/^(?:www\.|mobile\.)?(?:twitter\.com|x\.com)$/i,Vn=/\/status(?:es)?\/(\d+)/;function Hn(e){let t;try{t=new URL(e)}catch{return}if(Bn.test(t.hostname))return Vn.exec(t.pathname)?.[1]}const Un=e=>{let t=Hn(e);if(t)return{key:`tweet:${t}`,render:()=>{let e=zn()?`dark`:`light`,n=document.createElement(`iframe`);return n.src=`https://platform.twitter.com/embed/Tweet.html?id=${t}&theme=${e}&dnt=true`,n.title=`Tweet`,n.className=`md-embed md-embed-tweet`,n.dataset.testid=`tweet-embed`,n.loading=`lazy`,n.referrerPolicy=`strict-origin-when-cross-origin`,n.setAttribute(`frameborder`,`0`),Wn(n),n}}};function Wn(e){let t=t=>{if(t.source===e.contentWindow)try{let n=t.data?.[`twttr.embed`]?.params?.[0]?.height;typeof n==`number`&&(e.style.height=`${n}px`)}catch(e){console.warn(`[meowdown] failed to parse tweet resize message:`,e)}};window.addEventListener(`message`,t);let n=new MutationObserver(()=>{e.isConnected||(window.removeEventListener(`message`,t),n.disconnect())});n.observe(document.body,{childList:!0,subtree:!0})}const Gn=/^(?:www\.|m\.)?(?:youtube\.com|youtube-nocookie\.com)$/i,Kn=/^(?:www\.)?youtu\.be$/i,qn=/^[\w-]{11}$/;function Jn(e){let t;try{t=new URL(e)}catch{return}let n=null;if(Kn.test(t.hostname))n=t.pathname.slice(1);else if(Gn.test(t.hostname)){let[,e,r]=t.pathname.split(`/`);t.pathname===`/watch`?n=t.searchParams.get(`v`):(e===`shorts`||e===`embed`||e===`live`)&&(n=r??null)}if(!n||!qn.test(n))return;let r=t.searchParams.get(`start`)??t.searchParams.get(`t`),i=r?Yn(r):void 0;return{videoId:n,startSeconds:i}}function Yn(e){if(/^\d+$/.test(e))return Number(e);let t=/^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/.exec(e);if(!(!t||!t[1]&&!t[2]&&!t[3]))return Number(t[1]??0)*3600+Number(t[2]??0)*60+Number(t[3]??0)}const Xn=[e=>{let t=Jn(e);if(!t)return;let n=t.startSeconds?`?start=${t.startSeconds}`:``;return{key:`youtube:${t.videoId}:${t.startSeconds??0}`,render:()=>{let e=document.createElement(`iframe`);return e.src=`https://www.youtube-nocookie.com/embed/${t.videoId}${n}`,e.title=`YouTube video`,e.className=`md-embed md-embed-youtube`,e.dataset.testid=`youtube-embed`,e.loading=`lazy`,e.referrerPolicy=`strict-origin-when-cross-origin`,e.setAttribute(`frameborder`,`0`),e.allow=`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen`,e.allowFullscreen=!0,e}}},Un];function Zn(e){for(let t of Xn){let n=t(e);if(n)return n}}function Qn(e){return/^https?:\/\//i.test(e)?e:void 0}function $n(e,t,n){let r=Zn(e);if(r){let e=document.createElement(`span`);return e.className=`md-image-preview md-image-preview-embed`,e.appendChild(r.render()),e}let i=(n.resolveImageUrl??Qn)(e);if(!i)return;let a=document.createElement(`span`);a.className=`md-image-preview md-image-preview-img`,a.dataset.testid=`image-preview`;let o=document.createElement(`img`);return o.src=i,o.alt=t,o.draggable=!1,a.appendChild(o),a}function er(e){return t=>{let n=t.attrs,r=document.createElement(`span`);r.className=`md-image-view`;let i=document.createElement(`span`);i.className=`md-image-view-content`,r.appendChild(i);let a=$n(n.src,n.alt,e);return a&&(a.contentEditable=`false`,r.appendChild(a)),{dom:r,contentDOM:i,ignoreMutation:e=>!i.contains(e.target)}}}function tr(e){return e?Array.from(e.files).filter(e=>e.type.startsWith(`image/`)):[]}const nr=e=>{console.error(`[meowdown] failed to save pasted image:`,e)};async function rr(e,t,n,r=nr,i){let a=i;for(let i of t){let t;try{t=await n(i)}catch(e){r(e,i);continue}if(!t||e.isDestroyed)continue;let o=`![](${t})`,s=a==null?e.state.tr.insertText(o):e.state.tr.insertText(o,a);e.dispatch(s),a!=null&&(a+=o.length)}}function ir(e){return new _({key:new v(`image-input`),props:{handlePaste:(t,n)=>{let r=tr(n.clipboardData),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(rr(t,r,i,a),!0)},handleDrop:(t,n)=>{let r=tr(n.dataTransfer),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(rr(t,r,i,a,t.posAtCoords({left:n.clientX,top:n.clientY})?.pos),!0)}}})}function ar(e={}){return h(u({name:`mdImageView`,constructor:er(e)}),g(d(ir(e)),t.high))}const or=new v(`meowdown-image-click`);function sr(e,t){let n=C(e,t,`mdImageSource`);if(!n)return;let{src:r,alt:i}=n.mark.attrs;return{from:n.from,to:n.to,src:r,alt:i}}function cr(e){return d(new _({key:or,props:{handleClick:(t,n,r)=>{let i=r.target?.closest?.(`.md-image-preview`);if(!i)return!1;let a=i.closest(`.md-image-view`)?.querySelector(`.md-image-view-content`);if(!a)return!1;let o=sr(t.state,t.posAtDOM(a,0));return o?(e({src:o.src,alt:o.alt,event:r}),!0):!1}}}))}const lr=new v(`meowdown-embed-paste`);function ur(e){let t=e.trim();if(!(!t||/\s/.test(t)))return Zn(t)?t:void 0}function dr(e,t){let{from:n,to:r}=e.state.selection;e.dispatch(Re(e.state.tr.insertText(t,n,r)));let i=e.state.tr.insertText(`![](${t})`,n,n+t.length);e.dispatch(Re(i))}function fr(){return d(new _({key:lr,props:{handlePaste:(e,t)=>{let n=e.state.selection.$from.parent;if(!n.inlineContent||n.type.spec.code)return!1;let r=t.clipboardData?.getData(`text/plain`);if(!r)return!1;let i=ur(r);return i?(dr(e,i),!0):!1}}}))}const pr=(e,t)=>{let{$from:n,empty:r}=e.selection;if(!r||n.depth!==1||n.index(0)!==0||n.parent.type.name!==`heading`||n.parentOffset!==n.parent.content.size)return!1;if(t){let r=p(e.schema,`list`),i=p(e.schema,`paragraph`),a=r.create({kind:`bullet`},i.create()),o=n.after(),s=e.tr.insert(o,a);s.setSelection(y.create(s.doc,o+2)),t(s.scrollIntoView())}return!0};function mr(){return g(c({Enter:pr}),t.high)}const hr={"Mod-b":`Bold`,"Mod-i":`Italic`,"Mod-e":`Inline code`,"Mod-Shift-x":`Strikethrough`,"Mod-1":`Heading 1`,"Mod-2":`Heading 2`,"Mod-3":`Heading 3`,"Mod-4":`Heading 4`,"Mod-5":`Heading 5`,"Mod-6":`Heading 6`},gr=new Set([`MscGen`,`Xù`,`MsGenny`,`Angular Template`,`Brainfuck`,`Esper`,`Oz`,`Factor`,`Squirrel`,`Yacas`,`mIRC`,`FCL`,`ECL`,`MUMPS`,`Pig`,`Asterisk`,`Z80`]),_r=x.map(e=>e.name).filter(e=>!gr.has(e)).map(e=>({label:e,value:e.toLowerCase()})).concat({label:`Plain text`,value:``}).sort((e,t)=>e.label.localeCompare(t.label));function vr(e){let t=new br;return xr(e,t),t.finish()}const yr=[``,`# `,`## `,`### `,`#### `,`##### `,`###### `];var br=class{constructor(){this.parts=[],this.linePrefix=``,this.pendingFirst=null,this.atLineStart=!0,this.deferredBlankPrefix=null}write(e){if(e===``)return;if(this.emitDeferredBlankLine(),this.atLineStart&&=(this.parts.push(this.pendingFirst??this.linePrefix),this.pendingFirst=null,!1),!e.includes(`
1
+ import{Priority as e,Priority as t,createMarkBuilders as n,createNodeBuilders as r,defineBaseCommands as i,defineBaseKeymap as a,defineCommands as o,defineHistory as s,defineKeymap as c,defineMarkSpec as l,defineMarkView as u,definePlugin as d,getMarkRange as f,getNodeType as p,isApple as ee,isAtBlockStart as te,isTextSelection as m,toggleNode as ne,union as h,unsetBlockType as re,withPriority as ie,withPriority as g,withSkipCodeBlock as ae}from"@prosekit/core";import{defineBlockquote as oe}from"@prosekit/extensions/blockquote";import{defineCodeBlock as se,defineCodeBlockHighlight as ce}from"@prosekit/extensions/code-block";import{defineDoc as le}from"@prosekit/extensions/doc";import{defineGapCursor as ue}from"@prosekit/extensions/gap-cursor";import{defineHorizontalRule as de}from"@prosekit/extensions/horizontal-rule";import{defineList as fe}from"@prosekit/extensions/list";import{defineModClickPrevention as pe}from"@prosekit/extensions/mod-click-prevention";import{defineParagraph as me}from"@prosekit/extensions/paragraph";import{defineText as he}from"@prosekit/extensions/text";import{defineVirtualSelection as ge}from"@prosekit/extensions/virtual-selection";import{Plugin as _,PluginKey as v,TextSelection as y}from"@prosekit/pm/state";import{Decoration as _e,DecorationSet as b}from"@prosekit/pm/view";import{LanguageDescription as ve}from"@codemirror/language";import{languages as x}from"@codemirror/language-data";import{classHighlighter as ye}from"@lezer/highlight";import{createParser as be}from"prosemirror-highlight/lezer";import{defineHeadingCommands as xe,defineHeadingInputRule as Se,defineHeadingSpec as Ce}from"@prosekit/extensions/heading";import{ReplaceStep as we,Step as S,StepResult as Te,Transform as Ee}from"@prosekit/pm/transform";import{Mark as De}from"@prosekit/pm/model";import{GFM as Oe,parser as ke}from"@lezer/markdown";import{once as Ae}from"@ocavue/utils";import{defineTableCellSpec as je,defineTableCommands as Me,defineTableDropIndicator as Ne,defineTableEditingPlugin as Pe,defineTableHeaderCellSpec as Fe,defineTableRowSpec as Ie,defineTableSpec as Le}from"@prosekit/extensions/table";import{closeHistory as Re}from"@prosekit/pm/history";import{definePlaceholder as ze}from"@prosekit/extensions/placeholder";import{defineReadonly as Be}from"@prosekit/extensions/readonly";function C(e,t,n){let r=e.doc.content.size;if(t<0||t>r)return;let i=e.doc.resolve(t);if(!(!i.parent.isTextblock||i.parent.type.spec.code))return f(i,n)}const Ve=new Set([`mdStrong`,`mdEm`,`mdCode`,`mdDel`,`mdLinkText`,`mdLinkUri`,`mdImageSource`]),He=new Set([`mdMark`,`mdLinkUri`]),Ue=new Set([`mdMark`,`mdLinkUri`]),We=new Set([`mdImageSource`,`mdWikilinkSource`]),w=new Set([`mdLinkText`,`mdLinkUri`]),Ge=new Set([`mdStrong`,`mdEm`,`mdCode`,`mdDel`,`mdWikilinkSource`]),Ke=new v(`mark-mode`);function qe(e){return new _({key:Ke,state:{init:()=>e,apply:(e,t)=>t},props:{attributes:{"data-mark-mode":e},decorations:e===`focus`?e=>Ze(e):void 0,clipboardTextSerializer:e===`show`?void 0:Xe}})}function Je(e){return d(qe(e))}function Ye(e){return Ke.getState(e)}function Xe(e){let t=[];return e.content.forEach(e=>{let n=[];e.descendants(e=>!e.isText||!e.text?!0:(!e.marks.some(e=>We.has(e.type.name))&&e.marks.some(e=>Ue.has(e.type.name))||n.push(e.text),!1)),t.push(n.join(``))}),t.join(`
2
+ `)}function Ze(e){let{$anchor:t,empty:n}=e.selection;if(!n)return b.empty;let r=t.parent;if(!r.isTextblock)return;let i=t.start(),a=t.parentOffset,o=Qe(r,a);if(o.size===0)return b.empty;let s=[],c=new Set,l=!1;for(let e of o)if(w.has(e)){if(l)continue;l=!0,et(r,i,a,s,c)}else $e(r,i,e,a,s,c);let u=s.map(([e,t])=>_e.inline(e,t,{class:`show`}));return b.create(e.doc,u)}function Qe(e,t){let n=new Set,r=0;return e.forEach(e=>{let i=r+e.nodeSize;if(t>=r&&t<=i)for(let t of e.marks){let e=t.type.name;Ve.has(e)&&n.add(e)}r=i}),n}function $e(e,t,n,r,i,a){let o=t,s=0,c=-1,l=-1;e.forEach(u=>{let d=u.marks.some(e=>e.type.name===n);d&&c===-1&&(c=o,l=s),!d&&c!==-1&&(r>=l&&r<=s&&T(e,t,c,o,i,a),c=-1,l=-1),o+=u.nodeSize,s+=u.nodeSize}),c!==-1&&r>=l&&r<=s&&T(e,t,c,o,i,a)}function et(e,t,n,r,i){let a=e.childCount;if(a===0)return;let o=-1,s=0;for(let t=0;t<a;t++){let r=e.child(t),i=s+r.nodeSize;if(n>=s&&n<=i&&r.marks.some(e=>w.has(e.type.name))){o=t;break}s=i}if(o===-1)return;let c=o;for(;c>0&&tt(e.child(c-1));)c--;let l=o;for(;l<a-1&&tt(e.child(l+1));)l++;let u=t;for(let t=0;t<c;t++)u+=e.child(t).nodeSize;let d=u;for(let t=c;t<=l;t++)d+=e.child(t).nodeSize;T(e,t,u,d,r,i)}function tt(e){let t=!1,n=!1,r=!1;for(let i of e.marks){let e=i.type.name;e===`mdMark`?t=!0:w.has(e)?n=!0:Ge.has(e)&&(r=!0)}return!!(n||t&&!r)}function T(e,t,n,r,i,a){let o=t;e.forEach(e=>{let t=o,s=o+e.nodeSize;if(t>=n&&s<=r)for(let n of e.marks){let e=n.type.name;if(He.has(e)){let e=`${t}_${s}`;a.has(e)||(a.add(e),i.push([t,s]));break}}o=s})}function E(e,t){let n=Ye(t);return n?e.flatMap(e=>e.modes.includes(n)?[e.name]:[]):[]}function D(e,t,n){for(let r of n){let n=C(e,t,r);if(n)return n}}function O(e,t,n){let r=D(e,t,n);return r&&r.to===t?r:void 0}function k(e,t,n){let r=D(e,t,n);return r&&r.from===t?r:void 0}function A(e,t){let{from:n,to:r,empty:i}=e.selection;if(i)return;let a=D(e,n,t);return a&&a.from===n&&a.to===r?a:void 0}function nt(e,t){return y.create(e.doc,t.from,t.to)}function rt(e){return(t,n)=>{let r=E(e,t);if(r.length===0||!m(t.selection))return!1;let i=t.selection;if(i.empty){let e=k(t,i.from,r);if(e)return n?.(t.tr.setSelection(nt(t,e))),!0;if(O(t,i.from,r)){let e=t.doc.resolve(i.from);return i.from>=e.end()?!1:(n?.(t.tr.setSelection(y.create(t.doc,i.from+1))),!0)}return!1}let a=A(t,r);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.to))),!0):!1}}function it(e){return(t,n)=>{let r=E(e,t);if(r.length===0||!m(t.selection))return!1;let i=t.selection;if(i.empty){let e=O(t,i.from,r);return e?(n?.(t.tr.setSelection(nt(t,e))),!0):!1}let a=A(t,r);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.from))),!0):!1}}function at(e){return(t,n)=>{let r=E(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=O(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!k(t,i,r)||i<=t.doc.resolve(i).start()?!1:(n?.(t.tr.delete(i-1,i)),!0)}}function ot(e){return(t,n)=>{let r=E(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=k(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!O(t,i,r)||i>=t.doc.resolve(i).end()?!1:(n?.(t.tr.delete(i,i+1)),!0)}}function st(e,t){return new _({key:new v(`atomic-mark-selection-${t}`),props:{decorations:n=>{let r=E(e,n);if(r.length===0)return;let i=A(n,r);if(i)return b.create(n.doc,[_e.inline(i.from,i.to,{class:t})])}}})}function ct({marks:e,selectedClass:n}){return h(g(c({ArrowRight:rt(e),ArrowLeft:it(e),Backspace:at(e),Delete:ot(e)}),t.high),d(st(e,n)))}const j=new Map;async function lt(e){let t=ve.matchLanguageName(x,e,!0);if(!t){j.set(e,null);return}let n=t.support;if(!n)try{n=await t.load()}catch(t){console.error(`[meowdown] Failed to load language "${e}":`,t),j.set(e,null)}if(j.has(e))return;if(!n){j.set(e,null);return}let r=be({parse:e=>n.language.parser.parse(e.content),highlighter:ye});j.set(e,r)}const ut=e=>{let t=e.language?.trim();if(!t)return[];let n=j.get(t);return n?n(e):n===null?[]:lt(t)};function dt(){return ce({parser:ut,nodeTypes:[`codeBlock`]})}function M(e){return ae(ne({type:`heading`,attrs:{level:e}}))}const ft=(e,t,n)=>te(e,n)?.parent.type.name===`heading`?re()(e,t,n):!1;function pt(){return c({"Mod-1":M(1),"Mod-2":M(2),"Mod-3":M(3),"Mod-4":M(4),"Mod-5":M(5),"Mod-6":M(6),Backspace:ft})}function mt(){return h(Ce(),Se(),xe(),pt())}function ht(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function gt(e,t){let[n,r,i]=t;return[n,r,i.map(t=>De.fromJSON(e,t))]}var N=class e extends S{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return Te.ok(e);let t=e.content.size,n;for(let[r,i,a]of this.chunks){if(r>=i)continue;let o=Math.max(0,Math.min(r,t)),s=Math.max(o,Math.min(i,t));o>=s||e.nodesBetween(o,s,(t,r)=>{if(!t.isText)return!0;let i=Math.max(o,r),c=Math.min(s,r+t.nodeSize);if(i>=c)return!1;let l=t.marks;for(let t of l)t.isInSet(a)||(n??=new Ee(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new Ee(e),n.addMark(i,c,t));return!1})}return Te.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return _t;let t=this.chunks[0][0],n=this.chunks[0][1];for(let[,e]of this.chunks)e>n&&(n=e);let r=e.content.size,i=Math.max(0,Math.min(t,r)),a=Math.max(i,Math.min(n,r));return new we(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(ht)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>gt(t,e)))}};S.jsonID(`batchSetMark`,N);const _t=new N([]),vt=new Set([`com`,`br`,`net`,`jp`,`org`,`in`,`de`,`ru`,`it`,`fr`]),yt=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;function bt(e){let t=e.indexOf(`/`);return t===-1?e:e.slice(0,t)}function xt(e){let t=e.split(`.`);if(t.length<2)return!1;let n=t[t.length-1].toLowerCase();if(!vt.has(n)||t[t.length-2].length<3)return!1;for(let e of t)if(e.length>63||!yt.test(e))return!1;return!0}const St=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+(?:\/[^\s<]*)?/i,Ct=/[\s(*_~]/;function wt(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45}function Tt(e,t,n){let r=0;for(let i=0;i<t;i++)e[i]===n&&r++;return r}function Et(e){let t=e.length;for(;;){let n=e[t-1];if(/[?!.,:*_~]/.test(n)||n===`)`&&Tt(e,t,`)`)>Tt(e,t,`(`))t--;else if(n===`;`){let n=/&(?:#\d+|#x[a-f\d]+|\w+);$/.exec(e.slice(0,t));if(!n)break;t=n.index}else break}return t}const Dt={parseInline:[{name:`BareAutolink`,before:`Link`,parse(e,t,n){if(!wt(t)||e.hasOpenLink)return-1;let r=e.slice(n-1,n);if(r!==``&&!Ct.test(r))return-1;let i=St.exec(e.slice(n,e.end));if(!i)return-1;let a=Et(i[0]);return a===0||!xt(bt(i[0].slice(0,a)))?-1:e.addElement(e.elt(`URL`,n,n+a))}}]};function Ot(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45||e===95||e>127&&/[\p{L}\p{N}]/u.test(String.fromCharCode(e))}function kt(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const At={defineNodes:[{name:`Hashtag`}],parseInline:[{name:`Hashtag`,parse(e,t,n){if(t!==35||!/\s|^$/.test(e.slice(n-1,n)))return-1;let r=n+1,i=!1;for(;r<e.end;){let t=e.char(r);if(!Ot(t))break;i||=kt(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},jt={defineNodes:[{name:`Wikilink`},{name:`WikilinkMark`}],parseInline:[{name:`Wikilink`,before:`Link`,parse(e,t,n){if(t!==91||e.char(n+1)!==91)return-1;let r=!1;for(let t=n+2;t<e.end-1;t++){let i=e.char(t);if(i===93){if(e.char(t+1)!==93||!r)return-1;let i=t+2;return e.addElement(e.elt(`Wikilink`,n,i,[e.elt(`WikilinkMark`,n,n+2),e.elt(`WikilinkMark`,t,i)]))}if(i===91||i===10)return-1;i!==32&&i!==9&&(r=!0)}return-1}}]};function Mt(e){return e.end}const P=ke.configure([Oe,At,jt,Dt]),Nt=P.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:Mt}]});function F(e){return P.parseInline(e,0)}function I(e,t,n=[]){for(let r of e)t(r)&&n.push(r),I(r.children,t,n);return n}function Pt(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const L=Pt(P);function Ft(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!e[n].eq(t[n]))return!1;return!0}function It(e){let t=e.replace(/^\[\[/,``).replace(/\]\]$/,``),n=t.indexOf(`|`);return n<0?{target:t.trim(),display:``}:{target:t.slice(0,n).trim(),display:t.slice(n+1).trim()}}function Lt(){return e=>{let t=e.attrs,n=document.createElement(`span`);n.className=`md-wikilink-view`;let r=document.createElement(`span`);n.appendChild(r);let i=document.createElement(`span`);return i.className=`md-wikilink-label`,i.contentEditable=`false`,i.dataset.testid=`wikilink`,i.textContent=t.display||t.target,n.appendChild(i),{dom:n,contentDOM:r,ignoreMutation:e=>!r.contains(e.target)}}}function Rt(){return u({name:`mdWikilinkView`,constructor:Lt()})}const R=new Map([[L.Emphasis,`mdEm`],[L.StrongEmphasis,`mdStrong`],[L.InlineCode,`mdCode`],[L.Strikethrough,`mdDel`],[L.EmphasisMark,`mdMark`],[L.CodeMark,`mdMark`],[L.LinkMark,`mdMark`],[L.StrikethroughMark,`mdMark`],[L.URL,`mdLinkUri`],[L.Hashtag,`mdTag`],[L.WikilinkMark,`mdMark`]]);function zt(e,t){let n=F(t),r=[];return z(n,[],0,t.length,t,e,r),r}function Bt(e){if(/^[a-z][a-z0-9+.-]*:/i.test(e))return e;if(/^[^\s@]+@[^\s@]+$/.test(e))return`mailto:${e}`;if(/^www\./i.test(e)||xt(bt(e)))return`https://${e}`}function z(e,t,n,r,i,a,o){let s=n;for(let n of e){if(n.from>s&&H(o,s,n.from,t),n.type===L.Link)B(n,t,i,a,o);else if(n.type===L.Image)Vt(n,t,i,a,o);else if(n.type===L.Wikilink)V(n,t,i,a,o);else if(n.type===L.URL){let e=Bt(i.slice(n.from,n.to)),r=e?a.mdLinkText.create({href:e}):a.mdLinkUri.create();H(o,n.from,n.to,[...t,r])}else{let e=R.get(n.type),r=e?[...t,a[e].create()]:t;n.children.length===0?H(o,n.from,n.to,r):z(n.children,r,n.from,n.to,i,a,o)}s=n.to}s<r&&H(o,s,r,t)}function B(e,t,n,r,i){let a=-1,o=null,s=0;for(let t of e.children)t.type===L.LinkMark?(s++,s===2&&(a=t.from)):t.type===L.URL&&o===null&&(o=t);let c=o?n.slice(o.from,o.to):``,l=c?r.mdLinkText.create({href:c}):null,u=e=>a>=0&&e<a&&l!==null,d=e.from;for(let a of e.children){if(a.from>d){let e=u(d)?[...t,l]:t;H(i,d,a.from,e)}let e=u(a.from)?[...t,l]:t;if(a.type===L.Wikilink){V(a,e,n,r,i),d=a.to;continue}let o=R.get(a.type),s=o?[...e,r[o].create()]:e;a.children.length===0?H(i,a.from,a.to,s):z(a.children,s,a.from,a.to,n,r,i),d=a.to}d<e.to&&H(i,d,e.to,t)}function Vt(e,t,n,r,i){let a=e.children.find(e=>e.type===L.URL);if(!a){B(e,t,n,r,i);return}let o=e.children.filter(e=>e.type===L.LinkMark),s=n.slice(a.from,a.to),c=o.length>=2?n.slice(o[0].to,o[1].from):``,l=r.mdImageSource.create({src:s,alt:c}),u=r.mdImageView.create({src:s,alt:c}),d=e.to-1,f=e=>e>=d?[...t,l,u]:[...t,l],p=e.from;for(let t of e.children){t.from>p&&H(i,p,t.from,f(p));let e=R.get(t.type),a=e?[...f(t.from),r[e].create()]:f(t.from);t.children.length===0?H(i,t.from,t.to,a):z(t.children,a,t.from,t.to,n,r,i),p=t.to}p<e.to&&H(i,p,e.to,f(p))}function V(e,t,n,r,i){let{target:a,display:o}=It(n.slice(e.from,e.to)),s=r.mdWikilinkSource.create({target:a}),c=r.mdWikilinkView.create({target:a,display:o}),l=e.to-1,u=e=>e>=l?[...t,s,c]:[...t,s],d=e.from;for(let t of e.children){t.from>d&&H(i,d,t.from,u(d));let e=r.mdMark.create();t.from<l&&t.to>l?(H(i,t.from,l,[...u(t.from),e]),H(i,l,t.to,[...u(l),e])):H(i,t.from,t.to,[...u(t.from),e]),d=t.to}d<e.to&&H(i,d,e.to,u(d))}function H(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&Ft(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const Ht=Ae(()=>{let e=Mn().schema;if(e==null)throw Error(`Unexpected empty schema`);return e}),Ut=Ae(()=>r(Ht())),U=`meowdown_mark_builders`;function Wt(e){let t=e.cached[U];if(t)return t;let r=n(e);return e.cached[U]=r,r}const W=`inline-marks-applied`,Gt=new WeakMap;let Kt=0,qt=0;function Jt(e,t,n){let r=Gt.get(e);if(r?qt++:(Kt++,r=zt(Wt(n),e.textContent),Gt.set(e,r)),t===0)return r;let i=[];for(let[e,n,a]of r)i.push([e+t,n+t,a]);return i}function Yt(e,t){let n=1/0,r=-1/0;for(let t of e)for(let e of t.mapping.maps)e.forEach((e,t,i,a)=>{i<n&&(n=i),a>r&&(r=a)});let i=t.doc.content.size;return n>r?{from:0,to:i}:{from:Math.max(0,n),to:Math.min(i,r)}}function Xt(e,t){let n=[];return e.doc.nodesBetween(t.from,t.to,(t,r)=>{if(t.type.spec.code)return!1;if(!t.isTextblock)return!0;if(t.childCount===0)return!1;let i=Jt(t,r+1,e.schema);return i.length>0&&n.push(...i),!1}),n}function Zt(){return new _({key:new v(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(W))return null;let r=Xt(n,Yt(e,n));if(r.length===0)return null;let i=n.tr.step(new N(r));return i.setMeta(W,!0),i.setMeta(`addToHistory`,!1),i},view(e){return e.dispatch(Qt(e.state)),{}}})}function Qt(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function $t(){return d(Zt())}function en(){return l({name:`mdImageView`,inclusive:!1,attrs:{src:{default:``},alt:{default:``}},toDOM:()=>[`span`,{class:`md-image-anchor`},0],parseDOM:[{tag:`span.md-image-anchor`}]})}function tn(){return l({name:`mdImageSource`,inclusive:!1,attrs:{src:{default:``},alt:{default:``}},toDOM:()=>[`span`,{class:`md-image-source`},0],parseDOM:[{tag:`span.md-image-source`}]})}function nn(){return l({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function rn(){return l({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function an(){return l({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function on(){return l({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function sn(){return l({name:`mdLinkText`,inclusive:!1,attrs:{href:{default:``}},toDOM:e=>[`a`,{class:`md-link`,href:e.attrs.href},0],parseDOM:[{tag:`a`,getAttrs:e=>({href:e.getAttribute(`href`)??``})}]})}function cn(){return l({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function ln(){return l({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function un(){return l({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function dn(){return l({name:`mdWikilinkSource`,inclusive:!1,attrs:{target:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink-source`},0],parseDOM:[{tag:`span.md-wikilink-source`}]})}function fn(){return l({name:`mdWikilinkView`,inclusive:!1,attrs:{target:{default:``},display:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink-anchor`},0],parseDOM:[{tag:`span.md-wikilink-anchor`}]})}function pn(){return h(nn(),rn(),an(),on(),sn(),cn(),ln(),un(),dn(),fn(),tn(),en())}function mn(e,t=0){let n=t,r=0;for(let t=0;t<e.length;t++)e.charCodeAt(t)===96?(r++,r>n&&(n=r)):r=0;return n}const G={em:{node:L.Emphasis,delim:`*`},strong:{node:L.StrongEmphasis,delim:`**`},code:{node:L.InlineCode,delim:"`"},del:{node:L.Strikethrough,delim:`~~`}},hn=new Set([L.EmphasisMark,L.CodeMark,L.LinkMark,L.StrikethroughMark]);function K(e){return[e.children[0],e.children.at(-1)]}function gn(e){let{type:t,children:n}=e;if(t===L.Emphasis||t===L.StrongEmphasis||t===L.Strikethrough)return[n[0].to,n.at(-1).from];if(t===L.Link||t===L.Image){let e=n.find((e,t)=>t>0&&e.type===L.LinkMark);return e?[n[0].to,e.from]:null}return null}function q(e,t,n){for(let r of e){if(r.to<=t||r.from>=n||t<=r.from&&r.to<=n)continue;let i=gn(r);return i&&i[0]<=t&&n<=i[1]?q(r.children,t,n):q(e,Math.min(t,r.from),Math.max(n,r.to))}return[t,n]}function _n(e,t,n){for(let r of e)if(!(r.to<=t||r.from>=n)&&(t>r.from||r.to>n))return _n(e,Math.min(t,r.from),Math.max(n,r.to));return[t,n]}const J=e=>e===` `||e===` `;function vn(e,t,n){for(;t<n&&J(e[t]);)t++;for(;n>t&&J(e[n-1]);)n--;return[t,n]}function yn(e,t,n,r){let i=I(F(e),e=>e.type===r.node||hn.has(e.type));for(let r=t;r<n;r++)if(!J(e[r])&&i.every(e=>!(e.from<=r&&r<e.to)))return!1;return!0}function bn(e,t,n,r,i){let a=F(e),o=I(a,e=>e.type===r.node);return i?Cn(e,o,t,n):xn(e,a,o,t,n,r)}function xn(e,t,n,r,i,a){for(let e=0;e!==i-r;){e=i-r,[r,i]=q(t,r,i);for(let e of n)e.to===r&&(r=e.from),e.from===i&&(i=e.to)}let o=[];for(let e of n)if(r<=e.from&&e.to<=i){let[t,n]=K(e);o.push({from:t.from,to:t.to,insert:``}),o.push({from:n.from,to:n.to,insert:``})}let[s,c]=Sn(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function Sn(e,t,n,r,i){if(i.node!==L.InlineCode)return[i.delim,i.delim];let a=e.slice(t,n);for(let e of[...r].sort((e,t)=>t.from-e.from))a=a.slice(0,e.from-t)+a.slice(e.to-t);let o="`".repeat(mn(a)+1),s=a.startsWith("`")||a.endsWith("`")?` `:``;return[o+s,s+o]}function Cn(e,t,n,r){let i=[];for(let a of t){if(a.to<=n||a.from>=r)continue;let[t,o]=K(a),s=Math.max(n,t.to),c=Math.min(r,o.from);for(s>=c&&([s,c]=[t.to,o.from]),[s,c]=_n(a.children.slice(1,-1),s,c);s>t.to&&J(e[s-1]);)s--;for(;c<o.from&&J(e[c]);)c++;s>t.to?i.push({from:s,to:s,insert:e.slice(o.from,o.to)}):i.push({from:t.from,to:t.to,insert:``}),c<o.from?i.push({from:c,to:c,insert:e.slice(t.from,t.to)}):i.push({from:o.from,to:o.to,insert:``})}return i}function wn(e,t,n){let{delim:r}=n,i=r.length;if(e.slice(t-i,t)===r&&e.startsWith(r,t)&&e[t-i-1]!==r[0]&&e[t+i]!==r[0])return{kind:`unwrap`,from:t-i,to:t+i};let a=F(e),o=I(a,e=>e.type===n.node).findLast(e=>e.from<=t&&t<=e.to);if(o){let[e,n]=K(o);return{kind:`move`,pos:t===o.from?e.to:t===o.to?n.from:o.to}}return Tn(a,t)||e[t-1]===r[0]||e[t]===r[0]?null:{kind:`insert`,pos:t}}function Tn(e,t){for(let n of e)if(n.from<t&&t<n.to){let e=gn(n);return!e||t<e[0]||t>e[1]?!0:Tn(n.children,t)}return!1}function Y(e){return(t,n)=>{if(t.selection.empty)return En(e,t,n);let{from:r,to:i,anchor:a,head:o}=t.selection,s=[];t.doc.nodesBetween(r,i,(t,n)=>{if(t.type.spec.code)return!1;if(!t.isTextblock)return!0;let a=t.textContent,o=n+1,[c,l]=vn(a,Math.max(r-o,0),Math.min(i-o,a.length));return c<l&&s.push({text:a,base:o,from:c,to:l,active:yn(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>bn(t.text,t.from,t.to,e,c).map(e=>({from:e.from+t.base,to:e.to+t.base,insert:e.insert})));if(l.length===0)return!1;if(n){let e=t.tr;l.sort((e,t)=>t.from-e.from||t.to-e.to);for(let t of l)t.insert?e.insertText(t.insert,t.from,t.to):e.delete(t.from,t.to);e.setSelection(y.create(e.doc,e.mapping.map(a,a<=o?1:-1),e.mapping.map(o,o<a?1:-1))),n(e.scrollIntoView())}return!0}}function En(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=wn(i.textContent,r.parentOffset,e);if(!a)return!1;if(n){let i=r.start(),o=t.tr;a.kind===`unwrap`&&o.delete(i+a.from,i+a.to),a.kind===`move`&&o.setSelection(y.create(o.doc,i+a.pos)),a.kind===`insert`&&(o.insertText(e.delim+e.delim,i+a.pos),o.setSelection(y.create(o.doc,i+a.pos+e.delim.length))),n(o.scrollIntoView())}return!0}function Dn(){return o({toggleEm:()=>Y(G.em),toggleStrong:()=>Y(G.strong),toggleCode:()=>Y(G.code),toggleDel:()=>Y(G.del)})}function On(){return c({"Mod-b":Y(G.strong),"Mod-i":Y(G.em),"Mod-e":Y(G.code),"Mod-Shift-x":Y(G.del)})}function kn(){return h(Dn(),On())}function An(){return h(Le(),Ie(),je(),Fe(),Pe({allowTableNodeSelection:!0}),Me(),Ne())}function jn(){return h(me(),le(),he(),oe(),fe(),mt(),An(),se(),de(),pn(),dt(),$t(),kn(),Rt(),ct({marks:[{name:`mdImageSource`,modes:[`hide`]},{name:`mdWikilinkSource`,modes:[`hide`,`focus`,`show`]}],selectedClass:`md-atomic-selected`}),a(),i(),s(),ue(),ge(),pe())}function Mn(){return jn()}function X(e){let t;return d(new _({key:e.key,props:{handleDOMEvents:{mousedown:e=>{let{from:n,to:r,empty:i}=e.state.selection;return t={from:n,to:r,empty:i},!1}},handleClick:(n,r,i)=>{if(!i.target?.closest?.(e.selector))return!1;let a=e.findHitAt(n.state,r);return!a||!(ee?i.metaKey:i.ctrlKey)&&t?.empty&&t.from>=a.from&&t.to<=a.to?!1:(e.preventDefault&&i.preventDefault(),e.onClick(a.payload,i),!0)}}}))}const Nn=new v(`meowdown-wikilink-click`);function Pn(e,t){let n=C(e,t,`mdWikilinkSource`);if(!n)return;let{target:r}=n.mark.attrs;return{from:n.from,to:n.to,target:r}}function Fn(e){return X({key:Nn,selector:`.md-wikilink-label, .md-wikilink-source`,preventDefault:!1,findHitAt:(e,t)=>{let n=Pn(e,t);return n?{from:n.from,to:n.to,payload:n.target}:void 0},onClick:(t,n)=>e({target:t,event:n})})}const In=new v(`meowdown-link-click`);function Ln(e,t){let n=C(e,t,`mdLinkText`);if(n)return{from:n.from,to:n.to,href:n.mark.attrs.href}}function Rn(e){return X({key:In,selector:`.md-link`,preventDefault:!0,findHitAt:(e,t)=>{let n=Ln(e,t);return n?{from:n.from,to:n.to,payload:n.href}:void 0},onClick:(t,n)=>e({href:t,event:n})})}function zn(){return typeof window>`u`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}const Bn=/^(?:www\.|mobile\.)?(?:twitter\.com|x\.com)$/i,Vn=/\/status(?:es)?\/(\d+)/;function Hn(e){let t;try{t=new URL(e)}catch{return}if(Bn.test(t.hostname))return Vn.exec(t.pathname)?.[1]}const Un=e=>{let t=Hn(e);if(t)return{key:`tweet:${t}`,render:()=>{let e=zn()?`dark`:`light`,n=document.createElement(`iframe`);return n.src=`https://platform.twitter.com/embed/Tweet.html?id=${t}&theme=${e}&dnt=true`,n.title=`Tweet`,n.className=`md-embed md-embed-tweet`,n.dataset.testid=`tweet-embed`,n.loading=`lazy`,n.referrerPolicy=`strict-origin-when-cross-origin`,n.setAttribute(`frameborder`,`0`),Wn(n),n}}};function Wn(e){let t=t=>{if(t.source===e.contentWindow)try{let n=t.data?.[`twttr.embed`]?.params?.[0]?.height;typeof n==`number`&&(e.style.height=`${n}px`)}catch(e){console.warn(`[meowdown] failed to parse tweet resize message:`,e)}};window.addEventListener(`message`,t);let n=new MutationObserver(()=>{e.isConnected||(window.removeEventListener(`message`,t),n.disconnect())});n.observe(document.body,{childList:!0,subtree:!0})}const Gn=/^(?:www\.|m\.)?(?:youtube\.com|youtube-nocookie\.com)$/i,Kn=/^(?:www\.)?youtu\.be$/i,qn=/^[\w-]{11}$/;function Jn(e){let t;try{t=new URL(e)}catch{return}let n=null;if(Kn.test(t.hostname))n=t.pathname.slice(1);else if(Gn.test(t.hostname)){let[,e,r]=t.pathname.split(`/`);t.pathname===`/watch`?n=t.searchParams.get(`v`):(e===`shorts`||e===`embed`||e===`live`)&&(n=r??null)}if(!n||!qn.test(n))return;let r=t.searchParams.get(`start`)??t.searchParams.get(`t`),i=r?Yn(r):void 0;return{videoId:n,startSeconds:i}}function Yn(e){if(/^\d+$/.test(e))return Number(e);let t=/^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/.exec(e);if(!(!t||!t[1]&&!t[2]&&!t[3]))return Number(t[1]??0)*3600+Number(t[2]??0)*60+Number(t[3]??0)}const Xn=[e=>{let t=Jn(e);if(!t)return;let n=t.startSeconds?`?start=${t.startSeconds}`:``;return{key:`youtube:${t.videoId}:${t.startSeconds??0}`,render:()=>{let e=document.createElement(`iframe`);return e.src=`https://www.youtube-nocookie.com/embed/${t.videoId}${n}`,e.title=`YouTube video`,e.className=`md-embed md-embed-youtube`,e.dataset.testid=`youtube-embed`,e.loading=`lazy`,e.referrerPolicy=`strict-origin-when-cross-origin`,e.setAttribute(`frameborder`,`0`),e.allow=`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen`,e.allowFullscreen=!0,e}}},Un];function Zn(e){for(let t of Xn){let n=t(e);if(n)return n}}function Qn(e){return/^https?:\/\//i.test(e)?e:void 0}function $n(e,t,n){let r=Zn(e);if(r){let e=document.createElement(`span`);return e.className=`md-image-preview md-image-preview-embed`,e.appendChild(r.render()),e}let i=(n.resolveImageUrl??Qn)(e);if(!i)return;let a=document.createElement(`span`);a.className=`md-image-preview md-image-preview-img`,a.dataset.testid=`image-preview`;let o=document.createElement(`img`);return o.src=i,o.alt=t,o.draggable=!1,a.appendChild(o),a}function er(e){return t=>{let n=t.attrs,r=document.createElement(`span`);r.className=`md-image-view`;let i=document.createElement(`span`);i.className=`md-image-view-content`,r.appendChild(i);let a=$n(n.src,n.alt,e);return a&&(a.contentEditable=`false`,r.appendChild(a)),{dom:r,contentDOM:i,ignoreMutation:e=>!i.contains(e.target)}}}function tr(e){return e?Array.from(e.files).filter(e=>e.type.startsWith(`image/`)):[]}const nr=e=>{console.error(`[meowdown] failed to save pasted image:`,e)};async function rr(e,t,n,r=nr,i){let a=i;for(let i of t){let t;try{t=await n(i)}catch(e){r(e,i);continue}if(!t||e.isDestroyed)continue;let o=`![](${t})`,s=a==null?e.state.tr.insertText(o):e.state.tr.insertText(o,a);e.dispatch(s),a!=null&&(a+=o.length)}}function ir(e){return new _({key:new v(`image-input`),props:{handlePaste:(t,n)=>{let r=tr(n.clipboardData),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(rr(t,r,i,a),!0)},handleDrop:(t,n)=>{let r=tr(n.dataTransfer),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(rr(t,r,i,a,t.posAtCoords({left:n.clientX,top:n.clientY})?.pos),!0)}}})}function ar(e={}){return h(u({name:`mdImageView`,constructor:er(e)}),g(d(ir(e)),t.high))}const or=new v(`meowdown-image-click`);function sr(e,t){let n=C(e,t,`mdImageSource`);if(!n)return;let{src:r,alt:i}=n.mark.attrs;return{from:n.from,to:n.to,src:r,alt:i}}function cr(e){return d(new _({key:or,props:{handleClick:(t,n,r)=>{let i=r.target?.closest?.(`.md-image-preview`);if(!i)return!1;let a=i.closest(`.md-image-view`)?.querySelector(`.md-image-view-content`);if(!a)return!1;let o=sr(t.state,t.posAtDOM(a,0));return o?(e({src:o.src,alt:o.alt,event:r}),!0):!1}}}))}const lr=new v(`meowdown-embed-paste`);function ur(e){let t=e.trim();if(!(!t||/\s/.test(t)))return Zn(t)?t:void 0}function dr(e,t){let{from:n,to:r}=e.state.selection;e.dispatch(Re(e.state.tr.insertText(t,n,r)));let i=e.state.tr.insertText(`![](${t})`,n,n+t.length);e.dispatch(Re(i))}function fr(){return d(new _({key:lr,props:{handlePaste:(e,t)=>{let n=e.state.selection.$from.parent;if(!n.inlineContent||n.type.spec.code)return!1;let r=t.clipboardData?.getData(`text/plain`);if(!r)return!1;let i=ur(r);return i?(dr(e,i),!0):!1}}}))}const pr=(e,t)=>{let{$from:n,empty:r}=e.selection;if(!r||n.depth!==1||n.index(0)!==0||n.parent.type.name!==`heading`||n.parentOffset!==n.parent.content.size)return!1;if(t){let r=p(e.schema,`list`),i=p(e.schema,`paragraph`),a=r.create({kind:`bullet`},i.create()),o=n.after(),s=e.tr.insert(o,a);s.setSelection(y.create(s.doc,o+2)),t(s.scrollIntoView())}return!0};function mr(){return g(c({Enter:pr}),t.high)}const hr={"Mod-b":`Bold`,"Mod-i":`Italic`,"Mod-e":`Inline code`,"Mod-Shift-x":`Strikethrough`,"Mod-1":`Heading 1`,"Mod-2":`Heading 2`,"Mod-3":`Heading 3`,"Mod-4":`Heading 4`,"Mod-5":`Heading 5`,"Mod-6":`Heading 6`},gr=new Set([`MscGen`,`Xù`,`MsGenny`,`Angular Template`,`Brainfuck`,`Esper`,`Oz`,`Factor`,`Squirrel`,`Yacas`,`mIRC`,`FCL`,`ECL`,`MUMPS`,`Pig`,`Asterisk`,`Z80`]),_r=x.map(e=>e.name).filter(e=>!gr.has(e)).map(e=>({label:e,value:e.toLowerCase()})).concat({label:`Plain text`,value:``}).sort((e,t)=>e.label.localeCompare(t.label));function vr(e){let t=new br;return xr(e,t),t.finish()}const yr=[``,`# `,`## `,`### `,`#### `,`##### `,`###### `];var br=class{constructor(){this.parts=[],this.linePrefix=``,this.pendingFirst=null,this.atLineStart=!0,this.deferredBlankPrefix=null}write(e){if(e===``)return;if(this.emitDeferredBlankLine(),this.atLineStart&&=(this.parts.push(this.pendingFirst??this.linePrefix),this.pendingFirst=null,!1),!e.includes(`
3
3
  `)){this.parts.push(e);return}let t=e.split(`
4
4
  `);for(let e=0;e<t.length;e++)e>0&&this.parts.push(`
5
5
  `,this.linePrefix),t[e]!==``&&this.parts.push(t[e])}closeBlock(){this.atLineStart||this.parts.push(`
package/dist/style.css CHANGED
@@ -156,6 +156,8 @@ img.ProseMirror-separator {
156
156
  --meowdown-border: light-dark(#e4e4e7, #3f3f46);
157
157
  --meowdown-code-bg: light-dark(#f4f4f5, #18181b);
158
158
  --meowdown-table-header-bg: light-dark(#fafafa, #27272a);
159
+ --meowdown-autocomplete-bg: light-dark(#fff, #18181b);
160
+ --meowdown-autocomplete-highlight-bg: light-dark(#f4f4f5, #27272a);
159
161
  --meowdown-font-mono: ui-monospace, SFMono-Regular, Menlo, monospace;
160
162
  --meowdown-node-outline: light-dark(#53f, #8870ff);
161
163
  --meowdown-node-selection: light-dark(#5533ff1a, #8870ff1f);
@@ -386,7 +388,7 @@ img.ProseMirror-separator {
386
388
  text-decoration: underline 1px dashed;
387
389
  }
388
390
 
389
- .ProseMirror[data-mark-mode="show"] .md-wikilink-label, .ProseMirror[data-mark-mode="focus"] .md-wikilink-view:has(.show) .md-wikilink-label {
391
+ .ProseMirror[data-mark-mode="show"] .md-wikilink-label {
390
392
  display: none;
391
393
  }
392
394
 
@@ -421,7 +423,7 @@ img.ProseMirror-separator {
421
423
  display: block;
422
424
  }
423
425
 
424
- .ProseMirror[data-mark-mode="hide"] .md-image-view:has(.md-atomic-selected) .md-image-preview, .ProseMirror[data-mark-mode="hide"] .md-wikilink-view:has(.md-atomic-selected) .md-wikilink-label {
426
+ .ProseMirror[data-mark-mode="hide"] .md-image-view:has(.md-atomic-selected) .md-image-preview, .ProseMirror[data-mark-mode="hide"] .md-wikilink-view:has(.md-atomic-selected) .md-wikilink-label, .ProseMirror[data-mark-mode="focus"] .md-wikilink-view:has(.md-atomic-selected) .md-wikilink-label {
425
427
  outline: 2px solid var(--meowdown-node-outline);
426
428
  outline-offset: 2px;
427
429
  background: var(--meowdown-node-selection);
@@ -432,6 +434,10 @@ img.ProseMirror-separator {
432
434
  border-radius: var(--meowdown-image-radius, .5rem);
433
435
  }
434
436
 
437
+ .ProseMirror:has(.md-atomic-selected) {
438
+ caret-color: #0000;
439
+ }
440
+
435
441
  .ProseMirror .prosekit-placeholder:before {
436
442
  content: attr(data-placeholder);
437
443
  float: left;
@@ -456,6 +462,6 @@ img.ProseMirror-separator {
456
462
  display: none;
457
463
  }
458
464
 
459
- .ProseMirror[data-mark-mode="focus"] .md-mark:has(.show), .ProseMirror[data-mark-mode="focus"] .md-link-uri:has(.show), .ProseMirror[data-mark-mode="focus"] .md-image-source:has(.show), .ProseMirror[data-mark-mode="focus"] .md-wikilink-source:has(.show) {
465
+ .ProseMirror[data-mark-mode="focus"] .md-mark:has(.show), .ProseMirror[data-mark-mode="focus"] .md-link-uri:has(.show), .ProseMirror[data-mark-mode="focus"] .md-image-source:has(.show) {
460
466
  display: inline;
461
467
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@meowdown/core",
3
3
  "type": "module",
4
- "version": "0.13.0",
4
+ "version": "0.15.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",