/** * `@avocadostudio-ai/richtext` — the rich-text grammar and its converters. * * Two layers, and they are worth keeping straight: * * - **The grammar** (`parse.ts`) is the markdown subset an Avocado `richtext` * string is written in. It is a parser only: what a heading or a link looks * like on screen is the calling surface's business, and there are three of * those (the React renderers, the editor overlay, the Puck adapter). * - **The pivot** (`doc.ts`) is a ProseMirror document, the shape the property * panel edits natively. Every CMS converts to and from it rather than to and * from each other, so adding a fourth CMS costs one converter pair, not three. * * The package has no runtime dependencies and knows nothing about React, the * orchestrator or any CMS client — the CMS types here are structural, so a * migration script can convert a dataset without installing anything else. */ export { parseInline, parseRichText, parseRichTextBlocks, normalizeRichTextBody, resolveRichTextHeadingLevel, clampMarkdownHeadings, unescapeMarkdownText, type InlineToken, type RichTextBlock, type RichTextList, type RichTextListItem } from "./parse.ts"; export { NODE, MARK, isRichTextDoc, emptyDoc, fromMarkdown, toMarkdown, escapeMarkdownText, type RichTextDoc, type RichTextNode, type RichTextMark } from "./doc.ts"; export { deepEqual, omitDeep, mergeByIdentity, mergeRichTextDoc } from "./merge.ts"; export { fromHtml, toHtml, decodeEntities, escapeHtmlText } from "./html.ts"; export { fromPortableText, toPortableText, type PortableTextBlock, type PortableTextSpan, type PortableTextMarkDef, type ToPortableTextOptions } from "./portable-text.ts"; export { fromContentful, toContentful, type ContentfulDocument, type ContentfulNode, type ContentfulMark } from "./contentful.ts"; export { fromStrapiBlocks, toStrapiBlocks, type StrapiNode, type StrapiText } from "./strapi.ts"; export { fromStoryblok, toStoryblok, isStoryblokRichText, isEmptyRichText, type StoryblokRichText } from "./storyblok.ts";