@meowdown/core 0.31.0 → 0.32.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 +30 -17
- package/dist/index.d.ts +257 -55
- package/dist/index.js +16 -14
- package/dist/style.css +55 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -52,21 +52,32 @@ const markdown = docToMarkdown(editor.state.doc)
|
|
|
52
52
|
|
|
53
53
|
`Mod` is Cmd on macOS and Ctrl elsewhere. Each formatting shortcut inserts or removes the literal Markdown delimiters around the selection; each heading shortcut toggles the current block to that level (or back to a paragraph).
|
|
54
54
|
|
|
55
|
-
| Key
|
|
56
|
-
|
|
|
57
|
-
| `Mod-B`
|
|
58
|
-
| `Mod-I`
|
|
59
|
-
| `Mod-E`
|
|
60
|
-
| `Mod-Shift-X`
|
|
61
|
-
| `Mod-Shift-H`
|
|
62
|
-
| `Mod-K`
|
|
63
|
-
| `Mod-
|
|
64
|
-
| `Mod-
|
|
65
|
-
| `Mod-
|
|
66
|
-
| `Mod-
|
|
67
|
-
| `Mod-
|
|
68
|
-
| `Mod-
|
|
69
|
-
| `Mod
|
|
55
|
+
| Key | Action | Markdown |
|
|
56
|
+
| ----------------- | --------------------------------------------------------- | ------------------- |
|
|
57
|
+
| `Mod-B` | Bold | `**bold**` |
|
|
58
|
+
| `Mod-I` | Italic | `*italic*` |
|
|
59
|
+
| `Mod-E` | Inline code | `` `code` `` |
|
|
60
|
+
| `Mod-Shift-X` | Strikethrough | `~~strikethrough~~` |
|
|
61
|
+
| `Mod-Shift-H` | Highlight | `==highlight==` |
|
|
62
|
+
| `Mod-K` | Link | `[text](url)` |
|
|
63
|
+
| `Mod-Shift-K` | Insert a wikilink | `[[target]]` |
|
|
64
|
+
| `Mod-1` | Heading 1 | `# heading` |
|
|
65
|
+
| `Mod-2` | Heading 2 | `## heading` |
|
|
66
|
+
| `Mod-3` | Heading 3 | `### heading` |
|
|
67
|
+
| `Mod-4` | Heading 4 | `#### heading` |
|
|
68
|
+
| `Mod-5` | Heading 5 | `##### heading` |
|
|
69
|
+
| `Mod-6` | Heading 6 | `###### heading` |
|
|
70
|
+
| `Mod-.` | Fold or unfold a bullet | |
|
|
71
|
+
| `Mod-Enter` | Follow the link under the caret, or cycle a checkbox task | `- [ ]` / `- [x]` |
|
|
72
|
+
| `Mod-Shift-Enter` | Cycle a circle checkbox task | `+ [ ]` / `+ [x]` |
|
|
73
|
+
| `Mod-Shift-7` | Ordered list | `1. item` |
|
|
74
|
+
| `Mod-Shift-8` | Bullet list | `- item` |
|
|
75
|
+
| `Mod-Shift-9` | Checkbox task list | `- [ ] item` |
|
|
76
|
+
| `Alt-ArrowUp` | Move the block or list item up | |
|
|
77
|
+
| `Alt-ArrowDown` | Move the block or list item down | |
|
|
78
|
+
| `Escape` | Collapse the selection | |
|
|
79
|
+
|
|
80
|
+
The list-type toggles wrap the current block, convert a list of a different kind in place, and unwrap a list of the same kind back to a paragraph. `Mod-Shift-7/8/9` follow the physical digit key, so they work on layouts where Shift+digit types punctuation. `Alt-ArrowUp`/`Alt-ArrowDown` move a list item together with its nested children, or swap a non-list block with its neighbor. Typing `[` over a selection wraps it into an open wikilink (`[[selection`) with the wikilink menu searching it.
|
|
70
81
|
|
|
71
82
|
`EDITOR_KEY_BINDINGS` is a literal (`as const`) object mapping every key above to its description, for host settings UIs and keybinding-collision checks.
|
|
72
83
|
|
|
@@ -92,7 +103,7 @@ Two things the variable list cannot show: `--meowdown-gutter` is the horizontal
|
|
|
92
103
|
|
|
93
104
|
Tags (`#tag`) render as pills via the `.md-tag` class, tinted from `--meowdown-accent`. Wire click handling with `defineTagClickHandler(({ tag, event }) => ...)` (or `@meowdown/react`'s `onTagClick` prop); `tag` is read from the rendered text without the leading `#`.
|
|
94
105
|
|
|
95
|
-
Wikilinks (`[[target]]`/`[[target|alias]]`) render in place via a mark view as an immutable label (the alias, or the target when there is no alias), with the raw source hidden in hide and focus modes and shown dimmed in show mode. The label uses the `.md-wikilink-view-label` class, dashed-underlined and colored by `--meowdown-accent`. In every mark mode the link is a single immutable caret stop: arrowing onto it selects the whole source (ringed with `--meowdown-node-outline` in hide and focus, the native selection over the visible source in show), and Backspace/Delete remove it as a unit. Wire click navigation with `defineWikilinkClickHandler(({ target, event }) => ...)` (or `@meowdown/react`'s `onWikilinkClick` prop)
|
|
106
|
+
Wikilinks (`[[target]]`/`[[target|alias]]`) render in place via a mark view as an immutable label (the alias, or the target when there is no alias), with the raw source hidden in hide and focus modes and shown dimmed in show mode. The label uses the `.md-wikilink-view-label` class, dashed-underlined and colored by `--meowdown-accent`. In every mark mode the link is a single immutable caret stop: arrowing onto it selects the whole source (ringed with `--meowdown-node-outline` in hide and focus, the native selection over the visible source in show), and Backspace/Delete remove it as a unit. Wire click navigation with `defineWikilinkClickHandler(({ target, event }) => ...)` (or `@meowdown/react`'s `onWikilinkClick` prop); `Mod-Enter` with the caret on a wikilink, tag, or Markdown link fires the same handler, with the `KeyboardEvent` as `event`.
|
|
96
107
|
|
|
97
108
|
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).
|
|
98
109
|
|
|
@@ -100,7 +111,9 @@ Bare URLs autolink without `[text](url)` brackets and share the same `.md-link`
|
|
|
100
111
|
|
|
101
112
|
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`](https://npmx.dev/package-docs/@meowdown%2Fcore#function-defineImage) (or `@meowdown/react`'s image props) and wire click handling with [`defineImageClickHandler`](https://npmx.dev/package-docs/@meowdown%2Fcore#function-defineImageClickHandler) (`@meowdown/react`'s `onImageClick` prop).
|
|
102
113
|
|
|
103
|
-
Pasted or dropped files persist through [`defineFilePaste`](https://npmx.dev/package-docs/@meowdown%2Fcore#function-defineFilePaste) (or `@meowdown/react`'s `onFilePaste` prop): the handler persists each file and returns its markdown destination. An image (`image/*` MIME type) inserts ``; any other file inserts a `[name](src)` link; multiple files insert one link per line, in the order they appear in the drop. Without `onFilePaste`, file events are left to the browser's default handling.
|
|
114
|
+
Pasted or dropped files persist through [`defineFilePaste`](https://npmx.dev/package-docs/@meowdown%2Fcore#function-defineFilePaste) (or `@meowdown/react`'s `onFilePaste` prop): the handler persists each file and returns its markdown destination. An image (`image/*` MIME type) inserts ``; any other file inserts a `[name](src)` link; multiple files insert one link per line, in the order they appear in the drop. Without `onFilePaste`, file events are left to the browser's default handling. A host command that inserts file links itself (e.g. an attach-file picker) can build the same markdown with [`buildFileMarkdown`](https://npmx.dev/package-docs/@meowdown%2Fcore#function-buildFileMarkdown).
|
|
115
|
+
|
|
116
|
+
A host can render chosen file links as inline **file pills**: pass `resolveFileLink` to [`defineEditorExtension`](https://npmx.dev/package-docs/@meowdown%2Fcore#function-defineEditorExtension) (or `@meowdown/react`'s `resolveFileLink` prop) to claim links by their href (e.g. everything under `assets/`), and add [`defineFileView`](https://npmx.dev/package-docs/@meowdown%2Fcore#function-defineFileView) to render each claimed link as a pill: a file-kind icon, the name, and the size supplied (possibly async) by `resolveFileInfo`. The markdown text is untouched, and a claimed link behaves like an image: one caret unit with an editable source, clicks (and `Mod-Enter` with the caret on it) reported through [`defineFileClickHandler`](https://npmx.dev/package-docs/@meowdown%2Fcore#function-defineFileClickHandler) (`@meowdown/react`'s `onFileClick`) rather than the link click handler, and no link hover or edit menu.
|
|
104
117
|
|
|
105
118
|
Rendered images are resizable: drag the corner handle and the chosen size is written back into the source as a trailing comment, `<!-- {"width":320,"height":240} -->`, which round-trips as plain Markdown. A comment immediately after an image is folded into its mark and drives the image's `width` and `height` attributes, so the box keeps its dimensions before the image loads; any other comment stays literal text.
|
|
106
119
|
|
package/dist/index.d.ts
CHANGED
|
@@ -131,6 +131,18 @@ interface MdWikilinkAttrs {
|
|
|
131
131
|
target: string;
|
|
132
132
|
display: string;
|
|
133
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Attributes of the `mdFile` mark: a whole `[label](url)` link that the host's
|
|
136
|
+
* `resolveFileLink` claimed as a file attachment, rendered as a file pill.
|
|
137
|
+
*/
|
|
138
|
+
interface MdFileAttrs {
|
|
139
|
+
/** The link destination, exactly as written in the source. */
|
|
140
|
+
href: string;
|
|
141
|
+
/** The display name: the raw label slice, or the `href` basename when the label is empty. */
|
|
142
|
+
name: string;
|
|
143
|
+
/** The link title, or `''` when the source has none. */
|
|
144
|
+
title: string;
|
|
145
|
+
}
|
|
134
146
|
/** mdPack keys for units that store no extra data; the syntax marks carry it. */
|
|
135
147
|
type MdPackSimpleKey = 'bold' | 'italic' | 'code' | 'strike' | 'highlight' | 'autolink';
|
|
136
148
|
/**
|
|
@@ -212,8 +224,96 @@ interface LinkEditOptions {
|
|
|
212
224
|
type LinkEditHandler = (options: LinkEditOptions) => void;
|
|
213
225
|
declare function defineLinkEditKeymap(onLinkEdit: LinkEditHandler): PlainExtension;
|
|
214
226
|
//#endregion
|
|
227
|
+
//#region src/extensions/pending-replacement.d.ts
|
|
228
|
+
/** Where an accepted replacement lands relative to the source range. */
|
|
229
|
+
type PendingReplacementMode = 'replace' | 'append';
|
|
230
|
+
/** How a pending replacement ended. */
|
|
231
|
+
type PendingReplacementOutcome = 'accepted' | 'discarded';
|
|
232
|
+
/**
|
|
233
|
+
* A staged replacement: Markdown text accumulating over `[from, to]` that is
|
|
234
|
+
* only written into the document when accepted. Until then the document is
|
|
235
|
+
* untouched; discarding is a no-op.
|
|
236
|
+
*/
|
|
237
|
+
interface PendingReplacement {
|
|
238
|
+
/** Start of the source range the replacement targets. */
|
|
239
|
+
from: number;
|
|
240
|
+
/** End of the source range the replacement targets. */
|
|
241
|
+
to: number;
|
|
242
|
+
/** The Markdown accumulated so far (e.g. streamed from an AI provider). */
|
|
243
|
+
text: string;
|
|
244
|
+
/** Whether accepting replaces the source range or inserts after its block. */
|
|
245
|
+
mode: PendingReplacementMode;
|
|
246
|
+
}
|
|
247
|
+
/** The active pending replacement, or null when there is none. */
|
|
248
|
+
declare function getPendingReplacement(state: EditorState): PendingReplacement | null;
|
|
249
|
+
/** Options for the `startPendingReplacement` command. */
|
|
250
|
+
interface StartPendingReplacementOptions extends PositionRange {
|
|
251
|
+
mode: PendingReplacementMode;
|
|
252
|
+
}
|
|
253
|
+
/** Options for the `acceptPendingReplacement` command. */
|
|
254
|
+
interface AcceptPendingReplacementOptions {
|
|
255
|
+
/** Overrides the staged mode for this accept (e.g. "Insert below" on a replace stage). */
|
|
256
|
+
mode?: PendingReplacementMode;
|
|
257
|
+
}
|
|
258
|
+
/** A pending-replacement change: text/range updates, or how the stage ended. */
|
|
259
|
+
type PendingReplacementEvent = {
|
|
260
|
+
type: 'update';
|
|
261
|
+
pending: PendingReplacement;
|
|
262
|
+
} | {
|
|
263
|
+
type: 'ended';
|
|
264
|
+
pending: PendingReplacement;
|
|
265
|
+
outcome: PendingReplacementOutcome;
|
|
266
|
+
};
|
|
267
|
+
type PendingReplacementHandler = (event: PendingReplacementEvent) => void;
|
|
268
|
+
/**
|
|
269
|
+
* Watches pending-replacement state and reports changes, so a UI layer can
|
|
270
|
+
* render the preview and know whether the stage was accepted or discarded.
|
|
271
|
+
*/
|
|
272
|
+
declare function definePendingReplacementHandler(handler: PendingReplacementHandler): PlainExtension;
|
|
273
|
+
//#endregion
|
|
274
|
+
//#region src/extensions/mark-chunk.d.ts
|
|
275
|
+
/**
|
|
276
|
+
* Contiguous range with a uniform inline-mark set.
|
|
277
|
+
*/
|
|
278
|
+
type MarkChunk = readonly [from: number, to: number, marks: readonly Mark[]];
|
|
279
|
+
//#endregion
|
|
280
|
+
//#region src/extensions/inline-text-to-mark-chunks.d.ts
|
|
281
|
+
/** What {@link FileLinkResolver} sees for one `[label](url)` link. */
|
|
282
|
+
interface FileLinkPayload {
|
|
283
|
+
/** The link destination, exactly as written in the source. */
|
|
284
|
+
href: string;
|
|
285
|
+
/** The raw label slice between the brackets; may be empty or contain nested syntax. */
|
|
286
|
+
label: string;
|
|
287
|
+
/** The link title, or `''` when the source has none. */
|
|
288
|
+
title: string;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Claims a `[label](url)` link as a file attachment. A claimed link carries a
|
|
292
|
+
* single `mdFile` mark over its whole source (rendered as a file pill by
|
|
293
|
+
* `defineFileView`) instead of the usual link marks, so link click/hover/menu
|
|
294
|
+
* no longer apply to it. Must be pure: parse results are cached and diffed,
|
|
295
|
+
* so the same input must always produce the same answer.
|
|
296
|
+
*/
|
|
297
|
+
type FileLinkResolver = (link: FileLinkPayload) => boolean;
|
|
298
|
+
/** Host options that influence inline parsing. */
|
|
299
|
+
interface FileLinkOptions {
|
|
300
|
+
resolveFileLink?: FileLinkResolver;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Walk a textblock's inline content and produce a list of mark chunks
|
|
304
|
+
* with positions relative to the start of `text` (i.e. zero-based).
|
|
305
|
+
* Callers shift the chunks into the document's coordinate space.
|
|
306
|
+
*/
|
|
307
|
+
declare function inlineTextToMarkChunks(/** Typed mark builders bound to the target schema. */
|
|
308
|
+
|
|
309
|
+
marks: TypedMarkBuilders, /** The raw inline text of one textblock (no block prefix). */
|
|
310
|
+
|
|
311
|
+
text: string, /** Host options; omit for the default parse. */
|
|
312
|
+
|
|
313
|
+
options?: FileLinkOptions): MarkChunk[];
|
|
314
|
+
//#endregion
|
|
215
315
|
//#region src/extensions/extension.d.ts
|
|
216
|
-
declare function defineEditorExtensionImpl(): import("@prosekit/core").Union<readonly [import("@prosekit/core").Extension<{
|
|
316
|
+
declare function defineEditorExtensionImpl(options: EditorExtensionOptions): import("@prosekit/core").Union<readonly [import("@prosekit/core").Extension<{
|
|
217
317
|
Nodes: import("@prosekit/core").SimplifyDeeper<{
|
|
218
318
|
paragraph: import("@prosekit/pm/model").Attrs;
|
|
219
319
|
}>;
|
|
@@ -330,11 +430,15 @@ declare function defineEditorExtensionImpl(): import("@prosekit/core").Union<rea
|
|
|
330
430
|
Marks: {
|
|
331
431
|
mdImage: MdImageAttrs;
|
|
332
432
|
};
|
|
433
|
+
}>, import("@prosekit/core").Extension<{
|
|
434
|
+
Marks: {
|
|
435
|
+
mdFile: MdFileAttrs;
|
|
436
|
+
};
|
|
333
437
|
}>, import("@prosekit/core").Extension<{
|
|
334
438
|
Marks: {
|
|
335
439
|
mdPack: MdPackAttrs;
|
|
336
440
|
};
|
|
337
|
-
}>]>, import("@prosekit/core").Extension<import("@prosekit/core").ExtensionTyping<any, any, any>>, import("@prosekit/core").PlainExtension, import("@prosekit/core").Union<readonly [import("@prosekit/core").Extension<{
|
|
441
|
+
}>]>, import("@prosekit/core").Extension<import("@prosekit/core").ExtensionTyping<any, any, any>>, import("@prosekit/core").PlainExtension, import("@prosekit/core").PlainExtension, import("@prosekit/core").PlainExtension, import("@prosekit/core").Union<readonly [import("@prosekit/core").Extension<{
|
|
338
442
|
Commands: {
|
|
339
443
|
toggleEm: [];
|
|
340
444
|
toggleStrong: [];
|
|
@@ -354,9 +458,22 @@ declare function defineEditorExtensionImpl(): import("@prosekit/core").Union<rea
|
|
|
354
458
|
selectText: [anchor: number, head?: number | undefined];
|
|
355
459
|
selectTextBetween: [$anchor: import("@prosekit/pm/model").ResolvedPos, $head: import("@prosekit/pm/model").ResolvedPos, bias?: number | undefined];
|
|
356
460
|
};
|
|
357
|
-
}
|
|
461
|
+
}>, import("@prosekit/core").Union<readonly [import("@prosekit/core").PlainExtension, import("@prosekit/core").Extension<{
|
|
462
|
+
Commands: {
|
|
463
|
+
startPendingReplacement: [options: StartPendingReplacementOptions];
|
|
464
|
+
appendPendingReplacementText: [text: string];
|
|
465
|
+
acceptPendingReplacement: [options?: AcceptPendingReplacementOptions | undefined];
|
|
466
|
+
discardPendingReplacement: [];
|
|
467
|
+
};
|
|
468
|
+
}>, import("@prosekit/core").PlainExtension]>]>;
|
|
358
469
|
type EditorExtension = ReturnType<typeof defineEditorExtensionImpl>;
|
|
359
|
-
|
|
470
|
+
/**
|
|
471
|
+
* Options for {@link defineEditorExtension}. Creation-time configuration: it
|
|
472
|
+
* is baked into the editor's parse pipeline, so changing it requires
|
|
473
|
+
* rebuilding the editor.
|
|
474
|
+
*/
|
|
475
|
+
type EditorExtensionOptions = FileLinkOptions;
|
|
476
|
+
declare function defineEditorExtension(options?: EditorExtensionOptions): EditorExtension;
|
|
360
477
|
type TypedEditor = Editor<EditorExtension>;
|
|
361
478
|
//#endregion
|
|
362
479
|
//#region src/extensions/schema.d.ts
|
|
@@ -529,6 +646,17 @@ interface FilePasteOptions {
|
|
|
529
646
|
/** Called when persisting a pasted/dropped file throws. Defaults to `console.error`. */
|
|
530
647
|
onFileSaveError?: FileSaveErrorHandler;
|
|
531
648
|
}
|
|
649
|
+
/**
|
|
650
|
+
* The markdown a saved file becomes: `` for an image (a
|
|
651
|
+
* `type` starting with `image/`), a `[name](destination)` link otherwise,
|
|
652
|
+
* with `\`, `[`, and `]` escaped in the name. Exported so a host command that
|
|
653
|
+
* inserts file links itself (e.g. an attach-file picker) produces markdown
|
|
654
|
+
* byte-identical to a paste/drop.
|
|
655
|
+
*/
|
|
656
|
+
declare function buildFileMarkdown(file: {
|
|
657
|
+
name: string;
|
|
658
|
+
type?: string;
|
|
659
|
+
}, destination: string): string;
|
|
532
660
|
/**
|
|
533
661
|
* Persist pasted/dropped files via `onFilePaste` and insert the returned
|
|
534
662
|
* markdown destination: `` for an image, a `[name](src)` link for any
|
|
@@ -536,6 +664,104 @@ interface FilePasteOptions {
|
|
|
536
664
|
*/
|
|
537
665
|
declare function defineFilePaste(options?: FilePasteOptions): PlainExtension;
|
|
538
666
|
//#endregion
|
|
667
|
+
//#region src/extensions/file-click.d.ts
|
|
668
|
+
/** Payload for {@link FileClickHandler}. */
|
|
669
|
+
interface FileClickPayload {
|
|
670
|
+
/** The link destination, exactly as written in `[name](href)`. */
|
|
671
|
+
href: string;
|
|
672
|
+
/** The file name shown on the pill. */
|
|
673
|
+
name: string;
|
|
674
|
+
/**
|
|
675
|
+
* The originating click, or the `Mod-Enter` key press that followed the
|
|
676
|
+
* pill. Read modifier keys or position a popover from it.
|
|
677
|
+
*/
|
|
678
|
+
event: MouseEvent | KeyboardEvent;
|
|
679
|
+
}
|
|
680
|
+
type FileClickHandler = (payload: FileClickPayload) => void;
|
|
681
|
+
/**
|
|
682
|
+
* Call `onClick` when the user clicks a rendered file pill, with the file's
|
|
683
|
+
* `href`, `name`, and the originating `MouseEvent`. The host decides what a
|
|
684
|
+
* click does (e.g. open the file in the OS default app).
|
|
685
|
+
*/
|
|
686
|
+
declare function defineFileClickHandler(onClick: FileClickHandler): PlainExtension;
|
|
687
|
+
//#endregion
|
|
688
|
+
//#region src/extensions/file-view.d.ts
|
|
689
|
+
/** Metadata a host resolves for one file link, shown on its pill. */
|
|
690
|
+
interface FileInfo {
|
|
691
|
+
/** File size in bytes, shown as a human-readable suffix (e.g. `1.4 MB`). */
|
|
692
|
+
size?: number;
|
|
693
|
+
}
|
|
694
|
+
/**
|
|
695
|
+
* Resolve display metadata for a file `href`, directly or as a promise; the
|
|
696
|
+
* pill renders immediately and fills the metadata in when the promise
|
|
697
|
+
* settles. Return `undefined` for a file without metadata (e.g. one that no
|
|
698
|
+
* longer exists). Called once per rendered pill, so the same `href` may
|
|
699
|
+
* resolve repeatedly: cache in the host when resolving is expensive.
|
|
700
|
+
*/
|
|
701
|
+
type FileInfoResolver = (href: string) => FileInfo | undefined | Promise<FileInfo | undefined>;
|
|
702
|
+
/** Options for {@link defineFileView}. */
|
|
703
|
+
interface FileViewOptions {
|
|
704
|
+
/** Resolve the metadata (file size) shown on a pill. Omit to show none. */
|
|
705
|
+
resolveFileInfo?: FileInfoResolver;
|
|
706
|
+
}
|
|
707
|
+
/**
|
|
708
|
+
* Render a claimed file link (the `mdFile` mark, see `resolveFileLink`) as an
|
|
709
|
+
* inline pill: a file-kind icon, the file name, and the size once
|
|
710
|
+
* `resolveFileInfo` supplies it. The pill never loads the file's content;
|
|
711
|
+
* clicks are reported through `defineFileClickHandler`.
|
|
712
|
+
*/
|
|
713
|
+
declare function defineFileView(options?: FileViewOptions): PlainExtension;
|
|
714
|
+
//#endregion
|
|
715
|
+
//#region src/extensions/link-click.d.ts
|
|
716
|
+
interface LinkClickPayload {
|
|
717
|
+
href: string;
|
|
718
|
+
/** The originating click, or the `Mod-Enter` key press that followed the link. */
|
|
719
|
+
event: MouseEvent | KeyboardEvent;
|
|
720
|
+
}
|
|
721
|
+
type LinkClickHandler = (payload: LinkClickPayload) => void;
|
|
722
|
+
interface LinkCopyPayload {
|
|
723
|
+
href: string;
|
|
724
|
+
}
|
|
725
|
+
type LinkCopyHandler = (payload: LinkCopyPayload) => void;
|
|
726
|
+
declare function defineLinkClickHandler(onClick: LinkClickHandler): PlainExtension;
|
|
727
|
+
//#endregion
|
|
728
|
+
//#region src/extensions/tag-click.d.ts
|
|
729
|
+
interface TagClickPayload {
|
|
730
|
+
/** The tag name, without the leading `#`. */
|
|
731
|
+
tag: string;
|
|
732
|
+
/**
|
|
733
|
+
* The originating click, or the `Mod-Enter` key press that followed the tag.
|
|
734
|
+
* Read modifier keys or position a popover from it.
|
|
735
|
+
*/
|
|
736
|
+
event: MouseEvent | KeyboardEvent;
|
|
737
|
+
}
|
|
738
|
+
type TagClickHandler = (payload: TagClickPayload) => void;
|
|
739
|
+
declare function defineTagClickHandler(onClick: TagClickHandler): PlainExtension;
|
|
740
|
+
//#endregion
|
|
741
|
+
//#region src/extensions/wikilink-click.d.ts
|
|
742
|
+
interface WikilinkClickPayload {
|
|
743
|
+
target: string;
|
|
744
|
+
/** The originating click, or the `Mod-Enter` key press that followed the link. */
|
|
745
|
+
event: MouseEvent | KeyboardEvent;
|
|
746
|
+
}
|
|
747
|
+
type WikilinkClickHandler = (payload: WikilinkClickPayload) => void;
|
|
748
|
+
declare function defineWikilinkClickHandler(onClick: WikilinkClickHandler): PlainExtension;
|
|
749
|
+
//#endregion
|
|
750
|
+
//#region src/extensions/follow-link.d.ts
|
|
751
|
+
interface FollowLinkHandlers {
|
|
752
|
+
onWikilinkClick?: WikilinkClickHandler;
|
|
753
|
+
onTagClick?: TagClickHandler;
|
|
754
|
+
onFileClick?: FileClickHandler;
|
|
755
|
+
onLinkClick?: LinkClickHandler;
|
|
756
|
+
}
|
|
757
|
+
/**
|
|
758
|
+
* Binds `Mod-Enter` to follow the wikilink, tag, file pill, or Markdown link
|
|
759
|
+
* under the caret, firing the same handlers a click does. Off a link the key
|
|
760
|
+
* falls through, so the list keymap keeps cycling checkbox tasks. High
|
|
761
|
+
* priority puts this ahead of every keymap binding.
|
|
762
|
+
*/
|
|
763
|
+
declare function defineFollowLinkHandler(handlers: FollowLinkHandlers): PlainExtension;
|
|
764
|
+
//#endregion
|
|
539
765
|
//#region src/extensions/html-paste.d.ts
|
|
540
766
|
/**
|
|
541
767
|
* Paste foreign rich-text HTML as meowdown Markdown. Rewrites the clipboard's
|
|
@@ -579,24 +805,6 @@ declare function defaultResolveImageUrl(src: string): string | undefined;
|
|
|
579
805
|
/** Inline image/embed rendering: a mark view on the `mdImage` mark. */
|
|
580
806
|
declare function defineImage(options?: ImageOptions): PlainExtension;
|
|
581
807
|
//#endregion
|
|
582
|
-
//#region src/extensions/mark-chunk.d.ts
|
|
583
|
-
/**
|
|
584
|
-
* Contiguous range with a uniform inline-mark set.
|
|
585
|
-
*/
|
|
586
|
-
type MarkChunk = readonly [from: number, to: number, marks: readonly Mark[]];
|
|
587
|
-
//#endregion
|
|
588
|
-
//#region src/extensions/inline-text-to-mark-chunks.d.ts
|
|
589
|
-
/**
|
|
590
|
-
* Walk a textblock's inline content and produce a list of mark chunks
|
|
591
|
-
* with positions relative to the start of `text` (i.e. zero-based).
|
|
592
|
-
* Callers shift the chunks into the document's coordinate space.
|
|
593
|
-
*/
|
|
594
|
-
declare function inlineTextToMarkChunks(/** Typed mark builders bound to the target schema. */
|
|
595
|
-
|
|
596
|
-
marks: TypedMarkBuilders, /** The raw inline text of one textblock (no block prefix). */
|
|
597
|
-
|
|
598
|
-
text: string): MarkChunk[];
|
|
599
|
-
//#endregion
|
|
600
808
|
//#region src/extensions/key-bindings.d.ts
|
|
601
809
|
/** Human-readable descriptions of the editor's formatting and heading shortcuts. */
|
|
602
810
|
declare const EDITOR_KEY_BINDINGS: {
|
|
@@ -606,6 +814,7 @@ declare const EDITOR_KEY_BINDINGS: {
|
|
|
606
814
|
readonly 'Mod-Shift-x': "Strikethrough";
|
|
607
815
|
readonly 'Mod-Shift-h': "Highlight";
|
|
608
816
|
readonly 'Mod-k': "Link";
|
|
817
|
+
readonly 'Mod-Shift-k': "Insert a wikilink";
|
|
609
818
|
readonly 'Mod-1': "Heading 1";
|
|
610
819
|
readonly 'Mod-2': "Heading 2";
|
|
611
820
|
readonly 'Mod-3': "Heading 3";
|
|
@@ -613,20 +822,16 @@ declare const EDITOR_KEY_BINDINGS: {
|
|
|
613
822
|
readonly 'Mod-5': "Heading 5";
|
|
614
823
|
readonly 'Mod-6': "Heading 6";
|
|
615
824
|
readonly 'Mod-.': "Fold or unfold a bullet";
|
|
825
|
+
readonly 'Mod-Enter': "Follow the link under the caret, or cycle a checkbox task";
|
|
826
|
+
readonly 'Mod-Shift-Enter': "Cycle a circle checkbox task";
|
|
827
|
+
readonly 'Mod-Shift-7': "Ordered list";
|
|
828
|
+
readonly 'Mod-Shift-8': "Bullet list";
|
|
829
|
+
readonly 'Mod-Shift-9': "Checkbox task list";
|
|
830
|
+
readonly 'Alt-ArrowUp': "Move the block or list item up";
|
|
831
|
+
readonly 'Alt-ArrowDown': "Move the block or list item down";
|
|
832
|
+
readonly Escape: "Collapse the selection";
|
|
616
833
|
};
|
|
617
834
|
//#endregion
|
|
618
|
-
//#region src/extensions/link-click.d.ts
|
|
619
|
-
interface LinkClickPayload {
|
|
620
|
-
href: string;
|
|
621
|
-
event: MouseEvent;
|
|
622
|
-
}
|
|
623
|
-
type LinkClickHandler = (payload: LinkClickPayload) => void;
|
|
624
|
-
interface LinkCopyPayload {
|
|
625
|
-
href: string;
|
|
626
|
-
}
|
|
627
|
-
type LinkCopyHandler = (payload: LinkCopyPayload) => void;
|
|
628
|
-
declare function defineLinkClickHandler(onClick: LinkClickHandler): PlainExtension;
|
|
629
|
-
//#endregion
|
|
630
835
|
//#region src/extensions/mark-hover.d.ts
|
|
631
836
|
interface MarkHoverHit<Payload> {
|
|
632
837
|
payload: Payload;
|
|
@@ -650,7 +855,7 @@ type MarkMode = 'hide' | 'focus' | 'show';
|
|
|
650
855
|
declare function defineMarkMode(mode: MarkMode): PlainExtension;
|
|
651
856
|
//#endregion
|
|
652
857
|
//#region src/extensions/mark-names.d.ts
|
|
653
|
-
declare const MARK_NAMES: readonly ["mdWikilink", "mdImage", "mdMark", "mdEm", "mdStrong", "mdCode", "mdLinkText", "mdLinkUri", "mdLinkTitle", "mdDel", "mdHighlight", "mdTag", "mdPack"];
|
|
858
|
+
declare const MARK_NAMES: readonly ["mdWikilink", "mdImage", "mdFile", "mdMark", "mdEm", "mdStrong", "mdCode", "mdLinkText", "mdLinkUri", "mdLinkTitle", "mdDel", "mdHighlight", "mdTag", "mdPack"];
|
|
654
859
|
type MarkName = (typeof MARK_NAMES)[number];
|
|
655
860
|
//#endregion
|
|
656
861
|
//#region src/extensions/markdown-copy.d.ts
|
|
@@ -679,37 +884,34 @@ type NodeName = (typeof NODE_NAMES)[number];
|
|
|
679
884
|
*/
|
|
680
885
|
declare function isSelectionInTableCell(state: EditorState): boolean;
|
|
681
886
|
//#endregion
|
|
682
|
-
//#region src/extensions/tag-click.d.ts
|
|
683
|
-
interface TagClickPayload {
|
|
684
|
-
/** The tag name, without the leading `#`. */
|
|
685
|
-
tag: string;
|
|
686
|
-
/** The originating click. Read modifier keys or position a popover from it. */
|
|
687
|
-
event: MouseEvent;
|
|
688
|
-
}
|
|
689
|
-
type TagClickHandler = (payload: TagClickPayload) => void;
|
|
690
|
-
declare function defineTagClickHandler(onClick: TagClickHandler): PlainExtension;
|
|
691
|
-
//#endregion
|
|
692
|
-
//#region src/extensions/wikilink-click.d.ts
|
|
693
|
-
interface WikilinkClickPayload {
|
|
694
|
-
target: string;
|
|
695
|
-
event: MouseEvent;
|
|
696
|
-
}
|
|
697
|
-
type WikilinkClickHandler = (payload: WikilinkClickPayload) => void;
|
|
698
|
-
declare function defineWikilinkClickHandler(onClick: WikilinkClickHandler): PlainExtension;
|
|
699
|
-
//#endregion
|
|
700
887
|
//#region src/extensions/wikilink-trigger.d.ts
|
|
701
888
|
/**
|
|
702
|
-
* Binds `Mod-Shift-k` to open the wikilink menu
|
|
889
|
+
* Binds `Mod-Shift-k` to open the wikilink menu, and `[` to wrap a selected
|
|
890
|
+
* phrase into an open wikilink (`[[phrase`) with the menu searching it.
|
|
703
891
|
*/
|
|
704
892
|
declare function defineWikilinkTrigger(): PlainExtension;
|
|
705
893
|
//#endregion
|
|
894
|
+
//#region src/utils/selected-text.d.ts
|
|
895
|
+
/**
|
|
896
|
+
* The current selection as Markdown: block structure (list markers, headings,
|
|
897
|
+
* blockquotes) is serialized, and inline Markdown syntax is already literal
|
|
898
|
+
* text in the document. A selection inside one textblock comes back as its
|
|
899
|
+
* bare text; a multi-block selection keeps its block markers, so downstream
|
|
900
|
+
* consumers (e.g. an AI prompt) see the same Markdown the user would.
|
|
901
|
+
*/
|
|
902
|
+
declare function getSelectedText(state: EditorState): string;
|
|
903
|
+
//#endregion
|
|
706
904
|
//#region src/utils/virtual-element.d.ts
|
|
707
905
|
/**
|
|
708
906
|
* Returns a Floating-UI virtual element tracking a document range.
|
|
907
|
+
*
|
|
908
|
+
* Positioning libraries re-measure asynchronously (resize observers, animation
|
|
909
|
+
* frames), so a measurement can fire after the view is destroyed or the range
|
|
910
|
+
* no longer resolves — those return the last known rect instead of throwing.
|
|
709
911
|
*/
|
|
710
912
|
declare function getVirtualElementFromRange(view: EditorView, range: PositionRange): VirtualElement;
|
|
711
913
|
//#endregion
|
|
712
914
|
//#region src/extensions/spell-check.d.ts
|
|
713
915
|
declare function defineSpellCheckPlugin(spellCheck: boolean): import("@prosekit/core").PlainExtension;
|
|
714
916
|
//#endregion
|
|
715
|
-
export { type CheckRoundTripOptions, type CodeBlockAttrs, type CodeToken, type DocToMarkdownOptions, EDITOR_KEY_BINDINGS, type EditorExtension, type EmbedDescriptor, type ExitBoundaryHandler, type ExitBoundaryOptions, type FilePasteHandler, type FilePasteOptions, type FileSaveErrorHandler, type ImageClickHandler, type ImageClickPayload, type ImageOptions, type LinkAttrs, type LinkClickHandler, type LinkClickPayload, type LinkCopyHandler, type LinkCopyPayload, type LinkEditHandler, type LinkEditOptions, type LinkHoverHandler, type LinkUnit, type MarkChunk, type MarkMode, type MarkName, type MarkdownToDocOptions, type MdImageAttrs, type MdLinkTextAttrs, type MdWikilinkAttrs, type MeowdownHTMLCommentAttrs, type NodeName, type PlaceholderOptions, type PositionRange, Priority, type RoundTripFidelity, type TagClickHandler, type TagClickPayload, type TypedEditor, type TypedMarkBuilders, type VirtualElement, type WikilinkClickHandler, type WikilinkClickPayload, checkRoundTrip, codeBlockLanguages, defaultResolveImageUrl, defineBulletAfterHeading, defineCodeBlockSyntaxHighlight, defineEditorExtension, defineEmbedPaste, defineExitBoundaryHandler, defineFilePaste, defineHTMLComment, defineHTMLPaste, defineImage, defineImageClickHandler, defineLinkClickHandler, defineLinkCommands, defineLinkEditKeymap, defineLinkHoverHandler, defineMarkMode, defineMarkdownCopy, definePlaceholder, defineReadonly, defineSpellCheckPlugin, defineTagClickHandler, defineWikilinkClickHandler, defineWikilinkTrigger, docToMarkdown, getCodeTokens, getLinkUnitAt, getMarkBuilders, getVirtualElementFromRange, inlineTextToMarkChunks, insertLink, isSelectionInTableCell, listenForTweetHeight, markdownToDoc, matchEmbed, removeLink, updateLink, withPriority };
|
|
917
|
+
export { type AcceptPendingReplacementOptions, type CheckRoundTripOptions, type CodeBlockAttrs, type CodeToken, type DocToMarkdownOptions, EDITOR_KEY_BINDINGS, type EditorExtension, type EditorExtensionOptions, type EmbedDescriptor, type ExitBoundaryHandler, type ExitBoundaryOptions, type FileClickHandler, type FileClickPayload, type FileInfo, type FileInfoResolver, type FileLinkOptions, type FileLinkPayload, type FileLinkResolver, type FilePasteHandler, type FilePasteOptions, type FileSaveErrorHandler, type FileViewOptions, type FollowLinkHandlers, type ImageClickHandler, type ImageClickPayload, type ImageOptions, type LinkAttrs, type LinkClickHandler, type LinkClickPayload, type LinkCopyHandler, type LinkCopyPayload, type LinkEditHandler, type LinkEditOptions, type LinkHoverHandler, type LinkUnit, type MarkChunk, type MarkMode, type MarkName, type MarkdownToDocOptions, type MdFileAttrs, type MdImageAttrs, type MdLinkTextAttrs, type MdWikilinkAttrs, type MeowdownHTMLCommentAttrs, type NodeName, type PendingReplacement, type PendingReplacementEvent, type PendingReplacementHandler, type PendingReplacementMode, type PendingReplacementOutcome, type PlaceholderOptions, type PositionRange, Priority, type RoundTripFidelity, type StartPendingReplacementOptions, type TagClickHandler, type TagClickPayload, type TypedEditor, type TypedMarkBuilders, type VirtualElement, type WikilinkClickHandler, type WikilinkClickPayload, buildFileMarkdown, checkRoundTrip, codeBlockLanguages, defaultResolveImageUrl, defineBulletAfterHeading, defineCodeBlockSyntaxHighlight, defineEditorExtension, defineEmbedPaste, defineExitBoundaryHandler, defineFileClickHandler, defineFilePaste, defineFileView, defineFollowLinkHandler, defineHTMLComment, defineHTMLPaste, defineImage, defineImageClickHandler, defineLinkClickHandler, defineLinkCommands, defineLinkEditKeymap, defineLinkHoverHandler, defineMarkMode, defineMarkdownCopy, definePendingReplacementHandler, definePlaceholder, defineReadonly, defineSpellCheckPlugin, defineTagClickHandler, defineWikilinkClickHandler, defineWikilinkTrigger, docToMarkdown, getCodeTokens, getLinkUnitAt, getMarkBuilders, getPendingReplacement, getSelectedText, getVirtualElementFromRange, inlineTextToMarkChunks, insertLink, isSelectionInTableCell, listenForTweetHeight, markdownToDoc, matchEmbed, removeLink, updateLink, withPriority };
|
package/dist/index.js
CHANGED
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
import{Priority as e,Priority as t,createMarkBuilders as n,createNodeBuilders as r,defineBaseCommands as i,defineBaseKeymap as a,defineCommands as o,defineDOMEventHandler as s,defineHistory as c,defineKeymap as l,defineMarkSpec as u,defineMarkView as d,defineNodeAttr as f,defineNodeSpec as p,definePlugin as m,getMarkRange as h,getMarkType as ee,getNodeType as te,isAllSelection as ne,
|
|
2
|
-
`)}function Tt(e){let{selection:t}=e;if(!t.empty)return C.empty;let n=t.$head,{parent:r}=n;if(!r.isTextblock||r.type.spec.code)return C.empty;let i=h(n,ee(e.schema,`mdPack`));return i?C.create(e.doc,[be.inline(i.from,i.to,{class:`show`})]):C.empty}function O(e,t){let n=Ct(t);return n?e.flatMap(e=>e.modes.includes(n)?[e.name]:[]):[]}function k(e,t,n){for(let r of n){let n=D(e,t,r);if(n)return n}}function A(e,t,n){let r=k(e,t,n);return r&&r.to===t?r:void 0}function j(e,t,n){let r=k(e,t,n);return r&&r.from===t?r:void 0}function M(e,t){let{from:n,to:r,empty:i}=e.selection;if(i)return;let a=k(e,n,t);return a&&a.from===n&&a.to===r?a:void 0}function Et(e,t){return S.create(e.doc,t.from,t.to)}function Dt(e){return(t,n)=>{let r=O(e,t);if(r.length===0||!g(t.selection))return!1;let i=t.selection;if(i.empty){let e=j(t,i.from,r);if(e)return n?.(t.tr.setSelection(Et(t,e))),!0;if(A(t,i.from,r)){let e=t.doc.resolve(i.from);return i.from>=e.end()?!1:(n?.(t.tr.setSelection(S.create(t.doc,i.from+1))),!0)}return!1}let a=M(t,r);return a?(n?.(t.tr.setSelection(S.create(t.doc,a.to))),!0):!1}}function Ot(e){return(t,n)=>{let r=O(e,t);if(r.length===0||!g(t.selection))return!1;let i=t.selection;if(i.empty){let e=A(t,i.from,r);return e?(n?.(t.tr.setSelection(Et(t,e))),!0):!1}let a=M(t,r);return a?(n?.(t.tr.setSelection(S.create(t.doc,a.from))),!0):!1}}function kt(e){return(t,n)=>{let r=O(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=A(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!j(t,i,r)||i<=t.doc.resolve(i).start()?!1:(n?.(t.tr.delete(i-1,i)),!0)}}function At(e){return(t,n)=>{let r=O(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=j(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!A(t,i,r)||i>=t.doc.resolve(i).end()?!1:(n?.(t.tr.delete(i,i+1)),!0)}}const jt=`md-atom-selected`;function Mt(e){return new b({key:new x(`atom-mark-selection`),props:{decorations:t=>{let n=O(e,t);if(n.length===0)return;let r=M(t,n);if(r)return C.create(t.doc,[be.inline(r.from,r.to,{class:jt})]);let{from:i,to:a,empty:o}=t.selection;if(o)return null;let s=[];return t.doc.nodesBetween(i,a,(e,t)=>{e.marks.some(e=>n.includes(e.type.name))&&s.push(be.inline(t,t+e.nodeSize,{class:jt}))}),C.create(t.doc,s)}}})}function Nt({marks:e}){return _(v(l({ArrowRight:Dt(e),ArrowLeft:Ot(e),Backspace:kt(e),Delete:At(e)}),t.high),m(Mt(e)))}const N=new Map,Pt=new Map;async function Ft(e){let t=N.get(e);if(t!==void 0)return t;let n=xe.matchLanguageName(Se,e,!0);if(!n)return N.set(e,null),null;let r=n.support;if(!r)try{r=await n.load()}catch(t){return console.error(`[meowdown] Failed to load language "${e}":`,t),N.set(e,null),null}return N.set(e,r),r}function It(e,t){let n=Pt.get(e);if(n)return n;let r=Te({parse:e=>t.language.parser.parse(e.content),highlighter:Ce});return Pt.set(e,r),r}const Lt=e=>{let t=e.language?.trim();if(!t)return[];let n=N.get(t);return n===null?[]:n?It(t,n)(e):Ft(t).then(()=>void 0)};function Rt(){return pe({parser:Lt,nodeTypes:[`codeBlock`]})}function zt(e,t){let n=t.language.parser.parse(e),r=[];return we(n,Ce,(e,t,n)=>{r.push([e,t,n])}),r}function Bt(e,t){let n=t.trim();if(!n)return[];let r=N.get(n);return r===null?[]:r?zt(e,r):Ft(n).then(t=>t?zt(e,t):[])}function Vt(e,t){return(n,r)=>{if(r){let i=S.create(n.doc,e,t);r(n.tr.setSelection(i))}return!0}}function Ht(e,t,n){return(r,i)=>{if(i){let a=S.between(e,t,n);i(r.tr.setSelection(a))}return!0}}function Ut(e){return(t,n)=>{if(!e.trim())return!1;let r=Y(e,{nodes:vi(t.schema)}).content;if(r.childCount===0)return!1;let i=r.childCount===1&&r.child(0).type.name===`paragraph`?new w(r,1,1):new w(r,0,w.maxOpen(r).openEnd);return n&&n(t.tr.replaceSelection(i).scrollIntoView()),!0}}function Wt(){return o({insertMarkdown:Ut,selectText:Vt,selectTextBetween:Ht})}function Gt(){return f({type:`doc`,attr:`frontmatter`,default:null})}function Kt(){return p({name:`heading`,whitespace:`pre`})}function qt(){return f({type:`heading`,attr:`setextUnderline`,default:null,toDOM:e=>e==null?null:[`data-setext-underline`,String(e)],parseDOM:e=>{let t=e.getAttribute(`data-setext-underline`);if(t==null)return null;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:null}})}function Jt(){return f({type:`heading`,attr:`closingHashes`,default:null,toDOM:e=>e==null?null:[`data-closing-hashes`,String(e)],parseDOM:e=>{let t=e.getAttribute(`data-closing-hashes`);if(t==null)return null;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:null}})}function P(e){return se(ie({type:`heading`,attrs:{level:e}}))}const Yt=(e,t,n)=>re(e,n)?.parent.type.name===`heading`?ae()(e,t,n):!1;function Xt(){return l({"Mod-1":P(1),"Mod-2":P(2),"Mod-3":P(3),"Mod-4":P(4),"Mod-5":P(5),"Mod-6":P(6),Backspace:Yt})}function Zt(){return _(Ae(),Kt(),qt(),Jt(),ke(),Oe(),Xt())}function Qt(){return f({type:`horizontalRule`,attr:`marker`,default:null,toDOM:e=>e?[`data-hr-marker`,e]:null,parseDOM:e=>e.getAttribute(`data-hr-marker`)})}function $t(){return _(je(),Qt())}function en(){return p({name:`htmlComment`,group:`block`,atom:!0,selectable:!1,attrs:{content:{default:``}},toDOM:e=>[`div`,{"data-html-comment":e.attrs.content,style:`display: none`}],parseDOM:[{tag:`div[data-html-comment]`,getAttrs:e=>({content:e.getAttribute(`data-html-comment`)??``})}]})}function tn(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function nn(e,t){let[n,r,i]=t;return[n,r,i.map(t=>De.fromJSON(e,t))]}var F=class e extends Le{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return Re.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 ze(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new ze(e),n.addMark(i,c,t));return!1})}return Re.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return rn;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 Ie(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(tn)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>nn(t,e)))}};Le.jsonID(`batchSetMark`,F);const rn=new F([]),an=new Set([`com`,`br`,`net`,`jp`,`org`,`in`,`de`,`ru`,`it`,`fr`]),on=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;function sn(e){let t=e.indexOf(`/`);return t===-1?e:e.slice(0,t)}function cn(e){let t=e.split(`.`);if(t.length<2)return!1;let n=t[t.length-1].toLowerCase();if(!an.has(n)||t[t.length-2].length<3)return!1;for(let e of t)if(e.length>63||!on.test(e))return!1;return!0}function I(e){return e===32||e===9||e===10||e===13}const ln=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+(?:\/[^\s<]*)?/i,un=/[\s(*_~]/;function dn(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45}function fn(e,t,n){let r=0;for(let i=0;i<t;i++)e[i]===n&&r++;return r}function pn(e){let t=e.length;for(;;){let n=e[t-1];if(/[?!.,:*_~]/.test(n)||n===`)`&&fn(e,t,`)`)>fn(e,t,`(`))t--;else if(n===`;`){let n=/&(?:#\d+|#x[a-f\d]+|\w+);$/.exec(e.slice(0,t));if(!n)break;t=n.index}else break}return t}const mn={parseInline:[{name:`BareAutolink`,before:`Link`,parse(e,t,n){if(!dn(t)||e.hasOpenLink)return-1;let r=e.slice(n-1,n);if(r!==``&&!un.test(r))return-1;let i=ln.exec(e.slice(n,e.end));if(!i)return-1;let a=pn(i[0]);return a===0||!cn(sn(i[0].slice(0,a)))?-1:e.addElement(e.elt(`URL`,n,n+a))}}]};function hn(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 gn(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const _n={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(!hn(t))break;i||=gn(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},vn={resolve:`Highlight`,mark:`HighlightMark`},yn=/[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~\u{A1}\u{2010}-\u{2027}]/u,bn={defineNodes:[{name:`Highlight`},{name:`HighlightMark`}],parseInline:[{name:`Highlight`,after:`Emphasis`,parse(e,t,n){if(t!==61||e.char(n+1)!==61||e.char(n+2)===61)return-1;let r=e.slice(n-1,n),i=e.slice(n+2,n+3),a=/\s|^$/.test(r),o=/\s|^$/.test(i),s=yn.test(r),c=yn.test(i);return e.addDelimiter(vn,n,n+2,!o&&(!c||a||s),!a&&(!s||o||c))}}]},xn={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 Sn(e){return e.end}const L=Ve.configure([Be,_n,xn,mn,bn]),Cn=L.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:Sn}]});function R(e){return L.parseInline(e,0)}function z(e,t,n=[]){for(let r of e)t(r)&&n.push(r),z(r.children,t,n);return n}function wn(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const B=wn(L),Tn=/^<!--\s*(\{[^}]*\})\s*-->$/,En=/<!--\s*\{[^}]*\}\s*-->$/;function Dn(e){let t=Tn.exec(e.trim());if(!t)return;let n;try{n=JSON.parse(t[1])}catch{return}if(typeof n!=`object`||!n)return;let r=On(n);return Object.keys(r).length>0?r:void 0}function On(e){let t={},{width:n,height:r}=e;return typeof n==`number`&&Number.isFinite(n)&&n>0&&(t.width=Math.round(n)),typeof r==`number`&&Number.isFinite(r)&&r>0&&(t.height=Math.round(r)),t}function kn(e){return`<!-- ${JSON.stringify(e)} -->`}function An(e){return e.replace(En,``)}function jn(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!e[n].eq(t[n]))return!1;return!0}function Mn(e){let t=e.replace(/^\[\[/,``).replace(/\]\]$/,``),n=t.indexOf(`|`);return n<0?{target:t.trim(),display:``}:{target:t.slice(0,n).trim(),display:t.slice(n+1).trim()}}function Nn(){return e=>{let t=e.attrs,n=document.createElement(`span`);n.className=`md-wikilink-view md-atom-view`;let r=document.createElement(`span`);r.className=`md-wikilink-view-preview md-atom-view-preview`,r.contentEditable=`false`,r.dataset.testid=`wikilink`,n.appendChild(r);let i=document.createElement(`span`);i.className=`md-wikilink-view-label`,i.contentEditable=`false`,i.textContent=t.display||t.target,r.appendChild(i);let a=document.createElement(`span`);return a.className=`md-wikilink-view-content md-atom-view-content`,n.appendChild(a),{dom:n,contentDOM:a,ignoreMutation:e=>!a.contains(e.target)}}}function Pn(){return d({name:`mdWikilink`,constructor:Nn()})}const Fn=new Map([[B.Emphasis,`mdEm`],[B.StrongEmphasis,`mdStrong`],[B.InlineCode,`mdCode`],[B.Strikethrough,`mdDel`],[B.Highlight,`mdHighlight`],[B.EmphasisMark,`mdMark`],[B.CodeMark,`mdMark`],[B.LinkMark,`mdMark`],[B.StrikethroughMark,`mdMark`],[B.HighlightMark,`mdMark`],[B.URL,`mdLinkUri`],[B.LinkTitle,`mdLinkTitle`],[B.Hashtag,`mdTag`],[B.WikilinkMark,`mdMark`]]);function In(e,t){let n=R(t),r=[];return V(n,[],0,t.length,t,e,r),r}function Ln(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)||cn(sn(e)))return`https://${e}`}function Rn(e){return e.slice(1,-1).replaceAll(/\\(.)/g,`$1`)}function V(e,t,n,r,i,a,o){let s=n;for(let n=0;n<e.length;n++){let r=e[n];r.from>s&&H(o,s,r.from,t);let c=r.type;if(c===B.Link)zn(r,t,i,a,o);else if(c===B.Image){let c=Bn(r,e[n+1],i);Vn(r,t,i,a,o,c),c&&n++,s=c?c.to:r.to;continue}else if(c===B.Wikilink)Hn(r,t,i,a,o);else if(c===B.URL){let e=Ln(i.slice(r.from,r.to)),n=e?a.mdLinkText.create({href:e}):a.mdLinkUri.create();H(o,r.from,r.to,[...t,n])}else{let e;c===B.Emphasis?e=`italic`:c===B.StrongEmphasis?e=`bold`:c===B.InlineCode?e=`code`:c===B.Strikethrough?e=`strike`:c===B.Highlight?e=`highlight`:c===B.Autolink&&(e=`autolink`);let n=e?[...t,a.mdPack.create({key:e})]:t,s=Fn.get(c),l=s?[...n,a[s].create()]:n;r.children.length===0?H(o,r.from,r.to,l):V(r.children,l,r.from,r.to,i,a,o)}s=r.to}s<r&&H(o,s,r,t)}function zn(e,t,n,r,i){let a=-1,o=null,s=null,c=0;for(let t of e.children)t.type===B.LinkMark?(c++,c===2&&(a=t.from)):t.type===B.URL&&o===null?o=t:t.type===B.LinkTitle&&s===null&&(s=t);let l=o?n.slice(o.from,o.to):``,u=s?Rn(n.slice(s.from,s.to)):``,d=l?r.mdLinkText.create({href:l}):null,f=e=>a>=0&&e<a&&d!==null,p=r.mdPack.create({key:`link`,data:{href:l,title:u}}),m=[...t,p],h=e.from;for(let t of e.children){if(t.from>h){let e=f(h)?[...m,d]:m;H(i,h,t.from,e)}let e=f(t.from)?[...m,d]:m;if(t.type===B.Wikilink){Hn(t,e,n,r,i),h=t.to;continue}let a=Fn.get(t.type),o=a?[...e,r[a].create()]:e;t.children.length===0?H(i,t.from,t.to,o):V(t.children,o,t.from,t.to,n,r,i),h=t.to}h<e.to&&H(i,h,e.to,m)}function Bn(e,t,n){if(!t||t.type!==B.Comment||t.from!==e.to)return;let r=Dn(n.slice(t.from,t.to));if(r)return{magic:r,to:t.to}}function Vn(e,t,n,r,i,a){let o=e.children.find(e=>e.type===B.URL);if(!o){zn(e,t,n,r,i);return}let s=e.children.filter(e=>e.type===B.LinkMark),c=e.children.find(e=>e.type===B.LinkTitle),l=n.slice(o.from,o.to),u=s.length>=2?n.slice(s[0].to,s[1].from):``,d=c?Rn(n.slice(c.from,c.to)):``,f=a?.magic.width??null,p=a?.magic.height??null,m=a?.to??e.to;H(i,e.from,m,[...t,r.mdImage.create({src:l,alt:u,title:d,width:f,height:p})])}function Hn(e,t,n,r,i){let{target:a,display:o}=Mn(n.slice(e.from,e.to));H(i,e.from,e.to,[...t,r.mdWikilink.create({target:a,display:o})])}function H(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&jn(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const Un=`inline-marks-applied`,Wn=new WeakMap;let Gn=0,Kn=0;function qn(e,t,n){let r=Wn.get(e);if(r?Kn++:(Gn++,r=In(gi(n),e.textContent),Wn.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 Jn(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 Yn(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=qn(t,r+1,e.schema);return i.length>0&&n.push(...i),!1}),n}function Xn(){return new b({key:new x(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(Un))return null;let r=Yn(n,Jn(e,n));if(r.length===0)return null;let i=n.tr.step(new F(r));return i.setMeta(Un,!0),i.setMeta(`addToHistory`,!1),i},view(e){return e.dispatch(Zn(e.state)),{}}})}function Zn(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function Qn(){return m(Xn())}function $n(){return u({name:`mdImage`,inclusive:!1,attrs:{src:{default:``},alt:{default:``},title:{default:``},width:{default:null},height:{default:null}},toDOM:()=>[`span`,{class:`md-image`},0],parseDOM:[{tag:`span.md-image`}]})}function er(){return u({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function tr(){return u({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function nr(){return u({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function rr(){return u({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function ir(){return u({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 ar(){return u({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function or(){return u({name:`mdLinkTitle`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-title`},0],parseDOM:[{tag:`span.md-link-title`}]})}function sr(){return u({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function cr(){return u({name:`mdHighlight`,toDOM:()=>[`mark`,0],parseDOM:[{tag:`mark`}]})}function lr(){return u({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function ur(){return u({name:`mdWikilink`,inclusive:!1,attrs:{target:{default:``},display:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink`},0],parseDOM:[{tag:`span.md-wikilink`}]})}function dr(){return u({name:`mdPack`,excludes:``,inclusive:!1,attrs:{key:{},data:{default:null}},toDOM:e=>[`span`,{class:`md-pack`,"data-key":e.attrs.key},0],parseDOM:[{tag:`span.md-pack`}]})}function fr(){return _(er(),tr(),nr(),rr(),ir(),ar(),or(),sr(),cr(),lr(),ur(),$n(),dr())}function pr(e,t=0){let n=t,r=0;for(let t=0;t<e.length;t++)e.charCodeAt(t)===96?(r++,r>n&&(n=r)):r=0;return n}const U={em:{node:B.Emphasis,delim:`*`},strong:{node:B.StrongEmphasis,delim:`**`},code:{node:B.InlineCode,delim:"`"},del:{node:B.Strikethrough,delim:`~~`},highlight:{node:B.Highlight,delim:`==`}},mr=new Set([B.EmphasisMark,B.CodeMark,B.LinkMark,B.StrikethroughMark,B.HighlightMark]);function W(e){return[e.children[0],e.children.at(-1)]}function hr(e){let{type:t,children:n}=e;if(t===B.Emphasis||t===B.StrongEmphasis||t===B.Strikethrough||t===B.Highlight)return[n[0].to,n.at(-1).from];if(t===B.Link||t===B.Image){let e=n.find((e,t)=>t>0&&e.type===B.LinkMark);return e?[n[0].to,e.from]:null}return null}function G(e,t,n){for(let r of e){if(r.to<=t||r.from>=n||t<=r.from&&r.to<=n)continue;let i=hr(r);return i&&i[0]<=t&&n<=i[1]?G(r.children,t,n):G(e,Math.min(t,r.from),Math.max(n,r.to))}return[t,n]}function gr(e,t,n){for(let r of e)if(!(r.to<=t||r.from>=n)&&(t>r.from||r.to>n))return gr(e,Math.min(t,r.from),Math.max(n,r.to));return[t,n]}function _r(e,t,n){for(;t<n&&I(e.charCodeAt(t));)t++;for(;n>t&&I(e.charCodeAt(n-1));)n--;return[t,n]}function vr(e,t,n,r){let i=z(R(e),e=>e.type===r.node||mr.has(e.type));for(let r=t;r<n;r++)if(!I(e.charCodeAt(r))&&i.every(e=>!(e.from<=r&&r<e.to)))return!1;return!0}function yr(e,t,n,r,i){let a=R(e),o=z(a,e=>e.type===r.node);return i?Sr(e,o,t,n):br(e,a,o,t,n,r)}function br(e,t,n,r,i,a){for(let e=0;e!==i-r;){e=i-r,[r,i]=G(t,r,i);for(let e of n)e.to===r&&(r=e.from),e.from===i&&(i=e.to)}let o=[];for(let e of n)if(r<=e.from&&e.to<=i){let[t,n]=W(e);o.push({from:t.from,to:t.to,insert:``}),o.push({from:n.from,to:n.to,insert:``})}let[s,c]=xr(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function xr(e,t,n,r,i){if(i.node!==B.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(pr(a)+1),s=a.startsWith("`")||a.endsWith("`")?` `:``;return[o+s,s+o]}function Sr(e,t,n,r){let i=[];for(let a of t){if(a.to<=n||a.from>=r)continue;let[t,o]=W(a),s=Math.max(n,t.to),c=Math.min(r,o.from);for(s>=c&&([s,c]=[t.to,o.from]),[s,c]=gr(a.children.slice(1,-1),s,c);s>t.to&&I(e.charCodeAt(s-1));)s--;for(;c<o.from&&I(e.charCodeAt(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 Cr(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=R(e),o=z(a,e=>e.type===n.node).findLast(e=>e.from<=t&&t<=e.to);if(o){let[e,n]=W(o);return{kind:`move`,pos:t===o.from?e.to:t===o.to?n.from:o.to}}return wr(a,t)||e[t-1]===r[0]||e[t]===r[0]?null:{kind:`insert`,pos:t}}function wr(e,t){for(let n of e)if(n.from<t&&t<n.to){let e=hr(n);return!e||t<e[0]||t>e[1]?!0:wr(n.children,t)}return!1}function K(e){return(t,n)=>{if(t.selection.empty)return Tr(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]=_r(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:vr(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>yr(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(S.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 Tr(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=Cr(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(S.create(o.doc,i+a.pos)),a.kind===`insert`&&(o.insertText(e.delim+e.delim,i+a.pos),o.setSelection(S.create(o.doc,i+a.pos+e.delim.length))),n(o.scrollIntoView())}return!0}function Er(){return o({toggleEm:()=>K(U.em),toggleStrong:()=>K(U.strong),toggleCode:()=>K(U.code),toggleDel:()=>K(U.del),toggleHighlight:()=>K(U.highlight)})}function Dr(){return l({"Mod-b":K(U.strong),"Mod-i":K(U.em),"Mod-e":K(U.code),"Mod-Shift-x":K(U.del),"Mod-Shift-h":K(U.highlight)})}function Or(){return _(Er(),Dr())}function kr(e,t,n){let r;return e.doc.nodesBetween(t.from,t.to,(e,i)=>(e.isText&&e.marks.some(e=>e.type.name===n)&&(r={from:Math.max(i,t.from),to:Math.min(i+e.nodeSize,t.to)}),!0)),r}function q(e,t){let n=D(e,t,`mdLinkText`),r=D(e,t,`mdPack`),i=r??n;if(!i)return;let a=r?.mark.attrs,o=n?.mark.attrs?.href??``;if(!r||a?.key!==`link`)return{unit:{from:i.from,to:i.to},href:o,title:``};let s=kr(e,i,`mdLinkUri`),c=s?s.from-2:i.to-3,l=s?s.from:i.to-1;return{unit:{from:i.from,to:i.to},label:{from:i.from+1,to:c},dest:{from:l,to:i.to-1},href:a.data.href,title:a.data.title}}function Ar(e){let t=e.trim();return t?Ln(t)??t:``}function jr(e,t){return e+(t?` "${t.replaceAll(/(["\\])/g,String.raw`\$1`)}"`:``)}function Mr(e){let{selection:t}=e,{$from:n,$to:r,empty:i}=t;if(i||!n.sameParent(r)||!g(t))return;let a=n.parent;if(!a.isTextblock||a.type.spec.code)return;let o=n.start(),[s,c]=_r(a.textContent,n.parentOffset,r.parentOffset);if(!(s>=c))return{from:o+s,to:o+c}}function Nr(e={}){return(t,n)=>{let r=jr(Ar(e.href??``),e.title??``),i=Mr(t);if(!i)return!1;if(n){let{from:e,to:a}=i,o=t.tr,s=`](${r})`;o.insertText(s,a).insertText(`[`,e),n(o.setSelection(S.create(o.doc,e,a+1+s.length)).scrollIntoView())}return!0}}function Pr(e){return(t,n)=>{let r=q(t,t.selection.from);if(!r?.dest)return!1;let i=jr(Ar(e.href??r.href),e.title??r.title);return n&&n(t.tr.insertText(i,r.dest.from,r.dest.to).scrollIntoView()),!0}}function Fr(){return(e,t)=>{let n=q(e,e.selection.from);return n?.label?(t&&t(e.tr.delete(n.label.to,n.unit.to).delete(n.unit.from,n.label.from).scrollIntoView()),!0):!1}}function Ir(){return o({insertLink:Nr,updateLink:Pr,removeLink:Fr})}function Lr(e){return(t,n,r)=>{let i=q(t,t.selection.from);if(i){if(n&&r){let{unit:{from:a,to:o}}=i;n(t.tr.setSelection(S.create(t.doc,a,o)).scrollIntoView()),r.focus(),e({from:a,to:o,link:i})}return!0}let a=Mr(t);if(a){if(n&&r){let{from:i,to:o}=a;n(t.tr.setSelection(S.create(t.doc,i,o)).scrollIntoView()),r.focus(),e({from:i,to:o,link:void 0})}return!0}return!1}}function Rr(e){return l({"Mod-k":Lr(e)})}function zr(){return f({type:`list`,attr:`marker`,default:null,splittable:!0,toDOM:e=>e===`)`||e===`*`||e===`+`?[`data-list-marker`,e]:null,parseDOM:e=>{let t=e.getAttribute(`data-list-marker`);return t===`)`||t===`*`||t===`+`?t:null}})}function Br(){return f({type:`list`,attr:`taskMarker`,default:null,splittable:!0,toDOM:e=>e===`X`?[`data-list-task-marker`,e]:null,parseDOM:e=>e.getAttribute(`data-list-task-marker`)===`X`?`X`:null})}function Vr(e){return e===2||e===3||e===4}function Hr(){return f({type:`list`,attr:`markerGap`,default:1,splittable:!0,toDOM:e=>Vr(e)?[`data-list-marker-gap`,String(e)]:null,parseDOM:e=>{let t=Number.parseInt(e.getAttribute(`data-list-marker-gap`)??``,10);return Vr(t)?t:1}})}const Ur=[E(/^\s?([*-])\s$/,{kind:`bullet`,collapsed:!1}),E(/^\s?(\d+)\.\s$/,({match:e})=>{let t=e[1],n=t?parseInt(t,10):void 0;return{kind:`ordered`,collapsed:!1,order:n&&n>=2&&Number.isSafeInteger(n)?n:null}}),E(/^\s?\[([\sXx]?)]\s$/,({match:e})=>({kind:`task`,checked:[`x`,`X`].includes(e[1]),collapsed:!1})),E(/^\s?\+\s$/,{kind:`task`,marker:`+`,checked:!1,collapsed:!1})];function Wr(){return _(Ur.map(He))}function Gr(){return T({kind:`task`,marker:`+`})}function Kr(){return T({kind:`task`,marker:null})}function qr(){return o({wrapInCircleTask:Gr,wrapInSquareTask:Kr})}function Jr(e){let{$from:t}=e.selection;for(let e=t.depth;e>0;e--){let n=t.node(e);if(n.type.name===`list`)return n.attrs}return null}function Yr(){return(e,t,n)=>{let r=Jr(e),i=r?.kind===`task`&&r.marker!==`+`,a;return a=i&&!r?.checked?{kind:`task`,marker:r?.marker??null,checked:!0}:i&&r?.checked?{kind:`bullet`,marker:null,checked:!1}:{kind:`task`,marker:null,checked:!1},T(a)(e,t,n)}}function Xr(){return(e,t,n)=>{let r=Jr(e),i=r?.kind===`task`&&r.marker===`+`,a;return a=i&&!r?.checked?{kind:`task`,marker:`+`,checked:!0}:i&&r?.checked?{kind:`bullet`,marker:null,checked:!1}:{kind:`task`,marker:`+`,checked:!1},T(a)(e,t,n)}}function J(e){return e.type.name===`list`&&e.attrs.kind===`bullet`&&e.childCount>=2&&e.firstChild?.type!==e.type}const Zr=e=>{let t=e.attrs;return t.kind===`task`?{...t,checked:!t.checked}:J(e)?{...t,collapsed:!t.collapsed}:t};function Qr(){return m(()=>[new b({props:{handleDOMEvents:{mousedown:(e,t)=>Ze({view:e,event:t,onListClick:Zr})}}}),Je(),new b({props:{transformCopied:Qe}}),Ye()])}function $r(){return o({toggleListCollapsed:()=>Xe({isToggleable:J})})}function ei(){return l({"Mod-Enter":Yr(),"Mod-Shift-Enter":Xr(),"Mod-.":Xe({isToggleable:J})})}function ti(){return _(qe(),Qr(),Ge(),Ue(),Ke(),We(),Wr(),ei(),zr(),Br(),Hr(),qr(),$r())}function ni(){return p({name:`paragraph`,content:`inline*`,group:`block`,whitespace:`pre`,parseDOM:[{tag:`p`}],toDOM(){return[`p`,0]}})}function ri(){return _(v(ni(),t.highest),$e(),et())}function ii(e){let{$from:t}=e.selection;for(let e=t.depth;e>0;e--){let n=t.node(e).type.name;if(n===`tableCell`||n===`tableHeaderCell`)return!0}return!1}const ai=`paragraph`;function oi(){return _(p({name:`tableCell`,content:ai}),p({name:`tableHeaderCell`,content:ai}))}const si=(e,t)=>{let{selection:n}=e;return!lt(n)||!n.isColSelection()||!n.isRowSelection()?!1:ct(e,t)};function ci(){return v(l({Backspace:si,Delete:si}),t.high)}function li(){return _(st(),ot(),tt(),at(),oi(),it({allowTableNodeSelection:!0}),nt(),rt(),ci())}function ui(){return _(ri(),me(),Gt(),_e(),de(),ti(),Zt(),li(),fe(),$t(),en(),fr(),Rt(),Qn(),Or(),Ir(),Pn(),Nt({marks:[{name:`mdImage`,modes:[`hide`,`focus`,`show`]},{name:`mdWikilink`,modes:[`hide`,`focus`,`show`]}]}),a(),i(),c(),he(),ve(),ge(),Wt())}function di(){return ui()}const fi=y(()=>{let e=di().schema;if(e==null)throw Error(`Unexpected empty schema`);return e}),pi=y(()=>r(fi())),mi=y(()=>n(fi())),hi=`meowdown_mark_builders`;function gi(e){let t=e.cached[hi];if(t)return t;let r=n(e);return e.cached[hi]=r,r}const _i=`meowdown_node_builders`;function vi(e){let t=e.cached[_i];if(t)return t;let n=r(e);return e.cached[_i]=n,n}function Y(e,t={}){let{nodes:n=pi(),frontmatter:r=!1}=t,i,a=e;if(r){let[t,n]=bi(e);i=t,n&&(a=e.slice(n))}let o=xi(n,Cn.parse(a).cursor(),a);return n.doc(i===void 0?{}:{frontmatter:i},o)}const yi=/^---[ \t]*\r?\n([\s\S]*?\n)?---[ \t]*(?:\r?\n|$)/;function bi(e){let t=yi.exec(e);return t?[(t[1]??``).replace(/\r?\n$/,``),t[0].length]:[]}function xi(e,t,n){let r=[];if(!t.firstChild())return r;do r.push(...Si(e,t,n));while(t.nextSibling());return t.parent(),r}function Si(e,t,n){switch(t.type.id){case B.ATXHeading1:return[X(e,t,n,1,!1)];case B.ATXHeading2:return[X(e,t,n,2,!1)];case B.ATXHeading3:return[X(e,t,n,3,!1)];case B.ATXHeading4:return[X(e,t,n,4,!1)];case B.ATXHeading5:return[X(e,t,n,5,!1)];case B.ATXHeading6:return[X(e,t,n,6,!1)];case B.SetextHeading1:return[X(e,t,n,1,!0)];case B.SetextHeading2:return[X(e,t,n,2,!0)];case B.Paragraph:return[Q(e,t,n)];case B.CommentBlock:return[Oi(e,t,n)];case B.HTMLBlock:case B.ProcessingInstructionBlock:return[Q(e,t,n)];case B.Blockquote:return[ki(e,t,n)];case B.BulletList:return Ai(e,t,n,`bullet`);case B.OrderedList:return Ai(e,t,n,`ordered`);case B.FencedCode:case B.CodeBlock:return[Mi(e,t,n)];case B.HorizontalRule:{let r=n.slice(t.from,t.to).trimEnd();return[e.horizontalRule({marker:r===`---`?null:r})]}case B.Table:return[Ni(e,t,n)];case B.Task:return[Q(e,t,n)];default:return n.slice(t.from,t.to).trim()===``?[]:(console.warn(`[meowdown] unsupported lezer block "${t.type.name}"`),[Q(e,t,n)])}}function X(e,t,n,r,i){let a=t.from,o=t.from,s=t.to,c=-1,l=-1;if(t.firstChild()){t.type.id===B.HeaderMark&&t.from===a&&(o=t.to);let e=-1,n=-1,r=-1;do e=t.type.id,n=t.from,r=t.to;while(t.nextSibling());e===B.HeaderMark&&n>o&&(s=n,c=n,l=r),t.parent()}let u=Ei(n.slice(o,s),Z(n,o)).trim(),d=i?Ci(n,c,l)||1:null,f=!i&&c>=0&&wi(n,c,l)||null;return e.heading({level:r,setextUnderline:d,closingHashes:f},u)}function Ci(e,t,n){if(t<0)return 0;let r=0;for(let i=t;i<n;i++){let t=e.charCodeAt(i);(t===61||t===45)&&r++}return r}function wi(e,t,n){if(t<0)return 0;let r=0;for(let i=t;i<n;i++)e.charCodeAt(i)===35&&r++;return r}function Z(e,t){let n=e.lastIndexOf(`
|
|
3
|
-
`,t-1)+1,r=0;for(let i=n;i<t;i++)r+=e.charCodeAt(i)===9?4-r%4:1;return r}function
|
|
1
|
+
import{Priority as e,Priority as t,createMarkBuilders as n,createNodeBuilders as r,defineBaseCommands as i,defineBaseKeymap as a,defineCommands as o,defineDOMEventHandler as s,defineHistory as c,defineKeymap as l,defineMarkSpec as u,defineMarkView as d,defineNodeAttr as f,defineNodeSpec as p,definePlugin as m,getMarkRange as h,getMarkType as ee,getNodeType as te,isAllSelection as ne,isApple as re,isAtBlockStart as ie,isNodeSelection as ae,isTextSelection as g,toggleNode as oe,union as _,unsetBlockType as se,withPriority as ce,withPriority as v,withSkipCodeBlock as le}from"@prosekit/core";import{definePlaceholder as ue}from"@prosekit/extensions/placeholder";import{defineReadonly as de}from"@prosekit/extensions/readonly";import{isElementLike as fe,once as y}from"@ocavue/utils";import{defineBlockquote as pe}from"@prosekit/extensions/blockquote";import{defineCodeBlock as me,defineCodeBlockHighlight as he}from"@prosekit/extensions/code-block";import{defineDoc as ge}from"@prosekit/extensions/doc";import{defineGapCursor as _e}from"@prosekit/extensions/gap-cursor";import{defineModClickPrevention as ve}from"@prosekit/extensions/mod-click-prevention";import{defineText as ye}from"@prosekit/extensions/text";import{defineVirtualSelection as be}from"@prosekit/extensions/virtual-selection";import{NodeSelection as xe,Plugin as b,PluginKey as x,Selection as Se,TextSelection as S}from"@prosekit/pm/state";import{Decoration as C,DecorationSet as w}from"@prosekit/pm/view";import{LanguageDescription as Ce}from"@codemirror/language";import{languages as we}from"@codemirror/language-data";import{classHighlighter as Te,highlightTree as Ee}from"@lezer/highlight";import{createParser as De}from"prosemirror-highlight/lezer";import{DOMSerializer as Oe,Mark as ke,Slice as T}from"@prosekit/pm/model";import{defineHeadingCommands as Ae,defineHeadingInputRule as je,defineHeadingSpec as Me}from"@prosekit/extensions/heading";import{defineHorizontalRule as Ne}from"@prosekit/extensions/horizontal-rule";import{AddMarkStep as Pe,AddNodeMarkStep as Fe,RemoveMarkStep as Ie,RemoveNodeMarkStep as Le,ReplaceStep as Re,Step as ze,StepResult as Be,Transform as Ve}from"@prosekit/pm/transform";import{GFM as He,parser as Ue}from"@lezer/markdown";import{defineInputRule as We}from"@prosekit/extensions/input-rule";import{defineListCommands as Ge,defineListDropIndicator as Ke,defineListKeymap as qe,defineListSerializer as Je,defineListSpec as Ye,moveList as Xe,toggleList as Ze,wrapInList as E}from"@prosekit/extensions/list";import{createListRenderingPlugin as Qe,createSafariInputMethodWorkaroundPlugin as $e,createToggleCollapsedCommand as et,handleListMarkerMouseDown as tt,unwrapListSlice as nt,wrappingListInputRule as D}from"prosemirror-flat-list";import{defineTableCellSpec as rt,defineTableCommands as it,defineTableDropIndicator as at,defineTableEditingPlugin as ot,defineTableHeaderCellSpec as st,defineTableRowSpec as ct,defineTableSpec as lt,deleteTable as ut,isCellSelection as dt}from"@prosekit/extensions/table";import{defineParagraphCommands as ft,defineParagraphKeymap as pt}from"@prosekit/extensions/paragraph";import{closeHistory as mt}from"@prosekit/pm/history";import ht from"rehype-parse";import gt from"rehype-remark";import _t from"remark-gfm";import vt from"remark-stringify";import{unified as yt}from"unified";import{registerResizableHandleElement as bt,registerResizableRootElement as xt}from"@prosekit/web/resizable";import{triggerAutocomplete as St}from"@prosekit/extensions/autocomplete";function O(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 h(i,n)}const Ct=new Set([`mdMark`,`mdLinkUri`,`mdLinkTitle`]),wt=new x(`mark-mode`);function Tt(e){return new b({key:wt,state:{init:()=>e,apply:(e,t)=>t},props:{attributes:{"data-mark-mode":e},decorations:e===`focus`?e=>kt(e):void 0,clipboardTextSerializer:e===`show`?void 0:Ot}})}function Et(e){return m(Tt(e))}function Dt(e){return wt.getState(e)}function Ot(e){let t=[];return e.content.forEach(e=>{let n=[];e.descendants(e=>!e.isText||!e.text?!0:(e.marks.some(e=>Ct.has(e.type.name))||n.push(e.text),!1)),t.push(n.join(``))}),t.join(`
|
|
2
|
+
`)}function kt(e){let{selection:t}=e;if(!t.empty)return w.empty;let n=t.$head,{parent:r}=n;if(!r.isTextblock||r.type.spec.code)return w.empty;let i=h(n,ee(e.schema,`mdPack`));return i?w.create(e.doc,[C.inline(i.from,i.to,{class:`show`})]):w.empty}function k(e,t){let n=Dt(t);return n?e.flatMap(e=>e.modes.includes(n)?[e.name]:[]):[]}function At(e,t,n){for(let r of n){let n=O(e,t,r);if(n)return n}}function A(e,t,n){let r=At(e,t,n);return r&&r.to===t?r:void 0}function jt(e,t,n){let r=At(e,t,n);return r&&r.from===t?r:void 0}function Mt(e,t){let{from:n,to:r,empty:i}=e.selection;if(i)return;let a=At(e,n,t);return a&&a.from===n&&a.to===r?a:void 0}function Nt(e,t){return S.create(e.doc,t.from,t.to)}function Pt(e){return(t,n)=>{let r=k(e,t);if(r.length===0||!g(t.selection))return!1;let i=t.selection;if(i.empty){let e=jt(t,i.from,r);if(e)return n?.(t.tr.setSelection(Nt(t,e))),!0;if(A(t,i.from,r)){let e=t.doc.resolve(i.from);return i.from>=e.end()?!1:(n?.(t.tr.setSelection(S.create(t.doc,i.from+1))),!0)}return!1}let a=Mt(t,r);return a?(n?.(t.tr.setSelection(S.create(t.doc,a.to))),!0):!1}}function Ft(e){return(t,n)=>{let r=k(e,t);if(r.length===0||!g(t.selection))return!1;let i=t.selection;if(i.empty){let e=A(t,i.from,r);return e?(n?.(t.tr.setSelection(Nt(t,e))),!0):!1}let a=Mt(t,r);return a?(n?.(t.tr.setSelection(S.create(t.doc,a.from))),!0):!1}}function It(e){return(t,n)=>{let r=k(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=A(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!jt(t,i,r)||i<=t.doc.resolve(i).start()?!1:(n?.(t.tr.delete(i-1,i)),!0)}}function Lt(e){return(t,n)=>{let r=k(e,t);if(r.length===0||!t.selection.empty)return!1;let i=t.selection.from,a=jt(t,i,r);return a?(n?.(t.tr.delete(a.from,a.to)),!0):!A(t,i,r)||i>=t.doc.resolve(i).end()?!1:(n?.(t.tr.delete(i,i+1)),!0)}}const Rt=`md-atom-selected`;function zt(e){return new b({key:new x(`atom-mark-selection`),props:{decorations:t=>{let n=k(e,t);if(n.length===0)return;let r=Mt(t,n);if(r)return w.create(t.doc,[C.inline(r.from,r.to,{class:Rt})]);let{from:i,to:a,empty:o}=t.selection;if(o)return null;let s=[];return t.doc.nodesBetween(i,a,(e,t)=>{e.marks.some(e=>n.includes(e.type.name))&&s.push(C.inline(t,t+e.nodeSize,{class:Rt}))}),w.create(t.doc,s)}}})}function Bt({marks:e}){return _(v(l({ArrowRight:Pt(e),ArrowLeft:Ft(e),Backspace:It(e),Delete:Lt(e)}),t.high),m(zt(e)))}const j=new Map,Vt=new Map;async function Ht(e){let t=j.get(e);if(t!==void 0)return t;let n=Ce.matchLanguageName(we,e,!0);if(!n)return j.set(e,null),null;let r=n.support;if(!r)try{r=await n.load()}catch(t){return console.error(`[meowdown] Failed to load language "${e}":`,t),j.set(e,null),null}return j.set(e,r),r}function Ut(e,t){let n=Vt.get(e);if(n)return n;let r=De({parse:e=>t.language.parser.parse(e.content),highlighter:Te});return Vt.set(e,r),r}const Wt=e=>{let t=e.language?.trim();if(!t)return[];let n=j.get(t);return n===null?[]:n?Ut(t,n)(e):Ht(t).then(()=>void 0)};function Gt(){return he({parser:Wt,nodeTypes:[`codeBlock`]})}function Kt(e,t){let n=t.language.parser.parse(e),r=[];return Ee(n,Te,(e,t,n)=>{r.push([e,t,n])}),r}function qt(e,t){let n=t.trim();if(!n)return[];let r=j.get(n);return r===null?[]:r?Kt(e,r):Ht(n).then(t=>t?Kt(e,t):[])}function Jt(e,t){return(n,r)=>{if(r){let i=S.create(n.doc,e,t);r(n.tr.setSelection(i))}return!0}}function Yt(e,t,n){return(r,i)=>{if(i){let a=S.between(e,t,n);i(r.tr.setSelection(a))}return!0}}function Xt(e){return(t,n)=>{if(!e.trim())return!1;let r=Y(e,{nodes:Hi(t.schema)}).content;if(r.childCount===0)return!1;let i=r.childCount===1&&r.child(0).type.name===`paragraph`?new T(r,1,1):new T(r,0,T.maxOpen(r).openEnd);return n&&n(t.tr.replaceSelection(i).scrollIntoView()),!0}}function Zt(){return o({insertMarkdown:Xt,selectText:Jt,selectTextBetween:Yt})}const Qt=(e,t,n)=>{let{selection:r}=e;return r.empty||n?.composing?!1:(t?.(e.tr.setSelection(S.near(r.$head))),!0)};function $t(){return v(l({Escape:Qt}),t.low)}function en(){return f({type:`doc`,attr:`frontmatter`,default:null})}function tn(){return p({name:`heading`,whitespace:`pre`})}function nn(){return f({type:`heading`,attr:`setextUnderline`,default:null,toDOM:e=>e==null?null:[`data-setext-underline`,String(e)],parseDOM:e=>{let t=e.getAttribute(`data-setext-underline`);if(t==null)return null;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:null}})}function rn(){return f({type:`heading`,attr:`closingHashes`,default:null,toDOM:e=>e==null?null:[`data-closing-hashes`,String(e)],parseDOM:e=>{let t=e.getAttribute(`data-closing-hashes`);if(t==null)return null;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:null}})}function M(e){return le(oe({type:`heading`,attrs:{level:e}}))}const an=(e,t,n)=>ie(e,n)?.parent.type.name===`heading`?se()(e,t,n):!1;function on(){return l({"Mod-1":M(1),"Mod-2":M(2),"Mod-3":M(3),"Mod-4":M(4),"Mod-5":M(5),"Mod-6":M(6),Backspace:an})}function sn(){return _(Me(),tn(),nn(),rn(),je(),Ae(),on())}function cn(){return f({type:`horizontalRule`,attr:`marker`,default:null,toDOM:e=>e?[`data-hr-marker`,e]:null,parseDOM:e=>e.getAttribute(`data-hr-marker`)})}function ln(){return _(Ne(),cn())}function un(){return p({name:`htmlComment`,group:`block`,atom:!0,selectable:!1,attrs:{content:{default:``}},toDOM:e=>[`div`,{"data-html-comment":e.attrs.content,style:`display: none`}],parseDOM:[{tag:`div[data-html-comment]`,getAttrs:e=>({content:e.getAttribute(`data-html-comment`)??``})}]})}function dn(e){let[t,n,r]=e;return[t,n,r.map(e=>e.toJSON())]}function fn(e,t){let[n,r,i]=t;return[n,r,i.map(t=>ke.fromJSON(e,t))]}var N=class e extends ze{constructor(e){super(),this.chunks=e}apply(e){if(this.chunks.length===0)return Be.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 Ve(e),n.removeMark(i,c,t));for(let t of a)t.isInSet(l)||(n??=new Ve(e),n.addMark(i,c,t));return!1})}return Be.ok(n?n.doc:e)}invert(e){if(this.chunks.length===0)return pn;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 Re(i,a,e.slice(i,a),!1)}map(e){return null}toJSON(){return{stepType:`batchSetMark`,chunks:this.chunks.map(dn)}}static fromJSON(t,n){let r=n.chunks;return new e(r.map(e=>fn(t,e)))}};ze.jsonID(`batchSetMark`,N);const pn=new N([]),mn=new Set([`com`,`br`,`net`,`jp`,`org`,`in`,`de`,`ru`,`it`,`fr`]),hn=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;function gn(e){let t=e.indexOf(`/`);return t===-1?e:e.slice(0,t)}function _n(e){let t=e.split(`.`);if(t.length<2)return!1;let n=t[t.length-1].toLowerCase();if(!mn.has(n)||t[t.length-2].length<3)return!1;for(let e of t)if(e.length>63||!hn.test(e))return!1;return!0}function P(e){return e===32||e===9||e===10||e===13}const vn=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+(?:\/[^\s<]*)?/i,yn=/[\s(*_~]/;function bn(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122||e===45}function xn(e,t,n){let r=0;for(let i=0;i<t;i++)e[i]===n&&r++;return r}function Sn(e){let t=e.length;for(;;){let n=e[t-1];if(/[?!.,:*_~]/.test(n)||n===`)`&&xn(e,t,`)`)>xn(e,t,`(`))t--;else if(n===`;`){let n=/&(?:#\d+|#x[a-f\d]+|\w+);$/.exec(e.slice(0,t));if(!n)break;t=n.index}else break}return t}const Cn={parseInline:[{name:`BareAutolink`,before:`Link`,parse(e,t,n){if(!bn(t)||e.hasOpenLink)return-1;let r=e.slice(n-1,n);if(r!==``&&!yn.test(r))return-1;let i=vn.exec(e.slice(n,e.end));if(!i)return-1;let a=Sn(i[0]);return a===0||!_n(gn(i[0].slice(0,a)))?-1:e.addElement(e.elt(`URL`,n,n+a))}}]};function wn(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 Tn(e){return e>=65&&e<=90||e>=97&&e<=122||e>127&&/\p{L}/u.test(String.fromCharCode(e))}const En={defineNodes:[{name:`Hashtag`}],parseInline:[{name:`Hashtag`,parse(e,t,n){if(t!==35||!/\s|^$/.test(e.slice(n-1,n)))return-1;let r=n+1,i=!1;for(;r<e.end;){let t=e.char(r);if(!wn(t))break;i||=Tn(t),r++}return i?e.addElement(e.elt(`Hashtag`,n,r)):-1}}]},Dn={resolve:`Highlight`,mark:`HighlightMark`},On=/[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~\u{A1}\u{2010}-\u{2027}]/u,kn={defineNodes:[{name:`Highlight`},{name:`HighlightMark`}],parseInline:[{name:`Highlight`,after:`Emphasis`,parse(e,t,n){if(t!==61||e.char(n+1)!==61||e.char(n+2)===61)return-1;let r=e.slice(n-1,n),i=e.slice(n+2,n+3),a=/\s|^$/.test(r),o=/\s|^$/.test(i),s=On.test(r),c=On.test(i);return e.addDelimiter(Dn,n,n+2,!o&&(!c||a||s),!a&&(!s||o||c))}}]},An={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 jn(e){return e.end}const F=Ue.configure([He,En,An,Cn,kn]),Mn=F.configure({parseInline:[{name:`SkipInline`,before:`Escape`,parse:jn}]});function I(e){return F.parseInline(e,0)}function L(e,t,n=[]){for(let r of e)t(r)&&n.push(r),L(r.children,t,n);return n}function Nn(e){let t={};for(let n of e.nodeSet.types)t[n.name]=n.id;return t}const R=Nn(F),Pn=/^<!--\s*(\{[^}]*\})\s*-->$/,Fn=/<!--\s*\{[^}]*\}\s*-->$/;function In(e){let t=Pn.exec(e.trim());if(!t)return;let n;try{n=JSON.parse(t[1])}catch{return}if(typeof n!=`object`||!n)return;let r=Ln(n);return Object.keys(r).length>0?r:void 0}function Ln(e){let t={},{width:n,height:r}=e;return typeof n==`number`&&Number.isFinite(n)&&n>0&&(t.width=Math.round(n)),typeof r==`number`&&Number.isFinite(r)&&r>0&&(t.height=Math.round(r)),t}function Rn(e){return`<!-- ${JSON.stringify(e)} -->`}function zn(e){return e.replace(Fn,``)}function Bn(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!e[n].eq(t[n]))return!1;return!0}function Vn(e){let t=e.replace(/^\[\[/,``).replace(/\]\]$/,``),n=t.indexOf(`|`);return n<0?{target:t.trim(),display:``}:{target:t.slice(0,n).trim(),display:t.slice(n+1).trim()}}function Hn(){return e=>{let t=e.attrs,n=document.createElement(`span`);n.className=`md-wikilink-view md-atom-view`;let r=document.createElement(`span`);r.className=`md-wikilink-view-preview md-atom-view-preview`,r.contentEditable=`false`,r.dataset.testid=`wikilink`,n.appendChild(r);let i=document.createElement(`span`);i.className=`md-wikilink-view-label`,i.contentEditable=`false`,i.textContent=t.display||t.target,r.appendChild(i);let a=document.createElement(`span`);return a.className=`md-wikilink-view-content md-atom-view-content`,n.appendChild(a),{dom:n,contentDOM:a,ignoreMutation:e=>!a.contains(e.target)}}}function Un(){return d({name:`mdWikilink`,constructor:Hn()})}const Wn=new Map([[R.Emphasis,`mdEm`],[R.StrongEmphasis,`mdStrong`],[R.InlineCode,`mdCode`],[R.Strikethrough,`mdDel`],[R.Highlight,`mdHighlight`],[R.EmphasisMark,`mdMark`],[R.CodeMark,`mdMark`],[R.LinkMark,`mdMark`],[R.StrikethroughMark,`mdMark`],[R.HighlightMark,`mdMark`],[R.URL,`mdLinkUri`],[R.LinkTitle,`mdLinkTitle`],[R.Hashtag,`mdTag`],[R.WikilinkMark,`mdMark`]]);function Gn(e,t,n){let r=I(t),i=[];return B(r,[],0,t.length,t,e,i,n),i}function Kn(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)||_n(gn(e)))return`https://${e}`}function z(e){return e.slice(1,-1).replaceAll(/\\(.)/g,`$1`)}function B(e,t,n,r,i,a,o,s){let c=n;for(let n=0;n<e.length;n++){let r=e[n];r.from>c&&V(o,c,r.from,t);let l=r.type;if(l===R.Link){let e=Yn(r,t,i,a,s);e?V(o,r.from,r.to,e):Xn(r,t,i,a,o)}else if(l===R.Image){let s=Zn(r,e[n+1],i);Qn(r,t,i,a,o,s),s&&n++,c=s?s.to:r.to;continue}else if(l===R.Wikilink)$n(r,t,i,a,o);else if(l===R.URL){let e=Kn(i.slice(r.from,r.to)),n=e?a.mdLinkText.create({href:e}):a.mdLinkUri.create();V(o,r.from,r.to,[...t,n])}else{let e;l===R.Emphasis?e=`italic`:l===R.StrongEmphasis?e=`bold`:l===R.InlineCode?e=`code`:l===R.Strikethrough?e=`strike`:l===R.Highlight?e=`highlight`:l===R.Autolink&&(e=`autolink`);let n=e?[...t,a.mdPack.create({key:e})]:t,c=Wn.get(l),u=c?[...n,a[c].create()]:n;r.children.length===0?V(o,r.from,r.to,u):B(r.children,u,r.from,r.to,i,a,o,s)}c=r.to}c<r&&V(o,c,r,t)}function qn(e){let t=-1,n=-1,r=null,i=null,a=0;for(let o of e.children)o.type===R.LinkMark?(a++,a===1&&(t=o.to),a===2&&(n=o.from)):o.type===R.URL&&r===null?r=o:o.type===R.LinkTitle&&i===null&&(i=o);return{labelFrom:t,labelTo:n,urlNode:r,titleNode:i}}function Jn(e){let t=e.split(/[?#]/,1)[0],n=t.split(/[/\\]/).findLast(Boolean)??t;try{return decodeURIComponent(n)}catch{return n}}function Yn(e,t,n,r,i){let a=i?.resolveFileLink;if(!a)return;let{labelFrom:o,labelTo:s,urlNode:c,titleNode:l}=qn(e);if(o<0||s<0||!c)return;let u=n.slice(c.from,c.to);if(!u)return;let d=n.slice(o,s),f=l?z(n.slice(l.from,l.to)):``;if(!a({href:u,label:d,title:f}))return;let p=d||Jn(u);return[...t,r.mdFile.create({href:u,name:p,title:f})]}function Xn(e,t,n,r,i){let{labelTo:a,urlNode:o,titleNode:s}=qn(e),c=o?n.slice(o.from,o.to):``,l=s?z(n.slice(s.from,s.to)):``,u=c?r.mdLinkText.create({href:c}):null,d=e=>a>=0&&e<a&&u!==null,f=r.mdPack.create({key:`link`,data:{href:c,title:l}}),p=[...t,f],m=e.from;for(let t of e.children){if(t.from>m){let e=d(m)?[...p,u]:p;V(i,m,t.from,e)}let e=d(t.from)?[...p,u]:p;if(t.type===R.Wikilink){$n(t,e,n,r,i),m=t.to;continue}let a=Wn.get(t.type),o=a?[...e,r[a].create()]:e;t.children.length===0?V(i,t.from,t.to,o):B(t.children,o,t.from,t.to,n,r,i,void 0),m=t.to}m<e.to&&V(i,m,e.to,p)}function Zn(e,t,n){if(!t||t.type!==R.Comment||t.from!==e.to)return;let r=In(n.slice(t.from,t.to));if(r)return{magic:r,to:t.to}}function Qn(e,t,n,r,i,a){let o=e.children.find(e=>e.type===R.URL);if(!o){Xn(e,t,n,r,i);return}let s=e.children.filter(e=>e.type===R.LinkMark),c=e.children.find(e=>e.type===R.LinkTitle),l=n.slice(o.from,o.to),u=s.length>=2?n.slice(s[0].to,s[1].from):``,d=c?z(n.slice(c.from,c.to)):``,f=a?.magic.width??null,p=a?.magic.height??null,m=a?.to??e.to;V(i,e.from,m,[...t,r.mdImage.create({src:l,alt:u,title:d,width:f,height:p})])}function $n(e,t,n,r,i){let{target:a,display:o}=Vn(n.slice(e.from,e.to));V(i,e.from,e.to,[...t,r.mdWikilink.create({target:a,display:o})])}function V(e,t,n,r){if(t>=n)return;let i=e.at(-1);if(i&&i[1]===t&&Bn(i[2],r)){e[e.length-1]=[i[0],n,i[2]];return}e.push([t,n,r])}const er=`inline-marks-applied`;let tr=0,nr=0;function rr(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 ir(e){let t=new WeakMap;function n(n,r,i){let a=t.get(n);if(a?nr++:(tr++,a=Gn(Bi(i),n.textContent,e),t.set(n,a)),r===0)return a;let o=[];for(let[e,t,n]of a)o.push([e+r,t+r,n]);return o}function r(e,t){let r=[];return e.doc.nodesBetween(t.from,t.to,(t,i)=>{if(t.type.spec.code)return!1;if(!t.isTextblock)return!0;if(t.childCount===0)return!1;let a=n(t,i+1,e.schema);return a.length>0&&r.push(...a),!1}),r}return new b({key:new x(`inline-mark`),appendTransaction(e,t,n){for(let t of e)if(t.getMeta(er))return null;let i=r(n,rr(e,n));if(i.length===0)return null;let a=n.tr.step(new N(i));return a.setMeta(er,!0),a.setMeta(`addToHistory`,!1),a},view(e){return e.dispatch(ar(e.state)),{}}})}function ar(e){return e.tr.setMeta(`inline-marks-trigger`,!0)}function or(e){return m(ir(e))}function sr(){return u({name:`mdImage`,inclusive:!1,attrs:{src:{default:``},alt:{default:``},title:{default:``},width:{default:null},height:{default:null}},toDOM:()=>[`span`,{class:`md-image`},0],parseDOM:[{tag:`span.md-image`}]})}function cr(){return u({name:`mdMark`,inclusive:!1,toDOM:()=>[`span`,{class:`md-mark`},0],parseDOM:[{tag:`span.md-mark`}]})}function lr(){return u({name:`mdEm`,toDOM:()=>[`em`,0],parseDOM:[{tag:`em`}]})}function ur(){return u({name:`mdStrong`,toDOM:()=>[`strong`,0],parseDOM:[{tag:`strong`}]})}function dr(){return u({name:`mdCode`,toDOM:()=>[`code`,0],parseDOM:[{tag:`code`}]})}function fr(){return u({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 pr(){return u({name:`mdLinkUri`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-uri`},0],parseDOM:[{tag:`span.md-link-uri`}]})}function mr(){return u({name:`mdLinkTitle`,inclusive:!1,toDOM:()=>[`span`,{class:`md-link-title`},0],parseDOM:[{tag:`span.md-link-title`}]})}function hr(){return u({name:`mdDel`,toDOM:()=>[`del`,0],parseDOM:[{tag:`del`}]})}function gr(){return u({name:`mdHighlight`,toDOM:()=>[`mark`,0],parseDOM:[{tag:`mark`}]})}function _r(){return u({name:`mdTag`,toDOM:()=>[`span`,{class:`md-tag`},0],parseDOM:[{tag:`span.md-tag`}]})}function vr(){return u({name:`mdWikilink`,inclusive:!1,attrs:{target:{default:``},display:{default:``}},toDOM:()=>[`span`,{class:`md-wikilink`},0],parseDOM:[{tag:`span.md-wikilink`}]})}function yr(){return u({name:`mdFile`,inclusive:!1,attrs:{href:{default:``},name:{default:``},title:{default:``}},toDOM:()=>[`span`,{class:`md-file`},0],parseDOM:[{tag:`span.md-file`}]})}function br(){return u({name:`mdPack`,excludes:``,inclusive:!1,attrs:{key:{},data:{default:null}},toDOM:e=>[`span`,{class:`md-pack`,"data-key":e.attrs.key},0],parseDOM:[{tag:`span.md-pack`}]})}function xr(){return _(cr(),lr(),ur(),dr(),fr(),pr(),mr(),hr(),gr(),_r(),vr(),sr(),yr(),br())}function Sr(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 H={em:{node:R.Emphasis,delim:`*`},strong:{node:R.StrongEmphasis,delim:`**`},code:{node:R.InlineCode,delim:"`"},del:{node:R.Strikethrough,delim:`~~`},highlight:{node:R.Highlight,delim:`==`}},Cr=new Set([R.EmphasisMark,R.CodeMark,R.LinkMark,R.StrikethroughMark,R.HighlightMark]);function U(e){return[e.children[0],e.children.at(-1)]}function wr(e){let{type:t,children:n}=e;if(t===R.Emphasis||t===R.StrongEmphasis||t===R.Strikethrough||t===R.Highlight)return[n[0].to,n.at(-1).from];if(t===R.Link||t===R.Image){let e=n.find((e,t)=>t>0&&e.type===R.LinkMark);return e?[n[0].to,e.from]:null}return null}function W(e,t,n){for(let r of e){if(r.to<=t||r.from>=n||t<=r.from&&r.to<=n)continue;let i=wr(r);return i&&i[0]<=t&&n<=i[1]?W(r.children,t,n):W(e,Math.min(t,r.from),Math.max(n,r.to))}return[t,n]}function Tr(e,t,n){for(let r of e)if(!(r.to<=t||r.from>=n)&&(t>r.from||r.to>n))return Tr(e,Math.min(t,r.from),Math.max(n,r.to));return[t,n]}function Er(e,t,n){for(;t<n&&P(e.charCodeAt(t));)t++;for(;n>t&&P(e.charCodeAt(n-1));)n--;return[t,n]}function Dr(e,t,n,r){let i=L(I(e),e=>e.type===r.node||Cr.has(e.type));for(let r=t;r<n;r++)if(!P(e.charCodeAt(r))&&i.every(e=>!(e.from<=r&&r<e.to)))return!1;return!0}function Or(e,t,n,r,i){let a=I(e),o=L(a,e=>e.type===r.node);return i?jr(e,o,t,n):kr(e,a,o,t,n,r)}function kr(e,t,n,r,i,a){for(let e=0;e!==i-r;){e=i-r,[r,i]=W(t,r,i);for(let e of n)e.to===r&&(r=e.from),e.from===i&&(i=e.to)}let o=[];for(let e of n)if(r<=e.from&&e.to<=i){let[t,n]=U(e);o.push({from:t.from,to:t.to,insert:``}),o.push({from:n.from,to:n.to,insert:``})}let[s,c]=Ar(e,r,i,o,a);return o.push({from:r,to:r,insert:s},{from:i,to:i,insert:c}),o}function Ar(e,t,n,r,i){if(i.node!==R.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(Sr(a)+1),s=a.startsWith("`")||a.endsWith("`")?` `:``;return[o+s,s+o]}function jr(e,t,n,r){let i=[];for(let a of t){if(a.to<=n||a.from>=r)continue;let[t,o]=U(a),s=Math.max(n,t.to),c=Math.min(r,o.from);for(s>=c&&([s,c]=[t.to,o.from]),[s,c]=Tr(a.children.slice(1,-1),s,c);s>t.to&&P(e.charCodeAt(s-1));)s--;for(;c<o.from&&P(e.charCodeAt(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 Mr(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=I(e),o=L(a,e=>e.type===n.node).findLast(e=>e.from<=t&&t<=e.to);if(o){let[e,n]=U(o);return{kind:`move`,pos:t===o.from?e.to:t===o.to?n.from:o.to}}return Nr(a,t)||e[t-1]===r[0]||e[t]===r[0]?null:{kind:`insert`,pos:t}}function Nr(e,t){for(let n of e)if(n.from<t&&t<n.to){let e=wr(n);return!e||t<e[0]||t>e[1]?!0:Nr(n.children,t)}return!1}function G(e){return(t,n)=>{if(t.selection.empty)return Pr(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]=Er(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:Dr(a,c,l,e)}),!1});let c=s.length>0&&s.every(e=>e.active),l=s.filter(e=>c||!e.active).flatMap(t=>Or(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(S.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 Pr(e,t,n){let{$from:r}=t.selection,i=r.parent;if(!i.isTextblock||i.type.spec.code)return!1;let a=Mr(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(S.create(o.doc,i+a.pos)),a.kind===`insert`&&(o.insertText(e.delim+e.delim,i+a.pos),o.setSelection(S.create(o.doc,i+a.pos+e.delim.length))),n(o.scrollIntoView())}return!0}function Fr(){return o({toggleEm:()=>G(H.em),toggleStrong:()=>G(H.strong),toggleCode:()=>G(H.code),toggleDel:()=>G(H.del),toggleHighlight:()=>G(H.highlight)})}function Ir(){return l({"Mod-b":G(H.strong),"Mod-i":G(H.em),"Mod-e":G(H.code),"Mod-Shift-x":G(H.del),"Mod-Shift-h":G(H.highlight)})}function Lr(){return _(Fr(),Ir())}function Rr(e,t,n){let r;return e.doc.nodesBetween(t.from,t.to,(e,i)=>(e.isText&&e.marks.some(e=>e.type.name===n)&&(r={from:Math.max(i,t.from),to:Math.min(i+e.nodeSize,t.to)}),!0)),r}function K(e,t){let n=O(e,t,`mdLinkText`),r=O(e,t,`mdPack`),i=r??n;if(!i)return;let a=r?.mark.attrs,o=n?.mark.attrs?.href??``;if(!r||a?.key!==`link`)return{unit:{from:i.from,to:i.to},href:o,title:``};let s=Rr(e,i,`mdLinkUri`),c=s?s.from-2:i.to-3,l=s?s.from:i.to-1;return{unit:{from:i.from,to:i.to},label:{from:i.from+1,to:c},dest:{from:l,to:i.to-1},href:a.data.href,title:a.data.title}}function zr(e){let t=e.trim();return t?Kn(t)??t:``}function Br(e,t){return e+(t?` "${t.replaceAll(/(["\\])/g,String.raw`\$1`)}"`:``)}function Vr(e){let{selection:t}=e,{$from:n,$to:r,empty:i}=t;if(i||!n.sameParent(r)||!g(t))return;let a=n.parent;if(!a.isTextblock||a.type.spec.code)return;let o=n.start(),[s,c]=Er(a.textContent,n.parentOffset,r.parentOffset);if(!(s>=c))return{from:o+s,to:o+c}}function Hr(e={}){return(t,n)=>{let r=Br(zr(e.href??``),e.title??``),i=Vr(t);if(!i)return!1;if(n){let{from:e,to:a}=i,o=t.tr,s=`](${r})`;o.insertText(s,a).insertText(`[`,e),n(o.setSelection(S.create(o.doc,e,a+1+s.length)).scrollIntoView())}return!0}}function Ur(e){return(t,n)=>{let r=K(t,t.selection.from);if(!r?.dest)return!1;let i=Br(zr(e.href??r.href),e.title??r.title);return n&&n(t.tr.insertText(i,r.dest.from,r.dest.to).scrollIntoView()),!0}}function Wr(){return(e,t)=>{let n=K(e,e.selection.from);return n?.label?(t&&t(e.tr.delete(n.label.to,n.unit.to).delete(n.unit.from,n.label.from).scrollIntoView()),!0):!1}}function Gr(){return o({insertLink:Hr,updateLink:Ur,removeLink:Wr})}function Kr(e){return(t,n,r)=>{let i=K(t,t.selection.from);if(i){if(n&&r){let{unit:{from:a,to:o}}=i;n(t.tr.setSelection(S.create(t.doc,a,o)).scrollIntoView()),r.focus(),e({from:a,to:o,link:i})}return!0}let a=Vr(t);if(a){if(n&&r){let{from:i,to:o}=a;n(t.tr.setSelection(S.create(t.doc,i,o)).scrollIntoView()),r.focus(),e({from:i,to:o,link:void 0})}return!0}return!1}}function qr(e){return l({"Mod-k":Kr(e)})}function Jr(){return f({type:`list`,attr:`marker`,default:null,splittable:!0,toDOM:e=>e===`)`||e===`*`||e===`+`?[`data-list-marker`,e]:null,parseDOM:e=>{let t=e.getAttribute(`data-list-marker`);return t===`)`||t===`*`||t===`+`?t:null}})}function Yr(){return f({type:`list`,attr:`taskMarker`,default:null,splittable:!0,toDOM:e=>e===`X`?[`data-list-task-marker`,e]:null,parseDOM:e=>e.getAttribute(`data-list-task-marker`)===`X`?`X`:null})}function Xr(e){return e===2||e===3||e===4}function Zr(){return f({type:`list`,attr:`markerGap`,default:1,splittable:!0,toDOM:e=>Xr(e)?[`data-list-marker-gap`,String(e)]:null,parseDOM:e=>{let t=Number.parseInt(e.getAttribute(`data-list-marker-gap`)??``,10);return Xr(t)?t:1}})}const Qr=[D(/^\s?([*-])\s$/,{kind:`bullet`,collapsed:!1}),D(/^\s?(\d+)\.\s$/,({match:e})=>{let t=e[1],n=t?parseInt(t,10):void 0;return{kind:`ordered`,collapsed:!1,order:n&&n>=2&&Number.isSafeInteger(n)?n:null}}),D(/^\s?\[([\sXx]?)]\s$/,({match:e})=>({kind:`task`,checked:[`x`,`X`].includes(e[1]),collapsed:!1})),D(/^\s?\+\s$/,{kind:`task`,marker:`+`,checked:!1,collapsed:!1})];function $r(){return _(Qr.map(We))}function ei(){return E({kind:`task`,marker:`+`})}function ti(){return E({kind:`task`,marker:null})}function ni(){return o({wrapInCircleTask:ei,wrapInSquareTask:ti})}function ri(e){let{$from:t}=e.selection;for(let e=t.depth;e>0;e--){let n=t.node(e);if(n.type.name===`list`)return n.attrs}return null}function ii(){return(e,t,n)=>{let r=ri(e),i=r?.kind===`task`&&r.marker!==`+`,a;return a=i&&!r?.checked?{kind:`task`,marker:r?.marker??null,checked:!0}:i&&r?.checked?{kind:`bullet`,marker:null,checked:!1}:{kind:`task`,marker:null,checked:!1},E(a)(e,t,n)}}function ai(){return(e,t,n)=>{let r=ri(e),i=r?.kind===`task`&&r.marker===`+`,a;return a=i&&!r?.checked?{kind:`task`,marker:`+`,checked:!0}:i&&r?.checked?{kind:`bullet`,marker:null,checked:!1}:{kind:`task`,marker:`+`,checked:!1},E(a)(e,t,n)}}function oi(e){return e.type.name===`list`&&e.attrs.kind===`bullet`&&e.childCount>=2&&e.firstChild?.type!==e.type}const si=e=>{let t=e.attrs;return t.kind===`task`?{...t,checked:!t.checked}:oi(e)?{...t,collapsed:!t.collapsed}:t};function ci(){return m(()=>[new b({props:{handleDOMEvents:{mousedown:(e,t)=>tt({view:e,event:t,onListClick:si})}}}),Qe(),new b({props:{transformCopied:nt}}),$e()])}function li(){return o({toggleListCollapsed:()=>et({isToggleable:oi})})}function ui(){return l({"Mod-Enter":ii(),"Mod-Shift-Enter":ai(),"Mod-.":et({isToggleable:oi}),"Mod-Shift-7":Ze({kind:`ordered`,collapsed:!1}),"Mod-Shift-8":Ze({kind:`bullet`,collapsed:!1}),"Mod-Shift-9":Ze({kind:`task`,checked:!1,collapsed:!1})})}function di(){return _(Ye(),ci(),qe(),Ge(),Je(),Ke(),$r(),ui(),Jr(),Yr(),Zr(),ni(),li())}function fi(e){let{$from:t}=e.selection;for(let e=t.depth;e>0;e--){let n=t.node(e).type.name;if(n===`tableCell`||n===`tableHeaderCell`)return!0}return!1}const pi=`paragraph`;function mi(){return _(p({name:`tableCell`,content:pi}),p({name:`tableHeaderCell`,content:pi}))}const hi=(e,t)=>{let{selection:n}=e;return!dt(n)||!n.isColSelection()||!n.isRowSelection()?!1:ut(e,t)};function gi(){return v(l({Backspace:hi,Delete:hi}),t.high)}function _i(){return _(lt(),ct(),rt(),st(),mi(),ot({allowTableNodeSelection:!0}),it(),at(),gi())}function vi(e){let{selection:t}=e,{$from:n,$to:r}=t;if(ae(t)&&n.depth===0||n.depth>0&&r.depth>0&&n.index(0)===r.index(0))return n.index(0)}function yi(e){return(t,n)=>{if(fi(t))return!1;let r=vi(t);if(r==null)return!1;let i=r+e;if(i<0||i>=t.doc.childCount)return!1;if(n){let{selection:a}=t,o=Math.min(r,i),s=a.$from.posAtIndex(o,0),c=t.doc.child(o),l=t.doc.child(o+1),u=t.tr.replaceWith(s,s+c.nodeSize+l.nodeSize,[l,c]),d=e===-1?-c.nodeSize:l.nodeSize,f=ae(a)?xe.create(u.doc,a.from+d):S.create(u.doc,a.anchor+d,a.head+d);u.setSelection(f),n(u.scrollIntoView())}return!0}}function bi(e){return(t,n,r)=>Xe(e)(t,n,r)||yi(e===`up`?-1:1)(t,n,r)}function xi(){return l({"Alt-ArrowUp":bi(`up`),"Alt-ArrowDown":bi(`down`)})}function Si(){return p({name:`paragraph`,content:`inline*`,group:`block`,whitespace:`pre`,parseDOM:[{tag:`p`}],toDOM(){return[`p`,0]}})}function Ci(){return _(v(Si(),t.highest),ft(),pt())}const q=new x(`meowdownPendingReplacement`);function J(e){return q.getState(e)?.pending??null}function wi(e,t){switch(e.type){case`start`:return{pending:{from:e.from,to:e.to,mode:e.mode,text:``}};case`append`:return t.pending?{pending:{...t.pending,text:t.pending.text+e.text}}:t;case`accept`:return t.pending?{pending:null,ended:{pending:t.pending,outcome:`accepted`}}:t;case`discard`:return t.pending?{pending:null,ended:{pending:t.pending,outcome:`discarded`}}:t}}const Ti=new b({key:q,state:{init:()=>({pending:null}),apply:(e,t)=>{let n=e.getMeta(q);if(n)return wi(n,t);if(e.docChanged&&t.pending){let n=e.mapping.mapResult(t.pending.from,1),r=e.mapping.mapResult(t.pending.to,-1),i=Math.min(n.pos,r.pos),a=Math.max(n.pos,r.pos);return(n.deletedAfter&&r.deletedBefore||i>=a)&&t.pending.mode===`replace`?{pending:null,ended:{pending:t.pending,outcome:`discarded`}}:{pending:{...t.pending,from:i,to:a}}}return t}},props:{decorations:e=>{let t=J(e);return!t||t.from>=t.to?null:w.create(e.doc,[C.inline(t.from,t.to,{class:`md-pending-replacement`})])}}});function Ei(e){return(t,n)=>{let{from:r,to:i,mode:a}=e;return r<0||i>t.doc.content.size||r>i||r===i&&a===`replace`?!1:(n?.(t.tr.setMeta(q,{type:`start`,from:r,to:i,mode:a})),!0)}}function Di(e){return(t,n)=>J(t)?(n?.(t.tr.setMeta(q,{type:`append`,text:e})),!0):!1}function Oi(){return(e,t)=>J(e)?(t?.(e.tr.setMeta(q,{type:`discard`})),!0):!1}function ki(e={}){return(t,n)=>{let r=J(t);if(!r||!r.text.trim())return!1;if(n){let i=e.mode??r.mode,a=Hi(t.schema),o=Y(r.text,{nodes:a}),s=t.tr;if(s.setMeta(q,{type:`accept`}),i===`append`){let e=t.doc.resolve(r.to).after(1);s.insert(e,o.content),s.setSelection(S.near(s.doc.resolve(e+o.content.size),-1))}else{let e=t.doc.resolve(r.from),n=t.doc.resolve(r.to),i=o.childCount===1?o.firstChild:null;i?.type.name===`paragraph`&&e.sameParent(n)&&e.parent.isTextblock?(s.replaceWith(r.from,r.to,i.content),s.setSelection(S.near(s.doc.resolve(r.from+i.content.size),-1))):(s.replaceRange(r.from,r.to,new T(o.content,0,0)),s.setSelection(S.near(s.doc.resolve(s.mapping.map(r.to)),-1)))}n(s.scrollIntoView())}return!0}}function Ai(){return o({startPendingReplacement:Ei,appendPendingReplacementText:Di,acceptPendingReplacement:ki,discardPendingReplacement:Oi})}function ji(){return l({"Mod-Enter":ki(),Escape:Oi()})}function Mi(){return _(m(Ti),Ai(),ji())}function Ni(e){return m(new b({view:()=>({update:(t,n)=>{let r=q.getState(n),i=q.getState(t.state);!i||r===i||(i.pending?i.pending!==r?.pending&&e({type:`update`,pending:i.pending}):i.ended&&i.ended!==r?.ended&&e({type:`ended`,pending:i.ended.pending,outcome:i.ended.outcome}))}})}))}function Pi(e){return _(Ci(),ge(),en(),ye(),pe(),di(),sn(),_i(),me(),ln(),un(),xr(),Gt(),$t(),xi(),or(e),Lr(),Gr(),Un(),Bt({marks:[{name:`mdImage`,modes:[`hide`,`focus`,`show`]},{name:`mdWikilink`,modes:[`hide`,`focus`,`show`]},{name:`mdFile`,modes:[`hide`,`focus`,`show`]}]}),a(),i(),c(),_e(),be(),ve(),Zt(),Mi())}function Fi(e={}){return Pi(e)}const Ii=y(()=>{let e=Fi().schema;if(e==null)throw Error(`Unexpected empty schema`);return e}),Li=y(()=>r(Ii())),Ri=y(()=>n(Ii())),zi=`meowdown_mark_builders`;function Bi(e){let t=e.cached[zi];if(t)return t;let r=n(e);return e.cached[zi]=r,r}const Vi=`meowdown_node_builders`;function Hi(e){let t=e.cached[Vi];if(t)return t;let n=r(e);return e.cached[Vi]=n,n}function Y(e,t={}){let{nodes:n=Li(),frontmatter:r=!1}=t,i,a=e;if(r){let[t,n]=Wi(e);i=t,n&&(a=e.slice(n))}let o=Gi(n,Mn.parse(a).cursor(),a);return n.doc(i===void 0?{}:{frontmatter:i},o)}const Ui=/^---[ \t]*\r?\n([\s\S]*?\n)?---[ \t]*(?:\r?\n|$)/;function Wi(e){let t=Ui.exec(e);return t?[(t[1]??``).replace(/\r?\n$/,``),t[0].length]:[]}function Gi(e,t,n){let r=[];if(!t.firstChild())return r;do r.push(...Ki(e,t,n));while(t.nextSibling());return t.parent(),r}function Ki(e,t,n){switch(t.type.id){case R.ATXHeading1:return[X(e,t,n,1,!1)];case R.ATXHeading2:return[X(e,t,n,2,!1)];case R.ATXHeading3:return[X(e,t,n,3,!1)];case R.ATXHeading4:return[X(e,t,n,4,!1)];case R.ATXHeading5:return[X(e,t,n,5,!1)];case R.ATXHeading6:return[X(e,t,n,6,!1)];case R.SetextHeading1:return[X(e,t,n,1,!0)];case R.SetextHeading2:return[X(e,t,n,2,!0)];case R.Paragraph:return[Q(e,t,n)];case R.CommentBlock:return[Qi(e,t,n)];case R.HTMLBlock:case R.ProcessingInstructionBlock:return[Q(e,t,n)];case R.Blockquote:return[$i(e,t,n)];case R.BulletList:return ea(e,t,n,`bullet`);case R.OrderedList:return ea(e,t,n,`ordered`);case R.FencedCode:case R.CodeBlock:return[na(e,t,n)];case R.HorizontalRule:{let r=n.slice(t.from,t.to).trimEnd();return[e.horizontalRule({marker:r===`---`?null:r})]}case R.Table:return[ra(e,t,n)];case R.Task:return[Q(e,t,n)];default:return n.slice(t.from,t.to).trim()===``?[]:(console.warn(`[meowdown] unsupported lezer block "${t.type.name}"`),[Q(e,t,n)])}}function X(e,t,n,r,i){let a=t.from,o=t.from,s=t.to,c=-1,l=-1;if(t.firstChild()){t.type.id===R.HeaderMark&&t.from===a&&(o=t.to);let e=-1,n=-1,r=-1;do e=t.type.id,n=t.from,r=t.to;while(t.nextSibling());e===R.HeaderMark&&n>o&&(s=n,c=n,l=r),t.parent()}let u=Xi(n.slice(o,s),Z(n,o)).trim(),d=i?qi(n,c,l)||1:null,f=!i&&c>=0&&Ji(n,c,l)||null;return e.heading({level:r,setextUnderline:d,closingHashes:f},u)}function qi(e,t,n){if(t<0)return 0;let r=0;for(let i=t;i<n;i++){let t=e.charCodeAt(i);(t===61||t===45)&&r++}return r}function Ji(e,t,n){if(t<0)return 0;let r=0;for(let i=t;i<n;i++)e.charCodeAt(i)===35&&r++;return r}function Z(e,t){let n=e.lastIndexOf(`
|
|
3
|
+
`,t-1)+1,r=0;for(let i=n;i<t;i++)r+=e.charCodeAt(i)===9?4-r%4:1;return r}function Yi(e,t){let n=0,r=0;for(;r<e.length&&n<t;){let t=e.charCodeAt(r);if(t===32)n+=1;else if(t===9)n+=4-n%4;else break;r++}return e.slice(r)}function Xi(e,t){return t===0||!e.includes(`
|
|
4
4
|
`)?e:e.split(`
|
|
5
|
-
`).map((e,n)=>n===0?e:
|
|
6
|
-
`)}function
|
|
5
|
+
`).map((e,n)=>n===0?e:Yi(e,t)).join(`
|
|
6
|
+
`)}function Zi(e,t,n){return e.paragraph(Xi(t,n))}function Q(e,t,n){let r=t.from,i=t.to,a=Z(n,r);if(t.firstChild()){let o=``,s=r;do t.type.id===R.QuoteMark&&(o+=n.slice(s,t.from),s=t.to,P(n.charCodeAt(s))&&(s+=1));while(t.nextSibling());return t.parent(),o+=n.slice(s,i),Zi(e,o,a)}return Zi(e,n.slice(r,i),a)}function Qi(e,t,n){let r=Z(n,t.from),i=Xi(n.slice(t.from,t.to),r);return e.htmlComment({content:i})}function $i(e,t,n){let r=[];if(t.firstChild()){do{if(t.type.id===R.QuoteMark)continue;r.push(...Ki(e,t,n))}while(t.nextSibling());t.parent()}return e.blockquote(r)}function ea(e,t,n,r){let i=[];if(t.firstChild()){do t.type.id===R.ListItem&&i.push(ta(e,t,n,r));while(t.nextSibling());t.parent()}return i}function ta(e,t,n,r){let i=[],a,o,s,c,l,u;if(t.firstChild()){do{if(t.type.id!==R.ListMark&&u==null&&(u=Z(n,t.from)),t.type.id===R.ListMark){if(r===`ordered`){let e=n.charCodeAt(t.to-1);e===41?c=`)`:e===46&&(c=`.`);let r=Number.parseInt(n.slice(t.from,t.to),10);s=Number.isFinite(r)?r:1}else{let e=n.charCodeAt(t.from);c=e===42?`*`:e===43?`+`:`-`}l=Z(n,t.to);continue}if(r===`bullet`&&t.type.id===R.Task){let r=t.from,s=t.to;if(a=!1,t.firstChild()){if(t.type.id===R.TaskMarker){let e=n.charCodeAt(t.from+1);e===120?(a=!0,o=`x`):e===88&&(a=!0,o=`X`),r=t.to}t.parent()}P(n.charCodeAt(r))&&(r+=1);let c=n.slice(r,s);i.push(Zi(e,c,Z(n,r)));continue}i.push(...Ki(e,t,n))}while(t.nextSibling());t.parent()}let d=u!=null&&l!=null?u-l:1,f=a!=null,p=!f&&r===`bullet`&&c===`+`;return e.list({kind:f?`task`:r,order:r===`ordered`?s??1:null,checked:a??!1,collapsed:p,marker:p?null:c,taskMarker:o,markerGap:d>=2&&d<=4?d:1},i)}function na(e,t,n){let r=``,i=``;if(t.firstChild()){do switch(t.type.id){case R.CodeInfo:r=n.slice(t.from,t.to);break;case R.CodeText:i+=n.slice(t.from,t.to);break}while(t.nextSibling());t.parent()}return e.codeBlock({language:r},i)}function ra(e,t,n){let r=0;if(t.firstChild()){do t.type.id===R.TableDelimiter&&(r=ia(n.slice(t.from,t.to)));while(t.nextSibling());t.parent()}let i=[];if(t.firstChild()){do{let a=t.type.id;a===R.TableHeader?i.push(aa(e,t,n,!0,r)):a===R.TableRow&&i.push(aa(e,t,n,!1,r))}while(t.nextSibling());t.parent()}return e.table(i)}function ia(e){return e.split(`|`).filter(e=>e.trim()!==``).length}function aa(e,t,n,r,i){let a=Array(i).fill(``);if(t.firstChild()){let e=t.type.id===R.TableDelimiter,r=0;do if(t.type.id===R.TableDelimiter)r++;else if(t.type.id===R.TableCell){let o=r-+!!e;o>=0&&o<i&&(a[o]=n.slice(t.from,t.to).trim().replaceAll(String.raw`\|`,`|`))}while(t.nextSibling());t.parent()}let o=a.map(t=>{let n=e.paragraph(t);return r?e.tableHeaderCell(n):e.tableCell(n)});return e.tableRow(o)}function $(e,t={}){let n=new la;return t.frontmatter&&oa(e.attrs.frontmatter,n),ua(e,n),n.finish()}function oa(e,t){e!==null&&(t.write(`---`),t.write(`
|
|
7
7
|
`),e!==``&&(t.write(e),t.write(`
|
|
8
|
-
`)),t.write(`---`),t.closeBlock())}const
|
|
9
|
-
`+i.repeat(Math.max(1,r))),t.closeBlock();return}t.write(
|
|
8
|
+
`)),t.write(`---`),t.closeBlock())}const sa=[``,`# `,`## `,`### `,`#### `,`##### `,`###### `];function ca(e,t){let n=e.attrs,r=n.setextUnderline;if(r!=null&&e.content.size>0&&n.level<=2){ma(e,t);let i=n.level===1?`=`:`-`;t.write(`
|
|
9
|
+
`+i.repeat(Math.max(1,r))),t.closeBlock();return}t.write(sa[n.level]??`# `),ma(e,t);let i=n.closingHashes;i!=null&&i>0&&t.write(` `+`#`.repeat(i)),t.closeBlock()}var la=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(`
|
|
10
10
|
`)){this.parts.push(e);return}let t=e.split(`
|
|
11
11
|
`);for(let e=0;e<t.length;e++)e>0&&this.parts.push(`
|
|
12
12
|
`,this.linePrefix),t[e]!==``&&this.parts.push(t[e])}closeBlock(){this.atLineStart&&this.pendingFirst!==null&&(this.emitDeferredBlankLine(),this.parts.push(this.pendingFirst.trimEnd()),this.pendingFirst=null,this.atLineStart=!1),this.atLineStart||this.parts.push(`
|
|
13
13
|
`),this.atLineStart=!0,this.deferredBlankPrefix=this.linePrefix}suppressBlank(){this.deferredBlankPrefix=null}withPrefix(e,t,n){let r=this.linePrefix,i=this.pendingFirst;if(this.linePrefix=r+e,t!==null){let e=i??r;this.pendingFirst=e+t}n(),this.linePrefix=r,this.pendingFirst=t===null?i:null}finish(){return this.parts.join(``).replace(/\s+$/,``)+`
|
|
14
14
|
`}emitDeferredBlankLine(){let e=this.deferredBlankPrefix;e!==null&&(this.parts.push(e.trimEnd(),`
|
|
15
|
-
`),this.deferredBlankPrefix=null)}};function
|
|
15
|
+
`),this.deferredBlankPrefix=null)}};function ua(e,t){switch(e.type.name){case`doc`:da(e,t);return;case`paragraph`:ma(e,t),t.closeBlock();return;case`heading`:ca(e,t);return;case`blockquote`:t.withPrefix(`> `,`> `,()=>da(e,t)),t.closeBlock();return;case`list`:ha(e,t,pa(e));return;case`codeBlock`:ga(e,t);return;case`horizontalRule`:{let{marker:n}=e.attrs;t.write(n||`---`),t.closeBlock();return}case`htmlComment`:{let{content:n}=e.attrs;t.write(n),t.closeBlock();return}case`table`:_a(e,t);return;case`text`:e.text&&t.write(e.text);return}}function da(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(),ua(a,t),i++;continue}let o=i+1;for(;o<r&&e.child(o).type.name===`list`;)o++;let s=fa(e,i,o);for(let r=i;r<o;r++)(r===i?n&&i>0:s)&&t.suppressBlank(),ha(e.child(r),t,s);i=o}}function fa(e,t,n){for(let r=t;r<n;r++)if(!pa(e.child(r)))return!1;return!0}function pa(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 ma(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 ha(e,t,n){let{kind:r,marker:i,order:a,taskMarker:o,collapsed:s,markerGap:c,checked:l}=e.attrs,u=r===`task`?i===`+`?`+`:i===`*`?`*`:`-`:s?`+`:i===`*`?`*`:`-`,d=i===`)`?`)`:`.`,f=o===`X`?`X`:`x`,p=Math.min(Math.max(c??1,1),4),m=`${r===`ordered`?`${a??1}${d}`:u}${` `.repeat(p)}`,h=r===`task`?`${m}[${l?f:` `}] `:m,ee=` `.repeat(m.length);t.withPrefix(ee,h,()=>da(e,t,n)),t.closeBlock()}function ga(e,t){let n=e.attrs.language||``,r=e.textContent,i="`".repeat(Sr(r,2)+1);t.write(i),n&&t.write(n),t.write(`
|
|
16
16
|
`),r&&(t.write(r),t.write(`
|
|
17
|
-
`)),t.write(i),t.closeBlock()}function
|
|
17
|
+
`)),t.write(i),t.closeBlock()}function _a(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(ya(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(va(s,i)),t.write(`
|
|
18
18
|
`),t.write(o);for(let e=0;e<n;e++)e!==a&&(t.write(`
|
|
19
|
-
`),t.write(
|
|
19
|
+
`),t.write(va(r[e],i)));t.closeBlock()}function va(e,t){let n=`|`;for(let r=0;r<t;r++)n+=` `+(e[r]??``)+` |`;return n}function ya(e){let t=e.textContent.trim();return!t.includes(`|`)&&!t.includes(`
|
|
20
20
|
`)?t:t.replaceAll(`|`,String.raw`\|`).replaceAll(`
|
|
21
|
-
`,` `)}function
|
|
22
|
-
`).filter(e=>!
|
|
23
|
-
`)}function Sa(e,t){let{from:n,to:r}=e.state.selection;e.dispatch(ut(e.state.tr.insertText(t,n,r)));let i=e.state.tr.insertText(``,n,n+t.length);e.dispatch(ut(i))}function Ca(){return m(new b({key:ya,props:{handlePaste:(e,t,n)=>{let r=e.state.selection.$from.parent;if(!r.inlineContent||r.type.spec.code)return!1;let i=xa(t,n);if(!i)return!1;let a=ba(i);return a?(Sa(e,a),!0):!1}}}))}const wa=new x(`meowdown-exit-boundary`);function Ta(e,t){let{$anchor:n,$head:r}=e.selection,i=t>0?n.max(r):n.min(r),a=i.parent.inlineContent?i.depth?e.doc.resolve(t>0?i.after():i.before()):void 0:i;return!!(a&&ye.findFrom(a,t))}function Ea(e,t){let{state:n}=e,{selection:r}=n;return g(r)&&!r.empty||ne(r)||r.$from.parent.inlineContent&&!e.endOfTextblock(t<0?`up`:`down`)?!0:Ta(n,t)}function Da(e){return new b({key:wa,props:{handleKeyDown:(t,n)=>{if(n.shiftKey||n.altKey||n.ctrlKey||n.metaKey)return!1;let r=n.key===`ArrowUp`?-1:n.key===`ArrowDown`?1:void 0;return!(!r||Ea(t,r)||e({direction:r<0?`up`:`down`,event:n})===!1)}}})}function Oa(e){return v(m(Da(e)),t.low)}function ka(e){return e.type.startsWith(`image/`)}function Aa(e,t){return ka(e)?``:`[${Na(e.name)}](${t})`}function ja(e,t){return!e||!t.onFilePaste?[]:Array.from(e.files)}const Ma=e=>{console.error(`[meowdown] failed to save pasted file:`,e)};function Na(e){return e.replaceAll(/[\\[\]]/g,String.raw`\$&`)}async function Pa(e,t,n,r){let{onFilePaste:i}=n;if(!i)return;let a=n.onFileSaveError??Ma,o=r,s=!1;for(let n of t){let t;try{t=await i(n)}catch(e){a(e,n);continue}if(!t||e.isDestroyed)continue;let r=Aa(n,t),c=s?`\n${r}`:r,l=o==null?e.state.tr.insertText(c):e.state.tr.insertText(c,o);e.dispatch(l),s=!0,o!=null&&(o+=c.length)}}function Fa(e){return new b({key:new x(`file-paste`),props:{handlePaste:(t,n)=>{let r=ja(n.clipboardData,e);return r.length===0?!1:(Pa(t,r,e),!0)},handleDrop:(t,n)=>{let r=ja(n.dataTransfer,e);return r.length===0?!1:(Pa(t,r,e,t.posAtCoords({left:n.clientX,top:n.clientY})?.pos),!0)}}})}function Ia(e={}){return v(m(Fa(e)),t.high)}const La=(e,t)=>{let n={type:`highlight`,children:e.all(t)};return e.patch(t,n),n},Ra=(e,t,n,r)=>{let i=e,a=n.createTracker(r),o=a.move(`==`);return o+=a.move(n.containerPhrasing(i,{...a.current(),before:o,after:`=`})),o+=a.move(`==`),o};function za(){return ht().use(dt).use(ft,{handlers:{mark:La}}).use(pt).use(mt,{bullet:`-`,emphasis:`*`,strong:`*`,fence:"`",fences:!0,rule:`-`,ruleRepetition:3,listItemIndent:`one`,handlers:{highlight:Ra}}).freeze()}const Ba=y(za);function Va(e){return String(Ba().processSync(e))}const Ha=new x(`meowdown-html-paste`);function Ua(){return m(new b({key:Ha,props:{transformPastedHTML:(e,t)=>{if(e.includes(`data-pm-slice`))return e;let n=t.state.selection.$from.parent;if(!n.inlineContent||n.type.spec.code)return e;let r=Va(e);if(!r.trim())return e;let i=Y(r,{nodes:vi(t.state.schema)}),a=Ee.fromSchema(t.state.schema),o=document.createElement(`div`);return o.append(a.serializeFragment(i.content)),o.innerHTML}}}))}const Wa=new x(`meowdown-image-click`);function Ga(e,t){let n=D(e,t,`mdImage`);if(!n)return;let{src:r,alt:i}=n.mark.attrs;return{from:n.from,to:n.to,src:r,alt:i}}function Ka(e){return m(new b({key:Wa,props:{handleClick:(t,n,r)=>{let i=r.target?.closest?.(`.md-image-view-preview`);if(!i)return!1;let a=i.closest(`.md-image-view`)?.querySelector(`.md-image-view-content`);if(!a)return!1;let o=Ga(t.state,t.posAtDOM(a,0));return o?(e({src:o.src,alt:o.alt,event:r}),!0):!1}}}))}function qa(e){return/^https?:\/\//i.test(e)?e:void 0}function Ja(e){let t=document.createElement(`iframe`);return t.src=e.src,t.title=e.title,t.className=e.className,t.dataset.testid=e.testid,t.loading=`lazy`,t.referrerPolicy=`strict-origin-when-cross-origin`,t.setAttribute(`frameborder`,`0`),e.allow&&(t.allow=e.allow),e.allowFullscreen&&(t.allowFullscreen=!0),e.kind===`tweet`&&da(t),t}function Ya(e,t,n,r){if(n!=null&&r!=null){e.setAttribute(`data-width`,String(n)),e.setAttribute(`data-height`,String(r));return}let i=t.naturalWidth/t.naturalHeight;if(!Number.isFinite(i)||i<=0){n!=null&&e.setAttribute(`data-width`,String(n)),r!=null&&e.setAttribute(`data-height`,String(r));return}let a=n==null?Math.min(t.naturalHeight,500):n/i,o=n??a*i;e.setAttribute(`data-width`,String(Math.round(o))),e.setAttribute(`data-height`,String(Math.round(a)))}function Xa(e,t,n,r){let i=e.posAtDOM(t,0),a=D(e.state,i,`mdImage`);if(!a)return;let o=e.state.doc.textBetween(a.from,a.to),s=An(o),c=a.from+s.length,l=o.slice(s.length),u=kn({...Dn(l)??{},width:Math.round(n),height:Math.round(r)});u!==l&&e.dispatch(e.state.tr.insertText(u,c,a.to))}var Za=class{#e;#t;#n;#r;#i;#a;#o;constructor(e,t,n){this.#i=e.attrs,this.#n=n,this.#r=t,this.#e=document.createElement(`span`),this.#e.className=`md-image-view md-atom-view`,this.#t=document.createElement(`span`),this.#t.className=`md-image-view-content md-atom-view-content`;let r=this.#s();r&&(r.contentEditable=`false`,this.#e.appendChild(r)),this.#e.appendChild(this.#t)}get dom(){return this.#e}get contentDOM(){return this.#t}update(e){let t=e.attrs,n=this.#i;return t.src===n.src?(this.#i=t,this.#o&&t.alt!==n.alt&&(this.#o.alt=t.alt),this.#a&&this.#o&&(t.width!==n.width||t.height!==n.height)&&Ya(this.#a,this.#o,t.width,t.height),!0):!1}ignoreMutation(e){return!this.#t.contains(e.target)}#s(){let{src:e}=this.#i,t=va(e);if(t){let e=document.createElement(`span`);return e.className=`md-image-view-preview md-atom-view-preview`,e.appendChild(Ja(t)),e}let n=(this.#n.resolveImageUrl??qa)(e);if(!n)return;let r=document.createElement(`span`);return r.className=`md-image-view-preview md-atom-view-preview`,r.dataset.testid=`image-preview`,r.appendChild(this.#c(n)),r}#c(e){_t(),gt();let t=document.createElement(`prosekit-resizable-root`);t.className=`md-image-resizable`,t.dataset.testid=`image-resizable`,t.setAttribute(`data-loading`,``);let n=document.createElement(`img`);n.src=e,n.alt=this.#i.alt,n.draggable=!1,Ya(t,n,this.#i.width,this.#i.height),n.addEventListener(`load`,()=>{t.removeAttribute(`data-loading`);let e=n.naturalWidth/n.naturalHeight;!Number.isFinite(e)||e<=0||(t.setAttribute(`data-aspect-ratio`,String(e)),Ya(t,n,this.#i.width,this.#i.height))}),n.addEventListener(`error`,()=>{t.removeAttribute(`data-loading`)}),t.appendChild(n);let r=document.createElement(`prosekit-resizable-handle`);return r.className=`md-image-resize-handle`,r.setAttribute(`position`,`bottom-right`),r.addEventListener(`click`,e=>e.stopPropagation()),t.appendChild(r),t.addEventListener(`resizeEnd`,e=>{let{width:t,height:n}=e.detail;Xa(this.#r,this.#t,t,n)}),this.#a=t,this.#o=n,t}};function Qa(e={}){return d({name:`mdImage`,constructor:(t,n)=>new Za(t,n,e)})}const $a={"Mod-b":`Bold`,"Mod-i":`Italic`,"Mod-e":`Inline code`,"Mod-Shift-x":`Strikethrough`,"Mod-Shift-h":`Highlight`,"Mod-k":`Link`,"Mod-1":`Heading 1`,"Mod-2":`Heading 2`,"Mod-3":`Heading 3`,"Mod-4":`Heading 4`,"Mod-5":`Heading 5`,"Mod-6":`Heading 6`,"Mod-.":`Fold or unfold a bullet`};function $(e){return m(new b({key:e.key,props:{handleClick:(t,n,r)=>{if(!r.target?.closest?.(e.selector))return!1;let i=e.findPayloadAt(t.state,n);return i==null?!1:(e.preventDefault&&r.preventDefault(),e.onClick(i,r),!0)}}}))}const eo=new x(`meowdown-link-click`);function to(e){return $({key:eo,selector:`.md-link`,preventDefault:!0,findPayloadAt:(e,t)=>q(e,t)?.href,onClick:(t,n)=>e({href:t,event:n})})}function no(e){let t,n=(n,r)=>{let i=r.target;if(!i||!ue(i))return;let a=i.closest(e.selector);if(!a||a===t)return;let o=n.posAtDOM(a,0),s=e.findPayloadAt(n.state,o);s!=null&&(t=a,e.onHoverChange({payload:s,element:a}))},r=n=>{if(!t)return;let r=n.relatedTarget;r&&t.contains(r)||(t=void 0,e.onHoverChange(void 0))};return _(s(`mouseover`,(e,t)=>n(e,t)),s(`mouseout`,(e,t)=>r(t)))}function ro(e){return no({selector:`.md-link`,findPayloadAt:(e,t)=>q(e,t),onHoverChange:e})}const io=new x(`meowdown-markdown-copy`);function ao(){return m(new b({key:io,props:{clipboardTextSerializer:(e,t)=>{let n=e.content,r;try{r=t.state.schema.topNodeType.createAndFill(void 0,n)??void 0}catch{r=void 0}return r?Ii(r).replace(/\n+$/,``):n.textBetween(0,n.size,`
|
|
21
|
+
`,` `)}function ba(e){return e.replace(/\n+$/u,``)}function xa(e){return/^[\s>]*$/u.test(e)}function Sa(e){return e.split(`
|
|
22
|
+
`).filter(e=>!xa(e))}function Ca(e){return e.trim().replaceAll(/\s+/gu,` `)}function wa(e,t={}){let n=$(Y(e,{frontmatter:t.frontmatter}),{frontmatter:t.frontmatter});if(ba(n)===ba(e))return`exact`;let r=Sa(e),i=Sa(n);return r.length===i.length&&r.every((e,t)=>Ca(e)===Ca(i[t]))?`normalizing`:`lossy`}const Ta=(e,t)=>{let{$from:n,empty:r}=e.selection;if(!r||n.depth!==1||n.index(0)!==0||n.parent.type.name!==`heading`||n.parentOffset!==n.parent.content.size)return!1;if(t){let r=te(e.schema,`list`),i=te(e.schema,`paragraph`),a=r.create({kind:`bullet`},i.create()),o=n.after(),s=e.tr.insert(o,a);s.setSelection(S.create(s.doc,o+2)),t(s.scrollIntoView())}return!0};function Ea(){return v(l({Enter:Ta}),t.high)}const Da=new Set([`MscGen`,`Xù`,`MsGenny`,`Angular Template`,`Brainfuck`,`Esper`,`Oz`,`Factor`,`Squirrel`,`Yacas`,`mIRC`,`FCL`,`ECL`,`MUMPS`,`Pig`,`Asterisk`,`Z80`]),Oa=we.map(e=>e.name).filter(e=>!Da.has(e)).map(e=>({label:e,value:e.toLowerCase()})).concat({label:`Plain text`,value:``}).sort((e,t)=>e.label.localeCompare(t.label));function ka(){return typeof window>`u`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}const Aa=/^(?:www\.|mobile\.)?(?:twitter\.com|x\.com)$/i,ja=/\/status(?:es)?\/(\d+)/;function Ma(e){let t;try{t=new URL(e)}catch{return}if(Aa.test(t.hostname))return ja.exec(t.pathname)?.[1]}const Na=e=>{let t=Ma(e);if(!t)return;let n=ka()?`dark`:`light`;return{kind:`tweet`,key:`tweet:${t}`,src:`https://platform.twitter.com/embed/Tweet.html?id=${t}&theme=${n}&dnt=true`,title:`Tweet`,className:`md-embed md-embed-tweet`,testid:`tweet-embed`}};function Pa(e){let t=t=>{if(t.source===e.contentWindow)try{let n=t.data?.[`twttr.embed`]?.params?.[0]?.height;typeof n==`number`&&(e.style.height=`${n}px`)}catch(e){console.warn(`[meowdown] failed to parse tweet resize message:`,e)}};window.addEventListener(`message`,t);let n=!1,r=()=>{n||(n=!0,window.removeEventListener(`message`,t),i.disconnect())},i=new MutationObserver(()=>{e.isConnected||r()});return i.observe(document.body,{childList:!0,subtree:!0}),r}const Fa=/^(?:www\.|m\.)?(?:youtube\.com|youtube-nocookie\.com)$/i,Ia=/^(?:www\.)?youtu\.be$/i,La=/^[\w-]{11}$/;function Ra(e){let t;try{t=new URL(e)}catch{return}let n=null;if(Ia.test(t.hostname))n=t.pathname.slice(1);else if(Fa.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||!La.test(n))return;let r=t.searchParams.get(`start`)??t.searchParams.get(`t`),i=r?za(r):void 0;return{videoId:n,startSeconds:i}}function za(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 Ba=[e=>{let t=Ra(e);if(!t)return;let n=t.startSeconds?`?start=${t.startSeconds}`:``;return{kind:`youtube`,key:`youtube:${t.videoId}:${t.startSeconds??0}`,src:`https://www.youtube-nocookie.com/embed/${t.videoId}${n}`,title:`YouTube video`,className:`md-embed md-embed-youtube`,testid:`youtube-embed`,allow:`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen`,allowFullscreen:!0}},Na];function Va(e){for(let t of Ba){let n=t(e);if(n)return n}}const Ha=new x(`meowdown-embed-paste`);function Ua(e){let t=e.trim();if(!(!t||/\s/.test(t)))return Va(t)?t:void 0}function Wa(e,t){return e.clipboardData?.getData(`text/plain`)||t.content.textBetween(0,t.content.size,`
|
|
23
|
+
`)}function Ga(e,t){let{from:n,to:r}=e.state.selection;e.dispatch(mt(e.state.tr.insertText(t,n,r)));let i=e.state.tr.insertText(``,n,n+t.length);e.dispatch(mt(i))}function Ka(){return m(new b({key:Ha,props:{handlePaste:(e,t,n)=>{let r=e.state.selection.$from.parent;if(!r.inlineContent||r.type.spec.code)return!1;let i=Wa(t,n);if(!i)return!1;let a=Ua(i);return a?(Ga(e,a),!0):!1}}}))}const qa=new x(`meowdown-exit-boundary`);function Ja(e,t){let{$anchor:n,$head:r}=e.selection,i=t>0?n.max(r):n.min(r),a=i.parent.inlineContent?i.depth?e.doc.resolve(t>0?i.after():i.before()):void 0:i;return!!(a&&Se.findFrom(a,t))}function Ya(e,t){let{state:n}=e,{selection:r}=n;return g(r)&&!r.empty||ne(r)||r.$from.parent.inlineContent&&!e.endOfTextblock(t<0?`up`:`down`)?!0:Ja(n,t)}function Xa(e){return new b({key:qa,props:{handleKeyDown:(t,n)=>{if(n.shiftKey||n.altKey||n.ctrlKey||n.metaKey)return!1;let r=n.key===`ArrowUp`?-1:n.key===`ArrowDown`?1:void 0;return!(!r||Ya(t,r)||e({direction:r<0?`up`:`down`,event:n})===!1)}}})}function Za(e){return v(m(Xa(e)),t.low)}function Qa(e){return!!e.type?.startsWith(`image/`)}function $a(e,t){return Qa(e)?``:`[${no(e.name)}](${t})`}function eo(e,t){return!e||!t.onFilePaste?[]:Array.from(e.files)}const to=e=>{console.error(`[meowdown] failed to save pasted file:`,e)};function no(e){return e.replaceAll(/[\\[\]]/g,String.raw`\$&`)}async function ro(e,t,n,r){let{onFilePaste:i}=n;if(!i)return;let a=n.onFileSaveError??to,o=r,s=!1;for(let n of t){let t;try{t=await i(n)}catch(e){a(e,n);continue}if(!t||e.isDestroyed)continue;let r=$a(n,t),c=s?`\n${r}`:r,l=o==null?e.state.tr.insertText(c):e.state.tr.insertText(c,o);e.dispatch(l),s=!0,o!=null&&(o+=c.length)}}function io(e){return new b({key:new x(`file-paste`),props:{handlePaste:(t,n)=>{let r=eo(n.clipboardData,e);return r.length===0?!1:(ro(t,r,e),!0)},handleDrop:(t,n)=>{let r=eo(n.dataTransfer,e);return r.length===0?!1:(ro(t,r,e,t.posAtCoords({left:n.clientX,top:n.clientY})?.pos),!0)}}})}function ao(e={}){return v(m(io(e)),t.high)}const oo=new x(`meowdown-file-click`);function so(e,t){let n=O(e,t,`mdFile`);if(!n)return;let{href:r,name:i}=n.mark.attrs;return{href:r,name:i}}function co(e){return m(new b({key:oo,props:{handleClick:(t,n,r)=>{let i=r.target?.closest?.(`.md-file-view-preview`);if(!i)return!1;let a=i.closest(`.md-file-view`)?.querySelector(`.md-file-view-content`);if(!a)return!1;let o=so(t.state,t.posAtDOM(a,0));return o?(e({href:o.href,name:o.name,event:r}),!0):!1}}}))}const lo=[`KB`,`MB`,`GB`,`TB`];function uo(e){let t=e,n=`B`;for(let e of lo){if(t<999.5)break;t/=1e3,n=e}return n===`B`?`${Math.round(t)} B`:`${t<9.95?Math.round(t*10)/10:Math.round(t)} ${n}`}const fo=new Map([[`pdf`,`pdf`],[`zip`,`archive`],[`tar`,`archive`],[`gz`,`archive`],[`tgz`,`archive`],[`rar`,`archive`],[`7z`,`archive`],[`doc`,`doc`],[`docx`,`doc`],[`pages`,`doc`],[`xls`,`sheet`],[`xlsx`,`sheet`],[`csv`,`sheet`],[`numbers`,`sheet`],[`ppt`,`slides`],[`pptx`,`slides`],[`key`,`slides`],[`mp3`,`audio`],[`wav`,`audio`],[`m4a`,`audio`],[`flac`,`audio`],[`ogg`,`audio`],[`mp4`,`video`],[`mov`,`video`],[`mkv`,`video`],[`webm`,`video`],[`txt`,`text`],[`md`,`text`]]);function po(e){let t=e.split(/[?#]/,1)[0],n=t.lastIndexOf(`.`);if(n<0)return`generic`;let r=t.slice(n+1).toLowerCase();return fo.get(r)??`generic`}const mo=`http://www.w3.org/2000/svg`;function ho(){let e=document.createElementNS(mo,`svg`);e.setAttribute(`class`,`md-file-view-icon`),e.setAttribute(`viewBox`,`0 0 24 24`),e.setAttribute(`aria-hidden`,`true`);for(let t of[`M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z`,`M14 2v4a2 2 0 0 0 2 2h4`]){let n=document.createElementNS(mo,`path`);n.setAttribute(`d`,t),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`2`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`),e.appendChild(n)}return e}var go=class{#e;#t;#n;#r;#i;#a;#o=!1;constructor(e,t){this.#a=e.attrs,this.#e=document.createElement(`span`),this.#e.className=`md-file-view md-atom-view`,this.#n=document.createElement(`span`),this.#n.className=`md-file-view-preview md-atom-view-preview`,this.#n.contentEditable=`false`,this.#n.dataset.testid=`file-pill`,this.#n.dataset.fileKind=po(this.#a.href),this.#n.title=this.#a.name,this.#e.appendChild(this.#n),this.#n.appendChild(ho()),this.#r=document.createElement(`span`),this.#r.className=`md-file-view-name`,this.#r.textContent=this.#a.name,this.#n.appendChild(this.#r),this.#i=document.createElement(`span`),this.#i.className=`md-file-view-size`,this.#i.dataset.testid=`file-pill-size`,this.#n.appendChild(this.#i),this.#t=document.createElement(`span`),this.#t.className=`md-file-view-content md-atom-view-content`,this.#e.appendChild(this.#t),this.#s(t.resolveFileInfo)}get dom(){return this.#e}get contentDOM(){return this.#t}update(e){let t=e.attrs,n=this.#a;return t.href===n.href?(this.#a=t,t.name!==n.name&&(this.#r.textContent=t.name,this.#n.title=t.name),!0):!1}ignoreMutation(e){return!this.#t.contains(e.target)}destroy(){this.#o=!0}async#s(e){if(!e)return;let t;try{t=await e(this.#a.href)}catch(e){console.error(`[meowdown] resolveFileInfo failed:`,e);return}if(this.#o||!t)return;let{size:n}=t;n==null||!Number.isFinite(n)||n<0||(this.#i.textContent=uo(n))}};function _o(e={}){return d({name:`mdFile`,constructor:t=>new go(t,e)})}function vo(e){return m(new b({key:e.key,props:{handleClick:(t,n,r)=>{if(!r.target?.closest?.(e.selector))return!1;let i=e.findPayloadAt(t.state,n);return i==null?!1:(e.preventDefault&&r.preventDefault(),e.onClick(i,r),!0)}}}))}const yo=new x(`meowdown-tag-click`);function bo(e,t){let n=O(e,t,`mdTag`);if(!n)return;let r=e.doc.textBetween(n.from,n.to),i=r.startsWith(`#`)?r.slice(1):r;return{from:n.from,to:n.to,tag:i}}function xo(e){return vo({key:yo,selector:`.md-tag`,preventDefault:!1,findPayloadAt:(e,t)=>bo(e,t)?.tag,onClick:(t,n)=>e({tag:t,event:n})})}const So=new x(`meowdown-wikilink-click`);function Co(e,t){let n=O(e,t,`mdWikilink`);if(!n)return;let{target:r}=n.mark.attrs;return{from:n.from,to:n.to,target:r}}function wo(e){return vo({key:So,selector:`.md-wikilink-view-preview`,preventDefault:!1,findPayloadAt:(e,t)=>Co(e,t)?.target,onClick:(t,n)=>e({target:t,event:n})})}const To=new x(`meowdown-follow-link`);function Eo(e){return e.key!==`Enter`||e.shiftKey||e.altKey?!1:re?e.metaKey&&!e.ctrlKey:e.ctrlKey&&!e.metaKey}function Do(e){return new b({key:To,props:{handleKeyDown:(t,n)=>{if(!Eo(n))return!1;let{state:r}=t,i=r.selection.head,a=e.onWikilinkClick&&Co(r,i);if(a)return e.onWikilinkClick?.({target:a.target,event:n}),!0;let o=e.onTagClick&&bo(r,i);if(o)return e.onTagClick?.({tag:o.tag,event:n}),!0;let s=e.onFileClick&&so(r,i);if(s)return e.onFileClick?.({href:s.href,name:s.name,event:n}),!0;let c=e.onLinkClick&&K(r,i);return c?(e.onLinkClick?.({href:c.href,event:n}),!0):!1}}})}function Oo(e){return v(m(Do(e)),t.high)}const ko=(e,t)=>{let n={type:`highlight`,children:e.all(t)};return e.patch(t,n),n},Ao=(e,t,n,r)=>{let i=e,a=n.createTracker(r),o=a.move(`==`);return o+=a.move(n.containerPhrasing(i,{...a.current(),before:o,after:`=`})),o+=a.move(`==`),o};function jo(){return yt().use(ht).use(gt,{handlers:{mark:ko}}).use(_t).use(vt,{bullet:`-`,emphasis:`*`,strong:`*`,fence:"`",fences:!0,rule:`-`,ruleRepetition:3,listItemIndent:`one`,handlers:{highlight:Ao}}).freeze()}const Mo=y(jo);function No(e){return String(Mo().processSync(e))}const Po=new x(`meowdown-html-paste`);function Fo(){return m(new b({key:Po,props:{transformPastedHTML:(e,t)=>{if(e.includes(`data-pm-slice`))return e;let n=t.state.selection.$from.parent;if(!n.inlineContent||n.type.spec.code)return e;let r=No(e);if(!r.trim())return e;let i=Y(r,{nodes:Hi(t.state.schema)}),a=Oe.fromSchema(t.state.schema),o=document.createElement(`div`);return o.append(a.serializeFragment(i.content)),o.innerHTML}}}))}const Io=new x(`meowdown-image-click`);function Lo(e,t){let n=O(e,t,`mdImage`);if(!n)return;let{src:r,alt:i}=n.mark.attrs;return{from:n.from,to:n.to,src:r,alt:i}}function Ro(e){return m(new b({key:Io,props:{handleClick:(t,n,r)=>{let i=r.target?.closest?.(`.md-image-view-preview`);if(!i)return!1;let a=i.closest(`.md-image-view`)?.querySelector(`.md-image-view-content`);if(!a)return!1;let o=Lo(t.state,t.posAtDOM(a,0));return o?(e({src:o.src,alt:o.alt,event:r}),!0):!1}}}))}function zo(e){return/^https?:\/\//i.test(e)?e:void 0}function Bo(e){let t=document.createElement(`iframe`);return t.src=e.src,t.title=e.title,t.className=e.className,t.dataset.testid=e.testid,t.loading=`lazy`,t.referrerPolicy=`strict-origin-when-cross-origin`,t.setAttribute(`frameborder`,`0`),e.allow&&(t.allow=e.allow),e.allowFullscreen&&(t.allowFullscreen=!0),e.kind===`tweet`&&Pa(t),t}function Vo(e,t,n,r){if(n!=null&&r!=null){e.setAttribute(`data-width`,String(n)),e.setAttribute(`data-height`,String(r));return}let i=t.naturalWidth/t.naturalHeight;if(!Number.isFinite(i)||i<=0){n!=null&&e.setAttribute(`data-width`,String(n)),r!=null&&e.setAttribute(`data-height`,String(r));return}let a=n==null?Math.min(t.naturalHeight,500):n/i,o=n??a*i;e.setAttribute(`data-width`,String(Math.round(o))),e.setAttribute(`data-height`,String(Math.round(a)))}function Ho(e,t,n,r){let i=e.posAtDOM(t,0),a=O(e.state,i,`mdImage`);if(!a)return;let o=e.state.doc.textBetween(a.from,a.to),s=zn(o),c=a.from+s.length,l=o.slice(s.length),u=Rn({...In(l)??{},width:Math.round(n),height:Math.round(r)});u!==l&&e.dispatch(e.state.tr.insertText(u,c,a.to))}var Uo=class{#e;#t;#n;#r;#i;#a;#o;constructor(e,t,n){this.#i=e.attrs,this.#n=n,this.#r=t,this.#e=document.createElement(`span`),this.#e.className=`md-image-view md-atom-view`,this.#t=document.createElement(`span`),this.#t.className=`md-image-view-content md-atom-view-content`;let r=this.#s();r&&(r.contentEditable=`false`,this.#e.appendChild(r)),this.#e.appendChild(this.#t)}get dom(){return this.#e}get contentDOM(){return this.#t}update(e){let t=e.attrs,n=this.#i;return t.src===n.src?(this.#i=t,this.#o&&t.alt!==n.alt&&(this.#o.alt=t.alt),this.#a&&this.#o&&(t.width!==n.width||t.height!==n.height)&&Vo(this.#a,this.#o,t.width,t.height),!0):!1}ignoreMutation(e){return!this.#t.contains(e.target)}#s(){let{src:e}=this.#i,t=Va(e);if(t){let e=document.createElement(`span`);return e.className=`md-image-view-preview md-atom-view-preview`,e.appendChild(Bo(t)),e}let n=(this.#n.resolveImageUrl??zo)(e);if(!n)return;let r=document.createElement(`span`);return r.className=`md-image-view-preview md-atom-view-preview`,r.dataset.testid=`image-preview`,r.appendChild(this.#c(n)),r}#c(e){xt(),bt();let t=document.createElement(`prosekit-resizable-root`);t.className=`md-image-resizable`,t.dataset.testid=`image-resizable`,t.setAttribute(`data-loading`,``);let n=document.createElement(`img`);n.src=e,n.alt=this.#i.alt,n.draggable=!1,Vo(t,n,this.#i.width,this.#i.height),n.addEventListener(`load`,()=>{t.removeAttribute(`data-loading`);let e=n.naturalWidth/n.naturalHeight;!Number.isFinite(e)||e<=0||(t.setAttribute(`data-aspect-ratio`,String(e)),Vo(t,n,this.#i.width,this.#i.height))}),n.addEventListener(`error`,()=>{t.removeAttribute(`data-loading`)}),t.appendChild(n);let r=document.createElement(`prosekit-resizable-handle`);return r.className=`md-image-resize-handle`,r.setAttribute(`position`,`bottom-right`),r.addEventListener(`click`,e=>e.stopPropagation()),t.appendChild(r),t.addEventListener(`resizeEnd`,e=>{let{width:t,height:n}=e.detail;Ho(this.#r,this.#t,t,n)}),this.#a=t,this.#o=n,t}};function Wo(e={}){return d({name:`mdImage`,constructor:(t,n)=>new Uo(t,n,e)})}const Go={"Mod-b":`Bold`,"Mod-i":`Italic`,"Mod-e":`Inline code`,"Mod-Shift-x":`Strikethrough`,"Mod-Shift-h":`Highlight`,"Mod-k":`Link`,"Mod-Shift-k":`Insert a wikilink`,"Mod-1":`Heading 1`,"Mod-2":`Heading 2`,"Mod-3":`Heading 3`,"Mod-4":`Heading 4`,"Mod-5":`Heading 5`,"Mod-6":`Heading 6`,"Mod-.":`Fold or unfold a bullet`,"Mod-Enter":`Follow the link under the caret, or cycle a checkbox task`,"Mod-Shift-Enter":`Cycle a circle checkbox task`,"Mod-Shift-7":`Ordered list`,"Mod-Shift-8":`Bullet list`,"Mod-Shift-9":`Checkbox task list`,"Alt-ArrowUp":`Move the block or list item up`,"Alt-ArrowDown":`Move the block or list item down`,Escape:`Collapse the selection`},Ko=new x(`meowdown-link-click`);function qo(e){return vo({key:Ko,selector:`.md-link`,preventDefault:!0,findPayloadAt:(e,t)=>K(e,t)?.href,onClick:(t,n)=>e({href:t,event:n})})}function Jo(e){let t,n=(n,r)=>{let i=r.target;if(!i||!fe(i))return;let a=i.closest(e.selector);if(!a||a===t)return;let o=n.posAtDOM(a,0),s=e.findPayloadAt(n.state,o);s!=null&&(t=a,e.onHoverChange({payload:s,element:a}))},r=n=>{if(!t)return;let r=n.relatedTarget;r&&t.contains(r)||(t=void 0,e.onHoverChange(void 0))};return _(s(`mouseover`,(e,t)=>n(e,t)),s(`mouseout`,(e,t)=>r(t)))}function Yo(e){return Jo({selector:`.md-link`,findPayloadAt:(e,t)=>K(e,t),onHoverChange:e})}const Xo=new x(`meowdown-markdown-copy`);function Zo(){return m(new b({key:Xo,props:{clipboardTextSerializer:(e,t)=>{let n=e.content,r;try{r=t.state.schema.topNodeType.createAndFill(void 0,n)??void 0}catch{r=void 0}return r?$(r).replace(/\n+$/,``):n.textBetween(0,n.size,`
|
|
24
24
|
`,`
|
|
25
|
-
`)}}}))}
|
|
25
|
+
`)}}}))}function Qo({allowEmpty:e}){return(t,n)=>{let{selection:r}=t;if(!g(r)||!e&&r.empty||!r.$head.sameParent(r.$anchor)||r.$head.parent.type.spec.code)return!1;let i=t.doc.textBetween(r.from,r.to);if(i.startsWith(`[[`))return!1;i.startsWith(`[`)&&(i=i.slice(1));let a=`[[`+i;if(n){let e=t.tr.insertText(a,r.from,r.to);e.setSelection(S.create(e.doc,r.from+a.length)),St(e),n(e.scrollIntoView())}return!0}}function $o(){return l({"Mod-Shift-k":Qo({allowEmpty:!0}),"[":Qo({allowEmpty:!1})})}function es(e){let{selection:t,schema:n}=e;if(t.empty)return``;let r=t.content().content;try{return $(n.topNodeType.create(null,r)).replace(/\n+$/,``)}catch{return e.doc.textBetween(t.from,t.to,`
|
|
26
|
+
|
|
27
|
+
`)}}function ts(e,t){let n=new DOMRect(0,0,0,0),r=()=>{if(e.isDestroyed)return n;try{let r=e.coordsAtPos(t.from),i=e.coordsAtPos(t.to),a=Math.min(r.left,i.left),o=Math.max(r.right,i.right),s=Math.min(r.top,i.top),c=Math.max(r.bottom,i.bottom);n=new DOMRect(a,s,o-a,c-s)}catch{}return n};return{getBoundingClientRect:r,getClientRects:()=>[r()]}}function ns(e){return e instanceof Pe||e instanceof Fe||e instanceof Ie||e instanceof Le||e instanceof N}function rs(e){for(let t of e)for(let e of t.steps)if(!ns(e))return!0;return!1}function is(e){let t,n,r=!1,i,a=()=>{let n=t&&!t.isDestroyed&&t.dom;if(!n)return;let a=e&&!r;a!==i&&(i=a,n.spellcheck=a)},o=()=>{n&&clearTimeout(n),r=!0,a(),n=setTimeout(()=>{r=!1,a()},1200)};return{pause:o,apply(e){rs(e)&&o()},view(e){return t=e,{destroy(){t=void 0}}}}}function as(e){let t=new x(`spell-check`);return new b({key:t,state:{init:()=>is(e),apply:(e,t)=>t},view(e){return t.getState(e.state)?.view(e)||{}},props:{handleDOMEvents:{beforeinput:e=>{t.getState(e.state)?.pause()}}},appendTransaction(e,n){t.getState(n)?.apply(e)}})}function os(e){return m(as(e))}export{Go as EDITOR_KEY_BINDINGS,e as Priority,$a as buildFileMarkdown,wa as checkRoundTrip,Oa as codeBlockLanguages,zo as defaultResolveImageUrl,Ea as defineBulletAfterHeading,Gt as defineCodeBlockSyntaxHighlight,Fi as defineEditorExtension,Ka as defineEmbedPaste,Za as defineExitBoundaryHandler,co as defineFileClickHandler,ao as defineFilePaste,_o as defineFileView,Oo as defineFollowLinkHandler,un as defineHTMLComment,Fo as defineHTMLPaste,Wo as defineImage,Ro as defineImageClickHandler,qo as defineLinkClickHandler,Gr as defineLinkCommands,qr as defineLinkEditKeymap,Yo as defineLinkHoverHandler,Et as defineMarkMode,Zo as defineMarkdownCopy,Ni as definePendingReplacementHandler,ue as definePlaceholder,de as defineReadonly,os as defineSpellCheckPlugin,xo as defineTagClickHandler,wo as defineWikilinkClickHandler,$o as defineWikilinkTrigger,$ as docToMarkdown,qt as getCodeTokens,K as getLinkUnitAt,Ri as getMarkBuilders,J as getPendingReplacement,es as getSelectedText,ts as getVirtualElementFromRange,Gn as inlineTextToMarkChunks,Hr as insertLink,fi as isSelectionInTableCell,Pa as listenForTweetHeight,Y as markdownToDoc,Va as matchEmbed,Wr as removeLink,Ur as updateLink,ce as withPriority};
|
package/dist/style.css
CHANGED
|
@@ -162,6 +162,10 @@
|
|
|
162
162
|
--meowdown-code-bg: light-dark(oklch(96.7% 0 0), oklch(21% .006 286));
|
|
163
163
|
--meowdown-image-loading-bg: light-dark(oklch(96.7% 0 0), oklch(27.4% .005 286));
|
|
164
164
|
--meowdown-image-radius: .5rem;
|
|
165
|
+
--meowdown-file-pill-bg: light-dark(oklch(98.5% 0 0), oklch(21% .006 286));
|
|
166
|
+
--meowdown-file-pill-bg-hover: light-dark(oklch(96.7% 0 0), oklch(27.4% .005 286));
|
|
167
|
+
--meowdown-file-pill-border: var(--meowdown-border);
|
|
168
|
+
--meowdown-file-pill-muted: var(--meowdown-muted);
|
|
165
169
|
--meowdown-table-header-bg: light-dark(oklch(98.5% 0 0), oklch(27.4% .005 286));
|
|
166
170
|
--meowdown-popover-bg: light-dark(oklch(100% 0 0), oklch(21% .006 286));
|
|
167
171
|
--meowdown-popover-hover-bg: light-dark(oklch(96.7% 0 0), oklch(27.4% .005 286));
|
|
@@ -253,6 +257,13 @@
|
|
|
253
257
|
padding: 0 1px;
|
|
254
258
|
}
|
|
255
259
|
|
|
260
|
+
.ProseMirror .md-pending-replacement {
|
|
261
|
+
background: var(--meowdown-selection);
|
|
262
|
+
-webkit-box-decoration-break: clone;
|
|
263
|
+
box-decoration-break: clone;
|
|
264
|
+
border-radius: 2px;
|
|
265
|
+
}
|
|
266
|
+
|
|
256
267
|
.ProseMirror code {
|
|
257
268
|
font-family: var(--meowdown-font-mono);
|
|
258
269
|
background: var(--meowdown-code-bg);
|
|
@@ -659,6 +670,50 @@
|
|
|
659
670
|
}
|
|
660
671
|
}
|
|
661
672
|
|
|
673
|
+
.ProseMirror {
|
|
674
|
+
& .md-file-view {
|
|
675
|
+
max-width: 100%;
|
|
676
|
+
margin-left: 2px;
|
|
677
|
+
margin-right: 2px;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
& .md-file-view-preview {
|
|
681
|
+
border: 1px solid var(--meowdown-file-pill-border);
|
|
682
|
+
background: var(--meowdown-file-pill-bg);
|
|
683
|
+
cursor: pointer;
|
|
684
|
+
border-radius: 999px;
|
|
685
|
+
align-items: center;
|
|
686
|
+
gap: .4em;
|
|
687
|
+
max-width: 100%;
|
|
688
|
+
padding: .1em .65em;
|
|
689
|
+
display: inline-flex;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
& .md-file-view-preview:hover {
|
|
693
|
+
background: var(--meowdown-file-pill-bg-hover);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
& .md-file-view-icon {
|
|
697
|
+
width: 1em;
|
|
698
|
+
height: 1em;
|
|
699
|
+
color: var(--meowdown-file-pill-muted);
|
|
700
|
+
flex: none;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
& .md-file-view-name {
|
|
704
|
+
white-space: nowrap;
|
|
705
|
+
text-overflow: ellipsis;
|
|
706
|
+
overflow: hidden;
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
& .md-file-view-size {
|
|
710
|
+
white-space: nowrap;
|
|
711
|
+
color: var(--meowdown-file-pill-muted);
|
|
712
|
+
flex: none;
|
|
713
|
+
font-size: .85em;
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
|
|
662
717
|
.ProseMirror {
|
|
663
718
|
& .md-wikilink-view-label {
|
|
664
719
|
background: color-mix(in oklab, var(--meowdown-accent) 10%, transparent);
|