@meowdown/core 0.21.0 → 0.22.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 +2 -2
- package/dist/index.d.ts +19 -3
- package/dist/index.js +14 -14
- package/dist/style.css +48 -2
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -53,11 +53,11 @@ Heading shortcuts toggle the current block to a heading of that level (or back t
|
|
|
53
53
|
|
|
54
54
|
Selection colors are standalone variables, not derived from `--meowdown-accent`, so selection can be restyled independently.
|
|
55
55
|
|
|
56
|
-
Tags (`#tag`) render as pills via the `.md-tag` class, tinted from `--meowdown-accent`.
|
|
56
|
+
Tags (`#tag`) render as pills via the `.md-tag` class, tinted from `--meowdown-accent`. Wire click handling with `defineTagClickHandler(({ tag, event }) => ...)` (or `@meowdown/react`'s `onTagClick` prop); `tag` is read from the rendered text without the leading `#`.
|
|
57
57
|
|
|
58
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
|
-
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).
|
|
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).
|
|
61
61
|
|
|
62
62
|
Bare URLs autolink without `[text](url)` brackets and share the same `.md-link` rendering and click handling: a scheme URL (`https://example.com`), an angle autolink (`<https://example.com>`), a `www.` host (`www.example.com`), an email (`me@example.com`), and a bare domain (`google.com`, `sub.domain.io/path`). Bare domains are matched against a curated list of common TLDs, so file names and prose keep their dots without linkifying (`README.md`, `node.js`, `i.e.` stay plain text); reach for `[text](url)` or `<url>` to link anything off that list. Autolinks are derived live from the text, so editing one re-evaluates it; the caret sitting inside a link never un-links it.
|
|
63
63
|
|
package/dist/index.d.ts
CHANGED
|
@@ -75,7 +75,7 @@ interface MdPackAttrs {
|
|
|
75
75
|
* same kind are kept apart by it (so they do not merge into one mark run), and
|
|
76
76
|
* it stays stable when unrelated text in the block is edited, so editing one
|
|
77
77
|
* unit never re-marks the others. Values: `bold` | `italic` | `code` |
|
|
78
|
-
* `strike` | `autolink` | `link_${href}` | `image_${src}`.
|
|
78
|
+
* `strike` | `highlight` | `autolink` | `link_${href}` | `image_${src}`.
|
|
79
79
|
*/
|
|
80
80
|
key: string;
|
|
81
81
|
}
|
|
@@ -156,6 +156,10 @@ declare function defineEditorExtensionImpl(): import("@prosekit/core").Union<rea
|
|
|
156
156
|
Marks: {
|
|
157
157
|
mdDel: import("@prosekit/pm/model").Attrs;
|
|
158
158
|
};
|
|
159
|
+
}>, import("@prosekit/core").Extension<{
|
|
160
|
+
Marks: {
|
|
161
|
+
mdHighlight: import("@prosekit/pm/model").Attrs;
|
|
162
|
+
};
|
|
159
163
|
}>, import("@prosekit/core").Extension<{
|
|
160
164
|
Marks: {
|
|
161
165
|
mdTag: import("@prosekit/pm/model").Attrs;
|
|
@@ -186,6 +190,7 @@ declare function defineEditorExtensionImpl(): import("@prosekit/core").Union<rea
|
|
|
186
190
|
toggleStrong: [];
|
|
187
191
|
toggleCode: [];
|
|
188
192
|
toggleDel: [];
|
|
193
|
+
toggleHighlight: [];
|
|
189
194
|
};
|
|
190
195
|
}>, import("@prosekit/core").PlainExtension]>, import("@prosekit/core").PlainExtension, import("@prosekit/core").PlainExtension, import("@prosekit/core").PlainExtension, import("@prosekit/core").BaseCommandsExtension, import("@prosekit/core").HistoryExtension, import("@prosekit/core").PlainExtension, import("@prosekit/core").PlainExtension, import("@prosekit/core").PlainExtension]>;
|
|
191
196
|
type EditorExtension = ReturnType<typeof defineEditorExtensionImpl>;
|
|
@@ -220,6 +225,16 @@ interface LinkClickPayload {
|
|
|
220
225
|
type LinkClickHandler = (payload: LinkClickPayload) => void;
|
|
221
226
|
declare function defineLinkClickHandler(onClick: LinkClickHandler): PlainExtension;
|
|
222
227
|
//#endregion
|
|
228
|
+
//#region src/extensions/tag-click.d.ts
|
|
229
|
+
interface TagClickPayload {
|
|
230
|
+
/** The tag name, without the leading `#`. */
|
|
231
|
+
tag: string;
|
|
232
|
+
/** The originating click. Read modifier keys or position a popover from it. */
|
|
233
|
+
event: MouseEvent;
|
|
234
|
+
}
|
|
235
|
+
type TagClickHandler = (payload: TagClickPayload) => void;
|
|
236
|
+
declare function defineTagClickHandler(onClick: TagClickHandler): PlainExtension;
|
|
237
|
+
//#endregion
|
|
223
238
|
//#region src/extensions/image.d.ts
|
|
224
239
|
type ImageUrlResolver = (src: string) => string | undefined;
|
|
225
240
|
type ImagePasteHandler = (file: File) => string | undefined | Promise<string | undefined>;
|
|
@@ -388,6 +403,7 @@ declare const EDITOR_KEY_BINDINGS: {
|
|
|
388
403
|
readonly 'Mod-i': "Italic";
|
|
389
404
|
readonly 'Mod-e': "Inline code";
|
|
390
405
|
readonly 'Mod-Shift-x': "Strikethrough";
|
|
406
|
+
readonly 'Mod-Shift-h': "Highlight";
|
|
391
407
|
readonly 'Mod-1': "Heading 1";
|
|
392
408
|
readonly 'Mod-2': "Heading 2";
|
|
393
409
|
readonly 'Mod-3': "Heading 3";
|
|
@@ -478,7 +494,7 @@ declare const NODE_NAMES: readonly ["doc", "text", "paragraph", "heading", "bloc
|
|
|
478
494
|
type NodeName = (typeof NODE_NAMES)[number];
|
|
479
495
|
//#endregion
|
|
480
496
|
//#region src/extensions/mark-names.d.ts
|
|
481
|
-
declare const MARK_NAMES: readonly ["mdImageView", "mdImageSource", "mdMark", "mdEm", "mdStrong", "mdCode", "mdLinkText", "mdLinkUri", "mdDel", "mdTag", "mdWikilinkSource", "mdWikilinkView", "mdPack"];
|
|
497
|
+
declare const MARK_NAMES: readonly ["mdImageView", "mdImageSource", "mdMark", "mdEm", "mdStrong", "mdCode", "mdLinkText", "mdLinkUri", "mdDel", "mdHighlight", "mdTag", "mdWikilinkSource", "mdWikilinkView", "mdPack"];
|
|
482
498
|
type MarkName = (typeof MARK_NAMES)[number];
|
|
483
499
|
//#endregion
|
|
484
|
-
export { type CheckRoundTripOptions, type CodeBlockAttrs, type CodeToken, type DocToMarkdownOptions, EDITOR_KEY_BINDINGS, type EditorExtension, type EmbedDescriptor, type ImageClickHandler, type ImageClickPayload, type ImageOptions, type LinkClickHandler, type LinkClickPayload, type MarkChunk, type MarkMode, type MarkName, type MarkdownToDocOptions, type MdImageViewAttrs, type MdLinkTextAttrs, type MdWikilinkViewAttrs, type NodeName, type PlaceholderOptions, Priority, type RoundTripFidelity, type TypedEditor, type TypedMarkBuilders, type WikilinkClickHandler, type WikilinkClickPayload, checkRoundTrip, codeBlockLanguages, defaultResolveImageUrl, defineBulletAfterHeading, defineCodeBlockSyntaxHighlight, defineEditorExtension, defineEmbedPaste, defineHTMLPaste, defineImage, defineImageClickHandler, defineLinkClickHandler, defineMarkMode, defineMarkdownCopy, definePlaceholder, defineReadonly, defineWikilinkClickHandler, defineWikilinkTrigger, docToMarkdown, getCodeTokens, getMarkBuilders, inlineTextToMarkChunks, listenForTweetHeight, markdownToDoc, matchEmbed, withPriority };
|
|
500
|
+
export { type CheckRoundTripOptions, type CodeBlockAttrs, type CodeToken, type DocToMarkdownOptions, EDITOR_KEY_BINDINGS, type EditorExtension, type EmbedDescriptor, type ImageClickHandler, type ImageClickPayload, type ImageOptions, type LinkClickHandler, type LinkClickPayload, type MarkChunk, type MarkMode, type MarkName, type MarkdownToDocOptions, type MdImageViewAttrs, type MdLinkTextAttrs, type MdWikilinkViewAttrs, type NodeName, type PlaceholderOptions, Priority, type RoundTripFidelity, type TagClickHandler, type TagClickPayload, type TypedEditor, type TypedMarkBuilders, type WikilinkClickHandler, type WikilinkClickPayload, checkRoundTrip, codeBlockLanguages, defaultResolveImageUrl, defineBulletAfterHeading, defineCodeBlockSyntaxHighlight, defineEditorExtension, defineEmbedPaste, defineHTMLPaste, defineImage, defineImageClickHandler, defineLinkClickHandler, defineMarkMode, defineMarkdownCopy, definePlaceholder, defineReadonly, defineTagClickHandler, defineWikilinkClickHandler, defineWikilinkTrigger, docToMarkdown, getCodeTokens, getMarkBuilders, inlineTextToMarkChunks, listenForTweetHeight, markdownToDoc, matchEmbed, withPriority };
|
package/dist/index.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
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,defineNodeAttr as d,defineNodeSpec as f,definePlugin as p,getMarkRange as m,getMarkType as ee,getNodeType as te,
|
|
2
|
-
`)}function ht(e){let{selection:t}=e;if(!t.empty)return b.empty;let n=t.$head,{parent:r}=n;if(!r.isTextblock||r.type.spec.code)return b.empty;let i=m(n,ee(e.schema,`mdPack`));return i?b.create(e.doc,[_e.inline(i.from,i.to,{class:`show`})]):b.empty}function T(e,t){let n=pt(t);return n?e.flatMap(e=>e.modes.includes(n)?[e.name]:[]):[]}function E(e,t,n){for(let r of n){let n=w(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 gt(e,t){return y.create(e.doc,t.from,t.to)}function _t(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!ie(t.selection))return!1;let i=t.selection;if(i.empty){let e=O(t,i.from,r);if(e)return n?.(t.tr.setSelection(gt(t,e))),!0;if(D(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=k(t,r);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.to))),!0):!1}}function vt(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!ie(t.selection))return!1;let i=t.selection;if(i.empty){let e=D(t,i.from,r);return e?(n?.(t.tr.setSelection(gt(t,e))),!0):!1}let a=k(t,r);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.from))),!0):!1}}function yt(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=D(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!O(t,i,r)||i<=t.doc.resolve(i).start()?!1:(n?.(t.tr.delete(i-1,i)),!0)}}function bt(e){return(t,n)=>{let r=T(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):!D(t,i,r)||i>=t.doc.resolve(i).end()?!1:(n?.(t.tr.delete(i,i+1)),!0)}}function xt(e,t){return new _({key:new v(`atomic-mark-selection-${t}`),props:{decorations:n=>{let r=T(e,n);if(r.length===0)return;let i=k(n,r);if(i)return b.create(n.doc,[_e.inline(i.from,i.to,{class:t})])}}})}function St({marks:e,selectedClass:n}){return h(g(c({ArrowRight:_t(e),ArrowLeft:vt(e),Backspace:yt(e),Delete:bt(e)}),t.high),p(xt(e,n)))}const A=new Map,Ct=new Map;async function wt(e){let t=A.get(e);if(t!==void 0)return t;let n=ve.matchLanguageName(ye,e,!0);if(!n)return A.set(e,null),null;let r=n.support;if(!r)try{r=await n.load()}catch(t){return console.error(`[meowdown] Failed to load language "${e}":`,t),A.set(e,null),null}return A.set(e,r),r}function Tt(e,t){let n=Ct.get(e);if(n)return n;let r=Se({parse:e=>t.language.parser.parse(e.content),highlighter:be});return Ct.set(e,r),r}const Et=e=>{let t=e.language?.trim();if(!t)return[];let n=A.get(t);return n===null?[]:n?Tt(t,n)(e):wt(t).then(()=>void 0)};function Dt(){return de({parser:Et,nodeTypes:[`codeBlock`]})}function Ot(e,t){let n=t.language.parser.parse(e),r=[];return xe(n,be,(e,t,n)=>{r.push([e,t,n])}),r}function kt(e,t){let n=t.trim();if(!n)return[];let r=A.get(n);return r===null?[]:r?Ot(e,r):wt(n).then(t=>t?Ot(e,t):[])}function At(){return d({type:`doc`,attr:`frontmatter`,default:null})}function jt(){return f({name:`heading`,whitespace:`pre`})}function Mt(){return d({type:`heading`,attr:`setextUnderline`,default:null,toDOM:e=>e==null?null:[`data-setext-underline`,String(e)],parseDOM:e=>{let t=e.getAttribute(`data-setext-underline`);if(t==null)return null;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:null}})}function j(e){return ce(ae({type:`heading`,attrs:{level:e}}))}const Nt=(e,t,n)=>re(e,n)?.parent.type.name===`heading`?oe()(e,t,n):!1;function Pt(){return c({"Mod-1":j(1),"Mod-2":j(2),"Mod-3":j(3),"Mod-4":j(4),"Mod-5":j(5),"Mod-6":j(6),Backspace:Nt})}function Ft(){return h(Te(),jt(),Mt(),we(),Ce(),Pt())}function It(){return d({type:`horizontalRule`,attr:`marker`,default:null,toDOM:e=>e?[`data-hr-marker`,e]:null,parseDOM:e=>e.getAttribute(`data-hr-marker`)})}function Lt(){return h(Ee(),It())}function Rt(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function zt(e,t){let[n,r,i]=t;return[n,r,i.map(t=>Me.fromJSON(e,t))]}var M=class e extends Oe{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return ke.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 Ae(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new Ae(e),n.addMark(i,c,t));return!1})}return ke.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return Bt;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 De(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(Rt)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>zt(t,e)))}};Oe.jsonID(`batchSetMark`,M);const Bt=new M([]),Vt=new Set([`com`,`br`,`net`,`jp`,`org`,`in`,`de`,`ru`,`it`,`fr`]),Ht=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;function Ut(e){let t=e.indexOf(`/`);return t===-1?e:e.slice(0,t)}function Wt(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||!Ht.test(e))return!1;return!0}function Gt(e){return e===32||e===9||e===10||e===13}const Kt=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+(?:\/[^\s<]*)?/i,qt=/[\s(*_~]/;function Jt(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45}function Yt(e,t,n){let r=0;for(let i=0;i<t;i++)e[i]===n&&r++;return r}function Xt(e){let t=e.length;for(;;){let n=e[t-1];if(/[?!.,:*_~]/.test(n)||n===`)`&&Yt(e,t,`)`)>Yt(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 Zt={parseInline:[{name:`BareAutolink`,before:`Link`,parse(e,t,n){if(!Jt(t)||e.hasOpenLink)return-1;let r=e.slice(n-1,n);if(r!==``&&!qt.test(r))return-1;let i=Kt.exec(e.slice(n,e.end));if(!i)return-1;let a=Xt(i[0]);return a===0||!Wt(Ut(i[0].slice(0,a)))?-1:e.addElement(e.elt(`URL`,n,n+a))}}]};function Qt(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 $t(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const en={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(!Qt(t))break;i||=$t(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},tn={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 nn(e){return e.end}const N=Pe.configure([Ne,en,tn,Zt]),rn=N.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:nn}]});function P(e){return N.parseInline(e,0)}function F(e,t,n=[]){for(let r of e)t(r)&&n.push(r),F(r.children,t,n);return n}function an(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const I=an(N);function on(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 sn(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 cn(){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 ln(){return u({name:`mdWikilinkView`,constructor:cn()})}const L=new Map([[I.Emphasis,`mdEm`],[I.StrongEmphasis,`mdStrong`],[I.InlineCode,`mdCode`],[I.Strikethrough,`mdDel`],[I.EmphasisMark,`mdMark`],[I.CodeMark,`mdMark`],[I.LinkMark,`mdMark`],[I.StrikethroughMark,`mdMark`],[I.URL,`mdLinkUri`],[I.Hashtag,`mdTag`],[I.WikilinkMark,`mdMark`]]);function un(e,t){let n=P(t),r=[];return R(n,[],0,t.length,t,e,r),r}function dn(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)||Wt(Ut(e)))return`https://${e}`}function R(e,t,n,r,i,a,o){let s=n;for(let n of e){n.from>s&&z(o,s,n.from,t);let e=n.type;if(e===I.Link)fn(n,t,i,a,o);else if(e===I.Image)pn(n,t,i,a,o);else if(e===I.Wikilink)mn(n,t,i,a,o);else if(e===I.URL){let e=dn(i.slice(n.from,n.to)),r=e?a.mdLinkText.create({href:e}):a.mdLinkUri.create();z(o,n.from,n.to,[...t,r])}else{let r;e===I.Emphasis?r=`italic`:e===I.StrongEmphasis?r=`bold`:e===I.InlineCode?r=`code`:e===I.Strikethrough?r=`strike`:e===I.Autolink&&(r=`autolink`);let s=r?[...t,a.mdPack.create({key:r})]:t,c=L.get(e),l=c?[...s,a[c].create()]:s;n.children.length===0?z(o,n.from,n.to,l):R(n.children,l,n.from,n.to,i,a,o)}s=n.to}s<r&&z(o,s,r,t)}function fn(e,t,n,r,i){let a=-1,o=null,s=0;for(let t of e.children)t.type===I.LinkMark?(s++,s===2&&(a=t.from)):t.type===I.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=r.mdPack.create({key:`link_${c}`}),f=[...t,d],p=e.from;for(let t of e.children){if(t.from>p){let e=u(p)?[...f,l]:f;z(i,p,t.from,e)}let e=u(t.from)?[...f,l]:f;if(t.type===I.Wikilink){mn(t,e,n,r,i),p=t.to;continue}let a=L.get(t.type),o=a?[...e,r[a].create()]:e;t.children.length===0?z(i,t.from,t.to,o):R(t.children,o,t.from,t.to,n,r,i),p=t.to}p<e.to&&z(i,p,e.to,f)}function pn(e,t,n,r,i){let a=e.children.find(e=>e.type===I.URL);if(!a){fn(e,t,n,r,i);return}let o=e.children.filter(e=>e.type===I.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=r.mdPack.create({key:`image_${s}`}),f=e.to-1,p=e=>e>=f?[...t,d,l,u]:[...t,d,l],m=e.from;for(let t of e.children){t.from>m&&z(i,m,t.from,p(m));let e=L.get(t.type),a=e?[...p(t.from),r[e].create()]:p(t.from);t.children.length===0?z(i,t.from,t.to,a):R(t.children,a,t.from,t.to,n,r,i),m=t.to}m<e.to&&z(i,m,e.to,p(m))}function mn(e,t,n,r,i){let{target:a,display:o}=sn(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&&z(i,d,t.from,u(d));let e=r.mdMark.create();t.from<l&&t.to>l?(z(i,t.from,l,[...u(t.from),e]),z(i,l,t.to,[...u(l),e])):z(i,t.from,t.to,[...u(t.from),e]),d=t.to}d<e.to&&z(i,d,e.to,u(d))}function z(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&on(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const hn=x(()=>{let e=Or().schema;if(e==null)throw Error(`Unexpected empty schema`);return e}),gn=x(()=>r(hn())),_n=x(()=>n(hn())),vn=`meowdown_mark_builders`;function yn(e){let t=e.cached[vn];if(t)return t;let r=n(e);return e.cached[vn]=r,r}const bn=`meowdown_node_builders`;function xn(e){let t=e.cached[bn];if(t)return t;let n=r(e);return e.cached[bn]=n,n}const Sn=`inline-marks-applied`,Cn=new WeakMap;let wn=0,Tn=0;function En(e,t,n){let r=Cn.get(e);if(r?Tn++:(wn++,r=un(yn(n),e.textContent),Cn.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 Dn(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 On(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=En(t,r+1,e.schema);return i.length>0&&n.push(...i),!1}),n}function kn(){return new _({key:new v(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(Sn))return null;let r=On(n,Dn(e,n));if(r.length===0)return null;let i=n.tr.step(new M(r));return i.setMeta(Sn,!0),i.setMeta(`addToHistory`,!1),i},view(e){return e.dispatch(An(e.state)),{}}})}function An(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function jn(){return p(kn())}function Mn(){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 Nn(){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 Pn(){return l({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function Fn(){return l({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function In(){return l({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function Ln(){return l({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function Rn(){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 zn(){return l({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function Bn(){return l({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function Vn(){return l({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function Hn(){return l({name:`mdWikilinkSource`,inclusive:!1,attrs:{target:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink-source`},0],parseDOM:[{tag:`span.md-wikilink-source`}]})}function Un(){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 Wn(){return l({name:`mdPack`,excludes:``,inclusive:!1,attrs:{key:{default:``}},toDOM:e=>[`span`,{class:`md-pack`,"data-key":e.attrs.key},0],parseDOM:[{tag:`span.md-pack`}]})}function Gn(){return h(Pn(),Fn(),In(),Ln(),Rn(),zn(),Bn(),Vn(),Hn(),Un(),Nn(),Mn(),Wn())}function Kn(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 B={em:{node:I.Emphasis,delim:`*`},strong:{node:I.StrongEmphasis,delim:`**`},code:{node:I.InlineCode,delim:"`"},del:{node:I.Strikethrough,delim:`~~`}},qn=new Set([I.EmphasisMark,I.CodeMark,I.LinkMark,I.StrikethroughMark]);function V(e){return[e.children[0],e.children.at(-1)]}function Jn(e){let{type:t,children:n}=e;if(t===I.Emphasis||t===I.StrongEmphasis||t===I.Strikethrough)return[n[0].to,n.at(-1).from];if(t===I.Link||t===I.Image){let e=n.find((e,t)=>t>0&&e.type===I.LinkMark);return e?[n[0].to,e.from]:null}return null}function H(e,t,n){for(let r of e){if(r.to<=t||r.from>=n||t<=r.from&&r.to<=n)continue;let i=Jn(r);return i&&i[0]<=t&&n<=i[1]?H(r.children,t,n):H(e,Math.min(t,r.from),Math.max(n,r.to))}return[t,n]}function Yn(e,t,n){for(let r of e)if(!(r.to<=t||r.from>=n)&&(t>r.from||r.to>n))return Yn(e,Math.min(t,r.from),Math.max(n,r.to));return[t,n]}const U=e=>e===` `||e===` `;function Xn(e,t,n){for(;t<n&&U(e[t]);)t++;for(;n>t&&U(e[n-1]);)n--;return[t,n]}function Zn(e,t,n,r){let i=F(P(e),e=>e.type===r.node||qn.has(e.type));for(let r=t;r<n;r++)if(!U(e[r])&&i.every(e=>!(e.from<=r&&r<e.to)))return!1;return!0}function Qn(e,t,n,r,i){let a=P(e),o=F(a,e=>e.type===r.node);return i?tr(e,o,t,n):$n(e,a,o,t,n,r)}function $n(e,t,n,r,i,a){for(let e=0;e!==i-r;){e=i-r,[r,i]=H(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]=V(e);o.push({from:t.from,to:t.to,insert:``}),o.push({from:n.from,to:n.to,insert:``})}let[s,c]=er(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function er(e,t,n,r,i){if(i.node!==I.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(Kn(a)+1),s=a.startsWith("`")||a.endsWith("`")?` `:``;return[o+s,s+o]}function tr(e,t,n,r){let i=[];for(let a of t){if(a.to<=n||a.from>=r)continue;let[t,o]=V(a),s=Math.max(n,t.to),c=Math.min(r,o.from);for(s>=c&&([s,c]=[t.to,o.from]),[s,c]=Yn(a.children.slice(1,-1),s,c);s>t.to&&U(e[s-1]);)s--;for(;c<o.from&&U(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 nr(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=P(e),o=F(a,e=>e.type===n.node).findLast(e=>e.from<=t&&t<=e.to);if(o){let[e,n]=V(o);return{kind:`move`,pos:t===o.from?e.to:t===o.to?n.from:o.to}}return rr(a,t)||e[t-1]===r[0]||e[t]===r[0]?null:{kind:`insert`,pos:t}}function rr(e,t){for(let n of e)if(n.from<t&&t<n.to){let e=Jn(n);return!e||t<e[0]||t>e[1]?!0:rr(n.children,t)}return!1}function W(e){return(t,n)=>{if(t.selection.empty)return ir(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]=Xn(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:Zn(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>Qn(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 ir(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=nr(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 ar(){return o({toggleEm:()=>W(B.em),toggleStrong:()=>W(B.strong),toggleCode:()=>W(B.code),toggleDel:()=>W(B.del)})}function or(){return c({"Mod-b":W(B.strong),"Mod-i":W(B.em),"Mod-e":W(B.code),"Mod-Shift-x":W(B.del)})}function sr(){return h(ar(),or())}function cr(){return d({type:`list`,attr:`marker`,default:null,splittable:!0,toDOM:e=>e===`)`||e===`*`||e===`+`?[`data-list-marker`,e]:null,parseDOM:e=>{let t=e.getAttribute(`data-list-marker`);return t===`)`||t===`*`||t===`+`?t:null}})}function lr(){return d({type:`list`,attr:`taskMarker`,default:null,splittable:!0,toDOM:e=>e===`X`?[`data-list-task-marker`,e]:null,parseDOM:e=>e.getAttribute(`data-list-task-marker`)===`X`?`X`:null})}function ur(e){return e===2||e===3||e===4}function dr(){return d({type:`list`,attr:`markerGap`,default:1,splittable:!0,toDOM:e=>ur(e)?[`data-list-marker-gap`,String(e)]:null,parseDOM:e=>{let t=Number.parseInt(e.getAttribute(`data-list-marker-gap`)??``,10);return ur(t)?t:1}})}const fr=[C(/^\s?([*-])\s$/,{kind:`bullet`,collapsed:!1}),C(/^\s?(\d+)\.\s$/,({match:e})=>{let t=e[1],n=t?parseInt(t,10):void 0;return{kind:`ordered`,collapsed:!1,order:n&&n>=2&&Number.isSafeInteger(n)?n:null}}),C(/^\s?\[([\sXx]?)]\s$/,({match:e})=>({kind:`task`,checked:[`x`,`X`].includes(e[1]),collapsed:!1})),C(/^\s?\+\s$/,{kind:`task`,marker:`+`,checked:!1,collapsed:!1})];function pr(){return h(fr.map(Fe))}function mr(){return S({kind:`task`,marker:`+`})}function hr(){return S({kind:`task`,marker:null})}function gr(){return o({wrapInCircleTask:mr,wrapInSquareTask:hr})}function _r(e){let{$from:t}=e.selection;for(let e=t.depth;e>0;e--){let n=t.node(e);if(n.type.name===`list`)return n.attrs}return null}function vr(){return(e,t,n)=>{let r=_r(e),i=r?.kind===`task`&&r.marker!==`+`,a;return a=i&&!r?.checked?{kind:`task`,marker:r?.marker??null,checked:!0}:i&&r?.checked?{kind:`bullet`,marker:null,checked:!1}:{kind:`task`,marker:null,checked:!1},S(a)(e,t,n)}}function yr(){return(e,t,n)=>{let r=_r(e),i=r?.kind===`task`&&r.marker===`+`,a;return a=i&&!r?.checked?{kind:`task`,marker:`+`,checked:!0}:i&&r?.checked?{kind:`bullet`,marker:null,checked:!1}:{kind:`task`,marker:`+`,checked:!1},S(a)(e,t,n)}}function br(){return c({"Mod-Enter":vr(),"Mod-Shift-Enter":yr()})}function xr(){return h(Ve(),ze(),Re(),Ie(),Be(),Le(),pr(),br(),cr(),lr(),dr(),gr())}function Sr(){return f({name:`paragraph`,content:`inline*`,group:`block`,whitespace:`pre`,parseDOM:[{tag:`p`}],toDOM(){return[`p`,0]}})}function Cr(){return h(g(Sr(),t.highest),He(),Ue())}const wr=(e,t)=>{let{selection:n}=e;return!Qe(n)||!n.isColSelection()||!n.isRowSelection()?!1:Ze(e,t)};function Tr(){return g(c({Backspace:wr,Delete:wr}),t.high)}function Er(){return h(Xe(),Ye(),We(),Je(),qe({allowTableNodeSelection:!0}),Ge(),Ke(),Tr())}function Dr(){return h(Cr(),fe(),At(),he(),le(),xr(),Ft(),Er(),ue(),Lt(),Gn(),Dt(),jn(),sr(),ln(),St({marks:[{name:`mdImageSource`,modes:[`hide`]},{name:`mdWikilinkSource`,modes:[`hide`,`focus`,`show`]}],selectedClass:`md-atomic-selected`}),a(),i(),s(),pe(),ge(),me())}function Or(){return Dr()}function kr(e){let t;return p(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||!(ne?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 Ar=new v(`meowdown-wikilink-click`);function jr(e,t){let n=w(e,t,`mdWikilinkSource`);if(!n)return;let{target:r}=n.mark.attrs;return{from:n.from,to:n.to,target:r}}function Mr(e){return kr({key:Ar,selector:`.md-wikilink-label, .md-wikilink-source`,preventDefault:!1,findHitAt:(e,t)=>{let n=jr(e,t);return n?{from:n.from,to:n.to,payload:n.target}:void 0},onClick:(t,n)=>e({target:t,event:n})})}const Nr=new v(`meowdown-link-click`);function Pr(e,t){let n=w(e,t,`mdLinkText`);if(n)return{from:n.from,to:n.to,href:n.mark.attrs.href}}function Fr(e){return kr({key:Nr,selector:`.md-link`,preventDefault:!0,findHitAt:(e,t)=>{let n=Pr(e,t);return n?{from:n.from,to:n.to,payload:n.href}:void 0},onClick:(t,n)=>e({href:t,event:n})})}function Ir(){return typeof window>`u`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}const Lr=/^(?:www\.|mobile\.)?(?:twitter\.com|x\.com)$/i,Rr=/\/status(?:es)?\/(\d+)/;function zr(e){let t;try{t=new URL(e)}catch{return}if(Lr.test(t.hostname))return Rr.exec(t.pathname)?.[1]}const Br=e=>{let t=zr(e);if(!t)return;let n=Ir()?`dark`:`light`;return{kind:`tweet`,key:`tweet:${t}`,src:`https://platform.twitter.com/embed/Tweet.html?id=${t}&theme=${n}&dnt=true`,title:`Tweet`,className:`md-embed md-embed-tweet`,testid:`tweet-embed`}};function Vr(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=!1,r=()=>{n||(n=!0,window.removeEventListener(`message`,t),i.disconnect())},i=new MutationObserver(()=>{e.isConnected||r()});return i.observe(document.body,{childList:!0,subtree:!0}),r}const Hr=/^(?:www\.|m\.)?(?:youtube\.com|youtube-nocookie\.com)$/i,Ur=/^(?:www\.)?youtu\.be$/i,Wr=/^[\w-]{11}$/;function Gr(e){let t;try{t=new URL(e)}catch{return}let n=null;if(Ur.test(t.hostname))n=t.pathname.slice(1);else if(Hr.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||!Wr.test(n))return;let r=t.searchParams.get(`start`)??t.searchParams.get(`t`),i=r?Kr(r):void 0;return{videoId:n,startSeconds:i}}function Kr(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 qr=[e=>{let t=Gr(e);if(!t)return;let n=t.startSeconds?`?start=${t.startSeconds}`:``;return{kind:`youtube`,key:`youtube:${t.videoId}:${t.startSeconds??0}`,src:`https://www.youtube-nocookie.com/embed/${t.videoId}${n}`,title:`YouTube video`,className:`md-embed md-embed-youtube`,testid:`youtube-embed`,allow:`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen`,allowFullscreen:!0}},Br];function G(e){for(let t of qr){let n=t(e);if(n)return n}}function Jr(e){return/^https?:\/\//i.test(e)?e:void 0}function Yr(e){let t=document.createElement(`iframe`);return t.src=e.src,t.title=e.title,t.className=e.className,t.dataset.testid=e.testid,t.loading=`lazy`,t.referrerPolicy=`strict-origin-when-cross-origin`,t.setAttribute(`frameborder`,`0`),e.allow&&(t.allow=e.allow),e.allowFullscreen&&(t.allowFullscreen=!0),e.kind===`tweet`&&Vr(t),t}function Xr(e,t,n){let r=G(e);if(r){let e=document.createElement(`span`);return e.className=`md-image-preview md-image-preview-embed`,e.appendChild(Yr(r)),e}let i=(n.resolveImageUrl??Jr)(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 Zr(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=Xr(n.src,n.alt,e);return a&&(a.contentEditable=`false`,r.appendChild(a)),{dom:r,contentDOM:i,ignoreMutation:e=>!i.contains(e.target)}}}function Qr(e){return e?Array.from(e.files).filter(e=>e.type.startsWith(`image/`)):[]}const $r=e=>{console.error(`[meowdown] failed to save pasted image:`,e)};async function ei(e,t,n,r=$r,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=``,s=a==null?e.state.tr.insertText(o):e.state.tr.insertText(o,a);e.dispatch(s),a!=null&&(a+=o.length)}}function ti(e){return new _({key:new v(`image-input`),props:{handlePaste:(t,n)=>{let r=Qr(n.clipboardData),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(ei(t,r,i,a),!0)},handleDrop:(t,n)=>{let r=Qr(n.dataTransfer),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(ei(t,r,i,a,t.posAtCoords({left:n.clientX,top:n.clientY})?.pos),!0)}}})}function ni(e={}){return h(u({name:`mdImageView`,constructor:Zr(e)}),g(p(ti(e)),t.high))}const ri=new v(`meowdown-image-click`);function ii(e,t){let n=w(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 ai(e){return p(new _({key:ri,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=ii(t.state,t.posAtDOM(a,0));return o?(e({src:o.src,alt:o.alt,event:r}),!0):!1}}}))}const oi=new v(`meowdown-embed-paste`);function si(e){let t=e.trim();if(!(!t||/\s/.test(t)))return G(t)?t:void 0}function ci(e,t){return e.clipboardData?.getData(`text/plain`)||t.content.textBetween(0,t.content.size,`
|
|
3
|
-
`)}function
|
|
4
|
-
`,t-1)+1,r=0;for(let i=n;i<t;i++)r+=e.charCodeAt(i)===9?4-r%4:1;return r}function
|
|
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,defineNodeAttr as d,defineNodeSpec as f,definePlugin as p,getMarkRange as m,getMarkType as ee,getNodeType as te,isAtBlockStart as ne,isTextSelection as re,toggleNode as ie,union as h,unsetBlockType as ae,withPriority as oe,withPriority as g,withSkipCodeBlock as se}from"@prosekit/core";import{defineBlockquote as ce}from"@prosekit/extensions/blockquote";import{defineCodeBlock as le,defineCodeBlockHighlight as ue}from"@prosekit/extensions/code-block";import{defineDoc as de}from"@prosekit/extensions/doc";import{defineGapCursor as fe}from"@prosekit/extensions/gap-cursor";import{defineModClickPrevention as pe}from"@prosekit/extensions/mod-click-prevention";import{defineText as me}from"@prosekit/extensions/text";import{defineVirtualSelection as he}from"@prosekit/extensions/virtual-selection";import{Plugin as _,PluginKey as v,TextSelection as y}from"@prosekit/pm/state";import{Decoration as ge,DecorationSet as b}from"@prosekit/pm/view";import{LanguageDescription as _e}from"@codemirror/language";import{languages as ve}from"@codemirror/language-data";import{classHighlighter as ye,highlightTree as be}from"@lezer/highlight";import{createParser as xe}from"prosemirror-highlight/lezer";import{defineHeadingCommands as Se,defineHeadingInputRule as Ce,defineHeadingSpec as we}from"@prosekit/extensions/heading";import{defineHorizontalRule as Te}from"@prosekit/extensions/horizontal-rule";import{ReplaceStep as Ee,Step as De,StepResult as Oe,Transform as ke}from"@prosekit/pm/transform";import{DOMSerializer as Ae,Mark as je}from"@prosekit/pm/model";import{GFM as Me,parser as Ne}from"@lezer/markdown";import{once as x}from"@ocavue/utils";import{defineInputRule as Pe}from"@prosekit/extensions/input-rule";import{defineListCommands as Fe,defineListDropIndicator as Ie,defineListKeymap as Le,defineListPlugins as Re,defineListSerializer as ze,defineListSpec as Be,wrapInList as S}from"@prosekit/extensions/list";import{wrappingListInputRule as C}from"prosemirror-flat-list";import{defineParagraphCommands as Ve,defineParagraphKeymap as He}from"@prosekit/extensions/paragraph";import{defineTableCellSpec as Ue,defineTableCommands as We,defineTableDropIndicator as Ge,defineTableEditingPlugin as Ke,defineTableHeaderCellSpec as qe,defineTableRowSpec as Je,defineTableSpec as Ye,deleteTable as Xe,isCellSelection as Ze}from"@prosekit/extensions/table";import{closeHistory as Qe}from"@prosekit/pm/history";import $e from"rehype-parse";import et from"rehype-remark";import tt from"remark-gfm";import nt from"remark-stringify";import{unified as rt}from"unified";import{triggerAutocomplete as it}from"@prosekit/extensions/autocomplete";import{definePlaceholder as at}from"@prosekit/extensions/placeholder";import{defineReadonly as ot}from"@prosekit/extensions/readonly";function w(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 m(i,n)}const st=new Set([`mdMark`,`mdLinkUri`]),ct=new Set([`mdImageSource`,`mdWikilinkSource`]),lt=new v(`mark-mode`);function ut(e){return new _({key:lt,state:{init:()=>e,apply:(e,t)=>t},props:{attributes:{"data-mark-mode":e},decorations:e===`focus`?e=>mt(e):void 0,clipboardTextSerializer:e===`show`?void 0:pt}})}function dt(e){return p(ut(e))}function ft(e){return lt.getState(e)}function pt(e){let t=[];return e.content.forEach(e=>{let n=[];e.descendants(e=>!e.isText||!e.text?!0:(!e.marks.some(e=>ct.has(e.type.name))&&e.marks.some(e=>st.has(e.type.name))||n.push(e.text),!1)),t.push(n.join(``))}),t.join(`
|
|
2
|
+
`)}function mt(e){let{selection:t}=e;if(!t.empty)return b.empty;let n=t.$head,{parent:r}=n;if(!r.isTextblock||r.type.spec.code)return b.empty;let i=m(n,ee(e.schema,`mdPack`));return i?b.create(e.doc,[ge.inline(i.from,i.to,{class:`show`})]):b.empty}function T(e,t){let n=ft(t);return n?e.flatMap(e=>e.modes.includes(n)?[e.name]:[]):[]}function E(e,t,n){for(let r of n){let n=w(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 ht(e,t){return y.create(e.doc,t.from,t.to)}function gt(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!re(t.selection))return!1;let i=t.selection;if(i.empty){let e=O(t,i.from,r);if(e)return n?.(t.tr.setSelection(ht(t,e))),!0;if(D(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=k(t,r);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.to))),!0):!1}}function _t(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!re(t.selection))return!1;let i=t.selection;if(i.empty){let e=D(t,i.from,r);return e?(n?.(t.tr.setSelection(ht(t,e))),!0):!1}let a=k(t,r);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.from))),!0):!1}}function vt(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=D(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!O(t,i,r)||i<=t.doc.resolve(i).start()?!1:(n?.(t.tr.delete(i-1,i)),!0)}}function yt(e){return(t,n)=>{let r=T(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):!D(t,i,r)||i>=t.doc.resolve(i).end()?!1:(n?.(t.tr.delete(i,i+1)),!0)}}function bt(e,t){return new _({key:new v(`atomic-mark-selection-${t}`),props:{decorations:n=>{let r=T(e,n);if(r.length===0)return;let i=k(n,r);if(i)return b.create(n.doc,[ge.inline(i.from,i.to,{class:t})])}}})}function xt({marks:e,selectedClass:n}){return h(g(c({ArrowRight:gt(e),ArrowLeft:_t(e),Backspace:vt(e),Delete:yt(e)}),t.high),p(bt(e,n)))}const A=new Map,St=new Map;async function Ct(e){let t=A.get(e);if(t!==void 0)return t;let n=_e.matchLanguageName(ve,e,!0);if(!n)return A.set(e,null),null;let r=n.support;if(!r)try{r=await n.load()}catch(t){return console.error(`[meowdown] Failed to load language "${e}":`,t),A.set(e,null),null}return A.set(e,r),r}function wt(e,t){let n=St.get(e);if(n)return n;let r=xe({parse:e=>t.language.parser.parse(e.content),highlighter:ye});return St.set(e,r),r}const Tt=e=>{let t=e.language?.trim();if(!t)return[];let n=A.get(t);return n===null?[]:n?wt(t,n)(e):Ct(t).then(()=>void 0)};function Et(){return ue({parser:Tt,nodeTypes:[`codeBlock`]})}function Dt(e,t){let n=t.language.parser.parse(e),r=[];return be(n,ye,(e,t,n)=>{r.push([e,t,n])}),r}function Ot(e,t){let n=t.trim();if(!n)return[];let r=A.get(n);return r===null?[]:r?Dt(e,r):Ct(n).then(t=>t?Dt(e,t):[])}function kt(){return d({type:`doc`,attr:`frontmatter`,default:null})}function At(){return f({name:`heading`,whitespace:`pre`})}function jt(){return d({type:`heading`,attr:`setextUnderline`,default:null,toDOM:e=>e==null?null:[`data-setext-underline`,String(e)],parseDOM:e=>{let t=e.getAttribute(`data-setext-underline`);if(t==null)return null;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:null}})}function j(e){return se(ie({type:`heading`,attrs:{level:e}}))}const Mt=(e,t,n)=>ne(e,n)?.parent.type.name===`heading`?ae()(e,t,n):!1;function Nt(){return c({"Mod-1":j(1),"Mod-2":j(2),"Mod-3":j(3),"Mod-4":j(4),"Mod-5":j(5),"Mod-6":j(6),Backspace:Mt})}function Pt(){return h(we(),At(),jt(),Ce(),Se(),Nt())}function Ft(){return d({type:`horizontalRule`,attr:`marker`,default:null,toDOM:e=>e?[`data-hr-marker`,e]:null,parseDOM:e=>e.getAttribute(`data-hr-marker`)})}function It(){return h(Te(),Ft())}function Lt(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function Rt(e,t){let[n,r,i]=t;return[n,r,i.map(t=>je.fromJSON(e,t))]}var M=class e extends De{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return Oe.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 ke(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new ke(e),n.addMark(i,c,t));return!1})}return Oe.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return zt;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 Ee(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(Lt)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>Rt(t,e)))}};De.jsonID(`batchSetMark`,M);const zt=new M([]),Bt=new Set([`com`,`br`,`net`,`jp`,`org`,`in`,`de`,`ru`,`it`,`fr`]),Vt=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;function Ht(e){let t=e.indexOf(`/`);return t===-1?e:e.slice(0,t)}function Ut(e){let t=e.split(`.`);if(t.length<2)return!1;let n=t[t.length-1].toLowerCase();if(!Bt.has(n)||t[t.length-2].length<3)return!1;for(let e of t)if(e.length>63||!Vt.test(e))return!1;return!0}function Wt(e){return e===32||e===9||e===10||e===13}const Gt=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+(?:\/[^\s<]*)?/i,Kt=/[\s(*_~]/;function qt(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45}function Jt(e,t,n){let r=0;for(let i=0;i<t;i++)e[i]===n&&r++;return r}function Yt(e){let t=e.length;for(;;){let n=e[t-1];if(/[?!.,:*_~]/.test(n)||n===`)`&&Jt(e,t,`)`)>Jt(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 Xt={parseInline:[{name:`BareAutolink`,before:`Link`,parse(e,t,n){if(!qt(t)||e.hasOpenLink)return-1;let r=e.slice(n-1,n);if(r!==``&&!Kt.test(r))return-1;let i=Gt.exec(e.slice(n,e.end));if(!i)return-1;let a=Yt(i[0]);return a===0||!Ut(Ht(i[0].slice(0,a)))?-1:e.addElement(e.elt(`URL`,n,n+a))}}]};function Zt(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 Qt(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const $t={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(!Zt(t))break;i||=Qt(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},en={resolve:`Highlight`,mark:`HighlightMark`},tn=/[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~\u{A1}\u{2010}-\u{2027}]/u,nn={defineNodes:[{name:`Highlight`},{name:`HighlightMark`}],parseInline:[{name:`Highlight`,after:`Emphasis`,parse(e,t,n){if(t!==61||e.char(n+1)!==61||e.char(n+2)===61)return-1;let r=e.slice(n-1,n),i=e.slice(n+2,n+3),a=/\s|^$/.test(r),o=/\s|^$/.test(i),s=tn.test(r),c=tn.test(i);return e.addDelimiter(en,n,n+2,!o&&(!c||a||s),!a&&(!s||o||c))}}]},rn={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 an(e){return e.end}const N=Ne.configure([Me,$t,rn,Xt,nn]),on=N.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:an}]});function P(e){return N.parseInline(e,0)}function F(e,t,n=[]){for(let r of e)t(r)&&n.push(r),F(r.children,t,n);return n}function sn(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const I=sn(N);function cn(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 ln(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 un(){return e=>{let t=e.attrs,n=document.createElement(`span`);n.className=`md-wikilink-view`;let r=document.createElement(`span`);r.className=`md-wikilink-label`,r.contentEditable=`false`,r.dataset.testid=`wikilink`,r.textContent=t.display||t.target,n.appendChild(r);let i=document.createElement(`span`);return i.className=`md-wikilink-view-content`,n.appendChild(i),{dom:n,contentDOM:i,ignoreMutation:e=>!i.contains(e.target)}}}function dn(){return u({name:`mdWikilinkView`,constructor:un()})}const L=new Map([[I.Emphasis,`mdEm`],[I.StrongEmphasis,`mdStrong`],[I.InlineCode,`mdCode`],[I.Strikethrough,`mdDel`],[I.Highlight,`mdHighlight`],[I.EmphasisMark,`mdMark`],[I.CodeMark,`mdMark`],[I.LinkMark,`mdMark`],[I.StrikethroughMark,`mdMark`],[I.HighlightMark,`mdMark`],[I.URL,`mdLinkUri`],[I.Hashtag,`mdTag`],[I.WikilinkMark,`mdMark`]]);function fn(e,t){let n=P(t),r=[];return R(n,[],0,t.length,t,e,r),r}function pn(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)||Ut(Ht(e)))return`https://${e}`}function R(e,t,n,r,i,a,o){let s=n;for(let n of e){n.from>s&&z(o,s,n.from,t);let e=n.type;if(e===I.Link)mn(n,t,i,a,o);else if(e===I.Image)hn(n,t,i,a,o);else if(e===I.Wikilink)gn(n,t,i,a,o);else if(e===I.URL){let e=pn(i.slice(n.from,n.to)),r=e?a.mdLinkText.create({href:e}):a.mdLinkUri.create();z(o,n.from,n.to,[...t,r])}else{let r;e===I.Emphasis?r=`italic`:e===I.StrongEmphasis?r=`bold`:e===I.InlineCode?r=`code`:e===I.Strikethrough?r=`strike`:e===I.Highlight?r=`highlight`:e===I.Autolink&&(r=`autolink`);let s=r?[...t,a.mdPack.create({key:r})]:t,c=L.get(e),l=c?[...s,a[c].create()]:s;n.children.length===0?z(o,n.from,n.to,l):R(n.children,l,n.from,n.to,i,a,o)}s=n.to}s<r&&z(o,s,r,t)}function mn(e,t,n,r,i){let a=-1,o=null,s=0;for(let t of e.children)t.type===I.LinkMark?(s++,s===2&&(a=t.from)):t.type===I.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=r.mdPack.create({key:`link_${c}`}),f=[...t,d],p=e.from;for(let t of e.children){if(t.from>p){let e=u(p)?[...f,l]:f;z(i,p,t.from,e)}let e=u(t.from)?[...f,l]:f;if(t.type===I.Wikilink){gn(t,e,n,r,i),p=t.to;continue}let a=L.get(t.type),o=a?[...e,r[a].create()]:e;t.children.length===0?z(i,t.from,t.to,o):R(t.children,o,t.from,t.to,n,r,i),p=t.to}p<e.to&&z(i,p,e.to,f)}function hn(e,t,n,r,i){let a=e.children.find(e=>e.type===I.URL);if(!a){mn(e,t,n,r,i);return}let o=e.children.filter(e=>e.type===I.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=r.mdPack.create({key:`image_${s}`}),f=e.to-1,p=e=>e>=f?[...t,d,l,u]:[...t,d,l],m=e.from;for(let t of e.children){t.from>m&&z(i,m,t.from,p(m));let e=L.get(t.type),a=e?[...p(t.from),r[e].create()]:p(t.from);t.children.length===0?z(i,t.from,t.to,a):R(t.children,a,t.from,t.to,n,r,i),m=t.to}m<e.to&&z(i,m,e.to,p(m))}function gn(e,t,n,r,i){let{target:a,display:o}=ln(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&&z(i,d,t.from,u(d));let e=r.mdMark.create();t.from<l&&t.to>l?(z(i,t.from,l,[...u(t.from),e]),z(i,l,t.to,[...u(l),e])):z(i,t.from,t.to,[...u(t.from),e]),d=t.to}d<e.to&&z(i,d,e.to,u(d))}function z(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&cn(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const _n=x(()=>{let e=jr().schema;if(e==null)throw Error(`Unexpected empty schema`);return e}),vn=x(()=>r(_n())),yn=x(()=>n(_n())),bn=`meowdown_mark_builders`;function xn(e){let t=e.cached[bn];if(t)return t;let r=n(e);return e.cached[bn]=r,r}const Sn=`meowdown_node_builders`;function Cn(e){let t=e.cached[Sn];if(t)return t;let n=r(e);return e.cached[Sn]=n,n}const wn=`inline-marks-applied`,Tn=new WeakMap;let En=0,Dn=0;function On(e,t,n){let r=Tn.get(e);if(r?Dn++:(En++,r=fn(xn(n),e.textContent),Tn.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 kn(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 An(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=On(t,r+1,e.schema);return i.length>0&&n.push(...i),!1}),n}function jn(){return new _({key:new v(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(wn))return null;let r=An(n,kn(e,n));if(r.length===0)return null;let i=n.tr.step(new M(r));return i.setMeta(wn,!0),i.setMeta(`addToHistory`,!1),i},view(e){return e.dispatch(Mn(e.state)),{}}})}function Mn(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function Nn(){return p(jn())}function Pn(){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 Fn(){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 In(){return l({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function Ln(){return l({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function Rn(){return l({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function zn(){return l({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function Bn(){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 Vn(){return l({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function Hn(){return l({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function Un(){return l({name:`mdHighlight`,toDOM:()=>[`mark`,0],parseDOM:[{tag:`mark`}]})}function Wn(){return l({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function Gn(){return l({name:`mdWikilinkSource`,inclusive:!1,attrs:{target:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink-source`},0],parseDOM:[{tag:`span.md-wikilink-source`}]})}function Kn(){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 qn(){return l({name:`mdPack`,excludes:``,inclusive:!1,attrs:{key:{default:``}},toDOM:e=>[`span`,{class:`md-pack`,"data-key":e.attrs.key},0],parseDOM:[{tag:`span.md-pack`}]})}function Jn(){return h(In(),Ln(),Rn(),zn(),Bn(),Vn(),Hn(),Un(),Wn(),Gn(),Kn(),Fn(),Pn(),qn())}function Yn(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 B={em:{node:I.Emphasis,delim:`*`},strong:{node:I.StrongEmphasis,delim:`**`},code:{node:I.InlineCode,delim:"`"},del:{node:I.Strikethrough,delim:`~~`},highlight:{node:I.Highlight,delim:`==`}},Xn=new Set([I.EmphasisMark,I.CodeMark,I.LinkMark,I.StrikethroughMark,I.HighlightMark]);function V(e){return[e.children[0],e.children.at(-1)]}function Zn(e){let{type:t,children:n}=e;if(t===I.Emphasis||t===I.StrongEmphasis||t===I.Strikethrough||t===I.Highlight)return[n[0].to,n.at(-1).from];if(t===I.Link||t===I.Image){let e=n.find((e,t)=>t>0&&e.type===I.LinkMark);return e?[n[0].to,e.from]:null}return null}function H(e,t,n){for(let r of e){if(r.to<=t||r.from>=n||t<=r.from&&r.to<=n)continue;let i=Zn(r);return i&&i[0]<=t&&n<=i[1]?H(r.children,t,n):H(e,Math.min(t,r.from),Math.max(n,r.to))}return[t,n]}function Qn(e,t,n){for(let r of e)if(!(r.to<=t||r.from>=n)&&(t>r.from||r.to>n))return Qn(e,Math.min(t,r.from),Math.max(n,r.to));return[t,n]}const U=e=>e===` `||e===` `;function $n(e,t,n){for(;t<n&&U(e[t]);)t++;for(;n>t&&U(e[n-1]);)n--;return[t,n]}function er(e,t,n,r){let i=F(P(e),e=>e.type===r.node||Xn.has(e.type));for(let r=t;r<n;r++)if(!U(e[r])&&i.every(e=>!(e.from<=r&&r<e.to)))return!1;return!0}function tr(e,t,n,r,i){let a=P(e),o=F(a,e=>e.type===r.node);return i?ir(e,o,t,n):nr(e,a,o,t,n,r)}function nr(e,t,n,r,i,a){for(let e=0;e!==i-r;){e=i-r,[r,i]=H(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]=V(e);o.push({from:t.from,to:t.to,insert:``}),o.push({from:n.from,to:n.to,insert:``})}let[s,c]=rr(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function rr(e,t,n,r,i){if(i.node!==I.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(Yn(a)+1),s=a.startsWith("`")||a.endsWith("`")?` `:``;return[o+s,s+o]}function ir(e,t,n,r){let i=[];for(let a of t){if(a.to<=n||a.from>=r)continue;let[t,o]=V(a),s=Math.max(n,t.to),c=Math.min(r,o.from);for(s>=c&&([s,c]=[t.to,o.from]),[s,c]=Qn(a.children.slice(1,-1),s,c);s>t.to&&U(e[s-1]);)s--;for(;c<o.from&&U(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 ar(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=P(e),o=F(a,e=>e.type===n.node).findLast(e=>e.from<=t&&t<=e.to);if(o){let[e,n]=V(o);return{kind:`move`,pos:t===o.from?e.to:t===o.to?n.from:o.to}}return or(a,t)||e[t-1]===r[0]||e[t]===r[0]?null:{kind:`insert`,pos:t}}function or(e,t){for(let n of e)if(n.from<t&&t<n.to){let e=Zn(n);return!e||t<e[0]||t>e[1]?!0:or(n.children,t)}return!1}function W(e){return(t,n)=>{if(t.selection.empty)return sr(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]=$n(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:er(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>tr(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 sr(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=ar(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 cr(){return o({toggleEm:()=>W(B.em),toggleStrong:()=>W(B.strong),toggleCode:()=>W(B.code),toggleDel:()=>W(B.del),toggleHighlight:()=>W(B.highlight)})}function lr(){return c({"Mod-b":W(B.strong),"Mod-i":W(B.em),"Mod-e":W(B.code),"Mod-Shift-x":W(B.del),"Mod-Shift-h":W(B.highlight)})}function ur(){return h(cr(),lr())}function dr(){return d({type:`list`,attr:`marker`,default:null,splittable:!0,toDOM:e=>e===`)`||e===`*`||e===`+`?[`data-list-marker`,e]:null,parseDOM:e=>{let t=e.getAttribute(`data-list-marker`);return t===`)`||t===`*`||t===`+`?t:null}})}function fr(){return d({type:`list`,attr:`taskMarker`,default:null,splittable:!0,toDOM:e=>e===`X`?[`data-list-task-marker`,e]:null,parseDOM:e=>e.getAttribute(`data-list-task-marker`)===`X`?`X`:null})}function pr(e){return e===2||e===3||e===4}function mr(){return d({type:`list`,attr:`markerGap`,default:1,splittable:!0,toDOM:e=>pr(e)?[`data-list-marker-gap`,String(e)]:null,parseDOM:e=>{let t=Number.parseInt(e.getAttribute(`data-list-marker-gap`)??``,10);return pr(t)?t:1}})}const hr=[C(/^\s?([*-])\s$/,{kind:`bullet`,collapsed:!1}),C(/^\s?(\d+)\.\s$/,({match:e})=>{let t=e[1],n=t?parseInt(t,10):void 0;return{kind:`ordered`,collapsed:!1,order:n&&n>=2&&Number.isSafeInteger(n)?n:null}}),C(/^\s?\[([\sXx]?)]\s$/,({match:e})=>({kind:`task`,checked:[`x`,`X`].includes(e[1]),collapsed:!1})),C(/^\s?\+\s$/,{kind:`task`,marker:`+`,checked:!1,collapsed:!1})];function gr(){return h(hr.map(Pe))}function _r(){return S({kind:`task`,marker:`+`})}function vr(){return S({kind:`task`,marker:null})}function yr(){return o({wrapInCircleTask:_r,wrapInSquareTask:vr})}function br(e){let{$from:t}=e.selection;for(let e=t.depth;e>0;e--){let n=t.node(e);if(n.type.name===`list`)return n.attrs}return null}function xr(){return(e,t,n)=>{let r=br(e),i=r?.kind===`task`&&r.marker!==`+`,a;return a=i&&!r?.checked?{kind:`task`,marker:r?.marker??null,checked:!0}:i&&r?.checked?{kind:`bullet`,marker:null,checked:!1}:{kind:`task`,marker:null,checked:!1},S(a)(e,t,n)}}function Sr(){return(e,t,n)=>{let r=br(e),i=r?.kind===`task`&&r.marker===`+`,a;return a=i&&!r?.checked?{kind:`task`,marker:`+`,checked:!0}:i&&r?.checked?{kind:`bullet`,marker:null,checked:!1}:{kind:`task`,marker:`+`,checked:!1},S(a)(e,t,n)}}function Cr(){return c({"Mod-Enter":xr(),"Mod-Shift-Enter":Sr()})}function wr(){return h(Be(),Re(),Le(),Fe(),ze(),Ie(),gr(),Cr(),dr(),fr(),mr(),yr())}function Tr(){return f({name:`paragraph`,content:`inline*`,group:`block`,whitespace:`pre`,parseDOM:[{tag:`p`}],toDOM(){return[`p`,0]}})}function Er(){return h(g(Tr(),t.highest),Ve(),He())}const Dr=(e,t)=>{let{selection:n}=e;return!Ze(n)||!n.isColSelection()||!n.isRowSelection()?!1:Xe(e,t)};function Or(){return g(c({Backspace:Dr,Delete:Dr}),t.high)}function kr(){return h(Ye(),Je(),Ue(),qe(),Ke({allowTableNodeSelection:!0}),We(),Ge(),Or())}function Ar(){return h(Er(),de(),kt(),me(),ce(),wr(),Pt(),kr(),le(),It(),Jn(),Et(),Nn(),ur(),dn(),xt({marks:[{name:`mdImageSource`,modes:[`hide`]},{name:`mdWikilinkSource`,modes:[`hide`,`focus`,`show`]}],selectedClass:`md-atomic-selected`}),a(),i(),s(),fe(),he(),pe())}function jr(){return Ar()}function G(e){return p(new _({key:e.key,props:{handleClick:(t,n,r)=>{if(!r.target?.closest?.(e.selector))return!1;let i=e.findPayloadAt(t.state,n);return i==null?!1:(e.preventDefault&&r.preventDefault(),e.onClick(i,r),!0)}}}))}const Mr=new v(`meowdown-wikilink-click`);function Nr(e,t){let n=w(e,t,`mdWikilinkSource`);if(!n)return;let{target:r}=n.mark.attrs;return{from:n.from,to:n.to,target:r}}function Pr(e){return G({key:Mr,selector:`.md-wikilink-label, .md-wikilink-source`,preventDefault:!1,findPayloadAt:(e,t)=>Nr(e,t)?.target,onClick:(t,n)=>e({target:t,event:n})})}const Fr=new v(`meowdown-link-click`);function Ir(e,t){let n=w(e,t,`mdLinkText`);if(n)return{from:n.from,to:n.to,href:n.mark.attrs.href}}function Lr(e){return G({key:Fr,selector:`.md-link`,preventDefault:!0,findPayloadAt:(e,t)=>Ir(e,t)?.href,onClick:(t,n)=>e({href:t,event:n})})}const Rr=new v(`meowdown-tag-click`);function zr(e,t){let n=w(e,t,`mdTag`);if(!n)return;let r=e.doc.textBetween(n.from,n.to),i=r.startsWith(`#`)?r.slice(1):r;return{from:n.from,to:n.to,tag:i}}function Br(e){return G({key:Rr,selector:`.md-tag`,preventDefault:!1,findPayloadAt:(e,t)=>zr(e,t)?.tag,onClick:(t,n)=>e({tag:t,event:n})})}function Vr(){return typeof window>`u`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}const Hr=/^(?:www\.|mobile\.)?(?:twitter\.com|x\.com)$/i,Ur=/\/status(?:es)?\/(\d+)/;function Wr(e){let t;try{t=new URL(e)}catch{return}if(Hr.test(t.hostname))return Ur.exec(t.pathname)?.[1]}const Gr=e=>{let t=Wr(e);if(!t)return;let n=Vr()?`dark`:`light`;return{kind:`tweet`,key:`tweet:${t}`,src:`https://platform.twitter.com/embed/Tweet.html?id=${t}&theme=${n}&dnt=true`,title:`Tweet`,className:`md-embed md-embed-tweet`,testid:`tweet-embed`}};function Kr(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=!1,r=()=>{n||(n=!0,window.removeEventListener(`message`,t),i.disconnect())},i=new MutationObserver(()=>{e.isConnected||r()});return i.observe(document.body,{childList:!0,subtree:!0}),r}const qr=/^(?:www\.|m\.)?(?:youtube\.com|youtube-nocookie\.com)$/i,Jr=/^(?:www\.)?youtu\.be$/i,Yr=/^[\w-]{11}$/;function Xr(e){let t;try{t=new URL(e)}catch{return}let n=null;if(Jr.test(t.hostname))n=t.pathname.slice(1);else if(qr.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||!Yr.test(n))return;let r=t.searchParams.get(`start`)??t.searchParams.get(`t`),i=r?Zr(r):void 0;return{videoId:n,startSeconds:i}}function Zr(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 Qr=[e=>{let t=Xr(e);if(!t)return;let n=t.startSeconds?`?start=${t.startSeconds}`:``;return{kind:`youtube`,key:`youtube:${t.videoId}:${t.startSeconds??0}`,src:`https://www.youtube-nocookie.com/embed/${t.videoId}${n}`,title:`YouTube video`,className:`md-embed md-embed-youtube`,testid:`youtube-embed`,allow:`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen`,allowFullscreen:!0}},Gr];function K(e){for(let t of Qr){let n=t(e);if(n)return n}}function $r(e){return/^https?:\/\//i.test(e)?e:void 0}function ei(e){let t=document.createElement(`iframe`);return t.src=e.src,t.title=e.title,t.className=e.className,t.dataset.testid=e.testid,t.loading=`lazy`,t.referrerPolicy=`strict-origin-when-cross-origin`,t.setAttribute(`frameborder`,`0`),e.allow&&(t.allow=e.allow),e.allowFullscreen&&(t.allowFullscreen=!0),e.kind===`tweet`&&Kr(t),t}function ti(e,t,n){let r=K(e);if(r){let e=document.createElement(`span`);return e.className=`md-image-preview md-image-preview-embed`,e.appendChild(ei(r)),e}let i=(n.resolveImageUrl??$r)(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 ni(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=ti(n.src,n.alt,e);return a&&(a.contentEditable=`false`,r.appendChild(a)),{dom:r,contentDOM:i,ignoreMutation:e=>!i.contains(e.target)}}}function ri(e){return e?Array.from(e.files).filter(e=>e.type.startsWith(`image/`)):[]}const ii=e=>{console.error(`[meowdown] failed to save pasted image:`,e)};async function ai(e,t,n,r=ii,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=``,s=a==null?e.state.tr.insertText(o):e.state.tr.insertText(o,a);e.dispatch(s),a!=null&&(a+=o.length)}}function oi(e){return new _({key:new v(`image-input`),props:{handlePaste:(t,n)=>{let r=ri(n.clipboardData),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(ai(t,r,i,a),!0)},handleDrop:(t,n)=>{let r=ri(n.dataTransfer),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(ai(t,r,i,a,t.posAtCoords({left:n.clientX,top:n.clientY})?.pos),!0)}}})}function si(e={}){return h(u({name:`mdImageView`,constructor:ni(e)}),g(p(oi(e)),t.high))}const ci=new v(`meowdown-image-click`);function li(e,t){let n=w(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 ui(e){return p(new _({key:ci,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=li(t.state,t.posAtDOM(a,0));return o?(e({src:o.src,alt:o.alt,event:r}),!0):!1}}}))}const di=new v(`meowdown-embed-paste`);function fi(e){let t=e.trim();if(!(!t||/\s/.test(t)))return K(t)?t:void 0}function pi(e,t){return e.clipboardData?.getData(`text/plain`)||t.content.textBetween(0,t.content.size,`
|
|
3
|
+
`)}function mi(e,t){let{from:n,to:r}=e.state.selection;e.dispatch(Qe(e.state.tr.insertText(t,n,r)));let i=e.state.tr.insertText(``,n,n+t.length);e.dispatch(Qe(i))}function hi(){return p(new _({key:di,props:{handlePaste:(e,t,n)=>{let r=e.state.selection.$from.parent;if(!r.inlineContent||r.type.spec.code)return!1;let i=pi(t,n);if(!i)return!1;let a=fi(i);return a?(mi(e,a),!0):!1}}}))}const gi=(e,t)=>{let n={type:`highlight`,children:e.all(t)};return e.patch(t,n),n},_i=(e,t,n,r)=>{let i=e,a=n.createTracker(r),o=a.move(`==`);return o+=a.move(n.containerPhrasing(i,{...a.current(),before:o,after:`=`})),o+=a.move(`==`),o};function vi(){return rt().use($e).use(et,{handlers:{mark:gi}}).use(tt).use(nt,{bullet:`-`,emphasis:`*`,strong:`*`,fence:"`",fences:!0,rule:`-`,ruleRepetition:3,listItemIndent:`one`,handlers:{highlight:_i}}).freeze()}const yi=x(vi);function bi(e){return String(yi().processSync(e))}function q(e,t={}){let{nodes:n=vn(),frontmatter:r=!1}=t,i,a=e;if(r){let[t,n]=Si(e);i=t,n&&(a=e.slice(n))}let o=Ci(n,on.parse(a).cursor(),a);return n.doc(i===void 0?{}:{frontmatter:i},o)}const xi=/^---[ \t]*\r?\n([\s\S]*?\n)?---[ \t]*(?:\r?\n|$)/;function Si(e){let t=xi.exec(e);return t?[(t[1]??``).replace(/\r?\n$/,``),t[0].length]:[]}function Ci(e,t,n){let r=[];if(!t.firstChild())return r;do r.push(...J(e,t,n));while(t.nextSibling());return t.parent(),r}function J(e,t,n){switch(t.type.id){case I.ATXHeading1:return[Y(e,t,n,1,!1)];case I.ATXHeading2:return[Y(e,t,n,2,!1)];case I.ATXHeading3:return[Y(e,t,n,3,!1)];case I.ATXHeading4:return[Y(e,t,n,4,!1)];case I.ATXHeading5:return[Y(e,t,n,5,!1)];case I.ATXHeading6:return[Y(e,t,n,6,!1)];case I.SetextHeading1:return[Y(e,t,n,1,!0)];case I.SetextHeading2:return[Y(e,t,n,2,!0)];case I.Paragraph:return[Q(e,t,n)];case I.HTMLBlock:case I.CommentBlock:case I.ProcessingInstructionBlock:return[Q(e,t,n)];case I.Blockquote:return[Di(e,t,n)];case I.BulletList:return Oi(e,t,n,`bullet`);case I.OrderedList:return Oi(e,t,n,`ordered`);case I.FencedCode:case I.CodeBlock:return[Ai(e,t,n)];case I.HorizontalRule:{let r=n.slice(t.from,t.to).trimEnd();return[e.horizontalRule({marker:r===`---`?null:r})]}case I.Table:return[ji(e,t,n)];case I.Task:return[Q(e,t,n)];default:return n.slice(t.from,t.to).trim()===``?[]:(console.warn(`[meowdown] unsupported lezer block "${t.type.name}"`),[Q(e,t,n)])}}function Y(e,t,n,r,i){let a=t.from,o=t.from,s=t.to,c=-1,l=-1;if(t.firstChild()){t.type.id===I.HeaderMark&&t.from===a&&(o=t.to);let e=-1,n=-1,r=-1;do e=t.type.id,n=t.from,r=t.to;while(t.nextSibling());e===I.HeaderMark&&n>o&&(s=n,c=n,l=r),t.parent()}let u=Ei(n.slice(o,s),X(n,o)).trim(),d=i?wi(n,c,l)||1:null;return e.heading({level:r,setextUnderline:d},u)}function wi(e,t,n){if(t<0)return 0;let r=0;for(let i=t;i<n;i++){let t=e.charCodeAt(i);(t===61||t===45)&&r++}return r}function X(e,t){let n=e.lastIndexOf(`
|
|
4
|
+
`,t-1)+1,r=0;for(let i=n;i<t;i++)r+=e.charCodeAt(i)===9?4-r%4:1;return r}function Ti(e,t){let n=0,r=0;for(;r<e.length&&n<t;){let t=e.charCodeAt(r);if(t===32)n+=1;else if(t===9)n+=4-n%4;else break;r++}return e.slice(r)}function Ei(e,t){return t===0||!e.includes(`
|
|
5
5
|
`)?e:e.split(`
|
|
6
|
-
`).map((e,n)=>n===0?e:
|
|
7
|
-
`)}function
|
|
6
|
+
`).map((e,n)=>n===0?e:Ti(e,t)).join(`
|
|
7
|
+
`)}function Z(e,t,n){return e.paragraph(Ei(t,n))}function Q(e,t,n){let r=t.from,i=t.to,a=X(n,r);if(t.firstChild()){let o=``,s=r;do t.type.id===I.QuoteMark&&(o+=n.slice(s,t.from),s=t.to,Wt(n.charCodeAt(s))&&(s+=1));while(t.nextSibling());return t.parent(),o+=n.slice(s,i),Z(e,o,a)}return Z(e,n.slice(r,i),a)}function Di(e,t,n){let r=[];if(t.firstChild()){do{if(t.type.id===I.QuoteMark)continue;r.push(...J(e,t,n))}while(t.nextSibling());t.parent()}return e.blockquote(r)}function Oi(e,t,n,r){let i=[];if(t.firstChild()){do t.type.id===I.ListItem&&i.push(ki(e,t,n,r));while(t.nextSibling());t.parent()}return i}function ki(e,t,n,r){let i=[],a,o,s,c,l,u;if(t.firstChild()){do{if(t.type.id!==I.ListMark&&u==null&&(u=X(n,t.from)),t.type.id===I.ListMark){if(r===`ordered`){let e=n.charCodeAt(t.to-1);e===41?c=`)`:e===46&&(c=`.`);let r=Number.parseInt(n.slice(t.from,t.to),10);s=Number.isFinite(r)?r:1}else{let e=n.charCodeAt(t.from);c=e===42?`*`:e===43?`+`:`-`}l=X(n,t.to);continue}if(r===`bullet`&&t.type.id===I.Task){let r=t.from,s=t.to;if(a=!1,t.firstChild()){if(t.type.id===I.TaskMarker){let e=n.charCodeAt(t.from+1);e===120?(a=!0,o=`x`):e===88&&(a=!0,o=`X`),r=t.to}t.parent()}Wt(n.charCodeAt(r))&&(r+=1);let c=n.slice(r,s);i.push(Z(e,c,X(n,r)));continue}i.push(...J(e,t,n))}while(t.nextSibling());t.parent()}let d=u!=null&&l!=null?u-l:1;return e.list({kind:a==null?r:`task`,order:r===`ordered`?s??1:null,checked:a??!1,collapsed:!1,marker:c,taskMarker:o,markerGap:d>=2&&d<=4?d:1},i)}function Ai(e,t,n){let r=``,i=``;if(t.firstChild()){do switch(t.type.id){case I.CodeInfo:r=n.slice(t.from,t.to);break;case I.CodeText:i+=n.slice(t.from,t.to);break}while(t.nextSibling());t.parent()}return e.codeBlock({language:r},i)}function ji(e,t,n){let r=0;if(t.firstChild()){do t.type.id===I.TableDelimiter&&(r=Mi(n.slice(t.from,t.to)));while(t.nextSibling());t.parent()}let i=[];if(t.firstChild()){do{let a=t.type.id;a===I.TableHeader?i.push(Ni(e,t,n,!0,r)):a===I.TableRow&&i.push(Ni(e,t,n,!1,r))}while(t.nextSibling());t.parent()}return e.table(i)}function Mi(e){return e.split(`|`).filter(e=>e.trim()!==``).length}function Ni(e,t,n,r,i){let a=Array(i).fill(``);if(t.firstChild()){let e=t.type.id===I.TableDelimiter,r=0;do if(t.type.id===I.TableDelimiter)r++;else if(t.type.id===I.TableCell){let o=r-+!!e;o>=0&&o<i&&(a[o]=n.slice(t.from,t.to).trim().replaceAll(String.raw`\|`,`|`))}while(t.nextSibling());t.parent()}let o=a.map(t=>{let n=e.paragraph(t);return r?e.tableHeaderCell(n):e.tableCell(n)});return e.tableRow(o)}const Pi=new v(`meowdown-html-paste`);function Fi(){return p(new _({key:Pi,props:{transformPastedHTML:(e,t)=>{if(e.includes(`data-pm-slice`))return e;let n=t.state.selection.$from.parent;if(!n.inlineContent||n.type.spec.code)return e;let r=bi(e);if(!r.trim())return e;let i=q(r,{nodes:Cn(t.state.schema)}),a=Ae.fromSchema(t.state.schema),o=document.createElement(`div`);return o.append(a.serializeFragment(i.content)),o.innerHTML}}}))}function $(e,t={}){let n=new zi;return t.frontmatter&&Ii(e.attrs.frontmatter,n),Bi(e,n),n.finish()}function Ii(e,t){e!==null&&(t.write(`---`),t.write(`
|
|
8
8
|
`),e!==``&&(t.write(e),t.write(`
|
|
9
|
-
`)),t.write(`---`),t.closeBlock())}const
|
|
10
|
-
`+i.repeat(Math.max(1,r))),t.closeBlock();return}t.write(
|
|
9
|
+
`)),t.write(`---`),t.closeBlock())}const Li=[``,`# `,`## `,`### `,`#### `,`##### `,`###### `];function Ri(e,t){let n=e.attrs,r=n.setextUnderline;if(r!=null&&e.content.size>0&&n.level<=2){Wi(e,t);let i=n.level===1?`=`:`-`;t.write(`
|
|
10
|
+
`+i.repeat(Math.max(1,r))),t.closeBlock();return}t.write(Li[n.level]??`# `),Wi(e,t),t.closeBlock()}var zi=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(`
|
|
11
11
|
`)){this.parts.push(e);return}let t=e.split(`
|
|
12
12
|
`);for(let e=0;e<t.length;e++)e>0&&this.parts.push(`
|
|
13
13
|
`,this.linePrefix),t[e]!==``&&this.parts.push(t[e])}closeBlock(){this.atLineStart&&this.pendingFirst!==null&&(this.emitDeferredBlankLine(),this.parts.push(this.pendingFirst.trimEnd()),this.pendingFirst=null,this.atLineStart=!1),this.atLineStart||this.parts.push(`
|
|
14
14
|
`),this.atLineStart=!0,this.deferredBlankPrefix=this.linePrefix}suppressBlank(){this.deferredBlankPrefix=null}withPrefix(e,t,n){let r=this.linePrefix,i=this.pendingFirst;if(this.linePrefix=r+e,t!==null){let e=i??r;this.pendingFirst=e+t}n(),this.linePrefix=r,this.pendingFirst=t===null?i:null}finish(){return this.parts.join(``).replace(/\s+$/,``)+`
|
|
15
15
|
`}emitDeferredBlankLine(){let e=this.deferredBlankPrefix;e!==null&&(this.parts.push(e.trimEnd(),`
|
|
16
|
-
`),this.deferredBlankPrefix=null)}};function
|
|
16
|
+
`),this.deferredBlankPrefix=null)}};function Bi(e,t){switch(e.type.name){case`doc`:Vi(e,t);return;case`paragraph`:Wi(e,t),t.closeBlock();return;case`heading`:Ri(e,t);return;case`blockquote`:t.withPrefix(`> `,`> `,()=>Vi(e,t)),t.closeBlock();return;case`list`:Gi(e,t,Ui(e));return;case`codeBlock`:Ki(e,t);return;case`horizontalRule`:{let{marker:n}=e.attrs;t.write(n||`---`),t.closeBlock();return}case`table`:qi(e,t);return;case`text`:e.text&&t.write(e.text);return}}function Vi(e,t,n=!1){let r=e.childCount,i=0;for(;i<r;){let a=e.child(i);if(a.type.name!==`list`){n&&i>0&&t.suppressBlank(),Bi(a,t),i++;continue}let o=i+1;for(;o<r&&e.child(o).type.name===`list`;)o++;let s=Hi(e,i,o);for(let r=i;r<o;r++)(r===i?n&&i>0:s)&&t.suppressBlank(),Gi(e.child(r),t,s);i=o}}function Hi(e,t,n){for(let r=t;r<n;r++)if(!Ui(e.child(r)))return!1;return!0}function Ui(e){let t=e.childCount;for(let n=0;n<t;n++){let t=e.child(n);if(t.type.name!==`list`&&!(t.type.name===`paragraph`&&n===0))return!1}return!0}function Wi(e,t){let n=e.childCount;for(let r=0;r<n;r++){let n=e.child(r);n.isText&&n.text&&t.write(n.text)}}function Gi(e,t,n){let r=e.attrs,i=r.marker===`*`||r.marker===`+`?r.marker:`-`,a=r.marker===`)`?`)`:`.`,o=r.taskMarker===`X`?`X`:`x`,s=Math.min(Math.max(r.markerGap??1,1),4),c=`${r.kind===`ordered`?`${r.order??1}${a}`:i}${` `.repeat(s)}`,l=r.kind===`task`?`${c}[${r.checked?o:` `}] `:c,u=` `.repeat(c.length);t.withPrefix(u,l,()=>Vi(e,t,n)),t.closeBlock()}function Ki(e,t){let n=e.attrs.language||``,r=e.textContent,i="`".repeat(Yn(r,2)+1);t.write(i),n&&t.write(n),t.write(`
|
|
17
17
|
`),r&&(t.write(r),t.write(`
|
|
18
|
-
`)),t.write(i),t.closeBlock()}function
|
|
18
|
+
`)),t.write(i),t.closeBlock()}function qi(e,t){let n=e.childCount;if(n===0)return;let r=[],i=0,a=-1;for(let t=0;t<n;t++){let n=e.child(t),o=[],s=!1;for(let e=0;e<n.childCount;e++){let t=n.child(e);t.type.name===`tableHeaderCell`&&(s=!0),o.push(Yi(t))}s&&a<0&&(a=t),o.length>i&&(i=o.length),r.push(o)}if(i===0)return;let o=`| `+Array(i).fill(`---`).join(` | `)+` |`,s=a>=0?r[a]:Array(i).fill(``);t.write(Ji(s,i)),t.write(`
|
|
19
19
|
`),t.write(o);for(let e=0;e<n;e++)e!==a&&(t.write(`
|
|
20
|
-
`),t.write(
|
|
20
|
+
`),t.write(Ji(r[e],i)));t.closeBlock()}function Ji(e,t){let n=`|`;for(let r=0;r<t;r++)n+=` `+(e[r]??``)+` |`;return n}function Yi(e){let t=e.textContent.trim();return!t.includes(`|`)&&!t.includes(`
|
|
21
21
|
`)?t:t.replaceAll(`|`,String.raw`\|`).replaceAll(`
|
|
22
|
-
`,` `)}const
|
|
22
|
+
`,` `)}const Xi=new v(`meowdown-markdown-copy`);function Zi(){return p(new _({key:Xi,props:{clipboardTextSerializer:(e,t)=>{let n=e.content,r;try{r=t.state.schema.topNodeType.createAndFill(void 0,n)??void 0}catch{r=void 0}return r?$(r).replace(/\n+$/,``):n.textBetween(0,n.size,`
|
|
23
23
|
`,`
|
|
24
|
-
`)}}}))}const
|
|
25
|
-
`).filter(e=>!
|
|
24
|
+
`)}}}))}const Qi=(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=te(e.schema,`list`),i=te(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 $i(){return g(c({Enter:Qi}),t.high)}const ea=(e,t)=>{let{selection:n}=e;if(!n.empty&&!n.$head.sameParent(n.$anchor))return!1;let r=e.doc.textBetween(n.from,n.to);if(r.startsWith(`[[`))return!1;r.startsWith(`[`)&&(r=r.slice(1));let i=`[[`+r;if(t){let r=e.tr.insertText(i,n.from,n.to);r.setSelection(y.create(r.doc,n.from+i.length)),it(r),t(r.scrollIntoView())}return!0};function ta(){return c({"Mod-Shift-k":ea})}const na={"Mod-b":`Bold`,"Mod-i":`Italic`,"Mod-e":`Inline code`,"Mod-Shift-x":`Strikethrough`,"Mod-Shift-h":`Highlight`,"Mod-1":`Heading 1`,"Mod-2":`Heading 2`,"Mod-3":`Heading 3`,"Mod-4":`Heading 4`,"Mod-5":`Heading 5`,"Mod-6":`Heading 6`},ra=new Set([`MscGen`,`Xù`,`MsGenny`,`Angular Template`,`Brainfuck`,`Esper`,`Oz`,`Factor`,`Squirrel`,`Yacas`,`mIRC`,`FCL`,`ECL`,`MUMPS`,`Pig`,`Asterisk`,`Z80`]),ia=ve.map(e=>e.name).filter(e=>!ra.has(e)).map(e=>({label:e,value:e.toLowerCase()})).concat({label:`Plain text`,value:``}).sort((e,t)=>e.label.localeCompare(t.label));function aa(e){return e.replace(/\n+$/u,``)}function oa(e){return/^[\s>]*$/u.test(e)}function sa(e){return e.split(`
|
|
25
|
+
`).filter(e=>!oa(e))}function ca(e,t={}){let n=$(q(e,{frontmatter:t.frontmatter}),{frontmatter:t.frontmatter});if(aa(n)===aa(e))return`exact`;let r=sa(e),i=sa(n);return r.length===i.length&&r.every((e,t)=>e.trimEnd()===i[t].trimEnd())?`normalizing`:`lossy`}export{na as EDITOR_KEY_BINDINGS,e as Priority,ca as checkRoundTrip,ia as codeBlockLanguages,$r as defaultResolveImageUrl,$i as defineBulletAfterHeading,Et as defineCodeBlockSyntaxHighlight,jr as defineEditorExtension,hi as defineEmbedPaste,Fi as defineHTMLPaste,si as defineImage,ui as defineImageClickHandler,Lr as defineLinkClickHandler,dt as defineMarkMode,Zi as defineMarkdownCopy,at as definePlaceholder,ot as defineReadonly,Br as defineTagClickHandler,Pr as defineWikilinkClickHandler,ta as defineWikilinkTrigger,$ as docToMarkdown,Ot as getCodeTokens,yn as getMarkBuilders,fn as inlineTextToMarkChunks,Kr as listenForTweetHeight,q as markdownToDoc,K as matchEmbed,oe as withPriority};
|
package/dist/style.css
CHANGED
|
@@ -153,6 +153,7 @@ img.ProseMirror-separator {
|
|
|
153
153
|
--meowdown-muted: light-dark(#52525b, #a1a1aa);
|
|
154
154
|
--meowdown-accent: light-dark(#7c3aed, #c084fc);
|
|
155
155
|
--meowdown-mark: light-dark(#a78bfa, #8b5cf6);
|
|
156
|
+
--meowdown-highlight: light-dark(#fef08a, #854d0e);
|
|
156
157
|
--meowdown-border: light-dark(#e4e4e7, #3f3f46);
|
|
157
158
|
--meowdown-code-bg: light-dark(#f4f4f5, #18181b);
|
|
158
159
|
--meowdown-table-header-bg: light-dark(#fafafa, #27272a);
|
|
@@ -226,6 +227,15 @@ img.ProseMirror-separator {
|
|
|
226
227
|
text-decoration: underline 1px;
|
|
227
228
|
}
|
|
228
229
|
|
|
230
|
+
.ProseMirror mark {
|
|
231
|
+
background: var(--meowdown-highlight);
|
|
232
|
+
color: inherit;
|
|
233
|
+
-webkit-box-decoration-break: clone;
|
|
234
|
+
box-decoration-break: clone;
|
|
235
|
+
border-radius: 2px;
|
|
236
|
+
padding: 0 1px;
|
|
237
|
+
}
|
|
238
|
+
|
|
229
239
|
.ProseMirror code {
|
|
230
240
|
font-family: var(--meowdown-font-mono);
|
|
231
241
|
background: color-mix(in oklab, var(--meowdown-accent) 10%, transparent);
|
|
@@ -410,7 +420,7 @@ img.ProseMirror-separator {
|
|
|
410
420
|
background: var(--meowdown-selection);
|
|
411
421
|
}
|
|
412
422
|
|
|
413
|
-
.ProseMirror.ProseMirror-hideselection ::selection {
|
|
423
|
+
.ProseMirror:has(.md-atomic-selected), .ProseMirror.ProseMirror-hideselection ::selection {
|
|
414
424
|
--meowdown-selection: transparent;
|
|
415
425
|
caret-color: #0000;
|
|
416
426
|
}
|
|
@@ -432,6 +442,7 @@ img.ProseMirror-separator {
|
|
|
432
442
|
.ProseMirror .md-tag {
|
|
433
443
|
background: color-mix(in oklab, var(--meowdown-accent) 10%, transparent);
|
|
434
444
|
color: color-mix(in oklab, var(--meowdown-accent) 80%, var(--meowdown-heading));
|
|
445
|
+
cursor: pointer;
|
|
435
446
|
border-radius: .35rem;
|
|
436
447
|
padding: .1em .35em;
|
|
437
448
|
}
|
|
@@ -478,7 +489,7 @@ img.ProseMirror-separator {
|
|
|
478
489
|
display: block;
|
|
479
490
|
}
|
|
480
491
|
|
|
481
|
-
.ProseMirror[data-mark-mode="hide"] .md-image-view:has(.md-atomic-selected) .md-image-preview, .ProseMirror
|
|
492
|
+
.ProseMirror[data-mark-mode="hide"] .md-image-view:has(.md-atomic-selected) .md-image-preview, .ProseMirror .md-wikilink-view:has(.md-atomic-selected) .md-wikilink-label {
|
|
482
493
|
outline: 2px solid var(--meowdown-node-outline);
|
|
483
494
|
outline-offset: 2px;
|
|
484
495
|
background: var(--meowdown-node-selection);
|
|
@@ -539,3 +550,38 @@ img.ProseMirror-separator {
|
|
|
539
550
|
}
|
|
540
551
|
}
|
|
541
552
|
}
|
|
553
|
+
|
|
554
|
+
.ProseMirror[data-mark-mode="hide"] .md-wikilink-view-content, .ProseMirror[data-mark-mode="focus"] .md-wikilink-view-content, .ProseMirror[data-mark-mode="hide"] .md-image-view-content, .ProseMirror[data-mark-mode="focus"] .md-image-view-content {
|
|
555
|
+
vertical-align: bottom;
|
|
556
|
+
height: 100%;
|
|
557
|
+
display: inline-flex;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
.ProseMirror[data-mark-mode="hide"] .md-image-view-content, .ProseMirror[data-mark-mode="focus"] .md-image-view-content {
|
|
561
|
+
overflow: hidden;
|
|
562
|
+
|
|
563
|
+
&:not(:has(.show)) {
|
|
564
|
+
width: 0;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
.ProseMirror[data-mark-mode="hide"] .md-wikilink-view-content, .ProseMirror[data-mark-mode="focus"] .md-wikilink-view-content {
|
|
569
|
+
background-color: #0000;
|
|
570
|
+
width: 0;
|
|
571
|
+
min-width: 0;
|
|
572
|
+
max-width: 0;
|
|
573
|
+
overflow: visible;
|
|
574
|
+
|
|
575
|
+
& * {
|
|
576
|
+
color: #0000;
|
|
577
|
+
background-color: #0000;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
.ProseMirror[data-mark-mode="hide"] .md-wikilink-view-content :is(.md-mark, .md-wikilink-source), .ProseMirror[data-mark-mode="focus"] .md-wikilink-view-content :is(.md-mark, .md-wikilink-source), .ProseMirror[data-mark-mode="hide"] .md-image-view-content :is(.md-mark, .md-image-source), .ProseMirror[data-mark-mode="focus"] .md-image-view-content :is(.md-mark, .md-image-source) {
|
|
582
|
+
width: 0;
|
|
583
|
+
min-width: 0;
|
|
584
|
+
max-width: 0;
|
|
585
|
+
display: inline-flex;
|
|
586
|
+
overflow: visible;
|
|
587
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meowdown/core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.22.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -38,9 +38,12 @@
|
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@ocavue/tsconfig": "^0.7.1",
|
|
40
40
|
"@tsdown/css": "^0.22.3",
|
|
41
|
+
"@types/mdast": "^4.0.4",
|
|
41
42
|
"@vitest/browser-playwright": "^4.1.9",
|
|
42
43
|
"dedent": "^1.7.2",
|
|
43
44
|
"diffable-html-snapshot": "^0.3.0",
|
|
45
|
+
"hast-util-to-mdast": "^10.1.2",
|
|
46
|
+
"mdast-util-to-markdown": "^2.1.2",
|
|
44
47
|
"tsdown": "^0.22.3",
|
|
45
48
|
"vitest": "^4.1.9",
|
|
46
49
|
"@meowdown/vitest": "0.0.0"
|