@milkdown/preset-commonmark 7.3.0 → 7.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.es.js CHANGED
@@ -1,11 +1,11 @@
1
- import { $markAttr as V, $markSchema as j, $command as y, $useKeymap as N, $node as ot, $nodeAttr as I, $nodeSchema as C, $ctx as ne, $inputRule as w, pipe as Tt, $prose as O, $remark as $ } from "@milkdown/utils";
1
+ import { $markAttr as V, $markSchema as j, $command as y, $useKeymap as N, $node as ot, $nodeAttr as I, $nodeSchema as C, $ctx as ne, $inputRule as w, pipe as Tt, $prose as O, $remark as q } from "@milkdown/utils";
2
2
  import { remarkStringifyOptionsCtx as st, commandsCtx as h, editorViewCtx as X, serializerCtx as Rt, parserCtx as Kt } from "@milkdown/core";
3
3
  import { toggleMark as oe, setBlockType as E, wrapIn as se } from "@milkdown/prose/commands";
4
4
  import { Fragment as Dt } from "@milkdown/prose/model";
5
5
  import { expectDomTypeError as A } from "@milkdown/exception";
6
6
  import { textblockTypeInputRule as lt, wrappingInputRule as le, InputRule as it } from "@milkdown/prose/inputrules";
7
7
  import Pt from "@sindresorhus/slugify";
8
- import { TextSelection as G, Selection as ct, PluginKey as T, Plugin as R } from "@milkdown/prose/state";
8
+ import { TextSelection as $, Selection as ct, PluginKey as T, Plugin as R } from "@milkdown/prose/state";
9
9
  import { findSelectedNodeOfType as _t } from "@milkdown/prose";
10
10
  import { sinkListItem as Et, liftListItem as dt, splitListItem as $t } from "@milkdown/prose/schema-list";
11
11
  import { ReplaceStep as qt, AddMarkStep as Wt } from "@milkdown/prose/transform";
@@ -275,7 +275,7 @@ const pt = y("UpdateLink", (t) => (e = {}) => (r, a) => {
275
275
  return !1;
276
276
  const m = s, g = s + o.nodeSize, { tr: u } = r, k = B.type(t).create({ ...d.attrs, ...e });
277
277
  return k ? (a(
278
- u.removeMark(m, g, d).addMark(m, g, k).setSelection(new G(u.selection.$anchor)).scrollIntoView()
278
+ u.removeMark(m, g, d).addMark(m, g, k).setSelection(new $(u.selection.$anchor)).scrollIntoView()
279
279
  ), !0) : !1;
280
280
  });
281
281
  n(pt, {
@@ -515,7 +515,7 @@ n(xe, {
515
515
  displayName: "Attr<blockquote>",
516
516
  group: "Blockquote"
517
517
  });
518
- const q = C("blockquote", (t) => ({
518
+ const W = C("blockquote", (t) => ({
519
519
  content: "block+",
520
520
  group: "block",
521
521
  defining: !0,
@@ -534,20 +534,20 @@ const q = C("blockquote", (t) => ({
534
534
  }
535
535
  }
536
536
  }));
537
- n(q.node, {
537
+ n(W.node, {
538
538
  displayName: "NodeSchema<blockquote>",
539
539
  group: "Blockquote"
540
540
  });
541
- n(q.ctx, {
541
+ n(W.ctx, {
542
542
  displayName: "NodeSchemaCtx<blockquote>",
543
543
  group: "Blockquote"
544
544
  });
545
- const ht = w((t) => le(/^\s*>\s$/, q.type(t)));
545
+ const ht = w((t) => le(/^\s*>\s$/, W.type(t)));
546
546
  n(ht, {
547
547
  displayName: "InputRule<wrapInBlockquoteInputRule>",
548
548
  group: "Blockquote"
549
549
  });
550
- const Se = y("WrapInBlockquote", (t) => () => se(q.type(t)));
550
+ const Se = y("WrapInBlockquote", (t) => () => se(W.type(t)));
551
551
  n(Se, {
552
552
  displayName: "Command<wrapInBlockquoteCommand>",
553
553
  group: "Blockquote"
@@ -577,7 +577,7 @@ n(Ae, {
577
577
  displayName: "Attr<codeBlock>",
578
578
  group: "CodeBlock"
579
579
  });
580
- const W = C("code_block", (t) => ({
580
+ const F = C("code_block", (t) => ({
581
581
  content: "text*",
582
582
  group: "block",
583
583
  marks: "",
@@ -627,15 +627,15 @@ const W = C("code_block", (t) => ({
627
627
  }
628
628
  }
629
629
  }));
630
- n(W.node, {
630
+ n(F.node, {
631
631
  displayName: "NodeSchema<codeBlock>",
632
632
  group: "CodeBlock"
633
633
  });
634
- n(W.ctx, {
634
+ n(F.ctx, {
635
635
  displayName: "NodeSchemaCtx<codeBlock>",
636
636
  group: "CodeBlock"
637
637
  });
638
- const kt = w((t) => lt(/^```(?<language>[a-z]*)?[\s\n]$/, W.type(t), (e) => {
638
+ const kt = w((t) => lt(/^```(?<language>[a-z]*)?[\s\n]$/, F.type(t), (e) => {
639
639
  var r;
640
640
  return {
641
641
  language: ((r = e.groups) == null ? void 0 : r.language) ?? ""
@@ -645,7 +645,7 @@ n(kt, {
645
645
  displayName: "InputRule<createCodeBlockInputRule>",
646
646
  group: "CodeBlock"
647
647
  });
648
- const ve = y("CreateCodeBlock", (t) => (e = "") => E(W.type(t), { language: e }));
648
+ const ve = y("CreateCodeBlock", (t) => (e = "") => E(F.type(t), { language: e }));
649
649
  n(ve, {
650
650
  displayName: "Command<createCodeBlockCommand>",
651
651
  group: "CodeBlock"
@@ -814,6 +814,8 @@ n(S.ctx, {
814
814
  const Te = y("InsertHardbreak", (t) => () => (e, r) => {
815
815
  var s;
816
816
  const { selection: a, tr: o } = e;
817
+ if (!(a instanceof $))
818
+ return !1;
817
819
  if (a.empty) {
818
820
  const i = a.$from.node();
819
821
  if (i.childCount > 0 && ((s = i.lastChild) == null ? void 0 : s.type.name) === "hardbreak")
@@ -849,7 +851,7 @@ n(Ke, {
849
851
  displayName: "Attr<hr>",
850
852
  group: "Hr"
851
853
  });
852
- const F = C("hr", (t) => ({
854
+ const G = C("hr", (t) => ({
853
855
  group: "block",
854
856
  parseDOM: [{ tag: "hr" }],
855
857
  toDOM: (e) => ["hr", t.get(Ke.key)(e)],
@@ -866,11 +868,11 @@ const F = C("hr", (t) => ({
866
868
  }
867
869
  }
868
870
  }));
869
- n(F.node, {
871
+ n(G.node, {
870
872
  displayName: "NodeSchema<hr>",
871
873
  group: "Hr"
872
874
  });
873
- n(F.ctx, {
875
+ n(G.ctx, {
874
876
  displayName: "NodeSchemaCtx<hr>",
875
877
  group: "Hr"
876
878
  });
@@ -878,7 +880,7 @@ const It = w((t) => new it(
878
880
  /^(?:---|___\s|\*\*\*\s)$/,
879
881
  (e, r, a, o) => {
880
882
  const { tr: s } = e;
881
- return r[0] && s.replaceWith(a - 1, o, F.type(t).create()), s;
883
+ return r[0] && s.replaceWith(a - 1, o, G.type(t).create()), s;
882
884
  }
883
885
  ));
884
886
  n(It, {
@@ -888,7 +890,7 @@ n(It, {
888
890
  const Ct = y("InsertHr", (t) => () => (e, r) => {
889
891
  if (!r)
890
892
  return !0;
891
- const a = v.node.type(t).create(), { tr: o, selection: s } = e, { from: i } = s, l = F.type(t).create();
893
+ const a = v.node.type(t).create(), { tr: o, selection: s } = e, { from: i } = s, l = G.type(t).create();
892
894
  if (!l)
893
895
  return !0;
894
896
  const c = o.replaceSelectionWith(l).insert(i, a), d = ct.findFrom(c.doc.resolve(i), 1, !0);
@@ -1155,7 +1157,7 @@ n(Ve, {
1155
1157
  });
1156
1158
  const Ut = (t) => (e, r, a) => {
1157
1159
  const { selection: o } = e;
1158
- if (!(o instanceof G))
1160
+ if (!(o instanceof $))
1159
1161
  return !1;
1160
1162
  const { empty: s, $from: i } = o;
1161
1163
  if (!s || i.parentOffset !== 0)
@@ -1283,11 +1285,11 @@ const Yt = [
1283
1285
  Oe,
1284
1286
  S,
1285
1287
  xe,
1286
- q,
1287
- Ae,
1288
1288
  W,
1289
- Ke,
1289
+ Ae,
1290
1290
  F,
1291
+ Ke,
1292
+ G,
1291
1293
  Be,
1292
1294
  K,
1293
1295
  De,
@@ -1442,7 +1444,7 @@ const ir = (t) => t.selection.$from.node(), cr = (t, e, r, a) => {
1442
1444
  if (!d)
1443
1445
  return;
1444
1446
  const m = d.text.slice(0, d.text.indexOf(d.placeholder)), { $from: g } = c.selection, u = g.before(), k = g.after(), p = sr(d.nextNode, u, d.placeholder);
1445
- l = l.replaceWith(u, k, d.nextNode).setNodeMarkup(u, void 0, o).delete(p + 1, p + 2), l = l.setSelection(G.near(l.doc.resolve(p + 1))), (Xt.test(m) || ["*", "_", "~"].includes(m.at(-1) || "")) && l.selection instanceof G && (((L = l.selection.$cursor) == null ? void 0 : L.marks()) ?? []).forEach((J) => {
1447
+ l = l.replaceWith(u, k, d.nextNode).setNodeMarkup(u, void 0, o).delete(p + 1, p + 2), l = l.setSelection($.near(l.doc.resolve(p + 1))), (Xt.test(m) || ["*", "_", "~"].includes(m.at(-1) || "")) && l.selection instanceof $ && (((L = l.selection.$cursor) == null ? void 0 : L.marks()) ?? []).forEach((J) => {
1446
1448
  l = l.removeStoredMark(J.type);
1447
1449
  }), a(l);
1448
1450
  }, St = O((t) => {
@@ -1475,7 +1477,7 @@ n(St, {
1475
1477
  displayName: "Prose<inlineSyncPlugin>",
1476
1478
  group: "Prose"
1477
1479
  });
1478
- const Ze = $("remarkAddOrderInList", () => () => (t) => {
1480
+ const Ze = q("remarkAddOrderInList", () => () => (t) => {
1479
1481
  ie(t, "list", (e) => {
1480
1482
  if (e.ordered) {
1481
1483
  const r = e.start ?? 1;
@@ -1493,7 +1495,7 @@ n(Ze.options, {
1493
1495
  displayName: "RemarkConfig<remarkAddOrderInListPlugin>",
1494
1496
  group: "Remark"
1495
1497
  });
1496
- const Je = $("remarkLineBreak", () => () => (t) => {
1498
+ const Je = q("remarkLineBreak", () => () => (t) => {
1497
1499
  const e = /[\t ]*(?:\r?\n|\r)/g;
1498
1500
  ie(t, "text", (r, a, o) => {
1499
1501
  if (!r.value || typeof r.value != "string")
@@ -1518,7 +1520,7 @@ n(Je.options, {
1518
1520
  displayName: "RemarkConfig<remarkLineBreak>",
1519
1521
  group: "Remark"
1520
1522
  });
1521
- const Qe = $("remarkInlineLink", () => Ft);
1523
+ const Qe = q("remarkInlineLink", () => Ft);
1522
1524
  n(Qe.plugin, {
1523
1525
  displayName: "Remark<remarkInlineLinkPlugin>",
1524
1526
  group: "Remark"
@@ -1549,7 +1551,7 @@ function fr(t, e) {
1549
1551
  return e(a, o, s);
1550
1552
  }
1551
1553
  }
1552
- const Xe = $("remarkHTMLTransformer", () => () => (t) => {
1554
+ const Xe = q("remarkHTMLTransformer", () => () => (t) => {
1553
1555
  fr(t, (e, r, a) => kr(e) ? ((a == null ? void 0 : a.type) === "root" && (e.children = [{ ...e }], delete e.value, e.type = "paragraph"), [e]) : [e]);
1554
1556
  });
1555
1557
  n(Xe.plugin, {
@@ -1560,7 +1562,7 @@ n(Xe.options, {
1560
1562
  displayName: "RemarkConfig<remarkHtmlTransformer>",
1561
1563
  group: "Remark"
1562
1564
  });
1563
- const et = $("remarkMarker", () => () => (t, e) => {
1565
+ const et = q("remarkMarker", () => () => (t, e) => {
1564
1566
  const r = (a) => e.value.charAt(a.position.start.offset);
1565
1567
  ie(t, (a) => ["strong", "emphasis"].includes(a.type), (a) => {
1566
1568
  a.marker = r(a);
@@ -1768,13 +1770,13 @@ const Nr = [
1768
1770
  export {
1769
1771
  xe as blockquoteAttr,
1770
1772
  we as blockquoteKeymap,
1771
- q as blockquoteSchema,
1773
+ W as blockquoteSchema,
1772
1774
  De as bulletListAttr,
1773
1775
  _e as bulletListKeymap,
1774
1776
  D as bulletListSchema,
1775
1777
  Ae as codeBlockAttr,
1776
1778
  He as codeBlockKeymap,
1777
- W as codeBlockSchema,
1779
+ F as codeBlockSchema,
1778
1780
  Jt as commands,
1779
1781
  Kr as commonmark,
1780
1782
  ve as createCodeBlockCommand,
@@ -1796,7 +1798,7 @@ export {
1796
1798
  Le as headingKeymap,
1797
1799
  H as headingSchema,
1798
1800
  Ke as hrAttr,
1799
- F as hrSchema,
1801
+ G as hrSchema,
1800
1802
  Ue as htmlAttr,
1801
1803
  Ye as htmlSchema,
1802
1804
  Be as imageAttr,
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/__internal__/serialize-text.ts","../src/__internal__/with-meta.ts","../src/mark/emphasis.ts","../src/mark/strong.ts","../src/mark/inline-code.ts","../src/mark/link.ts","../src/node/doc.ts","../src/node/paragraph.ts","../src/node/heading.ts","../src/node/blockquote.ts","../src/node/code-block.ts","../src/node/image.ts","../src/node/hardbreak.ts","../src/node/hr.ts","../src/node/bullet-list.ts","../src/node/ordered-list.ts","../src/node/list-item.ts","../src/node/text.ts","../src/node/html.ts","../src/composed/schema.ts","../src/composed/inputrules.ts","../src/composed/commands.ts","../src/composed/keymap.ts","../src/plugin/inline-sync-plugin/regexp.ts","../src/plugin/inline-sync-plugin/utils.ts","../src/plugin/inline-sync-plugin/config.ts","../src/plugin/inline-sync-plugin/context.ts","../src/plugin/inline-sync-plugin/replacer.ts","../src/plugin/inline-sync-plugin/inline-sync-plugin.ts","../src/plugin/remark-add-order-in-list-plugin.ts","../src/plugin/remark-line-break.ts","../src/plugin/remark-inline-link-plugin.ts","../src/plugin/remark-html-transformer.ts","../src/plugin/remark-marker-plugin.ts","../src/plugin/inline-nodes-cursor-plugin.ts","../src/plugin/hardbreak-clear-mark-plugin.ts","../src/plugin/hardbreak-filter-plugin.ts","../src/plugin/sync-heading-id-plugin.ts","../src/plugin/sync-list-order-plugin.ts","../src/composed/plugins.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport type { SerializerState } from '@milkdown/transformer'\nimport type { Node } from '@milkdown/prose/model'\nimport { Fragment } from '@milkdown/prose/model'\n\nexport const serializeText = (state: SerializerState, node: Node) => {\n const lastIsHardBreak\n = node.childCount >= 1 && node.lastChild?.type.name === 'hardbreak'\n if (!lastIsHardBreak) {\n state.next(node.content)\n return\n }\n\n const contentArr: Node[] = []\n node.content.forEach((n, _, i) => {\n if (i === node.childCount - 1)\n return\n\n contentArr.push(n)\n })\n state.next(Fragment.fromArray(contentArr))\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Meta, MilkdownPlugin } from '@milkdown/ctx'\n\nexport const withMeta = <T extends MilkdownPlugin>(\n plugin: T,\n meta: Partial<Meta> & Pick<Meta, 'displayName'>,\n): T => {\n Object.assign(plugin, {\n meta: {\n package: '@milkdown/preset-commonmark',\n ...meta,\n },\n })\n\n return plugin\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, remarkStringifyOptionsCtx } from '@milkdown/core'\nimport { $command, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the emphasis mark.\nexport const emphasisAttr = $markAttr('emphasis')\n\nwithMeta(emphasisAttr, {\n displayName: 'Attr<emphasis>',\n group: 'Emphasis',\n})\n\n/// Emphasis mark schema.\nexport const emphasisSchema = $markSchema('emphasis', ctx => ({\n attrs: {\n marker: {\n default: ctx.get(remarkStringifyOptionsCtx).emphasis || '*',\n },\n },\n parseDOM: [\n { tag: 'i' },\n { tag: 'em' },\n { style: 'font-style', getAttrs: value => (value === 'italic') as false },\n ],\n toDOM: mark => ['em', ctx.get(emphasisAttr.key)(mark)],\n parseMarkdown: {\n match: node => node.type === 'emphasis',\n runner: (state, node, markType) => {\n state.openMark(markType, { marker: node.marker })\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === 'emphasis',\n runner: (state, mark) => {\n state.withMark(mark, 'emphasis', undefined, {\n marker: mark.attrs.marker,\n })\n },\n },\n}))\n\nwithMeta(emphasisSchema.mark, {\n displayName: 'MarkSchema<emphasis>',\n group: 'Emphasis',\n})\n\nwithMeta(emphasisSchema.ctx, {\n displayName: 'MarkSchemaCtx<emphasis>',\n group: 'Emphasis',\n})\n\n/// A command to toggle the emphasis mark.\nexport const toggleEmphasisCommand = $command('ToggleEmphasis', ctx => () => {\n return toggleMark(emphasisSchema.type(ctx))\n})\n\nwithMeta(toggleEmphasisCommand, {\n displayName: 'Command<toggleEmphasisCommand>',\n group: 'Emphasis',\n})\n\n/// Keymap for the emphasis mark.\n/// - `Mod-i` - Toggle the emphasis mark.\nexport const emphasisKeymap = $useKeymap('emphasisKeymap', {\n ToggleEmphasis: {\n shortcuts: 'Mod-i',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(toggleEmphasisCommand.key)\n },\n },\n})\n\nwithMeta(emphasisKeymap.ctx, {\n displayName: 'KeymapCtx<emphasis>',\n group: 'Emphasis',\n})\n\nwithMeta(emphasisKeymap.shortcuts, {\n displayName: 'Keymap<emphasis>',\n group: 'Emphasis',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, remarkStringifyOptionsCtx } from '@milkdown/core'\nimport { $command, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the strong mark.\nexport const strongAttr = $markAttr('strong')\n\nwithMeta(strongAttr, {\n displayName: 'Attr<strong>',\n group: 'Strong',\n})\n\n/// Strong mark schema.\nexport const strongSchema = $markSchema('strong', ctx => ({\n attrs: {\n marker: {\n default: ctx.get(remarkStringifyOptionsCtx).strong || '*',\n },\n },\n parseDOM: [\n { tag: 'b' },\n { tag: 'strong' },\n { style: 'font-style', getAttrs: value => (value === 'bold') as false },\n ],\n toDOM: mark => ['strong', ctx.get(strongAttr.key)(mark)],\n parseMarkdown: {\n match: node => node.type === 'strong',\n runner: (state, node, markType) => {\n state.openMark(markType, { marker: node.marker })\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === 'strong',\n runner: (state, mark) => {\n state.withMark(mark, 'strong', undefined, {\n marker: mark.attrs.marker,\n })\n },\n },\n}))\n\nwithMeta(strongSchema.mark, {\n displayName: 'MarkSchema<strong>',\n group: 'Strong',\n})\n\nwithMeta(strongSchema.ctx, {\n displayName: 'MarkSchemaCtx<strong>',\n group: 'Strong',\n})\n\n/// A command to toggle the strong mark.\nexport const toggleStrongCommand = $command('ToggleStrong', ctx => () => {\n return toggleMark(strongSchema.type(ctx))\n})\n\nwithMeta(toggleStrongCommand, {\n displayName: 'Command<toggleStrongCommand>',\n group: 'Strong',\n})\n\n/// Keymap for the strong mark.\n/// - `Mod-b` - Toggle the strong mark.\nexport const strongKeymap = $useKeymap('strongKeymap', {\n ToggleBold: {\n shortcuts: ['Mod-b'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(toggleStrongCommand.key)\n },\n },\n})\n\nwithMeta(strongKeymap.ctx, {\n displayName: 'KeymapCtx<strong>',\n group: 'Strong',\n})\n\nwithMeta(strongKeymap.shortcuts, {\n displayName: 'Keymap<strong>',\n group: 'Strong',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport type { MarkType } from '@milkdown/prose/model'\nimport { $command, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the inlineCode mark.\nexport const inlineCodeAttr = $markAttr('inlineCode')\n\nwithMeta(inlineCodeAttr, {\n displayName: 'Attr<inlineCode>',\n group: 'InlineCode',\n})\n\n/// InlineCode mark schema.\nexport const inlineCodeSchema = $markSchema('inlineCode', ctx => ({\n priority: 100,\n code: true,\n inclusive: false,\n parseDOM: [{ tag: 'code' }],\n toDOM: mark => ['code', ctx.get(inlineCodeAttr.key)(mark)],\n parseMarkdown: {\n match: node => node.type === 'inlineCode',\n runner: (state, node, markType) => {\n state.openMark(markType)\n state.addText(node.value as string)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === 'inlineCode',\n runner: (state, mark, node) => {\n state.withMark(mark, 'inlineCode', node.text || '')\n },\n },\n}))\n\nwithMeta(inlineCodeSchema.mark, {\n displayName: 'MarkSchema<inlineCode>',\n group: 'InlineCode',\n})\n\nwithMeta(inlineCodeSchema.ctx, {\n displayName: 'MarkSchemaCtx<inlineCode>',\n group: 'InlineCode',\n})\n\n/// A command to toggle the inlineCode mark.\nexport const toggleInlineCodeCommand = $command('ToggleInlineCode', ctx => () => (state, dispatch) => {\n const { selection, tr } = state\n if (selection.empty)\n return false\n const { from, to } = selection\n\n const has = state.doc.rangeHasMark(from, to, inlineCodeSchema.type(ctx))\n // remove exists inlineCode mark if have\n if (has) {\n dispatch?.(tr.removeMark(from, to, inlineCodeSchema.type(ctx)))\n return true\n }\n\n const restMarksName = Object.keys(state.schema.marks).filter(x => x !== inlineCodeSchema.type.name)\n\n // remove other marks\n restMarksName\n .map(name => state.schema.marks[name] as MarkType)\n .forEach((t) => {\n tr.removeMark(from, to, t)\n })\n\n // add inlineCode mark\n dispatch?.(tr.addMark(from, to, inlineCodeSchema.type(ctx).create()))\n return true\n})\n\nwithMeta(toggleInlineCodeCommand, {\n displayName: 'Command<toggleInlineCodeCommand>',\n group: 'InlineCode',\n})\n\n/// Keymap for the inlineCode mark.\n/// - `Mod-e` - Toggle the inlineCode mark.\nexport const inlineCodeKeymap = $useKeymap('inlineCodeKeymap', {\n ToggleInlineCode: {\n shortcuts: 'Mod-e',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(toggleInlineCodeCommand.key)\n },\n },\n})\n\nwithMeta(inlineCodeKeymap.ctx, {\n displayName: 'KeymapCtx<inlineCode>',\n group: 'InlineCode',\n})\n\nwithMeta(inlineCodeKeymap.shortcuts, {\n displayName: 'Keymap<inlineCode>',\n group: 'InlineCode',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport type { Node as ProseNode } from '@milkdown/prose/model'\nimport { TextSelection } from '@milkdown/prose/state'\nimport { $command, $markAttr, $markSchema } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the link mark.\nexport const linkAttr = $markAttr('link')\n\nwithMeta(linkAttr, {\n displayName: 'Attr<link>',\n group: 'Link',\n})\n\n/// Link mark schema.\nexport const linkSchema = $markSchema('link', ctx => ({\n attrs: {\n href: {},\n title: { default: null },\n },\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return { href: dom.getAttribute('href'), title: dom.getAttribute('title') }\n },\n },\n ],\n toDOM: mark => ['a', { ...ctx.get(linkAttr.key)(mark), ...mark.attrs }],\n parseMarkdown: {\n match: node => node.type === 'link',\n runner: (state, node, markType) => {\n const url = node.url as string\n const title = node.title as string\n state.openMark(markType, { href: url, title })\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === 'link',\n runner: (state, mark) => {\n state.withMark(mark, 'link', undefined, {\n title: mark.attrs.title,\n url: mark.attrs.href,\n })\n },\n },\n}))\n\nwithMeta(linkSchema.mark, {\n displayName: 'MarkSchema<link>',\n group: 'Link',\n})\n\n/// @internal\nexport type UpdateLinkCommandPayload = {\n href?: string\n title?: string\n}\n/// A command to toggle the link mark.\n/// You can pass the `href` and `title` to the link.\nexport const toggleLinkCommand = $command('ToggleLink', ctx => (payload: UpdateLinkCommandPayload = {}) => toggleMark(linkSchema.type(ctx), payload))\n\nwithMeta(toggleLinkCommand, {\n displayName: 'Command<toggleLinkCommand>',\n group: 'Link',\n})\n\n/// A command to update the link mark.\n/// You can pass the `href` and `title` to update the link.\nexport const updateLinkCommand = $command('UpdateLink', ctx => (payload: UpdateLinkCommandPayload = {}) => (state, dispatch) => {\n if (!dispatch)\n return false\n\n let node: ProseNode | undefined\n let pos = -1\n const { selection } = state\n const { from, to } = selection\n state.doc.nodesBetween(from, from === to ? to + 1 : to, (n, p) => {\n if (linkSchema.type(ctx).isInSet(n.marks)) {\n node = n\n pos = p\n return false\n }\n\n return undefined\n })\n\n if (!node)\n return false\n\n const mark = node.marks.find(({ type }) => type === linkSchema.type(ctx))\n if (!mark)\n return false\n\n const start = pos\n const end = pos + node.nodeSize\n const { tr } = state\n const linkMark = linkSchema.type(ctx).create({ ...mark.attrs, ...payload })\n if (!linkMark)\n return false\n\n dispatch(\n tr\n .removeMark(start, end, mark)\n .addMark(start, end, linkMark)\n .setSelection(new TextSelection(tr.selection.$anchor))\n .scrollIntoView(),\n )\n\n return true\n})\n\nwithMeta(updateLinkCommand, {\n displayName: 'Command<updateLinkCommand>',\n group: 'Link',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $node } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// The top-level document node.\nexport const docSchema = $node('doc', () => ({\n content: 'block+',\n parseMarkdown: {\n match: ({ type }) => type === 'root',\n runner: (state, node, type) => {\n state.injectRoot(node, type)\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'doc',\n runner: (state, node) => {\n state.openNode('root')\n state.next(node.content)\n },\n },\n}))\n\nwithMeta(docSchema, {\n displayName: 'NodeSchema<doc>',\n group: 'Doc',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { serializeText, withMeta } from '../__internal__'\n\n/// HTML attributes for paragraph node.\nexport const paragraphAttr = $nodeAttr('paragraph')\n\nwithMeta(paragraphAttr, {\n displayName: 'Attr<paragraph>',\n group: 'Paragraph',\n})\n\n/// Schema for paragraph node.\nexport const paragraphSchema = $nodeSchema('paragraph', ctx => ({\n content: 'inline*',\n group: 'block',\n parseDOM: [{ tag: 'p' }],\n toDOM: node => ['p', ctx.get(paragraphAttr.key)(node), 0],\n parseMarkdown: {\n match: node => node.type === 'paragraph',\n runner: (state, node, type) => {\n state.openNode(type)\n if (node.children)\n state.next(node.children)\n\n else\n state.addText((node.value || '') as string)\n\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'paragraph',\n runner: (state, node) => {\n state.openNode('paragraph')\n serializeText(state, node)\n state.closeNode()\n },\n },\n}))\n\nwithMeta(paragraphSchema.node, {\n displayName: 'NodeSchema<paragraph>',\n group: 'Paragraph',\n})\nwithMeta(paragraphSchema.ctx, {\n displayName: 'NodeSchemaCtx<paragraph>',\n group: 'Paragraph',\n})\n\n/// This command can turn the selected block into paragraph.\nexport const turnIntoTextCommand = $command('TurnIntoText', ctx => () => setBlockType(paragraphSchema.type(ctx)))\n\nwithMeta(turnIntoTextCommand, {\n displayName: 'Command<turnIntoTextCommand>',\n group: 'Paragraph',\n})\n\n/// Keymap for paragraph node.\n/// - `<Mod-Alt-0>`: Turn the selected block into paragraph.\nexport const paragraphKeymap = $useKeymap('paragraphKeymap', {\n TurnIntoText: {\n shortcuts: 'Mod-Alt-0',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(turnIntoTextCommand.key)\n },\n },\n})\n\nwithMeta(paragraphKeymap.ctx, {\n displayName: 'KeymapCtx<paragraph>',\n group: 'Paragraph',\n})\n\nwithMeta(paragraphKeymap.shortcuts, {\n displayName: 'Keymap<paragraph>',\n group: 'Paragraph',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, editorViewCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { textblockTypeInputRule } from '@milkdown/prose/inputrules'\nimport type { Node } from '@milkdown/prose/model'\nimport { $command, $ctx, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport slugify from '@sindresorhus/slugify'\nimport { serializeText, withMeta } from '../__internal__'\nimport { paragraphSchema } from './paragraph'\n\nconst headingIndex = Array(6)\n .fill(0)\n .map((_, i) => i + 1)\n\nconst defaultHeadingIdGenerator = (node: Node) =>\n slugify(node.textContent)\n\n/// This is a slice contains a function to generate heading id.\n/// You can configure it to generate id in your own way.\nexport const headingIdGenerator = $ctx(defaultHeadingIdGenerator, 'headingIdGenerator')\n\nwithMeta(headingIdGenerator, {\n displayName: 'Ctx<HeadingIdGenerator>',\n group: 'Heading',\n})\n\n/// HTML attributes for heading node.\nexport const headingAttr = $nodeAttr('heading')\n\nwithMeta(headingAttr, {\n displayName: 'Attr<heading>',\n group: 'Heading',\n})\n\n/// Schema for heading node.\nexport const headingSchema = $nodeSchema('heading', (ctx) => {\n const getId = ctx.get(headingIdGenerator.key)\n return {\n content: 'inline*',\n group: 'block',\n defining: true,\n attrs: {\n id: {\n default: '',\n },\n level: {\n default: 1,\n },\n },\n parseDOM: headingIndex.map(x => ({\n tag: `h${x}`,\n getAttrs: (node) => {\n if (!(node instanceof HTMLElement))\n throw expectDomTypeError(node)\n\n return { level: x, id: node.id }\n },\n })),\n toDOM: (node) => {\n return [\n `h${node.attrs.level}`,\n {\n ...ctx.get(headingAttr.key)(node),\n id: node.attrs.id || getId(node),\n },\n 0,\n ]\n },\n parseMarkdown: {\n match: ({ type }) => type === 'heading',\n runner: (state, node, type) => {\n const depth = node.depth as number\n state.openNode(type, { level: depth })\n state.next(node.children)\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'heading',\n runner: (state, node) => {\n state.openNode('heading', undefined, { depth: node.attrs.level })\n serializeText(state, node)\n state.closeNode()\n },\n },\n }\n})\n\nwithMeta(headingSchema.node, {\n displayName: 'NodeSchema<heading>',\n group: 'Heading',\n})\n\nwithMeta(headingSchema.ctx, {\n displayName: 'NodeSchemaCtx<heading>',\n group: 'Heading',\n})\n\n/// This input rule can turn the selected block into heading.\n/// You can input numbers of `#` and a `space` to create heading.\nexport const wrapInHeadingInputRule = $inputRule((ctx) => {\n return textblockTypeInputRule(/^(?<hashes>#+)\\s$/, headingSchema.type(ctx), (match) => {\n const x = match.groups?.hashes?.length || 0\n\n const view = ctx.get(editorViewCtx)\n const { $from } = view.state.selection\n const node = $from.node()\n if (node.type.name === 'heading') {\n let level = Number(node.attrs.level) + Number(x)\n if (level > 6)\n level = 6\n\n return { level }\n }\n return { level: x }\n })\n})\n\nwithMeta(wrapInHeadingInputRule, {\n displayName: 'InputRule<wrapInHeadingInputRule>',\n group: 'Heading',\n})\n\n/// This command can turn the selected block into heading.\n/// You can pass the level of heading to this command.\n/// By default, the level is 1, which means it will create a `h1` element.\nexport const wrapInHeadingCommand = $command('WrapInHeading', (ctx) => {\n return (level?: number) => {\n level ??= 1\n\n if (level < 1)\n return setBlockType(paragraphSchema.type(ctx))\n\n return setBlockType(headingSchema.type(ctx), { level })\n }\n})\n\nwithMeta(wrapInHeadingCommand, {\n displayName: 'Command<wrapInHeadingCommand>',\n group: 'Heading',\n})\n\n/// This command can downgrade the selected heading.\n/// For example, if you have a `h2` element, and you call this command, you will get a `h1` element.\n/// If the element is already a `h1` element, it will turn it into a `p` element.\nexport const downgradeHeadingCommand = $command('DowngradeHeading', ctx => () =>\n (state, dispatch, view) => {\n const { $from } = state.selection\n const node = $from.node()\n if (node.type !== headingSchema.type(ctx) || !state.selection.empty || $from.parentOffset !== 0)\n return false\n\n const level = node.attrs.level - 1\n if (!level)\n return setBlockType(paragraphSchema.type(ctx))(state, dispatch, view)\n\n dispatch?.(\n state.tr.setNodeMarkup(state.selection.$from.before(), undefined, {\n ...node.attrs,\n level,\n }),\n )\n return true\n })\n\nwithMeta(downgradeHeadingCommand, {\n displayName: 'Command<downgradeHeadingCommand>',\n group: 'Heading',\n})\n\n/// Keymap for heading node.\n/// - `<Mod-Alt-{1-6}>`: Turn the selected block into `h{1-6}` element.\n/// - `<Delete>/<Backspace>`: Downgrade the selected heading.\nexport const headingKeymap = $useKeymap('headingKeymap', {\n TurnIntoH1: {\n shortcuts: 'Mod-Alt-1',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 1)\n },\n },\n TurnIntoH2: {\n shortcuts: 'Mod-Alt-2',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 2)\n },\n },\n TurnIntoH3: {\n shortcuts: 'Mod-Alt-3',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 3)\n },\n },\n TurnIntoH4: {\n shortcuts: 'Mod-Alt-4',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 4)\n },\n },\n TurnIntoH5: {\n shortcuts: 'Mod-Alt-5',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 5)\n },\n },\n TurnIntoH6: {\n shortcuts: 'Mod-Alt-6',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 6)\n },\n },\n DowngradeHeading: {\n shortcuts: ['Delete', 'Backspace'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(downgradeHeadingCommand.key)\n },\n },\n})\n\nwithMeta(headingKeymap.ctx, {\n displayName: 'KeymapCtx<heading>',\n group: 'Heading',\n})\n\nwithMeta(headingKeymap.shortcuts, {\n displayName: 'Keymap<heading>',\n group: 'Heading',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport type { $NodeSchema } from '@milkdown/utils'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for blockquote node.\nexport const blockquoteAttr = $nodeAttr('blockquote')\n\nwithMeta(blockquoteAttr, {\n displayName: 'Attr<blockquote>',\n group: 'Blockquote',\n})\n\n/// Schema for blockquote node.\nexport const blockquoteSchema: $NodeSchema<'blockquote'> = $nodeSchema('blockquote', ctx => ({\n content: 'block+',\n group: 'block',\n defining: true,\n parseDOM: [{ tag: 'blockquote' }],\n toDOM: node => ['blockquote', ctx.get(blockquoteAttr.key)(node), 0],\n parseMarkdown: {\n match: ({ type }) => type === 'blockquote',\n runner: (state, node, type) => {\n state.openNode(type).next(node.children).closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'blockquote',\n runner: (state, node) => {\n state.openNode('blockquote').next(node.content).closeNode()\n },\n },\n}))\n\nwithMeta(blockquoteSchema.node, {\n displayName: 'NodeSchema<blockquote>',\n group: 'Blockquote',\n})\n\nwithMeta(blockquoteSchema.ctx, {\n displayName: 'NodeSchemaCtx<blockquote>',\n group: 'Blockquote',\n})\n\n/// This input rule will convert a line that starts with `> ` into a blockquote.\n/// You can type `> ` at the start of a line to create a blockquote.\nexport const wrapInBlockquoteInputRule = $inputRule(ctx => wrappingInputRule(/^\\s*>\\s$/, blockquoteSchema.type(ctx)))\n\nwithMeta(wrapInBlockquoteInputRule, {\n displayName: 'InputRule<wrapInBlockquoteInputRule>',\n group: 'Blockquote',\n})\n\n/// This command will wrap the current selection in a blockquote.\nexport const wrapInBlockquoteCommand = $command('WrapInBlockquote', ctx => () => wrapIn(blockquoteSchema.type(ctx)))\n\nwithMeta(wrapInBlockquoteCommand, {\n displayName: 'Command<wrapInBlockquoteCommand>',\n group: 'Blockquote',\n})\n\n/// Keymap for blockquote.\n/// - `Mod-Shift-b`: Wrap selection in blockquote.\nexport const blockquoteKeymap = $useKeymap('blockquoteKeymap', {\n WrapInBlockquote: {\n shortcuts: 'Mod-Shift-b',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInBlockquoteCommand.key)\n },\n },\n})\n\nwithMeta(blockquoteKeymap.ctx, {\n displayName: 'KeymapCtx<blockquote>',\n group: 'Blockquote',\n})\n\nwithMeta(blockquoteKeymap.shortcuts, {\n displayName: 'Keymap<blockquote>',\n group: 'Blockquote',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { textblockTypeInputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for code block node.\nexport const codeBlockAttr = $nodeAttr('codeBlock', () => ({\n pre: {},\n code: {},\n}))\n\nwithMeta(codeBlockAttr, {\n displayName: 'Attr<codeBlock>',\n group: 'CodeBlock',\n})\n\n/// Schema for code block node.\nexport const codeBlockSchema = $nodeSchema('code_block', (ctx) => {\n return {\n content: 'text*',\n group: 'block',\n marks: '',\n defining: true,\n code: true,\n attrs: {\n language: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return { language: dom.dataset.language }\n },\n },\n ],\n toDOM: (node) => {\n const attr = ctx.get(codeBlockAttr.key)(node)\n return [\n 'pre',\n {\n ...attr.pre,\n 'data-language': node.attrs.language,\n },\n ['code', attr.code, 0],\n ]\n },\n parseMarkdown: {\n match: ({ type }) => type === 'code',\n runner: (state, node, type) => {\n const language = node.lang as string\n const value = node.value as string\n state.openNode(type, { language })\n if (value)\n state.addText(value)\n\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'code_block',\n runner: (state, node) => {\n state.addNode('code', undefined, node.content.firstChild?.text || '', {\n lang: node.attrs.language,\n })\n },\n },\n }\n})\n\nwithMeta(codeBlockSchema.node, {\n displayName: 'NodeSchema<codeBlock>',\n group: 'CodeBlock',\n})\n\nwithMeta(codeBlockSchema.ctx, {\n displayName: 'NodeSchemaCtx<codeBlock>',\n group: 'CodeBlock',\n})\n\n/// A input rule for creating code block.\n/// For example, ` ```javascript ` will create a code block with language javascript.\nexport const createCodeBlockInputRule = $inputRule(ctx => textblockTypeInputRule(/^```(?<language>[a-z]*)?[\\s\\n]$/, codeBlockSchema.type(ctx), match => ({\n language: match.groups?.language ?? '',\n})))\n\nwithMeta(createCodeBlockInputRule, {\n displayName: 'InputRule<createCodeBlockInputRule>',\n group: 'CodeBlock',\n})\n\n/// A command for creating code block.\n/// You can pass the language of the code block as the parameter.\nexport const createCodeBlockCommand = $command('CreateCodeBlock', ctx => (language = '') => setBlockType(codeBlockSchema.type(ctx), { language }))\n\nwithMeta(createCodeBlockCommand, {\n displayName: 'Command<createCodeBlockCommand>',\n group: 'CodeBlock',\n})\n\n/// A command for updating the code block language of the target position.\nexport const updateCodeBlockLanguageCommand = $command('UpdateCodeBlockLanguage', () => ({ pos, language }: { pos: number; language: string } = { pos: -1, language: '' }) => (state, dispatch) => {\n if (pos >= 0) {\n dispatch?.(state.tr.setNodeAttribute(pos, 'language', language))\n return true\n }\n\n return false\n})\n\nwithMeta(updateCodeBlockLanguageCommand, {\n displayName: 'Command<updateCodeBlockLanguageCommand>',\n group: 'CodeBlock',\n})\n\n/// Keymap for code block.\n/// - `Mod-Alt-c`: Create a code block.\nexport const codeBlockKeymap = $useKeymap('codeBlockKeymap', {\n CreateCodeBlock: {\n shortcuts: 'Mod-Alt-c',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(createCodeBlockCommand.key)\n },\n },\n})\n\nwithMeta(codeBlockKeymap.ctx, {\n displayName: 'KeymapCtx<codeBlock>',\n group: 'CodeBlock',\n})\n\nwithMeta(codeBlockKeymap.shortcuts, {\n displayName: 'Keymap<codeBlock>',\n group: 'CodeBlock',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { findSelectedNodeOfType } from '@milkdown/prose'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for image node.\nexport const imageAttr = $nodeAttr('image')\n\nwithMeta(imageAttr, {\n displayName: 'Attr<image>',\n group: 'Image',\n})\n\n/// Schema for image node.\nexport const imageSchema = $nodeSchema('image', (ctx) => {\n return {\n inline: true,\n group: 'inline',\n selectable: true,\n draggable: true,\n marks: '',\n atom: true,\n defining: true,\n isolating: true,\n attrs: {\n src: { default: '' },\n alt: { default: '' },\n title: { default: '' },\n },\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n src: dom.getAttribute('src') || '',\n alt: dom.getAttribute('alt') || '',\n title: dom.getAttribute('title') || dom.getAttribute('alt') || '',\n }\n },\n },\n ],\n toDOM: (node) => {\n return ['img', { ...ctx.get(imageAttr.key)(node), ...node.attrs }]\n },\n parseMarkdown: {\n match: ({ type }) => type === 'image',\n runner: (state, node, type) => {\n const url = node.url as string\n const alt = node.alt as string\n const title = node.title as string\n state.addNode(type, {\n src: url,\n alt,\n title,\n })\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'image',\n runner: (state, node) => {\n state.addNode('image', undefined, undefined, {\n title: node.attrs.title,\n url: node.attrs.src,\n alt: node.attrs.alt,\n })\n },\n },\n }\n})\n\nwithMeta(imageSchema.node, {\n displayName: 'NodeSchema<image>',\n group: 'Image',\n})\n\nwithMeta(imageSchema.ctx, {\n displayName: 'NodeSchemaCtx<image>',\n group: 'Image',\n})\n\n/// @internal\nexport type UpdateImageCommandPayload = {\n src?: string\n title?: string\n alt?: string\n}\n\n/// This command will insert a image node.\n/// You can pass a payload to set `src`, `alt` and `title` for the image node.\nexport const insertImageCommand = $command('InsertImage', ctx => (payload: UpdateImageCommandPayload = {}) =>\n (state, dispatch) => {\n if (!dispatch)\n return true\n\n const { src = '', alt = '', title = '' } = payload\n\n const node = imageSchema.type(ctx).create({ src, alt, title })\n if (!node)\n return true\n\n dispatch(state.tr.replaceSelectionWith(node).scrollIntoView())\n return true\n })\n\nwithMeta(insertImageCommand, {\n displayName: 'Command<insertImageCommand>',\n group: 'Image',\n})\n\n/// This command will update the selected image node.\n/// You can pass a payload to update `src`, `alt` and `title` for the image node.\nexport const updateImageCommand = $command('UpdateImage', ctx => (payload: UpdateImageCommandPayload = {}) => (state, dispatch) => {\n const nodeWithPos = findSelectedNodeOfType(state.selection, imageSchema.type(ctx))\n if (!nodeWithPos)\n return false\n\n const { node, pos } = nodeWithPos\n\n const newAttrs = { ...node.attrs }\n const { src, alt, title } = payload\n if (src !== undefined)\n newAttrs.src = src\n if (alt !== undefined)\n newAttrs.alt = alt\n if (title !== undefined)\n newAttrs.title = title\n\n dispatch?.(state.tr.setNodeMarkup(pos, undefined, newAttrs).scrollIntoView())\n return true\n})\n\nwithMeta(updateImageCommand, {\n displayName: 'Command<updateImageCommand>',\n group: 'Image',\n})\n\n/// This input rule will insert a image node.\n/// You can input `![alt](src \"title\")` to insert a image node.\n/// The `title` is optional.\nexport const insertImageInputRule = $inputRule(ctx => new InputRule(\n /!\\[(?<alt>.*?)]\\((?<filename>.*?)\\s*(?=\"|\\))\"?(?<title>[^\"]+)?\"?\\)/,\n (state, match, start, end) => {\n const [matched, alt, src = '', title] = match\n if (matched)\n return state.tr.replaceWith(start, end, imageSchema.type(ctx).create({ src, alt, title }))\n\n return null\n },\n))\n\nwithMeta(insertImageInputRule, {\n displayName: 'InputRule<insertImageInputRule>',\n group: 'Image',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { Selection } from '@milkdown/prose/state'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the hardbreak node.\n///\n/// Default value:\n/// - `data-is-inline` - Whether the hardbreak is inline.\nexport const hardbreakAttr = $nodeAttr('hardbreak', (node) => {\n return {\n 'data-is-inline': node.attrs.isInline,\n }\n})\n\nwithMeta(hardbreakAttr, {\n displayName: 'Attr<hardbreak>',\n group: 'Hardbreak',\n})\n\n/// Hardbreak node schema.\nexport const hardbreakSchema = $nodeSchema('hardbreak', ctx => ({\n inline: true,\n group: 'inline',\n attrs: {\n isInline: {\n default: false,\n },\n },\n selectable: false,\n parseDOM: [{ tag: 'br' }],\n toDOM: node => ['br', ctx.get(hardbreakAttr.key)(node)],\n parseMarkdown: {\n match: ({ type }) => type === 'break',\n runner: (state, node, type) => {\n state.addNode(type, { isInline: Boolean(node.data?.isInline) })\n },\n },\n leafText: () => '\\n',\n toMarkdown: {\n match: node => node.type.name === 'hardbreak',\n runner: (state, node) => {\n if (node.attrs.isInline)\n state.addNode('text', undefined, '\\n')\n\n else\n state.addNode('break')\n },\n },\n}))\n\nwithMeta(hardbreakSchema.node, {\n displayName: 'NodeSchema<hardbreak>',\n group: 'Hardbreak',\n})\n\nwithMeta(hardbreakSchema.ctx, {\n displayName: 'NodeSchemaCtx<hardbreak>',\n group: 'Hardbreak',\n})\n\n/// Command to insert a hardbreak.\nexport const insertHardbreakCommand = $command('InsertHardbreak', ctx => () => (state, dispatch) => {\n const { selection, tr } = state\n if (selection.empty) {\n // Transform two successive hardbreak into a new line\n const node = selection.$from.node()\n if (node.childCount > 0 && node.lastChild?.type.name === 'hardbreak') {\n dispatch?.(\n tr\n .replaceRangeWith(selection.to - 1, selection.to, state.schema.node('paragraph'))\n .setSelection(Selection.near(tr.doc.resolve(selection.to)))\n .scrollIntoView(),\n )\n return true\n }\n }\n dispatch?.(tr.setMeta('hardbreak', true).replaceSelectionWith(hardbreakSchema.type(ctx).create()).scrollIntoView())\n return true\n})\n\nwithMeta(insertHardbreakCommand, {\n displayName: 'Command<insertHardbreakCommand>',\n group: 'Hardbreak',\n})\n\n/// Keymap for the hardbreak node.\n/// - `Shift-Enter` - Insert a hardbreak.\nexport const hardbreakKeymap = $useKeymap('hardbreakKeymap', {\n InsertHardbreak: {\n shortcuts: 'Shift-Enter',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(insertHardbreakCommand.key)\n },\n },\n})\n\nwithMeta(hardbreakKeymap.ctx, {\n displayName: 'KeymapCtx<hardbreak>',\n group: 'Hardbreak',\n})\n\nwithMeta(hardbreakKeymap.shortcuts, {\n displayName: 'Keymap<hardbreak>',\n group: 'Hardbreak',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { Selection } from '@milkdown/prose/state'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\nimport { paragraphSchema } from './paragraph'\n\n/// HTML attributes for the hr node.\nexport const hrAttr = $nodeAttr('hr')\n\nwithMeta(hrAttr, {\n displayName: 'Attr<hr>',\n group: 'Hr',\n})\n\n/// Hr node schema.\nexport const hrSchema = $nodeSchema('hr', ctx => ({\n group: 'block',\n parseDOM: [{ tag: 'hr' }],\n toDOM: node => ['hr', ctx.get(hrAttr.key)(node)],\n parseMarkdown: {\n match: ({ type }) => type === 'thematicBreak',\n runner: (state, _, type) => {\n state.addNode(type)\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'hr',\n runner: (state) => {\n state.addNode('thematicBreak')\n },\n },\n}))\n\nwithMeta(hrSchema.node, {\n displayName: 'NodeSchema<hr>',\n group: 'Hr',\n})\n\nwithMeta(hrSchema.ctx, {\n displayName: 'NodeSchemaCtx<hr>',\n group: 'Hr',\n})\n\n/// Input rule to insert a hr.\n/// For example, `---` will be converted to a hr.\nexport const insertHrInputRule = $inputRule(ctx => new InputRule(\n /^(?:---|___\\s|\\*\\*\\*\\s)$/, (state, match, start, end) => {\n const { tr } = state\n\n if (match[0])\n tr.replaceWith(start - 1, end, hrSchema.type(ctx).create())\n\n return tr\n },\n))\n\nwithMeta(insertHrInputRule, {\n displayName: 'InputRule<insertHrInputRule>',\n group: 'Hr',\n})\n\n/// Command to insert a hr.\nexport const insertHrCommand = $command('InsertHr', ctx => () => (state, dispatch) => {\n if (!dispatch)\n return true\n\n const paragraph = paragraphSchema.node.type(ctx).create()\n const { tr, selection } = state\n const { from } = selection\n const node = hrSchema.type(ctx).create()\n if (!node)\n return true\n\n const _tr = tr.replaceSelectionWith(node).insert(from, paragraph)\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true)\n if (!sel)\n return true\n\n dispatch(_tr.setSelection(sel).scrollIntoView())\n return true\n})\n\nwithMeta(insertHrCommand, {\n displayName: 'Command<insertHrCommand>',\n group: 'Hr',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for bullet list node.\nexport const bulletListAttr = $nodeAttr('bulletList')\n\nwithMeta(bulletListAttr, {\n displayName: 'Attr<bulletList>',\n group: 'BulletList',\n})\n\n/// Schema for bullet list node.\nexport const bulletListSchema = $nodeSchema('bullet_list', (ctx) => {\n return {\n content: 'listItem+',\n group: 'block',\n attrs: {\n spread: {\n default: false,\n },\n },\n parseDOM: [\n {\n tag: 'ul',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n spread: dom.dataset.spread,\n }\n },\n },\n ],\n toDOM: (node) => {\n return [\n 'ul',\n {\n ...ctx.get(bulletListAttr.key)(node),\n 'data-spread': node.attrs.spread,\n },\n 0,\n ]\n },\n parseMarkdown: {\n match: ({ type, ordered }) => type === 'list' && !ordered,\n runner: (state, node, type) => {\n const spread = node.spread != null ? `${node.spread}` : 'false'\n state.openNode(type, { spread }).next(node.children).closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'bullet_list',\n runner: (state, node) => {\n state\n .openNode('list', undefined, { ordered: false, spread: node.attrs.spread === 'true' })\n .next(node.content)\n .closeNode()\n },\n },\n }\n})\n\nwithMeta(bulletListSchema.node, {\n displayName: 'NodeSchema<bulletList>',\n group: 'BulletList',\n})\n\nwithMeta(bulletListSchema.ctx, {\n displayName: 'NodeSchemaCtx<bulletList>',\n group: 'BulletList',\n})\n\n/// Input rule for wrapping a block in bullet list node.\nexport const wrapInBulletListInputRule = $inputRule(ctx => wrappingInputRule(/^\\s*([-+*])\\s$/, bulletListSchema.type(ctx)))\n\nwithMeta(wrapInBulletListInputRule, {\n displayName: 'InputRule<wrapInBulletListInputRule>',\n group: 'BulletList',\n})\n\n/// Command for creating bullet list node.\nexport const wrapInBulletListCommand = $command('WrapInBulletList', ctx => () => wrapIn(bulletListSchema.type(ctx)))\n\nwithMeta(wrapInBulletListCommand, {\n displayName: 'Command<wrapInBulletListCommand>',\n group: 'BulletList',\n})\n\n/// Keymap for bullet list node.\n/// - `Mod-Alt-8`: Wrap a block in bullet list.\nexport const bulletListKeymap = $useKeymap('bulletListKeymap', {\n WrapInBulletList: {\n shortcuts: 'Mod-Alt-8',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInBulletListCommand.key)\n },\n },\n})\n\nwithMeta(bulletListKeymap.ctx, {\n displayName: 'KeymapCtx<bulletListKeymap>',\n group: 'BulletList',\n})\n\nwithMeta(bulletListKeymap.shortcuts, {\n displayName: 'Keymap<bulletListKeymap>',\n group: 'BulletList',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for ordered list node.\nexport const orderedListAttr = $nodeAttr('orderedList')\n\nwithMeta(orderedListAttr, {\n displayName: 'Attr<orderedList>',\n group: 'OrderedList',\n})\n\n/// Schema for ordered list node.\nexport const orderedListSchema = $nodeSchema('ordered_list', ctx => ({\n content: 'listItem+',\n group: 'block',\n attrs: {\n order: {\n default: 1,\n },\n spread: {\n default: false,\n },\n },\n parseDOM: [\n {\n tag: 'ol',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n spread: dom.dataset.spread,\n order: dom.hasAttribute('start') ? Number(dom.getAttribute('start')) : 1,\n }\n },\n },\n ],\n toDOM: node => [\n 'ol',\n {\n ...ctx.get(orderedListAttr.key)(node),\n ...(node.attrs.order === 1 ? {} : node.attrs.order),\n 'data-spread': node.attrs.spread,\n },\n 0,\n ],\n parseMarkdown: {\n match: ({ type, ordered }) => type === 'list' && !!ordered,\n runner: (state, node, type) => {\n const spread = node.spread != null ? `${node.spread}` : 'true'\n state.openNode(type, { spread }).next(node.children).closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'ordered_list',\n runner: (state, node) => {\n state.openNode('list', undefined, { ordered: true, start: 1, spread: node.attrs.spread === 'true' })\n state.next(node.content)\n state.closeNode()\n },\n },\n}))\n\nwithMeta(orderedListSchema.node, {\n displayName: 'NodeSchema<orderedList>',\n group: 'OrderedList',\n})\n\nwithMeta(orderedListSchema.ctx, {\n displayName: 'NodeSchemaCtx<orderedList>',\n group: 'OrderedList',\n})\n\n/// Input rule for wrapping a block in ordered list node.\nexport const wrapInOrderedListInputRule = $inputRule(ctx => wrappingInputRule(\n /^\\s*(\\d+)\\.\\s$/,\n orderedListSchema.type(ctx),\n match => ({ order: Number(match[1]) }),\n (match, node) => node.childCount + node.attrs.order === Number(match[1]),\n))\n\nwithMeta(wrapInOrderedListInputRule, {\n displayName: 'InputRule<wrapInOrderedListInputRule>',\n group: 'OrderedList',\n})\n\n/// Command for wrapping a block in ordered list node.\nexport const wrapInOrderedListCommand = $command('WrapInOrderedList', ctx => () => wrapIn(orderedListSchema.type(ctx)))\n\nwithMeta(wrapInOrderedListCommand, {\n displayName: 'Command<wrapInOrderedListCommand>',\n group: 'OrderedList',\n})\n\n/// Keymap for ordered list node.\n/// - `Mod-Alt-7`: Wrap a block in ordered list.\nexport const orderedListKeymap = $useKeymap('orderedListKeymap', {\n WrapInOrderedList: {\n shortcuts: 'Mod-Alt-7',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInOrderedListCommand.key)\n },\n },\n})\n\nwithMeta(orderedListKeymap.ctx, {\n displayName: 'KeymapCtx<orderedList>',\n group: 'OrderedList',\n})\n\nwithMeta(orderedListKeymap.shortcuts, {\n displayName: 'Keymap<orderedList>',\n group: 'OrderedList',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { liftListItem, sinkListItem, splitListItem } from '@milkdown/prose/schema-list'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { type Command, TextSelection } from '@milkdown/prose/state'\nimport type { Ctx } from '@milkdown/ctx'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for list item node.\nexport const listItemAttr = $nodeAttr('listItem')\n\nwithMeta(listItemAttr, {\n displayName: 'Attr<listItem>',\n group: 'ListItem',\n})\n\n/// Schema for list item node.\nexport const listItemSchema = $nodeSchema('list_item', ctx => ({\n group: 'listItem',\n content: 'paragraph block*',\n attrs: {\n label: {\n default: '•',\n },\n listType: {\n default: 'bullet',\n },\n spread: {\n default: 'true',\n },\n },\n defining: true,\n parseDOM: [\n {\n tag: 'li',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n label: dom.dataset.label,\n listType: dom.dataset['list-type'],\n spread: dom.dataset.spread,\n }\n },\n },\n ],\n toDOM: node => [\n 'li',\n {\n ...ctx.get(listItemAttr.key)(node),\n 'data-label': node.attrs.label,\n 'data-list-type': node.attrs.listType,\n 'data-spread': node.attrs.spread,\n },\n 0,\n ],\n parseMarkdown: {\n match: ({ type }) => type === 'listItem',\n runner: (state, node, type) => {\n const label = node.label != null ? `${node.label}.` : '•'\n const listType = node.label != null ? 'ordered' : 'bullet'\n const spread = node.spread != null ? `${node.spread}` : 'true'\n state.openNode(type, { label, listType, spread })\n state.next(node.children)\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'list_item',\n runner: (state, node) => {\n state.openNode('listItem', undefined, { spread: node.attrs.spread === 'true' })\n state.next(node.content)\n state.closeNode()\n },\n },\n}))\n\nwithMeta(listItemSchema.node, {\n displayName: 'NodeSchema<listItem>',\n group: 'ListItem',\n})\n\nwithMeta(listItemSchema.ctx, {\n displayName: 'NodeSchemaCtx<listItem>',\n group: 'ListItem',\n})\n\n/// The command to sink list item.\n///\n/// For example:\n/// ```md\n/// * List item 1\n/// * List item 2 <- cursor here\n/// ```\n/// Will get:\n/// ```md\n/// * List item 1\n/// * List item 2\n/// ```\nexport const sinkListItemCommand = $command('SinkListItem', ctx => () => sinkListItem(listItemSchema.type(ctx)))\n\nwithMeta(sinkListItemCommand, {\n displayName: 'Command<sinkListItemCommand>',\n group: 'ListItem',\n})\n\n/// The command to lift list item.\n///\n/// For example:\n/// ```md\n/// * List item 1\n/// * List item 2 <- cursor here\n/// ```\n/// Will get:\n/// ```md\n/// * List item 1\n/// * List item 2\n/// ```\nexport const liftListItemCommand = $command('SplitListItem', ctx => () => liftListItem(listItemSchema.type(ctx)))\n\nwithMeta(liftListItemCommand, {\n displayName: 'Command<liftListItemCommand>',\n group: 'ListItem',\n})\n\n/// The command to split a list item.\n///\n/// For example:\n/// ```md\n/// * List item 1\n/// * List item 2 <- cursor here\n/// ```\n/// Will get:\n/// ```md\n/// * List item 1\n/// * List item 2\n/// * <- cursor here\n/// ```\nexport const splitListItemCommand = $command('SplitListItem', ctx => () => splitListItem(listItemSchema.type(ctx)))\n\nwithMeta(splitListItemCommand, {\n displayName: 'Command<splitListItemCommand>',\n group: 'ListItem',\n})\n\nconst liftFirstListItem = (ctx: Ctx): Command => (state, dispatch, view) => {\n const { selection } = state\n if (!(selection instanceof TextSelection))\n return false\n\n const { empty, $from } = selection\n\n // selection should be empty and at the start of the node\n if (!empty || $from.parentOffset !== 0)\n return false\n\n const parentItem = $from.node(-1)\n // selection should be in list item and list item should be the first child of the list\n if (parentItem.type !== listItemSchema.type(ctx) || parentItem.firstChild !== $from.node())\n return false\n\n const list = $from.node(-2)\n // list should have only one list item\n if (list.childCount > 1)\n return false\n\n return liftListItem(listItemSchema.type(ctx))(state, dispatch, view)\n}\n\n/// The command to remove list item **only if**:\n///\n/// - Selection is at the start of the list item.\n/// - List item is the only child of the list.\n///\n/// Most of the time, you shouldn't use this command directly.\nexport const liftFirstListItemCommand = $command('LiftFirstListItem', ctx => () => liftFirstListItem(ctx))\n\nwithMeta(liftFirstListItemCommand, {\n displayName: 'Command<liftFirstListItemCommand>',\n group: 'ListItem',\n})\n\n/// Keymap for list item node.\n/// - `<Enter>`: Split the current list item.\n/// - `<Tab>/<Mod-]>`: Sink the current list item.\n/// - `<Shift-Tab>/<Mod-[>`: Lift the current list item.\nexport const listItemKeymap = $useKeymap('listItemKeymap', {\n NextListItem: {\n shortcuts: 'Enter',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(splitListItemCommand.key)\n },\n },\n SinkListItem: {\n shortcuts: ['Tab', 'Mod-]'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(sinkListItemCommand.key)\n },\n },\n LiftListItem: {\n shortcuts: ['Shift-Tab', 'Mod-['],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(liftListItemCommand.key)\n },\n },\n LiftFirstListItem: {\n shortcuts: ['Backspace', 'Delete'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(liftFirstListItemCommand.key)\n },\n },\n})\n\nwithMeta(listItemKeymap.ctx, {\n displayName: 'KeymapCtx<listItem>',\n group: 'ListItem',\n})\n\nwithMeta(listItemKeymap.shortcuts, {\n displayName: 'Keymap<listItem>',\n group: 'ListItem',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $node } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// The bottom-level node.\nexport const textSchema = $node('text', () => ({\n group: 'inline',\n parseMarkdown: {\n match: ({ type }) => type === 'text',\n runner: (state, node) => {\n state.addText(node.value as string)\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'text',\n runner: (state, node) => {\n state.addNode('text', undefined, node.text as string)\n },\n },\n}))\n\nwithMeta(textSchema, {\n displayName: 'NodeSchema<text>',\n group: 'Text',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $nodeAttr, $nodeSchema } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\nexport const htmlAttr = $nodeAttr('html')\n\nwithMeta(htmlAttr, {\n displayName: 'Attr<html>',\n group: 'Html',\n})\n\nexport const htmlSchema = $nodeSchema('html', (ctx) => {\n return {\n atom: true,\n group: 'inline',\n inline: true,\n attrs: {\n value: {\n default: '',\n },\n },\n toDOM: (node) => {\n const span = document.createElement('span')\n const attr = {\n ...ctx.get(htmlAttr.key)(node),\n 'data-value': node.attrs.value,\n 'data-type': 'html',\n }\n span.textContent = node.attrs.value\n return ['span', attr, node.attrs.value]\n },\n parseDOM: [{\n tag: 'span[data-type=\"html\"]',\n getAttrs: (dom) => {\n return {\n value: (dom as HTMLElement).dataset.value ?? '',\n }\n },\n }],\n parseMarkdown: {\n match: ({ type }) => Boolean(type === 'html'),\n runner: (state, node, type) => {\n state.addNode(type, { value: node.value as string })\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'html',\n runner: (state, node) => {\n state.addNode('html', undefined, node.attrs.value)\n },\n },\n }\n})\n\nwithMeta(htmlSchema.node, {\n displayName: 'NodeSchema<html>',\n group: 'Html',\n})\n\nwithMeta(htmlSchema.ctx, {\n displayName: 'NodeSchemaCtx<html>',\n group: 'Html',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { emphasisAttr, emphasisSchema, inlineCodeAttr, inlineCodeSchema, linkAttr, linkSchema, strongAttr, strongSchema } from '../mark'\nimport {\n blockquoteAttr,\n blockquoteSchema,\n bulletListAttr,\n bulletListSchema,\n codeBlockAttr,\n codeBlockSchema,\n docSchema,\n hardbreakAttr,\n hardbreakSchema,\n headingAttr,\n headingIdGenerator,\n headingSchema,\n hrAttr,\n hrSchema, htmlAttr,\n htmlSchema,\n imageAttr,\n imageSchema,\n listItemAttr,\n listItemSchema,\n orderedListAttr,\n orderedListSchema,\n paragraphAttr,\n paragraphSchema,\n textSchema,\n} from '../node'\n\n/// @internal\nexport const schema: MilkdownPlugin[] = [\n docSchema,\n\n paragraphAttr,\n paragraphSchema,\n\n headingIdGenerator,\n headingAttr,\n headingSchema,\n\n hardbreakAttr,\n hardbreakSchema,\n\n blockquoteAttr,\n blockquoteSchema,\n\n codeBlockAttr,\n codeBlockSchema,\n\n hrAttr,\n hrSchema,\n\n imageAttr,\n imageSchema,\n\n bulletListAttr,\n bulletListSchema,\n\n orderedListAttr,\n orderedListSchema,\n\n listItemAttr,\n listItemSchema,\n\n emphasisAttr,\n emphasisSchema,\n\n strongAttr,\n strongSchema,\n\n inlineCodeAttr,\n inlineCodeSchema,\n\n linkAttr,\n linkSchema,\n\n htmlAttr,\n htmlSchema,\n\n textSchema,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { createCodeBlockInputRule, insertHrInputRule, wrapInBlockquoteInputRule, wrapInBulletListInputRule, wrapInHeadingInputRule, wrapInOrderedListInputRule } from '../node'\n\n/// @internal\nexport const inputrules: MilkdownPlugin[] = [\n wrapInBlockquoteInputRule,\n wrapInBulletListInputRule,\n wrapInOrderedListInputRule,\n createCodeBlockInputRule,\n insertHrInputRule,\n wrapInHeadingInputRule,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { toggleEmphasisCommand, toggleInlineCodeCommand, toggleLinkCommand, toggleStrongCommand, updateLinkCommand } from '../mark'\nimport {\n createCodeBlockCommand,\n downgradeHeadingCommand,\n insertHardbreakCommand,\n insertHrCommand,\n insertImageCommand,\n liftFirstListItemCommand,\n liftListItemCommand,\n sinkListItemCommand,\n splitListItemCommand,\n turnIntoTextCommand,\n updateImageCommand,\n wrapInBlockquoteCommand,\n wrapInBulletListCommand,\n wrapInHeadingCommand,\n wrapInOrderedListCommand,\n} from '../node'\n\n/// @internal\nexport const commands: MilkdownPlugin[] = [\n turnIntoTextCommand,\n wrapInBlockquoteCommand,\n wrapInHeadingCommand,\n downgradeHeadingCommand,\n createCodeBlockCommand,\n insertHardbreakCommand,\n insertHrCommand,\n\n insertImageCommand,\n updateImageCommand,\n\n wrapInOrderedListCommand,\n wrapInBulletListCommand,\n sinkListItemCommand,\n splitListItemCommand,\n liftListItemCommand,\n liftFirstListItemCommand,\n\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleStrongCommand,\n\n toggleLinkCommand,\n updateLinkCommand,\n]\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { emphasisKeymap, inlineCodeKeymap, strongKeymap } from '../mark'\nimport { blockquoteKeymap, bulletListKeymap, codeBlockKeymap, hardbreakKeymap, headingKeymap, listItemKeymap, orderedListKeymap, paragraphKeymap } from '../node'\n\n/// @internal\nexport const keymap: MilkdownPlugin[] = [\n blockquoteKeymap,\n codeBlockKeymap,\n hardbreakKeymap,\n headingKeymap,\n listItemKeymap,\n orderedListKeymap,\n bulletListKeymap,\n paragraphKeymap,\n\n emphasisKeymap,\n inlineCodeKeymap,\n strongKeymap,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\n\nexport const linkRegexp = /\\[([^\\]]+)]\\([^\\s\\]]+\\)/\n\nexport const keepLinkRegexp = /\\[(?<span>((www|https:\\/\\/|http:\\/\\/)[^\\s\\]]+))]\\((?<url>[^\\s\\]]+)\\)/\n\nexport const punctuationRegexp = (holePlaceholder: string) =>\n new RegExp(`\\\\\\\\(?=[^\\\\w\\\\s${holePlaceholder}\\\\\\\\]|_)`, 'g')\n\nexport const ZERO_WIDTH_SPACE = '\\u200B'\n\nexport const asterisk = `${ZERO_WIDTH_SPACE}*`\nexport const asteriskHolder = `${ZERO_WIDTH_SPACE}*`\nexport const underline = `${ZERO_WIDTH_SPACE}_`\nexport const underlineHolder = `${ZERO_WIDTH_SPACE}⎽`\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { Node } from '@milkdown/prose/model'\n\nimport type { SyncNodePlaceholder } from './config'\nimport {\n asterisk,\n asteriskHolder,\n keepLinkRegexp,\n punctuationRegexp,\n underline,\n underlineHolder,\n} from './regexp'\n\nexport const keepLink = (str: string) => {\n let text = str\n let match = text.match(keepLinkRegexp)\n while (match && match.groups) {\n const { span } = match.groups\n text = text.replace(keepLinkRegexp, span as string)\n\n match = text.match(keepLinkRegexp)\n }\n return text\n}\n\nexport const mergeSlash = (str: string) => {\n return str\n .replaceAll(/\\\\\\\\\\*/g, asterisk)\n .replaceAll(/\\\\\\\\_/g, underline)\n .replaceAll(asterisk, asteriskHolder)\n .replaceAll(underline, underlineHolder)\n}\n\nexport const swap = (text: string, first: number, last: number) => {\n const arr = text.split('')\n const temp = arr[first]\n if (arr[first] && arr[last]) {\n arr[first] = arr[last] as string\n arr[last] = temp as string\n }\n return arr.join('').toString()\n}\n\nexport const replacePunctuation = (holePlaceholder: string) => (text: string) =>\n text.replace(punctuationRegexp(holePlaceholder), '')\n\nexport const calculatePlaceholder = (placeholder: SyncNodePlaceholder) => (text: string) => {\n const index = text.indexOf(placeholder.hole)\n const left = text.charAt(index - 1)\n const right = text.charAt(index + 1)\n const notAWord = /[^\\w]|_/\n\n // cursor on the right\n if (!right)\n return placeholder.punctuation\n\n // cursor on the left\n if (!left)\n return placeholder.char\n\n if (notAWord.test(left) && notAWord.test(right))\n return placeholder.punctuation\n\n return placeholder.char\n}\n\nexport const calcOffset = (node: Node, from: number, placeholder: string) => {\n let offset = from\n let find = false\n node.descendants((n) => {\n if (find)\n return false\n if (!n.textContent.includes(placeholder)) {\n offset += n.nodeSize\n return false\n }\n if (n.isText) {\n const i = n.text?.indexOf(placeholder)\n if (i != null && i >= 0) {\n find = true\n offset += i\n return false\n }\n }\n\n // enter the node\n offset += 1\n return true\n })\n return offset\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/ctx'\nimport type { Node, NodeType } from '@milkdown/prose/model'\nimport type { Transaction } from '@milkdown/prose/state'\nimport { $ctx } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\nimport { swap } from './utils'\n\n/// @internal\nexport type ShouldSyncNode = (context: {\n prevNode: Node\n nextNode: Node\n ctx: Ctx\n tr: Transaction\n text: string\n}) => boolean\n\n/// @internal\nexport interface SyncNodePlaceholder {\n hole: string\n punctuation: string\n char: string\n}\n\n/// @internal\nexport interface InlineSyncConfig {\n placeholderConfig: SyncNodePlaceholder\n shouldSyncNode: ShouldSyncNode\n globalNodes: Array<NodeType | string>\n movePlaceholder: (placeholderToMove: string, text: string) => string\n}\n\n/// @internal\nexport const defaultConfig: InlineSyncConfig = {\n placeholderConfig: {\n hole: '∅',\n punctuation: '⁂',\n char: '∴',\n },\n globalNodes: ['footnote_definition'],\n shouldSyncNode: ({ prevNode, nextNode }) =>\n prevNode.inlineContent\n && nextNode\n // if node type changes, do not sync\n && prevNode.type === nextNode.type\n // if two node fully equal, we don't modify them\n && !prevNode.eq(nextNode),\n movePlaceholder: (placeholderToMove: string, text: string) => {\n const symbolsNeedToMove = ['*', '_']\n\n let index = text.indexOf(placeholderToMove)\n while (symbolsNeedToMove.includes(text[index - 1] || '') && symbolsNeedToMove.includes(text[index + 1] || '')) {\n text = swap(text, index, index + 1)\n index = index + 1\n }\n\n return text\n },\n}\n\n/// A slice that contains the inline sync config.\n/// You can set value to this slice to change the config.\n///\n/// ```typescript\n/// ctx.update(inlineSyncConfigCtx, (prevCfg) => ({\n/// ...prevCfg,\n/// // your config\n/// }));\n/// ```\n///\n/// You can find the default config [here](https://github.com/Milkdown/milkdown/blob/main/packages/preset-commonmark/src/plugin/inline-sync-plugin/config.ts).\nexport const inlineSyncConfig = $ctx<InlineSyncConfig, 'inlineSyncConfig'>(defaultConfig, 'inlineSyncConfig')\n\nwithMeta(inlineSyncConfig, {\n displayName: 'Ctx<inlineSyncConfig>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/ctx'\nimport { parserCtx, serializerCtx } from '@milkdown/core'\nimport type { Node } from '@milkdown/prose/model'\nimport type { EditorState } from '@milkdown/prose/state'\nimport { pipe } from '@milkdown/utils'\n\nimport { inlineSyncConfig } from './config'\nimport { calculatePlaceholder, keepLink, mergeSlash, replacePunctuation } from './utils'\nimport { asterisk, asteriskHolder, underline, underlineHolder } from './regexp'\n\nexport interface InlineSyncContext {\n text: string\n prevNode: Node\n nextNode: Node\n placeholder: string\n}\n\nconst getNodeFromSelection = (state: EditorState) => {\n return state.selection.$from.node()\n}\n\nconst getMarkdown = (ctx: Ctx, state: EditorState, node: Node, globalNode: Node[]) => {\n const serializer = ctx.get(serializerCtx)\n const doc = state.schema.topNodeType.create(undefined, [node, ...globalNode])\n\n return serializer(doc)\n}\n\nconst addPlaceholder = (ctx: Ctx, markdown: string) => {\n const config = ctx.get(inlineSyncConfig.key)\n const holePlaceholder = config.placeholderConfig.hole\n\n const [firstLine = '', ...rest] = markdown.split('\\n\\n')\n\n const movePlaceholder = (text: string) => config.movePlaceholder(holePlaceholder, text)\n\n const handleText = pipe(replacePunctuation(holePlaceholder), movePlaceholder, keepLink, mergeSlash)\n\n let text = handleText(firstLine)\n const placeholder = calculatePlaceholder(config.placeholderConfig)(text)\n\n text = text.replace(holePlaceholder, placeholder)\n\n text = [text, ...rest].join('\\n\\n')\n\n return [text, placeholder] as [markdown: string, placeholder: string]\n}\n\nconst getNewNode = (ctx: Ctx, text: string) => {\n const parser = ctx.get(parserCtx)\n const parsed = parser(text)\n\n if (!parsed)\n return null\n\n return parsed.firstChild\n}\n\nconst collectGlobalNodes = (ctx: Ctx, state: EditorState) => {\n const { globalNodes } = ctx.get(inlineSyncConfig.key)\n const nodes: Node[] = []\n\n state.doc.descendants((node) => {\n if (globalNodes.includes(node.type.name) || globalNodes.includes(node.type)) {\n nodes.push(node)\n return false\n }\n\n return undefined\n })\n\n return nodes\n}\n\nconst removeGlobalFromText = (text: string) => text.split('\\n\\n')[0] || ''\n\nconst onlyHTML = (node: Node) => {\n return node.childCount === 1 && node.child(0).type.name === 'html'\n}\n\nexport const getContextByState = (ctx: Ctx, state: EditorState): InlineSyncContext | null => {\n try {\n const globalNode = collectGlobalNodes(ctx, state)\n const node = getNodeFromSelection(state)\n\n const markdown = getMarkdown(ctx, state, node, globalNode)\n const [text, placeholder] = addPlaceholder(ctx, markdown)\n\n const newNode = getNewNode(ctx, text)\n\n if (!newNode || node.type !== newNode.type || onlyHTML(newNode))\n return null\n\n // @ts-expect-error hijack the node attribute\n newNode.attrs = { ...node.attrs }\n\n newNode.descendants((node) => {\n const marks = node.marks\n const link = marks.find(mark => mark.type.name === 'link')\n if (link && node.text?.includes(placeholder) && link.attrs.href.includes(placeholder)) {\n // @ts-expect-error hijack the mark attribute\n link.attrs.href = link.attrs.href.replace(placeholder, '')\n }\n if (node.text?.includes(asteriskHolder) || node.text?.includes(underlineHolder)) {\n // @ts-expect-error hijack the attribute\n node.text = node.text.replaceAll(asteriskHolder, asterisk).replaceAll(underlineHolder, underline)\n }\n })\n\n return {\n text: removeGlobalFromText(text),\n prevNode: node,\n nextNode: newNode,\n placeholder,\n }\n }\n catch {\n return null\n }\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/ctx'\nimport type { Attrs } from '@milkdown/prose/model'\nimport type { EditorState, PluginKey, Transaction } from '@milkdown/prose/state'\nimport { TextSelection } from '@milkdown/prose/state'\n\nimport { inlineSyncConfig } from './config'\nimport { getContextByState } from './context'\nimport { calcOffset } from './utils'\nimport { linkRegexp } from './regexp'\n\nexport const runReplacer = (\n ctx: Ctx,\n key: PluginKey,\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n attrs: Attrs,\n) => {\n const { placeholderConfig } = ctx.get(inlineSyncConfig.key)\n const holePlaceholder = placeholderConfig.hole\n // insert a placeholder to restore the selection\n let tr = state.tr.setMeta(key, true).insertText(holePlaceholder, state.selection.from)\n\n const nextState = state.apply(tr)\n const context = getContextByState(ctx, nextState)\n\n if (!context)\n return\n\n const lastUserInput = context.text.slice(0, context.text.indexOf(context.placeholder))\n\n const { $from } = nextState.selection\n const from = $from.before()\n const to = $from.after()\n\n const offset = calcOffset(context.nextNode, from, context.placeholder)\n\n tr = tr\n .replaceWith(from, to, context.nextNode)\n .setNodeMarkup(from, undefined, attrs)\n // delete the placeholder\n .delete(offset + 1, offset + 2)\n\n // restore the selection\n tr = tr.setSelection(TextSelection.near(tr.doc.resolve(offset + 1)))\n\n const needsRestoreMark = linkRegexp.test(lastUserInput) || ['*', '_', '~'].includes(lastUserInput.at(-1) || '')\n if (needsRestoreMark && tr.selection instanceof TextSelection) {\n const marks = tr.selection.$cursor?.marks() ?? []\n marks.forEach((mark) => {\n tr = tr.removeStoredMark(mark.type)\n })\n }\n\n dispatch(tr)\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/ctx'\nimport { editorViewCtx } from '@milkdown/core'\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\nimport { inlineSyncConfig } from './config'\nimport { getContextByState } from './context'\nimport { runReplacer } from './replacer'\n\n/// This plugin is used to sync the inline mark.\n/// It will create and remove marks automatically according to the user input.\n///\n/// When users type something, the plugin will transform the line (for better performance) to real markdown AST by serializer\n/// and render the AST to dom by parser, thus the input texts can be displayed correctly.\nexport const inlineSyncPlugin = $prose((ctx: Ctx) => {\n let requestId: number | null = null\n const inlineSyncPluginKey = new PluginKey('MILKDOWN_INLINE_SYNC')\n\n return new Plugin<null>({\n key: inlineSyncPluginKey,\n state: {\n init: () => {\n return null\n },\n apply: (tr, _value, _oldState, newState) => {\n const view = ctx.get(editorViewCtx)\n if (!view.hasFocus?.() || !view.editable)\n return null\n\n if (!tr.docChanged)\n return null\n\n const meta = tr.getMeta(inlineSyncPluginKey)\n if (meta)\n return null\n\n const context = getContextByState(ctx, newState)\n if (!context)\n return null\n\n if (requestId) {\n cancelAnimationFrame(requestId)\n requestId = null\n }\n\n const { prevNode, nextNode, text } = context\n\n const { shouldSyncNode } = ctx.get(inlineSyncConfig.key)\n\n if (!shouldSyncNode({ prevNode, nextNode, ctx, tr, text }))\n return null\n\n requestId = requestAnimationFrame(() => {\n requestId = null\n\n const { dispatch, state } = ctx.get(editorViewCtx)\n\n runReplacer(ctx, inlineSyncPluginKey, state, dispatch, prevNode.attrs)\n })\n\n return null\n },\n },\n })\n})\n\nwithMeta(inlineSyncPlugin, {\n displayName: 'Prose<inlineSyncPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport { visit } from 'unist-util-visit'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to add order in list for remark AST.\nexport const remarkAddOrderInListPlugin = $remark('remarkAddOrderInList', () => () => (tree) => {\n visit(tree, 'list', (node) => {\n if (node.ordered) {\n const start = node.start ?? 1\n node.children.forEach((child, index) => {\n (child as unknown as Record<string, number>).label = index + start\n })\n }\n })\n})\n\nwithMeta(remarkAddOrderInListPlugin.plugin, {\n displayName: 'Remark<remarkAddOrderInListPlugin>',\n group: 'Remark',\n})\n\nwithMeta(remarkAddOrderInListPlugin.options, {\n displayName: 'RemarkConfig<remarkAddOrderInListPlugin>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport type { Node } from '@milkdown/transformer'\nimport { visit } from 'unist-util-visit'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to add inline line break for remark AST.\n/// The inline line break should be treated as a `space`.\n/// And the normal line break should be treated as a `LF`.\nexport const remarkLineBreak = $remark('remarkLineBreak', () => () => (tree: Node) => {\n const find = /[\\t ]*(?:\\r?\\n|\\r)/g\n visit(tree, 'text', (node: Node & { value: string }, index: number, parent: Node & { children: Node[] }) => {\n if (!node.value || typeof node.value !== 'string')\n return\n\n const result = []\n let start = 0\n\n find.lastIndex = 0\n\n let match = find.exec(node.value)\n\n while (match) {\n const position = match.index\n\n if (start !== position)\n result.push({ type: 'text', value: node.value.slice(start, position) })\n\n result.push({ type: 'break', data: { isInline: true } })\n start = position + match[0].length\n match = find.exec(node.value)\n }\n\n const hasResultAndIndex = result.length > 0 && parent && typeof index === 'number'\n\n if (!hasResultAndIndex)\n return\n\n if (start < node.value.length)\n result.push({ type: 'text', value: node.value.slice(start) })\n\n parent.children.splice(index, 1, ...result)\n return index + result.length\n })\n})\n\nwithMeta(remarkLineBreak.plugin, {\n displayName: 'Remark<remarkLineBreak>',\n group: 'Remark',\n})\n\nwithMeta(remarkLineBreak.options, {\n displayName: 'RemarkConfig<remarkLineBreak>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport remarkInlineLinks from 'remark-inline-links'\nimport { withMeta } from '../__internal__'\n\n/// This plugin wraps [remark-inline-links](https://github.com/remarkjs/remark-inline-links).\nexport const remarkInlineLinkPlugin = $remark('remarkInlineLink', () => remarkInlineLinks)\n\nwithMeta(remarkInlineLinkPlugin.plugin, {\n displayName: 'Remark<remarkInlineLinkPlugin>',\n group: 'Remark',\n})\n\nwithMeta(remarkInlineLinkPlugin.options, {\n displayName: 'RemarkConfig<remarkInlineLinkPlugin>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport type { Node } from '@milkdown/transformer'\nimport { withMeta } from '../__internal__'\n\nconst isParent = (node: Node): node is Node & { children: Node[] } => !!(node as Node & { children: Node[] }).children\nconst isHTML = (node: Node): node is Node & { children: Node[]; value: unknown } => node.type === 'html'\n\nfunction flatMapWithDepth(ast: Node, fn: (node: Node, index: number, parent: Node | null) => Node[]) {\n return transform(ast, 0, null)[0]\n\n function transform(node: Node, index: number, parent: Node | null) {\n if (isParent(node)) {\n const out = []\n for (let i = 0, n = node.children.length; i < n; i++) {\n const nthChild = node.children[i]\n if (nthChild) {\n const xs = transform(nthChild, i, node)\n if (xs) {\n for (let j = 0, m = xs.length; j < m; j++) {\n const item = xs[j]\n if (item)\n out.push(item)\n }\n }\n }\n }\n node.children = out\n }\n\n return fn(node, index, parent)\n }\n}\n\n/// @internal\n/// This plugin should be deprecated after we support HTML.\nexport const remarkHtmlTransformer = $remark('remarkHTMLTransformer', () => () => (tree: Node) => {\n flatMapWithDepth(tree, (node, _index, parent) => {\n if (!isHTML(node))\n return [node]\n\n if (parent?.type === 'root') {\n node.children = [{ ...node }]\n delete node.value;\n (node as { type: string }).type = 'paragraph'\n }\n\n return [node]\n })\n})\n\nwithMeta(remarkHtmlTransformer.plugin, {\n displayName: 'Remark<remarkHtmlTransformer>',\n group: 'Remark',\n})\n\nwithMeta(remarkHtmlTransformer.options, {\n displayName: 'RemarkConfig<remarkHtmlTransformer>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport type { Node } from '@milkdown/transformer'\nimport { visit } from 'unist-util-visit'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to keep the marker (`_` and `*`) of emphasis and strong nodes.\nexport const remarkMarker = $remark('remarkMarker', () => () => (tree, file) => {\n const getMarker = (node: Node) => {\n return (file.value as string).charAt(node.position!.start.offset!)\n }\n visit(tree, (node: Node) => ['strong', 'emphasis'].includes(node.type), (node: Node) => {\n (node as Node & { marker: string }).marker = getMarker(node)\n })\n})\n\nwithMeta(remarkMarker.plugin, {\n displayName: 'Remark<remarkMarker>',\n group: 'Remark',\n})\n\nwithMeta(remarkMarker.options, {\n displayName: 'RemarkConfig<remarkMarker>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { Decoration, DecorationSet } from '@milkdown/prose/view'\nimport { $prose } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is to solve the [chrome 98 bug](https://discuss.prosemirror.net/t/cursor-jumps-at-the-end-of-line-when-it-betweens-two-inline-nodes/4641).\nexport const inlineNodesCursorPlugin = $prose(() => {\n let lock = false\n const inlineNodesCursorPluginKey = new PluginKey('MILKDOWN_INLINE_NODES_CURSOR')\n const inlineNodesCursorPlugin: Plugin = new Plugin({\n key: inlineNodesCursorPluginKey,\n state: {\n init() {\n return false\n },\n apply(tr) {\n if (!tr.selection.empty)\n return false\n\n const pos = tr.selection.$from\n const left = pos.nodeBefore\n const right = pos.nodeAfter\n if (left && right && left.isInline && !left.isText && right.isInline && !right.isText)\n return true\n\n return false\n },\n },\n props: {\n handleDOMEvents: {\n compositionend: (view, e) => {\n if (lock) {\n lock = false\n requestAnimationFrame(() => {\n const active = inlineNodesCursorPlugin.getState(view.state)\n if (active) {\n const from = view.state.selection.from\n e.preventDefault()\n view.dispatch(view.state.tr.insertText(e.data || '', from))\n }\n })\n\n return true\n }\n return false\n },\n compositionstart: (view) => {\n const active = inlineNodesCursorPlugin.getState(view.state)\n if (active)\n lock = true\n\n return false\n },\n beforeinput: (view, e) => {\n const active = inlineNodesCursorPlugin.getState(view.state)\n if (active && e instanceof InputEvent && e.data && !lock) {\n const from = view.state.selection.from\n e.preventDefault()\n view.dispatch(view.state.tr.insertText(e.data || '', from))\n\n return true\n }\n\n return false\n },\n },\n decorations(state) {\n const active = inlineNodesCursorPlugin.getState(state)\n if (active) {\n const pos = state.selection.$from\n const position = pos.pos\n const left = document.createElement('span')\n const leftDec = Decoration.widget(position, left, {\n side: -1,\n })\n const right = document.createElement('span')\n const rightDec = Decoration.widget(position, right)\n setTimeout(() => {\n left.contentEditable = 'true'\n right.contentEditable = 'true'\n })\n return DecorationSet.create(state.doc, [leftDec, rightDec])\n }\n return DecorationSet.empty\n },\n },\n })\n\n return inlineNodesCursorPlugin\n})\n\nwithMeta(inlineNodesCursorPlugin, {\n displayName: 'Prose<inlineNodesCursorPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { AddMarkStep, ReplaceStep } from '@milkdown/prose/transform'\nimport { $prose } from '@milkdown/utils'\nimport { hardbreakSchema } from '../node'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to clear the marks around the hardbreak node.\nexport const hardbreakClearMarkPlugin = $prose((ctx) => {\n return new Plugin({\n key: new PluginKey('MILKDOWN_HARDBREAK_MARKS'),\n appendTransaction: (trs, _oldState, newState) => {\n if (!trs.length)\n return\n\n const [tr] = trs\n if (!tr)\n return\n\n const [step] = tr.steps\n\n const isInsertHr = tr.getMeta('hardbreak')\n if (isInsertHr) {\n if (!(step instanceof ReplaceStep))\n return\n\n const { from } = step as unknown as { from: number }\n return newState.tr.setNodeMarkup(from, hardbreakSchema.type(ctx), undefined, [])\n }\n\n const isAddMarkStep = step instanceof AddMarkStep\n if (isAddMarkStep) {\n let _tr = newState.tr\n const { from, to } = step as unknown as { from: number; to: number }\n newState.doc.nodesBetween(from, to, (node, pos) => {\n if (node.type === hardbreakSchema.type(ctx))\n _tr = _tr.setNodeMarkup(pos, hardbreakSchema.type(ctx), undefined, [])\n })\n\n return _tr\n }\n\n return undefined\n },\n })\n})\n\nwithMeta(hardbreakClearMarkPlugin, {\n displayName: 'Prose<hardbreakClearMarkPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $ctx, $prose } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// This slice contains the nodes that within which the hardbreak will be ignored.\nexport const hardbreakFilterNodes = $ctx(['table', 'code_block'], 'hardbreakFilterNodes')\n\nwithMeta(hardbreakFilterNodes, {\n displayName: 'Ctx<hardbreakFilterNodes>',\n group: 'Prose',\n})\n\n/// This plugin is used to filter the hardbreak node.\n/// If the hardbreak is going to be inserted within a node that is in the `hardbreakFilterNodes`, ignore it.\nexport const hardbreakFilterPlugin = $prose((ctx) => {\n const notIn = ctx.get(hardbreakFilterNodes.key)\n return new Plugin({\n key: new PluginKey('MILKDOWN_HARDBREAK_FILTER'),\n filterTransaction: (tr, state) => {\n const isInsertHr = tr.getMeta('hardbreak')\n const [step] = tr.steps\n if (isInsertHr && step) {\n const { from } = step as unknown as { from: number }\n const $from = state.doc.resolve(from)\n let curDepth = $from.depth\n let canApply = true\n while (curDepth > 0) {\n if (notIn.includes($from.node(curDepth).type.name))\n canApply = false\n\n curDepth--\n }\n return canApply\n }\n return true\n },\n })\n})\n\nwithMeta(hardbreakFilterPlugin, {\n displayName: 'Prose<hardbreakFilterPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport type { EditorView } from '@milkdown/prose/view'\nimport { $prose } from '@milkdown/utils'\nimport { headingIdGenerator, headingSchema } from '../node/heading'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to sync the heading id when the heading content changes.\n/// It will use the `headingIdGenerator` to generate the id.\nexport const syncHeadingIdPlugin = $prose((ctx) => {\n const headingIdPluginKey = new PluginKey('MILKDOWN_HEADING_ID')\n\n const updateId = (view: EditorView) => {\n if (view.composing || !view.editable)\n return\n\n const getId = ctx.get(headingIdGenerator.key)\n const tr = view.state.tr.setMeta('addToHistory', false)\n\n let found = false\n\n view.state.doc.descendants((node, pos) => {\n if (node.type === headingSchema.type(ctx)) {\n if (node.textContent.trim().length === 0)\n return\n\n const attrs = node.attrs\n const id = getId(node)\n\n if (attrs.id !== id) {\n found = true\n tr.setMeta(headingIdPluginKey, true).setNodeMarkup(pos, undefined, {\n ...attrs,\n id,\n })\n }\n }\n })\n\n if (found)\n view.dispatch(tr)\n }\n\n return new Plugin({\n key: headingIdPluginKey,\n view: (view) => {\n updateId(view)\n\n return {\n update: (view) => {\n updateId(view)\n },\n }\n },\n })\n})\n\nwithMeta(syncHeadingIdPlugin, {\n displayName: 'Prose<syncHeadingIdPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $prose } from '@milkdown/utils'\nimport type { EditorView } from '@milkdown/prose/view'\nimport { listItemSchema } from '../node/list-item'\n\nimport { orderedListSchema } from '../node/ordered-list'\nimport { bulletListSchema } from '../node'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to keep the label of list item up to date in ordered list.\nexport const syncListOrderPlugin = $prose((ctx) => {\n const syncOrderLabel = (view: EditorView) => {\n if (view.composing || !view.editable)\n return\n\n const orderedListType = orderedListSchema.type(ctx)\n const bulletListType = bulletListSchema.type(ctx)\n const listItemType = listItemSchema.type(ctx)\n const state = view.state\n const handleNodeItem = (attrs: Record<string, any>, index: number): boolean => {\n let changed = false\n const expectedLabel = `${index + 1}.`\n if (attrs.label !== expectedLabel) {\n attrs.label = expectedLabel\n changed = true\n }\n\n return changed\n }\n\n let tr = state.tr\n let needDispatch = false\n state.doc.descendants((node, pos, parent, index) => {\n if (node.type === bulletListType) {\n const base = node.maybeChild(0)\n if (base?.type === listItemType && base.attrs.listType === 'ordered') {\n needDispatch = true\n tr.setNodeMarkup(pos, orderedListType, { spread: 'true' })\n\n node.descendants((child, pos, _parent, index) => {\n if (child.type === listItemType) {\n const attrs = { ...child.attrs }\n const changed = handleNodeItem(attrs, index)\n if (changed)\n tr = tr.setNodeMarkup(pos, undefined, attrs)\n }\n return false\n })\n }\n }\n else if (node.type === listItemType && parent?.type === orderedListType) {\n const attrs = { ...node.attrs }\n let changed = false\n if (attrs.listType !== 'ordered') {\n attrs.listType = 'ordered'\n changed = true\n }\n\n const base = parent?.maybeChild(0)\n if (base)\n changed = handleNodeItem(attrs, index)\n\n if (changed) {\n tr = tr.setNodeMarkup(pos, undefined, attrs)\n needDispatch = true\n }\n }\n })\n\n if (needDispatch)\n view.dispatch(tr.setMeta('addToHistory', false))\n }\n return new Plugin({\n key: new PluginKey('MILKDOWN_KEEP_LIST_ORDER'),\n view: (view) => {\n syncOrderLabel(view)\n return {\n update: (view) => {\n syncOrderLabel(view)\n },\n }\n },\n })\n})\n\nwithMeta(syncListOrderPlugin, {\n displayName: 'Prose<syncListOrderPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport {\n hardbreakClearMarkPlugin,\n hardbreakFilterNodes,\n hardbreakFilterPlugin,\n inlineNodesCursorPlugin,\n inlineSyncConfig,\n inlineSyncPlugin,\n remarkAddOrderInListPlugin,\n remarkHtmlTransformer,\n remarkInlineLinkPlugin,\n remarkLineBreak, remarkMarker,\n syncHeadingIdPlugin,\n syncListOrderPlugin,\n} from '../plugin'\n\n/// @internal\nexport const plugins: MilkdownPlugin[] = [\n inlineSyncConfig,\n inlineSyncPlugin,\n\n hardbreakClearMarkPlugin,\n hardbreakFilterNodes,\n hardbreakFilterPlugin,\n\n inlineNodesCursorPlugin,\n\n remarkAddOrderInListPlugin,\n remarkInlineLinkPlugin,\n remarkLineBreak,\n remarkHtmlTransformer,\n remarkMarker,\n\n syncHeadingIdPlugin,\n syncListOrderPlugin,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { commands, inputrules, keymap, plugins, schema } from './composed'\n\nexport * from './node'\nexport * from './mark'\nexport * from './plugin'\nexport * from './composed'\n\n/// The commonmark preset, includes all the plugins.\nexport const commonmark = [schema, inputrules, commands, keymap, plugins].flat()\n"],"names":["serializeText","state","node","_a","contentArr","n","_","i","Fragment","withMeta","plugin","meta","emphasisAttr","$markAttr","emphasisSchema","$markSchema","ctx","remarkStringifyOptionsCtx","value","mark","markType","toggleEmphasisCommand","$command","toggleMark","emphasisKeymap","$useKeymap","commands","commandsCtx","strongAttr","strongSchema","toggleStrongCommand","strongKeymap","inlineCodeAttr","inlineCodeSchema","toggleInlineCodeCommand","dispatch","selection","tr","from","to","x","name","t","inlineCodeKeymap","linkAttr","linkSchema","dom","expectDomTypeError","url","title","toggleLinkCommand","payload","updateLinkCommand","pos","p","type","start","end","linkMark","TextSelection","docSchema","$node","paragraphAttr","$nodeAttr","paragraphSchema","$nodeSchema","turnIntoTextCommand","setBlockType","paragraphKeymap","headingIndex","defaultHeadingIdGenerator","slugify","headingIdGenerator","$ctx","headingAttr","headingSchema","getId","depth","wrapInHeadingInputRule","$inputRule","textblockTypeInputRule","match","_b","view","editorViewCtx","$from","level","wrapInHeadingCommand","downgradeHeadingCommand","headingKeymap","blockquoteAttr","blockquoteSchema","wrapInBlockquoteInputRule","wrappingInputRule","wrapInBlockquoteCommand","wrapIn","blockquoteKeymap","codeBlockAttr","codeBlockSchema","attr","language","createCodeBlockInputRule","createCodeBlockCommand","updateCodeBlockLanguageCommand","codeBlockKeymap","imageAttr","imageSchema","alt","insertImageCommand","src","updateImageCommand","nodeWithPos","findSelectedNodeOfType","newAttrs","insertImageInputRule","InputRule","matched","hardbreakAttr","hardbreakSchema","insertHardbreakCommand","Selection","hardbreakKeymap","hrAttr","hrSchema","insertHrInputRule","insertHrCommand","paragraph","_tr","sel","bulletListAttr","bulletListSchema","ordered","spread","wrapInBulletListInputRule","wrapInBulletListCommand","bulletListKeymap","orderedListAttr","orderedListSchema","wrapInOrderedListInputRule","wrapInOrderedListCommand","orderedListKeymap","listItemAttr","listItemSchema","label","listType","sinkListItemCommand","sinkListItem","liftListItemCommand","liftListItem","splitListItemCommand","splitListItem","liftFirstListItem","empty","parentItem","liftFirstListItemCommand","listItemKeymap","textSchema","htmlAttr","htmlSchema","span","schema","inputrules","keymap","linkRegexp","keepLinkRegexp","punctuationRegexp","holePlaceholder","ZERO_WIDTH_SPACE","asterisk","asteriskHolder","underline","underlineHolder","keepLink","str","text","mergeSlash","swap","first","last","arr","temp","replacePunctuation","calculatePlaceholder","placeholder","index","left","right","notAWord","calcOffset","offset","find","defaultConfig","prevNode","nextNode","placeholderToMove","symbolsNeedToMove","inlineSyncConfig","getNodeFromSelection","getMarkdown","globalNode","serializer","serializerCtx","doc","addPlaceholder","markdown","config","firstLine","rest","movePlaceholder","pipe","getNewNode","parsed","parserCtx","collectGlobalNodes","globalNodes","nodes","removeGlobalFromText","onlyHTML","getContextByState","newNode","link","runReplacer","key","attrs","placeholderConfig","nextState","context","lastUserInput","inlineSyncPlugin","$prose","requestId","inlineSyncPluginKey","PluginKey","Plugin","_value","_oldState","newState","shouldSyncNode","remarkAddOrderInListPlugin","$remark","tree","visit","child","remarkLineBreak","parent","result","position","remarkInlineLinkPlugin","remarkInlineLinks","isParent","isHTML","flatMapWithDepth","ast","fn","transform","out","nthChild","xs","j","m","item","remarkHtmlTransformer","_index","remarkMarker","file","getMarker","inlineNodesCursorPlugin","lock","inlineNodesCursorPluginKey","e","leftDec","Decoration","rightDec","DecorationSet","hardbreakClearMarkPlugin","trs","step","ReplaceStep","AddMarkStep","hardbreakFilterNodes","hardbreakFilterPlugin","notIn","isInsertHr","curDepth","canApply","syncHeadingIdPlugin","headingIdPluginKey","updateId","found","id","syncListOrderPlugin","syncOrderLabel","orderedListType","bulletListType","listItemType","handleNodeItem","changed","expectedLabel","needDispatch","base","_parent","plugins","commonmark"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/__internal__/serialize-text.ts","../src/__internal__/with-meta.ts","../src/mark/emphasis.ts","../src/mark/strong.ts","../src/mark/inline-code.ts","../src/mark/link.ts","../src/node/doc.ts","../src/node/paragraph.ts","../src/node/heading.ts","../src/node/blockquote.ts","../src/node/code-block.ts","../src/node/image.ts","../src/node/hardbreak.ts","../src/node/hr.ts","../src/node/bullet-list.ts","../src/node/ordered-list.ts","../src/node/list-item.ts","../src/node/text.ts","../src/node/html.ts","../src/composed/schema.ts","../src/composed/inputrules.ts","../src/composed/commands.ts","../src/composed/keymap.ts","../src/plugin/inline-sync-plugin/regexp.ts","../src/plugin/inline-sync-plugin/utils.ts","../src/plugin/inline-sync-plugin/config.ts","../src/plugin/inline-sync-plugin/context.ts","../src/plugin/inline-sync-plugin/replacer.ts","../src/plugin/inline-sync-plugin/inline-sync-plugin.ts","../src/plugin/remark-add-order-in-list-plugin.ts","../src/plugin/remark-line-break.ts","../src/plugin/remark-inline-link-plugin.ts","../src/plugin/remark-html-transformer.ts","../src/plugin/remark-marker-plugin.ts","../src/plugin/inline-nodes-cursor-plugin.ts","../src/plugin/hardbreak-clear-mark-plugin.ts","../src/plugin/hardbreak-filter-plugin.ts","../src/plugin/sync-heading-id-plugin.ts","../src/plugin/sync-list-order-plugin.ts","../src/composed/plugins.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport type { SerializerState } from '@milkdown/transformer'\nimport type { Node } from '@milkdown/prose/model'\nimport { Fragment } from '@milkdown/prose/model'\n\nexport const serializeText = (state: SerializerState, node: Node) => {\n const lastIsHardBreak\n = node.childCount >= 1 && node.lastChild?.type.name === 'hardbreak'\n if (!lastIsHardBreak) {\n state.next(node.content)\n return\n }\n\n const contentArr: Node[] = []\n node.content.forEach((n, _, i) => {\n if (i === node.childCount - 1)\n return\n\n contentArr.push(n)\n })\n state.next(Fragment.fromArray(contentArr))\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Meta, MilkdownPlugin } from '@milkdown/ctx'\n\nexport const withMeta = <T extends MilkdownPlugin>(\n plugin: T,\n meta: Partial<Meta> & Pick<Meta, 'displayName'>,\n): T => {\n Object.assign(plugin, {\n meta: {\n package: '@milkdown/preset-commonmark',\n ...meta,\n },\n })\n\n return plugin\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, remarkStringifyOptionsCtx } from '@milkdown/core'\nimport { $command, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the emphasis mark.\nexport const emphasisAttr = $markAttr('emphasis')\n\nwithMeta(emphasisAttr, {\n displayName: 'Attr<emphasis>',\n group: 'Emphasis',\n})\n\n/// Emphasis mark schema.\nexport const emphasisSchema = $markSchema('emphasis', ctx => ({\n attrs: {\n marker: {\n default: ctx.get(remarkStringifyOptionsCtx).emphasis || '*',\n },\n },\n parseDOM: [\n { tag: 'i' },\n { tag: 'em' },\n { style: 'font-style', getAttrs: value => (value === 'italic') as false },\n ],\n toDOM: mark => ['em', ctx.get(emphasisAttr.key)(mark)],\n parseMarkdown: {\n match: node => node.type === 'emphasis',\n runner: (state, node, markType) => {\n state.openMark(markType, { marker: node.marker })\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === 'emphasis',\n runner: (state, mark) => {\n state.withMark(mark, 'emphasis', undefined, {\n marker: mark.attrs.marker,\n })\n },\n },\n}))\n\nwithMeta(emphasisSchema.mark, {\n displayName: 'MarkSchema<emphasis>',\n group: 'Emphasis',\n})\n\nwithMeta(emphasisSchema.ctx, {\n displayName: 'MarkSchemaCtx<emphasis>',\n group: 'Emphasis',\n})\n\n/// A command to toggle the emphasis mark.\nexport const toggleEmphasisCommand = $command('ToggleEmphasis', ctx => () => {\n return toggleMark(emphasisSchema.type(ctx))\n})\n\nwithMeta(toggleEmphasisCommand, {\n displayName: 'Command<toggleEmphasisCommand>',\n group: 'Emphasis',\n})\n\n/// Keymap for the emphasis mark.\n/// - `Mod-i` - Toggle the emphasis mark.\nexport const emphasisKeymap = $useKeymap('emphasisKeymap', {\n ToggleEmphasis: {\n shortcuts: 'Mod-i',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(toggleEmphasisCommand.key)\n },\n },\n})\n\nwithMeta(emphasisKeymap.ctx, {\n displayName: 'KeymapCtx<emphasis>',\n group: 'Emphasis',\n})\n\nwithMeta(emphasisKeymap.shortcuts, {\n displayName: 'Keymap<emphasis>',\n group: 'Emphasis',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, remarkStringifyOptionsCtx } from '@milkdown/core'\nimport { $command, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the strong mark.\nexport const strongAttr = $markAttr('strong')\n\nwithMeta(strongAttr, {\n displayName: 'Attr<strong>',\n group: 'Strong',\n})\n\n/// Strong mark schema.\nexport const strongSchema = $markSchema('strong', ctx => ({\n attrs: {\n marker: {\n default: ctx.get(remarkStringifyOptionsCtx).strong || '*',\n },\n },\n parseDOM: [\n { tag: 'b' },\n { tag: 'strong' },\n { style: 'font-style', getAttrs: value => (value === 'bold') as false },\n ],\n toDOM: mark => ['strong', ctx.get(strongAttr.key)(mark)],\n parseMarkdown: {\n match: node => node.type === 'strong',\n runner: (state, node, markType) => {\n state.openMark(markType, { marker: node.marker })\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === 'strong',\n runner: (state, mark) => {\n state.withMark(mark, 'strong', undefined, {\n marker: mark.attrs.marker,\n })\n },\n },\n}))\n\nwithMeta(strongSchema.mark, {\n displayName: 'MarkSchema<strong>',\n group: 'Strong',\n})\n\nwithMeta(strongSchema.ctx, {\n displayName: 'MarkSchemaCtx<strong>',\n group: 'Strong',\n})\n\n/// A command to toggle the strong mark.\nexport const toggleStrongCommand = $command('ToggleStrong', ctx => () => {\n return toggleMark(strongSchema.type(ctx))\n})\n\nwithMeta(toggleStrongCommand, {\n displayName: 'Command<toggleStrongCommand>',\n group: 'Strong',\n})\n\n/// Keymap for the strong mark.\n/// - `Mod-b` - Toggle the strong mark.\nexport const strongKeymap = $useKeymap('strongKeymap', {\n ToggleBold: {\n shortcuts: ['Mod-b'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(toggleStrongCommand.key)\n },\n },\n})\n\nwithMeta(strongKeymap.ctx, {\n displayName: 'KeymapCtx<strong>',\n group: 'Strong',\n})\n\nwithMeta(strongKeymap.shortcuts, {\n displayName: 'Keymap<strong>',\n group: 'Strong',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport type { MarkType } from '@milkdown/prose/model'\nimport { $command, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the inlineCode mark.\nexport const inlineCodeAttr = $markAttr('inlineCode')\n\nwithMeta(inlineCodeAttr, {\n displayName: 'Attr<inlineCode>',\n group: 'InlineCode',\n})\n\n/// InlineCode mark schema.\nexport const inlineCodeSchema = $markSchema('inlineCode', ctx => ({\n priority: 100,\n code: true,\n inclusive: false,\n parseDOM: [{ tag: 'code' }],\n toDOM: mark => ['code', ctx.get(inlineCodeAttr.key)(mark)],\n parseMarkdown: {\n match: node => node.type === 'inlineCode',\n runner: (state, node, markType) => {\n state.openMark(markType)\n state.addText(node.value as string)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === 'inlineCode',\n runner: (state, mark, node) => {\n state.withMark(mark, 'inlineCode', node.text || '')\n },\n },\n}))\n\nwithMeta(inlineCodeSchema.mark, {\n displayName: 'MarkSchema<inlineCode>',\n group: 'InlineCode',\n})\n\nwithMeta(inlineCodeSchema.ctx, {\n displayName: 'MarkSchemaCtx<inlineCode>',\n group: 'InlineCode',\n})\n\n/// A command to toggle the inlineCode mark.\nexport const toggleInlineCodeCommand = $command('ToggleInlineCode', ctx => () => (state, dispatch) => {\n const { selection, tr } = state\n if (selection.empty)\n return false\n const { from, to } = selection\n\n const has = state.doc.rangeHasMark(from, to, inlineCodeSchema.type(ctx))\n // remove exists inlineCode mark if have\n if (has) {\n dispatch?.(tr.removeMark(from, to, inlineCodeSchema.type(ctx)))\n return true\n }\n\n const restMarksName = Object.keys(state.schema.marks).filter(x => x !== inlineCodeSchema.type.name)\n\n // remove other marks\n restMarksName\n .map(name => state.schema.marks[name] as MarkType)\n .forEach((t) => {\n tr.removeMark(from, to, t)\n })\n\n // add inlineCode mark\n dispatch?.(tr.addMark(from, to, inlineCodeSchema.type(ctx).create()))\n return true\n})\n\nwithMeta(toggleInlineCodeCommand, {\n displayName: 'Command<toggleInlineCodeCommand>',\n group: 'InlineCode',\n})\n\n/// Keymap for the inlineCode mark.\n/// - `Mod-e` - Toggle the inlineCode mark.\nexport const inlineCodeKeymap = $useKeymap('inlineCodeKeymap', {\n ToggleInlineCode: {\n shortcuts: 'Mod-e',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(toggleInlineCodeCommand.key)\n },\n },\n})\n\nwithMeta(inlineCodeKeymap.ctx, {\n displayName: 'KeymapCtx<inlineCode>',\n group: 'InlineCode',\n})\n\nwithMeta(inlineCodeKeymap.shortcuts, {\n displayName: 'Keymap<inlineCode>',\n group: 'InlineCode',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport type { Node as ProseNode } from '@milkdown/prose/model'\nimport { TextSelection } from '@milkdown/prose/state'\nimport { $command, $markAttr, $markSchema } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the link mark.\nexport const linkAttr = $markAttr('link')\n\nwithMeta(linkAttr, {\n displayName: 'Attr<link>',\n group: 'Link',\n})\n\n/// Link mark schema.\nexport const linkSchema = $markSchema('link', ctx => ({\n attrs: {\n href: {},\n title: { default: null },\n },\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return { href: dom.getAttribute('href'), title: dom.getAttribute('title') }\n },\n },\n ],\n toDOM: mark => ['a', { ...ctx.get(linkAttr.key)(mark), ...mark.attrs }],\n parseMarkdown: {\n match: node => node.type === 'link',\n runner: (state, node, markType) => {\n const url = node.url as string\n const title = node.title as string\n state.openMark(markType, { href: url, title })\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === 'link',\n runner: (state, mark) => {\n state.withMark(mark, 'link', undefined, {\n title: mark.attrs.title,\n url: mark.attrs.href,\n })\n },\n },\n}))\n\nwithMeta(linkSchema.mark, {\n displayName: 'MarkSchema<link>',\n group: 'Link',\n})\n\n/// @internal\nexport type UpdateLinkCommandPayload = {\n href?: string\n title?: string\n}\n/// A command to toggle the link mark.\n/// You can pass the `href` and `title` to the link.\nexport const toggleLinkCommand = $command('ToggleLink', ctx => (payload: UpdateLinkCommandPayload = {}) => toggleMark(linkSchema.type(ctx), payload))\n\nwithMeta(toggleLinkCommand, {\n displayName: 'Command<toggleLinkCommand>',\n group: 'Link',\n})\n\n/// A command to update the link mark.\n/// You can pass the `href` and `title` to update the link.\nexport const updateLinkCommand = $command('UpdateLink', ctx => (payload: UpdateLinkCommandPayload = {}) => (state, dispatch) => {\n if (!dispatch)\n return false\n\n let node: ProseNode | undefined\n let pos = -1\n const { selection } = state\n const { from, to } = selection\n state.doc.nodesBetween(from, from === to ? to + 1 : to, (n, p) => {\n if (linkSchema.type(ctx).isInSet(n.marks)) {\n node = n\n pos = p\n return false\n }\n\n return undefined\n })\n\n if (!node)\n return false\n\n const mark = node.marks.find(({ type }) => type === linkSchema.type(ctx))\n if (!mark)\n return false\n\n const start = pos\n const end = pos + node.nodeSize\n const { tr } = state\n const linkMark = linkSchema.type(ctx).create({ ...mark.attrs, ...payload })\n if (!linkMark)\n return false\n\n dispatch(\n tr\n .removeMark(start, end, mark)\n .addMark(start, end, linkMark)\n .setSelection(new TextSelection(tr.selection.$anchor))\n .scrollIntoView(),\n )\n\n return true\n})\n\nwithMeta(updateLinkCommand, {\n displayName: 'Command<updateLinkCommand>',\n group: 'Link',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $node } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// The top-level document node.\nexport const docSchema = $node('doc', () => ({\n content: 'block+',\n parseMarkdown: {\n match: ({ type }) => type === 'root',\n runner: (state, node, type) => {\n state.injectRoot(node, type)\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'doc',\n runner: (state, node) => {\n state.openNode('root')\n state.next(node.content)\n },\n },\n}))\n\nwithMeta(docSchema, {\n displayName: 'NodeSchema<doc>',\n group: 'Doc',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { serializeText, withMeta } from '../__internal__'\n\n/// HTML attributes for paragraph node.\nexport const paragraphAttr = $nodeAttr('paragraph')\n\nwithMeta(paragraphAttr, {\n displayName: 'Attr<paragraph>',\n group: 'Paragraph',\n})\n\n/// Schema for paragraph node.\nexport const paragraphSchema = $nodeSchema('paragraph', ctx => ({\n content: 'inline*',\n group: 'block',\n parseDOM: [{ tag: 'p' }],\n toDOM: node => ['p', ctx.get(paragraphAttr.key)(node), 0],\n parseMarkdown: {\n match: node => node.type === 'paragraph',\n runner: (state, node, type) => {\n state.openNode(type)\n if (node.children)\n state.next(node.children)\n\n else\n state.addText((node.value || '') as string)\n\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'paragraph',\n runner: (state, node) => {\n state.openNode('paragraph')\n serializeText(state, node)\n state.closeNode()\n },\n },\n}))\n\nwithMeta(paragraphSchema.node, {\n displayName: 'NodeSchema<paragraph>',\n group: 'Paragraph',\n})\nwithMeta(paragraphSchema.ctx, {\n displayName: 'NodeSchemaCtx<paragraph>',\n group: 'Paragraph',\n})\n\n/// This command can turn the selected block into paragraph.\nexport const turnIntoTextCommand = $command('TurnIntoText', ctx => () => setBlockType(paragraphSchema.type(ctx)))\n\nwithMeta(turnIntoTextCommand, {\n displayName: 'Command<turnIntoTextCommand>',\n group: 'Paragraph',\n})\n\n/// Keymap for paragraph node.\n/// - `<Mod-Alt-0>`: Turn the selected block into paragraph.\nexport const paragraphKeymap = $useKeymap('paragraphKeymap', {\n TurnIntoText: {\n shortcuts: 'Mod-Alt-0',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(turnIntoTextCommand.key)\n },\n },\n})\n\nwithMeta(paragraphKeymap.ctx, {\n displayName: 'KeymapCtx<paragraph>',\n group: 'Paragraph',\n})\n\nwithMeta(paragraphKeymap.shortcuts, {\n displayName: 'Keymap<paragraph>',\n group: 'Paragraph',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, editorViewCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { textblockTypeInputRule } from '@milkdown/prose/inputrules'\nimport type { Node } from '@milkdown/prose/model'\nimport { $command, $ctx, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport slugify from '@sindresorhus/slugify'\nimport { serializeText, withMeta } from '../__internal__'\nimport { paragraphSchema } from './paragraph'\n\nconst headingIndex = Array(6)\n .fill(0)\n .map((_, i) => i + 1)\n\nconst defaultHeadingIdGenerator = (node: Node) =>\n slugify(node.textContent)\n\n/// This is a slice contains a function to generate heading id.\n/// You can configure it to generate id in your own way.\nexport const headingIdGenerator = $ctx(defaultHeadingIdGenerator, 'headingIdGenerator')\n\nwithMeta(headingIdGenerator, {\n displayName: 'Ctx<HeadingIdGenerator>',\n group: 'Heading',\n})\n\n/// HTML attributes for heading node.\nexport const headingAttr = $nodeAttr('heading')\n\nwithMeta(headingAttr, {\n displayName: 'Attr<heading>',\n group: 'Heading',\n})\n\n/// Schema for heading node.\nexport const headingSchema = $nodeSchema('heading', (ctx) => {\n const getId = ctx.get(headingIdGenerator.key)\n return {\n content: 'inline*',\n group: 'block',\n defining: true,\n attrs: {\n id: {\n default: '',\n },\n level: {\n default: 1,\n },\n },\n parseDOM: headingIndex.map(x => ({\n tag: `h${x}`,\n getAttrs: (node) => {\n if (!(node instanceof HTMLElement))\n throw expectDomTypeError(node)\n\n return { level: x, id: node.id }\n },\n })),\n toDOM: (node) => {\n return [\n `h${node.attrs.level}`,\n {\n ...ctx.get(headingAttr.key)(node),\n id: node.attrs.id || getId(node),\n },\n 0,\n ]\n },\n parseMarkdown: {\n match: ({ type }) => type === 'heading',\n runner: (state, node, type) => {\n const depth = node.depth as number\n state.openNode(type, { level: depth })\n state.next(node.children)\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'heading',\n runner: (state, node) => {\n state.openNode('heading', undefined, { depth: node.attrs.level })\n serializeText(state, node)\n state.closeNode()\n },\n },\n }\n})\n\nwithMeta(headingSchema.node, {\n displayName: 'NodeSchema<heading>',\n group: 'Heading',\n})\n\nwithMeta(headingSchema.ctx, {\n displayName: 'NodeSchemaCtx<heading>',\n group: 'Heading',\n})\n\n/// This input rule can turn the selected block into heading.\n/// You can input numbers of `#` and a `space` to create heading.\nexport const wrapInHeadingInputRule = $inputRule((ctx) => {\n return textblockTypeInputRule(/^(?<hashes>#+)\\s$/, headingSchema.type(ctx), (match) => {\n const x = match.groups?.hashes?.length || 0\n\n const view = ctx.get(editorViewCtx)\n const { $from } = view.state.selection\n const node = $from.node()\n if (node.type.name === 'heading') {\n let level = Number(node.attrs.level) + Number(x)\n if (level > 6)\n level = 6\n\n return { level }\n }\n return { level: x }\n })\n})\n\nwithMeta(wrapInHeadingInputRule, {\n displayName: 'InputRule<wrapInHeadingInputRule>',\n group: 'Heading',\n})\n\n/// This command can turn the selected block into heading.\n/// You can pass the level of heading to this command.\n/// By default, the level is 1, which means it will create a `h1` element.\nexport const wrapInHeadingCommand = $command('WrapInHeading', (ctx) => {\n return (level?: number) => {\n level ??= 1\n\n if (level < 1)\n return setBlockType(paragraphSchema.type(ctx))\n\n return setBlockType(headingSchema.type(ctx), { level })\n }\n})\n\nwithMeta(wrapInHeadingCommand, {\n displayName: 'Command<wrapInHeadingCommand>',\n group: 'Heading',\n})\n\n/// This command can downgrade the selected heading.\n/// For example, if you have a `h2` element, and you call this command, you will get a `h1` element.\n/// If the element is already a `h1` element, it will turn it into a `p` element.\nexport const downgradeHeadingCommand = $command('DowngradeHeading', ctx => () =>\n (state, dispatch, view) => {\n const { $from } = state.selection\n const node = $from.node()\n if (node.type !== headingSchema.type(ctx) || !state.selection.empty || $from.parentOffset !== 0)\n return false\n\n const level = node.attrs.level - 1\n if (!level)\n return setBlockType(paragraphSchema.type(ctx))(state, dispatch, view)\n\n dispatch?.(\n state.tr.setNodeMarkup(state.selection.$from.before(), undefined, {\n ...node.attrs,\n level,\n }),\n )\n return true\n })\n\nwithMeta(downgradeHeadingCommand, {\n displayName: 'Command<downgradeHeadingCommand>',\n group: 'Heading',\n})\n\n/// Keymap for heading node.\n/// - `<Mod-Alt-{1-6}>`: Turn the selected block into `h{1-6}` element.\n/// - `<Delete>/<Backspace>`: Downgrade the selected heading.\nexport const headingKeymap = $useKeymap('headingKeymap', {\n TurnIntoH1: {\n shortcuts: 'Mod-Alt-1',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 1)\n },\n },\n TurnIntoH2: {\n shortcuts: 'Mod-Alt-2',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 2)\n },\n },\n TurnIntoH3: {\n shortcuts: 'Mod-Alt-3',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 3)\n },\n },\n TurnIntoH4: {\n shortcuts: 'Mod-Alt-4',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 4)\n },\n },\n TurnIntoH5: {\n shortcuts: 'Mod-Alt-5',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 5)\n },\n },\n TurnIntoH6: {\n shortcuts: 'Mod-Alt-6',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 6)\n },\n },\n DowngradeHeading: {\n shortcuts: ['Delete', 'Backspace'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(downgradeHeadingCommand.key)\n },\n },\n})\n\nwithMeta(headingKeymap.ctx, {\n displayName: 'KeymapCtx<heading>',\n group: 'Heading',\n})\n\nwithMeta(headingKeymap.shortcuts, {\n displayName: 'Keymap<heading>',\n group: 'Heading',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport type { $NodeSchema } from '@milkdown/utils'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for blockquote node.\nexport const blockquoteAttr = $nodeAttr('blockquote')\n\nwithMeta(blockquoteAttr, {\n displayName: 'Attr<blockquote>',\n group: 'Blockquote',\n})\n\n/// Schema for blockquote node.\nexport const blockquoteSchema: $NodeSchema<'blockquote'> = $nodeSchema('blockquote', ctx => ({\n content: 'block+',\n group: 'block',\n defining: true,\n parseDOM: [{ tag: 'blockquote' }],\n toDOM: node => ['blockquote', ctx.get(blockquoteAttr.key)(node), 0],\n parseMarkdown: {\n match: ({ type }) => type === 'blockquote',\n runner: (state, node, type) => {\n state.openNode(type).next(node.children).closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'blockquote',\n runner: (state, node) => {\n state.openNode('blockquote').next(node.content).closeNode()\n },\n },\n}))\n\nwithMeta(blockquoteSchema.node, {\n displayName: 'NodeSchema<blockquote>',\n group: 'Blockquote',\n})\n\nwithMeta(blockquoteSchema.ctx, {\n displayName: 'NodeSchemaCtx<blockquote>',\n group: 'Blockquote',\n})\n\n/// This input rule will convert a line that starts with `> ` into a blockquote.\n/// You can type `> ` at the start of a line to create a blockquote.\nexport const wrapInBlockquoteInputRule = $inputRule(ctx => wrappingInputRule(/^\\s*>\\s$/, blockquoteSchema.type(ctx)))\n\nwithMeta(wrapInBlockquoteInputRule, {\n displayName: 'InputRule<wrapInBlockquoteInputRule>',\n group: 'Blockquote',\n})\n\n/// This command will wrap the current selection in a blockquote.\nexport const wrapInBlockquoteCommand = $command('WrapInBlockquote', ctx => () => wrapIn(blockquoteSchema.type(ctx)))\n\nwithMeta(wrapInBlockquoteCommand, {\n displayName: 'Command<wrapInBlockquoteCommand>',\n group: 'Blockquote',\n})\n\n/// Keymap for blockquote.\n/// - `Mod-Shift-b`: Wrap selection in blockquote.\nexport const blockquoteKeymap = $useKeymap('blockquoteKeymap', {\n WrapInBlockquote: {\n shortcuts: 'Mod-Shift-b',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInBlockquoteCommand.key)\n },\n },\n})\n\nwithMeta(blockquoteKeymap.ctx, {\n displayName: 'KeymapCtx<blockquote>',\n group: 'Blockquote',\n})\n\nwithMeta(blockquoteKeymap.shortcuts, {\n displayName: 'Keymap<blockquote>',\n group: 'Blockquote',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { textblockTypeInputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for code block node.\nexport const codeBlockAttr = $nodeAttr('codeBlock', () => ({\n pre: {},\n code: {},\n}))\n\nwithMeta(codeBlockAttr, {\n displayName: 'Attr<codeBlock>',\n group: 'CodeBlock',\n})\n\n/// Schema for code block node.\nexport const codeBlockSchema = $nodeSchema('code_block', (ctx) => {\n return {\n content: 'text*',\n group: 'block',\n marks: '',\n defining: true,\n code: true,\n attrs: {\n language: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return { language: dom.dataset.language }\n },\n },\n ],\n toDOM: (node) => {\n const attr = ctx.get(codeBlockAttr.key)(node)\n return [\n 'pre',\n {\n ...attr.pre,\n 'data-language': node.attrs.language,\n },\n ['code', attr.code, 0],\n ]\n },\n parseMarkdown: {\n match: ({ type }) => type === 'code',\n runner: (state, node, type) => {\n const language = node.lang as string\n const value = node.value as string\n state.openNode(type, { language })\n if (value)\n state.addText(value)\n\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'code_block',\n runner: (state, node) => {\n state.addNode('code', undefined, node.content.firstChild?.text || '', {\n lang: node.attrs.language,\n })\n },\n },\n }\n})\n\nwithMeta(codeBlockSchema.node, {\n displayName: 'NodeSchema<codeBlock>',\n group: 'CodeBlock',\n})\n\nwithMeta(codeBlockSchema.ctx, {\n displayName: 'NodeSchemaCtx<codeBlock>',\n group: 'CodeBlock',\n})\n\n/// A input rule for creating code block.\n/// For example, ` ```javascript ` will create a code block with language javascript.\nexport const createCodeBlockInputRule = $inputRule(ctx => textblockTypeInputRule(/^```(?<language>[a-z]*)?[\\s\\n]$/, codeBlockSchema.type(ctx), match => ({\n language: match.groups?.language ?? '',\n})))\n\nwithMeta(createCodeBlockInputRule, {\n displayName: 'InputRule<createCodeBlockInputRule>',\n group: 'CodeBlock',\n})\n\n/// A command for creating code block.\n/// You can pass the language of the code block as the parameter.\nexport const createCodeBlockCommand = $command('CreateCodeBlock', ctx => (language = '') => setBlockType(codeBlockSchema.type(ctx), { language }))\n\nwithMeta(createCodeBlockCommand, {\n displayName: 'Command<createCodeBlockCommand>',\n group: 'CodeBlock',\n})\n\n/// A command for updating the code block language of the target position.\nexport const updateCodeBlockLanguageCommand = $command('UpdateCodeBlockLanguage', () => ({ pos, language }: { pos: number; language: string } = { pos: -1, language: '' }) => (state, dispatch) => {\n if (pos >= 0) {\n dispatch?.(state.tr.setNodeAttribute(pos, 'language', language))\n return true\n }\n\n return false\n})\n\nwithMeta(updateCodeBlockLanguageCommand, {\n displayName: 'Command<updateCodeBlockLanguageCommand>',\n group: 'CodeBlock',\n})\n\n/// Keymap for code block.\n/// - `Mod-Alt-c`: Create a code block.\nexport const codeBlockKeymap = $useKeymap('codeBlockKeymap', {\n CreateCodeBlock: {\n shortcuts: 'Mod-Alt-c',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(createCodeBlockCommand.key)\n },\n },\n})\n\nwithMeta(codeBlockKeymap.ctx, {\n displayName: 'KeymapCtx<codeBlock>',\n group: 'CodeBlock',\n})\n\nwithMeta(codeBlockKeymap.shortcuts, {\n displayName: 'Keymap<codeBlock>',\n group: 'CodeBlock',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { findSelectedNodeOfType } from '@milkdown/prose'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for image node.\nexport const imageAttr = $nodeAttr('image')\n\nwithMeta(imageAttr, {\n displayName: 'Attr<image>',\n group: 'Image',\n})\n\n/// Schema for image node.\nexport const imageSchema = $nodeSchema('image', (ctx) => {\n return {\n inline: true,\n group: 'inline',\n selectable: true,\n draggable: true,\n marks: '',\n atom: true,\n defining: true,\n isolating: true,\n attrs: {\n src: { default: '' },\n alt: { default: '' },\n title: { default: '' },\n },\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n src: dom.getAttribute('src') || '',\n alt: dom.getAttribute('alt') || '',\n title: dom.getAttribute('title') || dom.getAttribute('alt') || '',\n }\n },\n },\n ],\n toDOM: (node) => {\n return ['img', { ...ctx.get(imageAttr.key)(node), ...node.attrs }]\n },\n parseMarkdown: {\n match: ({ type }) => type === 'image',\n runner: (state, node, type) => {\n const url = node.url as string\n const alt = node.alt as string\n const title = node.title as string\n state.addNode(type, {\n src: url,\n alt,\n title,\n })\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'image',\n runner: (state, node) => {\n state.addNode('image', undefined, undefined, {\n title: node.attrs.title,\n url: node.attrs.src,\n alt: node.attrs.alt,\n })\n },\n },\n }\n})\n\nwithMeta(imageSchema.node, {\n displayName: 'NodeSchema<image>',\n group: 'Image',\n})\n\nwithMeta(imageSchema.ctx, {\n displayName: 'NodeSchemaCtx<image>',\n group: 'Image',\n})\n\n/// @internal\nexport type UpdateImageCommandPayload = {\n src?: string\n title?: string\n alt?: string\n}\n\n/// This command will insert a image node.\n/// You can pass a payload to set `src`, `alt` and `title` for the image node.\nexport const insertImageCommand = $command('InsertImage', ctx => (payload: UpdateImageCommandPayload = {}) =>\n (state, dispatch) => {\n if (!dispatch)\n return true\n\n const { src = '', alt = '', title = '' } = payload\n\n const node = imageSchema.type(ctx).create({ src, alt, title })\n if (!node)\n return true\n\n dispatch(state.tr.replaceSelectionWith(node).scrollIntoView())\n return true\n })\n\nwithMeta(insertImageCommand, {\n displayName: 'Command<insertImageCommand>',\n group: 'Image',\n})\n\n/// This command will update the selected image node.\n/// You can pass a payload to update `src`, `alt` and `title` for the image node.\nexport const updateImageCommand = $command('UpdateImage', ctx => (payload: UpdateImageCommandPayload = {}) => (state, dispatch) => {\n const nodeWithPos = findSelectedNodeOfType(state.selection, imageSchema.type(ctx))\n if (!nodeWithPos)\n return false\n\n const { node, pos } = nodeWithPos\n\n const newAttrs = { ...node.attrs }\n const { src, alt, title } = payload\n if (src !== undefined)\n newAttrs.src = src\n if (alt !== undefined)\n newAttrs.alt = alt\n if (title !== undefined)\n newAttrs.title = title\n\n dispatch?.(state.tr.setNodeMarkup(pos, undefined, newAttrs).scrollIntoView())\n return true\n})\n\nwithMeta(updateImageCommand, {\n displayName: 'Command<updateImageCommand>',\n group: 'Image',\n})\n\n/// This input rule will insert a image node.\n/// You can input `![alt](src \"title\")` to insert a image node.\n/// The `title` is optional.\nexport const insertImageInputRule = $inputRule(ctx => new InputRule(\n /!\\[(?<alt>.*?)]\\((?<filename>.*?)\\s*(?=\"|\\))\"?(?<title>[^\"]+)?\"?\\)/,\n (state, match, start, end) => {\n const [matched, alt, src = '', title] = match\n if (matched)\n return state.tr.replaceWith(start, end, imageSchema.type(ctx).create({ src, alt, title }))\n\n return null\n },\n))\n\nwithMeta(insertImageInputRule, {\n displayName: 'InputRule<insertImageInputRule>',\n group: 'Image',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { Selection, TextSelection } from '@milkdown/prose/state'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the hardbreak node.\n///\n/// Default value:\n/// - `data-is-inline` - Whether the hardbreak is inline.\nexport const hardbreakAttr = $nodeAttr('hardbreak', (node) => {\n return {\n 'data-is-inline': node.attrs.isInline,\n }\n})\n\nwithMeta(hardbreakAttr, {\n displayName: 'Attr<hardbreak>',\n group: 'Hardbreak',\n})\n\n/// Hardbreak node schema.\nexport const hardbreakSchema = $nodeSchema('hardbreak', ctx => ({\n inline: true,\n group: 'inline',\n attrs: {\n isInline: {\n default: false,\n },\n },\n selectable: false,\n parseDOM: [{ tag: 'br' }],\n toDOM: node => ['br', ctx.get(hardbreakAttr.key)(node)],\n parseMarkdown: {\n match: ({ type }) => type === 'break',\n runner: (state, node, type) => {\n state.addNode(type, { isInline: Boolean((node.data as (undefined | { isInline: boolean }))?.isInline) })\n },\n },\n leafText: () => '\\n',\n toMarkdown: {\n match: node => node.type.name === 'hardbreak',\n runner: (state, node) => {\n if (node.attrs.isInline)\n state.addNode('text', undefined, '\\n')\n\n else\n state.addNode('break')\n },\n },\n}))\n\nwithMeta(hardbreakSchema.node, {\n displayName: 'NodeSchema<hardbreak>',\n group: 'Hardbreak',\n})\n\nwithMeta(hardbreakSchema.ctx, {\n displayName: 'NodeSchemaCtx<hardbreak>',\n group: 'Hardbreak',\n})\n\n/// Command to insert a hardbreak.\nexport const insertHardbreakCommand = $command('InsertHardbreak', ctx => () => (state, dispatch) => {\n const { selection, tr } = state\n if (!(selection instanceof TextSelection))\n return false\n\n if (selection.empty) {\n // Transform two successive hardbreak into a new line\n const node = selection.$from.node()\n if (node.childCount > 0 && node.lastChild?.type.name === 'hardbreak') {\n dispatch?.(\n tr\n .replaceRangeWith(selection.to - 1, selection.to, state.schema.node('paragraph'))\n .setSelection(Selection.near(tr.doc.resolve(selection.to)))\n .scrollIntoView(),\n )\n return true\n }\n }\n dispatch?.(tr.setMeta('hardbreak', true).replaceSelectionWith(hardbreakSchema.type(ctx).create()).scrollIntoView())\n return true\n})\n\nwithMeta(insertHardbreakCommand, {\n displayName: 'Command<insertHardbreakCommand>',\n group: 'Hardbreak',\n})\n\n/// Keymap for the hardbreak node.\n/// - `Shift-Enter` - Insert a hardbreak.\nexport const hardbreakKeymap = $useKeymap('hardbreakKeymap', {\n InsertHardbreak: {\n shortcuts: 'Shift-Enter',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(insertHardbreakCommand.key)\n },\n },\n})\n\nwithMeta(hardbreakKeymap.ctx, {\n displayName: 'KeymapCtx<hardbreak>',\n group: 'Hardbreak',\n})\n\nwithMeta(hardbreakKeymap.shortcuts, {\n displayName: 'Keymap<hardbreak>',\n group: 'Hardbreak',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { Selection } from '@milkdown/prose/state'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\nimport { paragraphSchema } from './paragraph'\n\n/// HTML attributes for the hr node.\nexport const hrAttr = $nodeAttr('hr')\n\nwithMeta(hrAttr, {\n displayName: 'Attr<hr>',\n group: 'Hr',\n})\n\n/// Hr node schema.\nexport const hrSchema = $nodeSchema('hr', ctx => ({\n group: 'block',\n parseDOM: [{ tag: 'hr' }],\n toDOM: node => ['hr', ctx.get(hrAttr.key)(node)],\n parseMarkdown: {\n match: ({ type }) => type === 'thematicBreak',\n runner: (state, _, type) => {\n state.addNode(type)\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'hr',\n runner: (state) => {\n state.addNode('thematicBreak')\n },\n },\n}))\n\nwithMeta(hrSchema.node, {\n displayName: 'NodeSchema<hr>',\n group: 'Hr',\n})\n\nwithMeta(hrSchema.ctx, {\n displayName: 'NodeSchemaCtx<hr>',\n group: 'Hr',\n})\n\n/// Input rule to insert a hr.\n/// For example, `---` will be converted to a hr.\nexport const insertHrInputRule = $inputRule(ctx => new InputRule(\n /^(?:---|___\\s|\\*\\*\\*\\s)$/, (state, match, start, end) => {\n const { tr } = state\n\n if (match[0])\n tr.replaceWith(start - 1, end, hrSchema.type(ctx).create())\n\n return tr\n },\n))\n\nwithMeta(insertHrInputRule, {\n displayName: 'InputRule<insertHrInputRule>',\n group: 'Hr',\n})\n\n/// Command to insert a hr.\nexport const insertHrCommand = $command('InsertHr', ctx => () => (state, dispatch) => {\n if (!dispatch)\n return true\n\n const paragraph = paragraphSchema.node.type(ctx).create()\n const { tr, selection } = state\n const { from } = selection\n const node = hrSchema.type(ctx).create()\n if (!node)\n return true\n\n const _tr = tr.replaceSelectionWith(node).insert(from, paragraph)\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true)\n if (!sel)\n return true\n\n dispatch(_tr.setSelection(sel).scrollIntoView())\n return true\n})\n\nwithMeta(insertHrCommand, {\n displayName: 'Command<insertHrCommand>',\n group: 'Hr',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for bullet list node.\nexport const bulletListAttr = $nodeAttr('bulletList')\n\nwithMeta(bulletListAttr, {\n displayName: 'Attr<bulletList>',\n group: 'BulletList',\n})\n\n/// Schema for bullet list node.\nexport const bulletListSchema = $nodeSchema('bullet_list', (ctx) => {\n return {\n content: 'listItem+',\n group: 'block',\n attrs: {\n spread: {\n default: false,\n },\n },\n parseDOM: [\n {\n tag: 'ul',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n spread: dom.dataset.spread,\n }\n },\n },\n ],\n toDOM: (node) => {\n return [\n 'ul',\n {\n ...ctx.get(bulletListAttr.key)(node),\n 'data-spread': node.attrs.spread,\n },\n 0,\n ]\n },\n parseMarkdown: {\n match: ({ type, ordered }) => type === 'list' && !ordered,\n runner: (state, node, type) => {\n const spread = node.spread != null ? `${node.spread}` : 'false'\n state.openNode(type, { spread }).next(node.children).closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'bullet_list',\n runner: (state, node) => {\n state\n .openNode('list', undefined, { ordered: false, spread: node.attrs.spread === 'true' })\n .next(node.content)\n .closeNode()\n },\n },\n }\n})\n\nwithMeta(bulletListSchema.node, {\n displayName: 'NodeSchema<bulletList>',\n group: 'BulletList',\n})\n\nwithMeta(bulletListSchema.ctx, {\n displayName: 'NodeSchemaCtx<bulletList>',\n group: 'BulletList',\n})\n\n/// Input rule for wrapping a block in bullet list node.\nexport const wrapInBulletListInputRule = $inputRule(ctx => wrappingInputRule(/^\\s*([-+*])\\s$/, bulletListSchema.type(ctx)))\n\nwithMeta(wrapInBulletListInputRule, {\n displayName: 'InputRule<wrapInBulletListInputRule>',\n group: 'BulletList',\n})\n\n/// Command for creating bullet list node.\nexport const wrapInBulletListCommand = $command('WrapInBulletList', ctx => () => wrapIn(bulletListSchema.type(ctx)))\n\nwithMeta(wrapInBulletListCommand, {\n displayName: 'Command<wrapInBulletListCommand>',\n group: 'BulletList',\n})\n\n/// Keymap for bullet list node.\n/// - `Mod-Alt-8`: Wrap a block in bullet list.\nexport const bulletListKeymap = $useKeymap('bulletListKeymap', {\n WrapInBulletList: {\n shortcuts: 'Mod-Alt-8',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInBulletListCommand.key)\n },\n },\n})\n\nwithMeta(bulletListKeymap.ctx, {\n displayName: 'KeymapCtx<bulletListKeymap>',\n group: 'BulletList',\n})\n\nwithMeta(bulletListKeymap.shortcuts, {\n displayName: 'Keymap<bulletListKeymap>',\n group: 'BulletList',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for ordered list node.\nexport const orderedListAttr = $nodeAttr('orderedList')\n\nwithMeta(orderedListAttr, {\n displayName: 'Attr<orderedList>',\n group: 'OrderedList',\n})\n\n/// Schema for ordered list node.\nexport const orderedListSchema = $nodeSchema('ordered_list', ctx => ({\n content: 'listItem+',\n group: 'block',\n attrs: {\n order: {\n default: 1,\n },\n spread: {\n default: false,\n },\n },\n parseDOM: [\n {\n tag: 'ol',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n spread: dom.dataset.spread,\n order: dom.hasAttribute('start') ? Number(dom.getAttribute('start')) : 1,\n }\n },\n },\n ],\n toDOM: node => [\n 'ol',\n {\n ...ctx.get(orderedListAttr.key)(node),\n ...(node.attrs.order === 1 ? {} : node.attrs.order),\n 'data-spread': node.attrs.spread,\n },\n 0,\n ],\n parseMarkdown: {\n match: ({ type, ordered }) => type === 'list' && !!ordered,\n runner: (state, node, type) => {\n const spread = node.spread != null ? `${node.spread}` : 'true'\n state.openNode(type, { spread }).next(node.children).closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'ordered_list',\n runner: (state, node) => {\n state.openNode('list', undefined, { ordered: true, start: 1, spread: node.attrs.spread === 'true' })\n state.next(node.content)\n state.closeNode()\n },\n },\n}))\n\nwithMeta(orderedListSchema.node, {\n displayName: 'NodeSchema<orderedList>',\n group: 'OrderedList',\n})\n\nwithMeta(orderedListSchema.ctx, {\n displayName: 'NodeSchemaCtx<orderedList>',\n group: 'OrderedList',\n})\n\n/// Input rule for wrapping a block in ordered list node.\nexport const wrapInOrderedListInputRule = $inputRule(ctx => wrappingInputRule(\n /^\\s*(\\d+)\\.\\s$/,\n orderedListSchema.type(ctx),\n match => ({ order: Number(match[1]) }),\n (match, node) => node.childCount + node.attrs.order === Number(match[1]),\n))\n\nwithMeta(wrapInOrderedListInputRule, {\n displayName: 'InputRule<wrapInOrderedListInputRule>',\n group: 'OrderedList',\n})\n\n/// Command for wrapping a block in ordered list node.\nexport const wrapInOrderedListCommand = $command('WrapInOrderedList', ctx => () => wrapIn(orderedListSchema.type(ctx)))\n\nwithMeta(wrapInOrderedListCommand, {\n displayName: 'Command<wrapInOrderedListCommand>',\n group: 'OrderedList',\n})\n\n/// Keymap for ordered list node.\n/// - `Mod-Alt-7`: Wrap a block in ordered list.\nexport const orderedListKeymap = $useKeymap('orderedListKeymap', {\n WrapInOrderedList: {\n shortcuts: 'Mod-Alt-7',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInOrderedListCommand.key)\n },\n },\n})\n\nwithMeta(orderedListKeymap.ctx, {\n displayName: 'KeymapCtx<orderedList>',\n group: 'OrderedList',\n})\n\nwithMeta(orderedListKeymap.shortcuts, {\n displayName: 'Keymap<orderedList>',\n group: 'OrderedList',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { liftListItem, sinkListItem, splitListItem } from '@milkdown/prose/schema-list'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { type Command, TextSelection } from '@milkdown/prose/state'\nimport type { Ctx } from '@milkdown/ctx'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for list item node.\nexport const listItemAttr = $nodeAttr('listItem')\n\nwithMeta(listItemAttr, {\n displayName: 'Attr<listItem>',\n group: 'ListItem',\n})\n\n/// Schema for list item node.\nexport const listItemSchema = $nodeSchema('list_item', ctx => ({\n group: 'listItem',\n content: 'paragraph block*',\n attrs: {\n label: {\n default: '•',\n },\n listType: {\n default: 'bullet',\n },\n spread: {\n default: 'true',\n },\n },\n defining: true,\n parseDOM: [\n {\n tag: 'li',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n label: dom.dataset.label,\n listType: dom.dataset['list-type'],\n spread: dom.dataset.spread,\n }\n },\n },\n ],\n toDOM: node => [\n 'li',\n {\n ...ctx.get(listItemAttr.key)(node),\n 'data-label': node.attrs.label,\n 'data-list-type': node.attrs.listType,\n 'data-spread': node.attrs.spread,\n },\n 0,\n ],\n parseMarkdown: {\n match: ({ type }) => type === 'listItem',\n runner: (state, node, type) => {\n const label = node.label != null ? `${node.label}.` : '•'\n const listType = node.label != null ? 'ordered' : 'bullet'\n const spread = node.spread != null ? `${node.spread}` : 'true'\n state.openNode(type, { label, listType, spread })\n state.next(node.children)\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'list_item',\n runner: (state, node) => {\n state.openNode('listItem', undefined, { spread: node.attrs.spread === 'true' })\n state.next(node.content)\n state.closeNode()\n },\n },\n}))\n\nwithMeta(listItemSchema.node, {\n displayName: 'NodeSchema<listItem>',\n group: 'ListItem',\n})\n\nwithMeta(listItemSchema.ctx, {\n displayName: 'NodeSchemaCtx<listItem>',\n group: 'ListItem',\n})\n\n/// The command to sink list item.\n///\n/// For example:\n/// ```md\n/// * List item 1\n/// * List item 2 <- cursor here\n/// ```\n/// Will get:\n/// ```md\n/// * List item 1\n/// * List item 2\n/// ```\nexport const sinkListItemCommand = $command('SinkListItem', ctx => () => sinkListItem(listItemSchema.type(ctx)))\n\nwithMeta(sinkListItemCommand, {\n displayName: 'Command<sinkListItemCommand>',\n group: 'ListItem',\n})\n\n/// The command to lift list item.\n///\n/// For example:\n/// ```md\n/// * List item 1\n/// * List item 2 <- cursor here\n/// ```\n/// Will get:\n/// ```md\n/// * List item 1\n/// * List item 2\n/// ```\nexport const liftListItemCommand = $command('SplitListItem', ctx => () => liftListItem(listItemSchema.type(ctx)))\n\nwithMeta(liftListItemCommand, {\n displayName: 'Command<liftListItemCommand>',\n group: 'ListItem',\n})\n\n/// The command to split a list item.\n///\n/// For example:\n/// ```md\n/// * List item 1\n/// * List item 2 <- cursor here\n/// ```\n/// Will get:\n/// ```md\n/// * List item 1\n/// * List item 2\n/// * <- cursor here\n/// ```\nexport const splitListItemCommand = $command('SplitListItem', ctx => () => splitListItem(listItemSchema.type(ctx)))\n\nwithMeta(splitListItemCommand, {\n displayName: 'Command<splitListItemCommand>',\n group: 'ListItem',\n})\n\nconst liftFirstListItem = (ctx: Ctx): Command => (state, dispatch, view) => {\n const { selection } = state\n if (!(selection instanceof TextSelection))\n return false\n\n const { empty, $from } = selection\n\n // selection should be empty and at the start of the node\n if (!empty || $from.parentOffset !== 0)\n return false\n\n const parentItem = $from.node(-1)\n // selection should be in list item and list item should be the first child of the list\n if (parentItem.type !== listItemSchema.type(ctx) || parentItem.firstChild !== $from.node())\n return false\n\n const list = $from.node(-2)\n // list should have only one list item\n if (list.childCount > 1)\n return false\n\n return liftListItem(listItemSchema.type(ctx))(state, dispatch, view)\n}\n\n/// The command to remove list item **only if**:\n///\n/// - Selection is at the start of the list item.\n/// - List item is the only child of the list.\n///\n/// Most of the time, you shouldn't use this command directly.\nexport const liftFirstListItemCommand = $command('LiftFirstListItem', ctx => () => liftFirstListItem(ctx))\n\nwithMeta(liftFirstListItemCommand, {\n displayName: 'Command<liftFirstListItemCommand>',\n group: 'ListItem',\n})\n\n/// Keymap for list item node.\n/// - `<Enter>`: Split the current list item.\n/// - `<Tab>/<Mod-]>`: Sink the current list item.\n/// - `<Shift-Tab>/<Mod-[>`: Lift the current list item.\nexport const listItemKeymap = $useKeymap('listItemKeymap', {\n NextListItem: {\n shortcuts: 'Enter',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(splitListItemCommand.key)\n },\n },\n SinkListItem: {\n shortcuts: ['Tab', 'Mod-]'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(sinkListItemCommand.key)\n },\n },\n LiftListItem: {\n shortcuts: ['Shift-Tab', 'Mod-['],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(liftListItemCommand.key)\n },\n },\n LiftFirstListItem: {\n shortcuts: ['Backspace', 'Delete'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(liftFirstListItemCommand.key)\n },\n },\n})\n\nwithMeta(listItemKeymap.ctx, {\n displayName: 'KeymapCtx<listItem>',\n group: 'ListItem',\n})\n\nwithMeta(listItemKeymap.shortcuts, {\n displayName: 'Keymap<listItem>',\n group: 'ListItem',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $node } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// The bottom-level node.\nexport const textSchema = $node('text', () => ({\n group: 'inline',\n parseMarkdown: {\n match: ({ type }) => type === 'text',\n runner: (state, node) => {\n state.addText(node.value as string)\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'text',\n runner: (state, node) => {\n state.addNode('text', undefined, node.text as string)\n },\n },\n}))\n\nwithMeta(textSchema, {\n displayName: 'NodeSchema<text>',\n group: 'Text',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $nodeAttr, $nodeSchema } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\nexport const htmlAttr = $nodeAttr('html')\n\nwithMeta(htmlAttr, {\n displayName: 'Attr<html>',\n group: 'Html',\n})\n\nexport const htmlSchema = $nodeSchema('html', (ctx) => {\n return {\n atom: true,\n group: 'inline',\n inline: true,\n attrs: {\n value: {\n default: '',\n },\n },\n toDOM: (node) => {\n const span = document.createElement('span')\n const attr = {\n ...ctx.get(htmlAttr.key)(node),\n 'data-value': node.attrs.value,\n 'data-type': 'html',\n }\n span.textContent = node.attrs.value\n return ['span', attr, node.attrs.value]\n },\n parseDOM: [{\n tag: 'span[data-type=\"html\"]',\n getAttrs: (dom) => {\n return {\n value: (dom as HTMLElement).dataset.value ?? '',\n }\n },\n }],\n parseMarkdown: {\n match: ({ type }) => Boolean(type === 'html'),\n runner: (state, node, type) => {\n state.addNode(type, { value: node.value as string })\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'html',\n runner: (state, node) => {\n state.addNode('html', undefined, node.attrs.value)\n },\n },\n }\n})\n\nwithMeta(htmlSchema.node, {\n displayName: 'NodeSchema<html>',\n group: 'Html',\n})\n\nwithMeta(htmlSchema.ctx, {\n displayName: 'NodeSchemaCtx<html>',\n group: 'Html',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { emphasisAttr, emphasisSchema, inlineCodeAttr, inlineCodeSchema, linkAttr, linkSchema, strongAttr, strongSchema } from '../mark'\nimport {\n blockquoteAttr,\n blockquoteSchema,\n bulletListAttr,\n bulletListSchema,\n codeBlockAttr,\n codeBlockSchema,\n docSchema,\n hardbreakAttr,\n hardbreakSchema,\n headingAttr,\n headingIdGenerator,\n headingSchema,\n hrAttr,\n hrSchema, htmlAttr,\n htmlSchema,\n imageAttr,\n imageSchema,\n listItemAttr,\n listItemSchema,\n orderedListAttr,\n orderedListSchema,\n paragraphAttr,\n paragraphSchema,\n textSchema,\n} from '../node'\n\n/// @internal\nexport const schema: MilkdownPlugin[] = [\n docSchema,\n\n paragraphAttr,\n paragraphSchema,\n\n headingIdGenerator,\n headingAttr,\n headingSchema,\n\n hardbreakAttr,\n hardbreakSchema,\n\n blockquoteAttr,\n blockquoteSchema,\n\n codeBlockAttr,\n codeBlockSchema,\n\n hrAttr,\n hrSchema,\n\n imageAttr,\n imageSchema,\n\n bulletListAttr,\n bulletListSchema,\n\n orderedListAttr,\n orderedListSchema,\n\n listItemAttr,\n listItemSchema,\n\n emphasisAttr,\n emphasisSchema,\n\n strongAttr,\n strongSchema,\n\n inlineCodeAttr,\n inlineCodeSchema,\n\n linkAttr,\n linkSchema,\n\n htmlAttr,\n htmlSchema,\n\n textSchema,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { createCodeBlockInputRule, insertHrInputRule, wrapInBlockquoteInputRule, wrapInBulletListInputRule, wrapInHeadingInputRule, wrapInOrderedListInputRule } from '../node'\n\n/// @internal\nexport const inputrules: MilkdownPlugin[] = [\n wrapInBlockquoteInputRule,\n wrapInBulletListInputRule,\n wrapInOrderedListInputRule,\n createCodeBlockInputRule,\n insertHrInputRule,\n wrapInHeadingInputRule,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { toggleEmphasisCommand, toggleInlineCodeCommand, toggleLinkCommand, toggleStrongCommand, updateLinkCommand } from '../mark'\nimport {\n createCodeBlockCommand,\n downgradeHeadingCommand,\n insertHardbreakCommand,\n insertHrCommand,\n insertImageCommand,\n liftFirstListItemCommand,\n liftListItemCommand,\n sinkListItemCommand,\n splitListItemCommand,\n turnIntoTextCommand,\n updateImageCommand,\n wrapInBlockquoteCommand,\n wrapInBulletListCommand,\n wrapInHeadingCommand,\n wrapInOrderedListCommand,\n} from '../node'\n\n/// @internal\nexport const commands: MilkdownPlugin[] = [\n turnIntoTextCommand,\n wrapInBlockquoteCommand,\n wrapInHeadingCommand,\n downgradeHeadingCommand,\n createCodeBlockCommand,\n insertHardbreakCommand,\n insertHrCommand,\n\n insertImageCommand,\n updateImageCommand,\n\n wrapInOrderedListCommand,\n wrapInBulletListCommand,\n sinkListItemCommand,\n splitListItemCommand,\n liftListItemCommand,\n liftFirstListItemCommand,\n\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleStrongCommand,\n\n toggleLinkCommand,\n updateLinkCommand,\n]\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { emphasisKeymap, inlineCodeKeymap, strongKeymap } from '../mark'\nimport { blockquoteKeymap, bulletListKeymap, codeBlockKeymap, hardbreakKeymap, headingKeymap, listItemKeymap, orderedListKeymap, paragraphKeymap } from '../node'\n\n/// @internal\nexport const keymap: MilkdownPlugin[] = [\n blockquoteKeymap,\n codeBlockKeymap,\n hardbreakKeymap,\n headingKeymap,\n listItemKeymap,\n orderedListKeymap,\n bulletListKeymap,\n paragraphKeymap,\n\n emphasisKeymap,\n inlineCodeKeymap,\n strongKeymap,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\n\nexport const linkRegexp = /\\[([^\\]]+)]\\([^\\s\\]]+\\)/\n\nexport const keepLinkRegexp = /\\[(?<span>((www|https:\\/\\/|http:\\/\\/)[^\\s\\]]+))]\\((?<url>[^\\s\\]]+)\\)/\n\nexport const punctuationRegexp = (holePlaceholder: string) =>\n new RegExp(`\\\\\\\\(?=[^\\\\w\\\\s${holePlaceholder}\\\\\\\\]|_)`, 'g')\n\nexport const ZERO_WIDTH_SPACE = '\\u200B'\n\nexport const asterisk = `${ZERO_WIDTH_SPACE}*`\nexport const asteriskHolder = `${ZERO_WIDTH_SPACE}*`\nexport const underline = `${ZERO_WIDTH_SPACE}_`\nexport const underlineHolder = `${ZERO_WIDTH_SPACE}⎽`\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { Node } from '@milkdown/prose/model'\n\nimport type { SyncNodePlaceholder } from './config'\nimport {\n asterisk,\n asteriskHolder,\n keepLinkRegexp,\n punctuationRegexp,\n underline,\n underlineHolder,\n} from './regexp'\n\nexport const keepLink = (str: string) => {\n let text = str\n let match = text.match(keepLinkRegexp)\n while (match && match.groups) {\n const { span } = match.groups\n text = text.replace(keepLinkRegexp, span as string)\n\n match = text.match(keepLinkRegexp)\n }\n return text\n}\n\nexport const mergeSlash = (str: string) => {\n return str\n .replaceAll(/\\\\\\\\\\*/g, asterisk)\n .replaceAll(/\\\\\\\\_/g, underline)\n .replaceAll(asterisk, asteriskHolder)\n .replaceAll(underline, underlineHolder)\n}\n\nexport const swap = (text: string, first: number, last: number) => {\n const arr = text.split('')\n const temp = arr[first]\n if (arr[first] && arr[last]) {\n arr[first] = arr[last] as string\n arr[last] = temp as string\n }\n return arr.join('').toString()\n}\n\nexport const replacePunctuation = (holePlaceholder: string) => (text: string) =>\n text.replace(punctuationRegexp(holePlaceholder), '')\n\nexport const calculatePlaceholder = (placeholder: SyncNodePlaceholder) => (text: string) => {\n const index = text.indexOf(placeholder.hole)\n const left = text.charAt(index - 1)\n const right = text.charAt(index + 1)\n const notAWord = /[^\\w]|_/\n\n // cursor on the right\n if (!right)\n return placeholder.punctuation\n\n // cursor on the left\n if (!left)\n return placeholder.char\n\n if (notAWord.test(left) && notAWord.test(right))\n return placeholder.punctuation\n\n return placeholder.char\n}\n\nexport const calcOffset = (node: Node, from: number, placeholder: string) => {\n let offset = from\n let find = false\n node.descendants((n) => {\n if (find)\n return false\n if (!n.textContent.includes(placeholder)) {\n offset += n.nodeSize\n return false\n }\n if (n.isText) {\n const i = n.text?.indexOf(placeholder)\n if (i != null && i >= 0) {\n find = true\n offset += i\n return false\n }\n }\n\n // enter the node\n offset += 1\n return true\n })\n return offset\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/ctx'\nimport type { Node, NodeType } from '@milkdown/prose/model'\nimport type { Transaction } from '@milkdown/prose/state'\nimport { $ctx } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\nimport { swap } from './utils'\n\n/// @internal\nexport type ShouldSyncNode = (context: {\n prevNode: Node\n nextNode: Node\n ctx: Ctx\n tr: Transaction\n text: string\n}) => boolean\n\n/// @internal\nexport interface SyncNodePlaceholder {\n hole: string\n punctuation: string\n char: string\n}\n\n/// @internal\nexport interface InlineSyncConfig {\n placeholderConfig: SyncNodePlaceholder\n shouldSyncNode: ShouldSyncNode\n globalNodes: Array<NodeType | string>\n movePlaceholder: (placeholderToMove: string, text: string) => string\n}\n\n/// @internal\nexport const defaultConfig: InlineSyncConfig = {\n placeholderConfig: {\n hole: '∅',\n punctuation: '⁂',\n char: '∴',\n },\n globalNodes: ['footnote_definition'],\n shouldSyncNode: ({ prevNode, nextNode }) =>\n prevNode.inlineContent\n && nextNode\n // if node type changes, do not sync\n && prevNode.type === nextNode.type\n // if two node fully equal, we don't modify them\n && !prevNode.eq(nextNode),\n movePlaceholder: (placeholderToMove: string, text: string) => {\n const symbolsNeedToMove = ['*', '_']\n\n let index = text.indexOf(placeholderToMove)\n while (symbolsNeedToMove.includes(text[index - 1] || '') && symbolsNeedToMove.includes(text[index + 1] || '')) {\n text = swap(text, index, index + 1)\n index = index + 1\n }\n\n return text\n },\n}\n\n/// A slice that contains the inline sync config.\n/// You can set value to this slice to change the config.\n///\n/// ```typescript\n/// ctx.update(inlineSyncConfigCtx, (prevCfg) => ({\n/// ...prevCfg,\n/// // your config\n/// }));\n/// ```\n///\n/// You can find the default config [here](https://github.com/Milkdown/milkdown/blob/main/packages/preset-commonmark/src/plugin/inline-sync-plugin/config.ts).\nexport const inlineSyncConfig = $ctx<InlineSyncConfig, 'inlineSyncConfig'>(defaultConfig, 'inlineSyncConfig')\n\nwithMeta(inlineSyncConfig, {\n displayName: 'Ctx<inlineSyncConfig>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/ctx'\nimport { parserCtx, serializerCtx } from '@milkdown/core'\nimport type { Node } from '@milkdown/prose/model'\nimport type { EditorState } from '@milkdown/prose/state'\nimport { pipe } from '@milkdown/utils'\n\nimport { inlineSyncConfig } from './config'\nimport { calculatePlaceholder, keepLink, mergeSlash, replacePunctuation } from './utils'\nimport { asterisk, asteriskHolder, underline, underlineHolder } from './regexp'\n\nexport interface InlineSyncContext {\n text: string\n prevNode: Node\n nextNode: Node\n placeholder: string\n}\n\nconst getNodeFromSelection = (state: EditorState) => {\n return state.selection.$from.node()\n}\n\nconst getMarkdown = (ctx: Ctx, state: EditorState, node: Node, globalNode: Node[]) => {\n const serializer = ctx.get(serializerCtx)\n const doc = state.schema.topNodeType.create(undefined, [node, ...globalNode])\n\n return serializer(doc)\n}\n\nconst addPlaceholder = (ctx: Ctx, markdown: string) => {\n const config = ctx.get(inlineSyncConfig.key)\n const holePlaceholder = config.placeholderConfig.hole\n\n const [firstLine = '', ...rest] = markdown.split('\\n\\n')\n\n const movePlaceholder = (text: string) => config.movePlaceholder(holePlaceholder, text)\n\n const handleText = pipe(replacePunctuation(holePlaceholder), movePlaceholder, keepLink, mergeSlash)\n\n let text = handleText(firstLine)\n const placeholder = calculatePlaceholder(config.placeholderConfig)(text)\n\n text = text.replace(holePlaceholder, placeholder)\n\n text = [text, ...rest].join('\\n\\n')\n\n return [text, placeholder] as [markdown: string, placeholder: string]\n}\n\nconst getNewNode = (ctx: Ctx, text: string) => {\n const parser = ctx.get(parserCtx)\n const parsed = parser(text)\n\n if (!parsed)\n return null\n\n return parsed.firstChild\n}\n\nconst collectGlobalNodes = (ctx: Ctx, state: EditorState) => {\n const { globalNodes } = ctx.get(inlineSyncConfig.key)\n const nodes: Node[] = []\n\n state.doc.descendants((node) => {\n if (globalNodes.includes(node.type.name) || globalNodes.includes(node.type)) {\n nodes.push(node)\n return false\n }\n\n return undefined\n })\n\n return nodes\n}\n\nconst removeGlobalFromText = (text: string) => text.split('\\n\\n')[0] || ''\n\nconst onlyHTML = (node: Node) => {\n return node.childCount === 1 && node.child(0).type.name === 'html'\n}\n\nexport const getContextByState = (ctx: Ctx, state: EditorState): InlineSyncContext | null => {\n try {\n const globalNode = collectGlobalNodes(ctx, state)\n const node = getNodeFromSelection(state)\n\n const markdown = getMarkdown(ctx, state, node, globalNode)\n const [text, placeholder] = addPlaceholder(ctx, markdown)\n\n const newNode = getNewNode(ctx, text)\n\n if (!newNode || node.type !== newNode.type || onlyHTML(newNode))\n return null\n\n // @ts-expect-error hijack the node attribute\n newNode.attrs = { ...node.attrs }\n\n newNode.descendants((node) => {\n const marks = node.marks\n const link = marks.find(mark => mark.type.name === 'link')\n if (link && node.text?.includes(placeholder) && link.attrs.href.includes(placeholder)) {\n // @ts-expect-error hijack the mark attribute\n link.attrs.href = link.attrs.href.replace(placeholder, '')\n }\n if (node.text?.includes(asteriskHolder) || node.text?.includes(underlineHolder)) {\n // @ts-expect-error hijack the attribute\n node.text = node.text.replaceAll(asteriskHolder, asterisk).replaceAll(underlineHolder, underline)\n }\n })\n\n return {\n text: removeGlobalFromText(text),\n prevNode: node,\n nextNode: newNode,\n placeholder,\n }\n }\n catch {\n return null\n }\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/ctx'\nimport type { Attrs } from '@milkdown/prose/model'\nimport type { EditorState, PluginKey, Transaction } from '@milkdown/prose/state'\nimport { TextSelection } from '@milkdown/prose/state'\n\nimport { inlineSyncConfig } from './config'\nimport { getContextByState } from './context'\nimport { calcOffset } from './utils'\nimport { linkRegexp } from './regexp'\n\nexport const runReplacer = (\n ctx: Ctx,\n key: PluginKey,\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n attrs: Attrs,\n) => {\n const { placeholderConfig } = ctx.get(inlineSyncConfig.key)\n const holePlaceholder = placeholderConfig.hole\n // insert a placeholder to restore the selection\n let tr = state.tr.setMeta(key, true).insertText(holePlaceholder, state.selection.from)\n\n const nextState = state.apply(tr)\n const context = getContextByState(ctx, nextState)\n\n if (!context)\n return\n\n const lastUserInput = context.text.slice(0, context.text.indexOf(context.placeholder))\n\n const { $from } = nextState.selection\n const from = $from.before()\n const to = $from.after()\n\n const offset = calcOffset(context.nextNode, from, context.placeholder)\n\n tr = tr\n .replaceWith(from, to, context.nextNode)\n .setNodeMarkup(from, undefined, attrs)\n // delete the placeholder\n .delete(offset + 1, offset + 2)\n\n // restore the selection\n tr = tr.setSelection(TextSelection.near(tr.doc.resolve(offset + 1)))\n\n const needsRestoreMark = linkRegexp.test(lastUserInput) || ['*', '_', '~'].includes(lastUserInput.at(-1) || '')\n if (needsRestoreMark && tr.selection instanceof TextSelection) {\n const marks = tr.selection.$cursor?.marks() ?? []\n marks.forEach((mark) => {\n tr = tr.removeStoredMark(mark.type)\n })\n }\n\n dispatch(tr)\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/ctx'\nimport { editorViewCtx } from '@milkdown/core'\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../../__internal__'\nimport { inlineSyncConfig } from './config'\nimport { getContextByState } from './context'\nimport { runReplacer } from './replacer'\n\n/// This plugin is used to sync the inline mark.\n/// It will create and remove marks automatically according to the user input.\n///\n/// When users type something, the plugin will transform the line (for better performance) to real markdown AST by serializer\n/// and render the AST to dom by parser, thus the input texts can be displayed correctly.\nexport const inlineSyncPlugin = $prose((ctx: Ctx) => {\n let requestId: number | null = null\n const inlineSyncPluginKey = new PluginKey('MILKDOWN_INLINE_SYNC')\n\n return new Plugin<null>({\n key: inlineSyncPluginKey,\n state: {\n init: () => {\n return null\n },\n apply: (tr, _value, _oldState, newState) => {\n const view = ctx.get(editorViewCtx)\n if (!view.hasFocus?.() || !view.editable)\n return null\n\n if (!tr.docChanged)\n return null\n\n const meta = tr.getMeta(inlineSyncPluginKey)\n if (meta)\n return null\n\n const context = getContextByState(ctx, newState)\n if (!context)\n return null\n\n if (requestId) {\n cancelAnimationFrame(requestId)\n requestId = null\n }\n\n const { prevNode, nextNode, text } = context\n\n const { shouldSyncNode } = ctx.get(inlineSyncConfig.key)\n\n if (!shouldSyncNode({ prevNode, nextNode, ctx, tr, text }))\n return null\n\n requestId = requestAnimationFrame(() => {\n requestId = null\n\n const { dispatch, state } = ctx.get(editorViewCtx)\n\n runReplacer(ctx, inlineSyncPluginKey, state, dispatch, prevNode.attrs)\n })\n\n return null\n },\n },\n })\n})\n\nwithMeta(inlineSyncPlugin, {\n displayName: 'Prose<inlineSyncPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport { visit } from 'unist-util-visit'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to add order in list for remark AST.\nexport const remarkAddOrderInListPlugin = $remark('remarkAddOrderInList', () => () => (tree) => {\n visit(tree, 'list', (node) => {\n if (node.ordered) {\n const start = node.start ?? 1\n node.children.forEach((child, index) => {\n (child as unknown as Record<string, number>).label = index + start\n })\n }\n })\n})\n\nwithMeta(remarkAddOrderInListPlugin.plugin, {\n displayName: 'Remark<remarkAddOrderInListPlugin>',\n group: 'Remark',\n})\n\nwithMeta(remarkAddOrderInListPlugin.options, {\n displayName: 'RemarkConfig<remarkAddOrderInListPlugin>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport type { Node } from '@milkdown/transformer'\nimport { visit } from 'unist-util-visit'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to add inline line break for remark AST.\n/// The inline line break should be treated as a `space`.\n/// And the normal line break should be treated as a `LF`.\nexport const remarkLineBreak = $remark('remarkLineBreak', () => () => (tree: Node) => {\n const find = /[\\t ]*(?:\\r?\\n|\\r)/g\n visit(tree, 'text', (node: Node & { value: string }, index: number, parent: Node & { children: Node[] }) => {\n if (!node.value || typeof node.value !== 'string')\n return\n\n const result = []\n let start = 0\n\n find.lastIndex = 0\n\n let match = find.exec(node.value)\n\n while (match) {\n const position = match.index\n\n if (start !== position)\n result.push({ type: 'text', value: node.value.slice(start, position) })\n\n result.push({ type: 'break', data: { isInline: true } })\n start = position + match[0].length\n match = find.exec(node.value)\n }\n\n const hasResultAndIndex = result.length > 0 && parent && typeof index === 'number'\n\n if (!hasResultAndIndex)\n return\n\n if (start < node.value.length)\n result.push({ type: 'text', value: node.value.slice(start) })\n\n parent.children.splice(index, 1, ...result)\n return index + result.length\n })\n})\n\nwithMeta(remarkLineBreak.plugin, {\n displayName: 'Remark<remarkLineBreak>',\n group: 'Remark',\n})\n\nwithMeta(remarkLineBreak.options, {\n displayName: 'RemarkConfig<remarkLineBreak>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport remarkInlineLinks from 'remark-inline-links'\nimport { withMeta } from '../__internal__'\n\n/// This plugin wraps [remark-inline-links](https://github.com/remarkjs/remark-inline-links).\nexport const remarkInlineLinkPlugin = $remark('remarkInlineLink', () => remarkInlineLinks)\n\nwithMeta(remarkInlineLinkPlugin.plugin, {\n displayName: 'Remark<remarkInlineLinkPlugin>',\n group: 'Remark',\n})\n\nwithMeta(remarkInlineLinkPlugin.options, {\n displayName: 'RemarkConfig<remarkInlineLinkPlugin>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport type { Node } from '@milkdown/transformer'\nimport { withMeta } from '../__internal__'\n\nconst isParent = (node: Node): node is Node & { children: Node[] } => !!(node as Node & { children: Node[] }).children\nconst isHTML = (node: Node): node is Node & { children: Node[]; value: unknown } => node.type === 'html'\n\nfunction flatMapWithDepth(ast: Node, fn: (node: Node, index: number, parent: Node | null) => Node[]) {\n return transform(ast, 0, null)[0]\n\n function transform(node: Node, index: number, parent: Node | null) {\n if (isParent(node)) {\n const out = []\n for (let i = 0, n = node.children.length; i < n; i++) {\n const nthChild = node.children[i]\n if (nthChild) {\n const xs = transform(nthChild, i, node)\n if (xs) {\n for (let j = 0, m = xs.length; j < m; j++) {\n const item = xs[j]\n if (item)\n out.push(item)\n }\n }\n }\n }\n node.children = out\n }\n\n return fn(node, index, parent)\n }\n}\n\n/// @internal\n/// This plugin should be deprecated after we support HTML.\nexport const remarkHtmlTransformer = $remark('remarkHTMLTransformer', () => () => (tree: Node) => {\n flatMapWithDepth(tree, (node, _index, parent) => {\n if (!isHTML(node))\n return [node]\n\n if (parent?.type === 'root') {\n node.children = [{ ...node }]\n delete node.value;\n (node as { type: string }).type = 'paragraph'\n }\n\n return [node]\n })\n})\n\nwithMeta(remarkHtmlTransformer.plugin, {\n displayName: 'Remark<remarkHtmlTransformer>',\n group: 'Remark',\n})\n\nwithMeta(remarkHtmlTransformer.options, {\n displayName: 'RemarkConfig<remarkHtmlTransformer>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport type { Node } from '@milkdown/transformer'\nimport { visit } from 'unist-util-visit'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to keep the marker (`_` and `*`) of emphasis and strong nodes.\nexport const remarkMarker = $remark('remarkMarker', () => () => (tree, file) => {\n const getMarker = (node: Node) => {\n return (file.value as string).charAt(node.position!.start.offset!)\n }\n visit(tree, (node: Node) => ['strong', 'emphasis'].includes(node.type), (node: Node) => {\n (node as Node & { marker: string }).marker = getMarker(node)\n })\n})\n\nwithMeta(remarkMarker.plugin, {\n displayName: 'Remark<remarkMarker>',\n group: 'Remark',\n})\n\nwithMeta(remarkMarker.options, {\n displayName: 'RemarkConfig<remarkMarker>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { Decoration, DecorationSet } from '@milkdown/prose/view'\nimport { $prose } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is to solve the [chrome 98 bug](https://discuss.prosemirror.net/t/cursor-jumps-at-the-end-of-line-when-it-betweens-two-inline-nodes/4641).\nexport const inlineNodesCursorPlugin = $prose(() => {\n let lock = false\n const inlineNodesCursorPluginKey = new PluginKey('MILKDOWN_INLINE_NODES_CURSOR')\n const inlineNodesCursorPlugin: Plugin = new Plugin({\n key: inlineNodesCursorPluginKey,\n state: {\n init() {\n return false\n },\n apply(tr) {\n if (!tr.selection.empty)\n return false\n\n const pos = tr.selection.$from\n const left = pos.nodeBefore\n const right = pos.nodeAfter\n if (left && right && left.isInline && !left.isText && right.isInline && !right.isText)\n return true\n\n return false\n },\n },\n props: {\n handleDOMEvents: {\n compositionend: (view, e) => {\n if (lock) {\n lock = false\n requestAnimationFrame(() => {\n const active = inlineNodesCursorPlugin.getState(view.state)\n if (active) {\n const from = view.state.selection.from\n e.preventDefault()\n view.dispatch(view.state.tr.insertText(e.data || '', from))\n }\n })\n\n return true\n }\n return false\n },\n compositionstart: (view) => {\n const active = inlineNodesCursorPlugin.getState(view.state)\n if (active)\n lock = true\n\n return false\n },\n beforeinput: (view, e) => {\n const active = inlineNodesCursorPlugin.getState(view.state)\n if (active && e instanceof InputEvent && e.data && !lock) {\n const from = view.state.selection.from\n e.preventDefault()\n view.dispatch(view.state.tr.insertText(e.data || '', from))\n\n return true\n }\n\n return false\n },\n },\n decorations(state) {\n const active = inlineNodesCursorPlugin.getState(state)\n if (active) {\n const pos = state.selection.$from\n const position = pos.pos\n const left = document.createElement('span')\n const leftDec = Decoration.widget(position, left, {\n side: -1,\n })\n const right = document.createElement('span')\n const rightDec = Decoration.widget(position, right)\n setTimeout(() => {\n left.contentEditable = 'true'\n right.contentEditable = 'true'\n })\n return DecorationSet.create(state.doc, [leftDec, rightDec])\n }\n return DecorationSet.empty\n },\n },\n })\n\n return inlineNodesCursorPlugin\n})\n\nwithMeta(inlineNodesCursorPlugin, {\n displayName: 'Prose<inlineNodesCursorPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { AddMarkStep, ReplaceStep } from '@milkdown/prose/transform'\nimport { $prose } from '@milkdown/utils'\nimport { hardbreakSchema } from '../node'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to clear the marks around the hardbreak node.\nexport const hardbreakClearMarkPlugin = $prose((ctx) => {\n return new Plugin({\n key: new PluginKey('MILKDOWN_HARDBREAK_MARKS'),\n appendTransaction: (trs, _oldState, newState) => {\n if (!trs.length)\n return\n\n const [tr] = trs\n if (!tr)\n return\n\n const [step] = tr.steps\n\n const isInsertHr = tr.getMeta('hardbreak')\n if (isInsertHr) {\n if (!(step instanceof ReplaceStep))\n return\n\n const { from } = step as unknown as { from: number }\n return newState.tr.setNodeMarkup(from, hardbreakSchema.type(ctx), undefined, [])\n }\n\n const isAddMarkStep = step instanceof AddMarkStep\n if (isAddMarkStep) {\n let _tr = newState.tr\n const { from, to } = step as unknown as { from: number; to: number }\n newState.doc.nodesBetween(from, to, (node, pos) => {\n if (node.type === hardbreakSchema.type(ctx))\n _tr = _tr.setNodeMarkup(pos, hardbreakSchema.type(ctx), undefined, [])\n })\n\n return _tr\n }\n\n return undefined\n },\n })\n})\n\nwithMeta(hardbreakClearMarkPlugin, {\n displayName: 'Prose<hardbreakClearMarkPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $ctx, $prose } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// This slice contains the nodes that within which the hardbreak will be ignored.\nexport const hardbreakFilterNodes = $ctx(['table', 'code_block'], 'hardbreakFilterNodes')\n\nwithMeta(hardbreakFilterNodes, {\n displayName: 'Ctx<hardbreakFilterNodes>',\n group: 'Prose',\n})\n\n/// This plugin is used to filter the hardbreak node.\n/// If the hardbreak is going to be inserted within a node that is in the `hardbreakFilterNodes`, ignore it.\nexport const hardbreakFilterPlugin = $prose((ctx) => {\n const notIn = ctx.get(hardbreakFilterNodes.key)\n return new Plugin({\n key: new PluginKey('MILKDOWN_HARDBREAK_FILTER'),\n filterTransaction: (tr, state) => {\n const isInsertHr = tr.getMeta('hardbreak')\n const [step] = tr.steps\n if (isInsertHr && step) {\n const { from } = step as unknown as { from: number }\n const $from = state.doc.resolve(from)\n let curDepth = $from.depth\n let canApply = true\n while (curDepth > 0) {\n if (notIn.includes($from.node(curDepth).type.name))\n canApply = false\n\n curDepth--\n }\n return canApply\n }\n return true\n },\n })\n})\n\nwithMeta(hardbreakFilterPlugin, {\n displayName: 'Prose<hardbreakFilterPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport type { EditorView } from '@milkdown/prose/view'\nimport { $prose } from '@milkdown/utils'\nimport { headingIdGenerator, headingSchema } from '../node/heading'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to sync the heading id when the heading content changes.\n/// It will use the `headingIdGenerator` to generate the id.\nexport const syncHeadingIdPlugin = $prose((ctx) => {\n const headingIdPluginKey = new PluginKey('MILKDOWN_HEADING_ID')\n\n const updateId = (view: EditorView) => {\n if (view.composing || !view.editable)\n return\n\n const getId = ctx.get(headingIdGenerator.key)\n const tr = view.state.tr.setMeta('addToHistory', false)\n\n let found = false\n\n view.state.doc.descendants((node, pos) => {\n if (node.type === headingSchema.type(ctx)) {\n if (node.textContent.trim().length === 0)\n return\n\n const attrs = node.attrs\n const id = getId(node)\n\n if (attrs.id !== id) {\n found = true\n tr.setMeta(headingIdPluginKey, true).setNodeMarkup(pos, undefined, {\n ...attrs,\n id,\n })\n }\n }\n })\n\n if (found)\n view.dispatch(tr)\n }\n\n return new Plugin({\n key: headingIdPluginKey,\n view: (view) => {\n updateId(view)\n\n return {\n update: (view) => {\n updateId(view)\n },\n }\n },\n })\n})\n\nwithMeta(syncHeadingIdPlugin, {\n displayName: 'Prose<syncHeadingIdPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $prose } from '@milkdown/utils'\nimport type { EditorView } from '@milkdown/prose/view'\nimport { listItemSchema } from '../node/list-item'\n\nimport { orderedListSchema } from '../node/ordered-list'\nimport { bulletListSchema } from '../node'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to keep the label of list item up to date in ordered list.\nexport const syncListOrderPlugin = $prose((ctx) => {\n const syncOrderLabel = (view: EditorView) => {\n if (view.composing || !view.editable)\n return\n\n const orderedListType = orderedListSchema.type(ctx)\n const bulletListType = bulletListSchema.type(ctx)\n const listItemType = listItemSchema.type(ctx)\n const state = view.state\n const handleNodeItem = (attrs: Record<string, any>, index: number): boolean => {\n let changed = false\n const expectedLabel = `${index + 1}.`\n if (attrs.label !== expectedLabel) {\n attrs.label = expectedLabel\n changed = true\n }\n\n return changed\n }\n\n let tr = state.tr\n let needDispatch = false\n state.doc.descendants((node, pos, parent, index) => {\n if (node.type === bulletListType) {\n const base = node.maybeChild(0)\n if (base?.type === listItemType && base.attrs.listType === 'ordered') {\n needDispatch = true\n tr.setNodeMarkup(pos, orderedListType, { spread: 'true' })\n\n node.descendants((child, pos, _parent, index) => {\n if (child.type === listItemType) {\n const attrs = { ...child.attrs }\n const changed = handleNodeItem(attrs, index)\n if (changed)\n tr = tr.setNodeMarkup(pos, undefined, attrs)\n }\n return false\n })\n }\n }\n else if (node.type === listItemType && parent?.type === orderedListType) {\n const attrs = { ...node.attrs }\n let changed = false\n if (attrs.listType !== 'ordered') {\n attrs.listType = 'ordered'\n changed = true\n }\n\n const base = parent?.maybeChild(0)\n if (base)\n changed = handleNodeItem(attrs, index)\n\n if (changed) {\n tr = tr.setNodeMarkup(pos, undefined, attrs)\n needDispatch = true\n }\n }\n })\n\n if (needDispatch)\n view.dispatch(tr.setMeta('addToHistory', false))\n }\n return new Plugin({\n key: new PluginKey('MILKDOWN_KEEP_LIST_ORDER'),\n view: (view) => {\n syncOrderLabel(view)\n return {\n update: (view) => {\n syncOrderLabel(view)\n },\n }\n },\n })\n})\n\nwithMeta(syncListOrderPlugin, {\n displayName: 'Prose<syncListOrderPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport {\n hardbreakClearMarkPlugin,\n hardbreakFilterNodes,\n hardbreakFilterPlugin,\n inlineNodesCursorPlugin,\n inlineSyncConfig,\n inlineSyncPlugin,\n remarkAddOrderInListPlugin,\n remarkHtmlTransformer,\n remarkInlineLinkPlugin,\n remarkLineBreak, remarkMarker,\n syncHeadingIdPlugin,\n syncListOrderPlugin,\n} from '../plugin'\n\n/// @internal\nexport const plugins: MilkdownPlugin[] = [\n inlineSyncConfig,\n inlineSyncPlugin,\n\n hardbreakClearMarkPlugin,\n hardbreakFilterNodes,\n hardbreakFilterPlugin,\n\n inlineNodesCursorPlugin,\n\n remarkAddOrderInListPlugin,\n remarkInlineLinkPlugin,\n remarkLineBreak,\n remarkHtmlTransformer,\n remarkMarker,\n\n syncHeadingIdPlugin,\n syncListOrderPlugin,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { commands, inputrules, keymap, plugins, schema } from './composed'\n\nexport * from './node'\nexport * from './mark'\nexport * from './plugin'\nexport * from './composed'\n\n/// The commonmark preset, includes all the plugins.\nexport const commonmark = [schema, inputrules, commands, keymap, plugins].flat()\n"],"names":["serializeText","state","node","_a","contentArr","n","_","i","Fragment","withMeta","plugin","meta","emphasisAttr","$markAttr","emphasisSchema","$markSchema","ctx","remarkStringifyOptionsCtx","value","mark","markType","toggleEmphasisCommand","$command","toggleMark","emphasisKeymap","$useKeymap","commands","commandsCtx","strongAttr","strongSchema","toggleStrongCommand","strongKeymap","inlineCodeAttr","inlineCodeSchema","toggleInlineCodeCommand","dispatch","selection","tr","from","to","x","name","t","inlineCodeKeymap","linkAttr","linkSchema","dom","expectDomTypeError","url","title","toggleLinkCommand","payload","updateLinkCommand","pos","p","type","start","end","linkMark","TextSelection","docSchema","$node","paragraphAttr","$nodeAttr","paragraphSchema","$nodeSchema","turnIntoTextCommand","setBlockType","paragraphKeymap","headingIndex","defaultHeadingIdGenerator","slugify","headingIdGenerator","$ctx","headingAttr","headingSchema","getId","depth","wrapInHeadingInputRule","$inputRule","textblockTypeInputRule","match","_b","view","editorViewCtx","$from","level","wrapInHeadingCommand","downgradeHeadingCommand","headingKeymap","blockquoteAttr","blockquoteSchema","wrapInBlockquoteInputRule","wrappingInputRule","wrapInBlockquoteCommand","wrapIn","blockquoteKeymap","codeBlockAttr","codeBlockSchema","attr","language","createCodeBlockInputRule","createCodeBlockCommand","updateCodeBlockLanguageCommand","codeBlockKeymap","imageAttr","imageSchema","alt","insertImageCommand","src","updateImageCommand","nodeWithPos","findSelectedNodeOfType","newAttrs","insertImageInputRule","InputRule","matched","hardbreakAttr","hardbreakSchema","insertHardbreakCommand","Selection","hardbreakKeymap","hrAttr","hrSchema","insertHrInputRule","insertHrCommand","paragraph","_tr","sel","bulletListAttr","bulletListSchema","ordered","spread","wrapInBulletListInputRule","wrapInBulletListCommand","bulletListKeymap","orderedListAttr","orderedListSchema","wrapInOrderedListInputRule","wrapInOrderedListCommand","orderedListKeymap","listItemAttr","listItemSchema","label","listType","sinkListItemCommand","sinkListItem","liftListItemCommand","liftListItem","splitListItemCommand","splitListItem","liftFirstListItem","empty","parentItem","liftFirstListItemCommand","listItemKeymap","textSchema","htmlAttr","htmlSchema","span","schema","inputrules","keymap","linkRegexp","keepLinkRegexp","punctuationRegexp","holePlaceholder","ZERO_WIDTH_SPACE","asterisk","asteriskHolder","underline","underlineHolder","keepLink","str","text","mergeSlash","swap","first","last","arr","temp","replacePunctuation","calculatePlaceholder","placeholder","index","left","right","notAWord","calcOffset","offset","find","defaultConfig","prevNode","nextNode","placeholderToMove","symbolsNeedToMove","inlineSyncConfig","getNodeFromSelection","getMarkdown","globalNode","serializer","serializerCtx","doc","addPlaceholder","markdown","config","firstLine","rest","movePlaceholder","pipe","getNewNode","parsed","parserCtx","collectGlobalNodes","globalNodes","nodes","removeGlobalFromText","onlyHTML","getContextByState","newNode","link","runReplacer","key","attrs","placeholderConfig","nextState","context","lastUserInput","inlineSyncPlugin","$prose","requestId","inlineSyncPluginKey","PluginKey","Plugin","_value","_oldState","newState","shouldSyncNode","remarkAddOrderInListPlugin","$remark","tree","visit","child","remarkLineBreak","parent","result","position","remarkInlineLinkPlugin","remarkInlineLinks","isParent","isHTML","flatMapWithDepth","ast","fn","transform","out","nthChild","xs","j","m","item","remarkHtmlTransformer","_index","remarkMarker","file","getMarker","inlineNodesCursorPlugin","lock","inlineNodesCursorPluginKey","e","leftDec","Decoration","rightDec","DecorationSet","hardbreakClearMarkPlugin","trs","step","ReplaceStep","AddMarkStep","hardbreakFilterNodes","hardbreakFilterPlugin","notIn","isInsertHr","curDepth","canApply","syncHeadingIdPlugin","headingIdPluginKey","updateId","found","id","syncListOrderPlugin","syncOrderLabel","orderedListType","bulletListType","listItemType","handleNodeItem","changed","expectedLabel","needDispatch","base","_parent","plugins","commonmark"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hardbreak.d.ts","sourceRoot":"","sources":["../../src/node/hardbreak.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,aAAa,qCAIxB,CAAA;AAQF,eAAO,MAAM,eAAe,oDA4BzB,CAAA;AAaH,eAAO,MAAM,sBAAsB,6CAiBjC,CAAA;AASF,eAAO,MAAM,eAAe,6EAQ1B,CAAA"}
1
+ {"version":3,"file":"hardbreak.d.ts","sourceRoot":"","sources":["../../src/node/hardbreak.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,aAAa,qCAIxB,CAAA;AAQF,eAAO,MAAM,eAAe,oDA4BzB,CAAA;AAaH,eAAO,MAAM,sBAAsB,6CAoBjC,CAAA;AASF,eAAO,MAAM,eAAe,6EAQ1B,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@milkdown/preset-commonmark",
3
3
  "type": "module",
4
- "version": "7.3.0",
4
+ "version": "7.3.1",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -29,23 +29,23 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@sindresorhus/slugify": "^2.2.0",
32
- "remark-inline-links": "^6.0.0",
32
+ "remark-inline-links": "^7.0.0",
33
33
  "tslib": "^2.5.0",
34
34
  "unist-util-visit": "^5.0.0",
35
- "@milkdown/exception": "7.3.0",
36
- "@milkdown/utils": "7.3.0"
35
+ "@milkdown/exception": "7.3.1",
36
+ "@milkdown/utils": "7.3.1"
37
37
  },
38
38
  "devDependencies": {
39
- "@milkdown/core": "7.3.0",
40
- "@milkdown/ctx": "7.3.0",
41
- "@milkdown/prose": "7.3.0",
42
- "@milkdown/transformer": "7.3.0"
39
+ "@milkdown/core": "7.3.1",
40
+ "@milkdown/ctx": "7.3.1",
41
+ "@milkdown/prose": "7.3.1",
42
+ "@milkdown/transformer": "7.3.1"
43
43
  },
44
44
  "nx": {
45
45
  "targets": {
46
46
  "build": {
47
47
  "outputs": [
48
- "packages/preset-commonmark/lib"
48
+ "{projectRoot}/lib"
49
49
  ],
50
50
  "dependsOn": [
51
51
  {
@@ -1,6 +1,6 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
  import { commandsCtx } from '@milkdown/core'
3
- import { Selection } from '@milkdown/prose/state'
3
+ import { Selection, TextSelection } from '@milkdown/prose/state'
4
4
  import { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'
5
5
  import { withMeta } from '../__internal__'
6
6
 
@@ -34,7 +34,7 @@ export const hardbreakSchema = $nodeSchema('hardbreak', ctx => ({
34
34
  parseMarkdown: {
35
35
  match: ({ type }) => type === 'break',
36
36
  runner: (state, node, type) => {
37
- state.addNode(type, { isInline: Boolean(node.data?.isInline) })
37
+ state.addNode(type, { isInline: Boolean((node.data as (undefined | { isInline: boolean }))?.isInline) })
38
38
  },
39
39
  },
40
40
  leafText: () => '\n',
@@ -63,6 +63,9 @@ withMeta(hardbreakSchema.ctx, {
63
63
  /// Command to insert a hardbreak.
64
64
  export const insertHardbreakCommand = $command('InsertHardbreak', ctx => () => (state, dispatch) => {
65
65
  const { selection, tr } = state
66
+ if (!(selection instanceof TextSelection))
67
+ return false
68
+
66
69
  if (selection.empty) {
67
70
  // Transform two successive hardbreak into a new line
68
71
  const node = selection.$from.node()