Readonlydocraw jsPDF instance — escape hatch at the same level as Watermark/PageBand (call doc.output()/doc.save() yourself)
Node: writes a temp file and opens it with the OS's default PDF viewer — returns the temp file's path; browser: opens the PDF in a new tab via a blob URL — returns that URL
Node: writes the file to disk; browser: triggers a download via jsPDF's doc.save()
(same filename, works on both sides without changing your code)
Public API — everything needed to author a report the intended way: the facade (
createKapomReport/reportBuilder), the declarative node tree, columns, theme, font, page frame (header/footer/watermark/page-number), formatting, and errors.Low-level internals — the render engine, cursor, block classes, the pure table pipeline (group tree / aggregate / column width), and plugin authoring (
registerBlockType) — live in a separate entry:import { ... } from 'kapom-report/advanced'. They're stable enough to use, but change more freely than this surface, so they're kept out of the default import.