rich-text-editor-renderer 0.1.0

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,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.js"],
4
+ "sourcesContent": ["const DEFAULT_OPTIONS = {\n mathMode: 'tex',\n className: 'rte-render-root',\n injectStyles: true,\n autoMathJaxTypeset: true,\n};\n\nconst STYLE_ID = 'rich-text-editor-renderer-styles';\nconst MIN_IMAGE_WIDTH = 32;\nconst MAX_IMAGE_WIDTH = 720;\nconst MIN_IMAGE_HEIGHT = 28;\nconst MAX_IMAGE_HEIGHT = 720;\n\nexport function renderRichTextDocument({\n element,\n document,\n options = {},\n}) {\n if (!element) {\n throw new Error('renderRichTextDocument requires an element');\n }\n\n const resolvedOptions = { ...DEFAULT_OPTIONS, ...options };\n const documentModel = normalizeDocument(document);\n\n if (resolvedOptions.injectStyles) {\n ensureStyles();\n }\n\n element.innerHTML = '';\n element.classList.add(resolvedOptions.className);\n\n const flowRoot = document.createElement('div');\n flowRoot.className = 'rte-flow-root';\n const floatingRoot = document.createElement('div');\n floatingRoot.className = 'rte-floating-root';\n\n element.appendChild(flowRoot);\n element.appendChild(floatingRoot);\n\n renderStaticNodes(flowRoot, documentModel);\n rerenderLayout({ host: element, flowRoot, floatingRoot, documentModel });\n\n if (resolvedOptions.autoMathJaxTypeset) {\n requestMathTypeset(element);\n }\n\n return {\n rerender() {\n rerenderLayout({ host: element, flowRoot, floatingRoot, documentModel });\n if (resolvedOptions.autoMathJaxTypeset) {\n requestMathTypeset(element);\n }\n },\n destroy() {\n element.innerHTML = '';\n element.classList.remove(resolvedOptions.className);\n },\n };\n}\n\nexport function autoMountRichTextDocuments({\n selector = '[data-rich-text-json]',\n options = {},\n} = {}) {\n const mounts = [];\n document.querySelectorAll(selector).forEach((element) => {\n const raw = element.getAttribute('data-rich-text-json');\n if (!raw) {\n return;\n }\n mounts.push(\n renderRichTextDocument({\n element,\n document: JSON.parse(raw),\n options,\n }),\n );\n });\n return mounts;\n}\n\nfunction normalizeDocument(value) {\n if (typeof value === 'string') {\n return JSON.parse(value);\n }\n return value;\n}\n\nfunction ensureStyles() {\n if (document.getElementById(STYLE_ID)) {\n return;\n }\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = `\n .rte-render-root {\n position: relative;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n color: #1f2937;\n line-height: 1.6;\n word-break: break-word;\n }\n .rte-flow-root {\n position: relative;\n z-index: 1;\n }\n .rte-floating-root {\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 2;\n }\n .rte-node {\n margin-bottom: 12px;\n }\n .rte-paragraph,\n .rte-list-item {\n font-size: 16px;\n line-height: 1.4;\n font-weight: 400;\n }\n .rte-heading1 {\n font-size: 30px;\n line-height: 1.25;\n font-weight: 700;\n }\n .rte-heading2 {\n font-size: 22px;\n line-height: 1.3;\n font-weight: 600;\n }\n .rte-list {\n margin: 0 0 12px 0;\n padding-left: 24px;\n }\n .rte-line {\n display: flex;\n align-items: flex-start;\n min-height: 1em;\n }\n .rte-line-block {\n display: flex;\n align-items: flex-start;\n }\n .rte-token {\n white-space: pre;\n }\n .rte-token.bold {\n font-weight: 700;\n }\n .rte-token.italic {\n font-style: italic;\n }\n .rte-token.underline {\n text-decoration: underline;\n }\n .rte-token.link {\n color: #0a66c2;\n text-decoration: underline;\n }\n .rte-block-image,\n .rte-floating-image {\n overflow: hidden;\n border-radius: 12px;\n background: #e5e7eb;\n box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);\n }\n .rte-block-image img,\n .rte-floating-image img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n .rte-floating-image {\n position: absolute;\n }\n .rte-wrap-block {\n display: flex;\n gap: 16px;\n align-items: flex-start;\n }\n .rte-wrap-block.right {\n flex-direction: row-reverse;\n }\n .rte-wrap-text {\n flex: 1;\n min-width: 0;\n }\n `;\n document.head.appendChild(style);\n}\n\nfunction renderStaticNodes(flowRoot, documentModel) {\n flowRoot.innerHTML = '';\n for (const node of documentModel.nodes || []) {\n switch (node.type) {\n case 'textBlock':\n renderStaticTextNode(flowRoot, node);\n break;\n case 'list':\n renderStaticListNode(flowRoot, node);\n break;\n case 'math':\n renderStaticMathNode(flowRoot, node);\n break;\n case 'image':\n renderStaticImageNode(flowRoot, node);\n break;\n default:\n break;\n }\n }\n}\n\nfunction renderStaticTextNode(flowRoot, node) {\n const wrapper = document.createElement('div');\n wrapper.className = 'rte-node';\n wrapper.dataset.nodeId = node.id;\n wrapper.dataset.nodeType = node.type;\n flowRoot.appendChild(wrapper);\n}\n\nfunction renderStaticListNode(flowRoot, node) {\n const list = document.createElement(node.style === 'ordered' ? 'ol' : 'ul');\n list.className = 'rte-node rte-list';\n list.dataset.nodeId = node.id;\n list.dataset.nodeType = node.type;\n (node.items || []).forEach((_, index) => {\n const item = document.createElement('li');\n item.className = 'rte-list-item';\n item.dataset.nodeId = `${node.id}::${index}`;\n item.dataset.parentNodeId = node.id;\n item.dataset.nodeType = 'list-item';\n list.appendChild(item);\n });\n flowRoot.appendChild(list);\n}\n\nfunction renderStaticMathNode(flowRoot, node) {\n const wrapper = document.createElement('div');\n wrapper.className = 'rte-node';\n wrapper.dataset.nodeId = node.id;\n wrapper.dataset.nodeType = node.type;\n wrapper.innerHTML = node.displayMode === 'inline'\n ? `<span data-node=\"math-inline\" data-latex=\"${escapeHtml(node.latex)}\">\\\\(${escapeHtml(node.latex)}\\\\)</span>`\n : `<div data-node=\"math-block\" data-latex=\"${escapeHtml(node.latex)}\">\\\\[${escapeHtml(node.latex)}\\\\]</div>`;\n flowRoot.appendChild(wrapper);\n}\n\nfunction renderStaticImageNode(flowRoot, node) {\n if (node.layoutMode === 'floating') {\n return;\n }\n\n const wrapper = document.createElement('div');\n wrapper.className = 'rte-node';\n wrapper.dataset.nodeId = node.id;\n wrapper.dataset.nodeType = node.type;\n\n const width = node.width ? ` style=\"width:${node.width}px\"` : '';\n const imageHtml = `<div class=\"rte-block-image\"${width}><img src=\"${escapeHtml(node.url)}\" alt=\"${escapeHtml(node.altText || '')}\"></div>`;\n\n if (node.wrapAlignment && node.wrapAlignment !== 'none' && hasWrapSegments(node.wrapSegments)) {\n wrapper.innerHTML = `<div class=\"rte-wrap-block ${node.wrapAlignment === 'right' ? 'right' : 'left'}\">${imageHtml}<div class=\"rte-wrap-text rte-paragraph\">${segmentsHtml(node.wrapSegments)}</div></div>`;\n } else {\n wrapper.innerHTML = imageHtml;\n }\n flowRoot.appendChild(wrapper);\n}\n\nfunction rerenderLayout({ host, flowRoot, floatingRoot, documentModel }) {\n const nodeRects = readNodeRects(host, flowRoot);\n const floatRects = buildFloatingRects(documentModel, nodeRects);\n renderFloatingImages(host, floatingRoot, floatRects);\n rerenderTextNodes(flowRoot, documentModel, nodeRects, floatRects);\n const nextRects = readNodeRects(host, flowRoot);\n const nextFloatRects = buildFloatingRects(documentModel, nextRects);\n renderFloatingImages(host, floatingRoot, nextFloatRects);\n rerenderTextNodes(flowRoot, documentModel, nextRects, nextFloatRects);\n}\n\nfunction readNodeRects(host, flowRoot) {\n const rects = {};\n const rootRect = host.getBoundingClientRect();\n flowRoot.querySelectorAll('[data-node-id]').forEach((element) => {\n const rect = element.getBoundingClientRect();\n rects[element.dataset.nodeId] = {\n left: rect.left - rootRect.left,\n top: rect.top - rootRect.top,\n width: rect.width,\n height: rect.height,\n right: rect.right - rootRect.left,\n bottom: rect.bottom - rootRect.top,\n };\n });\n return rects;\n}\n\nfunction buildFloatingRects(documentModel, nodeRects) {\n const rects = {};\n for (const node of documentModel.nodes || []) {\n if (node.type !== 'image' || node.layoutMode !== 'floating') {\n continue;\n }\n const anchor = node.anchorBlockId ? nodeRects[node.anchorBlockId] : null;\n const baseLeft = anchor ? anchor.left : 0;\n const baseTop = anchor ? anchor.top : 0;\n const width = clamp(node.width || 280, MIN_IMAGE_WIDTH, MAX_IMAGE_WIDTH);\n const height = clamp(node.height || width * 0.72, MIN_IMAGE_HEIGHT, MAX_IMAGE_HEIGHT);\n rects[node.id] = {\n node,\n left: baseLeft + (node.x || 0),\n top: baseTop + (node.y || 0),\n width,\n height,\n right: baseLeft + (node.x || 0) + width,\n bottom: baseTop + (node.y || 0) + height,\n };\n }\n return rects;\n}\n\nfunction renderFloatingImages(host, floatingRoot, floatRects) {\n floatingRoot.innerHTML = '';\n let maxBottom = 0;\n Object.values(floatRects)\n .sort((a, b) => (a.node.zIndex || 0) - (b.node.zIndex || 0))\n .forEach((entry) => {\n const element = document.createElement('div');\n element.className = 'rte-floating-image';\n element.style.left = `${entry.left}px`;\n element.style.top = `${entry.top}px`;\n element.style.width = `${entry.width}px`;\n element.style.height = `${entry.height}px`;\n element.style.zIndex = String(entry.node.zIndex || 0);\n if (entry.node.rotationDegrees) {\n element.style.transform = `rotate(${entry.node.rotationDegrees}deg)`;\n }\n element.innerHTML = `<img src=\"${escapeHtml(entry.node.url)}\" alt=\"${escapeHtml(entry.node.altText || '')}\">`;\n floatingRoot.appendChild(element);\n maxBottom = Math.max(maxBottom, entry.bottom);\n });\n host.style.minHeight = `${Math.max(flowRootHeight(host), maxBottom)}px`;\n}\n\nfunction flowRootHeight(host) {\n const flowRoot = host.querySelector('.rte-flow-root');\n return flowRoot ? flowRoot.scrollHeight : 0;\n}\n\nfunction rerenderTextNodes(flowRoot, documentModel, nodeRects, floatRects) {\n for (const node of documentModel.nodes || []) {\n if (node.type === 'textBlock') {\n const element = queryNode(flowRoot, node.id);\n const rect = nodeRects[node.id];\n if (!element || !rect) {\n continue;\n }\n const style = styleForTextBlock(node.style);\n const bands = buildBands(rect, floatRects);\n element.innerHTML = '';\n if (bands.length === 0) {\n const block = document.createElement(style.tag);\n block.className = style.className;\n block.innerHTML = segmentsHtml(node.segments);\n element.appendChild(block);\n } else {\n element.appendChild(buildWrappedLayout(node.segments, style, bands, rect.width));\n }\n continue;\n }\n\n if (node.type === 'list') {\n (node.items || []).forEach((item, index) => {\n const itemId = `${node.id}::${index}`;\n const element = queryNode(flowRoot, itemId);\n const rect = nodeRects[itemId];\n if (!element || !rect) {\n return;\n }\n const style = {\n ...styleForTextBlock('paragraph'),\n className: 'rte-list-item',\n };\n const bands = buildBands(rect, floatRects);\n element.innerHTML = '';\n if (bands.length === 0) {\n element.innerHTML = segmentsHtml(item);\n } else {\n element.appendChild(buildWrappedLayout(item, style, bands, rect.width));\n }\n });\n }\n }\n}\n\nfunction queryNode(root, id) {\n for (const element of root.querySelectorAll('[data-node-id]')) {\n if (element.dataset.nodeId === id) {\n return element;\n }\n }\n return null;\n}\n\nfunction buildBands(targetRect, floatRects) {\n const bands = [];\n Object.values(floatRects).forEach((entry) => {\n const overlapTop = Math.max(entry.top, targetRect.top);\n const overlapBottom = Math.min(entry.bottom, targetRect.bottom);\n if (overlapBottom <= overlapTop) {\n return;\n }\n bands.push({\n top: overlapTop - targetRect.top,\n bottom: overlapBottom - targetRect.top,\n blockedStart: clamp(entry.left - targetRect.left, 0, targetRect.width),\n blockedEnd: clamp(entry.right - targetRect.left, 0, targetRect.width),\n });\n });\n return bands.sort((a, b) => a.top - b.top);\n}\n\nfunction buildWrappedLayout(segments, style, bands, width) {\n const container = document.createElement('div');\n container.className = style.className;\n const tokens = tokenizeSegments(segments);\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n const lineHeight = style.fontSize * style.lineHeight;\n let tokenIndex = 0;\n let currentTop = 0;\n\n while (tokenIndex < tokens.length) {\n const band = bands.find((entry) => currentTop + lineHeight > entry.top && currentTop < entry.bottom);\n if (!band) {\n const built = takeTokens(tokens, tokenIndex, width, style, context);\n tokenIndex += built.consumed;\n const line = document.createElement('div');\n line.className = 'rte-line';\n built.accepted.forEach((token) => line.appendChild(buildTokenElement(token)));\n container.appendChild(line);\n currentTop += lineHeight;\n continue;\n }\n\n const leftWidth = clamp(band.blockedStart, 0, width);\n const blockedWidth = clamp(band.blockedEnd - band.blockedStart, 0, width - leftWidth);\n const rightWidth = clamp(width - leftWidth - blockedWidth, 0, width);\n const leftBuilt = leftWidth > 48 ? takeTokens(tokens, tokenIndex, leftWidth, style, context) : { accepted: [], consumed: 0 };\n tokenIndex += leftBuilt.consumed;\n const rightBuilt = rightWidth > 48 ? takeTokens(tokens, tokenIndex, rightWidth, style, context) : { accepted: [], consumed: 0 };\n tokenIndex += rightBuilt.consumed;\n\n const row = document.createElement('div');\n row.className = `rte-line-block ${style.className}`;\n\n const left = document.createElement('div');\n left.className = 'rte-line';\n left.style.width = `${leftWidth}px`;\n left.style.minWidth = `${leftWidth}px`;\n leftBuilt.accepted.forEach((token) => left.appendChild(buildTokenElement(token)));\n\n const blocked = document.createElement('div');\n blocked.style.width = `${blockedWidth}px`;\n blocked.style.minWidth = `${blockedWidth}px`;\n\n const right = document.createElement('div');\n right.className = 'rte-line';\n right.style.width = `${rightWidth}px`;\n right.style.minWidth = `${rightWidth}px`;\n rightBuilt.accepted.forEach((token) => right.appendChild(buildTokenElement(token)));\n\n row.appendChild(left);\n row.appendChild(blocked);\n row.appendChild(right);\n container.appendChild(row);\n currentTop += lineHeight;\n }\n\n if (tokens.length === 0) {\n const empty = document.createElement('div');\n empty.className = 'rte-line';\n empty.innerHTML = '&nbsp;';\n container.appendChild(empty);\n }\n\n return container;\n}\n\nfunction tokenizeSegments(segments = []) {\n const tokens = [];\n segments.forEach((segment, index) => {\n if (segment.inlineMathLatex) {\n tokens.push({\n value: `\\\\(${segment.inlineMathLatex}\\\\)`,\n bold: false,\n italic: false,\n underline: false,\n link: null,\n isMath: true,\n });\n if (index !== segments.length - 1) {\n tokens.push({ value: ' ', bold: false, italic: false, underline: false, link: null, isMath: false });\n }\n return;\n }\n\n const text = segment.text || '';\n const matches = text.match(/\\S+\\s*/g);\n if (!matches || matches.length === 0) {\n if (text.length > 0) {\n tokens.push(toTextToken(segment, text));\n }\n return;\n }\n matches.forEach((part) => tokens.push(toTextToken(segment, part)));\n });\n return tokens;\n}\n\nfunction toTextToken(segment, value) {\n return {\n value,\n bold: !!segment.bold,\n italic: !!segment.italic,\n underline: !!segment.underline,\n link: segment.link || null,\n isMath: false,\n };\n}\n\nfunction takeTokens(tokens, startIndex, width, style, context) {\n if (startIndex >= tokens.length || width <= 0) {\n return { accepted: [], consumed: 0 };\n }\n const accepted = [];\n let consumed = 0;\n let totalWidth = 0;\n\n for (let index = startIndex; index < tokens.length; index += 1) {\n const token = tokens[index];\n const tokenWidth = measureToken(token, style, context);\n if (accepted.length > 0 && totalWidth + tokenWidth > width) {\n break;\n }\n accepted.push(token);\n consumed += 1;\n totalWidth += tokenWidth;\n }\n\n if (consumed === 0) {\n return { accepted: [tokens[startIndex]], consumed: 1 };\n }\n return { accepted, consumed };\n}\n\nfunction measureToken(token, style, context) {\n if (!context) {\n return token.value.length * style.fontSize * 0.58;\n }\n context.font = `${token.bold ? 700 : style.fontWeight} ${token.italic ? 'italic ' : ''}${style.fontSize}px -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif`;\n return context.measureText(token.value).width;\n}\n\nfunction buildTokenElement(token) {\n const element = token.link ? document.createElement('a') : document.createElement('span');\n const classes = ['rte-token'];\n if (token.bold) classes.push('bold');\n if (token.italic) classes.push('italic');\n if (token.underline) classes.push('underline');\n if (token.link) classes.push('link');\n element.className = classes.join(' ');\n if (token.link) {\n element.href = token.link;\n }\n element.innerHTML = token.isMath ? token.value : escapeHtml(token.value);\n return element;\n}\n\nfunction styleForTextBlock(style) {\n if (style === 'heading1') {\n return { tag: 'h1', className: 'rte-heading1', fontSize: 30, lineHeight: 1.25, fontWeight: 700 };\n }\n if (style === 'heading2') {\n return { tag: 'h2', className: 'rte-heading2', fontSize: 22, lineHeight: 1.3, fontWeight: 600 };\n }\n return { tag: 'p', className: 'rte-paragraph', fontSize: 16, lineHeight: 1.4, fontWeight: 400 };\n}\n\nfunction segmentsHtml(segments = []) {\n return segments.map((segment) => {\n if (segment.inlineMathLatex) {\n return `<span data-node=\"math-inline\" data-latex=\"${escapeHtml(segment.inlineMathLatex)}\">\\\\(${escapeHtml(segment.inlineMathLatex)}\\\\)</span>`;\n }\n let content = escapeHtml(segment.text || '');\n if (segment.bold) content = `<strong>${content}</strong>`;\n if (segment.italic) content = `<em>${content}</em>`;\n if (segment.underline) content = `<u>${content}</u>`;\n if (segment.link) content = `<a href=\"${escapeHtml(segment.link)}\">${content}</a>`;\n return content;\n }).join('');\n}\n\nfunction hasWrapSegments(segments = []) {\n return segments.some((segment) => (segment.text || '').trim().length > 0 || segment.inlineMathLatex);\n}\n\nfunction requestMathTypeset(element) {\n if (window.MathJax && typeof window.MathJax.typesetPromise === 'function') {\n window.MathJax.typesetPromise([element]).catch(() => {});\n }\n}\n\nfunction clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction escapeHtml(value) {\n return String(value)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["document"]
7
+ }
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "rich-text-editor-renderer",
3
+ "version": "0.1.0",
4
+ "description": "Browser renderer for rich_text_editor JSON documents",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "browser": "./dist/index.global.js",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.cjs"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md"
18
+ ],
19
+ "keywords": [
20
+ "rich-text",
21
+ "renderer",
22
+ "mathjax",
23
+ "flutter"
24
+ ],
25
+ "license": "MIT",
26
+ "scripts": {
27
+ "build": "node ./scripts/build.mjs",
28
+ "dev": "node ./scripts/build.mjs --watch",
29
+ "prepublishOnly": "npm run build"
30
+ },
31
+ "devDependencies": {
32
+ "esbuild": "^0.25.2"
33
+ }
34
+ }