@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 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 | 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-1` | Heading 1 | `# heading` |
64
- | `Mod-2` | Heading 2 | `## heading` |
65
- | `Mod-3` | Heading 3 | `### heading` |
66
- | `Mod-4` | Heading 4 | `#### heading` |
67
- | `Mod-5` | Heading 5 | `##### heading` |
68
- | `Mod-6` | Heading 6 | `###### heading` |
69
- | `Mod-.` | Fold or unfold a bullet | |
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 (`![alt](src)`) stay literal text and render in place via a mark view, with the raw `![alt](src)` hidden in hide and focus modes. Add it with [`defineImage`](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 `![](src)`; 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 `![](src)`; 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, `![alt](src)<!-- {"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
- declare function defineEditorExtension(): EditorExtension;
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: `![](destination)` 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: `![](src)` 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,isAtBlockStart as re,isTextSelection as g,toggleNode as ie,union as _,unsetBlockType as ae,withPriority as oe,withPriority as v,withSkipCodeBlock as se}from"@prosekit/core";import{definePlaceholder as ce}from"@prosekit/extensions/placeholder";import{defineReadonly as le}from"@prosekit/extensions/readonly";import{isElementLike as ue,once as y}from"@ocavue/utils";import{defineBlockquote as de}from"@prosekit/extensions/blockquote";import{defineCodeBlock as fe,defineCodeBlockHighlight as pe}from"@prosekit/extensions/code-block";import{defineDoc as me}from"@prosekit/extensions/doc";import{defineGapCursor as he}from"@prosekit/extensions/gap-cursor";import{defineModClickPrevention as ge}from"@prosekit/extensions/mod-click-prevention";import{defineText as _e}from"@prosekit/extensions/text";import{defineVirtualSelection as ve}from"@prosekit/extensions/virtual-selection";import{Plugin as b,PluginKey as x,Selection as ye,TextSelection as S}from"@prosekit/pm/state";import{Decoration as be,DecorationSet as C}from"@prosekit/pm/view";import{LanguageDescription as xe}from"@codemirror/language";import{languages as Se}from"@codemirror/language-data";import{classHighlighter as Ce,highlightTree as we}from"@lezer/highlight";import{createParser as Te}from"prosemirror-highlight/lezer";import{DOMSerializer as Ee,Mark as De,Slice as w}from"@prosekit/pm/model";import{defineHeadingCommands as Oe,defineHeadingInputRule as ke,defineHeadingSpec as Ae}from"@prosekit/extensions/heading";import{defineHorizontalRule as je}from"@prosekit/extensions/horizontal-rule";import{AddMarkStep as Me,AddNodeMarkStep as Ne,RemoveMarkStep as Pe,RemoveNodeMarkStep as Fe,ReplaceStep as Ie,Step as Le,StepResult as Re,Transform as ze}from"@prosekit/pm/transform";import{GFM as Be,parser as Ve}from"@lezer/markdown";import{defineInputRule as He}from"@prosekit/extensions/input-rule";import{defineListCommands as Ue,defineListDropIndicator as We,defineListKeymap as Ge,defineListSerializer as Ke,defineListSpec as qe,wrapInList as T}from"@prosekit/extensions/list";import{createListRenderingPlugin as Je,createSafariInputMethodWorkaroundPlugin as Ye,createToggleCollapsedCommand as Xe,handleListMarkerMouseDown as Ze,unwrapListSlice as Qe,wrappingListInputRule as E}from"prosemirror-flat-list";import{defineParagraphCommands as $e,defineParagraphKeymap as et}from"@prosekit/extensions/paragraph";import{defineTableCellSpec as tt,defineTableCommands as nt,defineTableDropIndicator as rt,defineTableEditingPlugin as it,defineTableHeaderCellSpec as at,defineTableRowSpec as ot,defineTableSpec as st,deleteTable as ct,isCellSelection as lt}from"@prosekit/extensions/table";import{closeHistory as ut}from"@prosekit/pm/history";import dt from"rehype-parse";import ft from"rehype-remark";import pt from"remark-gfm";import mt from"remark-stringify";import{unified as ht}from"unified";import{registerResizableHandleElement as gt,registerResizableRootElement as _t}from"@prosekit/web/resizable";import{triggerAutocomplete as vt}from"@prosekit/extensions/autocomplete";function D(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 yt=new Set([`mdMark`,`mdLinkUri`,`mdLinkTitle`]),bt=new x(`mark-mode`);function xt(e){return new b({key:bt,state:{init:()=>e,apply:(e,t)=>t},props:{attributes:{"data-mark-mode":e},decorations:e===`focus`?e=>Tt(e):void 0,clipboardTextSerializer:e===`show`?void 0:wt}})}function St(e){return m(xt(e))}function Ct(e){return bt.getState(e)}function wt(e){let t=[];return e.content.forEach(e=>{let n=[];e.descendants(e=>!e.isText||!e.text?!0:(e.marks.some(e=>yt.has(e.type.name))||n.push(e.text),!1)),t.push(n.join(``))}),t.join(`
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 Ti(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 Ei(e,t){return t===0||!e.includes(`
1
+ import{Priority as e,Priority as t,createMarkBuilders as n,createNodeBuilders as r,defineBaseCommands as i,defineBaseKeymap as a,defineCommands as o,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:Ti(e,t)).join(`
6
- `)}function Di(e,t,n){return e.paragraph(Ei(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===B.QuoteMark&&(o+=n.slice(s,t.from),s=t.to,I(n.charCodeAt(s))&&(s+=1));while(t.nextSibling());return t.parent(),o+=n.slice(s,i),Di(e,o,a)}return Di(e,n.slice(r,i),a)}function Oi(e,t,n){let r=Z(n,t.from),i=Ei(n.slice(t.from,t.to),r);return e.htmlComment({content:i})}function ki(e,t,n){let r=[];if(t.firstChild()){do{if(t.type.id===B.QuoteMark)continue;r.push(...Si(e,t,n))}while(t.nextSibling());t.parent()}return e.blockquote(r)}function Ai(e,t,n,r){let i=[];if(t.firstChild()){do t.type.id===B.ListItem&&i.push(ji(e,t,n,r));while(t.nextSibling());t.parent()}return i}function ji(e,t,n,r){let i=[],a,o,s,c,l,u;if(t.firstChild()){do{if(t.type.id!==B.ListMark&&u==null&&(u=Z(n,t.from)),t.type.id===B.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===B.Task){let r=t.from,s=t.to;if(a=!1,t.firstChild()){if(t.type.id===B.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()}I(n.charCodeAt(r))&&(r+=1);let c=n.slice(r,s);i.push(Di(e,c,Z(n,r)));continue}i.push(...Si(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 Mi(e,t,n){let r=``,i=``;if(t.firstChild()){do switch(t.type.id){case B.CodeInfo:r=n.slice(t.from,t.to);break;case B.CodeText:i+=n.slice(t.from,t.to);break}while(t.nextSibling());t.parent()}return e.codeBlock({language:r},i)}function Ni(e,t,n){let r=0;if(t.firstChild()){do t.type.id===B.TableDelimiter&&(r=Pi(n.slice(t.from,t.to)));while(t.nextSibling());t.parent()}let i=[];if(t.firstChild()){do{let a=t.type.id;a===B.TableHeader?i.push(Fi(e,t,n,!0,r)):a===B.TableRow&&i.push(Fi(e,t,n,!1,r))}while(t.nextSibling());t.parent()}return e.table(i)}function Pi(e){return e.split(`|`).filter(e=>e.trim()!==``).length}function Fi(e,t,n,r,i){let a=Array(i).fill(``);if(t.firstChild()){let e=t.type.id===B.TableDelimiter,r=0;do if(t.type.id===B.TableDelimiter)r++;else if(t.type.id===B.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 Ii(e,t={}){let n=new Bi;return t.frontmatter&&Li(e.attrs.frontmatter,n),Vi(e,n),n.finish()}function Li(e,t){e!==null&&(t.write(`---`),t.write(`
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 Ri=[``,`# `,`## `,`### `,`#### `,`##### `,`###### `];function zi(e,t){let n=e.attrs,r=n.setextUnderline;if(r!=null&&e.content.size>0&&n.level<=2){Gi(e,t);let i=n.level===1?`=`:`-`;t.write(`
9
- `+i.repeat(Math.max(1,r))),t.closeBlock();return}t.write(Ri[n.level]??`# `),Gi(e,t);let i=n.closingHashes;i!=null&&i>0&&t.write(` `+`#`.repeat(i)),t.closeBlock()}var Bi=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(`
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 Vi(e,t){switch(e.type.name){case`doc`:Hi(e,t);return;case`paragraph`:Gi(e,t),t.closeBlock();return;case`heading`:zi(e,t);return;case`blockquote`:t.withPrefix(`> `,`> `,()=>Hi(e,t)),t.closeBlock();return;case`list`:Ki(e,t,Wi(e));return;case`codeBlock`:qi(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`:Ji(e,t);return;case`text`:e.text&&t.write(e.text);return}}function Hi(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(),Vi(a,t),i++;continue}let o=i+1;for(;o<r&&e.child(o).type.name===`list`;)o++;let s=Ui(e,i,o);for(let r=i;r<o;r++)(r===i?n&&i>0:s)&&t.suppressBlank(),Ki(e.child(r),t,s);i=o}}function Ui(e,t,n){for(let r=t;r<n;r++)if(!Wi(e.child(r)))return!1;return!0}function Wi(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 Gi(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 Ki(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,()=>Hi(e,t,n)),t.closeBlock()}function qi(e,t){let n=e.attrs.language||``,r=e.textContent,i="`".repeat(pr(r,2)+1);t.write(i),n&&t.write(n),t.write(`
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 Ji(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(Xi(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(Yi(s,i)),t.write(`
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(Yi(r[e],i)));t.closeBlock()}function Yi(e,t){let n=`|`;for(let r=0;r<t;r++)n+=` `+(e[r]??``)+` |`;return n}function Xi(e){let t=e.textContent.trim();return!t.includes(`|`)&&!t.includes(`
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 Zi(e){return e.replace(/\n+$/u,``)}function Qi(e){return/^[\s>]*$/u.test(e)}function $i(e){return e.split(`
22
- `).filter(e=>!Qi(e))}function ea(e){return e.trim().replaceAll(/\s+/gu,` `)}function ta(e,t={}){let n=Ii(Y(e,{frontmatter:t.frontmatter}),{frontmatter:t.frontmatter});if(Zi(n)===Zi(e))return`exact`;let r=$i(e),i=$i(n);return r.length===i.length&&r.every((e,t)=>ea(e)===ea(i[t]))?`normalizing`:`lossy`}const na=(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 ra(){return v(l({Enter:na}),t.high)}const ia=new Set([`MscGen`,`Xù`,`MsGenny`,`Angular Template`,`Brainfuck`,`Esper`,`Oz`,`Factor`,`Squirrel`,`Yacas`,`mIRC`,`FCL`,`ECL`,`MUMPS`,`Pig`,`Asterisk`,`Z80`]),aa=Se.map(e=>e.name).filter(e=>!ia.has(e)).map(e=>({label:e,value:e.toLowerCase()})).concat({label:`Plain text`,value:``}).sort((e,t)=>e.label.localeCompare(t.label));function oa(){return typeof window>`u`?!1:window.matchMedia(`(prefers-color-scheme: dark)`).matches}const sa=/^(?:www\.|mobile\.)?(?:twitter\.com|x\.com)$/i,ca=/\/status(?:es)?\/(\d+)/;function la(e){let t;try{t=new URL(e)}catch{return}if(sa.test(t.hostname))return ca.exec(t.pathname)?.[1]}const ua=e=>{let t=la(e);if(!t)return;let n=oa()?`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 da(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,pa=/^(?:www\.)?youtu\.be$/i,ma=/^[\w-]{11}$/;function ha(e){let t;try{t=new URL(e)}catch{return}let n=null;if(pa.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||!ma.test(n))return;let r=t.searchParams.get(`start`)??t.searchParams.get(`t`),i=r?ga(r):void 0;return{videoId:n,startSeconds:i}}function ga(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 _a=[e=>{let t=ha(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}},ua];function va(e){for(let t of _a){let n=t(e);if(n)return n}}const ya=new x(`meowdown-embed-paste`);function ba(e){let t=e.trim();if(!(!t||/\s/.test(t)))return va(t)?t:void 0}function xa(e,t){return e.clipboardData?.getData(`text/plain`)||t.content.textBetween(0,t.content.size,`
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(`![](${t})`,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)?`![](${t})`:`[${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(`![](${t})`,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)?`![](${t})`:`[${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
- `)}}}))}const oo=new x(`meowdown-tag-click`);function so(e,t){let n=D(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 co(e){return $({key:oo,selector:`.md-tag`,preventDefault:!1,findPayloadAt:(e,t)=>so(e,t)?.tag,onClick:(t,n)=>e({tag:t,event:n})})}const lo=new x(`meowdown-wikilink-click`);function uo(e,t){let n=D(e,t,`mdWikilink`);if(!n)return;let{target:r}=n.mark.attrs;return{from:n.from,to:n.to,target:r}}function fo(e){return $({key:lo,selector:`.md-wikilink-view-preview`,preventDefault:!1,findPayloadAt:(e,t)=>uo(e,t)?.target,onClick:(t,n)=>e({target:t,event:n})})}const po=(e,t)=>{let{selection:n}=e;if(!n.empty&&!n.$head.sameParent(n.$anchor))return!1;let r=e.doc.textBetween(n.from,n.to);if(r.startsWith(`[[`))return!1;r.startsWith(`[`)&&(r=r.slice(1));let i=`[[`+r;if(t){let r=e.tr.insertText(i,n.from,n.to);r.setSelection(S.create(r.doc,n.from+i.length)),vt(r),t(r.scrollIntoView())}return!0};function mo(){return l({"Mod-Shift-k":po})}function ho(e,t){let n=()=>{let n=e.coordsAtPos(t.from),r=e.coordsAtPos(t.to),i=Math.min(n.left,r.left),a=Math.max(n.right,r.right),o=Math.min(n.top,r.top),s=Math.max(n.bottom,r.bottom);return new DOMRect(i,o,a-i,s-o)};return{getBoundingClientRect:n,getClientRects:()=>[n()]}}function go(e){return e instanceof Me||e instanceof Ne||e instanceof Pe||e instanceof Fe||e instanceof F}function _o(e){for(let t of e)for(let e of t.steps)if(!go(e))return!0;return!1}function vo(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){_o(e)&&o()},view(e){return t=e,{destroy(){t=void 0}}}}}function yo(e){let t=new x(`spell-check`);return new b({key:t,state:{init:()=>vo(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 bo(e){return m(yo(e))}export{$a as EDITOR_KEY_BINDINGS,e as Priority,ta as checkRoundTrip,aa as codeBlockLanguages,qa as defaultResolveImageUrl,ra as defineBulletAfterHeading,Rt as defineCodeBlockSyntaxHighlight,di as defineEditorExtension,Ca as defineEmbedPaste,Oa as defineExitBoundaryHandler,Ia as defineFilePaste,en as defineHTMLComment,Ua as defineHTMLPaste,Qa as defineImage,Ka as defineImageClickHandler,to as defineLinkClickHandler,Ir as defineLinkCommands,Rr as defineLinkEditKeymap,ro as defineLinkHoverHandler,St as defineMarkMode,ao as defineMarkdownCopy,ce as definePlaceholder,le as defineReadonly,bo as defineSpellCheckPlugin,co as defineTagClickHandler,fo as defineWikilinkClickHandler,mo as defineWikilinkTrigger,Ii as docToMarkdown,Bt as getCodeTokens,q as getLinkUnitAt,mi as getMarkBuilders,ho as getVirtualElementFromRange,In as inlineTextToMarkChunks,Nr as insertLink,ii as isSelectionInTableCell,da as listenForTweetHeight,Y as markdownToDoc,va as matchEmbed,Fr as removeLink,Pr as updateLink,oe as withPriority};
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);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@meowdown/core",
3
3
  "type": "module",
4
- "version": "0.31.0",
4
+ "version": "0.32.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",