diff --git a/packages/blocks-editor/src/Editor/MarkdownTransformers.ts b/packages/blocks-editor/src/Editor/MarkdownTransformers.ts index 50eadc1de..be1bc5d6c 100644 --- a/packages/blocks-editor/src/Editor/MarkdownTransformers.ts +++ b/packages/blocks-editor/src/Editor/MarkdownTransformers.ts @@ -1,8 +1,42 @@ -import { CHECK_LIST, ELEMENT_TRANSFORMERS, TEXT_FORMAT_TRANSFORMERS, TEXT_MATCH_TRANSFORMERS } from '@lexical/markdown' +import { + CHECK_LIST, + ELEMENT_TRANSFORMERS, + ElementTransformer, + TEXT_FORMAT_TRANSFORMERS, + TEXT_MATCH_TRANSFORMERS, +} from '@lexical/markdown' + +import { + HorizontalRuleNode, + $createHorizontalRuleNode, + $isHorizontalRuleNode, +} from '@lexical/react/LexicalHorizontalRuleNode' +import { LexicalNode } from 'lexical' + +const HorizontalRule: ElementTransformer = { + dependencies: [HorizontalRuleNode], + export: (node: LexicalNode) => { + return $isHorizontalRuleNode(node) ? '***' : null + }, + regExp: /^(---|\*\*\*|___)\s?$/, + replace: (parentNode, _1, _2, isImport) => { + const line = $createHorizontalRuleNode() + + if (isImport || parentNode.getNextSibling() != null) { + parentNode.replace(line) + } else { + parentNode.insertBefore(line) + } + + line.selectNext() + }, + type: 'element', +} export const MarkdownTransformers = [ CHECK_LIST, ...ELEMENT_TRANSFORMERS, ...TEXT_FORMAT_TRANSFORMERS, ...TEXT_MATCH_TRANSFORMERS, + HorizontalRule, ]