index.es.js.map 122 KB

1
  1. {"version":3,"file":"index.es.js","sources":["../src/__internal__/serialize-text.ts","../src/__internal__/with-meta.ts","../src/mark/emphasis.ts","../src/mark/strong.ts","../src/mark/inline-code.ts","../src/mark/link.ts","../src/node/doc.ts","../src/node/paragraph.ts","../src/node/heading.ts","../src/node/blockquote.ts","../src/node/code-block.ts","../src/node/image.ts","../src/node/hardbreak.ts","../src/node/hr.ts","../src/node/bullet-list.ts","../src/node/ordered-list.ts","../src/node/list-item.ts","../src/node/text.ts","../src/node/html.ts","../src/composed/schema.ts","../src/composed/inputrules.ts","../src/composed/commands.ts","../src/composed/keymap.ts","../src/plugin/remark-add-order-in-list-plugin.ts","../src/plugin/remark-line-break.ts","../src/plugin/remark-inline-link-plugin.ts","../src/plugin/remark-html-transformer.ts","../src/plugin/remark-marker-plugin.ts","../src/plugin/inline-nodes-cursor-plugin.ts","../src/plugin/hardbreak-clear-mark-plugin.ts","../src/plugin/hardbreak-filter-plugin.ts","../src/plugin/sync-heading-id-plugin.ts","../src/plugin/sync-list-order-plugin.ts","../src/composed/plugins.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport type { SerializerState } from '@milkdown/transformer'\nimport type { Node } from '@milkdown/prose/model'\nimport { Fragment } from '@milkdown/prose/model'\n\nexport function serializeText(state: SerializerState, node: Node) {\n const lastIsHardBreak\n = node.childCount >= 1 && node.lastChild?.type.name === 'hardbreak'\n if (!lastIsHardBreak) {\n state.next(node.content)\n return\n }\n\n const contentArr: Node[] = []\n node.content.forEach((n, _, i) => {\n if (i === node.childCount - 1)\n return\n\n contentArr.push(n)\n })\n state.next(Fragment.fromArray(contentArr))\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Meta, MilkdownPlugin } from '@milkdown/ctx'\n\nexport function withMeta<T extends MilkdownPlugin>(plugin: T, meta: Partial<Meta> & Pick<Meta, 'displayName'>): T {\n Object.assign(plugin, {\n meta: {\n package: '@milkdown/preset-commonmark',\n ...meta,\n },\n })\n\n return plugin\n}\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, remarkStringifyOptionsCtx } from '@milkdown/core'\nimport { $command, $inputRule, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { markRule } from '@milkdown/prose'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the emphasis mark.\nexport const emphasisAttr = $markAttr('emphasis')\n\nwithMeta(emphasisAttr, {\n displayName: 'Attr<emphasis>',\n group: 'Emphasis',\n})\n\n/// Emphasis mark schema.\nexport const emphasisSchema = $markSchema('emphasis', ctx => ({\n attrs: {\n marker: {\n default: ctx.get(remarkStringifyOptionsCtx).emphasis || '*',\n },\n },\n parseDOM: [\n { tag: 'i' },\n { tag: 'em' },\n { style: 'font-style', getAttrs: value => (value === 'italic') as false },\n ],\n toDOM: mark => ['em', ctx.get(emphasisAttr.key)(mark)],\n parseMarkdown: {\n match: node => node.type === 'emphasis',\n runner: (state, node, markType) => {\n state.openMark(markType, { marker: node.marker })\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === 'emphasis',\n runner: (state, mark) => {\n state.withMark(mark, 'emphasis', undefined, {\n marker: mark.attrs.marker,\n })\n },\n },\n}))\n\nwithMeta(emphasisSchema.mark, {\n displayName: 'MarkSchema<emphasis>',\n group: 'Emphasis',\n})\n\nwithMeta(emphasisSchema.ctx, {\n displayName: 'MarkSchemaCtx<emphasis>',\n group: 'Emphasis',\n})\n\n/// A command to toggle the emphasis mark.\nexport const toggleEmphasisCommand = $command('ToggleEmphasis', ctx => () => {\n return toggleMark(emphasisSchema.type(ctx))\n})\n\nwithMeta(toggleEmphasisCommand, {\n displayName: 'Command<toggleEmphasisCommand>',\n group: 'Emphasis',\n})\n\n/// Input rule for use `*` to create emphasis mark.\nexport const emphasisStarInputRule = $inputRule((ctx) => {\n return markRule(/(?:^|[^*])\\*([^*]+)\\*$/, emphasisSchema.type(ctx), {\n updateCaptured: ({ fullMatch, start }) =>\n !fullMatch.startsWith('*') ? { fullMatch: fullMatch.slice(1), start: start + 1 } : {},\n })\n})\n\nwithMeta(emphasisStarInputRule, {\n displayName: 'InputRule<emphasis>|Star',\n group: 'Emphasis',\n})\n\n/// Input rule for use `_` to create emphasis mark.\nexport const emphasisUnderscoreInputRule = $inputRule((ctx) => {\n return markRule(/(?:^|[^_])_([^_]+)_$/, emphasisSchema.type(ctx), {\n updateCaptured: ({ fullMatch, start }) =>\n !fullMatch.startsWith('_') ? { fullMatch: fullMatch.slice(1), start: start + 1 } : {},\n })\n})\n\nwithMeta(emphasisUnderscoreInputRule, {\n displayName: 'InputRule<emphasis>|Underscore',\n group: 'Emphasis',\n})\n\n/// Keymap for the emphasis mark.\n/// - `Mod-i` - Toggle the emphasis mark.\nexport const emphasisKeymap = $useKeymap('emphasisKeymap', {\n ToggleEmphasis: {\n shortcuts: 'Mod-i',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(toggleEmphasisCommand.key)\n },\n },\n})\n\nwithMeta(emphasisKeymap.ctx, {\n displayName: 'KeymapCtx<emphasis>',\n group: 'Emphasis',\n})\n\nwithMeta(emphasisKeymap.shortcuts, {\n displayName: 'Keymap<emphasis>',\n group: 'Emphasis',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, remarkStringifyOptionsCtx } from '@milkdown/core'\nimport { $command, $inputRule, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { markRule } from '@milkdown/prose'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the strong mark.\nexport const strongAttr = $markAttr('strong')\n\nwithMeta(strongAttr, {\n displayName: 'Attr<strong>',\n group: 'Strong',\n})\n\n/// Strong mark schema.\nexport const strongSchema = $markSchema('strong', ctx => ({\n attrs: {\n marker: {\n default: ctx.get(remarkStringifyOptionsCtx).strong || '*',\n },\n },\n parseDOM: [\n { tag: 'b' },\n { tag: 'strong' },\n { style: 'font-style', getAttrs: value => (value === 'bold') as false },\n ],\n toDOM: mark => ['strong', ctx.get(strongAttr.key)(mark)],\n parseMarkdown: {\n match: node => node.type === 'strong',\n runner: (state, node, markType) => {\n state.openMark(markType, { marker: node.marker })\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === 'strong',\n runner: (state, mark) => {\n state.withMark(mark, 'strong', undefined, {\n marker: mark.attrs.marker,\n })\n },\n },\n}))\n\nwithMeta(strongSchema.mark, {\n displayName: 'MarkSchema<strong>',\n group: 'Strong',\n})\n\nwithMeta(strongSchema.ctx, {\n displayName: 'MarkSchemaCtx<strong>',\n group: 'Strong',\n})\n\n/// A command to toggle the strong mark.\nexport const toggleStrongCommand = $command('ToggleStrong', ctx => () => {\n return toggleMark(strongSchema.type(ctx))\n})\n\nwithMeta(toggleStrongCommand, {\n displayName: 'Command<toggleStrongCommand>',\n group: 'Strong',\n})\n\n/// A input rule that will capture the strong mark.\nexport const strongInputRule = $inputRule((ctx) => {\n return markRule(/(?:\\*\\*|__)([^*_]+)(?:\\*\\*|__)$/, strongSchema.type(ctx))\n})\n\nwithMeta(strongInputRule, {\n displayName: 'InputRule<strong>',\n group: 'Strong',\n})\n\n/// Keymap for the strong mark.\n/// - `Mod-b` - Toggle the strong mark.\nexport const strongKeymap = $useKeymap('strongKeymap', {\n ToggleBold: {\n shortcuts: ['Mod-b'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(toggleStrongCommand.key)\n },\n },\n})\n\nwithMeta(strongKeymap.ctx, {\n displayName: 'KeymapCtx<strong>',\n group: 'Strong',\n})\n\nwithMeta(strongKeymap.shortcuts, {\n displayName: 'Keymap<strong>',\n group: 'Strong',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport type { MarkType } from '@milkdown/prose/model'\nimport { $command, $inputRule, $markAttr, $markSchema, $useKeymap } from '@milkdown/utils'\nimport { markRule } from '@milkdown/prose'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the inlineCode mark.\nexport const inlineCodeAttr = $markAttr('inlineCode')\n\nwithMeta(inlineCodeAttr, {\n displayName: 'Attr<inlineCode>',\n group: 'InlineCode',\n})\n\n/// InlineCode mark schema.\nexport const inlineCodeSchema = $markSchema('inlineCode', ctx => ({\n priority: 100,\n code: true,\n inclusive: false,\n parseDOM: [{ tag: 'code' }],\n toDOM: mark => ['code', ctx.get(inlineCodeAttr.key)(mark)],\n parseMarkdown: {\n match: node => node.type === 'inlineCode',\n runner: (state, node, markType) => {\n state.openMark(markType)\n state.addText(node.value as string)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === 'inlineCode',\n runner: (state, mark, node) => {\n state.withMark(mark, 'inlineCode', node.text || '')\n },\n },\n}))\n\nwithMeta(inlineCodeSchema.mark, {\n displayName: 'MarkSchema<inlineCode>',\n group: 'InlineCode',\n})\n\nwithMeta(inlineCodeSchema.ctx, {\n displayName: 'MarkSchemaCtx<inlineCode>',\n group: 'InlineCode',\n})\n\n/// A command to toggle the inlineCode mark.\nexport const toggleInlineCodeCommand = $command('ToggleInlineCode', ctx => () => (state, dispatch) => {\n const { selection, tr } = state\n if (selection.empty)\n return false\n const { from, to } = selection\n\n const has = state.doc.rangeHasMark(from, to, inlineCodeSchema.type(ctx))\n // remove exists inlineCode mark if have\n if (has) {\n dispatch?.(tr.removeMark(from, to, inlineCodeSchema.type(ctx)))\n return true\n }\n\n const restMarksName = Object.keys(state.schema.marks).filter(x => x !== inlineCodeSchema.type.name)\n\n // remove other marks\n restMarksName\n .map(name => state.schema.marks[name] as MarkType)\n .forEach((t) => {\n tr.removeMark(from, to, t)\n })\n\n // add inlineCode mark\n dispatch?.(tr.addMark(from, to, inlineCodeSchema.type(ctx).create()))\n return true\n})\n\nwithMeta(toggleInlineCodeCommand, {\n displayName: 'Command<toggleInlineCodeCommand>',\n group: 'InlineCode',\n})\n\n/// Input rule for create inlineCode mark.\nexport const inlineCodeInputRule = $inputRule((ctx) => {\n return markRule(/(?:\\`)([^\\`]+)(?:\\`)$/, inlineCodeSchema.type(ctx))\n})\n\nwithMeta(inlineCodeInputRule, {\n displayName: 'InputRule<inlineCodeInputRule>',\n group: 'InlineCode',\n})\n\n/// Keymap for the inlineCode mark.\n/// - `Mod-e` - Toggle the inlineCode mark.\nexport const inlineCodeKeymap = $useKeymap('inlineCodeKeymap', {\n ToggleInlineCode: {\n shortcuts: 'Mod-e',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(toggleInlineCodeCommand.key)\n },\n },\n})\n\nwithMeta(inlineCodeKeymap.ctx, {\n displayName: 'KeymapCtx<inlineCode>',\n group: 'InlineCode',\n})\n\nwithMeta(inlineCodeKeymap.shortcuts, {\n displayName: 'Keymap<inlineCode>',\n group: 'InlineCode',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport type { Node as ProseNode } from '@milkdown/prose/model'\nimport { TextSelection } from '@milkdown/prose/state'\nimport { $command, $markAttr, $markSchema } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the link mark.\nexport const linkAttr = $markAttr('link')\n\nwithMeta(linkAttr, {\n displayName: 'Attr<link>',\n group: 'Link',\n})\n\n/// Link mark schema.\nexport const linkSchema = $markSchema('link', ctx => ({\n attrs: {\n href: {},\n title: { default: null },\n },\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return { href: dom.getAttribute('href'), title: dom.getAttribute('title') }\n },\n },\n ],\n toDOM: mark => ['a', { ...ctx.get(linkAttr.key)(mark), ...mark.attrs }],\n parseMarkdown: {\n match: node => node.type === 'link',\n runner: (state, node, markType) => {\n const url = node.url as string\n const title = node.title as string\n state.openMark(markType, { href: url, title })\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: mark => mark.type.name === 'link',\n runner: (state, mark) => {\n state.withMark(mark, 'link', undefined, {\n title: mark.attrs.title,\n url: mark.attrs.href,\n })\n },\n },\n}))\n\nwithMeta(linkSchema.mark, {\n displayName: 'MarkSchema<link>',\n group: 'Link',\n})\n\n/// @internal\nexport interface UpdateLinkCommandPayload {\n href?: string\n title?: string\n}\n/// A command to toggle the link mark.\n/// You can pass the `href` and `title` to the link.\nexport const toggleLinkCommand = $command('ToggleLink', ctx => (payload: UpdateLinkCommandPayload = {}) => toggleMark(linkSchema.type(ctx), payload))\n\nwithMeta(toggleLinkCommand, {\n displayName: 'Command<toggleLinkCommand>',\n group: 'Link',\n})\n\n/// A command to update the link mark.\n/// You can pass the `href` and `title` to update the link.\nexport const updateLinkCommand = $command('UpdateLink', ctx => (payload: UpdateLinkCommandPayload = {}) => (state, dispatch) => {\n if (!dispatch)\n return false\n\n let node: ProseNode | undefined\n let pos = -1\n const { selection } = state\n const { from, to } = selection\n state.doc.nodesBetween(from, from === to ? to + 1 : to, (n, p) => {\n if (linkSchema.type(ctx).isInSet(n.marks)) {\n node = n\n pos = p\n return false\n }\n\n return undefined\n })\n\n if (!node)\n return false\n\n const mark = node.marks.find(({ type }) => type === linkSchema.type(ctx))\n if (!mark)\n return false\n\n const start = pos\n const end = pos + node.nodeSize\n const { tr } = state\n const linkMark = linkSchema.type(ctx).create({ ...mark.attrs, ...payload })\n if (!linkMark)\n return false\n\n dispatch(\n tr\n .removeMark(start, end, mark)\n .addMark(start, end, linkMark)\n .setSelection(new TextSelection(tr.selection.$anchor))\n .scrollIntoView(),\n )\n\n return true\n})\n\nwithMeta(updateLinkCommand, {\n displayName: 'Command<updateLinkCommand>',\n group: 'Link',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $node } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// The top-level document node.\nexport const docSchema = $node('doc', () => ({\n content: 'block+',\n parseMarkdown: {\n match: ({ type }) => type === 'root',\n runner: (state, node, type) => {\n state.injectRoot(node, type)\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'doc',\n runner: (state, node) => {\n state.openNode('root')\n state.next(node.content)\n },\n },\n}))\n\nwithMeta(docSchema, {\n displayName: 'NodeSchema<doc>',\n group: 'Doc',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { serializeText, withMeta } from '../__internal__'\n\n/// HTML attributes for paragraph node.\nexport const paragraphAttr = $nodeAttr('paragraph')\n\nwithMeta(paragraphAttr, {\n displayName: 'Attr<paragraph>',\n group: 'Paragraph',\n})\n\n/// Schema for paragraph node.\nexport const paragraphSchema = $nodeSchema('paragraph', ctx => ({\n content: 'inline*',\n group: 'block',\n parseDOM: [{ tag: 'p' }],\n toDOM: node => ['p', ctx.get(paragraphAttr.key)(node), 0],\n parseMarkdown: {\n match: node => node.type === 'paragraph',\n runner: (state, node, type) => {\n state.openNode(type)\n if (node.children)\n state.next(node.children)\n\n else\n state.addText((node.value || '') as string)\n\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'paragraph',\n runner: (state, node) => {\n state.openNode('paragraph')\n serializeText(state, node)\n state.closeNode()\n },\n },\n}))\n\nwithMeta(paragraphSchema.node, {\n displayName: 'NodeSchema<paragraph>',\n group: 'Paragraph',\n})\nwithMeta(paragraphSchema.ctx, {\n displayName: 'NodeSchemaCtx<paragraph>',\n group: 'Paragraph',\n})\n\n/// This command can turn the selected block into paragraph.\nexport const turnIntoTextCommand = $command('TurnIntoText', ctx => () => setBlockType(paragraphSchema.type(ctx)))\n\nwithMeta(turnIntoTextCommand, {\n displayName: 'Command<turnIntoTextCommand>',\n group: 'Paragraph',\n})\n\n/// Keymap for paragraph node.\n/// - `<Mod-Alt-0>`: Turn the selected block into paragraph.\nexport const paragraphKeymap = $useKeymap('paragraphKeymap', {\n TurnIntoText: {\n shortcuts: 'Mod-Alt-0',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(turnIntoTextCommand.key)\n },\n },\n})\n\nwithMeta(paragraphKeymap.ctx, {\n displayName: 'KeymapCtx<paragraph>',\n group: 'Paragraph',\n})\n\nwithMeta(paragraphKeymap.shortcuts, {\n displayName: 'Keymap<paragraph>',\n group: 'Paragraph',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, editorViewCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { textblockTypeInputRule } from '@milkdown/prose/inputrules'\nimport type { Node } from '@milkdown/prose/model'\nimport { $command, $ctx, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport slugify from '@sindresorhus/slugify'\nimport { serializeText, withMeta } from '../__internal__'\nimport { paragraphSchema } from './paragraph'\n\nconst headingIndex = Array(6)\n .fill(0)\n .map((_, i) => i + 1)\n\nfunction defaultHeadingIdGenerator(node: Node) {\n return slugify(node.textContent)\n}\n\n/// This is a slice contains a function to generate heading id.\n/// You can configure it to generate id in your own way.\nexport const headingIdGenerator = $ctx(defaultHeadingIdGenerator, 'headingIdGenerator')\n\nwithMeta(headingIdGenerator, {\n displayName: 'Ctx<HeadingIdGenerator>',\n group: 'Heading',\n})\n\n/// HTML attributes for heading node.\nexport const headingAttr = $nodeAttr('heading')\n\nwithMeta(headingAttr, {\n displayName: 'Attr<heading>',\n group: 'Heading',\n})\n\n/// Schema for heading node.\nexport const headingSchema = $nodeSchema('heading', (ctx) => {\n const getId = ctx.get(headingIdGenerator.key)\n return {\n content: 'inline*',\n group: 'block',\n defining: true,\n attrs: {\n id: {\n default: '',\n },\n level: {\n default: 1,\n },\n },\n parseDOM: headingIndex.map(x => ({\n tag: `h${x}`,\n getAttrs: (node) => {\n if (!(node instanceof HTMLElement))\n throw expectDomTypeError(node)\n\n return { level: x, id: node.id }\n },\n })),\n toDOM: (node) => {\n return [\n `h${node.attrs.level}`,\n {\n ...ctx.get(headingAttr.key)(node),\n id: node.attrs.id || getId(node),\n },\n 0,\n ]\n },\n parseMarkdown: {\n match: ({ type }) => type === 'heading',\n runner: (state, node, type) => {\n const depth = node.depth as number\n state.openNode(type, { level: depth })\n state.next(node.children)\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'heading',\n runner: (state, node) => {\n state.openNode('heading', undefined, { depth: node.attrs.level })\n serializeText(state, node)\n state.closeNode()\n },\n },\n }\n})\n\nwithMeta(headingSchema.node, {\n displayName: 'NodeSchema<heading>',\n group: 'Heading',\n})\n\nwithMeta(headingSchema.ctx, {\n displayName: 'NodeSchemaCtx<heading>',\n group: 'Heading',\n})\n\n/// This input rule can turn the selected block into heading.\n/// You can input numbers of `#` and a `space` to create heading.\nexport const wrapInHeadingInputRule = $inputRule((ctx) => {\n return textblockTypeInputRule(/^(?<hashes>#+)\\s$/, headingSchema.type(ctx), (match) => {\n const x = match.groups?.hashes?.length || 0\n\n const view = ctx.get(editorViewCtx)\n const { $from } = view.state.selection\n const node = $from.node()\n if (node.type.name === 'heading') {\n let level = Number(node.attrs.level) + Number(x)\n if (level > 6)\n level = 6\n\n return { level }\n }\n return { level: x }\n })\n})\n\nwithMeta(wrapInHeadingInputRule, {\n displayName: 'InputRule<wrapInHeadingInputRule>',\n group: 'Heading',\n})\n\n/// This command can turn the selected block into heading.\n/// You can pass the level of heading to this command.\n/// By default, the level is 1, which means it will create a `h1` element.\nexport const wrapInHeadingCommand = $command('WrapInHeading', (ctx) => {\n return (level?: number) => {\n level ??= 1\n\n if (level < 1)\n return setBlockType(paragraphSchema.type(ctx))\n\n return setBlockType(headingSchema.type(ctx), { level })\n }\n})\n\nwithMeta(wrapInHeadingCommand, {\n displayName: 'Command<wrapInHeadingCommand>',\n group: 'Heading',\n})\n\n/// This command can downgrade the selected heading.\n/// For example, if you have a `h2` element, and you call this command, you will get a `h1` element.\n/// If the element is already a `h1` element, it will turn it into a `p` element.\nexport const downgradeHeadingCommand = $command('DowngradeHeading', ctx => () =>\n (state, dispatch, view) => {\n const { $from } = state.selection\n const node = $from.node()\n if (node.type !== headingSchema.type(ctx) || !state.selection.empty || $from.parentOffset !== 0)\n return false\n\n const level = node.attrs.level - 1\n if (!level)\n return setBlockType(paragraphSchema.type(ctx))(state, dispatch, view)\n\n dispatch?.(\n state.tr.setNodeMarkup(state.selection.$from.before(), undefined, {\n ...node.attrs,\n level,\n }),\n )\n return true\n })\n\nwithMeta(downgradeHeadingCommand, {\n displayName: 'Command<downgradeHeadingCommand>',\n group: 'Heading',\n})\n\n/// Keymap for heading node.\n/// - `<Mod-Alt-{1-6}>`: Turn the selected block into `h{1-6}` element.\n/// - `<Delete>/<Backspace>`: Downgrade the selected heading.\nexport const headingKeymap = $useKeymap('headingKeymap', {\n TurnIntoH1: {\n shortcuts: 'Mod-Alt-1',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 1)\n },\n },\n TurnIntoH2: {\n shortcuts: 'Mod-Alt-2',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 2)\n },\n },\n TurnIntoH3: {\n shortcuts: 'Mod-Alt-3',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 3)\n },\n },\n TurnIntoH4: {\n shortcuts: 'Mod-Alt-4',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 4)\n },\n },\n TurnIntoH5: {\n shortcuts: 'Mod-Alt-5',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 5)\n },\n },\n TurnIntoH6: {\n shortcuts: 'Mod-Alt-6',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInHeadingCommand.key, 6)\n },\n },\n DowngradeHeading: {\n shortcuts: ['Delete', 'Backspace'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(downgradeHeadingCommand.key)\n },\n },\n})\n\nwithMeta(headingKeymap.ctx, {\n displayName: 'KeymapCtx<heading>',\n group: 'Heading',\n})\n\nwithMeta(headingKeymap.shortcuts, {\n displayName: 'Keymap<heading>',\n group: 'Heading',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport type { $NodeSchema } from '@milkdown/utils'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for blockquote node.\nexport const blockquoteAttr = $nodeAttr('blockquote')\n\nwithMeta(blockquoteAttr, {\n displayName: 'Attr<blockquote>',\n group: 'Blockquote',\n})\n\n/// Schema for blockquote node.\nexport const blockquoteSchema: $NodeSchema<'blockquote'> = $nodeSchema('blockquote', ctx => ({\n content: 'block+',\n group: 'block',\n defining: true,\n parseDOM: [{ tag: 'blockquote' }],\n toDOM: node => ['blockquote', ctx.get(blockquoteAttr.key)(node), 0],\n parseMarkdown: {\n match: ({ type }) => type === 'blockquote',\n runner: (state, node, type) => {\n state.openNode(type).next(node.children).closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'blockquote',\n runner: (state, node) => {\n state.openNode('blockquote').next(node.content).closeNode()\n },\n },\n}))\n\nwithMeta(blockquoteSchema.node, {\n displayName: 'NodeSchema<blockquote>',\n group: 'Blockquote',\n})\n\nwithMeta(blockquoteSchema.ctx, {\n displayName: 'NodeSchemaCtx<blockquote>',\n group: 'Blockquote',\n})\n\n/// This input rule will convert a line that starts with `> ` into a blockquote.\n/// You can type `> ` at the start of a line to create a blockquote.\nexport const wrapInBlockquoteInputRule = $inputRule(ctx => wrappingInputRule(/^\\s*>\\s$/, blockquoteSchema.type(ctx)))\n\nwithMeta(wrapInBlockquoteInputRule, {\n displayName: 'InputRule<wrapInBlockquoteInputRule>',\n group: 'Blockquote',\n})\n\n/// This command will wrap the current selection in a blockquote.\nexport const wrapInBlockquoteCommand = $command('WrapInBlockquote', ctx => () => wrapIn(blockquoteSchema.type(ctx)))\n\nwithMeta(wrapInBlockquoteCommand, {\n displayName: 'Command<wrapInBlockquoteCommand>',\n group: 'Blockquote',\n})\n\n/// Keymap for blockquote.\n/// - `Mod-Shift-b`: Wrap selection in blockquote.\nexport const blockquoteKeymap = $useKeymap('blockquoteKeymap', {\n WrapInBlockquote: {\n shortcuts: 'Mod-Shift-b',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInBlockquoteCommand.key)\n },\n },\n})\n\nwithMeta(blockquoteKeymap.ctx, {\n displayName: 'KeymapCtx<blockquote>',\n group: 'Blockquote',\n})\n\nwithMeta(blockquoteKeymap.shortcuts, {\n displayName: 'Keymap<blockquote>',\n group: 'Blockquote',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { textblockTypeInputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for code block node.\nexport const codeBlockAttr = $nodeAttr('codeBlock', () => ({\n pre: {},\n code: {},\n}))\n\nwithMeta(codeBlockAttr, {\n displayName: 'Attr<codeBlock>',\n group: 'CodeBlock',\n})\n\n/// Schema for code block node.\nexport const codeBlockSchema = $nodeSchema('code_block', (ctx) => {\n return {\n content: 'text*',\n group: 'block',\n marks: '',\n defining: true,\n code: true,\n attrs: {\n language: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return { language: dom.dataset.language }\n },\n },\n ],\n toDOM: (node) => {\n const attr = ctx.get(codeBlockAttr.key)(node)\n return [\n 'pre',\n {\n ...attr.pre,\n 'data-language': node.attrs.language,\n },\n ['code', attr.code, 0],\n ]\n },\n parseMarkdown: {\n match: ({ type }) => type === 'code',\n runner: (state, node, type) => {\n const language = node.lang as string\n const value = node.value as string\n state.openNode(type, { language })\n if (value)\n state.addText(value)\n\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'code_block',\n runner: (state, node) => {\n state.addNode('code', undefined, node.content.firstChild?.text || '', {\n lang: node.attrs.language,\n })\n },\n },\n }\n})\n\nwithMeta(codeBlockSchema.node, {\n displayName: 'NodeSchema<codeBlock>',\n group: 'CodeBlock',\n})\n\nwithMeta(codeBlockSchema.ctx, {\n displayName: 'NodeSchemaCtx<codeBlock>',\n group: 'CodeBlock',\n})\n\n/// A input rule for creating code block.\n/// For example, ` ```javascript ` will create a code block with language javascript.\nexport const createCodeBlockInputRule = $inputRule(ctx => textblockTypeInputRule(/^```(?<language>[a-z]*)?[\\s\\n]$/, codeBlockSchema.type(ctx), match => ({\n language: match.groups?.language ?? '',\n})))\n\nwithMeta(createCodeBlockInputRule, {\n displayName: 'InputRule<createCodeBlockInputRule>',\n group: 'CodeBlock',\n})\n\n/// A command for creating code block.\n/// You can pass the language of the code block as the parameter.\nexport const createCodeBlockCommand = $command('CreateCodeBlock', ctx => (language = '') => setBlockType(codeBlockSchema.type(ctx), { language }))\n\nwithMeta(createCodeBlockCommand, {\n displayName: 'Command<createCodeBlockCommand>',\n group: 'CodeBlock',\n})\n\n/// A command for updating the code block language of the target position.\nexport const updateCodeBlockLanguageCommand = $command('UpdateCodeBlockLanguage', () => ({ pos, language }: { pos: number, language: string } = { pos: -1, language: '' }) => (state, dispatch) => {\n if (pos >= 0) {\n dispatch?.(state.tr.setNodeAttribute(pos, 'language', language))\n return true\n }\n\n return false\n})\n\nwithMeta(updateCodeBlockLanguageCommand, {\n displayName: 'Command<updateCodeBlockLanguageCommand>',\n group: 'CodeBlock',\n})\n\n/// Keymap for code block.\n/// - `Mod-Alt-c`: Create a code block.\nexport const codeBlockKeymap = $useKeymap('codeBlockKeymap', {\n CreateCodeBlock: {\n shortcuts: 'Mod-Alt-c',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(createCodeBlockCommand.key)\n },\n },\n})\n\nwithMeta(codeBlockKeymap.ctx, {\n displayName: 'KeymapCtx<codeBlock>',\n group: 'CodeBlock',\n})\n\nwithMeta(codeBlockKeymap.shortcuts, {\n displayName: 'Keymap<codeBlock>',\n group: 'CodeBlock',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { findSelectedNodeOfType } from '@milkdown/prose'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for image node.\nexport const imageAttr = $nodeAttr('image')\n\nwithMeta(imageAttr, {\n displayName: 'Attr<image>',\n group: 'Image',\n})\n\n/// Schema for image node.\nexport const imageSchema = $nodeSchema('image', (ctx) => {\n return {\n inline: true,\n group: 'inline',\n selectable: true,\n draggable: true,\n marks: '',\n atom: true,\n defining: true,\n isolating: true,\n attrs: {\n src: { default: '' },\n alt: { default: '' },\n title: { default: '' },\n },\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n src: dom.getAttribute('src') || '',\n alt: dom.getAttribute('alt') || '',\n title: dom.getAttribute('title') || dom.getAttribute('alt') || '',\n }\n },\n },\n ],\n toDOM: (node) => {\n return ['img', { ...ctx.get(imageAttr.key)(node), ...node.attrs }]\n },\n parseMarkdown: {\n match: ({ type }) => type === 'image',\n runner: (state, node, type) => {\n const url = node.url as string\n const alt = node.alt as string\n const title = node.title as string\n state.addNode(type, {\n src: url,\n alt,\n title,\n })\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'image',\n runner: (state, node) => {\n state.addNode('image', undefined, undefined, {\n title: node.attrs.title,\n url: node.attrs.src,\n alt: node.attrs.alt,\n })\n },\n },\n }\n})\n\nwithMeta(imageSchema.node, {\n displayName: 'NodeSchema<image>',\n group: 'Image',\n})\n\nwithMeta(imageSchema.ctx, {\n displayName: 'NodeSchemaCtx<image>',\n group: 'Image',\n})\n\n/// @internal\nexport interface UpdateImageCommandPayload {\n src?: string\n title?: string\n alt?: string\n}\n\n/// This command will insert a image node.\n/// You can pass a payload to set `src`, `alt` and `title` for the image node.\nexport const insertImageCommand = $command('InsertImage', ctx => (payload: UpdateImageCommandPayload = {}) =>\n (state, dispatch) => {\n if (!dispatch)\n return true\n\n const { src = '', alt = '', title = '' } = payload\n\n const node = imageSchema.type(ctx).create({ src, alt, title })\n if (!node)\n return true\n\n dispatch(state.tr.replaceSelectionWith(node).scrollIntoView())\n return true\n })\n\nwithMeta(insertImageCommand, {\n displayName: 'Command<insertImageCommand>',\n group: 'Image',\n})\n\n/// This command will update the selected image node.\n/// You can pass a payload to update `src`, `alt` and `title` for the image node.\nexport const updateImageCommand = $command('UpdateImage', ctx => (payload: UpdateImageCommandPayload = {}) => (state, dispatch) => {\n const nodeWithPos = findSelectedNodeOfType(state.selection, imageSchema.type(ctx))\n if (!nodeWithPos)\n return false\n\n const { node, pos } = nodeWithPos\n\n const newAttrs = { ...node.attrs }\n const { src, alt, title } = payload\n if (src !== undefined)\n newAttrs.src = src\n if (alt !== undefined)\n newAttrs.alt = alt\n if (title !== undefined)\n newAttrs.title = title\n\n dispatch?.(state.tr.setNodeMarkup(pos, undefined, newAttrs).scrollIntoView())\n return true\n})\n\nwithMeta(updateImageCommand, {\n displayName: 'Command<updateImageCommand>',\n group: 'Image',\n})\n\n/// This input rule will insert a image node.\n/// You can input `![alt](src \"title\")` to insert a image node.\n/// The `title` is optional.\nexport const insertImageInputRule = $inputRule(ctx => new InputRule(\n /!\\[(?<alt>.*?)]\\((?<filename>.*?)\\s*(?=\"|\\))\"?(?<title>[^\"]+)?\"?\\)/,\n (state, match, start, end) => {\n const [matched, alt, src = '', title] = match\n if (matched)\n return state.tr.replaceWith(start, end, imageSchema.type(ctx).create({ src, alt, title }))\n\n return null\n },\n))\n\nwithMeta(insertImageInputRule, {\n displayName: 'InputRule<insertImageInputRule>',\n group: 'Image',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { Selection, TextSelection } from '@milkdown/prose/state'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for the hardbreak node.\n///\n/// Default value:\n/// - `data-is-inline` - Whether the hardbreak is inline.\nexport const hardbreakAttr = $nodeAttr('hardbreak', (node) => {\n return {\n 'data-is-inline': node.attrs.isInline,\n }\n})\n\nwithMeta(hardbreakAttr, {\n displayName: 'Attr<hardbreak>',\n group: 'Hardbreak',\n})\n\n/// Hardbreak node schema.\nexport const hardbreakSchema = $nodeSchema('hardbreak', ctx => ({\n inline: true,\n group: 'inline',\n attrs: {\n isInline: {\n default: false,\n },\n },\n selectable: false,\n parseDOM: [{ tag: 'br' }],\n toDOM: node => ['br', ctx.get(hardbreakAttr.key)(node)],\n parseMarkdown: {\n match: ({ type }) => type === 'break',\n runner: (state, node, type) => {\n state.addNode(type, { isInline: Boolean((node.data as (undefined | { isInline: boolean }))?.isInline) })\n },\n },\n leafText: () => '\\n',\n toMarkdown: {\n match: node => node.type.name === 'hardbreak',\n runner: (state, node) => {\n if (node.attrs.isInline)\n state.addNode('text', undefined, '\\n')\n\n else\n state.addNode('break')\n },\n },\n}))\n\nwithMeta(hardbreakSchema.node, {\n displayName: 'NodeSchema<hardbreak>',\n group: 'Hardbreak',\n})\n\nwithMeta(hardbreakSchema.ctx, {\n displayName: 'NodeSchemaCtx<hardbreak>',\n group: 'Hardbreak',\n})\n\n/// Command to insert a hardbreak.\nexport const insertHardbreakCommand = $command('InsertHardbreak', ctx => () => (state, dispatch) => {\n const { selection, tr } = state\n if (!(selection instanceof TextSelection))\n return false\n\n if (selection.empty) {\n // Transform two successive hardbreak into a new line\n const node = selection.$from.node()\n if (node.childCount > 0 && node.lastChild?.type.name === 'hardbreak') {\n dispatch?.(\n tr\n .replaceRangeWith(selection.to - 1, selection.to, state.schema.node('paragraph'))\n .setSelection(Selection.near(tr.doc.resolve(selection.to)))\n .scrollIntoView(),\n )\n return true\n }\n }\n dispatch?.(tr.setMeta('hardbreak', true).replaceSelectionWith(hardbreakSchema.type(ctx).create()).scrollIntoView())\n return true\n})\n\nwithMeta(insertHardbreakCommand, {\n displayName: 'Command<insertHardbreakCommand>',\n group: 'Hardbreak',\n})\n\n/// Keymap for the hardbreak node.\n/// - `Shift-Enter` - Insert a hardbreak.\nexport const hardbreakKeymap = $useKeymap('hardbreakKeymap', {\n InsertHardbreak: {\n shortcuts: 'Shift-Enter',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(insertHardbreakCommand.key)\n },\n },\n})\n\nwithMeta(hardbreakKeymap.ctx, {\n displayName: 'KeymapCtx<hardbreak>',\n group: 'Hardbreak',\n})\n\nwithMeta(hardbreakKeymap.shortcuts, {\n displayName: 'Keymap<hardbreak>',\n group: 'Hardbreak',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { Selection } from '@milkdown/prose/state'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\nimport { paragraphSchema } from './paragraph'\n\n/// HTML attributes for the hr node.\nexport const hrAttr = $nodeAttr('hr')\n\nwithMeta(hrAttr, {\n displayName: 'Attr<hr>',\n group: 'Hr',\n})\n\n/// Hr node schema.\nexport const hrSchema = $nodeSchema('hr', ctx => ({\n group: 'block',\n parseDOM: [{ tag: 'hr' }],\n toDOM: node => ['hr', ctx.get(hrAttr.key)(node)],\n parseMarkdown: {\n match: ({ type }) => type === 'thematicBreak',\n runner: (state, _, type) => {\n state.addNode(type)\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'hr',\n runner: (state) => {\n state.addNode('thematicBreak')\n },\n },\n}))\n\nwithMeta(hrSchema.node, {\n displayName: 'NodeSchema<hr>',\n group: 'Hr',\n})\n\nwithMeta(hrSchema.ctx, {\n displayName: 'NodeSchemaCtx<hr>',\n group: 'Hr',\n})\n\n/// Input rule to insert a hr.\n/// For example, `---` will be converted to a hr.\nexport const insertHrInputRule = $inputRule(ctx => new InputRule(\n /^(?:---|___\\s|\\*\\*\\*\\s)$/,\n (state, match, start, end) => {\n const { tr } = state\n\n if (match[0])\n tr.replaceWith(start - 1, end, hrSchema.type(ctx).create())\n\n return tr\n },\n))\n\nwithMeta(insertHrInputRule, {\n displayName: 'InputRule<insertHrInputRule>',\n group: 'Hr',\n})\n\n/// Command to insert a hr.\nexport const insertHrCommand = $command('InsertHr', ctx => () => (state, dispatch) => {\n if (!dispatch)\n return true\n\n const paragraph = paragraphSchema.node.type(ctx).create()\n const { tr, selection } = state\n const { from } = selection\n const node = hrSchema.type(ctx).create()\n if (!node)\n return true\n\n const _tr = tr.replaceSelectionWith(node).insert(from, paragraph)\n const sel = Selection.findFrom(_tr.doc.resolve(from), 1, true)\n if (!sel)\n return true\n\n dispatch(_tr.setSelection(sel).scrollIntoView())\n return true\n})\n\nwithMeta(insertHrCommand, {\n displayName: 'Command<insertHrCommand>',\n group: 'Hr',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for bullet list node.\nexport const bulletListAttr = $nodeAttr('bulletList')\n\nwithMeta(bulletListAttr, {\n displayName: 'Attr<bulletList>',\n group: 'BulletList',\n})\n\n/// Schema for bullet list node.\nexport const bulletListSchema = $nodeSchema('bullet_list', (ctx) => {\n return {\n content: 'listItem+',\n group: 'block',\n attrs: {\n spread: {\n default: false,\n },\n },\n parseDOM: [\n {\n tag: 'ul',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n spread: dom.dataset.spread,\n }\n },\n },\n ],\n toDOM: (node) => {\n return [\n 'ul',\n {\n ...ctx.get(bulletListAttr.key)(node),\n 'data-spread': node.attrs.spread,\n },\n 0,\n ]\n },\n parseMarkdown: {\n match: ({ type, ordered }) => type === 'list' && !ordered,\n runner: (state, node, type) => {\n const spread = node.spread != null ? `${node.spread}` : 'false'\n state.openNode(type, { spread }).next(node.children).closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'bullet_list',\n runner: (state, node) => {\n state\n .openNode('list', undefined, { ordered: false, spread: node.attrs.spread === 'true' })\n .next(node.content)\n .closeNode()\n },\n },\n }\n})\n\nwithMeta(bulletListSchema.node, {\n displayName: 'NodeSchema<bulletList>',\n group: 'BulletList',\n})\n\nwithMeta(bulletListSchema.ctx, {\n displayName: 'NodeSchemaCtx<bulletList>',\n group: 'BulletList',\n})\n\n/// Input rule for wrapping a block in bullet list node.\nexport const wrapInBulletListInputRule = $inputRule(ctx => wrappingInputRule(/^\\s*([-+*])\\s$/, bulletListSchema.type(ctx)))\n\nwithMeta(wrapInBulletListInputRule, {\n displayName: 'InputRule<wrapInBulletListInputRule>',\n group: 'BulletList',\n})\n\n/// Command for creating bullet list node.\nexport const wrapInBulletListCommand = $command('WrapInBulletList', ctx => () => wrapIn(bulletListSchema.type(ctx)))\n\nwithMeta(wrapInBulletListCommand, {\n displayName: 'Command<wrapInBulletListCommand>',\n group: 'BulletList',\n})\n\n/// Keymap for bullet list node.\n/// - `Mod-Alt-8`: Wrap a block in bullet list.\nexport const bulletListKeymap = $useKeymap('bulletListKeymap', {\n WrapInBulletList: {\n shortcuts: 'Mod-Alt-8',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInBulletListCommand.key)\n },\n },\n})\n\nwithMeta(bulletListKeymap.ctx, {\n displayName: 'KeymapCtx<bulletListKeymap>',\n group: 'BulletList',\n})\n\nwithMeta(bulletListKeymap.shortcuts, {\n displayName: 'Keymap<bulletListKeymap>',\n group: 'BulletList',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for ordered list node.\nexport const orderedListAttr = $nodeAttr('orderedList')\n\nwithMeta(orderedListAttr, {\n displayName: 'Attr<orderedList>',\n group: 'OrderedList',\n})\n\n/// Schema for ordered list node.\nexport const orderedListSchema = $nodeSchema('ordered_list', ctx => ({\n content: 'listItem+',\n group: 'block',\n attrs: {\n order: {\n default: 1,\n },\n spread: {\n default: false,\n },\n },\n parseDOM: [\n {\n tag: 'ol',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n spread: dom.dataset.spread,\n order: dom.hasAttribute('start') ? Number(dom.getAttribute('start')) : 1,\n }\n },\n },\n ],\n toDOM: node => [\n 'ol',\n {\n ...ctx.get(orderedListAttr.key)(node),\n ...(node.attrs.order === 1 ? {} : node.attrs.order),\n 'data-spread': node.attrs.spread,\n },\n 0,\n ],\n parseMarkdown: {\n match: ({ type, ordered }) => type === 'list' && !!ordered,\n runner: (state, node, type) => {\n const spread = node.spread != null ? `${node.spread}` : 'true'\n state.openNode(type, { spread }).next(node.children).closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'ordered_list',\n runner: (state, node) => {\n state.openNode('list', undefined, { ordered: true, start: 1, spread: node.attrs.spread === 'true' })\n state.next(node.content)\n state.closeNode()\n },\n },\n}))\n\nwithMeta(orderedListSchema.node, {\n displayName: 'NodeSchema<orderedList>',\n group: 'OrderedList',\n})\n\nwithMeta(orderedListSchema.ctx, {\n displayName: 'NodeSchemaCtx<orderedList>',\n group: 'OrderedList',\n})\n\n/// Input rule for wrapping a block in ordered list node.\nexport const wrapInOrderedListInputRule = $inputRule(ctx => wrappingInputRule(\n /^\\s*(\\d+)\\.\\s$/,\n orderedListSchema.type(ctx),\n match => ({ order: Number(match[1]) }),\n (match, node) => node.childCount + node.attrs.order === Number(match[1]),\n))\n\nwithMeta(wrapInOrderedListInputRule, {\n displayName: 'InputRule<wrapInOrderedListInputRule>',\n group: 'OrderedList',\n})\n\n/// Command for wrapping a block in ordered list node.\nexport const wrapInOrderedListCommand = $command('WrapInOrderedList', ctx => () => wrapIn(orderedListSchema.type(ctx)))\n\nwithMeta(wrapInOrderedListCommand, {\n displayName: 'Command<wrapInOrderedListCommand>',\n group: 'OrderedList',\n})\n\n/// Keymap for ordered list node.\n/// - `Mod-Alt-7`: Wrap a block in ordered list.\nexport const orderedListKeymap = $useKeymap('orderedListKeymap', {\n WrapInOrderedList: {\n shortcuts: 'Mod-Alt-7',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(wrapInOrderedListCommand.key)\n },\n },\n})\n\nwithMeta(orderedListKeymap.ctx, {\n displayName: 'KeymapCtx<orderedList>',\n group: 'OrderedList',\n})\n\nwithMeta(orderedListKeymap.shortcuts, {\n displayName: 'Keymap<orderedList>',\n group: 'OrderedList',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { liftListItem, sinkListItem, splitListItem } from '@milkdown/prose/schema-list'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\nimport { type Command, TextSelection } from '@milkdown/prose/state'\nimport type { Ctx } from '@milkdown/ctx'\nimport { withMeta } from '../__internal__'\n\n/// HTML attributes for list item node.\nexport const listItemAttr = $nodeAttr('listItem')\n\nwithMeta(listItemAttr, {\n displayName: 'Attr<listItem>',\n group: 'ListItem',\n})\n\n/// Schema for list item node.\nexport const listItemSchema = $nodeSchema('list_item', ctx => ({\n group: 'listItem',\n content: 'paragraph block*',\n attrs: {\n label: {\n default: '•',\n },\n listType: {\n default: 'bullet',\n },\n spread: {\n default: 'true',\n },\n },\n defining: true,\n parseDOM: [\n {\n tag: 'li',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement))\n throw expectDomTypeError(dom)\n\n return {\n label: dom.dataset.label,\n listType: dom.dataset['list-type'],\n spread: dom.dataset.spread,\n }\n },\n },\n ],\n toDOM: node => [\n 'li',\n {\n ...ctx.get(listItemAttr.key)(node),\n 'data-label': node.attrs.label,\n 'data-list-type': node.attrs.listType,\n 'data-spread': node.attrs.spread,\n },\n 0,\n ],\n parseMarkdown: {\n match: ({ type }) => type === 'listItem',\n runner: (state, node, type) => {\n const label = node.label != null ? `${node.label}.` : '•'\n const listType = node.label != null ? 'ordered' : 'bullet'\n const spread = node.spread != null ? `${node.spread}` : 'true'\n state.openNode(type, { label, listType, spread })\n state.next(node.children)\n state.closeNode()\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'list_item',\n runner: (state, node) => {\n state.openNode('listItem', undefined, { spread: node.attrs.spread === 'true' })\n state.next(node.content)\n state.closeNode()\n },\n },\n}))\n\nwithMeta(listItemSchema.node, {\n displayName: 'NodeSchema<listItem>',\n group: 'ListItem',\n})\n\nwithMeta(listItemSchema.ctx, {\n displayName: 'NodeSchemaCtx<listItem>',\n group: 'ListItem',\n})\n\n/// The command to sink list item.\n///\n/// For example:\n/// ```md\n/// * List item 1\n/// * List item 2 <- cursor here\n/// ```\n/// Will get:\n/// ```md\n/// * List item 1\n/// * List item 2\n/// ```\nexport const sinkListItemCommand = $command('SinkListItem', ctx => () => sinkListItem(listItemSchema.type(ctx)))\n\nwithMeta(sinkListItemCommand, {\n displayName: 'Command<sinkListItemCommand>',\n group: 'ListItem',\n})\n\n/// The command to lift list item.\n///\n/// For example:\n/// ```md\n/// * List item 1\n/// * List item 2 <- cursor here\n/// ```\n/// Will get:\n/// ```md\n/// * List item 1\n/// * List item 2\n/// ```\nexport const liftListItemCommand = $command('SplitListItem', ctx => () => liftListItem(listItemSchema.type(ctx)))\n\nwithMeta(liftListItemCommand, {\n displayName: 'Command<liftListItemCommand>',\n group: 'ListItem',\n})\n\n/// The command to split a list item.\n///\n/// For example:\n/// ```md\n/// * List item 1\n/// * List item 2 <- cursor here\n/// ```\n/// Will get:\n/// ```md\n/// * List item 1\n/// * List item 2\n/// * <- cursor here\n/// ```\nexport const splitListItemCommand = $command('SplitListItem', ctx => () => splitListItem(listItemSchema.type(ctx)))\n\nwithMeta(splitListItemCommand, {\n displayName: 'Command<splitListItemCommand>',\n group: 'ListItem',\n})\n\nfunction liftFirstListItem(ctx: Ctx): Command {\n return (state, dispatch, view) => {\n const { selection } = state\n if (!(selection instanceof TextSelection))\n return false\n\n const { empty, $from } = selection\n\n // selection should be empty and at the start of the node\n if (!empty || $from.parentOffset !== 0)\n return false\n\n const parentItem = $from.node(-1)\n // selection should be in list item and list item should be the first child of the list\n if (parentItem.type !== listItemSchema.type(ctx) || parentItem.firstChild !== $from.node())\n return false\n\n const list = $from.node(-2)\n // list should have only one list item\n if (list.childCount > 1)\n return false\n\n return liftListItem(listItemSchema.type(ctx))(state, dispatch, view)\n }\n}\n\n/// The command to remove list item **only if**:\n///\n/// - Selection is at the start of the list item.\n/// - List item is the only child of the list.\n///\n/// Most of the time, you shouldn't use this command directly.\nexport const liftFirstListItemCommand = $command('LiftFirstListItem', ctx => () => liftFirstListItem(ctx))\n\nwithMeta(liftFirstListItemCommand, {\n displayName: 'Command<liftFirstListItemCommand>',\n group: 'ListItem',\n})\n\n/// Keymap for list item node.\n/// - `<Enter>`: Split the current list item.\n/// - `<Tab>/<Mod-]>`: Sink the current list item.\n/// - `<Shift-Tab>/<Mod-[>`: Lift the current list item.\nexport const listItemKeymap = $useKeymap('listItemKeymap', {\n NextListItem: {\n shortcuts: 'Enter',\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(splitListItemCommand.key)\n },\n },\n SinkListItem: {\n shortcuts: ['Tab', 'Mod-]'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(sinkListItemCommand.key)\n },\n },\n LiftListItem: {\n shortcuts: ['Shift-Tab', 'Mod-['],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(liftListItemCommand.key)\n },\n },\n LiftFirstListItem: {\n shortcuts: ['Backspace', 'Delete'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(liftFirstListItemCommand.key)\n },\n },\n})\n\nwithMeta(listItemKeymap.ctx, {\n displayName: 'KeymapCtx<listItem>',\n group: 'ListItem',\n})\n\nwithMeta(listItemKeymap.shortcuts, {\n displayName: 'Keymap<listItem>',\n group: 'ListItem',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $node } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// The bottom-level node.\nexport const textSchema = $node('text', () => ({\n group: 'inline',\n parseMarkdown: {\n match: ({ type }) => type === 'text',\n runner: (state, node) => {\n state.addText(node.value as string)\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'text',\n runner: (state, node) => {\n state.addNode('text', undefined, node.text as string)\n },\n },\n}))\n\nwithMeta(textSchema, {\n displayName: 'NodeSchema<text>',\n group: 'Text',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $nodeAttr, $nodeSchema } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\nexport const htmlAttr = $nodeAttr('html')\n\nwithMeta(htmlAttr, {\n displayName: 'Attr<html>',\n group: 'Html',\n})\n\nexport const htmlSchema = $nodeSchema('html', (ctx) => {\n return {\n atom: true,\n group: 'inline',\n inline: true,\n attrs: {\n value: {\n default: '',\n },\n },\n toDOM: (node) => {\n const span = document.createElement('span')\n const attr = {\n ...ctx.get(htmlAttr.key)(node),\n 'data-value': node.attrs.value,\n 'data-type': 'html',\n }\n span.textContent = node.attrs.value\n return ['span', attr, node.attrs.value]\n },\n parseDOM: [{\n tag: 'span[data-type=\"html\"]',\n getAttrs: (dom) => {\n return {\n value: (dom as HTMLElement).dataset.value ?? '',\n }\n },\n }],\n parseMarkdown: {\n match: ({ type }) => Boolean(type === 'html'),\n runner: (state, node, type) => {\n state.addNode(type, { value: node.value as string })\n },\n },\n toMarkdown: {\n match: node => node.type.name === 'html',\n runner: (state, node) => {\n state.addNode('html', undefined, node.attrs.value)\n },\n },\n }\n})\n\nwithMeta(htmlSchema.node, {\n displayName: 'NodeSchema<html>',\n group: 'Html',\n})\n\nwithMeta(htmlSchema.ctx, {\n displayName: 'NodeSchemaCtx<html>',\n group: 'Html',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { emphasisAttr, emphasisSchema, inlineCodeAttr, inlineCodeSchema, linkAttr, linkSchema, strongAttr, strongSchema } from '../mark'\nimport {\n blockquoteAttr,\n blockquoteSchema,\n bulletListAttr,\n bulletListSchema,\n codeBlockAttr,\n codeBlockSchema,\n docSchema,\n hardbreakAttr,\n hardbreakSchema,\n headingAttr,\n headingIdGenerator,\n headingSchema,\n hrAttr,\n hrSchema,\n htmlAttr,\n htmlSchema,\n imageAttr,\n imageSchema,\n listItemAttr,\n listItemSchema,\n orderedListAttr,\n orderedListSchema,\n paragraphAttr,\n paragraphSchema,\n textSchema,\n} from '../node'\n\n/// @internal\nexport const schema: MilkdownPlugin[] = [\n docSchema,\n\n paragraphAttr,\n paragraphSchema,\n\n headingIdGenerator,\n headingAttr,\n headingSchema,\n\n hardbreakAttr,\n hardbreakSchema,\n\n blockquoteAttr,\n blockquoteSchema,\n\n codeBlockAttr,\n codeBlockSchema,\n\n hrAttr,\n hrSchema,\n\n imageAttr,\n imageSchema,\n\n bulletListAttr,\n bulletListSchema,\n\n orderedListAttr,\n orderedListSchema,\n\n listItemAttr,\n listItemSchema,\n\n emphasisAttr,\n emphasisSchema,\n\n strongAttr,\n strongSchema,\n\n inlineCodeAttr,\n inlineCodeSchema,\n\n linkAttr,\n linkSchema,\n\n htmlAttr,\n htmlSchema,\n\n textSchema,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { createCodeBlockInputRule, insertHrInputRule, wrapInBlockquoteInputRule, wrapInBulletListInputRule, wrapInHeadingInputRule, wrapInOrderedListInputRule } from '../node'\nimport { emphasisStarInputRule, emphasisUnderscoreInputRule, inlineCodeInputRule, strongInputRule } from '../mark'\n\n/// @internal\nexport const inputRules: MilkdownPlugin[] = [\n wrapInBlockquoteInputRule,\n wrapInBulletListInputRule,\n wrapInOrderedListInputRule,\n createCodeBlockInputRule,\n insertHrInputRule,\n wrapInHeadingInputRule,\n].flat()\n\n/// @internal\nexport const markInputRules: MilkdownPlugin[] = [\n emphasisStarInputRule,\n emphasisUnderscoreInputRule,\n inlineCodeInputRule,\n strongInputRule,\n]\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { toggleEmphasisCommand, toggleInlineCodeCommand, toggleLinkCommand, toggleStrongCommand, updateLinkCommand } from '../mark'\nimport {\n createCodeBlockCommand,\n downgradeHeadingCommand,\n insertHardbreakCommand,\n insertHrCommand,\n insertImageCommand,\n liftFirstListItemCommand,\n liftListItemCommand,\n sinkListItemCommand,\n splitListItemCommand,\n turnIntoTextCommand,\n updateImageCommand,\n wrapInBlockquoteCommand,\n wrapInBulletListCommand,\n wrapInHeadingCommand,\n wrapInOrderedListCommand,\n} from '../node'\n\n/// @internal\nexport const commands: MilkdownPlugin[] = [\n turnIntoTextCommand,\n wrapInBlockquoteCommand,\n wrapInHeadingCommand,\n downgradeHeadingCommand,\n createCodeBlockCommand,\n insertHardbreakCommand,\n insertHrCommand,\n\n insertImageCommand,\n updateImageCommand,\n\n wrapInOrderedListCommand,\n wrapInBulletListCommand,\n sinkListItemCommand,\n splitListItemCommand,\n liftListItemCommand,\n liftFirstListItemCommand,\n\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleStrongCommand,\n\n toggleLinkCommand,\n updateLinkCommand,\n]\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { emphasisKeymap, inlineCodeKeymap, strongKeymap } from '../mark'\nimport { blockquoteKeymap, bulletListKeymap, codeBlockKeymap, hardbreakKeymap, headingKeymap, listItemKeymap, orderedListKeymap, paragraphKeymap } from '../node'\n\n/// @internal\nexport const keymap: MilkdownPlugin[] = [\n blockquoteKeymap,\n codeBlockKeymap,\n hardbreakKeymap,\n headingKeymap,\n listItemKeymap,\n orderedListKeymap,\n bulletListKeymap,\n paragraphKeymap,\n\n emphasisKeymap,\n inlineCodeKeymap,\n strongKeymap,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport { visit } from 'unist-util-visit'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to add order in list for remark AST.\nexport const remarkAddOrderInListPlugin = $remark('remarkAddOrderInList', () => () => (tree) => {\n visit(tree, 'list', (node) => {\n if (node.ordered) {\n const start = node.start ?? 1\n node.children.forEach((child, index) => {\n (child as unknown as Record<string, number>).label = index + start\n })\n }\n })\n})\n\nwithMeta(remarkAddOrderInListPlugin.plugin, {\n displayName: 'Remark<remarkAddOrderInListPlugin>',\n group: 'Remark',\n})\n\nwithMeta(remarkAddOrderInListPlugin.options, {\n displayName: 'RemarkConfig<remarkAddOrderInListPlugin>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport type { Node } from '@milkdown/transformer'\nimport { visit } from 'unist-util-visit'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to add inline line break for remark AST.\n/// The inline line break should be treated as a `space`.\n/// And the normal line break should be treated as a `LF`.\nexport const remarkLineBreak = $remark('remarkLineBreak', () => () => (tree: Node) => {\n const find = /[\\t ]*(?:\\r?\\n|\\r)/g\n visit(tree, 'text', (node: Node & { value: string }, index: number, parent: Node & { children: Node[] }) => {\n if (!node.value || typeof node.value !== 'string')\n return\n\n const result = []\n let start = 0\n\n find.lastIndex = 0\n\n let match = find.exec(node.value)\n\n while (match) {\n const position = match.index\n\n if (start !== position)\n result.push({ type: 'text', value: node.value.slice(start, position) })\n\n result.push({ type: 'break', data: { isInline: true } })\n start = position + match[0].length\n match = find.exec(node.value)\n }\n\n const hasResultAndIndex = result.length > 0 && parent && typeof index === 'number'\n\n if (!hasResultAndIndex)\n return\n\n if (start < node.value.length)\n result.push({ type: 'text', value: node.value.slice(start) })\n\n parent.children.splice(index, 1, ...result)\n return index + result.length\n })\n})\n\nwithMeta(remarkLineBreak.plugin, {\n displayName: 'Remark<remarkLineBreak>',\n group: 'Remark',\n})\n\nwithMeta(remarkLineBreak.options, {\n displayName: 'RemarkConfig<remarkLineBreak>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport remarkInlineLinks from 'remark-inline-links'\nimport { withMeta } from '../__internal__'\n\n/// This plugin wraps [remark-inline-links](https://github.com/remarkjs/remark-inline-links).\nexport const remarkInlineLinkPlugin = $remark('remarkInlineLink', () => remarkInlineLinks)\n\nwithMeta(remarkInlineLinkPlugin.plugin, {\n displayName: 'Remark<remarkInlineLinkPlugin>',\n group: 'Remark',\n})\n\nwithMeta(remarkInlineLinkPlugin.options, {\n displayName: 'RemarkConfig<remarkInlineLinkPlugin>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport type { Node } from '@milkdown/transformer'\nimport { withMeta } from '../__internal__'\n\nconst isParent = (node: Node): node is Node & { children: Node[] } => !!(node as Node & { children: Node[] }).children\nconst isHTML = (node: Node): node is Node & { children: Node[], value: unknown } => node.type === 'html'\n\nfunction flatMapWithDepth(ast: Node, fn: (node: Node, index: number, parent: Node | null) => Node[]) {\n return transform(ast, 0, null)[0]\n\n function transform(node: Node, index: number, parent: Node | null) {\n if (isParent(node)) {\n const out = []\n for (let i = 0, n = node.children.length; i < n; i++) {\n const nthChild = node.children[i]\n if (nthChild) {\n const xs = transform(nthChild, i, node)\n if (xs) {\n for (let j = 0, m = xs.length; j < m; j++) {\n const item = xs[j]\n if (item)\n out.push(item)\n }\n }\n }\n }\n node.children = out\n }\n\n return fn(node, index, parent)\n }\n}\n\n/// @internal\n/// This plugin should be deprecated after we support HTML.\nexport const remarkHtmlTransformer = $remark('remarkHTMLTransformer', () => () => (tree: Node) => {\n flatMapWithDepth(tree, (node, _index, parent) => {\n if (!isHTML(node))\n return [node]\n\n if (parent?.type === 'root') {\n node.children = [{ ...node }]\n delete node.value;\n (node as { type: string }).type = 'paragraph'\n }\n\n return [node]\n })\n})\n\nwithMeta(remarkHtmlTransformer.plugin, {\n displayName: 'Remark<remarkHtmlTransformer>',\n group: 'Remark',\n})\n\nwithMeta(remarkHtmlTransformer.options, {\n displayName: 'RemarkConfig<remarkHtmlTransformer>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { $remark } from '@milkdown/utils'\nimport type { Node } from '@milkdown/transformer'\nimport { visit } from 'unist-util-visit'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to keep the marker (`_` and `*`) of emphasis and strong nodes.\nexport const remarkMarker = $remark('remarkMarker', () => () => (tree, file) => {\n const getMarker = (node: Node) => {\n return (file.value as string).charAt(node.position!.start.offset!)\n }\n visit(tree, (node: Node) => ['strong', 'emphasis'].includes(node.type), (node: Node) => {\n (node as Node & { marker: string }).marker = getMarker(node)\n })\n})\n\nwithMeta(remarkMarker.plugin, {\n displayName: 'Remark<remarkMarker>',\n group: 'Remark',\n})\n\nwithMeta(remarkMarker.options, {\n displayName: 'RemarkConfig<remarkMarker>',\n group: 'Remark',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { Decoration, DecorationSet } from '@milkdown/prose/view'\nimport { $prose } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is to solve the [chrome 98 bug](https://discuss.prosemirror.net/t/cursor-jumps-at-the-end-of-line-when-it-betweens-two-inline-nodes/4641).\nexport const inlineNodesCursorPlugin = $prose(() => {\n let lock = false\n const inlineNodesCursorPluginKey = new PluginKey('MILKDOWN_INLINE_NODES_CURSOR')\n const inlineNodesCursorPlugin: Plugin = new Plugin({\n key: inlineNodesCursorPluginKey,\n state: {\n init() {\n return false\n },\n apply(tr) {\n if (!tr.selection.empty)\n return false\n\n const pos = tr.selection.$from\n const left = pos.nodeBefore\n const right = pos.nodeAfter\n if (left && right && left.isInline && !left.isText && right.isInline && !right.isText)\n return true\n\n return false\n },\n },\n props: {\n handleDOMEvents: {\n compositionend: (view, e) => {\n if (lock) {\n lock = false\n requestAnimationFrame(() => {\n const active = inlineNodesCursorPlugin.getState(view.state)\n if (active) {\n const from = view.state.selection.from\n e.preventDefault()\n view.dispatch(view.state.tr.insertText(e.data || '', from))\n }\n })\n\n return true\n }\n return false\n },\n compositionstart: (view) => {\n const active = inlineNodesCursorPlugin.getState(view.state)\n if (active)\n lock = true\n\n return false\n },\n beforeinput: (view, e) => {\n const active = inlineNodesCursorPlugin.getState(view.state)\n if (active && e instanceof InputEvent && e.data && !lock) {\n const from = view.state.selection.from\n e.preventDefault()\n view.dispatch(view.state.tr.insertText(e.data || '', from))\n\n return true\n }\n\n return false\n },\n },\n decorations(state) {\n const active = inlineNodesCursorPlugin.getState(state)\n if (active) {\n const pos = state.selection.$from\n const position = pos.pos\n const left = document.createElement('span')\n const leftDec = Decoration.widget(position, left, {\n side: -1,\n })\n const right = document.createElement('span')\n const rightDec = Decoration.widget(position, right)\n setTimeout(() => {\n left.contentEditable = 'true'\n right.contentEditable = 'true'\n })\n return DecorationSet.create(state.doc, [leftDec, rightDec])\n }\n return DecorationSet.empty\n },\n },\n })\n\n return inlineNodesCursorPlugin\n})\n\nwithMeta(inlineNodesCursorPlugin, {\n displayName: 'Prose<inlineNodesCursorPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { AddMarkStep, ReplaceStep } from '@milkdown/prose/transform'\nimport { $prose } from '@milkdown/utils'\nimport { hardbreakSchema } from '../node'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to clear the marks around the hardbreak node.\nexport const hardbreakClearMarkPlugin = $prose((ctx) => {\n return new Plugin({\n key: new PluginKey('MILKDOWN_HARDBREAK_MARKS'),\n appendTransaction: (trs, _oldState, newState) => {\n if (!trs.length)\n return\n\n const [tr] = trs\n if (!tr)\n return\n\n const [step] = tr.steps\n\n const isInsertHr = tr.getMeta('hardbreak')\n if (isInsertHr) {\n if (!(step instanceof ReplaceStep))\n return\n\n const { from } = step as unknown as { from: number }\n return newState.tr.setNodeMarkup(from, hardbreakSchema.type(ctx), undefined, [])\n }\n\n const isAddMarkStep = step instanceof AddMarkStep\n if (isAddMarkStep) {\n let _tr = newState.tr\n const { from, to } = step as unknown as { from: number, to: number }\n newState.doc.nodesBetween(from, to, (node, pos) => {\n if (node.type === hardbreakSchema.type(ctx))\n _tr = _tr.setNodeMarkup(pos, hardbreakSchema.type(ctx), undefined, [])\n })\n\n return _tr\n }\n\n return undefined\n },\n })\n})\n\nwithMeta(hardbreakClearMarkPlugin, {\n displayName: 'Prose<hardbreakClearMarkPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $ctx, $prose } from '@milkdown/utils'\nimport { withMeta } from '../__internal__'\n\n/// This slice contains the nodes that within which the hardbreak will be ignored.\nexport const hardbreakFilterNodes = $ctx(['table', 'code_block'], 'hardbreakFilterNodes')\n\nwithMeta(hardbreakFilterNodes, {\n displayName: 'Ctx<hardbreakFilterNodes>',\n group: 'Prose',\n})\n\n/// This plugin is used to filter the hardbreak node.\n/// If the hardbreak is going to be inserted within a node that is in the `hardbreakFilterNodes`, ignore it.\nexport const hardbreakFilterPlugin = $prose((ctx) => {\n const notIn = ctx.get(hardbreakFilterNodes.key)\n return new Plugin({\n key: new PluginKey('MILKDOWN_HARDBREAK_FILTER'),\n filterTransaction: (tr, state) => {\n const isInsertHr = tr.getMeta('hardbreak')\n const [step] = tr.steps\n if (isInsertHr && step) {\n const { from } = step as unknown as { from: number }\n const $from = state.doc.resolve(from)\n let curDepth = $from.depth\n let canApply = true\n while (curDepth > 0) {\n if (notIn.includes($from.node(curDepth).type.name))\n canApply = false\n\n curDepth--\n }\n return canApply\n }\n return true\n },\n })\n})\n\nwithMeta(hardbreakFilterPlugin, {\n displayName: 'Prose<hardbreakFilterPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport type { EditorView } from '@milkdown/prose/view'\nimport { $prose } from '@milkdown/utils'\nimport { headingIdGenerator, headingSchema } from '../node/heading'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to sync the heading id when the heading content changes.\n/// It will use the `headingIdGenerator` to generate the id.\nexport const syncHeadingIdPlugin = $prose((ctx) => {\n const headingIdPluginKey = new PluginKey('MILKDOWN_HEADING_ID')\n\n const updateId = (view: EditorView) => {\n if (view.composing || !view.editable)\n return\n\n const getId = ctx.get(headingIdGenerator.key)\n const tr = view.state.tr.setMeta('addToHistory', false)\n\n let found = false\n\n view.state.doc.descendants((node, pos) => {\n if (node.type === headingSchema.type(ctx)) {\n if (node.textContent.trim().length === 0)\n return\n\n const attrs = node.attrs\n const id = getId(node)\n\n if (attrs.id !== id) {\n found = true\n tr.setMeta(headingIdPluginKey, true).setNodeMarkup(pos, undefined, {\n ...attrs,\n id,\n })\n }\n }\n })\n\n if (found)\n view.dispatch(tr)\n }\n\n return new Plugin({\n key: headingIdPluginKey,\n view: (view) => {\n updateId(view)\n\n return {\n update: (view) => {\n updateId(view)\n },\n }\n },\n })\n})\n\nwithMeta(syncHeadingIdPlugin, {\n displayName: 'Prose<syncHeadingIdPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $prose } from '@milkdown/utils'\nimport type { EditorView } from '@milkdown/prose/view'\nimport { listItemSchema } from '../node/list-item'\n\nimport { orderedListSchema } from '../node/ordered-list'\nimport { bulletListSchema } from '../node'\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to keep the label of list item up to date in ordered list.\nexport const syncListOrderPlugin = $prose((ctx) => {\n const syncOrderLabel = (view: EditorView) => {\n if (view.composing || !view.editable)\n return\n\n const orderedListType = orderedListSchema.type(ctx)\n const bulletListType = bulletListSchema.type(ctx)\n const listItemType = listItemSchema.type(ctx)\n const state = view.state\n const handleNodeItem = (attrs: Record<string, any>, index: number): boolean => {\n let changed = false\n const expectedLabel = `${index + 1}.`\n if (attrs.label !== expectedLabel) {\n attrs.label = expectedLabel\n changed = true\n }\n\n return changed\n }\n\n let tr = state.tr\n let needDispatch = false\n state.doc.descendants((node, pos, parent, index) => {\n if (node.type === bulletListType) {\n const base = node.maybeChild(0)\n if (base?.type === listItemType && base.attrs.listType === 'ordered') {\n needDispatch = true\n tr.setNodeMarkup(pos, orderedListType, { spread: 'true' })\n\n node.descendants((child, pos, _parent, index) => {\n if (child.type === listItemType) {\n const attrs = { ...child.attrs }\n const changed = handleNodeItem(attrs, index)\n if (changed)\n tr = tr.setNodeMarkup(pos, undefined, attrs)\n }\n return false\n })\n }\n }\n else if (node.type === listItemType && parent?.type === orderedListType) {\n const attrs = { ...node.attrs }\n let changed = false\n if (attrs.listType !== 'ordered') {\n attrs.listType = 'ordered'\n changed = true\n }\n\n const base = parent?.maybeChild(0)\n if (base)\n changed = handleNodeItem(attrs, index)\n\n if (changed) {\n tr = tr.setNodeMarkup(pos, undefined, attrs)\n needDispatch = true\n }\n }\n })\n\n if (needDispatch)\n view.dispatch(tr.setMeta('addToHistory', false))\n }\n return new Plugin({\n key: new PluginKey('MILKDOWN_KEEP_LIST_ORDER'),\n view: (view) => {\n syncOrderLabel(view)\n return {\n update: (view) => {\n syncOrderLabel(view)\n },\n }\n },\n })\n})\n\nwithMeta(syncListOrderPlugin, {\n displayName: 'Prose<syncListOrderPlugin>',\n group: 'Prose',\n})\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport {\n hardbreakClearMarkPlugin,\n hardbreakFilterNodes,\n hardbreakFilterPlugin,\n inlineNodesCursorPlugin,\n remarkAddOrderInListPlugin,\n remarkHtmlTransformer,\n remarkInlineLinkPlugin,\n remarkLineBreak,\n remarkMarker,\n syncHeadingIdPlugin,\n syncListOrderPlugin,\n} from '../plugin'\n\n/// @internal\nexport const plugins: MilkdownPlugin[] = [\n hardbreakClearMarkPlugin,\n hardbreakFilterNodes,\n hardbreakFilterPlugin,\n\n inlineNodesCursorPlugin,\n\n remarkAddOrderInListPlugin,\n remarkInlineLinkPlugin,\n remarkLineBreak,\n remarkHtmlTransformer,\n remarkMarker,\n\n syncHeadingIdPlugin,\n syncListOrderPlugin,\n].flat()\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport type { MilkdownPlugin } from '@milkdown/ctx'\nimport { commands, inputRules, keymap, markInputRules, plugins, schema } from './composed'\n\nexport * from './node'\nexport * from './mark'\nexport * from './plugin'\nexport * from './composed'\n\n/// The commonmark preset, includes all the plugins.\nexport const commonmark: MilkdownPlugin[] = [schema, inputRules, markInputRules, commands, keymap, plugins].flat()\n"],"names":["serializeText","state","node","_a","contentArr","n","_","Fragment","withMeta","plugin","meta","emphasisAttr","$markAttr","emphasisSchema","$markSchema","ctx","remarkStringifyOptionsCtx","value","mark","markType","toggleEmphasisCommand","$command","toggleMark","emphasisStarInputRule","$inputRule","markRule","fullMatch","start","emphasisUnderscoreInputRule","emphasisKeymap","$useKeymap","commands","commandsCtx","strongAttr","strongSchema","toggleStrongCommand","strongInputRule","strongKeymap","inlineCodeAttr","inlineCodeSchema","toggleInlineCodeCommand","dispatch","selection","tr","from","to","x","name","t","inlineCodeInputRule","inlineCodeKeymap","linkAttr","linkSchema","dom","expectDomTypeError","url","title","toggleLinkCommand","payload","updateLinkCommand","pos","p","type","end","linkMark","TextSelection","docSchema","$node","paragraphAttr","$nodeAttr","paragraphSchema","$nodeSchema","turnIntoTextCommand","setBlockType","paragraphKeymap","headingIndex","i","defaultHeadingIdGenerator","slugify","headingIdGenerator","$ctx","headingAttr","headingSchema","getId","depth","wrapInHeadingInputRule","textblockTypeInputRule","match","_b","view","editorViewCtx","$from","level","wrapInHeadingCommand","downgradeHeadingCommand","headingKeymap","blockquoteAttr","blockquoteSchema","wrapInBlockquoteInputRule","wrappingInputRule","wrapInBlockquoteCommand","wrapIn","blockquoteKeymap","codeBlockAttr","codeBlockSchema","attr","language","createCodeBlockInputRule","createCodeBlockCommand","updateCodeBlockLanguageCommand","codeBlockKeymap","imageAttr","imageSchema","alt","insertImageCommand","src","updateImageCommand","nodeWithPos","findSelectedNodeOfType","newAttrs","insertImageInputRule","InputRule","matched","hardbreakAttr","hardbreakSchema","insertHardbreakCommand","Selection","hardbreakKeymap","hrAttr","hrSchema","insertHrInputRule","insertHrCommand","paragraph","_tr","sel","bulletListAttr","bulletListSchema","ordered","spread","wrapInBulletListInputRule","wrapInBulletListCommand","bulletListKeymap","orderedListAttr","orderedListSchema","wrapInOrderedListInputRule","wrapInOrderedListCommand","orderedListKeymap","listItemAttr","listItemSchema","label","listType","sinkListItemCommand","sinkListItem","liftListItemCommand","liftListItem","splitListItemCommand","splitListItem","liftFirstListItem","empty","parentItem","liftFirstListItemCommand","listItemKeymap","textSchema","htmlAttr","htmlSchema","span","schema","inputRules","markInputRules","keymap","remarkAddOrderInListPlugin","$remark","tree","visit","child","index","remarkLineBreak","find","parent","result","position","remarkInlineLinkPlugin","remarkInlineLinks","isParent","isHTML","flatMapWithDepth","ast","fn","transform","out","nthChild","xs","j","m","item","remarkHtmlTransformer","_index","remarkMarker","file","getMarker","inlineNodesCursorPlugin","$prose","lock","inlineNodesCursorPluginKey","PluginKey","Plugin","left","right","e","leftDec","Decoration","rightDec","DecorationSet","hardbreakClearMarkPlugin","trs","_oldState","newState","step","ReplaceStep","AddMarkStep","hardbreakFilterNodes","hardbreakFilterPlugin","notIn","isInsertHr","curDepth","canApply","syncHeadingIdPlugin","headingIdPluginKey","updateId","found","attrs","id","syncListOrderPlugin","syncOrderLabel","orderedListType","bulletListType","listItemType","handleNodeItem","changed","expectedLabel","needDispatch","base","_parent","plugins","commonmark"],"mappings":"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"}