An Obsidian callout, enabled with extension: [ofm_callouts: true].
The type is normalized (My Type becomes my-type). Metadata preserves text
after |. The optional first child is a MDEx.CalloutTitle; remaining children
form the body. fold is :none, :expanded (+), or :collapsed (-).
HTML exposes these fields as data-callout, data-callout-metadata, and
data-callout-fold. Folding needs application CSS/JavaScript. Slack and Delta
flatten the explicit title and body, without fold state or metadata.
Summary
Types
@type t() :: %MDEx.Callout{ callout_type: String.t(), fold: :none | :expanded | :collapsed, metadata: String.t() | nil, nodes: [MDEx.Document.md_node()], sourcepos: term() }