@meowdown/core 0.11.1 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -55,9 +55,13 @@ Selection colors are standalone variables, not derived from `--meowdown-accent`,
55
55
 
56
56
  Tags (`#tag`) render as pills via the `.md-tag` class, tinted from `--meowdown-accent`.
57
57
 
58
- Wikilinks (`[[target]]`) render with a dashed underline via the `.md-wikilink` class, colored by `--meowdown-accent`, with a pointer cursor. Their `[[` `]]` brackets behave like other syntax characters: dimmed in show mode, hidden in hide and focus modes. Wire click navigation with `defineWikilinkClickHandler(({ target, event }) => ...)` (or `@meowdown/react`'s `onWikilinkClick` prop).
58
+ Wikilinks (`[[target]]`/`[[target|alias]]`) render in place via a mark view as an immutable label (the alias, or the target when there is no alias), with the raw source hidden in hide and focus modes and shown dimmed in show mode. The label uses the `.md-wikilink-label` class and the raw source the `.md-wikilink-source` class, both dashed-underlined and colored by `--meowdown-accent`. In hide mode the link is a single caret stop: arrowing onto it selects the whole source (ringed with `--meowdown-node-outline`), and Backspace/Delete remove it as a unit. Wire click navigation with `defineWikilinkClickHandler(({ target, event }) => ...)` (or `@meowdown/react`'s `onWikilinkClick` prop).
59
59
 
60
- Inline images (`![alt](src)`) stay literal text and render beneath their line as a widget decoration when a host resolves the `src` to a URL. Add it with `defineImages({ resolveImageUrl, onImagePaste })` (or `@meowdown/react`'s image props).
60
+ Markdown links (`[text](url)`) render the label as an `<a href>` with the `.md-link` class, colored by `--meowdown-accent`; the `[`, `]`, and `(url)` syntax dims in show mode and hides in hide and focus modes. Wire click handling with `defineLinkClickHandler(({ href, event }) => ...)` (or `@meowdown/react`'s `onLinkClick` prop). A plain click inside a link the caret already sits in just places the caret; `Mod`-click always fires.
61
+
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
+
64
+ Inline images (`![alt](src)`) stay literal text and render in place via a mark view, with the raw `![alt](src)` hidden in hide and focus modes. Add it with `defineImage({ resolveImageUrl, onImagePaste })` (or `@meowdown/react`'s image props). `resolveImageUrl` is optional and defaults to showing http(s) URLs as-is. Wire click handling with `defineImageClickHandler(({ src, alt, event }) => ...)` (or `@meowdown/react`'s `onImageClick` prop).
61
65
 
62
66
  Pasting a lone tweet or YouTube link can auto-embed it. `defineEmbedPaste()` (or `@meowdown/react`'s `embedPaste` prop) rewrites the pasted link to `![](url)` so it renders as an embed; one undo turns the embed back into the raw link. It is not part of `defineEditorExtension`; add it explicitly.
63
67
 
package/dist/index.d.ts CHANGED
@@ -4,6 +4,26 @@ import { ProseMirrorNode } from "@prosekit/pm/model";
4
4
  import { PlaceholderOptions, definePlaceholder } from "@prosekit/extensions/placeholder";
5
5
  import { defineReadonly } from "@prosekit/extensions/readonly";
6
6
 
7
+ //#region src/extensions/inline-marks.d.ts
8
+ interface MdImageViewAttrs {
9
+ src: string;
10
+ alt: string;
11
+ }
12
+ interface MdImageSourceAttrs {
13
+ src: string;
14
+ alt: string;
15
+ }
16
+ interface MdLinkTextAttrs {
17
+ href: string;
18
+ }
19
+ interface MdWikilinkSourceAttrs {
20
+ target: string;
21
+ }
22
+ interface MdWikilinkViewAttrs {
23
+ target: string;
24
+ display: string;
25
+ }
26
+ //#endregion
7
27
  //#region src/extensions/extension.d.ts
8
28
  declare function defineEditorExtensionImpl(): import("@prosekit/core").Union<readonly [import("@prosekit/extensions/paragraph").ParagraphExtension, import("@prosekit/extensions/doc").DocExtension, import("@prosekit/extensions/text").TextExtension, import("@prosekit/extensions/blockquote").BlockquoteExtension, import("@prosekit/extensions/list").ListExtension, import("@prosekit/core").Union<readonly [import("@prosekit/extensions/heading").HeadingSpecExtension, 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<{
9
29
  Marks: {
@@ -23,9 +43,7 @@ declare function defineEditorExtensionImpl(): import("@prosekit/core").Union<rea
23
43
  };
24
44
  }>, import("@prosekit/core").Extension<{
25
45
  Marks: {
26
- mdLinkText: {
27
- href: string;
28
- };
46
+ mdLinkText: MdLinkTextAttrs;
29
47
  };
30
48
  }>, import("@prosekit/core").Extension<{
31
49
  Marks: {
@@ -41,7 +59,19 @@ declare function defineEditorExtensionImpl(): import("@prosekit/core").Union<rea
41
59
  };
42
60
  }>, import("@prosekit/core").Extension<{
43
61
  Marks: {
44
- mdWikilink: import("@prosekit/pm/model").Attrs;
62
+ mdWikilinkSource: MdWikilinkSourceAttrs;
63
+ };
64
+ }>, import("@prosekit/core").Extension<{
65
+ Marks: {
66
+ mdWikilinkView: MdWikilinkViewAttrs;
67
+ };
68
+ }>, import("@prosekit/core").Extension<{
69
+ Marks: {
70
+ mdImageSource: MdImageSourceAttrs;
71
+ };
72
+ }>, import("@prosekit/core").Extension<{
73
+ Marks: {
74
+ mdImageView: MdImageViewAttrs;
45
75
  };
46
76
  }>]>, import("@prosekit/core").Extension<import("@prosekit/core").ExtensionTyping<any, any, any>>, import("@prosekit/core").PlainExtension, import("@prosekit/core").Union<readonly [import("@prosekit/core").Extension<{
47
77
  Commands: {
@@ -50,7 +80,7 @@ declare function defineEditorExtensionImpl(): import("@prosekit/core").Union<rea
50
80
  toggleCode: [];
51
81
  toggleDel: [];
52
82
  };
53
- }>, 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]>;
83
+ }>, 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]>;
54
84
  type EditorExtension = ReturnType<typeof defineEditorExtensionImpl>;
55
85
  declare function defineEditorExtension(): EditorExtension;
56
86
  type TypedEditor = Editor<EditorExtension>;
@@ -75,20 +105,43 @@ interface WikilinkClickPayload {
75
105
  type WikilinkClickHandler = (payload: WikilinkClickPayload) => void;
76
106
  declare function defineWikilinkClickHandler(onClick: WikilinkClickHandler): PlainExtension;
77
107
  //#endregion
78
- //#region src/extensions/images.d.ts
108
+ //#region src/extensions/link-click.d.ts
109
+ interface LinkClickPayload {
110
+ href: string;
111
+ event: MouseEvent;
112
+ }
113
+ type LinkClickHandler = (payload: LinkClickPayload) => void;
114
+ declare function defineLinkClickHandler(onClick: LinkClickHandler): PlainExtension;
115
+ //#endregion
116
+ //#region src/extensions/image.d.ts
79
117
  type ImageUrlResolver = (src: string) => string | undefined;
80
118
  type ImagePasteHandler = (file: File) => string | undefined | Promise<string | undefined>;
81
119
  type ImageSaveErrorHandler = (error: unknown, file: File) => void;
82
120
  interface ImageOptions {
83
- /** Map a markdown `src` to a displayable URL, or `undefined` to skip rendering. */
84
- resolveImageUrl: ImageUrlResolver;
121
+ /**
122
+ * Map a markdown `src` to a displayable URL, or `undefined` to skip rendering
123
+ * that image. Defaults to `defaultResolveImageUrl`.
124
+ */
125
+ resolveImageUrl?: ImageUrlResolver;
85
126
  /** Persist a pasted/dropped image file and return its markdown `src`, or `undefined` to decline. */
86
127
  onImagePaste?: ImagePasteHandler;
87
128
  /** Called when persisting a pasted/dropped image throws. Defaults to `console.error`. */
88
129
  onImageSaveError?: ImageSaveErrorHandler;
89
130
  }
90
- /** Inline image rendering (widget decorations) plus paste/drop persistence. */
91
- declare function defineImages(options: ImageOptions): PlainExtension;
131
+ /** Inline image/embed rendering (a mark view) plus paste/drop persistence. */
132
+ declare function defineImage(options?: ImageOptions): PlainExtension;
133
+ //#endregion
134
+ //#region src/extensions/image-click.d.ts
135
+ interface ImageClickPayload {
136
+ /** The markdown `src`, exactly as written in `![alt](src)`. */
137
+ src: string;
138
+ /** The image alt text. */
139
+ alt: string;
140
+ /** The originating click. Read modifier keys or position a popover from it. */
141
+ event: MouseEvent;
142
+ }
143
+ type ImageClickHandler = (payload: ImageClickPayload) => void;
144
+ declare function defineImageClickHandler(onClick: ImageClickHandler): PlainExtension;
92
145
  //#endregion
93
146
  //#region src/extensions/embed-paste.d.ts
94
147
  /**
@@ -180,4 +233,4 @@ type RoundTripFidelity = 'exact' | 'normalizing' | 'lossy';
180
233
  /** Classify how `markdown` survives the editor's parse-then-serialize round trip. */
181
234
  declare function checkRoundTrip(markdown: string): RoundTripFidelity;
182
235
  //#endregion
183
- export { type CodeBlockAttrs, EDITOR_KEY_BINDINGS, type EditorExtension, type ImageOptions, type MarkMode, type PlaceholderOptions, Priority, type RoundTripFidelity, type TypedEditor, type WikilinkClickHandler, type WikilinkClickPayload, checkRoundTrip, codeBlockLanguages, defineBulletAfterHeading, defineEditorExtension, defineEmbedPaste, defineImages, defineMarkMode, definePlaceholder, defineReadonly, defineWikilinkClickHandler, docToMarkdown, markdownToDoc, withPriority };
236
+ 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 };
package/dist/index.js CHANGED
@@ -1,15 +1,15 @@
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,definePlugin as u,getMarkType as d,getNodeType as f,isApple as ee,isAtBlockStart as te,toggleNode as ne,union as p,unsetBlockType as re,withPriority as ie,withPriority as m,withSkipCodeBlock as ae}from"@prosekit/core";import{defineBlockquote as oe}from"@prosekit/extensions/blockquote";import{defineCodeBlock as se,defineCodeBlockHighlight as ce}from"@prosekit/extensions/code-block";import{defineDoc as le}from"@prosekit/extensions/doc";import{defineGapCursor as ue}from"@prosekit/extensions/gap-cursor";import{defineHorizontalRule as de}from"@prosekit/extensions/horizontal-rule";import{defineList as fe}from"@prosekit/extensions/list";import{defineModClickPrevention as pe}from"@prosekit/extensions/mod-click-prevention";import{defineParagraph as me}from"@prosekit/extensions/paragraph";import{defineText as he}from"@prosekit/extensions/text";import{defineVirtualSelection as ge}from"@prosekit/extensions/virtual-selection";import{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{Plugin as h,PluginKey as g,TextSelection as _}from"@prosekit/pm/state";import{ReplaceStep as we,Step as v,StepResult as y,Transform as b}from"@prosekit/pm/transform";import{Mark as Te}from"@prosekit/pm/model";import{GFM as Ee,parser as De}from"@lezer/markdown";import{once as x}from"@ocavue/utils";import{defineTableCellSpec as Oe,defineTableCommands as ke,defineTableDropIndicator as Ae,defineTableEditingPlugin as je,defineTableHeaderCellSpec as Me,defineTableRowSpec as Ne,defineTableSpec as Pe}from"@prosekit/extensions/table";import{Decoration as S,DecorationSet as C}from"@prosekit/pm/view";import{closeHistory as Fe}from"@prosekit/pm/history";import{definePlaceholder as Ie}from"@prosekit/extensions/placeholder";import{defineReadonly as Le}from"@prosekit/extensions/readonly";const w=new Map;async function Re(e){let t=_e.matchLanguageName(ve,e,!0);if(!t){w.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),w.set(e,null)}if(w.has(e))return;if(!n){w.set(e,null);return}let r=be({parse:e=>n.language.parser.parse(e.content),highlighter:ye});w.set(e,r)}const ze=e=>{let t=e.language?.trim();if(!t)return[];let n=w.get(t);return n?n(e):n===null?[]:Re(t)};function Be(){return ce({parser:ze,nodeTypes:[`codeBlock`]})}function T(e){return ae(ne({type:`heading`,attrs:{level:e}}))}const Ve=(e,t,n)=>te(e,n)?.parent.type.name===`heading`?re()(e,t,n):!1;function He(){return c({"Mod-1":T(1),"Mod-2":T(2),"Mod-3":T(3),"Mod-4":T(4),"Mod-5":T(5),"Mod-6":T(6),Backspace:Ve})}function Ue(){return p(Ce(),Se(),xe(),He())}function We(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function Ge(e,t){let[n,r,i]=t;return[n,r,i.map(t=>Te.fromJSON(e,t))]}var E=class e extends v{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return y.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 b(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new b(e),n.addMark(i,c,t));return!1})}return y.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return Ke;let t=this.chunks[0][0],n=this.chunks[0][1];for(let[,e]of this.chunks)e>n&&(n=e);let r=e.content.size,i=Math.max(0,Math.min(t,r)),a=Math.max(i,Math.min(n,r));return new we(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(We)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>Ge(t,e)))}};v.jsonID(`batchSetMark`,E);const Ke=new E([]);function qe(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 Je(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const Ye={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(!qe(t))break;i||=Je(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},Xe={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 Ze(e){return e.end}const D=De.configure([Ee,Ye,Xe]),Qe=D.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:Ze}]});function O(e){return D.parseInline(e,0)}function k(e,t,n=[]){for(let r of e)t(r)&&n.push(r),k(r.children,t,n);return n}function $e(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const A=$e(D);function et(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}const j=new Map([[A.Emphasis,`mdEm`],[A.StrongEmphasis,`mdStrong`],[A.InlineCode,`mdCode`],[A.Strikethrough,`mdDel`],[A.EmphasisMark,`mdMark`],[A.CodeMark,`mdMark`],[A.LinkMark,`mdMark`],[A.StrikethroughMark,`mdMark`],[A.URL,`mdLinkUri`],[A.Hashtag,`mdTag`],[A.Wikilink,`mdWikilink`],[A.WikilinkMark,`mdMark`]]);function tt(e,t){let n=O(t),r=[];return M(n,[],0,t.length,t,e,r),r}function nt(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))return`https://${e}`}function M(e,t,n,r,i,a,o){let s=n;for(let n of e){if(n.from>s&&N(o,s,n.from,t),n.type===A.Link||n.type===A.Image)rt(n,t,i,a,o);else if(n.type===A.URL){let e=nt(i.slice(n.from,n.to)),r=e?a.mdLinkText.create({href:e}):a.mdLinkUri.create();N(o,n.from,n.to,[...t,r])}else{let e=j.get(n.type),r=e?[...t,a[e].create()]:t;n.children.length===0?N(o,n.from,n.to,r):M(n.children,r,n.from,n.to,i,a,o)}s=n.to}s<r&&N(o,s,r,t)}function rt(e,t,n,r,i){let a=-1,o=null,s=0;for(let t of e.children)t.type===A.LinkMark?(s++,s===2&&(a=t.from)):t.type===A.URL&&o===null&&(o=t);let c=o?n.slice(o.from,o.to):``,l=c?r.mdLinkText.create({href:c}):null,u=e=>a>=0&&e<a&&l!==null,d=e.from;for(let a of e.children){if(a.from>d){let e=u(d)?[...t,l]:t;N(i,d,a.from,e)}let e=u(a.from)?[...t,l]:t,o=j.get(a.type),s=o?[...e,r[o].create()]:e;a.children.length===0?N(i,a.from,a.to,s):M(a.children,s,a.from,a.to,n,r,i),d=a.to}d<e.to&&N(i,d,e.to,t)}function N(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&et(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const it=x(()=>{let e=U().schema;if(e==null)throw Error(`Unexpected empty schema`);return e}),at=x(()=>r(it())),ot=`meowdown_mark_builders`;function st(e){let t=e.cached[ot];if(t)return t;let r=n(e);return e.cached[ot]=r,r}const ct=`inline-marks-applied`,lt=new WeakMap;let ut=0,dt=0;function ft(e,t,n){let r=lt.get(e);if(r?dt++:(ut++,r=tt(st(n),e.textContent),lt.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 pt(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 mt(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=ft(t,r+1,e.schema);return i.length>0&&n.push(...i),!1}),n}function ht(){return new h({key:new g(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(ct))return null;let r=mt(n,pt(e,n));if(r.length===0)return null;let i=n.tr.step(new E(r));return i.setMeta(ct,!0),i.setMeta(`addToHistory`,!1),i},view(e){return e.dispatch(gt(e.state)),{}}})}function gt(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function _t(){return u(ht())}function vt(){return l({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function yt(){return l({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function bt(){return l({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function xt(){return l({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function St(){return l({name:`mdLinkText`,inclusive:!1,attrs:{href:{default:``}},toDOM:e=>[`a`,{href:e.attrs.href},0],parseDOM:[{tag:`a`,getAttrs:e=>({href:e.getAttribute(`href`)??``})}]})}function Ct(){return l({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function wt(){return l({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function Tt(){return l({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function Et(){return l({name:`mdWikilink`,inclusive:!1,toDOM:()=>[`span`,{class:`md-wikilink`},0],parseDOM:[{tag:`span.md-wikilink`}]})}function Dt(){return p(vt(),yt(),bt(),xt(),St(),Ct(),wt(),Tt(),Et())}function P(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 F={em:{node:A.Emphasis,delim:`*`},strong:{node:A.StrongEmphasis,delim:`**`},code:{node:A.InlineCode,delim:"`"},del:{node:A.Strikethrough,delim:`~~`}},Ot=new Set([A.EmphasisMark,A.CodeMark,A.LinkMark,A.StrikethroughMark]);function I(e){return[e.children[0],e.children.at(-1)]}function L(e){let{type:t,children:n}=e;if(t===A.Emphasis||t===A.StrongEmphasis||t===A.Strikethrough)return[n[0].to,n.at(-1).from];if(t===A.Link||t===A.Image){let e=n.find((e,t)=>t>0&&e.type===A.LinkMark);return e?[n[0].to,e.from]:null}return null}function R(e,t,n){for(let r of e){if(r.to<=t||r.from>=n||t<=r.from&&r.to<=n)continue;let i=L(r);return i&&i[0]<=t&&n<=i[1]?R(r.children,t,n):R(e,Math.min(t,r.from),Math.max(n,r.to))}return[t,n]}function z(e,t,n){for(let r of e)if(!(r.to<=t||r.from>=n)&&(t>r.from||r.to>n))return z(e,Math.min(t,r.from),Math.max(n,r.to));return[t,n]}const B=e=>e===` `||e===` `;function kt(e,t,n){for(;t<n&&B(e[t]);)t++;for(;n>t&&B(e[n-1]);)n--;return[t,n]}function At(e,t,n,r){let i=k(O(e),e=>e.type===r.node||Ot.has(e.type));for(let r=t;r<n;r++)if(!B(e[r])&&i.every(e=>!(e.from<=r&&r<e.to)))return!1;return!0}function jt(e,t,n,r,i){let a=O(e),o=k(a,e=>e.type===r.node);return i?Pt(e,o,t,n):Mt(e,a,o,t,n,r)}function Mt(e,t,n,r,i,a){for(let e=0;e!==i-r;){e=i-r,[r,i]=R(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]=I(e);o.push({from:t.from,to:t.to,insert:``}),o.push({from:n.from,to:n.to,insert:``})}let[s,c]=Nt(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function Nt(e,t,n,r,i){if(i.node!==A.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(P(a)+1),s=a.startsWith("`")||a.endsWith("`")?` `:``;return[o+s,s+o]}function Pt(e,t,n,r){let i=[];for(let a of t){if(a.to<=n||a.from>=r)continue;let[t,o]=I(a),s=Math.max(n,t.to),c=Math.min(r,o.from);for(s>=c&&([s,c]=[t.to,o.from]),[s,c]=z(a.children.slice(1,-1),s,c);s>t.to&&B(e[s-1]);)s--;for(;c<o.from&&B(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 Ft(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=O(e),o=k(a,e=>e.type===n.node).findLast(e=>e.from<=t&&t<=e.to);if(o){let[e,n]=I(o);return{kind:`move`,pos:t===o.from?e.to:t===o.to?n.from:o.to}}return V(a,t)||e[t-1]===r[0]||e[t]===r[0]?null:{kind:`insert`,pos:t}}function V(e,t){for(let n of e)if(n.from<t&&t<n.to){let e=L(n);return!e||t<e[0]||t>e[1]?!0:V(n.children,t)}return!1}function H(e){return(t,n)=>{if(t.selection.empty)return It(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]=kt(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:At(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>jt(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(_.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 It(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=Ft(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(_.create(o.doc,i+a.pos)),a.kind===`insert`&&(o.insertText(e.delim+e.delim,i+a.pos),o.setSelection(_.create(o.doc,i+a.pos+e.delim.length))),n(o.scrollIntoView())}return!0}function Lt(){return o({toggleEm:()=>H(F.em),toggleStrong:()=>H(F.strong),toggleCode:()=>H(F.code),toggleDel:()=>H(F.del)})}function Rt(){return c({"Mod-b":H(F.strong),"Mod-i":H(F.em),"Mod-e":H(F.code),"Mod-Shift-x":H(F.del)})}function zt(){return p(Lt(),Rt())}function Bt(){return p(Pe(),Ne(),Oe(),Me(),je({allowTableNodeSelection:!0}),ke(),Ae())}function Vt(){return p(me(),le(),he(),oe(),fe(),Ue(),Bt(),se(),de(),Dt(),Be(),_t(),zt(),a(),i(),s(),ue(),ge(),pe())}function U(){return Vt()}const Ht=new Set([`mdStrong`,`mdEm`,`mdCode`,`mdDel`,`mdLinkText`,`mdLinkUri`,`mdWikilink`]),Ut=new Set([`mdMark`,`mdLinkUri`]),Wt=new Set([`mdMark`,`mdLinkUri`]),W=new Set([`mdLinkText`,`mdLinkUri`]),Gt=new Set([`mdStrong`,`mdEm`,`mdCode`,`mdDel`,`mdWikilink`]);function Kt(e){return new h({key:new g(`mark-mode`),props:{attributes:{"data-mark-mode":e},decorations:e===`focus`?e=>Yt(e):void 0,clipboardTextSerializer:e===`show`?void 0:Jt}})}function qt(e){return u(Kt(e))}function Jt(e){let t=[];return e.content.forEach(e=>{let n=[];e.descendants(e=>!e.isText||!e.text?!0:(e.marks.some(e=>Wt.has(e.type.name))||n.push(e.text),!1)),t.push(n.join(``))}),t.join(`
2
- `)}function Yt(e){let{$anchor:t,empty:n}=e.selection;if(!n)return C.empty;let r=t.parent;if(!r.isTextblock)return null;let i=t.start(),a=t.parentOffset,o=Xt(r,a);if(o.size===0)return C.empty;let s=[],c=new Set,l=!1;for(let e of o)if(W.has(e)){if(l)continue;l=!0,Qt(r,i,a,s,c)}else Zt(r,i,e,a,s,c);let u=s.map(([e,t])=>S.inline(e,t,{class:`show`}));return C.create(e.doc,u)}function Xt(e,t){let n=new Set,r=0;return e.forEach(e=>{let i=r+e.nodeSize;if(t>=r&&t<=i)for(let t of e.marks){let e=t.type.name;Ht.has(e)&&n.add(e)}r=i}),n}function Zt(e,t,n,r,i,a){let o=t,s=0,c=-1,l=-1;e.forEach(u=>{let d=u.marks.some(e=>e.type.name===n);d&&c===-1&&(c=o,l=s),!d&&c!==-1&&(r>=l&&r<=s&&K(e,t,c,o,i,a),c=-1,l=-1),o+=u.nodeSize,s+=u.nodeSize}),c!==-1&&r>=l&&r<=s&&K(e,t,c,o,i,a)}function Qt(e,t,n,r,i){let a=e.childCount;if(a===0)return;let o=-1,s=0;for(let t=0;t<a;t++){let r=e.child(t),i=s+r.nodeSize;if(n>=s&&n<=i&&r.marks.some(e=>W.has(e.type.name))){o=t;break}s=i}if(o===-1)return;let c=o;for(;c>0&&G(e.child(c-1));)c--;let l=o;for(;l<a-1&&G(e.child(l+1));)l++;let u=t;for(let t=0;t<c;t++)u+=e.child(t).nodeSize;let d=u;for(let t=c;t<=l;t++)d+=e.child(t).nodeSize;K(e,t,u,d,r,i)}function G(e){let t=!1,n=!1,r=!1;for(let i of e.marks){let e=i.type.name;e===`mdMark`?t=!0:W.has(e)?n=!0:Gt.has(e)&&(r=!0)}return!!(n||t&&!r)}function K(e,t,n,r,i,a){let o=t;e.forEach(e=>{let t=o,s=o+e.nodeSize;if(t>=n&&s<=r)for(let n of e.marks){let e=n.type.name;if(Ut.has(e)){let e=`${t}_${s}`;a.has(e)||(a.add(e),i.push([t,s]));break}}o=s})}const $t=new g(`meowdown-wikilink-click`);function en(e,t){let n=d(e.schema,`mdWikilink`),r=e.doc.resolve(t),i=r.parent;if(!i.isTextblock||i.type.spec.code)return;let a=r.start(),o=-1,s=-1,c,l=0;if(i.forEach(e=>{let r=a+l;l+=e.nodeSize;let i=a+l;n.isInSet(e.marks)?(o<0&&(o=r),s=i):(o>=0&&o<=t&&t<=s&&(c={from:o,to:s}),o=-1)}),o>=0&&o<=t&&t<=s&&(c={from:o,to:s}),c)return{from:c.from,to:c.to,target:tn(e.doc.textBetween(c.from,c.to))}}function tn(e){let t=e.replace(/^\[\[/u,``).replace(/\]\]$/u,``),n=t.indexOf(`|`);return(n>=0?t.slice(0,n):t).trim()}function nn(e){let t;return u(new h({key:$t,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?.(`.md-wikilink`))return!1;let a=en(n.state,r);return!a||!(ee?i.metaKey:i.ctrlKey)&&t?.empty&&t.from>=a.from&&t.to<=a.to?!1:(e({target:a.target,event:i}),!0)}}}))}function rn(e){let t=[],n=k(O(e),e=>e.type===A.Image);for(let r of n){let n=r.children.find(e=>e.type===A.URL),i=r.children.filter(e=>e.type===A.LinkMark);!n||i.length<2||t.push({from:r.from,to:r.to,alt:e.slice(i[0].to,i[1].from),src:e.slice(n.from,n.to)})}return t}function an(){return typeof window>`u`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}const on=/^(?:www\.|mobile\.)?(?:twitter\.com|x\.com)$/i,sn=/\/status(?:es)?\/(\d+)/;function cn(e){let t;try{t=new URL(e)}catch{return}if(on.test(t.hostname))return sn.exec(t.pathname)?.[1]}const ln=e=>{let t=cn(e);if(t)return{key:`tweet:${t}`,render:()=>{let e=an()?`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`),un(n),n}}};function un(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 dn=/^(?:www\.|m\.)?(?:youtube\.com|youtube-nocookie\.com)$/i,fn=/^(?:www\.)?youtu\.be$/i,pn=/^[\w-]{11}$/;function mn(e){let t;try{t=new URL(e)}catch{return}let n=null;if(fn.test(t.hostname))n=t.pathname.slice(1);else if(dn.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||!pn.test(n))return;let r=t.searchParams.get(`start`)??t.searchParams.get(`t`),i=r?hn(r):void 0;return{videoId:n,startSeconds:i}}function hn(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 gn=[e=>{let t=mn(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}}},ln];function q(e){for(let t of gn){let n=t(e);if(n)return n}}const J=new g(`meowdown-images`);function _n(e){let t=[];return e.doc.descendants((e,n)=>{if(e.type.spec.code)return!1;if(!e.isTextblock)return!0;if(e.childCount===0)return!1;let r=!0;if(e.forEach(e=>{e.isText||(r=!1)}),!r)return!1;for(let r of rn(e.textContent))t.push({widgetAt:n+e.nodeSize-1,alt:r.alt,src:r.src});return!1}),t}function Y(e,t){let n=[];for(let r of _n(e)){let e=q(r.src);if(e){n.push(vn(r,e));continue}let i=t.resolveImageUrl(r.src);i&&n.push(yn(r,i))}return C.create(e.doc,n)}function vn(e,t){return S.widget(e.widgetAt,()=>{let e=document.createElement(`div`);return e.className=`md-embed-wrapper`,e.contentEditable=`false`,e.appendChild(t.render()),e},{key:`md-embed:${t.key}`,side:1})}function yn(e,t){return S.widget(e.widgetAt,()=>{let n=document.createElement(`div`);n.className=`md-image`,n.contentEditable=`false`;let r=document.createElement(`img`);return r.src=t,r.alt=e.alt,r.draggable=!1,n.appendChild(r),n},{key:`md-image:${t}`,side:1})}function bn(e){return new h({key:J,state:{init:(t,n)=>Y(n,e),apply:(t,n,r,i)=>t.docChanged?Y(i,e):n},props:{decorations:e=>J.getState(e)}})}function xn(e){return e?Array.from(e.files).filter(e=>e.type.startsWith(`image/`)):[]}const Sn=e=>{console.error(`[meowdown] failed to save pasted image:`,e)};async function Cn(e,t,n,r=Sn,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 wn(e){return new h({props:{handlePaste:(t,n)=>{let r=xn(n.clipboardData),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(Cn(t,r,i,a),!0)},handleDrop:(t,n)=>{let r=xn(n.dataTransfer),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(Cn(t,r,i,a,t.posAtCoords({left:n.clientX,top:n.clientY})?.pos),!0)}}})}function Tn(e){return p(u(bn(e)),m(u(wn(e)),t.high))}const En=new g(`meowdown-embed-paste`);function Dn(e){let t=e.trim();if(!(!t||/\s/.test(t)))return q(t)?t:void 0}function On(e,t){let{from:n,to:r}=e.state.selection;e.dispatch(Fe(e.state.tr.insertText(t,n,r)));let i=e.state.tr.insertText(`![](${t})`,n,n+t.length);e.dispatch(Fe(i))}function kn(){return u(new h({key:En,props:{handlePaste:(e,t)=>{let n=e.state.selection.$from.parent;if(!n.inlineContent||n.type.spec.code)return!1;let r=t.clipboardData?.getData(`text/plain`);if(!r)return!1;let i=Dn(r);return i?(On(e,i),!0):!1}}}))}const An=(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=f(e.schema,`list`),i=f(e.schema,`paragraph`),a=r.create({kind:`bullet`},i.create()),o=n.after(),s=e.tr.insert(o,a);s.setSelection(_.create(s.doc,o+2)),t(s.scrollIntoView())}return!0};function jn(){return m(c({Enter:An}),t.high)}const Mn={"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`},Nn=new Set([`MscGen`,`Xù`,`MsGenny`,`Angular Template`,`Brainfuck`,`Esper`,`Oz`,`Factor`,`Squirrel`,`Yacas`,`mIRC`,`FCL`,`ECL`,`MUMPS`,`Pig`,`Asterisk`,`Z80`]),Pn=ve.map(e=>e.name).filter(e=>!Nn.has(e)).map(e=>({label:e,value:e.toLowerCase()})).concat({label:`Plain text`,value:``}).sort((e,t)=>e.label.localeCompare(t.label));function Fn(e){let t=new Ln;return Rn(e,t),t.finish()}const In=[``,`# `,`## `,`### `,`#### `,`##### `,`###### `];var Ln=class{constructor(){this.parts=[],this.linePrefix=``,this.pendingFirst=null,this.atLineStart=!0,this.deferredBlankPrefix=null}write(e){if(e===``)return;if(this.emitDeferredBlankLine(),this.atLineStart&&=(this.parts.push(this.pendingFirst??this.linePrefix),this.pendingFirst=null,!1),!e.includes(`
1
+ import{Priority as e,Priority as t,createMarkBuilders as n,createNodeBuilders as r,defineBaseCommands as i,defineBaseKeymap as a,defineCommands as o,defineHistory as s,defineKeymap as c,defineMarkSpec as l,defineMarkView as u,definePlugin as d,getMarkRange as f,getNodeType as p,isApple as ee,isAtBlockStart as te,isTextSelection as m,toggleNode as ne,union as h,unsetBlockType as re,withPriority as ie,withPriority as g,withSkipCodeBlock as ae}from"@prosekit/core";import{defineBlockquote as oe}from"@prosekit/extensions/blockquote";import{defineCodeBlock as se,defineCodeBlockHighlight as ce}from"@prosekit/extensions/code-block";import{defineDoc as le}from"@prosekit/extensions/doc";import{defineGapCursor as ue}from"@prosekit/extensions/gap-cursor";import{defineHorizontalRule as de}from"@prosekit/extensions/horizontal-rule";import{defineList as fe}from"@prosekit/extensions/list";import{defineModClickPrevention as pe}from"@prosekit/extensions/mod-click-prevention";import{defineParagraph as me}from"@prosekit/extensions/paragraph";import{defineText as he}from"@prosekit/extensions/text";import{defineVirtualSelection as ge}from"@prosekit/extensions/virtual-selection";import{Plugin as _,PluginKey as v,TextSelection as y}from"@prosekit/pm/state";import{Decoration as _e,DecorationSet as b}from"@prosekit/pm/view";import{LanguageDescription as ve}from"@codemirror/language";import{languages as x}from"@codemirror/language-data";import{classHighlighter as ye}from"@lezer/highlight";import{createParser as be}from"prosemirror-highlight/lezer";import{defineHeadingCommands as xe,defineHeadingInputRule as Se,defineHeadingSpec as Ce}from"@prosekit/extensions/heading";import{ReplaceStep as we,Step as S,StepResult as Te,Transform as Ee}from"@prosekit/pm/transform";import{Mark as De}from"@prosekit/pm/model";import{GFM as Oe,parser as ke}from"@lezer/markdown";import{once as Ae}from"@ocavue/utils";import{defineTableCellSpec as je,defineTableCommands as Me,defineTableDropIndicator as Ne,defineTableEditingPlugin as Pe,defineTableHeaderCellSpec as Fe,defineTableRowSpec as Ie,defineTableSpec as Le}from"@prosekit/extensions/table";import{closeHistory as Re}from"@prosekit/pm/history";import{definePlaceholder as ze}from"@prosekit/extensions/placeholder";import{defineReadonly as Be}from"@prosekit/extensions/readonly";function C(e,t,n){let r=e.doc.content.size;if(t<0||t>r)return;let i=e.doc.resolve(t);if(!(!i.parent.isTextblock||i.parent.type.spec.code))return f(i,n)}const Ve=new Set([`mdStrong`,`mdEm`,`mdCode`,`mdDel`,`mdLinkText`,`mdLinkUri`,`mdWikilinkSource`,`mdImageSource`]),He=new Set([`mdMark`,`mdLinkUri`]),Ue=new Set([`mdMark`,`mdLinkUri`]),We=new Set([`mdImageSource`,`mdWikilinkSource`]),w=new Set([`mdLinkText`,`mdLinkUri`]),Ge=new Set([`mdStrong`,`mdEm`,`mdCode`,`mdDel`,`mdWikilinkSource`]),Ke=new v(`mark-mode`);function qe(e){return new _({key:Ke,state:{init:()=>e,apply:(e,t)=>t},props:{attributes:{"data-mark-mode":e},decorations:e===`focus`?e=>Ze(e):void 0,clipboardTextSerializer:e===`show`?void 0:Xe}})}function Je(e){return d(qe(e))}function Ye(e){return Ke.getState(e.state)}function Xe(e){let t=[];return e.content.forEach(e=>{let n=[];e.descendants(e=>!e.isText||!e.text?!0:(!e.marks.some(e=>We.has(e.type.name))&&e.marks.some(e=>Ue.has(e.type.name))||n.push(e.text),!1)),t.push(n.join(``))}),t.join(`
2
+ `)}function Ze(e){let{$anchor:t,empty:n}=e.selection;if(!n)return b.empty;let r=t.parent;if(!r.isTextblock)return;let i=t.start(),a=t.parentOffset,o=Qe(r,a);if(o.size===0)return b.empty;let s=[],c=new Set,l=!1;for(let e of o)if(w.has(e)){if(l)continue;l=!0,et(r,i,a,s,c)}else $e(r,i,e,a,s,c);let u=s.map(([e,t])=>_e.inline(e,t,{class:`show`}));return b.create(e.doc,u)}function Qe(e,t){let n=new Set,r=0;return e.forEach(e=>{let i=r+e.nodeSize;if(t>=r&&t<=i)for(let t of e.marks){let e=t.type.name;Ve.has(e)&&n.add(e)}r=i}),n}function $e(e,t,n,r,i,a){let o=t,s=0,c=-1,l=-1;e.forEach(u=>{let d=u.marks.some(e=>e.type.name===n);d&&c===-1&&(c=o,l=s),!d&&c!==-1&&(r>=l&&r<=s&&T(e,t,c,o,i,a),c=-1,l=-1),o+=u.nodeSize,s+=u.nodeSize}),c!==-1&&r>=l&&r<=s&&T(e,t,c,o,i,a)}function et(e,t,n,r,i){let a=e.childCount;if(a===0)return;let o=-1,s=0;for(let t=0;t<a;t++){let r=e.child(t),i=s+r.nodeSize;if(n>=s&&n<=i&&r.marks.some(e=>w.has(e.type.name))){o=t;break}s=i}if(o===-1)return;let c=o;for(;c>0&&tt(e.child(c-1));)c--;let l=o;for(;l<a-1&&tt(e.child(l+1));)l++;let u=t;for(let t=0;t<c;t++)u+=e.child(t).nodeSize;let d=u;for(let t=c;t<=l;t++)d+=e.child(t).nodeSize;T(e,t,u,d,r,i)}function tt(e){let t=!1,n=!1,r=!1;for(let i of e.marks){let e=i.type.name;e===`mdMark`?t=!0:w.has(e)?n=!0:Ge.has(e)&&(r=!0)}return!!(n||t&&!r)}function T(e,t,n,r,i,a){let o=t;e.forEach(e=>{let t=o,s=o+e.nodeSize;if(t>=n&&s<=r)for(let n of e.marks){let e=n.type.name;if(He.has(e)){let e=`${t}_${s}`;a.has(e)||(a.add(e),i.push([t,s]));break}}o=s})}function E(e,t,n){for(let r of n){let n=C(e,t,r);if(n)return n}}function D(e,t,n){let r=E(e,t,n);return r&&r.to===t?r:void 0}function O(e,t,n){let r=E(e,t,n);return r&&r.from===t?r:void 0}function k(e,t){let{from:n,to:r,empty:i}=e.selection;if(i)return;let a=E(e,n,t);return a&&a.from===n&&a.to===r?a:void 0}function A(e){return!!e&&Ye(e)===`hide`}function nt(e,t){return y.create(e.doc,t.from,t.to)}function rt(e){return(t,n,r)=>{if(!A(r)||!m(t.selection))return!1;let i=t.selection;if(i.empty){let r=O(t,i.from,e);if(r)return n?.(t.tr.setSelection(nt(t,r))),!0;if(D(t,i.from,e)){let e=t.doc.resolve(i.from);return i.from>=e.end()?!1:(n?.(t.tr.setSelection(y.create(t.doc,i.from+1))),!0)}return!1}let a=k(t,e);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.to))),!0):!1}}function it(e){return(t,n,r)=>{if(!A(r)||!m(t.selection))return!1;let i=t.selection;if(i.empty){let r=D(t,i.from,e);return r?(n?.(t.tr.setSelection(nt(t,r))),!0):!1}let a=k(t,e);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.from))),!0):!1}}function at(e){return(t,n,r)=>{if(!A(r)||!t.selection.empty)return!1;let i=t.selection.from,a=D(t,i,e);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!O(t,i,e)||i<=t.doc.resolve(i).start()?!1:(n?.(t.tr.delete(i-1,i)),!0)}}function ot(e){return(t,n,r)=>{if(!A(r)||!t.selection.empty)return!1;let i=t.selection.from,a=O(t,i,e);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!D(t,i,e)||i>=t.doc.resolve(i).end()?!1:(n?.(t.tr.delete(i,i+1)),!0)}}function st(e,t){return new _({key:new v(`atomic-mark-selection-${t}`),props:{decorations:n=>{let r=k(n,e);if(r)return b.create(n.doc,[_e.inline(r.from,r.to,{class:t})])}}})}function ct({markNames:e,selectedClass:n}){return h(g(c({ArrowRight:rt(e),ArrowLeft:it(e),Backspace:at(e),Delete:ot(e)}),t.high),d(st(e,n)))}const j=new Map;async function lt(e){let t=ve.matchLanguageName(x,e,!0);if(!t){j.set(e,null);return}let n=t.support;if(!n)try{n=await t.load()}catch(t){console.error(`[meowdown] Failed to load language "${e}":`,t),j.set(e,null)}if(j.has(e))return;if(!n){j.set(e,null);return}let r=be({parse:e=>n.language.parser.parse(e.content),highlighter:ye});j.set(e,r)}const ut=e=>{let t=e.language?.trim();if(!t)return[];let n=j.get(t);return n?n(e):n===null?[]:lt(t)};function dt(){return ce({parser:ut,nodeTypes:[`codeBlock`]})}function M(e){return ae(ne({type:`heading`,attrs:{level:e}}))}const ft=(e,t,n)=>te(e,n)?.parent.type.name===`heading`?re()(e,t,n):!1;function pt(){return c({"Mod-1":M(1),"Mod-2":M(2),"Mod-3":M(3),"Mod-4":M(4),"Mod-5":M(5),"Mod-6":M(6),Backspace:ft})}function mt(){return h(Ce(),Se(),xe(),pt())}function ht(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function gt(e,t){let[n,r,i]=t;return[n,r,i.map(t=>De.fromJSON(e,t))]}var N=class e extends S{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return Te.ok(e);let t=e.content.size,n;for(let[r,i,a]of this.chunks){if(r>=i)continue;let o=Math.max(0,Math.min(r,t)),s=Math.max(o,Math.min(i,t));o>=s||e.nodesBetween(o,s,(t,r)=>{if(!t.isText)return!0;let i=Math.max(o,r),c=Math.min(s,r+t.nodeSize);if(i>=c)return!1;let l=t.marks;for(let t of l)t.isInSet(a)||(n??=new Ee(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new Ee(e),n.addMark(i,c,t));return!1})}return Te.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return _t;let t=this.chunks[0][0],n=this.chunks[0][1];for(let[,e]of this.chunks)e>n&&(n=e);let r=e.content.size,i=Math.max(0,Math.min(t,r)),a=Math.max(i,Math.min(n,r));return new we(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(ht)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>gt(t,e)))}};S.jsonID(`batchSetMark`,N);const _t=new N([]),vt=new Set([`com`,`br`,`net`,`jp`,`org`,`in`,`de`,`ru`,`it`,`fr`]),yt=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;function bt(e){let t=e.indexOf(`/`);return t===-1?e:e.slice(0,t)}function xt(e){let t=e.split(`.`);if(t.length<2)return!1;let n=t[t.length-1].toLowerCase();if(!vt.has(n)||t[t.length-2].length<3)return!1;for(let e of t)if(e.length>63||!yt.test(e))return!1;return!0}const St=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+(?:\/[^\s<]*)?/i,Ct=/[\s(*_~]/;function wt(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45}function Tt(e,t,n){let r=0;for(let i=0;i<t;i++)e[i]===n&&r++;return r}function Et(e){let t=e.length;for(;;){let n=e[t-1];if(/[?!.,:*_~]/.test(n)||n===`)`&&Tt(e,t,`)`)>Tt(e,t,`(`))t--;else if(n===`;`){let n=/&(?:#\d+|#x[a-f\d]+|\w+);$/.exec(e.slice(0,t));if(!n)break;t=n.index}else break}return t}const Dt={parseInline:[{name:`BareAutolink`,before:`Link`,parse(e,t,n){if(!wt(t)||e.hasOpenLink)return-1;let r=e.slice(n-1,n);if(r!==``&&!Ct.test(r))return-1;let i=St.exec(e.slice(n,e.end));if(!i)return-1;let a=Et(i[0]);return a===0||!xt(bt(i[0].slice(0,a)))?-1:e.addElement(e.elt(`URL`,n,n+a))}}]};function Ot(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45||e===95||e>127&&/[\p{L}\p{N}]/u.test(String.fromCharCode(e))}function kt(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const At={defineNodes:[{name:`Hashtag`}],parseInline:[{name:`Hashtag`,parse(e,t,n){if(t!==35||!/\s|^$/.test(e.slice(n-1,n)))return-1;let r=n+1,i=!1;for(;r<e.end;){let t=e.char(r);if(!Ot(t))break;i||=kt(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},jt={defineNodes:[{name:`Wikilink`},{name:`WikilinkMark`}],parseInline:[{name:`Wikilink`,before:`Link`,parse(e,t,n){if(t!==91||e.char(n+1)!==91)return-1;let r=!1;for(let t=n+2;t<e.end-1;t++){let i=e.char(t);if(i===93){if(e.char(t+1)!==93||!r)return-1;let i=t+2;return e.addElement(e.elt(`Wikilink`,n,i,[e.elt(`WikilinkMark`,n,n+2),e.elt(`WikilinkMark`,t,i)]))}if(i===91||i===10)return-1;i!==32&&i!==9&&(r=!0)}return-1}}]};function Mt(e){return e.end}const P=ke.configure([Oe,At,jt,Dt]),Nt=P.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:Mt}]});function F(e){return P.parseInline(e,0)}function I(e,t,n=[]){for(let r of e)t(r)&&n.push(r),I(r.children,t,n);return n}function Pt(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const L=Pt(P);function Ft(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!e[n].eq(t[n]))return!1;return!0}function It(e){let t=e.replace(/^\[\[/,``).replace(/\]\]$/,``),n=t.indexOf(`|`);return n<0?{target:t.trim(),display:``}:{target:t.slice(0,n).trim(),display:t.slice(n+1).trim()}}function Lt(){return e=>{let t=e.attrs,n=document.createElement(`span`);n.className=`md-wikilink-view`;let r=document.createElement(`span`);n.appendChild(r);let i=document.createElement(`span`);return i.className=`md-wikilink-label`,i.contentEditable=`false`,i.dataset.testid=`wikilink`,i.textContent=t.display||t.target,n.appendChild(i),{dom:n,contentDOM:r,ignoreMutation:e=>!r.contains(e.target)}}}function Rt(){return u({name:`mdWikilinkView`,constructor:Lt()})}const R=new Map([[L.Emphasis,`mdEm`],[L.StrongEmphasis,`mdStrong`],[L.InlineCode,`mdCode`],[L.Strikethrough,`mdDel`],[L.EmphasisMark,`mdMark`],[L.CodeMark,`mdMark`],[L.LinkMark,`mdMark`],[L.StrikethroughMark,`mdMark`],[L.URL,`mdLinkUri`],[L.Hashtag,`mdTag`],[L.WikilinkMark,`mdMark`]]);function zt(e,t){let n=F(t),r=[];return z(n,[],0,t.length,t,e,r),r}function Bt(e){if(/^[a-z][a-z0-9+.-]*:/i.test(e))return e;if(/^[^\s@]+@[^\s@]+$/.test(e))return`mailto:${e}`;if(/^www\./i.test(e)||xt(bt(e)))return`https://${e}`}function z(e,t,n,r,i,a,o){let s=n;for(let n of e){if(n.from>s&&H(o,s,n.from,t),n.type===L.Link)B(n,t,i,a,o);else if(n.type===L.Image)Vt(n,t,i,a,o);else if(n.type===L.Wikilink)V(n,t,i,a,o);else if(n.type===L.URL){let e=Bt(i.slice(n.from,n.to)),r=e?a.mdLinkText.create({href:e}):a.mdLinkUri.create();H(o,n.from,n.to,[...t,r])}else{let e=R.get(n.type),r=e?[...t,a[e].create()]:t;n.children.length===0?H(o,n.from,n.to,r):z(n.children,r,n.from,n.to,i,a,o)}s=n.to}s<r&&H(o,s,r,t)}function B(e,t,n,r,i){let a=-1,o=null,s=0;for(let t of e.children)t.type===L.LinkMark?(s++,s===2&&(a=t.from)):t.type===L.URL&&o===null&&(o=t);let c=o?n.slice(o.from,o.to):``,l=c?r.mdLinkText.create({href:c}):null,u=e=>a>=0&&e<a&&l!==null,d=e.from;for(let a of e.children){if(a.from>d){let e=u(d)?[...t,l]:t;H(i,d,a.from,e)}let e=u(a.from)?[...t,l]:t;if(a.type===L.Wikilink){V(a,e,n,r,i),d=a.to;continue}let o=R.get(a.type),s=o?[...e,r[o].create()]:e;a.children.length===0?H(i,a.from,a.to,s):z(a.children,s,a.from,a.to,n,r,i),d=a.to}d<e.to&&H(i,d,e.to,t)}function Vt(e,t,n,r,i){let a=e.children.find(e=>e.type===L.URL);if(!a){B(e,t,n,r,i);return}let o=e.children.filter(e=>e.type===L.LinkMark),s=n.slice(a.from,a.to),c=o.length>=2?n.slice(o[0].to,o[1].from):``,l=r.mdImageSource.create({src:s,alt:c}),u=r.mdImageView.create({src:s,alt:c}),d=e.to-1,f=e=>e>=d?[...t,l,u]:[...t,l],p=e.from;for(let t of e.children){t.from>p&&H(i,p,t.from,f(p));let e=R.get(t.type),a=e?[...f(t.from),r[e].create()]:f(t.from);t.children.length===0?H(i,t.from,t.to,a):z(t.children,a,t.from,t.to,n,r,i),p=t.to}p<e.to&&H(i,p,e.to,f(p))}function V(e,t,n,r,i){let{target:a,display:o}=It(n.slice(e.from,e.to)),s=r.mdWikilinkSource.create({target:a}),c=r.mdWikilinkView.create({target:a,display:o}),l=e.to-1,u=e=>e>=l?[...t,s,c]:[...t,s],d=e.from;for(let t of e.children){t.from>d&&H(i,d,t.from,u(d));let e=r.mdMark.create();t.from<l&&t.to>l?(H(i,t.from,l,[...u(t.from),e]),H(i,l,t.to,[...u(l),e])):H(i,t.from,t.to,[...u(t.from),e]),d=t.to}d<e.to&&H(i,d,e.to,u(d))}function H(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&Ft(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const Ht=Ae(()=>{let e=Mn().schema;if(e==null)throw Error(`Unexpected empty schema`);return e}),Ut=Ae(()=>r(Ht())),U=`meowdown_mark_builders`;function Wt(e){let t=e.cached[U];if(t)return t;let r=n(e);return e.cached[U]=r,r}const W=`inline-marks-applied`,Gt=new WeakMap;let Kt=0,qt=0;function Jt(e,t,n){let r=Gt.get(e);if(r?qt++:(Kt++,r=zt(Wt(n),e.textContent),Gt.set(e,r)),t===0)return r;let i=[];for(let[e,n,a]of r)i.push([e+t,n+t,a]);return i}function Yt(e,t){let n=1/0,r=-1/0;for(let t of e)for(let e of t.mapping.maps)e.forEach((e,t,i,a)=>{i<n&&(n=i),a>r&&(r=a)});let i=t.doc.content.size;return n>r?{from:0,to:i}:{from:Math.max(0,n),to:Math.min(i,r)}}function Xt(e,t){let n=[];return e.doc.nodesBetween(t.from,t.to,(t,r)=>{if(t.type.spec.code)return!1;if(!t.isTextblock)return!0;if(t.childCount===0)return!1;let i=Jt(t,r+1,e.schema);return i.length>0&&n.push(...i),!1}),n}function Zt(){return new _({key:new v(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(W))return null;let r=Xt(n,Yt(e,n));if(r.length===0)return null;let i=n.tr.step(new N(r));return i.setMeta(W,!0),i.setMeta(`addToHistory`,!1),i},view(e){return e.dispatch(Qt(e.state)),{}}})}function Qt(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function $t(){return d(Zt())}function en(){return l({name:`mdImageView`,inclusive:!1,attrs:{src:{default:``},alt:{default:``}},toDOM:()=>[`span`,{class:`md-image-anchor`},0],parseDOM:[{tag:`span.md-image-anchor`}]})}function tn(){return l({name:`mdImageSource`,inclusive:!1,attrs:{src:{default:``},alt:{default:``}},toDOM:()=>[`span`,{class:`md-image-source`},0],parseDOM:[{tag:`span.md-image-source`}]})}function nn(){return l({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function rn(){return l({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function an(){return l({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function on(){return l({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function sn(){return l({name:`mdLinkText`,inclusive:!1,attrs:{href:{default:``}},toDOM:e=>[`a`,{class:`md-link`,href:e.attrs.href},0],parseDOM:[{tag:`a`,getAttrs:e=>({href:e.getAttribute(`href`)??``})}]})}function cn(){return l({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function ln(){return l({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function un(){return l({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function dn(){return l({name:`mdWikilinkSource`,inclusive:!1,attrs:{target:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink-source`},0],parseDOM:[{tag:`span.md-wikilink-source`}]})}function fn(){return l({name:`mdWikilinkView`,inclusive:!1,attrs:{target:{default:``},display:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink-anchor`},0],parseDOM:[{tag:`span.md-wikilink-anchor`}]})}function pn(){return h(nn(),rn(),an(),on(),sn(),cn(),ln(),un(),dn(),fn(),tn(),en())}function mn(e,t=0){let n=t,r=0;for(let t=0;t<e.length;t++)e.charCodeAt(t)===96?(r++,r>n&&(n=r)):r=0;return n}const G={em:{node:L.Emphasis,delim:`*`},strong:{node:L.StrongEmphasis,delim:`**`},code:{node:L.InlineCode,delim:"`"},del:{node:L.Strikethrough,delim:`~~`}},hn=new Set([L.EmphasisMark,L.CodeMark,L.LinkMark,L.StrikethroughMark]);function K(e){return[e.children[0],e.children.at(-1)]}function gn(e){let{type:t,children:n}=e;if(t===L.Emphasis||t===L.StrongEmphasis||t===L.Strikethrough)return[n[0].to,n.at(-1).from];if(t===L.Link||t===L.Image){let e=n.find((e,t)=>t>0&&e.type===L.LinkMark);return e?[n[0].to,e.from]:null}return null}function q(e,t,n){for(let r of e){if(r.to<=t||r.from>=n||t<=r.from&&r.to<=n)continue;let i=gn(r);return i&&i[0]<=t&&n<=i[1]?q(r.children,t,n):q(e,Math.min(t,r.from),Math.max(n,r.to))}return[t,n]}function _n(e,t,n){for(let r of e)if(!(r.to<=t||r.from>=n)&&(t>r.from||r.to>n))return _n(e,Math.min(t,r.from),Math.max(n,r.to));return[t,n]}const J=e=>e===` `||e===` `;function vn(e,t,n){for(;t<n&&J(e[t]);)t++;for(;n>t&&J(e[n-1]);)n--;return[t,n]}function yn(e,t,n,r){let i=I(F(e),e=>e.type===r.node||hn.has(e.type));for(let r=t;r<n;r++)if(!J(e[r])&&i.every(e=>!(e.from<=r&&r<e.to)))return!1;return!0}function bn(e,t,n,r,i){let a=F(e),o=I(a,e=>e.type===r.node);return i?Cn(e,o,t,n):xn(e,a,o,t,n,r)}function xn(e,t,n,r,i,a){for(let e=0;e!==i-r;){e=i-r,[r,i]=q(t,r,i);for(let e of n)e.to===r&&(r=e.from),e.from===i&&(i=e.to)}let o=[];for(let e of n)if(r<=e.from&&e.to<=i){let[t,n]=K(e);o.push({from:t.from,to:t.to,insert:``}),o.push({from:n.from,to:n.to,insert:``})}let[s,c]=Sn(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function Sn(e,t,n,r,i){if(i.node!==L.InlineCode)return[i.delim,i.delim];let a=e.slice(t,n);for(let e of[...r].sort((e,t)=>t.from-e.from))a=a.slice(0,e.from-t)+a.slice(e.to-t);let o="`".repeat(mn(a)+1),s=a.startsWith("`")||a.endsWith("`")?` `:``;return[o+s,s+o]}function Cn(e,t,n,r){let i=[];for(let a of t){if(a.to<=n||a.from>=r)continue;let[t,o]=K(a),s=Math.max(n,t.to),c=Math.min(r,o.from);for(s>=c&&([s,c]=[t.to,o.from]),[s,c]=_n(a.children.slice(1,-1),s,c);s>t.to&&J(e[s-1]);)s--;for(;c<o.from&&J(e[c]);)c++;s>t.to?i.push({from:s,to:s,insert:e.slice(o.from,o.to)}):i.push({from:t.from,to:t.to,insert:``}),c<o.from?i.push({from:c,to:c,insert:e.slice(t.from,t.to)}):i.push({from:o.from,to:o.to,insert:``})}return i}function wn(e,t,n){let{delim:r}=n,i=r.length;if(e.slice(t-i,t)===r&&e.startsWith(r,t)&&e[t-i-1]!==r[0]&&e[t+i]!==r[0])return{kind:`unwrap`,from:t-i,to:t+i};let a=F(e),o=I(a,e=>e.type===n.node).findLast(e=>e.from<=t&&t<=e.to);if(o){let[e,n]=K(o);return{kind:`move`,pos:t===o.from?e.to:t===o.to?n.from:o.to}}return Tn(a,t)||e[t-1]===r[0]||e[t]===r[0]?null:{kind:`insert`,pos:t}}function Tn(e,t){for(let n of e)if(n.from<t&&t<n.to){let e=gn(n);return!e||t<e[0]||t>e[1]?!0:Tn(n.children,t)}return!1}function Y(e){return(t,n)=>{if(t.selection.empty)return En(e,t,n);let{from:r,to:i,anchor:a,head:o}=t.selection,s=[];t.doc.nodesBetween(r,i,(t,n)=>{if(t.type.spec.code)return!1;if(!t.isTextblock)return!0;let a=t.textContent,o=n+1,[c,l]=vn(a,Math.max(r-o,0),Math.min(i-o,a.length));return c<l&&s.push({text:a,base:o,from:c,to:l,active:yn(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>bn(t.text,t.from,t.to,e,c).map(e=>({from:e.from+t.base,to:e.to+t.base,insert:e.insert})));if(l.length===0)return!1;if(n){let e=t.tr;l.sort((e,t)=>t.from-e.from||t.to-e.to);for(let t of l)t.insert?e.insertText(t.insert,t.from,t.to):e.delete(t.from,t.to);e.setSelection(y.create(e.doc,e.mapping.map(a,a<=o?1:-1),e.mapping.map(o,o<a?1:-1))),n(e.scrollIntoView())}return!0}}function En(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=wn(i.textContent,r.parentOffset,e);if(!a)return!1;if(n){let i=r.start(),o=t.tr;a.kind===`unwrap`&&o.delete(i+a.from,i+a.to),a.kind===`move`&&o.setSelection(y.create(o.doc,i+a.pos)),a.kind===`insert`&&(o.insertText(e.delim+e.delim,i+a.pos),o.setSelection(y.create(o.doc,i+a.pos+e.delim.length))),n(o.scrollIntoView())}return!0}function Dn(){return o({toggleEm:()=>Y(G.em),toggleStrong:()=>Y(G.strong),toggleCode:()=>Y(G.code),toggleDel:()=>Y(G.del)})}function On(){return c({"Mod-b":Y(G.strong),"Mod-i":Y(G.em),"Mod-e":Y(G.code),"Mod-Shift-x":Y(G.del)})}function kn(){return h(Dn(),On())}function An(){return h(Le(),Ie(),je(),Fe(),Pe({allowTableNodeSelection:!0}),Me(),Ne())}function jn(){return h(me(),le(),he(),oe(),fe(),mt(),An(),se(),de(),pn(),dt(),$t(),kn(),Rt(),ct({markNames:[`mdImageSource`,`mdWikilinkSource`],selectedClass:`md-atomic-selected`}),a(),i(),s(),ue(),ge(),pe())}function Mn(){return jn()}function X(e){let t;return d(new _({key:e.key,props:{handleDOMEvents:{mousedown:e=>{let{from:n,to:r,empty:i}=e.state.selection;return t={from:n,to:r,empty:i},!1}},handleClick:(n,r,i)=>{if(!i.target?.closest?.(e.selector))return!1;let a=e.findHitAt(n.state,r);return!a||!(ee?i.metaKey:i.ctrlKey)&&t?.empty&&t.from>=a.from&&t.to<=a.to?!1:(e.preventDefault&&i.preventDefault(),e.onClick(a.payload,i),!0)}}}))}const Nn=new v(`meowdown-wikilink-click`);function Pn(e,t){let n=C(e,t,`mdWikilinkSource`);if(!n)return;let{target:r}=n.mark.attrs;return{from:n.from,to:n.to,target:r}}function Fn(e){return X({key:Nn,selector:`.md-wikilink-label, .md-wikilink-source`,preventDefault:!1,findHitAt:(e,t)=>{let n=Pn(e,t);return n?{from:n.from,to:n.to,payload:n.target}:void 0},onClick:(t,n)=>e({target:t,event:n})})}const In=new v(`meowdown-link-click`);function Ln(e,t){let n=C(e,t,`mdLinkText`);if(n)return{from:n.from,to:n.to,href:n.mark.attrs.href}}function Rn(e){return X({key:In,selector:`.md-link`,preventDefault:!0,findHitAt:(e,t)=>{let n=Ln(e,t);return n?{from:n.from,to:n.to,payload:n.href}:void 0},onClick:(t,n)=>e({href:t,event:n})})}function zn(){return typeof window>`u`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}const Bn=/^(?:www\.|mobile\.)?(?:twitter\.com|x\.com)$/i,Vn=/\/status(?:es)?\/(\d+)/;function Hn(e){let t;try{t=new URL(e)}catch{return}if(Bn.test(t.hostname))return Vn.exec(t.pathname)?.[1]}const Un=e=>{let t=Hn(e);if(t)return{key:`tweet:${t}`,render:()=>{let e=zn()?`dark`:`light`,n=document.createElement(`iframe`);return n.src=`https://platform.twitter.com/embed/Tweet.html?id=${t}&theme=${e}&dnt=true`,n.title=`Tweet`,n.className=`md-embed md-embed-tweet`,n.dataset.testid=`tweet-embed`,n.loading=`lazy`,n.referrerPolicy=`strict-origin-when-cross-origin`,n.setAttribute(`frameborder`,`0`),Wn(n),n}}};function Wn(e){let t=t=>{if(t.source===e.contentWindow)try{let n=t.data?.[`twttr.embed`]?.params?.[0]?.height;typeof n==`number`&&(e.style.height=`${n}px`)}catch(e){console.warn(`[meowdown] failed to parse tweet resize message:`,e)}};window.addEventListener(`message`,t);let n=new MutationObserver(()=>{e.isConnected||(window.removeEventListener(`message`,t),n.disconnect())});n.observe(document.body,{childList:!0,subtree:!0})}const Gn=/^(?:www\.|m\.)?(?:youtube\.com|youtube-nocookie\.com)$/i,Kn=/^(?:www\.)?youtu\.be$/i,qn=/^[\w-]{11}$/;function Jn(e){let t;try{t=new URL(e)}catch{return}let n=null;if(Kn.test(t.hostname))n=t.pathname.slice(1);else if(Gn.test(t.hostname)){let[,e,r]=t.pathname.split(`/`);t.pathname===`/watch`?n=t.searchParams.get(`v`):(e===`shorts`||e===`embed`||e===`live`)&&(n=r??null)}if(!n||!qn.test(n))return;let r=t.searchParams.get(`start`)??t.searchParams.get(`t`),i=r?Yn(r):void 0;return{videoId:n,startSeconds:i}}function Yn(e){if(/^\d+$/.test(e))return Number(e);let t=/^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/.exec(e);if(!(!t||!t[1]&&!t[2]&&!t[3]))return Number(t[1]??0)*3600+Number(t[2]??0)*60+Number(t[3]??0)}const Xn=[e=>{let t=Jn(e);if(!t)return;let n=t.startSeconds?`?start=${t.startSeconds}`:``;return{key:`youtube:${t.videoId}:${t.startSeconds??0}`,render:()=>{let e=document.createElement(`iframe`);return e.src=`https://www.youtube-nocookie.com/embed/${t.videoId}${n}`,e.title=`YouTube video`,e.className=`md-embed md-embed-youtube`,e.dataset.testid=`youtube-embed`,e.loading=`lazy`,e.referrerPolicy=`strict-origin-when-cross-origin`,e.setAttribute(`frameborder`,`0`),e.allow=`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen`,e.allowFullscreen=!0,e}}},Un];function Zn(e){for(let t of Xn){let n=t(e);if(n)return n}}function Qn(e){return/^https?:\/\//i.test(e)?e:void 0}function $n(e,t,n){let r=Zn(e);if(r){let e=document.createElement(`span`);return e.className=`md-image-preview md-image-preview-embed`,e.appendChild(r.render()),e}let i=(n.resolveImageUrl??Qn)(e);if(!i)return;let a=document.createElement(`span`);a.className=`md-image-preview md-image-preview-img`,a.dataset.testid=`image-preview`;let o=document.createElement(`img`);return o.src=i,o.alt=t,o.draggable=!1,a.appendChild(o),a}function er(e){return t=>{let n=t.attrs,r=document.createElement(`span`);r.className=`md-image-view`;let i=document.createElement(`span`);i.className=`md-image-view-content`,r.appendChild(i);let a=$n(n.src,n.alt,e);return a&&(a.contentEditable=`false`,r.appendChild(a)),{dom:r,contentDOM:i,ignoreMutation:e=>!i.contains(e.target)}}}function tr(e){return e?Array.from(e.files).filter(e=>e.type.startsWith(`image/`)):[]}const nr=e=>{console.error(`[meowdown] failed to save pasted image:`,e)};async function rr(e,t,n,r=nr,i){let a=i;for(let i of t){let t;try{t=await n(i)}catch(e){r(e,i);continue}if(!t||e.isDestroyed)continue;let o=`![](${t})`,s=a==null?e.state.tr.insertText(o):e.state.tr.insertText(o,a);e.dispatch(s),a!=null&&(a+=o.length)}}function ir(e){return new _({key:new v(`image-input`),props:{handlePaste:(t,n)=>{let r=tr(n.clipboardData),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(rr(t,r,i,a),!0)},handleDrop:(t,n)=>{let r=tr(n.dataTransfer),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(rr(t,r,i,a,t.posAtCoords({left:n.clientX,top:n.clientY})?.pos),!0)}}})}function ar(e={}){return h(u({name:`mdImageView`,constructor:er(e)}),g(d(ir(e)),t.high))}const or=new v(`meowdown-image-click`);function sr(e,t){let n=C(e,t,`mdImageSource`);if(!n)return;let{src:r,alt:i}=n.mark.attrs;return{from:n.from,to:n.to,src:r,alt:i}}function cr(e){return d(new _({key:or,props:{handleClick:(t,n,r)=>{let i=r.target?.closest?.(`.md-image-preview`);if(!i)return!1;let a=i.closest(`.md-image-view`)?.querySelector(`.md-image-view-content`);if(!a)return!1;let o=sr(t.state,t.posAtDOM(a,0));return o?(e({src:o.src,alt:o.alt,event:r}),!0):!1}}}))}const lr=new v(`meowdown-embed-paste`);function ur(e){let t=e.trim();if(!(!t||/\s/.test(t)))return Zn(t)?t:void 0}function dr(e,t){let{from:n,to:r}=e.state.selection;e.dispatch(Re(e.state.tr.insertText(t,n,r)));let i=e.state.tr.insertText(`![](${t})`,n,n+t.length);e.dispatch(Re(i))}function fr(){return d(new _({key:lr,props:{handlePaste:(e,t)=>{let n=e.state.selection.$from.parent;if(!n.inlineContent||n.type.spec.code)return!1;let r=t.clipboardData?.getData(`text/plain`);if(!r)return!1;let i=ur(r);return i?(dr(e,i),!0):!1}}}))}const pr=(e,t)=>{let{$from:n,empty:r}=e.selection;if(!r||n.depth!==1||n.index(0)!==0||n.parent.type.name!==`heading`||n.parentOffset!==n.parent.content.size)return!1;if(t){let r=p(e.schema,`list`),i=p(e.schema,`paragraph`),a=r.create({kind:`bullet`},i.create()),o=n.after(),s=e.tr.insert(o,a);s.setSelection(y.create(s.doc,o+2)),t(s.scrollIntoView())}return!0};function mr(){return g(c({Enter:pr}),t.high)}const hr={"Mod-b":`Bold`,"Mod-i":`Italic`,"Mod-e":`Inline code`,"Mod-Shift-x":`Strikethrough`,"Mod-1":`Heading 1`,"Mod-2":`Heading 2`,"Mod-3":`Heading 3`,"Mod-4":`Heading 4`,"Mod-5":`Heading 5`,"Mod-6":`Heading 6`},gr=new Set([`MscGen`,`Xù`,`MsGenny`,`Angular Template`,`Brainfuck`,`Esper`,`Oz`,`Factor`,`Squirrel`,`Yacas`,`mIRC`,`FCL`,`ECL`,`MUMPS`,`Pig`,`Asterisk`,`Z80`]),_r=x.map(e=>e.name).filter(e=>!gr.has(e)).map(e=>({label:e,value:e.toLowerCase()})).concat({label:`Plain text`,value:``}).sort((e,t)=>e.label.localeCompare(t.label));function vr(e){let t=new br;return xr(e,t),t.finish()}const yr=[``,`# `,`## `,`### `,`#### `,`##### `,`###### `];var br=class{constructor(){this.parts=[],this.linePrefix=``,this.pendingFirst=null,this.atLineStart=!0,this.deferredBlankPrefix=null}write(e){if(e===``)return;if(this.emitDeferredBlankLine(),this.atLineStart&&=(this.parts.push(this.pendingFirst??this.linePrefix),this.pendingFirst=null,!1),!e.includes(`
3
3
  `)){this.parts.push(e);return}let t=e.split(`
4
4
  `);for(let e=0;e<t.length;e++)e>0&&this.parts.push(`
5
5
  `,this.linePrefix),t[e]!==``&&this.parts.push(t[e])}closeBlock(){this.atLineStart||this.parts.push(`
6
6
  `),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=i}finish(){return this.parts.join(``).replace(/\s+$/,``)+`
7
7
  `}emitDeferredBlankLine(){let e=this.deferredBlankPrefix;e!==null&&(this.parts.push(e.trimEnd(),`
8
- `),this.deferredBlankPrefix=null)}};function Rn(e,t){switch(e.type.name){case`doc`:X(e,t);return;case`paragraph`:Vn(e,t),t.closeBlock();return;case`heading`:{let n=e.attrs.level;t.write(In[n]??`# `),Vn(e,t),t.closeBlock();return}case`blockquote`:t.withPrefix(`> `,`> `,()=>X(e,t)),t.closeBlock();return;case`list`:Hn(e,t,Bn(e));return;case`codeBlock`:Un(e,t);return;case`horizontalRule`:t.write(`---`),t.closeBlock();return;case`table`:Wn(e,t);return;case`text`:e.text&&t.write(e.text);return}}function X(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(),Rn(a,t),i++;continue}let o=i+1;for(;o<r&&e.child(o).type.name===`list`;)o++;let s=zn(e,i,o);for(let r=i;r<o;r++)(r===i?n&&i>0:s)&&t.suppressBlank(),Hn(e.child(r),t,s);i=o}}function zn(e,t,n){for(let r=t;r<n;r++)if(!Bn(e.child(r)))return!1;return!0}function Bn(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 Vn(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 Hn(e,t,n){let r=e.attrs,i=r.kind===`ordered`?`${r.order??1}. `:r.kind===`task`?r.checked?`- [x] `:`- [ ] `:`- `,a=` `.repeat(r.kind===`task`?2:i.length);t.withPrefix(a,i,()=>X(e,t,n)),t.closeBlock()}function Un(e,t){let n=e.attrs.language??``,r=e.textContent,i="`".repeat(P(r,2)+1);t.write(i),n&&t.write(n),t.write(`
8
+ `),this.deferredBlankPrefix=null)}};function xr(e,t){switch(e.type.name){case`doc`:Z(e,t);return;case`paragraph`:wr(e,t),t.closeBlock();return;case`heading`:{let n=e.attrs;t.write(yr[n.level]??`# `),wr(e,t),t.closeBlock();return}case`blockquote`:t.withPrefix(`> `,`> `,()=>Z(e,t)),t.closeBlock();return;case`list`:Tr(e,t,Cr(e));return;case`codeBlock`:Er(e,t);return;case`horizontalRule`:t.write(`---`),t.closeBlock();return;case`table`:Dr(e,t);return;case`text`:e.text&&t.write(e.text);return}}function Z(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(),xr(a,t),i++;continue}let o=i+1;for(;o<r&&e.child(o).type.name===`list`;)o++;let s=Sr(e,i,o);for(let r=i;r<o;r++)(r===i?n&&i>0:s)&&t.suppressBlank(),Tr(e.child(r),t,s);i=o}}function Sr(e,t,n){for(let r=t;r<n;r++)if(!Cr(e.child(r)))return!1;return!0}function Cr(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 wr(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 Tr(e,t,n){let r=e.attrs,i=r.kind===`ordered`?`${r.order??1}. `:r.kind===`task`?r.checked?`- [x] `:`- [ ] `:`- `,a=` `.repeat(r.kind===`task`?2:i.length);t.withPrefix(a,i,()=>Z(e,t,n)),t.closeBlock()}function Er(e,t){let n=e.attrs.language||``,r=e.textContent,i="`".repeat(mn(r,2)+1);t.write(i),n&&t.write(n),t.write(`
9
9
  `),t.write(r),t.write(`
10
- `),t.write(i),t.closeBlock()}function Wn(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(Kn(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(Gn(s,i)),t.write(`
10
+ `),t.write(i),t.closeBlock()}function Dr(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(Or(s,i)),t.write(`
11
11
  `),t.write(o);for(let e=0;e<n;e++)e!==a&&(t.write(`
12
- `),t.write(Gn(r[e],i)));t.closeBlock()}function Gn(e,t){let n=`|`;for(let r=0;r<t;r++)n+=` `+(e[r]??``)+` |`;return n}function Kn(e){let t=e.textContent.trim();return!t.includes(`|`)&&!t.includes(`
12
+ `),t.write(Or(r[e],i)));t.closeBlock()}function Or(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(`
13
13
  `)?t:t.replaceAll(`|`,String.raw`\|`).replaceAll(`
14
- `,` `)}function qn(e,t=at()){let n=Jn(t,Qe.parse(e).cursor(),e);return t.doc(n)}function Jn(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 A.ATXHeading1:return[Q(e,t,n,1)];case A.ATXHeading2:return[Q(e,t,n,2)];case A.ATXHeading3:return[Q(e,t,n,3)];case A.ATXHeading4:return[Q(e,t,n,4)];case A.ATXHeading5:return[Q(e,t,n,5)];case A.ATXHeading6:return[Q(e,t,n,6)];case A.SetextHeading1:return[Q(e,t,n,1)];case A.SetextHeading2:return[Q(e,t,n,2)];case A.Paragraph:return[$(e,t,n)];case A.Blockquote:return[Yn(e,t,n)];case A.BulletList:return Xn(e,t,n,`bullet`,1);case A.OrderedList:return Zn(e,t,n);case A.FencedCode:case A.CodeBlock:return[er(e,t,n)];case A.HorizontalRule:return[e.horizontalRule()];case A.Table:return[tr(e,t,n)];case A.Task:return[$(e,t,n)];default:return[]}}function Q(e,t,n,r){let i=t.from,a=t.to;if(t.firstChild()){t.type.id===A.HeaderMark&&(i=t.to);let e=-1,n=-1;do e=t.type.id,n=t.from;while(t.nextSibling());e===A.HeaderMark&&n>i&&(a=n),t.parent()}let o=n.slice(i,a).trim();return e.heading({level:r},o)}function $(e,t,n){let r=n.slice(t.from,t.to);return e.paragraph(r)}function Yn(e,t,n){let r=[];if(t.firstChild()){do{if(t.type.id===A.QuoteMark)continue;r.push(...Z(e,t,n))}while(t.nextSibling());t.parent()}return e.blockquote(r)}function Xn(e,t,n,r,i){let a=[];if(t.firstChild()){do t.type.id===A.ListItem&&a.push(Qn(e,t,n,r,i));while(t.nextSibling());t.parent()}return a}function Zn(e,t,n){let r=1;if(t.firstChild()){if(t.type.id===A.ListItem&&t.firstChild()){if(t.type.id===A.ListMark){let e=n.slice(t.from,t.to),i=Number.parseInt(e,10);Number.isFinite(i)&&(r=i)}t.parent()}t.parent()}return Xn(e,t,n,`ordered`,r)}function Qn(e,t,n,r,i){let a=[],o=null;if(t.firstChild()){do{if(t.type.id===A.ListMark)continue;if(r===`bullet`&&t.type.id===A.Task){let r=$n(e,t,n);o=r.checked,a.push(r.paragraph);continue}a.push(...Z(e,t,n))}while(t.nextSibling());t.parent()}return e.list({kind:o===null?r:`task`,order:r===`ordered`?i:null,checked:o??!1,collapsed:!1},a)}function $n(e,t,n){let r=!1,i=t.from,a=t.to;t.firstChild()&&(t.type.id===A.TaskMarker&&(r=n.slice(t.from,t.to).toLowerCase().includes(`x`),i=t.to),t.parent());let o=n.slice(i,a);return o.startsWith(` `)&&(o=o.slice(1)),{checked:r,paragraph:o===``?e.paragraph():e.paragraph(o)}}function er(e,t,n){let r=``,i=``;if(t.firstChild()){do switch(t.type.id){case A.CodeInfo:r=n.slice(t.from,t.to);break;case A.CodeText:i=n.slice(t.from,t.to);break}while(t.nextSibling());t.parent()}return e.codeBlock({language:r},i)}function tr(e,t,n){let r=0;if(t.firstChild()){do t.type.id===A.TableDelimiter&&(r=nr(n.slice(t.from,t.to)));while(t.nextSibling());t.parent()}let i=[];if(t.firstChild()){do{let a=t.type.id;a===A.TableHeader?i.push(rr(e,t,n,!0,r)):a===A.TableRow&&i.push(rr(e,t,n,!1,r))}while(t.nextSibling());t.parent()}return e.table(i)}function nr(e){return e.split(`|`).filter(e=>e.trim()!==``).length}function rr(e,t,n,r,i){let a=Array(i).fill(``);if(t.firstChild()){let e=t.type.id===A.TableDelimiter,r=0;do if(t.type.id===A.TableDelimiter)r++;else if(t.type.id===A.TableCell){let o=r-+!!e;o>=0&&o<i&&(a[o]=n.slice(t.from,t.to).trim())}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 ir(e){return e.replace(/\n+$/u,``)}function ar(e){return e.split(`
15
- `).filter(e=>e.trim()!==``)}function or(e){let t=Fn(qn(e));if(ir(t)===ir(e))return`exact`;let n=ar(e),r=ar(t);return n.length===r.length&&n.every((e,t)=>e===r[t])?`normalizing`:`lossy`}export{Mn as EDITOR_KEY_BINDINGS,e as Priority,or as checkRoundTrip,Pn as codeBlockLanguages,jn as defineBulletAfterHeading,U as defineEditorExtension,kn as defineEmbedPaste,Tn as defineImages,qt as defineMarkMode,Ie as definePlaceholder,Le as defineReadonly,nn as defineWikilinkClickHandler,Fn as docToMarkdown,qn as markdownToDoc,ie as withPriority};
14
+ `,` `)}function Ar(e,t=Ut()){let n=jr(t,Nt.parse(e).cursor(),e);return t.doc(n)}function jr(e,t,n){let r=[];if(!t.firstChild())return r;do r.push(...Q(e,t,n));while(t.nextSibling());return t.parent(),r}function Q(e,t,n){switch(t.type.id){case L.ATXHeading1:return[$(e,t,n,1)];case L.ATXHeading2:return[$(e,t,n,2)];case L.ATXHeading3:return[$(e,t,n,3)];case L.ATXHeading4:return[$(e,t,n,4)];case L.ATXHeading5:return[$(e,t,n,5)];case L.ATXHeading6:return[$(e,t,n,6)];case L.SetextHeading1:return[$(e,t,n,1)];case L.SetextHeading2:return[$(e,t,n,2)];case L.Paragraph:return[Mr(e,t,n)];case L.Blockquote:return[Nr(e,t,n)];case L.BulletList:return Pr(e,t,n,`bullet`,1);case L.OrderedList:return Fr(e,t,n);case L.FencedCode:case L.CodeBlock:return[Rr(e,t,n)];case L.HorizontalRule:return[e.horizontalRule()];case L.Table:return[zr(e,t,n)];case L.Task:return[Mr(e,t,n)];default:return[]}}function $(e,t,n,r){let i=t.from,a=t.to;if(t.firstChild()){t.type.id===L.HeaderMark&&(i=t.to);let e=-1,n=-1;do e=t.type.id,n=t.from;while(t.nextSibling());e===L.HeaderMark&&n>i&&(a=n),t.parent()}let o=n.slice(i,a).trim();return e.heading({level:r},o)}function Mr(e,t,n){let r=n.slice(t.from,t.to);return e.paragraph(r)}function Nr(e,t,n){let r=[];if(t.firstChild()){do{if(t.type.id===L.QuoteMark)continue;r.push(...Q(e,t,n))}while(t.nextSibling());t.parent()}return e.blockquote(r)}function Pr(e,t,n,r,i){let a=[];if(t.firstChild()){do t.type.id===L.ListItem&&a.push(Ir(e,t,n,r,i));while(t.nextSibling());t.parent()}return a}function Fr(e,t,n){let r=1;if(t.firstChild()){if(t.type.id===L.ListItem&&t.firstChild()){if(t.type.id===L.ListMark){let e=n.slice(t.from,t.to),i=Number.parseInt(e,10);Number.isFinite(i)&&(r=i)}t.parent()}t.parent()}return Pr(e,t,n,`ordered`,r)}function Ir(e,t,n,r,i){let a=[],o=null;if(t.firstChild()){do{if(t.type.id===L.ListMark)continue;if(r===`bullet`&&t.type.id===L.Task){let r=Lr(e,t,n);o=r.checked,a.push(r.paragraph);continue}a.push(...Q(e,t,n))}while(t.nextSibling());t.parent()}return e.list({kind:o===null?r:`task`,order:r===`ordered`?i:null,checked:o??!1,collapsed:!1},a)}function Lr(e,t,n){let r=!1,i=t.from,a=t.to;t.firstChild()&&(t.type.id===L.TaskMarker&&(r=n.slice(t.from,t.to).toLowerCase().includes(`x`),i=t.to),t.parent());let o=n.slice(i,a);return o.startsWith(` `)&&(o=o.slice(1)),{checked:r,paragraph:o===``?e.paragraph():e.paragraph(o)}}function Rr(e,t,n){let r=``,i=``;if(t.firstChild()){do switch(t.type.id){case L.CodeInfo:r=n.slice(t.from,t.to);break;case L.CodeText:i=n.slice(t.from,t.to);break}while(t.nextSibling());t.parent()}return e.codeBlock({language:r},i)}function zr(e,t,n){let r=0;if(t.firstChild()){do t.type.id===L.TableDelimiter&&(r=Br(n.slice(t.from,t.to)));while(t.nextSibling());t.parent()}let i=[];if(t.firstChild()){do{let a=t.type.id;a===L.TableHeader?i.push(Vr(e,t,n,!0,r)):a===L.TableRow&&i.push(Vr(e,t,n,!1,r))}while(t.nextSibling());t.parent()}return e.table(i)}function Br(e){return e.split(`|`).filter(e=>e.trim()!==``).length}function Vr(e,t,n,r,i){let a=Array(i).fill(``);if(t.firstChild()){let e=t.type.id===L.TableDelimiter,r=0;do if(t.type.id===L.TableDelimiter)r++;else if(t.type.id===L.TableCell){let o=r-+!!e;o>=0&&o<i&&(a[o]=n.slice(t.from,t.to).trim())}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 Hr(e){return e.replace(/\n+$/u,``)}function Ur(e){return e.split(`
15
+ `).filter(e=>e.trim()!==``)}function Wr(e){let t=vr(Ar(e));if(Hr(t)===Hr(e))return`exact`;let n=Ur(e),r=Ur(t);return n.length===r.length&&n.every((e,t)=>e===r[t])?`normalizing`:`lossy`}export{hr as EDITOR_KEY_BINDINGS,e as Priority,Wr as checkRoundTrip,_r as codeBlockLanguages,mr as defineBulletAfterHeading,Mn as defineEditorExtension,fr as defineEmbedPaste,ar as defineImage,cr as defineImageClickHandler,Rn as defineLinkClickHandler,Je as defineMarkMode,ze as definePlaceholder,Be as defineReadonly,Fn as defineWikilinkClickHandler,vr as docToMarkdown,Ar as markdownToDoc,ie as withPriority};
package/dist/style.css CHANGED
@@ -209,9 +209,10 @@ img.ProseMirror-separator {
209
209
  font-size: .95rem;
210
210
  }
211
211
 
212
- .ProseMirror a {
212
+ .ProseMirror .md-link {
213
213
  color: var(--meowdown-accent);
214
214
  text-underline-offset: 2px;
215
+ cursor: pointer;
215
216
  text-decoration: underline 1px;
216
217
  }
217
218
 
@@ -378,24 +379,29 @@ img.ProseMirror-separator {
378
379
  padding: .1em .35em;
379
380
  }
380
381
 
381
- .ProseMirror .md-wikilink {
382
+ .ProseMirror .md-wikilink-label, .ProseMirror .md-wikilink-source {
382
383
  color: var(--meowdown-accent);
383
384
  text-underline-offset: 2px;
384
385
  cursor: pointer;
385
386
  text-decoration: underline 1px dashed;
386
387
  }
387
388
 
388
- .ProseMirror .md-image {
389
- display: block;
389
+ .ProseMirror[data-mark-mode="show"] .md-wikilink-label, .ProseMirror[data-mark-mode="focus"] .md-wikilink-view:has(.show) .md-wikilink-label {
390
+ display: none;
391
+ }
392
+
393
+ .ProseMirror .md-image-preview-img {
394
+ vertical-align: bottom;
395
+ display: inline-block;
390
396
  }
391
397
 
392
- .ProseMirror .md-image img {
398
+ .ProseMirror .md-image-preview-img img {
393
399
  max-height: var(--meowdown-image-max-height, 24rem);
394
400
  border-radius: var(--meowdown-image-radius, .5rem);
395
401
  max-width: 100%;
396
402
  }
397
403
 
398
- .ProseMirror .md-embed-wrapper {
404
+ .ProseMirror .md-image-preview-embed {
399
405
  margin-block: .5rem;
400
406
  display: block;
401
407
  }
@@ -415,6 +421,17 @@ img.ProseMirror-separator {
415
421
  display: block;
416
422
  }
417
423
 
424
+ .ProseMirror[data-mark-mode="hide"] .md-image-view:has(.md-atomic-selected) .md-image-preview, .ProseMirror[data-mark-mode="hide"] .md-wikilink-view:has(.md-atomic-selected) .md-wikilink-label {
425
+ outline: 2px solid var(--meowdown-node-outline);
426
+ outline-offset: 2px;
427
+ background: var(--meowdown-node-selection);
428
+ border-radius: .25rem;
429
+ }
430
+
431
+ .ProseMirror[data-mark-mode="hide"] .md-image-view:has(.md-atomic-selected) .md-image-preview {
432
+ border-radius: var(--meowdown-image-radius, .5rem);
433
+ }
434
+
418
435
  .ProseMirror .prosekit-placeholder:before {
419
436
  content: attr(data-placeholder);
420
437
  float: left;
@@ -423,15 +440,22 @@ img.ProseMirror-separator {
423
440
  color: var(--meowdown-placeholder, var(--meowdown-muted));
424
441
  }
425
442
 
426
- .ProseMirror .md-mark, .ProseMirror .md-link-uri {
443
+ .ProseMirror .md-mark {
427
444
  color: var(--meowdown-mark);
428
445
  opacity: .7;
429
446
  }
430
447
 
431
- .ProseMirror[data-mark-mode="hide"] .md-mark, .ProseMirror[data-mark-mode="hide"] .md-link-uri, .ProseMirror[data-mark-mode="focus"] .md-mark, .ProseMirror[data-mark-mode="focus"] .md-link-uri {
448
+ .ProseMirror .md-link-uri {
449
+ color: var(--meowdown-accent);
450
+ text-underline-offset: 2px;
451
+ opacity: .7;
452
+ text-decoration: underline 1px;
453
+ }
454
+
455
+ .ProseMirror[data-mark-mode="hide"] .md-mark, .ProseMirror[data-mark-mode="hide"] .md-link-uri, .ProseMirror[data-mark-mode="hide"] .md-image-source, .ProseMirror[data-mark-mode="hide"] .md-wikilink-source, .ProseMirror[data-mark-mode="focus"] .md-mark, .ProseMirror[data-mark-mode="focus"] .md-link-uri, .ProseMirror[data-mark-mode="focus"] .md-image-source, .ProseMirror[data-mark-mode="focus"] .md-wikilink-source {
432
456
  display: none;
433
457
  }
434
458
 
435
- .ProseMirror[data-mark-mode="focus"] .md-mark:has(.show), .ProseMirror[data-mark-mode="focus"] .md-link-uri:has(.show) {
459
+ .ProseMirror[data-mark-mode="focus"] .md-mark:has(.show), .ProseMirror[data-mark-mode="focus"] .md-link-uri:has(.show), .ProseMirror[data-mark-mode="focus"] .md-image-source:has(.show), .ProseMirror[data-mark-mode="focus"] .md-wikilink-source:has(.show) {
436
460
  display: inline;
437
461
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@meowdown/core",
3
3
  "type": "module",
4
- "version": "0.11.1",
4
+ "version": "0.13.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -23,18 +23,18 @@
23
23
  "@lezer/highlight": "^1.2.3",
24
24
  "@lezer/markdown": "^1.6.4",
25
25
  "@ocavue/utils": "^1.7.0",
26
- "@prosekit/core": "^0.13.0-beta.1",
27
- "@prosekit/extensions": "^0.17.5-beta.2",
28
- "@prosekit/pm": "^0.1.18",
26
+ "@prosekit/core": "^0.13.0-beta.3",
27
+ "@prosekit/extensions": "^0.17.5-beta.4",
28
+ "@prosekit/pm": "^0.1.19-beta.0",
29
29
  "prosemirror-highlight": "^0.15.2"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@ocavue/tsconfig": "^0.7.1",
33
- "@tsdown/css": "^0.22.2",
33
+ "@tsdown/css": "^0.22.3",
34
34
  "@vitest/browser-playwright": "^4.1.9",
35
35
  "dedent": "^1.7.2",
36
36
  "diffable-html-snapshot": "^0.2.0",
37
- "tsdown": "^0.22.2",
37
+ "tsdown": "^0.22.3",
38
38
  "vitest": "^4.1.9"
39
39
  },
40
40
  "publishConfig": {