@meowdown/core 0.20.0 → 0.21.1
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 +8 -0
- package/dist/index.d.ts +105 -6
- package/dist/index.js +14 -14
- package/dist/style.css +37 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -69,6 +69,14 @@ Pasting rich-text HTML from a browser (a bullet list, **bold**, a link, ...) con
|
|
|
69
69
|
|
|
70
70
|
Pressing Enter at the end of the document's first heading (the title line) can start a fresh empty bullet on the next line instead of a plain paragraph. `defineBulletAfterHeading()` binds this. It is not part of `defineEditorExtension`; add it explicitly.
|
|
71
71
|
|
|
72
|
+
## Static rendering primitives
|
|
73
|
+
|
|
74
|
+
`@meowdown/react`'s `<MarkdownView>` renders Markdown to a read-only React tree without an editor by reusing these building blocks, also exported for other renderers:
|
|
75
|
+
|
|
76
|
+
- `inlineTextToMarkChunks(getMarkBuilders(), text)`: the inline parser the editor uses, returning `[from, to, marks]` chunks (`MarkChunk`) for one line of source text.
|
|
77
|
+
- `getCodeTokens(code, language)`: syntax-highlight tokens (`CodeToken`, the tuple `[from, to, classes]`) tagged with the same `tok-*` classes as the editor. Returns synchronously once the Lezer grammar is cached, otherwise a promise.
|
|
78
|
+
- `matchEmbed(src)`: detects a tweet/YouTube image `src` and returns an `EmbedDescriptor` (no DOM); `listenForTweetHeight(iframe)` syncs a tweet iframe's height and returns a cleanup function.
|
|
79
|
+
|
|
72
80
|
## Re-exports
|
|
73
81
|
|
|
74
82
|
`Priority` and `withPriority` are re-exported from `@prosekit/core`, so you can set extension priorities (e.g. `withPriority(extension, Priority.high)`) without depending on `@prosekit/core` directly.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Editor, Extension, ExtractNodeBuilders, PlainExtension, Priority, Union, withPriority } from "@prosekit/core";
|
|
1
|
+
import { Editor, Extension, ExtractMarkBuilders, ExtractNodeBuilders, PlainExtension, Priority, Union, withPriority } from "@prosekit/core";
|
|
2
2
|
import { CodeBlockAttrs } from "@prosekit/extensions/code-block";
|
|
3
3
|
import { HorizontalRuleExtension } from "@prosekit/extensions/horizontal-rule";
|
|
4
|
-
import { ProseMirrorNode } from "@prosekit/pm/model";
|
|
4
|
+
import { Mark, ProseMirrorNode } from "@prosekit/pm/model";
|
|
5
5
|
import { PlaceholderOptions, definePlaceholder } from "@prosekit/extensions/placeholder";
|
|
6
6
|
import { defineReadonly } from "@prosekit/extensions/readonly";
|
|
7
7
|
|
|
@@ -235,9 +235,94 @@ interface ImageOptions {
|
|
|
235
235
|
/** Called when persisting a pasted/dropped image throws. Defaults to `console.error`. */
|
|
236
236
|
onImageSaveError?: ImageSaveErrorHandler;
|
|
237
237
|
}
|
|
238
|
+
/** Show an `src` as-is when it is an http(s) URL, otherwise skip rendering it. */
|
|
239
|
+
declare function defaultResolveImageUrl(src: string): string | undefined;
|
|
238
240
|
/** Inline image/embed rendering (a mark view) plus paste/drop persistence. */
|
|
239
241
|
declare function defineImage(options?: ImageOptions): PlainExtension;
|
|
240
242
|
//#endregion
|
|
243
|
+
//#region src/extensions/embed/types.d.ts
|
|
244
|
+
/**
|
|
245
|
+
* A framework-agnostic description of an embed iframe. Both the editor's DOM
|
|
246
|
+
* mark view and the static React renderer build their own `<iframe>` from it, so
|
|
247
|
+
* the URL/attribute logic lives in one place while each side renders natively.
|
|
248
|
+
*/
|
|
249
|
+
interface EmbedDescriptor {
|
|
250
|
+
readonly kind: 'tweet' | 'youtube';
|
|
251
|
+
/**
|
|
252
|
+
* Stable identity for the widget, unique per rendered embed (e.g. the video or
|
|
253
|
+
* tweet id). Keeps ProseMirror from rebuilding the iframe on every edit, and
|
|
254
|
+
* keys the React element, so the embed never reloads.
|
|
255
|
+
*/
|
|
256
|
+
readonly key: string;
|
|
257
|
+
/** The iframe `src`. */
|
|
258
|
+
readonly src: string;
|
|
259
|
+
/** The iframe `title`. */
|
|
260
|
+
readonly title: string;
|
|
261
|
+
/** The iframe `class`, e.g. `md-embed md-embed-tweet`. */
|
|
262
|
+
readonly className: string;
|
|
263
|
+
/** The iframe `data-testid`. */
|
|
264
|
+
readonly testid: string;
|
|
265
|
+
/** The iframe `allow` policy, when the embed needs one. */
|
|
266
|
+
readonly allow?: string;
|
|
267
|
+
/** Whether the iframe is fullscreen-capable. */
|
|
268
|
+
readonly allowFullscreen?: boolean;
|
|
269
|
+
}
|
|
270
|
+
//#endregion
|
|
271
|
+
//#region src/extensions/embed/tweet.d.ts
|
|
272
|
+
/**
|
|
273
|
+
* `Tweet.html` reports its rendered height via `postMessage`; size the iframe to
|
|
274
|
+
* fit. Returns a cleanup that removes the listener. The cleanup also runs once
|
|
275
|
+
* the iframe leaves the DOM, so the editor's DOM mark view (which has no destroy
|
|
276
|
+
* hook) is covered, while a React caller can call it on unmount.
|
|
277
|
+
*/
|
|
278
|
+
declare function listenForTweetHeight(iframe: HTMLIFrameElement): () => void;
|
|
279
|
+
//#endregion
|
|
280
|
+
//#region src/extensions/embed/index.d.ts
|
|
281
|
+
/** Detect a tweet/YouTube embed in an image `src`, or `undefined` for a plain image. */
|
|
282
|
+
declare function matchEmbed(src: string): EmbedDescriptor | undefined;
|
|
283
|
+
//#endregion
|
|
284
|
+
//#region src/extensions/code-block-highlight.d.ts
|
|
285
|
+
/**
|
|
286
|
+
* Adds syntax highlighting to `codeBlock` nodes, parsing each block with the
|
|
287
|
+
* matching CodeMirror/Lezer grammar (loaded on demand from
|
|
288
|
+
* `@codemirror/language-data`). Tokens are tagged with `@lezer/highlight`
|
|
289
|
+
* `tok-*` classes; the default theme colors them per color scheme.
|
|
290
|
+
*/
|
|
291
|
+
declare function defineCodeBlockSyntaxHighlight(): Extension;
|
|
292
|
+
/** A highlighted span of code: `[from, to)` carries the `@lezer/highlight` classes. */
|
|
293
|
+
type CodeToken = readonly [from: number, to: number, classes: string];
|
|
294
|
+
/**
|
|
295
|
+
* Highlight `code` in `language` into `tok-*` token spans, the same classes the
|
|
296
|
+
* editor's decorations use. Returns synchronously when the grammar is already
|
|
297
|
+
* loaded (the common path, no render flash), and a `Promise` only when a grammar
|
|
298
|
+
* must load on demand. Returns `[]` for an empty or unsupported language.
|
|
299
|
+
*/
|
|
300
|
+
declare function getCodeTokens(code: string, language: string): CodeToken[] | Promise<CodeToken[]>;
|
|
301
|
+
//#endregion
|
|
302
|
+
//#region src/extensions/mark-chunk.d.ts
|
|
303
|
+
/**
|
|
304
|
+
* Contiguous range with a uniform inline-mark set.
|
|
305
|
+
*/
|
|
306
|
+
type MarkChunk = readonly [from: number, to: number, marks: readonly Mark[]];
|
|
307
|
+
//#endregion
|
|
308
|
+
//#region src/extensions/schema.d.ts
|
|
309
|
+
type TypedNodeBuilders = ExtractNodeBuilders<EditorExtension>;
|
|
310
|
+
type TypedMarkBuilders = ExtractMarkBuilders<EditorExtension>;
|
|
311
|
+
/** Typed mark builders bound to the shared schema. */
|
|
312
|
+
declare const getMarkBuilders: () => TypedMarkBuilders;
|
|
313
|
+
//#endregion
|
|
314
|
+
//#region src/extensions/inline-text-to-mark-chunks.d.ts
|
|
315
|
+
/**
|
|
316
|
+
* Walk a textblock's inline content and produce a list of mark chunks
|
|
317
|
+
* with positions relative to the start of `text` (i.e. zero-based).
|
|
318
|
+
* Callers shift the chunks into the document's coordinate space.
|
|
319
|
+
*/
|
|
320
|
+
declare function inlineTextToMarkChunks(/** Typed mark builders bound to the target schema. */
|
|
321
|
+
|
|
322
|
+
marks: TypedMarkBuilders, /** The raw inline text of one textblock (no block prefix). */
|
|
323
|
+
|
|
324
|
+
text: string): MarkChunk[];
|
|
325
|
+
//#endregion
|
|
241
326
|
//#region src/extensions/image-click.d.ts
|
|
242
327
|
interface ImageClickPayload {
|
|
243
328
|
/** The markdown `src`, exactly as written in ``. */
|
|
@@ -290,6 +375,12 @@ declare function defineMarkdownCopy(): PlainExtension;
|
|
|
290
375
|
*/
|
|
291
376
|
declare function defineBulletAfterHeading(): PlainExtension;
|
|
292
377
|
//#endregion
|
|
378
|
+
//#region src/extensions/wikilink-trigger.d.ts
|
|
379
|
+
/**
|
|
380
|
+
* Binds `Mod-Shift-k` to open the wikilink menu.
|
|
381
|
+
*/
|
|
382
|
+
declare function defineWikilinkTrigger(): PlainExtension;
|
|
383
|
+
//#endregion
|
|
293
384
|
//#region src/extensions/key-bindings.d.ts
|
|
294
385
|
/** Human-readable descriptions of the editor's formatting and heading shortcuts. */
|
|
295
386
|
declare const EDITOR_KEY_BINDINGS: {
|
|
@@ -337,9 +428,6 @@ interface DocToMarkdownOptions {
|
|
|
337
428
|
*/
|
|
338
429
|
declare function docToMarkdown(node: ProseMirrorNode, options?: DocToMarkdownOptions): string;
|
|
339
430
|
//#endregion
|
|
340
|
-
//#region src/extensions/schema.d.ts
|
|
341
|
-
type TypedNodeBuilders = ExtractNodeBuilders<EditorExtension>;
|
|
342
|
-
//#endregion
|
|
343
431
|
//#region src/converters/md-to-pm.d.ts
|
|
344
432
|
/** Options for {@link markdownToDoc}. */
|
|
345
433
|
interface MarkdownToDocOptions {
|
|
@@ -382,4 +470,15 @@ interface CheckRoundTripOptions {
|
|
|
382
470
|
/** Classify how `markdown` survives the editor's parse-then-serialize round trip. */
|
|
383
471
|
declare function checkRoundTrip(markdown: string, options?: CheckRoundTripOptions): RoundTripFidelity;
|
|
384
472
|
//#endregion
|
|
385
|
-
|
|
473
|
+
//#region src/extensions/node-names.d.ts
|
|
474
|
+
/**
|
|
475
|
+
* Every ProseMirror node name the editor schema knows about.
|
|
476
|
+
*/
|
|
477
|
+
declare const NODE_NAMES: readonly ["doc", "text", "paragraph", "heading", "blockquote", "list", "codeBlock", "horizontalRule", "table", "tableRow", "tableCell", "tableHeaderCell"];
|
|
478
|
+
type NodeName = (typeof NODE_NAMES)[number];
|
|
479
|
+
//#endregion
|
|
480
|
+
//#region src/extensions/mark-names.d.ts
|
|
481
|
+
declare const MARK_NAMES: readonly ["mdImageView", "mdImageSource", "mdMark", "mdEm", "mdStrong", "mdCode", "mdLinkText", "mdLinkUri", "mdDel", "mdTag", "mdWikilinkSource", "mdWikilinkView", "mdPack"];
|
|
482
|
+
type MarkName = (typeof MARK_NAMES)[number];
|
|
483
|
+
//#endregion
|
|
484
|
+
export { type CheckRoundTripOptions, type CodeBlockAttrs, type CodeToken, type DocToMarkdownOptions, EDITOR_KEY_BINDINGS, type EditorExtension, type EmbedDescriptor, type ImageClickHandler, type ImageClickPayload, type ImageOptions, type LinkClickHandler, type LinkClickPayload, type MarkChunk, type MarkMode, type MarkName, type MarkdownToDocOptions, type MdImageViewAttrs, type MdLinkTextAttrs, type MdWikilinkViewAttrs, type NodeName, type PlaceholderOptions, Priority, type RoundTripFidelity, type TypedEditor, type TypedMarkBuilders, type WikilinkClickHandler, type WikilinkClickPayload, checkRoundTrip, codeBlockLanguages, defaultResolveImageUrl, defineBulletAfterHeading, defineCodeBlockSyntaxHighlight, defineEditorExtension, defineEmbedPaste, defineHTMLPaste, defineImage, defineImageClickHandler, defineLinkClickHandler, defineMarkMode, defineMarkdownCopy, definePlaceholder, defineReadonly, defineWikilinkClickHandler, defineWikilinkTrigger, docToMarkdown, getCodeTokens, getMarkBuilders, inlineTextToMarkChunks, listenForTweetHeight, markdownToDoc, matchEmbed, withPriority };
|
package/dist/index.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import{Priority as e,Priority as t,createMarkBuilders as n,createNodeBuilders as r,defineBaseCommands as i,defineBaseKeymap as a,defineCommands as o,defineHistory as s,defineKeymap as c,defineMarkSpec as l,defineMarkView as u,defineNodeAttr as d,defineNodeSpec as f,definePlugin as p,getMarkRange as m,getMarkType as ee,getNodeType as te,isApple as ne,isAtBlockStart as re,isTextSelection as ie,toggleNode as ae,union as h,unsetBlockType as oe,withPriority as se,withPriority as g,withSkipCodeBlock as ce}from"@prosekit/core";import{defineBlockquote as le}from"@prosekit/extensions/blockquote";import{defineCodeBlock as ue,defineCodeBlockHighlight as de}from"@prosekit/extensions/code-block";import{defineDoc as fe}from"@prosekit/extensions/doc";import{defineGapCursor as pe}from"@prosekit/extensions/gap-cursor";import{defineModClickPrevention as me}from"@prosekit/extensions/mod-click-prevention";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 ye}from"@codemirror/language-data";import{classHighlighter as be}from"@lezer/highlight";import{createParser as
|
|
2
|
-
`)}function pt(e){let{selection:t}=e;if(!t.empty)return b.empty;let n=t.$head,{parent:r}=n;if(!r.isTextblock||r.type.spec.code)return b.empty;let i=m(n,ee(e.schema,`mdPack`));return i?b.create(e.doc,[_e.inline(i.from,i.to,{class:`show`})]):b.empty}function T(e,t){let n=dt(t);return n?e.flatMap(e=>e.modes.includes(n)?[e.name]:[]):[]}function E(e,t,n){for(let r of n){let n=w(e,t,r);if(n)return n}}function D(e,t,n){let r=E(e,t,n);return r&&r.to===t?r:void 0}function O(e,t,n){let r=E(e,t,n);return r&&r.from===t?r:void 0}function k(e,t){let{from:n,to:r,empty:i}=e.selection;if(i)return;let a=E(e,n,t);return a&&a.from===n&&a.to===r?a:void 0}function mt(e,t){return y.create(e.doc,t.from,t.to)}function ht(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!ie(t.selection))return!1;let i=t.selection;if(i.empty){let e=O(t,i.from,r);if(e)return n?.(t.tr.setSelection(mt(t,e))),!0;if(D(t,i.from,r)){let e=t.doc.resolve(i.from);return i.from>=e.end()?!1:(n?.(t.tr.setSelection(y.create(t.doc,i.from+1))),!0)}return!1}let a=k(t,r);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.to))),!0):!1}}function gt(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!ie(t.selection))return!1;let i=t.selection;if(i.empty){let e=D(t,i.from,r);return e?(n?.(t.tr.setSelection(mt(t,e))),!0):!1}let a=k(t,r);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.from))),!0):!1}}function _t(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=D(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!O(t,i,r)||i<=t.doc.resolve(i).start()?!1:(n?.(t.tr.delete(i-1,i)),!0)}}function vt(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=O(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!D(t,i,r)||i>=t.doc.resolve(i).end()?!1:(n?.(t.tr.delete(i,i+1)),!0)}}function yt(e,t){return new _({key:new v(`atomic-mark-selection-${t}`),props:{decorations:n=>{let r=T(e,n);if(r.length===0)return;let i=k(n,r);if(i)return b.create(n.doc,[_e.inline(i.from,i.to,{class:t})])}}})}function bt({marks:e,selectedClass:n}){return h(g(c({ArrowRight:ht(e),ArrowLeft:gt(e),Backspace:_t(e),Delete:vt(e)}),t.high),p(yt(e,n)))}const A=new Map;async function xt(e){let t=ve.matchLanguageName(ye,e,!0);if(!t){A.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),A.set(e,null)}if(A.has(e))return;if(!n){A.set(e,null);return}let r=xe({parse:e=>n.language.parser.parse(e.content),highlighter:be});A.set(e,r)}const St=e=>{let t=e.language?.trim();if(!t)return[];let n=A.get(t);return n?n(e):n===null?[]:xt(t)};function Ct(){return de({parser:St,nodeTypes:[`codeBlock`]})}function wt(){return d({type:`doc`,attr:`frontmatter`,default:null})}function Tt(){return f({name:`heading`,whitespace:`pre`})}function Et(){return d({type:`heading`,attr:`setextUnderline`,default:null,toDOM:e=>e==null?null:[`data-setext-underline`,String(e)],parseDOM:e=>{let t=e.getAttribute(`data-setext-underline`);if(t==null)return null;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:null}})}function j(e){return ce(ae({type:`heading`,attrs:{level:e}}))}const Dt=(e,t,n)=>re(e,n)?.parent.type.name===`heading`?oe()(e,t,n):!1;function Ot(){return c({"Mod-1":j(1),"Mod-2":j(2),"Mod-3":j(3),"Mod-4":j(4),"Mod-5":j(5),"Mod-6":j(6),Backspace:Dt})}function kt(){return h(we(),Tt(),Et(),Ce(),Se(),Ot())}function At(){return d({type:`horizontalRule`,attr:`marker`,default:null,toDOM:e=>e?[`data-hr-marker`,e]:null,parseDOM:e=>e.getAttribute(`data-hr-marker`)})}function jt(){return h(Te(),At())}function Mt(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function Nt(e,t){let[n,r,i]=t;return[n,r,i.map(t=>je.fromJSON(e,t))]}var M=class e extends De{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return Oe.ok(e);let t=e.content.size,n;for(let[r,i,a]of this.chunks){if(r>=i)continue;let o=Math.max(0,Math.min(r,t)),s=Math.max(o,Math.min(i,t));o>=s||e.nodesBetween(o,s,(t,r)=>{if(!t.isText)return!0;let i=Math.max(o,r),c=Math.min(s,r+t.nodeSize);if(i>=c)return!1;let l=t.marks;for(let t of l)t.isInSet(a)||(n??=new ke(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new ke(e),n.addMark(i,c,t));return!1})}return Oe.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return Pt;let t=this.chunks[0][0],n=this.chunks[0][1];for(let[,e]of this.chunks)e>n&&(n=e);let r=e.content.size,i=Math.max(0,Math.min(t,r)),a=Math.max(i,Math.min(n,r));return new Ee(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(Mt)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>Nt(t,e)))}};De.jsonID(`batchSetMark`,M);const Pt=new M([]),Ft=new Set([`com`,`br`,`net`,`jp`,`org`,`in`,`de`,`ru`,`it`,`fr`]),It=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;function Lt(e){let t=e.indexOf(`/`);return t===-1?e:e.slice(0,t)}function Rt(e){let t=e.split(`.`);if(t.length<2)return!1;let n=t[t.length-1].toLowerCase();if(!Ft.has(n)||t[t.length-2].length<3)return!1;for(let e of t)if(e.length>63||!It.test(e))return!1;return!0}function zt(e){return e===32||e===9||e===10||e===13}const Bt=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+(?:\/[^\s<]*)?/i,Vt=/[\s(*_~]/;function Ht(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45}function Ut(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===`)`&&Ut(e,t,`)`)>Ut(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 Gt={parseInline:[{name:`BareAutolink`,before:`Link`,parse(e,t,n){if(!Ht(t)||e.hasOpenLink)return-1;let r=e.slice(n-1,n);if(r!==``&&!Vt.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||!Rt(Lt(i[0].slice(0,a)))?-1:e.addElement(e.elt(`URL`,n,n+a))}}]};function Kt(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45||e===95||e>127&&/[\p{L}\p{N}]/u.test(String.fromCharCode(e))}function qt(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const Jt={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(!Kt(t))break;i||=qt(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},Yt={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 Xt(e){return e.end}const N=Ne.configure([Me,Jt,Yt,Gt]),Zt=N.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:Xt}]});function P(e){return N.parseInline(e,0)}function F(e,t,n=[]){for(let r of e)t(r)&&n.push(r),F(r.children,t,n);return n}function Qt(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const I=Qt(N);function $t(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 en(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 tn(){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 nn(){return u({name:`mdWikilinkView`,constructor:tn()})}const L=new Map([[I.Emphasis,`mdEm`],[I.StrongEmphasis,`mdStrong`],[I.InlineCode,`mdCode`],[I.Strikethrough,`mdDel`],[I.EmphasisMark,`mdMark`],[I.CodeMark,`mdMark`],[I.LinkMark,`mdMark`],[I.StrikethroughMark,`mdMark`],[I.URL,`mdLinkUri`],[I.Hashtag,`mdTag`],[I.WikilinkMark,`mdMark`]]);function rn(e,t){let n=P(t),r=[];return R(n,[],0,t.length,t,e,r),r}function an(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)||Rt(Lt(e)))return`https://${e}`}function R(e,t,n,r,i,a,o){let s=n;for(let n of e){n.from>s&&z(o,s,n.from,t);let e=n.type;if(e===I.Link)on(n,t,i,a,o);else if(e===I.Image)sn(n,t,i,a,o);else if(e===I.Wikilink)cn(n,t,i,a,o);else if(e===I.URL){let e=an(i.slice(n.from,n.to)),r=e?a.mdLinkText.create({href:e}):a.mdLinkUri.create();z(o,n.from,n.to,[...t,r])}else{let r;e===I.Emphasis?r=`italic`:e===I.StrongEmphasis?r=`bold`:e===I.InlineCode?r=`code`:e===I.Strikethrough?r=`strike`:e===I.Autolink&&(r=`autolink`);let s=r?[...t,a.mdPack.create({key:r})]:t,c=L.get(e),l=c?[...s,a[c].create()]:s;n.children.length===0?z(o,n.from,n.to,l):R(n.children,l,n.from,n.to,i,a,o)}s=n.to}s<r&&z(o,s,r,t)}function on(e,t,n,r,i){let a=-1,o=null,s=0;for(let t of e.children)t.type===I.LinkMark?(s++,s===2&&(a=t.from)):t.type===I.URL&&o===null&&(o=t);let c=o?n.slice(o.from,o.to):``,l=c?r.mdLinkText.create({href:c}):null,u=e=>a>=0&&e<a&&l!==null,d=r.mdPack.create({key:`link_${c}`}),f=[...t,d],p=e.from;for(let t of e.children){if(t.from>p){let e=u(p)?[...f,l]:f;z(i,p,t.from,e)}let e=u(t.from)?[...f,l]:f;if(t.type===I.Wikilink){cn(t,e,n,r,i),p=t.to;continue}let a=L.get(t.type),o=a?[...e,r[a].create()]:e;t.children.length===0?z(i,t.from,t.to,o):R(t.children,o,t.from,t.to,n,r,i),p=t.to}p<e.to&&z(i,p,e.to,f)}function sn(e,t,n,r,i){let a=e.children.find(e=>e.type===I.URL);if(!a){on(e,t,n,r,i);return}let o=e.children.filter(e=>e.type===I.LinkMark),s=n.slice(a.from,a.to),c=o.length>=2?n.slice(o[0].to,o[1].from):``,l=r.mdImageSource.create({src:s,alt:c}),u=r.mdImageView.create({src:s,alt:c}),d=r.mdPack.create({key:`image_${s}`}),f=e.to-1,p=e=>e>=f?[...t,d,l,u]:[...t,d,l],m=e.from;for(let t of e.children){t.from>m&&z(i,m,t.from,p(m));let e=L.get(t.type),a=e?[...p(t.from),r[e].create()]:p(t.from);t.children.length===0?z(i,t.from,t.to,a):R(t.children,a,t.from,t.to,n,r,i),m=t.to}m<e.to&&z(i,m,e.to,p(m))}function cn(e,t,n,r,i){let{target:a,display:o}=en(n.slice(e.from,e.to)),s=r.mdWikilinkSource.create({target:a}),c=r.mdWikilinkView.create({target:a,display:o}),l=e.to-1,u=e=>e>=l?[...t,s,c]:[...t,s],d=e.from;for(let t of e.children){t.from>d&&z(i,d,t.from,u(d));let e=r.mdMark.create();t.from<l&&t.to>l?(z(i,t.from,l,[...u(t.from),e]),z(i,l,t.to,[...u(l),e])):z(i,t.from,t.to,[...u(t.from),e]),d=t.to}d<e.to&&z(i,d,e.to,u(d))}function z(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&$t(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const ln=x(()=>{let e=xr().schema;if(e==null)throw Error(`Unexpected empty schema`);return e}),un=x(()=>r(ln())),dn=`meowdown_mark_builders`;function fn(e){let t=e.cached[dn];if(t)return t;let r=n(e);return e.cached[dn]=r,r}const pn=`meowdown_node_builders`;function mn(e){let t=e.cached[pn];if(t)return t;let n=r(e);return e.cached[pn]=n,n}const hn=`inline-marks-applied`,gn=new WeakMap;let _n=0,vn=0;function yn(e,t,n){let r=gn.get(e);if(r?vn++:(_n++,r=rn(fn(n),e.textContent),gn.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 bn(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 xn(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=yn(t,r+1,e.schema);return i.length>0&&n.push(...i),!1}),n}function Sn(){return new _({key:new v(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(hn))return null;let r=xn(n,bn(e,n));if(r.length===0)return null;let i=n.tr.step(new M(r));return i.setMeta(hn,!0),i.setMeta(`addToHistory`,!1),i},view(e){return e.dispatch(Cn(e.state)),{}}})}function Cn(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function wn(){return p(Sn())}function Tn(){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 En(){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 Dn(){return l({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function On(){return l({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function kn(){return l({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function An(){return l({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function jn(){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 Mn(){return l({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function Nn(){return l({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function Pn(){return l({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function Fn(){return l({name:`mdWikilinkSource`,inclusive:!1,attrs:{target:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink-source`},0],parseDOM:[{tag:`span.md-wikilink-source`}]})}function In(){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 Ln(){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 Rn(){return h(Dn(),On(),kn(),An(),jn(),Mn(),Nn(),Pn(),Fn(),In(),En(),Tn(),Ln())}function zn(e,t=0){let n=t,r=0;for(let t=0;t<e.length;t++)e.charCodeAt(t)===96?(r++,r>n&&(n=r)):r=0;return n}const B={em:{node:I.Emphasis,delim:`*`},strong:{node:I.StrongEmphasis,delim:`**`},code:{node:I.InlineCode,delim:"`"},del:{node:I.Strikethrough,delim:`~~`}},Bn=new Set([I.EmphasisMark,I.CodeMark,I.LinkMark,I.StrikethroughMark]);function V(e){return[e.children[0],e.children.at(-1)]}function Vn(e){let{type:t,children:n}=e;if(t===I.Emphasis||t===I.StrongEmphasis||t===I.Strikethrough)return[n[0].to,n.at(-1).from];if(t===I.Link||t===I.Image){let e=n.find((e,t)=>t>0&&e.type===I.LinkMark);return e?[n[0].to,e.from]:null}return null}function H(e,t,n){for(let r of e){if(r.to<=t||r.from>=n||t<=r.from&&r.to<=n)continue;let i=Vn(r);return i&&i[0]<=t&&n<=i[1]?H(r.children,t,n):H(e,Math.min(t,r.from),Math.max(n,r.to))}return[t,n]}function 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 U=e=>e===` `||e===` `;function Un(e,t,n){for(;t<n&&U(e[t]);)t++;for(;n>t&&U(e[n-1]);)n--;return[t,n]}function Wn(e,t,n,r){let i=F(P(e),e=>e.type===r.node||Bn.has(e.type));for(let r=t;r<n;r++)if(!U(e[r])&&i.every(e=>!(e.from<=r&&r<e.to)))return!1;return!0}function Gn(e,t,n,r,i){let a=P(e),o=F(a,e=>e.type===r.node);return i?Jn(e,o,t,n):Kn(e,a,o,t,n,r)}function Kn(e,t,n,r,i,a){for(let e=0;e!==i-r;){e=i-r,[r,i]=H(t,r,i);for(let e of n)e.to===r&&(r=e.from),e.from===i&&(i=e.to)}let o=[];for(let e of n)if(r<=e.from&&e.to<=i){let[t,n]=V(e);o.push({from:t.from,to:t.to,insert:``}),o.push({from:n.from,to:n.to,insert:``})}let[s,c]=qn(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function qn(e,t,n,r,i){if(i.node!==I.InlineCode)return[i.delim,i.delim];let a=e.slice(t,n);for(let e of[...r].sort((e,t)=>t.from-e.from))a=a.slice(0,e.from-t)+a.slice(e.to-t);let o="`".repeat(zn(a)+1),s=a.startsWith("`")||a.endsWith("`")?` `:``;return[o+s,s+o]}function Jn(e,t,n,r){let i=[];for(let a of t){if(a.to<=n||a.from>=r)continue;let[t,o]=V(a),s=Math.max(n,t.to),c=Math.min(r,o.from);for(s>=c&&([s,c]=[t.to,o.from]),[s,c]=Hn(a.children.slice(1,-1),s,c);s>t.to&&U(e[s-1]);)s--;for(;c<o.from&&U(e[c]);)c++;s>t.to?i.push({from:s,to:s,insert:e.slice(o.from,o.to)}):i.push({from:t.from,to:t.to,insert:``}),c<o.from?i.push({from:c,to:c,insert:e.slice(t.from,t.to)}):i.push({from:o.from,to:o.to,insert:``})}return i}function Yn(e,t,n){let{delim:r}=n,i=r.length;if(e.slice(t-i,t)===r&&e.startsWith(r,t)&&e[t-i-1]!==r[0]&&e[t+i]!==r[0])return{kind:`unwrap`,from:t-i,to:t+i};let a=P(e),o=F(a,e=>e.type===n.node).findLast(e=>e.from<=t&&t<=e.to);if(o){let[e,n]=V(o);return{kind:`move`,pos:t===o.from?e.to:t===o.to?n.from:o.to}}return Xn(a,t)||e[t-1]===r[0]||e[t]===r[0]?null:{kind:`insert`,pos:t}}function Xn(e,t){for(let n of e)if(n.from<t&&t<n.to){let e=Vn(n);return!e||t<e[0]||t>e[1]?!0:Xn(n.children,t)}return!1}function W(e){return(t,n)=>{if(t.selection.empty)return Zn(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]=Un(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:Wn(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>Gn(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 Zn(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=Yn(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 Qn(){return o({toggleEm:()=>W(B.em),toggleStrong:()=>W(B.strong),toggleCode:()=>W(B.code),toggleDel:()=>W(B.del)})}function $n(){return c({"Mod-b":W(B.strong),"Mod-i":W(B.em),"Mod-e":W(B.code),"Mod-Shift-x":W(B.del)})}function er(){return h(Qn(),$n())}function tr(){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 nr(){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 rr(e){return e===2||e===3||e===4}function ir(){return d({type:`list`,attr:`markerGap`,default:1,splittable:!0,toDOM:e=>rr(e)?[`data-list-marker-gap`,String(e)]:null,parseDOM:e=>{let t=Number.parseInt(e.getAttribute(`data-list-marker-gap`)??``,10);return rr(t)?t:1}})}const ar=[C(/^\s?([*-])\s$/,{kind:`bullet`,collapsed:!1}),C(/^\s?(\d+)\.\s$/,({match:e})=>{let t=e[1],n=t?parseInt(t,10):void 0;return{kind:`ordered`,collapsed:!1,order:n&&n>=2&&Number.isSafeInteger(n)?n:null}}),C(/^\s?\[([\sXx]?)]\s$/,({match:e})=>({kind:`task`,checked:[`x`,`X`].includes(e[1]),collapsed:!1})),C(/^\s?\+\s$/,{kind:`task`,marker:`+`,checked:!1,collapsed:!1})];function or(){return h(ar.map(Pe))}function sr(){return S({kind:`task`,marker:`+`})}function cr(){return S({kind:`task`,marker:null})}function lr(){return o({wrapInCircleTask:sr,wrapInSquareTask:cr})}function ur(e){let{$from:t}=e.selection;for(let e=t.depth;e>0;e--){let n=t.node(e);if(n.type.name===`list`)return n.attrs}return null}function dr(){return(e,t,n)=>{let r=ur(e),i=r?.kind===`task`&&r.marker!==`+`,a;return a=i&&!r?.checked?{kind:`task`,marker:r?.marker??null,checked:!0}:i&&r?.checked?{kind:`bullet`,marker:null,checked:!1}:{kind:`task`,marker:null,checked:!1},S(a)(e,t,n)}}function fr(){return(e,t,n)=>{let r=ur(e),i=r?.kind===`task`&&r.marker===`+`,a;return a=i&&!r?.checked?{kind:`task`,marker:`+`,checked:!0}:i&&r?.checked?{kind:`bullet`,marker:null,checked:!1}:{kind:`task`,marker:`+`,checked:!1},S(a)(e,t,n)}}function pr(){return c({"Mod-Enter":dr(),"Mod-Shift-Enter":fr()})}function mr(){return h(Be(),Re(),Le(),Fe(),ze(),Ie(),or(),pr(),tr(),nr(),ir(),lr())}function hr(){return f({name:`paragraph`,content:`inline*`,group:`block`,whitespace:`pre`,parseDOM:[{tag:`p`}],toDOM(){return[`p`,0]}})}function gr(){return h(g(hr(),t.highest),Ve(),He())}const _r=(e,t)=>{let{selection:n}=e;return!Ze(n)||!n.isColSelection()||!n.isRowSelection()?!1:Xe(e,t)};function vr(){return g(c({Backspace:_r,Delete:_r}),t.high)}function yr(){return h(Ye(),Je(),Ue(),qe(),Ke({allowTableNodeSelection:!0}),We(),Ge(),vr())}function br(){return h(gr(),fe(),wt(),he(),le(),mr(),kt(),yr(),ue(),jt(),Rn(),Ct(),wn(),er(),nn(),bt({marks:[{name:`mdImageSource`,modes:[`hide`]},{name:`mdWikilinkSource`,modes:[`hide`,`focus`,`show`]}],selectedClass:`md-atomic-selected`}),a(),i(),s(),pe(),ge(),me())}function xr(){return br()}function Sr(e){let t;return p(new _({key:e.key,props:{handleDOMEvents:{mousedown:e=>{let{from:n,to:r,empty:i}=e.state.selection;return t={from:n,to:r,empty:i},!1}},handleClick:(n,r,i)=>{if(!i.target?.closest?.(e.selector))return!1;let a=e.findHitAt(n.state,r);return!a||!(ne?i.metaKey:i.ctrlKey)&&t?.empty&&t.from>=a.from&&t.to<=a.to?!1:(e.preventDefault&&i.preventDefault(),e.onClick(a.payload,i),!0)}}}))}const Cr=new v(`meowdown-wikilink-click`);function wr(e,t){let n=w(e,t,`mdWikilinkSource`);if(!n)return;let{target:r}=n.mark.attrs;return{from:n.from,to:n.to,target:r}}function Tr(e){return Sr({key:Cr,selector:`.md-wikilink-label, .md-wikilink-source`,preventDefault:!1,findHitAt:(e,t)=>{let n=wr(e,t);return n?{from:n.from,to:n.to,payload:n.target}:void 0},onClick:(t,n)=>e({target:t,event:n})})}const Er=new v(`meowdown-link-click`);function Dr(e,t){let n=w(e,t,`mdLinkText`);if(n)return{from:n.from,to:n.to,href:n.mark.attrs.href}}function Or(e){return Sr({key:Er,selector:`.md-link`,preventDefault:!0,findHitAt:(e,t)=>{let n=Dr(e,t);return n?{from:n.from,to:n.to,payload:n.href}:void 0},onClick:(t,n)=>e({href:t,event:n})})}function kr(){return typeof window>`u`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}const Ar=/^(?:www\.|mobile\.)?(?:twitter\.com|x\.com)$/i,jr=/\/status(?:es)?\/(\d+)/;function Mr(e){let t;try{t=new URL(e)}catch{return}if(Ar.test(t.hostname))return jr.exec(t.pathname)?.[1]}const Nr=e=>{let t=Mr(e);if(t)return{key:`tweet:${t}`,render:()=>{let e=kr()?`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`),Pr(n),n}}};function Pr(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 Fr=/^(?:www\.|m\.)?(?:youtube\.com|youtube-nocookie\.com)$/i,Ir=/^(?:www\.)?youtu\.be$/i,Lr=/^[\w-]{11}$/;function Rr(e){let t;try{t=new URL(e)}catch{return}let n=null;if(Ir.test(t.hostname))n=t.pathname.slice(1);else if(Fr.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||!Lr.test(n))return;let r=t.searchParams.get(`start`)??t.searchParams.get(`t`),i=r?zr(r):void 0;return{videoId:n,startSeconds:i}}function zr(e){if(/^\d+$/.test(e))return Number(e);let t=/^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/.exec(e);if(!(!t||!t[1]&&!t[2]&&!t[3]))return Number(t[1]??0)*3600+Number(t[2]??0)*60+Number(t[3]??0)}const Br=[e=>{let t=Rr(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}}},Nr];function Vr(e){for(let t of Br){let n=t(e);if(n)return n}}function Hr(e){return/^https?:\/\//i.test(e)?e:void 0}function Ur(e,t,n){let r=Vr(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??Hr)(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 Wr(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=Ur(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 Kr=e=>{console.error(`[meowdown] failed to save pasted image:`,e)};async function qr(e,t,n,r=Kr,i){let a=i;for(let i of t){let t;try{t=await n(i)}catch(e){r(e,i);continue}if(!t||e.isDestroyed)continue;let o=``,s=a==null?e.state.tr.insertText(o):e.state.tr.insertText(o,a);e.dispatch(s),a!=null&&(a+=o.length)}}function Jr(e){return new _({key:new v(`image-input`),props:{handlePaste:(t,n)=>{let r=Gr(n.clipboardData),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(qr(t,r,i,a),!0)},handleDrop:(t,n)=>{let r=Gr(n.dataTransfer),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(qr(t,r,i,a,t.posAtCoords({left:n.clientX,top:n.clientY})?.pos),!0)}}})}function Yr(e={}){return h(u({name:`mdImageView`,constructor:Wr(e)}),g(p(Jr(e)),t.high))}const Xr=new v(`meowdown-image-click`);function Zr(e,t){let n=w(e,t,`mdImageSource`);if(!n)return;let{src:r,alt:i}=n.mark.attrs;return{from:n.from,to:n.to,src:r,alt:i}}function Qr(e){return p(new _({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=Zr(t.state,t.posAtDOM(a,0));return o?(e({src:o.src,alt:o.alt,event:r}),!0):!1}}}))}const $r=new v(`meowdown-embed-paste`);function ei(e){let t=e.trim();if(!(!t||/\s/.test(t)))return Vr(t)?t:void 0}function ti(e,t){return e.clipboardData?.getData(`text/plain`)||t.content.textBetween(0,t.content.size,`
|
|
3
|
-
`)}function
|
|
4
|
-
`,t-1)+1,r=0;for(let i=n;i<t;i++)r+=e.charCodeAt(i)===9?4-r%4:1;return r}function
|
|
1
|
+
import{Priority as e,Priority as t,createMarkBuilders as n,createNodeBuilders as r,defineBaseCommands as i,defineBaseKeymap as a,defineCommands as o,defineHistory as s,defineKeymap as c,defineMarkSpec as l,defineMarkView as u,defineNodeAttr as d,defineNodeSpec as f,definePlugin as p,getMarkRange as m,getMarkType as ee,getNodeType as te,isApple as ne,isAtBlockStart as re,isTextSelection as ie,toggleNode as ae,union as h,unsetBlockType as oe,withPriority as se,withPriority as g,withSkipCodeBlock as ce}from"@prosekit/core";import{defineBlockquote as le}from"@prosekit/extensions/blockquote";import{defineCodeBlock as ue,defineCodeBlockHighlight as de}from"@prosekit/extensions/code-block";import{defineDoc as fe}from"@prosekit/extensions/doc";import{defineGapCursor as pe}from"@prosekit/extensions/gap-cursor";import{defineModClickPrevention as me}from"@prosekit/extensions/mod-click-prevention";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 ye}from"@codemirror/language-data";import{classHighlighter as be,highlightTree as xe}from"@lezer/highlight";import{createParser as Se}from"prosemirror-highlight/lezer";import{defineHeadingCommands as Ce,defineHeadingInputRule as we,defineHeadingSpec as Te}from"@prosekit/extensions/heading";import{defineHorizontalRule as Ee}from"@prosekit/extensions/horizontal-rule";import{ReplaceStep as De,Step as Oe,StepResult as ke,Transform as Ae}from"@prosekit/pm/transform";import{DOMSerializer as je,Mark as Me}from"@prosekit/pm/model";import{GFM as Ne,parser as Pe}from"@lezer/markdown";import{once as x}from"@ocavue/utils";import{defineInputRule as Fe}from"@prosekit/extensions/input-rule";import{defineListCommands as Ie,defineListDropIndicator as Le,defineListKeymap as Re,defineListPlugins as ze,defineListSerializer as Be,defineListSpec as Ve,wrapInList as S}from"@prosekit/extensions/list";import{wrappingListInputRule as C}from"prosemirror-flat-list";import{defineParagraphCommands as He,defineParagraphKeymap as Ue}from"@prosekit/extensions/paragraph";import{defineTableCellSpec as We,defineTableCommands as Ge,defineTableDropIndicator as Ke,defineTableEditingPlugin as qe,defineTableHeaderCellSpec as Je,defineTableRowSpec as Ye,defineTableSpec as Xe,deleteTable as Ze,isCellSelection as Qe}from"@prosekit/extensions/table";import{closeHistory as $e}from"@prosekit/pm/history";import et from"rehype-parse";import tt from"rehype-remark";import nt from"remark-gfm";import rt from"remark-stringify";import{unified as it}from"unified";import{triggerAutocomplete as at}from"@prosekit/extensions/autocomplete";import{definePlaceholder as ot}from"@prosekit/extensions/placeholder";import{defineReadonly as st}from"@prosekit/extensions/readonly";function w(e,t,n){let r=e.doc.content.size;if(t<0||t>r)return;let i=e.doc.resolve(t);if(!(!i.parent.isTextblock||i.parent.type.spec.code))return m(i,n)}const ct=new Set([`mdMark`,`mdLinkUri`]),lt=new Set([`mdImageSource`,`mdWikilinkSource`]),ut=new v(`mark-mode`);function dt(e){return new _({key:ut,state:{init:()=>e,apply:(e,t)=>t},props:{attributes:{"data-mark-mode":e},decorations:e===`focus`?e=>ht(e):void 0,clipboardTextSerializer:e===`show`?void 0:mt}})}function ft(e){return p(dt(e))}function pt(e){return ut.getState(e)}function mt(e){let t=[];return e.content.forEach(e=>{let n=[];e.descendants(e=>!e.isText||!e.text?!0:(!e.marks.some(e=>lt.has(e.type.name))&&e.marks.some(e=>ct.has(e.type.name))||n.push(e.text),!1)),t.push(n.join(``))}),t.join(`
|
|
2
|
+
`)}function ht(e){let{selection:t}=e;if(!t.empty)return b.empty;let n=t.$head,{parent:r}=n;if(!r.isTextblock||r.type.spec.code)return b.empty;let i=m(n,ee(e.schema,`mdPack`));return i?b.create(e.doc,[_e.inline(i.from,i.to,{class:`show`})]):b.empty}function T(e,t){let n=pt(t);return n?e.flatMap(e=>e.modes.includes(n)?[e.name]:[]):[]}function E(e,t,n){for(let r of n){let n=w(e,t,r);if(n)return n}}function D(e,t,n){let r=E(e,t,n);return r&&r.to===t?r:void 0}function O(e,t,n){let r=E(e,t,n);return r&&r.from===t?r:void 0}function k(e,t){let{from:n,to:r,empty:i}=e.selection;if(i)return;let a=E(e,n,t);return a&&a.from===n&&a.to===r?a:void 0}function gt(e,t){return y.create(e.doc,t.from,t.to)}function _t(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!ie(t.selection))return!1;let i=t.selection;if(i.empty){let e=O(t,i.from,r);if(e)return n?.(t.tr.setSelection(gt(t,e))),!0;if(D(t,i.from,r)){let e=t.doc.resolve(i.from);return i.from>=e.end()?!1:(n?.(t.tr.setSelection(y.create(t.doc,i.from+1))),!0)}return!1}let a=k(t,r);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.to))),!0):!1}}function vt(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!ie(t.selection))return!1;let i=t.selection;if(i.empty){let e=D(t,i.from,r);return e?(n?.(t.tr.setSelection(gt(t,e))),!0):!1}let a=k(t,r);return a?(n?.(t.tr.setSelection(y.create(t.doc,a.from))),!0):!1}}function yt(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=D(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!O(t,i,r)||i<=t.doc.resolve(i).start()?!1:(n?.(t.tr.delete(i-1,i)),!0)}}function bt(e){return(t,n)=>{let r=T(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=O(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!D(t,i,r)||i>=t.doc.resolve(i).end()?!1:(n?.(t.tr.delete(i,i+1)),!0)}}function xt(e,t){return new _({key:new v(`atomic-mark-selection-${t}`),props:{decorations:n=>{let r=T(e,n);if(r.length===0)return;let i=k(n,r);if(i)return b.create(n.doc,[_e.inline(i.from,i.to,{class:t})])}}})}function St({marks:e,selectedClass:n}){return h(g(c({ArrowRight:_t(e),ArrowLeft:vt(e),Backspace:yt(e),Delete:bt(e)}),t.high),p(xt(e,n)))}const A=new Map,Ct=new Map;async function wt(e){let t=A.get(e);if(t!==void 0)return t;let n=ve.matchLanguageName(ye,e,!0);if(!n)return A.set(e,null),null;let r=n.support;if(!r)try{r=await n.load()}catch(t){return console.error(`[meowdown] Failed to load language "${e}":`,t),A.set(e,null),null}return A.set(e,r),r}function Tt(e,t){let n=Ct.get(e);if(n)return n;let r=Se({parse:e=>t.language.parser.parse(e.content),highlighter:be});return Ct.set(e,r),r}const Et=e=>{let t=e.language?.trim();if(!t)return[];let n=A.get(t);return n===null?[]:n?Tt(t,n)(e):wt(t).then(()=>void 0)};function Dt(){return de({parser:Et,nodeTypes:[`codeBlock`]})}function Ot(e,t){let n=t.language.parser.parse(e),r=[];return xe(n,be,(e,t,n)=>{r.push([e,t,n])}),r}function kt(e,t){let n=t.trim();if(!n)return[];let r=A.get(n);return r===null?[]:r?Ot(e,r):wt(n).then(t=>t?Ot(e,t):[])}function At(){return d({type:`doc`,attr:`frontmatter`,default:null})}function jt(){return f({name:`heading`,whitespace:`pre`})}function Mt(){return d({type:`heading`,attr:`setextUnderline`,default:null,toDOM:e=>e==null?null:[`data-setext-underline`,String(e)],parseDOM:e=>{let t=e.getAttribute(`data-setext-underline`);if(t==null)return null;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:null}})}function j(e){return ce(ae({type:`heading`,attrs:{level:e}}))}const Nt=(e,t,n)=>re(e,n)?.parent.type.name===`heading`?oe()(e,t,n):!1;function Pt(){return c({"Mod-1":j(1),"Mod-2":j(2),"Mod-3":j(3),"Mod-4":j(4),"Mod-5":j(5),"Mod-6":j(6),Backspace:Nt})}function Ft(){return h(Te(),jt(),Mt(),we(),Ce(),Pt())}function It(){return d({type:`horizontalRule`,attr:`marker`,default:null,toDOM:e=>e?[`data-hr-marker`,e]:null,parseDOM:e=>e.getAttribute(`data-hr-marker`)})}function Lt(){return h(Ee(),It())}function Rt(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function zt(e,t){let[n,r,i]=t;return[n,r,i.map(t=>Me.fromJSON(e,t))]}var M=class e extends Oe{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return ke.ok(e);let t=e.content.size,n;for(let[r,i,a]of this.chunks){if(r>=i)continue;let o=Math.max(0,Math.min(r,t)),s=Math.max(o,Math.min(i,t));o>=s||e.nodesBetween(o,s,(t,r)=>{if(!t.isText)return!0;let i=Math.max(o,r),c=Math.min(s,r+t.nodeSize);if(i>=c)return!1;let l=t.marks;for(let t of l)t.isInSet(a)||(n??=new Ae(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new Ae(e),n.addMark(i,c,t));return!1})}return ke.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return Bt;let t=this.chunks[0][0],n=this.chunks[0][1];for(let[,e]of this.chunks)e>n&&(n=e);let r=e.content.size,i=Math.max(0,Math.min(t,r)),a=Math.max(i,Math.min(n,r));return new De(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(Rt)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>zt(t,e)))}};Oe.jsonID(`batchSetMark`,M);const Bt=new M([]),Vt=new Set([`com`,`br`,`net`,`jp`,`org`,`in`,`de`,`ru`,`it`,`fr`]),Ht=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;function Ut(e){let t=e.indexOf(`/`);return t===-1?e:e.slice(0,t)}function Wt(e){let t=e.split(`.`);if(t.length<2)return!1;let n=t[t.length-1].toLowerCase();if(!Vt.has(n)||t[t.length-2].length<3)return!1;for(let e of t)if(e.length>63||!Ht.test(e))return!1;return!0}function Gt(e){return e===32||e===9||e===10||e===13}const Kt=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+(?:\/[^\s<]*)?/i,qt=/[\s(*_~]/;function Jt(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45}function Yt(e,t,n){let r=0;for(let i=0;i<t;i++)e[i]===n&&r++;return r}function Xt(e){let t=e.length;for(;;){let n=e[t-1];if(/[?!.,:*_~]/.test(n)||n===`)`&&Yt(e,t,`)`)>Yt(e,t,`(`))t--;else if(n===`;`){let n=/&(?:#\d+|#x[a-f\d]+|\w+);$/.exec(e.slice(0,t));if(!n)break;t=n.index}else break}return t}const Zt={parseInline:[{name:`BareAutolink`,before:`Link`,parse(e,t,n){if(!Jt(t)||e.hasOpenLink)return-1;let r=e.slice(n-1,n);if(r!==``&&!qt.test(r))return-1;let i=Kt.exec(e.slice(n,e.end));if(!i)return-1;let a=Xt(i[0]);return a===0||!Wt(Ut(i[0].slice(0,a)))?-1:e.addElement(e.elt(`URL`,n,n+a))}}]};function Qt(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45||e===95||e>127&&/[\p{L}\p{N}]/u.test(String.fromCharCode(e))}function $t(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const en={defineNodes:[{name:`Hashtag`}],parseInline:[{name:`Hashtag`,parse(e,t,n){if(t!==35||!/\s|^$/.test(e.slice(n-1,n)))return-1;let r=n+1,i=!1;for(;r<e.end;){let t=e.char(r);if(!Qt(t))break;i||=$t(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},tn={defineNodes:[{name:`Wikilink`},{name:`WikilinkMark`}],parseInline:[{name:`Wikilink`,before:`Link`,parse(e,t,n){if(t!==91||e.char(n+1)!==91)return-1;let r=!1;for(let t=n+2;t<e.end-1;t++){let i=e.char(t);if(i===93){if(e.char(t+1)!==93||!r)return-1;let i=t+2;return e.addElement(e.elt(`Wikilink`,n,i,[e.elt(`WikilinkMark`,n,n+2),e.elt(`WikilinkMark`,t,i)]))}if(i===91||i===10)return-1;i!==32&&i!==9&&(r=!0)}return-1}}]};function nn(e){return e.end}const N=Pe.configure([Ne,en,tn,Zt]),rn=N.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:nn}]});function P(e){return N.parseInline(e,0)}function F(e,t,n=[]){for(let r of e)t(r)&&n.push(r),F(r.children,t,n);return n}function an(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const I=an(N);function on(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!e[n].eq(t[n]))return!1;return!0}function sn(e){let t=e.replace(/^\[\[/,``).replace(/\]\]$/,``),n=t.indexOf(`|`);return n<0?{target:t.trim(),display:``}:{target:t.slice(0,n).trim(),display:t.slice(n+1).trim()}}function cn(){return e=>{let t=e.attrs,n=document.createElement(`span`);n.className=`md-wikilink-view`;let r=document.createElement(`span`);r.className=`md-wikilink-label`,r.contentEditable=`false`,r.dataset.testid=`wikilink`,r.textContent=t.display||t.target,n.appendChild(r);let i=document.createElement(`span`);return i.className=`md-wikilink-view-content`,n.appendChild(i),{dom:n,contentDOM:i,ignoreMutation:e=>!i.contains(e.target)}}}function ln(){return u({name:`mdWikilinkView`,constructor:cn()})}const L=new Map([[I.Emphasis,`mdEm`],[I.StrongEmphasis,`mdStrong`],[I.InlineCode,`mdCode`],[I.Strikethrough,`mdDel`],[I.EmphasisMark,`mdMark`],[I.CodeMark,`mdMark`],[I.LinkMark,`mdMark`],[I.StrikethroughMark,`mdMark`],[I.URL,`mdLinkUri`],[I.Hashtag,`mdTag`],[I.WikilinkMark,`mdMark`]]);function un(e,t){let n=P(t),r=[];return R(n,[],0,t.length,t,e,r),r}function dn(e){if(/^[a-z][a-z0-9+.-]*:/i.test(e))return e;if(/^[^\s@]+@[^\s@]+$/.test(e))return`mailto:${e}`;if(/^www\./i.test(e)||Wt(Ut(e)))return`https://${e}`}function R(e,t,n,r,i,a,o){let s=n;for(let n of e){n.from>s&&z(o,s,n.from,t);let e=n.type;if(e===I.Link)fn(n,t,i,a,o);else if(e===I.Image)pn(n,t,i,a,o);else if(e===I.Wikilink)mn(n,t,i,a,o);else if(e===I.URL){let e=dn(i.slice(n.from,n.to)),r=e?a.mdLinkText.create({href:e}):a.mdLinkUri.create();z(o,n.from,n.to,[...t,r])}else{let r;e===I.Emphasis?r=`italic`:e===I.StrongEmphasis?r=`bold`:e===I.InlineCode?r=`code`:e===I.Strikethrough?r=`strike`:e===I.Autolink&&(r=`autolink`);let s=r?[...t,a.mdPack.create({key:r})]:t,c=L.get(e),l=c?[...s,a[c].create()]:s;n.children.length===0?z(o,n.from,n.to,l):R(n.children,l,n.from,n.to,i,a,o)}s=n.to}s<r&&z(o,s,r,t)}function fn(e,t,n,r,i){let a=-1,o=null,s=0;for(let t of e.children)t.type===I.LinkMark?(s++,s===2&&(a=t.from)):t.type===I.URL&&o===null&&(o=t);let c=o?n.slice(o.from,o.to):``,l=c?r.mdLinkText.create({href:c}):null,u=e=>a>=0&&e<a&&l!==null,d=r.mdPack.create({key:`link_${c}`}),f=[...t,d],p=e.from;for(let t of e.children){if(t.from>p){let e=u(p)?[...f,l]:f;z(i,p,t.from,e)}let e=u(t.from)?[...f,l]:f;if(t.type===I.Wikilink){mn(t,e,n,r,i),p=t.to;continue}let a=L.get(t.type),o=a?[...e,r[a].create()]:e;t.children.length===0?z(i,t.from,t.to,o):R(t.children,o,t.from,t.to,n,r,i),p=t.to}p<e.to&&z(i,p,e.to,f)}function pn(e,t,n,r,i){let a=e.children.find(e=>e.type===I.URL);if(!a){fn(e,t,n,r,i);return}let o=e.children.filter(e=>e.type===I.LinkMark),s=n.slice(a.from,a.to),c=o.length>=2?n.slice(o[0].to,o[1].from):``,l=r.mdImageSource.create({src:s,alt:c}),u=r.mdImageView.create({src:s,alt:c}),d=r.mdPack.create({key:`image_${s}`}),f=e.to-1,p=e=>e>=f?[...t,d,l,u]:[...t,d,l],m=e.from;for(let t of e.children){t.from>m&&z(i,m,t.from,p(m));let e=L.get(t.type),a=e?[...p(t.from),r[e].create()]:p(t.from);t.children.length===0?z(i,t.from,t.to,a):R(t.children,a,t.from,t.to,n,r,i),m=t.to}m<e.to&&z(i,m,e.to,p(m))}function mn(e,t,n,r,i){let{target:a,display:o}=sn(n.slice(e.from,e.to)),s=r.mdWikilinkSource.create({target:a}),c=r.mdWikilinkView.create({target:a,display:o}),l=e.to-1,u=e=>e>=l?[...t,s,c]:[...t,s],d=e.from;for(let t of e.children){t.from>d&&z(i,d,t.from,u(d));let e=r.mdMark.create();t.from<l&&t.to>l?(z(i,t.from,l,[...u(t.from),e]),z(i,l,t.to,[...u(l),e])):z(i,t.from,t.to,[...u(t.from),e]),d=t.to}d<e.to&&z(i,d,e.to,u(d))}function z(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&on(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const hn=x(()=>{let e=Or().schema;if(e==null)throw Error(`Unexpected empty schema`);return e}),gn=x(()=>r(hn())),_n=x(()=>n(hn())),vn=`meowdown_mark_builders`;function yn(e){let t=e.cached[vn];if(t)return t;let r=n(e);return e.cached[vn]=r,r}const bn=`meowdown_node_builders`;function xn(e){let t=e.cached[bn];if(t)return t;let n=r(e);return e.cached[bn]=n,n}const Sn=`inline-marks-applied`,Cn=new WeakMap;let wn=0,Tn=0;function En(e,t,n){let r=Cn.get(e);if(r?Tn++:(wn++,r=un(yn(n),e.textContent),Cn.set(e,r)),t===0)return r;let i=[];for(let[e,n,a]of r)i.push([e+t,n+t,a]);return i}function Dn(e,t){let n=1/0,r=-1/0;for(let t of e)for(let e of t.mapping.maps)e.forEach((e,t,i,a)=>{i<n&&(n=i),a>r&&(r=a)});let i=t.doc.content.size;return n>r?{from:0,to:i}:{from:Math.max(0,n),to:Math.min(i,r)}}function On(e,t){let n=[];return e.doc.nodesBetween(t.from,t.to,(t,r)=>{if(t.type.spec.code)return!1;if(!t.isTextblock)return!0;if(t.childCount===0)return!1;let i=En(t,r+1,e.schema);return i.length>0&&n.push(...i),!1}),n}function kn(){return new _({key:new v(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(Sn))return null;let r=On(n,Dn(e,n));if(r.length===0)return null;let i=n.tr.step(new M(r));return i.setMeta(Sn,!0),i.setMeta(`addToHistory`,!1),i},view(e){return e.dispatch(An(e.state)),{}}})}function An(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function jn(){return p(kn())}function Mn(){return l({name:`mdImageView`,inclusive:!1,attrs:{src:{default:``},alt:{default:``}},toDOM:()=>[`span`,{class:`md-image-anchor`},0],parseDOM:[{tag:`span.md-image-anchor`}]})}function Nn(){return l({name:`mdImageSource`,inclusive:!1,attrs:{src:{default:``},alt:{default:``}},toDOM:()=>[`span`,{class:`md-image-source`},0],parseDOM:[{tag:`span.md-image-source`}]})}function Pn(){return l({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function Fn(){return l({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function In(){return l({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function Ln(){return l({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function Rn(){return l({name:`mdLinkText`,inclusive:!1,attrs:{href:{default:``}},toDOM:e=>[`a`,{class:`md-link`,href:e.attrs.href},0],parseDOM:[{tag:`a`,getAttrs:e=>({href:e.getAttribute(`href`)??``})}]})}function zn(){return l({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function Bn(){return l({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function Vn(){return l({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function Hn(){return l({name:`mdWikilinkSource`,inclusive:!1,attrs:{target:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink-source`},0],parseDOM:[{tag:`span.md-wikilink-source`}]})}function Un(){return l({name:`mdWikilinkView`,inclusive:!1,attrs:{target:{default:``},display:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink-anchor`},0],parseDOM:[{tag:`span.md-wikilink-anchor`}]})}function Wn(){return l({name:`mdPack`,excludes:``,inclusive:!1,attrs:{key:{default:``}},toDOM:e=>[`span`,{class:`md-pack`,"data-key":e.attrs.key},0],parseDOM:[{tag:`span.md-pack`}]})}function Gn(){return h(Pn(),Fn(),In(),Ln(),Rn(),zn(),Bn(),Vn(),Hn(),Un(),Nn(),Mn(),Wn())}function Kn(e,t=0){let n=t,r=0;for(let t=0;t<e.length;t++)e.charCodeAt(t)===96?(r++,r>n&&(n=r)):r=0;return n}const B={em:{node:I.Emphasis,delim:`*`},strong:{node:I.StrongEmphasis,delim:`**`},code:{node:I.InlineCode,delim:"`"},del:{node:I.Strikethrough,delim:`~~`}},qn=new Set([I.EmphasisMark,I.CodeMark,I.LinkMark,I.StrikethroughMark]);function V(e){return[e.children[0],e.children.at(-1)]}function Jn(e){let{type:t,children:n}=e;if(t===I.Emphasis||t===I.StrongEmphasis||t===I.Strikethrough)return[n[0].to,n.at(-1).from];if(t===I.Link||t===I.Image){let e=n.find((e,t)=>t>0&&e.type===I.LinkMark);return e?[n[0].to,e.from]:null}return null}function H(e,t,n){for(let r of e){if(r.to<=t||r.from>=n||t<=r.from&&r.to<=n)continue;let i=Jn(r);return i&&i[0]<=t&&n<=i[1]?H(r.children,t,n):H(e,Math.min(t,r.from),Math.max(n,r.to))}return[t,n]}function Yn(e,t,n){for(let r of e)if(!(r.to<=t||r.from>=n)&&(t>r.from||r.to>n))return Yn(e,Math.min(t,r.from),Math.max(n,r.to));return[t,n]}const U=e=>e===` `||e===` `;function Xn(e,t,n){for(;t<n&&U(e[t]);)t++;for(;n>t&&U(e[n-1]);)n--;return[t,n]}function Zn(e,t,n,r){let i=F(P(e),e=>e.type===r.node||qn.has(e.type));for(let r=t;r<n;r++)if(!U(e[r])&&i.every(e=>!(e.from<=r&&r<e.to)))return!1;return!0}function Qn(e,t,n,r,i){let a=P(e),o=F(a,e=>e.type===r.node);return i?tr(e,o,t,n):$n(e,a,o,t,n,r)}function $n(e,t,n,r,i,a){for(let e=0;e!==i-r;){e=i-r,[r,i]=H(t,r,i);for(let e of n)e.to===r&&(r=e.from),e.from===i&&(i=e.to)}let o=[];for(let e of n)if(r<=e.from&&e.to<=i){let[t,n]=V(e);o.push({from:t.from,to:t.to,insert:``}),o.push({from:n.from,to:n.to,insert:``})}let[s,c]=er(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function er(e,t,n,r,i){if(i.node!==I.InlineCode)return[i.delim,i.delim];let a=e.slice(t,n);for(let e of[...r].sort((e,t)=>t.from-e.from))a=a.slice(0,e.from-t)+a.slice(e.to-t);let o="`".repeat(Kn(a)+1),s=a.startsWith("`")||a.endsWith("`")?` `:``;return[o+s,s+o]}function tr(e,t,n,r){let i=[];for(let a of t){if(a.to<=n||a.from>=r)continue;let[t,o]=V(a),s=Math.max(n,t.to),c=Math.min(r,o.from);for(s>=c&&([s,c]=[t.to,o.from]),[s,c]=Yn(a.children.slice(1,-1),s,c);s>t.to&&U(e[s-1]);)s--;for(;c<o.from&&U(e[c]);)c++;s>t.to?i.push({from:s,to:s,insert:e.slice(o.from,o.to)}):i.push({from:t.from,to:t.to,insert:``}),c<o.from?i.push({from:c,to:c,insert:e.slice(t.from,t.to)}):i.push({from:o.from,to:o.to,insert:``})}return i}function nr(e,t,n){let{delim:r}=n,i=r.length;if(e.slice(t-i,t)===r&&e.startsWith(r,t)&&e[t-i-1]!==r[0]&&e[t+i]!==r[0])return{kind:`unwrap`,from:t-i,to:t+i};let a=P(e),o=F(a,e=>e.type===n.node).findLast(e=>e.from<=t&&t<=e.to);if(o){let[e,n]=V(o);return{kind:`move`,pos:t===o.from?e.to:t===o.to?n.from:o.to}}return rr(a,t)||e[t-1]===r[0]||e[t]===r[0]?null:{kind:`insert`,pos:t}}function rr(e,t){for(let n of e)if(n.from<t&&t<n.to){let e=Jn(n);return!e||t<e[0]||t>e[1]?!0:rr(n.children,t)}return!1}function W(e){return(t,n)=>{if(t.selection.empty)return ir(e,t,n);let{from:r,to:i,anchor:a,head:o}=t.selection,s=[];t.doc.nodesBetween(r,i,(t,n)=>{if(t.type.spec.code)return!1;if(!t.isTextblock)return!0;let a=t.textContent,o=n+1,[c,l]=Xn(a,Math.max(r-o,0),Math.min(i-o,a.length));return c<l&&s.push({text:a,base:o,from:c,to:l,active:Zn(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>Qn(t.text,t.from,t.to,e,c).map(e=>({from:e.from+t.base,to:e.to+t.base,insert:e.insert})));if(l.length===0)return!1;if(n){let e=t.tr;l.sort((e,t)=>t.from-e.from||t.to-e.to);for(let t of l)t.insert?e.insertText(t.insert,t.from,t.to):e.delete(t.from,t.to);e.setSelection(y.create(e.doc,e.mapping.map(a,a<=o?1:-1),e.mapping.map(o,o<a?1:-1))),n(e.scrollIntoView())}return!0}}function ir(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=nr(i.textContent,r.parentOffset,e);if(!a)return!1;if(n){let i=r.start(),o=t.tr;a.kind===`unwrap`&&o.delete(i+a.from,i+a.to),a.kind===`move`&&o.setSelection(y.create(o.doc,i+a.pos)),a.kind===`insert`&&(o.insertText(e.delim+e.delim,i+a.pos),o.setSelection(y.create(o.doc,i+a.pos+e.delim.length))),n(o.scrollIntoView())}return!0}function ar(){return o({toggleEm:()=>W(B.em),toggleStrong:()=>W(B.strong),toggleCode:()=>W(B.code),toggleDel:()=>W(B.del)})}function or(){return c({"Mod-b":W(B.strong),"Mod-i":W(B.em),"Mod-e":W(B.code),"Mod-Shift-x":W(B.del)})}function sr(){return h(ar(),or())}function cr(){return d({type:`list`,attr:`marker`,default:null,splittable:!0,toDOM:e=>e===`)`||e===`*`||e===`+`?[`data-list-marker`,e]:null,parseDOM:e=>{let t=e.getAttribute(`data-list-marker`);return t===`)`||t===`*`||t===`+`?t:null}})}function lr(){return d({type:`list`,attr:`taskMarker`,default:null,splittable:!0,toDOM:e=>e===`X`?[`data-list-task-marker`,e]:null,parseDOM:e=>e.getAttribute(`data-list-task-marker`)===`X`?`X`:null})}function ur(e){return e===2||e===3||e===4}function dr(){return d({type:`list`,attr:`markerGap`,default:1,splittable:!0,toDOM:e=>ur(e)?[`data-list-marker-gap`,String(e)]:null,parseDOM:e=>{let t=Number.parseInt(e.getAttribute(`data-list-marker-gap`)??``,10);return ur(t)?t:1}})}const fr=[C(/^\s?([*-])\s$/,{kind:`bullet`,collapsed:!1}),C(/^\s?(\d+)\.\s$/,({match:e})=>{let t=e[1],n=t?parseInt(t,10):void 0;return{kind:`ordered`,collapsed:!1,order:n&&n>=2&&Number.isSafeInteger(n)?n:null}}),C(/^\s?\[([\sXx]?)]\s$/,({match:e})=>({kind:`task`,checked:[`x`,`X`].includes(e[1]),collapsed:!1})),C(/^\s?\+\s$/,{kind:`task`,marker:`+`,checked:!1,collapsed:!1})];function pr(){return h(fr.map(Fe))}function mr(){return S({kind:`task`,marker:`+`})}function hr(){return S({kind:`task`,marker:null})}function gr(){return o({wrapInCircleTask:mr,wrapInSquareTask:hr})}function _r(e){let{$from:t}=e.selection;for(let e=t.depth;e>0;e--){let n=t.node(e);if(n.type.name===`list`)return n.attrs}return null}function vr(){return(e,t,n)=>{let r=_r(e),i=r?.kind===`task`&&r.marker!==`+`,a;return a=i&&!r?.checked?{kind:`task`,marker:r?.marker??null,checked:!0}:i&&r?.checked?{kind:`bullet`,marker:null,checked:!1}:{kind:`task`,marker:null,checked:!1},S(a)(e,t,n)}}function yr(){return(e,t,n)=>{let r=_r(e),i=r?.kind===`task`&&r.marker===`+`,a;return a=i&&!r?.checked?{kind:`task`,marker:`+`,checked:!0}:i&&r?.checked?{kind:`bullet`,marker:null,checked:!1}:{kind:`task`,marker:`+`,checked:!1},S(a)(e,t,n)}}function br(){return c({"Mod-Enter":vr(),"Mod-Shift-Enter":yr()})}function xr(){return h(Ve(),ze(),Re(),Ie(),Be(),Le(),pr(),br(),cr(),lr(),dr(),gr())}function Sr(){return f({name:`paragraph`,content:`inline*`,group:`block`,whitespace:`pre`,parseDOM:[{tag:`p`}],toDOM(){return[`p`,0]}})}function Cr(){return h(g(Sr(),t.highest),He(),Ue())}const wr=(e,t)=>{let{selection:n}=e;return!Qe(n)||!n.isColSelection()||!n.isRowSelection()?!1:Ze(e,t)};function Tr(){return g(c({Backspace:wr,Delete:wr}),t.high)}function Er(){return h(Xe(),Ye(),We(),Je(),qe({allowTableNodeSelection:!0}),Ge(),Ke(),Tr())}function Dr(){return h(Cr(),fe(),At(),he(),le(),xr(),Ft(),Er(),ue(),Lt(),Gn(),Dt(),jn(),sr(),ln(),St({marks:[{name:`mdImageSource`,modes:[`hide`]},{name:`mdWikilinkSource`,modes:[`hide`,`focus`,`show`]}],selectedClass:`md-atomic-selected`}),a(),i(),s(),pe(),ge(),me())}function Or(){return Dr()}function kr(e){let t;return p(new _({key:e.key,props:{handleDOMEvents:{mousedown:e=>{let{from:n,to:r,empty:i}=e.state.selection;return t={from:n,to:r,empty:i},!1}},handleClick:(n,r,i)=>{if(!i.target?.closest?.(e.selector))return!1;let a=e.findHitAt(n.state,r);return!a||!(ne?i.metaKey:i.ctrlKey)&&t?.empty&&t.from>=a.from&&t.to<=a.to?!1:(e.preventDefault&&i.preventDefault(),e.onClick(a.payload,i),!0)}}}))}const Ar=new v(`meowdown-wikilink-click`);function jr(e,t){let n=w(e,t,`mdWikilinkSource`);if(!n)return;let{target:r}=n.mark.attrs;return{from:n.from,to:n.to,target:r}}function Mr(e){return kr({key:Ar,selector:`.md-wikilink-label, .md-wikilink-source`,preventDefault:!1,findHitAt:(e,t)=>{let n=jr(e,t);return n?{from:n.from,to:n.to,payload:n.target}:void 0},onClick:(t,n)=>e({target:t,event:n})})}const Nr=new v(`meowdown-link-click`);function Pr(e,t){let n=w(e,t,`mdLinkText`);if(n)return{from:n.from,to:n.to,href:n.mark.attrs.href}}function Fr(e){return kr({key:Nr,selector:`.md-link`,preventDefault:!0,findHitAt:(e,t)=>{let n=Pr(e,t);return n?{from:n.from,to:n.to,payload:n.href}:void 0},onClick:(t,n)=>e({href:t,event:n})})}function Ir(){return typeof window>`u`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}const Lr=/^(?:www\.|mobile\.)?(?:twitter\.com|x\.com)$/i,Rr=/\/status(?:es)?\/(\d+)/;function zr(e){let t;try{t=new URL(e)}catch{return}if(Lr.test(t.hostname))return Rr.exec(t.pathname)?.[1]}const Br=e=>{let t=zr(e);if(!t)return;let n=Ir()?`dark`:`light`;return{kind:`tweet`,key:`tweet:${t}`,src:`https://platform.twitter.com/embed/Tweet.html?id=${t}&theme=${n}&dnt=true`,title:`Tweet`,className:`md-embed md-embed-tweet`,testid:`tweet-embed`}};function Vr(e){let t=t=>{if(t.source===e.contentWindow)try{let n=t.data?.[`twttr.embed`]?.params?.[0]?.height;typeof n==`number`&&(e.style.height=`${n}px`)}catch(e){console.warn(`[meowdown] failed to parse tweet resize message:`,e)}};window.addEventListener(`message`,t);let n=!1,r=()=>{n||(n=!0,window.removeEventListener(`message`,t),i.disconnect())},i=new MutationObserver(()=>{e.isConnected||r()});return i.observe(document.body,{childList:!0,subtree:!0}),r}const Hr=/^(?:www\.|m\.)?(?:youtube\.com|youtube-nocookie\.com)$/i,Ur=/^(?:www\.)?youtu\.be$/i,Wr=/^[\w-]{11}$/;function Gr(e){let t;try{t=new URL(e)}catch{return}let n=null;if(Ur.test(t.hostname))n=t.pathname.slice(1);else if(Hr.test(t.hostname)){let[,e,r]=t.pathname.split(`/`);t.pathname===`/watch`?n=t.searchParams.get(`v`):(e===`shorts`||e===`embed`||e===`live`)&&(n=r??null)}if(!n||!Wr.test(n))return;let r=t.searchParams.get(`start`)??t.searchParams.get(`t`),i=r?Kr(r):void 0;return{videoId:n,startSeconds:i}}function Kr(e){if(/^\d+$/.test(e))return Number(e);let t=/^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/.exec(e);if(!(!t||!t[1]&&!t[2]&&!t[3]))return Number(t[1]??0)*3600+Number(t[2]??0)*60+Number(t[3]??0)}const qr=[e=>{let t=Gr(e);if(!t)return;let n=t.startSeconds?`?start=${t.startSeconds}`:``;return{kind:`youtube`,key:`youtube:${t.videoId}:${t.startSeconds??0}`,src:`https://www.youtube-nocookie.com/embed/${t.videoId}${n}`,title:`YouTube video`,className:`md-embed md-embed-youtube`,testid:`youtube-embed`,allow:`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen`,allowFullscreen:!0}},Br];function G(e){for(let t of qr){let n=t(e);if(n)return n}}function Jr(e){return/^https?:\/\//i.test(e)?e:void 0}function Yr(e){let t=document.createElement(`iframe`);return t.src=e.src,t.title=e.title,t.className=e.className,t.dataset.testid=e.testid,t.loading=`lazy`,t.referrerPolicy=`strict-origin-when-cross-origin`,t.setAttribute(`frameborder`,`0`),e.allow&&(t.allow=e.allow),e.allowFullscreen&&(t.allowFullscreen=!0),e.kind===`tweet`&&Vr(t),t}function Xr(e,t,n){let r=G(e);if(r){let e=document.createElement(`span`);return e.className=`md-image-preview md-image-preview-embed`,e.appendChild(Yr(r)),e}let i=(n.resolveImageUrl??Jr)(e);if(!i)return;let a=document.createElement(`span`);a.className=`md-image-preview md-image-preview-img`,a.dataset.testid=`image-preview`;let o=document.createElement(`img`);return o.src=i,o.alt=t,o.draggable=!1,a.appendChild(o),a}function Zr(e){return t=>{let n=t.attrs,r=document.createElement(`span`);r.className=`md-image-view`;let i=document.createElement(`span`);i.className=`md-image-view-content`,r.appendChild(i);let a=Xr(n.src,n.alt,e);return a&&(a.contentEditable=`false`,r.appendChild(a)),{dom:r,contentDOM:i,ignoreMutation:e=>!i.contains(e.target)}}}function Qr(e){return e?Array.from(e.files).filter(e=>e.type.startsWith(`image/`)):[]}const $r=e=>{console.error(`[meowdown] failed to save pasted image:`,e)};async function ei(e,t,n,r=$r,i){let a=i;for(let i of t){let t;try{t=await n(i)}catch(e){r(e,i);continue}if(!t||e.isDestroyed)continue;let o=``,s=a==null?e.state.tr.insertText(o):e.state.tr.insertText(o,a);e.dispatch(s),a!=null&&(a+=o.length)}}function ti(e){return new _({key:new v(`image-input`),props:{handlePaste:(t,n)=>{let r=Qr(n.clipboardData),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(ei(t,r,i,a),!0)},handleDrop:(t,n)=>{let r=Qr(n.dataTransfer),{onImagePaste:i,onImageSaveError:a}=e;return r.length===0||!i?!1:(ei(t,r,i,a,t.posAtCoords({left:n.clientX,top:n.clientY})?.pos),!0)}}})}function ni(e={}){return h(u({name:`mdImageView`,constructor:Zr(e)}),g(p(ti(e)),t.high))}const ri=new v(`meowdown-image-click`);function ii(e,t){let n=w(e,t,`mdImageSource`);if(!n)return;let{src:r,alt:i}=n.mark.attrs;return{from:n.from,to:n.to,src:r,alt:i}}function ai(e){return p(new _({key:ri,props:{handleClick:(t,n,r)=>{let i=r.target?.closest?.(`.md-image-preview`);if(!i)return!1;let a=i.closest(`.md-image-view`)?.querySelector(`.md-image-view-content`);if(!a)return!1;let o=ii(t.state,t.posAtDOM(a,0));return o?(e({src:o.src,alt:o.alt,event:r}),!0):!1}}}))}const oi=new v(`meowdown-embed-paste`);function si(e){let t=e.trim();if(!(!t||/\s/.test(t)))return G(t)?t:void 0}function ci(e,t){return e.clipboardData?.getData(`text/plain`)||t.content.textBetween(0,t.content.size,`
|
|
3
|
+
`)}function li(e,t){let{from:n,to:r}=e.state.selection;e.dispatch($e(e.state.tr.insertText(t,n,r)));let i=e.state.tr.insertText(``,n,n+t.length);e.dispatch($e(i))}function ui(){return p(new _({key:oi,props:{handlePaste:(e,t,n)=>{let r=e.state.selection.$from.parent;if(!r.inlineContent||r.type.spec.code)return!1;let i=ci(t,n);if(!i)return!1;let a=si(i);return a?(li(e,a),!0):!1}}}))}function di(){return it().use(et).use(tt).use(nt).use(rt,{bullet:`-`,emphasis:`*`,strong:`*`,fence:"`",fences:!0,rule:`-`,ruleRepetition:3,listItemIndent:`one`}).freeze()}const fi=x(di);function pi(e){return String(fi().processSync(e))}function K(e,t={}){let{nodes:n=gn(),frontmatter:r=!1}=t,i,a=e;if(r){let[t,n]=hi(e);i=t,n&&(a=e.slice(n))}let o=gi(n,rn.parse(a).cursor(),a);return n.doc(i===void 0?{}:{frontmatter:i},o)}const mi=/^---[ \t]*\r?\n([\s\S]*?\n)?---[ \t]*(?:\r?\n|$)/;function hi(e){let t=mi.exec(e);return t?[(t[1]??``).replace(/\r?\n$/,``),t[0].length]:[]}function gi(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 I.ATXHeading1:return[J(e,t,n,1,!1)];case I.ATXHeading2:return[J(e,t,n,2,!1)];case I.ATXHeading3:return[J(e,t,n,3,!1)];case I.ATXHeading4:return[J(e,t,n,4,!1)];case I.ATXHeading5:return[J(e,t,n,5,!1)];case I.ATXHeading6:return[J(e,t,n,6,!1)];case I.SetextHeading1:return[J(e,t,n,1,!0)];case I.SetextHeading2:return[J(e,t,n,2,!0)];case I.Paragraph:return[Z(e,t,n)];case I.HTMLBlock:case I.CommentBlock:case I.ProcessingInstructionBlock:return[Z(e,t,n)];case I.Blockquote:return[bi(e,t,n)];case I.BulletList:return xi(e,t,n,`bullet`);case I.OrderedList:return xi(e,t,n,`ordered`);case I.FencedCode:case I.CodeBlock:return[Ci(e,t,n)];case I.HorizontalRule:{let r=n.slice(t.from,t.to).trimEnd();return[e.horizontalRule({marker:r===`---`?null:r})]}case I.Table:return[wi(e,t,n)];case I.Task:return[Z(e,t,n)];default:return n.slice(t.from,t.to).trim()===``?[]:(console.warn(`[meowdown] unsupported lezer block "${t.type.name}"`),[Z(e,t,n)])}}function J(e,t,n,r,i){let a=t.from,o=t.from,s=t.to,c=-1,l=-1;if(t.firstChild()){t.type.id===I.HeaderMark&&t.from===a&&(o=t.to);let e=-1,n=-1,r=-1;do e=t.type.id,n=t.from,r=t.to;while(t.nextSibling());e===I.HeaderMark&&n>o&&(s=n,c=n,l=r),t.parent()}let u=yi(n.slice(o,s),Y(n,o)).trim(),d=i?_i(n,c,l)||1:null;return e.heading({level:r,setextUnderline:d},u)}function _i(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 Y(e,t){let n=e.lastIndexOf(`
|
|
4
|
+
`,t-1)+1,r=0;for(let i=n;i<t;i++)r+=e.charCodeAt(i)===9?4-r%4:1;return r}function vi(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 yi(e,t){return t===0||!e.includes(`
|
|
5
5
|
`)?e:e.split(`
|
|
6
|
-
`).map((e,n)=>n===0?e:
|
|
7
|
-
`)}function
|
|
6
|
+
`).map((e,n)=>n===0?e:vi(e,t)).join(`
|
|
7
|
+
`)}function X(e,t,n){return e.paragraph(yi(t,n))}function Z(e,t,n){let r=t.from,i=t.to,a=Y(n,r);if(t.firstChild()){let o=``,s=r;do t.type.id===I.QuoteMark&&(o+=n.slice(s,t.from),s=t.to,Gt(n.charCodeAt(s))&&(s+=1));while(t.nextSibling());return t.parent(),o+=n.slice(s,i),X(e,o,a)}return X(e,n.slice(r,i),a)}function bi(e,t,n){let r=[];if(t.firstChild()){do{if(t.type.id===I.QuoteMark)continue;r.push(...q(e,t,n))}while(t.nextSibling());t.parent()}return e.blockquote(r)}function xi(e,t,n,r){let i=[];if(t.firstChild()){do t.type.id===I.ListItem&&i.push(Si(e,t,n,r));while(t.nextSibling());t.parent()}return i}function Si(e,t,n,r){let i=[],a,o,s,c,l,u;if(t.firstChild()){do{if(t.type.id!==I.ListMark&&u==null&&(u=Y(n,t.from)),t.type.id===I.ListMark){if(r===`ordered`){let e=n.charCodeAt(t.to-1);e===41?c=`)`:e===46&&(c=`.`);let r=Number.parseInt(n.slice(t.from,t.to),10);s=Number.isFinite(r)?r:1}else{let e=n.charCodeAt(t.from);c=e===42?`*`:e===43?`+`:`-`}l=Y(n,t.to);continue}if(r===`bullet`&&t.type.id===I.Task){let r=t.from,s=t.to;if(a=!1,t.firstChild()){if(t.type.id===I.TaskMarker){let e=n.charCodeAt(t.from+1);e===120?(a=!0,o=`x`):e===88&&(a=!0,o=`X`),r=t.to}t.parent()}Gt(n.charCodeAt(r))&&(r+=1);let c=n.slice(r,s);i.push(X(e,c,Y(n,r)));continue}i.push(...q(e,t,n))}while(t.nextSibling());t.parent()}let d=u!=null&&l!=null?u-l:1;return e.list({kind:a==null?r:`task`,order:r===`ordered`?s??1:null,checked:a??!1,collapsed:!1,marker:c,taskMarker:o,markerGap:d>=2&&d<=4?d:1},i)}function Ci(e,t,n){let r=``,i=``;if(t.firstChild()){do switch(t.type.id){case I.CodeInfo:r=n.slice(t.from,t.to);break;case I.CodeText:i+=n.slice(t.from,t.to);break}while(t.nextSibling());t.parent()}return e.codeBlock({language:r},i)}function wi(e,t,n){let r=0;if(t.firstChild()){do t.type.id===I.TableDelimiter&&(r=Ti(n.slice(t.from,t.to)));while(t.nextSibling());t.parent()}let i=[];if(t.firstChild()){do{let a=t.type.id;a===I.TableHeader?i.push(Ei(e,t,n,!0,r)):a===I.TableRow&&i.push(Ei(e,t,n,!1,r))}while(t.nextSibling());t.parent()}return e.table(i)}function Ti(e){return e.split(`|`).filter(e=>e.trim()!==``).length}function Ei(e,t,n,r,i){let a=Array(i).fill(``);if(t.firstChild()){let e=t.type.id===I.TableDelimiter,r=0;do if(t.type.id===I.TableDelimiter)r++;else if(t.type.id===I.TableCell){let o=r-+!!e;o>=0&&o<i&&(a[o]=n.slice(t.from,t.to).trim().replaceAll(String.raw`\|`,`|`))}while(t.nextSibling());t.parent()}let o=a.map(t=>{let n=e.paragraph(t);return r?e.tableHeaderCell(n):e.tableCell(n)});return e.tableRow(o)}const Di=new v(`meowdown-html-paste`);function Oi(){return p(new _({key:Di,props:{transformPastedHTML:(e,t)=>{if(e.includes(`data-pm-slice`))return e;let n=t.state.selection.$from.parent;if(!n.inlineContent||n.type.spec.code)return e;let r=pi(e);if(!r.trim())return e;let i=K(r,{nodes:xn(t.state.schema)}),a=je.fromSchema(t.state.schema),o=document.createElement(`div`);return o.append(a.serializeFragment(i.content)),o.innerHTML}}}))}function ki(e,t={}){let n=new Ni;return t.frontmatter&&Ai(e.attrs.frontmatter,n),Pi(e,n),n.finish()}function Ai(e,t){e!==null&&(t.write(`---`),t.write(`
|
|
8
8
|
`),e!==``&&(t.write(e),t.write(`
|
|
9
|
-
`)),t.write(`---`),t.closeBlock())}const
|
|
10
|
-
`+i.repeat(Math.max(1,r))),t.closeBlock();return}t.write(
|
|
9
|
+
`)),t.write(`---`),t.closeBlock())}const ji=[``,`# `,`## `,`### `,`#### `,`##### `,`###### `];function Mi(e,t){let n=e.attrs,r=n.setextUnderline;if(r!=null&&e.content.size>0&&n.level<=2){$(e,t);let i=n.level===1?`=`:`-`;t.write(`
|
|
10
|
+
`+i.repeat(Math.max(1,r))),t.closeBlock();return}t.write(ji[n.level]??`# `),$(e,t),t.closeBlock()}var Ni=class{constructor(){this.parts=[],this.linePrefix=``,this.pendingFirst=null,this.atLineStart=!0,this.deferredBlankPrefix=null}write(e){if(e===``)return;if(this.emitDeferredBlankLine(),this.atLineStart&&=(this.parts.push(this.pendingFirst??this.linePrefix),this.pendingFirst=null,!1),!e.includes(`
|
|
11
11
|
`)){this.parts.push(e);return}let t=e.split(`
|
|
12
12
|
`);for(let e=0;e<t.length;e++)e>0&&this.parts.push(`
|
|
13
13
|
`,this.linePrefix),t[e]!==``&&this.parts.push(t[e])}closeBlock(){this.atLineStart&&this.pendingFirst!==null&&(this.emitDeferredBlankLine(),this.parts.push(this.pendingFirst.trimEnd()),this.pendingFirst=null,this.atLineStart=!1),this.atLineStart||this.parts.push(`
|
|
14
14
|
`),this.atLineStart=!0,this.deferredBlankPrefix=this.linePrefix}suppressBlank(){this.deferredBlankPrefix=null}withPrefix(e,t,n){let r=this.linePrefix,i=this.pendingFirst;if(this.linePrefix=r+e,t!==null){let e=i??r;this.pendingFirst=e+t}n(),this.linePrefix=r,this.pendingFirst=t===null?i:null}finish(){return this.parts.join(``).replace(/\s+$/,``)+`
|
|
15
15
|
`}emitDeferredBlankLine(){let e=this.deferredBlankPrefix;e!==null&&(this.parts.push(e.trimEnd(),`
|
|
16
|
-
`),this.deferredBlankPrefix=null)}};function
|
|
16
|
+
`),this.deferredBlankPrefix=null)}};function Pi(e,t){switch(e.type.name){case`doc`:Q(e,t);return;case`paragraph`:$(e,t),t.closeBlock();return;case`heading`:Mi(e,t);return;case`blockquote`:t.withPrefix(`> `,`> `,()=>Q(e,t)),t.closeBlock();return;case`list`:Li(e,t,Ii(e));return;case`codeBlock`:Ri(e,t);return;case`horizontalRule`:{let{marker:n}=e.attrs;t.write(n||`---`),t.closeBlock();return}case`table`:zi(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(),Pi(a,t),i++;continue}let o=i+1;for(;o<r&&e.child(o).type.name===`list`;)o++;let s=Fi(e,i,o);for(let r=i;r<o;r++)(r===i?n&&i>0:s)&&t.suppressBlank(),Li(e.child(r),t,s);i=o}}function Fi(e,t,n){for(let r=t;r<n;r++)if(!Ii(e.child(r)))return!1;return!0}function Ii(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 $(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 Li(e,t,n){let r=e.attrs,i=r.marker===`*`||r.marker===`+`?r.marker:`-`,a=r.marker===`)`?`)`:`.`,o=r.taskMarker===`X`?`X`:`x`,s=Math.min(Math.max(r.markerGap??1,1),4),c=`${r.kind===`ordered`?`${r.order??1}${a}`:i}${` `.repeat(s)}`,l=r.kind===`task`?`${c}[${r.checked?o:` `}] `:c,u=` `.repeat(c.length);t.withPrefix(u,l,()=>Q(e,t,n)),t.closeBlock()}function Ri(e,t){let n=e.attrs.language||``,r=e.textContent,i="`".repeat(Kn(r,2)+1);t.write(i),n&&t.write(n),t.write(`
|
|
17
17
|
`),r&&(t.write(r),t.write(`
|
|
18
|
-
`)),t.write(i),t.closeBlock()}function
|
|
18
|
+
`)),t.write(i),t.closeBlock()}function zi(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(Vi(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(Bi(s,i)),t.write(`
|
|
19
19
|
`),t.write(o);for(let e=0;e<n;e++)e!==a&&(t.write(`
|
|
20
|
-
`),t.write(
|
|
20
|
+
`),t.write(Bi(r[e],i)));t.closeBlock()}function Bi(e,t){let n=`|`;for(let r=0;r<t;r++)n+=` `+(e[r]??``)+` |`;return n}function Vi(e){let t=e.textContent.trim();return!t.includes(`|`)&&!t.includes(`
|
|
21
21
|
`)?t:t.replaceAll(`|`,String.raw`\|`).replaceAll(`
|
|
22
|
-
`,` `)}const
|
|
22
|
+
`,` `)}const Hi=new v(`meowdown-markdown-copy`);function Ui(){return p(new _({key:Hi,props:{clipboardTextSerializer:(e,t)=>{let n=e.content,r;try{r=t.state.schema.topNodeType.createAndFill(void 0,n)??void 0}catch{r=void 0}return r?ki(r).replace(/\n+$/,``):n.textBetween(0,n.size,`
|
|
23
23
|
`,`
|
|
24
|
-
`)}}}))}const
|
|
25
|
-
`).filter(e=>!
|
|
24
|
+
`)}}}))}const Wi=(e,t)=>{let{$from:n,empty:r}=e.selection;if(!r||n.depth!==1||n.index(0)!==0||n.parent.type.name!==`heading`||n.parentOffset!==n.parent.content.size)return!1;if(t){let r=te(e.schema,`list`),i=te(e.schema,`paragraph`),a=r.create({kind:`bullet`},i.create()),o=n.after(),s=e.tr.insert(o,a);s.setSelection(y.create(s.doc,o+2)),t(s.scrollIntoView())}return!0};function Gi(){return g(c({Enter:Wi}),t.high)}const Ki=(e,t)=>{let{selection:n}=e;if(!n.empty&&!n.$head.sameParent(n.$anchor))return!1;let r=e.doc.textBetween(n.from,n.to);if(r.startsWith(`[[`))return!1;r.startsWith(`[`)&&(r=r.slice(1));let i=`[[`+r;if(t){let r=e.tr.insertText(i,n.from,n.to);r.setSelection(y.create(r.doc,n.from+i.length)),at(r),t(r.scrollIntoView())}return!0};function qi(){return c({"Mod-Shift-k":Ki})}const Ji={"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`},Yi=new Set([`MscGen`,`Xù`,`MsGenny`,`Angular Template`,`Brainfuck`,`Esper`,`Oz`,`Factor`,`Squirrel`,`Yacas`,`mIRC`,`FCL`,`ECL`,`MUMPS`,`Pig`,`Asterisk`,`Z80`]),Xi=ye.map(e=>e.name).filter(e=>!Yi.has(e)).map(e=>({label:e,value:e.toLowerCase()})).concat({label:`Plain text`,value:``}).sort((e,t)=>e.label.localeCompare(t.label));function Zi(e){return e.replace(/\n+$/u,``)}function Qi(e){return/^[\s>]*$/u.test(e)}function $i(e){return e.split(`
|
|
25
|
+
`).filter(e=>!Qi(e))}function ea(e,t={}){let n=ki(K(e,{frontmatter:t.frontmatter}),{frontmatter:t.frontmatter});if(Zi(n)===Zi(e))return`exact`;let r=$i(e),i=$i(n);return r.length===i.length&&r.every((e,t)=>e.trimEnd()===i[t].trimEnd())?`normalizing`:`lossy`}export{Ji as EDITOR_KEY_BINDINGS,e as Priority,ea as checkRoundTrip,Xi as codeBlockLanguages,Jr as defaultResolveImageUrl,Gi as defineBulletAfterHeading,Dt as defineCodeBlockSyntaxHighlight,Or as defineEditorExtension,ui as defineEmbedPaste,Oi as defineHTMLPaste,ni as defineImage,ai as defineImageClickHandler,Fr as defineLinkClickHandler,ft as defineMarkMode,Ui as defineMarkdownCopy,ot as definePlaceholder,st as defineReadonly,Mr as defineWikilinkClickHandler,qi as defineWikilinkTrigger,ki as docToMarkdown,kt as getCodeTokens,_n as getMarkBuilders,un as inlineTextToMarkChunks,Vr as listenForTweetHeight,K as markdownToDoc,G as matchEmbed,se as withPriority};
|
package/dist/style.css
CHANGED
|
@@ -410,7 +410,7 @@ img.ProseMirror-separator {
|
|
|
410
410
|
background: var(--meowdown-selection);
|
|
411
411
|
}
|
|
412
412
|
|
|
413
|
-
.ProseMirror.ProseMirror-hideselection ::selection {
|
|
413
|
+
.ProseMirror:has(.md-atomic-selected), .ProseMirror.ProseMirror-hideselection ::selection {
|
|
414
414
|
--meowdown-selection: transparent;
|
|
415
415
|
caret-color: #0000;
|
|
416
416
|
}
|
|
@@ -478,7 +478,7 @@ img.ProseMirror-separator {
|
|
|
478
478
|
display: block;
|
|
479
479
|
}
|
|
480
480
|
|
|
481
|
-
.ProseMirror[data-mark-mode="hide"] .md-image-view:has(.md-atomic-selected) .md-image-preview, .ProseMirror
|
|
481
|
+
.ProseMirror[data-mark-mode="hide"] .md-image-view:has(.md-atomic-selected) .md-image-preview, .ProseMirror .md-wikilink-view:has(.md-atomic-selected) .md-wikilink-label {
|
|
482
482
|
outline: 2px solid var(--meowdown-node-outline);
|
|
483
483
|
outline-offset: 2px;
|
|
484
484
|
background: var(--meowdown-node-selection);
|
|
@@ -539,3 +539,38 @@ img.ProseMirror-separator {
|
|
|
539
539
|
}
|
|
540
540
|
}
|
|
541
541
|
}
|
|
542
|
+
|
|
543
|
+
.ProseMirror[data-mark-mode="hide"] .md-wikilink-view-content, .ProseMirror[data-mark-mode="focus"] .md-wikilink-view-content, .ProseMirror[data-mark-mode="hide"] .md-image-view-content, .ProseMirror[data-mark-mode="focus"] .md-image-view-content {
|
|
544
|
+
vertical-align: bottom;
|
|
545
|
+
height: 100%;
|
|
546
|
+
display: inline-flex;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
.ProseMirror[data-mark-mode="hide"] .md-image-view-content, .ProseMirror[data-mark-mode="focus"] .md-image-view-content {
|
|
550
|
+
overflow: hidden;
|
|
551
|
+
|
|
552
|
+
&:not(:has(.show)) {
|
|
553
|
+
width: 0;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
.ProseMirror[data-mark-mode="hide"] .md-wikilink-view-content, .ProseMirror[data-mark-mode="focus"] .md-wikilink-view-content {
|
|
558
|
+
background-color: #0000;
|
|
559
|
+
width: 0;
|
|
560
|
+
min-width: 0;
|
|
561
|
+
max-width: 0;
|
|
562
|
+
overflow: visible;
|
|
563
|
+
|
|
564
|
+
& * {
|
|
565
|
+
color: #0000;
|
|
566
|
+
background-color: #0000;
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
.ProseMirror[data-mark-mode="hide"] .md-wikilink-view-content :is(.md-mark, .md-wikilink-source), .ProseMirror[data-mark-mode="focus"] .md-wikilink-view-content :is(.md-mark, .md-wikilink-source), .ProseMirror[data-mark-mode="hide"] .md-image-view-content :is(.md-mark, .md-image-source), .ProseMirror[data-mark-mode="focus"] .md-image-view-content :is(.md-mark, .md-image-source) {
|
|
571
|
+
width: 0;
|
|
572
|
+
min-width: 0;
|
|
573
|
+
max-width: 0;
|
|
574
|
+
display: inline-flex;
|
|
575
|
+
overflow: visible;
|
|
576
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meowdown/core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.21.1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"@lezer/markdown": "^1.6.4",
|
|
26
26
|
"@ocavue/utils": "^1.7.0",
|
|
27
27
|
"@prosekit/core": "^0.13.0-beta.3",
|
|
28
|
-
"@prosekit/extensions": "^0.
|
|
28
|
+
"@prosekit/extensions": "^0.18.0-beta.9",
|
|
29
29
|
"@prosekit/pm": "^0.1.19-beta.0",
|
|
30
30
|
"prosemirror-flat-list": "^0.6.0",
|
|
31
31
|
"prosemirror-highlight": "^0.15.2",
|