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