UNPKG

@mdxeditor/editor

Version:

React component for rich text markdown editing

44 lines (43 loc) 1.61 kB
import { $isListItemNode, $isListNode } from "@lexical/list"; import { $isTextNode, $isLineBreakNode, $isElementNode, $isDecoratorNode } from "lexical"; const LexicalListItemVisitor = { testLexicalNode: $isListItemNode, visitLexicalNode: ({ lexicalNode, mdastParent, actions }) => { const children = lexicalNode.getChildren(); const firstChild = children[0]; if (children.length === 1 && $isListNode(firstChild)) { const prevListItemNode = mdastParent.children.at(-1); if (!prevListItemNode) { actions.visitChildren(firstChild, mdastParent); } else { actions.visitChildren(lexicalNode, prevListItemNode); } } else { const parentList = lexicalNode.getParent(); const listItem = actions.appendToParent(mdastParent, { type: "listItem", checked: parentList.getListType() === "check" ? Boolean(lexicalNode.getChecked()) : void 0, spread: false, children: [] }); let surroundingParagraph = null; for (const child of lexicalNode.getChildren()) { if ($isTextNode(child) || $isLineBreakNode(child) || child.isInline() && ($isElementNode(child) || $isDecoratorNode(child))) { if (!surroundingParagraph) { surroundingParagraph = actions.appendToParent(listItem, { type: "paragraph", children: [] }); } actions.visit(child, surroundingParagraph); } else { surroundingParagraph = null; actions.visit(child, listItem); } } } } }; export { LexicalListItemVisitor };