@meowdown/core 0.16.1 → 0.17.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
@@ -46,7 +46,7 @@ Heading shortcuts toggle the current block to a heading of that level (or back t
46
46
  - `--meowdown-image-radius`: corner radius of rendered inline images.
47
47
  - `--meowdown-placeholder`: placeholder text color (defaults to `--meowdown-muted`).
48
48
  - `--meowdown-font-mono`: monospace font stack.
49
- - `--meowdown-gutter`: horizontal editor padding. Floating UI such as the block handle (in `@meowdown/react`) lives inside it; keep it at least `3.5rem`.
49
+ - `--meowdown-gutter`: horizontal editor padding. Applied to the editable root's `.meowdown-content` class (set by `@meowdown/react`), not `.ProseMirror`, so the block handle's drag preview stays unpadded. Floating UI such as the block handle lives inside it; keep it at least `3.5rem`.
50
50
  - `--meowdown-selection`: text `::selection` background.
51
51
  - `--meowdown-node-outline`: outline of a selected node; border color of selected tables and cells.
52
52
  - `--meowdown-node-selection`: background wash of a selected node or selected cells.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Editor, Extension, ExtractNodeBuilders, PlainExtension, Priority, Union, withPriority } from "@prosekit/core";
2
2
  import { CodeBlockAttrs } from "@prosekit/extensions/code-block";
3
+ import { HorizontalRuleExtension } from "@prosekit/extensions/horizontal-rule";
3
4
  import { ProseMirrorNode } from "@prosekit/pm/model";
4
5
  import { ListExtension } from "@prosekit/extensions/list";
5
6
  import { PlaceholderOptions, definePlaceholder } from "@prosekit/extensions/placeholder";
@@ -49,6 +50,21 @@ type ListTaskMarkerExtension = Extension<{
49
50
  }>;
50
51
  type MeowdownListExtension = Union<[ListExtension, ListMarkerExtension, ListTaskMarkerExtension]>;
51
52
  //#endregion
53
+ //#region src/extensions/horizontal-rule.d.ts
54
+ interface MeowdownHorizontalRuleAttrs {
55
+ /**
56
+ * The literal markdown marker of a thematic break, e.g. `***`, `___`, or
57
+ * `- - -`. Defaults to null, which the serializer emits as the canonical `---`.
58
+ */
59
+ marker?: string | null;
60
+ }
61
+ type HorizontalRuleMarkerExtension = Extension<{
62
+ Nodes: {
63
+ horizontalRule: MeowdownHorizontalRuleAttrs;
64
+ };
65
+ }>;
66
+ type MeowdownHorizontalRuleExtension = Union<[HorizontalRuleExtension, HorizontalRuleMarkerExtension]>;
67
+ //#endregion
52
68
  //#region src/extensions/inline-marks.d.ts
53
69
  interface MdImageViewAttrs {
54
70
  src: string;
@@ -80,19 +96,31 @@ interface MdPackAttrs {
80
96
  }
81
97
  //#endregion
82
98
  //#region src/extensions/extension.d.ts
83
- declare function defineEditorExtensionImpl(): import("@prosekit/core").Union<readonly [import("@prosekit/extensions/paragraph").ParagraphExtension, import("@prosekit/extensions/doc").DocExtension, import("@prosekit/core").Extension<{
99
+ declare function defineEditorExtensionImpl(): import("@prosekit/core").Union<readonly [import("@prosekit/core").Extension<{
100
+ Nodes: import("@prosekit/core").SimplifyDeeper<{
101
+ paragraph: import("@prosekit/pm/model").Attrs;
102
+ }>;
103
+ Marks: never;
104
+ Commands: {
105
+ setParagraph: [];
106
+ };
107
+ }>, import("@prosekit/extensions/doc").DocExtension, import("@prosekit/core").Extension<{
84
108
  Nodes: {
85
109
  doc: {
86
110
  frontmatter?: Frontmatter;
87
111
  };
88
112
  };
89
113
  }>, import("@prosekit/extensions/text").TextExtension, import("@prosekit/extensions/blockquote").BlockquoteExtension, MeowdownListExtension, import("@prosekit/core").Union<readonly [import("@prosekit/extensions/heading").HeadingSpecExtension, import("@prosekit/core").Extension<{
114
+ Nodes: {
115
+ heading: import("@prosekit/extensions/heading").HeadingAttrs;
116
+ };
117
+ }>, import("@prosekit/core").Extension<{
90
118
  Nodes: {
91
119
  heading: {
92
120
  setextUnderline?: number | null;
93
121
  };
94
122
  };
95
- }>, import("@prosekit/core").PlainExtension, import("@prosekit/extensions/heading").HeadingCommandsExtension, import("@prosekit/core").PlainExtension]>, import("@prosekit/core").Union<readonly [import("@prosekit/extensions/table").TableSpecExtension, import("@prosekit/extensions/table").TableRowSpecExtension, import("@prosekit/extensions/table").TableCellSpecExtension, import("@prosekit/extensions/table").TableHeaderCellSpecExtension, import("@prosekit/core").PlainExtension, import("@prosekit/extensions/table").TableCommandsExtension, import("@prosekit/core").PlainExtension]>, import("@prosekit/extensions/code-block").CodeBlockExtension, import("@prosekit/extensions/horizontal-rule").HorizontalRuleExtension, import("@prosekit/core").Union<readonly [import("@prosekit/core").Extension<{
123
+ }>, import("@prosekit/core").PlainExtension, import("@prosekit/extensions/heading").HeadingCommandsExtension, import("@prosekit/core").PlainExtension]>, import("@prosekit/core").Union<readonly [import("@prosekit/extensions/table").TableSpecExtension, import("@prosekit/extensions/table").TableRowSpecExtension, import("@prosekit/extensions/table").TableCellSpecExtension, import("@prosekit/extensions/table").TableHeaderCellSpecExtension, import("@prosekit/core").PlainExtension, import("@prosekit/extensions/table").TableCommandsExtension, import("@prosekit/core").PlainExtension, import("@prosekit/core").PlainExtension]>, import("@prosekit/extensions/code-block").CodeBlockExtension, MeowdownHorizontalRuleExtension, import("@prosekit/core").Union<readonly [import("@prosekit/core").Extension<{
96
124
  Marks: {
97
125
  mdMark: import("@prosekit/pm/model").Attrs;
98
126
  };
@@ -256,6 +284,11 @@ declare const codeBlockLanguages: ReadonlyArray<{
256
284
  }>;
257
285
  //#endregion
258
286
  //#region src/converters/pm-to-md.d.ts
287
+ /** Options for {@link docToMarkdown}. */
288
+ interface DocToMarkdownOptions {
289
+ /** Whether to serialize the doc's `frontmatter` attribute as a leading `---` block. Off by default. */
290
+ frontmatter?: boolean;
291
+ }
259
292
  /**
260
293
  * Convert a ProseMirror document into a Markdown string.
261
294
  *
@@ -271,12 +304,19 @@ declare const codeBlockLanguages: ReadonlyArray<{
271
304
  * - Backtick fence width and cell escaping use single linear loops, no
272
305
  * regex on the hot path.
273
306
  */
274
- declare function docToMarkdown(node: ProseMirrorNode): string;
307
+ declare function docToMarkdown(node: ProseMirrorNode, options?: DocToMarkdownOptions): string;
275
308
  //#endregion
276
309
  //#region src/extensions/schema.d.ts
277
310
  type TypedNodeBuilders = ExtractNodeBuilders<EditorExtension>;
278
311
  //#endregion
279
312
  //#region src/converters/md-to-pm.d.ts
313
+ /** Options for {@link markdownToDoc}. */
314
+ interface MarkdownToDocOptions {
315
+ /** Node builders to build the document with. Defaults to the shared schema's builders. */
316
+ nodes?: TypedNodeBuilders;
317
+ /** Whether to peel a leading `---` frontmatter block onto the doc's `frontmatter` attribute. Off by default. */
318
+ frontmatter?: boolean;
319
+ }
280
320
  /**
281
321
  * Convert a markdown string into a ProseMirror document node.
282
322
  *
@@ -291,17 +331,23 @@ type TypedNodeBuilders = ExtractNodeBuilders<EditorExtension>;
291
331
  * inline marks because the markdown stays literal text - emphasis / link /
292
332
  * inline-code characters survive verbatim.
293
333
  */
294
- declare function markdownToDoc(markdown: string, nodes?: TypedNodeBuilders): ProseMirrorNode;
334
+ declare function markdownToDoc(markdown: string, options?: MarkdownToDocOptions): ProseMirrorNode;
295
335
  //#endregion
296
336
  //#region src/converters/check-roundtrip.d.ts
297
337
  /**
298
338
  * How faithfully markdown survives a parse-then-serialize round trip:
299
339
  * - `exact`: byte-identical (modulo the trailing newline).
300
- * - `normalizing`: same non-blank lines, only blank-line layout differs.
340
+ * - `normalizing`: same non-blank lines ignoring trailing whitespace; only
341
+ * blank-line layout or insignificant trailing whitespace differs.
301
342
  * - `lossy`: a non-blank line changed, so content would be lost or altered.
302
343
  */
303
344
  type RoundTripFidelity = 'exact' | 'normalizing' | 'lossy';
345
+ /** Options for {@link checkRoundTrip}. */
346
+ interface CheckRoundTripOptions {
347
+ /** Whether to handle a leading `---` frontmatter block. Off by default. */
348
+ frontmatter?: boolean;
349
+ }
304
350
  /** Classify how `markdown` survives the editor's parse-then-serialize round trip. */
305
- declare function checkRoundTrip(markdown: string): RoundTripFidelity;
351
+ declare function checkRoundTrip(markdown: string, options?: CheckRoundTripOptions): RoundTripFidelity;
306
352
  //#endregion
307
- export { type CodeBlockAttrs, EDITOR_KEY_BINDINGS, type EditorExtension, type ImageClickHandler, type ImageClickPayload, type ImageOptions, type LinkClickHandler, type LinkClickPayload, type MarkMode, type PlaceholderOptions, Priority, type RoundTripFidelity, type TypedEditor, type WikilinkClickHandler, type WikilinkClickPayload, checkRoundTrip, codeBlockLanguages, defineBulletAfterHeading, defineEditorExtension, defineEmbedPaste, defineImage, defineImageClickHandler, defineLinkClickHandler, defineMarkMode, definePlaceholder, defineReadonly, defineWikilinkClickHandler, docToMarkdown, markdownToDoc, withPriority };
353
+ export { type CheckRoundTripOptions, type CodeBlockAttrs, type DocToMarkdownOptions, EDITOR_KEY_BINDINGS, type EditorExtension, type ImageClickHandler, type ImageClickPayload, type ImageOptions, type LinkClickHandler, type LinkClickPayload, type MarkMode, type MarkdownToDocOptions, type PlaceholderOptions, Priority, type RoundTripFidelity, type TypedEditor, type WikilinkClickHandler, type WikilinkClickPayload, checkRoundTrip, codeBlockLanguages, defineBulletAfterHeading, defineEditorExtension, defineEmbedPaste, defineImage, defineImageClickHandler, defineLinkClickHandler, defineMarkMode, definePlaceholder, defineReadonly, defineWikilinkClickHandler, docToMarkdown, markdownToDoc, withPriority };
package/dist/index.js CHANGED
@@ -1,19 +1,23 @@
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,definePlugin as f,getMarkRange as p,getMarkType as m,getNodeType as h,isApple as ee,isAtBlockStart as te,isTextSelection as ne,toggleNode as re,union as g,unsetBlockType as ie,withPriority as ae,withPriority as _,withSkipCodeBlock as oe}from"@prosekit/core";import{defineBlockquote as se}from"@prosekit/extensions/blockquote";import{defineCodeBlock as ce,defineCodeBlockHighlight as le}from"@prosekit/extensions/code-block";import{defineDoc as ue}from"@prosekit/extensions/doc";import{defineGapCursor as de}from"@prosekit/extensions/gap-cursor";import{defineHorizontalRule as fe}from"@prosekit/extensions/horizontal-rule";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 v,PluginKey as y,TextSelection as b}from"@prosekit/pm/state";import{Decoration as _e,DecorationSet as x}from"@prosekit/pm/view";import{LanguageDescription as ve}from"@codemirror/language";import{languages as ye}from"@codemirror/language-data";import{classHighlighter 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{ReplaceStep as Te,Step as Ee,StepResult as De,Transform as Oe}from"@prosekit/pm/transform";import{Mark as ke}from"@prosekit/pm/model";import{GFM as Ae,parser as je}from"@lezer/markdown";import{once as Me}from"@ocavue/utils";import{defineList as Ne}from"@prosekit/extensions/list";import{defineTableCellSpec as Pe,defineTableCommands as Fe,defineTableDropIndicator as Ie,defineTableEditingPlugin as Le,defineTableHeaderCellSpec as Re,defineTableRowSpec as ze,defineTableSpec as Be}from"@prosekit/extensions/table";import{closeHistory as S}from"@prosekit/pm/history";import{definePlaceholder as Ve}from"@prosekit/extensions/placeholder";import{defineReadonly as He}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 p(i,n)}const Ue=new Set([`mdMark`,`mdLinkUri`]),We=new Set([`mdImageSource`,`mdWikilinkSource`]),Ge=new y(`mark-mode`);function Ke(e){return new v({key:Ge,state:{init:()=>e,apply:(e,t)=>t},props:{attributes:{"data-mark-mode":e},decorations:e===`focus`?e=>Xe(e):void 0,clipboardTextSerializer:e===`show`?void 0:Ye}})}function qe(e){return f(Ke(e))}function Je(e){return Ge.getState(e)}function Ye(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 Xe(e){let{selection:t}=e;if(!t.empty)return x.empty;let n=t.$head,{parent:r}=n;if(!r.isTextblock||r.type.spec.code)return x.empty;let i=p(n,m(e.schema,`mdPack`));return i?x.create(e.doc,[_e.inline(i.from,i.to,{class:`show`})]):x.empty}function w(e,t){let n=Je(t);return n?e.flatMap(e=>e.modes.includes(n)?[e.name]:[]):[]}function T(e,t,n){for(let r of n){let n=C(e,t,r);if(n)return n}}function E(e,t,n){let r=T(e,t,n);return r&&r.to===t?r:void 0}function D(e,t,n){let r=T(e,t,n);return r&&r.from===t?r:void 0}function O(e,t){let{from:n,to:r,empty:i}=e.selection;if(i)return;let a=T(e,n,t);return a&&a.from===n&&a.to===r?a:void 0}function Ze(e,t){return b.create(e.doc,t.from,t.to)}function Qe(e){return(t,n)=>{let r=w(e,t);if(r.length===0||!ne(t.selection))return!1;let i=t.selection;if(i.empty){let e=D(t,i.from,r);if(e)return n?.(t.tr.setSelection(Ze(t,e))),!0;if(E(t,i.from,r)){let e=t.doc.resolve(i.from);return i.from>=e.end()?!1:(n?.(t.tr.setSelection(b.create(t.doc,i.from+1))),!0)}return!1}let a=O(t,r);return a?(n?.(t.tr.setSelection(b.create(t.doc,a.to))),!0):!1}}function $e(e){return(t,n)=>{let r=w(e,t);if(r.length===0||!ne(t.selection))return!1;let i=t.selection;if(i.empty){let e=E(t,i.from,r);return e?(n?.(t.tr.setSelection(Ze(t,e))),!0):!1}let a=O(t,r);return a?(n?.(t.tr.setSelection(b.create(t.doc,a.from))),!0):!1}}function et(e){return(t,n)=>{let r=w(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=E(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!D(t,i,r)||i<=t.doc.resolve(i).start()?!1:(n?.(t.tr.delete(i-1,i)),!0)}}function tt(e){return(t,n)=>{let r=w(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):!E(t,i,r)||i>=t.doc.resolve(i).end()?!1:(n?.(t.tr.delete(i,i+1)),!0)}}function nt(e,t){return new v({key:new y(`atomic-mark-selection-${t}`),props:{decorations:n=>{let r=w(e,n);if(r.length===0)return;let i=O(n,r);if(i)return x.create(n.doc,[_e.inline(i.from,i.to,{class:t})])}}})}function rt({marks:e,selectedClass:n}){return g(_(c({ArrowRight:Qe(e),ArrowLeft:$e(e),Backspace:et(e),Delete:tt(e)}),t.high),f(nt(e,n)))}const k=new Map;async function it(e){let t=ve.matchLanguageName(ye,e,!0);if(!t){k.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),k.set(e,null)}if(k.has(e))return;if(!n){k.set(e,null);return}let r=xe({parse:e=>n.language.parser.parse(e.content),highlighter:be});k.set(e,r)}const at=e=>{let t=e.language?.trim();if(!t)return[];let n=k.get(t);return n?n(e):n===null?[]:it(t)};function ot(){return le({parser:at,nodeTypes:[`codeBlock`]})}function st(){return d({type:`doc`,attr:`frontmatter`,default:null})}function ct(){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 A(e){return oe(re({type:`heading`,attrs:{level:e}}))}const lt=(e,t,n)=>te(e,n)?.parent.type.name===`heading`?ie()(e,t,n):!1;function ut(){return c({"Mod-1":A(1),"Mod-2":A(2),"Mod-3":A(3),"Mod-4":A(4),"Mod-5":A(5),"Mod-6":A(6),Backspace:lt})}function dt(){return g(we(),ct(),Ce(),Se(),ut())}function ft(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function pt(e,t){let[n,r,i]=t;return[n,r,i.map(t=>ke.fromJSON(e,t))]}var j=class e extends Ee{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return De.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 Oe(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new Oe(e),n.addMark(i,c,t));return!1})}return De.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return mt;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 Te(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(ft)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>pt(t,e)))}};Ee.jsonID(`batchSetMark`,j);const mt=new j([]),ht=new Set([`com`,`br`,`net`,`jp`,`org`,`in`,`de`,`ru`,`it`,`fr`]),gt=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;function _t(e){let t=e.indexOf(`/`);return t===-1?e:e.slice(0,t)}function vt(e){let t=e.split(`.`);if(t.length<2)return!1;let n=t[t.length-1].toLowerCase();if(!ht.has(n)||t[t.length-2].length<3)return!1;for(let e of t)if(e.length>63||!gt.test(e))return!1;return!0}function yt(e){return e===32||e===9||e===10||e===13}const bt=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+(?:\/[^\s<]*)?/i,xt=/[\s(*_~]/;function St(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45}function Ct(e,t,n){let r=0;for(let i=0;i<t;i++)e[i]===n&&r++;return r}function wt(e){let t=e.length;for(;;){let n=e[t-1];if(/[?!.,:*_~]/.test(n)||n===`)`&&Ct(e,t,`)`)>Ct(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 Tt={parseInline:[{name:`BareAutolink`,before:`Link`,parse(e,t,n){if(!St(t)||e.hasOpenLink)return-1;let r=e.slice(n-1,n);if(r!==``&&!xt.test(r))return-1;let i=bt.exec(e.slice(n,e.end));if(!i)return-1;let a=wt(i[0]);return a===0||!vt(_t(i[0].slice(0,a)))?-1:e.addElement(e.elt(`URL`,n,n+a))}}]};function Et(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 Dt(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const Ot={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(!Et(t))break;i||=Dt(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},kt={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 At(e){return e.end}const M=je.configure([Ae,Ot,kt,Tt]),jt=M.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:At}]});function N(e){return M.parseInline(e,0)}function P(e,t,n=[]){for(let r of e)t(r)&&n.push(r),P(r.children,t,n);return n}function Mt(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const F=Mt(M);function Nt(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 Pt(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 Ft(){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 It(){return u({name:`mdWikilinkView`,constructor:Ft()})}const I=new Map([[F.Emphasis,`mdEm`],[F.StrongEmphasis,`mdStrong`],[F.InlineCode,`mdCode`],[F.Strikethrough,`mdDel`],[F.EmphasisMark,`mdMark`],[F.CodeMark,`mdMark`],[F.LinkMark,`mdMark`],[F.StrikethroughMark,`mdMark`],[F.URL,`mdLinkUri`],[F.Hashtag,`mdTag`],[F.WikilinkMark,`mdMark`]]);function Lt(e,t){let n=N(t),r=[];return L(n,[],0,t.length,t,e,r),r}function Rt(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)||vt(_t(e)))return`https://${e}`}function L(e,t,n,r,i,a,o){let s=n;for(let n of e){n.from>s&&B(o,s,n.from,t);let e=n.type;if(e===F.Link)R(n,t,i,a,o);else if(e===F.Image)zt(n,t,i,a,o);else if(e===F.Wikilink)z(n,t,i,a,o);else if(e===F.URL){let e=Rt(i.slice(n.from,n.to)),r=e?a.mdLinkText.create({href:e}):a.mdLinkUri.create();B(o,n.from,n.to,[...t,r])}else{let r;e===F.Emphasis?r=`italic`:e===F.StrongEmphasis?r=`bold`:e===F.InlineCode?r=`code`:e===F.Strikethrough?r=`strike`:e===F.Autolink&&(r=`autolink`);let s=r?[...t,a.mdPack.create({key:r})]:t,c=I.get(e),l=c?[...s,a[c].create()]:s;n.children.length===0?B(o,n.from,n.to,l):L(n.children,l,n.from,n.to,i,a,o)}s=n.to}s<r&&B(o,s,r,t)}function R(e,t,n,r,i){let a=-1,o=null,s=0;for(let t of e.children)t.type===F.LinkMark?(s++,s===2&&(a=t.from)):t.type===F.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;B(i,p,t.from,e)}let e=u(t.from)?[...f,l]:f;if(t.type===F.Wikilink){z(t,e,n,r,i),p=t.to;continue}let a=I.get(t.type),o=a?[...e,r[a].create()]:e;t.children.length===0?B(i,t.from,t.to,o):L(t.children,o,t.from,t.to,n,r,i),p=t.to}p<e.to&&B(i,p,e.to,f)}function zt(e,t,n,r,i){let a=e.children.find(e=>e.type===F.URL);if(!a){R(e,t,n,r,i);return}let o=e.children.filter(e=>e.type===F.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&&B(i,m,t.from,p(m));let e=I.get(t.type),a=e?[...p(t.from),r[e].create()]:p(t.from);t.children.length===0?B(i,t.from,t.to,a):L(t.children,a,t.from,t.to,n,r,i),m=t.to}m<e.to&&B(i,m,e.to,p(m))}function z(e,t,n,r,i){let{target:a,display:o}=Pt(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&&B(i,d,t.from,u(d));let e=r.mdMark.create();t.from<l&&t.to>l?(B(i,t.from,l,[...u(t.from),e]),B(i,l,t.to,[...u(l),e])):B(i,t.from,t.to,[...u(t.from),e]),d=t.to}d<e.to&&B(i,d,e.to,u(d))}function B(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&Nt(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const Bt=Me(()=>{let e=Nn().schema;if(e==null)throw Error(`Unexpected empty schema`);return e}),Vt=Me(()=>r(Bt())),V=`meowdown_mark_builders`;function Ht(e){let t=e.cached[V];if(t)return t;let r=n(e);return e.cached[V]=r,r}const H=`inline-marks-applied`,Ut=new WeakMap;let Wt=0,Gt=0;function Kt(e,t,n){let r=Ut.get(e);if(r?Gt++:(Wt++,r=Lt(Ht(n),e.textContent),Ut.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 qt(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 Jt(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=Kt(t,r+1,e.schema);return i.length>0&&n.push(...i),!1}),n}function Yt(){return new v({key:new y(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(H))return null;let r=Jt(n,qt(e,n));if(r.length===0)return null;let i=n.tr.step(new j(r));return i.setMeta(H,!0),i.setMeta(`addToHistory`,!1),i},view(e){return e.dispatch(Xt(e.state)),{}}})}function Xt(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function Zt(){return f(Yt())}function Qt(){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 $t(){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 en(){return l({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function tn(){return l({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function nn(){return l({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function rn(){return l({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function an(){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 on(){return l({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function sn(){return l({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function cn(){return l({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function ln(){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 dn(){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 fn(){return g(en(),tn(),nn(),rn(),an(),on(),sn(),cn(),ln(),un(),$t(),Qt(),dn())}function pn(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 U={em:{node:F.Emphasis,delim:`*`},strong:{node:F.StrongEmphasis,delim:`**`},code:{node:F.InlineCode,delim:"`"},del:{node:F.Strikethrough,delim:`~~`}},mn=new Set([F.EmphasisMark,F.CodeMark,F.LinkMark,F.StrikethroughMark]);function W(e){return[e.children[0],e.children.at(-1)]}function G(e){let{type:t,children:n}=e;if(t===F.Emphasis||t===F.StrongEmphasis||t===F.Strikethrough)return[n[0].to,n.at(-1).from];if(t===F.Link||t===F.Image){let e=n.find((e,t)=>t>0&&e.type===F.LinkMark);return e?[n[0].to,e.from]:null}return null}function K(e,t,n){for(let r of e){if(r.to<=t||r.from>=n||t<=r.from&&r.to<=n)continue;let i=G(r);return i&&i[0]<=t&&n<=i[1]?K(r.children,t,n):K(e,Math.min(t,r.from),Math.max(n,r.to))}return[t,n]}function hn(e,t,n){for(let r of e)if(!(r.to<=t||r.from>=n)&&(t>r.from||r.to>n))return hn(e,Math.min(t,r.from),Math.max(n,r.to));return[t,n]}const q=e=>e===` `||e===` `;function gn(e,t,n){for(;t<n&&q(e[t]);)t++;for(;n>t&&q(e[n-1]);)n--;return[t,n]}function _n(e,t,n,r){let i=P(N(e),e=>e.type===r.node||mn.has(e.type));for(let r=t;r<n;r++)if(!q(e[r])&&i.every(e=>!(e.from<=r&&r<e.to)))return!1;return!0}function vn(e,t,n,r,i){let a=N(e),o=P(a,e=>e.type===r.node);return i?xn(e,o,t,n):yn(e,a,o,t,n,r)}function yn(e,t,n,r,i,a){for(let e=0;e!==i-r;){e=i-r,[r,i]=K(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]=W(e);o.push({from:t.from,to:t.to,insert:``}),o.push({from:n.from,to:n.to,insert:``})}let[s,c]=bn(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function bn(e,t,n,r,i){if(i.node!==F.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(pn(a)+1),s=a.startsWith("`")||a.endsWith("`")?` `:``;return[o+s,s+o]}function xn(e,t,n,r){let i=[];for(let a of t){if(a.to<=n||a.from>=r)continue;let[t,o]=W(a),s=Math.max(n,t.to),c=Math.min(r,o.from);for(s>=c&&([s,c]=[t.to,o.from]),[s,c]=hn(a.children.slice(1,-1),s,c);s>t.to&&q(e[s-1]);)s--;for(;c<o.from&&q(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 Sn(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=N(e),o=P(a,e=>e.type===n.node).findLast(e=>e.from<=t&&t<=e.to);if(o){let[e,n]=W(o);return{kind:`move`,pos:t===o.from?e.to:t===o.to?n.from:o.to}}return Cn(a,t)||e[t-1]===r[0]||e[t]===r[0]?null:{kind:`insert`,pos:t}}function Cn(e,t){for(let n of e)if(n.from<t&&t<n.to){let e=G(n);return!e||t<e[0]||t>e[1]?!0:Cn(n.children,t)}return!1}function J(e){return(t,n)=>{if(t.selection.empty)return wn(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]=gn(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:_n(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>vn(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(b.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 wn(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=Sn(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(b.create(o.doc,i+a.pos)),a.kind===`insert`&&(o.insertText(e.delim+e.delim,i+a.pos),o.setSelection(b.create(o.doc,i+a.pos+e.delim.length))),n(o.scrollIntoView())}return!0}function Tn(){return o({toggleEm:()=>J(U.em),toggleStrong:()=>J(U.strong),toggleCode:()=>J(U.code),toggleDel:()=>J(U.del)})}function En(){return c({"Mod-b":J(U.strong),"Mod-i":J(U.em),"Mod-e":J(U.code),"Mod-Shift-x":J(U.del)})}function Dn(){return g(Tn(),En())}function On(){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 kn(){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 An(){return g(Ne(),On(),kn())}function jn(){return g(Be(),ze(),Pe(),Re(),Le({allowTableNodeSelection:!0}),Fe(),Ie())}function Mn(){return g(me(),ue(),st(),he(),se(),An(),dt(),jn(),ce(),fe(),fn(),ot(),Zt(),Dn(),It(),rt({marks:[{name:`mdImageSource`,modes:[`hide`]},{name:`mdWikilinkSource`,modes:[`hide`,`focus`,`show`]}],selectedClass:`md-atomic-selected`}),a(),i(),s(),de(),ge(),pe())}function Nn(){return Mn()}function Pn(e){let t;return f(new v({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 Fn=new y(`meowdown-wikilink-click`);function In(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 Ln(e){return Pn({key:Fn,selector:`.md-wikilink-label, .md-wikilink-source`,preventDefault:!1,findHitAt:(e,t)=>{let n=In(e,t);return n?{from:n.from,to:n.to,payload:n.target}:void 0},onClick:(t,n)=>e({target:t,event:n})})}const Rn=new y(`meowdown-link-click`);function zn(e,t){let n=C(e,t,`mdLinkText`);if(n)return{from:n.from,to:n.to,href:n.mark.attrs.href}}function Bn(e){return Pn({key:Rn,selector:`.md-link`,preventDefault:!0,findHitAt:(e,t)=>{let n=zn(e,t);return n?{from:n.from,to:n.to,payload:n.href}:void 0},onClick:(t,n)=>e({href:t,event:n})})}function Vn(){return typeof window>`u`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}const Hn=/^(?:www\.|mobile\.)?(?:twitter\.com|x\.com)$/i,Un=/\/status(?:es)?\/(\d+)/;function Wn(e){let t;try{t=new URL(e)}catch{return}if(Hn.test(t.hostname))return Un.exec(t.pathname)?.[1]}const Gn=e=>{let t=Wn(e);if(t)return{key:`tweet:${t}`,render:()=>{let e=Vn()?`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`),Kn(n),n}}};function Kn(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 qn=/^(?:www\.|m\.)?(?:youtube\.com|youtube-nocookie\.com)$/i,Jn=/^(?:www\.)?youtu\.be$/i,Yn=/^[\w-]{11}$/;function Xn(e){let t;try{t=new URL(e)}catch{return}let n=null;if(Jn.test(t.hostname))n=t.pathname.slice(1);else if(qn.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||!Yn.test(n))return;let r=t.searchParams.get(`start`)??t.searchParams.get(`t`),i=r?Zn(r):void 0;return{videoId:n,startSeconds:i}}function Zn(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 Qn=[e=>{let t=Xn(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}}},Gn];function $n(e){for(let t of Qn){let n=t(e);if(n)return n}}function er(e){return/^https?:\/\//i.test(e)?e:void 0}function tr(e,t,n){let r=$n(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??er)(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 nr(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=tr(n.src,n.alt,e);return a&&(a.contentEditable=`false`,r.appendChild(a)),{dom:r,contentDOM:i,ignoreMutation:e=>!i.contains(e.target)}}}function rr(e){return e?Array.from(e.files).filter(e=>e.type.startsWith(`image/`)):[]}const ir=e=>{console.error(`[meowdown] failed to save pasted image:`,e)};async function ar(e,t,n,r=ir,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 or(e){return new v({key:new y(`image-input`),props:{handlePaste:(t,n)=>{let r=rr(n.clipboardData),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(ar(t,r,i,a),!0)},handleDrop:(t,n)=>{let r=rr(n.dataTransfer),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(ar(t,r,i,a,t.posAtCoords({left:n.clientX,top:n.clientY})?.pos),!0)}}})}function sr(e={}){return g(u({name:`mdImageView`,constructor:nr(e)}),_(f(or(e)),t.high))}const cr=new y(`meowdown-image-click`);function lr(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 ur(e){return f(new v({key:cr,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=lr(t.state,t.posAtDOM(a,0));return o?(e({src:o.src,alt:o.alt,event:r}),!0):!1}}}))}const dr=new y(`meowdown-embed-paste`);function fr(e){let t=e.trim();if(!(!t||/\s/.test(t)))return $n(t)?t:void 0}function pr(e,t){return e.clipboardData?.getData(`text/plain`)||t.content.textBetween(0,t.content.size,`
3
- `)}function mr(e,t){let{from:n,to:r}=e.state.selection;e.dispatch(S(e.state.tr.insertText(t,n,r)));let i=e.state.tr.insertText(`![](${t})`,n,n+t.length);e.dispatch(S(i))}function hr(){return f(new v({key:dr,props:{handlePaste:(e,t,n)=>{let r=e.state.selection.$from.parent;if(!r.inlineContent||r.type.spec.code)return!1;let i=pr(t,n);if(!i)return!1;let a=fr(i);return a?(mr(e,a),!0):!1}}}))}const gr=(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=h(e.schema,`list`),i=h(e.schema,`paragraph`),a=r.create({kind:`bullet`},i.create()),o=n.after(),s=e.tr.insert(o,a);s.setSelection(b.create(s.doc,o+2)),t(s.scrollIntoView())}return!0};function _r(){return _(c({Enter:gr}),t.high)}const vr={"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`},yr=new Set([`MscGen`,`Xù`,`MsGenny`,`Angular Template`,`Brainfuck`,`Esper`,`Oz`,`Factor`,`Squirrel`,`Yacas`,`mIRC`,`FCL`,`ECL`,`MUMPS`,`Pig`,`Asterisk`,`Z80`]),br=ye.map(e=>e.name).filter(e=>!yr.has(e)).map(e=>({label:e,value:e.toLowerCase()})).concat({label:`Plain text`,value:``}).sort((e,t)=>e.label.localeCompare(t.label));function xr(e){let t=new Tr;return Sr(e.attrs.frontmatter,t),Er(e,t),t.finish()}function Sr(e,t){e!==null&&(t.write(`---`),t.write(`
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,isApple as ne,isAtBlockStart as re,isTextSelection as h,toggleNode as ie,union as g,unsetBlockType as ae,withPriority as oe,withPriority as _,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 v,PluginKey as y,TextSelection as b}from"@prosekit/pm/state";import{Decoration as ge,DecorationSet as x}from"@prosekit/pm/view";import{LanguageDescription as _e}from"@codemirror/language";import{languages as ve}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{defineHorizontalRule as we}from"@prosekit/extensions/horizontal-rule";import{ReplaceStep as Te,Step as Ee,StepResult as De,Transform as Oe}from"@prosekit/pm/transform";import{Mark as ke}from"@prosekit/pm/model";import{GFM as Ae,parser as je}from"@lezer/markdown";import{once as Me}from"@ocavue/utils";import{defineList as Ne}from"@prosekit/extensions/list";import{defineParagraphCommands as Pe,defineParagraphKeymap as Fe}from"@prosekit/extensions/paragraph";import{defineTableCellSpec as Ie,defineTableCommands as Le,defineTableDropIndicator as Re,defineTableEditingPlugin as ze,defineTableHeaderCellSpec as Be,defineTableRowSpec as Ve,defineTableSpec as He,deleteTable as Ue,isCellSelection as We}from"@prosekit/extensions/table";import{closeHistory as Ge}from"@prosekit/pm/history";import{definePlaceholder as Ke}from"@prosekit/extensions/placeholder";import{defineReadonly as qe}from"@prosekit/extensions/readonly";function S(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 Je=new Set([`mdMark`,`mdLinkUri`]),Ye=new Set([`mdImageSource`,`mdWikilinkSource`]),Xe=new y(`mark-mode`);function Ze(e){return new v({key:Xe,state:{init:()=>e,apply:(e,t)=>t},props:{attributes:{"data-mark-mode":e},decorations:e===`focus`?e=>tt(e):void 0,clipboardTextSerializer:e===`show`?void 0:et}})}function Qe(e){return p(Ze(e))}function $e(e){return Xe.getState(e)}function et(e){let t=[];return e.content.forEach(e=>{let n=[];e.descendants(e=>!e.isText||!e.text?!0:(!e.marks.some(e=>Ye.has(e.type.name))&&e.marks.some(e=>Je.has(e.type.name))||n.push(e.text),!1)),t.push(n.join(``))}),t.join(`
2
+ `)}function tt(e){let{selection:t}=e;if(!t.empty)return x.empty;let n=t.$head,{parent:r}=n;if(!r.isTextblock||r.type.spec.code)return x.empty;let i=m(n,ee(e.schema,`mdPack`));return i?x.create(e.doc,[ge.inline(i.from,i.to,{class:`show`})]):x.empty}function C(e,t){let n=$e(t);return n?e.flatMap(e=>e.modes.includes(n)?[e.name]:[]):[]}function w(e,t,n){for(let r of n){let n=S(e,t,r);if(n)return n}}function T(e,t,n){let r=w(e,t,n);return r&&r.to===t?r:void 0}function E(e,t,n){let r=w(e,t,n);return r&&r.from===t?r:void 0}function D(e,t){let{from:n,to:r,empty:i}=e.selection;if(i)return;let a=w(e,n,t);return a&&a.from===n&&a.to===r?a:void 0}function nt(e,t){return b.create(e.doc,t.from,t.to)}function rt(e){return(t,n)=>{let r=C(e,t);if(r.length===0||!h(t.selection))return!1;let i=t.selection;if(i.empty){let e=E(t,i.from,r);if(e)return n?.(t.tr.setSelection(nt(t,e))),!0;if(T(t,i.from,r)){let e=t.doc.resolve(i.from);return i.from>=e.end()?!1:(n?.(t.tr.setSelection(b.create(t.doc,i.from+1))),!0)}return!1}let a=D(t,r);return a?(n?.(t.tr.setSelection(b.create(t.doc,a.to))),!0):!1}}function it(e){return(t,n)=>{let r=C(e,t);if(r.length===0||!h(t.selection))return!1;let i=t.selection;if(i.empty){let e=T(t,i.from,r);return e?(n?.(t.tr.setSelection(nt(t,e))),!0):!1}let a=D(t,r);return a?(n?.(t.tr.setSelection(b.create(t.doc,a.from))),!0):!1}}function at(e){return(t,n)=>{let r=C(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=T(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!E(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=C(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=E(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!T(t,i,r)||i>=t.doc.resolve(i).end()?!1:(n?.(t.tr.delete(i,i+1)),!0)}}function st(e,t){return new v({key:new y(`atomic-mark-selection-${t}`),props:{decorations:n=>{let r=C(e,n);if(r.length===0)return;let i=D(n,r);if(i)return x.create(n.doc,[ge.inline(i.from,i.to,{class:t})])}}})}function ct({marks:e,selectedClass:n}){return g(_(c({ArrowRight:rt(e),ArrowLeft:it(e),Backspace:at(e),Delete:ot(e)}),t.high),p(st(e,n)))}const O=new Map;async function lt(e){let t=_e.matchLanguageName(ve,e,!0);if(!t){O.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),O.set(e,null)}if(O.has(e))return;if(!n){O.set(e,null);return}let r=be({parse:e=>n.language.parser.parse(e.content),highlighter:ye});O.set(e,r)}const ut=e=>{let t=e.language?.trim();if(!t)return[];let n=O.get(t);return n?n(e):n===null?[]:lt(t)};function dt(){return ue({parser:ut,nodeTypes:[`codeBlock`]})}function ft(){return d({type:`doc`,attr:`frontmatter`,default:null})}function pt(){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 k(e){return se(ie({type:`heading`,attrs:{level:e}}))}const ht=(e,t,n)=>re(e,n)?.parent.type.name===`heading`?ae()(e,t,n):!1;function gt(){return c({"Mod-1":k(1),"Mod-2":k(2),"Mod-3":k(3),"Mod-4":k(4),"Mod-5":k(5),"Mod-6":k(6),Backspace:ht})}function _t(){return g(Ce(),pt(),mt(),Se(),xe(),gt())}function vt(){return d({type:`horizontalRule`,attr:`marker`,default:null,toDOM:e=>e?[`data-hr-marker`,e]:null,parseDOM:e=>e.getAttribute(`data-hr-marker`)})}function yt(){return g(we(),vt())}function bt(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function xt(e,t){let[n,r,i]=t;return[n,r,i.map(t=>ke.fromJSON(e,t))]}var A=class e extends Ee{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return De.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 Oe(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new Oe(e),n.addMark(i,c,t));return!1})}return De.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return St;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 Te(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(bt)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>xt(t,e)))}};Ee.jsonID(`batchSetMark`,A);const St=new A([]),Ct=new Set([`com`,`br`,`net`,`jp`,`org`,`in`,`de`,`ru`,`it`,`fr`]),wt=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;function Tt(e){let t=e.indexOf(`/`);return t===-1?e:e.slice(0,t)}function Et(e){let t=e.split(`.`);if(t.length<2)return!1;let n=t[t.length-1].toLowerCase();if(!Ct.has(n)||t[t.length-2].length<3)return!1;for(let e of t)if(e.length>63||!wt.test(e))return!1;return!0}function Dt(e){return e===32||e===9||e===10||e===13}const Ot=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+(?:\/[^\s<]*)?/i,kt=/[\s(*_~]/;function At(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 Mt(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 Nt={parseInline:[{name:`BareAutolink`,before:`Link`,parse(e,t,n){if(!At(t)||e.hasOpenLink)return-1;let r=e.slice(n-1,n);if(r!==``&&!kt.test(r))return-1;let i=Ot.exec(e.slice(n,e.end));if(!i)return-1;let a=Mt(i[0]);return a===0||!Et(Tt(i[0].slice(0,a)))?-1:e.addElement(e.elt(`URL`,n,n+a))}}]};function Pt(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 Ft(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const It={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(!Pt(t))break;i||=Ft(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},Lt={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 Rt(e){return e.end}const j=je.configure([Ae,It,Lt,Nt]),zt=j.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:Rt}]});function M(e){return j.parseInline(e,0)}function N(e,t,n=[]){for(let r of e)t(r)&&n.push(r),N(r.children,t,n);return n}function Bt(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const P=Bt(j);function Vt(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 Ht(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 Ut(){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 Wt(){return u({name:`mdWikilinkView`,constructor:Ut()})}const F=new Map([[P.Emphasis,`mdEm`],[P.StrongEmphasis,`mdStrong`],[P.InlineCode,`mdCode`],[P.Strikethrough,`mdDel`],[P.EmphasisMark,`mdMark`],[P.CodeMark,`mdMark`],[P.LinkMark,`mdMark`],[P.StrikethroughMark,`mdMark`],[P.URL,`mdLinkUri`],[P.Hashtag,`mdTag`],[P.WikilinkMark,`mdMark`]]);function Gt(e,t){let n=M(t),r=[];return I(n,[],0,t.length,t,e,r),r}function Kt(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)||Et(Tt(e)))return`https://${e}`}function I(e,t,n,r,i,a,o){let s=n;for(let n of e){n.from>s&&R(o,s,n.from,t);let e=n.type;if(e===P.Link)qt(n,t,i,a,o);else if(e===P.Image)Jt(n,t,i,a,o);else if(e===P.Wikilink)L(n,t,i,a,o);else if(e===P.URL){let e=Kt(i.slice(n.from,n.to)),r=e?a.mdLinkText.create({href:e}):a.mdLinkUri.create();R(o,n.from,n.to,[...t,r])}else{let r;e===P.Emphasis?r=`italic`:e===P.StrongEmphasis?r=`bold`:e===P.InlineCode?r=`code`:e===P.Strikethrough?r=`strike`:e===P.Autolink&&(r=`autolink`);let s=r?[...t,a.mdPack.create({key:r})]:t,c=F.get(e),l=c?[...s,a[c].create()]:s;n.children.length===0?R(o,n.from,n.to,l):I(n.children,l,n.from,n.to,i,a,o)}s=n.to}s<r&&R(o,s,r,t)}function qt(e,t,n,r,i){let a=-1,o=null,s=0;for(let t of e.children)t.type===P.LinkMark?(s++,s===2&&(a=t.from)):t.type===P.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;R(i,p,t.from,e)}let e=u(t.from)?[...f,l]:f;if(t.type===P.Wikilink){L(t,e,n,r,i),p=t.to;continue}let a=F.get(t.type),o=a?[...e,r[a].create()]:e;t.children.length===0?R(i,t.from,t.to,o):I(t.children,o,t.from,t.to,n,r,i),p=t.to}p<e.to&&R(i,p,e.to,f)}function Jt(e,t,n,r,i){let a=e.children.find(e=>e.type===P.URL);if(!a){qt(e,t,n,r,i);return}let o=e.children.filter(e=>e.type===P.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&&R(i,m,t.from,p(m));let e=F.get(t.type),a=e?[...p(t.from),r[e].create()]:p(t.from);t.children.length===0?R(i,t.from,t.to,a):I(t.children,a,t.from,t.to,n,r,i),m=t.to}m<e.to&&R(i,m,e.to,p(m))}function L(e,t,n,r,i){let{target:a,display:o}=Ht(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&&R(i,d,t.from,u(d));let e=r.mdMark.create();t.from<l&&t.to>l?(R(i,t.from,l,[...u(t.from),e]),R(i,l,t.to,[...u(l),e])):R(i,t.from,t.to,[...u(t.from),e]),d=t.to}d<e.to&&R(i,d,e.to,u(d))}function R(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&Vt(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const Yt=Me(()=>{let e=Kn().schema;if(e==null)throw Error(`Unexpected empty schema`);return e}),Xt=Me(()=>r(Yt())),z=`meowdown_mark_builders`;function Zt(e){let t=e.cached[z];if(t)return t;let r=n(e);return e.cached[z]=r,r}const B=`inline-marks-applied`,Qt=new WeakMap;let $t=0,en=0;function tn(e,t,n){let r=Qt.get(e);if(r?en++:($t++,r=Gt(Zt(n),e.textContent),Qt.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 nn(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 rn(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=tn(t,r+1,e.schema);return i.length>0&&n.push(...i),!1}),n}function an(){return new v({key:new y(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(B))return null;let r=rn(n,nn(e,n));if(r.length===0)return null;let i=n.tr.step(new A(r));return i.setMeta(B,!0),i.setMeta(`addToHistory`,!1),i},view(e){return e.dispatch(on(e.state)),{}}})}function on(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function sn(){return p(an())}function cn(){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 ln(){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 un(){return l({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function dn(){return l({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function fn(){return l({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function pn(){return l({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function mn(){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 hn(){return l({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function gn(){return l({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function _n(){return l({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function vn(){return l({name:`mdWikilinkSource`,inclusive:!1,attrs:{target:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink-source`},0],parseDOM:[{tag:`span.md-wikilink-source`}]})}function yn(){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 bn(){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 xn(){return g(un(),dn(),fn(),pn(),mn(),hn(),gn(),_n(),vn(),yn(),ln(),cn(),bn())}function Sn(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 V={em:{node:P.Emphasis,delim:`*`},strong:{node:P.StrongEmphasis,delim:`**`},code:{node:P.InlineCode,delim:"`"},del:{node:P.Strikethrough,delim:`~~`}},Cn=new Set([P.EmphasisMark,P.CodeMark,P.LinkMark,P.StrikethroughMark]);function H(e){return[e.children[0],e.children.at(-1)]}function U(e){let{type:t,children:n}=e;if(t===P.Emphasis||t===P.StrongEmphasis||t===P.Strikethrough)return[n[0].to,n.at(-1).from];if(t===P.Link||t===P.Image){let e=n.find((e,t)=>t>0&&e.type===P.LinkMark);return e?[n[0].to,e.from]:null}return null}function W(e,t,n){for(let r of e){if(r.to<=t||r.from>=n||t<=r.from&&r.to<=n)continue;let i=U(r);return i&&i[0]<=t&&n<=i[1]?W(r.children,t,n):W(e,Math.min(t,r.from),Math.max(n,r.to))}return[t,n]}function wn(e,t,n){for(let r of e)if(!(r.to<=t||r.from>=n)&&(t>r.from||r.to>n))return wn(e,Math.min(t,r.from),Math.max(n,r.to));return[t,n]}const G=e=>e===` `||e===` `;function Tn(e,t,n){for(;t<n&&G(e[t]);)t++;for(;n>t&&G(e[n-1]);)n--;return[t,n]}function En(e,t,n,r){let i=N(M(e),e=>e.type===r.node||Cn.has(e.type));for(let r=t;r<n;r++)if(!G(e[r])&&i.every(e=>!(e.from<=r&&r<e.to)))return!1;return!0}function Dn(e,t,n,r,i){let a=M(e),o=N(a,e=>e.type===r.node);return i?An(e,o,t,n):On(e,a,o,t,n,r)}function On(e,t,n,r,i,a){for(let e=0;e!==i-r;){e=i-r,[r,i]=W(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]=H(e);o.push({from:t.from,to:t.to,insert:``}),o.push({from:n.from,to:n.to,insert:``})}let[s,c]=kn(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function kn(e,t,n,r,i){if(i.node!==P.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(Sn(a)+1),s=a.startsWith("`")||a.endsWith("`")?` `:``;return[o+s,s+o]}function An(e,t,n,r){let i=[];for(let a of t){if(a.to<=n||a.from>=r)continue;let[t,o]=H(a),s=Math.max(n,t.to),c=Math.min(r,o.from);for(s>=c&&([s,c]=[t.to,o.from]),[s,c]=wn(a.children.slice(1,-1),s,c);s>t.to&&G(e[s-1]);)s--;for(;c<o.from&&G(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 jn(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=M(e),o=N(a,e=>e.type===n.node).findLast(e=>e.from<=t&&t<=e.to);if(o){let[e,n]=H(o);return{kind:`move`,pos:t===o.from?e.to:t===o.to?n.from:o.to}}return Mn(a,t)||e[t-1]===r[0]||e[t]===r[0]?null:{kind:`insert`,pos:t}}function Mn(e,t){for(let n of e)if(n.from<t&&t<n.to){let e=U(n);return!e||t<e[0]||t>e[1]?!0:Mn(n.children,t)}return!1}function K(e){return(t,n)=>{if(t.selection.empty)return Nn(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]=Tn(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:En(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>Dn(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(b.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 Nn(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=jn(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(b.create(o.doc,i+a.pos)),a.kind===`insert`&&(o.insertText(e.delim+e.delim,i+a.pos),o.setSelection(b.create(o.doc,i+a.pos+e.delim.length))),n(o.scrollIntoView())}return!0}function Pn(){return o({toggleEm:()=>K(V.em),toggleStrong:()=>K(V.strong),toggleCode:()=>K(V.code),toggleDel:()=>K(V.del)})}function Fn(){return c({"Mod-b":K(V.strong),"Mod-i":K(V.em),"Mod-e":K(V.code),"Mod-Shift-x":K(V.del)})}function In(){return g(Pn(),Fn())}function Ln(){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 Rn(){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 zn(){return g(Ne(),Ln(),Rn())}function Bn(){return f({name:`paragraph`,content:`inline*`,group:`block`,whitespace:`pre`,parseDOM:[{tag:`p`}],toDOM(){return[`p`,0]}})}function Vn(){return g(_(Bn(),t.highest),Pe(),Fe())}const Hn=(e,t)=>{let{selection:n}=e;return!We(n)||!n.isColSelection()||!n.isRowSelection()?!1:Ue(e,t)};function Un(){return _(c({Backspace:Hn,Delete:Hn}),t.high)}function Wn(){return g(He(),Ve(),Ie(),Be(),ze({allowTableNodeSelection:!0}),Le(),Re(),Un())}function Gn(){return g(Vn(),de(),ft(),me(),ce(),zn(),_t(),Wn(),le(),yt(),xn(),dt(),sn(),In(),Wt(),ct({marks:[{name:`mdImageSource`,modes:[`hide`]},{name:`mdWikilinkSource`,modes:[`hide`,`focus`,`show`]}],selectedClass:`md-atomic-selected`}),a(),i(),s(),fe(),he(),pe())}function Kn(){return Gn()}function qn(e){let t;return p(new v({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 Jn=new y(`meowdown-wikilink-click`);function Yn(e,t){let n=S(e,t,`mdWikilinkSource`);if(!n)return;let{target:r}=n.mark.attrs;return{from:n.from,to:n.to,target:r}}function Xn(e){return qn({key:Jn,selector:`.md-wikilink-label, .md-wikilink-source`,preventDefault:!1,findHitAt:(e,t)=>{let n=Yn(e,t);return n?{from:n.from,to:n.to,payload:n.target}:void 0},onClick:(t,n)=>e({target:t,event:n})})}const Zn=new y(`meowdown-link-click`);function Qn(e,t){let n=S(e,t,`mdLinkText`);if(n)return{from:n.from,to:n.to,href:n.mark.attrs.href}}function $n(e){return qn({key:Zn,selector:`.md-link`,preventDefault:!0,findHitAt:(e,t)=>{let n=Qn(e,t);return n?{from:n.from,to:n.to,payload:n.href}:void 0},onClick:(t,n)=>e({href:t,event:n})})}function er(){return typeof window>`u`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}const tr=/^(?:www\.|mobile\.)?(?:twitter\.com|x\.com)$/i,nr=/\/status(?:es)?\/(\d+)/;function rr(e){let t;try{t=new URL(e)}catch{return}if(tr.test(t.hostname))return nr.exec(t.pathname)?.[1]}const ir=e=>{let t=rr(e);if(t)return{key:`tweet:${t}`,render:()=>{let e=er()?`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`),ar(n),n}}};function ar(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 or=/^(?:www\.|m\.)?(?:youtube\.com|youtube-nocookie\.com)$/i,sr=/^(?:www\.)?youtu\.be$/i,cr=/^[\w-]{11}$/;function lr(e){let t;try{t=new URL(e)}catch{return}let n=null;if(sr.test(t.hostname))n=t.pathname.slice(1);else if(or.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||!cr.test(n))return;let r=t.searchParams.get(`start`)??t.searchParams.get(`t`),i=r?ur(r):void 0;return{videoId:n,startSeconds:i}}function ur(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 dr=[e=>{let t=lr(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}}},ir];function fr(e){for(let t of dr){let n=t(e);if(n)return n}}function pr(e){return/^https?:\/\//i.test(e)?e:void 0}function mr(e,t,n){let r=fr(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??pr)(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 hr(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=mr(n.src,n.alt,e);return a&&(a.contentEditable=`false`,r.appendChild(a)),{dom:r,contentDOM:i,ignoreMutation:e=>!i.contains(e.target)}}}function gr(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 vr(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=`![](${t})`,s=a==null?e.state.tr.insertText(o):e.state.tr.insertText(o,a);e.dispatch(s),a!=null&&(a+=o.length)}}function yr(e){return new v({key:new y(`image-input`),props:{handlePaste:(t,n)=>{let r=gr(n.clipboardData),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(vr(t,r,i,a),!0)},handleDrop:(t,n)=>{let r=gr(n.dataTransfer),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(vr(t,r,i,a,t.posAtCoords({left:n.clientX,top:n.clientY})?.pos),!0)}}})}function br(e={}){return g(u({name:`mdImageView`,constructor:hr(e)}),_(p(yr(e)),t.high))}const xr=new y(`meowdown-image-click`);function Sr(e,t){let n=S(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 p(new v({key:xr,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 wr=new y(`meowdown-embed-paste`);function Tr(e){let t=e.trim();if(!(!t||/\s/.test(t)))return fr(t)?t:void 0}function Er(e,t){return e.clipboardData?.getData(`text/plain`)||t.content.textBetween(0,t.content.size,`
3
+ `)}function Dr(e,t){let{from:n,to:r}=e.state.selection;e.dispatch(Ge(e.state.tr.insertText(t,n,r)));let i=e.state.tr.insertText(`![](${t})`,n,n+t.length);e.dispatch(Ge(i))}function Or(){return p(new v({key:wr,props:{handlePaste:(e,t,n)=>{let r=e.state.selection.$from.parent;if(!r.inlineContent||r.type.spec.code)return!1;let i=Er(t,n);if(!i)return!1;let a=Tr(i);return a?(Dr(e,a),!0):!1}}}))}const kr=(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(b.create(s.doc,o+2)),t(s.scrollIntoView())}return!0};function Ar(){return _(c({Enter:kr}),t.high)}const jr={"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`},Mr=new Set([`MscGen`,`Xù`,`MsGenny`,`Angular Template`,`Brainfuck`,`Esper`,`Oz`,`Factor`,`Squirrel`,`Yacas`,`mIRC`,`FCL`,`ECL`,`MUMPS`,`Pig`,`Asterisk`,`Z80`]),Nr=ve.map(e=>e.name).filter(e=>!Mr.has(e)).map(e=>({label:e,value:e.toLowerCase()})).concat({label:`Plain text`,value:``}).sort((e,t)=>e.label.localeCompare(t.label));function Pr(e,t={}){let n=new Rr;return t.frontmatter&&Fr(e.attrs.frontmatter,n),zr(e,n),n.finish()}function Fr(e,t){e!==null&&(t.write(`---`),t.write(`
4
4
  `),e!==``&&(t.write(e),t.write(`
5
- `)),t.write(`---`),t.closeBlock())}const Cr=[``,`# `,`## `,`### `,`#### `,`##### `,`###### `];function wr(e,t){let n=e.attrs,r=n.setextUnderline;if(r!=null&&e.content.size>0&&n.level<=2){X(e,t);let i=n.level===1?`=`:`-`;t.write(`
6
- `+i.repeat(Math.max(1,r))),t.closeBlock();return}t.write(Cr[n.level]??`# `),X(e,t),t.closeBlock()}var Tr=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(`
5
+ `)),t.write(`---`),t.closeBlock())}const Ir=[``,`# `,`## `,`### `,`#### `,`##### `,`###### `];function Lr(e,t){let n=e.attrs,r=n.setextUnderline;if(r!=null&&e.content.size>0&&n.level<=2){J(e,t);let i=n.level===1?`=`:`-`;t.write(`
6
+ `+i.repeat(Math.max(1,r))),t.closeBlock();return}t.write(Ir[n.level]??`# `),J(e,t),t.closeBlock()}var Rr=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(`
7
7
  `)){this.parts.push(e);return}let t=e.split(`
8
8
  `);for(let e=0;e<t.length;e++)e>0&&this.parts.push(`
9
9
  `,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(`
10
10
  `),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+$/,``)+`
11
11
  `}emitDeferredBlankLine(){let e=this.deferredBlankPrefix;e!==null&&(this.parts.push(e.trimEnd(),`
12
- `),this.deferredBlankPrefix=null)}};function Er(e,t){switch(e.type.name){case`doc`:Y(e,t);return;case`paragraph`:X(e,t),t.closeBlock();return;case`heading`:wr(e,t);return;case`blockquote`:t.withPrefix(`> `,`> `,()=>Y(e,t)),t.closeBlock();return;case`list`:kr(e,t,Or(e));return;case`codeBlock`:Ar(e,t);return;case`horizontalRule`:t.write(`---`),t.closeBlock();return;case`table`:jr(e,t);return;case`text`:e.text&&t.write(e.text);return}}function Y(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(),Er(a,t),i++;continue}let o=i+1;for(;o<r&&e.child(o).type.name===`list`;)o++;let s=Dr(e,i,o);for(let r=i;r<o;r++)(r===i?n&&i>0:s)&&t.suppressBlank(),kr(e.child(r),t,s);i=o}}function Dr(e,t,n){for(let r=t;r<n;r++)if(!Or(e.child(r)))return!1;return!0}function Or(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 X(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 kr(e,t,n){let r=e.attrs,i=r.marker===`*`||r.marker===`+`?r.marker:`-`,a=r.marker===`)`?`)`:`.`,o=r.taskMarker===`X`?`X`:`x`,s=r.kind===`ordered`?`${r.order??1}${a} `:r.kind===`task`?`${i} [${r.checked?o:` `}] `:`${i} `,c=` `.repeat(r.kind===`task`?2:s.length);t.withPrefix(c,s,()=>Y(e,t,n)),t.closeBlock()}function Ar(e,t){let n=e.attrs.language||``,r=e.textContent,i="`".repeat(pn(r,2)+1);t.write(i),n&&t.write(n),t.write(`
12
+ `),this.deferredBlankPrefix=null)}};function zr(e,t){switch(e.type.name){case`doc`:q(e,t);return;case`paragraph`:J(e,t),t.closeBlock();return;case`heading`:Lr(e,t);return;case`blockquote`:t.withPrefix(`> `,`> `,()=>q(e,t)),t.closeBlock();return;case`list`:Hr(e,t,Vr(e));return;case`codeBlock`:Ur(e,t);return;case`horizontalRule`:{let{marker:n}=e.attrs;t.write(n||`---`),t.closeBlock();return}case`table`:Wr(e,t);return;case`text`:e.text&&t.write(e.text);return}}function q(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(),zr(a,t),i++;continue}let o=i+1;for(;o<r&&e.child(o).type.name===`list`;)o++;let s=Br(e,i,o);for(let r=i;r<o;r++)(r===i?n&&i>0:s)&&t.suppressBlank(),Hr(e.child(r),t,s);i=o}}function Br(e,t,n){for(let r=t;r<n;r++)if(!Vr(e.child(r)))return!1;return!0}function Vr(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 J(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 Hr(e,t,n){let r=e.attrs,i=r.marker===`*`||r.marker===`+`?r.marker:`-`,a=r.marker===`)`?`)`:`.`,o=r.taskMarker===`X`?`X`:`x`,s=r.kind===`ordered`?`${r.order??1}${a} `:r.kind===`task`?`${i} [${r.checked?o:` `}] `:`${i} `,c=` `.repeat(r.kind===`task`?2:s.length);t.withPrefix(c,s,()=>q(e,t,n)),t.closeBlock()}function Ur(e,t){let n=e.attrs.language||``,r=e.textContent,i="`".repeat(Sn(r,2)+1);t.write(i),n&&t.write(n),t.write(`
13
13
  `),r&&(t.write(r),t.write(`
14
- `)),t.write(i),t.closeBlock()}function jr(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(Nr(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(Mr(s,i)),t.write(`
14
+ `)),t.write(i),t.closeBlock()}function Wr(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(Kr(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(Gr(s,i)),t.write(`
15
15
  `),t.write(o);for(let e=0;e<n;e++)e!==a&&(t.write(`
16
- `),t.write(Mr(r[e],i)));t.closeBlock()}function Mr(e,t){let n=`|`;for(let r=0;r<t;r++)n+=` `+(e[r]??``)+` |`;return n}function Nr(e){let t=e.textContent.trim();return!t.includes(`|`)&&!t.includes(`
16
+ `),t.write(Gr(r[e],i)));t.closeBlock()}function Gr(e,t){let n=`|`;for(let r=0;r<t;r++)n+=` `+(e[r]??``)+` |`;return n}function Kr(e){let t=e.textContent.trim();return!t.includes(`|`)&&!t.includes(`
17
17
  `)?t:t.replaceAll(`|`,String.raw`\|`).replaceAll(`
18
- `,` `)}function Pr(e,t=Vt()){let[n,r]=Ir(e),i=r?e.slice(r):e,a=Lr(t,jt.parse(i).cursor(),i);return t.doc({frontmatter:n},a)}const Fr=/^---[ \t]*\r?\n([\s\S]*?\n)?---[ \t]*(?:\r?\n|$)/;function Ir(e){let t=Fr.exec(e);return t?[(t[1]??``).replace(/\r?\n$/,``),t[0].length]:[]}function Lr(e,t,n){let r=[];if(!t.firstChild())return r;do r.push(...Z(e,t,n));while(t.nextSibling());return t.parent(),r}function Z(e,t,n){switch(t.type.id){case F.ATXHeading1:return[Q(e,t,n,1,!1)];case F.ATXHeading2:return[Q(e,t,n,2,!1)];case F.ATXHeading3:return[Q(e,t,n,3,!1)];case F.ATXHeading4:return[Q(e,t,n,4,!1)];case F.ATXHeading5:return[Q(e,t,n,5,!1)];case F.ATXHeading6:return[Q(e,t,n,6,!1)];case F.SetextHeading1:return[Q(e,t,n,1,!0)];case F.SetextHeading2:return[Q(e,t,n,2,!0)];case F.Paragraph:return[$(e,t,n)];case F.HTMLBlock:case F.CommentBlock:case F.ProcessingInstructionBlock:return[$(e,t,n)];case F.Blockquote:return[zr(e,t,n)];case F.BulletList:return Br(e,t,n,`bullet`);case F.OrderedList:return Br(e,t,n,`ordered`);case F.FencedCode:case F.CodeBlock:return[Hr(e,t,n)];case F.HorizontalRule:return[e.horizontalRule()];case F.Table:return[Ur(e,t,n)];case F.Task:return[$(e,t,n)];default:return n.slice(t.from,t.to).trim()===``?[]:(console.warn(`[meowdown] unsupported lezer block "${t.type.name}"`),[$(e,t,n)])}}function Q(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===F.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===F.HeaderMark&&n>o&&(s=n,c=n,l=r),t.parent()}let u=n.slice(o,s).trim(),d=i?Rr(n,c,l)||1:null;return e.heading({level:r,setextUnderline:d},u)}function Rr(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 $(e,t,n){let r=t.from,i=t.to;if(t.firstChild()){let a=``,o=r;do t.type.id===F.QuoteMark&&(a+=n.slice(o,t.from),o=t.to,yt(n.charCodeAt(o))&&(o+=1));while(t.nextSibling());return t.parent(),a+=n.slice(o,i),a===``?e.paragraph():e.paragraph(a)}return e.paragraph(n.slice(r,i))}function zr(e,t,n){let r=[];if(t.firstChild()){do{if(t.type.id===F.QuoteMark)continue;r.push(...Z(e,t,n))}while(t.nextSibling());t.parent()}return e.blockquote(r)}function Br(e,t,n,r){let i=[];if(t.firstChild()){do t.type.id===F.ListItem&&i.push(Vr(e,t,n,r));while(t.nextSibling());t.parent()}return i}function Vr(e,t,n,r){let i=[],a,o,s,c;if(t.firstChild()){do{if(t.type.id===F.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?`+`:`-`}continue}if(r===`bullet`&&t.type.id===F.Task){let r=t.from,s=t.to;if(a=!1,t.firstChild()){if(t.type.id===F.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()}yt(n.charCodeAt(r))&&(r+=1);let c=n.slice(r,s);i.push(c===``?e.paragraph():e.paragraph(c));continue}i.push(...Z(e,t,n))}while(t.nextSibling());t.parent()}return e.list({kind:a==null?r:`task`,order:r===`ordered`?s??1:null,checked:a??!1,collapsed:!1,marker:c,taskMarker:o},i)}function Hr(e,t,n){let r=``,i=``;if(t.firstChild()){do switch(t.type.id){case F.CodeInfo:r=n.slice(t.from,t.to);break;case F.CodeText:i=n.slice(t.from,t.to);break}while(t.nextSibling());t.parent()}return e.codeBlock({language:r},i)}function Ur(e,t,n){let r=0;if(t.firstChild()){do t.type.id===F.TableDelimiter&&(r=Wr(n.slice(t.from,t.to)));while(t.nextSibling());t.parent()}let i=[];if(t.firstChild()){do{let a=t.type.id;a===F.TableHeader?i.push(Gr(e,t,n,!0,r)):a===F.TableRow&&i.push(Gr(e,t,n,!1,r))}while(t.nextSibling());t.parent()}return e.table(i)}function Wr(e){return e.split(`|`).filter(e=>e.trim()!==``).length}function Gr(e,t,n,r,i){let a=Array(i).fill(``);if(t.firstChild()){let e=t.type.id===F.TableDelimiter,r=0;do if(t.type.id===F.TableDelimiter)r++;else if(t.type.id===F.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)}function Kr(e){return e.replace(/\n+$/u,``)}function qr(e){return e.split(`
19
- `).filter(e=>e.trim()!==``)}function Jr(e){let t=xr(Pr(e));if(Kr(t)===Kr(e))return`exact`;let n=qr(e),r=qr(t);return n.length===r.length&&n.every((e,t)=>e===r[t])?`normalizing`:`lossy`}export{vr as EDITOR_KEY_BINDINGS,e as Priority,Jr as checkRoundTrip,br as codeBlockLanguages,_r as defineBulletAfterHeading,Nn as defineEditorExtension,hr as defineEmbedPaste,sr as defineImage,ur as defineImageClickHandler,Bn as defineLinkClickHandler,qe as defineMarkMode,Ve as definePlaceholder,He as defineReadonly,Ln as defineWikilinkClickHandler,xr as docToMarkdown,Pr as markdownToDoc,ae as withPriority};
18
+ `,` `)}function qr(e,t={}){let{nodes:n=Xt(),frontmatter:r=!1}=t,i,a=e;if(r){let[t,n]=Yr(e);i=t,n&&(a=e.slice(n))}let o=Xr(n,zt.parse(a).cursor(),a);return n.doc(i===void 0?{}:{frontmatter:i},o)}const Jr=/^---[ \t]*\r?\n([\s\S]*?\n)?---[ \t]*(?:\r?\n|$)/;function Yr(e){let t=Jr.exec(e);return t?[(t[1]??``).replace(/\r?\n$/,``),t[0].length]:[]}function Xr(e,t,n){let r=[];if(!t.firstChild())return r;do r.push(...Y(e,t,n));while(t.nextSibling());return t.parent(),r}function Y(e,t,n){switch(t.type.id){case P.ATXHeading1:return[X(e,t,n,1,!1)];case P.ATXHeading2:return[X(e,t,n,2,!1)];case P.ATXHeading3:return[X(e,t,n,3,!1)];case P.ATXHeading4:return[X(e,t,n,4,!1)];case P.ATXHeading5:return[X(e,t,n,5,!1)];case P.ATXHeading6:return[X(e,t,n,6,!1)];case P.SetextHeading1:return[X(e,t,n,1,!0)];case P.SetextHeading2:return[X(e,t,n,2,!0)];case P.Paragraph:return[$(e,t,n)];case P.HTMLBlock:case P.CommentBlock:case P.ProcessingInstructionBlock:return[$(e,t,n)];case P.Blockquote:return[ei(e,t,n)];case P.BulletList:return ti(e,t,n,`bullet`);case P.OrderedList:return ti(e,t,n,`ordered`);case P.FencedCode:case P.CodeBlock:return[ri(e,t,n)];case P.HorizontalRule:{let r=n.slice(t.from,t.to).trimEnd();return[e.horizontalRule({marker:r===`---`?null:r})]}case P.Table:return[ii(e,t,n)];case P.Task:return[$(e,t,n)];default:return n.slice(t.from,t.to).trim()===``?[]:(console.warn(`[meowdown] unsupported lezer block "${t.type.name}"`),[$(e,t,n)])}}function X(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===P.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===P.HeaderMark&&n>o&&(s=n,c=n,l=r),t.parent()}let u=$r(n.slice(o,s),Z(n,o)).trim(),d=i?Zr(n,c,l)||1:null;return e.heading({level:r,setextUnderline:d},u)}function Zr(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 Z(e,t){let n=e.lastIndexOf(`
19
+ `,t-1)+1,r=0;for(let i=n;i<t;i++)r+=e.charCodeAt(i)===9?4-r%4:1;return r}function Qr(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 $r(e,t){return t===0||!e.includes(`
20
+ `)?e:e.split(`
21
+ `).map((e,n)=>n===0?e:Qr(e,t)).join(`
22
+ `)}function Q(e,t,n){return e.paragraph($r(t,n))}function $(e,t,n){let r=t.from,i=t.to,a=Z(n,r);if(t.firstChild()){let o=``,s=r;do t.type.id===P.QuoteMark&&(o+=n.slice(s,t.from),s=t.to,Dt(n.charCodeAt(s))&&(s+=1));while(t.nextSibling());return t.parent(),o+=n.slice(s,i),Q(e,o,a)}return Q(e,n.slice(r,i),a)}function ei(e,t,n){let r=[];if(t.firstChild()){do{if(t.type.id===P.QuoteMark)continue;r.push(...Y(e,t,n))}while(t.nextSibling());t.parent()}return e.blockquote(r)}function ti(e,t,n,r){let i=[];if(t.firstChild()){do t.type.id===P.ListItem&&i.push(ni(e,t,n,r));while(t.nextSibling());t.parent()}return i}function ni(e,t,n,r){let i=[],a,o,s,c;if(t.firstChild()){do{if(t.type.id===P.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?`+`:`-`}continue}if(r===`bullet`&&t.type.id===P.Task){let r=t.from,s=t.to;if(a=!1,t.firstChild()){if(t.type.id===P.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()}Dt(n.charCodeAt(r))&&(r+=1);let c=n.slice(r,s);i.push(Q(e,c,Z(n,r)));continue}i.push(...Y(e,t,n))}while(t.nextSibling());t.parent()}return e.list({kind:a==null?r:`task`,order:r===`ordered`?s??1:null,checked:a??!1,collapsed:!1,marker:c,taskMarker:o},i)}function ri(e,t,n){let r=``,i=``;if(t.firstChild()){do switch(t.type.id){case P.CodeInfo:r=n.slice(t.from,t.to);break;case P.CodeText:i=n.slice(t.from,t.to);break}while(t.nextSibling());t.parent()}return e.codeBlock({language:r},i)}function ii(e,t,n){let r=0;if(t.firstChild()){do t.type.id===P.TableDelimiter&&(r=ai(n.slice(t.from,t.to)));while(t.nextSibling());t.parent()}let i=[];if(t.firstChild()){do{let a=t.type.id;a===P.TableHeader?i.push(oi(e,t,n,!0,r)):a===P.TableRow&&i.push(oi(e,t,n,!1,r))}while(t.nextSibling());t.parent()}return e.table(i)}function ai(e){return e.split(`|`).filter(e=>e.trim()!==``).length}function oi(e,t,n,r,i){let a=Array(i).fill(``);if(t.firstChild()){let e=t.type.id===P.TableDelimiter,r=0;do if(t.type.id===P.TableDelimiter)r++;else if(t.type.id===P.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)}function si(e){return e.replace(/\n+$/u,``)}function ci(e){return e.split(`
23
+ `).filter(e=>e.trim()!==``)}function li(e,t={}){let n=Pr(qr(e,{frontmatter:t.frontmatter}),{frontmatter:t.frontmatter});if(si(n)===si(e))return`exact`;let r=ci(e),i=ci(n);return r.length===i.length&&r.every((e,t)=>e.trimEnd()===i[t].trimEnd())?`normalizing`:`lossy`}export{jr as EDITOR_KEY_BINDINGS,e as Priority,li as checkRoundTrip,Nr as codeBlockLanguages,Ar as defineBulletAfterHeading,Kn as defineEditorExtension,Or as defineEmbedPaste,br as defineImage,Cr as defineImageClickHandler,$n as defineLinkClickHandler,Qe as defineMarkMode,Ke as definePlaceholder,qe as defineReadonly,Xn as defineWikilinkClickHandler,Pr as docToMarkdown,qr as markdownToDoc,oe as withPriority};
package/dist/style.css CHANGED
@@ -167,7 +167,6 @@ img.ProseMirror-separator {
167
167
 
168
168
  .ProseMirror {
169
169
  box-sizing: border-box;
170
- padding: 1.25rem var(--meowdown-gutter) 1.75rem;
171
170
  color: var(--meowdown-text);
172
171
  caret-color: var(--meowdown-accent);
173
172
  -webkit-font-smoothing: antialiased;
@@ -176,13 +175,22 @@ img.ProseMirror-separator {
176
175
  line-height: 1.7;
177
176
  }
178
177
 
178
+ .meowdown-content {
179
+ padding: 1.25rem var(--meowdown-gutter) 1.75rem;
180
+ }
181
+
179
182
  .ProseMirror > * + * {
180
183
  margin-top: .85em;
181
184
  }
182
185
 
186
+ .ProseMirror p {
187
+ white-space: pre-wrap;
188
+ }
189
+
183
190
  .ProseMirror h1, .ProseMirror h2, .ProseMirror h3, .ProseMirror h4, .ProseMirror h5, .ProseMirror h6 {
184
191
  letter-spacing: -.01em;
185
192
  color: var(--meowdown-heading);
193
+ white-space: pre-wrap;
186
194
  font-weight: 600;
187
195
  line-height: 1.25;
188
196
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@meowdown/core",
3
3
  "type": "module",
4
- "version": "0.16.1",
4
+ "version": "0.17.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -24,7 +24,7 @@
24
24
  "@lezer/markdown": "^1.6.4",
25
25
  "@ocavue/utils": "^1.7.0",
26
26
  "@prosekit/core": "^0.13.0-beta.3",
27
- "@prosekit/extensions": "^0.17.5-beta.4",
27
+ "@prosekit/extensions": "^0.17.5-beta.6",
28
28
  "@prosekit/pm": "^0.1.19-beta.0",
29
29
  "prosemirror-highlight": "^0.15.2"
30
30
  },