@frontlit/text-editor 0.1.0-alpha.1 → 0.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/docs/diagnostics.ts","../src/docs/urls.ts","../src/docs/extensions.ts","../src/docs/headings.ts","../src/docs/validate.ts","../src/docs/routes.ts","../src/docs/frontmatter.ts","../src/docs/markdown.ts","../src/docs/hash.ts"],"names":["image","content","children"],"mappings":"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","file":"docs.js","sourcesContent":["/** DM-VALIDATE: shared, deterministic reports for authoring and import. */\nexport interface DocsDiagnostic {\n code: string;\n severity: \"error\" | \"warning\";\n blocksSave: boolean;\n blocksPublish: boolean;\n message: string;\n fieldPath?: string;\n file?: string;\n line?: number;\n column?: number;\n route?: string;\n documentId?: string;\n relatedFiles?: string[];\n}\n\nexport function diagnostic(\n code: string,\n message: string,\n location: Partial<DocsDiagnostic> = {},\n): DocsDiagnostic {\n return {\n code,\n message,\n severity: \"error\",\n blocksSave: true,\n blocksPublish: true,\n ...location,\n };\n}\n\nexport function sortDiagnostics(items: DocsDiagnostic[]): DocsDiagnostic[] {\n return items.sort(\n (a, b) =>\n (a.file ?? a.documentId ?? \"\").localeCompare(b.file ?? b.documentId ?? \"\") ||\n (a.line ?? 0) - (b.line ?? 0) ||\n (a.column ?? 0) - (b.column ?? 0) ||\n (a.fieldPath ?? \"\").localeCompare(b.fieldPath ?? \"\") ||\n a.code.localeCompare(b.code),\n );\n}\n\nexport class DocsContentError extends Error {\n readonly diagnostics: DocsDiagnostic[];\n constructor(diagnostics: DocsDiagnostic[]) {\n super(\"Documentation content is invalid.\");\n this.name = \"DocsContentError\";\n this.diagnostics = sortDiagnostics(diagnostics);\n }\n}\n","/** DM-VALIDATE/DM-MEDIA: syntax safety; ownership/provider checks belong to the API. */\nexport function isSafeDocsUrl(value: unknown, image = false): value is string {\n if (typeof value !== \"string\" || !value || value !== value.trim()) return false;\n // Browsers ignore control characters in protocols. Reject their encoded forms too.\n if (\n // biome-ignore lint/suspicious/noControlCharactersInRegex: Browsers ignore controls in dangerous protocols.\n /[\\u0000-\\u0020\\u007f\\\\]/.test(value) ||\n /%(?:0[0-9a-f]|1[0-9a-f]|7f|5c)/i.test(value)\n )\n return false;\n if (value.startsWith(\"//\")) return false;\n const privatePath =\n /\\/(?:attachments|private|ticket-attachments|conversation-attachments)(?:\\/|$)/i;\n const signedKey =\n /^(?:x-amz-.+|x-goog-.+|signature|sig|token|access_token|expires)$/i;\n if (/^(?:https?:|mailto:)/i.test(value)) {\n try {\n const url = new URL(value);\n if (image && url.protocol !== \"https:\") return false;\n if (url.username || url.password) return false;\n if (url.protocol === \"mailto:\") return !image && Boolean(url.pathname);\n // Known private attachment paths and expiring signed links are never docs assets.\n if (privatePath.test(decodeURIComponent(url.pathname))) return false;\n for (const key of url.searchParams.keys()) {\n if (signedKey.test(key)) return false;\n }\n return Boolean(url.hostname);\n } catch {\n return false;\n }\n }\n if (image) return false;\n // Relative Markdown paths, site paths, fragments, and query links are safe data.\n if (/^[^/?#]*:/.test(value) || /%(?:2f|3a)/i.test(value)) return false;\n try {\n const url = new URL(value, \"https://docs.invalid/\");\n return (\n !privatePath.test(decodeURIComponent(url.pathname)) &&\n ![...url.searchParams.keys()].some((key) => signedKey.test(key))\n );\n } catch {\n return false;\n }\n}\n","import { getSchema, Node, type Extensions } from \"@tiptap/core\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Image from \"@tiptap/extension-image\";\nimport Link from \"@tiptap/extension-link\";\nimport { Table, TableCell, TableHeader, TableRow } from \"@tiptap/extension-table\";\nimport { isSafeDocsUrl } from \"./urls\";\nimport type { Schema } from \"@tiptap/pm/model\";\n\n/** DM-VALIDATE: schema-only extensions; no React, upload controls, or node views. */\nexport function createDocsExtensions(): Extensions {\n return [\n StarterKit.configure({\n document: false,\n underline: false,\n link: false,\n dropcursor: false,\n gapcursor: false,\n trailingNode: false,\n }),\n Node.create({ name: \"doc\", topNode: true, content: \"block*\" }),\n Link.extend({\n addAttributes() {\n return { ...this.parent?.(), title: { default: null } };\n },\n }).configure({ openOnClick: false, isAllowedUri: (url) => isSafeDocsUrl(url) }),\n Image.configure({ allowBase64: false, resize: false }),\n Table.configure({ resizable: false }),\n TableRow,\n TableCell.extend({ content: \"paragraph\" }),\n TableHeader.extend({ content: \"paragraph\" }),\n ];\n}\n\nexport const docsSchema: Schema = getSchema(createDocsExtensions());\nexport const DOCS_SCHEMA_VERSION = 1;\n","export const DOCS_HEADING_POLICY_VERSION = 1;\n\nexport interface HeadingNode {\n type?: string;\n text?: string;\n attrs?: Record<string, unknown>;\n content?: HeadingNode[];\n}\n\nexport function docsNodeText(node: HeadingNode): string {\n if (typeof node.text === \"string\") return node.text;\n if (node.type === \"hardBreak\") return \"\\n\";\n return (node.content ?? []).map(docsNodeText).join(\"\");\n}\n\n/** DM-CONVERT: deterministic Unicode anchors, including duplicate-base collisions. */\nexport function createHeadingIdGenerator(): (text: string) => string {\n const used = new Set<string>();\n return (text) => {\n const base =\n text\n .normalize(\"NFKC\")\n .toLowerCase()\n .trim()\n .replace(/[^\\p{L}\\p{N}\\s_-]/gu, \"\")\n .replace(/\\s+/g, \"-\") || \"section\";\n let id = base;\n let suffix = 2;\n while (used.has(id)) id = `${base}-${suffix++}`;\n used.add(id);\n return id;\n };\n}\n\nexport function extractDocsHeadings(json: HeadingNode | null | undefined) {\n const nextId = createHeadingIdGenerator();\n const headings: { level: number; text: string; id: string }[] = [];\n function walk(node: HeadingNode) {\n if (node.type === \"heading\") {\n const text = docsNodeText(node);\n headings.push({ level: Number(node.attrs?.level ?? 1), text, id: nextId(text) });\n }\n for (const child of node.content ?? []) walk(child);\n }\n if (json) walk(json);\n return headings;\n}\n","import type { JSONContent } from \"@tiptap/core\";\nimport { docsSchema } from \"./extensions\";\nimport {\n diagnostic,\n DocsContentError,\n sortDiagnostics,\n type DocsDiagnostic,\n} from \"./diagnostics\";\nimport { isSafeDocsUrl } from \"./urls\";\n\nexport const DOCS_LIMITS = {\n bytes: 1024 * 1024,\n nodes: 20000,\n depth: 64,\n metadataBytes: 32768,\n} as const;\nconst record = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n [Object.prototype, null].includes(Object.getPrototypeOf(value));\nconst nullableString = (v: unknown) => v === null || typeof v === \"string\";\nconst attributes: Record<string, Record<string, (v: unknown) => boolean>> = {\n heading: { level: (v) => Number.isInteger(v) && Number(v) >= 1 && Number(v) <= 6 },\n orderedList: {\n start: (v) => Number.isSafeInteger(v) && Number(v) >= 1,\n type: (v) => v === null,\n },\n codeBlock: {\n language: (v) => v === null || (typeof v === \"string\" && /^[\\w+-]+$/.test(v)),\n },\n image: {\n src: (v) => typeof v === \"string\",\n alt: nullableString,\n title: nullableString,\n width: (v) => v === null,\n height: (v) => v === null,\n },\n tableCell: {\n colspan: (v) => v === 1,\n rowspan: (v) => v === 1,\n colwidth: (v) => v === null,\n align: (v) => v === null,\n },\n tableHeader: {\n colspan: (v) => v === 1,\n rowspan: (v) => v === 1,\n colwidth: (v) => v === null,\n align: (v) => v === null,\n },\n link: {\n href: (v) => typeof v === \"string\",\n title: nullableString,\n target: (v) => v === null || v === \"_blank\",\n rel: (v) => v === null || v === \"noopener noreferrer nofollow\",\n class: (v) => v === null,\n },\n};\n\n/** Checks before ProseMirror can discard unknown keys. Never repairs supplied invalid trees. */\nexport function validateDocsContent(input: unknown): {\n content?: JSONContent;\n diagnostics: DocsDiagnostic[];\n} {\n const errors: DocsDiagnostic[] = [];\n const add = (code: string, message: string, fieldPath: string) =>\n errors.push(diagnostic(code, message, { fieldPath }));\n let nodes = 0;\n let textBytes = 0;\n function attrs(value: unknown, type: string, path: string) {\n if (value === undefined) return;\n if (!record(value)) {\n add(\"INVALID_DOCUMENT\", \"Attributes must be an object.\", path);\n return;\n }\n for (const [key, v] of Object.entries(value)) {\n const allowed = attributes[type];\n const check = allowed && Object.hasOwn(allowed, key) ? allowed[key] : undefined;\n if (!check)\n add(\n \"UNSUPPORTED_ATTRIBUTE\",\n `Unsupported ${type} attribute: ${key}.`,\n `${path}.${key}`,\n );\n else if (!check(v))\n add(\"INVALID_DOCUMENT\", `Invalid ${type} attribute: ${key}.`, `${path}.${key}`);\n }\n }\n function walk(node: unknown, path: string, depth: number) {\n if (++nodes > DOCS_LIMITS.nodes || depth > DOCS_LIMITS.depth) {\n if (nodes === DOCS_LIMITS.nodes + 1 || depth > DOCS_LIMITS.depth)\n add(\"INVALID_DOCUMENT\", \"Document exceeds structural limits.\", path);\n return;\n }\n if (!record(node) || typeof node.type !== \"string\") {\n add(\"INVALID_DOCUMENT\", \"Expected a document node with a type.\", path);\n return;\n }\n if (!Object.hasOwn(docsSchema.nodes, node.type)) {\n add(\"UNSUPPORTED_NODE\", `Unsupported node: ${node.type}.`, `${path}.type`);\n return;\n }\n for (const key of Object.keys(node)) {\n if (![\"type\", \"attrs\", \"content\", \"marks\", \"text\"].includes(key))\n add(\n \"UNSUPPORTED_ATTRIBUTE\",\n `Unsupported node field: ${key}.`,\n `${path}.${key}`,\n );\n }\n attrs(node.attrs, node.type, `${path}.attrs`);\n if (node.type === \"text\") {\n if (typeof node.text !== \"string\" || !node.text.length)\n add(\"INVALID_DOCUMENT\", \"Text nodes require nonempty text.\", `${path}.text`);\n else textBytes += new TextEncoder().encode(node.text).length;\n if (node.content !== undefined || node.attrs !== undefined)\n add(\"INVALID_DOCUMENT\", \"Text cannot contain children or attributes.\", path);\n } else if (node.text !== undefined)\n add(\"INVALID_DOCUMENT\", \"Only text nodes can contain text.\", `${path}.text`);\n if (node.marks !== undefined) {\n if (!Array.isArray(node.marks))\n add(\"INVALID_DOCUMENT\", \"Marks must be an array.\", `${path}.marks`);\n else {\n const seen = new Set<string>();\n node.marks.forEach((mark, i) => {\n const mp = `${path}.marks[${i}]`;\n if (!record(mark) || typeof mark.type !== \"string\") {\n add(\"INVALID_DOCUMENT\", \"Invalid mark.\", mp);\n return;\n }\n if (!Object.hasOwn(docsSchema.marks, mark.type)) {\n add(\"UNSUPPORTED_MARK\", `Unsupported mark: ${mark.type}.`, `${mp}.type`);\n return;\n }\n if (node.type !== \"text\" || seen.has(mark.type))\n add(\"INVALID_DOCUMENT\", \"Marks must be unique and applied to text.\", mp);\n seen.add(mark.type);\n for (const key of Object.keys(mark))\n if (![\"type\", \"attrs\"].includes(key))\n add(\n \"UNSUPPORTED_ATTRIBUTE\",\n `Unsupported mark field: ${key}.`,\n `${mp}.${key}`,\n );\n attrs(mark.attrs, mark.type, `${mp}.attrs`);\n if (\n mark.type === \"link\" &&\n (!record(mark.attrs) || !isSafeDocsUrl(mark.attrs.href))\n )\n add(\"UNSAFE_URL\", \"Link URL is unsafe.\", `${mp}.attrs.href`);\n });\n if (seen.has(\"code\") && seen.size > 1)\n add(\n \"INVALID_DOCUMENT\",\n \"Inline code cannot carry other marks.\",\n `${path}.marks`,\n );\n }\n }\n if (\n node.type === \"image\" &&\n (!record(node.attrs) || !isSafeDocsUrl(node.attrs.src, true))\n )\n add(\"UNSAFE_URL\", \"Images require a stable HTTPS URL.\", `${path}.attrs.src`);\n if (\n node.type === \"heading\" &&\n (!record(node.attrs) || !Number.isInteger(node.attrs.level))\n )\n add(\"INVALID_DOCUMENT\", \"Heading level is required.\", `${path}.attrs.level`);\n if (node.content !== undefined) {\n if (!Array.isArray(node.content)) {\n add(\"INVALID_DOCUMENT\", \"Content must be an array.\", `${path}.content`);\n return;\n }\n node.content.forEach((child, i) => {\n walk(child, `${path}.content[${i}]`, depth + 1);\n });\n }\n // Check each subtree independently to give the exact failing JSON path.\n if (!errors.some((error) => error.fieldPath?.startsWith(path))) {\n try {\n docsSchema.nodeFromJSON(node).check();\n } catch {\n add(\"INVALID_DOCUMENT\", \"Invalid child ordering, cardinality, or marks.\", path);\n }\n }\n if (node.type === \"table\" && Array.isArray(node.content)) {\n let width: number | undefined;\n node.content.forEach((row, i) => {\n if (!record(row) || !Array.isArray(row.content)) return;\n width ??= row.content.length;\n if (\n row.content.length !== width ||\n row.content.some(\n (cell) =>\n !record(cell) || cell.type !== (i === 0 ? \"tableHeader\" : \"tableCell\"),\n )\n )\n add(\n \"INVALID_DOCUMENT\",\n \"Simple tables require a rectangular header row followed by body rows.\",\n `${path}.content[${i}]`,\n );\n });\n }\n }\n if (!record(input) || input.type !== \"doc\")\n add(\"INVALID_DOCUMENT\", \"Root must be a doc node.\", \"content.type\");\n else walk(input, \"content\", 0);\n if (textBytes > DOCS_LIMITS.bytes)\n add(\"INVALID_DOCUMENT\", \"Document exceeds the text size limit.\", \"content\");\n if (errors.length) return { diagnostics: sortDiagnostics(errors) };\n const normalize = (node: JSONContent): JSONContent => ({\n ...node,\n ...(node.type === \"image\"\n ? { attrs: { ...node.attrs, alt: node.attrs?.alt ?? \"\" } }\n : {}),\n ...(node.content ? { content: node.content.map(normalize) } : {}),\n });\n // Missing and empty alt text both lack a description; retain this as an\n // empty string so Markdown can represent the image without blocking a draft.\n const content = normalize(docsSchema.nodeFromJSON(input).toJSON() as JSONContent);\n return { content: { ...content, content: content.content ?? [] }, diagnostics: [] };\n}\n\nexport function requireDocsContent(input: unknown): JSONContent {\n const result = validateDocsContent(input);\n if (!result.content) throw new DocsContentError(result.diagnostics);\n return result.content;\n}\n","import { DocsContentError, diagnostic } from \"./diagnostics\";\n\n/** DM-ROUTE: fixed /docs prefix, Latin segments, case-folded collision identity. */\nexport function normalizeDocsSlug(value: unknown): string {\n return normalizePath(value, true);\n}\n\nfunction normalizePath(value: unknown, reserveRoutes: boolean): string {\n if (typeof value !== \"string\")\n throw new DocsContentError([\n diagnostic(\"INVALID_SLUG\", \"Slug must be a relative documentation path.\", {\n fieldPath: \"slug\",\n }),\n ]);\n const slug = value.toLowerCase().replace(/\\/$/, \"\");\n if (!slug || slug.length > 512 || !/^[a-z0-9-]+(?:\\/[a-z0-9-]+)*$/.test(slug))\n throw new DocsContentError([\n diagnostic(\n \"INVALID_SLUG\",\n \"Use lowercase ASCII letters, digits, and hyphens in slash-separated segments.\",\n { fieldPath: \"slug\" },\n ),\n ]);\n if (reserveRoutes && [\"collections\", \"search\"].includes(slug.split(\"/\")[0]))\n throw new DocsContentError([\n diagnostic(\n \"RESERVED_ROUTE\",\n \"This path is reserved for documentation navigation.\",\n { route: `/docs/${slug}`, fieldPath: \"slug\" },\n ),\n ]);\n return slug;\n}\n\nexport function normalizeDocsSourceDirectory(value: string): string {\n const directory = value.replace(/\\/$/, \"\");\n if (\n !directory ||\n directory.startsWith(\"/\") ||\n // biome-ignore lint/suspicious/noControlCharactersInRegex: Reject control characters in repository paths.\n /[\\\\\\u0000-\\u001f]/.test(directory) ||\n directory\n .split(\"/\")\n .some((segment) => !segment || segment === \".\" || segment === \"..\")\n )\n throw new DocsContentError([\n diagnostic(\"INVALID_REFERENCE\", \"Select a directory within the repository.\", {\n fieldPath: \"directory\",\n }),\n ]);\n return directory;\n}\n\n/** Input path is repository-relative; callers must also reject symlink entries in Git trees. */\nexport function resolveDocsSourcePath(\n path: string,\n directory: string,\n explicitSlug?: string,\n) {\n const root = normalizeDocsSourceDirectory(directory);\n if (!path.startsWith(`${root}/`))\n throw new DocsContentError([\n diagnostic(\n \"INVALID_REFERENCE\",\n \"File is outside the configured docs directory.\",\n { file: path },\n ),\n ]);\n const relativePath = path.slice(root.length + 1);\n const segments = relativePath.split(\"/\");\n if (\n !relativePath.endsWith(\".md\") ||\n // biome-ignore lint/suspicious/noControlCharactersInRegex: Reject control characters in repository paths.\n /[\\\\\\u0000-\\u001f]/.test(relativePath) ||\n segments.some((segment) => !segment || segment === \".\" || segment === \"..\")\n )\n throw new DocsContentError([\n diagnostic(\"INVALID_REFERENCE\", \"Invalid Markdown source path.\", { file: path }),\n ]);\n const defaultSlug = relativePath.slice(0, -3).replace(/\\/index$/, \"\");\n const slug = normalizeDocsSlug(explicitSlug ?? defaultSlug);\n return {\n relativePath,\n slug,\n route: `/docs/${slug}`,\n sectionSlug: segments.length > 1 ? normalizePath(segments[0], false) : null,\n };\n}\n","import { parseDocument, stringify } from \"yaml\";\nimport { DOCS_LIMITS } from \"./validate\";\nimport { diagnostic, DocsContentError } from \"./diagnostics\";\nimport { isSafeDocsUrl } from \"./urls\";\nimport { normalizeDocsSlug } from \"./routes\";\n\nexport type PlainData =\n | null\n | string\n | number\n | boolean\n | PlainData[]\n | { [key: string]: PlainData };\nexport type DocsFrontmatter = Record<string, PlainData>;\n\n/** DM-SOURCE: unknown metadata is retained as bounded, inert plain data. */\nexport function requireDocsFrontmatter(value: unknown, file?: string): DocsFrontmatter {\n const fail = (message: string, fieldPath = \"frontmatter\"): never => {\n throw new DocsContentError([\n diagnostic(\"INVALID_FRONTMATTER\", message, { fieldPath, file }),\n ]);\n };\n let count = 0;\n function check(v: unknown, depth: number, path: string): void {\n if (++count > 2000 || depth > 16) fail(\"Metadata exceeds structural limits.\", path);\n if (\n v === null ||\n typeof v === \"string\" ||\n typeof v === \"boolean\" ||\n (typeof v === \"number\" && Number.isFinite(v))\n )\n return;\n if (Array.isArray(v)) {\n v.forEach((item, i) => {\n check(item, depth + 1, `${path}[${i}]`);\n });\n return;\n }\n if (\n typeof v !== \"object\" ||\n ![Object.prototype, null].includes(Object.getPrototypeOf(v))\n )\n fail(\"Metadata must contain only plain data.\", path);\n for (const [key, item] of Object.entries(v)) {\n if ([\"__proto__\", \"prototype\", \"constructor\"].includes(key))\n fail(\"Reserved metadata key.\", `${path}.${key}`);\n check(item, depth + 1, `${path}.${key}`);\n }\n }\n if (!value || typeof value !== \"object\" || Array.isArray(value))\n fail(\"Frontmatter must be an object.\");\n check(value, 0, \"frontmatter\");\n const meta = value as DocsFrontmatter;\n if (new TextEncoder().encode(JSON.stringify(meta)).length > DOCS_LIMITS.metadataBytes)\n fail(\"Metadata exceeds size limit.\");\n if (typeof meta.title !== \"string\" || !meta.title.trim())\n fail(\"Title is required.\", \"frontmatter.title\");\n for (const key of [\"description\", \"slug\", \"nav_title\"])\n if (meta[key] !== undefined && typeof meta[key] !== \"string\")\n fail(`${key} must be a string.`, `frontmatter.${key}`);\n if (meta.slug !== undefined) {\n try {\n normalizeDocsSlug(meta.slug);\n } catch (error) {\n if (error instanceof DocsContentError)\n throw new DocsContentError(\n error.diagnostics.map((item) => ({\n ...item,\n fieldPath: \"frontmatter.slug\",\n file,\n })),\n );\n throw error;\n }\n }\n if (meta.nav_order !== undefined && !Number.isSafeInteger(meta.nav_order))\n fail(\"nav_order must be an integer.\", \"frontmatter.nav_order\");\n for (const key of [\"published\", \"indexable\"])\n if (meta[key] !== undefined && typeof meta[key] !== \"boolean\")\n fail(`${key} must be a boolean.`, `frontmatter.${key}`);\n if (meta.featured_image !== undefined) {\n const image = meta.featured_image;\n if (\n !image ||\n typeof image !== \"object\" ||\n Array.isArray(image) ||\n Object.keys(image).some((key) => ![\"url\", \"alt\"].includes(key)) ||\n !isSafeDocsUrl(image.url, true) ||\n typeof image.alt !== \"string\"\n )\n fail(\n \"featured_image must contain a stable HTTPS url and alt string.\",\n \"frontmatter.featured_image\",\n );\n }\n return meta;\n}\n\nexport function splitDocsFrontmatter(source: string, file?: string) {\n const normalized = source.replace(/^\\uFEFF/, \"\").replace(/\\r\\n?/g, \"\\n\");\n if (!normalized.startsWith(\"---\\n\"))\n throw new DocsContentError([\n diagnostic(\"INVALID_FRONTMATTER\", \"Markdown requires frontmatter with a title.\", {\n file,\n line: 1,\n column: 1,\n }),\n ]);\n const end = /^---[ \\t]*$/gm;\n end.lastIndex = 4;\n const delimiter = end.exec(normalized);\n if (!delimiter)\n throw new DocsContentError([\n diagnostic(\"INVALID_FRONTMATTER\", \"Frontmatter is not closed.\", {\n file,\n line: 1,\n column: 1,\n }),\n ]);\n const raw = normalized.slice(4, delimiter.index);\n if (new TextEncoder().encode(raw).length > DOCS_LIMITS.metadataBytes)\n throw new DocsContentError([\n diagnostic(\"INVALID_FRONTMATTER\", \"Frontmatter exceeds size limit.\", { file }),\n ]);\n const doc = parseDocument(raw, {\n schema: \"core\",\n uniqueKeys: true,\n strict: true,\n merge: false,\n });\n if (doc.errors.length || doc.warnings.length) {\n throw new DocsContentError(\n [...doc.errors, ...doc.warnings].map((error) => {\n const offset = error.pos[0];\n const prefix = raw.slice(0, offset);\n return diagnostic(\"INVALID_FRONTMATTER\", \"Invalid YAML frontmatter.\", {\n file,\n line: prefix.split(\"\\n\").length + 1,\n column: prefix.length - prefix.lastIndexOf(\"\\n\"),\n });\n }),\n );\n }\n let value: unknown;\n try {\n value = doc.toJS({ maxAliasCount: 0 });\n } catch {\n throw new DocsContentError([\n diagnostic(\"INVALID_FRONTMATTER\", \"YAML aliases are not supported.\", {\n file,\n line: 2,\n column: 1,\n }),\n ]);\n }\n let frontmatter: DocsFrontmatter;\n try {\n frontmatter = requireDocsFrontmatter(value, file);\n } catch (error) {\n if (!(error instanceof DocsContentError)) throw error;\n throw new DocsContentError(\n error.diagnostics.map((item) => {\n const key = item.fieldPath?.split(\".\")[1];\n const field = key ? doc.get(key, true) : undefined;\n const offset =\n field && typeof field === \"object\" && \"range\" in field\n ? (field.range?.[0] ?? 0)\n : 0;\n const prefix = raw.slice(0, offset);\n return {\n ...item,\n file,\n line: prefix.split(\"\\n\").length + 1,\n column: prefix.length - prefix.lastIndexOf(\"\\n\"),\n };\n }),\n );\n }\n const start =\n delimiter.index +\n delimiter[0].length +\n (normalized[delimiter.index + delimiter[0].length] === \"\\n\" ? 1 : 0);\n return {\n frontmatter,\n body: normalized.slice(start),\n lineOffset: normalized.slice(0, start).split(\"\\n\").length - 1,\n };\n}\n\nexport function serializeDocsFrontmatter(meta: DocsFrontmatter): string {\n return `---\\n${stringify(requireDocsFrontmatter(meta), { sortMapEntries: true, aliasDuplicateObjects: false, lineWidth: 0 })}---\\n\\n`;\n}\n","import type { JSONContent } from \"@tiptap/core\";\nimport type { Root, RootContent, PhrasingContent, Definition, Nodes } from \"mdast\";\nimport { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkStringify from \"remark-stringify\";\nimport { DocsContentError, diagnostic } from \"./diagnostics\";\nimport { requireDocsContent, DOCS_LIMITS } from \"./validate\";\nimport {\n splitDocsFrontmatter,\n serializeDocsFrontmatter,\n type DocsFrontmatter,\n} from \"./frontmatter\";\nimport { isSafeDocsUrl } from \"./urls\";\n\nexport const DOCS_PARSER_VERSION = 1;\nconst parser = unified().use(remarkParse).use(remarkGfm);\nconst writer = unified().use(remarkGfm).use(remarkStringify, {\n bullet: \"-\",\n emphasis: \"*\",\n strong: \"*\",\n fences: true,\n incrementListMarker: true,\n});\ntype Mark = NonNullable<JSONContent[\"marks\"]>[number];\n\n/** DM-CONVERT: CommonMark/GFM is parsed as data. Unsupported constructs fail closed. */\nexport function parseDocsMarkdown(\n markdown: string,\n options: { file?: string; frontmatter?: boolean } = {},\n) {\n if (\n typeof markdown !== \"string\" ||\n new TextEncoder().encode(markdown).length > DOCS_LIMITS.bytes\n )\n throw new DocsContentError([\n diagnostic(\"INVALID_DOCUMENT\", \"Markdown exceeds size limit.\", {\n file: options.file,\n }),\n ]);\n const source =\n options.frontmatter === false\n ? {\n body: markdown.replace(/\\r\\n?/g, \"\\n\"),\n lineOffset: 0,\n frontmatter: undefined,\n }\n : splitDocsFrontmatter(markdown, options.file);\n const tree = parser.parse(source.body);\n const definitions = new Map<string, Definition>();\n function error(node: Nodes, message: string, code = \"UNSUPPORTED_NODE\"): never {\n throw new DocsContentError([\n diagnostic(code, message, {\n file: options.file,\n line: node.position ? node.position.start.line + source.lineOffset : undefined,\n column: node.position?.start.column,\n }),\n ]);\n }\n let nodes = 0;\n function inspect(node: Nodes, depth: number) {\n if (++nodes > DOCS_LIMITS.nodes || depth > DOCS_LIMITS.depth)\n error(node, \"Markdown exceeds structural limits.\", \"INVALID_DOCUMENT\");\n if (node.type === \"definition\") definitions.set(node.identifier, node);\n if (\"children\" in node)\n for (const child of node.children) inspect(child, depth + 1);\n }\n inspect(tree, 0);\n function url(node: Nodes, value: string, image = false) {\n if (image && !/^[a-z]+:/i.test(value))\n error(\n node,\n \"Local image binaries must be uploaded to MediaLit.\",\n \"UNMANAGED_BINARY\",\n );\n if (!isSafeDocsUrl(value, image))\n error(node, \"URL is unsafe or expiring.\", \"UNSAFE_URL\");\n return value;\n }\n function inline(items: PhrasingContent[], marks: Mark[] = []): JSONContent[] {\n return items.flatMap((node): JSONContent[] => {\n switch (node.type) {\n case \"text\": {\n const raw = source.body.slice(\n node.position?.start.offset ?? 0,\n node.position?.end.offset ?? 0,\n );\n if (\n /(?<!\\\\)<\\/?[A-Za-z][^>]*>/.test(raw) ||\n /^(?:import|export)\\s/m.test(raw)\n )\n error(node, \"MDX/JSX and module syntax are unsupported.\");\n return node.value\n ? [{ type: \"text\", text: node.value, ...(marks.length ? { marks } : {}) }]\n : [];\n }\n case \"strong\":\n return inline(node.children, [...marks, { type: \"bold\" }]);\n case \"emphasis\":\n return inline(node.children, [...marks, { type: \"italic\" }]);\n case \"delete\":\n return inline(node.children, [...marks, { type: \"strike\" }]);\n case \"inlineCode\":\n if (marks.length) error(node, \"Inline code cannot carry other marks.\");\n return [{ type: \"text\", text: node.value, marks: [{ type: \"code\" }] }];\n case \"break\":\n if (marks.length) error(node, \"Marked line breaks are unsupported.\");\n return [{ type: \"hardBreak\" }];\n case \"link\":\n return inline(node.children, [\n ...marks,\n {\n type: \"link\",\n attrs: { href: url(node, node.url), title: node.title ?? null },\n },\n ]);\n case \"linkReference\": {\n const def = definitions.get(node.identifier);\n if (!def) error(node, \"Missing link definition.\", \"BROKEN_LINK\");\n return inline(node.children, [\n ...marks,\n {\n type: \"link\",\n attrs: { href: url(node, def.url), title: def.title ?? null },\n },\n ]);\n }\n default:\n return error(node, `Unsupported inline construct: ${node.type}.`);\n }\n });\n }\n function image(\n node: Extract<PhrasingContent, { type: \"image\" | \"imageReference\" }>,\n ): JSONContent {\n const def =\n node.type === \"imageReference\" ? definitions.get(node.identifier) : node;\n if (!def) error(node, \"Missing image definition.\", \"BROKEN_LINK\");\n return {\n type: \"image\",\n attrs: {\n src: url(node, def.url, true),\n alt: node.alt ?? \"\",\n title: def.title ?? null,\n },\n };\n }\n function block(node: RootContent): JSONContent[] {\n switch (node.type) {\n case \"definition\":\n return [];\n case \"paragraph\": {\n if (\n node.children.length === 1 &&\n [\"image\", \"imageReference\"].includes(node.children[0].type)\n )\n return [\n image(\n node.children[0] as Extract<\n PhrasingContent,\n { type: \"image\" | \"imageReference\" }\n >,\n ),\n ];\n return [{ type: \"paragraph\", content: inline(node.children) }];\n }\n case \"heading\":\n return [\n {\n type: \"heading\",\n attrs: { level: node.depth },\n content: inline(node.children),\n },\n ];\n case \"blockquote\":\n return [{ type: \"blockquote\", content: node.children.flatMap(block) }];\n case \"thematicBreak\":\n return [{ type: \"horizontalRule\" }];\n case \"code\":\n if (node.meta)\n error(node, \"Code fence metadata is unsupported.\", \"UNSUPPORTED_ATTRIBUTE\");\n return [\n {\n type: \"codeBlock\",\n attrs: { language: node.lang ?? null },\n content: node.value ? [{ type: \"text\", text: node.value }] : [],\n },\n ];\n case \"list\":\n return [\n {\n type: node.ordered ? \"orderedList\" : \"bulletList\",\n ...(node.ordered ? { attrs: { start: node.start ?? 1 } } : {}),\n content: node.children.map((item) => {\n if (item.checked !== null && item.checked !== undefined)\n error(item, \"Task lists are unsupported.\");\n const content = item.children.flatMap(block);\n return {\n type: \"listItem\",\n content: content.length ? content : [{ type: \"paragraph\" }],\n };\n }),\n },\n ];\n case \"table\":\n if (node.align?.some((alignment) => alignment !== null))\n error(node, \"Table alignment is unsupported.\", \"UNSUPPORTED_ATTRIBUTE\");\n return [\n {\n type: \"table\",\n content: node.children.map((row, i) => ({\n type: \"tableRow\",\n content: row.children.map((cell) => ({\n type: i === 0 ? \"tableHeader\" : \"tableCell\",\n content: [{ type: \"paragraph\", content: inline(cell.children) }],\n })),\n })),\n },\n ];\n default:\n return error(node, `Unsupported block construct: ${node.type}.`);\n }\n }\n const content = requireDocsContent({\n type: \"doc\",\n content: tree.children.flatMap(block),\n });\n return { content, frontmatter: source.frontmatter };\n}\n\n/** Build mark runs rather than wrapping each text separately (adjacent delimiters are ambiguous). */\nfunction toInline(children: JSONContent[]): PhrasingContent[] {\n const rank = [\"link\", \"bold\", \"italic\", \"strike\", \"code\"];\n const nodes = children.map((node) => ({\n ...node,\n marks: [...(node.marks ?? [])].sort(\n (a, b) => rank.indexOf(a.type) - rank.indexOf(b.type),\n ),\n }));\n function group(items: JSONContent[], depth: number): PhrasingContent[] {\n const output: PhrasingContent[] = [];\n for (let i = 0; i < items.length; ) {\n const node = items[i];\n const mark = node.marks?.[depth];\n if (!mark) {\n if (node.type === \"hardBreak\") output.push({ type: \"break\" });\n else output.push({ type: \"text\", value: node.text! });\n i++;\n continue;\n }\n let end = i + 1;\n while (\n end < items.length &&\n JSON.stringify(items[end].marks?.[depth]) === JSON.stringify(mark)\n )\n end++;\n const children = group(items.slice(i, end), depth + 1);\n switch (mark.type) {\n case \"link\":\n output.push({\n type: \"link\",\n url: mark.attrs!.href,\n title: mark.attrs?.title ?? null,\n children,\n });\n break;\n case \"bold\":\n output.push({ type: \"strong\", children });\n break;\n case \"italic\":\n output.push({ type: \"emphasis\", children });\n break;\n case \"strike\":\n output.push({ type: \"delete\", children });\n break;\n case \"code\":\n output.push({\n type: \"inlineCode\",\n value: items\n .slice(i, end)\n .map((item) => item.text)\n .join(\"\"),\n });\n break;\n }\n i = end;\n }\n return output;\n }\n return group(nodes, 0);\n}\n\nexport function serializeDocsMarkdown(\n input: unknown,\n frontmatter?: DocsFrontmatter,\n): string {\n const content = requireDocsContent(input);\n function block(node: JSONContent): RootContent {\n const children = node.content ?? [];\n switch (node.type) {\n case \"paragraph\":\n return { type: \"paragraph\", children: toInline(children) };\n case \"heading\":\n return {\n type: \"heading\",\n depth: node.attrs!.level,\n children: toInline(children),\n };\n case \"horizontalRule\":\n return { type: \"thematicBreak\" };\n case \"image\":\n return {\n type: \"paragraph\",\n children: [\n {\n type: \"image\",\n url: node.attrs!.src,\n alt: node.attrs?.alt ?? \"\",\n title: node.attrs?.title ?? null,\n },\n ],\n };\n case \"codeBlock\":\n return {\n type: \"code\",\n lang: node.attrs?.language ?? null,\n value: children.map((child) => child.text ?? \"\").join(\"\"),\n };\n case \"blockquote\":\n return {\n type: \"blockquote\",\n children: children.map(block) as Extract<\n RootContent,\n { type: \"blockquote\" }\n >[\"children\"],\n };\n case \"bulletList\":\n case \"orderedList\":\n return {\n type: \"list\",\n ordered: node.type === \"orderedList\",\n start: node.type === \"orderedList\" ? (node.attrs?.start ?? 1) : null,\n spread: true,\n children: children.map((item) => ({\n type: \"listItem\",\n spread: true,\n children: (item.content ?? []).map(block) as Extract<\n RootContent,\n { type: \"listItem\" }\n >[\"children\"],\n })),\n };\n case \"table\":\n return {\n type: \"table\",\n children: children.map((row) => ({\n type: \"tableRow\",\n children: (row.content ?? []).map((cell) => ({\n type: \"tableCell\",\n children: toInline(cell.content![0].content ?? []),\n })),\n })),\n };\n default:\n throw new DocsContentError([\n diagnostic(\"UNSUPPORTED_NODE\", `Cannot serialize ${node.type}.`),\n ]);\n }\n }\n const tree: Root = { type: \"root\", children: (content.content ?? []).map(block) };\n const markdown = writer.stringify(tree);\n // A serializer must never silently change semantic structure (e.g. empty blocks).\n const roundtrip = parseDocsMarkdown(markdown, { frontmatter: false }).content;\n // Markdown does not encode blank paragraph spacing. Ignore empty top-level\n // paragraphs in semantic comparisons; retain them in canonical editor JSON.\n const semantic = (doc: JSONContent) => ({\n ...doc,\n content:\n doc.content?.filter(\n (node) => node.type !== \"paragraph\" || node.content?.length,\n ) ?? [],\n });\n if (JSON.stringify(semantic(roundtrip)) !== JSON.stringify(semantic(content)))\n throw new DocsContentError([\n diagnostic(\n \"INVALID_DOCUMENT\",\n \"Content has no lossless Markdown representation.\",\n ),\n ]);\n return (frontmatter ? serializeDocsFrontmatter(frontmatter) : \"\") + markdown;\n}\n","import { DOCS_SCHEMA_VERSION } from \"./extensions\";\nimport { DOCS_PARSER_VERSION } from \"./markdown\";\nimport { DOCS_HEADING_POLICY_VERSION } from \"./headings\";\nimport { requireDocsContent } from \"./validate\";\nimport type { DocsFrontmatter, PlainData } from \"./frontmatter\";\n\nfunction stable(value: PlainData): PlainData {\n if (Array.isArray(value)) return value.map(stable);\n if (value && typeof value === \"object\")\n return Object.fromEntries(\n Object.keys(value)\n .sort()\n .map((key) => [key, stable(value[key])]),\n );\n return value;\n}\n\n/** DM-CONVERT: include conversion and retrieval versions in immutable content identities. */\nexport async function hashDocsContent(input: {\n content: unknown;\n metadata: DocsFrontmatter;\n embeddingConfigurationVersion: string;\n}): Promise<string> {\n const canonical = stable({\n content: requireDocsContent(input.content) as PlainData,\n metadata: input.metadata,\n versions: {\n schema: DOCS_SCHEMA_VERSION,\n parser: DOCS_PARSER_VERSION,\n headings: DOCS_HEADING_POLICY_VERSION,\n embeddingConfiguration: input.embeddingConfigurationVersion,\n },\n });\n const bytes = new TextEncoder().encode(JSON.stringify(canonical));\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", bytes);\n return [...new Uint8Array(digest)]\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n"]}
@@ -0,0 +1,17 @@
1
+ declare const DOCS_HEADING_POLICY_VERSION = 1;
2
+ interface HeadingNode {
3
+ type?: string;
4
+ text?: string;
5
+ attrs?: Record<string, unknown>;
6
+ content?: HeadingNode[];
7
+ }
8
+ declare function docsNodeText(node: HeadingNode): string;
9
+ /** DM-CONVERT: deterministic Unicode anchors, including duplicate-base collisions. */
10
+ declare function createHeadingIdGenerator(): (text: string) => string;
11
+ declare function extractDocsHeadings(json: HeadingNode | null | undefined): {
12
+ level: number;
13
+ text: string;
14
+ id: string;
15
+ }[];
16
+
17
+ export { DOCS_HEADING_POLICY_VERSION, type HeadingNode, createHeadingIdGenerator, docsNodeText, extractDocsHeadings };
@@ -0,0 +1,35 @@
1
+ // src/docs/headings.ts
2
+ var DOCS_HEADING_POLICY_VERSION = 1;
3
+ function docsNodeText(node) {
4
+ if (typeof node.text === "string") return node.text;
5
+ if (node.type === "hardBreak") return "\n";
6
+ return (node.content ?? []).map(docsNodeText).join("");
7
+ }
8
+ function createHeadingIdGenerator() {
9
+ const used = /* @__PURE__ */ new Set();
10
+ return (text) => {
11
+ const base = text.normalize("NFKC").toLowerCase().trim().replace(/[^\p{L}\p{N}\s_-]/gu, "").replace(/\s+/g, "-") || "section";
12
+ let id = base;
13
+ let suffix = 2;
14
+ while (used.has(id)) id = `${base}-${suffix++}`;
15
+ used.add(id);
16
+ return id;
17
+ };
18
+ }
19
+ function extractDocsHeadings(json) {
20
+ const nextId = createHeadingIdGenerator();
21
+ const headings = [];
22
+ function walk(node) {
23
+ if (node.type === "heading") {
24
+ const text = docsNodeText(node);
25
+ headings.push({ level: Number(node.attrs?.level ?? 1), text, id: nextId(text) });
26
+ }
27
+ for (const child of node.content ?? []) walk(child);
28
+ }
29
+ if (json) walk(json);
30
+ return headings;
31
+ }
32
+
33
+ export { DOCS_HEADING_POLICY_VERSION, createHeadingIdGenerator, docsNodeText, extractDocsHeadings };
34
+ //# sourceMappingURL=headings.js.map
35
+ //# sourceMappingURL=headings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/docs/headings.ts"],"names":[],"mappings":";AAAO,IAAM,2BAAA,GAA8B;AASpC,SAAS,aAAa,IAAA,EAA2B;AACtD,EAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,SAAiB,IAAA,CAAK,IAAA;AAC/C,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,WAAA,EAAa,OAAO,IAAA;AACtC,EAAA,OAAA,CAAQ,IAAA,CAAK,WAAW,EAAC,EAAG,IAAI,YAAY,CAAA,CAAE,KAAK,EAAE,CAAA;AACvD;AAGO,SAAS,wBAAA,GAAqD;AACnE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,OAAO,CAAC,IAAA,KAAS;AACf,IAAA,MAAM,OACJ,IAAA,CACG,SAAA,CAAU,MAAM,CAAA,CAChB,aAAY,CACZ,IAAA,EAAK,CACL,OAAA,CAAQ,uBAAuB,EAAE,CAAA,CACjC,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,IAAK,SAAA;AAC7B,IAAA,IAAI,EAAA,GAAK,IAAA;AACT,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,OAAO,IAAA,CAAK,IAAI,EAAE,CAAA,OAAQ,CAAA,EAAG,IAAI,IAAI,MAAA,EAAQ,CAAA,CAAA;AAC7C,IAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,IAAA,OAAO,EAAA;AAAA,EACT,CAAA;AACF;AAEO,SAAS,oBAAoB,IAAA,EAAsC;AACxE,EAAA,MAAM,SAAS,wBAAA,EAAyB;AACxC,EAAA,MAAM,WAA0D,EAAC;AACjE,EAAA,SAAS,KAAK,IAAA,EAAmB;AAC/B,IAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3B,MAAA,MAAM,IAAA,GAAO,aAAa,IAAI,CAAA;AAC9B,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,KAAA,EAAO,MAAA,CAAO,KAAK,KAAA,EAAO,KAAA,IAAS,CAAC,CAAA,EAAG,IAAA,EAAM,EAAA,EAAI,MAAA,CAAO,IAAI,GAAG,CAAA;AAAA,IACjF;AACA,IAAA,KAAA,MAAW,SAAS,IAAA,CAAK,OAAA,IAAW,EAAC,OAAQ,KAAK,CAAA;AAAA,EACpD;AACA,EAAA,IAAI,IAAA,OAAW,IAAI,CAAA;AACnB,EAAA,OAAO,QAAA;AACT","file":"headings.js","sourcesContent":["export const DOCS_HEADING_POLICY_VERSION = 1;\n\nexport interface HeadingNode {\n type?: string;\n text?: string;\n attrs?: Record<string, unknown>;\n content?: HeadingNode[];\n}\n\nexport function docsNodeText(node: HeadingNode): string {\n if (typeof node.text === \"string\") return node.text;\n if (node.type === \"hardBreak\") return \"\\n\";\n return (node.content ?? []).map(docsNodeText).join(\"\");\n}\n\n/** DM-CONVERT: deterministic Unicode anchors, including duplicate-base collisions. */\nexport function createHeadingIdGenerator(): (text: string) => string {\n const used = new Set<string>();\n return (text) => {\n const base =\n text\n .normalize(\"NFKC\")\n .toLowerCase()\n .trim()\n .replace(/[^\\p{L}\\p{N}\\s_-]/gu, \"\")\n .replace(/\\s+/g, \"-\") || \"section\";\n let id = base;\n let suffix = 2;\n while (used.has(id)) id = `${base}-${suffix++}`;\n used.add(id);\n return id;\n };\n}\n\nexport function extractDocsHeadings(json: HeadingNode | null | undefined) {\n const nextId = createHeadingIdGenerator();\n const headings: { level: number; text: string; id: string }[] = [];\n function walk(node: HeadingNode) {\n if (node.type === \"heading\") {\n const text = docsNodeText(node);\n headings.push({ level: Number(node.attrs?.level ?? 1), text, id: nextId(text) });\n }\n for (const child of node.content ?? []) walk(child);\n }\n if (json) walk(json);\n return headings;\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -10,7 +10,11 @@ interface ReactEditorProps {
10
10
  }
11
11
 
12
12
  interface EditorProps {
13
+ profile?: "default" | "documentation";
13
14
  onChange: (json: JSONContent) => void;
15
+ onFlushChangeReady?: (flush: () => void) => void;
16
+ /** How long to wait after the last edit before calling `onChange`. Defaults to 1000. */
17
+ debounceMs?: number;
14
18
  showToolbar?: boolean;
15
19
  editable?: boolean;
16
20
  refresh?: number;
@@ -41,7 +45,12 @@ declare function ImagePickerContextProvider({ pickImage, children, }: {
41
45
  }): React.JSX.Element;
42
46
  declare function useImagePicker(): () => Promise<PickedImage | null>;
43
47
 
44
- declare const emptyDoc: JSONContent;
48
+ interface TextEditorContent {
49
+ type: "doc";
50
+ content: Record<string, unknown>[];
51
+ }
52
+
53
+ declare const emptyDoc: TextEditorContent;
45
54
 
46
55
  interface Heading {
47
56
  level: number;
@@ -59,11 +68,6 @@ declare function createId(textContent: string): string;
59
68
 
60
69
  declare function extractTextFromNode(node: any): string;
61
70
 
62
- interface TextEditorContent {
63
- type: "doc";
64
- content: Record<string, unknown>[];
65
- }
66
-
67
71
  /**
68
72
  * A loose, structural subset of a design system's theme — just enough for
69
73
  * `TextRenderer` to apply theme-aware typography to rendered headings,
@@ -103,6 +107,7 @@ interface TextRendererTheme {
103
107
  header1?: RendererTypography;
104
108
  header2?: RendererTypography;
105
109
  header3?: RendererTypography;
110
+ header4?: RendererTypography;
106
111
  text1?: RendererTypography;
107
112
  link?: RendererTypography;
108
113
  };
@@ -112,6 +117,7 @@ interface TextRendererTheme {
112
117
  }
113
118
 
114
119
  interface TextRendererProps {
120
+ profile?: "default" | "documentation";
115
121
  json: TextEditorContent;
116
122
  className?: string;
117
123
  theme?: TextRendererTheme;
@@ -122,7 +128,7 @@ interface TextRendererProps {
122
128
  * a `theme` is provided, headings/paragraphs/links pick up its typography;
123
129
  * otherwise plain semantic HTML tags are used.
124
130
  */
125
- declare function TextRenderer({ json, className, theme }: TextRendererProps): React__default.JSX.Element;
131
+ declare function TextRenderer({ json, className, theme, profile, }: TextRendererProps): React__default.JSX.Element;
126
132
 
127
133
  /** Normalizes a plain string or an already-valid TipTap doc into `TextEditorContent`. */
128
134
  declare function normalizeTextEditorContent(json: TextEditorContent | string): TextEditorContent;