@lexical/mdast
Interfaces
Blockquote
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:514
Markdown block quote.
Extends
Properties
children
children: (
BlockContent|DefinitionContent)[]
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:522
Children of block quote.
Overrides
data?
optionaldata?:BlockquoteData
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:526
Data associated with the mdast block quote.
Overrides
position?
optionalposition?:Position
Defined in: node_modules/.pnpm/@types+unist@3.0.3/node_modules/@types/unist/index.d.ts:103
Position of a node in a source document.
Nodes that are generated (not in the original source document) must not have a position.
Inherited from
type
type:
"blockquote"
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:518
Node type of mdast block quote.
Overrides
CompiledMdast
Defined in: packages/lexical-mdast/src/types.ts:192
Experimental
The compiled registry produced from MdastConfig at editor build time and consumed by the importer, exporter, and shortcut scanner.
Properties
exportHandlers
exportHandlers:
Map<string,MdastExportHandler<LexicalNode>>
Defined in: packages/lexical-mdast/src/types.ts:194
Experimental
importHandlers
importHandlers:
Map<string,MdastImportHandler<MdastNode>>
Defined in: packages/lexical-mdast/src/types.ts:193
Experimental
inlineShortcutTriggers
inlineShortcutTriggers:
Set<string>
Defined in: packages/lexical-mdast/src/types.ts:201
Experimental
Characters that can close an inline construct and trigger a re-scan.
inlineShortcutTypes
inlineShortcutTypes:
Set<string>
Defined in: packages/lexical-mdast/src/types.ts:199
Experimental
mdast inline types eligible for streaming shortcut materialization.
mdastExtensions
mdastExtensions:
Extension[]
Defined in: packages/lexical-mdast/src/types.ts:196
Experimental
micromarkExtensions
micromarkExtensions:
Extension[]
Defined in: packages/lexical-mdast/src/types.ts:195
Experimental
toMarkdownExtensions
toMarkdownExtensions:
Options[]
Defined in: packages/lexical-mdast/src/types.ts:197
Experimental
FootnoteDefinition
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:650
Markdown GFM footnote definition.
Extends
MdastParent.Association
Properties
children
children: (
BlockContent|DefinitionContent)[]
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:658
Children of GFM footnote definition.
Overrides
data?
optionaldata?:FootnoteDefinitionData
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:662
Data associated with the mdast GFM footnote definition.
Overrides
identifier
identifier:
string
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:71
Relation of association.
identifier is a source value: character escapes and character
references are not parsed.
It can match another node.
Its value must be normalized.
To normalize a value, collapse markdown whitespace ([\t\n\r ]+) to a space,
trim the optional initial and/or final space, and perform Unicode-aware
case-folding.
Inherited from
Association.identifier
label?
optionallabel?:string|null
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:82
Relation of association, in parsed form.
label is a string value: it works just like title on Link
or a lang on Code: character escapes and character references
are parsed.
It can match another node.
Inherited from
Association.label
position?
optionalposition?:Position
Defined in: node_modules/.pnpm/@types+unist@3.0.3/node_modules/@types/unist/index.d.ts:103
Position of a node in a source document.
Nodes that are generated (not in the original source document) must not have a position.
Inherited from
type
type:
"footnoteDefinition"
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:654
Node type of mdast GFM footnote definition.
Overrides
FootnoteReference
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:673
Markdown GFM footnote reference.
Extends
Association.Node
Properties
data?
optionaldata?:FootnoteReferenceData
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:681
Data associated with the mdast GFM footnote reference.
Overrides
Node.data
identifier
identifier:
string
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:71
Relation of association.
identifier is a source value: character escapes and character
references are not parsed.
It can match another node.
Its value must be normalized.
To normalize a value, collapse markdown whitespace ([\t\n\r ]+) to a space,
trim the optional initial and/or final space, and perform Unicode-aware
case-folding.
Inherited from
Association.identifier
label?
optionallabel?:string|null
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:82
Relation of association, in parsed form.
label is a string value: it works just like title on Link
or a lang on Code: character escapes and character references
are parsed.
It can match another node.
Inherited from
Association.label
position?
optionalposition?:Position
Defined in: node_modules/.pnpm/@types+unist@3.0.3/node_modules/@types/unist/index.d.ts:103
Position of a node in a source document.
Nodes that are generated (not in the original source document) must not have a position.
Inherited from
Node.position
type
type:
"footnoteReference"
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:677
Node type of mdast GFM footnote reference.
Overrides
Node.type
Html
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:721
Markdown HTML.
Extends
Literal
Properties
data?
optionaldata?:HtmlData
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:729
Data associated with the mdast HTML.
Overrides
Literal.data
position?
optionalposition?:Position
Defined in: node_modules/.pnpm/@types+unist@3.0.3/node_modules/@types/unist/index.d.ts:103
Position of a node in a source document.
Nodes that are generated (not in the original source document) must not have a position.
Inherited from
Literal.position
type
type:
"html"
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:725
Node type of mdast HTML.
Overrides
Literal.type
value
value:
string
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:472
Plain-text value.
Inherited from
Literal.value
MdastConfig
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:100
Experimental
Configuration for the core MdastImportExtension registry. Feature
extensions contribute to these arrays via configExtension(MdastImportExtension, …); you rarely need to set them by hand. The shape mirrors
@lexical/html's DOMImportExtension config: raw contribution arrays that
mergeConfig concatenates and build compiles.
Properties
exportRules
readonlyexportRules: readonlyMdastExportRule[]
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:104
Experimental
Lexical getType() -> mdast mapping rules used while exporting.
importRules
readonlyimportRules: readonlyMdastImportRule[]
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:102
Experimental
mdast type -> Lexical mapping rules used while importing.
inlineShortcutTriggers
readonlyinlineShortcutTriggers: readonlystring[]
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:123
Experimental
Characters that can close an inline construct; typing one triggers an
inline re-scan. Extensions add their construct's closing character here
(e.g. '=' for ==highlight==).
inlineShortcutTypes
readonlyinlineShortcutTypes: readonlystring[]
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:117
Experimental
mdast inline types that the streaming shortcuts may materialize when
their closing delimiter is typed. Extensions that contribute a new inline
construct add its type here (with a matching import rule) so shortcuts
stay in lock-step with the parser.
mdastExtensions
readonlymdastExtensions: readonlyExtension[]
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:108
Experimental
mdast-util-from-markdown extensions (tokens -> mdast).
micromarkExtensions
readonlymicromarkExtensions: readonlyExtension[]
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:106
Experimental
micromark syntax extensions (the tokenizer layer).
toMarkdownExtensions
readonlytoMarkdownExtensions: readonlyOptions[]
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:110
Experimental
mdast-util-to-markdown extensions (mdast -> Markdown string).
MdastExportContext
Defined in: packages/lexical-mdast/src/types.ts:119
Experimental
The context passed to MdastExportHandlers while a Lexical tree is converted back into an mdast tree.
Methods
exportBlocks()
exportBlocks(
source):BlockContent[]
Defined in: packages/lexical-mdast/src/types.ts:141
Experimental
Convert the inline children of source (an element or an explicit node
list, as in MdastExportContext.exportChildren) into one or more
mdast block nodes (paragraphs), splitting on hard line breaks. Used by
containers such as block quotes and list items whose Lexical children
are inline but whose mdast children must be block-level.
Parameters
source
ElementNode | readonly LexicalNode[]
Returns
exportChildren()
exportChildren(
source):MdastNode[]
Defined in: packages/lexical-mdast/src/types.ts:127
Experimental
Convert the children of source into mdast nodes by dispatching each
child through the registered export handlers. source is an element
(its getChildren() are exported) or an explicit list of nodes — e.g.
a DOMExportOutput.$getChildNodes() override, which is defined as
replacing node.getChildren() for export.
Parameters
source
ElementNode | readonly LexicalNode[]
Returns
exportInline()
exportInline(
source):PhrasingContent[]
Defined in: packages/lexical-mdast/src/types.ts:133
Experimental
Convert the inline children of source (an element or an explicit node
list, as in MdastExportContext.exportChildren) into mdast
phrasing content, grouping bare line breaks as mdast break nodes.
Parameters
source
ElementNode | readonly LexicalNode[]
Returns
isIncluded()
isIncluded(
node):boolean
Defined in: packages/lexical-mdast/src/types.ts:150
Experimental
Whether node belongs in the current export: always true for a
whole-document export; during a selection export, true when the node
or any descendant is selected. The exportChildren/exportInline/
exportBlocks walks apply this automatically — handlers only need it
when they iterate children manually (e.g. list items, table rows) to
skip structural children the selection does not reach.
Parameters
node
Returns
boolean
MdastExportExtensionOutput
Defined in: packages/lexical-mdast/src/MdastExportExtension.ts:24
Experimental
The runtime API exposed by MdastExportExtension. Obtain it inside a
read/update with $getExtensionOutput(MdastExportExtension), or use the
$convertToMarkdownString shorthand.
Methods
$convertSelectionToMarkdownString()
$convertSelectionToMarkdownString(
selection?):string
Defined in: packages/lexical-mdast/src/MdastExportExtension.ts:50
Experimental
Serializes only the selected content (defaulting to the current
selection) to a Markdown string: leaves outside the selection are
skipped, partially selected text nodes are sliced to the selected
range, and elements are kept when they or any descendant are selected.
Returns '' for a null or collapsed selection. Must be called inside
an editor.read() or editor.update(). The export runs under
RenderContextMarkdownSelection carrying the selection, so
contributed export rules and to-markdown handlers can scope their
output to a selection export.
Parameters
selection?
BaseSelection | null
Returns
string
$convertToMarkdownString()
$convertToMarkdownString(
node?):string
Defined in: packages/lexical-mdast/src/MdastExportExtension.ts:29
Experimental
Serializes the editor root (or node) to a Markdown string. Must be
called inside an editor.read() or editor.update().
Parameters
node?
Returns
string
$convertToMdast()
$convertToMdast(
node?):Root
Defined in: packages/lexical-mdast/src/MdastExportExtension.ts:38
Experimental
Exports the editor root (or node) to an mdast Root tree without
serializing it, for interop with the unified/remark ecosystem (remark
plugins, remark-rehype, tree diffing, ...). Must be called inside an
editor.read() or editor.update(). Syntax preserved from import
rides along as data fields on the nodes, mdast's sanctioned
extension point.
Parameters
node?
Returns
Root
MdastExportRule
Defined in: packages/lexical-mdast/src/types.ts:180
Experimental
A single export mapping: which Lexical node getType() it handles and how.
Properties
$export
$export:
MdastExportHandler<any>
Defined in: packages/lexical-mdast/src/types.ts:184
Experimental
type
type:
string
Defined in: packages/lexical-mdast/src/types.ts:182
Experimental
The Lexical node getType() this rule handles (e.g. 'heading').
MdastImportContext
Defined in: packages/lexical-mdast/src/types.ts:66
Experimental
The context passed to MdastImportHandlers while an mdast tree is being walked and converted into Lexical nodes.
Properties
format
readonlyformat:number
Defined in: packages/lexical-mdast/src/types.ts:73
Experimental
The accumulated text-format bitmask for the current inline position
(e.g. inside strong > emphasis this carries the bold + italic bits).
Block handlers can ignore this; inline handlers should pass it along to
createText and the recursion helpers.
source
readonlysource:string
Defined in: packages/lexical-mdast/src/types.ts:80
Experimental
The original Markdown source being imported, or '' when importing a
pre-parsed mdast tree. Handlers slice this by node.position to recover
the literal syntax (list marker, code fence, hard-break style) for
round-trip preservation.
Methods
createText()
createText(
value,format?):LexicalNode[]
Defined in: packages/lexical-mdast/src/types.ts:94
Experimental
Create text nodes for value with the current (or supplied) format
bitmask; \n becomes a LineBreakNode and \t a TabNode.
Parameters
value
string
format?
number
Returns
getDefinition()
getDefinition(
identifier): {title?:string|null;url:string; } |undefined
Defined in: packages/lexical-mdast/src/types.ts:99
Experimental
Resolves a link/image reference identifier (already normalized by
mdast) against the document's definitions ([id]: url "title").
Parameters
identifier
string
Returns
{ title?: string | null; url: string; } | undefined
importChildren()
importChildren(
parent,format?):LexicalNode[]
Defined in: packages/lexical-mdast/src/types.ts:85
Experimental
Convert every child of parent into Lexical nodes, optionally layering an
additional text-format bitmask on top of the current format.
Parameters
parent
format?
number
Returns
importNode()
importNode(
node,format?):LexicalNode[]
Defined in: packages/lexical-mdast/src/types.ts:89
Experimental
Convert a single mdast node (and its descendants) into Lexical nodes.
Parameters
node
format?
number
Returns
MdastImportExtensionOutput
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:134
Experimental
The runtime API exposed by MdastImportExtension. Obtain it inside a
read/update with $getExtensionOutput(MdastImportExtension), or use the
$convertFromMarkdownString shorthand. Serialization lives in
MdastExportExtension so import-only editors don't bundle the
serializer (mdast-util-to-markdown).
Methods
$convertFromMarkdownString()
$convertFromMarkdownString(
markdown,node?):void
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:139
Experimental
Parses markdown with micromark/mdast and replaces the contents of the
editor root (or node). Must be called inside an editor.update().
Parameters
markdown
string
node?
Returns
void
$convertFromMdast()
$convertFromMdast(
tree,node?):void
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:147
Experimental
Imports an already-parsed mdast Root tree (e.g. produced or
transformed by unified/remark tooling) and replaces the contents of the
editor root (or node). Must be called inside an editor.update().
Source-based syntax preservation does not apply (there is no source
text to recover literal markers from).
Parameters
tree
Root
node?
Returns
void
$generateNodesFromMarkdownString()
$generateNodesFromMarkdownString(
markdown):LexicalNode[]
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:154
Experimental
Parses markdown and returns the resulting block-level nodes as a
detached array, without modifying the document or the selection — e.g.
for insertion at an arbitrary position via selection.insertNodes().
Must be called inside an editor.update().
Parameters
markdown
string
Returns
$generateNodesFromMdast()
$generateNodesFromMdast(
tree):LexicalNode[]
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:162
Experimental
Walks an already-parsed mdast Root tree and returns the resulting
block-level nodes as a detached array, without modifying the document
or the selection. Must be called inside an editor.update(). As with
MdastImportExtensionOutput.$convertFromMdast, source-based
syntax preservation does not apply.
Parameters
tree
Root
Returns
MdastImportRule
Defined in: packages/lexical-mdast/src/types.ts:169
Experimental
A single import mapping: which mdast node type it handles and how. The
unit an extension contributes (alongside the micromark/mdast extensions that
tokenize the construct) to MdastImportExtension's importRules config.
Properties
$import
$import:
MdastImportHandler<any>
Defined in: packages/lexical-mdast/src/types.ts:173
Experimental
type
type:
string
Defined in: packages/lexical-mdast/src/types.ts:171
Experimental
The mdast node type this rule handles (e.g. 'heading').
MdastParent
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:502
Abstract mdast node that contains other mdast nodes (children).
This interface is supposed to be extended if you make custom mdast nodes.
For a union of all registered mdast parents, see Parents.
Extends
Node
Extended by
Properties
children
children:
RootContent[]
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:506
List of children.
data?
optionaldata?:Data
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:492
Info from the ecosystem.
Inherited from
Node.data
position?
optionalposition?:Position
Defined in: node_modules/.pnpm/@types+unist@3.0.3/node_modules/@types/unist/index.d.ts:103
Position of a node in a source document.
Nodes that are generated (not in the original source document) must not have a position.
Inherited from
Node.position
type
type:
string
Defined in: node_modules/.pnpm/@types+unist@3.0.3/node_modules/@types/unist/index.d.ts:90
Node type.
Inherited from
Node.type
MdastShortcutsConfig
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:542
Properties
disabled
disabled:
boolean
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:544
Disable the streaming shortcuts without removing the extension.
Paragraph
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:923
Markdown paragraph.
Extends
Properties
children
children:
PhrasingContent[]
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:931
Children of paragraph.
Overrides
data?
optionaldata?:ParagraphData
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:935
Data associated with the mdast paragraph.
Overrides
position?
optionalposition?:Position
Defined in: node_modules/.pnpm/@types+unist@3.0.3/node_modules/@types/unist/index.d.ts:103
Position of a node in a source document.
Nodes that are generated (not in the original source document) must not have a position.
Inherited from
type
type:
"paragraph"
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:927
Node type of mdast paragraph.
Overrides
Type Aliases
BlockContent
BlockContent =
BlockContentMap[keyofBlockContentMap]
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:141
Union of registered mdast nodes that can occur where block content is expected.
To register custom mdast nodes, add them to BlockContentMap. They will be automatically added here.
MdastExportHandler
MdastExportHandler<
T> = (node,context) =>MdastNode|MdastNode[] |null
Defined in: packages/lexical-mdast/src/types.ts:158
Experimental
Converts a Lexical node into one or more mdast nodes. Returning null
defers to the next registered handler.
Type Parameters
T
T extends LexicalNode = LexicalNode
Parameters
node
T
context
Returns
MdastNode | MdastNode[] | null
MdastImportHandler
MdastImportHandler<
T> = (node,context) =>LexicalNode|LexicalNode[] |null
Defined in: packages/lexical-mdast/src/types.ts:109
Experimental
Converts an mdast node of a particular type into one or more Lexical
nodes. Returning null defers to the next registered handler.
Type Parameters
T
T extends MdastNode = MdastNode
Parameters
node
T
context
Returns
LexicalNode | LexicalNode[] | null
MdastNode
MdastNode =
Root|RootContent
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:439
Union of registered mdast nodes.
To register custom mdast nodes, add them to RootContentMap and other places where relevant. They will be automatically added here.
PhrasingContent
PhrasingContent =
PhrasingContentMap[keyofPhrasingContentMap]
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:267
Union of registered mdast nodes that can occur where phrasing content is expected.
To register custom mdast nodes, add them to PhrasingContentMap. They will be automatically added here.
RawHtmlBlockPart
RawHtmlBlockPart =
string|PhrasingContent[] | {flow:BlockContent[]; }
Defined in: packages/lexical-mdast/src/MdastHtmlExtension.ts:651
Experimental
One piece of a rawHtmlBlock:
- a
stringis raw HTML, emitted verbatim, - a
PhrasingContent[]is Markdown phrasing embedded in the raw stream (a<summary>line), {flow}is a run of Markdown blocks, joined with blank lines.
RootContent
RootContent =
RootContentMap[keyofRootContentMap]
Defined in: node_modules/.pnpm/@types+mdast@4.0.4/node_modules/@types/mdast/index.d.ts:307
Union of registered mdast nodes that can occur in Root.
To register custom mdast nodes, add them to RootContentMap. They will be automatically added here.
Variables
$exportViaDOM
const$exportViaDOM:MdastExportHandler
Defined in: packages/lexical-mdast/src/MdastHtmlExtension.ts:785
Experimental
A fully generic Markdown export for an HTML-encoded construct: renders the
node's own exportDOM shell through the editor's @lexical/html render
config, substitutes the node's children (at the shell's children position)
and its named slots (at their data-lexical-slot wrappers — the same
convention exportDOM implementations already use for HTML) with embedded
Markdown, and serializes via rawHtmlBlock. Register it directly:
configExtension(MdastImportExtension, {
exportRules: [{$export: $exportViaDOM, type: 'collapsible'}],
})
exportDOM is then the single source of truth for the HTML encoding —
whatever slot content the shell serialized for the HTML clipboard is
replaced with Markdown here, and the data-lexical-slot markers are
removed. Children and shadow-root slot values embed as flow blocks
(blank-line separated); inline children and bare-block slot values embed
as phrasing on their own line, the GitHub <summary> idiom.
ImportContextMarkdown
constImportContextMarkdown:ImportStateConfig<boolean>
Defined in: packages/lexical-mdast/src/MdastImport.ts:45
Experimental
Import context state that is true for the whole of a Markdown/mdast
import: inside every MdastImportHandler and inside any DOM-rule
session it opens (raw HTML routed through the DOM import rules inherits
the surrounding import context), so a DOM rule can distinguish a Markdown
import from an HTML paste of the same markup (read it with ctx.get, or
$getImportContextValue from an mdast handler).
MdastAutolinkLiteralExtension
constMdastAutolinkLiteralExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/AutolinkLiteral",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:422
Experimental
Opt-in: GFM literal autolinks — bare https://… / www.… URLs and email
addresses in prose become links, the way GitHub renders them. This is a GFM
extension rather than CommonMark, so it is not part of
MdastCommonMarkExtension; add it alongside to opt in:
dependencies: [MdastCommonMarkExtension, MdastAutolinkLiteralExtension]
MdastBlockquoteExtension
constMdastBlockquoteExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/Blockquote",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:310
Experimental
Block quotes (> …), shipping QuoteNode. For blockquotes that hold
block-level children (nested lists, code, quotes) with full fidelity, add
MdastShadowRootQuoteExtension.
MdastCodeExtension
constMdastCodeExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/Code",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:376
Experimental
Fenced and indented code blocks, shipping CodeNode.
MdastCommonMarkExtension
constMdastCommonMarkExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/CommonMark",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:531
Experimental
Convenience bundle of every CommonMark construct: headings, block quotes,
lists, code blocks, links, and thematic breaks. GFM features
(strikethrough, task lists, literal autolinks, tables) are bundled
separately as MdastGfmExtension, and MdastExportExtension (or the
MdastExtension bundle) adds serialization back to Markdown.
MdastExportExtension
constMdastExportExtension:LexicalExtension<Record<never,never>,"@lexical/mdast/Export",MdastExportExtensionOutput,void>
Defined in: packages/lexical-mdast/src/MdastExportExtension.ts:67
Experimental
Markdown serialization for @lexical/mdast. Import
(MdastImportExtension and the feature extensions that contribute to it) and
export are separate extensions so that editors which only parse Markdown
— never serialize back — don't bundle mdast-util-to-markdown.
The export rules themselves are contributed by the same feature extensions that contribute import rules; this extension compiles the shared registry into a serializer:
dependencies: [MdastCommonMarkExtension, MdastExportExtension]
MdastExtension
constMdastExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/Mdast",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastExtension.ts:27
Experimental
Convenience bundle of MdastImportExtension and MdastExportExtension: Markdown parsing and serialization.
Depend on this when you want both directions without thinking about it:
dependencies: [MdastCommonMarkExtension, MdastExtension]
Editors that never serialize back to Markdown can skip it (feature
extensions already pull in MdastImportExtension) and avoid
bundling the serializer (mdast-util-to-markdown).
MdastGfmExtension
constMdastGfmExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/Gfm",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastGfmExtension.ts:30
Experimental
Convenience bundle of every GFM extension — strikethrough, task lists,
literal autolinks, and tables — mirroring the scope of
micromark-extension-gfm. Combine with MdastCommonMarkExtension for
GitHub-flavored Markdown:
dependencies: [MdastCommonMarkExtension, MdastGfmExtension]
Each member is also usable individually when you only want some of GFM (e.g. task lists without tables).
MdastHeadingExtension
constMdastHeadingExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/Heading",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:293
Experimental
ATX (# …) and setext headings, shipping HeadingNode.
MdastHorizontalRuleExtension
constMdastHorizontalRuleExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/HorizontalRule",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:493
Experimental
Thematic breaks (---, ***, ___), mapped to
HorizontalRuleExtension's HorizontalRuleNode. The original marker
character is preserved on round-trip.
MdastHtmlExtension
constMdastHtmlExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/Html",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastHtmlExtension.ts:999
Experimental
Opt-in: connects raw HTML in Markdown to the editor's @lexical/html
machinery in both directions, instead of treating it as literal text.
Import routes through the DOMImportExtension rule registry:
- a from-markdown transform reassembles raw HTML into single nodes —
block tag sequences (CommonMark splits them on blank lines) become
htmlBlock, inline tag runs inside a paragraph (a <u>b</u> c) becomehtmlInline— tag-balance counting so nesting and interleaved Markdown work, and unclosed tags stay literal text, - the import rules parse the HTML with
DOMParserand hand it to$generateNodesFromDOM, substituting the pre-imported Markdown — including the Markdown text embedded between block tags, GitHub-style — back in via placeholder elements that inherit the surrounding formatting context (<strong>,style="color: …").
Export handlers build the same shape with rawHtmlBlock: raw tags around embedded Markdown phrasing and blocks, serialized by the handler this extension registers.
Anything with a registered DOM import rule then works from Markdown with no separate mdast importer — a custom node contributes its DOM rule (serving Markdown import and HTML paste alike) and a one-template export.
Not part of MdastCommonMarkExtension because it pulls in the
@lexical/html import machinery (and DOMParser, so it requires a DOM);
add it alongside to opt in:
dependencies: [MdastCommonMarkExtension, MdastHtmlExtension]
MdastImportExtension
constMdastImportExtension:LexicalExtension<MdastConfig,"@lexical/mdast/Import",MdastImportExtensionOutput,void>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:216
Experimental
The core Markdown registry for @lexical/mdast, modeled on
@lexical/html's DOMImportExtension. It assembles the import/export rules
and micromark/mdast extensions contributed by feature extensions into a
compiled registry, and exposes Markdown import through its
MdastImportExtensionOutput. Markdown export is provided separately by
MdastExportExtension, so editors that never serialize back to Markdown
don't bundle the serializer.
You normally do not depend on this directly — depend on a feature extension (e.g. MdastCommonMarkExtension) which contributes its rules here and ships the nodes those rules need.
Example
import {$convertFromMarkdownString, MdastCommonMarkExtension}
from '@lexical/mdast';
import {buildEditorFromExtensions} from '@lexical/extension';
import {defineExtension} from 'lexical';
const editor = buildEditorFromExtensions(
defineExtension({dependencies: [MdastCommonMarkExtension], name: '[root]'}),
);
editor.update(() => $convertFromMarkdownString('# Hi'));
MdastLinkExtension
constMdastLinkExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/Link",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:395
Experimental
Inline links, CommonMark autolinks (<https://…>), and CommonMark
reference links ([text][id] resolved against [id]: url definitions),
shipping LinkNode. Reference links are resolved to their target on
import and serialize back as inline links. For GFM literal autolinks
(bare https://… in prose) add MdastAutolinkLiteralExtension.
MdastListExtension
constMdastListExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/List",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:338
Experimental
Ordered and unordered lists, shipping ListNode and
ListItemNode. For GFM task lists (- [x] …) add
MdastTaskListExtension.
MdastRichTextExtension
constMdastRichTextExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/RichText",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:327
Experimental
Convenience bundle of MdastHeadingExtension and
MdastBlockquoteExtension — the constructs backed by
@lexical/rich-text nodes.
MdastShadowRootQuoteExtension
constMdastShadowRootQuoteExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/ShadowRootQuote",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:449
Experimental
Opt-in: import Markdown blockquotes as shadow root QuoteNodes
($createQuoteNode({shadowRoot: true})), which hold block-level children
like a table cell. Structured blockquotes — multiple paragraphs, nested
lists, code blocks, nested quotes — then round-trip with full fidelity
instead of being reassembled from inline content.
Not part of MdastCommonMarkExtension; add it alongside to opt in:
dependencies: [MdastCommonMarkExtension, MdastShadowRootQuoteExtension]
The quote export handler supports both forms per node, so legacy quotes
(e.g. created by the > shortcut) and shadow root quotes can coexist.
MdastShortcutsExtension
constMdastShortcutsExtension:LexicalExtension<MdastShortcutsConfig,"@lexical/mdast/Shortcuts",NamedSignalsOutput<MdastShortcutsConfig>,unknown>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:557
Experimental
Streaming Markdown shortcuts (block markers convert on space, fenced code on
Enter, inline constructs on their closing delimiter). Each keystroke is fed
back through micromark, so shortcut recognition uses the same grammar and
the same enabled extensions as import: shortcuts exist for exactly the
feature extensions in the editor and no others. Combine with
MdastCommonMarkExtension (and MdastGfmExtension) — this extension
only wires up the behavior, it does not pull in any grammar of its own.
MdastStrikethroughExtension
constMdastStrikethroughExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/Strikethrough",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:509
Experimental
GFM ~~strikethrough~~, mapped to the Lexical strikethrough text format.
Needs no extra nodes (the core text handlers carry the format bit).
MdastTableExtension
constMdastTableExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/Table",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastTableExtension.ts:132
Experimental
GFM tables, mapped to @lexical/table nodes. Opt-in (not part of
MdastCommonMarkExtension) because it pulls in the @lexical/table
nodes it ships. The first table row is treated as the header row in both
directions.
Example
import {MdastShortcutsExtension, MdastTableExtension} from '@lexical/mdast';
import {buildEditorFromExtensions} from '@lexical/extension';
import {defineExtension} from 'lexical';
const editor = buildEditorFromExtensions(
defineExtension({
dependencies: [MdastShortcutsExtension, MdastTableExtension],
name: '[root]',
}),
);
MdastTaskListExtension
constMdastTaskListExtension:LexicalExtension<ExtensionConfigBase,"@lexical/mdast/TaskList",unknown,unknown>
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:360
Experimental
Opt-in: GFM task lists (- [x] done), layered on
MdastListExtension. Contributes the gfmTaskListItem grammar; the
list import/export handlers already understand checked, and the typing
shortcut ([ ] / [x] in a list item) is enabled by the grammar's
presence in the registry.
RenderContextMarkdownExport
constRenderContextMarkdownExport:RenderStateConfig<boolean>
Defined in: packages/lexical-mdast/src/MdastHtmlExtension.ts:447
Experimental
Render context state that is true while $exportViaDOM renders a
node's exportDOM shell for Markdown serialization — the Markdown analog
of RenderContextExport from @lexical/html (which is set as well).
exportDOM implementations read it with $getRenderContextValue to
diverge, e.g. to leave a data-lexical-slot wrapper empty rather than
serializing slot HTML that the Markdown embedding replaces anyway.
RenderContextMarkdownSelection
constRenderContextMarkdownSelection:RenderStateConfig<BaseSelection|null>
Defined in: packages/lexical-mdast/src/MdastExport.ts:509
Render context state carrying the BaseSelection being serialized
during a selection export ($convertSelectionToMarkdownString); null
during whole-document exports. The export runs synchronously inside the
editor read, so registered export rules and contributed to-markdown
handlers can read it with $getRenderContextValue — e.g. a root
handler that appends end-of-document data (footnote definitions,
comments) can emit everything for a document export but only the
selection-referenced subset for a clipboard copy.
Functions
$convertFromMarkdownString()
$convertFromMarkdownString(
markdown,node?):void
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:583
Experimental
Shorthand for $getExtensionOutput(MdastImportExtension).$convertFromMarkdownString.
Must be called inside an editor.update(). Throws if the editor was not
built with MdastImportExtension (or an extension that depends on it).
Parameters
markdown
string
node?
Returns
void
$convertFromMdast()
$convertFromMdast(
tree,node?):void
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:600
Experimental
Shorthand for $getExtensionOutput(MdastImportExtension).$convertFromMdast.
Must be called inside an editor.update(). Throws if the editor was not
built with MdastImportExtension (or an extension that depends on
it).
Parameters
tree
Root
node?
Returns
void
$convertSelectionToMarkdownString()
$convertSelectionToMarkdownString(
selection?):string
Defined in: packages/lexical-mdast/src/MdastExportExtension.ts:119
Experimental
Shorthand for
$getExtensionOutput(MdastExportExtension).$convertSelectionToMarkdownString.
Serializes only the selected content (defaulting to the current selection)
to a Markdown string; returns '' for a null or collapsed selection.
Must be called inside an editor.read() or editor.update(). Throws if
the editor was not built with MdastExportExtension.
Parameters
selection?
BaseSelection | null
Returns
string
$convertToMarkdownString()
$convertToMarkdownString(
node?):string
Defined in: packages/lexical-mdast/src/MdastExportExtension.ts:94
Experimental
Shorthand for
$getExtensionOutput(MdastExportExtension).$convertToMarkdownString.
Must be called inside an editor.read() or editor.update(). Throws if
the editor was not built with MdastExportExtension.
Parameters
node?
Returns
string
$convertToMdast()
$convertToMdast(
node?):Root
Defined in: packages/lexical-mdast/src/MdastExportExtension.ts:106
Experimental
Shorthand for $getExtensionOutput(MdastExportExtension).$convertToMdast.
Must be called inside an editor.read() or editor.update(). Throws if
the editor was not built with MdastExportExtension.
Parameters
node?
Returns
Root
$generateNodesFromMarkdownString()
$generateNodesFromMarkdownString(
markdown):LexicalNode[]
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:613
Experimental
Shorthand for
$getExtensionOutput(MdastImportExtension).$generateNodesFromMarkdownString.
Parses markdown and returns the resulting block-level nodes as a
detached array, without modifying the document or the selection. Must be
called inside an editor.update(). Throws if the editor was not built
with MdastImportExtension (or an extension that depends on it).
Parameters
markdown
string
Returns
$generateNodesFromMdast()
$generateNodesFromMdast(
tree):LexicalNode[]
Defined in: packages/lexical-mdast/src/MdastImportExtension.ts:631
Experimental
Shorthand for
$getExtensionOutput(MdastImportExtension).$generateNodesFromMdast.
Walks an already-parsed mdast Root tree and returns the resulting
block-level nodes as a detached array, without modifying the document or
the selection. Must be called inside an editor.update(). Throws if the
editor was not built with MdastImportExtension (or an extension
that depends on it).
Parameters
tree
Root
Returns
rawHtmlBlock()
rawHtmlBlock(...
parts):HtmlBlock
Defined in: packages/lexical-mdast/src/MdastHtmlExtension.ts:680
Experimental
Builds an mdast node that serializes as raw HTML with Markdown embedded between the tags — the export counterpart of this extension's import side, so what it produces re-imports through the same rules. An export handler for an HTML-encoded construct is just a template:
const $exportCollapsible: MdastExportHandler = (node, ctx) =>
$isCollapsibleNode(node)
? rawHtmlBlock(
'<details><summary>\n',
ctx.exportInline($getSlot(node, 'summary')),
'\n</summary>\n\n',
{flow: ctx.exportChildren(node) as BlockContent[]},
'\n</details>',
)
: null;
The embedded Markdown goes through the regular to-markdown machinery (escaping, nested constructs); only the strings are emitted raw. Requires MdastHtmlExtension, which registers the serializer.
Parameters
parts
...RawHtmlBlockPart[]
Returns
HtmlBlock