@uurtech/jdf 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 @@
1
+ {"version":3,"sources":["../../packages/jdf-core/src/defaults.ts","../src/utils/style.ts","../src/utils/link.ts","../src/renderers/element.ts","../src/utils/template.ts","../src/viewer.ts","../src/auto-init.ts"],"names":["PAGE_SIZES","DEFAULT_MARGINS","MM_TO_PX","IN_TO_PX","PT_TO_PX","unitToPx","value","unit","getPageDimensions","pageSize","orientation","size","paddingToCss","p","top","right","bottom","left","styleToCss","style","css","td","resolveStyle","ref","styles","merged","k","applyStyle","el","v","resolveLink","link","target","m","attachLinkBehaviour","resolved","onNavigatePage","e","NS_SVG","renderElement","ctx","wrap","applyPositionAndSize","inner","renderText","renderRichText","renderImage","renderTable","renderList","renderShape","renderCollapsible","renderToc","any","tag","textTag","node","a","h","run","renderRun","runCss","s","decos","lookupResource","resources","key","direct","inImages","imageSrc","res","mime","img","cellText","c","cellAttrs","headerCss","rowCss","altRowCss","borders","b","headers","colAlign","i","table","thead","tr","th","tbody","row","ri","cell","ci","attrs","defaultType","root","listElementForType","buildItems","t","parent","items","def","item","li","childType","nested","w","fill","strokeColor","strokeWidth","svg","shapeNode","r","l","header","arrow","titleSpan","body","expanded","apply","child","depth","entries","page","pi","title","level","entry","btn","filler","num","resolveTemplate","text","vars","embed","container","url","options","resolveContainer","doc","render","err","escapeHtml","document","JDFViewer","firstPage","pageWidth","pageHeight","containerWidth","containerHeight","tb","act","sb","_","idx","pageInd","zoomInd","pageEl","pageIndex","dim","margins","wrapper","footer","headerH","footerH","content","elIdx","f","hf","totalPages","div","span","visible","z","clamped","d","found","PROCESSED","readOptions","opts","attr","name","zoom","n","dm","fit","processElement","src","scan","watchForNewTargets","mutations","jdf","autoInit","JdfElement","oldVal","newVal"],"mappings":"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","file":"jdfjs.js","sourcesContent":["import type { Margins, CustomPageSize, PageSizeName } from \"./types\";\n\nexport const PAGE_SIZES: Record<PageSizeName, CustomPageSize> = {\n A3: { width: 297, height: 420 },\n A4: { width: 210, height: 297 },\n A5: { width: 148, height: 210 },\n Letter: { width: 215.9, height: 279.4 },\n Legal: { width: 215.9, height: 355.6 },\n Tabloid: { width: 279.4, height: 431.8 },\n};\n\nexport const DEFAULT_MARGINS: Margins = { top: 25, right: 20, bottom: 25, left: 20 };\nexport const MM_TO_PX = 3.7795275591;\nexport const IN_TO_PX = 96;\nexport const PT_TO_PX = 1.3333333333;\n\nexport function unitToPx(value: number, unit: string = \"mm\"): number {\n switch (unit) {\n case \"mm\": return value * MM_TO_PX;\n case \"in\": return value * IN_TO_PX;\n case \"pt\": return value * PT_TO_PX;\n case \"px\": return value;\n default: return value * MM_TO_PX;\n }\n}\n\nexport function getPageDimensions(pageSize: PageSizeName | CustomPageSize, orientation: \"portrait\" | \"landscape\" = \"portrait\"): CustomPageSize {\n const size = typeof pageSize === \"string\" ? PAGE_SIZES[pageSize] : pageSize;\n if (orientation === \"landscape\") return { width: size.height, height: size.width };\n return { ...size };\n}\n","import type { Style, StyleRef } from \"@jdf/core\";\n\nfunction paddingToCss(p: NonNullable<Style[\"padding\"]>): string {\n if (typeof p === \"number\") return `${p}px`;\n if (typeof p === \"string\") return p;\n const { top = 0, right = 0, bottom = 0, left = 0 } = p;\n return `${top}px ${right}px ${bottom}px ${left}px`;\n}\n\nexport function styleToCss(style: Style): Record<string, string> {\n const css: Record<string, string> = {};\n if (style.fontFamily) css[\"font-family\"] = style.fontFamily;\n if (style.fontSize) css[\"font-size\"] = `${style.fontSize * 1.333}px`;\n if (style.fontWeight) css[\"font-weight\"] = String(style.fontWeight);\n if (style.fontStyle) css[\"font-style\"] = style.fontStyle;\n if (style.color) css[\"color\"] = style.color;\n if (style.backgroundColor) css[\"background-color\"] = style.backgroundColor;\n if (style.textAlign) css[\"text-align\"] = style.textAlign;\n if (style.textDecoration) {\n const td = style.textDecoration === \"strikethrough\" ? \"line-through\" : style.textDecoration;\n css[\"text-decoration\"] = td;\n }\n if (style.lineHeight) css[\"line-height\"] = String(style.lineHeight);\n if (style.letterSpacing != null) {\n css[\"letter-spacing\"] = typeof style.letterSpacing === \"number\" ? `${style.letterSpacing}px` : style.letterSpacing;\n }\n if (style.padding != null) css[\"padding\"] = paddingToCss(style.padding);\n if (style.margin != null) css[\"margin\"] = paddingToCss(style.margin as any);\n if (style.marginTop != null) css[\"margin-top\"] = `${style.marginTop}px`;\n if (style.marginBottom != null) css[\"margin-bottom\"] = `${style.marginBottom}px`;\n if (style.border) css[\"border\"] = style.border;\n if (style.borderRadius != null) {\n css[\"border-radius\"] = typeof style.borderRadius === \"number\" ? `${style.borderRadius}px` : style.borderRadius;\n }\n if (style.opacity != null) css[\"opacity\"] = String(style.opacity);\n return css;\n}\n\nexport function resolveStyle(ref: StyleRef | undefined, styles: Record<string, Style>): Record<string, string> {\n if (!ref) return {};\n if (typeof ref === \"string\") return styleToCss(styles[ref] || {});\n if (Array.isArray(ref)) {\n let merged: Style = {};\n for (const k of ref) merged = { ...merged, ...(styles[k] || {}) };\n return styleToCss(merged);\n }\n return styleToCss(ref);\n}\n\n/** Apply a CSS object map to an HTMLElement. */\nexport function applyStyle(el: HTMLElement, css: Record<string, string>) {\n for (const [k, v] of Object.entries(css)) el.style.setProperty(k, v);\n}\n","import type { Link } from \"@jdf/core\";\n\nexport interface ResolvedLink {\n href: string;\n internal: boolean;\n pageIndex?: number;\n}\n\nexport function resolveLink(link: Link | undefined): ResolvedLink | null {\n if (!link) return null;\n const target = typeof link === \"string\" ? link : link.target;\n const internal = typeof link === \"string\" ? link.startsWith(\"#\") : link.type === \"internal\";\n if (internal) {\n const m = target.replace(/^#/, \"\").match(/^page-(\\d+)$/i);\n if (m) return { href: target, internal: true, pageIndex: Number(m[1]) - 1 };\n return { href: target, internal: true };\n }\n return { href: target, internal: false };\n}\n\nexport function attachLinkBehaviour(\n el: HTMLAnchorElement,\n resolved: ResolvedLink,\n onNavigatePage?: (idx: number) => void\n) {\n el.href = resolved.href;\n if (resolved.internal) {\n el.addEventListener(\"click\", (e) => {\n if (resolved.pageIndex != null && onNavigatePage) {\n e.preventDefault();\n onNavigatePage(resolved.pageIndex);\n }\n });\n } else {\n el.target = \"_blank\";\n el.rel = \"noopener noreferrer\";\n }\n}\n","import type {\n Element, Style, Resources, JdfDocument,\n TextElement, RichTextElement, ImageElement, TableElement, ListElement,\n ShapeElement, CollapsibleElement, TocElement, RichTextRun, ListItem, TableCellValue, ImageResource,\n} from \"@jdf/core\";\nimport { unitToPx } from \"@jdf/core\";\nimport { resolveStyle, styleToCss, applyStyle } from \"../utils/style\";\nimport { resolveLink, attachLinkBehaviour } from \"../utils/link\";\n\nexport interface RenderContext {\n styles: Record<string, Style>;\n resources?: Resources;\n document: JdfDocument;\n path: (string | number)[];\n onNavigatePage?: (pageIndex: number) => void;\n}\n\nconst NS_SVG = \"http://www.w3.org/2000/svg\";\n\nexport function renderElement(el: Element, ctx: RenderContext): HTMLElement | null {\n const wrap = document.createElement(\"div\");\n applyPositionAndSize(wrap, el);\n let inner: HTMLElement | null = null;\n switch (el.type) {\n case \"text\": inner = renderText(el, ctx); break;\n case \"richtext\": inner = renderRichText(el, ctx); break;\n case \"image\": inner = renderImage(el, ctx); break;\n case \"table\": inner = renderTable(el, ctx); break;\n case \"list\": inner = renderList(el, ctx); break;\n case \"shape\": inner = renderShape(el); break;\n case \"collapsible\": inner = renderCollapsible(el, ctx); break;\n case \"toc\": inner = renderToc(el, ctx); break;\n }\n if (!inner) return null;\n wrap.appendChild(inner);\n return wrap;\n}\n\nfunction applyPositionAndSize(el: HTMLElement, e: Element) {\n const any = e as any;\n if (any.position) {\n el.style.position = \"absolute\";\n if (any.position.x != null) el.style.left = `${unitToPx(any.position.x)}px`;\n if (any.position.y != null) el.style.top = `${unitToPx(any.position.y)}px`;\n }\n if (any.width != null) el.style.width = `${unitToPx(any.width)}px`;\n if (any.height != null) el.style.height = `${unitToPx(any.height)}px`;\n}\n\n// ── text ────────────────────────────────────────────────────────────────────\nfunction renderText(el: TextElement, ctx: RenderContext): HTMLElement {\n const tag = textTag(el.heading);\n const node = document.createElement(tag);\n node.className = \"jdfjs-text\";\n node.style.margin = \"0\";\n node.style.whiteSpace = \"pre-wrap\";\n applyStyle(node, resolveStyle(el.style, ctx.styles));\n if (el.align) node.style.textAlign = el.align;\n\n const link = resolveLink(el.link);\n if (link) {\n const a = document.createElement(\"a\");\n attachLinkBehaviour(a, link, ctx.onNavigatePage);\n a.className = \"jdfjs-link\";\n a.textContent = el.content || \"\";\n node.appendChild(a);\n } else {\n node.textContent = el.content || \"\";\n }\n return node;\n}\n\nfunction textTag(h: TextElement[\"heading\"]): keyof HTMLElementTagNameMap {\n if (h === true) return \"h1\";\n if (typeof h === \"number\" && h >= 1 && h <= 6) return (\"h\" + h) as keyof HTMLElementTagNameMap;\n return \"p\";\n}\n\n// ── richtext ────────────────────────────────────────────────────────────────\nfunction renderRichText(el: RichTextElement, ctx: RenderContext): HTMLElement {\n const p = document.createElement(\"p\");\n p.className = \"jdfjs-richtext\";\n p.style.margin = \"0\";\n applyStyle(p, resolveStyle(el.style, ctx.styles));\n for (const run of el.runs || []) {\n p.appendChild(renderRun(run, ctx));\n }\n return p;\n}\n\nfunction runCss(run: RichTextRun, styles: Record<string, Style>): Record<string, string> {\n const css: Record<string, string> = {};\n if (run.style) {\n if (typeof run.style === \"string\") Object.assign(css, styleToCss(styles[run.style] || {}));\n else if (Array.isArray(run.style)) for (const s of run.style) Object.assign(css, styleToCss(styles[s] || {}));\n else Object.assign(css, styleToCss(run.style));\n }\n if (run.bold) css[\"font-weight\"] = \"bold\";\n if (run.italic) css[\"font-style\"] = \"italic\";\n const decos: string[] = [];\n if (run.underline) decos.push(\"underline\");\n if (run.strikethrough) decos.push(\"line-through\");\n if (decos.length) css[\"text-decoration\"] = decos.join(\" \");\n if (run.color) css[\"color\"] = run.color;\n if (run.fontSize) css[\"font-size\"] = `${run.fontSize * 1.333}px`;\n if (run.fontFamily) css[\"font-family\"] = run.fontFamily;\n return css;\n}\n\nfunction renderRun(run: RichTextRun, ctx: RenderContext): HTMLElement {\n const link = resolveLink(run.link);\n const node: HTMLElement = link ? document.createElement(\"a\") : document.createElement(\"span\");\n if (link) {\n attachLinkBehaviour(node as HTMLAnchorElement, link, ctx.onNavigatePage);\n node.classList.add(\"jdfjs-link\");\n }\n applyStyle(node, runCss(run, ctx.styles));\n node.textContent = run.text;\n return node;\n}\n\n// ── image ───────────────────────────────────────────────────────────────────\nfunction lookupResource(resources: Resources | undefined, key: string): ImageResource | undefined {\n if (!resources) return undefined;\n const direct = (resources as any)[key];\n if (direct && typeof direct === \"object\" && \"data\" in direct) return direct as ImageResource;\n const inImages = resources.images?.[key];\n if (inImages) return inImages;\n return undefined;\n}\n\nfunction imageSrc(el: ImageElement, resources?: Resources): string {\n if (el.src?.startsWith(\"data:\") || el.src?.startsWith(\"http\")) return el.src;\n if (el.resource) {\n const res = lookupResource(resources, el.resource);\n if (res?.data) {\n const mime = res.mimeType || \"image/png\";\n if (res.data.startsWith(\"data:\")) return res.data;\n return `data:${mime};base64,${res.data}`;\n }\n if (res?.path) return res.path;\n }\n return el.src || \"\";\n}\n\nfunction renderImage(el: ImageElement, ctx: RenderContext): HTMLElement {\n const wrap = document.createElement(\"div\");\n wrap.className = \"jdfjs-image\";\n wrap.style.width = \"100%\";\n wrap.style.height = \"100%\";\n const img = document.createElement(\"img\");\n img.src = imageSrc(el, ctx.resources);\n img.alt = el.alt || \"\";\n img.style.display = \"block\";\n img.style.width = \"100%\";\n img.style.height = \"100%\";\n switch (el.fit) {\n case \"cover\": img.style.objectFit = \"cover\"; break;\n case \"fill\": img.style.objectFit = \"fill\"; break;\n case \"none\": img.style.objectFit = \"none\"; break;\n default: img.style.objectFit = \"contain\";\n }\n applyStyle(img, resolveStyle(el.style, ctx.styles));\n wrap.appendChild(img);\n return wrap;\n}\n\n// ── table ───────────────────────────────────────────────────────────────────\nfunction cellText(c: TableCellValue): string {\n return typeof c === \"string\" ? c : c.content;\n}\nfunction cellAttrs(c: TableCellValue): { colspan?: number; rowspan?: number } {\n if (typeof c === \"string\") return {};\n return { colspan: c.colspan, rowspan: c.rowspan };\n}\n\nfunction renderTable(el: TableElement, ctx: RenderContext): HTMLElement {\n const wrap = document.createElement(\"div\");\n wrap.className = \"jdfjs-table-wrap\";\n applyStyle(wrap, resolveStyle(el.style, ctx.styles));\n wrap.style.overflowX = \"auto\";\n\n const headerCss = (() => {\n const s = el.headerStyle;\n if (!s) return {};\n if (typeof s === \"string\") return styleToCss(ctx.styles[s] || {});\n if (Array.isArray(s)) { let m = {}; for (const k of s) m = { ...m, ...styleToCss(ctx.styles[k] || {}) }; return m; }\n return styleToCss(s);\n })();\n const rowCss = (() => {\n const s = el.rowStyle;\n if (!s) return {};\n if (typeof s === \"string\") return styleToCss(ctx.styles[s] || {});\n if (Array.isArray(s)) { let m = {}; for (const k of s) m = { ...m, ...styleToCss(ctx.styles[k] || {}) }; return m; }\n return styleToCss(s);\n })();\n const altRowCss = (() => {\n const s = el.alternateRowStyle;\n if (!s) {\n const c = el.alternatingRowColor;\n return c ? { \"background-color\": c } : {};\n }\n if (typeof s === \"string\") return styleToCss(ctx.styles[s] || {});\n if (Array.isArray(s)) { let m = {}; for (const k of s) m = { ...m, ...styleToCss(ctx.styles[k] || {}) }; return m; }\n return styleToCss(s);\n })();\n const borders = (() => {\n const b = el.borders;\n if (b === false) return { outer: false, inner: false } as const;\n if (b === true || b === undefined) return { outer: true, inner: true, color: \"#e2e8f0\", width: 1 } as const;\n return { outer: true, inner: true, color: \"#e2e8f0\", width: 1, ...b } as const;\n })();\n\n const headers = el.headers ?? el.columns?.map((c) => c.header || \"\").filter((h) => h !== \"\");\n const colAlign = (i: number) => el.columns?.[i]?.align;\n\n const table = document.createElement(\"table\");\n table.style.width = \"100%\";\n table.style.borderCollapse = \"collapse\";\n table.style.fontSize = \"14px\";\n if (borders.outer) table.style.border = `${borders.width || 1}px solid ${borders.color || \"#e2e8f0\"}`;\n\n if (headers && headers.length > 0) {\n const thead = document.createElement(\"thead\");\n const tr = document.createElement(\"tr\");\n applyStyle(tr, headerCss as any);\n headers.forEach((h, i) => {\n const th = document.createElement(\"th\");\n th.textContent = h;\n th.style.padding = \"8px 12px\";\n th.style.fontWeight = \"600\";\n th.style.background = \"#f8fafc\";\n th.style.textAlign = colAlign(i) || \"left\";\n if (borders.inner) th.style.border = `${borders.width || 1}px solid ${borders.color || \"#e2e8f0\"}`;\n tr.appendChild(th);\n });\n thead.appendChild(tr);\n table.appendChild(thead);\n }\n\n const tbody = document.createElement(\"tbody\");\n el.rows.forEach((row, ri) => {\n const tr = document.createElement(\"tr\");\n applyStyle(tr, rowCss as any);\n if (ri % 2 === 1) applyStyle(tr, altRowCss as any);\n row.forEach((cell, ci) => {\n const td = document.createElement(\"td\");\n td.textContent = cellText(cell);\n const attrs = cellAttrs(cell);\n if (attrs.colspan) td.colSpan = attrs.colspan;\n if (attrs.rowspan) td.rowSpan = attrs.rowspan;\n td.style.padding = \"8px 12px\";\n td.style.verticalAlign = \"top\";\n td.style.textAlign = colAlign(ci) || \"left\";\n if (borders.inner) td.style.border = `${borders.width || 1}px solid ${borders.color || \"#e2e8f0\"}`;\n tr.appendChild(td);\n });\n tbody.appendChild(tr);\n });\n table.appendChild(tbody);\n wrap.appendChild(table);\n return wrap;\n}\n\n// ── list ────────────────────────────────────────────────────────────────────\nfunction renderList(el: ListElement, ctx: RenderContext): HTMLElement {\n const wrap = document.createElement(\"div\");\n wrap.className = \"jdfjs-list-wrap\";\n applyStyle(wrap, resolveStyle(el.style, ctx.styles));\n\n const defaultType = el.listType ?? (el.ordered ? \"ordered\" : \"unordered\");\n const root = listElementForType(defaultType);\n buildItems(root, el.items || [], defaultType, ctx);\n wrap.appendChild(root);\n return wrap;\n}\n\nfunction listElementForType(t: \"ordered\" | \"unordered\") {\n const node = document.createElement(t === \"ordered\" ? \"ol\" : \"ul\");\n node.style.margin = \"0\";\n node.style.paddingLeft = \"20px\";\n node.style.listStyle = t === \"ordered\" ? \"decimal\" : \"disc\";\n return node;\n}\n\nfunction buildItems(parent: HTMLElement, items: ListItem[], def: \"ordered\" | \"unordered\", ctx: RenderContext) {\n for (const item of items) {\n const li = document.createElement(\"li\");\n li.style.fontSize = \"14px\";\n li.style.lineHeight = \"1.6\";\n li.appendChild(document.createTextNode(item.content));\n if (item.children?.length) {\n const childType = item.listType || def;\n const nested = listElementForType(childType);\n nested.style.marginTop = \"4px\";\n buildItems(nested, item.children, childType, ctx);\n li.appendChild(nested);\n }\n parent.appendChild(li);\n }\n}\n\n// ── shape ───────────────────────────────────────────────────────────────────\nfunction renderShape(el: ShapeElement): HTMLElement {\n const wrap = document.createElement(\"div\");\n wrap.className = \"jdfjs-shape\";\n wrap.style.width = \"100%\";\n wrap.style.height = \"100%\";\n\n const w = el.width ?? 100;\n const h = el.height ?? 100;\n const fill = el.fill ?? \"none\";\n const strokeColor = (() => {\n const s = el.stroke;\n if (typeof s === \"string\") return s;\n if (s?.color) return s.color;\n return \"none\";\n })();\n const strokeWidth = (() => {\n const s = el.stroke;\n if (typeof s === \"object\" && s?.width != null) return s.width;\n return el.strokeWidth ?? 0;\n })();\n\n const svg = document.createElementNS(NS_SVG, \"svg\");\n svg.setAttribute(\"width\", \"100%\");\n svg.setAttribute(\"height\", \"100%\");\n svg.setAttribute(\"viewBox\", `0 0 ${w} ${h}`);\n svg.setAttribute(\"preserveAspectRatio\", \"none\");\n svg.style.display = \"block\";\n svg.style.overflow = \"visible\";\n\n let shapeNode: SVGElement | null = null;\n switch (el.shape) {\n case \"rect\": {\n const r = document.createElementNS(NS_SVG, \"rect\");\n r.setAttribute(\"x\", \"0\");\n r.setAttribute(\"y\", \"0\");\n r.setAttribute(\"width\", String(w));\n r.setAttribute(\"height\", String(h));\n if (el.borderRadius) r.setAttribute(\"rx\", String(el.borderRadius));\n shapeNode = r;\n break;\n }\n case \"circle\": {\n const c = document.createElementNS(NS_SVG, \"circle\");\n c.setAttribute(\"cx\", String(w / 2));\n c.setAttribute(\"cy\", String(h / 2));\n c.setAttribute(\"r\", String(Math.min(w, h) / 2));\n shapeNode = c;\n break;\n }\n case \"ellipse\": {\n const e = document.createElementNS(NS_SVG, \"ellipse\");\n e.setAttribute(\"cx\", String(w / 2));\n e.setAttribute(\"cy\", String(h / 2));\n e.setAttribute(\"rx\", String(w / 2));\n e.setAttribute(\"ry\", String(h / 2));\n shapeNode = e;\n break;\n }\n case \"line\": {\n const l = document.createElementNS(NS_SVG, \"line\");\n l.setAttribute(\"x1\", \"0\");\n l.setAttribute(\"y1\", \"0\");\n l.setAttribute(\"x2\", String(w));\n l.setAttribute(\"y2\", String(h));\n l.setAttribute(\"stroke\", strokeColor === \"none\" ? (fill !== \"none\" ? fill : \"currentColor\") : strokeColor);\n l.setAttribute(\"stroke-width\", String(strokeWidth || 0.3));\n svg.appendChild(l);\n wrap.appendChild(svg);\n return wrap;\n }\n case \"path\": {\n const p = document.createElementNS(NS_SVG, \"path\");\n p.setAttribute(\"d\", el.path || \"\");\n p.setAttribute(\"fill-rule\", \"evenodd\");\n shapeNode = p;\n break;\n }\n }\n if (shapeNode) {\n shapeNode.setAttribute(\"fill\", fill);\n shapeNode.setAttribute(\"stroke\", strokeColor);\n if (strokeWidth) shapeNode.setAttribute(\"stroke-width\", String(strokeWidth));\n svg.appendChild(shapeNode);\n }\n wrap.appendChild(svg);\n return wrap;\n}\n\n// ── collapsible ─────────────────────────────────────────────────────────────\nfunction renderCollapsible(el: CollapsibleElement, ctx: RenderContext): HTMLElement {\n const wrap = document.createElement(\"div\");\n wrap.className = \"jdfjs-collapsible\";\n applyStyle(wrap, resolveStyle(el.style, ctx.styles));\n wrap.style.border = \"1px solid #e2e8f0\";\n wrap.style.borderRadius = \"8px\";\n wrap.style.overflow = \"hidden\";\n wrap.style.background = \"#ffffff\";\n\n const header = document.createElement(\"button\");\n header.type = \"button\";\n header.className = \"jdfjs-collapsible-header\";\n header.style.width = \"100%\";\n header.style.display = \"flex\";\n header.style.alignItems = \"center\";\n header.style.gap = \"8px\";\n header.style.padding = \"10px 16px\";\n header.style.fontSize = \"14px\";\n header.style.fontWeight = \"500\";\n header.style.background = \"#f8fafc\";\n header.style.border = \"0\";\n header.style.cursor = \"pointer\";\n header.style.textAlign = \"left\";\n\n const arrow = document.createElement(\"span\");\n arrow.textContent = \"▶\";\n arrow.style.fontSize = \"10px\";\n arrow.style.transition = \"transform 0.15s ease\";\n\n const titleSpan = document.createElement(\"span\");\n titleSpan.textContent = el.title || \"Section\";\n titleSpan.style.flex = \"1\";\n\n header.appendChild(arrow);\n header.appendChild(titleSpan);\n wrap.appendChild(header);\n\n const body = document.createElement(\"div\");\n body.className = \"jdfjs-collapsible-body\";\n body.style.padding = \"12px 16px\";\n body.style.position = \"relative\";\n\n let expanded = el.expanded ?? false;\n const apply = () => {\n body.style.display = expanded ? \"block\" : \"none\";\n arrow.style.transform = expanded ? \"rotate(90deg)\" : \"rotate(0deg)\";\n };\n apply();\n header.addEventListener(\"click\", () => { expanded = !expanded; apply(); });\n\n for (const child of el.elements || []) {\n const node = renderElement(child, { ...ctx, path: [...ctx.path, \"elements\"] });\n if (node) body.appendChild(node);\n }\n wrap.appendChild(body);\n return wrap;\n}\n\n// ── toc ─────────────────────────────────────────────────────────────────────\nfunction renderToc(el: TocElement, ctx: RenderContext): HTMLElement {\n const wrap = document.createElement(\"div\");\n wrap.className = \"jdfjs-toc\";\n applyStyle(wrap, resolveStyle(el.style, ctx.styles));\n\n const depth = el.depth ?? 6;\n const entries: { title: string; pageIndex: number; level: number }[] = [];\n ctx.document.pages.forEach((page, pi) => {\n for (const e of page.elements) {\n if (e.type !== \"text\") continue;\n const t = e as TextElement;\n const title = t.tocEntry || (t.heading ? t.content : null);\n if (!title) continue;\n const level = typeof t.tocLevel === \"number\" ? t.tocLevel : (typeof t.heading === \"number\" ? t.heading : 1);\n if (level > depth) continue;\n entries.push({ title, pageIndex: pi, level });\n }\n });\n\n for (const entry of entries) {\n const btn = document.createElement(\"button\");\n btn.type = \"button\";\n btn.className = \"jdfjs-toc-entry\";\n btn.style.display = \"flex\";\n btn.style.alignItems = \"baseline\";\n btn.style.gap = \"8px\";\n btn.style.width = \"100%\";\n btn.style.background = \"transparent\";\n btn.style.border = \"0\";\n btn.style.borderBottom = \"1px dotted #e2e8f0\";\n btn.style.padding = `6px 8px 6px ${(entry.level - 1) * 16 + 8}px`;\n btn.style.cursor = \"pointer\";\n btn.style.fontSize = \"14px\";\n btn.style.color = \"#334155\";\n btn.style.textAlign = \"left\";\n\n const titleSpan = document.createElement(\"span\");\n titleSpan.textContent = entry.title;\n titleSpan.style.flex = \"1\";\n\n const filler = document.createElement(\"span\");\n filler.style.flex = \"1\";\n filler.style.borderBottom = \"1px dotted #cbd5e1\";\n filler.style.alignSelf = \"end\";\n filler.style.marginBottom = \"4px\";\n\n const num = document.createElement(\"span\");\n num.textContent = String(entry.pageIndex + 1);\n num.style.fontFamily = \"JetBrains Mono, monospace\";\n num.style.fontSize = \"12px\";\n num.style.color = \"#94a3b8\";\n num.style.flexShrink = \"0\";\n\n btn.appendChild(titleSpan);\n btn.appendChild(filler);\n btn.appendChild(num);\n\n btn.addEventListener(\"click\", () => ctx.onNavigatePage?.(entry.pageIndex));\n wrap.appendChild(btn);\n }\n return wrap;\n}\n","export interface TemplateVars {\n pageNumber: number;\n totalPages: number;\n title: string;\n author: string;\n}\n\nexport function resolveTemplate(text: string, vars: TemplateVars): string {\n return text\n .replace(/\\{\\{pageNumber\\}\\}/g, String(vars.pageNumber))\n .replace(/\\{\\{totalPages\\}\\}/g, String(vars.totalPages))\n .replace(/\\{\\{title\\}\\}/g, vars.title)\n .replace(/\\{\\{author\\}\\}/g, vars.author);\n}\n","import type { JdfDocument, Element, Page, Style, StyleRef, HeaderFooter } from \"@jdf/core\";\nimport { getPageDimensions, unitToPx, DEFAULT_MARGINS } from \"@jdf/core\";\nimport { renderElement } from \"./renderers/element\";\nimport { resolveStyle } from \"./utils/style\";\nimport { resolveTemplate } from \"./utils/template\";\n\nexport interface JDFViewerOptions {\n /** Initial zoom level. 1 = 100%. Default: 1 */\n zoom?: number;\n /** Show the page sidebar. Default: false (most embeds want a clean look) */\n sidebar?: boolean;\n /** Show the toolbar (zoom, page nav, search). Default: true */\n toolbar?: boolean;\n /** Use dark mode. Default: follows `prefers-color-scheme` */\n darkMode?: \"auto\" | \"light\" | \"dark\";\n /** Initial page index (0-based). Default: 0 */\n initialPage?: number;\n /** Container width. Number = pixels. String = any CSS length (\"100%\", \"60ch\", \"640px\"). */\n width?: number | string;\n /** Container height. Number = pixels. String = any CSS length (\"80vh\", \"600px\"). Default: \"600px\". */\n height?: number | string;\n /** Page-fit strategy:\n * \"manual\" — exact zoom from `zoom` option (default)\n * \"fit-width\" — auto-zoom each page to fill container width\n * \"fit-page\" — auto-zoom so a whole page is visible\n */\n fit?: \"manual\" | \"fit-width\" | \"fit-page\";\n /** Called when the user navigates to a different page */\n onPageChange?: (pageIndex: number) => void;\n /** Called once the document finishes rendering */\n onLoad?: (doc: JdfDocument) => void;\n /** Called on any rendering error */\n onError?: (err: Error) => void;\n}\n\nexport interface JDFViewerInstance {\n /** The container element */\n container: HTMLElement;\n /** The current document */\n document: JdfDocument;\n /** Get / set zoom (1 = 100%) */\n setZoom: (zoom: number) => void;\n getZoom: () => number;\n /** Navigate to a page (0-based) */\n goToPage: (pageIndex: number) => void;\n getCurrentPage: () => number;\n /** Replace the document */\n setDocument: (doc: JdfDocument) => void;\n /** Tear down — removes DOM and event listeners */\n destroy: () => void;\n}\n\n/**\n * Embed a JDF document into a container by URL.\n * The simplest \"PDF.js-like\" usage.\n */\nexport async function embed(\n container: HTMLElement | string,\n url: string,\n options: JDFViewerOptions = {}\n): Promise<JDFViewerInstance> {\n const el = resolveContainer(container);\n el.classList.add(\"jdfjs-loading\");\n try {\n const res = await fetch(url, { headers: { Accept: \"application/json,application/jdf+json\" } });\n if (!res.ok) throw new Error(`Failed to fetch ${url} (${res.status})`);\n const doc = (await res.json()) as JdfDocument;\n if (!doc?.$jdf) throw new Error(\"Not a valid JDF document (missing $jdf field)\");\n el.classList.remove(\"jdfjs-loading\");\n return render(el, doc, options);\n } catch (err) {\n el.classList.remove(\"jdfjs-loading\");\n el.classList.add(\"jdfjs-error\");\n el.innerHTML = `<div class=\"jdfjs-error-msg\">${escapeHtml((err as Error).message)}</div>`;\n options.onError?.(err as Error);\n throw err;\n }\n}\n\n/**\n * Render a JDF document directly into a container. No fetch.\n */\nexport function render(\n container: HTMLElement | string,\n document: JdfDocument,\n options: JDFViewerOptions = {}\n): JDFViewerInstance {\n const el = resolveContainer(container);\n return new JDFViewer(el, document, options).getInstance();\n}\n\n/**\n * Class form for advanced consumers (event subscriptions, custom toolbar wiring, etc).\n */\nexport class JDFViewer {\n private container: HTMLElement;\n private doc: JdfDocument;\n private options: Required<Pick<JDFViewerOptions, \"zoom\" | \"sidebar\" | \"toolbar\" | \"darkMode\" | \"initialPage\" | \"fit\">> & JDFViewerOptions;\n private zoom: number;\n private currentPage: number;\n private resizeObs: ResizeObserver | null = null;\n private pagesEl!: HTMLDivElement;\n private toolbarEl: HTMLDivElement | null = null;\n private sidebarEl: HTMLDivElement | null = null;\n private root!: HTMLDivElement;\n private observer: IntersectionObserver | null = null;\n\n constructor(container: HTMLElement, doc: JdfDocument, options: JDFViewerOptions = {}) {\n this.container = container;\n this.doc = doc;\n this.options = {\n zoom: options.zoom ?? 1,\n sidebar: options.sidebar ?? false,\n toolbar: options.toolbar ?? true,\n darkMode: options.darkMode ?? \"auto\",\n initialPage: options.initialPage ?? 0,\n fit: options.fit ?? \"manual\",\n ...options,\n };\n this.zoom = this.options.zoom;\n this.currentPage = this.options.initialPage;\n this.applyContainerSize();\n this.mount();\n queueMicrotask(() => this.options.onLoad?.(this.doc));\n }\n\n private applyContainerSize() {\n const w = this.options.width;\n const h = this.options.height;\n if (w != null) {\n this.container.style.width = typeof w === \"number\" ? `${w}px` : w;\n }\n if (h != null) {\n this.container.style.height = typeof h === \"number\" ? `${h}px` : h;\n }\n }\n\n private mount() {\n this.container.innerHTML = \"\";\n this.container.classList.add(\"jdfjs\");\n if (this.options.darkMode === \"dark\") this.container.classList.add(\"jdfjs-dark\");\n else if (this.options.darkMode === \"auto\") {\n if (window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches) {\n this.container.classList.add(\"jdfjs-dark\");\n }\n }\n\n this.root = document.createElement(\"div\");\n this.root.className = \"jdfjs-root\";\n\n if (this.options.toolbar) {\n this.toolbarEl = this.buildToolbar();\n this.root.appendChild(this.toolbarEl);\n }\n\n const body = document.createElement(\"div\");\n body.className = \"jdfjs-body\";\n\n if (this.options.sidebar) {\n this.sidebarEl = this.buildSidebar();\n body.appendChild(this.sidebarEl);\n }\n\n this.pagesEl = document.createElement(\"div\");\n this.pagesEl.className = \"jdfjs-pages\";\n body.appendChild(this.pagesEl);\n\n this.root.appendChild(body);\n this.container.appendChild(this.root);\n this.renderAllPages();\n this.setupScrollObserver();\n this.setupResizeObserver();\n this.applyFit();\n if (this.currentPage > 0) this.scrollToPage(this.currentPage);\n }\n\n private setupResizeObserver() {\n if (typeof ResizeObserver === \"undefined\") return;\n this.resizeObs?.disconnect();\n this.resizeObs = new ResizeObserver(() => this.applyFit());\n this.resizeObs.observe(this.pagesEl);\n }\n\n /** Auto-zoom for fit modes. */\n private applyFit() {\n if (this.options.fit === \"manual\") return;\n const firstPage = this.pagesEl.querySelector<HTMLElement>(\".jdfjs-page\");\n if (!firstPage) return;\n // Read intrinsic page size from the inline width/min-height in px (set in renderPage)\n const pageWidth = parseFloat(firstPage.style.width || \"0\");\n const pageHeight = parseFloat(firstPage.style.minHeight || \"0\");\n if (!pageWidth || !pageHeight) return;\n const containerWidth = this.pagesEl.clientWidth - 32; // margin\n const containerHeight = this.pagesEl.clientHeight - 32;\n if (this.options.fit === \"fit-width\") {\n this.zoom = Math.max(0.25, Math.min(3, containerWidth / pageWidth));\n } else if (this.options.fit === \"fit-page\") {\n this.zoom = Math.max(0.25, Math.min(3, Math.min(containerWidth / pageWidth, containerHeight / pageHeight)));\n }\n this.applyZoom();\n this.updateIndicators();\n }\n\n private buildToolbar(): HTMLDivElement {\n const tb = document.createElement(\"div\");\n tb.className = \"jdfjs-toolbar\";\n tb.innerHTML = `\n <span class=\"jdfjs-title\"></span>\n <div class=\"jdfjs-spacer\"></div>\n <button class=\"jdfjs-btn\" data-act=\"prev\" title=\"Previous page\">‹</button>\n <span class=\"jdfjs-page-indicator\"></span>\n <button class=\"jdfjs-btn\" data-act=\"next\" title=\"Next page\">›</button>\n <span class=\"jdfjs-divider\"></span>\n <button class=\"jdfjs-btn\" data-act=\"zoom-out\" title=\"Zoom out\">−</button>\n <span class=\"jdfjs-zoom-indicator\"></span>\n <button class=\"jdfjs-btn\" data-act=\"zoom-in\" title=\"Zoom in\">+</button>\n `;\n tb.querySelector(\".jdfjs-title\")!.textContent = this.doc.meta?.title ?? \"Document\";\n this.updateIndicators(tb);\n\n tb.addEventListener(\"click\", (e) => {\n const target = (e.target as HTMLElement).closest(\"[data-act]\");\n if (!target) return;\n const act = target.getAttribute(\"data-act\");\n if (act === \"prev\") this.goToPage(this.currentPage - 1);\n else if (act === \"next\") this.goToPage(this.currentPage + 1);\n else if (act === \"zoom-in\") this.setZoom(this.zoom + 0.1);\n else if (act === \"zoom-out\") this.setZoom(this.zoom - 0.1);\n });\n return tb;\n }\n\n private buildSidebar(): HTMLDivElement {\n const sb = document.createElement(\"div\");\n sb.className = \"jdfjs-sidebar\";\n this.doc.pages.forEach((_, idx) => {\n const btn = document.createElement(\"button\");\n btn.className = \"jdfjs-sidebar-thumb\";\n btn.setAttribute(\"data-page\", String(idx));\n btn.innerHTML = `<span class=\"jdfjs-sidebar-num\">${idx + 1}</span>`;\n btn.addEventListener(\"click\", () => this.goToPage(idx));\n sb.appendChild(btn);\n });\n return sb;\n }\n\n private updateIndicators(tb: HTMLElement = this.toolbarEl!) {\n if (!tb) return;\n const pageInd = tb.querySelector(\".jdfjs-page-indicator\");\n if (pageInd) pageInd.textContent = `${this.currentPage + 1} / ${this.doc.pages.length}`;\n const zoomInd = tb.querySelector(\".jdfjs-zoom-indicator\");\n if (zoomInd) zoomInd.textContent = `${Math.round(this.zoom * 100)}%`;\n if (this.sidebarEl) {\n this.sidebarEl.querySelectorAll(\".jdfjs-sidebar-thumb\").forEach((el) => {\n const idx = Number(el.getAttribute(\"data-page\"));\n el.classList.toggle(\"jdfjs-sidebar-thumb-active\", idx === this.currentPage);\n });\n }\n }\n\n private renderAllPages() {\n this.pagesEl.innerHTML = \"\";\n const styles = this.doc.styles ?? {};\n this.doc.pages.forEach((page, idx) => {\n const pageEl = this.renderPage(page, idx, styles);\n this.pagesEl.appendChild(pageEl);\n });\n this.applyZoom();\n }\n\n private renderPage(page: Page, pageIndex: number, styles: Record<string, Style>): HTMLDivElement {\n const dim = getPageDimensions(\n page.pageSize ?? this.doc.meta?.pageSize ?? \"A4\",\n page.pageOrientation ?? this.doc.meta?.pageOrientation ?? \"portrait\"\n );\n const margins = { ...DEFAULT_MARGINS, ...(this.doc.meta?.margins || {}), ...(page.margins || {}) };\n\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"jdfjs-page-wrapper\";\n wrapper.setAttribute(\"data-page-index\", String(pageIndex));\n\n const pageEl = document.createElement(\"div\");\n pageEl.className = \"jdfjs-page\";\n pageEl.style.width = `${unitToPx(dim.width)}px`;\n pageEl.style.minHeight = `${unitToPx(dim.height)}px`;\n if (page.background) pageEl.style.backgroundColor = page.background;\n\n const header = page.header ?? this.doc.header;\n const footer = page.footer ?? this.doc.footer;\n const headerH = header?.height ?? 0;\n const footerH = footer?.height ?? 0;\n\n if (header) {\n const h = this.renderHeaderFooter(header, pageIndex, this.doc.pages.length, styles);\n h.classList.add(\"jdfjs-header\");\n h.style.paddingTop = `${unitToPx(margins.top! / 2)}px`;\n h.style.paddingLeft = `${unitToPx(margins.left!)}px`;\n h.style.paddingRight = `${unitToPx(margins.right!)}px`;\n pageEl.appendChild(h);\n }\n\n const content = document.createElement(\"div\");\n content.className = \"jdfjs-page-content\";\n content.style.position = \"relative\";\n content.style.paddingTop = `${unitToPx((margins.top || 0) + headerH)}px`;\n content.style.paddingRight = `${unitToPx(margins.right || 0)}px`;\n content.style.paddingBottom = `${unitToPx((margins.bottom || 0) + footerH)}px`;\n content.style.paddingLeft = `${unitToPx(margins.left || 0)}px`;\n\n page.elements.forEach((el, elIdx) => {\n const node = renderElement(el, {\n styles,\n resources: this.doc.resources,\n document: this.doc,\n path: [\"pages\", pageIndex, \"elements\", elIdx],\n onNavigatePage: (idx) => this.goToPage(idx),\n });\n if (node) content.appendChild(node);\n });\n pageEl.appendChild(content);\n\n if (footer) {\n const f = this.renderHeaderFooter(footer, pageIndex, this.doc.pages.length, styles);\n f.classList.add(\"jdfjs-footer\");\n f.style.paddingBottom = `${unitToPx(margins.bottom! / 2)}px`;\n f.style.paddingLeft = `${unitToPx(margins.left!)}px`;\n f.style.paddingRight = `${unitToPx(margins.right!)}px`;\n pageEl.appendChild(f);\n }\n\n wrapper.appendChild(pageEl);\n return wrapper;\n }\n\n private renderHeaderFooter(hf: HeaderFooter, pageIndex: number, totalPages: number, styles: Record<string, Style>): HTMLDivElement {\n const div = document.createElement(\"div\");\n if (hf.elements?.length) {\n hf.elements.forEach((el, idx) => {\n const node = renderElement(el, {\n styles,\n resources: this.doc.resources,\n document: this.doc,\n path: [\"__hf__\", pageIndex, idx],\n onNavigatePage: (i) => this.goToPage(i),\n });\n if (node) div.appendChild(node);\n });\n } else if (hf.content) {\n const text = resolveTemplate(hf.content, { pageNumber: pageIndex + 1, totalPages, title: this.doc.meta?.title ?? \"\", author: this.doc.meta?.author ?? \"\" });\n const span = document.createElement(\"div\");\n span.textContent = text;\n Object.assign(span.style, resolveStyle(hf.style as StyleRef | undefined, styles));\n div.appendChild(span);\n }\n return div;\n }\n\n private setupScrollObserver() {\n if (typeof IntersectionObserver === \"undefined\") return;\n this.observer?.disconnect();\n this.observer = new IntersectionObserver(\n (entries) => {\n const visible = entries\n .filter((e) => e.isIntersecting)\n .sort((a, b) => b.intersectionRatio - a.intersectionRatio);\n if (visible[0]) {\n const idx = Number((visible[0].target as HTMLElement).getAttribute(\"data-page-index\"));\n if (!isNaN(idx) && idx !== this.currentPage) {\n this.currentPage = idx;\n this.updateIndicators();\n this.options.onPageChange?.(idx);\n }\n }\n },\n { root: this.pagesEl, threshold: [0.25, 0.5, 0.75] }\n );\n this.pagesEl.querySelectorAll(\"[data-page-index]\").forEach((el) => this.observer!.observe(el));\n }\n\n private scrollToPage(idx: number) {\n const el = this.pagesEl.querySelector(`[data-page-index=\"${idx}\"]`) as HTMLElement | null;\n if (el) el.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }\n\n private applyZoom() {\n this.pagesEl.style.setProperty(\"--jdfjs-zoom\", String(this.zoom));\n this.pagesEl.querySelectorAll<HTMLElement>(\".jdfjs-page\").forEach((el) => {\n el.style.transform = `scale(${this.zoom})`;\n el.style.transformOrigin = \"top center\";\n });\n }\n\n setZoom(z: number) {\n this.zoom = Math.max(0.25, Math.min(3, z));\n this.applyZoom();\n this.updateIndicators();\n }\n getZoom() { return this.zoom; }\n\n goToPage(idx: number) {\n const clamped = Math.max(0, Math.min(this.doc.pages.length - 1, idx));\n this.currentPage = clamped;\n this.scrollToPage(clamped);\n this.updateIndicators();\n this.options.onPageChange?.(clamped);\n }\n getCurrentPage() { return this.currentPage; }\n\n setDocument(doc: JdfDocument) {\n this.doc = doc;\n this.currentPage = 0;\n if (this.toolbarEl) {\n const t = this.toolbarEl.querySelector(\".jdfjs-title\");\n if (t) t.textContent = doc.meta?.title ?? \"Document\";\n }\n if (this.sidebarEl) {\n this.sidebarEl.innerHTML = \"\";\n const newSidebar = this.buildSidebar();\n newSidebar.querySelectorAll(\".jdfjs-sidebar-thumb\").forEach((c) => this.sidebarEl!.appendChild(c));\n }\n this.renderAllPages();\n this.setupScrollObserver();\n this.options.onLoad?.(doc);\n }\n\n destroy() {\n this.observer?.disconnect();\n this.resizeObs?.disconnect();\n this.container.innerHTML = \"\";\n this.container.classList.remove(\"jdfjs\", \"jdfjs-dark\", \"jdfjs-loading\", \"jdfjs-error\");\n this.container.style.removeProperty(\"width\");\n this.container.style.removeProperty(\"height\");\n }\n\n getInstance(): JDFViewerInstance {\n return {\n container: this.container,\n document: this.doc,\n setZoom: (z) => this.setZoom(z),\n getZoom: () => this.getZoom(),\n goToPage: (i) => this.goToPage(i),\n getCurrentPage: () => this.getCurrentPage(),\n setDocument: (d) => this.setDocument(d),\n destroy: () => this.destroy(),\n };\n }\n}\n\nfunction resolveContainer(c: HTMLElement | string): HTMLElement {\n if (typeof c === \"string\") {\n const found = document.querySelector(c);\n if (!found) throw new Error(`jdfjs: container \"${c}\" not found`);\n return found as HTMLElement;\n }\n return c;\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/[&<>\"']/g, (m) => ({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" }[m]!));\n}\n","/**\n * Auto-init: scan the page for <jdf src=\"...\"> tags and render each one.\n *\n * <link rel=\"stylesheet\" href=\"https://unpkg.com/jdfjs/dist/jdfjs.css\">\n * <script type=\"module\" src=\"https://unpkg.com/jdfjs\"></script>\n * <jdf src=\"/whitepaper.jdf\"></jdf>\n *\n * Configuration via attributes on <jdf>:\n * <jdf src=\"...\" width=\"800\" height=\"600\" zoom=\"1.2\" sidebar=\"true\" dark-mode=\"auto\"></jdf>\n *\n * For SPAs that mount content async, call `jdf()` after the new DOM lands.\n * To opt out per-element add `manual`. To disable globally:\n * window.JDFjsAutoInit = false // before loading the script\n */\n\nimport { embed, type JDFViewerOptions } from \"./viewer\";\n\nconst PROCESSED = new WeakSet<Element>();\n\nfunction readOptions(el: Element): JDFViewerOptions {\n const opts: JDFViewerOptions = {};\n const attr = (name: string) => el.getAttribute(name);\n\n const zoom = attr(\"zoom\");\n if (zoom != null) {\n const n = Number(zoom);\n if (!isNaN(n)) opts.zoom = n;\n }\n const sb = attr(\"sidebar\");\n if (sb != null) opts.sidebar = sb !== \"false\" && sb !== \"0\";\n const tb = attr(\"toolbar\");\n if (tb != null) opts.toolbar = tb !== \"false\" && tb !== \"0\";\n const dm = attr(\"dark-mode\") || attr(\"darkmode\");\n if (dm === \"auto\" || dm === \"light\" || dm === \"dark\") opts.darkMode = dm;\n const page = attr(\"page\");\n if (page != null) {\n const n = Number(page);\n if (!isNaN(n)) opts.initialPage = n;\n }\n const w = attr(\"width\");\n if (w != null) {\n const n = Number(w);\n opts.width = isNaN(n) ? w : n;\n }\n const h = attr(\"height\");\n if (h != null) {\n const n = Number(h);\n opts.height = isNaN(n) ? h : n;\n }\n const fit = attr(\"fit\");\n if (fit === \"manual\" || fit === \"fit-width\" || fit === \"fit-page\") opts.fit = fit;\n\n return opts;\n}\n\nfunction processElement(el: Element) {\n if (PROCESSED.has(el)) return;\n if (el.hasAttribute(\"manual\")) return;\n const src = el.getAttribute(\"src\");\n if (!src) return;\n PROCESSED.add(el);\n const container = el as HTMLElement;\n const opts = readOptions(el);\n embed(container, src, opts).catch((err) => {\n console.error(\"[jdf.js] failed to embed\", src, err);\n container.dispatchEvent(new CustomEvent(\"jdf-error\", { detail: err, bubbles: true }));\n });\n}\n\nfunction scan(root: ParentNode = document) {\n root.querySelectorAll(\"jdf\").forEach(processElement);\n}\n\nfunction watchForNewTargets() {\n if (typeof MutationObserver === \"undefined\") return;\n const obs = new MutationObserver((mutations) => {\n for (const m of mutations) {\n m.addedNodes.forEach((n) => {\n if (n instanceof Element) {\n if (n.tagName.toLowerCase() === \"jdf\") processElement(n);\n else scan(n);\n }\n });\n }\n });\n obs.observe(document.body, { childList: true, subtree: true });\n}\n\n/** Manually trigger a scan — for SPAs that mount content asynchronously. */\nexport function jdf(root: ParentNode = document) {\n scan(root);\n}\n\nfunction autoInit() {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n if ((window as any).JDFjsAutoInit === false) return;\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => { scan(); watchForNewTargets(); }, { once: true });\n } else {\n scan();\n watchForNewTargets();\n }\n}\n\n// Define the <jdf> element as a custom element so its src attribute is reactive.\n// Browsers treat it as HTMLElement, but registering it gives us attribute-change hooks.\nif (typeof customElements !== \"undefined\" && !customElements.get(\"jdf\")) {\n class JdfElement extends HTMLElement {\n static get observedAttributes() { return [\"src\", \"width\", \"height\", \"zoom\"]; }\n connectedCallback() { processElement(this); }\n attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null) {\n if (oldVal === newVal) return;\n if (name === \"src\" && newVal) {\n PROCESSED.delete(this);\n processElement(this);\n } else if (name === \"width\" && newVal) {\n const n = Number(newVal);\n this.style.width = isNaN(n) ? newVal : `${n}px`;\n } else if (name === \"height\" && newVal) {\n const n = Number(newVal);\n this.style.height = isNaN(n) ? newVal : `${n}px`;\n }\n }\n }\n customElements.define(\"jdf\", JdfElement);\n}\n\nautoInit();\n"]}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@uurtech/jdf",
3
+ "version": "0.1.0",
4
+ "description": "Render JDF (JSON Document Format) documents in the browser. Drop-in replacement for embedding PDFs — point at a .jdf file and it appears on the page, fully styled, searchable, with a clickable TOC.",
5
+ "license": "MIT",
6
+ "author": "Ugur Kazdal <ugur@uurtech.com>",
7
+ "homepage": "https://github.com/uurtech/jdf#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/uurtech/jdf.git",
11
+ "directory": "jdfjs"
12
+ },
13
+ "bugs": "https://github.com/uurtech/jdf/issues",
14
+ "keywords": [
15
+ "jdf",
16
+ "json",
17
+ "document",
18
+ "viewer",
19
+ "renderer",
20
+ "embed",
21
+ "pdf-alternative"
22
+ ],
23
+ "type": "module",
24
+ "main": "./dist/jdfjs.js",
25
+ "module": "./dist/jdfjs.js",
26
+ "types": "./dist/jdfjs.d.ts",
27
+ "browser": "./dist/jdfjs.js",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/jdfjs.d.ts",
31
+ "import": "./dist/jdfjs.js",
32
+ "require": "./dist/jdfjs.cjs",
33
+ "default": "./dist/jdfjs.js"
34
+ },
35
+ "./style.css": "./dist/jdfjs.css",
36
+ "./package.json": "./package.json"
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "src",
41
+ "README.md",
42
+ "LICENSE"
43
+ ],
44
+ "scripts": {
45
+ "build": "tsup",
46
+ "dev": "tsup --watch",
47
+ "typecheck": "tsc --noEmit",
48
+ "demo": "vite serve examples",
49
+ "prepublishOnly": "pnpm build"
50
+ },
51
+ "devDependencies": {
52
+ "@jdf/core": "workspace:*",
53
+ "@types/node": "^22.10.0",
54
+ "tsup": "^8.3.5",
55
+ "typescript": "^5.5.0",
56
+ "vite": "^6.0.0"
57
+ },
58
+ "publishConfig": {
59
+ "access": "public"
60
+ }
61
+ }
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Auto-init: scan the page for <jdf src="..."> tags and render each one.
3
+ *
4
+ * <link rel="stylesheet" href="https://unpkg.com/jdfjs/dist/jdfjs.css">
5
+ * <script type="module" src="https://unpkg.com/jdfjs"></script>
6
+ * <jdf src="/whitepaper.jdf"></jdf>
7
+ *
8
+ * Configuration via attributes on <jdf>:
9
+ * <jdf src="..." width="800" height="600" zoom="1.2" sidebar="true" dark-mode="auto"></jdf>
10
+ *
11
+ * For SPAs that mount content async, call `jdf()` after the new DOM lands.
12
+ * To opt out per-element add `manual`. To disable globally:
13
+ * window.JDFjsAutoInit = false // before loading the script
14
+ */
15
+
16
+ import { embed, type JDFViewerOptions } from "./viewer";
17
+
18
+ const PROCESSED = new WeakSet<Element>();
19
+
20
+ function readOptions(el: Element): JDFViewerOptions {
21
+ const opts: JDFViewerOptions = {};
22
+ const attr = (name: string) => el.getAttribute(name);
23
+
24
+ const zoom = attr("zoom");
25
+ if (zoom != null) {
26
+ const n = Number(zoom);
27
+ if (!isNaN(n)) opts.zoom = n;
28
+ }
29
+ const sb = attr("sidebar");
30
+ if (sb != null) opts.sidebar = sb !== "false" && sb !== "0";
31
+ const tb = attr("toolbar");
32
+ if (tb != null) opts.toolbar = tb !== "false" && tb !== "0";
33
+ const dm = attr("dark-mode") || attr("darkmode");
34
+ if (dm === "auto" || dm === "light" || dm === "dark") opts.darkMode = dm;
35
+ const page = attr("page");
36
+ if (page != null) {
37
+ const n = Number(page);
38
+ if (!isNaN(n)) opts.initialPage = n;
39
+ }
40
+ const w = attr("width");
41
+ if (w != null) {
42
+ const n = Number(w);
43
+ opts.width = isNaN(n) ? w : n;
44
+ }
45
+ const h = attr("height");
46
+ if (h != null) {
47
+ const n = Number(h);
48
+ opts.height = isNaN(n) ? h : n;
49
+ }
50
+ const fit = attr("fit");
51
+ if (fit === "manual" || fit === "fit-width" || fit === "fit-page") opts.fit = fit;
52
+
53
+ return opts;
54
+ }
55
+
56
+ function processElement(el: Element) {
57
+ if (PROCESSED.has(el)) return;
58
+ if (el.hasAttribute("manual")) return;
59
+ const src = el.getAttribute("src");
60
+ if (!src) return;
61
+ PROCESSED.add(el);
62
+ const container = el as HTMLElement;
63
+ const opts = readOptions(el);
64
+ embed(container, src, opts).catch((err) => {
65
+ console.error("[jdf.js] failed to embed", src, err);
66
+ container.dispatchEvent(new CustomEvent("jdf-error", { detail: err, bubbles: true }));
67
+ });
68
+ }
69
+
70
+ function scan(root: ParentNode = document) {
71
+ root.querySelectorAll("jdf").forEach(processElement);
72
+ }
73
+
74
+ function watchForNewTargets() {
75
+ if (typeof MutationObserver === "undefined") return;
76
+ const obs = new MutationObserver((mutations) => {
77
+ for (const m of mutations) {
78
+ m.addedNodes.forEach((n) => {
79
+ if (n instanceof Element) {
80
+ if (n.tagName.toLowerCase() === "jdf") processElement(n);
81
+ else scan(n);
82
+ }
83
+ });
84
+ }
85
+ });
86
+ obs.observe(document.body, { childList: true, subtree: true });
87
+ }
88
+
89
+ /** Manually trigger a scan — for SPAs that mount content asynchronously. */
90
+ export function jdf(root: ParentNode = document) {
91
+ scan(root);
92
+ }
93
+
94
+ function autoInit() {
95
+ if (typeof window === "undefined" || typeof document === "undefined") return;
96
+ if ((window as any).JDFjsAutoInit === false) return;
97
+ if (document.readyState === "loading") {
98
+ document.addEventListener("DOMContentLoaded", () => { scan(); watchForNewTargets(); }, { once: true });
99
+ } else {
100
+ scan();
101
+ watchForNewTargets();
102
+ }
103
+ }
104
+
105
+ // Define the <jdf> element as a custom element so its src attribute is reactive.
106
+ // Browsers treat it as HTMLElement, but registering it gives us attribute-change hooks.
107
+ if (typeof customElements !== "undefined" && !customElements.get("jdf")) {
108
+ class JdfElement extends HTMLElement {
109
+ static get observedAttributes() { return ["src", "width", "height", "zoom"]; }
110
+ connectedCallback() { processElement(this); }
111
+ attributeChangedCallback(name: string, oldVal: string | null, newVal: string | null) {
112
+ if (oldVal === newVal) return;
113
+ if (name === "src" && newVal) {
114
+ PROCESSED.delete(this);
115
+ processElement(this);
116
+ } else if (name === "width" && newVal) {
117
+ const n = Number(newVal);
118
+ this.style.width = isNaN(n) ? newVal : `${n}px`;
119
+ } else if (name === "height" && newVal) {
120
+ const n = Number(newVal);
121
+ this.style.height = isNaN(n) ? newVal : `${n}px`;
122
+ }
123
+ }
124
+ }
125
+ customElements.define("jdf", JdfElement);
126
+ }
127
+
128
+ autoInit();
package/src/index.ts ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * jdfjs — render JDF (JSON Document Format) documents in the browser.
3
+ *
4
+ * Drop-in usage (auto-init):
5
+ * <link rel="stylesheet" href="https://unpkg.com/jdfjs/dist/jdfjs.css">
6
+ * <script type="module" src="https://unpkg.com/jdfjs"></script>
7
+ * <jdf src="/whitepaper.jdf"></jdf>
8
+ *
9
+ * Programmatic:
10
+ * import { embed, render } from "jdfjs";
11
+ * await embed("#viewer", "/doc.jdf", { zoom: 1.2 });
12
+ */
13
+
14
+ import "./auto-init";
15
+
16
+ export { embed, render, JDFViewer } from "./viewer";
17
+ export { jdf } from "./auto-init";
18
+ export type { JDFViewerOptions, JDFViewerInstance } from "./viewer";
19
+ export type { JdfDocument, Element, Page } from "@jdf/core";
package/src/jdfjs.css ADDED
@@ -0,0 +1,225 @@
1
+ /* jdfjs — embed styles */
2
+ .jdfjs {
3
+ --jdfjs-bg: #f1f5f9;
4
+ --jdfjs-page-bg: #ffffff;
5
+ --jdfjs-text: #0f172a;
6
+ --jdfjs-text-soft: #475569;
7
+ --jdfjs-muted: #94a3b8;
8
+ --jdfjs-border: #e2e8f0;
9
+ --jdfjs-brand: #2563eb;
10
+ --jdfjs-brand-soft: rgba(37, 99, 235, 0.08);
11
+ --jdfjs-shadow: 0 1px 3px rgba(15, 23, 42, 0.08), 0 4px 16px rgba(15, 23, 42, 0.06);
12
+
13
+ display: block;
14
+ position: relative;
15
+ width: 100%;
16
+ height: 100%;
17
+ min-height: 500px;
18
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
19
+ font-size: 14px;
20
+ line-height: 1.5;
21
+ color: var(--jdfjs-text);
22
+ background: var(--jdfjs-bg);
23
+ border: 1px solid var(--jdfjs-border);
24
+ border-radius: 8px;
25
+ overflow: hidden;
26
+ box-sizing: border-box;
27
+ -webkit-font-smoothing: antialiased;
28
+ -moz-osx-font-smoothing: grayscale;
29
+ }
30
+
31
+ .jdfjs.jdfjs-dark {
32
+ --jdfjs-bg: #0f172a;
33
+ --jdfjs-page-bg: #ffffff;
34
+ --jdfjs-text: #f1f5f9;
35
+ --jdfjs-text-soft: #cbd5e1;
36
+ --jdfjs-muted: #64748b;
37
+ --jdfjs-border: #334155;
38
+ --jdfjs-brand: #60a5fa;
39
+ --jdfjs-brand-soft: rgba(96, 165, 250, 0.12);
40
+ }
41
+
42
+ .jdfjs *, .jdfjs *::before, .jdfjs *::after { box-sizing: border-box; }
43
+
44
+ .jdfjs-root {
45
+ display: flex;
46
+ flex-direction: column;
47
+ width: 100%;
48
+ height: 100%;
49
+ min-height: inherit;
50
+ }
51
+
52
+ .jdfjs-toolbar {
53
+ display: flex;
54
+ align-items: center;
55
+ gap: 6px;
56
+ padding: 8px 14px;
57
+ background: var(--jdfjs-page-bg);
58
+ border-bottom: 1px solid var(--jdfjs-border);
59
+ font-size: 13px;
60
+ flex-shrink: 0;
61
+ }
62
+
63
+ .jdfjs.jdfjs-dark .jdfjs-toolbar { background: #1e293b; }
64
+
65
+ .jdfjs-title {
66
+ font-weight: 600;
67
+ color: var(--jdfjs-text);
68
+ white-space: nowrap;
69
+ overflow: hidden;
70
+ text-overflow: ellipsis;
71
+ max-width: 240px;
72
+ }
73
+
74
+ .jdfjs-spacer { flex: 1; }
75
+
76
+ .jdfjs-btn {
77
+ display: inline-flex;
78
+ align-items: center;
79
+ justify-content: center;
80
+ width: 28px;
81
+ height: 28px;
82
+ background: transparent;
83
+ border: 1px solid transparent;
84
+ color: var(--jdfjs-text-soft);
85
+ border-radius: 6px;
86
+ cursor: pointer;
87
+ font-size: 14px;
88
+ font-family: inherit;
89
+ transition: background 0.12s ease, color 0.12s ease;
90
+ padding: 0;
91
+ }
92
+
93
+ .jdfjs-btn:hover {
94
+ background: var(--jdfjs-brand-soft);
95
+ color: var(--jdfjs-brand);
96
+ }
97
+
98
+ .jdfjs-btn:disabled { opacity: 0.3; cursor: not-allowed; }
99
+
100
+ .jdfjs-page-indicator,
101
+ .jdfjs-zoom-indicator {
102
+ font-family: "JetBrains Mono", ui-monospace, monospace;
103
+ font-size: 11px;
104
+ color: var(--jdfjs-text-soft);
105
+ min-width: 60px;
106
+ text-align: center;
107
+ }
108
+
109
+ .jdfjs-divider {
110
+ width: 1px;
111
+ height: 18px;
112
+ background: var(--jdfjs-border);
113
+ margin: 0 4px;
114
+ }
115
+
116
+ .jdfjs-body {
117
+ display: flex;
118
+ flex: 1;
119
+ min-height: 0;
120
+ }
121
+
122
+ .jdfjs-sidebar {
123
+ width: 140px;
124
+ background: var(--jdfjs-bg);
125
+ border-right: 1px solid var(--jdfjs-border);
126
+ overflow-y: auto;
127
+ padding: 10px;
128
+ display: flex;
129
+ flex-direction: column;
130
+ gap: 8px;
131
+ flex-shrink: 0;
132
+ }
133
+
134
+ .jdfjs-sidebar-thumb {
135
+ background: var(--jdfjs-page-bg);
136
+ border: 2px solid var(--jdfjs-border);
137
+ border-radius: 6px;
138
+ padding: 18px 0;
139
+ cursor: pointer;
140
+ font-family: "JetBrains Mono", monospace;
141
+ font-size: 11px;
142
+ color: var(--jdfjs-muted);
143
+ aspect-ratio: 210 / 297;
144
+ display: flex;
145
+ align-items: center;
146
+ justify-content: center;
147
+ transition: border-color 0.15s ease;
148
+ }
149
+
150
+ .jdfjs-sidebar-thumb:hover { border-color: var(--jdfjs-text-soft); }
151
+ .jdfjs-sidebar-thumb-active {
152
+ border-color: var(--jdfjs-brand);
153
+ box-shadow: 0 0 0 2px var(--jdfjs-brand-soft);
154
+ }
155
+
156
+ .jdfjs-pages {
157
+ flex: 1;
158
+ overflow: auto;
159
+ padding: 24px 16px;
160
+ display: flex;
161
+ flex-direction: column;
162
+ align-items: center;
163
+ gap: 16px;
164
+ }
165
+
166
+ .jdfjs-page-wrapper {
167
+ display: block;
168
+ scroll-margin-top: 16px;
169
+ }
170
+
171
+ .jdfjs-page {
172
+ position: relative;
173
+ background: var(--jdfjs-page-bg);
174
+ border-radius: 2px;
175
+ box-shadow: var(--jdfjs-shadow);
176
+ overflow: visible;
177
+ }
178
+
179
+ .jdfjs-header,
180
+ .jdfjs-footer {
181
+ position: absolute;
182
+ left: 0;
183
+ right: 0;
184
+ font-size: 11px;
185
+ color: var(--jdfjs-muted);
186
+ }
187
+
188
+ .jdfjs-header { top: 0; }
189
+ .jdfjs-footer { bottom: 0; }
190
+
191
+ .jdfjs-link {
192
+ color: var(--jdfjs-brand);
193
+ text-decoration: underline;
194
+ text-underline-offset: 2px;
195
+ }
196
+
197
+ .jdfjs-link:hover { color: var(--jdfjs-brand); opacity: 0.85; }
198
+
199
+ .jdfjs-loading,
200
+ .jdfjs-error {
201
+ display: flex;
202
+ align-items: center;
203
+ justify-content: center;
204
+ min-height: 240px;
205
+ color: var(--jdfjs-text-soft);
206
+ font-family: "Inter", -apple-system, sans-serif;
207
+ }
208
+
209
+ .jdfjs-error-msg {
210
+ padding: 20px 32px;
211
+ border-radius: 8px;
212
+ background: #fef2f2;
213
+ color: #b91c1c;
214
+ border: 1px solid #fecaca;
215
+ font-size: 13px;
216
+ max-width: 80%;
217
+ text-align: center;
218
+ }
219
+
220
+ /* === <jdf> visual defaults === */
221
+ jdf {
222
+ display: block;
223
+ width: 100%;
224
+ min-height: 600px;
225
+ }