@meowdown/core 0.4.0 → 0.7.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
@@ -15,16 +15,16 @@ The editor extension binds inline-format toggles (`Mod` = Cmd on macOS, Ctrl els
15
15
 
16
16
  Heading shortcuts toggle the current block to a heading of that level (or back to a paragraph):
17
17
 
18
- | Key | Action |
19
- | --------------------- | --------- |
20
- | `Mod-1` / `Mod-Alt-1` | Heading 1 |
21
- | `Mod-2` / `Mod-Alt-2` | Heading 2 |
22
- | `Mod-3` / `Mod-Alt-3` | Heading 3 |
23
- | `Mod-4` / `Mod-Alt-4` | Heading 4 |
24
- | `Mod-5` / `Mod-Alt-5` | Heading 5 |
25
- | `Mod-6` / `Mod-Alt-6` | Heading 6 |
26
-
27
- `EDITOR_KEY_BINDINGS` exports a `Record<string, string>` mapping every key above to its description, for host settings UIs and keybinding-collision checks.
18
+ | Key | Action |
19
+ | ------- | --------- |
20
+ | `Mod-1` | Heading 1 |
21
+ | `Mod-2` | Heading 2 |
22
+ | `Mod-3` | Heading 3 |
23
+ | `Mod-4` | Heading 4 |
24
+ | `Mod-5` | Heading 5 |
25
+ | `Mod-6` | Heading 6 |
26
+
27
+ `EDITOR_KEY_BINDINGS` is a literal (`as const`) object mapping every key above to its description, for host settings UIs and keybinding-collision checks.
28
28
 
29
29
  ## Round-trip fidelity
30
30
 
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@ import { PlaceholderOptions, definePlaceholder } from "@prosekit/extensions/plac
5
5
  import { defineReadonly } from "@prosekit/extensions/readonly";
6
6
 
7
7
  //#region src/extensions/extension.d.ts
8
- 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/extensions/heading").HeadingExtension, 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<{
8
+ 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
9
  Marks: {
10
10
  mdMark: import("@prosekit/pm/model").Attrs;
11
11
  };
@@ -50,7 +50,7 @@ declare function defineEditorExtensionImpl(): import("@prosekit/core").Union<rea
50
50
  toggleCode: [];
51
51
  toggleDel: [];
52
52
  };
53
- }>, 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]>;
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]>;
54
54
  type EditorExtension = ReturnType<typeof defineEditorExtensionImpl>;
55
55
  declare function defineEditorExtension(): EditorExtension;
56
56
  type TypedEditor = Editor<EditorExtension>;
@@ -82,14 +82,25 @@ interface ImageOptions {
82
82
  /** Persist a pasted/dropped image file and return its markdown `src`, or `undefined` to decline. */
83
83
  onImagePaste?: (file: File) => Promise<string | undefined>;
84
84
  /** Called when persisting a pasted/dropped image throws. Defaults to `console.error`. */
85
- onImageSaveError?: (error: Error, file: File) => void;
85
+ onImageSaveError?: (error: unknown, file: File) => void;
86
86
  }
87
87
  /** Inline image rendering (widget decorations) plus paste/drop persistence. */
88
88
  declare function defineImages(options: ImageOptions): PlainExtension;
89
89
  //#endregion
90
90
  //#region src/extensions/key-bindings.d.ts
91
91
  /** Human-readable descriptions of the editor's formatting and heading shortcuts. */
92
- declare const EDITOR_KEY_BINDINGS: Record<string, string>;
92
+ declare const EDITOR_KEY_BINDINGS: {
93
+ readonly 'Mod-b': "Bold";
94
+ readonly 'Mod-i': "Italic";
95
+ readonly 'Mod-e': "Inline code";
96
+ readonly 'Mod-Shift-x': "Strikethrough";
97
+ readonly 'Mod-1': "Heading 1";
98
+ readonly 'Mod-2': "Heading 2";
99
+ readonly 'Mod-3': "Heading 3";
100
+ readonly 'Mod-4': "Heading 4";
101
+ readonly 'Mod-5': "Heading 5";
102
+ readonly 'Mod-6': "Heading 6";
103
+ };
93
104
  //#endregion
94
105
  //#region src/extensions/code-block-languages.d.ts
95
106
  /**
package/dist/index.js CHANGED
@@ -1,15 +1,15 @@
1
- import{createEditor as e,defineBaseCommands as t,defineBaseKeymap as n,defineCommands as r,defineHistory as i,defineKeymap as a,defineMarkSpec as o,definePlugin as s,getMarkType as c,isApple as l,toggleNode as u,union as d,withSkipCodeBlock as ee}from"@prosekit/core";import{defineBlockquote as te}from"@prosekit/extensions/blockquote";import{defineCodeBlock as ne,defineCodeBlockHighlight as re}from"@prosekit/extensions/code-block";import{defineDoc as ie}from"@prosekit/extensions/doc";import{defineGapCursor as ae}from"@prosekit/extensions/gap-cursor";import{defineHeading as oe}from"@prosekit/extensions/heading";import{defineHorizontalRule as se}from"@prosekit/extensions/horizontal-rule";import{defineList as ce}from"@prosekit/extensions/list";import{defineModClickPrevention as le}from"@prosekit/extensions/mod-click-prevention";import{defineParagraph as ue}from"@prosekit/extensions/paragraph";import{defineText as de}from"@prosekit/extensions/text";import{defineVirtualSelection as fe}from"@prosekit/extensions/virtual-selection";import{LanguageDescription as pe}from"@codemirror/language";import{languages as f}from"@codemirror/language-data";import{classHighlighter as me}from"@lezer/highlight";import{createParser as he}from"prosemirror-highlight/lezer";import{Plugin as p,PluginKey as m,TextSelection as h}from"@prosekit/pm/state";import{ReplaceStep as ge,Step as g,StepResult as _,Transform as _e}from"@prosekit/pm/transform";import{Mark as ve}from"@prosekit/pm/model";import{GFM as ye,parser as be}from"@lezer/markdown";import{defineTableCellSpec as xe,defineTableCommands as Se,defineTableDropIndicator as Ce,defineTableHeaderCellSpec as we,defineTableRowSpec as Te,defineTableSpec as Ee}from"@prosekit/extensions/table";import{tableEditing as De}from"prosemirror-tables";import{Decoration as Oe,DecorationSet as v}from"@prosekit/pm/view";import{definePlaceholder as ke}from"@prosekit/extensions/placeholder";import{defineReadonly as Ae}from"@prosekit/extensions/readonly";const y=new Map;async function je(e){let t=pe.matchLanguageName(f,e,!0);if(!t){y.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),y.set(e,null)}if(y.has(e))return;if(!n){y.set(e,null);return}let r=he({parse:e=>n.language.parser.parse(e.content),highlighter:me});y.set(e,r)}const Me=e=>{let t=e.language?.trim();if(!t)return[];let n=y.get(t);return n?n(e):n===null?[]:je(t)};function Ne(){return re({parser:Me,nodeTypes:[`codeBlock`]})}const b=[1,2,3,4,5,6];function Pe(){return a(Object.fromEntries(b.map(e=>[`Mod-${e}`,ee(u({type:`heading`,attrs:{level:e}}))])))}function Fe(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function Ie(e,t){let[n,r,i]=t;return[n,r,i.map(t=>ve.fromJSON(e,t))]}var x=class e extends g{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return _.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 _e(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new _e(e),n.addMark(i,c,t));return!1})}return _.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return Le;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 ge(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(Fe)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>Ie(t,e)))}};g.jsonID(`batchSetMark`,x);const Le=new x([]);function Re(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 ze(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const Be={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(!Re(t))break;i||=ze(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},Ve={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 He(e){return e.end}const S=be.configure([ye,Be,Ve]),Ue=S.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:He}]});function C(e){return S.parseInline(e,0)}function w(e,t,n=[]){for(let r of e)t(r)&&n.push(r),w(r.children,t,n);return n}function We(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const T=We(S);function Ge(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 E=new Map([[T.Emphasis,`mdEm`],[T.StrongEmphasis,`mdStrong`],[T.InlineCode,`mdCode`],[T.Strikethrough,`mdDel`],[T.EmphasisMark,`mdMark`],[T.CodeMark,`mdMark`],[T.LinkMark,`mdMark`],[T.StrikethroughMark,`mdMark`],[T.URL,`mdLinkUri`],[T.Hashtag,`mdTag`],[T.Wikilink,`mdWikilink`],[T.WikilinkMark,`mdMark`]]);function Ke(e,t){let n=C(t),r=[];return D(n,[],0,t.length,t,e,r),r}function D(e,t,n,r,i,a,o){let s=n;for(let n of e){if(n.from>s&&O(o,s,n.from,t),n.type===T.Link||n.type===T.Image)qe(n,t,i,a,o);else{let e=E.get(n.type),r=e?[...t,a.marks[e].create()]:t;n.children.length===0?O(o,n.from,n.to,r):D(n.children,r,n.from,n.to,i,a,o)}s=n.to}s<r&&O(o,s,r,t)}function qe(e,t,n,r,i){let a=-1,o=null,s=0;for(let t of e.children)t.type===T.LinkMark?(s++,s===2&&(a=t.from)):t.type===T.URL&&o===null&&(o=t);let c=o?n.slice(o.from,o.to):``,l=c&&r.marks.mdLinkText?r.marks.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;O(i,d,a.from,e)}let e=u(a.from)?[...t,l]:t,o=E.get(a.type),s=o?[...e,r.marks[o].create()]:e;a.children.length===0?O(i,a.from,a.to,s):D(a.children,s,a.from,a.to,n,r,i),d=a.to}d<e.to&&O(i,d,e.to,t)}function O(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&Ge(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const k=`inline-marks-applied`,Je=new WeakMap;let Ye=0,Xe=0;function Ze(e,t,n){let r=Je.get(e);if(r?Xe++:(Ye++,r=Ke(n,e.textContent),Je.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 Qe(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 $e(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=Ze(t,r+1,e.schema);return i.length>0&&n.push(...i),!1}),n}function et(){return new p({key:new m(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(k))return null;let r=$e(n,Qe(e,n));if(r.length===0)return null;let i=n.tr.step(new x(r));return i.setMeta(k,!0),i.setMeta(`addToHistory`,!1),i},view(e){return e.dispatch(tt(e.state)),{}}})}function tt(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function nt(){return s(et())}function rt(){return o({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function it(){return o({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function at(){return o({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function ot(){return o({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function st(){return o({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 o({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function lt(){return o({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function ut(){return o({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function dt(){return o({name:`mdWikilink`,inclusive:!1,toDOM:()=>[`span`,{class:`md-wikilink`},0],parseDOM:[{tag:`span.md-wikilink`}]})}function ft(){return d(rt(),it(),at(),ot(),st(),ct(),lt(),ut(),dt())}function pt(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 A={em:{node:T.Emphasis,delim:`*`},strong:{node:T.StrongEmphasis,delim:`**`},code:{node:T.InlineCode,delim:"`"},del:{node:T.Strikethrough,delim:`~~`}},mt=new Set([T.EmphasisMark,T.CodeMark,T.LinkMark,T.StrikethroughMark]);function j(e){return[e.children[0],e.children.at(-1)]}function M(e){let{type:t,children:n}=e;if(t===T.Emphasis||t===T.StrongEmphasis||t===T.Strikethrough)return[n[0].to,n.at(-1).from];if(t===T.Link||t===T.Image){let e=n.find((e,t)=>t>0&&e.type===T.LinkMark);return e?[n[0].to,e.from]:null}return null}function N(e,t,n){for(let r of e){if(r.to<=t||r.from>=n||t<=r.from&&r.to<=n)continue;let i=M(r);return i&&i[0]<=t&&n<=i[1]?N(r.children,t,n):N(e,Math.min(t,r.from),Math.max(n,r.to))}return[t,n]}function P(e,t,n){for(let r of e)if(!(r.to<=t||r.from>=n)&&(t>r.from||r.to>n))return P(e,Math.min(t,r.from),Math.max(n,r.to));return[t,n]}const F=e=>e===` `||e===` `;function ht(e,t,n){for(;t<n&&F(e[t]);)t++;for(;n>t&&F(e[n-1]);)n--;return[t,n]}function gt(e,t,n,r){let i=w(C(e),e=>e.type===r.node||mt.has(e.type));for(let r=t;r<n;r++)if(!F(e[r])&&!i.some(e=>e.from<=r&&r<e.to))return!1;return!0}function _t(e,t,n,r,i){let a=C(e),o=w(a,e=>e.type===r.node);return i?bt(e,o,t,n):vt(e,a,o,t,n,r)}function vt(e,t,n,r,i,a){for(let e=0;e!==i-r;){e=i-r,[r,i]=N(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]=j(e);o.push({from:t.from,to:t.to,insert:``}),o.push({from:n.from,to:n.to,insert:``})}let[s,c]=yt(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function yt(e,t,n,r,i){if(i.node!==T.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(pt(a)+1),s=a.startsWith("`")||a.endsWith("`")?` `:``;return[o+s,s+o]}function bt(e,t,n,r){let i=[];for(let a of t){if(a.to<=n||a.from>=r)continue;let[t,o]=j(a),s=Math.max(n,t.to),c=Math.min(r,o.from);for(s>=c&&([s,c]=[t.to,o.from]),[s,c]=P(a.children.slice(1,-1),s,c);s>t.to&&F(e[s-1]);)s--;for(;c<o.from&&F(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 xt(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=C(e),o=w(a,e=>e.type===n.node).findLast(e=>e.from<=t&&t<=e.to);if(o){let[e,n]=j(o);return{kind:`move`,pos:t===o.from?e.to:t===o.to?n.from:o.to}}return I(a,t)||e[t-1]===r[0]||e[t]===r[0]?null:{kind:`insert`,pos:t}}function I(e,t){for(let n of e)if(n.from<t&&t<n.to){let e=M(n);return!e||t<e[0]||t>e[1]?!0:I(n.children,t)}return!1}function L(e){return(t,n)=>{if(t.selection.empty)return St(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]=ht(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:gt(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>_t(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(h.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 St(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=xt(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(h.create(o.doc,i+a.pos)),a.kind===`insert`&&(o.insertText(e.delim+e.delim,i+a.pos),o.setSelection(h.create(o.doc,i+a.pos+e.delim.length))),n(o.scrollIntoView())}return!0}function Ct(){return d(r({toggleEm:()=>L(A.em),toggleStrong:()=>L(A.strong),toggleCode:()=>L(A.code),toggleDel:()=>L(A.del)}),a({"Mod-b":L(A.strong),"Mod-i":L(A.em),"Mod-e":L(A.code),"Mod-Shift-x":L(A.del)}))}function wt(){return d(Ee(),Te(),xe(),we(),s(De()),Se(),Ce())}function Tt(){return d(ue(),ie(),de(),te(),ce(),oe(),wt(),ne(),se(),ft(),Ne(),nt(),Ct(),Pe(),n(),t(),i(),ae(),fe(),le())}function R(){return Tt()}const Et=new Set([`mdStrong`,`mdEm`,`mdCode`,`mdDel`,`mdLinkText`,`mdLinkUri`,`mdWikilink`]),Dt=new Set([`mdMark`,`mdLinkUri`]),Ot=new Set([`mdMark`,`mdLinkUri`]),z=new Set([`mdLinkText`,`mdLinkUri`]),kt=new Set([`mdStrong`,`mdEm`,`mdCode`,`mdDel`,`mdWikilink`]);function At(e){return new p({key:new m(`mark-mode`),props:{attributes:{"data-mark-mode":e},decorations:e===`focus`?e=>Nt(e):void 0,clipboardTextSerializer:e===`show`?void 0:Mt}})}function jt(e){return s(At(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=>Ot.has(e.type.name))||n.push(e.text),!1)),t.push(n.join(``))}),t.join(`
2
- `)}function Nt(e){let{$anchor:t,empty:n}=e.selection;if(!n)return v.empty;let r=t.parent;if(!r.isTextblock)return null;let i=t.start(),a=t.parentOffset,o=Pt(r,a);if(o.size===0)return v.empty;let s=[],c=new Set,l=!1;for(let e of o)if(z.has(e)){if(l)continue;l=!0,It(r,i,a,s,c)}else Ft(r,i,e,a,s,c);let u=s.map(([e,t])=>Oe.inline(e,t,{class:`show`}));return v.create(e.doc,u)}function Pt(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;Et.has(e)&&n.add(e)}r=i}),n}function Ft(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&&V(e,t,c,o,i,a),c=-1,l=-1),o+=u.nodeSize,s+=u.nodeSize}),c!==-1&&r>=l&&r<=s&&V(e,t,c,o,i,a)}function It(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=>z.has(e.type.name))){o=t;break}s=i}if(o===-1)return;let c=o;for(;c>0&&B(e.child(c-1));)c--;let l=o;for(;l<a-1&&B(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;V(e,t,u,d,r,i)}function B(e){let t=!1,n=!1,r=!1;for(let i of e.marks){let e=i.type.name;e===`mdMark`?t=!0:z.has(e)?n=!0:kt.has(e)&&(r=!0)}return!!(n||t&&!r)}function V(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(Dt.has(e)){let e=`${t}_${s}`;a.has(e)||(a.add(e),i.push([t,s]));break}}o=s})}const Lt=new m(`meowdown-wikilink-click`);function Rt(e,t){let n=c(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,l,u=0;if(i.forEach(e=>{let r=a+u;u+=e.nodeSize;let i=a+u;n.isInSet(e.marks)?(o<0&&(o=r),s=i):(o>=0&&o<=t&&t<=s&&(l={from:o,to:s}),o=-1)}),o>=0&&o<=t&&t<=s&&(l={from:o,to:s}),l)return{from:l.from,to:l.to,target:zt(e.doc.textBetween(l.from,l.to))}}function zt(e){let t=e.replace(/^\[\[/u,``).replace(/\]\]$/u,``),n=t.indexOf(`|`);return(n>=0?t.slice(0,n):t).trim()}function Bt(e){let t;return s(new p({key:Lt,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=Rt(n.state,r);return!a||!(l?i.metaKey:i.ctrlKey)&&t?.empty&&t.from>=a.from&&t.to<=a.to?!1:(e({target:a.target,event:i}),!0)}}}))}function Vt(e){let t=[],n=w(C(e),e=>e.type===T.Image);for(let r of n){let n=r.children.find(e=>e.type===T.URL),i=r.children.filter(e=>e.type===T.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}const H=new m(`meowdown-images`);function Ht(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 Vt(e.textContent))t.push({widgetAt:n+e.nodeSize-1,alt:r.alt,src:r.src});return!1}),t}function U(e,t){let n=[];for(let r of Ht(e)){let e=t.resolveImageUrl(r.src);e&&n.push(Oe.widget(r.widgetAt,()=>{let t=document.createElement(`div`);t.className=`md-image`,t.contentEditable=`false`;let n=document.createElement(`img`);return n.src=e,n.alt=r.alt,n.draggable=!1,t.appendChild(n),t},{key:`md-image:${e}`,side:1}))}return v.create(e.doc,n)}function Ut(e){return new p({key:H,state:{init:(t,n)=>U(n,e),apply:(t,n,r,i)=>t.docChanged?U(i,e):n},props:{decorations:e=>H.getState(e)}})}function W(e){return e?Array.from(e.files).filter(e=>e.type.startsWith(`image/`)):[]}function Wt(e,t,n){e.onImageSaveError?e.onImageSaveError(t,n):console.error(`[meowdown] failed to save pasted image:`,t)}async function G(e,t,n,r){let i=r;for(let r of t){let t;try{t=await n.onImagePaste(r)}catch(e){Wt(n,e,r);continue}if(!t||e.isDestroyed)continue;let a=`![](${t})`,o=i==null?e.state.tr.insertText(a):e.state.tr.insertText(a,i);e.dispatch(o),i!=null&&(i+=a.length)}}function Gt(e){return new p({props:{handlePaste:(t,n)=>{let r=W(n.clipboardData),i=e.onImagePaste;return r.length===0||!i?!1:(G(t,r,{...e,onImagePaste:i}),!0)},handleDrop:(t,n)=>{let r=W(n.dataTransfer),i=e.onImagePaste;if(r.length===0||!i)return!1;let a=t.posAtCoords({left:n.clientX,top:n.clientY});return G(t,r,{...e,onImagePaste:i},a?.pos),!0}}})}function Kt(e){return d(s(Ut(e)),s(Gt(e)))}const qt={"Mod-b":`Bold`,"Mod-i":`Italic`,"Mod-e":`Inline code`,"Mod-Shift-x":`Strikethrough`,...Object.fromEntries(b.flatMap(e=>[[`Mod-${e}`,`Heading ${e}`],[`Mod-Alt-${e}`,`Heading ${e}`]]))},Jt=new Set([`MscGen`,`Xù`,`MsGenny`,`Angular Template`]),Yt=f.map(e=>e.name).filter(e=>!Jt.has(e)).map(e=>({label:e,value:e.toLowerCase()})).concat({label:`Plain text`,value:``}).sort((e,t)=>e.label.localeCompare(t.label));function K(e){let t=new Zt;return q(e,t),t.finish()}const Xt=[``,`# `,`## `,`### `,`#### `,`##### `,`###### `];var Zt=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{createEditor as e,defineBaseCommands as t,defineBaseKeymap as n,defineCommands as r,defineHistory as i,defineKeymap as a,defineMarkSpec as o,definePlugin as s,getMarkType as c,isApple as l,isAtBlockStart as u,toggleNode as d,union as f,unsetBlockType as ee,withSkipCodeBlock as te}from"@prosekit/core";import{defineBlockquote as ne}from"@prosekit/extensions/blockquote";import{defineCodeBlock as re,defineCodeBlockHighlight as ie}from"@prosekit/extensions/code-block";import{defineDoc as ae}from"@prosekit/extensions/doc";import{defineGapCursor as oe}from"@prosekit/extensions/gap-cursor";import{defineHorizontalRule as se}from"@prosekit/extensions/horizontal-rule";import{defineList as ce}from"@prosekit/extensions/list";import{defineModClickPrevention as le}from"@prosekit/extensions/mod-click-prevention";import{defineParagraph as ue}from"@prosekit/extensions/paragraph";import{defineText as de}from"@prosekit/extensions/text";import{defineVirtualSelection as fe}from"@prosekit/extensions/virtual-selection";import{LanguageDescription as pe}from"@codemirror/language";import{languages as p}from"@codemirror/language-data";import{classHighlighter as me}from"@lezer/highlight";import{createParser as he}from"prosemirror-highlight/lezer";import{defineHeadingCommands as ge,defineHeadingInputRule as _e,defineHeadingSpec as ve}from"@prosekit/extensions/heading";import{Plugin as m,PluginKey as h,TextSelection as g}from"@prosekit/pm/state";import{ReplaceStep as ye,Step as _,StepResult as v,Transform as y}from"@prosekit/pm/transform";import{Mark as be}from"@prosekit/pm/model";import{GFM as xe,parser as Se}from"@lezer/markdown";import{defineTableCellSpec as Ce,defineTableCommands as we,defineTableDropIndicator as Te,defineTableHeaderCellSpec as Ee,defineTableRowSpec as De,defineTableSpec as Oe}from"@prosekit/extensions/table";import{tableEditing as ke}from"prosemirror-tables";import{Decoration as b,DecorationSet as x}from"@prosekit/pm/view";import{definePlaceholder as Ae}from"@prosekit/extensions/placeholder";import{defineReadonly as je}from"@prosekit/extensions/readonly";const S=new Map;async function Me(e){let t=pe.matchLanguageName(p,e,!0);if(!t){S.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),S.set(e,null)}if(S.has(e))return;if(!n){S.set(e,null);return}let r=he({parse:e=>n.language.parser.parse(e.content),highlighter:me});S.set(e,r)}const Ne=e=>{let t=e.language?.trim();if(!t)return[];let n=S.get(t);return n?n(e):n===null?[]:Me(t)};function Pe(){return ie({parser:Ne,nodeTypes:[`codeBlock`]})}function C(e){return te(d({type:`heading`,attrs:{level:e}}))}const Fe=(e,t,n)=>u(e,n)?.parent.type.name===`heading`?ee()(e,t,n):!1;function Ie(){return a({"Mod-1":C(1),"Mod-2":C(2),"Mod-3":C(3),"Mod-4":C(4),"Mod-5":C(5),"Mod-6":C(6),Backspace:Fe})}function Le(){return f(ve(),_e(),ge(),Ie())}function Re(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function ze(e,t){let[n,r,i]=t;return[n,r,i.map(t=>be.fromJSON(e,t))]}var w=class e extends _{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return v.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 y(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new y(e),n.addMark(i,c,t));return!1})}return v.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return Be;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 ye(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(Re)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>ze(t,e)))}};_.jsonID(`batchSetMark`,w);const Be=new w([]);function Ve(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 He(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const Ue={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(!Ve(t))break;i||=He(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},We={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 Ge(e){return e.end}const T=Se.configure([xe,Ue,We]),Ke=T.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:Ge}]});function E(e){return T.parseInline(e,0)}function D(e,t,n=[]){for(let r of e)t(r)&&n.push(r),D(r.children,t,n);return n}function qe(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const O=qe(T);function Je(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 k=new Map([[O.Emphasis,`mdEm`],[O.StrongEmphasis,`mdStrong`],[O.InlineCode,`mdCode`],[O.Strikethrough,`mdDel`],[O.EmphasisMark,`mdMark`],[O.CodeMark,`mdMark`],[O.LinkMark,`mdMark`],[O.StrikethroughMark,`mdMark`],[O.URL,`mdLinkUri`],[O.Hashtag,`mdTag`],[O.Wikilink,`mdWikilink`],[O.WikilinkMark,`mdMark`]]);function Ye(e,t){let n=E(t),r=[];return A(n,[],0,t.length,t,e,r),r}function A(e,t,n,r,i,a,o){let s=n;for(let n of e){if(n.from>s&&j(o,s,n.from,t),n.type===O.Link||n.type===O.Image)Xe(n,t,i,a,o);else{let e=k.get(n.type),r=e?[...t,a.marks[e].create()]:t;n.children.length===0?j(o,n.from,n.to,r):A(n.children,r,n.from,n.to,i,a,o)}s=n.to}s<r&&j(o,s,r,t)}function Xe(e,t,n,r,i){let a=-1,o=null,s=0;for(let t of e.children)t.type===O.LinkMark?(s++,s===2&&(a=t.from)):t.type===O.URL&&o===null&&(o=t);let c=o?n.slice(o.from,o.to):``,l=c&&r.marks.mdLinkText?r.marks.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;j(i,d,a.from,e)}let e=u(a.from)?[...t,l]:t,o=k.get(a.type),s=o?[...e,r.marks[o].create()]:e;a.children.length===0?j(i,a.from,a.to,s):A(a.children,s,a.from,a.to,n,r,i),d=a.to}d<e.to&&j(i,d,e.to,t)}function j(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&Je(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const M=`inline-marks-applied`,N=new WeakMap;let Ze=0,Qe=0;function $e(e,t,n){let r=N.get(e);if(r?Qe++:(Ze++,r=Ye(n,e.textContent),N.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 et(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 tt(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=$e(t,r+1,e.schema);return i.length>0&&n.push(...i),!1}),n}function nt(){return new m({key:new h(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(M))return null;let r=tt(n,et(e,n));if(r.length===0)return null;let i=n.tr.step(new w(r));return i.setMeta(M,!0),i.setMeta(`addToHistory`,!1),i},view(e){return e.dispatch(rt(e.state)),{}}})}function rt(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function it(){return s(nt())}function at(){return o({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function ot(){return o({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function st(){return o({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function ct(){return o({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function lt(){return o({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 ut(){return o({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function dt(){return o({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function ft(){return o({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function pt(){return o({name:`mdWikilink`,inclusive:!1,toDOM:()=>[`span`,{class:`md-wikilink`},0],parseDOM:[{tag:`span.md-wikilink`}]})}function mt(){return f(at(),ot(),st(),ct(),lt(),ut(),dt(),ft(),pt())}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:O.Emphasis,delim:`*`},strong:{node:O.StrongEmphasis,delim:`**`},code:{node:O.InlineCode,delim:"`"},del:{node:O.Strikethrough,delim:`~~`}},ht=new Set([O.EmphasisMark,O.CodeMark,O.LinkMark,O.StrikethroughMark]);function I(e){return[e.children[0],e.children.at(-1)]}function L(e){let{type:t,children:n}=e;if(t===O.Emphasis||t===O.StrongEmphasis||t===O.Strikethrough)return[n[0].to,n.at(-1).from];if(t===O.Link||t===O.Image){let e=n.find((e,t)=>t>0&&e.type===O.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 gt(e,t,n){for(;t<n&&B(e[t]);)t++;for(;n>t&&B(e[n-1]);)n--;return[t,n]}function _t(e,t,n,r){let i=D(E(e),e=>e.type===r.node||ht.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 vt(e,t,n,r,i){let a=E(e),o=D(a,e=>e.type===r.node);return i?xt(e,o,t,n):yt(e,a,o,t,n,r)}function yt(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]=bt(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function bt(e,t,n,r,i){if(i.node!==O.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 xt(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 St(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=E(e),o=D(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 Ct(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]=gt(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:_t(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>vt(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(g.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 Ct(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=St(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(g.create(o.doc,i+a.pos)),a.kind===`insert`&&(o.insertText(e.delim+e.delim,i+a.pos),o.setSelection(g.create(o.doc,i+a.pos+e.delim.length))),n(o.scrollIntoView())}return!0}function wt(){return r({toggleEm:()=>H(F.em),toggleStrong:()=>H(F.strong),toggleCode:()=>H(F.code),toggleDel:()=>H(F.del)})}function Tt(){return a({"Mod-b":H(F.strong),"Mod-i":H(F.em),"Mod-e":H(F.code),"Mod-Shift-x":H(F.del)})}function Et(){return f(wt(),Tt())}function Dt(){return f(Oe(),De(),Ce(),Ee(),s(ke()),we(),Te())}function Ot(){return f(ue(),ae(),de(),ne(),ce(),Le(),Dt(),re(),se(),mt(),Pe(),it(),Et(),n(),t(),i(),oe(),fe(),le())}function U(){return Ot()}const kt=new Set([`mdStrong`,`mdEm`,`mdCode`,`mdDel`,`mdLinkText`,`mdLinkUri`,`mdWikilink`]),At=new Set([`mdMark`,`mdLinkUri`]),jt=new Set([`mdMark`,`mdLinkUri`]),W=new Set([`mdLinkText`,`mdLinkUri`]),Mt=new Set([`mdStrong`,`mdEm`,`mdCode`,`mdDel`,`mdWikilink`]);function Nt(e){return new m({key:new h(`mark-mode`),props:{attributes:{"data-mark-mode":e},decorations:e===`focus`?e=>It(e):void 0,clipboardTextSerializer:e===`show`?void 0:Ft}})}function Pt(e){return s(Nt(e))}function Ft(e){let t=[];return e.content.forEach(e=>{let n=[];e.descendants(e=>!e.isText||!e.text?!0:(e.marks.some(e=>jt.has(e.type.name))||n.push(e.text),!1)),t.push(n.join(``))}),t.join(`
2
+ `)}function It(e){let{$anchor:t,empty:n}=e.selection;if(!n)return x.empty;let r=t.parent;if(!r.isTextblock)return null;let i=t.start(),a=t.parentOffset,o=Lt(r,a);if(o.size===0)return x.empty;let s=[],c=new Set,l=!1;for(let e of o)if(W.has(e)){if(l)continue;l=!0,zt(r,i,a,s,c)}else Rt(r,i,e,a,s,c);let u=s.map(([e,t])=>b.inline(e,t,{class:`show`}));return x.create(e.doc,u)}function Lt(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;kt.has(e)&&n.add(e)}r=i}),n}function Rt(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 zt(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:Mt.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(At.has(e)){let e=`${t}_${s}`;a.has(e)||(a.add(e),i.push([t,s]));break}}o=s})}const Bt=new h(`meowdown-wikilink-click`);function Vt(e,t){let n=c(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,l,u=0;if(i.forEach(e=>{let r=a+u;u+=e.nodeSize;let i=a+u;n.isInSet(e.marks)?(o<0&&(o=r),s=i):(o>=0&&o<=t&&t<=s&&(l={from:o,to:s}),o=-1)}),o>=0&&o<=t&&t<=s&&(l={from:o,to:s}),l)return{from:l.from,to:l.to,target:Ht(e.doc.textBetween(l.from,l.to))}}function Ht(e){let t=e.replace(/^\[\[/u,``).replace(/\]\]$/u,``),n=t.indexOf(`|`);return(n>=0?t.slice(0,n):t).trim()}function Ut(e){let t;return s(new m({key:Bt,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=Vt(n.state,r);return!a||!(l?i.metaKey:i.ctrlKey)&&t?.empty&&t.from>=a.from&&t.to<=a.to?!1:(e({target:a.target,event:i}),!0)}}}))}function Wt(e){let t=[],n=D(E(e),e=>e.type===O.Image);for(let r of n){let n=r.children.find(e=>e.type===O.URL),i=r.children.filter(e=>e.type===O.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}const q=new h(`meowdown-images`);function Gt(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 Wt(e.textContent))t.push({widgetAt:n+e.nodeSize-1,alt:r.alt,src:r.src});return!1}),t}function J(e,t){let n=[];for(let r of Gt(e)){let e=t.resolveImageUrl(r.src);e&&n.push(b.widget(r.widgetAt,()=>{let t=document.createElement(`div`);t.className=`md-image`,t.contentEditable=`false`;let n=document.createElement(`img`);return n.src=e,n.alt=r.alt,n.draggable=!1,t.appendChild(n),t},{key:`md-image:${e}`,side:1}))}return x.create(e.doc,n)}function Kt(e){return new m({key:q,state:{init:(t,n)=>J(n,e),apply:(t,n,r,i)=>t.docChanged?J(i,e):n},props:{decorations:e=>q.getState(e)}})}function Y(e){return e?Array.from(e.files).filter(e=>e.type.startsWith(`image/`)):[]}function qt(e,t,n){e.onImageSaveError?e.onImageSaveError(t,n):console.error(`[meowdown] failed to save pasted image:`,t)}async function Jt(e,t,n,r){let i=r;for(let r of t){let t;try{t=await n.onImagePaste(r)}catch(e){qt(n,e,r);continue}if(!t||e.isDestroyed)continue;let a=`![](${t})`,o=i==null?e.state.tr.insertText(a):e.state.tr.insertText(a,i);e.dispatch(o),i!=null&&(i+=a.length)}}function Yt(e){return new m({props:{handlePaste:(t,n)=>{let r=Y(n.clipboardData),i=e.onImagePaste;return r.length===0||!i?!1:(Jt(t,r,{...e,onImagePaste:i}),!0)},handleDrop:(t,n)=>{let r=Y(n.dataTransfer),i=e.onImagePaste;if(r.length===0||!i)return!1;let a=t.posAtCoords({left:n.clientX,top:n.clientY});return Jt(t,r,{...e,onImagePaste:i},a?.pos),!0}}})}function Xt(e){return f(s(Kt(e)),s(Yt(e)))}const Zt={"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`},Qt=new Set([`MscGen`,`Xù`,`MsGenny`,`Angular Template`]),$t=p.map(e=>e.name).filter(e=>!Qt.has(e)).map(e=>({label:e,value:e.toLowerCase()})).concat({label:`Plain text`,value:``}).sort((e,t)=>e.label.localeCompare(t.label));function en(e){let t=new nn;return rn(e,t),t.finish()}const tn=[``,`# `,`## `,`### `,`#### `,`##### `,`###### `];var nn=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 q(e,t){switch(e.type.name){case`doc`:J(e,t);return;case`paragraph`:X(e,t),t.closeBlock();return;case`heading`:{let n=e.attrs.level;t.write(Xt[n]??`# `),X(e,t),t.closeBlock();return}case`blockquote`:t.withPrefix(`> `,`> `,()=>J(e,t)),t.closeBlock();return;case`list`:$t(e,t,Y(e));return;case`codeBlock`:en(e,t);return;case`horizontalRule`:t.write(`---`),t.closeBlock();return;case`table`:tn(e,t);return;case`text`:e.text&&t.write(e.text);return}}function J(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(),q(a,t),i++;continue}let o=i+1;for(;o<r&&e.child(o).type.name===`list`;)o++;let s=Qt(e,i,o);for(let r=i;r<o;r++)(r===i?n&&i>0:s)&&t.suppressBlank(),$t(e.child(r),t,s);i=o}}function Qt(e,t,n){for(let r=t;r<n;r++)if(!Y(e.child(r)))return!1;return!0}function Y(e){let t=e.childCount;for(let n=0;n<t;n++){let t=e.child(n);if(t.type.name!==`list`&&!(t.type.name===`paragraph`&&n===0))return!1}return!0}function X(e,t){let n=e.childCount;for(let r=0;r<n;r++){let n=e.child(r);n.isText&&n.text&&t.write(n.text)}}function $t(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,()=>J(e,t,n)),t.closeBlock()}function en(e,t){let n=e.attrs.language??``,r=e.textContent,i="`".repeat(pt(r,2)+1);t.write(i),n&&t.write(n),t.write(`
8
+ `),this.deferredBlankPrefix=null)}};function rn(e,t){switch(e.type.name){case`doc`:X(e,t);return;case`paragraph`:sn(e,t),t.closeBlock();return;case`heading`:{let n=e.attrs.level;t.write(tn[n]??`# `),sn(e,t),t.closeBlock();return}case`blockquote`:t.withPrefix(`> `,`> `,()=>X(e,t)),t.closeBlock();return;case`list`:cn(e,t,on(e));return;case`codeBlock`:ln(e,t);return;case`horizontalRule`:t.write(`---`),t.closeBlock();return;case`table`:un(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=an(e,i,o);for(let r=i;r<o;r++)(r===i?n&&i>0:s)&&t.suppressBlank(),cn(e.child(r),t,s);i=o}}function an(e,t,n){for(let r=t;r<n;r++)if(!on(e.child(r)))return!1;return!0}function on(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 sn(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 cn(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 ln(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(`
9
9
  `),t.write(r),t.write(`
10
- `),t.write(i),t.closeBlock()}function tn(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(rn(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(nn(s,i)),t.write(`
10
+ `),t.write(i),t.closeBlock()}function un(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(dn(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(Z(s,i)),t.write(`
11
11
  `),t.write(o);for(let e=0;e<n;e++)e!==a&&(t.write(`
12
- `),t.write(nn(r[e],i)));t.closeBlock()}function nn(e,t){let n=`|`;for(let r=0;r<t;r++)n+=` `+(e[r]??``)+` |`;return n}function rn(e){let t=e.textContent.trim();return!t.includes(`|`)&&!t.includes(`
12
+ `),t.write(Z(r[e],i)));t.closeBlock()}function Z(e,t){let n=`|`;for(let r=0;r<t;r++)n+=` `+(e[r]??``)+` |`;return n}function dn(e){let t=e.textContent.trim();return!t.includes(`|`)&&!t.includes(`
13
13
  `)?t:t.replaceAll(`|`,String.raw`\|`).replaceAll(`
14
- `,` `)}function an(e,t){let n=on(e,Ue.parse(t).cursor(),t);return e.nodes.doc(n)}function on(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 T.ATXHeading1:return[Q(e,t,n,1)];case T.ATXHeading2:return[Q(e,t,n,2)];case T.ATXHeading3:return[Q(e,t,n,3)];case T.ATXHeading4:return[Q(e,t,n,4)];case T.ATXHeading5:return[Q(e,t,n,5)];case T.ATXHeading6:return[Q(e,t,n,6)];case T.SetextHeading1:return[Q(e,t,n,1)];case T.SetextHeading2:return[Q(e,t,n,2)];case T.Paragraph:return[sn(e,t,n)];case T.Blockquote:return[cn(e,t,n)];case T.BulletList:return ln(e,t,n,`bullet`,1);case T.OrderedList:return un(e,t,n);case T.FencedCode:case T.CodeBlock:return[pn(e,t,n)];case T.HorizontalRule:return[e.nodes.horizontalRule()];case T.Table:return[mn(e,t,n)];case T.Task:return[sn(e,t,n)];default:return[]}}function Q(e,t,n,r){let i=t.from,a=t.to;if(t.firstChild()){t.type.id===T.HeaderMark&&(i=t.to);let e=-1,n=-1;do e=t.type.id,n=t.from;while(t.nextSibling());e===T.HeaderMark&&n>i&&(a=n),t.parent()}let o=n.slice(i,a).trim();return e.nodes.heading({level:r},o)}function sn(e,t,n){let r=n.slice(t.from,t.to);return e.nodes.paragraph(r)}function cn(e,t,n){let r=[];if(t.firstChild()){do{if(t.type.id===T.QuoteMark)continue;r.push(...Z(e,t,n))}while(t.nextSibling());t.parent()}return e.nodes.blockquote(r)}function ln(e,t,n,r,i){let a=[];if(t.firstChild()){do t.type.id===T.ListItem&&a.push(dn(e,t,n,r,i));while(t.nextSibling());t.parent()}return a}function un(e,t,n){let r=1;if(t.firstChild()){if(t.type.id===T.ListItem&&t.firstChild()){if(t.type.id===T.ListMark){let e=n.slice(t.from,t.to),i=Number.parseInt(e,10);Number.isFinite(i)&&(r=i)}t.parent()}t.parent()}return ln(e,t,n,`ordered`,r)}function dn(e,t,n,r,i){let a=[],o=null;if(t.firstChild()){do{if(t.type.id===T.ListMark)continue;if(r===`bullet`&&t.type.id===T.Task){let r=fn(e,t,n);o=r.checked,a.push(r.paragraph);continue}a.push(...Z(e,t,n))}while(t.nextSibling());t.parent()}return e.nodes.list({kind:o===null?r:`task`,order:r===`ordered`?i:null,checked:o??!1,collapsed:!1},a)}function fn(e,t,n){let r=!1,i=t.from,a=t.to;t.firstChild()&&(t.type.id===T.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.nodes.paragraph():e.nodes.paragraph(o)}}function pn(e,t,n){let r=``,i=``;if(t.firstChild()){do switch(t.type.id){case T.CodeInfo:r=n.slice(t.from,t.to);break;case T.CodeText:i=n.slice(t.from,t.to);break}while(t.nextSibling());t.parent()}return e.nodes.codeBlock({language:r},i)}function mn(e,t,n){let r=[];if(t.firstChild()){do{let i=t.type.id;i===T.TableHeader?r.push(hn(e,t,n,!0)):i===T.TableRow&&r.push(hn(e,t,n,!1))}while(t.nextSibling());t.parent()}return e.nodes.table(r)}function hn(e,t,n,r){let i=[];if(t.firstChild()){do if(t.type.id===T.TableCell){let a=n.slice(t.from,t.to).trim(),o=e.nodes.paragraph(a);i.push(r?e.nodes.tableHeaderCell(o):e.nodes.tableCell(o))}while(t.nextSibling());t.parent()}return e.nodes.tableRow(i)}let $;function gn(){return $??=e({extension:R()}),$}function _n(e){return e.replace(/\n+$/u,``)}function vn(e){return e.split(`
15
- `).filter(e=>e.trim()!==``)}function yn(e){let t=K(an(gn(),e));if(_n(t)===_n(e))return`exact`;let n=vn(e),r=vn(t);return n.length===r.length&&n.every((e,t)=>e===r[t])?`normalizing`:`lossy`}export{qt as EDITOR_KEY_BINDINGS,yn as checkRoundTrip,Yt as codeBlockLanguages,R as defineEditorExtension,Kt as defineImages,jt as defineMarkMode,ke as definePlaceholder,Ae as defineReadonly,Bt as defineWikilinkClickHandler,K as docToMarkdown,an as markdownToDoc};
14
+ `,` `)}function fn(e,t){let n=pn(e,Ke.parse(t).cursor(),t);return e.nodes.doc(n)}function pn(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 O.ATXHeading1:return[$(e,t,n,1)];case O.ATXHeading2:return[$(e,t,n,2)];case O.ATXHeading3:return[$(e,t,n,3)];case O.ATXHeading4:return[$(e,t,n,4)];case O.ATXHeading5:return[$(e,t,n,5)];case O.ATXHeading6:return[$(e,t,n,6)];case O.SetextHeading1:return[$(e,t,n,1)];case O.SetextHeading2:return[$(e,t,n,2)];case O.Paragraph:return[mn(e,t,n)];case O.Blockquote:return[hn(e,t,n)];case O.BulletList:return gn(e,t,n,`bullet`,1);case O.OrderedList:return _n(e,t,n);case O.FencedCode:case O.CodeBlock:return[bn(e,t,n)];case O.HorizontalRule:return[e.nodes.horizontalRule()];case O.Table:return[xn(e,t,n)];case O.Task:return[mn(e,t,n)];default:return[]}}function $(e,t,n,r){let i=t.from,a=t.to;if(t.firstChild()){t.type.id===O.HeaderMark&&(i=t.to);let e=-1,n=-1;do e=t.type.id,n=t.from;while(t.nextSibling());e===O.HeaderMark&&n>i&&(a=n),t.parent()}let o=n.slice(i,a).trim();return e.nodes.heading({level:r},o)}function mn(e,t,n){let r=n.slice(t.from,t.to);return e.nodes.paragraph(r)}function hn(e,t,n){let r=[];if(t.firstChild()){do{if(t.type.id===O.QuoteMark)continue;r.push(...Q(e,t,n))}while(t.nextSibling());t.parent()}return e.nodes.blockquote(r)}function gn(e,t,n,r,i){let a=[];if(t.firstChild()){do t.type.id===O.ListItem&&a.push(vn(e,t,n,r,i));while(t.nextSibling());t.parent()}return a}function _n(e,t,n){let r=1;if(t.firstChild()){if(t.type.id===O.ListItem&&t.firstChild()){if(t.type.id===O.ListMark){let e=n.slice(t.from,t.to),i=Number.parseInt(e,10);Number.isFinite(i)&&(r=i)}t.parent()}t.parent()}return gn(e,t,n,`ordered`,r)}function vn(e,t,n,r,i){let a=[],o=null;if(t.firstChild()){do{if(t.type.id===O.ListMark)continue;if(r===`bullet`&&t.type.id===O.Task){let r=yn(e,t,n);o=r.checked,a.push(r.paragraph);continue}a.push(...Q(e,t,n))}while(t.nextSibling());t.parent()}return e.nodes.list({kind:o===null?r:`task`,order:r===`ordered`?i:null,checked:o??!1,collapsed:!1},a)}function yn(e,t,n){let r=!1,i=t.from,a=t.to;t.firstChild()&&(t.type.id===O.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.nodes.paragraph():e.nodes.paragraph(o)}}function bn(e,t,n){let r=``,i=``;if(t.firstChild()){do switch(t.type.id){case O.CodeInfo:r=n.slice(t.from,t.to);break;case O.CodeText:i=n.slice(t.from,t.to);break}while(t.nextSibling());t.parent()}return e.nodes.codeBlock({language:r},i)}function xn(e,t,n){let r=[];if(t.firstChild()){do{let i=t.type.id;i===O.TableHeader?r.push(Sn(e,t,n,!0)):i===O.TableRow&&r.push(Sn(e,t,n,!1))}while(t.nextSibling());t.parent()}return e.nodes.table(r)}function Sn(e,t,n,r){let i=[];if(t.firstChild()){do if(t.type.id===O.TableCell){let a=n.slice(t.from,t.to).trim(),o=e.nodes.paragraph(a);i.push(r?e.nodes.tableHeaderCell(o):e.nodes.tableCell(o))}while(t.nextSibling());t.parent()}return e.nodes.tableRow(i)}let Cn;function wn(){return Cn??=e({extension:U()}),Cn}function Tn(e){return e.replace(/\n+$/u,``)}function En(e){return e.split(`
15
+ `).filter(e=>e.trim()!==``)}function Dn(e){let t=en(fn(wn(),e));if(Tn(t)===Tn(e))return`exact`;let n=En(e),r=En(t);return n.length===r.length&&n.every((e,t)=>e===r[t])?`normalizing`:`lossy`}export{Zt as EDITOR_KEY_BINDINGS,Dn as checkRoundTrip,$t as codeBlockLanguages,U as defineEditorExtension,Xt as defineImages,Pt as defineMarkMode,Ae as definePlaceholder,je as defineReadonly,Ut as defineWikilinkClickHandler,en as docToMarkdown,fn as markdownToDoc};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@meowdown/core",
3
3
  "type": "module",
4
- "version": "0.4.0",
4
+ "version": "0.7.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",