@milkdown/preset-commonmark 7.15.0 → 7.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/__test__/html.spec.d.ts +2 -0
- package/lib/__test__/html.spec.d.ts.map +1 -0
- package/lib/index.js +54 -50
- package/lib/index.js.map +1 -1
- package/lib/mark/strong.d.ts.map +1 -1
- package/lib/node/heading.d.ts.map +1 -1
- package/lib/plugin/remark-html-transformer.d.ts.map +1 -1
- package/lib/plugin/sync-list-order-plugin.d.ts.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/src/__test__/html.spec.ts +46 -0
- package/src/mark/emphasis.ts +1 -1
- package/src/mark/strong.ts +14 -7
- package/src/node/heading.ts +1 -5
- package/src/plugin/remark-html-transformer.ts +7 -1
- package/src/plugin/sync-list-order-plugin.ts +64 -45
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.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/plugin/remark-preserve-empty-line.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/commands/index.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":["import type { Node } from '@milkdown/prose/model'\nimport type { SerializerState } from '@milkdown/transformer'\n\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) return\n\n contentArr.push(n)\n })\n state.next(Fragment.fromArray(contentArr))\n}\n","import type { Meta, MilkdownPlugin } from '@milkdown/ctx'\n\nexport function withMeta<T extends MilkdownPlugin>(\n plugin: T,\n meta: Partial<Meta> & Pick<Meta, 'displayName'>\n): T {\n Object.assign(plugin, {\n meta: {\n package: '@milkdown/preset-commonmark',\n ...meta,\n },\n })\n\n return plugin\n}\n","import { commandsCtx, remarkStringifyOptionsCtx } from '@milkdown/core'\nimport { markRule } from '@milkdown/prose'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport {\n $command,\n $inputRule,\n $markAttr,\n $markSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 validate: 'string',\n },\n },\n parseDOM: [\n { tag: 'i' },\n { tag: 'em' },\n { style: 'font-style', getAttrs: (value) => (value === 'italic') as false },\n ],\n toDOM: (mark) => ['em', ctx.get(emphasisAttr.key)(mark)],\n parseMarkdown: {\n match: (node) => node.type === 'emphasis',\n runner: (state, node, markType) => {\n state.openMark(markType, { marker: node.marker })\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: (mark) => mark.type.name === 'emphasis',\n runner: (state, mark) => {\n state.withMark(mark, 'emphasis', undefined, {\n marker: mark.attrs.marker,\n })\n },\n },\n}))\n\nwithMeta(emphasisSchema.mark, {\n displayName: 'MarkSchema<emphasis>',\n group: 'Emphasis',\n})\n\nwithMeta(emphasisSchema.ctx, {\n displayName: 'MarkSchemaCtx<emphasis>',\n group: 'Emphasis',\n})\n\n/// A command to toggle the emphasis mark.\nexport const toggleEmphasisCommand = $command('ToggleEmphasis', (ctx) => () => {\n return toggleMark(emphasisSchema.type(ctx))\n})\n\nwithMeta(toggleEmphasisCommand, {\n displayName: 'Command<toggleEmphasisCommand>',\n group: 'Emphasis',\n})\n\n/// Input rule for use `*` to create emphasis mark.\nexport const emphasisStarInputRule = $inputRule((ctx) => {\n return markRule(/(?:^|[^*])\\*([^*]+)\\*$/, emphasisSchema.type(ctx), {\n getAttr: () => ({\n marker: '*',\n }),\n updateCaptured: ({ fullMatch, start }) =>\n !fullMatch.startsWith('*')\n ? { fullMatch: fullMatch.slice(1), start: start + 1 }\n : {},\n })\n})\n\nwithMeta(emphasisStarInputRule, {\n displayName: 'InputRule<emphasis>|Star',\n group: 'Emphasis',\n})\n\n/// Input rule for use `_` to create emphasis mark.\nexport const emphasisUnderscoreInputRule = $inputRule((ctx) => {\n return markRule(/(?:^|[^_])_([^_]+)_$/, emphasisSchema.type(ctx), {\n getAttr: () => ({\n marker: '_',\n }),\n updateCaptured: ({ fullMatch, start }) =>\n !fullMatch.startsWith('_')\n ? { fullMatch: fullMatch.slice(1), start: start + 1 }\n : {},\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","import { commandsCtx, remarkStringifyOptionsCtx } from '@milkdown/core'\nimport { markRule } from '@milkdown/prose'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport {\n $command,\n $inputRule,\n $markAttr,\n $markSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 validate: 'string',\n },\n },\n parseDOM: [\n // This works around a Google Docs misbehavior where\n // pasted content will be inexplicably wrapped in `<b>`\n // tags with a font-weight normal.\n {\n tag: 'b',\n getAttrs: (node: HTMLElement) =>\n node.style.fontWeight != 'normal' && null,\n },\n { tag: 'strong' },\n { style: 'font-style', getAttrs: (value) => (value === 'bold') as false },\n { style: 'font-weight=400', clearMark: (m) => m.type.name == 'strong' },\n {\n style: 'font-weight',\n getAttrs: (value: string) =>\n /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null,\n },\n ],\n toDOM: (mark) => ['strong', ctx.get(strongAttr.key)(mark)],\n parseMarkdown: {\n match: (node) => node.type === 'strong',\n runner: (state, node, markType) => {\n state.openMark(markType, { marker: node.marker })\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: (mark) => mark.type.name === 'strong',\n runner: (state, mark) => {\n state.withMark(mark, 'strong', undefined, {\n marker: mark.attrs.marker,\n })\n },\n },\n}))\n\nwithMeta(strongSchema.mark, {\n displayName: 'MarkSchema<strong>',\n group: 'Strong',\n})\n\nwithMeta(strongSchema.ctx, {\n displayName: 'MarkSchemaCtx<strong>',\n group: 'Strong',\n})\n\n/// A command to toggle the strong mark.\nexport const toggleStrongCommand = $command('ToggleStrong', (ctx) => () => {\n return toggleMark(strongSchema.type(ctx))\n})\n\nwithMeta(toggleStrongCommand, {\n displayName: 'Command<toggleStrongCommand>',\n group: 'Strong',\n})\n\n/// A input rule that will capture the strong mark.\nexport const strongInputRule = $inputRule((ctx) => {\n return markRule(/(?:\\*\\*|__)([^*_]+)(?:\\*\\*|__)$/, strongSchema.type(ctx), {\n getAttr: (match) => {\n return {\n marker: match[0].startsWith('*') ? '*' : '_',\n }\n },\n })\n})\n\nwithMeta(strongInputRule, {\n displayName: 'InputRule<strong>',\n group: 'Strong',\n})\n\n/// Keymap for the strong mark.\n/// - `Mod-b` - Toggle the strong mark.\nexport const strongKeymap = $useKeymap('strongKeymap', {\n ToggleBold: {\n shortcuts: ['Mod-b'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(toggleStrongCommand.key)\n },\n },\n})\n\nwithMeta(strongKeymap.ctx, {\n displayName: 'KeymapCtx<strong>',\n group: 'Strong',\n})\n\nwithMeta(strongKeymap.shortcuts, {\n displayName: 'Keymap<strong>',\n group: 'Strong',\n})\n","import type { MarkType } from '@milkdown/prose/model'\n\nimport { commandsCtx } from '@milkdown/core'\nimport { markRule } from '@milkdown/prose'\nimport {\n $command,\n $inputRule,\n $markAttr,\n $markSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 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(\n 'ToggleInlineCode',\n (ctx) => () => (state, dispatch) => {\n const { selection, tr } = state\n if (selection.empty) 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(\n (x) => x !== inlineCodeSchema.type.name\n )\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)\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","import type { Node as ProseNode } from '@milkdown/prose/model'\n\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { TextSelection } from '@milkdown/prose/state'\nimport { $command, $markAttr, $markSchema } from '@milkdown/utils'\n\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: { validate: 'string' },\n title: { default: null, validate: 'string|null' },\n },\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n href: dom.getAttribute('href'),\n title: dom.getAttribute('title'),\n }\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(\n 'ToggleLink',\n (ctx) =>\n (payload: UpdateLinkCommandPayload = {}) =>\n toggleMark(linkSchema.type(ctx), payload)\n)\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(\n 'UpdateLink',\n (ctx) =>\n (payload: UpdateLinkCommandPayload = {}) =>\n (state, dispatch) => {\n if (!dispatch) 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) return false\n\n const mark = node.marks.find(({ type }) => type === linkSchema.type(ctx))\n if (!mark) return false\n\n const start = pos\n const end = pos + node.nodeSize\n const { tr } = state\n const linkMark = linkSchema\n .type(ctx)\n .create({ ...mark.attrs, ...payload })\n if (!linkMark) 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)\n\nwithMeta(updateLinkCommand, {\n displayName: 'Command<updateLinkCommand>',\n group: 'Link',\n})\n","import { $node } from '@milkdown/utils'\n\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","import type { Node } from '@milkdown/transformer'\n\nimport { $remark } from '@milkdown/utils'\nimport { visitParents } from 'unist-util-visit-parents'\n\nimport { withMeta } from '../__internal__'\n\nfunction visitEmptyLine(ast: Node) {\n return visitParents(\n ast,\n (node: Node) =>\n node.type === 'html' &&\n ['<br />', '<br>', '<br >', '<br/>'].includes(\n (node as Node & { value: string }).value?.trim()\n ),\n (node: Node, parents: Node[]) => {\n if (!parents.length) return\n const parent = parents[parents.length - 1] as\n | (Node & { children: Node[] })\n | undefined\n if (!parent) return\n const index = parent.children.indexOf(node)\n if (index === -1) return\n\n parent.children.splice(index, 1)\n },\n true\n )\n}\n\n/// @internal\n/// This plugin is used to preserve the empty line.\n/// Markdown will fold the empty line into the previous line by default.\n/// This plugin will preserve the empty line by converting `<br />` to `line-break`.\n/// This plugin should be used with `linebreakSchema` to work.\nexport const remarkPreserveEmptyLinePlugin = $remark(\n 'remark-preserve-empty-line',\n () => () => visitEmptyLine\n)\n\nwithMeta(remarkPreserveEmptyLinePlugin.plugin, {\n displayName: 'Remark<remarkPreserveEmptyLine>',\n group: 'Remark',\n})\n\nwithMeta(remarkPreserveEmptyLinePlugin.options, {\n displayName: 'RemarkConfig<remarkPreserveEmptyLine>',\n group: 'Remark',\n})\n","import type { Ctx } from '@milkdown/ctx'\n\nimport { commandsCtx, editorViewCtx } from '@milkdown/core'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\n\nimport { serializeText, withMeta } from '../__internal__'\nimport { remarkPreserveEmptyLinePlugin } from '../plugin/remark-preserve-empty-line'\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) state.next(node.children)\n else 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 const view = ctx.get(editorViewCtx)\n const lastNode = view.state?.doc.lastChild\n\n state.openNode('paragraph')\n if (\n (!node.content || node.content.size === 0) &&\n node !== lastNode &&\n shouldPreserveEmptyLine(ctx)\n ) {\n state.addNode('html', undefined, '<br />')\n } else {\n serializeText(state, node)\n }\n state.closeNode()\n },\n },\n}))\n\nfunction shouldPreserveEmptyLine(ctx: Ctx) {\n let shouldPreserveEmptyLine = false\n try {\n ctx.get(remarkPreserveEmptyLinePlugin.id)\n shouldPreserveEmptyLine = true\n } catch {\n shouldPreserveEmptyLine = false\n }\n return shouldPreserveEmptyLine\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(\n 'TurnIntoText',\n (ctx) => () => setBlockType(paragraphSchema.type(ctx))\n)\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","import type { Node } from '@milkdown/prose/model'\n\nimport { commandsCtx, editorViewCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { textblockTypeInputRule } from '@milkdown/prose/inputrules'\nimport {\n $command,\n $ctx,\n $inputRule,\n $nodeAttr,\n $nodeSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 node.textContent\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/\\s+/g, '-')\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(\n defaultHeadingIdGenerator,\n 'headingIdGenerator'\n)\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 validate: 'string',\n },\n level: {\n default: 1,\n validate: 'number',\n },\n },\n parseDOM: headingIndex.map((x) => ({\n tag: `h${x}`,\n getAttrs: (node) => {\n if (!(node instanceof HTMLElement)) 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(\n /^(?<hashes>#+)\\s$/,\n headingSchema.type(ctx),\n (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) level = 6\n\n return { level }\n }\n return { level: x }\n }\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) 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(\n 'DowngradeHeading',\n (ctx) => () => (state, dispatch, view) => {\n const { $from } = state.selection\n const node = $from.node()\n if (\n node.type !== headingSchema.type(ctx) ||\n !state.selection.empty ||\n $from.parentOffset !== 0\n )\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)\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","import type { $NodeSchema } from '@milkdown/utils'\n\nimport { commandsCtx } from '@milkdown/core'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport {\n $command,\n $inputRule,\n $nodeAttr,\n $nodeSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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(\n 'blockquote',\n (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\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) =>\n wrappingInputRule(/^\\s*>\\s$/, blockquoteSchema.type(ctx))\n)\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(\n 'WrapInBlockquote',\n (ctx) => () => wrapIn(blockquoteSchema.type(ctx))\n)\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","import { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { textblockTypeInputRule } from '@milkdown/prose/inputrules'\nimport {\n $command,\n $inputRule,\n $nodeAttr,\n $nodeSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 validate: 'string',\n },\n },\n parseDOM: [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) 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 const language = node.attrs.language\n const languageAttrs =\n language && language.length > 0\n ? { 'data-language': language }\n : undefined\n\n return [\n 'pre',\n {\n ...attr.pre,\n ...languageAttrs,\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 ?? ''\n const value = node.value as string | null\n state.openNode(type, { language })\n if (value) 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) =>\n textblockTypeInputRule(\n /^```(?<language>[a-z]*)?[\\s\\n]$/,\n codeBlockSchema.type(ctx),\n (match) => ({\n language: match.groups?.language ?? '',\n })\n )\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(\n 'CreateCodeBlock',\n (ctx) =>\n (language = '') =>\n setBlockType(codeBlockSchema.type(ctx), { language })\n)\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(\n 'UpdateCodeBlockLanguage',\n () =>\n (\n { pos, language }: { pos: number; language: string } = {\n pos: -1,\n language: '',\n }\n ) =>\n (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\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","import { expectDomTypeError } from '@milkdown/exception'\nimport { findSelectedNodeOfType } from '@milkdown/prose'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema } from '@milkdown/utils'\n\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: '', validate: 'string' },\n alt: { default: '', validate: 'string' },\n title: { default: '', validate: 'string' },\n },\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) 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(\n 'InsertImage',\n (ctx) =>\n (payload: UpdateImageCommandPayload = {}) =>\n (state, dispatch) => {\n if (!dispatch) return true\n\n const { src = '', alt = '', title = '' } = payload\n\n const node = imageSchema.type(ctx).create({ src, alt, title })\n if (!node) return true\n\n dispatch(state.tr.replaceSelectionWith(node).scrollIntoView())\n return true\n }\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(\n 'UpdateImage',\n (ctx) =>\n (payload: UpdateImageCommandPayload = {}) =>\n (state, dispatch) => {\n const nodeWithPos = findSelectedNodeOfType(\n state.selection,\n imageSchema.type(ctx)\n )\n if (!nodeWithPos) return false\n\n const { node, pos } = nodeWithPos\n\n const newAttrs = { ...node.attrs }\n const { src, alt, title } = payload\n if (src !== undefined) newAttrs.src = src\n if (alt !== undefined) newAttrs.alt = alt\n if (title !== undefined) newAttrs.title = title\n\n dispatch?.(\n state.tr.setNodeMarkup(pos, undefined, newAttrs).scrollIntoView()\n )\n return true\n }\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 `` to insert a image node.\n/// The `title` is optional.\nexport const insertImageInputRule = $inputRule(\n (ctx) =>\n 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(\n start,\n end,\n imageSchema.type(ctx).create({ src, alt, title })\n )\n\n return null\n }\n )\n)\n\nwithMeta(insertImageInputRule, {\n displayName: 'InputRule<insertImageInputRule>',\n group: 'Image',\n})\n","import { commandsCtx } from '@milkdown/core'\nimport { Selection, TextSelection } from '@milkdown/prose/state'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\n\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-type': 'hardbreak',\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 validate: 'boolean',\n },\n },\n selectable: false,\n parseDOM: [\n { tag: 'br' },\n {\n tag: 'span[data-type=\"hardbreak\"]',\n getAttrs: () => ({ isInline: true }),\n },\n ],\n toDOM: (node) =>\n node.attrs.isInline\n ? ['span', ctx.get(hardbreakAttr.key)(node), ' ']\n : ['br', ctx.get(hardbreakAttr.key)(node)],\n parseMarkdown: {\n match: ({ type }) => type === 'break',\n runner: (state, node, type) => {\n state.addNode(type, {\n isInline: Boolean(\n (node.data as undefined | { isInline: boolean })?.isInline\n ),\n })\n },\n },\n leafText: () => '\\n',\n toMarkdown: {\n match: (node) => node.type.name === 'hardbreak',\n runner: (state, node) => {\n if (node.attrs.isInline) state.addNode('text', undefined, '\\n')\n else 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(\n 'InsertHardbreak',\n (ctx) => () => (state, dispatch) => {\n const { selection, tr } = state\n if (!(selection instanceof TextSelection)) 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(\n selection.to - 1,\n selection.to,\n state.schema.node('paragraph')\n )\n .setSelection(Selection.near(tr.doc.resolve(selection.to)))\n .scrollIntoView()\n )\n return true\n }\n }\n dispatch?.(\n tr\n .setMeta('hardbreak', true)\n .replaceSelectionWith(hardbreakSchema.type(ctx).create())\n .scrollIntoView()\n )\n return true\n }\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","import { InputRule } from '@milkdown/prose/inputrules'\nimport { Selection } from '@milkdown/prose/state'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema } from '@milkdown/utils'\n\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(\n (ctx) =>\n new InputRule(/^(?:---|___\\s|\\*\\*\\*\\s)$/, (state, match, start, end) => {\n const { tr } = state\n\n if (match[0]) 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(\n 'InsertHr',\n (ctx) => () => (state, dispatch) => {\n if (!dispatch) 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) 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) return true\n\n dispatch(_tr.setSelection(sel).scrollIntoView())\n return true\n }\n)\n\nwithMeta(insertHrCommand, {\n displayName: 'Command<insertHrCommand>',\n group: 'Hr',\n})\n","import { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport {\n $command,\n $inputRule,\n $nodeAttr,\n $nodeSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 validate: 'boolean',\n },\n },\n parseDOM: [\n {\n tag: 'ul',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n spread: dom.dataset.spread === 'true',\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, {\n ordered: false,\n spread: node.attrs.spread,\n })\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) =>\n wrappingInputRule(/^\\s*([-+*])\\s$/, bulletListSchema.type(ctx))\n)\n\nwithMeta(wrapInBulletListInputRule, {\n displayName: 'InputRule<wrapInBulletListInputRule>',\n group: 'BulletList',\n})\n\n/// Command for creating bullet list node.\nexport const wrapInBulletListCommand = $command(\n 'WrapInBulletList',\n (ctx) => () => wrapIn(bulletListSchema.type(ctx))\n)\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","import { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport {\n $command,\n $inputRule,\n $nodeAttr,\n $nodeSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 validate: 'number',\n },\n spread: {\n default: false,\n validate: 'boolean',\n },\n },\n parseDOM: [\n {\n tag: 'ol',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n spread: dom.dataset.spread,\n order: dom.hasAttribute('start')\n ? Number(dom.getAttribute('start'))\n : 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, {\n ordered: true,\n start: 1,\n spread: node.attrs.spread === 'true',\n })\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) =>\n 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)\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(\n 'WrapInOrderedList',\n (ctx) => () => wrapIn(orderedListSchema.type(ctx))\n)\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","import type { Ctx } from '@milkdown/ctx'\n\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { joinBackward } from '@milkdown/prose/commands'\nimport {\n liftListItem,\n sinkListItem,\n splitListItem,\n} from '@milkdown/prose/schema-list'\nimport { type Command, TextSelection } from '@milkdown/prose/state'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\n\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 validate: 'string',\n },\n listType: {\n default: 'bullet',\n validate: 'string',\n },\n spread: {\n default: true,\n validate: 'boolean',\n },\n },\n defining: true,\n parseDOM: [\n {\n tag: 'li',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n label: dom.dataset.label,\n listType: dom.dataset.listType,\n spread: dom.dataset.spread === 'true',\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, {\n spread: node.attrs.spread,\n })\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(\n 'SinkListItem',\n (ctx) => () => sinkListItem(listItemSchema.type(ctx))\n)\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(\n 'LiftListItem',\n (ctx) => () => liftListItem(listItemSchema.type(ctx))\n)\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(\n 'SplitListItem',\n (ctx) => () => splitListItem(listItemSchema.type(ctx))\n)\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)) 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) return false\n\n const parentItem = $from.node(-1)\n // selection should be in list item\n if (parentItem.type !== listItemSchema.type(ctx)) return false\n\n return joinBackward(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(\n 'LiftFirstListItem',\n (ctx) => () => liftFirstListItem(ctx)\n)\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","import { $node } from '@milkdown/utils'\n\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","import { $nodeAttr, $nodeSchema } from '@milkdown/utils'\n\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 validate: 'string',\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 {\n tag: 'span[data-type=\"html\"]',\n getAttrs: (dom) => {\n return {\n value: dom.dataset.value ?? '',\n }\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","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport {\n emphasisAttr,\n emphasisSchema,\n inlineCodeAttr,\n inlineCodeSchema,\n linkAttr,\n linkSchema,\n strongAttr,\n strongSchema,\n} 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","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport {\n emphasisStarInputRule,\n emphasisUnderscoreInputRule,\n inlineCodeInputRule,\n strongInputRule,\n} from '../mark'\nimport {\n createCodeBlockInputRule,\n insertHrInputRule,\n wrapInBlockquoteInputRule,\n wrapInBulletListInputRule,\n wrapInHeadingInputRule,\n wrapInOrderedListInputRule,\n} from '../node'\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","import { findNodeInSelection } from '@milkdown/prose'\nimport {\n Node,\n type Attrs,\n type MarkType,\n type NodeType,\n} from '@milkdown/prose/model'\nimport { TextSelection } from '@milkdown/prose/state'\nimport { findWrapping } from '@milkdown/prose/transform'\nimport { $command } from '@milkdown/utils'\n\n/// A command to check if a mark is selected.\nexport const isMarkSelectedCommand = $command(\n 'IsMarkSelected',\n () => (markType?: MarkType) => (state) => {\n if (!markType) return false\n const { doc, selection } = state\n const hasLink = doc.rangeHasMark(selection.from, selection.to, markType)\n return hasLink\n }\n)\n\n/// A command to check if a node is selected.\nexport const isNodeSelectedCommand = $command(\n 'IsNoteSelected',\n () => (nodeType?: NodeType) => (state) => {\n if (!nodeType) return false\n const result = findNodeInSelection(state, nodeType)\n return result.hasNode\n }\n)\n\n/// A command to clear text in the current block.\nexport const clearTextInCurrentBlockCommand = $command(\n 'ClearTextInCurrentBlock',\n () => () => (state, dispatch) => {\n let tr = state.tr\n const { $from, $to } = tr.selection\n const { pos: from } = $from\n const { pos: right } = $to\n const left = from - $from.node().content.size\n if (left < 0) return false\n\n tr = tr.deleteRange(left, right)\n dispatch?.(tr)\n return true\n }\n)\n\n/// Set block type to target block and attribute.\nexport const setBlockTypeCommand = $command(\n 'SetBlockType',\n () =>\n (payload?: { nodeType: NodeType; attrs?: Attrs | null }) =>\n (state, dispatch) => {\n const { nodeType, attrs = null } = payload ?? {}\n if (!nodeType) return false\n const tr = state.tr\n const { from, to } = tr.selection\n try {\n tr.setBlockType(from, to, nodeType, attrs)\n } catch {\n return false\n }\n dispatch?.(tr)\n return true\n }\n)\n\n/// A command to wrap the current block with a block type.\nexport const wrapInBlockTypeCommand = $command(\n 'WrapInBlockType',\n () =>\n (payload?: { nodeType: NodeType; attrs?: Attrs | null }) =>\n (state, dispatch) => {\n const { nodeType, attrs = null } = payload ?? {}\n if (!nodeType) return false\n\n let tr = state.tr\n\n try {\n const { $from, $to } = tr.selection\n const blockRange = $from.blockRange($to)\n const wrapping = blockRange && findWrapping(blockRange, nodeType, attrs)\n if (!wrapping) return false\n tr = tr.wrap(blockRange, wrapping)\n } catch {\n return false\n }\n\n dispatch?.(tr)\n return true\n }\n)\n\n/// A command to add a block type to the current selection.\nexport const addBlockTypeCommand = $command(\n 'AddBlockType',\n () =>\n (payload?: { nodeType: NodeType | Node; attrs?: Attrs | null }) =>\n (state, dispatch) => {\n const { nodeType, attrs = null } = payload ?? {}\n if (!nodeType) return false\n const tr = state.tr\n\n try {\n const node =\n nodeType instanceof Node ? nodeType : nodeType.createAndFill(attrs)\n if (!node) return false\n\n tr.replaceSelectionWith(node)\n } catch {\n return false\n }\n dispatch?.(tr)\n return true\n }\n)\n\n/// A command to select text near a position.\nexport const selectTextNearPosCommand = $command(\n 'SelectTextNearPos',\n () => (payload?: { pos?: number }) => (state, dispatch) => {\n const { pos } = payload ?? {}\n if (pos == null) return false\n\n const clamp = (value: number, min: number, max: number) =>\n Math.min(Math.max(value, min), max)\n\n const tr = state.tr\n try {\n const $pos = state.doc.resolve(clamp(pos, 0, state.doc.content.size))\n tr.setSelection(TextSelection.near($pos))\n } catch {\n return false\n }\n dispatch?.(tr.scrollIntoView())\n return true\n }\n)\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport {\n addBlockTypeCommand,\n clearTextInCurrentBlockCommand,\n isMarkSelectedCommand,\n isNodeSelectedCommand,\n selectTextNearPosCommand,\n setBlockTypeCommand,\n wrapInBlockTypeCommand,\n} from '../commands'\nimport {\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleLinkCommand,\n toggleStrongCommand,\n updateLinkCommand,\n} 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 isMarkSelectedCommand,\n isNodeSelectedCommand,\n\n clearTextInCurrentBlockCommand,\n setBlockTypeCommand,\n wrapInBlockTypeCommand,\n addBlockTypeCommand,\n selectTextNearPosCommand,\n]\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport { emphasisKeymap, inlineCodeKeymap, strongKeymap } from '../mark'\nimport {\n blockquoteKeymap,\n bulletListKeymap,\n codeBlockKeymap,\n hardbreakKeymap,\n headingKeymap,\n listItemKeymap,\n orderedListKeymap,\n paragraphKeymap,\n} 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","import { $remark } from '@milkdown/utils'\nimport { visit } from 'unist-util-visit'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to add order in list for remark AST.\nexport const remarkAddOrderInListPlugin = $remark(\n 'remarkAddOrderInList',\n () => () => (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)\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","import type { Node } from '@milkdown/transformer'\n\nimport { $remark } from '@milkdown/utils'\nimport { visit } from 'unist-util-visit'\n\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(\n 'remarkLineBreak',\n () => () => (tree: Node) => {\n const find = /[\\t ]*(?:\\r?\\n|\\r)/g\n visit(\n tree,\n 'text',\n (\n node: Node & { value: string },\n index: number,\n parent: Node & { children: Node[] }\n ) => {\n if (!node.value || typeof node.value !== 'string') 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({\n type: 'text',\n value: node.value.slice(start, position),\n })\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 =\n result.length > 0 && parent && typeof index === 'number'\n\n if (!hasResultAndIndex) 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 }\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","import { $remark } from '@milkdown/utils'\nimport remarkInlineLinks from 'remark-inline-links'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin wraps [remark-inline-links](https://github.com/remarkjs/remark-inline-links).\nexport const remarkInlineLinkPlugin = $remark(\n 'remarkInlineLink',\n () => remarkInlineLinks\n)\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","import type { Node } from '@milkdown/transformer'\n\nimport { $remark } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\nconst isParent = (node: Node): node is Node & { children: Node[] } =>\n !!(node as Node & { children: Node[] }).children\nconst isHTML = (\n node: Node\n): node is Node & { children: Node[]; value: unknown } => node.type === 'html'\n\nfunction flatMapWithDepth(\n ast: Node,\n fn: (node: Node, index: number, parent: Node | null) => Node[]\n) {\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) 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(\n 'remarkHTMLTransformer',\n () => () => (tree: Node) => {\n flatMapWithDepth(tree, (node, _index, parent) => {\n if (!isHTML(node)) 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)\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","import type { Node } from '@milkdown/transformer'\n\nimport { $remark } from '@milkdown/utils'\nimport { visit } from 'unist-util-visit'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to keep the marker (`_` and `*`) of emphasis and strong nodes.\nexport const remarkMarker = $remark(\n 'remarkMarker',\n () => () => (tree, file) => {\n const getMarker = (node: Node) => {\n return (file.value as string).charAt(node.position!.start.offset!)\n }\n visit(\n tree,\n (node: Node) => ['strong', 'emphasis'].includes(node.type),\n (node: Node) => {\n ;(node as Node & { marker: string }).marker = getMarker(node)\n }\n )\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","import { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { Decoration, DecorationSet } from '@milkdown/prose/view'\nimport { $prose } from '@milkdown/utils'\n\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(\n 'MILKDOWN_INLINE_NODES_CURSOR'\n )\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) return false\n\n const pos = tr.selection.$from\n const left = pos.nodeBefore\n const right = pos.nodeAfter\n if (\n left &&\n right &&\n left.isInline &&\n !left.isText &&\n right.isInline &&\n !right.isText\n )\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) 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","import { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { AddMarkStep, ReplaceStep } from '@milkdown/prose/transform'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\nimport { hardbreakSchema } from '../node'\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) return\n\n const [tr] = trs\n if (!tr) return\n\n const [step] = tr.steps\n\n const isInsertHr = tr.getMeta('hardbreak')\n if (isInsertHr) {\n if (!(step instanceof ReplaceStep)) return\n\n const { from } = step as unknown as { from: number }\n return newState.tr.setNodeMarkup(\n from,\n hardbreakSchema.type(ctx),\n undefined,\n []\n )\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(\n pos,\n hardbreakSchema.type(ctx),\n undefined,\n []\n )\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","import { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $ctx, $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\n/// This slice contains the nodes that within which the hardbreak will be ignored.\nexport const hardbreakFilterNodes = $ctx(\n ['table', 'code_block'],\n 'hardbreakFilterNodes'\n)\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)) 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","import type { EditorView } from '@milkdown/prose/view'\n\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\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) return\n\n const getId = ctx.get(headingIdGenerator.key)\n const tr = view.state.tr.setMeta('addToHistory', false)\n\n let found = false\n const idMap: Record<string, number> = {}\n\n view.state.doc.descendants((node, pos) => {\n if (node.type === headingSchema.type(ctx)) {\n if (node.textContent.trim().length === 0) return\n\n const attrs = node.attrs\n let id = getId(node)\n if (idMap[id]) {\n idMap[id]! += 1\n id += `-#${idMap[id]}`\n } else {\n idMap[id] = 1\n }\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) view.dispatch(tr)\n }\n\n return new Plugin({\n key: headingIdPluginKey,\n view: (view) => {\n updateId(view)\n\n return {\n update: (view, prevState) => {\n if (view.state.doc.eq(prevState.doc)) return\n updateId(view)\n },\n }\n },\n })\n})\n\nwithMeta(syncHeadingIdPlugin, {\n displayName: 'Prose<syncHeadingIdPlugin>',\n group: 'Prose',\n})\n","import type { EditorView } from '@milkdown/prose/view'\n\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\nimport { bulletListSchema } from '../node'\nimport { listItemSchema } from '../node/list-item'\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((ctx) => {\n const syncOrderLabel = (view: EditorView) => {\n if (view.composing || !view.editable) 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 = (\n attrs: Record<string, any>,\n index: number\n ): 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) tr = tr.setNodeMarkup(pos, undefined, attrs)\n }\n return false\n })\n }\n } else if (\n node.type === listItemType &&\n parent?.type === orderedListType\n ) {\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) 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) 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","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport {\n hardbreakClearMarkPlugin,\n hardbreakFilterNodes,\n hardbreakFilterPlugin,\n inlineNodesCursorPlugin,\n remarkAddOrderInListPlugin,\n remarkHtmlTransformer,\n remarkInlineLinkPlugin,\n remarkLineBreak,\n remarkMarker,\n remarkPreserveEmptyLinePlugin,\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 remarkPreserveEmptyLinePlugin,\n\n syncHeadingIdPlugin,\n syncListOrderPlugin,\n].flat()\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport {\n commands,\n inputRules,\n keymap,\n markInputRules,\n plugins,\n schema,\n} from './composed'\n\nexport * from './node'\nexport * from './mark'\nexport * from './plugin'\nexport * from './composed'\nexport * from './commands'\n\n/// The commonmark preset, includes all the plugins.\nexport const commonmark: MilkdownPlugin[] = [\n schema,\n inputRules,\n markInputRules,\n commands,\n keymap,\n plugins,\n].flat()\n"],"names":["commands","shouldPreserveEmptyLine","inlineNodesCursorPlugin","view","pos","index"],"mappings":";;;;;;;;;;;;;;AAKO,SAAS,cAAc,OAAwB,MAAY;AAChE,QAAM,kBACJ,KAAK,cAAc,KAAK,KAAK,WAAW,KAAK,SAAS;AACxD,MAAI,CAAC,iBAAiB;AACpB,UAAM,KAAK,KAAK,OAAO;AACvB;AAAA,EAAA;AAGF,QAAM,aAAqB,CAAA;AAC3B,OAAK,QAAQ,QAAQ,CAAC,GAAG,GAAG,MAAM;AAChC,QAAI,MAAM,KAAK,aAAa,EAAG;AAE/B,eAAW,KAAK,CAAC;AAAA,EAAA,CAClB;AACD,QAAM,KAAK,SAAS,UAAU,UAAU,CAAC;AAC3C;AClBO,SAAS,SACd,QACA,MACG;AACH,SAAO,OAAO,QAAQ;AAAA,IACpB,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,GAAG;AAAA,IAAA;AAAA,EACL,CACD;AAED,SAAO;AACT;ACAO,MAAM,eAAe,UAAU,UAAU;AAEhD,SAAS,cAAc;AAAA,EACrB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,iBAAiB,YAAY,YAAY,CAAC,SAAS;AAAA,EAC9D,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,SAAS,IAAI,IAAI,yBAAyB,EAAE,YAAY;AAAA,MACxD,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,UAAU;AAAA,IACR,EAAE,KAAK,IAAA;AAAA,IACP,EAAE,KAAK,KAAA;AAAA,IACP,EAAE,OAAO,cAAc,UAAU,CAAC,UAAW,UAAU,SAAA;AAAA,EAAmB;AAAA,EAE5E,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,aAAa,GAAG,EAAE,IAAI,CAAC;AAAA,EACvD,eAAe;AAAA,IACb,OAAO,CAAC,SAAS,KAAK,SAAS;AAAA,IAC/B,QAAQ,CAAC,OAAO,MAAM,aAAa;AACjC,YAAM,SAAS,UAAU,EAAE,QAAQ,KAAK,QAAQ;AAChD,YAAM,KAAK,KAAK,QAAQ;AACxB,YAAM,UAAU,QAAQ;AAAA,IAAA;AAAA,EAC1B;AAAA,EAEF,YAAY;AAAA,IACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,IACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,YAAM,SAAS,MAAM,YAAY,QAAW;AAAA,QAC1C,QAAQ,KAAK,MAAM;AAAA,MAAA,CACpB;AAAA,IAAA;AAAA,EACH;AAEJ,EAAE;AAEF,SAAS,eAAe,MAAM;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,eAAe,KAAK;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,wBAAwB,SAAS,kBAAkB,CAAC,QAAQ,MAAM;AAC7E,SAAO,WAAW,eAAe,KAAK,GAAG,CAAC;AAC5C,CAAC;AAED,SAAS,uBAAuB;AAAA,EAC9B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,wBAAwB,WAAW,CAAC,QAAQ;AACvD,SAAO,SAAS,0BAA0B,eAAe,KAAK,GAAG,GAAG;AAAA,IAClE,SAAS,OAAO;AAAA,MACd,QAAQ;AAAA,IAAA;AAAA,IAEV,gBAAgB,CAAC,EAAE,WAAW,YAC5B,CAAC,UAAU,WAAW,GAAG,IACrB,EAAE,WAAW,UAAU,MAAM,CAAC,GAAG,OAAO,QAAQ,MAChD,CAAA;AAAA,EAAC,CACR;AACH,CAAC;AAED,SAAS,uBAAuB;AAAA,EAC9B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,8BAA8B,WAAW,CAAC,QAAQ;AAC7D,SAAO,SAAS,wBAAwB,eAAe,KAAK,GAAG,GAAG;AAAA,IAChE,SAAS,OAAO;AAAA,MACd,QAAQ;AAAA,IAAA;AAAA,IAEV,gBAAgB,CAAC,EAAE,WAAW,YAC5B,CAAC,UAAU,WAAW,GAAG,IACrB,EAAE,WAAW,UAAU,MAAM,CAAC,GAAG,OAAO,QAAQ,MAChD,CAAA;AAAA,EAAC,CACR;AACH,CAAC;AAED,SAAS,6BAA6B;AAAA,EACpC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,iBAAiB,WAAW,kBAAkB;AAAA,EACzD,gBAAgB;AAAA,IACd,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,sBAAsB,GAAG;AAAA,IAAA;AAAA,EACtD;AAEJ,CAAC;AAED,SAAS,eAAe,KAAK;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,eAAe,WAAW;AAAA,EACjC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACnHM,MAAM,aAAa,UAAU,QAAQ;AAE5C,SAAS,YAAY;AAAA,EACnB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,eAAe,YAAY,UAAU,CAAC,SAAS;AAAA,EAC1D,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,SAAS,IAAI,IAAI,yBAAyB,EAAE,UAAU;AAAA,MACtD,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,UAAU;AAAA;AAAA;AAAA;AAAA,IAIR;AAAA,MACE,KAAK;AAAA,MACL,UAAU,CAAC,SACT,KAAK,MAAM,cAAc,YAAY;AAAA,IAAA;AAAA,IAEzC,EAAE,KAAK,SAAA;AAAA,IACP,EAAE,OAAO,cAAc,UAAU,CAAC,UAAW,UAAU,OAAA;AAAA,IACvD,EAAE,OAAO,mBAAmB,WAAW,CAAC,MAAM,EAAE,KAAK,QAAQ,SAAA;AAAA,IAC7D;AAAA,MACE,OAAO;AAAA,MACP,UAAU,CAAC,UACT,4BAA4B,KAAK,KAAK,KAAK;AAAA,IAAA;AAAA,EAC/C;AAAA,EAEF,OAAO,CAAC,SAAS,CAAC,UAAU,IAAI,IAAI,WAAW,GAAG,EAAE,IAAI,CAAC;AAAA,EACzD,eAAe;AAAA,IACb,OAAO,CAAC,SAAS,KAAK,SAAS;AAAA,IAC/B,QAAQ,CAAC,OAAO,MAAM,aAAa;AACjC,YAAM,SAAS,UAAU,EAAE,QAAQ,KAAK,QAAQ;AAChD,YAAM,KAAK,KAAK,QAAQ;AACxB,YAAM,UAAU,QAAQ;AAAA,IAAA;AAAA,EAC1B;AAAA,EAEF,YAAY;AAAA,IACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,IACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,YAAM,SAAS,MAAM,UAAU,QAAW;AAAA,QACxC,QAAQ,KAAK,MAAM;AAAA,MAAA,CACpB;AAAA,IAAA;AAAA,EACH;AAEJ,EAAE;AAEF,SAAS,aAAa,MAAM;AAAA,EAC1B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,aAAa,KAAK;AAAA,EACzB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,sBAAsB,SAAS,gBAAgB,CAAC,QAAQ,MAAM;AACzE,SAAO,WAAW,aAAa,KAAK,GAAG,CAAC;AAC1C,CAAC;AAED,SAAS,qBAAqB;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,kBAAkB,WAAW,CAAC,QAAQ;AACjD,SAAO,SAAS,mCAAmC,aAAa,KAAK,GAAG,GAAG;AAAA,IACzE,SAAS,CAAC,UAAU;AAClB,aAAO;AAAA,QACL,QAAQ,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,MAAM;AAAA,MAAA;AAAA,IAC3C;AAAA,EACF,CACD;AACH,CAAC;AAED,SAAS,iBAAiB;AAAA,EACxB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,eAAe,WAAW,gBAAgB;AAAA,EACrD,YAAY;AAAA,IACV,WAAW,CAAC,OAAO;AAAA,IACnB,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,oBAAoB,GAAG;AAAA,IAAA;AAAA,EACpD;AAEJ,CAAC;AAED,SAAS,aAAa,KAAK;AAAA,EACzB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,aAAa,WAAW;AAAA,EAC/B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AC3GM,MAAM,iBAAiB,UAAU,YAAY;AAEpD,SAAS,gBAAgB;AAAA,EACvB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,mBAAmB,YAAY,cAAc,CAAC,SAAS;AAAA,EAClE,UAAU;AAAA,EACV,MAAM;AAAA,EACN,UAAU,CAAC,EAAE,KAAK,QAAQ;AAAA,EAC1B,OAAO,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,eAAe,GAAG,EAAE,IAAI,CAAC;AAAA,EAC3D,eAAe;AAAA,IACb,OAAO,CAAC,SAAS,KAAK,SAAS;AAAA,IAC/B,QAAQ,CAAC,OAAO,MAAM,aAAa;AACjC,YAAM,SAAS,QAAQ;AACvB,YAAM,QAAQ,KAAK,KAAe;AAClC,YAAM,UAAU,QAAQ;AAAA,IAAA;AAAA,EAC1B;AAAA,EAEF,YAAY;AAAA,IACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,IACpC,QAAQ,CAAC,OAAO,MAAM,SAAS;AAC7B,YAAM,SAAS,MAAM,cAAc,KAAK,QAAQ,EAAE;AAAA,IAAA;AAAA,EACpD;AAEJ,EAAE;AAEF,SAAS,iBAAiB,MAAM;AAAA,EAC9B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,iBAAiB,KAAK;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA,CAAC,QAAQ,MAAM,CAAC,OAAO,aAAa;AAClC,UAAM,EAAE,WAAW,GAAA,IAAO;AAC1B,QAAI,UAAU,MAAO,QAAO;AAC5B,UAAM,EAAE,MAAM,GAAA,IAAO;AAErB,UAAM,MAAM,MAAM,IAAI,aAAa,MAAM,IAAI,iBAAiB,KAAK,GAAG,CAAC;AAEvE,QAAI,KAAK;AACP,iBAAW,GAAG,WAAW,MAAM,IAAI,iBAAiB,KAAK,GAAG,CAAC,CAAC;AAC9D,aAAO;AAAA,IAAA;AAGT,UAAM,gBAAgB,OAAO,KAAK,MAAM,OAAO,KAAK,EAAE;AAAA,MACpD,CAAC,MAAM,MAAM,iBAAiB,KAAK;AAAA,IAAA;AAIrC,kBACG,IAAI,CAAC,SAAS,MAAM,OAAO,MAAM,IAAI,CAAa,EAClD,QAAQ,CAAC,MAAM;AACd,SAAG,WAAW,MAAM,IAAI,CAAC;AAAA,IAAA,CAC1B;AAGH,eAAW,GAAG,QAAQ,MAAM,IAAI,iBAAiB,KAAK,GAAG,EAAE,OAAA,CAAQ,CAAC;AACpE,WAAO;AAAA,EAAA;AAEX;AAEA,SAAS,yBAAyB;AAAA,EAChC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,sBAAsB,WAAW,CAAC,QAAQ;AACrD,SAAO,SAAS,sBAAsB,iBAAiB,KAAK,GAAG,CAAC;AAClE,CAAC;AAED,SAAS,qBAAqB;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,mBAAmB,WAAW,oBAAoB;AAAA,EAC7D,kBAAkB;AAAA,IAChB,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,wBAAwB,GAAG;AAAA,IAAA;AAAA,EACxD;AAEJ,CAAC;AAED,SAAS,iBAAiB,KAAK;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,iBAAiB,WAAW;AAAA,EACnC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AC/GM,MAAM,WAAW,UAAU,MAAM;AAExC,SAAS,UAAU;AAAA,EACjB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,aAAa,YAAY,QAAQ,CAAC,SAAS;AAAA,EACtD,OAAO;AAAA,IACL,MAAM,EAAE,UAAU,SAAA;AAAA,IAClB,OAAO,EAAE,SAAS,MAAM,UAAU,cAAA;AAAA,EAAc;AAAA,EAElD,UAAU;AAAA,IACR;AAAA,MACE,KAAK;AAAA,MACL,UAAU,CAAC,QAAQ;AACjB,YAAI,EAAE,eAAe,aAAc,OAAM,mBAAmB,GAAG;AAE/D,eAAO;AAAA,UACL,MAAM,IAAI,aAAa,MAAM;AAAA,UAC7B,OAAO,IAAI,aAAa,OAAO;AAAA,QAAA;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA,EAEF,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,SAAS,GAAG,EAAE,IAAI,GAAG,GAAG,KAAK,OAAO;AAAA,EACxE,eAAe;AAAA,IACb,OAAO,CAAC,SAAS,KAAK,SAAS;AAAA,IAC/B,QAAQ,CAAC,OAAO,MAAM,aAAa;AACjC,YAAM,MAAM,KAAK;AACjB,YAAM,QAAQ,KAAK;AACnB,YAAM,SAAS,UAAU,EAAE,MAAM,KAAK,OAAO;AAC7C,YAAM,KAAK,KAAK,QAAQ;AACxB,YAAM,UAAU,QAAQ;AAAA,IAAA;AAAA,EAC1B;AAAA,EAEF,YAAY;AAAA,IACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,IACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,YAAM,SAAS,MAAM,QAAQ,QAAW;AAAA,QACtC,OAAO,KAAK,MAAM;AAAA,QAClB,KAAK,KAAK,MAAM;AAAA,MAAA,CACjB;AAAA,IAAA;AAAA,EACH;AAEJ,EAAE;AAEF,SAAS,WAAW,MAAM;AAAA,EACxB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AASM,MAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA,CAAC,QACC,CAAC,UAAoC,CAAA,MACnC,WAAW,WAAW,KAAK,GAAG,GAAG,OAAO;AAC9C;AAEA,SAAS,mBAAmB;AAAA,EAC1B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA,CAAC,QACC,CAAC,UAAoC,CAAA,MACrC,CAAC,OAAO,aAAa;AACnB,QAAI,CAAC,SAAU,QAAO;AAEtB,QAAI;AACJ,QAAI,MAAM;AACV,UAAM,EAAE,cAAc;AACtB,UAAM,EAAE,MAAM,GAAA,IAAO;AACrB,UAAM,IAAI,aAAa,MAAM,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,GAAG,MAAM;AAChE,UAAI,WAAW,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,GAAG;AACzC,eAAO;AACP,cAAM;AACN,eAAO;AAAA,MAAA;AAGT,aAAO;AAAA,IAAA,CACR;AAED,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,OAAO,KAAK,MAAM,KAAK,CAAC,EAAE,KAAA,MAAW,SAAS,WAAW,KAAK,GAAG,CAAC;AACxE,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,QAAQ;AACd,UAAM,MAAM,MAAM,KAAK;AACvB,UAAM,EAAE,OAAO;AACf,UAAM,WAAW,WACd,KAAK,GAAG,EACR,OAAO,EAAE,GAAG,KAAK,OAAO,GAAG,QAAA,CAAS;AACvC,QAAI,CAAC,SAAU,QAAO;AAEtB;AAAA,MACE,GACG,WAAW,OAAO,KAAK,IAAI,EAC3B,QAAQ,OAAO,KAAK,QAAQ,EAC5B,aAAa,IAAI,cAAc,GAAG,UAAU,OAAO,CAAC,EACpD,eAAA;AAAA,IAAe;AAGpB,WAAO;AAAA,EAAA;AAEb;AAEA,SAAS,mBAAmB;AAAA,EAC1B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AChIM,MAAM,YAAY,MAAM,OAAO,OAAO;AAAA,EAC3C,SAAS;AAAA,EACT,eAAe;AAAA,IACb,OAAO,CAAC,EAAE,KAAA,MAAW,SAAS;AAAA,IAC9B,QAAQ,CAAC,OAAO,MAAM,SAAS;AAC7B,YAAM,WAAW,MAAM,IAAI;AAAA,IAAA;AAAA,EAC7B;AAAA,EAEF,YAAY;AAAA,IACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,IACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,YAAM,SAAS,MAAM;AACrB,YAAM,KAAK,KAAK,OAAO;AAAA,IAAA;AAAA,EACzB;AAEJ,EAAE;AAEF,SAAS,WAAW;AAAA,EAClB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AClBD,SAAS,eAAe,KAAW;AACjC,SAAO;AAAA,IACL;AAAA,IACA,CAAC,SACC,KAAK,SAAS,UACd,CAAC,UAAU,QAAQ,SAAS,OAAO,EAAE;AAAA,MAClC,KAAkC,OAAO,KAAA;AAAA,IAAK;AAAA,IAEnD,CAAC,MAAY,YAAoB;AAC/B,UAAI,CAAC,QAAQ,OAAQ;AACrB,YAAM,SAAS,QAAQ,QAAQ,SAAS,CAAC;AAGzC,UAAI,CAAC,OAAQ;AACb,YAAM,QAAQ,OAAO,SAAS,QAAQ,IAAI;AAC1C,UAAI,UAAU,GAAI;AAElB,aAAO,SAAS,OAAO,OAAO,CAAC;AAAA,IAAA;AAAA,IAEjC;AAAA,EAAA;AAEJ;AAOO,MAAM,gCAAgC;AAAA,EAC3C;AAAA,EACA,MAAM,MAAM;AACd;AAEA,SAAS,8BAA8B,QAAQ;AAAA,EAC7C,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,8BAA8B,SAAS;AAAA,EAC9C,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACtCM,MAAM,gBAAgB,UAAU,WAAW;AAElD,SAAS,eAAe;AAAA,EACtB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,kBAAkB,YAAY,aAAa,CAAC,SAAS;AAAA,EAChE,SAAS;AAAA,EACT,OAAO;AAAA,EACP,UAAU,CAAC,EAAE,KAAK,KAAK;AAAA,EACvB,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,cAAc,GAAG,EAAE,IAAI,GAAG,CAAC;AAAA,EAC1D,eAAe;AAAA,IACb,OAAO,CAAC,SAAS,KAAK,SAAS;AAAA,IAC/B,QAAQ,CAAC,OAAO,MAAM,SAAS;AAC7B,YAAM,SAAS,IAAI;AACnB,UAAI,KAAK,SAAU,OAAM,KAAK,KAAK,QAAQ;AAAA,UACtC,OAAM,QAAS,KAAK,SAAS,EAAa;AAE/C,YAAM,UAAA;AAAA,IAAU;AAAA,EAClB;AAAA,EAEF,YAAY;AAAA,IACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,IACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,YAAM,OAAO,IAAI,IAAI,aAAa;AAClC,YAAM,WAAW,KAAK,OAAO,IAAI;AAEjC,YAAM,SAAS,WAAW;AAC1B,WACG,CAAC,KAAK,WAAW,KAAK,QAAQ,SAAS,MACxC,SAAS,YACT,wBAAwB,GAAG,GAC3B;AACA,cAAM,QAAQ,QAAQ,QAAW,QAAQ;AAAA,MAAA,OACpC;AACL,sBAAc,OAAO,IAAI;AAAA,MAAA;AAE3B,YAAM,UAAA;AAAA,IAAU;AAAA,EAClB;AAEJ,EAAE;AAEF,SAAS,wBAAwB,KAAU;AACzC,MAAIC,2BAA0B;AAC9B,MAAI;AACF,QAAI,IAAI,8BAA8B,EAAE;AACxCA,+BAA0B;AAAA,EAAA,QACpB;AACNA,+BAA0B;AAAA,EAAA;AAE5B,SAAOA;AACT;AAEA,SAAS,gBAAgB,MAAM;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AACD,SAAS,gBAAgB,KAAK;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,sBAAsB;AAAA,EACjC;AAAA,EACA,CAAC,QAAQ,MAAM,aAAa,gBAAgB,KAAK,GAAG,CAAC;AACvD;AAEA,SAAS,qBAAqB;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,kBAAkB,WAAW,mBAAmB;AAAA,EAC3D,cAAc;AAAA,IACZ,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMD,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,oBAAoB,GAAG;AAAA,IAAA;AAAA,EACpD;AAEJ,CAAC;AAED,SAAS,gBAAgB,KAAK;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,gBAAgB,WAAW;AAAA,EAClC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACvFD,MAAM,eAAe,MAAM,CAAC,EACzB,KAAK,CAAC,EACN,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC;AAEtB,SAAS,0BAA0B,MAAY;AAC7C,SAAO,KAAK,YACT,YAAA,EACA,KAAA,EACA,QAAQ,aAAa,EAAE,EACvB,QAAQ,QAAQ,GAAG;AACxB;AAIO,MAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AACF;AAEA,SAAS,oBAAoB;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,cAAc,UAAU,SAAS;AAE9C,SAAS,aAAa;AAAA,EACpB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,gBAAgB,YAAY,WAAW,CAAC,QAAQ;AAC3D,QAAM,QAAQ,IAAI,IAAI,mBAAmB,GAAG;AAC5C,SAAO;AAAA,IACL,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,MACL,IAAI;AAAA,QACF,SAAS;AAAA,QACT,UAAU;AAAA,MAAA;AAAA,MAEZ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,UAAU,aAAa,IAAI,CAAC,OAAO;AAAA,MACjC,KAAK,IAAI,CAAC;AAAA,MACV,UAAU,CAAC,SAAS;AAClB,YAAI,EAAE,gBAAgB,aAAc,OAAM,mBAAmB,IAAI;AAEjE,eAAO,EAAE,OAAO,GAAG,IAAI,KAAK,GAAA;AAAA,MAAG;AAAA,IACjC,EACA;AAAA,IACF,OAAO,CAAC,SAAS;AACf,aAAO;AAAA,QACL,IAAI,KAAK,MAAM,KAAK;AAAA,QACpB;AAAA,UACE,GAAG,IAAI,IAAI,YAAY,GAAG,EAAE,IAAI;AAAA,UAChC,IAAI,KAAK,MAAM,MAAM,MAAM,IAAI;AAAA,QAAA;AAAA,QAEjC;AAAA,MAAA;AAAA,IACF;AAAA,IAEF,eAAe;AAAA,MACb,OAAO,CAAC,EAAE,KAAA,MAAW,SAAS;AAAA,MAC9B,QAAQ,CAAC,OAAO,MAAM,SAAS;AAC7B,cAAM,QAAQ,KAAK;AACnB,cAAM,SAAS,MAAM,EAAE,OAAO,OAAO;AACrC,cAAM,KAAK,KAAK,QAAQ;AACxB,cAAM,UAAA;AAAA,MAAU;AAAA,IAClB;AAAA,IAEF,YAAY;AAAA,MACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,MACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,cAAM,SAAS,WAAW,QAAW,EAAE,OAAO,KAAK,MAAM,OAAO;AAChE,sBAAc,OAAO,IAAI;AACzB,cAAM,UAAA;AAAA,MAAU;AAAA,IAClB;AAAA,EACF;AAEJ,CAAC;AAED,SAAS,cAAc,MAAM;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,cAAc,KAAK;AAAA,EAC1B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,yBAAyB,WAAW,CAAC,QAAQ;AACxD,SAAO;AAAA,IACL;AAAA,IACA,cAAc,KAAK,GAAG;AAAA,IACtB,CAAC,UAAU;AACT,YAAM,IAAI,MAAM,QAAQ,QAAQ,UAAU;AAE1C,YAAM,OAAO,IAAI,IAAI,aAAa;AAClC,YAAM,EAAE,MAAA,IAAU,KAAK,MAAM;AAC7B,YAAM,OAAO,MAAM,KAAA;AACnB,UAAI,KAAK,KAAK,SAAS,WAAW;AAChC,YAAI,QAAQ,OAAO,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC;AAC/C,YAAI,QAAQ,EAAG,SAAQ;AAEvB,eAAO,EAAE,MAAA;AAAA,MAAM;AAEjB,aAAO,EAAE,OAAO,EAAA;AAAA,IAAE;AAAA,EACpB;AAEJ,CAAC;AAED,SAAS,wBAAwB;AAAA,EAC/B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAKM,MAAM,uBAAuB,SAAS,iBAAiB,CAAC,QAAQ;AACrE,SAAO,CAAC,UAAmB;AACzB,cAAU;AAEV,QAAI,QAAQ,EAAG,QAAO,aAAa,gBAAgB,KAAK,GAAG,CAAC;AAE5D,WAAO,aAAa,cAAc,KAAK,GAAG,GAAG,EAAE,OAAO;AAAA,EAAA;AAE1D,CAAC;AAED,SAAS,sBAAsB;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAKM,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA,CAAC,QAAQ,MAAM,CAAC,OAAO,UAAU,SAAS;AACxC,UAAM,EAAE,UAAU,MAAM;AACxB,UAAM,OAAO,MAAM,KAAA;AACnB,QACE,KAAK,SAAS,cAAc,KAAK,GAAG,KACpC,CAAC,MAAM,UAAU,SACjB,MAAM,iBAAiB;AAEvB,aAAO;AAET,UAAM,QAAQ,KAAK,MAAM,QAAQ;AACjC,QAAI,CAAC;AACH,aAAO,aAAa,gBAAgB,KAAK,GAAG,CAAC,EAAE,OAAO,UAAU,IAAI;AAEtE;AAAA,MACE,MAAM,GAAG,cAAc,MAAM,UAAU,MAAM,OAAA,GAAU,QAAW;AAAA,QAChE,GAAG,KAAK;AAAA,QACR;AAAA,MAAA,CACD;AAAA,IAAA;AAEH,WAAO;AAAA,EAAA;AAEX;AAEA,SAAS,yBAAyB;AAAA,EAChC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAKM,MAAM,gBAAgB,WAAW,iBAAiB;AAAA,EACvD,YAAY;AAAA,IACV,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,qBAAqB,KAAK,CAAC;AAAA,IAAA;AAAA,EACxD;AAAA,EAEF,YAAY;AAAA,IACV,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,qBAAqB,KAAK,CAAC;AAAA,IAAA;AAAA,EACxD;AAAA,EAEF,YAAY;AAAA,IACV,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,qBAAqB,KAAK,CAAC;AAAA,IAAA;AAAA,EACxD;AAAA,EAEF,YAAY;AAAA,IACV,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,qBAAqB,KAAK,CAAC;AAAA,IAAA;AAAA,EACxD;AAAA,EAEF,YAAY;AAAA,IACV,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,qBAAqB,KAAK,CAAC;AAAA,IAAA;AAAA,EACxD;AAAA,EAEF,YAAY;AAAA,IACV,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,qBAAqB,KAAK,CAAC;AAAA,IAAA;AAAA,EACxD;AAAA,EAEF,kBAAkB;AAAA,IAChB,WAAW,CAAC,UAAU,WAAW;AAAA,IACjC,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,wBAAwB,GAAG;AAAA,IAAA;AAAA,EACxD;AAEJ,CAAC;AAED,SAAS,cAAc,KAAK;AAAA,EAC1B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,cAAc,WAAW;AAAA,EAChC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AClPM,MAAM,iBAAiB,UAAU,YAAY;AAEpD,SAAS,gBAAgB;AAAA,EACvB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,mBAA8C;AAAA,EACzD;AAAA,EACA,CAAC,SAAS;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,UAAU,CAAC,EAAE,KAAK,cAAc;AAAA,IAChC,OAAO,CAAC,SAAS,CAAC,cAAc,IAAI,IAAI,eAAe,GAAG,EAAE,IAAI,GAAG,CAAC;AAAA,IACpE,eAAe;AAAA,MACb,OAAO,CAAC,EAAE,KAAA,MAAW,SAAS;AAAA,MAC9B,QAAQ,CAAC,OAAO,MAAM,SAAS;AAC7B,cAAM,SAAS,IAAI,EAAE,KAAK,KAAK,QAAQ,EAAE,UAAA;AAAA,MAAU;AAAA,IACrD;AAAA,IAEF,YAAY;AAAA,MACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,MACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,cAAM,SAAS,YAAY,EAAE,KAAK,KAAK,OAAO,EAAE,UAAA;AAAA,MAAU;AAAA,IAC5D;AAAA,EACF;AAEJ;AAEA,SAAS,iBAAiB,MAAM;AAAA,EAC9B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,iBAAiB,KAAK;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,4BAA4B;AAAA,EAAW,CAAC,QACnD,kBAAkB,YAAY,iBAAiB,KAAK,GAAG,CAAC;AAC1D;AAEA,SAAS,2BAA2B;AAAA,EAClC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA,CAAC,QAAQ,MAAM,OAAO,iBAAiB,KAAK,GAAG,CAAC;AAClD;AAEA,SAAS,yBAAyB;AAAA,EAChC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,mBAAmB,WAAW,oBAAoB;AAAA,EAC7D,kBAAkB;AAAA,IAChB,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,wBAAwB,GAAG;AAAA,IAAA;AAAA,EACxD;AAEJ,CAAC;AAED,SAAS,iBAAiB,KAAK;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,iBAAiB,WAAW;AAAA,EACnC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACpFM,MAAM,gBAAgB,UAAU,aAAa,OAAO;AAAA,EACzD,KAAK,CAAA;AAAA,EACL,MAAM,CAAA;AACR,EAAE;AAEF,SAAS,eAAe;AAAA,EACtB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,kBAAkB,YAAY,cAAc,CAAC,QAAQ;AAChE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,MACL,UAAU;AAAA,QACR,SAAS;AAAA,QACT,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,UAAU;AAAA,MACR;AAAA,QACE,KAAK;AAAA,QACL,oBAAoB;AAAA,QACpB,UAAU,CAAC,QAAQ;AACjB,cAAI,EAAE,eAAe,aAAc,OAAM,mBAAmB,GAAG;AAE/D,iBAAO,EAAE,UAAU,IAAI,QAAQ,SAAA;AAAA,QAAS;AAAA,MAC1C;AAAA,IACF;AAAA,IAEF,OAAO,CAAC,SAAS;AACf,YAAM,OAAO,IAAI,IAAI,cAAc,GAAG,EAAE,IAAI;AAC5C,YAAM,WAAW,KAAK,MAAM;AAC5B,YAAM,gBACJ,YAAY,SAAS,SAAS,IAC1B,EAAE,iBAAiB,aACnB;AAEN,aAAO;AAAA,QACL;AAAA,QACA;AAAA,UACE,GAAG,KAAK;AAAA,UACR,GAAG;AAAA,QAAA;AAAA,QAEL,CAAC,QAAQ,KAAK,MAAM,CAAC;AAAA,MAAA;AAAA,IACvB;AAAA,IAEF,eAAe;AAAA,MACb,OAAO,CAAC,EAAE,KAAA,MAAW,SAAS;AAAA,MAC9B,QAAQ,CAAC,OAAO,MAAM,SAAS;AAC7B,cAAM,WAAW,KAAK,QAAQ;AAC9B,cAAM,QAAQ,KAAK;AACnB,cAAM,SAAS,MAAM,EAAE,SAAA,CAAU;AACjC,YAAI,MAAO,OAAM,QAAQ,KAAK;AAE9B,cAAM,UAAA;AAAA,MAAU;AAAA,IAClB;AAAA,IAEF,YAAY;AAAA,MACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,MACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,cAAM,QAAQ,QAAQ,QAAW,KAAK,QAAQ,YAAY,QAAQ,IAAI;AAAA,UACpE,MAAM,KAAK,MAAM;AAAA,QAAA,CAClB;AAAA,MAAA;AAAA,IACH;AAAA,EACF;AAEJ,CAAC;AAED,SAAS,gBAAgB,MAAM;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,gBAAgB,KAAK;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,2BAA2B;AAAA,EAAW,CAAC,QAClD;AAAA,IACE;AAAA,IACA,gBAAgB,KAAK,GAAG;AAAA,IACxB,CAAC,WAAW;AAAA,MACV,UAAU,MAAM,QAAQ,YAAY;AAAA,IAAA;AAAA,EACtC;AAEJ;AAEA,SAAS,0BAA0B;AAAA,EACjC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,yBAAyB;AAAA,EACpC;AAAA,EACA,CAAC,QACC,CAAC,WAAW,OACV,aAAa,gBAAgB,KAAK,GAAG,GAAG,EAAE,SAAA,CAAU;AAC1D;AAEA,SAAS,wBAAwB;AAAA,EAC/B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA,MACE,CACE,EAAE,KAAK,aAAgD;AAAA,IACrD,KAAK;AAAA,IACL,UAAU;AAAA,EAAA,MAGd,CAAC,OAAO,aAAa;AACnB,QAAI,OAAO,GAAG;AACZ,iBAAW,MAAM,GAAG,iBAAiB,KAAK,YAAY,QAAQ,CAAC;AAC/D,aAAO;AAAA,IAAA;AAGT,WAAO;AAAA,EAAA;AAEb;AAEA,SAAS,gCAAgC;AAAA,EACvC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,kBAAkB,WAAW,mBAAmB;AAAA,EAC3D,iBAAiB;AAAA,IACf,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,uBAAuB,GAAG;AAAA,IAAA;AAAA,EACvD;AAEJ,CAAC;AAED,SAAS,gBAAgB,KAAK;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,gBAAgB,WAAW;AAAA,EAClC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACvKM,MAAM,YAAY,UAAU,OAAO;AAE1C,SAAS,WAAW;AAAA,EAClB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,cAAc,YAAY,SAAS,CAAC,QAAQ;AACvD,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,IACV,WAAW;AAAA,IACX,OAAO;AAAA,MACL,KAAK,EAAE,SAAS,IAAI,UAAU,SAAA;AAAA,MAC9B,KAAK,EAAE,SAAS,IAAI,UAAU,SAAA;AAAA,MAC9B,OAAO,EAAE,SAAS,IAAI,UAAU,SAAA;AAAA,IAAS;AAAA,IAE3C,UAAU;AAAA,MACR;AAAA,QACE,KAAK;AAAA,QACL,UAAU,CAAC,QAAQ;AACjB,cAAI,EAAE,eAAe,aAAc,OAAM,mBAAmB,GAAG;AAE/D,iBAAO;AAAA,YACL,KAAK,IAAI,aAAa,KAAK,KAAK;AAAA,YAChC,KAAK,IAAI,aAAa,KAAK,KAAK;AAAA,YAChC,OAAO,IAAI,aAAa,OAAO,KAAK,IAAI,aAAa,KAAK,KAAK;AAAA,UAAA;AAAA,QACjE;AAAA,MACF;AAAA,IACF;AAAA,IAEF,OAAO,CAAC,SAAS;AACf,aAAO,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,UAAU,GAAG,EAAE,IAAI,GAAG,GAAG,KAAK,OAAO;AAAA,IAAA;AAAA,IAEnE,eAAe;AAAA,MACb,OAAO,CAAC,EAAE,KAAA,MAAW,SAAS;AAAA,MAC9B,QAAQ,CAAC,OAAO,MAAM,SAAS;AAC7B,cAAM,MAAM,KAAK;AACjB,cAAM,MAAM,KAAK;AACjB,cAAM,QAAQ,KAAK;AACnB,cAAM,QAAQ,MAAM;AAAA,UAClB,KAAK;AAAA,UACL;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MAAA;AAAA,IACH;AAAA,IAEF,YAAY;AAAA,MACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,MACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,cAAM,QAAQ,SAAS,QAAW,QAAW;AAAA,UAC3C,OAAO,KAAK,MAAM;AAAA,UAClB,KAAK,KAAK,MAAM;AAAA,UAChB,KAAK,KAAK,MAAM;AAAA,QAAA,CACjB;AAAA,MAAA;AAAA,IACH;AAAA,EACF;AAEJ,CAAC;AAED,SAAS,YAAY,MAAM;AAAA,EACzB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,YAAY,KAAK;AAAA,EACxB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAWM,MAAM,qBAAqB;AAAA,EAChC;AAAA,EACA,CAAC,QACC,CAAC,UAAqC,CAAA,MACtC,CAAC,OAAO,aAAa;AACnB,QAAI,CAAC,SAAU,QAAO;AAEtB,UAAM,EAAE,MAAM,IAAI,MAAM,IAAI,QAAQ,OAAO;AAE3C,UAAM,OAAO,YAAY,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,KAAK,OAAO;AAC7D,QAAI,CAAC,KAAM,QAAO;AAElB,aAAS,MAAM,GAAG,qBAAqB,IAAI,EAAE,gBAAgB;AAC7D,WAAO;AAAA,EAAA;AAEb;AAEA,SAAS,oBAAoB;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,qBAAqB;AAAA,EAChC;AAAA,EACA,CAAC,QACC,CAAC,UAAqC,CAAA,MACtC,CAAC,OAAO,aAAa;AACnB,UAAM,cAAc;AAAA,MAClB,MAAM;AAAA,MACN,YAAY,KAAK,GAAG;AAAA,IAAA;AAEtB,QAAI,CAAC,YAAa,QAAO;AAEzB,UAAM,EAAE,MAAM,IAAA,IAAQ;AAEtB,UAAM,WAAW,EAAE,GAAG,KAAK,MAAA;AAC3B,UAAM,EAAE,KAAK,KAAK,MAAA,IAAU;AAC5B,QAAI,QAAQ,OAAW,UAAS,MAAM;AACtC,QAAI,QAAQ,OAAW,UAAS,MAAM;AACtC,QAAI,UAAU,OAAW,UAAS,QAAQ;AAE1C;AAAA,MACE,MAAM,GAAG,cAAc,KAAK,QAAW,QAAQ,EAAE,eAAA;AAAA,IAAe;AAElE,WAAO;AAAA,EAAA;AAEb;AAEA,SAAS,oBAAoB;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAKM,MAAM,uBAAuB;AAAA,EAClC,CAAC,QACC,IAAI;AAAA,IACF;AAAA,IACA,CAAC,OAAO,OAAO,OAAO,QAAQ;AAC5B,YAAM,CAAC,SAAS,KAAK,MAAM,IAAI,KAAK,IAAI;AACxC,UAAI;AACF,eAAO,MAAM,GAAG;AAAA,UACd;AAAA,UACA;AAAA,UACA,YAAY,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,KAAK,MAAA,CAAO;AAAA,QAAA;AAGpD,aAAO;AAAA,IAAA;AAAA,EACT;AAEN;AAEA,SAAS,sBAAsB;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AClKM,MAAM,gBAAgB,UAAU,aAAa,CAAC,SAAS;AAC5D,SAAO;AAAA,IACL,aAAa;AAAA,IACb,kBAAkB,KAAK,MAAM;AAAA,EAAA;AAEjC,CAAC;AAED,SAAS,eAAe;AAAA,EACtB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,kBAAkB,YAAY,aAAa,CAAC,SAAS;AAAA,EAChE,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,IACL,UAAU;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,YAAY;AAAA,EACZ,UAAU;AAAA,IACR,EAAE,KAAK,KAAA;AAAA,IACP;AAAA,MACE,KAAK;AAAA,MACL,UAAU,OAAO,EAAE,UAAU,KAAA;AAAA,IAAK;AAAA,EACpC;AAAA,EAEF,OAAO,CAAC,SACN,KAAK,MAAM,WACP,CAAC,QAAQ,IAAI,IAAI,cAAc,GAAG,EAAE,IAAI,GAAG,GAAG,IAC9C,CAAC,MAAM,IAAI,IAAI,cAAc,GAAG,EAAE,IAAI,CAAC;AAAA,EAC7C,eAAe;AAAA,IACb,OAAO,CAAC,EAAE,KAAA,MAAW,SAAS;AAAA,IAC9B,QAAQ,CAAC,OAAO,MAAM,SAAS;AAC7B,YAAM,QAAQ,MAAM;AAAA,QAClB,UAAU;AAAA,UACP,KAAK,MAA4C;AAAA,QAAA;AAAA,MACpD,CACD;AAAA,IAAA;AAAA,EACH;AAAA,EAEF,UAAU,MAAM;AAAA,EAChB,YAAY;AAAA,IACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,IACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,UAAI,KAAK,MAAM,gBAAgB,QAAQ,QAAQ,QAAW,IAAI;AAAA,UACzD,OAAM,QAAQ,OAAO;AAAA,IAAA;AAAA,EAC5B;AAEJ,EAAE;AAEF,SAAS,gBAAgB,MAAM;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,gBAAgB,KAAK;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,yBAAyB;AAAA,EACpC;AAAA,EACA,CAAC,QAAQ,MAAM,CAAC,OAAO,aAAa;AAClC,UAAM,EAAE,WAAW,GAAA,IAAO;AAC1B,QAAI,EAAE,qBAAqB,eAAgB,QAAO;AAElD,QAAI,UAAU,OAAO;AAEnB,YAAM,OAAO,UAAU,MAAM,KAAA;AAC7B,UAAI,KAAK,aAAa,KAAK,KAAK,WAAW,KAAK,SAAS,aAAa;AACpE;AAAA,UACE,GACG;AAAA,YACC,UAAU,KAAK;AAAA,YACf,UAAU;AAAA,YACV,MAAM,OAAO,KAAK,WAAW;AAAA,UAAA,EAE9B,aAAa,UAAU,KAAK,GAAG,IAAI,QAAQ,UAAU,EAAE,CAAC,CAAC,EACzD,eAAA;AAAA,QAAe;AAEpB,eAAO;AAAA,MAAA;AAAA,IACT;AAEF;AAAA,MACE,GACG,QAAQ,aAAa,IAAI,EACzB,qBAAqB,gBAAgB,KAAK,GAAG,EAAE,OAAA,CAAQ,EACvD,eAAA;AAAA,IAAe;AAEpB,WAAO;AAAA,EAAA;AAEX;AAEA,SAAS,wBAAwB;AAAA,EAC/B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,kBAAkB,WAAW,mBAAmB;AAAA,EAC3D,iBAAiB;AAAA,IACf,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,uBAAuB,GAAG;AAAA,IAAA;AAAA,EACvD;AAEJ,CAAC;AAED,SAAS,gBAAgB,KAAK;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,gBAAgB,WAAW;AAAA,EAClC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AC7HM,MAAM,SAAS,UAAU,IAAI;AAEpC,SAAS,QAAQ;AAAA,EACf,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,WAAW,YAAY,MAAM,CAAC,SAAS;AAAA,EAClD,OAAO;AAAA,EACP,UAAU,CAAC,EAAE,KAAK,MAAM;AAAA,EACxB,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,OAAO,GAAG,EAAE,IAAI,CAAC;AAAA,EACjD,eAAe;AAAA,IACb,OAAO,CAAC,EAAE,KAAA,MAAW,SAAS;AAAA,IAC9B,QAAQ,CAAC,OAAO,GAAG,SAAS;AAC1B,YAAM,QAAQ,IAAI;AAAA,IAAA;AAAA,EACpB;AAAA,EAEF,YAAY;AAAA,IACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,IACpC,QAAQ,CAAC,UAAU;AACjB,YAAM,QAAQ,eAAe;AAAA,IAAA;AAAA,EAC/B;AAEJ,EAAE;AAEF,SAAS,SAAS,MAAM;AAAA,EACtB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,SAAS,KAAK;AAAA,EACrB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,oBAAoB;AAAA,EAC/B,CAAC,QACC,IAAI,UAAU,4BAA4B,CAAC,OAAO,OAAO,OAAO,QAAQ;AACtE,UAAM,EAAE,OAAO;AAEf,QAAI,MAAM,CAAC,EAAG,IAAG,YAAY,QAAQ,GAAG,KAAK,SAAS,KAAK,GAAG,EAAE,QAAQ;AAExE,WAAO;AAAA,EAAA,CACR;AACL;AAEA,SAAS,mBAAmB;AAAA,EAC1B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA,CAAC,QAAQ,MAAM,CAAC,OAAO,aAAa;AAClC,QAAI,CAAC,SAAU,QAAO;AAEtB,UAAM,YAAY,gBAAgB,KAAK,KAAK,GAAG,EAAE,OAAA;AACjD,UAAM,EAAE,IAAI,UAAA,IAAc;AAC1B,UAAM,EAAE,SAAS;AACjB,UAAM,OAAO,SAAS,KAAK,GAAG,EAAE,OAAA;AAChC,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,MAAM,GAAG,qBAAqB,IAAI,EAAE,OAAO,MAAM,SAAS;AAChE,UAAM,MAAM,UAAU,SAAS,IAAI,IAAI,QAAQ,IAAI,GAAG,GAAG,IAAI;AAC7D,QAAI,CAAC,IAAK,QAAO;AAEjB,aAAS,IAAI,aAAa,GAAG,EAAE,gBAAgB;AAC/C,WAAO;AAAA,EAAA;AAEX;AAEA,SAAS,iBAAiB;AAAA,EACxB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACvEM,MAAM,iBAAiB,UAAU,YAAY;AAEpD,SAAS,gBAAgB;AAAA,EACvB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,mBAAmB,YAAY,eAAe,CAAC,QAAQ;AAClE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,OAAO;AAAA,IACP,OAAO;AAAA,MACL,QAAQ;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,UAAU;AAAA,MACR;AAAA,QACE,KAAK;AAAA,QACL,UAAU,CAAC,QAAQ;AACjB,cAAI,EAAE,eAAe,aAAc,OAAM,mBAAmB,GAAG;AAE/D,iBAAO;AAAA,YACL,QAAQ,IAAI,QAAQ,WAAW;AAAA,UAAA;AAAA,QACjC;AAAA,MACF;AAAA,IACF;AAAA,IAEF,OAAO,CAAC,SAAS;AACf,aAAO;AAAA,QACL;AAAA,QACA;AAAA,UACE,GAAG,IAAI,IAAI,eAAe,GAAG,EAAE,IAAI;AAAA,UACnC,eAAe,KAAK,MAAM;AAAA,QAAA;AAAA,QAE5B;AAAA,MAAA;AAAA,IACF;AAAA,IAEF,eAAe;AAAA,MACb,OAAO,CAAC,EAAE,MAAM,cAAc,SAAS,UAAU,CAAC;AAAA,MAClD,QAAQ,CAAC,OAAO,MAAM,SAAS;AAC7B,cAAM,SAAS,KAAK,UAAU,OAAO,GAAG,KAAK,MAAM,KAAK;AACxD,cAAM,SAAS,MAAM,EAAE,OAAA,CAAQ,EAAE,KAAK,KAAK,QAAQ,EAAE,UAAA;AAAA,MAAU;AAAA,IACjE;AAAA,IAEF,YAAY;AAAA,MACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,MACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,cACG,SAAS,QAAQ,QAAW;AAAA,UAC3B,SAAS;AAAA,UACT,QAAQ,KAAK,MAAM;AAAA,QAAA,CACpB,EACA,KAAK,KAAK,OAAO,EACjB,UAAA;AAAA,MAAU;AAAA,IACf;AAAA,EACF;AAEJ,CAAC;AAED,SAAS,iBAAiB,MAAM;AAAA,EAC9B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,iBAAiB,KAAK;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,4BAA4B;AAAA,EAAW,CAAC,QACnD,kBAAkB,kBAAkB,iBAAiB,KAAK,GAAG,CAAC;AAChE;AAEA,SAAS,2BAA2B;AAAA,EAClC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA,CAAC,QAAQ,MAAM,OAAO,iBAAiB,KAAK,GAAG,CAAC;AAClD;AAEA,SAAS,yBAAyB;AAAA,EAChC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,mBAAmB,WAAW,oBAAoB;AAAA,EAC7D,kBAAkB;AAAA,IAChB,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,wBAAwB,GAAG;AAAA,IAAA;AAAA,EACxD;AAEJ,CAAC;AAED,SAAS,iBAAiB,KAAK;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,iBAAiB,WAAW;AAAA,EACnC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACjHM,MAAM,kBAAkB,UAAU,aAAa;AAEtD,SAAS,iBAAiB;AAAA,EACxB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,oBAAoB,YAAY,gBAAgB,CAAC,SAAS;AAAA,EACrE,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,IACL,OAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,IAAA;AAAA,IAEZ,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,UAAU;AAAA,IACR;AAAA,MACE,KAAK;AAAA,MACL,UAAU,CAAC,QAAQ;AACjB,YAAI,EAAE,eAAe,aAAc,OAAM,mBAAmB,GAAG;AAE/D,eAAO;AAAA,UACL,QAAQ,IAAI,QAAQ;AAAA,UACpB,OAAO,IAAI,aAAa,OAAO,IAC3B,OAAO,IAAI,aAAa,OAAO,CAAC,IAChC;AAAA,QAAA;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAAA,EAEF,OAAO,CAAC,SAAS;AAAA,IACf;AAAA,IACA;AAAA,MACE,GAAG,IAAI,IAAI,gBAAgB,GAAG,EAAE,IAAI;AAAA,MACpC,GAAI,KAAK,MAAM,UAAU,IAAI,KAAK,KAAK,MAAM;AAAA,MAC7C,eAAe,KAAK,MAAM;AAAA,IAAA;AAAA,IAE5B;AAAA,EAAA;AAAA,EAEF,eAAe;AAAA,IACb,OAAO,CAAC,EAAE,MAAM,cAAc,SAAS,UAAU,CAAC,CAAC;AAAA,IACnD,QAAQ,CAAC,OAAO,MAAM,SAAS;AAC7B,YAAM,SAAS,KAAK,UAAU,OAAO,GAAG,KAAK,MAAM,KAAK;AACxD,YAAM,SAAS,MAAM,EAAE,OAAA,CAAQ,EAAE,KAAK,KAAK,QAAQ,EAAE,UAAA;AAAA,IAAU;AAAA,EACjE;AAAA,EAEF,YAAY;AAAA,IACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,IACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,YAAM,SAAS,QAAQ,QAAW;AAAA,QAChC,SAAS;AAAA,QACT,OAAO;AAAA,QACP,QAAQ,KAAK,MAAM,WAAW;AAAA,MAAA,CAC/B;AACD,YAAM,KAAK,KAAK,OAAO;AACvB,YAAM,UAAA;AAAA,IAAU;AAAA,EAClB;AAEJ,EAAE;AAEF,SAAS,kBAAkB,MAAM;AAAA,EAC/B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,kBAAkB,KAAK;AAAA,EAC9B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,6BAA6B;AAAA,EAAW,CAAC,QACpD;AAAA,IACE;AAAA,IACA,kBAAkB,KAAK,GAAG;AAAA,IAC1B,CAAC,WAAW,EAAE,OAAO,OAAO,MAAM,CAAC,CAAC;IACpC,CAAC,OAAO,SAAS,KAAK,aAAa,KAAK,MAAM,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,EAAA;AAE3E;AAEA,SAAS,4BAA4B;AAAA,EACnC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,2BAA2B;AAAA,EACtC;AAAA,EACA,CAAC,QAAQ,MAAM,OAAO,kBAAkB,KAAK,GAAG,CAAC;AACnD;AAEA,SAAS,0BAA0B;AAAA,EACjC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,oBAAoB,WAAW,qBAAqB;AAAA,EAC/D,mBAAmB;AAAA,IACjB,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,yBAAyB,GAAG;AAAA,IAAA;AAAA,EACzD;AAEJ,CAAC;AAED,SAAS,kBAAkB,KAAK;AAAA,EAC9B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,kBAAkB,WAAW;AAAA,EACpC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACzHM,MAAM,eAAe,UAAU,UAAU;AAEhD,SAAS,cAAc;AAAA,EACrB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAGM,MAAM,iBAAiB,YAAY,aAAa,CAAC,SAAS;AAAA,EAC/D,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,IACL,OAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU;AAAA,IAAA;AAAA,IAEZ,UAAU;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,IAAA;AAAA,IAEZ,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,UAAU;AAAA,EACV,UAAU;AAAA,IACR;AAAA,MACE,KAAK;AAAA,MACL,UAAU,CAAC,QAAQ;AACjB,YAAI,EAAE,eAAe,aAAc,OAAM,mBAAmB,GAAG;AAE/D,eAAO;AAAA,UACL,OAAO,IAAI,QAAQ;AAAA,UACnB,UAAU,IAAI,QAAQ;AAAA,UACtB,QAAQ,IAAI,QAAQ,WAAW;AAAA,QAAA;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA,EAEF,OAAO,CAAC,SAAS;AAAA,IACf;AAAA,IACA;AAAA,MACE,GAAG,IAAI,IAAI,aAAa,GAAG,EAAE,IAAI;AAAA,MACjC,cAAc,KAAK,MAAM;AAAA,MACzB,kBAAkB,KAAK,MAAM;AAAA,MAC7B,eAAe,KAAK,MAAM;AAAA,IAAA;AAAA,IAE5B;AAAA,EAAA;AAAA,EAEF,eAAe;AAAA,IACb,OAAO,CAAC,EAAE,KAAA,MAAW,SAAS;AAAA,IAC9B,QAAQ,CAAC,OAAO,MAAM,SAAS;AAC7B,YAAM,QAAQ,KAAK,SAAS,OAAO,GAAG,KAAK,KAAK,MAAM;AACtD,YAAM,WAAW,KAAK,SAAS,OAAO,YAAY;AAClD,YAAM,SAAS,KAAK,UAAU,OAAO,GAAG,KAAK,MAAM,KAAK;AACxD,YAAM,SAAS,MAAM,EAAE,OAAO,UAAU,QAAQ;AAChD,YAAM,KAAK,KAAK,QAAQ;AACxB,YAAM,UAAA;AAAA,IAAU;AAAA,EAClB;AAAA,EAEF,YAAY;AAAA,IACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,IACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,YAAM,SAAS,YAAY,QAAW;AAAA,QACpC,QAAQ,KAAK,MAAM;AAAA,MAAA,CACpB;AACD,YAAM,KAAK,KAAK,OAAO;AACvB,YAAM,UAAA;AAAA,IAAU;AAAA,EAClB;AAEJ,EAAE;AAEF,SAAS,eAAe,MAAM;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,eAAe,KAAK;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAcM,MAAM,sBAAsB;AAAA,EACjC;AAAA,EACA,CAAC,QAAQ,MAAM,aAAa,eAAe,KAAK,GAAG,CAAC;AACtD;AAEA,SAAS,qBAAqB;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAcM,MAAM,sBAAsB;AAAA,EACjC;AAAA,EACA,CAAC,QAAQ,MAAM,aAAa,eAAe,KAAK,GAAG,CAAC;AACtD;AAEA,SAAS,qBAAqB;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAeM,MAAM,uBAAuB;AAAA,EAClC;AAAA,EACA,CAAC,QAAQ,MAAM,cAAc,eAAe,KAAK,GAAG,CAAC;AACvD;AAEA,SAAS,sBAAsB;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,kBAAkB,KAAmB;AAC5C,SAAO,CAAC,OAAO,UAAU,SAAS;AAChC,UAAM,EAAE,cAAc;AACtB,QAAI,EAAE,qBAAqB,eAAgB,QAAO;AAElD,UAAM,EAAE,OAAO,MAAA,IAAU;AAGzB,QAAI,CAAC,SAAS,MAAM,iBAAiB,EAAG,QAAO;AAE/C,UAAM,aAAa,MAAM,KAAK,EAAE;AAEhC,QAAI,WAAW,SAAS,eAAe,KAAK,GAAG,EAAG,QAAO;AAEzD,WAAO,aAAa,OAAO,UAAU,IAAI;AAAA,EAAA;AAE7C;AAQO,MAAM,2BAA2B;AAAA,EACtC;AAAA,EACA,CAAC,QAAQ,MAAM,kBAAkB,GAAG;AACtC;AAEA,SAAS,0BAA0B;AAAA,EACjC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAMM,MAAM,iBAAiB,WAAW,kBAAkB;AAAA,EACzD,cAAc;AAAA,IACZ,WAAW;AAAA,IACX,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,qBAAqB,GAAG;AAAA,IAAA;AAAA,EACrD;AAAA,EAEF,cAAc;AAAA,IACZ,WAAW,CAAC,OAAO,OAAO;AAAA,IAC1B,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,oBAAoB,GAAG;AAAA,IAAA;AAAA,EACpD;AAAA,EAEF,cAAc;AAAA,IACZ,WAAW,CAAC,aAAa,OAAO;AAAA,IAChC,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,oBAAoB,GAAG;AAAA,IAAA;AAAA,EACpD;AAAA,EAEF,mBAAmB;AAAA,IACjB,WAAW,CAAC,aAAa,QAAQ;AAAA,IACjC,SAAS,CAAC,QAAQ;AAChB,YAAMA,YAAW,IAAI,IAAI,WAAW;AACpC,aAAO,MAAMA,UAAS,KAAK,yBAAyB,GAAG;AAAA,IAAA;AAAA,EACzD;AAEJ,CAAC;AAED,SAAS,eAAe,KAAK;AAAA,EAC3B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,eAAe,WAAW;AAAA,EACjC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AC9OM,MAAM,aAAa,MAAM,QAAQ,OAAO;AAAA,EAC7C,OAAO;AAAA,EACP,eAAe;AAAA,IACb,OAAO,CAAC,EAAE,KAAA,MAAW,SAAS;AAAA,IAC9B,QAAQ,CAAC,OAAO,SAAS;AACvB,YAAM,QAAQ,KAAK,KAAe;AAAA,IAAA;AAAA,EACpC;AAAA,EAEF,YAAY;AAAA,IACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,IACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,YAAM,QAAQ,QAAQ,QAAW,KAAK,IAAc;AAAA,IAAA;AAAA,EACtD;AAEJ,EAAE;AAEF,SAAS,YAAY;AAAA,EACnB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACpBM,MAAM,WAAW,UAAU,MAAM;AAExC,SAAS,UAAU;AAAA,EACjB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAEM,MAAM,aAAa,YAAY,QAAQ,CAAC,QAAQ;AACrD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,MACL,OAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,OAAO,CAAC,SAAS;AACf,YAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,YAAM,OAAO;AAAA,QACX,GAAG,IAAI,IAAI,SAAS,GAAG,EAAE,IAAI;AAAA,QAC7B,cAAc,KAAK,MAAM;AAAA,QACzB,aAAa;AAAA,MAAA;AAEf,WAAK,cAAc,KAAK,MAAM;AAC9B,aAAO,CAAC,QAAQ,MAAM,KAAK,MAAM,KAAK;AAAA,IAAA;AAAA,IAExC,UAAU;AAAA,MACR;AAAA,QACE,KAAK;AAAA,QACL,UAAU,CAAC,QAAQ;AACjB,iBAAO;AAAA,YACL,OAAO,IAAI,QAAQ,SAAS;AAAA,UAAA;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAAA,IAEF,eAAe;AAAA,MACb,OAAO,CAAC,EAAE,WAAW,QAAQ,SAAS,MAAM;AAAA,MAC5C,QAAQ,CAAC,OAAO,MAAM,SAAS;AAC7B,cAAM,QAAQ,MAAM,EAAE,OAAO,KAAK,OAAiB;AAAA,MAAA;AAAA,IACrD;AAAA,IAEF,YAAY;AAAA,MACV,OAAO,CAAC,SAAS,KAAK,KAAK,SAAS;AAAA,MACpC,QAAQ,CAAC,OAAO,SAAS;AACvB,cAAM,QAAQ,QAAQ,QAAW,KAAK,MAAM,KAAK;AAAA,MAAA;AAAA,IACnD;AAAA,EACF;AAEJ,CAAC;AAED,SAAS,WAAW,MAAM;AAAA,EACxB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,WAAW,KAAK;AAAA,EACvB,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACxBM,MAAM,SAA2B;AAAA,EACtC;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AACF,EAAE,KAAA;ACzEK,MAAM,aAA+B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAA;AAGK,MAAM,iBAAmC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;ACrBO,MAAM,wBAAwB;AAAA,EACnC;AAAA,EACA,MAAM,CAAC,aAAwB,CAAC,UAAU;AACxC,QAAI,CAAC,SAAU,QAAO;AACtB,UAAM,EAAE,KAAK,UAAA,IAAc;AAC3B,UAAM,UAAU,IAAI,aAAa,UAAU,MAAM,UAAU,IAAI,QAAQ;AACvE,WAAO;AAAA,EAAA;AAEX;AAGO,MAAM,wBAAwB;AAAA,EACnC;AAAA,EACA,MAAM,CAAC,aAAwB,CAAC,UAAU;AACxC,QAAI,CAAC,SAAU,QAAO;AACtB,UAAM,SAAS,oBAAoB,OAAO,QAAQ;AAClD,WAAO,OAAO;AAAA,EAAA;AAElB;AAGO,MAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA,MAAM,MAAM,CAAC,OAAO,aAAa;AAC/B,QAAI,KAAK,MAAM;AACf,UAAM,EAAE,OAAO,IAAA,IAAQ,GAAG;AAC1B,UAAM,EAAE,KAAK,KAAA,IAAS;AACtB,UAAM,EAAE,KAAK,MAAA,IAAU;AACvB,UAAM,OAAO,OAAO,MAAM,KAAA,EAAO,QAAQ;AACzC,QAAI,OAAO,EAAG,QAAO;AAErB,SAAK,GAAG,YAAY,MAAM,KAAK;AAC/B,eAAW,EAAE;AACb,WAAO;AAAA,EAAA;AAEX;AAGO,MAAM,sBAAsB;AAAA,EACjC;AAAA,EACA,MACE,CAAC,YACD,CAAC,OAAO,aAAa;AACnB,UAAM,EAAE,UAAU,QAAQ,KAAA,IAAS,WAAW,CAAA;AAC9C,QAAI,CAAC,SAAU,QAAO;AACtB,UAAM,KAAK,MAAM;AACjB,UAAM,EAAE,MAAM,GAAA,IAAO,GAAG;AACxB,QAAI;AACF,SAAG,aAAa,MAAM,IAAI,UAAU,KAAK;AAAA,IAAA,QACnC;AACN,aAAO;AAAA,IAAA;AAET,eAAW,EAAE;AACb,WAAO;AAAA,EAAA;AAEb;AAGO,MAAM,yBAAyB;AAAA,EACpC;AAAA,EACA,MACE,CAAC,YACD,CAAC,OAAO,aAAa;AACnB,UAAM,EAAE,UAAU,QAAQ,KAAA,IAAS,WAAW,CAAA;AAC9C,QAAI,CAAC,SAAU,QAAO;AAEtB,QAAI,KAAK,MAAM;AAEf,QAAI;AACF,YAAM,EAAE,OAAO,IAAA,IAAQ,GAAG;AAC1B,YAAM,aAAa,MAAM,WAAW,GAAG;AACvC,YAAM,WAAW,cAAc,aAAa,YAAY,UAAU,KAAK;AACvE,UAAI,CAAC,SAAU,QAAO;AACtB,WAAK,GAAG,KAAK,YAAY,QAAQ;AAAA,IAAA,QAC3B;AACN,aAAO;AAAA,IAAA;AAGT,eAAW,EAAE;AACb,WAAO;AAAA,EAAA;AAEb;AAGO,MAAM,sBAAsB;AAAA,EACjC;AAAA,EACA,MACE,CAAC,YACD,CAAC,OAAO,aAAa;AACnB,UAAM,EAAE,UAAU,QAAQ,KAAA,IAAS,WAAW,CAAA;AAC9C,QAAI,CAAC,SAAU,QAAO;AACtB,UAAM,KAAK,MAAM;AAEjB,QAAI;AACF,YAAM,OACJ,oBAAoB,OAAO,WAAW,SAAS,cAAc,KAAK;AACpE,UAAI,CAAC,KAAM,QAAO;AAElB,SAAG,qBAAqB,IAAI;AAAA,IAAA,QACtB;AACN,aAAO;AAAA,IAAA;AAET,eAAW,EAAE;AACb,WAAO;AAAA,EAAA;AAEb;AAGO,MAAM,2BAA2B;AAAA,EACtC;AAAA,EACA,MAAM,CAAC,YAA+B,CAAC,OAAO,aAAa;AACzD,UAAM,EAAE,QAAQ,WAAW,CAAA;AAC3B,QAAI,OAAO,KAAM,QAAO;AAExB,UAAM,QAAQ,CAAC,OAAe,KAAa,QACzC,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AAEpC,UAAM,KAAK,MAAM;AACjB,QAAI;AACF,YAAM,OAAO,MAAM,IAAI,QAAQ,MAAM,KAAK,GAAG,MAAM,IAAI,QAAQ,IAAI,CAAC;AACpE,SAAG,aAAa,cAAc,KAAK,IAAI,CAAC;AAAA,IAAA,QAClC;AACN,aAAO;AAAA,IAAA;AAET,eAAW,GAAG,gBAAgB;AAC9B,WAAO;AAAA,EAAA;AAEX;ACtGO,MAAM,WAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;ACxDO,MAAM,SAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAA;ACtBK,MAAM,6BAA6B;AAAA,EACxC;AAAA,EACA,MAAM,MAAM,CAAC,SAAS;AACpB,UAAM,MAAM,QAAQ,CAAC,SAAS;AAC5B,UAAI,KAAK,SAAS;AAChB,cAAM,QAAQ,KAAK,SAAS;AAC5B,aAAK,SAAS,QAAQ,CAAC,OAAO,UAAU;AACpC,gBAA4C,QAAQ,QAAQ;AAAA,QAAA,CAC/D;AAAA,MAAA;AAAA,IACH,CACD;AAAA,EAAA;AAEL;AAEA,SAAS,2BAA2B,QAAQ;AAAA,EAC1C,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,2BAA2B,SAAS;AAAA,EAC3C,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AClBM,MAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA,MAAM,MAAM,CAAC,SAAe;AAC1B,UAAM,OAAO;AACb;AAAA,MACE;AAAA,MACA;AAAA,MACA,CACE,MACA,OACA,WACG;AACH,YAAI,CAAC,KAAK,SAAS,OAAO,KAAK,UAAU,SAAU;AAEnD,cAAM,SAAS,CAAA;AACf,YAAI,QAAQ;AAEZ,aAAK,YAAY;AAEjB,YAAI,QAAQ,KAAK,KAAK,KAAK,KAAK;AAEhC,eAAO,OAAO;AACZ,gBAAM,WAAW,MAAM;AAEvB,cAAI,UAAU;AACZ,mBAAO,KAAK;AAAA,cACV,MAAM;AAAA,cACN,OAAO,KAAK,MAAM,MAAM,OAAO,QAAQ;AAAA,YAAA,CACxC;AAEH,iBAAO,KAAK,EAAE,MAAM,SAAS,MAAM,EAAE,UAAU,KAAA,GAAQ;AACvD,kBAAQ,WAAW,MAAM,CAAC,EAAE;AAC5B,kBAAQ,KAAK,KAAK,KAAK,KAAK;AAAA,QAAA;AAG9B,cAAM,oBACJ,OAAO,SAAS,KAAK,UAAU,OAAO,UAAU;AAElD,YAAI,CAAC,kBAAmB;AAExB,YAAI,QAAQ,KAAK,MAAM;AACrB,iBAAO,KAAK,EAAE,MAAM,QAAQ,OAAO,KAAK,MAAM,MAAM,KAAK,GAAG;AAE9D,eAAO,SAAS,OAAO,OAAO,GAAG,GAAG,MAAM;AAC1C,eAAO,QAAQ,OAAO;AAAA,MAAA;AAAA,IACxB;AAAA,EACF;AAEJ;AAEA,SAAS,gBAAgB,QAAQ;AAAA,EAC/B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,gBAAgB,SAAS;AAAA,EAChC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AC9DM,MAAM,yBAAyB;AAAA,EACpC;AAAA,EACA,MAAM;AACR;AAEA,SAAS,uBAAuB,QAAQ;AAAA,EACtC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,uBAAuB,SAAS;AAAA,EACvC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACbD,MAAM,WAAW,CAAC,SAChB,CAAC,CAAE,KAAqC;AAC1C,MAAM,SAAS,CACb,SACwD,KAAK,SAAS;AAExE,SAAS,iBACP,KACA,IACA;AACA,SAAO,UAAU,KAAK,GAAG,IAAI,EAAE,CAAC;AAEhC,WAAS,UAAU,MAAY,OAAe,QAAqB;AACjE,QAAI,SAAS,IAAI,GAAG;AAClB,YAAM,MAAM,CAAA;AACZ,eAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,IAAI,GAAG,KAAK;AACpD,cAAM,WAAW,KAAK,SAAS,CAAC;AAChC,YAAI,UAAU;AACZ,gBAAM,KAAK,UAAU,UAAU,GAAG,IAAI;AACtC,cAAI,IAAI;AACN,qBAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,IAAI,GAAG,KAAK;AACzC,oBAAM,OAAO,GAAG,CAAC;AACjB,kBAAI,KAAM,KAAI,KAAK,IAAI;AAAA,YAAA;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAEF,WAAK,WAAW;AAAA,IAAA;AAGlB,WAAO,GAAG,MAAM,OAAO,MAAM;AAAA,EAAA;AAEjC;AAIO,MAAM,wBAAwB;AAAA,EACnC;AAAA,EACA,MAAM,MAAM,CAAC,SAAe;AAC1B,qBAAiB,MAAM,CAAC,MAAM,QAAQ,WAAW;AAC/C,UAAI,CAAC,OAAO,IAAI,EAAG,QAAO,CAAC,IAAI;AAE/B,UAAI,QAAQ,SAAS,QAAQ;AAC3B,aAAK,WAAW,CAAC,EAAE,GAAG,MAAM;AAC5B,eAAO,KAAK;AACV,aAA0B,OAAO;AAAA,MAAA;AAGrC,aAAO,CAAC,IAAI;AAAA,IAAA,CACb;AAAA,EAAA;AAEL;AAEA,SAAS,sBAAsB,QAAQ;AAAA,EACrC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,sBAAsB,SAAS;AAAA,EACtC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AC3DM,MAAM,eAAe;AAAA,EAC1B;AAAA,EACA,MAAM,MAAM,CAAC,MAAM,SAAS;AAC1B,UAAM,YAAY,CAAC,SAAe;AAChC,aAAQ,KAAK,MAAiB,OAAO,KAAK,SAAU,MAAM,MAAO;AAAA,IAAA;AAEnE;AAAA,MACE;AAAA,MACA,CAAC,SAAe,CAAC,UAAU,UAAU,EAAE,SAAS,KAAK,IAAI;AAAA,MACzD,CAAC,SAAe;AACZ,aAAmC,SAAS,UAAU,IAAI;AAAA,MAAA;AAAA,IAC9D;AAAA,EACF;AAEJ;AAEA,SAAS,aAAa,QAAQ;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAED,SAAS,aAAa,SAAS;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACzBM,MAAM,0BAA0B,OAAO,MAAM;AAClD,MAAI,OAAO;AACX,QAAM,6BAA6B,IAAI;AAAA,IACrC;AAAA,EAAA;AAEF,QAAME,2BAAkC,IAAI,OAAO;AAAA,IACjD,KAAK;AAAA,IACL,OAAO;AAAA,MACL,OAAO;AACL,eAAO;AAAA,MAAA;AAAA,MAET,MAAM,IAAI;AACR,YAAI,CAAC,GAAG,UAAU,MAAO,QAAO;AAEhC,cAAM,MAAM,GAAG,UAAU;AACzB,cAAM,OAAO,IAAI;AACjB,cAAM,QAAQ,IAAI;AAClB,YACE,QACA,SACA,KAAK,YACL,CAAC,KAAK,UACN,MAAM,YACN,CAAC,MAAM;AAEP,iBAAO;AAET,eAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,OAAO;AAAA,MACL,iBAAiB;AAAA,QACf,gBAAgB,CAAC,MAAM,MAAM;AAC3B,cAAI,MAAM;AACR,mBAAO;AACP,kCAAsB,MAAM;AAC1B,oBAAM,SAASA,yBAAwB,SAAS,KAAK,KAAK;AAC1D,kBAAI,QAAQ;AACV,sBAAM,OAAO,KAAK,MAAM,UAAU;AAClC,kBAAE,eAAA;AACF,qBAAK,SAAS,KAAK,MAAM,GAAG,WAAW,EAAE,QAAQ,IAAI,IAAI,CAAC;AAAA,cAAA;AAAA,YAC5D,CACD;AAED,mBAAO;AAAA,UAAA;AAET,iBAAO;AAAA,QAAA;AAAA,QAET,kBAAkB,CAAC,SAAS;AAC1B,gBAAM,SAASA,yBAAwB,SAAS,KAAK,KAAK;AAC1D,cAAI,OAAQ,QAAO;AAEnB,iBAAO;AAAA,QAAA;AAAA,QAET,aAAa,CAAC,MAAM,MAAM;AACxB,gBAAM,SAASA,yBAAwB,SAAS,KAAK,KAAK;AAC1D,cAAI,UAAU,aAAa,cAAc,EAAE,QAAQ,CAAC,MAAM;AACxD,kBAAM,OAAO,KAAK,MAAM,UAAU;AAClC,cAAE,eAAA;AACF,iBAAK,SAAS,KAAK,MAAM,GAAG,WAAW,EAAE,QAAQ,IAAI,IAAI,CAAC;AAE1D,mBAAO;AAAA,UAAA;AAGT,iBAAO;AAAA,QAAA;AAAA,MACT;AAAA,MAEF,YAAY,OAAO;AACjB,cAAM,SAASA,yBAAwB,SAAS,KAAK;AACrD,YAAI,QAAQ;AACV,gBAAM,MAAM,MAAM,UAAU;AAC5B,gBAAM,WAAW,IAAI;AACrB,gBAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,gBAAM,UAAU,WAAW,OAAO,UAAU,MAAM;AAAA,YAChD,MAAM;AAAA,UAAA,CACP;AACD,gBAAM,QAAQ,SAAS,cAAc,MAAM;AAC3C,gBAAM,WAAW,WAAW,OAAO,UAAU,KAAK;AAClD,qBAAW,MAAM;AACf,iBAAK,kBAAkB;AACvB,kBAAM,kBAAkB;AAAA,UAAA,CACzB;AACD,iBAAO,cAAc,OAAO,MAAM,KAAK,CAAC,SAAS,QAAQ,CAAC;AAAA,QAAA;AAE5D,eAAO,cAAc;AAAA,MAAA;AAAA,IACvB;AAAA,EACF,CACD;AAED,SAAOA;AACT,CAAC;AAED,SAAS,yBAAyB;AAAA,EAChC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AC9FM,MAAM,2BAA2B,OAAO,CAAC,QAAQ;AACtD,SAAO,IAAI,OAAO;AAAA,IAChB,KAAK,IAAI,UAAU,0BAA0B;AAAA,IAC7C,mBAAmB,CAAC,KAAK,WAAW,aAAa;AAC/C,UAAI,CAAC,IAAI,OAAQ;AAEjB,YAAM,CAAC,EAAE,IAAI;AACb,UAAI,CAAC,GAAI;AAET,YAAM,CAAC,IAAI,IAAI,GAAG;AAElB,YAAM,aAAa,GAAG,QAAQ,WAAW;AACzC,UAAI,YAAY;AACd,YAAI,EAAE,gBAAgB,aAAc;AAEpC,cAAM,EAAE,SAAS;AACjB,eAAO,SAAS,GAAG;AAAA,UACjB;AAAA,UACA,gBAAgB,KAAK,GAAG;AAAA,UACxB;AAAA,UACA,CAAA;AAAA,QAAC;AAAA,MACH;AAGF,YAAM,gBAAgB,gBAAgB;AACtC,UAAI,eAAe;AACjB,YAAI,MAAM,SAAS;AACnB,cAAM,EAAE,MAAM,GAAA,IAAO;AACrB,iBAAS,IAAI,aAAa,MAAM,IAAI,CAAC,MAAM,QAAQ;AACjD,cAAI,KAAK,SAAS,gBAAgB,KAAK,GAAG;AACxC,kBAAM,IAAI;AAAA,cACR;AAAA,cACA,gBAAgB,KAAK,GAAG;AAAA,cACxB;AAAA,cACA,CAAA;AAAA,YAAC;AAAA,QACH,CACH;AAED,eAAO;AAAA,MAAA;AAGT,aAAO;AAAA,IAAA;AAAA,EACT,CACD;AACH,CAAC;AAED,SAAS,0BAA0B;AAAA,EACjC,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACnDM,MAAM,uBAAuB;AAAA,EAClC,CAAC,SAAS,YAAY;AAAA,EACtB;AACF;AAEA,SAAS,sBAAsB;AAAA,EAC7B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;AAIM,MAAM,wBAAwB,OAAO,CAAC,QAAQ;AACnD,QAAM,QAAQ,IAAI,IAAI,qBAAqB,GAAG;AAC9C,SAAO,IAAI,OAAO;AAAA,IAChB,KAAK,IAAI,UAAU,2BAA2B;AAAA,IAC9C,mBAAmB,CAAC,IAAI,UAAU;AAChC,YAAM,aAAa,GAAG,QAAQ,WAAW;AACzC,YAAM,CAAC,IAAI,IAAI,GAAG;AAClB,UAAI,cAAc,MAAM;AACtB,cAAM,EAAE,SAAS;AACjB,cAAM,QAAQ,MAAM,IAAI,QAAQ,IAAI;AACpC,YAAI,WAAW,MAAM;AACrB,YAAI,WAAW;AACf,eAAO,WAAW,GAAG;AACnB,cAAI,MAAM,SAAS,MAAM,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAG,YAAW;AAE/D;AAAA,QAAA;AAEF,eAAO;AAAA,MAAA;AAET,aAAO;AAAA,IAAA;AAAA,EACT,CACD;AACH,CAAC;AAED,SAAS,uBAAuB;AAAA,EAC9B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACnCM,MAAM,sBAAsB,OAAO,CAAC,QAAQ;AACjD,QAAM,qBAAqB,IAAI,UAAU,qBAAqB;AAE9D,QAAM,WAAW,CAAC,SAAqB;AACrC,QAAI,KAAK,UAAW;AAEpB,UAAM,QAAQ,IAAI,IAAI,mBAAmB,GAAG;AAC5C,UAAM,KAAK,KAAK,MAAM,GAAG,QAAQ,gBAAgB,KAAK;AAEtD,QAAI,QAAQ;AACZ,UAAM,QAAgC,CAAA;AAEtC,SAAK,MAAM,IAAI,YAAY,CAAC,MAAM,QAAQ;AACxC,UAAI,KAAK,SAAS,cAAc,KAAK,GAAG,GAAG;AACzC,YAAI,KAAK,YAAY,KAAA,EAAO,WAAW,EAAG;AAE1C,cAAM,QAAQ,KAAK;AACnB,YAAI,KAAK,MAAM,IAAI;AACnB,YAAI,MAAM,EAAE,GAAG;AACb,gBAAM,EAAE,KAAM;AACd,gBAAM,KAAK,MAAM,EAAE,CAAC;AAAA,QAAA,OACf;AACL,gBAAM,EAAE,IAAI;AAAA,QAAA;AAGd,YAAI,MAAM,OAAO,IAAI;AACnB,kBAAQ;AACR,aAAG,QAAQ,oBAAoB,IAAI,EAAE,cAAc,KAAK,QAAW;AAAA,YACjE,GAAG;AAAA,YACH;AAAA,UAAA,CACD;AAAA,QAAA;AAAA,MACH;AAAA,IACF,CACD;AAED,QAAI,MAAO,MAAK,SAAS,EAAE;AAAA,EAAA;AAG7B,SAAO,IAAI,OAAO;AAAA,IAChB,KAAK;AAAA,IACL,MAAM,CAAC,SAAS;AACd,eAAS,IAAI;AAEb,aAAO;AAAA,QACL,QAAQ,CAACC,OAAM,cAAc;AAC3B,cAAIA,MAAK,MAAM,IAAI,GAAG,UAAU,GAAG,EAAG;AACtC,mBAASA,KAAI;AAAA,QAAA;AAAA,MACf;AAAA,IACF;AAAA,EACF,CACD;AACH,CAAC;AAED,SAAS,qBAAqB;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACvDM,MAAM,sBAAsB,OAAO,CAAC,QAAQ;AACjD,QAAM,iBAAiB,CAAC,SAAqB;AAC3C,QAAI,KAAK,aAAa,CAAC,KAAK,SAAU;AAEtC,UAAM,kBAAkB,kBAAkB,KAAK,GAAG;AAClD,UAAM,iBAAiB,iBAAiB,KAAK,GAAG;AAChD,UAAM,eAAe,eAAe,KAAK,GAAG;AAC5C,UAAM,QAAQ,KAAK;AACnB,UAAM,iBAAiB,CACrB,OACA,UACY;AACZ,UAAI,UAAU;AACd,YAAM,gBAAgB,GAAG,QAAQ,CAAC;AAClC,UAAI,MAAM,UAAU,eAAe;AACjC,cAAM,QAAQ;AACd,kBAAU;AAAA,MAAA;AAGZ,aAAO;AAAA,IAAA;AAGT,QAAI,KAAK,MAAM;AACf,QAAI,eAAe;AACnB,UAAM,IAAI,YAAY,CAAC,MAAM,KAAK,QAAQ,UAAU;AAClD,UAAI,KAAK,SAAS,gBAAgB;AAChC,cAAM,OAAO,KAAK,WAAW,CAAC;AAC9B,YAAI,MAAM,SAAS,gBAAgB,KAAK,MAAM,aAAa,WAAW;AACpE,yBAAe;AACf,aAAG,cAAc,KAAK,iBAAiB,EAAE,QAAQ,QAAQ;AAEzD,eAAK,YAAY,CAAC,OAAOC,MAAK,SAASC,WAAU;AAC/C,gBAAI,MAAM,SAAS,cAAc;AAC/B,oBAAM,QAAQ,EAAE,GAAG,MAAM,MAAA;AACzB,oBAAM,UAAU,eAAe,OAAOA,MAAK;AAC3C,kBAAI,QAAS,MAAK,GAAG,cAAcD,MAAK,QAAW,KAAK;AAAA,YAAA;AAE1D,mBAAO;AAAA,UAAA,CACR;AAAA,QAAA;AAAA,MACH,WAEA,KAAK,SAAS,gBACd,QAAQ,SAAS,iBACjB;AACA,cAAM,QAAQ,EAAE,GAAG,KAAK,MAAA;AACxB,YAAI,UAAU;AACd,YAAI,MAAM,aAAa,WAAW;AAChC,gBAAM,WAAW;AACjB,oBAAU;AAAA,QAAA;AAGZ,cAAM,OAAO,QAAQ,WAAW,CAAC;AACjC,YAAI,KAAM,WAAU,eAAe,OAAO,KAAK;AAE/C,YAAI,SAAS;AACX,eAAK,GAAG,cAAc,KAAK,QAAW,KAAK;AAC3C,yBAAe;AAAA,QAAA;AAAA,MACjB;AAAA,IACF,CACD;AAED,QAAI,aAAc,MAAK,SAAS,GAAG,QAAQ,gBAAgB,KAAK,CAAC;AAAA,EAAA;AAEnE,SAAO,IAAI,OAAO;AAAA,IAChB,KAAK,IAAI,UAAU,0BAA0B;AAAA,IAC7C,MAAM,CAAC,SAAS;AACd,qBAAe,IAAI;AACnB,aAAO;AAAA,QACL,QAAQ,CAACD,UAAS;AAChB,yBAAeA,KAAI;AAAA,QAAA;AAAA,MACrB;AAAA,IACF;AAAA,EACF,CACD;AACH,CAAC;AAED,SAAS,qBAAqB;AAAA,EAC5B,aAAa;AAAA,EACb,OAAO;AACT,CAAC;ACxEM,MAAM,UAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AACF,EAAE,KAAA;AChBK,MAAM,aAA+B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAA;"}
|
|
1
|
+
{"version":3,"file":"index.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/plugin/remark-preserve-empty-line.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/commands/index.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":["import type { Node } from '@milkdown/prose/model'\nimport type { SerializerState } from '@milkdown/transformer'\n\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) return\n\n contentArr.push(n)\n })\n state.next(Fragment.fromArray(contentArr))\n}\n","import type { Meta, MilkdownPlugin } from '@milkdown/ctx'\n\nexport function withMeta<T extends MilkdownPlugin>(\n plugin: T,\n meta: Partial<Meta> & Pick<Meta, 'displayName'>\n): T {\n Object.assign(plugin, {\n meta: {\n package: '@milkdown/preset-commonmark',\n ...meta,\n },\n })\n\n return plugin\n}\n","import { commandsCtx, remarkStringifyOptionsCtx } from '@milkdown/core'\nimport { markRule } from '@milkdown/prose'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport {\n $command,\n $inputRule,\n $markAttr,\n $markSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 validate: 'string',\n },\n },\n parseDOM: [\n { tag: 'i' },\n { tag: 'em' },\n { style: 'font-style', getAttrs: (value) => (value === 'italic') as false },\n ],\n toDOM: (mark) => ['em', ctx.get(emphasisAttr.key)(mark)],\n parseMarkdown: {\n match: (node) => node.type === 'emphasis',\n runner: (state, node, markType) => {\n state.openMark(markType, { marker: node.marker })\n state.next(node.children)\n state.closeMark(markType)\n },\n },\n toMarkdown: {\n match: (mark) => mark.type.name === 'emphasis',\n runner: (state, mark) => {\n state.withMark(mark, 'emphasis', undefined, {\n marker: mark.attrs.marker,\n })\n },\n },\n}))\n\nwithMeta(emphasisSchema.mark, {\n displayName: 'MarkSchema<emphasis>',\n group: 'Emphasis',\n})\n\nwithMeta(emphasisSchema.ctx, {\n displayName: 'MarkSchemaCtx<emphasis>',\n group: 'Emphasis',\n})\n\n/// A command to toggle the emphasis mark.\nexport const toggleEmphasisCommand = $command('ToggleEmphasis', (ctx) => () => {\n return toggleMark(emphasisSchema.type(ctx))\n})\n\nwithMeta(toggleEmphasisCommand, {\n displayName: 'Command<toggleEmphasisCommand>',\n group: 'Emphasis',\n})\n\n/// Input rule for use `*` to create emphasis mark.\nexport const emphasisStarInputRule = $inputRule((ctx) => {\n return markRule(/(?:^|[^*])\\*([^*]+)\\*$/, emphasisSchema.type(ctx), {\n getAttr: () => ({\n marker: '*',\n }),\n updateCaptured: ({ fullMatch, start }) =>\n !fullMatch.startsWith('*')\n ? { fullMatch: fullMatch.slice(1), start: start + 1 }\n : {},\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(/\\b_(?![_\\s])(.*?[^_\\s])_\\b/, emphasisSchema.type(ctx), {\n getAttr: () => ({\n marker: '_',\n }),\n updateCaptured: ({ fullMatch, start }) =>\n !fullMatch.startsWith('_')\n ? { fullMatch: fullMatch.slice(1), start: start + 1 }\n : {},\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","import { commandsCtx, remarkStringifyOptionsCtx } from '@milkdown/core'\nimport { markRule } from '@milkdown/prose'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport {\n $command,\n $inputRule,\n $markAttr,\n $markSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 validate: 'string',\n },\n },\n parseDOM: [\n // This works around a Google Docs misbehavior where\n // pasted content will be inexplicably wrapped in `<b>`\n // tags with a font-weight normal.\n {\n tag: 'b',\n getAttrs: (node: HTMLElement) =>\n node.style.fontWeight != 'normal' && null,\n },\n { tag: 'strong' },\n { style: 'font-style', getAttrs: (value) => (value === 'bold') as false },\n { style: 'font-weight=400', clearMark: (m) => m.type.name == 'strong' },\n {\n style: 'font-weight',\n getAttrs: (value: string) =>\n /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null,\n },\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 // Avoid matching when the opening delimiter is directly adjacent to alphanumeric characters,\n // colon or slash (to prevent matches inside file paths, URLs, or intra-word like `a**b**c`).\n // Also ensure the closing delimiter is not followed by such characters (mirrors strike-through rule).\n return markRule(\n /(?<![\\w:/])(?:\\*\\*|__)([^*_]+?)(?:\\*\\*|__)(?![\\w/])$/,\n strongSchema.type(ctx),\n {\n getAttr: (match) => {\n return {\n marker: match[0].startsWith('*') ? '*' : '_',\n }\n },\n }\n )\n})\n\nwithMeta(strongInputRule, {\n displayName: 'InputRule<strong>',\n group: 'Strong',\n})\n\n/// Keymap for the strong mark.\n/// - `Mod-b` - Toggle the strong mark.\nexport const strongKeymap = $useKeymap('strongKeymap', {\n ToggleBold: {\n shortcuts: ['Mod-b'],\n command: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return () => commands.call(toggleStrongCommand.key)\n },\n },\n})\n\nwithMeta(strongKeymap.ctx, {\n displayName: 'KeymapCtx<strong>',\n group: 'Strong',\n})\n\nwithMeta(strongKeymap.shortcuts, {\n displayName: 'Keymap<strong>',\n group: 'Strong',\n})\n","import type { MarkType } from '@milkdown/prose/model'\n\nimport { commandsCtx } from '@milkdown/core'\nimport { markRule } from '@milkdown/prose'\nimport {\n $command,\n $inputRule,\n $markAttr,\n $markSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 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(\n 'ToggleInlineCode',\n (ctx) => () => (state, dispatch) => {\n const { selection, tr } = state\n if (selection.empty) 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(\n (x) => x !== inlineCodeSchema.type.name\n )\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)\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","import type { Node as ProseNode } from '@milkdown/prose/model'\n\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { toggleMark } from '@milkdown/prose/commands'\nimport { TextSelection } from '@milkdown/prose/state'\nimport { $command, $markAttr, $markSchema } from '@milkdown/utils'\n\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: { validate: 'string' },\n title: { default: null, validate: 'string|null' },\n },\n parseDOM: [\n {\n tag: 'a[href]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n href: dom.getAttribute('href'),\n title: dom.getAttribute('title'),\n }\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(\n 'ToggleLink',\n (ctx) =>\n (payload: UpdateLinkCommandPayload = {}) =>\n toggleMark(linkSchema.type(ctx), payload)\n)\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(\n 'UpdateLink',\n (ctx) =>\n (payload: UpdateLinkCommandPayload = {}) =>\n (state, dispatch) => {\n if (!dispatch) 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) return false\n\n const mark = node.marks.find(({ type }) => type === linkSchema.type(ctx))\n if (!mark) return false\n\n const start = pos\n const end = pos + node.nodeSize\n const { tr } = state\n const linkMark = linkSchema\n .type(ctx)\n .create({ ...mark.attrs, ...payload })\n if (!linkMark) 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)\n\nwithMeta(updateLinkCommand, {\n displayName: 'Command<updateLinkCommand>',\n group: 'Link',\n})\n","import { $node } from '@milkdown/utils'\n\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","import type { Node } from '@milkdown/transformer'\n\nimport { $remark } from '@milkdown/utils'\nimport { visitParents } from 'unist-util-visit-parents'\n\nimport { withMeta } from '../__internal__'\n\nfunction visitEmptyLine(ast: Node) {\n return visitParents(\n ast,\n (node: Node) =>\n node.type === 'html' &&\n ['<br />', '<br>', '<br >', '<br/>'].includes(\n (node as Node & { value: string }).value?.trim()\n ),\n (node: Node, parents: Node[]) => {\n if (!parents.length) return\n const parent = parents[parents.length - 1] as\n | (Node & { children: Node[] })\n | undefined\n if (!parent) return\n const index = parent.children.indexOf(node)\n if (index === -1) return\n\n parent.children.splice(index, 1)\n },\n true\n )\n}\n\n/// @internal\n/// This plugin is used to preserve the empty line.\n/// Markdown will fold the empty line into the previous line by default.\n/// This plugin will preserve the empty line by converting `<br />` to `line-break`.\n/// This plugin should be used with `linebreakSchema` to work.\nexport const remarkPreserveEmptyLinePlugin = $remark(\n 'remark-preserve-empty-line',\n () => () => visitEmptyLine\n)\n\nwithMeta(remarkPreserveEmptyLinePlugin.plugin, {\n displayName: 'Remark<remarkPreserveEmptyLine>',\n group: 'Remark',\n})\n\nwithMeta(remarkPreserveEmptyLinePlugin.options, {\n displayName: 'RemarkConfig<remarkPreserveEmptyLine>',\n group: 'Remark',\n})\n","import type { Ctx } from '@milkdown/ctx'\n\nimport { commandsCtx, editorViewCtx } from '@milkdown/core'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\n\nimport { serializeText, withMeta } from '../__internal__'\nimport { remarkPreserveEmptyLinePlugin } from '../plugin/remark-preserve-empty-line'\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) state.next(node.children)\n else 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 const view = ctx.get(editorViewCtx)\n const lastNode = view.state?.doc.lastChild\n\n state.openNode('paragraph')\n if (\n (!node.content || node.content.size === 0) &&\n node !== lastNode &&\n shouldPreserveEmptyLine(ctx)\n ) {\n state.addNode('html', undefined, '<br />')\n } else {\n serializeText(state, node)\n }\n state.closeNode()\n },\n },\n}))\n\nfunction shouldPreserveEmptyLine(ctx: Ctx) {\n let shouldPreserveEmptyLine = false\n try {\n ctx.get(remarkPreserveEmptyLinePlugin.id)\n shouldPreserveEmptyLine = true\n } catch {\n shouldPreserveEmptyLine = false\n }\n return shouldPreserveEmptyLine\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(\n 'TurnIntoText',\n (ctx) => () => setBlockType(paragraphSchema.type(ctx))\n)\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","import type { Node } from '@milkdown/prose/model'\n\nimport { commandsCtx, editorViewCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { textblockTypeInputRule } from '@milkdown/prose/inputrules'\nimport {\n $command,\n $ctx,\n $inputRule,\n $nodeAttr,\n $nodeSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 node.textContent.toLowerCase().trim().replace(/\\s+/g, '-')\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(\n defaultHeadingIdGenerator,\n 'headingIdGenerator'\n)\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 validate: 'string',\n },\n level: {\n default: 1,\n validate: 'number',\n },\n },\n parseDOM: headingIndex.map((x) => ({\n tag: `h${x}`,\n getAttrs: (node) => {\n if (!(node instanceof HTMLElement)) 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(\n /^(?<hashes>#+)\\s$/,\n headingSchema.type(ctx),\n (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) level = 6\n\n return { level }\n }\n return { level: x }\n }\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) 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(\n 'DowngradeHeading',\n (ctx) => () => (state, dispatch, view) => {\n const { $from } = state.selection\n const node = $from.node()\n if (\n node.type !== headingSchema.type(ctx) ||\n !state.selection.empty ||\n $from.parentOffset !== 0\n )\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)\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","import type { $NodeSchema } from '@milkdown/utils'\n\nimport { commandsCtx } from '@milkdown/core'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport {\n $command,\n $inputRule,\n $nodeAttr,\n $nodeSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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(\n 'blockquote',\n (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\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) =>\n wrappingInputRule(/^\\s*>\\s$/, blockquoteSchema.type(ctx))\n)\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(\n 'WrapInBlockquote',\n (ctx) => () => wrapIn(blockquoteSchema.type(ctx))\n)\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","import { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { setBlockType } from '@milkdown/prose/commands'\nimport { textblockTypeInputRule } from '@milkdown/prose/inputrules'\nimport {\n $command,\n $inputRule,\n $nodeAttr,\n $nodeSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 validate: 'string',\n },\n },\n parseDOM: [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) 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 const language = node.attrs.language\n const languageAttrs =\n language && language.length > 0\n ? { 'data-language': language }\n : undefined\n\n return [\n 'pre',\n {\n ...attr.pre,\n ...languageAttrs,\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 ?? ''\n const value = node.value as string | null\n state.openNode(type, { language })\n if (value) 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) =>\n textblockTypeInputRule(\n /^```(?<language>[a-z]*)?[\\s\\n]$/,\n codeBlockSchema.type(ctx),\n (match) => ({\n language: match.groups?.language ?? '',\n })\n )\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(\n 'CreateCodeBlock',\n (ctx) =>\n (language = '') =>\n setBlockType(codeBlockSchema.type(ctx), { language })\n)\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(\n 'UpdateCodeBlockLanguage',\n () =>\n (\n { pos, language }: { pos: number; language: string } = {\n pos: -1,\n language: '',\n }\n ) =>\n (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\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","import { expectDomTypeError } from '@milkdown/exception'\nimport { findSelectedNodeOfType } from '@milkdown/prose'\nimport { InputRule } from '@milkdown/prose/inputrules'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema } from '@milkdown/utils'\n\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: '', validate: 'string' },\n alt: { default: '', validate: 'string' },\n title: { default: '', validate: 'string' },\n },\n parseDOM: [\n {\n tag: 'img[src]',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) 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(\n 'InsertImage',\n (ctx) =>\n (payload: UpdateImageCommandPayload = {}) =>\n (state, dispatch) => {\n if (!dispatch) return true\n\n const { src = '', alt = '', title = '' } = payload\n\n const node = imageSchema.type(ctx).create({ src, alt, title })\n if (!node) return true\n\n dispatch(state.tr.replaceSelectionWith(node).scrollIntoView())\n return true\n }\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(\n 'UpdateImage',\n (ctx) =>\n (payload: UpdateImageCommandPayload = {}) =>\n (state, dispatch) => {\n const nodeWithPos = findSelectedNodeOfType(\n state.selection,\n imageSchema.type(ctx)\n )\n if (!nodeWithPos) return false\n\n const { node, pos } = nodeWithPos\n\n const newAttrs = { ...node.attrs }\n const { src, alt, title } = payload\n if (src !== undefined) newAttrs.src = src\n if (alt !== undefined) newAttrs.alt = alt\n if (title !== undefined) newAttrs.title = title\n\n dispatch?.(\n state.tr.setNodeMarkup(pos, undefined, newAttrs).scrollIntoView()\n )\n return true\n }\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 `` to insert a image node.\n/// The `title` is optional.\nexport const insertImageInputRule = $inputRule(\n (ctx) =>\n 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(\n start,\n end,\n imageSchema.type(ctx).create({ src, alt, title })\n )\n\n return null\n }\n )\n)\n\nwithMeta(insertImageInputRule, {\n displayName: 'InputRule<insertImageInputRule>',\n group: 'Image',\n})\n","import { commandsCtx } from '@milkdown/core'\nimport { Selection, TextSelection } from '@milkdown/prose/state'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\n\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-type': 'hardbreak',\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 validate: 'boolean',\n },\n },\n selectable: false,\n parseDOM: [\n { tag: 'br' },\n {\n tag: 'span[data-type=\"hardbreak\"]',\n getAttrs: () => ({ isInline: true }),\n },\n ],\n toDOM: (node) =>\n node.attrs.isInline\n ? ['span', ctx.get(hardbreakAttr.key)(node), ' ']\n : ['br', ctx.get(hardbreakAttr.key)(node)],\n parseMarkdown: {\n match: ({ type }) => type === 'break',\n runner: (state, node, type) => {\n state.addNode(type, {\n isInline: Boolean(\n (node.data as undefined | { isInline: boolean })?.isInline\n ),\n })\n },\n },\n leafText: () => '\\n',\n toMarkdown: {\n match: (node) => node.type.name === 'hardbreak',\n runner: (state, node) => {\n if (node.attrs.isInline) state.addNode('text', undefined, '\\n')\n else 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(\n 'InsertHardbreak',\n (ctx) => () => (state, dispatch) => {\n const { selection, tr } = state\n if (!(selection instanceof TextSelection)) 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(\n selection.to - 1,\n selection.to,\n state.schema.node('paragraph')\n )\n .setSelection(Selection.near(tr.doc.resolve(selection.to)))\n .scrollIntoView()\n )\n return true\n }\n }\n dispatch?.(\n tr\n .setMeta('hardbreak', true)\n .replaceSelectionWith(hardbreakSchema.type(ctx).create())\n .scrollIntoView()\n )\n return true\n }\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","import { InputRule } from '@milkdown/prose/inputrules'\nimport { Selection } from '@milkdown/prose/state'\nimport { $command, $inputRule, $nodeAttr, $nodeSchema } from '@milkdown/utils'\n\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(\n (ctx) =>\n new InputRule(/^(?:---|___\\s|\\*\\*\\*\\s)$/, (state, match, start, end) => {\n const { tr } = state\n\n if (match[0]) 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(\n 'InsertHr',\n (ctx) => () => (state, dispatch) => {\n if (!dispatch) 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) 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) return true\n\n dispatch(_tr.setSelection(sel).scrollIntoView())\n return true\n }\n)\n\nwithMeta(insertHrCommand, {\n displayName: 'Command<insertHrCommand>',\n group: 'Hr',\n})\n","import { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport {\n $command,\n $inputRule,\n $nodeAttr,\n $nodeSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 validate: 'boolean',\n },\n },\n parseDOM: [\n {\n tag: 'ul',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n spread: dom.dataset.spread === 'true',\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, {\n ordered: false,\n spread: node.attrs.spread,\n })\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) =>\n wrappingInputRule(/^\\s*([-+*])\\s$/, bulletListSchema.type(ctx))\n)\n\nwithMeta(wrapInBulletListInputRule, {\n displayName: 'InputRule<wrapInBulletListInputRule>',\n group: 'BulletList',\n})\n\n/// Command for creating bullet list node.\nexport const wrapInBulletListCommand = $command(\n 'WrapInBulletList',\n (ctx) => () => wrapIn(bulletListSchema.type(ctx))\n)\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","import { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { wrapIn } from '@milkdown/prose/commands'\nimport { wrappingInputRule } from '@milkdown/prose/inputrules'\nimport {\n $command,\n $inputRule,\n $nodeAttr,\n $nodeSchema,\n $useKeymap,\n} from '@milkdown/utils'\n\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 validate: 'number',\n },\n spread: {\n default: false,\n validate: 'boolean',\n },\n },\n parseDOM: [\n {\n tag: 'ol',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n spread: dom.dataset.spread,\n order: dom.hasAttribute('start')\n ? Number(dom.getAttribute('start'))\n : 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, {\n ordered: true,\n start: 1,\n spread: node.attrs.spread === 'true',\n })\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) =>\n 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)\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(\n 'WrapInOrderedList',\n (ctx) => () => wrapIn(orderedListSchema.type(ctx))\n)\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","import type { Ctx } from '@milkdown/ctx'\n\nimport { commandsCtx } from '@milkdown/core'\nimport { expectDomTypeError } from '@milkdown/exception'\nimport { joinBackward } from '@milkdown/prose/commands'\nimport {\n liftListItem,\n sinkListItem,\n splitListItem,\n} from '@milkdown/prose/schema-list'\nimport { type Command, TextSelection } from '@milkdown/prose/state'\nimport { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'\n\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 validate: 'string',\n },\n listType: {\n default: 'bullet',\n validate: 'string',\n },\n spread: {\n default: true,\n validate: 'boolean',\n },\n },\n defining: true,\n parseDOM: [\n {\n tag: 'li',\n getAttrs: (dom) => {\n if (!(dom instanceof HTMLElement)) throw expectDomTypeError(dom)\n\n return {\n label: dom.dataset.label,\n listType: dom.dataset.listType,\n spread: dom.dataset.spread === 'true',\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, {\n spread: node.attrs.spread,\n })\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(\n 'SinkListItem',\n (ctx) => () => sinkListItem(listItemSchema.type(ctx))\n)\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(\n 'LiftListItem',\n (ctx) => () => liftListItem(listItemSchema.type(ctx))\n)\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(\n 'SplitListItem',\n (ctx) => () => splitListItem(listItemSchema.type(ctx))\n)\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)) 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) return false\n\n const parentItem = $from.node(-1)\n // selection should be in list item\n if (parentItem.type !== listItemSchema.type(ctx)) return false\n\n return joinBackward(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(\n 'LiftFirstListItem',\n (ctx) => () => liftFirstListItem(ctx)\n)\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","import { $node } from '@milkdown/utils'\n\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","import { $nodeAttr, $nodeSchema } from '@milkdown/utils'\n\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 validate: 'string',\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 {\n tag: 'span[data-type=\"html\"]',\n getAttrs: (dom) => {\n return {\n value: dom.dataset.value ?? '',\n }\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","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport {\n emphasisAttr,\n emphasisSchema,\n inlineCodeAttr,\n inlineCodeSchema,\n linkAttr,\n linkSchema,\n strongAttr,\n strongSchema,\n} 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","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport {\n emphasisStarInputRule,\n emphasisUnderscoreInputRule,\n inlineCodeInputRule,\n strongInputRule,\n} from '../mark'\nimport {\n createCodeBlockInputRule,\n insertHrInputRule,\n wrapInBlockquoteInputRule,\n wrapInBulletListInputRule,\n wrapInHeadingInputRule,\n wrapInOrderedListInputRule,\n} from '../node'\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","import { findNodeInSelection } from '@milkdown/prose'\nimport {\n Node,\n type Attrs,\n type MarkType,\n type NodeType,\n} from '@milkdown/prose/model'\nimport { TextSelection } from '@milkdown/prose/state'\nimport { findWrapping } from '@milkdown/prose/transform'\nimport { $command } from '@milkdown/utils'\n\n/// A command to check if a mark is selected.\nexport const isMarkSelectedCommand = $command(\n 'IsMarkSelected',\n () => (markType?: MarkType) => (state) => {\n if (!markType) return false\n const { doc, selection } = state\n const hasLink = doc.rangeHasMark(selection.from, selection.to, markType)\n return hasLink\n }\n)\n\n/// A command to check if a node is selected.\nexport const isNodeSelectedCommand = $command(\n 'IsNoteSelected',\n () => (nodeType?: NodeType) => (state) => {\n if (!nodeType) return false\n const result = findNodeInSelection(state, nodeType)\n return result.hasNode\n }\n)\n\n/// A command to clear text in the current block.\nexport const clearTextInCurrentBlockCommand = $command(\n 'ClearTextInCurrentBlock',\n () => () => (state, dispatch) => {\n let tr = state.tr\n const { $from, $to } = tr.selection\n const { pos: from } = $from\n const { pos: right } = $to\n const left = from - $from.node().content.size\n if (left < 0) return false\n\n tr = tr.deleteRange(left, right)\n dispatch?.(tr)\n return true\n }\n)\n\n/// Set block type to target block and attribute.\nexport const setBlockTypeCommand = $command(\n 'SetBlockType',\n () =>\n (payload?: { nodeType: NodeType; attrs?: Attrs | null }) =>\n (state, dispatch) => {\n const { nodeType, attrs = null } = payload ?? {}\n if (!nodeType) return false\n const tr = state.tr\n const { from, to } = tr.selection\n try {\n tr.setBlockType(from, to, nodeType, attrs)\n } catch {\n return false\n }\n dispatch?.(tr)\n return true\n }\n)\n\n/// A command to wrap the current block with a block type.\nexport const wrapInBlockTypeCommand = $command(\n 'WrapInBlockType',\n () =>\n (payload?: { nodeType: NodeType; attrs?: Attrs | null }) =>\n (state, dispatch) => {\n const { nodeType, attrs = null } = payload ?? {}\n if (!nodeType) return false\n\n let tr = state.tr\n\n try {\n const { $from, $to } = tr.selection\n const blockRange = $from.blockRange($to)\n const wrapping = blockRange && findWrapping(blockRange, nodeType, attrs)\n if (!wrapping) return false\n tr = tr.wrap(blockRange, wrapping)\n } catch {\n return false\n }\n\n dispatch?.(tr)\n return true\n }\n)\n\n/// A command to add a block type to the current selection.\nexport const addBlockTypeCommand = $command(\n 'AddBlockType',\n () =>\n (payload?: { nodeType: NodeType | Node; attrs?: Attrs | null }) =>\n (state, dispatch) => {\n const { nodeType, attrs = null } = payload ?? {}\n if (!nodeType) return false\n const tr = state.tr\n\n try {\n const node =\n nodeType instanceof Node ? nodeType : nodeType.createAndFill(attrs)\n if (!node) return false\n\n tr.replaceSelectionWith(node)\n } catch {\n return false\n }\n dispatch?.(tr)\n return true\n }\n)\n\n/// A command to select text near a position.\nexport const selectTextNearPosCommand = $command(\n 'SelectTextNearPos',\n () => (payload?: { pos?: number }) => (state, dispatch) => {\n const { pos } = payload ?? {}\n if (pos == null) return false\n\n const clamp = (value: number, min: number, max: number) =>\n Math.min(Math.max(value, min), max)\n\n const tr = state.tr\n try {\n const $pos = state.doc.resolve(clamp(pos, 0, state.doc.content.size))\n tr.setSelection(TextSelection.near($pos))\n } catch {\n return false\n }\n dispatch?.(tr.scrollIntoView())\n return true\n }\n)\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport {\n addBlockTypeCommand,\n clearTextInCurrentBlockCommand,\n isMarkSelectedCommand,\n isNodeSelectedCommand,\n selectTextNearPosCommand,\n setBlockTypeCommand,\n wrapInBlockTypeCommand,\n} from '../commands'\nimport {\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleLinkCommand,\n toggleStrongCommand,\n updateLinkCommand,\n} 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 isMarkSelectedCommand,\n isNodeSelectedCommand,\n\n clearTextInCurrentBlockCommand,\n setBlockTypeCommand,\n wrapInBlockTypeCommand,\n addBlockTypeCommand,\n selectTextNearPosCommand,\n]\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport { emphasisKeymap, inlineCodeKeymap, strongKeymap } from '../mark'\nimport {\n blockquoteKeymap,\n bulletListKeymap,\n codeBlockKeymap,\n hardbreakKeymap,\n headingKeymap,\n listItemKeymap,\n orderedListKeymap,\n paragraphKeymap,\n} 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","import { $remark } from '@milkdown/utils'\nimport { visit } from 'unist-util-visit'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to add order in list for remark AST.\nexport const remarkAddOrderInListPlugin = $remark(\n 'remarkAddOrderInList',\n () => () => (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)\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","import type { Node } from '@milkdown/transformer'\n\nimport { $remark } from '@milkdown/utils'\nimport { visit } from 'unist-util-visit'\n\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(\n 'remarkLineBreak',\n () => () => (tree: Node) => {\n const find = /[\\t ]*(?:\\r?\\n|\\r)/g\n visit(\n tree,\n 'text',\n (\n node: Node & { value: string },\n index: number,\n parent: Node & { children: Node[] }\n ) => {\n if (!node.value || typeof node.value !== 'string') 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({\n type: 'text',\n value: node.value.slice(start, position),\n })\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 =\n result.length > 0 && parent && typeof index === 'number'\n\n if (!hasResultAndIndex) 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 }\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","import { $remark } from '@milkdown/utils'\nimport remarkInlineLinks from 'remark-inline-links'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin wraps [remark-inline-links](https://github.com/remarkjs/remark-inline-links).\nexport const remarkInlineLinkPlugin = $remark(\n 'remarkInlineLink',\n () => remarkInlineLinks\n)\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","import type { Node } from '@milkdown/transformer'\n\nimport { $remark } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\nconst isParent = (node: Node): node is Node & { children: Node[] } =>\n !!(node as Node & { children: Node[] }).children\nconst isHTML = (\n node: Node\n): node is Node & { children: Node[]; value: unknown } => node.type === 'html'\n\nfunction flatMapWithDepth(\n ast: Node,\n fn: (node: Node, index: number, parent: Node | null) => Node[]\n) {\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) out.push(item)\n }\n }\n }\n }\n node.children = out\n }\n\n return fn(node, index, parent)\n }\n}\n\n// List of container node types that can contain block-level content\n// and thus may need HTML content to be wrapped in paragraphs\nconst BLOCK_CONTAINER_TYPES = ['root', 'blockquote', 'listItem']\n\n/// @internal\n/// This plugin should be deprecated after we support HTML.\nexport const remarkHtmlTransformer = $remark(\n 'remarkHTMLTransformer',\n () => () => (tree: Node) => {\n flatMapWithDepth(tree, (node, _index, parent) => {\n if (!isHTML(node)) return [node]\n\n // If the parent is a block container that expects block content,\n // wrap the HTML in a paragraph node\n if (parent && BLOCK_CONTAINER_TYPES.includes(parent.type)) {\n node.children = [{ ...node }]\n delete node.value\n ;(node as { type: string }).type = 'paragraph'\n }\n\n return [node]\n })\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","import type { Node } from '@milkdown/transformer'\n\nimport { $remark } from '@milkdown/utils'\nimport { visit } from 'unist-util-visit'\n\nimport { withMeta } from '../__internal__'\n\n/// This plugin is used to keep the marker (`_` and `*`) of emphasis and strong nodes.\nexport const remarkMarker = $remark(\n 'remarkMarker',\n () => () => (tree, file) => {\n const getMarker = (node: Node) => {\n return (file.value as string).charAt(node.position!.start.offset!)\n }\n visit(\n tree,\n (node: Node) => ['strong', 'emphasis'].includes(node.type),\n (node: Node) => {\n ;(node as Node & { marker: string }).marker = getMarker(node)\n }\n )\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","import { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { Decoration, DecorationSet } from '@milkdown/prose/view'\nimport { $prose } from '@milkdown/utils'\n\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(\n 'MILKDOWN_INLINE_NODES_CURSOR'\n )\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) return false\n\n const pos = tr.selection.$from\n const left = pos.nodeBefore\n const right = pos.nodeAfter\n if (\n left &&\n right &&\n left.isInline &&\n !left.isText &&\n right.isInline &&\n !right.isText\n )\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) 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","import { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { AddMarkStep, ReplaceStep } from '@milkdown/prose/transform'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\nimport { hardbreakSchema } from '../node'\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) return\n\n const [tr] = trs\n if (!tr) return\n\n const [step] = tr.steps\n\n const isInsertHr = tr.getMeta('hardbreak')\n if (isInsertHr) {\n if (!(step instanceof ReplaceStep)) return\n\n const { from } = step as unknown as { from: number }\n return newState.tr.setNodeMarkup(\n from,\n hardbreakSchema.type(ctx),\n undefined,\n []\n )\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(\n pos,\n hardbreakSchema.type(ctx),\n undefined,\n []\n )\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","import { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $ctx, $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\n\n/// This slice contains the nodes that within which the hardbreak will be ignored.\nexport const hardbreakFilterNodes = $ctx(\n ['table', 'code_block'],\n 'hardbreakFilterNodes'\n)\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)) 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","import type { EditorView } from '@milkdown/prose/view'\n\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\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) return\n\n const getId = ctx.get(headingIdGenerator.key)\n const tr = view.state.tr.setMeta('addToHistory', false)\n\n let found = false\n const idMap: Record<string, number> = {}\n\n view.state.doc.descendants((node, pos) => {\n if (node.type === headingSchema.type(ctx)) {\n if (node.textContent.trim().length === 0) return\n\n const attrs = node.attrs\n let id = getId(node)\n if (idMap[id]) {\n idMap[id]! += 1\n id += `-#${idMap[id]}`\n } else {\n idMap[id] = 1\n }\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) view.dispatch(tr)\n }\n\n return new Plugin({\n key: headingIdPluginKey,\n view: (view) => {\n updateId(view)\n\n return {\n update: (view, prevState) => {\n if (view.state.doc.eq(prevState.doc)) return\n updateId(view)\n },\n }\n },\n })\n})\n\nwithMeta(syncHeadingIdPlugin, {\n displayName: 'Prose<syncHeadingIdPlugin>',\n group: 'Prose',\n})\n","import type { Node } from '@milkdown/prose/model'\nimport type { EditorState, Transaction } from '@milkdown/prose/state'\n\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport { $prose } from '@milkdown/utils'\n\nimport { withMeta } from '../__internal__'\nimport { bulletListSchema } from '../node'\nimport { listItemSchema } from '../node/list-item'\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((ctx) => {\n const syncOrderLabel = (\n transactions: readonly Transaction[],\n _oldState: EditorState,\n newState: EditorState\n ) => {\n // Skip if composing or not editable\n if (\n !newState.selection ||\n transactions.some(\n (tr) => tr.getMeta('addToHistory') === false || !tr.isGeneric\n )\n )\n return null\n\n const orderedListType = orderedListSchema.type(ctx)\n const bulletListType = bulletListSchema.type(ctx)\n const listItemType = listItemSchema.type(ctx)\n\n const handleNodeItem = (\n attrs: Record<string, any>,\n index: number\n ): 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 = newState.tr\n let needDispatch = false\n\n newState.doc.descendants(\n (node: Node, pos: number, parent: Node | null, index: number) => {\n if (node.type === bulletListType) {\n const base = node.maybeChild(0)\n if (\n base?.type === listItemType &&\n base.attrs.listType === 'ordered'\n ) {\n needDispatch = true\n tr.setNodeMarkup(pos, orderedListType, { spread: 'true' })\n\n node.descendants(\n (\n child: Node,\n pos: number,\n _parent: Node | null,\n index: number\n ) => {\n if (child.type === listItemType) {\n const attrs = { ...child.attrs }\n const changed = handleNodeItem(attrs, index)\n if (changed) tr = tr.setNodeMarkup(pos, undefined, attrs)\n }\n return false\n }\n )\n }\n } else if (\n node.type === listItemType &&\n parent?.type === orderedListType\n ) {\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) changed = handleNodeItem(attrs, index)\n\n if (changed) {\n tr = tr.setNodeMarkup(pos, undefined, attrs)\n needDispatch = true\n }\n }\n }\n )\n\n return needDispatch ? tr.setMeta('addToHistory', false) : null\n }\n\n return new Plugin({\n key: new PluginKey('MILKDOWN_KEEP_LIST_ORDER'),\n appendTransaction: syncOrderLabel,\n })\n})\n\nwithMeta(syncListOrderPlugin, {\n displayName: 'Prose<syncListOrderPlugin>',\n group: 'Prose',\n})\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport {\n hardbreakClearMarkPlugin,\n hardbreakFilterNodes,\n hardbreakFilterPlugin,\n inlineNodesCursorPlugin,\n remarkAddOrderInListPlugin,\n remarkHtmlTransformer,\n remarkInlineLinkPlugin,\n remarkLineBreak,\n remarkMarker,\n remarkPreserveEmptyLinePlugin,\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 remarkPreserveEmptyLinePlugin,\n\n syncHeadingIdPlugin,\n syncListOrderPlugin,\n].flat()\n","import type { MilkdownPlugin } from '@milkdown/ctx'\n\nimport {\n commands,\n inputRules,\n keymap,\n markInputRules,\n plugins,\n schema,\n} from './composed'\n\nexport * from './node'\nexport * from './mark'\nexport * from './plugin'\nexport * from './composed'\nexport * from './commands'\n\n/// The commonmark preset, includes all the plugins.\nexport const commonmark: MilkdownPlugin[] = [\n schema,\n inputRules,\n markInputRules,\n commands,\n keymap,\n plugins,\n].flat()\n"],"names":["commands","shouldPreserveEmptyLine","inlineNodesCursorPlugin","view","tr","pos","index"],"mappings":"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"}
|