@milkdown/preset-commonmark 6.5.4 → 7.0.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/lib/composed/commands.d.ts +3 -0
  2. package/lib/composed/commands.d.ts.map +1 -0
  3. package/lib/composed/index.d.ts +6 -0
  4. package/lib/composed/index.d.ts.map +1 -0
  5. package/lib/composed/inputrules.d.ts +3 -0
  6. package/lib/composed/inputrules.d.ts.map +1 -0
  7. package/lib/composed/keymap.d.ts +3 -0
  8. package/lib/composed/keymap.d.ts.map +1 -0
  9. package/lib/composed/plugins.d.ts +3 -0
  10. package/lib/composed/plugins.d.ts.map +1 -0
  11. package/lib/composed/schema.d.ts +3 -0
  12. package/lib/composed/schema.d.ts.map +1 -0
  13. package/lib/index.d.ts +4 -29
  14. package/lib/index.d.ts.map +1 -1
  15. package/lib/index.es.js +1099 -1386
  16. package/lib/index.es.js.map +1 -1
  17. package/lib/mark/emphasis.d.ts +5 -0
  18. package/lib/mark/emphasis.d.ts.map +1 -0
  19. package/lib/mark/index.d.ts +3 -4
  20. package/lib/mark/index.d.ts.map +1 -1
  21. package/lib/mark/inline-code.d.ts +5 -0
  22. package/lib/mark/inline-code.d.ts.map +1 -0
  23. package/lib/mark/link.d.ts +8 -10
  24. package/lib/mark/link.d.ts.map +1 -1
  25. package/lib/mark/strong.d.ts +4 -2
  26. package/lib/mark/strong.d.ts.map +1 -1
  27. package/lib/node/blockquote.d.ts +6 -2
  28. package/lib/node/blockquote.d.ts.map +1 -1
  29. package/lib/node/bullet-list.d.ts +5 -2
  30. package/lib/node/bullet-list.d.ts.map +1 -1
  31. package/lib/node/code-block.d.ts +10 -0
  32. package/lib/node/code-block.d.ts.map +1 -0
  33. package/lib/node/doc.d.ts +1 -1
  34. package/lib/node/doc.d.ts.map +1 -1
  35. package/lib/node/hardbreak.d.ts +4 -6
  36. package/lib/node/hardbreak.d.ts.map +1 -1
  37. package/lib/node/heading.d.ts +7 -12
  38. package/lib/node/heading.d.ts.map +1 -1
  39. package/lib/node/hr.d.ts +4 -2
  40. package/lib/node/hr.d.ts.map +1 -1
  41. package/lib/node/image.d.ts +10 -11
  42. package/lib/node/image.d.ts.map +1 -1
  43. package/lib/node/index.d.ts +6 -8
  44. package/lib/node/index.d.ts.map +1 -1
  45. package/lib/node/list-item.d.ts +6 -7
  46. package/lib/node/list-item.d.ts.map +1 -1
  47. package/lib/node/ordered-list.d.ts +5 -2
  48. package/lib/node/ordered-list.d.ts.map +1 -1
  49. package/lib/node/paragraph.d.ts +4 -2
  50. package/lib/node/paragraph.d.ts.map +1 -1
  51. package/lib/node/text.d.ts +1 -1
  52. package/lib/node/text.d.ts.map +1 -1
  53. package/lib/plugin/hardbreak-clear-mark-plugin.d.ts +2 -0
  54. package/lib/plugin/hardbreak-clear-mark-plugin.d.ts.map +1 -0
  55. package/lib/plugin/hardbreak-filter-plugin.d.ts +3 -0
  56. package/lib/plugin/hardbreak-filter-plugin.d.ts.map +1 -0
  57. package/lib/plugin/index.d.ts +9 -3
  58. package/lib/plugin/index.d.ts.map +1 -1
  59. package/lib/plugin/inline-nodes-cursor-plugin.d.ts +2 -0
  60. package/lib/plugin/inline-nodes-cursor-plugin.d.ts.map +1 -0
  61. package/lib/plugin/{inline-sync → inline-sync-plugin}/config.d.ts +2 -2
  62. package/lib/plugin/inline-sync-plugin/config.d.ts.map +1 -0
  63. package/lib/plugin/{inline-sync → inline-sync-plugin}/context.d.ts +1 -2
  64. package/lib/plugin/inline-sync-plugin/context.d.ts.map +1 -0
  65. package/lib/plugin/inline-sync-plugin/index.d.ts +3 -0
  66. package/lib/plugin/inline-sync-plugin/index.d.ts.map +1 -0
  67. package/lib/plugin/inline-sync-plugin/inline-sync-plugin.d.ts +2 -0
  68. package/lib/plugin/inline-sync-plugin/inline-sync-plugin.d.ts.map +1 -0
  69. package/lib/plugin/{inline-sync → inline-sync-plugin}/regexp.d.ts +0 -0
  70. package/lib/plugin/inline-sync-plugin/regexp.d.ts.map +1 -0
  71. package/lib/plugin/{inline-sync → inline-sync-plugin}/replacer.d.ts +1 -1
  72. package/lib/plugin/inline-sync-plugin/replacer.d.ts.map +1 -0
  73. package/lib/plugin/{inline-sync → inline-sync-plugin}/utils.d.ts +0 -0
  74. package/lib/plugin/inline-sync-plugin/utils.d.ts.map +1 -0
  75. package/lib/plugin/remark-add-order-in-list-plugin.d.ts +2 -0
  76. package/lib/plugin/remark-add-order-in-list-plugin.d.ts.map +1 -0
  77. package/lib/plugin/remark-inline-link-plugin.d.ts +2 -0
  78. package/lib/plugin/remark-inline-link-plugin.d.ts.map +1 -0
  79. package/lib/plugin/remark-line-break.d.ts +2 -0
  80. package/lib/plugin/remark-line-break.d.ts.map +1 -0
  81. package/lib/plugin/sync-heading-id-plugin.d.ts +2 -0
  82. package/lib/plugin/sync-heading-id-plugin.d.ts.map +1 -0
  83. package/lib/plugin/sync-list-order-plugin.d.ts +2 -0
  84. package/lib/plugin/sync-list-order-plugin.d.ts.map +1 -0
  85. package/package.json +9 -7
  86. package/src/composed/commands.ts +31 -0
  87. package/src/composed/index.ts +6 -0
  88. package/src/composed/inputrules.ts +13 -0
  89. package/src/composed/keymap.ts +20 -0
  90. package/src/composed/plugins.ts +23 -0
  91. package/src/composed/schema.ts +55 -0
  92. package/src/index.ts +6 -52
  93. package/src/mark/emphasis.ts +47 -0
  94. package/src/mark/index.ts +3 -10
  95. package/src/mark/inline-code.ts +70 -0
  96. package/src/mark/link.ts +96 -247
  97. package/src/mark/strong.ts +41 -36
  98. package/src/node/blockquote.ts +39 -33
  99. package/src/node/bullet-list.ts +62 -55
  100. package/src/node/code-block.ts +103 -0
  101. package/src/node/doc.ts +18 -22
  102. package/src/node/hardbreak.ts +68 -117
  103. package/src/node/heading.ts +175 -284
  104. package/src/node/hr.ts +57 -57
  105. package/src/node/image.ts +113 -209
  106. package/src/node/index.ts +6 -35
  107. package/src/node/list-item.ts +125 -141
  108. package/src/node/ordered-list.ts +70 -65
  109. package/src/node/paragraph.ts +54 -50
  110. package/src/node/text.ts +14 -16
  111. package/src/plugin/hardbreak-clear-mark-plugin.ts +45 -0
  112. package/src/plugin/hardbreak-filter-plugin.ts +33 -0
  113. package/src/plugin/index.ts +12 -14
  114. package/src/plugin/{inline-nodes-cursor.ts → inline-nodes-cursor-plugin.ts} +5 -8
  115. package/src/plugin/{inline-sync → inline-sync-plugin}/config.ts +18 -3
  116. package/src/plugin/{inline-sync → inline-sync-plugin}/context.ts +4 -6
  117. package/src/plugin/inline-sync-plugin/index.ts +4 -0
  118. package/src/plugin/{inline-sync/index.ts → inline-sync-plugin/inline-sync-plugin.ts} +14 -11
  119. package/src/plugin/{inline-sync → inline-sync-plugin}/regexp.ts +0 -0
  120. package/src/plugin/{inline-sync → inline-sync-plugin}/replacer.ts +3 -3
  121. package/src/plugin/{inline-sync → inline-sync-plugin}/utils.ts +0 -0
  122. package/src/plugin/remark-add-order-in-list-plugin.ts +16 -0
  123. package/src/plugin/remark-inline-link-plugin.ts +6 -0
  124. package/src/plugin/remark-line-break.ts +44 -0
  125. package/src/plugin/sync-heading-id-plugin.ts +55 -0
  126. package/src/plugin/sync-list-order-plugin.ts +57 -0
  127. package/lib/mark/code-inline.d.ts +0 -3
  128. package/lib/mark/code-inline.d.ts.map +0 -1
  129. package/lib/mark/em.d.ts +0 -3
  130. package/lib/mark/em.d.ts.map +0 -1
  131. package/lib/node/code-fence.d.ts +0 -7
  132. package/lib/node/code-fence.d.ts.map +0 -1
  133. package/lib/plugin/add-order-in-list.d.ts +0 -3
  134. package/lib/plugin/add-order-in-list.d.ts.map +0 -1
  135. package/lib/plugin/filter-html.d.ts +0 -3
  136. package/lib/plugin/filter-html.d.ts.map +0 -1
  137. package/lib/plugin/inline-nodes-cursor.d.ts +0 -7
  138. package/lib/plugin/inline-nodes-cursor.d.ts.map +0 -1
  139. package/lib/plugin/inline-sync/config.d.ts.map +0 -1
  140. package/lib/plugin/inline-sync/context.d.ts.map +0 -1
  141. package/lib/plugin/inline-sync/index.d.ts +0 -6
  142. package/lib/plugin/inline-sync/index.d.ts.map +0 -1
  143. package/lib/plugin/inline-sync/regexp.d.ts.map +0 -1
  144. package/lib/plugin/inline-sync/replacer.d.ts.map +0 -1
  145. package/lib/plugin/inline-sync/utils.d.ts.map +0 -1
  146. package/lib/supported-keys.d.ts +0 -23
  147. package/lib/supported-keys.d.ts.map +0 -1
  148. package/src/mark/code-inline.ts +0 -66
  149. package/src/mark/em.ts +0 -42
  150. package/src/node/code-fence.ts +0 -245
  151. package/src/plugin/add-order-in-list.ts +0 -19
  152. package/src/plugin/filter-html.ts +0 -43
  153. package/src/supported-keys.ts +0 -25
  154. package/src/types.d.ts +0 -5
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/supported-keys.ts","../src/mark/code-inline.ts","../src/mark/em.ts","../src/mark/link.ts","../src/mark/strong.ts","../src/mark/index.ts","../src/node/blockquote.ts","../src/node/bullet-list.ts","../src/node/code-fence.ts","../src/node/doc.ts","../src/node/hardbreak.ts","../src/node/heading.ts","../src/node/hr.ts","../src/node/image.ts","../src/node/list-item.ts","../src/node/ordered-list.ts","../src/node/paragraph.ts","../src/node/text.ts","../src/node/index.ts","../src/plugin/add-order-in-list.ts","../src/plugin/filter-html.ts","../src/plugin/inline-nodes-cursor.ts","../src/plugin/inline-sync/regexp.ts","../src/plugin/inline-sync/utils.ts","../src/plugin/inline-sync/config.ts","../src/plugin/inline-sync/context.ts","../src/plugin/inline-sync/replacer.ts","../src/plugin/inline-sync/index.ts","../src/plugin/index.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nexport const SupportedKeys = {\n HardBreak: 'HardBreak',\n Blockquote: 'Blockquote',\n BulletList: 'BulletList',\n OrderedList: 'OrderedList',\n CodeFence: 'CodeFence',\n H1: 'H1',\n H2: 'H2',\n H3: 'H3',\n H4: 'H4',\n H5: 'H5',\n H6: 'H6',\n DowngradeHeading: 'DowngradeHeading',\n Text: 'Text',\n CodeInline: 'CodeInline',\n Em: 'Em',\n Bold: 'Bold',\n NextListItem: 'NextListItem',\n SinkListItem: 'SinkListItem',\n LiftListItem: 'LiftListItem',\n} as const\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type SupportedKeys = typeof SupportedKeys\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey } from '@milkdown/core'\nimport type { MarkType } from '@milkdown/prose/model'\nimport { createMark, createShortcut } from '@milkdown/utils'\n\nimport { SupportedKeys } from '../supported-keys'\n\ntype Keys = SupportedKeys['CodeInline']\nconst id = 'code_inline'\n\nexport const ToggleInlineCode = createCmdKey('ToggleInlineCode')\n\nexport const codeInline = createMark<Keys>((utils) => {\n return {\n id,\n schema: () => ({\n priority: 100,\n code: true,\n inclusive: false,\n parseDOM: [{ tag: 'code' }],\n toDOM: mark => ['code', { class: utils.getClassName(mark.attrs, 'code-inline') }],\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 === id,\n runner: (state, mark, node) => {\n state.withMark(mark, 'inlineCode', node.text || '')\n },\n },\n }),\n commands: markType => [\n createCmd(ToggleInlineCode, () => (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, markType)\n if (has) {\n dispatch?.(tr.removeMark(from, to, markType))\n return true\n }\n\n const restMarksName = Object.keys(state.schema.marks).filter(x => x !== markType.name)\n\n restMarksName\n .map(name => state.schema.marks[name] as MarkType)\n .forEach((t) => {\n tr.removeMark(from, to, t)\n })\n\n dispatch?.(tr.addMark(from, to, markType.create()))\n return true\n }),\n ],\n shortcuts: {\n [SupportedKeys.CodeInline]: createShortcut(ToggleInlineCode, 'Mod-e'),\n },\n }\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey } from '@milkdown/core'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { createMark, createShortcut } from '@milkdown/utils'\n\nimport { SupportedKeys } from '../supported-keys'\n\ntype Keys = SupportedKeys['Em']\n\nconst id = 'em'\n\nexport const ToggleItalic = createCmdKey('ToggleItalic')\nexport const em = createMark<Keys>(utils => ({\n id,\n schema: () => ({\n inclusive: false,\n parseDOM: [\n { tag: 'i' },\n { tag: 'em' },\n { style: 'font-style', getAttrs: value => (value === 'italic') as false },\n ],\n toDOM: mark => ['em', { class: utils.getClassName(mark.attrs, id) }],\n parseMarkdown: {\n match: node => node.type === 'emphasis',\n runner: (state, node, markType) => {\n state.openMark(markType)\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === id,\n runner: (state, mark) => {\n state.withMark(mark, 'emphasis')\n },\n },\n }),\n commands: markType => [createCmd(ToggleItalic, () => toggleMark(markType))],\n shortcuts: {\n [SupportedKeys.Em]: createShortcut(ToggleItalic, 'Mod-i'),\n },\n}))\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { ThemeInputChipType } from '@milkdown/core'\nimport { commandsCtx, createCmd, createCmdKey } from '@milkdown/core'\nimport { expectDomTypeError, missingRootElement } from '@milkdown/exception'\nimport { calculateTextPosition } from '@milkdown/prose'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport type { Node as ProseNode } from '@milkdown/prose/model'\nimport { NodeSelection, Plugin, PluginKey, TextSelection } from '@milkdown/prose/state'\nimport type { EditorView } from '@milkdown/prose/view'\nimport { createMark } from '@milkdown/utils'\n\nconst key = new PluginKey('MILKDOWN_LINK_INPUT')\n\nexport const ToggleLink = createCmdKey<string>('ToggleLink')\nexport const ModifyLink = createCmdKey<string>('ModifyLink')\nconst id = 'link'\nexport interface LinkOptions {\n input: {\n placeholder?: string\n buttonText?: string\n displayWhenSelected?: boolean\n }\n}\nexport const link = createMark<string, LinkOptions>((utils, options) => {\n return {\n id,\n schema: () => ({\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', { ...mark.attrs, class: utils.getClassName(mark.attrs, id) }],\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 === id,\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 commands: markType => [\n createCmd(ToggleLink, (href = '') => toggleMark(markType, { href })),\n createCmd(ModifyLink, (href = '') => (state, dispatch) => {\n if (!dispatch)\n return false\n\n const { marks } = state.schema\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 (marks.link?.isInSet(n.marks)) {\n node = n\n pos = p\n return false\n }\n\n return undefined\n })\n if (!node)\n return false\n\n const mark = node.marks.find(({ type }) => type === markType)\n if (!mark)\n return false\n\n const start = pos\n const end = pos + node.nodeSize\n const { tr } = state\n const linkMark = marks.link?.create({ ...mark.attrs, href })\n if (!linkMark)\n return false\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 ],\n prosePlugins: (type, ctx) => {\n let renderOnTop = false\n return [\n new Plugin({\n key,\n view: (editorView) => {\n const inputChipRenderer = utils.themeManager.get<ThemeInputChipType>('input-chip', {\n placeholder: options?.input?.placeholder ?? 'Input Web Link',\n buttonText: options?.input?.buttonText,\n onUpdate: (value) => {\n ctx.get(commandsCtx).call(ModifyLink, value)\n },\n calculatePosition: (view, input) => {\n calculateTextPosition(view, input, (start, end, target, parent) => {\n const $editor = view.dom.parentElement\n if (!$editor)\n throw missingRootElement()\n\n const selectionWidth = end.left - start.left\n let left = start.left - parent.left - (target.width - selectionWidth) / 2\n let top = start.bottom - parent.top + 14 + $editor.scrollTop\n\n if (renderOnTop)\n top = start.top - parent.top - target.height - 14 + $editor.scrollTop\n\n if (left < 0)\n left = 0\n\n const maxLeft = $editor.clientWidth - (target.width + 4)\n if (left > maxLeft)\n left = maxLeft\n\n return [top, left]\n })\n },\n })\n if (!inputChipRenderer)\n return {}\n const shouldDisplay = (view: EditorView) => {\n const { selection, doc } = view.state\n const { from, to } = selection\n\n if (!view.hasFocus())\n return false\n\n if (\n selection instanceof TextSelection\n && to < doc.content.size\n && from < doc.content.size\n && doc.rangeHasMark(from, from === to ? to + 1 : to, type)\n ) {\n let shouldDisplay = selection.empty\n if (options?.input?.displayWhenSelected && !shouldDisplay) {\n doc.nodesBetween(from, from === to ? to + 1 : to, (node, pos) => {\n if (\n node.marks.some(\n mark =>\n mark.type === type && from >= pos && to <= pos + node.nodeSize,\n )\n ) {\n shouldDisplay = true\n return false\n }\n\n return undefined\n })\n }\n if (shouldDisplay) {\n renderOnTop = false\n return true\n }\n }\n\n if (selection instanceof NodeSelection) {\n const { node } = selection\n if (\n node.type.name === 'image'\n && node.marks.findIndex(mark => mark.type.name === id) > -1\n ) {\n renderOnTop = true\n return true\n }\n }\n\n return false\n }\n const getCurrentLink = (view: EditorView) => {\n const { selection } = view.state\n let node: ProseNode | undefined\n const { from, to } = selection\n view.state.doc.nodesBetween(from, from === to ? to + 1 : to, (n) => {\n if (type.isInSet(n.marks)) {\n node = n\n return false\n }\n\n return undefined\n })\n if (!node)\n return\n\n const mark = node.marks.find(m => m.type === type)\n if (!mark)\n return\n\n const value = mark.attrs.href\n return value\n }\n const renderByView = (view: EditorView) => {\n if (!view.editable)\n return\n\n const display = shouldDisplay(view)\n if (display) {\n inputChipRenderer.show(view)\n inputChipRenderer.update(getCurrentLink(view))\n }\n else {\n inputChipRenderer.hide()\n }\n }\n inputChipRenderer.init(editorView)\n renderByView(editorView)\n\n return {\n update: (view, prevState) => {\n const isEqualSelection\n = prevState?.doc.eq(view.state.doc) && prevState.selection.eq(view.state.selection)\n if (isEqualSelection)\n return\n\n requestAnimationFrame(() => {\n renderByView(view)\n })\n },\n destroy: () => {\n inputChipRenderer.destroy()\n },\n }\n },\n }),\n ]\n },\n }\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey } from '@milkdown/core'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { createMark, createShortcut } from '@milkdown/utils'\n\nimport { SupportedKeys } from '../supported-keys'\n\ntype Keys = SupportedKeys['Bold']\nconst id = 'strong'\nexport const ToggleBold = createCmdKey('ToggleBold')\nexport const strong = createMark<Keys>((utils) => {\n return {\n id,\n schema: () => ({\n inclusive: false,\n parseDOM: [\n { tag: 'b' },\n { tag: 'strong' },\n { style: 'font-style', getAttrs: value => (value === 'bold') as false },\n ],\n toDOM: mark => ['strong', { class: utils.getClassName(mark.attrs, id) }],\n parseMarkdown: {\n match: node => node.type === 'strong',\n runner: (state, node, markType) => {\n state.openMark(markType)\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === id,\n runner: (state, mark) => {\n state.withMark(mark, 'strong')\n },\n },\n }),\n commands: markType => [createCmd(ToggleBold, () => toggleMark(markType))],\n shortcuts: {\n [SupportedKeys.Bold]: createShortcut(ToggleBold, 'Mod-b'),\n },\n }\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { codeInline } from './code-inline'\nimport { em } from './em'\nimport { link } from './link'\nimport { strong } from './strong'\n\nexport const marks = [codeInline(), em(), strong(), link()]\n\nexport * from './code-inline'\nexport * from './em'\nexport * from './link'\nexport * from './strong'\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey } from '@milkdown/core'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport { createNode, createShortcut } from '@milkdown/utils'\n\nimport { SupportedKeys } from '../supported-keys'\n\ntype Keys = SupportedKeys['Blockquote']\n\nconst id = 'blockquote'\n\nexport const WrapInBlockquote = createCmdKey('WrapInBlockquote')\n\nexport const blockquote = createNode<Keys>((utils) => {\n return {\n id,\n schema: () => ({\n content: 'block+',\n group: 'block',\n defining: true,\n parseDOM: [{ tag: 'blockquote' }],\n toDOM: node => ['blockquote', { class: utils.getClassName(node.attrs, id) }, 0],\n parseMarkdown: {\n match: ({ type }) => type === id,\n runner: (state, node, type) => {\n state.openNode(type).next(node.children).closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === id,\n runner: (state, node) => {\n state.openNode('blockquote').next(node.content).closeNode()\n },\n },\n }),\n inputRules: nodeType => [wrappingInputRule(/^\\s*>\\s$/, nodeType)],\n commands: nodeType => [createCmd(WrapInBlockquote, () => wrapIn(nodeType))],\n shortcuts: {\n [SupportedKeys.Blockquote]: createShortcut(WrapInBlockquote, 'Mod-Shift-b'),\n },\n }\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport { createNode, createShortcut } from '@milkdown/utils'\n\nimport { SupportedKeys } from '../supported-keys'\n\ntype Keys = SupportedKeys['BulletList']\n\nexport const WrapInBulletList = createCmdKey('WrapInBulletList')\n\nexport const bulletList = createNode<Keys>((utils) => {\n const id = 'bullet_list'\n return {\n id,\n schema: () => ({\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 'data-spread': node.attrs.spread,\n 'class': utils.getClassName(node.attrs, 'bullet-list'),\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 === id,\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 inputRules: nodeType => [wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType)],\n commands: nodeType => [createCmd(WrapInBulletList, () => wrapIn(nodeType))],\n shortcuts: {\n [SupportedKeys.BulletList]: createShortcut(WrapInBulletList, 'Mod-Alt-8'),\n },\n }\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { ThemeCodeFenceType } from '@milkdown/core'\nimport { createCmd, createCmdKey, editorViewCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { textblockTypeInputRule } from '@milkdown/prose/inputrules'\nimport { Fragment } from '@milkdown/prose/model'\nimport type { NodeView } from '@milkdown/prose/view'\nimport { createNode, createShortcut } from '@milkdown/utils'\n\nimport { SupportedKeys } from '../supported-keys'\n\ntype Keys = SupportedKeys['CodeFence']\n\nconst languageOptions = [\n '',\n 'javascript',\n 'typescript',\n 'bash',\n 'sql',\n 'json',\n 'html',\n 'css',\n 'c',\n 'cpp',\n 'java',\n 'ruby',\n 'python',\n 'go',\n 'rust',\n 'markdown',\n]\n\nexport const backtickInputRegex = /^```(?<language>[a-z]*)?[\\s\\n]$/\nexport const tildeInputRegex = /^~~~(?<language>[a-z]*)?[\\s\\n]$/\n\nexport const TurnIntoCodeFence = createCmdKey('TurnIntoCodeFence')\n\nconst id = 'fence'\nexport const codeFence = createNode<Keys, { languageList?: string[] }>((utils, options) => {\n const languageList = options?.languageList || languageOptions\n\n return {\n id,\n schema: ctx => ({\n content: 'text*',\n group: 'block',\n marks: '',\n defining: true,\n code: true,\n attrs: {\n language: {\n default: '',\n },\n fold: {\n default: true,\n },\n },\n parseDOM: [\n {\n tag: 'div.code-fence-container',\n preserveWhitespace: 'full',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return { language: dom.querySelector('pre')?.dataset.language }\n },\n getContent: (dom, schema) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n const text = dom.querySelector('pre')?.textContent ?? ''\n if (!text)\n return Fragment.empty\n\n const textNode = schema.text(text)\n return Fragment.from(textNode)\n },\n },\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 select = document.createElement('select')\n languageList.forEach((lang) => {\n const option = document.createElement('option')\n option.value = lang\n option.innerText = !lang ? '--' : lang\n if (lang === node.attrs.language)\n option.selected = true\n\n select.appendChild(option)\n })\n select.onchange = (e) => {\n const target = e.target\n if (!(target instanceof HTMLSelectElement))\n return\n\n const view = ctx.get(editorViewCtx)\n if (!view.editable) {\n target.value = node.attrs.language\n return\n }\n\n const { top, left } = target.getBoundingClientRect()\n const result = view.posAtCoords({ top, left })\n if (!result)\n return\n\n const { tr } = view.state\n\n view.dispatch(\n tr.setNodeMarkup(result.inside, undefined, {\n ...node.attrs,\n language: target.value,\n }),\n )\n }\n return [\n 'div',\n {\n class: 'code-fence-container',\n },\n select,\n [\n 'pre',\n {\n 'data-language': node.attrs.language,\n 'class': utils.getClassName(node.attrs, 'code-fence'),\n },\n ['code', { spellCheck: 'false' }, 0],\n ],\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 === id,\n runner: (state, node) => {\n state.addNode('code', undefined, node.content.firstChild?.text || '', {\n lang: node.attrs.language,\n })\n },\n },\n }),\n inputRules: nodeType => [\n textblockTypeInputRule(backtickInputRegex, nodeType, (match) => {\n const [ok, language] = match\n if (!ok)\n return\n return { language }\n }),\n textblockTypeInputRule(tildeInputRegex, nodeType, (match) => {\n const [ok, language] = match\n if (!ok)\n return\n return { language }\n }),\n ],\n commands: nodeType => [createCmd(TurnIntoCodeFence, () => setBlockType(nodeType))],\n shortcuts: {\n [SupportedKeys.CodeFence]: createShortcut(TurnIntoCodeFence, 'Mod-Alt-c'),\n },\n view: () => (node, view, getPos) => {\n let currNode = node\n\n const onSelectLanguage = (language: string) => {\n const { tr } = view.state\n view.dispatch(\n tr.setNodeMarkup(getPos(), undefined, {\n fold: true,\n language,\n }),\n )\n }\n const onBlur = () => {\n const { tr } = view.state\n\n view.dispatch(\n tr.setNodeMarkup(getPos(), undefined, {\n ...currNode.attrs,\n fold: true,\n }),\n )\n }\n const onFocus = () => {\n const { tr } = view.state\n\n view.dispatch(\n tr.setNodeMarkup(getPos(), undefined, {\n ...currNode.attrs,\n fold: false,\n }),\n )\n }\n\n const renderer = utils.themeManager.get<ThemeCodeFenceType>('code-fence', {\n view,\n onBlur,\n onFocus,\n onSelectLanguage,\n editable: () => view.editable,\n languageList,\n })\n if (!renderer)\n return {} as NodeView\n\n const { dom, contentDOM, onUpdate, onDestroy } = renderer\n onUpdate(currNode)\n\n return {\n dom,\n contentDOM,\n update: (updatedNode) => {\n if (updatedNode.type.name !== id)\n return false\n currNode = updatedNode\n onUpdate(currNode)\n\n return true\n },\n destroy: onDestroy,\n }\n },\n }\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createNode } from '@milkdown/utils'\n\nexport const doc = createNode(() => {\n return {\n id: 'doc',\n schema: () => ({\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 }\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey } from '@milkdown/core'\nimport { Plugin, PluginKey, Selection } from '@milkdown/prose/state'\nimport { AddMarkStep, ReplaceStep } from '@milkdown/prose/transform'\nimport { createNode, createShortcut } from '@milkdown/utils'\n\nimport { SupportedKeys } from '../supported-keys'\n\ntype Keys = SupportedKeys['HardBreak']\n\nexport const InsertHardbreak = createCmdKey('InsertHardbreak')\n\nexport const HardbreakFilterPluginKey = new PluginKey('MILKDOWN_HARDBREAK_FILTER')\n\nexport const hardbreak = createNode<\n Keys,\n {\n notIn: string[]\n }\n>((utils, options) => {\n const notIn = options?.notIn ?? ['table', 'fence']\n return {\n id: 'hardbreak',\n schema: () => ({\n inline: true,\n group: 'inline',\n selectable: false,\n parseDOM: [{ tag: 'br' }],\n toDOM: node => ['br', { class: utils.getClassName(node.attrs, 'hardbreak') }],\n parseMarkdown: {\n match: ({ type }) => type === 'break',\n runner: (state, _, type) => {\n state.addNode(type)\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'hardbreak',\n runner: (state) => {\n state.addNode('break')\n },\n },\n }),\n commands: type => [\n createCmd(InsertHardbreak, () => (state, dispatch) => {\n const { selection, tr } = state\n if (selection.empty) {\n // Transform two successive hardbreak into a new line\n const node = selection.$from.node()\n if (node.childCount > 0 && node.lastChild?.type.name === 'hardbreak') {\n dispatch?.(\n tr\n .replaceRangeWith(selection.to - 1, selection.to, state.schema.node('paragraph'))\n .setSelection(Selection.near(tr.doc.resolve(selection.to)))\n .scrollIntoView(),\n )\n return true\n }\n }\n dispatch?.(tr.setMeta('hardbreak', true).replaceSelectionWith(type.create()).scrollIntoView())\n return true\n }),\n ],\n shortcuts: {\n [SupportedKeys.HardBreak]: createShortcut(InsertHardbreak, 'Shift-Enter'),\n },\n prosePlugins: type => [\n new Plugin({\n key: HardbreakFilterPluginKey,\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 new Plugin({\n key: new PluginKey('MILKDOWN_HARDBREAK_MARKS'),\n appendTransaction: (trs, _oldState, newState) => {\n if (!trs.length)\n return\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, type, 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 === type)\n _tr = _tr.setNodeMarkup(pos, type, undefined, [])\n })\n\n return _tr\n }\n\n return undefined\n },\n }),\n ],\n }\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/core'\nimport { createCmd, createCmdKey, editorViewCtx, getPalette, schemaCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { cloneTr } from '@milkdown/prose'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { textblockTypeInputRule } from '@milkdown/prose/inputrules'\nimport type { Node, NodeType } from '@milkdown/prose/model'\nimport { Fragment } from '@milkdown/prose/model'\nimport type { EditorState, Transaction } from '@milkdown/prose/state'\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { Decoration, DecorationSet } from '@milkdown/prose/view'\nimport type { ThemeUtils } from '@milkdown/utils'\nimport { createNode, createShortcut } from '@milkdown/utils'\n\nimport { SupportedKeys } from '../supported-keys'\n\nconst headingIndex = Array(6)\n .fill(0)\n .map((_, i) => i + 1)\n\ntype Keys =\n | SupportedKeys['H1']\n | SupportedKeys['H2']\n | SupportedKeys['H3']\n | SupportedKeys['H4']\n | SupportedKeys['H5']\n | SupportedKeys['H6']\n | SupportedKeys['DowngradeHeading']\n\nexport const TurnIntoHeading = createCmdKey<number>('TurnIntoHeading')\nexport const DowngradeHeading = createCmdKey('DowngradeHeading')\n\nexport const headingIdPluginKey = new PluginKey('MILKDOWN_HEADING_ID')\nexport const headingHashPluginKey = new PluginKey('MILKDOWN_HEADING_HASH')\n\nconst createId = (node: Node) =>\n node.textContent\n .replace(/[\\p{P}\\p{S}]/gu, '')\n .replace(/\\s/g, '-')\n .toLowerCase()\n .trim()\n\nconst headingIdPlugin = (ctx: Ctx, type: NodeType, getId: (node: Node) => string): Plugin => {\n let lock = false\n const walkThrough = (state: EditorState, callback: (tr: Transaction) => void) => {\n const tr = state.tr.setMeta('addToHistory', false)\n let found = false\n state.doc.descendants((node, pos) => {\n if (node.type === type && !lock) {\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 if (found)\n callback(tr)\n }\n return new Plugin({\n key: headingIdPluginKey,\n props: {\n handleDOMEvents: {\n compositionstart: () => {\n lock = true\n return false\n },\n compositionend: () => {\n lock = false\n const view = ctx.get(editorViewCtx)\n setTimeout(() => {\n walkThrough(view.state, tr => view.dispatch(tr))\n }, 0)\n return false\n },\n },\n },\n appendTransaction: (transactions, _, nextState) => {\n let tr: Transaction | null = null\n\n if (\n transactions.every(transaction => !transaction.getMeta(headingIdPluginKey))\n && transactions.some(transaction => transaction.docChanged)\n ) {\n walkThrough(nextState, (t) => {\n tr = t\n })\n }\n\n return tr\n },\n view: (view) => {\n const doc = view.state.doc\n let tr = view.state.tr.setMeta('addToHistory', false)\n doc.descendants((node, pos) => {\n if (node.type.name === 'heading' && node.attrs.level) {\n if (!node.attrs.id) {\n tr = tr.setNodeMarkup(pos, undefined, {\n ...node.attrs,\n id: getId(node),\n })\n }\n }\n })\n view.dispatch(tr)\n return {}\n },\n })\n}\n\nconst headingHashPlugin = (ctx: Ctx, type: NodeType, utils: ThemeUtils): Plugin => {\n return new Plugin({\n key: headingHashPluginKey,\n state: {\n init: () => {\n return DecorationSet.empty\n },\n apply: (tr) => {\n const view = ctx.get(editorViewCtx)\n if (!view.hasFocus?.() || !view.editable)\n return DecorationSet.empty\n\n const { $from } = tr.selection\n const node = $from.node()\n if (node.type !== type)\n return DecorationSet.empty\n\n const level = node.attrs.level\n const getHashes = (level: number) => {\n return Array(level)\n .fill(0)\n .map(_ => '#')\n .join('')\n }\n const widget = document.createElement('span')\n widget.textContent = getHashes(level)\n widget.contentEditable = 'false'\n utils.themeManager.onFlush(() => {\n const style = utils.getStyle(({ css }) => {\n const palette = getPalette(utils.themeManager)\n return css`\n margin-right: 4px;\n color: ${palette('primary')};\n `\n })\n if (style)\n widget.className = style\n })\n\n const deco = Decoration.widget($from.before() + 1, widget, { side: -1 })\n return DecorationSet.create(tr.doc, [deco])\n },\n },\n props: {\n handleDOMEvents: {\n focus: (view) => {\n const tr = cloneTr(view.state.tr)\n view.dispatch(tr)\n return false\n },\n },\n decorations(this: Plugin, state) {\n return this.getState(state)\n },\n },\n })\n}\n\nexport const heading = createNode<Keys, { getId: (node: Node) => string; displayHashtag: boolean }>(\n (utils, options) => {\n const id = 'heading'\n\n const getId = options?.getId ?? createId\n const displayHashtag = options?.displayHashtag ?? true\n\n return {\n id,\n schema: () => ({\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 id: node.attrs.id || getId(node),\n class: utils.getClassName(node.attrs, `heading h${node.attrs.level}`),\n },\n 0,\n ]\n },\n parseMarkdown: {\n match: ({ type }) => type === id,\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 === id,\n runner: (state, node) => {\n state.openNode('heading', undefined, { depth: node.attrs.level })\n const lastIsHardbreak = node.childCount >= 1 && node.lastChild?.type.name === 'hardbreak'\n if (lastIsHardbreak) {\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 else {\n state.next(node.content)\n }\n state.closeNode()\n },\n },\n }),\n inputRules: (type, ctx) =>\n headingIndex.map(x =>\n textblockTypeInputRule(new RegExp(`^(#{1,${x}})\\\\s$`), type, () => {\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 {\n level,\n }\n }\n return {\n level: x,\n }\n }),\n ),\n commands: (type, ctx) => [\n createCmd(TurnIntoHeading, (level = 1) => {\n if (level < 1)\n return setBlockType(level === 0 ? ctx.get(schemaCtx).nodes.paragraph || type : type)\n\n return setBlockType(level === 0 ? ctx.get(schemaCtx).nodes.paragraph || type : type, { level })\n }),\n createCmd(DowngradeHeading, () => {\n return (state, dispatch, view) => {\n const { $from } = state.selection\n const node = $from.node()\n if (node.type !== type || !state.selection.empty || $from.parentOffset !== 0)\n return false\n\n const level = node.attrs.level - 1\n if (!level)\n return setBlockType(ctx.get(schemaCtx).nodes.paragraph || type)(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 }),\n ],\n shortcuts: {\n [SupportedKeys.H1]: createShortcut(TurnIntoHeading, 'Mod-Alt-1', 1),\n [SupportedKeys.H2]: createShortcut(TurnIntoHeading, 'Mod-Alt-2', 2),\n [SupportedKeys.H3]: createShortcut(TurnIntoHeading, 'Mod-Alt-3', 3),\n [SupportedKeys.H4]: createShortcut(TurnIntoHeading, 'Mod-Alt-4', 4),\n [SupportedKeys.H5]: createShortcut(TurnIntoHeading, 'Mod-Alt-5', 5),\n [SupportedKeys.H6]: createShortcut(TurnIntoHeading, 'Mod-Alt-6', 6),\n [SupportedKeys.DowngradeHeading]: createShortcut(DowngradeHeading, ['Backspace', 'Delete']),\n },\n prosePlugins: (type, ctx) => {\n const plugins = [headingIdPlugin(ctx, type, getId)]\n if (displayHashtag)\n plugins.push(headingHashPlugin(ctx, type, utils))\n\n return plugins\n },\n }\n },\n)\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey, schemaCtx } from '@milkdown/core'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { Selection } from '@milkdown/prose/state'\nimport { createNode } from '@milkdown/utils'\n\nconst id = 'hr'\nexport const InsertHr = createCmdKey<string>('InsertHr')\nexport const hr = createNode((utils) => {\n return {\n id,\n schema: () => ({\n group: 'block',\n parseDOM: [{ tag: 'hr' }],\n toDOM: node => ['hr', { class: utils.getClassName(node.attrs, id) }],\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 === id,\n runner: (state) => {\n state.addNode('thematicBreak')\n },\n },\n }),\n inputRules: type => [\n new InputRule(/^(?:---|___\\s|\\*\\*\\*\\s)$/, (state, match, start, end) => {\n const { tr } = state\n\n if (match[0])\n tr.replaceWith(start - 1, end, type.create())\n\n return tr\n }),\n ],\n commands: (type, ctx) => [\n createCmd(InsertHr, () => (state, dispatch) => {\n if (!dispatch)\n return true\n\n const paragraph = ctx.get(schemaCtx).node('paragraph')\n const { tr, selection } = state\n const { from } = selection\n const node = type.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 ],\n }\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { ThemeImageType, ThemeInputChipType } from '@milkdown/core'\nimport { commandsCtx, createCmd, createCmdKey } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { findSelectedNodeOfType } from '@milkdown/prose'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport type { EditorView, NodeView } from '@milkdown/prose/view'\nimport { createNode } from '@milkdown/utils'\n\nexport const ModifyImage = createCmdKey<string>('ModifyImage')\nexport const InsertImage = createCmdKey<string>('InsertImage')\nconst id = 'image'\nexport interface ImageOptions {\n isBlock: boolean\n placeholder: string\n input: {\n placeholder: string\n buttonText?: string\n }\n}\nconst key = new PluginKey('MILKDOWN_IMAGE_INPUT')\n\nexport const image = createNode<string, ImageOptions>((utils, options) => {\n return {\n id: 'image',\n schema: () => ({\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 [\n 'img',\n {\n ...node.attrs,\n class: utils.getClassName(node.attrs, id),\n },\n ]\n },\n parseMarkdown: {\n match: ({ type }) => type === id,\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 === id,\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 commands: type => [\n createCmd(InsertImage, (src = '') => (state, dispatch) => {\n if (!dispatch)\n return true\n const { tr } = state\n const node = type.create({ src })\n if (!node)\n return true\n\n const _tr = tr.replaceSelectionWith(node)\n dispatch(_tr.scrollIntoView())\n return true\n }),\n createCmd(ModifyImage, (src = '') => (state, dispatch) => {\n const node = findSelectedNodeOfType(state.selection, type)\n if (!node)\n return false\n\n const { tr } = state\n dispatch?.(\n tr.setNodeMarkup(node.pos, undefined, { ...node.node.attrs, loading: true, src }).scrollIntoView(),\n )\n\n return true\n }),\n ],\n inputRules: type => [\n new InputRule(\n /!\\[(?<alt>.*?)]\\((?<filename>.*?)\\s*(?=\"|\\))\"?(?<title>[^\"]+)?\"?\\)/,\n (state, match, start, end) => {\n const [okay, alt, src = '', title] = match\n const { tr } = state\n if (okay)\n tr.replaceWith(start, end, type.create({ src, alt, title }))\n\n return tr\n },\n ),\n ],\n view: () => (node) => {\n let currNode = node\n\n const placeholder = options?.placeholder ?? 'Add an Image'\n const isBlock = options?.isBlock ?? false\n const renderer = utils.themeManager.get<ThemeImageType>('image', {\n placeholder,\n isBlock,\n })\n\n if (!renderer)\n return {} as NodeView\n\n const { dom, onUpdate } = renderer\n onUpdate(currNode)\n\n return {\n dom,\n update: (updatedNode) => {\n if (updatedNode.type.name !== id)\n return false\n\n currNode = updatedNode\n onUpdate(currNode)\n\n return true\n },\n selectNode: () => {\n dom.classList.add('ProseMirror-selectednode')\n },\n deselectNode: () => {\n dom.classList.remove('ProseMirror-selectednode')\n },\n }\n },\n prosePlugins: (type, ctx) => {\n return [\n new Plugin({\n key,\n view: (editorView) => {\n const inputChipRenderer = utils.themeManager.get<ThemeInputChipType>('input-chip', {\n placeholder: options?.input?.placeholder ?? 'Input Image Link',\n buttonText: options?.input?.buttonText,\n onUpdate: (value) => {\n ctx.get(commandsCtx).call(ModifyImage, value)\n },\n })\n if (!inputChipRenderer)\n return {}\n const shouldDisplay = (view: EditorView) => {\n return Boolean(\n view.hasFocus() && type && findSelectedNodeOfType(view.state.selection, type),\n )\n }\n const getCurrentLink = (view: EditorView) => {\n const result = findSelectedNodeOfType(view.state.selection, type)\n if (!result)\n return\n\n const value = result.node.attrs.src\n return value\n }\n const renderByView = (view: EditorView) => {\n if (!view.editable)\n return\n\n const display = shouldDisplay(view)\n if (display) {\n inputChipRenderer.show(view)\n inputChipRenderer.update(getCurrentLink(view))\n }\n else {\n inputChipRenderer.hide()\n }\n }\n inputChipRenderer.init(editorView)\n renderByView(editorView)\n\n return {\n update: (view, prevState) => {\n const isEqualSelection\n = prevState?.doc.eq(view.state.doc) && prevState.selection.eq(view.state.selection)\n if (isEqualSelection)\n return\n\n renderByView(view)\n },\n destroy: () => {\n inputChipRenderer.destroy()\n },\n }\n },\n }),\n ]\n },\n }\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { getNodeFromSchema } from '@milkdown/prose'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport type { NodeType } from '@milkdown/prose/model'\nimport { liftListItem, sinkListItem, splitListItem } from '@milkdown/prose/schema-list'\nimport type { EditorState, Transaction } from '@milkdown/prose/state'\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { createNode, createShortcut } from '@milkdown/utils'\n\nimport { SupportedKeys } from '../supported-keys'\n\ntype Keys = SupportedKeys['SinkListItem'] | SupportedKeys['LiftListItem'] | SupportedKeys['NextListItem']\n\nconst id = 'list_item'\n\nexport const SplitListItem = createCmdKey('SplitListItem')\nexport const SinkListItem = createCmdKey('SinkListItem')\nexport const LiftListItem = createCmdKey('LiftListItem')\n\nconst keepListOrderPluginKey = new PluginKey('MILKDOWN_KEEP_LIST_ORDER')\n\nconst createKeepListOrderPlugin = (type: NodeType) => {\n const walkThrough = (state: EditorState, callback: (tr: Transaction) => void) => {\n const orderedListType = getNodeFromSchema('ordered_list', state.schema)\n let tr = state.tr\n state.doc.descendants((node, pos, parent, index) => {\n if (node.type === type && parent?.type === orderedListType) {\n let changed = false\n const attrs = { ...node.attrs }\n if (node.attrs.listType !== 'ordered') {\n attrs.listType = 'ordered'\n changed = true\n }\n\n const base = parent?.maybeChild(0)\n if (base && base.type === type && base.attrs.listType === 'ordered') {\n attrs.label = `${index + 1}.`\n changed = true\n }\n\n if (node.attrs.label === '•') {\n attrs.label = `${index + 1}.`\n changed = true\n }\n\n if (changed)\n tr = tr.setNodeMarkup(pos, undefined, attrs)\n }\n })\n callback(tr)\n }\n return new Plugin({\n key: keepListOrderPluginKey,\n appendTransaction: (transactions, _oldState, nextState) => {\n let tr: Transaction | null = null\n if (transactions.some(transaction => transaction.docChanged)) {\n walkThrough(nextState, (t) => {\n tr = t\n })\n }\n\n return tr\n },\n })\n}\n\nexport const listItem = createNode<Keys>(utils => ({\n id,\n schema: () => ({\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.list-item',\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 contentElement: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n const body = dom.querySelector<HTMLElement>('.list-item_body')\n if (!body)\n return dom\n\n return body\n },\n },\n { tag: 'li' },\n ],\n toDOM: (node) => {\n return [\n 'li',\n {\n 'class': utils.getClassName(node.attrs, 'list-item'),\n 'data-label': node.attrs.label,\n 'data-list-type': node.attrs.listType,\n 'data-spread': node.attrs.spread,\n },\n ['div', { class: utils.getClassName(node.attrs, 'list-item_label') }, node.attrs.label],\n ['div', { class: utils.getClassName(node.attrs, 'list-item_body') }, 0],\n ]\n },\n parseMarkdown: {\n match: ({ type, checked }) => type === 'listItem' && checked === null,\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 === id,\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 inputRules: nodeType => [wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType)],\n commands: nodeType => [\n createCmd(SplitListItem, () => splitListItem(nodeType)),\n createCmd(SinkListItem, () => sinkListItem(nodeType)),\n createCmd(LiftListItem, () => liftListItem(nodeType)),\n ],\n shortcuts: {\n [SupportedKeys.NextListItem]: createShortcut(SplitListItem, 'Enter'),\n [SupportedKeys.SinkListItem]: createShortcut(SinkListItem, 'Mod-]'),\n [SupportedKeys.LiftListItem]: createShortcut(LiftListItem, 'Mod-['),\n },\n prosePlugins: nodeType => [createKeepListOrderPlugin(nodeType)],\n}))\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport { createNode, createShortcut } from '@milkdown/utils'\n\nimport { SupportedKeys } from '../supported-keys'\n\ntype Keys = SupportedKeys['OrderedList']\n\nexport const WrapInOrderedList = createCmdKey('WrapInOrderedList')\n\nconst id = 'ordered_list'\nexport const orderedList = createNode<Keys>(utils => ({\n id,\n schema: () => ({\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 ...(node.attrs.order === 1 ? {} : node.attrs.order),\n 'data-spread': node.attrs.spread,\n 'class': utils.getClassName(node.attrs, 'ordered-list'),\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 === id,\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 inputRules: nodeType => [\n wrappingInputRule(\n /^(\\d+)\\.\\s$/,\n nodeType,\n match => ({ order: Number(match[1]) }),\n (match, node) => node.childCount + node.attrs.order === Number(match[1]),\n ),\n ],\n commands: nodeType => [createCmd(WrapInOrderedList, () => wrapIn(nodeType))],\n shortcuts: {\n [SupportedKeys.OrderedList]: createShortcut(WrapInOrderedList, 'Mod-Alt-7'),\n },\n}))\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createCmd, createCmdKey } from '@milkdown/core'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport type { Node } from '@milkdown/prose/model'\nimport { Fragment } from '@milkdown/prose/model'\nimport { createNode, createShortcut } from '@milkdown/utils'\n\nimport { SupportedKeys } from '../supported-keys'\n\ntype Keys = SupportedKeys['Text']\n\nexport const TurnIntoText = createCmdKey('TurnIntoText')\n\nconst id = 'paragraph'\nexport const paragraph = createNode<Keys>((utils) => {\n return {\n id,\n schema: () => ({\n content: 'inline*',\n group: 'block',\n parseDOM: [{ tag: 'p' }],\n toDOM: node => ['p', { class: utils.getClassName(node.attrs, id) }, 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 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 const lastIsHardbreak = node.childCount >= 1 && node.lastChild?.type.name === 'hardbreak'\n if (lastIsHardbreak) {\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 else {\n state.next(node.content)\n }\n state.closeNode()\n },\n },\n }),\n commands: nodeType => [createCmd(TurnIntoText, () => setBlockType(nodeType))],\n shortcuts: {\n [SupportedKeys.Text]: createShortcut(TurnIntoText, 'Mod-Alt-0'),\n },\n }\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createNode } from '@milkdown/utils'\n\nexport const text = createNode(() => ({\n id: 'text',\n schema: () => ({\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}))\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { AtomPlugin } from '@milkdown/utils'\n\nimport { blockquote } from './blockquote'\nimport { bulletList } from './bullet-list'\nimport { codeFence } from './code-fence'\nimport { doc } from './doc'\nimport { hardbreak } from './hardbreak'\nimport { heading } from './heading'\nimport { hr } from './hr'\nimport { image } from './image'\nimport { listItem } from './list-item'\nimport { orderedList } from './ordered-list'\nimport { paragraph } from './paragraph'\nimport { text } from './text'\n\nexport const nodes: AtomPlugin[] = [\n doc(),\n paragraph(),\n hardbreak(),\n blockquote(),\n codeFence(),\n bulletList(),\n orderedList(),\n listItem(),\n heading(),\n hr(),\n image(),\n text(),\n]\n\nexport * from './blockquote'\nexport * from './bullet-list'\nexport * from './code-fence'\nexport * from './doc'\nexport * from './hardbreak'\nexport * from './heading'\nexport * from './hr'\nexport * from './image'\nexport * from './list-item'\nexport * from './ordered-list'\nexport * from './paragraph'\nexport * from './text'\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Node } from 'unist'\nimport type { Parent } from 'unist-util-visit'\nimport { visit } from 'unist-util-visit'\n\nexport const addOrderInList = () => {\n function transformer(ast: Node) {\n visit(ast, 'list', (node: Parent & { ordered?: boolean; start?: number }) => {\n if (node.ordered) {\n const start = node.start ?? 1\n node.children.forEach((child, index) => {\n (child as Node & { label: number }).label = index + start\n })\n }\n })\n }\n\n return transformer\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Literal, Node, Parent } from 'unist'\n\nconst isParent = (node: Node): node is Parent => !!(node as Parent).children\nconst isHTML = (node: Node): node is Literal<string> => 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\nexport const filterHTMLPlugin = () => {\n function transformer(tree: Node) {\n flatMapWithDepth(tree, (node) => {\n if (!isHTML(node))\n return [node]\n\n return []\n })\n }\n return transformer\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { Decoration, DecorationSet } from '@milkdown/prose/view'\n\nconst inlineNodesCursorPluginKey = new PluginKey('MILKDOWN_INLINE_NODES_CURSOR')\n\n/**\n * This plugin is to solve the chrome 98 bug:\n * https://discuss.prosemirror.net/t/cursor-jumps-at-the-end-of-line-when-it-betweens-two-inline-nodes/4641\n */\nexport const getInlineNodesCursorPlugin = (): Plugin => {\n let lock = false\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","/* Copyright 2021, Milkdown by Mirone. */\n\nexport const linkRegexp = /\\[(?<span>((www|https:\\/\\/|http:\\/\\/)[^\\s\\]]+))]\\((?<url>[^\\s\\]]+)\\)/\n\nexport const punctuationRegexp = (holePlaceholder: string) =>\n new RegExp(`\\\\\\\\(?=[^\\\\w\\\\s${holePlaceholder}\\\\\\\\]|_)`, 'g')\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { Node } from '@milkdown/prose/model'\n\nimport type { SyncNodePlaceholder } from './config'\nimport { linkRegexp, punctuationRegexp } from './regexp'\n\nexport const keepLink = (str: string) => {\n let text = str\n let match = text.match(linkRegexp)\n while (match && match.groups) {\n const { span } = match.groups\n text = text.replace(linkRegexp, span as string)\n\n match = text.match(linkRegexp)\n }\n return text\n}\n\nexport const swap = (text: string, first: number, last: number) => {\n const arr = text.split('')\n const temp = arr[first]\n if (arr[first] && arr[last]) {\n arr[first] = arr[last] as string\n arr[last] = temp as string\n }\n return arr.join('').toString()\n}\n\nexport const replacePunctuation = (holePlaceholder: string) => (text: string) =>\n text.replace(punctuationRegexp(holePlaceholder), '')\n\nexport const calculatePlaceholder = (placeholder: SyncNodePlaceholder) => (text: string) => {\n const index = text.indexOf(placeholder.hole)\n const left = text.charAt(index - 1)\n const right = text.charAt(index + 1)\n const notAWord = /[^\\w]|_/\n\n // cursor on the right\n if (!right)\n return placeholder.punctuation\n\n // cursor on the left\n if (!left)\n return placeholder.char\n\n if (notAWord.test(left) && notAWord.test(right))\n return placeholder.punctuation\n\n return placeholder.char\n}\n\nexport const calcOffset = (node: Node, from: number, placeholder: string) => {\n let offset = from\n let find = false\n node.descendants((n) => {\n if (find)\n return false\n if (n.isText) {\n const i = n.text?.indexOf(placeholder)\n if (i != null && i >= 0) {\n find = true\n offset += i\n return false\n }\n }\n offset += n.nodeSize\n return undefined\n })\n return offset\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/core'\nimport { createSlice } from '@milkdown/core'\nimport type { Node, NodeType } from '@milkdown/prose/model'\nimport type { Transaction } from '@milkdown/prose/state'\n\nimport { swap } from './utils'\n\nexport type ShouldSyncNode = (context: {\n prevNode: Node\n nextNode: Node\n ctx: Ctx\n tr: Transaction\n text: string\n}) => boolean\n\nexport interface SyncNodePlaceholder {\n hole: string\n punctuation: string\n char: string\n}\n\nexport interface InlineSyncConfig {\n placeholderConfig: SyncNodePlaceholder\n shouldSyncNode: ShouldSyncNode\n globalNodes: Array<NodeType | string>\n movePlaceholder: (placeholderToMove: string, text: string) => string\n}\n\nexport const defaultConfig: InlineSyncConfig = {\n placeholderConfig: {\n hole: '∅',\n punctuation: '⁂',\n char: '∴',\n },\n globalNodes: ['footnote_definition'],\n shouldSyncNode: ({ prevNode, nextNode }) =>\n prevNode.inlineContent\n && nextNode\n // if node type changes, do not sync\n && prevNode.type === nextNode.type\n // if two node fully equal, we don't modify them\n && !prevNode.eq(nextNode),\n movePlaceholder: (placeholderToMove: string, text: string) => {\n const symbolsNeedToMove = ['*', '_']\n\n let index = text.indexOf(placeholderToMove)\n while (symbolsNeedToMove.includes(text[index - 1] || '') && symbolsNeedToMove.includes(text[index + 1] || '')) {\n text = swap(text, index, index + 1)\n index = index + 1\n }\n\n return text\n },\n}\n\nexport const inlineSyncConfigCtx = createSlice<InlineSyncConfig, 'inlineSyncConfig'>(defaultConfig, 'inlineSyncConfig')\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/core'\nimport { parserCtx, serializerCtx } from '@milkdown/core'\nimport type { Node } from '@milkdown/prose/model'\nimport type { EditorState } from '@milkdown/prose/state'\nimport { pipe } from '@milkdown/utils'\n\nimport { inlineSyncConfigCtx } from './config'\nimport { calculatePlaceholder, keepLink, replacePunctuation } from './utils'\n\nexport * from './config'\n\nexport interface InlineSyncContext {\n text: string\n prevNode: Node\n nextNode: Node\n placeholder: string\n}\n\nconst getNodeFromSelection = (state: EditorState) => {\n const { selection } = state\n const { $from } = selection\n const node = $from.node()\n\n return node\n}\n\nconst getMarkdown = (ctx: Ctx, state: EditorState, node: Node, globalNode: Node[]) => {\n const serializer = ctx.get(serializerCtx)\n const doc = state.schema.topNodeType.create(undefined, [node, ...globalNode])\n\n const markdown = serializer(doc)\n\n return markdown\n}\n\nconst addPlaceholder = (ctx: Ctx, markdown: string) => {\n const config = ctx.get(inlineSyncConfigCtx)\n const holePlaceholder = config.placeholderConfig.hole\n\n const [firstLine = '', ...rest] = markdown.split('\\n\\n')\n\n const movePlaceholder = (text: string) => config.movePlaceholder(holePlaceholder, text)\n\n const handleText = pipe(replacePunctuation(holePlaceholder), movePlaceholder, keepLink)\n\n let text = handleText(firstLine)\n const placeholder = calculatePlaceholder(config.placeholderConfig)(text)\n\n text = text.replace(holePlaceholder, placeholder)\n\n text = [text, ...rest].join('\\n\\n')\n\n return [text, placeholder] as [markdown: string, placeholder: string]\n}\n\nconst getNewNode = (ctx: Ctx, text: string) => {\n const parser = ctx.get(parserCtx)\n const parsed = parser(text)\n\n if (!parsed)\n return null\n\n return parsed.firstChild\n}\n\nconst collectGlobalNodes = (ctx: Ctx, state: EditorState) => {\n const { globalNodes } = ctx.get(inlineSyncConfigCtx)\n const nodes: Node[] = []\n\n state.doc.descendants((node) => {\n if (globalNodes.includes(node.type.name) || globalNodes.includes(node.type)) {\n nodes.push(node)\n return false\n }\n\n return undefined\n })\n\n return nodes\n}\n\nconst removeGlobalFromText = (text: string) => text.split('\\n\\n')[0] || ''\n\nexport const getContextByState = (ctx: Ctx, state: EditorState): InlineSyncContext | null => {\n try {\n const globalNode = collectGlobalNodes(ctx, state)\n const node = getNodeFromSelection(state)\n\n const markdown = getMarkdown(ctx, state, node, globalNode)\n const [text, placeholder] = addPlaceholder(ctx, markdown)\n\n const newNode = getNewNode(ctx, text)\n\n if (!newNode || node.type !== newNode.type)\n return null\n\n // @ts-expect-error hijack the node attribute\n newNode.attrs = { ...node.attrs }\n\n newNode.descendants((node) => {\n const marks = node.marks\n const link = marks.find(mark => mark.type.name === 'link')\n if (link && node.text?.includes(placeholder) && link.attrs.href.includes(placeholder)) {\n // @ts-expect-error hijack the mark attribute\n link.attrs.href = link.attrs.href.replace(placeholder, '')\n }\n })\n\n return {\n text: removeGlobalFromText(text),\n prevNode: node,\n nextNode: newNode,\n placeholder,\n }\n }\n catch {\n return null\n }\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/core'\nimport type { Attrs } from '@milkdown/prose/model'\nimport type { EditorState, PluginKey, Transaction } from '@milkdown/prose/state'\nimport { TextSelection } from '@milkdown/prose/state'\n\nimport { inlineSyncConfigCtx } from './config'\nimport { getContextByState } from './context'\nimport { calcOffset } from './utils'\n\nexport const runReplacer = (\n ctx: Ctx,\n key: PluginKey,\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n attrs: Attrs,\n) => {\n const { placeholderConfig } = ctx.get(inlineSyncConfigCtx)\n const holePlaceholder = placeholderConfig.hole\n // insert a placeholder to restore the selection\n let tr = state.tr.setMeta(key, true).insertText(holePlaceholder, state.selection.from)\n\n const nextState = state.apply(tr)\n const context = getContextByState(ctx, nextState)\n\n if (!context)\n return\n\n const { $from } = nextState.selection\n const from = $from.before()\n const to = $from.after()\n\n const offset = calcOffset(context.nextNode, from, context.placeholder)\n\n tr = tr\n .replaceWith(from, to, context.nextNode)\n .setNodeMarkup(from, undefined, attrs)\n // delete the placeholder\n .delete(offset + 1, offset + 2)\n\n // restore the selection\n tr = tr.setSelection(TextSelection.near(tr.doc.resolve(offset + 1)))\n\n dispatch(tr)\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/core'\nimport { editorViewCtx } from '@milkdown/core'\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\n\nimport { inlineSyncConfigCtx } from './config'\nimport { getContextByState } from './context'\nimport { runReplacer } from './replacer'\n\nexport * from './config'\n\nexport const inlineSyncPluginKey = new PluginKey('MILKDOWN_INLINE_SYNC')\nexport const getInlineSyncPlugin = (ctx: Ctx) => {\n let requestId: number | null = null\n const inlineSyncPlugin = new Plugin<null>({\n key: inlineSyncPluginKey,\n state: {\n init: () => {\n return null\n },\n apply: (tr, _value, _oldState, newState) => {\n const view = ctx.get(editorViewCtx)\n if (!view.hasFocus?.() || !view.editable)\n return null\n\n if (!tr.docChanged)\n return null\n\n const meta = tr.getMeta(inlineSyncPluginKey)\n if (meta)\n return null\n\n const context = getContextByState(ctx, newState)\n if (!context)\n return null\n\n if (requestId) {\n cancelAnimationFrame(requestId)\n requestId = null\n }\n\n const { prevNode, nextNode, text } = context\n\n const { shouldSyncNode } = ctx.get(inlineSyncConfigCtx)\n\n if (!shouldSyncNode({ prevNode, nextNode, ctx, tr, text }))\n return null\n\n requestId = requestAnimationFrame(() => {\n requestId = null\n\n const { dispatch, state } = ctx.get(editorViewCtx)\n\n runReplacer(ctx, inlineSyncPluginKey, state, dispatch, prevNode.attrs)\n })\n\n return null\n },\n },\n })\n\n return inlineSyncPlugin\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { createPlugin } from '@milkdown/utils'\nimport links from 'remark-inline-links'\n\nimport { addOrderInList } from './add-order-in-list'\nimport { filterHTMLPlugin } from './filter-html'\nimport { getInlineNodesCursorPlugin } from './inline-nodes-cursor'\nimport { getInlineSyncPlugin, inlineSyncConfigCtx } from './inline-sync'\n\nexport { inlineSyncConfigCtx }\nexport const commonmarkPlugins = [\n createPlugin(() => ({\n injectSlices: [inlineSyncConfigCtx],\n prosePlugins: (_, ctx) => [getInlineNodesCursorPlugin(), getInlineSyncPlugin(ctx)],\n remarkPlugins: () => [links, filterHTMLPlugin, addOrderInList],\n }))(),\n]\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { AtomList } from '@milkdown/utils'\n\nimport { ModifyLink, ToggleBold, ToggleInlineCode, ToggleItalic, ToggleLink, marks } from './mark'\nimport {\n InsertHardbreak,\n InsertHr,\n InsertImage,\n LiftListItem,\n ModifyImage,\n SinkListItem,\n SplitListItem,\n TurnIntoCodeFence,\n TurnIntoHeading,\n TurnIntoText,\n WrapInBlockquote,\n WrapInBulletList,\n WrapInOrderedList,\n nodes,\n} from './node'\nimport { commonmarkPlugins } from './plugin'\n\nexport * from './mark'\nexport * from './node'\nexport { inlineSyncConfigCtx } from './plugin'\nexport * from './supported-keys'\n\nexport const commonmarkNodes = AtomList.create([...nodes, ...marks])\nexport { commonmarkPlugins }\nexport const commonmark = AtomList.create([...commonmarkPlugins, ...commonmarkNodes])\n\nexport const commands = {\n ToggleInlineCode,\n ToggleItalic,\n ToggleLink,\n ToggleBold,\n\n ModifyLink,\n ModifyImage,\n\n WrapInBlockquote,\n WrapInBulletList,\n WrapInOrderedList,\n\n TurnIntoCodeFence,\n TurnIntoHeading,\n TurnIntoText,\n\n InsertHardbreak,\n InsertHr,\n InsertImage,\n\n SplitListItem,\n SinkListItem,\n LiftListItem,\n} as const\nexport type Commands = typeof commands\n"],"names":["SupportedKeys","id","ToggleInlineCode","createCmdKey","codeInline","createMark","utils","mark","node","state","markType","createCmd","dispatch","selection","tr","from","to","x","name","t","createShortcut","ToggleItalic","em","value","toggleMark","key","PluginKey","ToggleLink","ModifyLink","link","options","dom","expectDomTypeError","url","title","href","marks","pos","n","p","_a","type","start","end","linkMark","TextSelection","ctx","renderOnTop","Plugin","editorView","inputChipRenderer","_b","_c","commandsCtx","view","input","calculateTextPosition","target","parent","$editor","missingRootElement","selectionWidth","left","top","maxLeft","shouldDisplay","doc","NodeSelection","getCurrentLink","m","renderByView","prevState","ToggleBold","strong","WrapInBlockquote","blockquote","createNode","nodeType","wrappingInputRule","wrapIn","WrapInBulletList","bulletList","ordered","spread","languageOptions","backtickInputRegex","tildeInputRegex","TurnIntoCodeFence","codeFence","languageList","schema","text","Fragment","textNode","select","lang","option","e","editorViewCtx","result","language","textblockTypeInputRule","match","ok","setBlockType","getPos","currNode","onSelectLanguage","onBlur","onFocus","renderer","contentDOM","onUpdate","onDestroy","updatedNode","InsertHardbreak","HardbreakFilterPluginKey","hardbreak","notIn","_","Selection","isInsertHr","step","$from","curDepth","canApply","trs","_oldState","newState","ReplaceStep","AddMarkStep","_tr","headingIndex","i","TurnIntoHeading","DowngradeHeading","headingIdPluginKey","headingHashPluginKey","createId","headingIdPlugin","getId","lock","walkThrough","callback","found","attrs","transactions","nextState","transaction","headingHashPlugin","DecorationSet","level","getHashes","widget","style","css","palette","getPalette","deco","Decoration","cloneTr","heading","displayHashtag","depth","contentArr","schemaCtx","plugins","InsertHr","hr","InputRule","paragraph","sel","ModifyImage","InsertImage","image","alt","src","findSelectedNodeOfType","okay","placeholder","isBlock","SplitListItem","SinkListItem","LiftListItem","keepListOrderPluginKey","createKeepListOrderPlugin","orderedListType","getNodeFromSchema","index","changed","base","listItem","body","checked","label","listType","splitListItem","sinkListItem","liftListItem","WrapInOrderedList","orderedList","TurnIntoText","nodes","addOrderInList","transformer","ast","visit","child","isParent","isHTML","flatMapWithDepth","fn","transform","out","nthChild","xs","j","item","filterHTMLPlugin","tree","inlineNodesCursorPluginKey","getInlineNodesCursorPlugin","inlineNodesCursorPlugin","right","position","leftDec","rightDec","linkRegexp","punctuationRegexp","holePlaceholder","keepLink","str","span","swap","first","last","arr","temp","replacePunctuation","calculatePlaceholder","notAWord","calcOffset","offset","find","defaultConfig","prevNode","nextNode","placeholderToMove","symbolsNeedToMove","inlineSyncConfigCtx","createSlice","getNodeFromSelection","getMarkdown","globalNode","serializer","serializerCtx","addPlaceholder","markdown","config","firstLine","rest","movePlaceholder","pipe","getNewNode","parsed","parserCtx","collectGlobalNodes","globalNodes","removeGlobalFromText","getContextByState","newNode","runReplacer","placeholderConfig","context","inlineSyncPluginKey","getInlineSyncPlugin","requestId","_value","shouldSyncNode","commonmarkPlugins","createPlugin","links","commonmarkNodes","AtomList","commonmark","commands"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../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/composed/schema.ts","../src/composed/inputrules.ts","../src/composed/commands.ts","../src/composed/keymap.ts","../src/plugin/inline-sync-plugin/regexp.ts","../src/plugin/inline-sync-plugin/utils.ts","../src/plugin/inline-sync-plugin/config.ts","../src/plugin/inline-sync-plugin/context.ts","../src/plugin/inline-sync-plugin/replacer.ts","../src/plugin/inline-sync-plugin/inline-sync-plugin.ts","../src/plugin/remark-add-order-in-list-plugin.ts","../src/plugin/remark-line-break.ts","../src/plugin/remark-inline-link-plugin.ts","../src/plugin/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 { commandsCtx } from '@milkdown/core'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { $command, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\n\n/// HTML attributes for the emphasis mark.\nexport const emphasisAttr = $markAttr('emphasis')\n\n/// Emphasis mark schema.\nexport const emphasisSchema = $markSchema('emphasis', ctx => ({\n inclusive: false,\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)\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')\n },\n },\n}))\n\n/// A command to toggle the emphasis mark.\nexport const toggleEmphasisCommand = $command('ToggleEmphasis', () => () => toggleMark(emphasisSchema.type()))\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","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { $command, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\n\n/// HTML attributes for the strong mark.\nexport const strongAttr = $markAttr('strong')\n\n/// Strong mark schema.\nexport const strongSchema = $markSchema('strong', ctx => ({\n inclusive: false,\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)\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')\n },\n },\n}))\n\n/// A command to toggle the strong mark.\nexport const toggleStrongCommand = $command('ToggleStrong', () => () => toggleMark(strongSchema.type()))\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","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport type { MarkType } from '@milkdown/prose/model'\nimport { $command, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\n\n/// HTML attributes for the inlineCode mark.\nexport const inlineCodeAttr = $markAttr('inlineCode')\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\n/// A command to toggle the inlineCode mark.\nexport const toggleInlineCodeCommand = $command('ToggleInlineCode', () => () => (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())\n // remove exists inlineCode mark if have\n if (has) {\n dispatch?.(tr.removeMark(from, to, inlineCodeSchema.type()))\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().create()))\n return true\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","/* 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'\n\n/// HTML attributes for the link mark.\nexport const linkAttr = $markAttr('link')\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\n/// @internal\nexport type UpdateLinkCommandPayload = {\n href?: string\n title?: string\n}\n/// A command to toggle the link mark.\n/// You can pass the `href` and `title` to the link.\nexport const toggleLinkCommand = $command('ToggleLink', () => (payload: UpdateLinkCommandPayload = {}) => toggleMark(linkSchema.type(), payload))\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', () => (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().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())\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().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","/* Copyright 2021, Milkdown by Mirone. */\nimport { $node } from '@milkdown/utils'\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","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport type { Node } from '@milkdown/prose/model'\nimport { Fragment } from '@milkdown/prose/model'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\n\n/// HTML attributes for paragraph node.\nexport const paragraphAttr = $nodeAttr('paragraph')\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 const lastIsHardbreak = node.childCount >= 1 && node.lastChild?.type.name === 'hardbreak'\n if (lastIsHardbreak) {\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 else {\n state.next(node.content)\n }\n state.closeNode()\n },\n },\n}))\n\n/// This command can turn the selected block into paragraph.\nexport const turnIntoTextCommand = $command('TurnIntoText', () => () => setBlockType(paragraphSchema.type()))\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","/* 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 { Fragment } from '@milkdown/prose/model'\nimport { $command, $ctx, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { paragraphSchema } from './paragraph'\n\nconst headingIndex = Array(6)\n .fill(0)\n .map((_, i) => i + 1)\n\nconst defaultHeadingIdGenerator = (node: Node) =>\n node.textContent\n .replace(/[\\p{P}\\p{S}]/gu, '')\n .replace(/\\s/g, '-')\n .toLowerCase()\n .trim()\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\n/// HTML attributes for heading node.\nexport const headingAttr = $nodeAttr('heading')\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 const lastIsHardbreak = node.childCount >= 1 && node.lastChild?.type.name === 'hardbreak'\n if (lastIsHardbreak) {\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 else {\n state.next(node.content)\n }\n state.closeNode()\n },\n },\n }\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(), (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\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', () => {\n return (level?: number) => {\n level ??= 1\n\n if (level < 1)\n return setBlockType(paragraphSchema.type())\n\n return setBlockType(headingSchema.type(), { level })\n }\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', () => () =>\n (state, dispatch, view) => {\n const { $from } = state.selection\n const node = $from.node()\n if (node.type !== headingSchema.type() || !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())(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\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, 3)\n },\n },\n TurnIntoH5: {\n shortcuts: 'Mod-Alt-5',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 3)\n },\n },\n TurnIntoH6: {\n shortcuts: 'Mod-Alt-6',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 3)\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","/* 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'\n\n/// HTML attributes for blockquote node.\nexport const blockquoteAttr = $nodeAttr('blockquote')\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\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(() => wrappingInputRule(/^\\s*>\\s$/, blockquoteSchema.type()))\n\n/// This command will wrap the current selection in a blockquote.\nexport const wrapInBlockquoteCommand = $command('WrapInBlockquote', () => () => wrapIn(blockquoteSchema.type()))\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","/* 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'\n\n/// HTML attributes for code block node.\nexport const codeBlockAttr = $nodeAttr('codeBlock', () => ({\n pre: {},\n code: {},\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\n/// A input rule for creating code block.\n/// For example, ` ```javascript ` will create a code block with language javascript.\nexport const createCodeBlockInputRule = $inputRule(() => textblockTypeInputRule(/^```(?<language>[a-z]*)?[\\s\\n]$/, codeBlockSchema.type(), match => ({\n language: match.groups?.language ?? '',\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', () => (language = '') => setBlockType(codeBlockSchema.type(), { language }))\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\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","/* 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'\n\n/// HTML attributes for image node.\nexport const imageAttr = $nodeAttr('image')\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\n/// @internal\nexport type UpdateImageCommandPayload = {\n src?: string\n title?: string\n alt?: string\n}\n\n/// This command will insert a image node.\n/// You can pass a payload to set `src`, `alt` and `title` for the image node.\nexport const insertImageCommand = $command('InsertImage', () => (payload: UpdateImageCommandPayload = {}) =>\n (state, dispatch) => {\n if (!dispatch)\n return true\n\n const { src = '', alt = '', title = '' } = payload\n\n const node = imageSchema.type().create({ src, alt, title })\n if (!node)\n return true\n\n dispatch(state.tr.replaceSelectionWith(node).scrollIntoView())\n return true\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', () => (payload: UpdateImageCommandPayload = {}) => (state, dispatch) => {\n const nodeWithPos = findSelectedNodeOfType(state.selection, imageSchema.type())\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\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(() => 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().create({ src, alt, title }))\n\n return null\n },\n))\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { Selection } from '@milkdown/prose/state'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\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\n/// Hardbreak node schema.\nexport const hardbreakSchema = $nodeSchema('hardbreak', ctx => ({\n inline: true,\n group: 'inline',\n attrs: {\n isInline: {\n default: false,\n },\n },\n selectable: false,\n parseDOM: [{ tag: 'br' }],\n toDOM: node => ['br', ctx.get(hardbreakAttr.key)(node)],\n parseMarkdown: {\n match: ({ type }) => type === 'break',\n runner: (state, node, type) => {\n state.addNode(type, { isInline: Boolean(node.data?.isInline) })\n },\n },\n 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\n/// Command to insert a hardbreak.\nexport const insertHardbreakCommand = $command('InsertHardbreak', () => () => (state, dispatch) => {\n const { selection, tr } = state\n if (selection.empty) {\n // Transform two successive hardbreak into a new line\n const node = selection.$from.node()\n if (node.childCount > 0 && node.lastChild?.type.name === 'hardbreak') {\n dispatch?.(\n tr\n .replaceRangeWith(selection.to - 1, selection.to, state.schema.node('paragraph'))\n .setSelection(Selection.near(tr.doc.resolve(selection.to)))\n .scrollIntoView(),\n )\n return true\n }\n }\n dispatch?.(tr.setMeta('hardbreak', true).replaceSelectionWith(hardbreakSchema.type().create()).scrollIntoView())\n return true\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","/* 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 { paragraphSchema } from './paragraph'\n\n/// HTML attributes for the hr node.\nexport const hrAttr = $nodeAttr('hr')\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\n/// Input rule to insert a hr.\n/// For example, `---` will be converted to a hr.\nexport const insertHrInputRule = $inputRule(() => new InputRule(\n /^(?:---|___\\s|\\*\\*\\*\\s)$/, (state, match, start, end) => {\n const { tr } = state\n\n if (match[0])\n tr.replaceWith(start - 1, end, hrSchema.type().create())\n\n return tr\n },\n))\n\n/// Command to insert a hr.\nexport const insertHrCommand = $command('InsertHr', () => () => (state, dispatch) => {\n if (!dispatch)\n return true\n\n const paragraph = paragraphSchema.node.type().create()\n const { tr, selection } = state\n const { from } = selection\n const node = hrSchema.type().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","/* 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'\n\n/// HTML attributes for bullet list node.\nexport const bulletListAttr = $nodeAttr('bulletList')\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\n/// Input rule for wrapping a block in bullet list node.\nexport const wrapInBulletListInputRule = $inputRule(() => wrappingInputRule(/^\\s*([-+*])\\s$/, bulletListSchema.type()))\n\n/// Command for creating bullet list node.\nexport const wrapInBulletListCommand = $command('WrapInBulletList', () => () => wrapIn(bulletListSchema.type()))\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","/* 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'\n\n/// HTML attributes for ordered list node.\nexport const orderedListAttr = $nodeAttr('orderedList')\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\n/// Input rule for wrapping a block in ordered list node.\nexport const wrapInOrderedListInputRule = $inputRule(() => wrappingInputRule(\n /^\\s*(\\d+)\\.\\s$/,\n orderedListSchema.type(),\n match => ({ order: Number(match[1]) }),\n (match, node) => node.childCount + node.attrs.order === Number(match[1]),\n))\n\n/// Command for wrapping a block in ordered list node.\nexport const wrapInOrderedListCommand = $command('WrapInOrderedList', () => () => wrapIn(orderedListSchema.type()))\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","/* 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'\n\n/// HTML attributes for list item node.\nexport const listItemAttr = $nodeAttr('listItem')\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\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', () => () => sinkListItem(listItemSchema.type()))\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', () => () => liftListItem(listItemSchema.type()))\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', () => () => splitListItem(listItemSchema.type()))\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})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $node } from '@milkdown/utils'\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","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { emphasisAttr, emphasisSchema, inlineCodeAttr, inlineCodeSchema, linkAttr, linkSchema, strongAttr, strongSchema } from '../mark'\nimport { blockquoteAttr, blockquoteSchema, bulletListAttr, bulletListSchema, codeBlockAttr, codeBlockSchema, docSchema, hardbreakAttr, hardbreakSchema, headingAttr, headingIdGenerator, headingSchema, hrAttr, hrSchema, imageAttr, imageSchema, listItemAttr, listItemSchema, orderedListAttr, orderedListSchema, paragraphAttr, paragraphSchema, textSchema } 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 textSchema,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { createCodeBlockInputRule, insertHrInputRule, wrapInBlockquoteInputRule, wrapInBulletListInputRule, wrapInHeadingInputRule, wrapInOrderedListInputRule } from '../node'\n\n/// @internal\nexport const inputrules: MilkdownPlugin[] = [\n wrapInBlockquoteInputRule,\n wrapInBulletListInputRule,\n wrapInOrderedListInputRule,\n createCodeBlockInputRule,\n insertHrInputRule,\n wrapInHeadingInputRule,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { toggleEmphasisCommand, toggleInlineCodeCommand, toggleLinkCommand, toggleStrongCommand, updateLinkCommand } from '../mark'\nimport { createCodeBlockCommand, downgradeHeadingCommand, insertHardbreakCommand, insertHrCommand, insertImageCommand, liftListItemCommand, sinkListItemCommand, splitListItemCommand, turnIntoTextCommand, updateImageCommand, wrapInBlockquoteCommand, wrapInBulletListCommand, wrapInHeadingCommand, wrapInOrderedListCommand } 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\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleStrongCommand,\n\n toggleLinkCommand,\n updateLinkCommand,\n]\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { emphasisKeymap, inlineCodeKeymap, strongKeymap } from '../mark'\nimport { blockquoteKeymap, bulletListKeymap, codeBlockKeymap, hardbreakKeymap, headingKeymap, listItemKeymap, orderedListKeymap, paragraphKeymap } from '../node'\n\n/// @internal\nexport const keymap: MilkdownPlugin[] = [\n blockquoteKeymap,\n codeBlockKeymap,\n hardbreakKeymap,\n headingKeymap,\n listItemKeymap,\n orderedListKeymap,\n bulletListKeymap,\n paragraphKeymap,\n\n emphasisKeymap,\n inlineCodeKeymap,\n strongKeymap,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\n\nexport const linkRegexp = /\\[(?<span>((www|https:\\/\\/|http:\\/\\/)[^\\s\\]]+))]\\((?<url>[^\\s\\]]+)\\)/\n\nexport const punctuationRegexp = (holePlaceholder: string) =>\n new RegExp(`\\\\\\\\(?=[^\\\\w\\\\s${holePlaceholder}\\\\\\\\]|_)`, 'g')\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { Node } from '@milkdown/prose/model'\n\nimport type { SyncNodePlaceholder } from './config'\nimport { linkRegexp, punctuationRegexp } from './regexp'\n\nexport const keepLink = (str: string) => {\n let text = str\n let match = text.match(linkRegexp)\n while (match && match.groups) {\n const { span } = match.groups\n text = text.replace(linkRegexp, span as string)\n\n match = text.match(linkRegexp)\n }\n return text\n}\n\nexport const swap = (text: string, first: number, last: number) => {\n const arr = text.split('')\n const temp = arr[first]\n if (arr[first] && arr[last]) {\n arr[first] = arr[last] as string\n arr[last] = temp as string\n }\n return arr.join('').toString()\n}\n\nexport const replacePunctuation = (holePlaceholder: string) => (text: string) =>\n text.replace(punctuationRegexp(holePlaceholder), '')\n\nexport const calculatePlaceholder = (placeholder: SyncNodePlaceholder) => (text: string) => {\n const index = text.indexOf(placeholder.hole)\n const left = text.charAt(index - 1)\n const right = text.charAt(index + 1)\n const notAWord = /[^\\w]|_/\n\n // cursor on the right\n if (!right)\n return placeholder.punctuation\n\n // cursor on the left\n if (!left)\n return placeholder.char\n\n if (notAWord.test(left) && notAWord.test(right))\n return placeholder.punctuation\n\n return placeholder.char\n}\n\nexport const calcOffset = (node: Node, from: number, placeholder: string) => {\n let offset = from\n let find = false\n node.descendants((n) => {\n if (find)\n return false\n if (n.isText) {\n const i = n.text?.indexOf(placeholder)\n if (i != null && i >= 0) {\n find = true\n offset += i\n return false\n }\n }\n offset += n.nodeSize\n return undefined\n })\n return offset\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/ctx'\nimport type { Node, NodeType } from '@milkdown/prose/model'\nimport type { Transaction } from '@milkdown/prose/state'\nimport { $ctx } from '@milkdown/utils'\n\nimport { swap } from './utils'\n\n/// @internal\nexport type ShouldSyncNode = (context: {\n prevNode: Node\n nextNode: Node\n ctx: Ctx\n tr: Transaction\n text: string\n}) => boolean\n\n/// @internal\nexport interface SyncNodePlaceholder {\n hole: string\n punctuation: string\n char: string\n}\n\n/// @internal\nexport interface InlineSyncConfig {\n placeholderConfig: SyncNodePlaceholder\n shouldSyncNode: ShouldSyncNode\n globalNodes: Array<NodeType | string>\n movePlaceholder: (placeholderToMove: string, text: string) => string\n}\n\n/// @internal\nexport const defaultConfig: InlineSyncConfig = {\n placeholderConfig: {\n hole: '∅',\n punctuation: '⁂',\n char: '∴',\n },\n globalNodes: ['footnote_definition'],\n shouldSyncNode: ({ prevNode, nextNode }) =>\n prevNode.inlineContent\n && nextNode\n // if node type changes, do not sync\n && prevNode.type === nextNode.type\n // if two node fully equal, we don't modify them\n && !prevNode.eq(nextNode),\n movePlaceholder: (placeholderToMove: string, text: string) => {\n const symbolsNeedToMove = ['*', '_']\n\n let index = text.indexOf(placeholderToMove)\n while (symbolsNeedToMove.includes(text[index - 1] || '') && symbolsNeedToMove.includes(text[index + 1] || '')) {\n text = swap(text, index, index + 1)\n index = index + 1\n }\n\n return text\n },\n}\n\n/// A slice that contains the inline sync config.\n/// You can set value to this slice to change the config.\n///\n/// ```typescript\n/// ctx.update(inlineSyncConfigCtx, (prevCfg) => ({\n/// ...prevCfg,\n/// // your config\n/// }));\n/// ```\n///\n/// You can find the default config [here](https://github.com/Saul-Mirone/milkdown/blob/main/packages/preset-commonmark/src/plugin/inline-sync-plugin/config.ts).\nexport const inlineSyncConfig = $ctx<InlineSyncConfig, 'inlineSyncConfig'>(defaultConfig, 'inlineSyncConfig')\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/ctx'\nimport { parserCtx, serializerCtx } from '@milkdown/core'\nimport type { Node } from '@milkdown/prose/model'\nimport type { EditorState } from '@milkdown/prose/state'\nimport { pipe } from '@milkdown/utils'\n\nimport { inlineSyncConfig } from './config'\nimport { calculatePlaceholder, keepLink, replacePunctuation } from './utils'\n\nexport interface InlineSyncContext {\n text: string\n prevNode: Node\n nextNode: Node\n placeholder: string\n}\n\nconst getNodeFromSelection = (state: EditorState) => {\n const { selection } = state\n const { $from } = selection\n const node = $from.node()\n\n return node\n}\n\nconst getMarkdown = (ctx: Ctx, state: EditorState, node: Node, globalNode: Node[]) => {\n const serializer = ctx.get(serializerCtx)\n const doc = state.schema.topNodeType.create(undefined, [node, ...globalNode])\n\n const markdown = serializer(doc)\n\n return markdown\n}\n\nconst addPlaceholder = (ctx: Ctx, markdown: string) => {\n const config = ctx.get(inlineSyncConfig.key)\n const holePlaceholder = config.placeholderConfig.hole\n\n const [firstLine = '', ...rest] = markdown.split('\\n\\n')\n\n const movePlaceholder = (text: string) => config.movePlaceholder(holePlaceholder, text)\n\n const handleText = pipe(replacePunctuation(holePlaceholder), movePlaceholder, keepLink)\n\n let text = handleText(firstLine)\n const placeholder = calculatePlaceholder(config.placeholderConfig)(text)\n\n text = text.replace(holePlaceholder, placeholder)\n\n text = [text, ...rest].join('\\n\\n')\n\n return [text, placeholder] as [markdown: string, placeholder: string]\n}\n\nconst getNewNode = (ctx: Ctx, text: string) => {\n const parser = ctx.get(parserCtx)\n const parsed = parser(text)\n\n if (!parsed)\n return null\n\n return parsed.firstChild\n}\n\nconst collectGlobalNodes = (ctx: Ctx, state: EditorState) => {\n const { globalNodes } = ctx.get(inlineSyncConfig.key)\n const nodes: Node[] = []\n\n state.doc.descendants((node) => {\n if (globalNodes.includes(node.type.name) || globalNodes.includes(node.type)) {\n nodes.push(node)\n return false\n }\n\n return undefined\n })\n\n return nodes\n}\n\nconst removeGlobalFromText = (text: string) => text.split('\\n\\n')[0] || ''\n\nexport const getContextByState = (ctx: Ctx, state: EditorState): InlineSyncContext | null => {\n try {\n const globalNode = collectGlobalNodes(ctx, state)\n const node = getNodeFromSelection(state)\n\n const markdown = getMarkdown(ctx, state, node, globalNode)\n const [text, placeholder] = addPlaceholder(ctx, markdown)\n\n const newNode = getNewNode(ctx, text)\n\n if (!newNode || node.type !== newNode.type)\n return null\n\n // @ts-expect-error hijack the node attribute\n newNode.attrs = { ...node.attrs }\n\n newNode.descendants((node) => {\n const marks = node.marks\n const link = marks.find(mark => mark.type.name === 'link')\n if (link && node.text?.includes(placeholder) && link.attrs.href.includes(placeholder)) {\n // @ts-expect-error hijack the mark attribute\n link.attrs.href = link.attrs.href.replace(placeholder, '')\n }\n })\n\n return {\n text: removeGlobalFromText(text),\n prevNode: node,\n nextNode: newNode,\n placeholder,\n }\n }\n catch {\n return null\n }\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/ctx'\nimport type { Attrs } from '@milkdown/prose/model'\nimport type { EditorState, PluginKey, Transaction } from '@milkdown/prose/state'\nimport { TextSelection } from '@milkdown/prose/state'\n\nimport { inlineSyncConfig } from './config'\nimport { getContextByState } from './context'\nimport { calcOffset } from './utils'\n\nexport const runReplacer = (\n ctx: Ctx,\n key: PluginKey,\n state: EditorState,\n dispatch: (tr: Transaction) => void,\n attrs: Attrs,\n) => {\n const { placeholderConfig } = ctx.get(inlineSyncConfig.key)\n const holePlaceholder = placeholderConfig.hole\n // insert a placeholder to restore the selection\n let tr = state.tr.setMeta(key, true).insertText(holePlaceholder, state.selection.from)\n\n const nextState = state.apply(tr)\n const context = getContextByState(ctx, nextState)\n\n if (!context)\n return\n\n const { $from } = nextState.selection\n const from = $from.before()\n const to = $from.after()\n\n const offset = calcOffset(context.nextNode, from, context.placeholder)\n\n tr = tr\n .replaceWith(from, to, context.nextNode)\n .setNodeMarkup(from, undefined, attrs)\n // delete the placeholder\n .delete(offset + 1, offset + 2)\n\n // restore the selection\n tr = tr.setSelection(TextSelection.near(tr.doc.resolve(offset + 1)))\n\n dispatch(tr)\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Ctx } from '@milkdown/ctx'\nimport { editorViewCtx } from '@milkdown/core'\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $prose } from '@milkdown/utils'\n\nimport { inlineSyncConfig } from './config'\nimport { getContextByState } from './context'\nimport { runReplacer } from './replacer'\n\n/// This plugin is used to sync the inline mark.\n/// It will create and remove marks automatically according to the user input.\n///\n/// When users type something, the plugin will transform the line (for better performance) to real markdown AST by serializer\n/// and render the AST to dom by parser, thus the input texts can be displayed correctly.\nexport const inlineSyncPlugin = $prose((ctx: Ctx) => {\n let requestId: number | null = null\n const inlineSyncPluginKey = new PluginKey('MILKDOWN_INLINE_SYNC')\n\n return new Plugin<null>({\n key: inlineSyncPluginKey,\n state: {\n init: () => {\n return null\n },\n apply: (tr, _value, _oldState, newState) => {\n const view = ctx.get(editorViewCtx)\n if (!view.hasFocus?.() || !view.editable)\n return null\n\n if (!tr.docChanged)\n return null\n\n const meta = tr.getMeta(inlineSyncPluginKey)\n if (meta)\n return null\n\n const context = getContextByState(ctx, newState)\n if (!context)\n return null\n\n if (requestId) {\n cancelAnimationFrame(requestId)\n requestId = null\n }\n\n const { prevNode, nextNode, text } = context\n\n const { shouldSyncNode } = ctx.get(inlineSyncConfig.key)\n\n if (!shouldSyncNode({ prevNode, nextNode, ctx, tr, text }))\n return null\n\n requestId = requestAnimationFrame(() => {\n requestId = null\n\n const { dispatch, state } = ctx.get(editorViewCtx)\n\n runReplacer(ctx, inlineSyncPluginKey, state, dispatch, prevNode.attrs)\n })\n\n return null\n },\n },\n })\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport type { Node, Parent } from 'unist'\nimport { visit } from 'unist-util-visit'\n\n/// This plugin is used to add order in list for remark AST.\nexport const remarkAddOrderInListPlugin = $remark(() => () => (tree: Node) => {\n visit(tree, 'list', (node: Parent & { ordered?: boolean; start?: number }) => {\n if (node.ordered) {\n const start = node.start ?? 1\n node.children.forEach((child, index) => {\n (child as Node & { label: number }).label = index + start\n })\n }\n })\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport type { Literal, Node, Parent } from 'unist'\nimport { visit } from 'unist-util-visit'\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(() => () => (tree: Node) => {\n const find = /[\\t ]*(?:\\r?\\n|\\r)/g\n visit(tree, 'text', (node: Literal, index: number, parent: Parent) => {\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","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport remarkInlineLinks from 'remark-inline-links'\n\n/// This plugin wraps [remark-inline-links](https://github.com/remarkjs/remark-inline-links).\nexport const remarkInlineLinkPlugin = $remark(() => remarkInlineLinks)\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'\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","/* 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/hardbreak'\n\n/// This plugin is used to clear the marks around the hardbreak node.\nexport const hardbreakClearMarkPlugin = $prose(() => {\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(), 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())\n _tr = _tr.setNodeMarkup(pos, hardbreakSchema.type(), undefined, [])\n })\n\n return _tr\n }\n\n return undefined\n },\n })\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $ctx, $prose } from '@milkdown/utils'\n\n/// This slice contains the nodes that within which the hardbreak will be ignored.\nexport const hardbreakFilterNodes = $ctx(['table', 'code_block'], 'hardbreakFilterNodes')\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","/* 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'\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()) {\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","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorState, Transaction } from '@milkdown/prose/state'\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $prose } from '@milkdown/utils'\nimport { listItemSchema } from '../node/list-item'\n\nimport { orderedListSchema } from '../node/ordered-list'\n\n/// This plugin is used to keep the label of list item up to date in ordered list.\nexport const syncListOrderPlugin = $prose(() => {\n const walkThrough = (state: EditorState, callback: (tr: Transaction) => void) => {\n const orderedListType = orderedListSchema.type()\n const listItemType = listItemSchema.type()\n let tr = state.tr\n state.doc.descendants((node, pos, parent, index) => {\n if (node.type === listItemType && parent?.type === orderedListType) {\n let changed = false\n const attrs = { ...node.attrs }\n if (node.attrs.listType !== 'ordered') {\n attrs.listType = 'ordered'\n changed = true\n }\n\n const base = parent?.maybeChild(0)\n if (base === node) {\n attrs.label = '1.'\n changed = true\n }\n else if (base?.type === listItemType && base.attrs.listType === 'ordered') {\n attrs.label = `${index + 1}.`\n changed = true\n }\n else if (node.attrs.label === '•') {\n attrs.label = `${index + 1}.`\n changed = true\n }\n\n if (changed)\n tr = tr.setNodeMarkup(pos, undefined, attrs)\n }\n })\n callback(tr)\n }\n return new Plugin({\n key: new PluginKey('MILKDOWN_KEEP_LIST_ORDER'),\n appendTransaction: (transactions, _oldState, nextState) => {\n let tr: Transaction | null = null\n if (transactions.some(transaction => transaction.docChanged)) {\n walkThrough(nextState, (t) => {\n tr = t\n })\n }\n\n return tr\n },\n })\n})\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { hardbreakClearMarkPlugin, hardbreakFilterNodes, hardbreakFilterPlugin, inlineNodesCursorPlugin, inlineSyncConfig, inlineSyncPlugin, remarkAddOrderInListPlugin, remarkInlineLinkPlugin, remarkLineBreak, syncHeadingIdPlugin, syncListOrderPlugin } from '../plugin'\n\n/// @internal\nexport const plugins: MilkdownPlugin[] = [\n inlineSyncConfig,\n inlineSyncPlugin,\n\n hardbreakClearMarkPlugin,\n hardbreakFilterNodes,\n hardbreakFilterPlugin,\n\n inlineNodesCursorPlugin,\n\n remarkAddOrderInListPlugin,\n remarkInlineLinkPlugin,\n remarkLineBreak,\n\n syncHeadingIdPlugin,\n syncListOrderPlugin,\n]\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { commands, inputrules, keymap, plugins, schema } from './composed'\n\nexport * from './node'\nexport * from './mark'\nexport * from './plugin'\nexport * from './composed'\n\n/// The commonmark preset, includes all the plugins.\nexport const commonmark = [schema, inputrules, commands, keymap, plugins].flat()\n"],"names":["emphasisAttr","$markAttr","emphasisSchema","$markSchema","ctx","value","mark","node","state","markType","toggleEmphasisCommand","$command","toggleMark","emphasisKeymap","$useKeymap","commands","commandsCtx","strongAttr","strongSchema","toggleStrongCommand","strongKeymap","inlineCodeAttr","inlineCodeSchema","toggleInlineCodeCommand","dispatch","selection","tr","from","to","x","name","t","inlineCodeKeymap","linkAttr","linkSchema","dom","expectDomTypeError","url","title","toggleLinkCommand","payload","updateLinkCommand","pos","n","p","type","start","end","linkMark","TextSelection","docSchema","$node","paragraphAttr","$nodeAttr","paragraphSchema","$nodeSchema","_a","contentArr","_","i","Fragment","turnIntoTextCommand","setBlockType","paragraphKeymap","headingIndex","defaultHeadingIdGenerator","headingIdGenerator","$ctx","headingAttr","headingSchema","getId","depth","wrapInHeadingInputRule","$inputRule","textblockTypeInputRule","match","_b","view","editorViewCtx","$from","level","wrapInHeadingCommand","downgradeHeadingCommand","headingKeymap","blockquoteAttr","blockquoteSchema","wrapInBlockquoteInputRule","wrappingInputRule","wrapInBlockquoteCommand","wrapIn","blockquoteKeymap","codeBlockAttr","codeBlockSchema","attr","language","createCodeBlockInputRule","createCodeBlockCommand","updateCodeBlockLanguageCommand","codeBlockKeymap","imageAttr","imageSchema","alt","insertImageCommand","src","updateImageCommand","nodeWithPos","findSelectedNodeOfType","newAttrs","insertImageInputRule","InputRule","matched","hardbreakAttr","hardbreakSchema","insertHardbreakCommand","Selection","hardbreakKeymap","hrAttr","hrSchema","insertHrInputRule","insertHrCommand","paragraph","_tr","sel","bulletListAttr","bulletListSchema","ordered","spread","wrapInBulletListInputRule","wrapInBulletListCommand","bulletListKeymap","orderedListAttr","orderedListSchema","wrapInOrderedListInputRule","wrapInOrderedListCommand","orderedListKeymap","listItemAttr","listItemSchema","label","listType","sinkListItemCommand","sinkListItem","liftListItemCommand","liftListItem","splitListItemCommand","splitListItem","listItemKeymap","textSchema","schema","inputrules","keymap","linkRegexp","punctuationRegexp","holePlaceholder","keepLink","str","text","span","swap","first","last","arr","temp","replacePunctuation","calculatePlaceholder","placeholder","index","left","right","notAWord","calcOffset","offset","find","defaultConfig","prevNode","nextNode","placeholderToMove","symbolsNeedToMove","inlineSyncConfig","getNodeFromSelection","getMarkdown","globalNode","serializer","serializerCtx","doc","addPlaceholder","markdown","config","firstLine","rest","movePlaceholder","pipe","getNewNode","parsed","parserCtx","collectGlobalNodes","globalNodes","nodes","removeGlobalFromText","getContextByState","newNode","link","runReplacer","key","attrs","placeholderConfig","nextState","context","inlineSyncPlugin","$prose","requestId","inlineSyncPluginKey","PluginKey","Plugin","_value","_oldState","newState","shouldSyncNode","remarkAddOrderInListPlugin","$remark","tree","visit","child","remarkLineBreak","parent","result","position","remarkInlineLinkPlugin","remarkInlineLinks","inlineNodesCursorPlugin","lock","inlineNodesCursorPluginKey","e","leftDec","Decoration","rightDec","DecorationSet","hardbreakClearMarkPlugin","trs","step","ReplaceStep","AddMarkStep","hardbreakFilterNodes","hardbreakFilterPlugin","notIn","isInsertHr","curDepth","canApply","syncHeadingIdPlugin","headingIdPluginKey","updateId","found","id","syncListOrderPlugin","walkThrough","callback","orderedListType","listItemType","changed","base","transactions","transaction","plugins","commonmark"],"mappings":"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"}