ngx-pdf-export 0.0.2 → 0.0.3
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.
|
@@ -463,20 +463,30 @@ function walk(el, sx, sy, vbX, vbY, out) {
|
|
|
463
463
|
});
|
|
464
464
|
break;
|
|
465
465
|
}
|
|
466
|
+
// A non-zero viewBox origin (common for icon sets that author with
|
|
467
|
+
// viewBox="0 -960 960 960") needs to shift every coordinate by
|
|
468
|
+
// (-vbX, -vbY). For rect/circle/ellipse/line above that's just one
|
|
469
|
+
// subtraction per numeric attribute, but a path's `d` string mixes
|
|
470
|
+
// absolute and *relative* commands -- rewriting every literal would
|
|
471
|
+
// incorrectly shift relative deltas too, which are meant to stay
|
|
472
|
+
// untouched. A viewBox origin offset is a rigid translation of the
|
|
473
|
+
// whole shape, so it's applied once at render time (originOffsetXPt/
|
|
474
|
+
// originOffsetYPt) as the anchor point passed to drawSvgPath,
|
|
475
|
+
// instead of touching the path data itself.
|
|
466
476
|
case 'polyline':
|
|
467
477
|
case 'polygon': {
|
|
468
478
|
const points = (child.getAttribute('points') || '').trim();
|
|
469
479
|
if (!points)
|
|
470
480
|
break;
|
|
471
481
|
const d = pointsToPathData(points, tag === 'polygon');
|
|
472
|
-
out.push({ op: 'path', d: scalePathData(
|
|
482
|
+
out.push({ op: 'path', d: scalePathData(d, sx, sy), paint, originOffsetXPt: vbX * sx, originOffsetYPt: vbY * sy });
|
|
473
483
|
break;
|
|
474
484
|
}
|
|
475
485
|
case 'path': {
|
|
476
486
|
const d = child.getAttribute('d') || '';
|
|
477
487
|
if (!d)
|
|
478
488
|
break;
|
|
479
|
-
out.push({ op: 'path', d: scalePathData(d, sx, sy), paint });
|
|
489
|
+
out.push({ op: 'path', d: scalePathData(d, sx, sy), paint, originOffsetXPt: vbX * sx, originOffsetYPt: vbY * sy });
|
|
480
490
|
break;
|
|
481
491
|
}
|
|
482
492
|
}
|
|
@@ -518,12 +528,6 @@ function pointsToPathData(points, close) {
|
|
|
518
528
|
}
|
|
519
529
|
return close ? d + 'Z' : d;
|
|
520
530
|
}
|
|
521
|
-
function offsetPathOrigin(d, vbX, vbY) {
|
|
522
|
-
if (!vbX && !vbY)
|
|
523
|
-
return d;
|
|
524
|
-
// Points already carry absolute coordinates; shift by viewBox origin using the same scaler with a translate pass.
|
|
525
|
-
return d.replace(/(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)/g, (_m, x, y) => `${Number(x) - vbX} ${Number(y) - vbY}`);
|
|
526
|
-
}
|
|
527
531
|
|
|
528
532
|
let idCounter = 0;
|
|
529
533
|
function nextId(prefix) {
|
|
@@ -1087,7 +1091,7 @@ function scaleSvgCommand(cmd, scale) {
|
|
|
1087
1091
|
case 'line':
|
|
1088
1092
|
return { ...cmd, x1: cmd.x1 * scale, y1: cmd.y1 * scale, x2: cmd.x2 * scale, y2: cmd.y2 * scale, paint };
|
|
1089
1093
|
case 'path':
|
|
1090
|
-
return { ...cmd, d: scalePathData(cmd.d, scale, scale), paint };
|
|
1094
|
+
return { ...cmd, d: scalePathData(cmd.d, scale, scale), paint, originOffsetXPt: cmd.originOffsetXPt * scale, originOffsetYPt: cmd.originOffsetYPt * scale };
|
|
1091
1095
|
}
|
|
1092
1096
|
}
|
|
1093
1097
|
|
|
@@ -1443,6 +1447,33 @@ function pickStandardFont(font) {
|
|
|
1443
1447
|
return StandardFonts.Helvetica;
|
|
1444
1448
|
}
|
|
1445
1449
|
|
|
1450
|
+
/**
|
|
1451
|
+
* Computes the PDF-space anchor point pdf-lib's drawSvgPath should be
|
|
1452
|
+
* placed at for a path command carrying a viewBox-origin offset.
|
|
1453
|
+
*
|
|
1454
|
+
* Derivation: `dom/svg-parser.ts` scales a path's coordinates by (sx, sy)
|
|
1455
|
+
* but deliberately leaves the viewBox's own origin (vbX, vbY) unsubtracted
|
|
1456
|
+
* in the path data itself (see the comment there for why -- rewriting
|
|
1457
|
+
* relative-command deltas would be wrong). The still-needed shift of
|
|
1458
|
+
* (-vbX*sx, -vbY*sy) is applied here instead, as a rigid translation of
|
|
1459
|
+
* the whole already-scaled path, via drawSvgPath's own (x, y) anchor:
|
|
1460
|
+
*
|
|
1461
|
+
* PDF_x(point) = anchorX + localX (x: no flip)
|
|
1462
|
+
* PDF_y(point) = anchorY - localY (y: pdf-lib flips paths to
|
|
1463
|
+
* match top-left SVG authoring
|
|
1464
|
+
* -- see docs/architecture.md)
|
|
1465
|
+
*
|
|
1466
|
+
* We want PDF_x = originX + (localX - offsetXPt) and
|
|
1467
|
+
* PDF_y = originTopY - (localY - offsetYPt),
|
|
1468
|
+
* which, matching coefficients of localX/localY, gives:
|
|
1469
|
+
*
|
|
1470
|
+
* anchorX = originX - offsetXPt
|
|
1471
|
+
* anchorY = originTopY + offsetYPt
|
|
1472
|
+
*/
|
|
1473
|
+
function svgPathAnchor(originX, originTopY, offsetXPt, offsetYPt) {
|
|
1474
|
+
return { x: originX - offsetXPt, y: originTopY + offsetYPt };
|
|
1475
|
+
}
|
|
1476
|
+
|
|
1446
1477
|
async function renderPdf(pages, fontRegistry, options, headerFooter) {
|
|
1447
1478
|
const pdfDoc = await PDFDocument.create();
|
|
1448
1479
|
pdfDoc.registerFontkit(fontkit);
|
|
@@ -1762,9 +1793,15 @@ function drawSvgCommand(page, cmd, originX, originTopY) {
|
|
|
1762
1793
|
page.drawLine({ start: { x: originX + cmd.x1, y: originTopY - cmd.y1 }, end: { x: originX + cmd.x2, y: originTopY - cmd.y2 }, thickness: drawOpts.borderWidth, color: drawOpts.borderColor, opacity: drawOpts.borderOpacity });
|
|
1763
1794
|
}
|
|
1764
1795
|
break;
|
|
1765
|
-
case 'path':
|
|
1766
|
-
|
|
1796
|
+
case 'path': {
|
|
1797
|
+
// See dom/svg-parser.ts and render/svg-path-anchor.ts: a non-zero
|
|
1798
|
+
// viewBox origin is applied here, as a shift of the anchor point,
|
|
1799
|
+
// rather than baked into cmd.d -- safe regardless of whether the
|
|
1800
|
+
// path mixes absolute/relative commands.
|
|
1801
|
+
const anchor = svgPathAnchor(originX, originTopY, cmd.originOffsetXPt, cmd.originOffsetYPt);
|
|
1802
|
+
page.drawSvgPath(cmd.d, { ...drawOpts, x: anchor.x, y: anchor.y });
|
|
1767
1803
|
break;
|
|
1804
|
+
}
|
|
1768
1805
|
}
|
|
1769
1806
|
}
|
|
1770
1807
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-pdf-export.mjs","sources":["../../../projects/ngx-pdf-export/src/lib/model/units.ts","../../../projects/ngx-pdf-export/src/lib/dom/color.ts","../../../projects/ngx-pdf-export/src/lib/dom/box-model.ts","../../../projects/ngx-pdf-export/src/lib/model/nodes.ts","../../../projects/ngx-pdf-export/src/lib/dom/break-rules.ts","../../../projects/ngx-pdf-export/src/lib/dom/text-runs.ts","../../../projects/ngx-pdf-export/src/lib/dom/unsupported-features.ts","../../../projects/ngx-pdf-export/src/lib/dom/svg-path.ts","../../../projects/ngx-pdf-export/src/lib/dom/svg-parser.ts","../../../projects/ngx-pdf-export/src/lib/dom/inspect.ts","../../../projects/ngx-pdf-export/src/lib/fallback/rasterize.ts","../../../projects/ngx-pdf-export/src/lib/dom/assets.ts","../../../projects/ngx-pdf-export/src/lib/layout/scale-tree.ts","../../../projects/ngx-pdf-export/src/lib/pagination/paginate.ts","../../../projects/ngx-pdf-export/src/lib/pagination/page-geometry.ts","../../../projects/ngx-pdf-export/src/lib/render/fonts.ts","../../../projects/ngx-pdf-export/src/lib/render/pdf-renderer.ts","../../../projects/ngx-pdf-export/src/lib/header-footer.ts","../../../projects/ngx-pdf-export/src/lib/export-pipeline.ts","../../../projects/ngx-pdf-export/src/lib/fonts/font-registry.ts","../../../projects/ngx-pdf-export/src/lib/angular/normalize-args.ts","../../../projects/ngx-pdf-export/src/lib/angular/pdf-export.service.ts","../../../projects/ngx-pdf-export/src/lib/angular/pdf-export.directive.ts","../../../projects/ngx-pdf-export/src/public-api.ts","../../../projects/ngx-pdf-export/src/ngx-pdf-export.ts"],"sourcesContent":["/**\n * Unit conversions. See docs/architecture.md \"Coordinate systems and units\".\n * Internal layout space is always PDF points (pt); DOM space is CSS px.\n */\n\nexport const PX_TO_PT = 72 / 96;\nexport const PT_TO_PX = 96 / 72;\nexport const MM_TO_PT = 72 / 25.4;\nexport const PT_TO_MM = 25.4 / 72;\n\nexport function pxToPt(px: number): number {\n return px * PX_TO_PT;\n}\n\nexport function ptToPx(pt: number): number {\n return pt * PT_TO_PX;\n}\n\nexport function mmToPt(mm: number): number {\n return mm * MM_TO_PT;\n}\n\nexport function ptToMm(pt: number): number {\n return pt * PT_TO_MM;\n}\n\nexport interface PageDimensionsPt {\n widthPt: number;\n heightPt: number;\n}\n\n/** Standard page sizes in points, portrait orientation. */\nexport const STANDARD_PAGE_SIZES_PT: Record<string, PageDimensionsPt> = {\n A4: { widthPt: mmToPt(210), heightPt: mmToPt(297) },\n A3: { widthPt: mmToPt(297), heightPt: mmToPt(420) },\n Letter: { widthPt: 612, heightPt: 792 },\n Legal: { widthPt: 612, heightPt: 1008 },\n};\n","import { RgbaColor } from '../model/nodes';\n\nconst RGBA_RE = /^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*(?:,\\s*([\\d.]+)\\s*)?\\)$/i;\n\nlet probeCtx: CanvasRenderingContext2D | null | undefined;\n\nfunction getProbeCtx(): CanvasRenderingContext2D | null {\n if (probeCtx === undefined) {\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n probeCtx = canvas.getContext('2d', { willReadFrequently: true }) as CanvasRenderingContext2D | null;\n }\n return probeCtx;\n}\n\n/**\n * Resolves any valid CSS color string to concrete RGBA components.\n *\n * getComputedStyle() normalizes plain colors to rgb()/rgba(), which the\n * fast regex path below handles directly. But it does NOT downgrade\n * CSS Color 4 results -- color-mix(), oklch(), lab(), lch(), and the\n * color(<colorspace> ...) function are all returned as-is (e.g.\n * `color-mix(in srgb, blue 50%, transparent)` serializes to\n * `color(srgb 0 0 1 / 0.5)`, not `rgba(...)`), which a naive rgb()-only\n * parser silently fails to match. Since these are increasingly common in\n * modern component libraries (including Angular's own current starter\n * template), we fall back to asking the browser itself to resolve them:\n * assigning the string to a 1x1 canvas's `fillStyle` and reading the\n * rasterized pixel back is correct for *any* syntactically valid CSS\n * color, because that's exactly what the canvas rasterizer has to do\n * internally regardless of the input color space. See docs/css-support.md.\n */\nexport function parseComputedColor(value: string | null | undefined): RgbaColor | undefined {\n if (!value) {\n return undefined;\n }\n if (value === 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0 };\n }\n const trimmed = value.trim();\n const match = RGBA_RE.exec(trimmed);\n if (match) {\n return {\n r: clamp255(Number(match[1])),\n g: clamp255(Number(match[2])),\n b: clamp255(Number(match[3])),\n a: match[4] !== undefined ? clamp01(Number(match[4])) : 1,\n };\n }\n return resolveViaCanvas(trimmed);\n}\n\nconst SENTINEL = '#010203';\n\nfunction resolveViaCanvas(value: string): RgbaColor | undefined {\n const ctx = getProbeCtx();\n if (!ctx) {\n return undefined;\n }\n ctx.fillStyle = SENTINEL;\n ctx.fillStyle = value; // per spec, an invalid value is silently ignored (fillStyle keeps its prior value)\n if (ctx.fillStyle === SENTINEL) {\n return undefined; // assignment was rejected -- not a color this browser understands either\n }\n ctx.clearRect(0, 0, 1, 1);\n ctx.fillRect(0, 0, 1, 1);\n const [r, g, b, a] = ctx.getImageData(0, 0, 1, 1).data;\n return { r, g, b, a: a / 255 };\n}\n\nexport function isTransparent(color: RgbaColor | undefined): boolean {\n return !color || color.a <= 0;\n}\n\nfunction clamp255(n: number): number {\n return Math.max(0, Math.min(255, Math.round(n)));\n}\n\nfunction clamp01(n: number): number {\n return Math.max(0, Math.min(1, n));\n}\n","import { BorderEdge, BorderRadius, BorderStyle, BoxBorders, BoxPaint } from '../model/nodes';\nimport { pxToPt } from '../model/units';\nimport { isTransparent, parseComputedColor } from './color';\n\nexport function readBoxPaint(style: CSSStyleDeclaration): BoxPaint {\n const backgroundColor = parseComputedColor(style.backgroundColor);\n const opacity = clamp01(parseFloat(style.opacity || '1'));\n\n const paint: BoxPaint = {\n opacity: Number.isFinite(opacity) ? opacity : 1,\n };\n\n if (backgroundColor && !isTransparent(backgroundColor)) {\n paint.backgroundColor = backgroundColor;\n }\n\n const borders = readBorders(style);\n if (borders) {\n paint.borders = borders;\n }\n\n const radius = readBorderRadius(style);\n if (radius) {\n paint.borderRadius = radius;\n }\n\n return paint;\n}\n\nfunction readBorders(style: CSSStyleDeclaration): BoxBorders | undefined {\n const top = readEdge(style, 'Top');\n const right = readEdge(style, 'Right');\n const bottom = readEdge(style, 'Bottom');\n const left = readEdge(style, 'Left');\n\n const hasAny = [top, right, bottom, left].some((e) => e.style !== 'none' && e.widthPt > 0);\n if (!hasAny) {\n return undefined;\n }\n return { top, right, bottom, left };\n}\n\nfunction readEdge(style: CSSStyleDeclaration, side: 'Top' | 'Right' | 'Bottom' | 'Left'): BorderEdge {\n const widthPx = parseFloat((style as any)[`border${side}Width`] || '0');\n const borderStyle = normalizeBorderStyle((style as any)[`border${side}Style`]);\n const color = parseComputedColor((style as any)[`border${side}Color`]) ?? { r: 0, g: 0, b: 0, a: 1 };\n return {\n widthPt: borderStyle === 'none' ? 0 : pxToPt(widthPx || 0),\n style: borderStyle,\n color,\n };\n}\n\nfunction normalizeBorderStyle(value: string | undefined): BorderStyle {\n switch (value) {\n case 'dashed':\n return 'dashed';\n case 'dotted':\n return 'dotted';\n case 'solid':\n case 'double':\n case 'groove':\n case 'ridge':\n case 'inset':\n case 'outset':\n return 'solid';\n default:\n return 'none';\n }\n}\n\nfunction readBorderRadius(style: CSSStyleDeclaration): BorderRadius | undefined {\n const topLeft = pxToPt(parseFloat(style.borderTopLeftRadius || '0'));\n const topRight = pxToPt(parseFloat(style.borderTopRightRadius || '0'));\n const bottomRight = pxToPt(parseFloat(style.borderBottomRightRadius || '0'));\n const bottomLeft = pxToPt(parseFloat(style.borderBottomLeftRadius || '0'));\n if (!topLeft && !topRight && !bottomRight && !bottomLeft) {\n return undefined;\n }\n return { topLeft, topRight, bottomRight, bottomLeft };\n}\n\nfunction clamp01(n: number): number {\n return Math.max(0, Math.min(1, n));\n}\n","/**\n * Framework-independent internal document/layout tree.\n * See docs/architecture.md and docs/layout-engine.md.\n *\n * All geometry on these nodes is in *layout space*: PDF points, y-down,\n * origin at the top-left of the captured root element (a single tall\n * \"flow\" -- pagination has not happened yet at this stage).\n */\n\nexport interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface RgbaColor {\n r: number; // 0-255\n g: number; // 0-255\n b: number; // 0-255\n a: number; // 0-1\n}\n\nexport type BorderStyle = 'solid' | 'dashed' | 'dotted' | 'none';\n\nexport interface BorderEdge {\n widthPt: number;\n style: BorderStyle;\n color: RgbaColor;\n}\n\nexport interface BoxBorders {\n top: BorderEdge;\n right: BorderEdge;\n bottom: BorderEdge;\n left: BorderEdge;\n}\n\nexport interface BorderRadius {\n topLeft: number;\n topRight: number;\n bottomRight: number;\n bottomLeft: number;\n}\n\nexport interface BoxPaint {\n backgroundColor?: RgbaColor;\n backgroundImage?: { dataUrl: string; fit: 'cover' | 'contain' | 'fill' };\n borders?: BoxBorders;\n borderRadius?: BorderRadius;\n opacity: number; // 0-1, default 1\n}\n\nexport type BreakRule = 'auto' | 'avoid' | 'page-before' | 'page-after';\n\nexport interface NodeBreakRules {\n breakInside: 'auto' | 'avoid';\n breakBefore: 'auto' | 'page';\n breakAfter: 'auto' | 'page';\n}\n\nexport const DEFAULT_BREAK_RULES: NodeBreakRules = {\n breakInside: 'auto',\n breakBefore: 'auto',\n breakAfter: 'auto',\n};\n\nexport type LayoutNode =\n | BlockNode\n | TextRunNode\n | ImageNode\n | SvgNode\n | TableNode\n | GroupNode;\n\nexport interface BaseNode {\n id: string;\n rect: Rect;\n visible: boolean;\n break: NodeBreakRules;\n /** Present when this node replaced an unsupported subtree. */\n fallback?: { reason: string };\n}\n\nexport interface BlockNode extends BaseNode {\n type: 'block';\n paint: BoxPaint;\n children: LayoutNode[];\n}\n\nexport interface GroupNode extends BaseNode {\n type: 'group';\n paint: BoxPaint;\n children: LayoutNode[];\n /** Clip children painting to `rect` -- from overflow: hidden/auto/scroll. */\n clip: boolean;\n}\n\nexport interface TextRunNode extends BaseNode {\n type: 'text';\n text: string;\n font: ResolvedFont;\n color: RgbaColor;\n letterSpacingPt: number;\n align: 'left' | 'right' | 'center' | 'justify';\n decoration: { underline: boolean; lineThrough: boolean };\n /** Baseline offset from rect.y (top of the line box), in pt. */\n baselineOffsetPt: number;\n}\n\nexport interface ResolvedFont {\n family: string;\n weight: number;\n style: 'normal' | 'italic';\n sizePt: number;\n}\n\nexport interface ImageNode extends BaseNode {\n type: 'image';\n source: { kind: 'url' | 'data-url' | 'canvas'; value: string };\n fit: 'cover' | 'contain' | 'fill' | 'none';\n naturalWidth: number;\n naturalHeight: number;\n isFallbackRaster: boolean;\n}\n\nexport type SvgDrawCommand =\n | { op: 'rect'; x: number; y: number; width: number; height: number; rx: number; ry: number; paint: SvgPaint }\n | { op: 'ellipse'; cx: number; cy: number; rx: number; ry: number; paint: SvgPaint }\n | { op: 'path'; d: string; paint: SvgPaint }\n | { op: 'line'; x1: number; y1: number; x2: number; y2: number; paint: SvgPaint };\n\nexport interface SvgPaint {\n fill?: RgbaColor;\n stroke?: RgbaColor;\n strokeWidthPt: number;\n opacity: number;\n}\n\nexport interface SvgNode extends BaseNode {\n type: 'svg';\n /** Commands in the SVG's own local coordinate space (viewBox units, pt-scaled). */\n commands: SvgDrawCommand[];\n viewBox: Rect;\n}\n\nexport interface TableCellNode {\n id: string;\n rect: Rect;\n isHeader: boolean;\n paint: BoxPaint;\n content: LayoutNode[];\n}\n\nexport interface TableRowNode {\n id: string;\n rect: Rect;\n isHeader: boolean;\n cells: TableCellNode[];\n}\n\nexport interface TableColumn {\n x: number;\n width: number;\n}\n\nexport interface TableNode extends BaseNode {\n type: 'table';\n columns: TableColumn[];\n rows: TableRowNode[];\n headerRowCount: number;\n repeatHeader: boolean;\n}\n\nexport interface DocumentNode {\n /** Total height of the captured flow, in pt -- before pagination. */\n flowWidthPt: number;\n flowHeightPt: number;\n children: LayoutNode[];\n}\n\nexport function isContainer(node: LayoutNode): node is BlockNode | GroupNode {\n return node.type === 'block' || node.type === 'group';\n}\n","import { DEFAULT_BREAK_RULES, NodeBreakRules } from '../model/nodes';\n\n/**\n * Resolves break-inside/before/after from computed style, plus an optional\n * caller-supplied `keepTogether` selector list matched against the live\n * element (checked by the caller via `element.matches(selector)`).\n * See docs/pagination.md \"keepTogether / break controls\".\n */\nexport function readBreakRules(style: CSSStyleDeclaration, forceKeepTogether: boolean): NodeBreakRules {\n const breakInside = normalizeAvoid(style.breakInside) || normalizeAvoid((style as any).pageBreakInside);\n const breakBefore = normalizePage(style.breakBefore) || normalizePage((style as any).pageBreakBefore);\n const breakAfter = normalizePage(style.breakAfter) || normalizePage((style as any).pageBreakAfter);\n\n return {\n breakInside: forceKeepTogether || breakInside === 'avoid' ? 'avoid' : 'auto',\n breakBefore: breakBefore === 'page' ? 'page' : 'auto',\n breakAfter: breakAfter === 'page' ? 'page' : 'auto',\n };\n}\n\nfunction normalizeAvoid(value: string | undefined): 'avoid' | undefined {\n return value === 'avoid' ? 'avoid' : undefined;\n}\n\nfunction normalizePage(value: string | undefined): 'page' | undefined {\n return value === 'page' || value === 'always' || value === 'left' || value === 'right' ? 'page' : undefined;\n}\n\nexport { DEFAULT_BREAK_RULES };\n","/**\n * Splits a Text node into per-visual-line runs using only the standard\n * Range API. See docs/layout-engine.md \"Text runs via Range\".\n *\n * Range.getClientRects() on a range spanning multiple wrapped lines\n * returns one DOMRect per line, in visual order -- the browser has\n * already done line-breaking for us. To recover which substring belongs\n * to which line (needed so the extracted PDF text matches the visible\n * text per line), we binary-search line-count transitions: the number of\n * rects returned by range(0, k) is monotonically non-decreasing in k, so\n * the offset where it first increases from n to n+1 is exactly the start\n * of line n+1. This needs only Range.getClientRects, so it works\n * identically in every browser (no caretRangeFromPoint/caretPositionFromPoint\n * feature-detection needed).\n */\nexport interface RawTextRun {\n text: string;\n rect: DOMRect;\n}\n\nexport function extractTextRuns(textNode: Text): RawTextRun[] {\n const data = textNode.data;\n if (!data || !/\\S/.test(data)) {\n return [];\n }\n\n const range = document.createRange();\n range.selectNodeContents(textNode);\n const lineRects = Array.from(range.getClientRects()).filter((r) => r.width > 0 && r.height > 0);\n\n if (lineRects.length <= 1) {\n const rect = lineRects[0] ?? textNode.parentElement?.getBoundingClientRect();\n return rect ? [{ text: data, rect }] : [];\n }\n\n const boundaries: number[] = [0];\n for (let lineIndex = 0; lineIndex < lineRects.length - 1; lineIndex++) {\n const target = lineIndex + 2;\n const prev = boundaries[boundaries.length - 1];\n const k = findLineBoundary(range, textNode, data.length, target, prev);\n boundaries.push(Math.max(prev, k - 1));\n }\n boundaries.push(data.length);\n\n const runs: RawTextRun[] = [];\n for (let i = 0; i < lineRects.length; i++) {\n const start = boundaries[i];\n const end = boundaries[i + 1];\n const text = data.slice(start, end);\n if (text.trim().length === 0 && text.length === 0) {\n continue;\n }\n runs.push({ text, rect: lineRects[i] });\n }\n return runs;\n}\n\nfunction countLinesForPrefix(range: Range, node: Text, k: number): number {\n range.setStart(node, 0);\n range.setEnd(node, k);\n return range.getClientRects().length;\n}\n\n/** Minimal k in (prev, maxLen] such that the prefix [0, k) spans >= target lines. */\nfunction findLineBoundary(range: Range, node: Text, maxLen: number, target: number, prev: number): number {\n let low = prev + 1;\n let high = maxLen;\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (countLinesForPrefix(range, node, mid) >= target) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n return low;\n}\n","/**\n * Detects computed-style usage this library cannot faithfully translate\n * into PDF operators. See docs/css-support.md.\n */\nexport interface UnsupportedCheck {\n unsupported: boolean;\n reason?: string;\n}\n\nconst GRADIENT_RE = /(linear|radial|conic)-gradient\\(/i;\n\nexport function checkUnsupported(style: CSSStyleDeclaration): UnsupportedCheck {\n const backgroundImage = style.backgroundImage;\n if (backgroundImage && backgroundImage !== 'none' && GRADIENT_RE.test(backgroundImage)) {\n return { unsupported: true, reason: `background: ${backgroundImage} is a gradient and is not supported; rasterized.` };\n }\n\n const boxShadow = style.boxShadow;\n if (boxShadow && boxShadow !== 'none') {\n return { unsupported: true, reason: `box-shadow: ${boxShadow} is not supported; rasterized.` };\n }\n\n const filter = style.filter;\n if (filter && filter !== 'none') {\n return { unsupported: true, reason: `filter: ${filter} is not supported; rasterized.` };\n }\n\n const backdropFilter = (style as any).backdropFilter as string | undefined;\n if (backdropFilter && backdropFilter !== 'none') {\n return { unsupported: true, reason: `backdrop-filter is not supported; rasterized.` };\n }\n\n const transform = style.transform;\n if (transform && transform !== 'none' && !isTranslateOnly(transform)) {\n return { unsupported: true, reason: `transform: ${transform} is not supported (only translate() is); rasterized.` };\n }\n\n const mixBlendMode = style.mixBlendMode;\n if (mixBlendMode && mixBlendMode !== 'normal') {\n return { unsupported: true, reason: `mix-blend-mode: ${mixBlendMode} is not supported; rasterized.` };\n }\n\n if (style.display === 'grid' || style.display === 'inline-grid') {\n return { unsupported: true, reason: 'display: grid is not specially interpreted and is rasterized as a unit.' };\n }\n\n return { unsupported: false };\n}\n\nfunction isTranslateOnly(transform: string): boolean {\n // matrix(1, 0, 0, 1, tx, ty) is what getComputedStyle reports for a pure translate().\n const m = /^matrix\\(\\s*1,\\s*0,\\s*0,\\s*1,\\s*[-\\d.]+,\\s*[-\\d.]+\\s*\\)$/i;\n return m.test(transform.trim());\n}\n","/**\n * Rewrites the numeric coordinates in an SVG path `d` string by a scale\n * factor, so a path authored in the SVG's own viewBox units can be\n * embedded directly in PDF point space without a separate transform.\n *\n * This is a generic tokenizer for well-formed path data (commands\n * separated from numbers, numbers separated by whitespace/commas). It\n * does not handle the rare \"arc flags packed with no separator\" shorthand\n * (e.g. `A5 5 0 01 1 10 10`) some minifiers produce -- documented in\n * docs/css-support.md.\n */\nconst COMMAND_RE = /[MLHVCSQTAZmlhvcsqtaz]/;\nconst NUMBER_RE = /[-+]?(?:\\d+\\.\\d+|\\.\\d+|\\d+)(?:[eE][-+]?\\d+)?/g;\n\n// Number of coordinate values per command letter, and which of those are\n// x-like vs y-like (for independent sx/sy scaling). 'f' = flag (unscaled).\nconst PARAM_ROLES: Record<string, Array<'x' | 'y' | 'f'>> = {\n M: ['x', 'y'],\n L: ['x', 'y'],\n T: ['x', 'y'],\n H: ['x'],\n V: ['y'],\n C: ['x', 'y', 'x', 'y', 'x', 'y'],\n S: ['x', 'y', 'x', 'y'],\n Q: ['x', 'y', 'x', 'y'],\n A: ['x', 'y', 'f', 'f', 'f', 'x', 'y'],\n Z: [],\n};\n\nexport function scalePathData(d: string, sx: number, sy: number): string {\n let out = '';\n let i = 0;\n let currentRoles: Array<'x' | 'y' | 'f'> = [];\n let roleIndex = 0;\n\n while (i < d.length) {\n const ch = d[i];\n if (COMMAND_RE.test(ch)) {\n out += ch;\n currentRoles = PARAM_ROLES[ch.toUpperCase()] ?? [];\n roleIndex = 0;\n i++;\n continue;\n }\n if (/\\s|,/.test(ch)) {\n out += ch;\n i++;\n continue;\n }\n NUMBER_RE.lastIndex = i;\n const match = NUMBER_RE.exec(d);\n if (!match || match.index !== i) {\n // Unrecognized character; copy through unchanged rather than throw.\n out += ch;\n i++;\n continue;\n }\n const raw = match[0];\n const value = Number(raw);\n const role = currentRoles.length ? currentRoles[roleIndex % currentRoles.length] : 'x';\n roleIndex++;\n const scaled = role === 'y' ? value * sy : role === 'x' ? value * sx : value;\n out += formatNumber(scaled);\n i += raw.length;\n }\n return out;\n}\n\nfunction formatNumber(n: number): string {\n const rounded = Math.round(n * 1000) / 1000;\n return String(rounded);\n}\n","import { RgbaColor, SvgDrawCommand, SvgPaint } from '../model/nodes';\nimport { pxToPt } from '../model/units';\nimport { parseComputedColor } from './color';\nimport { scalePathData } from './svg-path';\n\nconst SUPPORTED_TAGS = new Set(['rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon', 'path', 'g', 'svg']);\n\n/**\n * Parses a supported subset of SVG into scale-normalized draw commands.\n * Returns null if the subtree uses a feature we don't translate (gradient\n * fill, <text>, <use>, <clipPath>, filters, patterns, images) -- the\n * caller falls back to rasterizing the whole <svg> as one element. See\n * docs/css-support.md.\n */\nexport function parseSvg(svg: SVGSVGElement, renderedWidthPt: number, renderedHeightPt: number): SvgDrawCommand[] | null {\n const viewBox = svg.viewBox?.baseVal;\n const vbWidth = viewBox && viewBox.width > 0 ? viewBox.width : svg.width.baseVal.value || renderedWidthPt;\n const vbHeight = viewBox && viewBox.height > 0 ? viewBox.height : svg.height.baseVal.value || renderedHeightPt;\n const vbX = viewBox?.x ?? 0;\n const vbY = viewBox?.y ?? 0;\n\n const sx = vbWidth > 0 ? renderedWidthPt / vbWidth : 1;\n const sy = vbHeight > 0 ? renderedHeightPt / vbHeight : 1;\n\n const commands: SvgDrawCommand[] = [];\n const ok = walk(svg, sx, sy, vbX, vbY, commands);\n return ok ? commands : null;\n}\n\nfunction walk(el: Element, sx: number, sy: number, vbX: number, vbY: number, out: SvgDrawCommand[]): boolean {\n for (const child of Array.from(el.children)) {\n const tag = child.tagName.toLowerCase();\n if (!SUPPORTED_TAGS.has(tag)) {\n return false;\n }\n if (tag === 'g' || tag === 'svg') {\n if (!walk(child, sx, sy, vbX, vbY, out)) {\n return false;\n }\n continue;\n }\n\n const style = getComputedStyle(child);\n if (hasGradientOrPattern(style.fill) || hasGradientOrPattern(style.stroke)) {\n return false;\n }\n\n const paint = readSvgPaint(style);\n\n switch (tag) {\n case 'rect': {\n const r = child as SVGRectElement;\n out.push({\n op: 'rect',\n x: (num(r, 'x') - vbX) * sx,\n y: (num(r, 'y') - vbY) * sy,\n width: num(r, 'width') * sx,\n height: num(r, 'height') * sy,\n rx: num(r, 'rx') * sx,\n ry: num(r, 'ry') * sy,\n paint,\n });\n break;\n }\n case 'circle': {\n const c = child as SVGCircleElement;\n const rr = num(c, 'r');\n out.push({\n op: 'ellipse',\n cx: (num(c, 'cx') - vbX) * sx,\n cy: (num(c, 'cy') - vbY) * sy,\n rx: rr * sx,\n ry: rr * sy,\n paint,\n });\n break;\n }\n case 'ellipse': {\n const e = child as SVGEllipseElement;\n out.push({\n op: 'ellipse',\n cx: (num(e, 'cx') - vbX) * sx,\n cy: (num(e, 'cy') - vbY) * sy,\n rx: num(e, 'rx') * sx,\n ry: num(e, 'ry') * sy,\n paint,\n });\n break;\n }\n case 'line': {\n const l = child as SVGLineElement;\n out.push({\n op: 'line',\n x1: (num(l, 'x1') - vbX) * sx,\n y1: (num(l, 'y1') - vbY) * sy,\n x2: (num(l, 'x2') - vbX) * sx,\n y2: (num(l, 'y2') - vbY) * sy,\n paint,\n });\n break;\n }\n case 'polyline':\n case 'polygon': {\n const points = (child.getAttribute('points') || '').trim();\n if (!points) break;\n const d = pointsToPathData(points, tag === 'polygon');\n out.push({ op: 'path', d: scalePathData(offsetPathOrigin(d, vbX, vbY), sx, sy), paint });\n break;\n }\n case 'path': {\n const d = child.getAttribute('d') || '';\n if (!d) break;\n out.push({ op: 'path', d: scalePathData(d, sx, sy), paint });\n break;\n }\n }\n }\n return true;\n}\n\nfunction hasGradientOrPattern(paintRef: string): boolean {\n return paintRef.startsWith('url(');\n}\n\nfunction readSvgPaint(style: CSSStyleDeclaration): SvgPaint {\n const fillOpacity = parseFloat(style.fillOpacity || '1');\n const strokeOpacity = parseFloat(style.strokeOpacity || '1');\n const opacity = parseFloat(style.opacity || '1');\n\n const fillColor = style.fill && style.fill !== 'none' ? withAlpha(parseComputedColor(style.fill), fillOpacity) : undefined;\n const strokeColor = style.stroke && style.stroke !== 'none' ? withAlpha(parseComputedColor(style.stroke), strokeOpacity) : undefined;\n\n return {\n fill: fillColor,\n stroke: strokeColor,\n strokeWidthPt: pxToPt(parseFloat(style.strokeWidth || '0')),\n opacity: Number.isFinite(opacity) ? opacity : 1,\n };\n}\n\nfunction withAlpha(color: RgbaColor | undefined, alphaMultiplier: number): RgbaColor | undefined {\n if (!color) return undefined;\n return { ...color, a: color.a * (Number.isFinite(alphaMultiplier) ? alphaMultiplier : 1) };\n}\n\nfunction num(el: Element, attr: string): number {\n const v = (el as any)[attr]?.baseVal?.value;\n if (typeof v === 'number') return v;\n return parseFloat(el.getAttribute(attr) || '0') || 0;\n}\n\nfunction pointsToPathData(points: string, close: boolean): string {\n const coords = points.split(/[\\s,]+/).filter(Boolean).map(Number);\n let d = '';\n for (let i = 0; i < coords.length - 1; i += 2) {\n d += (i === 0 ? 'M' : 'L') + coords[i] + ' ' + coords[i + 1] + ' ';\n }\n return close ? d + 'Z' : d;\n}\n\nfunction offsetPathOrigin(d: string, vbX: number, vbY: number): string {\n if (!vbX && !vbY) return d;\n // Points already carry absolute coordinates; shift by viewBox origin using the same scaler with a translate pass.\n return d.replace(/(-?\\d+(?:\\.\\d+)?)\\s+(-?\\d+(?:\\.\\d+)?)/g, (_m, x, y) => `${Number(x) - vbX} ${Number(y) - vbY}`);\n}\n","import {\n BlockNode,\n DocumentNode,\n GroupNode,\n ImageNode,\n LayoutNode,\n Rect,\n NodeBreakRules,\n ResolvedFont,\n SvgNode,\n TableCellNode,\n TableNode,\n TableRowNode,\n TextRunNode,\n} from '../model/nodes';\nimport { pxToPt } from '../model/units';\nimport { readBoxPaint } from './box-model';\nimport { readBreakRules } from './break-rules';\nimport { parseComputedColor } from './color';\nimport { extractTextRuns } from './text-runs';\nimport { checkUnsupported } from './unsupported-features';\nimport { parseSvg } from './svg-parser';\n\nexport interface PdfExportWarning {\n message: string;\n elementDescription: string;\n}\n\nexport type AssetTask =\n | { kind: 'img'; node: ImageNode; element: HTMLImageElement }\n | { kind: 'canvas'; node: ImageNode; element: HTMLCanvasElement }\n | { kind: 'fallback'; node: ImageNode; element: HTMLElement; captureWidthPx: number; captureHeightPx: number };\n\nexport interface InspectResult {\n document: DocumentNode;\n assetTasks: AssetTask[];\n warnings: PdfExportWarning[];\n}\n\nexport interface InspectOptions {\n keepTogetherSelectors: string[];\n}\n\nlet idCounter = 0;\nfunction nextId(prefix: string): string {\n idCounter += 1;\n return `${prefix}-${idCounter}`;\n}\n\nexport function inspectElement(root: HTMLElement, options: InspectOptions): InspectResult {\n const rootRect = root.getBoundingClientRect();\n const assetTasks: AssetTask[] = [];\n const warnings: PdfExportWarning[] = [];\n\n const children = walkChildren(root, rootRect, options, assetTasks, warnings);\n\n return {\n document: {\n flowWidthPt: pxToPt(rootRect.width),\n flowHeightPt: pxToPt(rootRect.height),\n children,\n },\n assetTasks,\n warnings,\n };\n}\n\nfunction relativeRect(elRect: DOMRect, rootRect: DOMRect): Rect {\n return {\n x: pxToPt(elRect.left - rootRect.left),\n y: pxToPt(elRect.top - rootRect.top),\n width: pxToPt(elRect.width),\n height: pxToPt(elRect.height),\n };\n}\n\nfunction walkChildren(\n parent: Element,\n rootRect: DOMRect,\n options: InspectOptions,\n assetTasks: AssetTask[],\n warnings: PdfExportWarning[],\n): LayoutNode[] {\n const out: LayoutNode[] = [];\n for (const child of Array.from(parent.childNodes)) {\n if (child.nodeType === Node.TEXT_NODE) {\n out.push(...buildTextNodes(child as Text, parent, rootRect));\n } else if (child.nodeType === Node.ELEMENT_NODE) {\n const node = visitElement(child as HTMLElement, rootRect, options, assetTasks, warnings);\n if (node) {\n out.push(node);\n }\n }\n }\n return out;\n}\n\nconst SKIP_TAGS = new Set(['SCRIPT', 'STYLE', 'TEMPLATE', 'NOSCRIPT']);\n\nfunction visitElement(\n el: HTMLElement,\n rootRect: DOMRect,\n options: InspectOptions,\n assetTasks: AssetTask[],\n warnings: PdfExportWarning[],\n): LayoutNode | null {\n if (SKIP_TAGS.has(el.tagName)) {\n return null;\n }\n const style = getComputedStyle(el);\n if (style.display === 'none') {\n return null;\n }\n\n const elRect = el.getBoundingClientRect();\n if (elRect.width <= 0 || elRect.height <= 0) {\n return null;\n }\n const rect = relativeRect(elRect, rootRect);\n const visible = style.visibility !== 'hidden' && parseFloat(style.opacity || '1') > 0;\n const forceKeepTogether = options.keepTogetherSelectors.some((sel) => {\n try {\n return el.matches(sel);\n } catch {\n return false;\n }\n });\n const breakRules = readBreakRules(style, forceKeepTogether);\n\n const tag = el.tagName.toLowerCase();\n\n if (tag === 'img') {\n return buildImageNode(el as HTMLImageElement, rect, visible, breakRules, assetTasks);\n }\n if (tag === 'canvas') {\n return buildCanvasNode(el as HTMLCanvasElement, rect, visible, breakRules, assetTasks);\n }\n if (tag === 'svg') {\n return buildSvgNode(el as unknown as SVGSVGElement, rect, visible, breakRules, assetTasks, warnings);\n }\n if (tag === 'table') {\n return buildTableNode(el as HTMLTableElement, rootRect, rect, visible, breakRules, options, assetTasks, warnings);\n }\n\n const unsupported = checkUnsupported(style);\n if (unsupported.unsupported) {\n warnings.push({ message: unsupported.reason!, elementDescription: describeElement(el) });\n return buildFallbackImageNode(el, rect, visible, breakRules, unsupported.reason!, assetTasks, elRect);\n }\n\n const paint = readBoxPaint(style);\n const children = walkChildren(el, rootRect, options, assetTasks, warnings);\n if (children.length === 0 && !paint.backgroundColor && !paint.borders) {\n return null;\n }\n\n const clips = style.overflow !== 'visible' && (style.overflowX !== 'visible' || style.overflowY !== 'visible');\n if (clips) {\n const group: GroupNode = {\n id: nextId('group'),\n type: 'group',\n rect,\n visible,\n break: breakRules,\n paint,\n children,\n clip: true,\n };\n return group;\n }\n\n const node: BlockNode = {\n id: nextId('block'),\n type: 'block',\n rect,\n visible,\n break: breakRules,\n paint,\n children,\n };\n return node;\n}\n\nfunction buildTextNodes(textNode: Text, parentEl: Element, rootRect: DOMRect): TextRunNode[] {\n const raw = extractTextRuns(textNode);\n if (raw.length === 0) {\n return [];\n }\n const style = getComputedStyle(parentEl);\n const font = readFont(style);\n const color = parseComputedColor(style.color) ?? { r: 0, g: 0, b: 0, a: 1 };\n const letterSpacingPt = style.letterSpacing === 'normal' ? 0 : pxToPt(parseFloat(style.letterSpacing || '0') || 0);\n const align = normalizeAlign(style.textAlign, style.direction);\n const decorationLine = (style as any).textDecorationLine || style.textDecoration || '';\n const decoration = {\n underline: decorationLine.includes('underline'),\n lineThrough: decorationLine.includes('line-through'),\n };\n\n return raw.map((run) => {\n const rect = relativeRect(run.rect, rootRect);\n return {\n id: nextId('text'),\n type: 'text',\n rect,\n visible: style.visibility !== 'hidden',\n break: { breakInside: 'avoid', breakBefore: 'auto', breakAfter: 'auto' },\n text: run.text,\n font,\n color,\n letterSpacingPt,\n align,\n decoration,\n baselineOffsetPt: rect.height * 0.8,\n } as TextRunNode;\n });\n}\n\nfunction readFont(style: CSSStyleDeclaration): ResolvedFont {\n const weight = parseInt(style.fontWeight || '400', 10) || (style.fontWeight === 'bold' ? 700 : 400);\n const fontStyle = style.fontStyle === 'italic' || style.fontStyle === 'oblique' ? 'italic' : 'normal';\n return {\n family: (style.fontFamily || 'sans-serif').split(',')[0].trim().replace(/^[\"']|[\"']$/g, ''),\n weight,\n style: fontStyle,\n sizePt: pxToPt(parseFloat(style.fontSize || '16')),\n };\n}\n\nfunction normalizeAlign(textAlign: string, direction: string): 'left' | 'right' | 'center' | 'justify' {\n const isRtl = direction === 'rtl';\n switch (textAlign) {\n case 'center':\n return 'center';\n case 'right':\n return 'right';\n case 'left':\n return 'left';\n case 'justify':\n return 'justify';\n case 'start':\n return isRtl ? 'right' : 'left';\n case 'end':\n return isRtl ? 'left' : 'right';\n default:\n return 'left';\n }\n}\n\nfunction buildImageNode(\n img: HTMLImageElement,\n rect: Rect,\n visible: boolean,\n breakRules: NodeBreakRules,\n assetTasks: AssetTask[],\n): ImageNode {\n const style = getComputedStyle(img);\n const node: ImageNode = {\n id: nextId('img'),\n type: 'image',\n rect,\n visible,\n break: breakRules,\n source: { kind: 'url', value: '' },\n fit: (style.objectFit as ImageNode['fit']) || 'fill',\n naturalWidth: img.naturalWidth || img.width,\n naturalHeight: img.naturalHeight || img.height,\n isFallbackRaster: false,\n };\n assetTasks.push({ kind: 'img', node, element: img });\n return node;\n}\n\nfunction buildCanvasNode(\n canvas: HTMLCanvasElement,\n rect: Rect,\n visible: boolean,\n breakRules: NodeBreakRules,\n assetTasks: AssetTask[],\n): ImageNode {\n const node: ImageNode = {\n id: nextId('canvas'),\n type: 'image',\n rect,\n visible,\n break: breakRules,\n source: { kind: 'canvas', value: '' },\n fit: 'fill',\n naturalWidth: canvas.width,\n naturalHeight: canvas.height,\n isFallbackRaster: false,\n };\n assetTasks.push({ kind: 'canvas', node, element: canvas });\n return node;\n}\n\nfunction buildSvgNode(\n svg: SVGSVGElement,\n rect: Rect,\n visible: boolean,\n breakRules: NodeBreakRules,\n assetTasks: AssetTask[],\n warnings: PdfExportWarning[],\n): SvgNode | ImageNode {\n try {\n const commands = parseSvg(svg, rect.width, rect.height);\n if (commands) {\n return {\n id: nextId('svg'),\n type: 'svg',\n rect,\n visible,\n break: breakRules,\n commands,\n viewBox: rect,\n };\n }\n } catch {\n // fall through to rasterization\n }\n warnings.push({ message: 'This <svg> uses gradients/filters/text/use and is not supported; rasterized.', elementDescription: describeElement(svg as unknown as HTMLElement) });\n return buildFallbackImageNode(svg as unknown as HTMLElement, rect, visible, breakRules, 'unsupported SVG features', assetTasks, svg.getBoundingClientRect());\n}\n\nfunction buildFallbackImageNode(\n el: HTMLElement,\n rect: Rect,\n visible: boolean,\n breakRules: NodeBreakRules,\n reason: string,\n assetTasks: AssetTask[],\n elRect: DOMRect,\n): ImageNode {\n const node: ImageNode = {\n id: nextId('fallback'),\n type: 'image',\n rect,\n visible,\n break: breakRules,\n fallback: { reason },\n source: { kind: 'data-url', value: '' },\n fit: 'fill',\n naturalWidth: rect.width,\n naturalHeight: rect.height,\n isFallbackRaster: true,\n };\n // Captured at the element's true on-screen size (not `rect`, which may\n // later be shrunk by fit-to-width scaling) so the clone -- which still\n // carries its original, unscaled inline styles -- isn't clipped inside\n // its own raster. See docs/architecture.md \"Hybrid rendering\".\n assetTasks.push({ kind: 'fallback', node, element: el, captureWidthPx: elRect.width, captureHeightPx: elRect.height });\n return node;\n}\n\nfunction buildTableNode(\n table: HTMLTableElement,\n rootRect: DOMRect,\n rect: Rect,\n visible: boolean,\n breakRules: NodeBreakRules,\n options: InspectOptions,\n assetTasks: AssetTask[],\n warnings: PdfExportWarning[],\n): TableNode {\n const rowEls = Array.from(table.querySelectorAll('tr'));\n const headerRowEls = new Set(Array.from(table.querySelectorAll('thead tr')));\n\n const rows: TableRowNode[] = rowEls.map((tr) => {\n const trRect = relativeRect(tr.getBoundingClientRect(), rootRect);\n const cellEls = Array.from(tr.children).filter((c) => c.tagName === 'TD' || c.tagName === 'TH');\n const cells: TableCellNode[] = cellEls.map((cellEl) => {\n const cellRect = relativeRect(cellEl.getBoundingClientRect(), rootRect);\n const cellStyle = getComputedStyle(cellEl);\n const paint = readBoxPaint(cellStyle);\n const content = walkChildren(cellEl, rootRect, options, assetTasks, warnings);\n return {\n id: nextId('cell'),\n rect: cellRect,\n isHeader: cellEl.tagName === 'TH',\n paint,\n content,\n };\n });\n return {\n id: nextId('row'),\n rect: trRect,\n isHeader: headerRowEls.has(tr),\n cells,\n };\n });\n\n const firstBodyRow = rows.find((r) => !r.isHeader) ?? rows[0];\n const columns = (firstBodyRow?.cells ?? []).map((c) => ({ x: c.rect.x, width: c.rect.width }));\n\n return {\n id: nextId('table'),\n type: 'table',\n rect,\n visible,\n break: breakRules,\n columns,\n rows,\n headerRowCount: rows.filter((r) => r.isHeader).length,\n repeatHeader: true,\n };\n}\n\nfunction describeElement(el: HTMLElement): string {\n const id = el.id ? `#${el.id}` : '';\n const cls = el.className && typeof el.className === 'string' ? `.${el.className.trim().split(/\\s+/).join('.')}` : '';\n return `<${el.tagName.toLowerCase()}${id}${cls}>`;\n}\n","/**\n * Rasterizes a single DOM element in isolation, for content this library\n * cannot translate into native PDF operators (see docs/css-support.md).\n * This is deliberately scoped to one element at a time -- never the whole\n * captured page -- via the SVG <foreignObject> technique: clone the\n * element, inline every computed style onto the clone (foreignObject\n * content does not inherit the host document's stylesheets), serialize to\n * an SVG data URL, and draw it into an offscreen canvas.\n */\nexport interface RasterizeResult {\n dataUrl: string;\n /** Total captured size in px, including `padPx` on every side. */\n width: number;\n height: number;\n}\n\n/**\n * `padPx` reserves extra canvas space around the element's own border box\n * for effects that visually bleed outside it (box-shadow, outline) --\n * without this, capturing exactly the element's own rect would clip a\n * shadow's blur/spread at the box edge. Callers should grow the node's\n * placement rect by the same amount on every side and shift it up/left by\n * `padPx` so the padded raster lands in the right place. See\n * docs/css-support.md.\n */\nexport async function rasterizeElement(el: HTMLElement, widthPx: number, heightPx: number, scale: number, padPx = 0): Promise<RasterizeResult> {\n if (widthPx <= 0 || heightPx <= 0) {\n throw new Error('ngx-pdf-export: cannot rasterize an element with zero width/height.');\n }\n\n const totalWidthPx = widthPx + padPx * 2;\n const totalHeightPx = heightPx + padPx * 2;\n\n const clone = el.cloneNode(true) as HTMLElement;\n inlineComputedStylesRecursive(el, clone);\n copyCanvasBitmaps(el, clone);\n resolveImageSources(clone);\n clone.style.margin = '0';\n clone.style.transform = 'none';\n clone.style.position = 'static';\n\n const svgNS = 'http://www.w3.org/2000/svg';\n const xhtmlNS = 'http://www.w3.org/1999/xhtml';\n\n const svg = document.createElementNS(svgNS, 'svg');\n svg.setAttribute('xmlns', svgNS);\n svg.setAttribute('width', String(totalWidthPx));\n svg.setAttribute('height', String(totalHeightPx));\n svg.setAttribute('viewBox', `0 0 ${totalWidthPx} ${totalHeightPx}`);\n\n const foreignObject = document.createElementNS(svgNS, 'foreignObject');\n foreignObject.setAttribute('width', '100%');\n foreignObject.setAttribute('height', '100%');\n\n const wrapper = document.createElementNS(xhtmlNS, 'div') as unknown as HTMLDivElement;\n wrapper.setAttribute('xmlns', xhtmlNS);\n wrapper.style.width = `${widthPx}px`;\n wrapper.style.height = `${heightPx}px`;\n wrapper.style.padding = `${padPx}px`;\n wrapper.style.boxSizing = 'content-box';\n wrapper.appendChild(clone);\n foreignObject.appendChild(wrapper);\n svg.appendChild(foreignObject);\n\n const svgString = new XMLSerializer().serializeToString(svg);\n const svgDataUrl = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svgString);\n\n const img = await loadImage(svgDataUrl);\n const canvas = document.createElement('canvas');\n canvas.width = Math.ceil(totalWidthPx * scale);\n canvas.height = Math.ceil(totalHeightPx * scale);\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('ngx-pdf-export: 2D canvas context unavailable.');\n }\n ctx.scale(scale, scale);\n ctx.drawImage(img, 0, 0, totalWidthPx, totalHeightPx);\n const dataUrl = canvas.toDataURL('image/png');\n canvas.width = 0;\n canvas.height = 0;\n return { dataUrl, width: totalWidthPx, height: totalHeightPx };\n}\n\nfunction inlineComputedStylesRecursive(source: Element, target: Element): void {\n const computed = getComputedStyle(source);\n const styleText: string[] = [];\n for (let i = 0; i < computed.length; i++) {\n const prop = computed.item(i);\n styleText.push(`${prop}:${computed.getPropertyValue(prop)}`);\n }\n (target as HTMLElement).setAttribute('style', styleText.join(';'));\n\n const sourceChildren = Array.from(source.children);\n const targetChildren = Array.from(target.children);\n for (let i = 0; i < sourceChildren.length; i++) {\n if (targetChildren[i]) {\n inlineComputedStylesRecursive(sourceChildren[i], targetChildren[i]);\n }\n }\n}\n\nfunction copyCanvasBitmaps(source: Element, target: Element): void {\n const sourceCanvases = Array.from(source.querySelectorAll('canvas'));\n const targetCanvases = Array.from(target.querySelectorAll('canvas'));\n for (let i = 0; i < sourceCanvases.length; i++) {\n const src = sourceCanvases[i];\n const dst = targetCanvases[i];\n if (!dst) continue;\n dst.width = src.width;\n dst.height = src.height;\n const ctx = dst.getContext('2d');\n try {\n ctx?.drawImage(src, 0, 0);\n } catch {\n // Cross-origin-tainted canvas: leave blank rather than throw.\n }\n }\n}\n\nfunction resolveImageSources(target: Element): void {\n target.querySelectorAll('img').forEach((img) => {\n const resolved = img.src; // IDL property is already absolute-resolved.\n img.setAttribute('src', resolved);\n });\n}\n\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => resolve(img);\n img.onerror = () => reject(new Error('ngx-pdf-export: failed to rasterize fallback element.'));\n img.src = src;\n });\n}\n","import { AssetTask } from './inspect';\nimport { rasterizeElement } from '../fallback/rasterize';\nimport { pxToPt } from '../model/units';\n\n/** Extra capture margin (CSS px) around a rasterized fallback element, for box-shadow/outline bleed. See docs/css-support.md. */\nconst FALLBACK_CAPTURE_PAD_PX = 24;\n\nexport interface AssetWarning {\n message: string;\n elementDescription: string;\n}\n\n/**\n * Resolves every deferred asset (images, canvases, fallback rasterizations)\n * to a data URL, mutating each task's node in place. Runs after layout so\n * we only pay encode/fetch cost for assets that actually made it into the\n * export. See docs/architecture.md \"Performance\" and docs/layout-engine.md\n * §5.\n */\nexport async function resolveAssets(tasks: AssetTask[], scale: number, onWarning: (w: AssetWarning) => void): Promise<void> {\n await Promise.all(\n tasks.map(async (task) => {\n try {\n if (task.kind === 'img') {\n task.node.source = { kind: 'data-url', value: await imageToDataUrl(task.element) };\n } else if (task.kind === 'canvas') {\n task.node.source = { kind: 'data-url', value: task.element.toDataURL('image/png') };\n } else {\n const result = await rasterizeElement(task.element, task.captureWidthPx, task.captureHeightPx, scale, FALLBACK_CAPTURE_PAD_PX);\n task.node.source = { kind: 'data-url', value: result.dataUrl };\n const padPt = pxToPt(FALLBACK_CAPTURE_PAD_PX);\n task.node.rect = {\n x: task.node.rect.x - padPt,\n y: task.node.rect.y - padPt,\n width: task.node.rect.width + padPt * 2,\n height: task.node.rect.height + padPt * 2,\n };\n task.node.naturalWidth = result.width;\n task.node.naturalHeight = result.height;\n }\n } catch (err) {\n task.node.visible = false;\n onWarning({\n message: task.kind === 'img' ? `Image could not be embedded (${(err as Error).message}). This is often a CORS restriction -- the image's server must send Access-Control-Allow-Origin, and the <img> needs crossorigin=\"anonymous\".` : `Failed to render element: ${(err as Error).message}`,\n elementDescription: describeElement(task.element),\n });\n }\n }),\n );\n}\n\nasync function imageToDataUrl(img: HTMLImageElement): Promise<string> {\n const src = img.currentSrc || img.src;\n if (src.startsWith('data:')) {\n return src;\n }\n const response = await fetch(src, { mode: 'cors' });\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n const blob = await response.blob();\n return await blobToDataUrl(blob);\n}\n\nfunction blobToDataUrl(blob: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(new Error('failed to read image blob'));\n reader.readAsDataURL(blob);\n });\n}\n\nfunction describeElement(el: HTMLElement): string {\n const id = el.id ? `#${el.id}` : '';\n return `<${el.tagName.toLowerCase()}${id}>`;\n}\n","import { DocumentNode, LayoutNode, Rect, SvgDrawCommand, TableCellNode, TableRowNode } from '../model/nodes';\nimport { scalePathData } from '../dom/svg-path';\n\n/**\n * Uniformly shrinks the whole captured flow (never enlarges) so its width\n * fits the page's content width, the same \"shrink to fit\" behavior a\n * browser's own print dialog applies to an over-wide page. Without this,\n * any dashboard wider than the chosen page format (a very common case --\n * most web layouts are wider than A4) would simply be clipped at the page\n * edge. Every geometric quantity in the tree (rects, font sizes, border\n * widths/radii, SVG coordinates) is scaled together so nothing distorts.\n */\nexport function fitDocumentToWidth(doc: DocumentNode, contentWidthPt: number): number {\n if (doc.flowWidthPt <= contentWidthPt || doc.flowWidthPt <= 0) {\n return 1;\n }\n const scale = contentWidthPt / doc.flowWidthPt;\n doc.flowWidthPt *= scale;\n doc.flowHeightPt *= scale;\n doc.children.forEach((child) => scaleNode(child, scale));\n return scale;\n}\n\nfunction scaleRect(rect: Rect, scale: number): Rect {\n return { x: rect.x * scale, y: rect.y * scale, width: rect.width * scale, height: rect.height * scale };\n}\n\nfunction scaleNode(node: LayoutNode, scale: number): void {\n node.rect = scaleRect(node.rect, scale);\n\n switch (node.type) {\n case 'text':\n node.font = { ...node.font, sizePt: node.font.sizePt * scale };\n node.letterSpacingPt *= scale;\n node.baselineOffsetPt *= scale;\n return;\n case 'image':\n node.naturalWidth *= scale;\n node.naturalHeight *= scale;\n return;\n case 'svg':\n node.commands = node.commands.map((cmd) => scaleSvgCommand(cmd, scale));\n node.viewBox = scaleRect(node.viewBox, scale);\n return;\n case 'block':\n case 'group':\n scalePaintBorders(node, scale);\n node.children.forEach((child) => scaleNode(child, scale));\n return;\n case 'table':\n node.columns = node.columns.map((c) => ({ x: c.x * scale, width: c.width * scale }));\n node.rows = node.rows.map((row) => scaleTableRow(row, scale));\n return;\n }\n}\n\nfunction scaleTableRow(row: TableRowNode, scale: number): TableRowNode {\n return {\n ...row,\n rect: scaleRect(row.rect, scale),\n cells: row.cells.map((cell) => scaleTableCell(cell, scale)),\n };\n}\n\nfunction scaleTableCell(cell: TableCellNode, scale: number): TableCellNode {\n scalePaintBorders(cell as unknown as { paint: TableCellNode['paint'] }, scale);\n return {\n ...cell,\n rect: scaleRect(cell.rect, scale),\n content: cell.content.map((child) => {\n scaleNode(child, scale);\n return child;\n }),\n };\n}\n\nfunction scalePaintBorders(node: { paint: { borders?: any; borderRadius?: any } }, scale: number): void {\n const paint = node.paint;\n if (paint.borders) {\n for (const edge of Object.values(paint.borders) as any[]) {\n edge.widthPt *= scale;\n }\n }\n if (paint.borderRadius) {\n for (const key of Object.keys(paint.borderRadius)) {\n paint.borderRadius[key] *= scale;\n }\n }\n}\n\nfunction scaleSvgCommand(cmd: SvgDrawCommand, scale: number): SvgDrawCommand {\n const paint = { ...cmd.paint, strokeWidthPt: cmd.paint.strokeWidthPt * scale };\n switch (cmd.op) {\n case 'rect':\n return { ...cmd, x: cmd.x * scale, y: cmd.y * scale, width: cmd.width * scale, height: cmd.height * scale, rx: cmd.rx * scale, ry: cmd.ry * scale, paint };\n case 'ellipse':\n return { ...cmd, cx: cmd.cx * scale, cy: cmd.cy * scale, rx: cmd.rx * scale, ry: cmd.ry * scale, paint };\n case 'line':\n return { ...cmd, x1: cmd.x1 * scale, y1: cmd.y1 * scale, x2: cmd.x2 * scale, y2: cmd.y2 * scale, paint };\n case 'path':\n return { ...cmd, d: scalePathData(cmd.d, scale, scale), paint };\n }\n}\n","import { BlockNode, DocumentNode, GroupNode, ImageNode, LayoutNode, Rect, SvgNode, TableNode, TableRowNode, TextRunNode } from '../model/nodes';\n\n/**\n * See docs/pagination.md. Implementation strategy: walk the tree in visual\n * (document) order while maintaining one monotonically-increasing scalar\n * `shift` -- the total extra vertical space injected so far by page\n * breaks. Every node's page-slotted position is `node.rect.y + shift`;\n * pushing a node to a later page is just increasing `shift` by however\n * much is needed to move it past the current page boundary. Because the\n * shift is global and applied to everything from that point in document\n * order onward, later siblings/containers automatically account for it --\n * there is no separate \"cursor\" data structure to keep in sync.\n */\nexport interface PageContentBox {\n contentHeightPt: number;\n}\n\nexport type PagePrimitive =\n | { kind: 'block'; rect: Rect; node: BlockNode | GroupNode; clip?: Rect }\n | { kind: 'text'; rect: Rect; node: TextRunNode; clip?: Rect }\n | { kind: 'image'; rect: Rect; node: ImageNode; clip?: Rect }\n | { kind: 'svg'; rect: Rect; node: SvgNode; clip?: Rect };\n\nexport interface Page {\n primitives: PagePrimitive[];\n}\n\nexport interface PaginatedDocument {\n pages: Page[];\n}\n\ninterface State {\n shift: number;\n hasPlaced: boolean;\n lastPageTouched: number;\n}\n\nconst EPS = 0.01;\n\nexport function paginate(doc: DocumentNode, contentBox: PageContentBox): PaginatedDocument {\n const CH = contentBox.contentHeightPt;\n const pages: Page[] = [];\n const state: State = { shift: 0, hasPlaced: false, lastPageTouched: -1 };\n\n const ensurePage = (idx: number): Page => {\n while (pages.length <= idx) pages.push({ primitives: [] });\n return pages[idx];\n };\n\n const clipForPage = (clip: Rect | undefined, page: number): Rect | undefined => (clip ? { ...clip, y: clip.y - page * CH } : undefined);\n\n /** Places an atomic node (never split): moves it whole to the next page if it straddles a boundary or has a forced break-before. */\n function pushAtomic(rect: Rect, breakBefore: 'auto' | 'page'): { page: number; localY: number } {\n let adjustedY = rect.y + state.shift;\n let page = Math.floor(adjustedY / CH);\n\n if (breakBefore === 'page' && state.hasPlaced && page === state.lastPageTouched) {\n state.shift += (state.lastPageTouched + 1) * CH - adjustedY;\n adjustedY = rect.y + state.shift;\n page = Math.floor(adjustedY / CH);\n }\n\n const endPage = Math.floor((adjustedY + rect.height - EPS) / CH);\n if (endPage !== page) {\n state.shift += (page + 1) * CH - adjustedY;\n adjustedY = rect.y + state.shift;\n page = Math.floor(adjustedY / CH);\n }\n\n state.hasPlaced = true;\n state.lastPageTouched = page;\n ensurePage(page);\n return { page, localY: adjustedY - page * CH };\n }\n\n function forceBreakAfter(bottomAdjusted: number): void {\n const bottomPage = Math.floor((bottomAdjusted - EPS) / CH);\n state.shift += (bottomPage + 1) * CH - bottomAdjusted;\n state.lastPageTouched = bottomPage + 1;\n }\n\n function placeContainerBackground(node: BlockNode | GroupNode, adjustedTop: number, adjustedBottom: number, clip: Rect | undefined): void {\n const hasPaint = !!(node.paint.backgroundColor || node.paint.borders || node.paint.backgroundImage);\n if (!hasPaint) return;\n const firstPage = Math.max(0, Math.floor(adjustedTop / CH));\n const lastPage = Math.floor((adjustedBottom - EPS) / CH);\n for (let p = firstPage; p <= lastPage; p++) {\n const pageTop = p * CH;\n const pageBottom = pageTop + CH;\n const vTop = Math.max(adjustedTop, pageTop);\n const vBottom = Math.min(adjustedBottom, pageBottom);\n if (vBottom <= vTop) continue;\n const rect: Rect = { x: node.rect.x, y: vTop - pageTop, width: node.rect.width, height: vBottom - vTop };\n ensurePage(p).primitives.push({ kind: 'block', rect, node, clip: clipForPage(clip, p) });\n }\n }\n\n function placeMedia(node: ImageNode | SvgNode, clip: Rect | undefined): void {\n if (node.rect.height <= CH) {\n const { page, localY } = pushAtomic(node.rect, node.break.breakBefore);\n ensurePage(page).primitives.push({ kind: node.type, rect: { ...node.rect, y: localY }, node, clip: clipForPage(clip, page) } as PagePrimitive);\n if (node.break.breakAfter === 'page') forceBreakAfter(page * CH + localY + node.rect.height);\n return;\n }\n // Oversized media: clip a slice onto every page it intersects (docs/pagination.md step 3).\n const adjustedTop = node.rect.y + state.shift;\n const adjustedBottom = adjustedTop + node.rect.height;\n state.hasPlaced = true;\n const firstPage = Math.max(0, Math.floor(adjustedTop / CH));\n const lastPage = Math.floor((adjustedBottom - EPS) / CH);\n for (let p = firstPage; p <= lastPage; p++) {\n const pageTop = p * CH;\n const pageBottom = pageTop + CH;\n const vTop = Math.max(adjustedTop, pageTop);\n const vBottom = Math.min(adjustedBottom, pageBottom);\n if (vBottom <= vTop) continue;\n const rect: Rect = { x: node.rect.x, y: vTop - pageTop, width: node.rect.width, height: vBottom - vTop };\n ensurePage(p).primitives.push({ kind: node.type, rect, node, clip: clipForPage(clip, p) } as PagePrimitive);\n }\n state.lastPageTouched = lastPage;\n }\n\n function placeNode(node: LayoutNode, clip: Rect | undefined): void {\n if (!node.visible) return;\n\n if (node.type === 'text') {\n const { page, localY } = pushAtomic(node.rect, node.break.breakBefore);\n ensurePage(page).primitives.push({ kind: 'text', rect: { ...node.rect, y: localY }, node, clip: clipForPage(clip, page) });\n if (node.break.breakAfter === 'page') forceBreakAfter(page * CH + localY + node.rect.height);\n return;\n }\n\n if (node.type === 'image' || node.type === 'svg') {\n placeMedia(node, clip);\n return;\n }\n\n if (node.type === 'table') {\n placeTable(node, clip);\n return;\n }\n\n // block | group\n const keepTogether = node.break.breakInside === 'avoid';\n const fitsOnePage = node.rect.height <= CH;\n\n if (keepTogether && fitsOnePage) {\n const { page, localY } = pushAtomic(node.rect, node.break.breakBefore);\n const adjustedTop = page * CH + localY;\n const adjustedBottom = adjustedTop + node.rect.height;\n placeContainerBackground(node, adjustedTop, adjustedBottom, clip);\n const childClip = node.type === 'group' && node.clip ? { x: node.rect.x, y: adjustedTop, width: node.rect.width, height: node.rect.height } : clip;\n for (const child of node.children) placeNode(child, childClip);\n if (node.break.breakAfter === 'page') forceBreakAfter(adjustedBottom);\n return;\n }\n\n // A keepTogether node taller than a full page can't actually be kept together;\n // it falls through to normal per-child splitting below.\n if (node.break.breakBefore === 'page') {\n const adjustedY = node.rect.y + state.shift;\n const page = Math.floor(adjustedY / CH);\n if (state.hasPlaced && page === state.lastPageTouched) {\n state.shift += (state.lastPageTouched + 1) * CH - adjustedY;\n }\n }\n\n // Paint the container's own background/border *before* its children, so\n // children are always drawn on top -- matching how every browser paints\n // a box (background, then content) and avoiding the container's fill\n // covering its own text/icons. This means the background is sized from\n // the container's own rect up front, rather than being able to expand\n // to cover a gap a child's own internal page-break might later inject;\n // that was a deliberate trade-off (see docs/pagination.md) once this\n // ordering bug was found: correct z-order for the overwhelmingly common\n // case (any card/pill with both a background and content) matters far\n // more than background continuity across an already-rare nested break.\n const shiftAtStart = state.shift;\n const adjustedTop = node.rect.y + shiftAtStart;\n const adjustedBottomEstimate = node.rect.y + node.rect.height + shiftAtStart;\n placeContainerBackground(node, adjustedTop, adjustedBottomEstimate, clip);\n const childClip = node.type === 'group' && node.clip ? { x: node.rect.x, y: adjustedTop, width: node.rect.width, height: node.rect.height } : clip;\n for (const child of node.children) placeNode(child, childClip);\n const shiftAtEnd = state.shift;\n const adjustedBottom = node.rect.y + node.rect.height + shiftAtEnd;\n state.hasPlaced = true;\n\n if (node.break.breakAfter === 'page') {\n forceBreakAfter(adjustedBottom);\n } else {\n state.lastPageTouched = Math.max(state.lastPageTouched, Math.floor((adjustedBottom - EPS) / CH));\n }\n }\n\n function emitFixed(node: LayoutNode, page: number, dy: number, clip: Rect | undefined): void {\n const rect = { ...node.rect, y: node.rect.y + dy };\n if (node.type === 'text' || node.type === 'image' || node.type === 'svg') {\n ensurePage(page).primitives.push({ kind: node.type, rect, node, clip: clipForPage(clip, page) } as PagePrimitive);\n } else if (node.type === 'block' || node.type === 'group') {\n if (node.paint.backgroundColor || node.paint.borders || node.paint.backgroundImage) {\n ensurePage(page).primitives.push({ kind: 'block', rect, node, clip: clipForPage(clip, page) });\n }\n for (const child of node.children) emitFixed(child, page, dy, clip);\n }\n }\n\n function placeRowVisual(row: TableRowNode, page: number, localY: number, clip: Rect | undefined): void {\n ensurePage(page);\n const dy = localY - row.rect.y;\n for (const cell of row.cells) {\n if (cell.paint.backgroundColor || cell.paint.borders) {\n const rect: Rect = { x: cell.rect.x, y: localY, width: cell.rect.width, height: row.rect.height };\n const fakeCellBlock: BlockNode = { id: cell.id, type: 'block', rect, visible: true, break: { breakInside: 'avoid', breakBefore: 'auto', breakAfter: 'auto' }, paint: cell.paint, children: [] };\n ensurePage(page).primitives.push({ kind: 'block', rect, node: fakeCellBlock, clip: clipForPage(clip, page) });\n }\n for (const child of cell.content) emitFixed(child, page, dy, clip);\n }\n }\n\n function placeTable(table: TableNode, clip: Rect | undefined): void {\n const headerRows = table.rows.filter((r) => r.isHeader);\n const bodyRows = table.rows.filter((r) => !r.isHeader);\n let previousBodyPage = -1;\n\n for (const hRow of headerRows) {\n const { page, localY } = pushAtomic(hRow.rect, 'auto');\n placeRowVisual(hRow, page, localY, clip);\n previousBodyPage = page;\n }\n\n for (const row of bodyRows) {\n const { page, localY } = pushAtomic(row.rect, 'auto');\n let finalLocalY = localY;\n\n if (table.repeatHeader && headerRows.length > 0 && page !== previousBodyPage) {\n let offset = 0;\n for (const hRow of headerRows) {\n placeRowVisual(hRow, page, offset, clip);\n offset += hRow.rect.height;\n }\n if (localY < offset) {\n state.shift += offset - localY;\n finalLocalY = offset;\n state.lastPageTouched = page;\n }\n }\n\n placeRowVisual(row, page, finalLocalY, clip);\n previousBodyPage = page;\n }\n }\n\n for (const child of doc.children) placeNode(child, undefined);\n return { pages };\n}\n\n/**\n * Flattens a small, self-contained node list (header/footer content) into\n * primitives with no page-break logic -- used for content that is assumed\n * to fit within its own reserved header/footer box. See docs/pagination.md\n * \"Headers / footers\".\n */\nexport function flattenLayoutNodes(nodes: LayoutNode[]): PagePrimitive[] {\n const out: PagePrimitive[] = [];\n const visit = (node: LayoutNode): void => {\n if (!node.visible) return;\n if (node.type === 'text' || node.type === 'image' || node.type === 'svg') {\n out.push({ kind: node.type, rect: node.rect, node } as PagePrimitive);\n } else if (node.type === 'table') {\n for (const row of node.rows) {\n for (const cell of row.cells) {\n cell.content.forEach(visit);\n }\n }\n } else {\n if (node.paint.backgroundColor || node.paint.borders || node.paint.backgroundImage) {\n out.push({ kind: 'block', rect: node.rect, node });\n }\n for (const child of node.children) visit(child);\n }\n };\n for (const node of nodes) visit(node);\n return out;\n}\n","import { MarginSpec, PageFormat } from '../types';\nimport { mmToPt, pxToPt, STANDARD_PAGE_SIZES_PT } from '../model/units';\n\nexport interface ResolvedPageGeometry {\n widthPt: number;\n heightPt: number;\n margin: MarginSpec; // pt\n contentWidthPt: number;\n contentHeightPt: number;\n}\n\nexport function resolvePageGeometry(\n format: PageFormat | undefined,\n orientation: 'portrait' | 'landscape' | undefined,\n margin: number | Partial<MarginSpec> | undefined,\n extraTopPt: number,\n extraBottomPt: number,\n): ResolvedPageGeometry {\n let widthPt: number;\n let heightPt: number;\n\n if (!format || format === 'A4') {\n ({ widthPt, heightPt } = STANDARD_PAGE_SIZES_PT['A4']);\n } else if (typeof format === 'string') {\n const preset = STANDARD_PAGE_SIZES_PT[format];\n if (!preset) throw new Error(`ngx-pdf-export: unknown page format \"${format}\".`);\n ({ widthPt, heightPt } = preset);\n } else {\n const unit = format.unit ?? 'mm';\n const convert = unit === 'pt' ? (n: number) => n : unit === 'px' ? pxToPt : mmToPt;\n widthPt = convert(format.width);\n heightPt = convert(format.height);\n }\n\n if (orientation === 'landscape' && widthPt < heightPt) {\n [widthPt, heightPt] = [heightPt, widthPt];\n } else if (orientation === 'portrait' && widthPt > heightPt) {\n [widthPt, heightPt] = [heightPt, widthPt];\n }\n\n const resolvedMargin = resolveMargin(margin);\n\n const contentWidthPt = widthPt - resolvedMargin.left - resolvedMargin.right;\n const contentHeightPt = heightPt - resolvedMargin.top - resolvedMargin.bottom - extraTopPt - extraBottomPt;\n\n if (contentWidthPt <= 0 || contentHeightPt <= 0) {\n throw new Error('ngx-pdf-export: margins (and header/footer height) leave no room for content on the page.');\n }\n\n return { widthPt, heightPt, margin: resolvedMargin, contentWidthPt, contentHeightPt };\n}\n\nfunction resolveMargin(margin: number | Partial<MarginSpec> | undefined): MarginSpec {\n if (margin === undefined) {\n const mm10 = mmToPt(10);\n return { top: mm10, right: mm10, bottom: mm10, left: mm10 };\n }\n if (typeof margin === 'number') {\n const pt = mmToPt(margin);\n return { top: pt, right: pt, bottom: pt, left: pt };\n }\n const mm10 = mmToPt(10);\n return {\n top: margin.top !== undefined ? mmToPt(margin.top) : mm10,\n right: margin.right !== undefined ? mmToPt(margin.right) : mm10,\n bottom: margin.bottom !== undefined ? mmToPt(margin.bottom) : mm10,\n left: margin.left !== undefined ? mmToPt(margin.left) : mm10,\n };\n}\n","import { PDFDocument, PDFFont, StandardFonts } from 'pdf-lib';\nimport { ResolvedFont } from '../model/nodes';\nimport { FontRegistry } from '../fonts/font-registry';\n\n/**\n * Resolves a text run's CSS-derived font to an embedded PDFFont, preferring\n * a developer-registered custom font (full Unicode support, subset-embedded\n * via fontkit) and falling back to the nearest Standard-14 font (WinAnsi\n * only -- see docs/css-support.md \"Unicode and non-Latin scripts\").\n */\nexport class FontResolver {\n private cache = new Map<string, PDFFont>();\n\n constructor(private pdfDoc: PDFDocument, private registry: FontRegistry) {}\n\n async resolve(font: ResolvedFont): Promise<PDFFont> {\n const key = `${font.family}|${font.weight}|${font.style}`;\n const cached = this.cache.get(key);\n if (cached) return cached;\n\n const custom = this.registry.resolve(font.family, font.weight, font.style);\n let embedded: PDFFont;\n if (custom) {\n embedded = await this.pdfDoc.embedFont(custom.bytes, { subset: true });\n } else {\n embedded = await this.pdfDoc.embedFont(pickStandardFont(font));\n }\n this.cache.set(key, embedded);\n return embedded;\n }\n}\n\nfunction pickStandardFont(font: ResolvedFont): StandardFonts {\n const family = font.family.toLowerCase();\n const bold = font.weight >= 600;\n const italic = font.style === 'italic';\n\n if (/mono|courier|consolas|menlo/.test(family)) {\n if (bold && italic) return StandardFonts.CourierBoldOblique;\n if (bold) return StandardFonts.CourierBold;\n if (italic) return StandardFonts.CourierOblique;\n return StandardFonts.Courier;\n }\n if (/times|serif|georgia|garamond/.test(family)) {\n if (bold && italic) return StandardFonts.TimesRomanBoldItalic;\n if (bold) return StandardFonts.TimesRomanBold;\n if (italic) return StandardFonts.TimesRomanItalic;\n return StandardFonts.TimesRoman;\n }\n if (bold && italic) return StandardFonts.HelveticaBoldOblique;\n if (bold) return StandardFonts.HelveticaBold;\n if (italic) return StandardFonts.HelveticaOblique;\n return StandardFonts.Helvetica;\n}\n","import { PDFDocument, PDFFont, PDFImage, PDFPage, rgb, clip, closePath, endPath, lineTo, moveTo, popGraphicsState, pushGraphicsState } from 'pdf-lib';\nimport fontkit from '@pdf-lib/fontkit';\nimport { BlockNode, BorderEdge, GroupNode, ImageNode, Rect, RgbaColor, SvgDrawCommand, SvgNode, TextRunNode } from '../model/nodes';\nimport { Page, PagePrimitive } from '../pagination/paginate';\nimport { FontRegistry } from '../fonts/font-registry';\nimport { FontResolver } from './fonts';\nimport { PdfExportWarning } from '../dom/inspect';\n\nexport interface RenderGeometry {\n widthPt: number;\n heightPt: number;\n marginTopPt: number;\n marginLeftPt: number;\n}\n\nexport interface RenderOptions {\n geometry: RenderGeometry;\n debug: boolean;\n onWarning: (w: PdfExportWarning) => void;\n}\n\nexport interface HeaderFooterConfig {\n headerPrimitivesPerPage?: PagePrimitive[][];\n footerPrimitivesPerPage?: PagePrimitive[][];\n headerGeometry?: RenderGeometry;\n footerGeometry?: RenderGeometry;\n}\n\nexport async function renderPdf(pages: Page[], fontRegistry: FontRegistry, options: RenderOptions, headerFooter?: HeaderFooterConfig): Promise<Uint8Array> {\n const pdfDoc = await PDFDocument.create();\n pdfDoc.registerFontkit(fontkit);\n const fontResolver = new FontResolver(pdfDoc, fontRegistry);\n const imageCache = new Map<string, PDFImage>();\n const warnedGlyphs = new Set<string>();\n\n for (let i = 0; i < pages.length; i++) {\n const page = pages[i];\n const pdfPage = pdfDoc.addPage([options.geometry.widthPt, options.geometry.heightPt]);\n for (const primitive of page.primitives) {\n await drawPrimitive(pdfDoc, pdfPage, primitive, options, fontResolver, imageCache, warnedGlyphs);\n }\n const headerPrimitives = headerFooter?.headerPrimitivesPerPage?.[i];\n if (headerPrimitives?.length && headerFooter?.headerGeometry) {\n const headerOptions: RenderOptions = { ...options, geometry: headerFooter.headerGeometry };\n for (const primitive of headerPrimitives) {\n await drawPrimitive(pdfDoc, pdfPage, primitive, headerOptions, fontResolver, imageCache, warnedGlyphs);\n }\n }\n const footerPrimitives = headerFooter?.footerPrimitivesPerPage?.[i];\n if (footerPrimitives?.length && headerFooter?.footerGeometry) {\n const footerOptions: RenderOptions = { ...options, geometry: headerFooter.footerGeometry };\n for (const primitive of footerPrimitives) {\n await drawPrimitive(pdfDoc, pdfPage, primitive, footerOptions, fontResolver, imageCache, warnedGlyphs);\n }\n }\n if (options.debug) {\n pdfPage.drawRectangle({\n x: 0,\n y: 0,\n width: options.geometry.widthPt,\n height: options.geometry.heightPt,\n borderColor: rgb(1, 0, 0),\n borderWidth: 1,\n borderDashArray: [4, 4],\n });\n }\n }\n\n return pdfDoc.save();\n}\n\nfunction rgbFrom(c: RgbaColor) {\n return rgb(c.r / 255, c.g / 255, c.b / 255);\n}\n\nfunction toPdfSpace(rect: Rect, geometry: RenderGeometry): { x: number; topY: number; bottomY: number; width: number; height: number } {\n const x = geometry.marginLeftPt + rect.x;\n const topY = geometry.marginTopPt + rect.y;\n const bottomYPdf = geometry.heightPt - (topY + rect.height);\n const topYPdf = geometry.heightPt - topY;\n return { x, topY: topYPdf, bottomY: bottomYPdf, width: rect.width, height: rect.height };\n}\n\nasync function drawPrimitive(\n pdfDoc: PDFDocument,\n pdfPage: PDFPage,\n primitive: PagePrimitive,\n options: RenderOptions,\n fontResolver: FontResolver,\n imageCache: Map<string, PDFImage>,\n warnedGlyphs: Set<string>,\n): Promise<void> {\n const clipRect = primitive.clip ? toPdfSpace(primitive.clip, options.geometry) : undefined;\n\n if (clipRect) {\n pushClip(pdfPage, clipRect);\n }\n\n try {\n switch (primitive.kind) {\n case 'block':\n drawBox(pdfPage, primitive.node, primitive.rect, options);\n if (options.debug && primitive.node.fallback) {\n drawDebugOutline(pdfPage, primitive.rect, options.geometry);\n }\n break;\n case 'text':\n await drawText(pdfPage, primitive.node, primitive.rect, options, fontResolver, warnedGlyphs);\n break;\n case 'image':\n await drawImage(pdfDoc, pdfPage, primitive.node, primitive.rect, options, imageCache);\n if (options.debug && primitive.node.isFallbackRaster) {\n drawDebugOutline(pdfPage, primitive.rect, options.geometry);\n }\n break;\n case 'svg':\n drawSvg(pdfPage, primitive.node, primitive.rect, options.geometry);\n break;\n }\n } finally {\n if (clipRect) {\n popClip(pdfPage);\n }\n }\n}\n\nfunction pushClip(page: PDFPage, r: { x: number; bottomY: number; width: number; height: number }): void {\n page.pushOperators(\n pushGraphicsState(),\n moveTo(r.x, r.bottomY),\n lineTo(r.x + r.width, r.bottomY),\n lineTo(r.x + r.width, r.bottomY + r.height),\n lineTo(r.x, r.bottomY + r.height),\n closePath(),\n clip(),\n endPath(),\n );\n}\n\nfunction popClip(page: PDFPage): void {\n page.pushOperators(popGraphicsState());\n}\n\nfunction drawDebugOutline(page: PDFPage, rect: Rect, geometry: RenderGeometry): void {\n const p = toPdfSpace(rect, geometry);\n page.drawRectangle({ x: p.x, y: p.bottomY, width: p.width, height: p.height, borderColor: rgb(1, 0, 0), borderWidth: 1, borderDashArray: [2, 2] });\n}\n\n// ---- box (background/border/border-radius) ----\n\nfunction drawBox(page: PDFPage, node: BlockNode | GroupNode, rect: Rect, options: RenderOptions): void {\n const p = toPdfSpace(rect, options.geometry);\n const paint = node.paint;\n const radius = paint.borderRadius;\n const hasRadius = !!radius && (radius.topLeft || radius.topRight || radius.bottomRight || radius.bottomLeft);\n\n if (hasRadius) {\n const d = roundedRectPath(p.width, p.height, radius!);\n const drawOpts: Parameters<PDFPage['drawSvgPath']>[1] = { x: p.x, y: p.topY };\n if (paint.backgroundColor && paint.backgroundColor.a > 0) {\n drawOpts.color = rgbFrom(paint.backgroundColor);\n drawOpts.opacity = paint.backgroundColor.a * paint.opacity;\n }\n const edge = firstPaintedEdge(paint.borders);\n if (edge) {\n drawOpts.borderColor = rgbFrom(edge.color);\n drawOpts.borderWidth = edge.widthPt;\n drawOpts.borderOpacity = edge.color.a * paint.opacity;\n applyDash(drawOpts, edge);\n }\n if (drawOpts.color || drawOpts.borderColor) {\n page.drawSvgPath(d, drawOpts);\n }\n return;\n }\n\n if (paint.backgroundColor && paint.backgroundColor.a > 0) {\n page.drawRectangle({ x: p.x, y: p.bottomY, width: p.width, height: p.height, color: rgbFrom(paint.backgroundColor), opacity: paint.backgroundColor.a * paint.opacity });\n }\n\n if (paint.borders) {\n drawEdgeLine(page, paint.borders.top, p.x, p.topY, p.x + p.width, p.topY, paint.opacity);\n drawEdgeLine(page, paint.borders.bottom, p.x, p.bottomY, p.x + p.width, p.bottomY, paint.opacity);\n drawEdgeLine(page, paint.borders.left, p.x, p.bottomY, p.x, p.topY, paint.opacity);\n drawEdgeLine(page, paint.borders.right, p.x + p.width, p.bottomY, p.x + p.width, p.topY, paint.opacity);\n }\n}\n\nfunction firstPaintedEdge(borders: BlockNode['paint']['borders']): BorderEdge | undefined {\n if (!borders) return undefined;\n return [borders.top, borders.right, borders.bottom, borders.left].find((e) => e.style !== 'none' && e.widthPt > 0);\n}\n\nfunction applyDash(drawOpts: any, edge: BorderEdge): void {\n if (edge.style === 'dashed') {\n drawOpts.borderDashArray = [edge.widthPt * 2.5, edge.widthPt * 2];\n } else if (edge.style === 'dotted') {\n drawOpts.borderDashArray = [edge.widthPt * 0.6, edge.widthPt * 1.4];\n }\n}\n\nfunction drawEdgeLine(page: PDFPage, edge: BorderEdge, x1: number, y1: number, x2: number, y2: number, groupOpacity: number): void {\n if (edge.style === 'none' || edge.widthPt <= 0) return;\n const dashArray = edge.style === 'dashed' ? [edge.widthPt * 2.5, edge.widthPt * 2] : edge.style === 'dotted' ? [edge.widthPt * 0.6, edge.widthPt * 1.4] : undefined;\n page.drawLine({ start: { x: x1, y: y1 }, end: { x: x2, y: y2 }, thickness: edge.widthPt, color: rgbFrom(edge.color), opacity: edge.color.a * groupOpacity, dashArray });\n}\n\nfunction roundedRectPath(w: number, h: number, r: { topLeft: number; topRight: number; bottomRight: number; bottomLeft: number }): string {\n const tl = Math.min(r.topLeft, w / 2, h / 2);\n const tr = Math.min(r.topRight, w / 2, h / 2);\n const br = Math.min(r.bottomRight, w / 2, h / 2);\n const bl = Math.min(r.bottomLeft, w / 2, h / 2);\n return [\n `M ${tl} 0`,\n `L ${w - tr} 0`,\n `Q ${w} 0 ${w} ${tr}`,\n `L ${w} ${h - br}`,\n `Q ${w} ${h} ${w - br} ${h}`,\n `L ${bl} ${h}`,\n `Q 0 ${h} 0 ${h - bl}`,\n `L 0 ${tl}`,\n `Q 0 0 ${tl} 0`,\n 'Z',\n ].join(' ');\n}\n\n// ---- text ----\n\nasync function drawText(page: PDFPage, node: TextRunNode, rect: Rect, options: RenderOptions, fontResolver: FontResolver, warnedGlyphs: Set<string>): Promise<void> {\n const font = await fontResolver.resolve(node.font);\n const p = toPdfSpace(rect, options.geometry);\n const size = node.font.sizePt;\n const baselineY = options.geometry.heightPt - (options.geometry.marginTopPt + rect.y + node.baselineOffsetPt);\n const color = rgbFrom(node.color);\n const opacity = node.color.a;\n\n const textWidth = measureText(font, node.text, size, node.letterSpacingPt);\n let x = p.x;\n if (node.align === 'center') x = p.x + Math.max(0, (rect.width - textWidth) / 2);\n else if (node.align === 'right') x = p.x + Math.max(0, rect.width - textWidth);\n\n drawGlyphsSafely(page, font, node.text, x, baselineY, size, color, opacity, node.letterSpacingPt, warnedGlyphs, (msg) => options.onWarning({ message: msg, elementDescription: node.text.slice(0, 40) }));\n\n if (node.decoration.underline) {\n page.drawLine({ start: { x, y: baselineY - size * 0.08 }, end: { x: x + textWidth, y: baselineY - size * 0.08 }, thickness: Math.max(0.5, size * 0.05), color, opacity });\n }\n if (node.decoration.lineThrough) {\n page.drawLine({ start: { x, y: baselineY + size * 0.3 }, end: { x: x + textWidth, y: baselineY + size * 0.3 }, thickness: Math.max(0.5, size * 0.05), color, opacity });\n }\n}\n\nfunction measureText(font: PDFFont, text: string, size: number, letterSpacingPt: number): number {\n let w = 0;\n for (const ch of text) w += safeWidth(font, ch, size);\n return w + letterSpacingPt * Math.max(0, [...text].length - 1);\n}\n\nfunction safeWidth(font: PDFFont, ch: string, size: number): number {\n try {\n return font.widthOfTextAtSize(ch, size);\n } catch {\n return size * 0.5;\n }\n}\n\nfunction drawGlyphsSafely(\n page: PDFPage,\n font: PDFFont,\n text: string,\n x0: number,\n y: number,\n size: number,\n color: ReturnType<typeof rgb>,\n opacity: number,\n letterSpacingPt: number,\n warnedGlyphs: Set<string>,\n onWarning: (message: string) => void,\n): void {\n if (letterSpacingPt === 0 && canEncodeAll(font, text)) {\n page.drawText(text, { x: x0, y, size, font, color, opacity });\n return;\n }\n let x = x0;\n for (const ch of text) {\n if (canEncodeAll(font, ch)) {\n page.drawText(ch, { x, y, size, font, color, opacity });\n } else if (!warnedGlyphs.has(ch)) {\n warnedGlyphs.add(ch);\n onWarning(`Character \"${ch}\" has no glyph in the resolved font and was skipped. Register a Unicode-capable font via registerFont() for this text.`);\n }\n x += safeWidth(font, ch, size) + letterSpacingPt;\n }\n}\n\nfunction canEncodeAll(font: PDFFont, text: string): boolean {\n try {\n font.widthOfTextAtSize(text, 10);\n return true;\n } catch {\n return false;\n }\n}\n\n// ---- images ----\n\nasync function drawImage(pdfDoc: PDFDocument, page: PDFPage, node: ImageNode, rect: Rect, options: RenderOptions, cache: Map<string, PDFImage>): Promise<void> {\n if (!node.source.value) return;\n\n let embedded = cache.get(node.source.value);\n if (!embedded) {\n const decoded = decodeDataUrl(node.source.value);\n if (!decoded) return;\n embedded = decoded.isPng ? await pdfDoc.embedPng(decoded.bytes) : await pdfDoc.embedJpg(decoded.bytes);\n cache.set(node.source.value, embedded);\n }\n\n const box = toPdfSpace(rect, options.geometry);\n const natW = node.naturalWidth || embedded.width;\n const natH = node.naturalHeight || embedded.height;\n\n let drawW = box.width;\n let drawH = box.height;\n let drawX = box.x;\n let drawTopY = options.geometry.marginTopPt + rect.y;\n\n if ((node.fit === 'contain' || node.fit === 'cover') && natW > 0 && natH > 0) {\n const scale = node.fit === 'contain' ? Math.min(box.width / natW, box.height / natH) : Math.max(box.width / natW, box.height / natH);\n drawW = natW * scale;\n drawH = natH * scale;\n drawX = box.x + (box.width - drawW) / 2;\n drawTopY = options.geometry.marginTopPt + rect.y + (box.height - drawH) / 2;\n } else if (node.fit === 'none' && natW > 0 && natH > 0) {\n drawW = natW;\n drawH = natH;\n }\n\n const drawBottomYPdf = options.geometry.heightPt - (drawTopY + drawH);\n const needsClip = drawW > box.width + 0.5 || drawH > box.height + 0.5;\n\n if (needsClip) {\n pushClip(page, box);\n }\n page.drawImage(embedded, { x: drawX, y: drawBottomYPdf, width: drawW, height: drawH });\n if (needsClip) {\n popClip(page);\n }\n}\n\nfunction decodeDataUrl(dataUrl: string): { bytes: Uint8Array; isPng: boolean } | null {\n const match = /^data:image\\/(png|jpe?g);base64,(.*)$/i.exec(dataUrl);\n if (!match) return null;\n const isPng = match[1].toLowerCase() === 'png';\n const binary = atob(match[2]);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return { bytes, isPng };\n}\n\n// ---- svg ----\n\nfunction drawSvg(page: PDFPage, node: SvgNode, rect: Rect, geometry: RenderGeometry): void {\n const p = toPdfSpace(rect, geometry);\n for (const cmd of node.commands) {\n drawSvgCommand(page, cmd, p.x, p.topY);\n }\n}\n\nfunction drawSvgCommand(page: PDFPage, cmd: SvgDrawCommand, originX: number, originTopY: number): void {\n const paint = cmd.paint;\n const drawOpts: any = {};\n if (paint.fill) {\n drawOpts.color = rgbFrom(paint.fill);\n drawOpts.opacity = paint.fill.a * paint.opacity;\n }\n if (paint.stroke && paint.strokeWidthPt > 0) {\n drawOpts.borderColor = rgbFrom(paint.stroke);\n drawOpts.borderWidth = paint.strokeWidthPt;\n drawOpts.borderOpacity = paint.stroke.a * paint.opacity;\n }\n if (!drawOpts.color && !drawOpts.borderColor) return;\n\n switch (cmd.op) {\n case 'rect': {\n const hasRadius = cmd.rx > 0 || cmd.ry > 0;\n if (hasRadius) {\n const d = roundedRectPath(cmd.width, cmd.height, { topLeft: cmd.rx, topRight: cmd.rx, bottomRight: cmd.rx, bottomLeft: cmd.rx });\n page.drawSvgPath(d, { ...drawOpts, x: originX + cmd.x, y: originTopY - cmd.y });\n } else {\n page.drawRectangle({ x: originX + cmd.x, y: originTopY - cmd.y - cmd.height, width: cmd.width, height: cmd.height, color: drawOpts.color, opacity: drawOpts.opacity, borderColor: drawOpts.borderColor, borderWidth: drawOpts.borderWidth, borderOpacity: drawOpts.borderOpacity });\n }\n break;\n }\n case 'ellipse':\n page.drawEllipse({ x: originX + cmd.cx, y: originTopY - cmd.cy, xScale: cmd.rx, yScale: cmd.ry, color: drawOpts.color, opacity: drawOpts.opacity, borderColor: drawOpts.borderColor, borderWidth: drawOpts.borderWidth, borderOpacity: drawOpts.borderOpacity });\n break;\n case 'line':\n if (drawOpts.borderColor) {\n page.drawLine({ start: { x: originX + cmd.x1, y: originTopY - cmd.y1 }, end: { x: originX + cmd.x2, y: originTopY - cmd.y2 }, thickness: drawOpts.borderWidth, color: drawOpts.borderColor, opacity: drawOpts.borderOpacity });\n }\n break;\n case 'path':\n page.drawSvgPath(cmd.d, { ...drawOpts, x: originX, y: originTopY });\n break;\n }\n}\n","import { LayoutNode, TextRunNode } from './model/nodes';\nimport { inspectElement } from './dom/inspect';\nimport { resolveAssets } from './dom/assets';\nimport { PdfPageContext, PdfExportWarning } from './types';\n\n/**\n * Builds the layout nodes for one page's header or footer callback result.\n * A returned string becomes a single default-styled text run; a returned\n * HTMLElement is run through the same DOM-inspection path as the body\n * (briefly attached off-screen so getBoundingClientRect/getComputedStyle\n * are meaningful), per docs/pagination.md \"Headers / footers\".\n */\nexport async function buildHeaderFooterNodes(\n result: string | HTMLElement,\n boxWidthPt: number,\n boxHeightPt: number,\n scale: number,\n onWarning: (w: PdfExportWarning) => void,\n): Promise<LayoutNode[]> {\n if (typeof result === 'string') {\n if (!result.trim()) return [];\n const sizePt = 10;\n const node: TextRunNode = {\n id: 'header-footer-text',\n type: 'text',\n rect: { x: 0, y: 0, width: boxWidthPt, height: boxHeightPt },\n visible: true,\n break: { breakInside: 'avoid', breakBefore: 'auto', breakAfter: 'auto' },\n text: result,\n font: { family: 'Helvetica', weight: 400, style: 'normal', sizePt },\n color: { r: 80, g: 80, b: 80, a: 1 },\n letterSpacingPt: 0,\n align: 'left',\n decoration: { underline: false, lineThrough: false },\n baselineOffsetPt: boxHeightPt / 2 + sizePt * 0.35,\n };\n return [node];\n }\n\n const host = document.createElement('div');\n host.style.position = 'fixed';\n host.style.top = '0';\n host.style.left = '-99999px';\n host.style.width = `${boxWidthPt / 0.75}px`;\n host.appendChild(result);\n document.body.appendChild(host);\n\n try {\n const { document: doc, assetTasks, warnings } = inspectElement(result, { keepTogetherSelectors: [] });\n warnings.forEach(onWarning);\n await resolveAssets(assetTasks, scale, onWarning);\n return doc.children;\n } finally {\n document.body.removeChild(host);\n }\n}\n\nexport function pageContext(pageNumber: number, pageCount: number): PdfPageContext {\n return { pageNumber, pageCount };\n}\n","import { inspectElement } from './dom/inspect';\nimport { resolveAssets } from './dom/assets';\nimport { fitDocumentToWidth } from './layout/scale-tree';\nimport { paginate, flattenLayoutNodes } from './pagination/paginate';\nimport { resolvePageGeometry } from './pagination/page-geometry';\nimport { renderPdf, RenderGeometry } from './render/pdf-renderer';\nimport { buildHeaderFooterNodes, pageContext } from './header-footer';\nimport { FontRegistry } from './fonts/font-registry';\nimport { PdfExportOptions, PdfExportWarning } from './types';\n\nexport async function runExport(root: HTMLElement, options: PdfExportOptions, fontRegistry: FontRegistry): Promise<Blob> {\n validateTarget(root);\n\n const warnings: PdfExportWarning[] = [];\n const onWarning = (w: PdfExportWarning) => {\n warnings.push(w);\n options.onWarning?.(w);\n // eslint-disable-next-line no-console\n console.warn(`[ngx-pdf-export] ${w.message} (${w.elementDescription})`);\n };\n\n const scale = options.scale ?? 2;\n const headerHeightPt = options.header ? options.headerHeight ?? 24 : 0;\n const footerHeightPt = options.footer ? options.footerHeight ?? 24 : 0;\n\n const geometry = resolvePageGeometry(options.format, options.orientation, options.margin, headerHeightPt, footerHeightPt);\n\n const { document: doc, assetTasks, warnings: inspectWarnings } = inspectElement(root, {\n keepTogetherSelectors: options.keepTogether ?? [],\n });\n inspectWarnings.forEach(onWarning);\n\n const fitScale = fitDocumentToWidth(doc, geometry.contentWidthPt);\n if (fitScale < 1) {\n onWarning({ message: `Content is wider than the page (by ${Math.round((1 / fitScale - 1) * 100)}%) and was scaled down to fit.`, elementDescription: `<${root.tagName.toLowerCase()}>` });\n }\n\n await resolveAssets(assetTasks, scale, onWarning);\n\n if (options.repeatTableHeaders === false) {\n disableTableHeaderRepeat(doc.children as any);\n }\n\n const paginated = paginate(doc, { contentHeightPt: geometry.contentHeightPt });\n const pageCount = paginated.pages.length || 1;\n\n const bodyGeometry: RenderGeometry = {\n widthPt: geometry.widthPt,\n heightPt: geometry.heightPt,\n marginTopPt: geometry.margin.top + headerHeightPt,\n marginLeftPt: geometry.margin.left,\n };\n\n let headerFooter: Parameters<typeof renderPdf>[3];\n if (options.header || options.footer) {\n const headerGeometry: RenderGeometry = { widthPt: geometry.widthPt, heightPt: geometry.heightPt, marginTopPt: geometry.margin.top, marginLeftPt: geometry.margin.left };\n const footerGeometry: RenderGeometry = { widthPt: geometry.widthPt, heightPt: geometry.heightPt, marginTopPt: geometry.heightPt - geometry.margin.bottom - footerHeightPt, marginLeftPt: geometry.margin.left };\n\n const headerPrimitivesPerPage = options.header\n ? await Promise.all(\n Array.from({ length: pageCount }, (_, i) => i).map(async (i) => {\n const result = options.header!(pageContext(i + 1, pageCount));\n const nodes = await buildHeaderFooterNodes(result, geometry.contentWidthPt, headerHeightPt, scale, onWarning);\n return flattenLayoutNodes(nodes);\n }),\n )\n : undefined;\n\n const footerPrimitivesPerPage = options.footer\n ? await Promise.all(\n Array.from({ length: pageCount }, (_, i) => i).map(async (i) => {\n const result = options.footer!(pageContext(i + 1, pageCount));\n const nodes = await buildHeaderFooterNodes(result, geometry.contentWidthPt, footerHeightPt, scale, onWarning);\n return flattenLayoutNodes(nodes);\n }),\n )\n : undefined;\n\n headerFooter = { headerPrimitivesPerPage, footerPrimitivesPerPage, headerGeometry, footerGeometry };\n }\n\n const bytes = await renderPdf(\n paginated.pages,\n fontRegistry,\n { geometry: bodyGeometry, debug: !!options.debug, onWarning },\n headerFooter,\n );\n\n return new Blob([bytes as BlobPart], { type: 'application/pdf' });\n}\n\nfunction validateTarget(root: HTMLElement | null | undefined): asserts root is HTMLElement {\n if (!root) {\n throw new Error('ngx-pdf-export: export target not found.');\n }\n if (!root.isConnected) {\n throw new Error('ngx-pdf-export: export target is not attached to the document. The element must be rendered (not display:none, not in a detached view) at export time.');\n }\n const rect = root.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) {\n throw new Error('ngx-pdf-export: export target has zero width or height.');\n }\n}\n\nfunction disableTableHeaderRepeat(nodes: import('./model/nodes').LayoutNode[]): void {\n for (const node of nodes) {\n if (node.type === 'table') {\n node.repeatHeader = false;\n } else if (node.type === 'block' || node.type === 'group') {\n disableTableHeaderRepeat(node.children);\n }\n }\n}\n","export interface PdfFontSource {\n family: string;\n src: string | ArrayBuffer;\n weight?: number;\n style?: 'normal' | 'italic';\n}\n\nexport interface RegisteredFontSource {\n family: string;\n weight: number;\n style: 'normal' | 'italic';\n bytes: ArrayBuffer;\n}\n\n/**\n * Holds developer-registered custom fonts (see docs/api-design.md \"Font\n * registration\"). Resolution is family match -> nearest registered weight\n * for that family+style, falling back to the opposite style if no exact\n * style match exists. Standard-14 fallback happens in render/fonts.ts,\n * outside this class, since it needs a live PDFDocument to embed against.\n */\nexport class FontRegistry {\n private sources: RegisteredFontSource[] = [];\n\n async register(font: PdfFontSource): Promise<void> {\n const bytes = typeof font.src === 'string' ? await fetchBytes(font.src) : font.src;\n this.sources.push({\n family: font.family,\n weight: font.weight ?? 400,\n style: font.style ?? 'normal',\n bytes,\n });\n }\n\n resolve(family: string, weight: number, style: 'normal' | 'italic'): RegisteredFontSource | undefined {\n const candidates = this.sources.filter((s) => s.family.toLowerCase() === family.toLowerCase());\n if (candidates.length === 0) {\n return undefined;\n }\n const styleMatches = candidates.filter((c) => c.style === style);\n const pool = styleMatches.length > 0 ? styleMatches : candidates;\n return pool.reduce((best, c) => (Math.abs(c.weight - weight) < Math.abs(best.weight - weight) ? c : best));\n }\n\n hasAnyFontFor(family: string): boolean {\n return this.sources.some((s) => s.family.toLowerCase() === family.toLowerCase());\n }\n}\n\nasync function fetchBytes(url: string): Promise<ArrayBuffer> {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`ngx-pdf-export: failed to fetch font \"${url}\" (HTTP ${response.status}).`);\n }\n return response.arrayBuffer();\n}\n","import { ElementRef } from '@angular/core';\nimport { PdfExportOptions, PdfExportOptionsWithElement } from '../types';\n\nexport type PdfExportTarget = string | HTMLElement | ElementRef<HTMLElement>;\n\nexport interface NormalizedArgs {\n element: PdfExportTarget;\n opts: PdfExportOptions;\n}\n\n/**\n * Accepts either `(target, options)` or a single `{ element, ...options }`\n * object -- see docs/api-design.md.\n */\nexport function normalizeArgs(target: PdfExportTarget | PdfExportOptionsWithElement, options?: PdfExportOptions): NormalizedArgs {\n if (isOptionsWithElement(target)) {\n const { element, ...rest } = target;\n return { element, opts: rest };\n }\n return { element: target, opts: options ?? {} };\n}\n\nfunction isOptionsWithElement(value: unknown): value is PdfExportOptionsWithElement {\n return typeof value === 'object' && value !== null && !(value instanceof ElementRef) && !(value instanceof HTMLElement) && 'element' in value;\n}\n\nexport function resolveElement(target: PdfExportTarget): HTMLElement {\n if (typeof target === 'string') {\n const found = document.querySelector<HTMLElement>(target);\n if (!found) {\n throw new Error(`ngx-pdf-export: no element matches selector \"${target}\".`);\n }\n return found;\n }\n if (target instanceof ElementRef) {\n return target.nativeElement;\n }\n return target;\n}\n","import { Injectable } from '@angular/core';\nimport { runExport } from '../export-pipeline';\nimport { FontRegistry, PdfFontSource } from '../fonts/font-registry';\nimport { PdfExportOptions, PdfExportOptionsWithElement } from '../types';\nimport { normalizeArgs, PdfExportTarget, resolveElement } from './normalize-args';\n\nexport type { PdfExportTarget } from './normalize-args';\n\n/**\n * The library's public entry point. See docs/api-design.md \"Public surface\".\n * `export`/`download`/`toBlob` all accept either `(target, options)` or a\n * single `{ element, ...options }` object.\n */\n@Injectable({ providedIn: 'root' })\nexport class PdfExportService {\n private readonly fontRegistry = new FontRegistry();\n\n /** Registers a custom TTF/OTF font for embedding -- see docs/api-design.md \"Font registration\". */\n async registerFont(font: PdfFontSource): Promise<void> {\n await this.fontRegistry.register(font);\n }\n\n /** Builds the PDF and returns it as a Blob, without triggering a download. */\n async toBlob(target: PdfExportTarget | PdfExportOptionsWithElement, options?: PdfExportOptions): Promise<Blob> {\n const { element, opts } = normalizeArgs(target, options);\n const root = resolveElement(element);\n return runExport(root, opts, this.fontRegistry);\n }\n\n /** Builds the PDF and triggers a browser download. Alias for `download()` with the brief's example call shape. */\n async export(target: PdfExportTarget | PdfExportOptionsWithElement, options?: PdfExportOptions): Promise<void> {\n const { element, opts } = normalizeArgs(target, options);\n const blob = await this.toBlob(element, opts);\n triggerDownload(blob, opts.filename ?? 'document.pdf');\n }\n\n /** Builds the PDF and triggers a browser download with an explicit filename. */\n async download(target: PdfExportTarget | PdfExportOptionsWithElement, filename?: string, options?: PdfExportOptions): Promise<void> {\n const { element, opts } = normalizeArgs(target, options);\n const finalFilename = filename ?? opts.filename ?? 'document.pdf';\n const blob = await this.toBlob(element, opts);\n triggerDownload(blob, finalFilename);\n }\n}\n\nfunction triggerDownload(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\nimport { PdfExportOptions } from '../types';\nimport { PdfExportService } from './pdf-export.service';\n\n/**\n * Thin wrapper around PdfExportService for template-driven use:\n *\n * ```html\n * <div id=\"dashboard\" pdfExport pdfFileName=\"dashboard.pdf\" #dash=\"pdfExport\">\n * ...\n * </div>\n * <button (click)=\"dash.export()\">Export</button>\n * ```\n *\n * By default this does not attach its own click handler -- the host element\n * shown in the brief's example is the content being exported, not\n * necessarily a button. Set `pdfTrigger=\"click\"` to export when the host\n * element itself is clicked.\n */\n@Directive({\n selector: '[pdfExport]',\n exportAs: 'pdfExport',\n})\nexport class PdfExportDirective {\n @Input() pdfFileName?: string;\n @Input() pdfOptions?: PdfExportOptions;\n @Input() pdfTrigger: 'click' | 'none' = 'none';\n\n constructor(private readonly elementRef: ElementRef<HTMLElement>, private readonly pdf: PdfExportService) {}\n\n @HostListener('click')\n protected onHostClick(): void {\n if (this.pdfTrigger === 'click') {\n void this.export();\n }\n }\n\n async export(): Promise<void> {\n await this.pdf.download(this.elementRef.nativeElement, this.pdfFileName, this.pdfOptions);\n }\n}\n","/*\n * Public API surface of ngx-pdf-export.\n * Keep this small and curated -- see docs/api-design.md \"Public surface\".\n */\n\nexport { PdfExportService } from './lib/angular/pdf-export.service';\nexport type { PdfExportTarget } from './lib/angular/normalize-args';\nexport { PdfExportDirective } from './lib/angular/pdf-export.directive';\n\nexport type { PdfFontSource } from './lib/fonts/font-registry';\n\nexport type {\n PdfExportOptions,\n PdfExportOptionsWithElement,\n PdfExportWarning,\n PdfPageContext,\n PageFormat,\n MarginSpec,\n} from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["clamp01","describeElement","i1.PdfExportService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-pdf-export.mjs","sources":["../../../projects/ngx-pdf-export/src/lib/model/units.ts","../../../projects/ngx-pdf-export/src/lib/dom/color.ts","../../../projects/ngx-pdf-export/src/lib/dom/box-model.ts","../../../projects/ngx-pdf-export/src/lib/model/nodes.ts","../../../projects/ngx-pdf-export/src/lib/dom/break-rules.ts","../../../projects/ngx-pdf-export/src/lib/dom/text-runs.ts","../../../projects/ngx-pdf-export/src/lib/dom/unsupported-features.ts","../../../projects/ngx-pdf-export/src/lib/dom/svg-path.ts","../../../projects/ngx-pdf-export/src/lib/dom/svg-parser.ts","../../../projects/ngx-pdf-export/src/lib/dom/inspect.ts","../../../projects/ngx-pdf-export/src/lib/fallback/rasterize.ts","../../../projects/ngx-pdf-export/src/lib/dom/assets.ts","../../../projects/ngx-pdf-export/src/lib/layout/scale-tree.ts","../../../projects/ngx-pdf-export/src/lib/pagination/paginate.ts","../../../projects/ngx-pdf-export/src/lib/pagination/page-geometry.ts","../../../projects/ngx-pdf-export/src/lib/render/fonts.ts","../../../projects/ngx-pdf-export/src/lib/render/svg-path-anchor.ts","../../../projects/ngx-pdf-export/src/lib/render/pdf-renderer.ts","../../../projects/ngx-pdf-export/src/lib/header-footer.ts","../../../projects/ngx-pdf-export/src/lib/export-pipeline.ts","../../../projects/ngx-pdf-export/src/lib/fonts/font-registry.ts","../../../projects/ngx-pdf-export/src/lib/angular/normalize-args.ts","../../../projects/ngx-pdf-export/src/lib/angular/pdf-export.service.ts","../../../projects/ngx-pdf-export/src/lib/angular/pdf-export.directive.ts","../../../projects/ngx-pdf-export/src/public-api.ts","../../../projects/ngx-pdf-export/src/ngx-pdf-export.ts"],"sourcesContent":["/**\n * Unit conversions. See docs/architecture.md \"Coordinate systems and units\".\n * Internal layout space is always PDF points (pt); DOM space is CSS px.\n */\n\nexport const PX_TO_PT = 72 / 96;\nexport const PT_TO_PX = 96 / 72;\nexport const MM_TO_PT = 72 / 25.4;\nexport const PT_TO_MM = 25.4 / 72;\n\nexport function pxToPt(px: number): number {\n return px * PX_TO_PT;\n}\n\nexport function ptToPx(pt: number): number {\n return pt * PT_TO_PX;\n}\n\nexport function mmToPt(mm: number): number {\n return mm * MM_TO_PT;\n}\n\nexport function ptToMm(pt: number): number {\n return pt * PT_TO_MM;\n}\n\nexport interface PageDimensionsPt {\n widthPt: number;\n heightPt: number;\n}\n\n/** Standard page sizes in points, portrait orientation. */\nexport const STANDARD_PAGE_SIZES_PT: Record<string, PageDimensionsPt> = {\n A4: { widthPt: mmToPt(210), heightPt: mmToPt(297) },\n A3: { widthPt: mmToPt(297), heightPt: mmToPt(420) },\n Letter: { widthPt: 612, heightPt: 792 },\n Legal: { widthPt: 612, heightPt: 1008 },\n};\n","import { RgbaColor } from '../model/nodes';\n\nconst RGBA_RE = /^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*(?:,\\s*([\\d.]+)\\s*)?\\)$/i;\n\nlet probeCtx: CanvasRenderingContext2D | null | undefined;\n\nfunction getProbeCtx(): CanvasRenderingContext2D | null {\n if (probeCtx === undefined) {\n const canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n probeCtx = canvas.getContext('2d', { willReadFrequently: true }) as CanvasRenderingContext2D | null;\n }\n return probeCtx;\n}\n\n/**\n * Resolves any valid CSS color string to concrete RGBA components.\n *\n * getComputedStyle() normalizes plain colors to rgb()/rgba(), which the\n * fast regex path below handles directly. But it does NOT downgrade\n * CSS Color 4 results -- color-mix(), oklch(), lab(), lch(), and the\n * color(<colorspace> ...) function are all returned as-is (e.g.\n * `color-mix(in srgb, blue 50%, transparent)` serializes to\n * `color(srgb 0 0 1 / 0.5)`, not `rgba(...)`), which a naive rgb()-only\n * parser silently fails to match. Since these are increasingly common in\n * modern component libraries (including Angular's own current starter\n * template), we fall back to asking the browser itself to resolve them:\n * assigning the string to a 1x1 canvas's `fillStyle` and reading the\n * rasterized pixel back is correct for *any* syntactically valid CSS\n * color, because that's exactly what the canvas rasterizer has to do\n * internally regardless of the input color space. See docs/css-support.md.\n */\nexport function parseComputedColor(value: string | null | undefined): RgbaColor | undefined {\n if (!value) {\n return undefined;\n }\n if (value === 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0 };\n }\n const trimmed = value.trim();\n const match = RGBA_RE.exec(trimmed);\n if (match) {\n return {\n r: clamp255(Number(match[1])),\n g: clamp255(Number(match[2])),\n b: clamp255(Number(match[3])),\n a: match[4] !== undefined ? clamp01(Number(match[4])) : 1,\n };\n }\n return resolveViaCanvas(trimmed);\n}\n\nconst SENTINEL = '#010203';\n\nfunction resolveViaCanvas(value: string): RgbaColor | undefined {\n const ctx = getProbeCtx();\n if (!ctx) {\n return undefined;\n }\n ctx.fillStyle = SENTINEL;\n ctx.fillStyle = value; // per spec, an invalid value is silently ignored (fillStyle keeps its prior value)\n if (ctx.fillStyle === SENTINEL) {\n return undefined; // assignment was rejected -- not a color this browser understands either\n }\n ctx.clearRect(0, 0, 1, 1);\n ctx.fillRect(0, 0, 1, 1);\n const [r, g, b, a] = ctx.getImageData(0, 0, 1, 1).data;\n return { r, g, b, a: a / 255 };\n}\n\nexport function isTransparent(color: RgbaColor | undefined): boolean {\n return !color || color.a <= 0;\n}\n\nfunction clamp255(n: number): number {\n return Math.max(0, Math.min(255, Math.round(n)));\n}\n\nfunction clamp01(n: number): number {\n return Math.max(0, Math.min(1, n));\n}\n","import { BorderEdge, BorderRadius, BorderStyle, BoxBorders, BoxPaint } from '../model/nodes';\nimport { pxToPt } from '../model/units';\nimport { isTransparent, parseComputedColor } from './color';\n\nexport function readBoxPaint(style: CSSStyleDeclaration): BoxPaint {\n const backgroundColor = parseComputedColor(style.backgroundColor);\n const opacity = clamp01(parseFloat(style.opacity || '1'));\n\n const paint: BoxPaint = {\n opacity: Number.isFinite(opacity) ? opacity : 1,\n };\n\n if (backgroundColor && !isTransparent(backgroundColor)) {\n paint.backgroundColor = backgroundColor;\n }\n\n const borders = readBorders(style);\n if (borders) {\n paint.borders = borders;\n }\n\n const radius = readBorderRadius(style);\n if (radius) {\n paint.borderRadius = radius;\n }\n\n return paint;\n}\n\nfunction readBorders(style: CSSStyleDeclaration): BoxBorders | undefined {\n const top = readEdge(style, 'Top');\n const right = readEdge(style, 'Right');\n const bottom = readEdge(style, 'Bottom');\n const left = readEdge(style, 'Left');\n\n const hasAny = [top, right, bottom, left].some((e) => e.style !== 'none' && e.widthPt > 0);\n if (!hasAny) {\n return undefined;\n }\n return { top, right, bottom, left };\n}\n\nfunction readEdge(style: CSSStyleDeclaration, side: 'Top' | 'Right' | 'Bottom' | 'Left'): BorderEdge {\n const widthPx = parseFloat((style as any)[`border${side}Width`] || '0');\n const borderStyle = normalizeBorderStyle((style as any)[`border${side}Style`]);\n const color = parseComputedColor((style as any)[`border${side}Color`]) ?? { r: 0, g: 0, b: 0, a: 1 };\n return {\n widthPt: borderStyle === 'none' ? 0 : pxToPt(widthPx || 0),\n style: borderStyle,\n color,\n };\n}\n\nfunction normalizeBorderStyle(value: string | undefined): BorderStyle {\n switch (value) {\n case 'dashed':\n return 'dashed';\n case 'dotted':\n return 'dotted';\n case 'solid':\n case 'double':\n case 'groove':\n case 'ridge':\n case 'inset':\n case 'outset':\n return 'solid';\n default:\n return 'none';\n }\n}\n\nfunction readBorderRadius(style: CSSStyleDeclaration): BorderRadius | undefined {\n const topLeft = pxToPt(parseFloat(style.borderTopLeftRadius || '0'));\n const topRight = pxToPt(parseFloat(style.borderTopRightRadius || '0'));\n const bottomRight = pxToPt(parseFloat(style.borderBottomRightRadius || '0'));\n const bottomLeft = pxToPt(parseFloat(style.borderBottomLeftRadius || '0'));\n if (!topLeft && !topRight && !bottomRight && !bottomLeft) {\n return undefined;\n }\n return { topLeft, topRight, bottomRight, bottomLeft };\n}\n\nfunction clamp01(n: number): number {\n return Math.max(0, Math.min(1, n));\n}\n","/**\n * Framework-independent internal document/layout tree.\n * See docs/architecture.md and docs/layout-engine.md.\n *\n * All geometry on these nodes is in *layout space*: PDF points, y-down,\n * origin at the top-left of the captured root element (a single tall\n * \"flow\" -- pagination has not happened yet at this stage).\n */\n\nexport interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface RgbaColor {\n r: number; // 0-255\n g: number; // 0-255\n b: number; // 0-255\n a: number; // 0-1\n}\n\nexport type BorderStyle = 'solid' | 'dashed' | 'dotted' | 'none';\n\nexport interface BorderEdge {\n widthPt: number;\n style: BorderStyle;\n color: RgbaColor;\n}\n\nexport interface BoxBorders {\n top: BorderEdge;\n right: BorderEdge;\n bottom: BorderEdge;\n left: BorderEdge;\n}\n\nexport interface BorderRadius {\n topLeft: number;\n topRight: number;\n bottomRight: number;\n bottomLeft: number;\n}\n\nexport interface BoxPaint {\n backgroundColor?: RgbaColor;\n backgroundImage?: { dataUrl: string; fit: 'cover' | 'contain' | 'fill' };\n borders?: BoxBorders;\n borderRadius?: BorderRadius;\n opacity: number; // 0-1, default 1\n}\n\nexport type BreakRule = 'auto' | 'avoid' | 'page-before' | 'page-after';\n\nexport interface NodeBreakRules {\n breakInside: 'auto' | 'avoid';\n breakBefore: 'auto' | 'page';\n breakAfter: 'auto' | 'page';\n}\n\nexport const DEFAULT_BREAK_RULES: NodeBreakRules = {\n breakInside: 'auto',\n breakBefore: 'auto',\n breakAfter: 'auto',\n};\n\nexport type LayoutNode =\n | BlockNode\n | TextRunNode\n | ImageNode\n | SvgNode\n | TableNode\n | GroupNode;\n\nexport interface BaseNode {\n id: string;\n rect: Rect;\n visible: boolean;\n break: NodeBreakRules;\n /** Present when this node replaced an unsupported subtree. */\n fallback?: { reason: string };\n}\n\nexport interface BlockNode extends BaseNode {\n type: 'block';\n paint: BoxPaint;\n children: LayoutNode[];\n}\n\nexport interface GroupNode extends BaseNode {\n type: 'group';\n paint: BoxPaint;\n children: LayoutNode[];\n /** Clip children painting to `rect` -- from overflow: hidden/auto/scroll. */\n clip: boolean;\n}\n\nexport interface TextRunNode extends BaseNode {\n type: 'text';\n text: string;\n font: ResolvedFont;\n color: RgbaColor;\n letterSpacingPt: number;\n align: 'left' | 'right' | 'center' | 'justify';\n decoration: { underline: boolean; lineThrough: boolean };\n /** Baseline offset from rect.y (top of the line box), in pt. */\n baselineOffsetPt: number;\n}\n\nexport interface ResolvedFont {\n family: string;\n weight: number;\n style: 'normal' | 'italic';\n sizePt: number;\n}\n\nexport interface ImageNode extends BaseNode {\n type: 'image';\n source: { kind: 'url' | 'data-url' | 'canvas'; value: string };\n fit: 'cover' | 'contain' | 'fill' | 'none';\n naturalWidth: number;\n naturalHeight: number;\n isFallbackRaster: boolean;\n}\n\nexport type SvgDrawCommand =\n | { op: 'rect'; x: number; y: number; width: number; height: number; rx: number; ry: number; paint: SvgPaint }\n | { op: 'ellipse'; cx: number; cy: number; rx: number; ry: number; paint: SvgPaint }\n | { op: 'path'; d: string; paint: SvgPaint; originOffsetXPt: number; originOffsetYPt: number }\n | { op: 'line'; x1: number; y1: number; x2: number; y2: number; paint: SvgPaint };\n\nexport interface SvgPaint {\n fill?: RgbaColor;\n stroke?: RgbaColor;\n strokeWidthPt: number;\n opacity: number;\n}\n\nexport interface SvgNode extends BaseNode {\n type: 'svg';\n /** Commands in the SVG's own local coordinate space (viewBox units, pt-scaled). */\n commands: SvgDrawCommand[];\n viewBox: Rect;\n}\n\nexport interface TableCellNode {\n id: string;\n rect: Rect;\n isHeader: boolean;\n paint: BoxPaint;\n content: LayoutNode[];\n}\n\nexport interface TableRowNode {\n id: string;\n rect: Rect;\n isHeader: boolean;\n cells: TableCellNode[];\n}\n\nexport interface TableColumn {\n x: number;\n width: number;\n}\n\nexport interface TableNode extends BaseNode {\n type: 'table';\n columns: TableColumn[];\n rows: TableRowNode[];\n headerRowCount: number;\n repeatHeader: boolean;\n}\n\nexport interface DocumentNode {\n /** Total height of the captured flow, in pt -- before pagination. */\n flowWidthPt: number;\n flowHeightPt: number;\n children: LayoutNode[];\n}\n\nexport function isContainer(node: LayoutNode): node is BlockNode | GroupNode {\n return node.type === 'block' || node.type === 'group';\n}\n","import { DEFAULT_BREAK_RULES, NodeBreakRules } from '../model/nodes';\n\n/**\n * Resolves break-inside/before/after from computed style, plus an optional\n * caller-supplied `keepTogether` selector list matched against the live\n * element (checked by the caller via `element.matches(selector)`).\n * See docs/pagination.md \"keepTogether / break controls\".\n */\nexport function readBreakRules(style: CSSStyleDeclaration, forceKeepTogether: boolean): NodeBreakRules {\n const breakInside = normalizeAvoid(style.breakInside) || normalizeAvoid((style as any).pageBreakInside);\n const breakBefore = normalizePage(style.breakBefore) || normalizePage((style as any).pageBreakBefore);\n const breakAfter = normalizePage(style.breakAfter) || normalizePage((style as any).pageBreakAfter);\n\n return {\n breakInside: forceKeepTogether || breakInside === 'avoid' ? 'avoid' : 'auto',\n breakBefore: breakBefore === 'page' ? 'page' : 'auto',\n breakAfter: breakAfter === 'page' ? 'page' : 'auto',\n };\n}\n\nfunction normalizeAvoid(value: string | undefined): 'avoid' | undefined {\n return value === 'avoid' ? 'avoid' : undefined;\n}\n\nfunction normalizePage(value: string | undefined): 'page' | undefined {\n return value === 'page' || value === 'always' || value === 'left' || value === 'right' ? 'page' : undefined;\n}\n\nexport { DEFAULT_BREAK_RULES };\n","/**\n * Splits a Text node into per-visual-line runs using only the standard\n * Range API. See docs/layout-engine.md \"Text runs via Range\".\n *\n * Range.getClientRects() on a range spanning multiple wrapped lines\n * returns one DOMRect per line, in visual order -- the browser has\n * already done line-breaking for us. To recover which substring belongs\n * to which line (needed so the extracted PDF text matches the visible\n * text per line), we binary-search line-count transitions: the number of\n * rects returned by range(0, k) is monotonically non-decreasing in k, so\n * the offset where it first increases from n to n+1 is exactly the start\n * of line n+1. This needs only Range.getClientRects, so it works\n * identically in every browser (no caretRangeFromPoint/caretPositionFromPoint\n * feature-detection needed).\n */\nexport interface RawTextRun {\n text: string;\n rect: DOMRect;\n}\n\nexport function extractTextRuns(textNode: Text): RawTextRun[] {\n const data = textNode.data;\n if (!data || !/\\S/.test(data)) {\n return [];\n }\n\n const range = document.createRange();\n range.selectNodeContents(textNode);\n const lineRects = Array.from(range.getClientRects()).filter((r) => r.width > 0 && r.height > 0);\n\n if (lineRects.length <= 1) {\n const rect = lineRects[0] ?? textNode.parentElement?.getBoundingClientRect();\n return rect ? [{ text: data, rect }] : [];\n }\n\n const boundaries: number[] = [0];\n for (let lineIndex = 0; lineIndex < lineRects.length - 1; lineIndex++) {\n const target = lineIndex + 2;\n const prev = boundaries[boundaries.length - 1];\n const k = findLineBoundary(range, textNode, data.length, target, prev);\n boundaries.push(Math.max(prev, k - 1));\n }\n boundaries.push(data.length);\n\n const runs: RawTextRun[] = [];\n for (let i = 0; i < lineRects.length; i++) {\n const start = boundaries[i];\n const end = boundaries[i + 1];\n const text = data.slice(start, end);\n if (text.trim().length === 0 && text.length === 0) {\n continue;\n }\n runs.push({ text, rect: lineRects[i] });\n }\n return runs;\n}\n\nfunction countLinesForPrefix(range: Range, node: Text, k: number): number {\n range.setStart(node, 0);\n range.setEnd(node, k);\n return range.getClientRects().length;\n}\n\n/** Minimal k in (prev, maxLen] such that the prefix [0, k) spans >= target lines. */\nfunction findLineBoundary(range: Range, node: Text, maxLen: number, target: number, prev: number): number {\n let low = prev + 1;\n let high = maxLen;\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (countLinesForPrefix(range, node, mid) >= target) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n return low;\n}\n","/**\n * Detects computed-style usage this library cannot faithfully translate\n * into PDF operators. See docs/css-support.md.\n */\nexport interface UnsupportedCheck {\n unsupported: boolean;\n reason?: string;\n}\n\nconst GRADIENT_RE = /(linear|radial|conic)-gradient\\(/i;\n\nexport function checkUnsupported(style: CSSStyleDeclaration): UnsupportedCheck {\n const backgroundImage = style.backgroundImage;\n if (backgroundImage && backgroundImage !== 'none' && GRADIENT_RE.test(backgroundImage)) {\n return { unsupported: true, reason: `background: ${backgroundImage} is a gradient and is not supported; rasterized.` };\n }\n\n const boxShadow = style.boxShadow;\n if (boxShadow && boxShadow !== 'none') {\n return { unsupported: true, reason: `box-shadow: ${boxShadow} is not supported; rasterized.` };\n }\n\n const filter = style.filter;\n if (filter && filter !== 'none') {\n return { unsupported: true, reason: `filter: ${filter} is not supported; rasterized.` };\n }\n\n const backdropFilter = (style as any).backdropFilter as string | undefined;\n if (backdropFilter && backdropFilter !== 'none') {\n return { unsupported: true, reason: `backdrop-filter is not supported; rasterized.` };\n }\n\n const transform = style.transform;\n if (transform && transform !== 'none' && !isTranslateOnly(transform)) {\n return { unsupported: true, reason: `transform: ${transform} is not supported (only translate() is); rasterized.` };\n }\n\n const mixBlendMode = style.mixBlendMode;\n if (mixBlendMode && mixBlendMode !== 'normal') {\n return { unsupported: true, reason: `mix-blend-mode: ${mixBlendMode} is not supported; rasterized.` };\n }\n\n if (style.display === 'grid' || style.display === 'inline-grid') {\n return { unsupported: true, reason: 'display: grid is not specially interpreted and is rasterized as a unit.' };\n }\n\n return { unsupported: false };\n}\n\nfunction isTranslateOnly(transform: string): boolean {\n // matrix(1, 0, 0, 1, tx, ty) is what getComputedStyle reports for a pure translate().\n const m = /^matrix\\(\\s*1,\\s*0,\\s*0,\\s*1,\\s*[-\\d.]+,\\s*[-\\d.]+\\s*\\)$/i;\n return m.test(transform.trim());\n}\n","/**\n * Rewrites the numeric coordinates in an SVG path `d` string by a scale\n * factor, so a path authored in the SVG's own viewBox units can be\n * embedded directly in PDF point space without a separate transform.\n *\n * This is a generic tokenizer for well-formed path data (commands\n * separated from numbers, numbers separated by whitespace/commas). It\n * does not handle the rare \"arc flags packed with no separator\" shorthand\n * (e.g. `A5 5 0 01 1 10 10`) some minifiers produce -- documented in\n * docs/css-support.md.\n */\nconst COMMAND_RE = /[MLHVCSQTAZmlhvcsqtaz]/;\nconst NUMBER_RE = /[-+]?(?:\\d+\\.\\d+|\\.\\d+|\\d+)(?:[eE][-+]?\\d+)?/g;\n\n// Number of coordinate values per command letter, and which of those are\n// x-like vs y-like (for independent sx/sy scaling). 'f' = flag (unscaled).\nconst PARAM_ROLES: Record<string, Array<'x' | 'y' | 'f'>> = {\n M: ['x', 'y'],\n L: ['x', 'y'],\n T: ['x', 'y'],\n H: ['x'],\n V: ['y'],\n C: ['x', 'y', 'x', 'y', 'x', 'y'],\n S: ['x', 'y', 'x', 'y'],\n Q: ['x', 'y', 'x', 'y'],\n A: ['x', 'y', 'f', 'f', 'f', 'x', 'y'],\n Z: [],\n};\n\nexport function scalePathData(d: string, sx: number, sy: number): string {\n let out = '';\n let i = 0;\n let currentRoles: Array<'x' | 'y' | 'f'> = [];\n let roleIndex = 0;\n\n while (i < d.length) {\n const ch = d[i];\n if (COMMAND_RE.test(ch)) {\n out += ch;\n currentRoles = PARAM_ROLES[ch.toUpperCase()] ?? [];\n roleIndex = 0;\n i++;\n continue;\n }\n if (/\\s|,/.test(ch)) {\n out += ch;\n i++;\n continue;\n }\n NUMBER_RE.lastIndex = i;\n const match = NUMBER_RE.exec(d);\n if (!match || match.index !== i) {\n // Unrecognized character; copy through unchanged rather than throw.\n out += ch;\n i++;\n continue;\n }\n const raw = match[0];\n const value = Number(raw);\n const role = currentRoles.length ? currentRoles[roleIndex % currentRoles.length] : 'x';\n roleIndex++;\n const scaled = role === 'y' ? value * sy : role === 'x' ? value * sx : value;\n out += formatNumber(scaled);\n i += raw.length;\n }\n return out;\n}\n\nfunction formatNumber(n: number): string {\n const rounded = Math.round(n * 1000) / 1000;\n return String(rounded);\n}\n","import { RgbaColor, SvgDrawCommand, SvgPaint } from '../model/nodes';\nimport { pxToPt } from '../model/units';\nimport { parseComputedColor } from './color';\nimport { scalePathData } from './svg-path';\n\nconst SUPPORTED_TAGS = new Set(['rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon', 'path', 'g', 'svg']);\n\n/**\n * Parses a supported subset of SVG into scale-normalized draw commands.\n * Returns null if the subtree uses a feature we don't translate (gradient\n * fill, <text>, <use>, <clipPath>, filters, patterns, images) -- the\n * caller falls back to rasterizing the whole <svg> as one element. See\n * docs/css-support.md.\n */\nexport function parseSvg(svg: SVGSVGElement, renderedWidthPt: number, renderedHeightPt: number): SvgDrawCommand[] | null {\n const viewBox = svg.viewBox?.baseVal;\n const vbWidth = viewBox && viewBox.width > 0 ? viewBox.width : svg.width.baseVal.value || renderedWidthPt;\n const vbHeight = viewBox && viewBox.height > 0 ? viewBox.height : svg.height.baseVal.value || renderedHeightPt;\n const vbX = viewBox?.x ?? 0;\n const vbY = viewBox?.y ?? 0;\n\n const sx = vbWidth > 0 ? renderedWidthPt / vbWidth : 1;\n const sy = vbHeight > 0 ? renderedHeightPt / vbHeight : 1;\n\n const commands: SvgDrawCommand[] = [];\n const ok = walk(svg, sx, sy, vbX, vbY, commands);\n return ok ? commands : null;\n}\n\nfunction walk(el: Element, sx: number, sy: number, vbX: number, vbY: number, out: SvgDrawCommand[]): boolean {\n for (const child of Array.from(el.children)) {\n const tag = child.tagName.toLowerCase();\n if (!SUPPORTED_TAGS.has(tag)) {\n return false;\n }\n if (tag === 'g' || tag === 'svg') {\n if (!walk(child, sx, sy, vbX, vbY, out)) {\n return false;\n }\n continue;\n }\n\n const style = getComputedStyle(child);\n if (hasGradientOrPattern(style.fill) || hasGradientOrPattern(style.stroke)) {\n return false;\n }\n\n const paint = readSvgPaint(style);\n\n switch (tag) {\n case 'rect': {\n const r = child as SVGRectElement;\n out.push({\n op: 'rect',\n x: (num(r, 'x') - vbX) * sx,\n y: (num(r, 'y') - vbY) * sy,\n width: num(r, 'width') * sx,\n height: num(r, 'height') * sy,\n rx: num(r, 'rx') * sx,\n ry: num(r, 'ry') * sy,\n paint,\n });\n break;\n }\n case 'circle': {\n const c = child as SVGCircleElement;\n const rr = num(c, 'r');\n out.push({\n op: 'ellipse',\n cx: (num(c, 'cx') - vbX) * sx,\n cy: (num(c, 'cy') - vbY) * sy,\n rx: rr * sx,\n ry: rr * sy,\n paint,\n });\n break;\n }\n case 'ellipse': {\n const e = child as SVGEllipseElement;\n out.push({\n op: 'ellipse',\n cx: (num(e, 'cx') - vbX) * sx,\n cy: (num(e, 'cy') - vbY) * sy,\n rx: num(e, 'rx') * sx,\n ry: num(e, 'ry') * sy,\n paint,\n });\n break;\n }\n case 'line': {\n const l = child as SVGLineElement;\n out.push({\n op: 'line',\n x1: (num(l, 'x1') - vbX) * sx,\n y1: (num(l, 'y1') - vbY) * sy,\n x2: (num(l, 'x2') - vbX) * sx,\n y2: (num(l, 'y2') - vbY) * sy,\n paint,\n });\n break;\n }\n // A non-zero viewBox origin (common for icon sets that author with\n // viewBox=\"0 -960 960 960\") needs to shift every coordinate by\n // (-vbX, -vbY). For rect/circle/ellipse/line above that's just one\n // subtraction per numeric attribute, but a path's `d` string mixes\n // absolute and *relative* commands -- rewriting every literal would\n // incorrectly shift relative deltas too, which are meant to stay\n // untouched. A viewBox origin offset is a rigid translation of the\n // whole shape, so it's applied once at render time (originOffsetXPt/\n // originOffsetYPt) as the anchor point passed to drawSvgPath,\n // instead of touching the path data itself.\n case 'polyline':\n case 'polygon': {\n const points = (child.getAttribute('points') || '').trim();\n if (!points) break;\n const d = pointsToPathData(points, tag === 'polygon');\n out.push({ op: 'path', d: scalePathData(d, sx, sy), paint, originOffsetXPt: vbX * sx, originOffsetYPt: vbY * sy });\n break;\n }\n case 'path': {\n const d = child.getAttribute('d') || '';\n if (!d) break;\n out.push({ op: 'path', d: scalePathData(d, sx, sy), paint, originOffsetXPt: vbX * sx, originOffsetYPt: vbY * sy });\n break;\n }\n }\n }\n return true;\n}\n\nfunction hasGradientOrPattern(paintRef: string): boolean {\n return paintRef.startsWith('url(');\n}\n\nfunction readSvgPaint(style: CSSStyleDeclaration): SvgPaint {\n const fillOpacity = parseFloat(style.fillOpacity || '1');\n const strokeOpacity = parseFloat(style.strokeOpacity || '1');\n const opacity = parseFloat(style.opacity || '1');\n\n const fillColor = style.fill && style.fill !== 'none' ? withAlpha(parseComputedColor(style.fill), fillOpacity) : undefined;\n const strokeColor = style.stroke && style.stroke !== 'none' ? withAlpha(parseComputedColor(style.stroke), strokeOpacity) : undefined;\n\n return {\n fill: fillColor,\n stroke: strokeColor,\n strokeWidthPt: pxToPt(parseFloat(style.strokeWidth || '0')),\n opacity: Number.isFinite(opacity) ? opacity : 1,\n };\n}\n\nfunction withAlpha(color: RgbaColor | undefined, alphaMultiplier: number): RgbaColor | undefined {\n if (!color) return undefined;\n return { ...color, a: color.a * (Number.isFinite(alphaMultiplier) ? alphaMultiplier : 1) };\n}\n\nfunction num(el: Element, attr: string): number {\n const v = (el as any)[attr]?.baseVal?.value;\n if (typeof v === 'number') return v;\n return parseFloat(el.getAttribute(attr) || '0') || 0;\n}\n\nfunction pointsToPathData(points: string, close: boolean): string {\n const coords = points.split(/[\\s,]+/).filter(Boolean).map(Number);\n let d = '';\n for (let i = 0; i < coords.length - 1; i += 2) {\n d += (i === 0 ? 'M' : 'L') + coords[i] + ' ' + coords[i + 1] + ' ';\n }\n return close ? d + 'Z' : d;\n}\n\n","import {\n BlockNode,\n DocumentNode,\n GroupNode,\n ImageNode,\n LayoutNode,\n Rect,\n NodeBreakRules,\n ResolvedFont,\n SvgNode,\n TableCellNode,\n TableNode,\n TableRowNode,\n TextRunNode,\n} from '../model/nodes';\nimport { pxToPt } from '../model/units';\nimport { readBoxPaint } from './box-model';\nimport { readBreakRules } from './break-rules';\nimport { parseComputedColor } from './color';\nimport { extractTextRuns } from './text-runs';\nimport { checkUnsupported } from './unsupported-features';\nimport { parseSvg } from './svg-parser';\n\nexport interface PdfExportWarning {\n message: string;\n elementDescription: string;\n}\n\nexport type AssetTask =\n | { kind: 'img'; node: ImageNode; element: HTMLImageElement }\n | { kind: 'canvas'; node: ImageNode; element: HTMLCanvasElement }\n | { kind: 'fallback'; node: ImageNode; element: HTMLElement; captureWidthPx: number; captureHeightPx: number };\n\nexport interface InspectResult {\n document: DocumentNode;\n assetTasks: AssetTask[];\n warnings: PdfExportWarning[];\n}\n\nexport interface InspectOptions {\n keepTogetherSelectors: string[];\n}\n\nlet idCounter = 0;\nfunction nextId(prefix: string): string {\n idCounter += 1;\n return `${prefix}-${idCounter}`;\n}\n\nexport function inspectElement(root: HTMLElement, options: InspectOptions): InspectResult {\n const rootRect = root.getBoundingClientRect();\n const assetTasks: AssetTask[] = [];\n const warnings: PdfExportWarning[] = [];\n\n const children = walkChildren(root, rootRect, options, assetTasks, warnings);\n\n return {\n document: {\n flowWidthPt: pxToPt(rootRect.width),\n flowHeightPt: pxToPt(rootRect.height),\n children,\n },\n assetTasks,\n warnings,\n };\n}\n\nfunction relativeRect(elRect: DOMRect, rootRect: DOMRect): Rect {\n return {\n x: pxToPt(elRect.left - rootRect.left),\n y: pxToPt(elRect.top - rootRect.top),\n width: pxToPt(elRect.width),\n height: pxToPt(elRect.height),\n };\n}\n\nfunction walkChildren(\n parent: Element,\n rootRect: DOMRect,\n options: InspectOptions,\n assetTasks: AssetTask[],\n warnings: PdfExportWarning[],\n): LayoutNode[] {\n const out: LayoutNode[] = [];\n for (const child of Array.from(parent.childNodes)) {\n if (child.nodeType === Node.TEXT_NODE) {\n out.push(...buildTextNodes(child as Text, parent, rootRect));\n } else if (child.nodeType === Node.ELEMENT_NODE) {\n const node = visitElement(child as HTMLElement, rootRect, options, assetTasks, warnings);\n if (node) {\n out.push(node);\n }\n }\n }\n return out;\n}\n\nconst SKIP_TAGS = new Set(['SCRIPT', 'STYLE', 'TEMPLATE', 'NOSCRIPT']);\n\nfunction visitElement(\n el: HTMLElement,\n rootRect: DOMRect,\n options: InspectOptions,\n assetTasks: AssetTask[],\n warnings: PdfExportWarning[],\n): LayoutNode | null {\n if (SKIP_TAGS.has(el.tagName)) {\n return null;\n }\n const style = getComputedStyle(el);\n if (style.display === 'none') {\n return null;\n }\n\n const elRect = el.getBoundingClientRect();\n if (elRect.width <= 0 || elRect.height <= 0) {\n return null;\n }\n const rect = relativeRect(elRect, rootRect);\n const visible = style.visibility !== 'hidden' && parseFloat(style.opacity || '1') > 0;\n const forceKeepTogether = options.keepTogetherSelectors.some((sel) => {\n try {\n return el.matches(sel);\n } catch {\n return false;\n }\n });\n const breakRules = readBreakRules(style, forceKeepTogether);\n\n const tag = el.tagName.toLowerCase();\n\n if (tag === 'img') {\n return buildImageNode(el as HTMLImageElement, rect, visible, breakRules, assetTasks);\n }\n if (tag === 'canvas') {\n return buildCanvasNode(el as HTMLCanvasElement, rect, visible, breakRules, assetTasks);\n }\n if (tag === 'svg') {\n return buildSvgNode(el as unknown as SVGSVGElement, rect, visible, breakRules, assetTasks, warnings);\n }\n if (tag === 'table') {\n return buildTableNode(el as HTMLTableElement, rootRect, rect, visible, breakRules, options, assetTasks, warnings);\n }\n\n const unsupported = checkUnsupported(style);\n if (unsupported.unsupported) {\n warnings.push({ message: unsupported.reason!, elementDescription: describeElement(el) });\n return buildFallbackImageNode(el, rect, visible, breakRules, unsupported.reason!, assetTasks, elRect);\n }\n\n const paint = readBoxPaint(style);\n const children = walkChildren(el, rootRect, options, assetTasks, warnings);\n if (children.length === 0 && !paint.backgroundColor && !paint.borders) {\n return null;\n }\n\n const clips = style.overflow !== 'visible' && (style.overflowX !== 'visible' || style.overflowY !== 'visible');\n if (clips) {\n const group: GroupNode = {\n id: nextId('group'),\n type: 'group',\n rect,\n visible,\n break: breakRules,\n paint,\n children,\n clip: true,\n };\n return group;\n }\n\n const node: BlockNode = {\n id: nextId('block'),\n type: 'block',\n rect,\n visible,\n break: breakRules,\n paint,\n children,\n };\n return node;\n}\n\nfunction buildTextNodes(textNode: Text, parentEl: Element, rootRect: DOMRect): TextRunNode[] {\n const raw = extractTextRuns(textNode);\n if (raw.length === 0) {\n return [];\n }\n const style = getComputedStyle(parentEl);\n const font = readFont(style);\n const color = parseComputedColor(style.color) ?? { r: 0, g: 0, b: 0, a: 1 };\n const letterSpacingPt = style.letterSpacing === 'normal' ? 0 : pxToPt(parseFloat(style.letterSpacing || '0') || 0);\n const align = normalizeAlign(style.textAlign, style.direction);\n const decorationLine = (style as any).textDecorationLine || style.textDecoration || '';\n const decoration = {\n underline: decorationLine.includes('underline'),\n lineThrough: decorationLine.includes('line-through'),\n };\n\n return raw.map((run) => {\n const rect = relativeRect(run.rect, rootRect);\n return {\n id: nextId('text'),\n type: 'text',\n rect,\n visible: style.visibility !== 'hidden',\n break: { breakInside: 'avoid', breakBefore: 'auto', breakAfter: 'auto' },\n text: run.text,\n font,\n color,\n letterSpacingPt,\n align,\n decoration,\n baselineOffsetPt: rect.height * 0.8,\n } as TextRunNode;\n });\n}\n\nfunction readFont(style: CSSStyleDeclaration): ResolvedFont {\n const weight = parseInt(style.fontWeight || '400', 10) || (style.fontWeight === 'bold' ? 700 : 400);\n const fontStyle = style.fontStyle === 'italic' || style.fontStyle === 'oblique' ? 'italic' : 'normal';\n return {\n family: (style.fontFamily || 'sans-serif').split(',')[0].trim().replace(/^[\"']|[\"']$/g, ''),\n weight,\n style: fontStyle,\n sizePt: pxToPt(parseFloat(style.fontSize || '16')),\n };\n}\n\nfunction normalizeAlign(textAlign: string, direction: string): 'left' | 'right' | 'center' | 'justify' {\n const isRtl = direction === 'rtl';\n switch (textAlign) {\n case 'center':\n return 'center';\n case 'right':\n return 'right';\n case 'left':\n return 'left';\n case 'justify':\n return 'justify';\n case 'start':\n return isRtl ? 'right' : 'left';\n case 'end':\n return isRtl ? 'left' : 'right';\n default:\n return 'left';\n }\n}\n\nfunction buildImageNode(\n img: HTMLImageElement,\n rect: Rect,\n visible: boolean,\n breakRules: NodeBreakRules,\n assetTasks: AssetTask[],\n): ImageNode {\n const style = getComputedStyle(img);\n const node: ImageNode = {\n id: nextId('img'),\n type: 'image',\n rect,\n visible,\n break: breakRules,\n source: { kind: 'url', value: '' },\n fit: (style.objectFit as ImageNode['fit']) || 'fill',\n naturalWidth: img.naturalWidth || img.width,\n naturalHeight: img.naturalHeight || img.height,\n isFallbackRaster: false,\n };\n assetTasks.push({ kind: 'img', node, element: img });\n return node;\n}\n\nfunction buildCanvasNode(\n canvas: HTMLCanvasElement,\n rect: Rect,\n visible: boolean,\n breakRules: NodeBreakRules,\n assetTasks: AssetTask[],\n): ImageNode {\n const node: ImageNode = {\n id: nextId('canvas'),\n type: 'image',\n rect,\n visible,\n break: breakRules,\n source: { kind: 'canvas', value: '' },\n fit: 'fill',\n naturalWidth: canvas.width,\n naturalHeight: canvas.height,\n isFallbackRaster: false,\n };\n assetTasks.push({ kind: 'canvas', node, element: canvas });\n return node;\n}\n\nfunction buildSvgNode(\n svg: SVGSVGElement,\n rect: Rect,\n visible: boolean,\n breakRules: NodeBreakRules,\n assetTasks: AssetTask[],\n warnings: PdfExportWarning[],\n): SvgNode | ImageNode {\n try {\n const commands = parseSvg(svg, rect.width, rect.height);\n if (commands) {\n return {\n id: nextId('svg'),\n type: 'svg',\n rect,\n visible,\n break: breakRules,\n commands,\n viewBox: rect,\n };\n }\n } catch {\n // fall through to rasterization\n }\n warnings.push({ message: 'This <svg> uses gradients/filters/text/use and is not supported; rasterized.', elementDescription: describeElement(svg as unknown as HTMLElement) });\n return buildFallbackImageNode(svg as unknown as HTMLElement, rect, visible, breakRules, 'unsupported SVG features', assetTasks, svg.getBoundingClientRect());\n}\n\nfunction buildFallbackImageNode(\n el: HTMLElement,\n rect: Rect,\n visible: boolean,\n breakRules: NodeBreakRules,\n reason: string,\n assetTasks: AssetTask[],\n elRect: DOMRect,\n): ImageNode {\n const node: ImageNode = {\n id: nextId('fallback'),\n type: 'image',\n rect,\n visible,\n break: breakRules,\n fallback: { reason },\n source: { kind: 'data-url', value: '' },\n fit: 'fill',\n naturalWidth: rect.width,\n naturalHeight: rect.height,\n isFallbackRaster: true,\n };\n // Captured at the element's true on-screen size (not `rect`, which may\n // later be shrunk by fit-to-width scaling) so the clone -- which still\n // carries its original, unscaled inline styles -- isn't clipped inside\n // its own raster. See docs/architecture.md \"Hybrid rendering\".\n assetTasks.push({ kind: 'fallback', node, element: el, captureWidthPx: elRect.width, captureHeightPx: elRect.height });\n return node;\n}\n\nfunction buildTableNode(\n table: HTMLTableElement,\n rootRect: DOMRect,\n rect: Rect,\n visible: boolean,\n breakRules: NodeBreakRules,\n options: InspectOptions,\n assetTasks: AssetTask[],\n warnings: PdfExportWarning[],\n): TableNode {\n const rowEls = Array.from(table.querySelectorAll('tr'));\n const headerRowEls = new Set(Array.from(table.querySelectorAll('thead tr')));\n\n const rows: TableRowNode[] = rowEls.map((tr) => {\n const trRect = relativeRect(tr.getBoundingClientRect(), rootRect);\n const cellEls = Array.from(tr.children).filter((c) => c.tagName === 'TD' || c.tagName === 'TH');\n const cells: TableCellNode[] = cellEls.map((cellEl) => {\n const cellRect = relativeRect(cellEl.getBoundingClientRect(), rootRect);\n const cellStyle = getComputedStyle(cellEl);\n const paint = readBoxPaint(cellStyle);\n const content = walkChildren(cellEl, rootRect, options, assetTasks, warnings);\n return {\n id: nextId('cell'),\n rect: cellRect,\n isHeader: cellEl.tagName === 'TH',\n paint,\n content,\n };\n });\n return {\n id: nextId('row'),\n rect: trRect,\n isHeader: headerRowEls.has(tr),\n cells,\n };\n });\n\n const firstBodyRow = rows.find((r) => !r.isHeader) ?? rows[0];\n const columns = (firstBodyRow?.cells ?? []).map((c) => ({ x: c.rect.x, width: c.rect.width }));\n\n return {\n id: nextId('table'),\n type: 'table',\n rect,\n visible,\n break: breakRules,\n columns,\n rows,\n headerRowCount: rows.filter((r) => r.isHeader).length,\n repeatHeader: true,\n };\n}\n\nfunction describeElement(el: HTMLElement): string {\n const id = el.id ? `#${el.id}` : '';\n const cls = el.className && typeof el.className === 'string' ? `.${el.className.trim().split(/\\s+/).join('.')}` : '';\n return `<${el.tagName.toLowerCase()}${id}${cls}>`;\n}\n","/**\n * Rasterizes a single DOM element in isolation, for content this library\n * cannot translate into native PDF operators (see docs/css-support.md).\n * This is deliberately scoped to one element at a time -- never the whole\n * captured page -- via the SVG <foreignObject> technique: clone the\n * element, inline every computed style onto the clone (foreignObject\n * content does not inherit the host document's stylesheets), serialize to\n * an SVG data URL, and draw it into an offscreen canvas.\n */\nexport interface RasterizeResult {\n dataUrl: string;\n /** Total captured size in px, including `padPx` on every side. */\n width: number;\n height: number;\n}\n\n/**\n * `padPx` reserves extra canvas space around the element's own border box\n * for effects that visually bleed outside it (box-shadow, outline) --\n * without this, capturing exactly the element's own rect would clip a\n * shadow's blur/spread at the box edge. Callers should grow the node's\n * placement rect by the same amount on every side and shift it up/left by\n * `padPx` so the padded raster lands in the right place. See\n * docs/css-support.md.\n */\nexport async function rasterizeElement(el: HTMLElement, widthPx: number, heightPx: number, scale: number, padPx = 0): Promise<RasterizeResult> {\n if (widthPx <= 0 || heightPx <= 0) {\n throw new Error('ngx-pdf-export: cannot rasterize an element with zero width/height.');\n }\n\n const totalWidthPx = widthPx + padPx * 2;\n const totalHeightPx = heightPx + padPx * 2;\n\n const clone = el.cloneNode(true) as HTMLElement;\n inlineComputedStylesRecursive(el, clone);\n copyCanvasBitmaps(el, clone);\n resolveImageSources(clone);\n clone.style.margin = '0';\n clone.style.transform = 'none';\n clone.style.position = 'static';\n\n const svgNS = 'http://www.w3.org/2000/svg';\n const xhtmlNS = 'http://www.w3.org/1999/xhtml';\n\n const svg = document.createElementNS(svgNS, 'svg');\n svg.setAttribute('xmlns', svgNS);\n svg.setAttribute('width', String(totalWidthPx));\n svg.setAttribute('height', String(totalHeightPx));\n svg.setAttribute('viewBox', `0 0 ${totalWidthPx} ${totalHeightPx}`);\n\n const foreignObject = document.createElementNS(svgNS, 'foreignObject');\n foreignObject.setAttribute('width', '100%');\n foreignObject.setAttribute('height', '100%');\n\n const wrapper = document.createElementNS(xhtmlNS, 'div') as unknown as HTMLDivElement;\n wrapper.setAttribute('xmlns', xhtmlNS);\n wrapper.style.width = `${widthPx}px`;\n wrapper.style.height = `${heightPx}px`;\n wrapper.style.padding = `${padPx}px`;\n wrapper.style.boxSizing = 'content-box';\n wrapper.appendChild(clone);\n foreignObject.appendChild(wrapper);\n svg.appendChild(foreignObject);\n\n const svgString = new XMLSerializer().serializeToString(svg);\n const svgDataUrl = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svgString);\n\n const img = await loadImage(svgDataUrl);\n const canvas = document.createElement('canvas');\n canvas.width = Math.ceil(totalWidthPx * scale);\n canvas.height = Math.ceil(totalHeightPx * scale);\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('ngx-pdf-export: 2D canvas context unavailable.');\n }\n ctx.scale(scale, scale);\n ctx.drawImage(img, 0, 0, totalWidthPx, totalHeightPx);\n const dataUrl = canvas.toDataURL('image/png');\n canvas.width = 0;\n canvas.height = 0;\n return { dataUrl, width: totalWidthPx, height: totalHeightPx };\n}\n\nfunction inlineComputedStylesRecursive(source: Element, target: Element): void {\n const computed = getComputedStyle(source);\n const styleText: string[] = [];\n for (let i = 0; i < computed.length; i++) {\n const prop = computed.item(i);\n styleText.push(`${prop}:${computed.getPropertyValue(prop)}`);\n }\n (target as HTMLElement).setAttribute('style', styleText.join(';'));\n\n const sourceChildren = Array.from(source.children);\n const targetChildren = Array.from(target.children);\n for (let i = 0; i < sourceChildren.length; i++) {\n if (targetChildren[i]) {\n inlineComputedStylesRecursive(sourceChildren[i], targetChildren[i]);\n }\n }\n}\n\nfunction copyCanvasBitmaps(source: Element, target: Element): void {\n const sourceCanvases = Array.from(source.querySelectorAll('canvas'));\n const targetCanvases = Array.from(target.querySelectorAll('canvas'));\n for (let i = 0; i < sourceCanvases.length; i++) {\n const src = sourceCanvases[i];\n const dst = targetCanvases[i];\n if (!dst) continue;\n dst.width = src.width;\n dst.height = src.height;\n const ctx = dst.getContext('2d');\n try {\n ctx?.drawImage(src, 0, 0);\n } catch {\n // Cross-origin-tainted canvas: leave blank rather than throw.\n }\n }\n}\n\nfunction resolveImageSources(target: Element): void {\n target.querySelectorAll('img').forEach((img) => {\n const resolved = img.src; // IDL property is already absolute-resolved.\n img.setAttribute('src', resolved);\n });\n}\n\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => resolve(img);\n img.onerror = () => reject(new Error('ngx-pdf-export: failed to rasterize fallback element.'));\n img.src = src;\n });\n}\n","import { AssetTask } from './inspect';\nimport { rasterizeElement } from '../fallback/rasterize';\nimport { pxToPt } from '../model/units';\n\n/** Extra capture margin (CSS px) around a rasterized fallback element, for box-shadow/outline bleed. See docs/css-support.md. */\nconst FALLBACK_CAPTURE_PAD_PX = 24;\n\nexport interface AssetWarning {\n message: string;\n elementDescription: string;\n}\n\n/**\n * Resolves every deferred asset (images, canvases, fallback rasterizations)\n * to a data URL, mutating each task's node in place. Runs after layout so\n * we only pay encode/fetch cost for assets that actually made it into the\n * export. See docs/architecture.md \"Performance\" and docs/layout-engine.md\n * §5.\n */\nexport async function resolveAssets(tasks: AssetTask[], scale: number, onWarning: (w: AssetWarning) => void): Promise<void> {\n await Promise.all(\n tasks.map(async (task) => {\n try {\n if (task.kind === 'img') {\n task.node.source = { kind: 'data-url', value: await imageToDataUrl(task.element) };\n } else if (task.kind === 'canvas') {\n task.node.source = { kind: 'data-url', value: task.element.toDataURL('image/png') };\n } else {\n const result = await rasterizeElement(task.element, task.captureWidthPx, task.captureHeightPx, scale, FALLBACK_CAPTURE_PAD_PX);\n task.node.source = { kind: 'data-url', value: result.dataUrl };\n const padPt = pxToPt(FALLBACK_CAPTURE_PAD_PX);\n task.node.rect = {\n x: task.node.rect.x - padPt,\n y: task.node.rect.y - padPt,\n width: task.node.rect.width + padPt * 2,\n height: task.node.rect.height + padPt * 2,\n };\n task.node.naturalWidth = result.width;\n task.node.naturalHeight = result.height;\n }\n } catch (err) {\n task.node.visible = false;\n onWarning({\n message: task.kind === 'img' ? `Image could not be embedded (${(err as Error).message}). This is often a CORS restriction -- the image's server must send Access-Control-Allow-Origin, and the <img> needs crossorigin=\"anonymous\".` : `Failed to render element: ${(err as Error).message}`,\n elementDescription: describeElement(task.element),\n });\n }\n }),\n );\n}\n\nasync function imageToDataUrl(img: HTMLImageElement): Promise<string> {\n const src = img.currentSrc || img.src;\n if (src.startsWith('data:')) {\n return src;\n }\n const response = await fetch(src, { mode: 'cors' });\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n const blob = await response.blob();\n return await blobToDataUrl(blob);\n}\n\nfunction blobToDataUrl(blob: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject(new Error('failed to read image blob'));\n reader.readAsDataURL(blob);\n });\n}\n\nfunction describeElement(el: HTMLElement): string {\n const id = el.id ? `#${el.id}` : '';\n return `<${el.tagName.toLowerCase()}${id}>`;\n}\n","import { DocumentNode, LayoutNode, Rect, SvgDrawCommand, TableCellNode, TableRowNode } from '../model/nodes';\nimport { scalePathData } from '../dom/svg-path';\n\n/**\n * Uniformly shrinks the whole captured flow (never enlarges) so its width\n * fits the page's content width, the same \"shrink to fit\" behavior a\n * browser's own print dialog applies to an over-wide page. Without this,\n * any dashboard wider than the chosen page format (a very common case --\n * most web layouts are wider than A4) would simply be clipped at the page\n * edge. Every geometric quantity in the tree (rects, font sizes, border\n * widths/radii, SVG coordinates) is scaled together so nothing distorts.\n */\nexport function fitDocumentToWidth(doc: DocumentNode, contentWidthPt: number): number {\n if (doc.flowWidthPt <= contentWidthPt || doc.flowWidthPt <= 0) {\n return 1;\n }\n const scale = contentWidthPt / doc.flowWidthPt;\n doc.flowWidthPt *= scale;\n doc.flowHeightPt *= scale;\n doc.children.forEach((child) => scaleNode(child, scale));\n return scale;\n}\n\nfunction scaleRect(rect: Rect, scale: number): Rect {\n return { x: rect.x * scale, y: rect.y * scale, width: rect.width * scale, height: rect.height * scale };\n}\n\nfunction scaleNode(node: LayoutNode, scale: number): void {\n node.rect = scaleRect(node.rect, scale);\n\n switch (node.type) {\n case 'text':\n node.font = { ...node.font, sizePt: node.font.sizePt * scale };\n node.letterSpacingPt *= scale;\n node.baselineOffsetPt *= scale;\n return;\n case 'image':\n node.naturalWidth *= scale;\n node.naturalHeight *= scale;\n return;\n case 'svg':\n node.commands = node.commands.map((cmd) => scaleSvgCommand(cmd, scale));\n node.viewBox = scaleRect(node.viewBox, scale);\n return;\n case 'block':\n case 'group':\n scalePaintBorders(node, scale);\n node.children.forEach((child) => scaleNode(child, scale));\n return;\n case 'table':\n node.columns = node.columns.map((c) => ({ x: c.x * scale, width: c.width * scale }));\n node.rows = node.rows.map((row) => scaleTableRow(row, scale));\n return;\n }\n}\n\nfunction scaleTableRow(row: TableRowNode, scale: number): TableRowNode {\n return {\n ...row,\n rect: scaleRect(row.rect, scale),\n cells: row.cells.map((cell) => scaleTableCell(cell, scale)),\n };\n}\n\nfunction scaleTableCell(cell: TableCellNode, scale: number): TableCellNode {\n scalePaintBorders(cell as unknown as { paint: TableCellNode['paint'] }, scale);\n return {\n ...cell,\n rect: scaleRect(cell.rect, scale),\n content: cell.content.map((child) => {\n scaleNode(child, scale);\n return child;\n }),\n };\n}\n\nfunction scalePaintBorders(node: { paint: { borders?: any; borderRadius?: any } }, scale: number): void {\n const paint = node.paint;\n if (paint.borders) {\n for (const edge of Object.values(paint.borders) as any[]) {\n edge.widthPt *= scale;\n }\n }\n if (paint.borderRadius) {\n for (const key of Object.keys(paint.borderRadius)) {\n paint.borderRadius[key] *= scale;\n }\n }\n}\n\nfunction scaleSvgCommand(cmd: SvgDrawCommand, scale: number): SvgDrawCommand {\n const paint = { ...cmd.paint, strokeWidthPt: cmd.paint.strokeWidthPt * scale };\n switch (cmd.op) {\n case 'rect':\n return { ...cmd, x: cmd.x * scale, y: cmd.y * scale, width: cmd.width * scale, height: cmd.height * scale, rx: cmd.rx * scale, ry: cmd.ry * scale, paint };\n case 'ellipse':\n return { ...cmd, cx: cmd.cx * scale, cy: cmd.cy * scale, rx: cmd.rx * scale, ry: cmd.ry * scale, paint };\n case 'line':\n return { ...cmd, x1: cmd.x1 * scale, y1: cmd.y1 * scale, x2: cmd.x2 * scale, y2: cmd.y2 * scale, paint };\n case 'path':\n return { ...cmd, d: scalePathData(cmd.d, scale, scale), paint, originOffsetXPt: cmd.originOffsetXPt * scale, originOffsetYPt: cmd.originOffsetYPt * scale };\n }\n}\n","import { BlockNode, DocumentNode, GroupNode, ImageNode, LayoutNode, Rect, SvgNode, TableNode, TableRowNode, TextRunNode } from '../model/nodes';\n\n/**\n * See docs/pagination.md. Implementation strategy: walk the tree in visual\n * (document) order while maintaining one monotonically-increasing scalar\n * `shift` -- the total extra vertical space injected so far by page\n * breaks. Every node's page-slotted position is `node.rect.y + shift`;\n * pushing a node to a later page is just increasing `shift` by however\n * much is needed to move it past the current page boundary. Because the\n * shift is global and applied to everything from that point in document\n * order onward, later siblings/containers automatically account for it --\n * there is no separate \"cursor\" data structure to keep in sync.\n */\nexport interface PageContentBox {\n contentHeightPt: number;\n}\n\nexport type PagePrimitive =\n | { kind: 'block'; rect: Rect; node: BlockNode | GroupNode; clip?: Rect }\n | { kind: 'text'; rect: Rect; node: TextRunNode; clip?: Rect }\n | { kind: 'image'; rect: Rect; node: ImageNode; clip?: Rect }\n | { kind: 'svg'; rect: Rect; node: SvgNode; clip?: Rect };\n\nexport interface Page {\n primitives: PagePrimitive[];\n}\n\nexport interface PaginatedDocument {\n pages: Page[];\n}\n\ninterface State {\n shift: number;\n hasPlaced: boolean;\n lastPageTouched: number;\n}\n\nconst EPS = 0.01;\n\nexport function paginate(doc: DocumentNode, contentBox: PageContentBox): PaginatedDocument {\n const CH = contentBox.contentHeightPt;\n const pages: Page[] = [];\n const state: State = { shift: 0, hasPlaced: false, lastPageTouched: -1 };\n\n const ensurePage = (idx: number): Page => {\n while (pages.length <= idx) pages.push({ primitives: [] });\n return pages[idx];\n };\n\n const clipForPage = (clip: Rect | undefined, page: number): Rect | undefined => (clip ? { ...clip, y: clip.y - page * CH } : undefined);\n\n /** Places an atomic node (never split): moves it whole to the next page if it straddles a boundary or has a forced break-before. */\n function pushAtomic(rect: Rect, breakBefore: 'auto' | 'page'): { page: number; localY: number } {\n let adjustedY = rect.y + state.shift;\n let page = Math.floor(adjustedY / CH);\n\n if (breakBefore === 'page' && state.hasPlaced && page === state.lastPageTouched) {\n state.shift += (state.lastPageTouched + 1) * CH - adjustedY;\n adjustedY = rect.y + state.shift;\n page = Math.floor(adjustedY / CH);\n }\n\n const endPage = Math.floor((adjustedY + rect.height - EPS) / CH);\n if (endPage !== page) {\n state.shift += (page + 1) * CH - adjustedY;\n adjustedY = rect.y + state.shift;\n page = Math.floor(adjustedY / CH);\n }\n\n state.hasPlaced = true;\n state.lastPageTouched = page;\n ensurePage(page);\n return { page, localY: adjustedY - page * CH };\n }\n\n function forceBreakAfter(bottomAdjusted: number): void {\n const bottomPage = Math.floor((bottomAdjusted - EPS) / CH);\n state.shift += (bottomPage + 1) * CH - bottomAdjusted;\n state.lastPageTouched = bottomPage + 1;\n }\n\n function placeContainerBackground(node: BlockNode | GroupNode, adjustedTop: number, adjustedBottom: number, clip: Rect | undefined): void {\n const hasPaint = !!(node.paint.backgroundColor || node.paint.borders || node.paint.backgroundImage);\n if (!hasPaint) return;\n const firstPage = Math.max(0, Math.floor(adjustedTop / CH));\n const lastPage = Math.floor((adjustedBottom - EPS) / CH);\n for (let p = firstPage; p <= lastPage; p++) {\n const pageTop = p * CH;\n const pageBottom = pageTop + CH;\n const vTop = Math.max(adjustedTop, pageTop);\n const vBottom = Math.min(adjustedBottom, pageBottom);\n if (vBottom <= vTop) continue;\n const rect: Rect = { x: node.rect.x, y: vTop - pageTop, width: node.rect.width, height: vBottom - vTop };\n ensurePage(p).primitives.push({ kind: 'block', rect, node, clip: clipForPage(clip, p) });\n }\n }\n\n function placeMedia(node: ImageNode | SvgNode, clip: Rect | undefined): void {\n if (node.rect.height <= CH) {\n const { page, localY } = pushAtomic(node.rect, node.break.breakBefore);\n ensurePage(page).primitives.push({ kind: node.type, rect: { ...node.rect, y: localY }, node, clip: clipForPage(clip, page) } as PagePrimitive);\n if (node.break.breakAfter === 'page') forceBreakAfter(page * CH + localY + node.rect.height);\n return;\n }\n // Oversized media: clip a slice onto every page it intersects (docs/pagination.md step 3).\n const adjustedTop = node.rect.y + state.shift;\n const adjustedBottom = adjustedTop + node.rect.height;\n state.hasPlaced = true;\n const firstPage = Math.max(0, Math.floor(adjustedTop / CH));\n const lastPage = Math.floor((adjustedBottom - EPS) / CH);\n for (let p = firstPage; p <= lastPage; p++) {\n const pageTop = p * CH;\n const pageBottom = pageTop + CH;\n const vTop = Math.max(adjustedTop, pageTop);\n const vBottom = Math.min(adjustedBottom, pageBottom);\n if (vBottom <= vTop) continue;\n const rect: Rect = { x: node.rect.x, y: vTop - pageTop, width: node.rect.width, height: vBottom - vTop };\n ensurePage(p).primitives.push({ kind: node.type, rect, node, clip: clipForPage(clip, p) } as PagePrimitive);\n }\n state.lastPageTouched = lastPage;\n }\n\n function placeNode(node: LayoutNode, clip: Rect | undefined): void {\n if (!node.visible) return;\n\n if (node.type === 'text') {\n const { page, localY } = pushAtomic(node.rect, node.break.breakBefore);\n ensurePage(page).primitives.push({ kind: 'text', rect: { ...node.rect, y: localY }, node, clip: clipForPage(clip, page) });\n if (node.break.breakAfter === 'page') forceBreakAfter(page * CH + localY + node.rect.height);\n return;\n }\n\n if (node.type === 'image' || node.type === 'svg') {\n placeMedia(node, clip);\n return;\n }\n\n if (node.type === 'table') {\n placeTable(node, clip);\n return;\n }\n\n // block | group\n const keepTogether = node.break.breakInside === 'avoid';\n const fitsOnePage = node.rect.height <= CH;\n\n if (keepTogether && fitsOnePage) {\n const { page, localY } = pushAtomic(node.rect, node.break.breakBefore);\n const adjustedTop = page * CH + localY;\n const adjustedBottom = adjustedTop + node.rect.height;\n placeContainerBackground(node, adjustedTop, adjustedBottom, clip);\n const childClip = node.type === 'group' && node.clip ? { x: node.rect.x, y: adjustedTop, width: node.rect.width, height: node.rect.height } : clip;\n for (const child of node.children) placeNode(child, childClip);\n if (node.break.breakAfter === 'page') forceBreakAfter(adjustedBottom);\n return;\n }\n\n // A keepTogether node taller than a full page can't actually be kept together;\n // it falls through to normal per-child splitting below.\n if (node.break.breakBefore === 'page') {\n const adjustedY = node.rect.y + state.shift;\n const page = Math.floor(adjustedY / CH);\n if (state.hasPlaced && page === state.lastPageTouched) {\n state.shift += (state.lastPageTouched + 1) * CH - adjustedY;\n }\n }\n\n // Paint the container's own background/border *before* its children, so\n // children are always drawn on top -- matching how every browser paints\n // a box (background, then content) and avoiding the container's fill\n // covering its own text/icons. This means the background is sized from\n // the container's own rect up front, rather than being able to expand\n // to cover a gap a child's own internal page-break might later inject;\n // that was a deliberate trade-off (see docs/pagination.md) once this\n // ordering bug was found: correct z-order for the overwhelmingly common\n // case (any card/pill with both a background and content) matters far\n // more than background continuity across an already-rare nested break.\n const shiftAtStart = state.shift;\n const adjustedTop = node.rect.y + shiftAtStart;\n const adjustedBottomEstimate = node.rect.y + node.rect.height + shiftAtStart;\n placeContainerBackground(node, adjustedTop, adjustedBottomEstimate, clip);\n const childClip = node.type === 'group' && node.clip ? { x: node.rect.x, y: adjustedTop, width: node.rect.width, height: node.rect.height } : clip;\n for (const child of node.children) placeNode(child, childClip);\n const shiftAtEnd = state.shift;\n const adjustedBottom = node.rect.y + node.rect.height + shiftAtEnd;\n state.hasPlaced = true;\n\n if (node.break.breakAfter === 'page') {\n forceBreakAfter(adjustedBottom);\n } else {\n state.lastPageTouched = Math.max(state.lastPageTouched, Math.floor((adjustedBottom - EPS) / CH));\n }\n }\n\n function emitFixed(node: LayoutNode, page: number, dy: number, clip: Rect | undefined): void {\n const rect = { ...node.rect, y: node.rect.y + dy };\n if (node.type === 'text' || node.type === 'image' || node.type === 'svg') {\n ensurePage(page).primitives.push({ kind: node.type, rect, node, clip: clipForPage(clip, page) } as PagePrimitive);\n } else if (node.type === 'block' || node.type === 'group') {\n if (node.paint.backgroundColor || node.paint.borders || node.paint.backgroundImage) {\n ensurePage(page).primitives.push({ kind: 'block', rect, node, clip: clipForPage(clip, page) });\n }\n for (const child of node.children) emitFixed(child, page, dy, clip);\n }\n }\n\n function placeRowVisual(row: TableRowNode, page: number, localY: number, clip: Rect | undefined): void {\n ensurePage(page);\n const dy = localY - row.rect.y;\n for (const cell of row.cells) {\n if (cell.paint.backgroundColor || cell.paint.borders) {\n const rect: Rect = { x: cell.rect.x, y: localY, width: cell.rect.width, height: row.rect.height };\n const fakeCellBlock: BlockNode = { id: cell.id, type: 'block', rect, visible: true, break: { breakInside: 'avoid', breakBefore: 'auto', breakAfter: 'auto' }, paint: cell.paint, children: [] };\n ensurePage(page).primitives.push({ kind: 'block', rect, node: fakeCellBlock, clip: clipForPage(clip, page) });\n }\n for (const child of cell.content) emitFixed(child, page, dy, clip);\n }\n }\n\n function placeTable(table: TableNode, clip: Rect | undefined): void {\n const headerRows = table.rows.filter((r) => r.isHeader);\n const bodyRows = table.rows.filter((r) => !r.isHeader);\n let previousBodyPage = -1;\n\n for (const hRow of headerRows) {\n const { page, localY } = pushAtomic(hRow.rect, 'auto');\n placeRowVisual(hRow, page, localY, clip);\n previousBodyPage = page;\n }\n\n for (const row of bodyRows) {\n const { page, localY } = pushAtomic(row.rect, 'auto');\n let finalLocalY = localY;\n\n if (table.repeatHeader && headerRows.length > 0 && page !== previousBodyPage) {\n let offset = 0;\n for (const hRow of headerRows) {\n placeRowVisual(hRow, page, offset, clip);\n offset += hRow.rect.height;\n }\n if (localY < offset) {\n state.shift += offset - localY;\n finalLocalY = offset;\n state.lastPageTouched = page;\n }\n }\n\n placeRowVisual(row, page, finalLocalY, clip);\n previousBodyPage = page;\n }\n }\n\n for (const child of doc.children) placeNode(child, undefined);\n return { pages };\n}\n\n/**\n * Flattens a small, self-contained node list (header/footer content) into\n * primitives with no page-break logic -- used for content that is assumed\n * to fit within its own reserved header/footer box. See docs/pagination.md\n * \"Headers / footers\".\n */\nexport function flattenLayoutNodes(nodes: LayoutNode[]): PagePrimitive[] {\n const out: PagePrimitive[] = [];\n const visit = (node: LayoutNode): void => {\n if (!node.visible) return;\n if (node.type === 'text' || node.type === 'image' || node.type === 'svg') {\n out.push({ kind: node.type, rect: node.rect, node } as PagePrimitive);\n } else if (node.type === 'table') {\n for (const row of node.rows) {\n for (const cell of row.cells) {\n cell.content.forEach(visit);\n }\n }\n } else {\n if (node.paint.backgroundColor || node.paint.borders || node.paint.backgroundImage) {\n out.push({ kind: 'block', rect: node.rect, node });\n }\n for (const child of node.children) visit(child);\n }\n };\n for (const node of nodes) visit(node);\n return out;\n}\n","import { MarginSpec, PageFormat } from '../types';\nimport { mmToPt, pxToPt, STANDARD_PAGE_SIZES_PT } from '../model/units';\n\nexport interface ResolvedPageGeometry {\n widthPt: number;\n heightPt: number;\n margin: MarginSpec; // pt\n contentWidthPt: number;\n contentHeightPt: number;\n}\n\nexport function resolvePageGeometry(\n format: PageFormat | undefined,\n orientation: 'portrait' | 'landscape' | undefined,\n margin: number | Partial<MarginSpec> | undefined,\n extraTopPt: number,\n extraBottomPt: number,\n): ResolvedPageGeometry {\n let widthPt: number;\n let heightPt: number;\n\n if (!format || format === 'A4') {\n ({ widthPt, heightPt } = STANDARD_PAGE_SIZES_PT['A4']);\n } else if (typeof format === 'string') {\n const preset = STANDARD_PAGE_SIZES_PT[format];\n if (!preset) throw new Error(`ngx-pdf-export: unknown page format \"${format}\".`);\n ({ widthPt, heightPt } = preset);\n } else {\n const unit = format.unit ?? 'mm';\n const convert = unit === 'pt' ? (n: number) => n : unit === 'px' ? pxToPt : mmToPt;\n widthPt = convert(format.width);\n heightPt = convert(format.height);\n }\n\n if (orientation === 'landscape' && widthPt < heightPt) {\n [widthPt, heightPt] = [heightPt, widthPt];\n } else if (orientation === 'portrait' && widthPt > heightPt) {\n [widthPt, heightPt] = [heightPt, widthPt];\n }\n\n const resolvedMargin = resolveMargin(margin);\n\n const contentWidthPt = widthPt - resolvedMargin.left - resolvedMargin.right;\n const contentHeightPt = heightPt - resolvedMargin.top - resolvedMargin.bottom - extraTopPt - extraBottomPt;\n\n if (contentWidthPt <= 0 || contentHeightPt <= 0) {\n throw new Error('ngx-pdf-export: margins (and header/footer height) leave no room for content on the page.');\n }\n\n return { widthPt, heightPt, margin: resolvedMargin, contentWidthPt, contentHeightPt };\n}\n\nfunction resolveMargin(margin: number | Partial<MarginSpec> | undefined): MarginSpec {\n if (margin === undefined) {\n const mm10 = mmToPt(10);\n return { top: mm10, right: mm10, bottom: mm10, left: mm10 };\n }\n if (typeof margin === 'number') {\n const pt = mmToPt(margin);\n return { top: pt, right: pt, bottom: pt, left: pt };\n }\n const mm10 = mmToPt(10);\n return {\n top: margin.top !== undefined ? mmToPt(margin.top) : mm10,\n right: margin.right !== undefined ? mmToPt(margin.right) : mm10,\n bottom: margin.bottom !== undefined ? mmToPt(margin.bottom) : mm10,\n left: margin.left !== undefined ? mmToPt(margin.left) : mm10,\n };\n}\n","import { PDFDocument, PDFFont, StandardFonts } from 'pdf-lib';\nimport { ResolvedFont } from '../model/nodes';\nimport { FontRegistry } from '../fonts/font-registry';\n\n/**\n * Resolves a text run's CSS-derived font to an embedded PDFFont, preferring\n * a developer-registered custom font (full Unicode support, subset-embedded\n * via fontkit) and falling back to the nearest Standard-14 font (WinAnsi\n * only -- see docs/css-support.md \"Unicode and non-Latin scripts\").\n */\nexport class FontResolver {\n private cache = new Map<string, PDFFont>();\n\n constructor(private pdfDoc: PDFDocument, private registry: FontRegistry) {}\n\n async resolve(font: ResolvedFont): Promise<PDFFont> {\n const key = `${font.family}|${font.weight}|${font.style}`;\n const cached = this.cache.get(key);\n if (cached) return cached;\n\n const custom = this.registry.resolve(font.family, font.weight, font.style);\n let embedded: PDFFont;\n if (custom) {\n embedded = await this.pdfDoc.embedFont(custom.bytes, { subset: true });\n } else {\n embedded = await this.pdfDoc.embedFont(pickStandardFont(font));\n }\n this.cache.set(key, embedded);\n return embedded;\n }\n}\n\nfunction pickStandardFont(font: ResolvedFont): StandardFonts {\n const family = font.family.toLowerCase();\n const bold = font.weight >= 600;\n const italic = font.style === 'italic';\n\n if (/mono|courier|consolas|menlo/.test(family)) {\n if (bold && italic) return StandardFonts.CourierBoldOblique;\n if (bold) return StandardFonts.CourierBold;\n if (italic) return StandardFonts.CourierOblique;\n return StandardFonts.Courier;\n }\n if (/times|serif|georgia|garamond/.test(family)) {\n if (bold && italic) return StandardFonts.TimesRomanBoldItalic;\n if (bold) return StandardFonts.TimesRomanBold;\n if (italic) return StandardFonts.TimesRomanItalic;\n return StandardFonts.TimesRoman;\n }\n if (bold && italic) return StandardFonts.HelveticaBoldOblique;\n if (bold) return StandardFonts.HelveticaBold;\n if (italic) return StandardFonts.HelveticaOblique;\n return StandardFonts.Helvetica;\n}\n","/**\n * Computes the PDF-space anchor point pdf-lib's drawSvgPath should be\n * placed at for a path command carrying a viewBox-origin offset.\n *\n * Derivation: `dom/svg-parser.ts` scales a path's coordinates by (sx, sy)\n * but deliberately leaves the viewBox's own origin (vbX, vbY) unsubtracted\n * in the path data itself (see the comment there for why -- rewriting\n * relative-command deltas would be wrong). The still-needed shift of\n * (-vbX*sx, -vbY*sy) is applied here instead, as a rigid translation of\n * the whole already-scaled path, via drawSvgPath's own (x, y) anchor:\n *\n * PDF_x(point) = anchorX + localX (x: no flip)\n * PDF_y(point) = anchorY - localY (y: pdf-lib flips paths to\n * match top-left SVG authoring\n * -- see docs/architecture.md)\n *\n * We want PDF_x = originX + (localX - offsetXPt) and\n * PDF_y = originTopY - (localY - offsetYPt),\n * which, matching coefficients of localX/localY, gives:\n *\n * anchorX = originX - offsetXPt\n * anchorY = originTopY + offsetYPt\n */\nexport function svgPathAnchor(originX: number, originTopY: number, offsetXPt: number, offsetYPt: number): { x: number; y: number } {\n return { x: originX - offsetXPt, y: originTopY + offsetYPt };\n}\n","import { PDFDocument, PDFFont, PDFImage, PDFPage, rgb, clip, closePath, endPath, lineTo, moveTo, popGraphicsState, pushGraphicsState } from 'pdf-lib';\nimport fontkit from '@pdf-lib/fontkit';\nimport { BlockNode, BorderEdge, GroupNode, ImageNode, Rect, RgbaColor, SvgDrawCommand, SvgNode, TextRunNode } from '../model/nodes';\nimport { Page, PagePrimitive } from '../pagination/paginate';\nimport { FontRegistry } from '../fonts/font-registry';\nimport { FontResolver } from './fonts';\nimport { PdfExportWarning } from '../dom/inspect';\nimport { svgPathAnchor } from './svg-path-anchor';\n\nexport interface RenderGeometry {\n widthPt: number;\n heightPt: number;\n marginTopPt: number;\n marginLeftPt: number;\n}\n\nexport interface RenderOptions {\n geometry: RenderGeometry;\n debug: boolean;\n onWarning: (w: PdfExportWarning) => void;\n}\n\nexport interface HeaderFooterConfig {\n headerPrimitivesPerPage?: PagePrimitive[][];\n footerPrimitivesPerPage?: PagePrimitive[][];\n headerGeometry?: RenderGeometry;\n footerGeometry?: RenderGeometry;\n}\n\nexport async function renderPdf(pages: Page[], fontRegistry: FontRegistry, options: RenderOptions, headerFooter?: HeaderFooterConfig): Promise<Uint8Array> {\n const pdfDoc = await PDFDocument.create();\n pdfDoc.registerFontkit(fontkit);\n const fontResolver = new FontResolver(pdfDoc, fontRegistry);\n const imageCache = new Map<string, PDFImage>();\n const warnedGlyphs = new Set<string>();\n\n for (let i = 0; i < pages.length; i++) {\n const page = pages[i];\n const pdfPage = pdfDoc.addPage([options.geometry.widthPt, options.geometry.heightPt]);\n for (const primitive of page.primitives) {\n await drawPrimitive(pdfDoc, pdfPage, primitive, options, fontResolver, imageCache, warnedGlyphs);\n }\n const headerPrimitives = headerFooter?.headerPrimitivesPerPage?.[i];\n if (headerPrimitives?.length && headerFooter?.headerGeometry) {\n const headerOptions: RenderOptions = { ...options, geometry: headerFooter.headerGeometry };\n for (const primitive of headerPrimitives) {\n await drawPrimitive(pdfDoc, pdfPage, primitive, headerOptions, fontResolver, imageCache, warnedGlyphs);\n }\n }\n const footerPrimitives = headerFooter?.footerPrimitivesPerPage?.[i];\n if (footerPrimitives?.length && headerFooter?.footerGeometry) {\n const footerOptions: RenderOptions = { ...options, geometry: headerFooter.footerGeometry };\n for (const primitive of footerPrimitives) {\n await drawPrimitive(pdfDoc, pdfPage, primitive, footerOptions, fontResolver, imageCache, warnedGlyphs);\n }\n }\n if (options.debug) {\n pdfPage.drawRectangle({\n x: 0,\n y: 0,\n width: options.geometry.widthPt,\n height: options.geometry.heightPt,\n borderColor: rgb(1, 0, 0),\n borderWidth: 1,\n borderDashArray: [4, 4],\n });\n }\n }\n\n return pdfDoc.save();\n}\n\nfunction rgbFrom(c: RgbaColor) {\n return rgb(c.r / 255, c.g / 255, c.b / 255);\n}\n\nfunction toPdfSpace(rect: Rect, geometry: RenderGeometry): { x: number; topY: number; bottomY: number; width: number; height: number } {\n const x = geometry.marginLeftPt + rect.x;\n const topY = geometry.marginTopPt + rect.y;\n const bottomYPdf = geometry.heightPt - (topY + rect.height);\n const topYPdf = geometry.heightPt - topY;\n return { x, topY: topYPdf, bottomY: bottomYPdf, width: rect.width, height: rect.height };\n}\n\nasync function drawPrimitive(\n pdfDoc: PDFDocument,\n pdfPage: PDFPage,\n primitive: PagePrimitive,\n options: RenderOptions,\n fontResolver: FontResolver,\n imageCache: Map<string, PDFImage>,\n warnedGlyphs: Set<string>,\n): Promise<void> {\n const clipRect = primitive.clip ? toPdfSpace(primitive.clip, options.geometry) : undefined;\n\n if (clipRect) {\n pushClip(pdfPage, clipRect);\n }\n\n try {\n switch (primitive.kind) {\n case 'block':\n drawBox(pdfPage, primitive.node, primitive.rect, options);\n if (options.debug && primitive.node.fallback) {\n drawDebugOutline(pdfPage, primitive.rect, options.geometry);\n }\n break;\n case 'text':\n await drawText(pdfPage, primitive.node, primitive.rect, options, fontResolver, warnedGlyphs);\n break;\n case 'image':\n await drawImage(pdfDoc, pdfPage, primitive.node, primitive.rect, options, imageCache);\n if (options.debug && primitive.node.isFallbackRaster) {\n drawDebugOutline(pdfPage, primitive.rect, options.geometry);\n }\n break;\n case 'svg':\n drawSvg(pdfPage, primitive.node, primitive.rect, options.geometry);\n break;\n }\n } finally {\n if (clipRect) {\n popClip(pdfPage);\n }\n }\n}\n\nfunction pushClip(page: PDFPage, r: { x: number; bottomY: number; width: number; height: number }): void {\n page.pushOperators(\n pushGraphicsState(),\n moveTo(r.x, r.bottomY),\n lineTo(r.x + r.width, r.bottomY),\n lineTo(r.x + r.width, r.bottomY + r.height),\n lineTo(r.x, r.bottomY + r.height),\n closePath(),\n clip(),\n endPath(),\n );\n}\n\nfunction popClip(page: PDFPage): void {\n page.pushOperators(popGraphicsState());\n}\n\nfunction drawDebugOutline(page: PDFPage, rect: Rect, geometry: RenderGeometry): void {\n const p = toPdfSpace(rect, geometry);\n page.drawRectangle({ x: p.x, y: p.bottomY, width: p.width, height: p.height, borderColor: rgb(1, 0, 0), borderWidth: 1, borderDashArray: [2, 2] });\n}\n\n// ---- box (background/border/border-radius) ----\n\nfunction drawBox(page: PDFPage, node: BlockNode | GroupNode, rect: Rect, options: RenderOptions): void {\n const p = toPdfSpace(rect, options.geometry);\n const paint = node.paint;\n const radius = paint.borderRadius;\n const hasRadius = !!radius && (radius.topLeft || radius.topRight || radius.bottomRight || radius.bottomLeft);\n\n if (hasRadius) {\n const d = roundedRectPath(p.width, p.height, radius!);\n const drawOpts: Parameters<PDFPage['drawSvgPath']>[1] = { x: p.x, y: p.topY };\n if (paint.backgroundColor && paint.backgroundColor.a > 0) {\n drawOpts.color = rgbFrom(paint.backgroundColor);\n drawOpts.opacity = paint.backgroundColor.a * paint.opacity;\n }\n const edge = firstPaintedEdge(paint.borders);\n if (edge) {\n drawOpts.borderColor = rgbFrom(edge.color);\n drawOpts.borderWidth = edge.widthPt;\n drawOpts.borderOpacity = edge.color.a * paint.opacity;\n applyDash(drawOpts, edge);\n }\n if (drawOpts.color || drawOpts.borderColor) {\n page.drawSvgPath(d, drawOpts);\n }\n return;\n }\n\n if (paint.backgroundColor && paint.backgroundColor.a > 0) {\n page.drawRectangle({ x: p.x, y: p.bottomY, width: p.width, height: p.height, color: rgbFrom(paint.backgroundColor), opacity: paint.backgroundColor.a * paint.opacity });\n }\n\n if (paint.borders) {\n drawEdgeLine(page, paint.borders.top, p.x, p.topY, p.x + p.width, p.topY, paint.opacity);\n drawEdgeLine(page, paint.borders.bottom, p.x, p.bottomY, p.x + p.width, p.bottomY, paint.opacity);\n drawEdgeLine(page, paint.borders.left, p.x, p.bottomY, p.x, p.topY, paint.opacity);\n drawEdgeLine(page, paint.borders.right, p.x + p.width, p.bottomY, p.x + p.width, p.topY, paint.opacity);\n }\n}\n\nfunction firstPaintedEdge(borders: BlockNode['paint']['borders']): BorderEdge | undefined {\n if (!borders) return undefined;\n return [borders.top, borders.right, borders.bottom, borders.left].find((e) => e.style !== 'none' && e.widthPt > 0);\n}\n\nfunction applyDash(drawOpts: any, edge: BorderEdge): void {\n if (edge.style === 'dashed') {\n drawOpts.borderDashArray = [edge.widthPt * 2.5, edge.widthPt * 2];\n } else if (edge.style === 'dotted') {\n drawOpts.borderDashArray = [edge.widthPt * 0.6, edge.widthPt * 1.4];\n }\n}\n\nfunction drawEdgeLine(page: PDFPage, edge: BorderEdge, x1: number, y1: number, x2: number, y2: number, groupOpacity: number): void {\n if (edge.style === 'none' || edge.widthPt <= 0) return;\n const dashArray = edge.style === 'dashed' ? [edge.widthPt * 2.5, edge.widthPt * 2] : edge.style === 'dotted' ? [edge.widthPt * 0.6, edge.widthPt * 1.4] : undefined;\n page.drawLine({ start: { x: x1, y: y1 }, end: { x: x2, y: y2 }, thickness: edge.widthPt, color: rgbFrom(edge.color), opacity: edge.color.a * groupOpacity, dashArray });\n}\n\nfunction roundedRectPath(w: number, h: number, r: { topLeft: number; topRight: number; bottomRight: number; bottomLeft: number }): string {\n const tl = Math.min(r.topLeft, w / 2, h / 2);\n const tr = Math.min(r.topRight, w / 2, h / 2);\n const br = Math.min(r.bottomRight, w / 2, h / 2);\n const bl = Math.min(r.bottomLeft, w / 2, h / 2);\n return [\n `M ${tl} 0`,\n `L ${w - tr} 0`,\n `Q ${w} 0 ${w} ${tr}`,\n `L ${w} ${h - br}`,\n `Q ${w} ${h} ${w - br} ${h}`,\n `L ${bl} ${h}`,\n `Q 0 ${h} 0 ${h - bl}`,\n `L 0 ${tl}`,\n `Q 0 0 ${tl} 0`,\n 'Z',\n ].join(' ');\n}\n\n// ---- text ----\n\nasync function drawText(page: PDFPage, node: TextRunNode, rect: Rect, options: RenderOptions, fontResolver: FontResolver, warnedGlyphs: Set<string>): Promise<void> {\n const font = await fontResolver.resolve(node.font);\n const p = toPdfSpace(rect, options.geometry);\n const size = node.font.sizePt;\n const baselineY = options.geometry.heightPt - (options.geometry.marginTopPt + rect.y + node.baselineOffsetPt);\n const color = rgbFrom(node.color);\n const opacity = node.color.a;\n\n const textWidth = measureText(font, node.text, size, node.letterSpacingPt);\n let x = p.x;\n if (node.align === 'center') x = p.x + Math.max(0, (rect.width - textWidth) / 2);\n else if (node.align === 'right') x = p.x + Math.max(0, rect.width - textWidth);\n\n drawGlyphsSafely(page, font, node.text, x, baselineY, size, color, opacity, node.letterSpacingPt, warnedGlyphs, (msg) => options.onWarning({ message: msg, elementDescription: node.text.slice(0, 40) }));\n\n if (node.decoration.underline) {\n page.drawLine({ start: { x, y: baselineY - size * 0.08 }, end: { x: x + textWidth, y: baselineY - size * 0.08 }, thickness: Math.max(0.5, size * 0.05), color, opacity });\n }\n if (node.decoration.lineThrough) {\n page.drawLine({ start: { x, y: baselineY + size * 0.3 }, end: { x: x + textWidth, y: baselineY + size * 0.3 }, thickness: Math.max(0.5, size * 0.05), color, opacity });\n }\n}\n\nfunction measureText(font: PDFFont, text: string, size: number, letterSpacingPt: number): number {\n let w = 0;\n for (const ch of text) w += safeWidth(font, ch, size);\n return w + letterSpacingPt * Math.max(0, [...text].length - 1);\n}\n\nfunction safeWidth(font: PDFFont, ch: string, size: number): number {\n try {\n return font.widthOfTextAtSize(ch, size);\n } catch {\n return size * 0.5;\n }\n}\n\nfunction drawGlyphsSafely(\n page: PDFPage,\n font: PDFFont,\n text: string,\n x0: number,\n y: number,\n size: number,\n color: ReturnType<typeof rgb>,\n opacity: number,\n letterSpacingPt: number,\n warnedGlyphs: Set<string>,\n onWarning: (message: string) => void,\n): void {\n if (letterSpacingPt === 0 && canEncodeAll(font, text)) {\n page.drawText(text, { x: x0, y, size, font, color, opacity });\n return;\n }\n let x = x0;\n for (const ch of text) {\n if (canEncodeAll(font, ch)) {\n page.drawText(ch, { x, y, size, font, color, opacity });\n } else if (!warnedGlyphs.has(ch)) {\n warnedGlyphs.add(ch);\n onWarning(`Character \"${ch}\" has no glyph in the resolved font and was skipped. Register a Unicode-capable font via registerFont() for this text.`);\n }\n x += safeWidth(font, ch, size) + letterSpacingPt;\n }\n}\n\nfunction canEncodeAll(font: PDFFont, text: string): boolean {\n try {\n font.widthOfTextAtSize(text, 10);\n return true;\n } catch {\n return false;\n }\n}\n\n// ---- images ----\n\nasync function drawImage(pdfDoc: PDFDocument, page: PDFPage, node: ImageNode, rect: Rect, options: RenderOptions, cache: Map<string, PDFImage>): Promise<void> {\n if (!node.source.value) return;\n\n let embedded = cache.get(node.source.value);\n if (!embedded) {\n const decoded = decodeDataUrl(node.source.value);\n if (!decoded) return;\n embedded = decoded.isPng ? await pdfDoc.embedPng(decoded.bytes) : await pdfDoc.embedJpg(decoded.bytes);\n cache.set(node.source.value, embedded);\n }\n\n const box = toPdfSpace(rect, options.geometry);\n const natW = node.naturalWidth || embedded.width;\n const natH = node.naturalHeight || embedded.height;\n\n let drawW = box.width;\n let drawH = box.height;\n let drawX = box.x;\n let drawTopY = options.geometry.marginTopPt + rect.y;\n\n if ((node.fit === 'contain' || node.fit === 'cover') && natW > 0 && natH > 0) {\n const scale = node.fit === 'contain' ? Math.min(box.width / natW, box.height / natH) : Math.max(box.width / natW, box.height / natH);\n drawW = natW * scale;\n drawH = natH * scale;\n drawX = box.x + (box.width - drawW) / 2;\n drawTopY = options.geometry.marginTopPt + rect.y + (box.height - drawH) / 2;\n } else if (node.fit === 'none' && natW > 0 && natH > 0) {\n drawW = natW;\n drawH = natH;\n }\n\n const drawBottomYPdf = options.geometry.heightPt - (drawTopY + drawH);\n const needsClip = drawW > box.width + 0.5 || drawH > box.height + 0.5;\n\n if (needsClip) {\n pushClip(page, box);\n }\n page.drawImage(embedded, { x: drawX, y: drawBottomYPdf, width: drawW, height: drawH });\n if (needsClip) {\n popClip(page);\n }\n}\n\nfunction decodeDataUrl(dataUrl: string): { bytes: Uint8Array; isPng: boolean } | null {\n const match = /^data:image\\/(png|jpe?g);base64,(.*)$/i.exec(dataUrl);\n if (!match) return null;\n const isPng = match[1].toLowerCase() === 'png';\n const binary = atob(match[2]);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return { bytes, isPng };\n}\n\n// ---- svg ----\n\nfunction drawSvg(page: PDFPage, node: SvgNode, rect: Rect, geometry: RenderGeometry): void {\n const p = toPdfSpace(rect, geometry);\n for (const cmd of node.commands) {\n drawSvgCommand(page, cmd, p.x, p.topY);\n }\n}\n\nfunction drawSvgCommand(page: PDFPage, cmd: SvgDrawCommand, originX: number, originTopY: number): void {\n const paint = cmd.paint;\n const drawOpts: any = {};\n if (paint.fill) {\n drawOpts.color = rgbFrom(paint.fill);\n drawOpts.opacity = paint.fill.a * paint.opacity;\n }\n if (paint.stroke && paint.strokeWidthPt > 0) {\n drawOpts.borderColor = rgbFrom(paint.stroke);\n drawOpts.borderWidth = paint.strokeWidthPt;\n drawOpts.borderOpacity = paint.stroke.a * paint.opacity;\n }\n if (!drawOpts.color && !drawOpts.borderColor) return;\n\n switch (cmd.op) {\n case 'rect': {\n const hasRadius = cmd.rx > 0 || cmd.ry > 0;\n if (hasRadius) {\n const d = roundedRectPath(cmd.width, cmd.height, { topLeft: cmd.rx, topRight: cmd.rx, bottomRight: cmd.rx, bottomLeft: cmd.rx });\n page.drawSvgPath(d, { ...drawOpts, x: originX + cmd.x, y: originTopY - cmd.y });\n } else {\n page.drawRectangle({ x: originX + cmd.x, y: originTopY - cmd.y - cmd.height, width: cmd.width, height: cmd.height, color: drawOpts.color, opacity: drawOpts.opacity, borderColor: drawOpts.borderColor, borderWidth: drawOpts.borderWidth, borderOpacity: drawOpts.borderOpacity });\n }\n break;\n }\n case 'ellipse':\n page.drawEllipse({ x: originX + cmd.cx, y: originTopY - cmd.cy, xScale: cmd.rx, yScale: cmd.ry, color: drawOpts.color, opacity: drawOpts.opacity, borderColor: drawOpts.borderColor, borderWidth: drawOpts.borderWidth, borderOpacity: drawOpts.borderOpacity });\n break;\n case 'line':\n if (drawOpts.borderColor) {\n page.drawLine({ start: { x: originX + cmd.x1, y: originTopY - cmd.y1 }, end: { x: originX + cmd.x2, y: originTopY - cmd.y2 }, thickness: drawOpts.borderWidth, color: drawOpts.borderColor, opacity: drawOpts.borderOpacity });\n }\n break;\n case 'path': {\n // See dom/svg-parser.ts and render/svg-path-anchor.ts: a non-zero\n // viewBox origin is applied here, as a shift of the anchor point,\n // rather than baked into cmd.d -- safe regardless of whether the\n // path mixes absolute/relative commands.\n const anchor = svgPathAnchor(originX, originTopY, cmd.originOffsetXPt, cmd.originOffsetYPt);\n page.drawSvgPath(cmd.d, { ...drawOpts, x: anchor.x, y: anchor.y });\n break;\n }\n }\n}\n","import { LayoutNode, TextRunNode } from './model/nodes';\nimport { inspectElement } from './dom/inspect';\nimport { resolveAssets } from './dom/assets';\nimport { PdfPageContext, PdfExportWarning } from './types';\n\n/**\n * Builds the layout nodes for one page's header or footer callback result.\n * A returned string becomes a single default-styled text run; a returned\n * HTMLElement is run through the same DOM-inspection path as the body\n * (briefly attached off-screen so getBoundingClientRect/getComputedStyle\n * are meaningful), per docs/pagination.md \"Headers / footers\".\n */\nexport async function buildHeaderFooterNodes(\n result: string | HTMLElement,\n boxWidthPt: number,\n boxHeightPt: number,\n scale: number,\n onWarning: (w: PdfExportWarning) => void,\n): Promise<LayoutNode[]> {\n if (typeof result === 'string') {\n if (!result.trim()) return [];\n const sizePt = 10;\n const node: TextRunNode = {\n id: 'header-footer-text',\n type: 'text',\n rect: { x: 0, y: 0, width: boxWidthPt, height: boxHeightPt },\n visible: true,\n break: { breakInside: 'avoid', breakBefore: 'auto', breakAfter: 'auto' },\n text: result,\n font: { family: 'Helvetica', weight: 400, style: 'normal', sizePt },\n color: { r: 80, g: 80, b: 80, a: 1 },\n letterSpacingPt: 0,\n align: 'left',\n decoration: { underline: false, lineThrough: false },\n baselineOffsetPt: boxHeightPt / 2 + sizePt * 0.35,\n };\n return [node];\n }\n\n const host = document.createElement('div');\n host.style.position = 'fixed';\n host.style.top = '0';\n host.style.left = '-99999px';\n host.style.width = `${boxWidthPt / 0.75}px`;\n host.appendChild(result);\n document.body.appendChild(host);\n\n try {\n const { document: doc, assetTasks, warnings } = inspectElement(result, { keepTogetherSelectors: [] });\n warnings.forEach(onWarning);\n await resolveAssets(assetTasks, scale, onWarning);\n return doc.children;\n } finally {\n document.body.removeChild(host);\n }\n}\n\nexport function pageContext(pageNumber: number, pageCount: number): PdfPageContext {\n return { pageNumber, pageCount };\n}\n","import { inspectElement } from './dom/inspect';\nimport { resolveAssets } from './dom/assets';\nimport { fitDocumentToWidth } from './layout/scale-tree';\nimport { paginate, flattenLayoutNodes } from './pagination/paginate';\nimport { resolvePageGeometry } from './pagination/page-geometry';\nimport { renderPdf, RenderGeometry } from './render/pdf-renderer';\nimport { buildHeaderFooterNodes, pageContext } from './header-footer';\nimport { FontRegistry } from './fonts/font-registry';\nimport { PdfExportOptions, PdfExportWarning } from './types';\n\nexport async function runExport(root: HTMLElement, options: PdfExportOptions, fontRegistry: FontRegistry): Promise<Blob> {\n validateTarget(root);\n\n const warnings: PdfExportWarning[] = [];\n const onWarning = (w: PdfExportWarning) => {\n warnings.push(w);\n options.onWarning?.(w);\n // eslint-disable-next-line no-console\n console.warn(`[ngx-pdf-export] ${w.message} (${w.elementDescription})`);\n };\n\n const scale = options.scale ?? 2;\n const headerHeightPt = options.header ? options.headerHeight ?? 24 : 0;\n const footerHeightPt = options.footer ? options.footerHeight ?? 24 : 0;\n\n const geometry = resolvePageGeometry(options.format, options.orientation, options.margin, headerHeightPt, footerHeightPt);\n\n const { document: doc, assetTasks, warnings: inspectWarnings } = inspectElement(root, {\n keepTogetherSelectors: options.keepTogether ?? [],\n });\n inspectWarnings.forEach(onWarning);\n\n const fitScale = fitDocumentToWidth(doc, geometry.contentWidthPt);\n if (fitScale < 1) {\n onWarning({ message: `Content is wider than the page (by ${Math.round((1 / fitScale - 1) * 100)}%) and was scaled down to fit.`, elementDescription: `<${root.tagName.toLowerCase()}>` });\n }\n\n await resolveAssets(assetTasks, scale, onWarning);\n\n if (options.repeatTableHeaders === false) {\n disableTableHeaderRepeat(doc.children as any);\n }\n\n const paginated = paginate(doc, { contentHeightPt: geometry.contentHeightPt });\n const pageCount = paginated.pages.length || 1;\n\n const bodyGeometry: RenderGeometry = {\n widthPt: geometry.widthPt,\n heightPt: geometry.heightPt,\n marginTopPt: geometry.margin.top + headerHeightPt,\n marginLeftPt: geometry.margin.left,\n };\n\n let headerFooter: Parameters<typeof renderPdf>[3];\n if (options.header || options.footer) {\n const headerGeometry: RenderGeometry = { widthPt: geometry.widthPt, heightPt: geometry.heightPt, marginTopPt: geometry.margin.top, marginLeftPt: geometry.margin.left };\n const footerGeometry: RenderGeometry = { widthPt: geometry.widthPt, heightPt: geometry.heightPt, marginTopPt: geometry.heightPt - geometry.margin.bottom - footerHeightPt, marginLeftPt: geometry.margin.left };\n\n const headerPrimitivesPerPage = options.header\n ? await Promise.all(\n Array.from({ length: pageCount }, (_, i) => i).map(async (i) => {\n const result = options.header!(pageContext(i + 1, pageCount));\n const nodes = await buildHeaderFooterNodes(result, geometry.contentWidthPt, headerHeightPt, scale, onWarning);\n return flattenLayoutNodes(nodes);\n }),\n )\n : undefined;\n\n const footerPrimitivesPerPage = options.footer\n ? await Promise.all(\n Array.from({ length: pageCount }, (_, i) => i).map(async (i) => {\n const result = options.footer!(pageContext(i + 1, pageCount));\n const nodes = await buildHeaderFooterNodes(result, geometry.contentWidthPt, footerHeightPt, scale, onWarning);\n return flattenLayoutNodes(nodes);\n }),\n )\n : undefined;\n\n headerFooter = { headerPrimitivesPerPage, footerPrimitivesPerPage, headerGeometry, footerGeometry };\n }\n\n const bytes = await renderPdf(\n paginated.pages,\n fontRegistry,\n { geometry: bodyGeometry, debug: !!options.debug, onWarning },\n headerFooter,\n );\n\n return new Blob([bytes as BlobPart], { type: 'application/pdf' });\n}\n\nfunction validateTarget(root: HTMLElement | null | undefined): asserts root is HTMLElement {\n if (!root) {\n throw new Error('ngx-pdf-export: export target not found.');\n }\n if (!root.isConnected) {\n throw new Error('ngx-pdf-export: export target is not attached to the document. The element must be rendered (not display:none, not in a detached view) at export time.');\n }\n const rect = root.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) {\n throw new Error('ngx-pdf-export: export target has zero width or height.');\n }\n}\n\nfunction disableTableHeaderRepeat(nodes: import('./model/nodes').LayoutNode[]): void {\n for (const node of nodes) {\n if (node.type === 'table') {\n node.repeatHeader = false;\n } else if (node.type === 'block' || node.type === 'group') {\n disableTableHeaderRepeat(node.children);\n }\n }\n}\n","export interface PdfFontSource {\n family: string;\n src: string | ArrayBuffer;\n weight?: number;\n style?: 'normal' | 'italic';\n}\n\nexport interface RegisteredFontSource {\n family: string;\n weight: number;\n style: 'normal' | 'italic';\n bytes: ArrayBuffer;\n}\n\n/**\n * Holds developer-registered custom fonts (see docs/api-design.md \"Font\n * registration\"). Resolution is family match -> nearest registered weight\n * for that family+style, falling back to the opposite style if no exact\n * style match exists. Standard-14 fallback happens in render/fonts.ts,\n * outside this class, since it needs a live PDFDocument to embed against.\n */\nexport class FontRegistry {\n private sources: RegisteredFontSource[] = [];\n\n async register(font: PdfFontSource): Promise<void> {\n const bytes = typeof font.src === 'string' ? await fetchBytes(font.src) : font.src;\n this.sources.push({\n family: font.family,\n weight: font.weight ?? 400,\n style: font.style ?? 'normal',\n bytes,\n });\n }\n\n resolve(family: string, weight: number, style: 'normal' | 'italic'): RegisteredFontSource | undefined {\n const candidates = this.sources.filter((s) => s.family.toLowerCase() === family.toLowerCase());\n if (candidates.length === 0) {\n return undefined;\n }\n const styleMatches = candidates.filter((c) => c.style === style);\n const pool = styleMatches.length > 0 ? styleMatches : candidates;\n return pool.reduce((best, c) => (Math.abs(c.weight - weight) < Math.abs(best.weight - weight) ? c : best));\n }\n\n hasAnyFontFor(family: string): boolean {\n return this.sources.some((s) => s.family.toLowerCase() === family.toLowerCase());\n }\n}\n\nasync function fetchBytes(url: string): Promise<ArrayBuffer> {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`ngx-pdf-export: failed to fetch font \"${url}\" (HTTP ${response.status}).`);\n }\n return response.arrayBuffer();\n}\n","import { ElementRef } from '@angular/core';\nimport { PdfExportOptions, PdfExportOptionsWithElement } from '../types';\n\nexport type PdfExportTarget = string | HTMLElement | ElementRef<HTMLElement>;\n\nexport interface NormalizedArgs {\n element: PdfExportTarget;\n opts: PdfExportOptions;\n}\n\n/**\n * Accepts either `(target, options)` or a single `{ element, ...options }`\n * object -- see docs/api-design.md.\n */\nexport function normalizeArgs(target: PdfExportTarget | PdfExportOptionsWithElement, options?: PdfExportOptions): NormalizedArgs {\n if (isOptionsWithElement(target)) {\n const { element, ...rest } = target;\n return { element, opts: rest };\n }\n return { element: target, opts: options ?? {} };\n}\n\nfunction isOptionsWithElement(value: unknown): value is PdfExportOptionsWithElement {\n return typeof value === 'object' && value !== null && !(value instanceof ElementRef) && !(value instanceof HTMLElement) && 'element' in value;\n}\n\nexport function resolveElement(target: PdfExportTarget): HTMLElement {\n if (typeof target === 'string') {\n const found = document.querySelector<HTMLElement>(target);\n if (!found) {\n throw new Error(`ngx-pdf-export: no element matches selector \"${target}\".`);\n }\n return found;\n }\n if (target instanceof ElementRef) {\n return target.nativeElement;\n }\n return target;\n}\n","import { Injectable } from '@angular/core';\nimport { runExport } from '../export-pipeline';\nimport { FontRegistry, PdfFontSource } from '../fonts/font-registry';\nimport { PdfExportOptions, PdfExportOptionsWithElement } from '../types';\nimport { normalizeArgs, PdfExportTarget, resolveElement } from './normalize-args';\n\nexport type { PdfExportTarget } from './normalize-args';\n\n/**\n * The library's public entry point. See docs/api-design.md \"Public surface\".\n * `export`/`download`/`toBlob` all accept either `(target, options)` or a\n * single `{ element, ...options }` object.\n */\n@Injectable({ providedIn: 'root' })\nexport class PdfExportService {\n private readonly fontRegistry = new FontRegistry();\n\n /** Registers a custom TTF/OTF font for embedding -- see docs/api-design.md \"Font registration\". */\n async registerFont(font: PdfFontSource): Promise<void> {\n await this.fontRegistry.register(font);\n }\n\n /** Builds the PDF and returns it as a Blob, without triggering a download. */\n async toBlob(target: PdfExportTarget | PdfExportOptionsWithElement, options?: PdfExportOptions): Promise<Blob> {\n const { element, opts } = normalizeArgs(target, options);\n const root = resolveElement(element);\n return runExport(root, opts, this.fontRegistry);\n }\n\n /** Builds the PDF and triggers a browser download. Alias for `download()` with the brief's example call shape. */\n async export(target: PdfExportTarget | PdfExportOptionsWithElement, options?: PdfExportOptions): Promise<void> {\n const { element, opts } = normalizeArgs(target, options);\n const blob = await this.toBlob(element, opts);\n triggerDownload(blob, opts.filename ?? 'document.pdf');\n }\n\n /** Builds the PDF and triggers a browser download with an explicit filename. */\n async download(target: PdfExportTarget | PdfExportOptionsWithElement, filename?: string, options?: PdfExportOptions): Promise<void> {\n const { element, opts } = normalizeArgs(target, options);\n const finalFilename = filename ?? opts.filename ?? 'document.pdf';\n const blob = await this.toBlob(element, opts);\n triggerDownload(blob, finalFilename);\n }\n}\n\nfunction triggerDownload(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\nimport { PdfExportOptions } from '../types';\nimport { PdfExportService } from './pdf-export.service';\n\n/**\n * Thin wrapper around PdfExportService for template-driven use:\n *\n * ```html\n * <div id=\"dashboard\" pdfExport pdfFileName=\"dashboard.pdf\" #dash=\"pdfExport\">\n * ...\n * </div>\n * <button (click)=\"dash.export()\">Export</button>\n * ```\n *\n * By default this does not attach its own click handler -- the host element\n * shown in the brief's example is the content being exported, not\n * necessarily a button. Set `pdfTrigger=\"click\"` to export when the host\n * element itself is clicked.\n */\n@Directive({\n selector: '[pdfExport]',\n exportAs: 'pdfExport',\n})\nexport class PdfExportDirective {\n @Input() pdfFileName?: string;\n @Input() pdfOptions?: PdfExportOptions;\n @Input() pdfTrigger: 'click' | 'none' = 'none';\n\n constructor(private readonly elementRef: ElementRef<HTMLElement>, private readonly pdf: PdfExportService) {}\n\n @HostListener('click')\n protected onHostClick(): void {\n if (this.pdfTrigger === 'click') {\n void this.export();\n }\n }\n\n async export(): Promise<void> {\n await this.pdf.download(this.elementRef.nativeElement, this.pdfFileName, this.pdfOptions);\n }\n}\n","/*\n * Public API surface of ngx-pdf-export.\n * Keep this small and curated -- see docs/api-design.md \"Public surface\".\n */\n\nexport { PdfExportService } from './lib/angular/pdf-export.service';\nexport type { PdfExportTarget } from './lib/angular/normalize-args';\nexport { PdfExportDirective } from './lib/angular/pdf-export.directive';\n\nexport type { PdfFontSource } from './lib/fonts/font-registry';\n\nexport type {\n PdfExportOptions,\n PdfExportOptionsWithElement,\n PdfExportWarning,\n PdfPageContext,\n PageFormat,\n MarginSpec,\n} from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["clamp01","describeElement","i1.PdfExportService"],"mappings":"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"}
|
package/package.json
CHANGED