@milkdown/preset-commonmark 7.3.5 → 7.3.6

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,8 +1,8 @@
1
1
  import { $markAttr as V, $markSchema as U, $command as c, $inputRule as h, $useKeymap as f, $node as Qe, $nodeAttr as N, $nodeSchema as I, $ctx as Xe, $remark as D, $prose as _ } from "@milkdown/utils";
2
- import { remarkStringifyOptionsCtx as Ye, commandsCtx as u, editorViewCtx as wt } from "@milkdown/core";
2
+ import { remarkStringifyOptionsCtx as Ye, commandsCtx as u, editorViewCtx as At } from "@milkdown/core";
3
3
  import { toggleMark as z, setBlockType as K, wrapIn as J } from "@milkdown/prose/commands";
4
- import { Fragment as At } from "@milkdown/prose/model";
5
- import { expectDomTypeError as w } from "@milkdown/exception";
4
+ import { Fragment as wt } from "@milkdown/prose/model";
5
+ import { expectDomTypeError as A } from "@milkdown/exception";
6
6
  import { textblockTypeInputRule as Ze, wrappingInputRule as Q, InputRule as et } from "@milkdown/prose/inputrules";
7
7
  import Ht from "@sindresorhus/slugify";
8
8
  import { TextSelection as X, Selection as tt, PluginKey as E, Plugin as P } from "@milkdown/prose/state";
@@ -21,7 +21,7 @@ function at(t, e) {
21
21
  const a = [];
22
22
  e.content.forEach((s, l, i) => {
23
23
  i !== e.childCount - 1 && a.push(s);
24
- }), t.next(At.fromArray(a));
24
+ }), t.next(wt.fromArray(a));
25
25
  }
26
26
  function n(t, e) {
27
27
  return Object.assign(t, {
@@ -77,6 +77,9 @@ n(ee, {
77
77
  group: "Emphasis"
78
78
  });
79
79
  const nt = h((t) => G(/(?:^|[^*])\*([^*]+)\*$/, R.type(t), {
80
+ getAttr: () => ({
81
+ marker: "*"
82
+ }),
80
83
  updateCaptured: ({ fullMatch: e, start: r }) => e.startsWith("*") ? {} : { fullMatch: e.slice(1), start: r + 1 }
81
84
  }));
82
85
  n(nt, {
@@ -84,6 +87,9 @@ n(nt, {
84
87
  group: "Emphasis"
85
88
  });
86
89
  const ot = h((t) => G(/(?:^|[^_])_([^_]+)_$/, R.type(t), {
90
+ getAttr: () => ({
91
+ marker: "_"
92
+ }),
87
93
  updateCaptured: ({ fullMatch: e, start: r }) => e.startsWith("_") ? {} : { fullMatch: e.slice(1), start: r + 1 }
88
94
  }));
89
95
  n(ot, {
@@ -152,7 +158,11 @@ n(ae, {
152
158
  displayName: "Command<toggleStrongCommand>",
153
159
  group: "Strong"
154
160
  });
155
- const st = h((t) => G(/(?:\*\*|__)([^*_]+)(?:\*\*|__)$/, $.type(t)));
161
+ const st = h((t) => G(/(?:\*\*|__)([^*_]+)(?:\*\*|__)$/, $.type(t), {
162
+ getAttr: (e) => ({
163
+ marker: e[0].startsWith("*") ? "*" : "_"
164
+ })
165
+ }));
156
166
  n(st, {
157
167
  displayName: "InputRule<strong>",
158
168
  group: "Strong"
@@ -256,7 +266,7 @@ const B = U("link", (t) => ({
256
266
  tag: "a[href]",
257
267
  getAttrs: (e) => {
258
268
  if (!(e instanceof HTMLElement))
259
- throw w(e);
269
+ throw A(e);
260
270
  return { href: e.getAttribute("href"), title: e.getAttribute("title") };
261
271
  }
262
272
  }
@@ -334,7 +344,7 @@ n(de, {
334
344
  displayName: "Attr<paragraph>",
335
345
  group: "Paragraph"
336
346
  });
337
- const A = I("paragraph", (t) => ({
347
+ const w = I("paragraph", (t) => ({
338
348
  content: "inline*",
339
349
  group: "block",
340
350
  parseDOM: [{ tag: "p" }],
@@ -352,15 +362,15 @@ const A = I("paragraph", (t) => ({
352
362
  }
353
363
  }
354
364
  }));
355
- n(A.node, {
365
+ n(w.node, {
356
366
  displayName: "NodeSchema<paragraph>",
357
367
  group: "Paragraph"
358
368
  });
359
- n(A.ctx, {
369
+ n(w.ctx, {
360
370
  displayName: "NodeSchemaCtx<paragraph>",
361
371
  group: "Paragraph"
362
372
  });
363
- const me = c("TurnIntoText", (t) => () => K(A.type(t)));
373
+ const me = c("TurnIntoText", (t) => () => K(w.type(t)));
364
374
  n(me, {
365
375
  displayName: "Command<turnIntoTextCommand>",
366
376
  group: "Paragraph"
@@ -414,7 +424,7 @@ const H = I("heading", (t) => {
414
424
  tag: `h${r}`,
415
425
  getAttrs: (a) => {
416
426
  if (!(a instanceof HTMLElement))
417
- throw w(a);
427
+ throw A(a);
418
428
  return { level: r, id: a.id };
419
429
  }
420
430
  })),
@@ -451,7 +461,7 @@ n(H.ctx, {
451
461
  });
452
462
  const pt = h((t) => Ze(/^(?<hashes>#+)\s$/, H.type(t), (e) => {
453
463
  var l, i;
454
- const r = ((i = (l = e.groups) == null ? void 0 : l.hashes) == null ? void 0 : i.length) || 0, a = t.get(wt), { $from: o } = a.state.selection, s = o.node();
464
+ const r = ((i = (l = e.groups) == null ? void 0 : l.hashes) == null ? void 0 : i.length) || 0, a = t.get(At), { $from: o } = a.state.selection, s = o.node();
455
465
  if (s.type.name === "heading") {
456
466
  let d = Number(s.attrs.level) + Number(r);
457
467
  return d > 6 && (d = 6), { level: d };
@@ -462,7 +472,7 @@ n(pt, {
462
472
  displayName: "InputRule<wrapInHeadingInputRule>",
463
473
  group: "Heading"
464
474
  });
465
- const L = c("WrapInHeading", (t) => (e) => (e ?? (e = 1), e < 1 ? K(A.type(t)) : K(H.type(t), { level: e })));
475
+ const L = c("WrapInHeading", (t) => (e) => (e ?? (e = 1), e < 1 ? K(w.type(t)) : K(H.type(t), { level: e })));
466
476
  n(L, {
467
477
  displayName: "Command<wrapInHeadingCommand>",
468
478
  group: "Heading"
@@ -477,7 +487,7 @@ const ue = c("DowngradeHeading", (t) => () => (e, r, a) => {
477
487
  ...s.attrs,
478
488
  level: l
479
489
  })
480
- ), !0) : K(A.type(t))(e, r, a);
490
+ ), !0) : K(w.type(t))(e, r, a);
481
491
  });
482
492
  n(ue, {
483
493
  displayName: "Command<downgradeHeadingCommand>",
@@ -626,7 +636,7 @@ const W = I("code_block", (t) => ({
626
636
  preserveWhitespace: "full",
627
637
  getAttrs: (e) => {
628
638
  if (!(e instanceof HTMLElement))
629
- throw w(e);
639
+ throw A(e);
630
640
  return { language: e.dataset.language };
631
641
  }
632
642
  }
@@ -728,7 +738,7 @@ const v = I("image", (t) => ({
728
738
  tag: "img[src]",
729
739
  getAttrs: (e) => {
730
740
  if (!(e instanceof HTMLElement))
731
- throw w(e);
741
+ throw A(e);
732
742
  return {
733
743
  src: e.getAttribute("src") || "",
734
744
  alt: e.getAttribute("alt") || "",
@@ -922,7 +932,7 @@ n(kt, {
922
932
  const ht = c("InsertHr", (t) => () => (e, r) => {
923
933
  if (!r)
924
934
  return !0;
925
- const a = A.node.type(t).create(), { tr: o, selection: s } = e, { from: l } = s, i = F.type(t).create();
935
+ const a = w.node.type(t).create(), { tr: o, selection: s } = e, { from: l } = s, i = F.type(t).create();
926
936
  if (!i)
927
937
  return !0;
928
938
  const d = o.replaceSelectionWith(i).insert(l, a), m = tt.findFrom(d.doc.resolve(l), 1, !0);
@@ -950,7 +960,7 @@ const O = I("bullet_list", (t) => ({
950
960
  tag: "ul",
951
961
  getAttrs: (e) => {
952
962
  if (!(e instanceof HTMLElement))
953
- throw w(e);
963
+ throw A(e);
954
964
  return {
955
965
  spread: e.dataset.spread
956
966
  };
@@ -992,25 +1002,25 @@ n(ft, {
992
1002
  displayName: "InputRule<wrapInBulletListInputRule>",
993
1003
  group: "BulletList"
994
1004
  });
995
- const we = c("WrapInBulletList", (t) => () => J(O.type(t)));
996
- n(we, {
1005
+ const Ae = c("WrapInBulletList", (t) => () => J(O.type(t)));
1006
+ n(Ae, {
997
1007
  displayName: "Command<wrapInBulletListCommand>",
998
1008
  group: "BulletList"
999
1009
  });
1000
- const Ae = f("bulletListKeymap", {
1010
+ const we = f("bulletListKeymap", {
1001
1011
  WrapInBulletList: {
1002
1012
  shortcuts: "Mod-Alt-8",
1003
1013
  command: (t) => {
1004
1014
  const e = t.get(u);
1005
- return () => e.call(we.key);
1015
+ return () => e.call(Ae.key);
1006
1016
  }
1007
1017
  }
1008
1018
  });
1009
- n(Ae.ctx, {
1019
+ n(we.ctx, {
1010
1020
  displayName: "KeymapCtx<bulletListKeymap>",
1011
1021
  group: "BulletList"
1012
1022
  });
1013
- n(Ae.shortcuts, {
1023
+ n(we.shortcuts, {
1014
1024
  displayName: "Keymap<bulletListKeymap>",
1015
1025
  group: "BulletList"
1016
1026
  });
@@ -1035,7 +1045,7 @@ const T = I("ordered_list", (t) => ({
1035
1045
  tag: "ol",
1036
1046
  getAttrs: (e) => {
1037
1047
  if (!(e instanceof HTMLElement))
1038
- throw w(e);
1048
+ throw A(e);
1039
1049
  return {
1040
1050
  spread: e.dataset.spread,
1041
1051
  order: e.hasAttribute("start") ? Number(e.getAttribute("start")) : 1
@@ -1113,7 +1123,7 @@ n(ve, {
1113
1123
  });
1114
1124
  const M = I("list_item", (t) => ({
1115
1125
  group: "listItem",
1116
- content: "paragraph block*",
1126
+ content: "block+",
1117
1127
  attrs: {
1118
1128
  label: {
1119
1129
  default: "•"
@@ -1131,7 +1141,7 @@ const M = I("list_item", (t) => ({
1131
1141
  tag: "li",
1132
1142
  getAttrs: (e) => {
1133
1143
  if (!(e instanceof HTMLElement))
1134
- throw w(e);
1144
+ throw A(e);
1135
1145
  return {
1136
1146
  label: e.dataset.label,
1137
1147
  listType: e.dataset["list-type"],
@@ -1177,7 +1187,7 @@ n(Oe, {
1177
1187
  displayName: "Command<sinkListItemCommand>",
1178
1188
  group: "ListItem"
1179
1189
  });
1180
- const Te = c("SplitListItem", (t) => () => rt(M.type(t)));
1190
+ const Te = c("LiftListItem", (t) => () => rt(M.type(t)));
1181
1191
  n(Te, {
1182
1192
  displayName: "Command<liftListItemCommand>",
1183
1193
  group: "ListItem"
@@ -1313,7 +1323,7 @@ n(Pe.ctx, {
1313
1323
  const qt = [
1314
1324
  mt,
1315
1325
  de,
1316
- A,
1326
+ w,
1317
1327
  j,
1318
1328
  ce,
1319
1329
  H,
@@ -1367,7 +1377,7 @@ const qt = [
1367
1377
  gt,
1368
1378
  yt,
1369
1379
  Be,
1370
- we,
1380
+ Ae,
1371
1381
  Oe,
1372
1382
  Ke,
1373
1383
  Te,
@@ -1384,7 +1394,7 @@ const qt = [
1384
1394
  ge,
1385
1395
  _e,
1386
1396
  Re,
1387
- Ae,
1397
+ we,
1388
1398
  pe,
1389
1399
  te,
1390
1400
  le,
@@ -1595,7 +1605,7 @@ n(bt, {
1595
1605
  });
1596
1606
  const Lt = _((t) => {
1597
1607
  const e = new E("MILKDOWN_HEADING_ID"), r = (a) => {
1598
- if (a.composing || !a.editable)
1608
+ if (a.composing)
1599
1609
  return;
1600
1610
  const o = t.get(j.key), s = a.state.tr.setMeta("addToHistory", !1);
1601
1611
  let l = !1;
@@ -1682,7 +1692,7 @@ export {
1682
1692
  he as blockquoteKeymap,
1683
1693
  q as blockquoteSchema,
1684
1694
  Se as bulletListAttr,
1685
- Ae as bulletListKeymap,
1695
+ we as bulletListKeymap,
1686
1696
  O as bulletListSchema,
1687
1697
  fe as codeBlockAttr,
1688
1698
  Ie as codeBlockKeymap,
@@ -1739,7 +1749,7 @@ export {
1739
1749
  T as orderedListSchema,
1740
1750
  de as paragraphAttr,
1741
1751
  pe as paragraphKeymap,
1742
- A as paragraphSchema,
1752
+ w as paragraphSchema,
1743
1753
  Jt as plugins,
1744
1754
  $e as remarkAddOrderInListPlugin,
1745
1755
  Fe as remarkHtmlTransformer,
@@ -1766,7 +1776,7 @@ export {
1766
1776
  dt as updateLinkCommand,
1767
1777
  ke as wrapInBlockquoteCommand,
1768
1778
  ct as wrapInBlockquoteInputRule,
1769
- we as wrapInBulletListCommand,
1779
+ Ae as wrapInBulletListCommand,
1770
1780
  ft as wrapInBulletListInputRule,
1771
1781
  L as wrapInHeadingCommand,
1772
1782
  pt as wrapInHeadingInputRule,
@@ -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/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 function 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 function withMeta<T extends MilkdownPlugin>(plugin: T, meta: Partial<Meta> & Pick<Meta, 'displayName'>): 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, $inputRule, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { markRule } from '@milkdown/prose'\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/// Input rule for use `*` to create emphasis mark.\nexport const emphasisStarInputRule = $inputRule((ctx) => {\n return markRule(/(?:^|[^*])\\*([^*]+)\\*$/, emphasisSchema.type(ctx), {\n updateCaptured: ({ fullMatch, start }) =>\n !fullMatch.startsWith('*') ? { fullMatch: fullMatch.slice(1), start: start + 1 } : {},\n })\n})\n\nwithMeta(emphasisStarInputRule, {\n displayName: 'InputRule<emphasis>|Star',\n group: 'Emphasis',\n})\n\n/// Input rule for use `_` to create emphasis mark.\nexport const emphasisUnderscoreInputRule = $inputRule((ctx) => {\n return markRule(/(?:^|[^_])_([^_]+)_$/, emphasisSchema.type(ctx), {\n updateCaptured: ({ fullMatch, start }) =>\n !fullMatch.startsWith('_') ? { fullMatch: fullMatch.slice(1), start: start + 1 } : {},\n })\n})\n\nwithMeta(emphasisUnderscoreInputRule, {\n displayName: 'InputRule<emphasis>|Underscore',\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, $inputRule, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { markRule } from '@milkdown/prose'\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/// A input rule that will capture the strong mark.\nexport const strongInputRule = $inputRule((ctx) => {\n return markRule(/(?:\\*\\*|__)([^*_]+)(?:\\*\\*|__)$/, strongSchema.type(ctx))\n})\n\nwithMeta(strongInputRule, {\n displayName: 'InputRule<strong>',\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, $inputRule, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { markRule } from '@milkdown/prose'\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/// Input rule for create inlineCode mark.\nexport const inlineCodeInputRule = $inputRule((ctx) => {\n return markRule(/(?:\\`)([^\\`]+)(?:\\`)$/, inlineCodeSchema.type(ctx))\n})\n\nwithMeta(inlineCodeInputRule, {\n displayName: 'InputRule<inlineCodeInputRule>',\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 interface 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\nfunction defaultHeadingIdGenerator(node: Node) {\n return slugify(node.textContent)\n}\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 interface 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)$/,\n (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\nfunction liftFirstListItem(ctx: Ctx): Command {\n return (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\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,\n 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'\nimport { emphasisStarInputRule, emphasisUnderscoreInputRule, inlineCodeInputRule, strongInputRule } from '../mark'\n\n/// @internal\nexport const inputRules: MilkdownPlugin[] = [\n wrapInBlockquoteInputRule,\n wrapInBulletListInputRule,\n wrapInOrderedListInputRule,\n createCodeBlockInputRule,\n insertHrInputRule,\n wrapInHeadingInputRule,\n].flat()\n\n/// @internal\nexport const markInputRules: MilkdownPlugin[] = [\n emphasisStarInputRule,\n emphasisUnderscoreInputRule,\n inlineCodeInputRule,\n strongInputRule,\n]\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. */\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 remarkAddOrderInListPlugin,\n remarkHtmlTransformer,\n remarkInlineLinkPlugin,\n remarkLineBreak,\n remarkMarker,\n syncHeadingIdPlugin,\n syncListOrderPlugin,\n} from '../plugin'\n\n/// @internal\nexport const plugins: MilkdownPlugin[] = [\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 type { MilkdownPlugin } from '@milkdown/ctx'\nimport { commands, inputRules, keymap, markInputRules, 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: MilkdownPlugin[] = [schema, inputRules, markInputRules, commands, keymap, plugins].flat()\n"],"names":["serializeText","state","node","_a","contentArr","n","_","Fragment","withMeta","plugin","meta","emphasisAttr","$markAttr","emphasisSchema","$markSchema","ctx","remarkStringifyOptionsCtx","value","mark","markType","toggleEmphasisCommand","$command","toggleMark","emphasisStarInputRule","$inputRule","markRule","fullMatch","start","emphasisUnderscoreInputRule","emphasisKeymap","$useKeymap","commands","commandsCtx","strongAttr","strongSchema","toggleStrongCommand","strongInputRule","strongKeymap","inlineCodeAttr","inlineCodeSchema","toggleInlineCodeCommand","dispatch","selection","tr","from","to","x","name","t","inlineCodeInputRule","inlineCodeKeymap","linkAttr","linkSchema","dom","expectDomTypeError","url","title","toggleLinkCommand","payload","updateLinkCommand","pos","p","type","end","linkMark","TextSelection","docSchema","$node","paragraphAttr","$nodeAttr","paragraphSchema","$nodeSchema","turnIntoTextCommand","setBlockType","paragraphKeymap","headingIndex","i","defaultHeadingIdGenerator","slugify","headingIdGenerator","$ctx","headingAttr","headingSchema","getId","depth","wrapInHeadingInputRule","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","markInputRules","keymap","remarkAddOrderInListPlugin","$remark","tree","visit","child","index","remarkLineBreak","find","parent","result","position","remarkInlineLinkPlugin","remarkInlineLinks","isParent","isHTML","flatMapWithDepth","ast","fn","transform","out","nthChild","xs","j","m","item","remarkHtmlTransformer","_index","remarkMarker","file","getMarker","inlineNodesCursorPlugin","$prose","lock","inlineNodesCursorPluginKey","PluginKey","Plugin","left","right","e","leftDec","Decoration","rightDec","DecorationSet","hardbreakClearMarkPlugin","trs","_oldState","newState","step","ReplaceStep","AddMarkStep","hardbreakFilterNodes","hardbreakFilterPlugin","notIn","isInsertHr","curDepth","canApply","syncHeadingIdPlugin","headingIdPluginKey","updateId","found","attrs","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/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 function 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 function withMeta<T extends MilkdownPlugin>(plugin: T, meta: Partial<Meta> & Pick<Meta, 'displayName'>): 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, $inputRule, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { markRule } from '@milkdown/prose'\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/// Input rule for use `*` to create emphasis mark.\nexport const emphasisStarInputRule = $inputRule((ctx) => {\n return markRule(/(?:^|[^*])\\*([^*]+)\\*$/, emphasisSchema.type(ctx), {\n getAttr: () => ({\n marker: '*',\n }),\n updateCaptured: ({ fullMatch, start }) =>\n !fullMatch.startsWith('*') ? { fullMatch: fullMatch.slice(1), start: start + 1 } : {},\n })\n})\n\nwithMeta(emphasisStarInputRule, {\n displayName: 'InputRule<emphasis>|Star',\n group: 'Emphasis',\n})\n\n/// Input rule for use `_` to create emphasis mark.\nexport const emphasisUnderscoreInputRule = $inputRule((ctx) => {\n return markRule(/(?:^|[^_])_([^_]+)_$/, emphasisSchema.type(ctx), {\n getAttr: () => ({\n marker: '_',\n }),\n updateCaptured: ({ fullMatch, start }) =>\n !fullMatch.startsWith('_') ? { fullMatch: fullMatch.slice(1), start: start + 1 } : {},\n })\n})\n\nwithMeta(emphasisUnderscoreInputRule, {\n displayName: 'InputRule<emphasis>|Underscore',\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, $inputRule, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { markRule } from '@milkdown/prose'\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/// A input rule that will capture the strong mark.\nexport const strongInputRule = $inputRule((ctx) => {\n return markRule(/(?:\\*\\*|__)([^*_]+)(?:\\*\\*|__)$/, strongSchema.type(ctx), {\n getAttr: (match) => {\n return {\n marker: match[0].startsWith('*') ? '*' : '_',\n }\n },\n })\n})\n\nwithMeta(strongInputRule, {\n displayName: 'InputRule<strong>',\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, $inputRule, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { markRule } from '@milkdown/prose'\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/// Input rule for create inlineCode mark.\nexport const inlineCodeInputRule = $inputRule((ctx) => {\n return markRule(/(?:\\`)([^\\`]+)(?:\\`)$/, inlineCodeSchema.type(ctx))\n})\n\nwithMeta(inlineCodeInputRule, {\n displayName: 'InputRule<inlineCodeInputRule>',\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 interface 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\nfunction defaultHeadingIdGenerator(node: Node) {\n return slugify(node.textContent)\n}\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 interface 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)$/,\n (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: '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('LiftListItem', 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\nfunction liftFirstListItem(ctx: Ctx): Command {\n return (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\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,\n 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'\nimport { emphasisStarInputRule, emphasisUnderscoreInputRule, inlineCodeInputRule, strongInputRule } from '../mark'\n\n/// @internal\nexport const inputRules: MilkdownPlugin[] = [\n wrapInBlockquoteInputRule,\n wrapInBulletListInputRule,\n wrapInOrderedListInputRule,\n createCodeBlockInputRule,\n insertHrInputRule,\n wrapInHeadingInputRule,\n].flat()\n\n/// @internal\nexport const markInputRules: MilkdownPlugin[] = [\n emphasisStarInputRule,\n emphasisUnderscoreInputRule,\n inlineCodeInputRule,\n strongInputRule,\n]\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. */\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)\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 remarkAddOrderInListPlugin,\n remarkHtmlTransformer,\n remarkInlineLinkPlugin,\n remarkLineBreak,\n remarkMarker,\n syncHeadingIdPlugin,\n syncListOrderPlugin,\n} from '../plugin'\n\n/// @internal\nexport const plugins: MilkdownPlugin[] = [\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 type { MilkdownPlugin } from '@milkdown/ctx'\nimport { commands, inputRules, keymap, markInputRules, 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: MilkdownPlugin[] = [schema, inputRules, markInputRules, commands, keymap, plugins].flat()\n"],"names":["serializeText","state","node","_a","contentArr","n","_","Fragment","withMeta","plugin","meta","emphasisAttr","$markAttr","emphasisSchema","$markSchema","ctx","remarkStringifyOptionsCtx","value","mark","markType","toggleEmphasisCommand","$command","toggleMark","emphasisStarInputRule","$inputRule","markRule","fullMatch","start","emphasisUnderscoreInputRule","emphasisKeymap","$useKeymap","commands","commandsCtx","strongAttr","strongSchema","toggleStrongCommand","strongInputRule","match","strongKeymap","inlineCodeAttr","inlineCodeSchema","toggleInlineCodeCommand","dispatch","selection","tr","from","to","x","name","t","inlineCodeInputRule","inlineCodeKeymap","linkAttr","linkSchema","dom","expectDomTypeError","url","title","toggleLinkCommand","payload","updateLinkCommand","pos","p","type","end","linkMark","TextSelection","docSchema","$node","paragraphAttr","$nodeAttr","paragraphSchema","$nodeSchema","turnIntoTextCommand","setBlockType","paragraphKeymap","headingIndex","i","defaultHeadingIdGenerator","slugify","headingIdGenerator","$ctx","headingAttr","headingSchema","getId","depth","wrapInHeadingInputRule","textblockTypeInputRule","_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","markInputRules","keymap","remarkAddOrderInListPlugin","$remark","tree","visit","child","index","remarkLineBreak","find","parent","result","position","remarkInlineLinkPlugin","remarkInlineLinks","isParent","isHTML","flatMapWithDepth","ast","fn","transform","out","nthChild","xs","j","m","item","remarkHtmlTransformer","_index","remarkMarker","file","getMarker","inlineNodesCursorPlugin","$prose","lock","inlineNodesCursorPluginKey","PluginKey","Plugin","left","right","e","leftDec","Decoration","rightDec","DecorationSet","hardbreakClearMarkPlugin","trs","_oldState","newState","step","ReplaceStep","AddMarkStep","hardbreakFilterNodes","hardbreakFilterPlugin","notIn","isInsertHr","curDepth","canApply","syncHeadingIdPlugin","headingIdPluginKey","updateId","found","attrs","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":"emphasis.d.ts","sourceRoot":"","sources":["../../src/mark/emphasis.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,YAAY,qCAAwB,CAAA;AAQjD,eAAO,MAAM,cAAc,mDA4BxB,CAAA;AAaH,eAAO,MAAM,qBAAqB,6CAEhC,CAAA;AAQF,eAAO,MAAM,qBAAqB,sCAKhC,CAAA;AAQF,eAAO,MAAM,2BAA2B,sCAKtC,CAAA;AASF,eAAO,MAAM,cAAc,2EAQzB,CAAA"}
1
+ {"version":3,"file":"emphasis.d.ts","sourceRoot":"","sources":["../../src/mark/emphasis.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,YAAY,qCAAwB,CAAA;AAQjD,eAAO,MAAM,cAAc,mDA4BxB,CAAA;AAaH,eAAO,MAAM,qBAAqB,6CAEhC,CAAA;AAQF,eAAO,MAAM,qBAAqB,sCAQhC,CAAA;AAQF,eAAO,MAAM,2BAA2B,sCAQtC,CAAA;AASF,eAAO,MAAM,cAAc,2EAQzB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"strong.d.ts","sourceRoot":"","sources":["../../src/mark/strong.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,UAAU,qCAAsB,CAAA;AAQ7C,eAAO,MAAM,YAAY,iDA4BtB,CAAA;AAaH,eAAO,MAAM,mBAAmB,6CAE9B,CAAA;AAQF,eAAO,MAAM,eAAe,sCAE1B,CAAA;AASF,eAAO,MAAM,YAAY,qEAQvB,CAAA"}
1
+ {"version":3,"file":"strong.d.ts","sourceRoot":"","sources":["../../src/mark/strong.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,UAAU,qCAAsB,CAAA;AAQ7C,eAAO,MAAM,YAAY,iDA4BtB,CAAA;AAaH,eAAO,MAAM,mBAAmB,6CAE9B,CAAA;AAQF,eAAO,MAAM,eAAe,sCAQ1B,CAAA;AASF,eAAO,MAAM,YAAY,qEAQvB,CAAA"}
@@ -4,5 +4,5 @@ export declare const sinkListItemCommand: import("@milkdown/utils").$Command<unk
4
4
  export declare const liftListItemCommand: import("@milkdown/utils").$Command<unknown>;
5
5
  export declare const splitListItemCommand: import("@milkdown/utils").$Command<unknown>;
6
6
  export declare const liftFirstListItemCommand: import("@milkdown/utils").$Command<unknown>;
7
- export declare const listItemKeymap: import("@milkdown/utils").$UserKeymap<"listItemKeymap", "SinkListItem" | "LiftFirstListItem" | "NextListItem" | "LiftListItem">;
7
+ export declare const listItemKeymap: import("@milkdown/utils").$UserKeymap<"listItemKeymap", "SinkListItem" | "LiftListItem" | "LiftFirstListItem" | "NextListItem">;
8
8
  //# sourceMappingURL=list-item.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-item.d.ts","sourceRoot":"","sources":["../../src/node/list-item.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,qCAAwB,CAAA;AAQjD,eAAO,MAAM,cAAc,oDA2DxB,CAAA;AAwBH,eAAO,MAAM,mBAAmB,6CAAgF,CAAA;AAmBhH,eAAO,MAAM,mBAAmB,6CAAiF,CAAA;AAoBjH,eAAO,MAAM,oBAAoB,6CAAkF,CAAA;AAuCnH,eAAO,MAAM,wBAAwB,6CAAqE,CAAA;AAW1G,eAAO,MAAM,cAAc,iIA6BzB,CAAA"}
1
+ {"version":3,"file":"list-item.d.ts","sourceRoot":"","sources":["../../src/node/list-item.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,qCAAwB,CAAA;AAQjD,eAAO,MAAM,cAAc,oDA2DxB,CAAA;AAwBH,eAAO,MAAM,mBAAmB,6CAAgF,CAAA;AAmBhH,eAAO,MAAM,mBAAmB,6CAAgF,CAAA;AAoBhH,eAAO,MAAM,oBAAoB,6CAAkF,CAAA;AAuCnH,eAAO,MAAM,wBAAwB,6CAAqE,CAAA;AAW1G,eAAO,MAAM,cAAc,iIA6BzB,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.5",
4
+ "version": "7.3.6",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -37,14 +37,14 @@
37
37
  "remark-inline-links": "^7.0.0",
38
38
  "tslib": "^2.5.0",
39
39
  "unist-util-visit": "^5.0.0",
40
- "@milkdown/exception": "7.3.5",
41
- "@milkdown/utils": "7.3.5"
40
+ "@milkdown/exception": "7.3.6",
41
+ "@milkdown/utils": "7.3.6"
42
42
  },
43
43
  "devDependencies": {
44
- "@milkdown/core": "7.3.5",
45
- "@milkdown/ctx": "7.3.5",
46
- "@milkdown/prose": "7.3.5",
47
- "@milkdown/transformer": "7.3.5"
44
+ "@milkdown/ctx": "7.3.6",
45
+ "@milkdown/prose": "7.3.6",
46
+ "@milkdown/core": "7.3.6",
47
+ "@milkdown/transformer": "7.3.6"
48
48
  },
49
49
  "nx": {
50
50
  "targets": {
@@ -67,6 +67,9 @@ withMeta(toggleEmphasisCommand, {
67
67
  /// Input rule for use `*` to create emphasis mark.
68
68
  export const emphasisStarInputRule = $inputRule((ctx) => {
69
69
  return markRule(/(?:^|[^*])\*([^*]+)\*$/, emphasisSchema.type(ctx), {
70
+ getAttr: () => ({
71
+ marker: '*',
72
+ }),
70
73
  updateCaptured: ({ fullMatch, start }) =>
71
74
  !fullMatch.startsWith('*') ? { fullMatch: fullMatch.slice(1), start: start + 1 } : {},
72
75
  })
@@ -80,6 +83,9 @@ withMeta(emphasisStarInputRule, {
80
83
  /// Input rule for use `_` to create emphasis mark.
81
84
  export const emphasisUnderscoreInputRule = $inputRule((ctx) => {
82
85
  return markRule(/(?:^|[^_])_([^_]+)_$/, emphasisSchema.type(ctx), {
86
+ getAttr: () => ({
87
+ marker: '_',
88
+ }),
83
89
  updateCaptured: ({ fullMatch, start }) =>
84
90
  !fullMatch.startsWith('_') ? { fullMatch: fullMatch.slice(1), start: start + 1 } : {},
85
91
  })
@@ -66,7 +66,13 @@ withMeta(toggleStrongCommand, {
66
66
 
67
67
  /// A input rule that will capture the strong mark.
68
68
  export const strongInputRule = $inputRule((ctx) => {
69
- return markRule(/(?:\*\*|__)([^*_]+)(?:\*\*|__)$/, strongSchema.type(ctx))
69
+ return markRule(/(?:\*\*|__)([^*_]+)(?:\*\*|__)$/, strongSchema.type(ctx), {
70
+ getAttr: (match) => {
71
+ return {
72
+ marker: match[0].startsWith('*') ? '*' : '_',
73
+ }
74
+ },
75
+ })
70
76
  })
71
77
 
72
78
  withMeta(strongInputRule, {
@@ -18,7 +18,7 @@ withMeta(listItemAttr, {
18
18
  /// Schema for list item node.
19
19
  export const listItemSchema = $nodeSchema('list_item', ctx => ({
20
20
  group: 'listItem',
21
- content: 'paragraph block*',
21
+ content: 'block+',
22
22
  attrs: {
23
23
  label: {
24
24
  default: '•',
@@ -118,7 +118,7 @@ withMeta(sinkListItemCommand, {
118
118
  /// * List item 1
119
119
  /// * List item 2
120
120
  /// ```
121
- export const liftListItemCommand = $command('SplitListItem', ctx => () => liftListItem(listItemSchema.type(ctx)))
121
+ export const liftListItemCommand = $command('LiftListItem', ctx => () => liftListItem(listItemSchema.type(ctx)))
122
122
 
123
123
  withMeta(liftListItemCommand, {
124
124
  displayName: 'Command<liftListItemCommand>',
@@ -11,7 +11,7 @@ export const syncHeadingIdPlugin = $prose((ctx) => {
11
11
  const headingIdPluginKey = new PluginKey('MILKDOWN_HEADING_ID')
12
12
 
13
13
  const updateId = (view: EditorView) => {
14
- if (view.composing || !view.editable)
14
+ if (view.composing)
15
15
  return
16
16
 
17
17
  const getId = ctx.get(headingIdGenerator.key)