@jsxpdf/jsxpdf 0.0.1-alpha.0 → 0.0.1-alpha.1

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.
package/dist/node.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/node.ts", "../src/render.ts", "../src/repeat.ts", "../src/jsx-runtime.ts"],
4
- "sourcesContent": ["/// <reference path=\"./global.d.ts\" />\n\nexport {\n Canvas,\n Circle,\n Checkbox,\n ClipPath,\n Defs,\n Document,\n Ellipse,\n Table,\n TableBody,\n TableCell,\n TableFooter,\n TableHead,\n TableRow,\n FieldSet,\n G,\n Image,\n Line,\n LinearGradient,\n Link,\n List,\n Note,\n Page,\n PageBreak,\n Path,\n Polygon,\n Polyline,\n RadialGradient,\n Rect,\n Select,\n Stop,\n Svg,\n Text,\n TextInput,\n Tspan,\n View\n} from \"@jsxpdf/core\"\nexport { Font, StyleSheet } from \"@jsxpdf/core\"\nexport { renderToBlob, renderToUint8Array } from \"./render\"\nexport type { CardSlotProps, ConcatProps, RepeatOverflowMode, RepeatPageProps, RepeatedDocumentProps } from \"./repeat\"\nexport { CardSlot, Concat, Repeat, RepeatedDocument } from \"./repeat\"\nexport { pdf, compile, renderToBuffer, renderToFile, renderToStream } from \"@jsxpdf/node\"\nexport { configureYogaRuntime, getYogaBackend, type YogaBackend, type YogaRuntimeLoader } from \"@jsxpdf/layout\"\nexport type { HyphenationCallback, PdfRenderOptions, ProfileTrace } from \"@jsxpdf/core\"\nexport type { CompiledTemplate } from \"@jsxpdf/node\"\n", "/// <reference path=\"./global.d.ts\" />\n\nimport { concatUint8Arrays, type PdfElement, type PdfRenderOptions } from \"@jsxpdf/core\"\nimport {\n createPdfRuntime,\n type CompiledRuntimeTemplate,\n type PdfComponent,\n type PdfRuntimeInstance,\n} from \"@jsxpdf/render\"\nimport { renderPdf } from \"@jsxpdf/render-pdfkit\"\n\ntype PdfDocumentStream = Awaited<ReturnType<typeof renderPdf>>\n\nconst runtime = createPdfRuntime<PdfDocumentStream>(renderPdf)\n\nconst chunkToUint8Array = (chunk: Uint8Array | ArrayBuffer | string): Uint8Array => {\n if (chunk instanceof Uint8Array) return chunk\n if (typeof chunk === \"string\") return new TextEncoder().encode(chunk)\n return new Uint8Array(chunk)\n}\n\nconst collectStreamBytes = (stream: PdfDocumentStream): Promise<Uint8Array> =>\n new Promise<Uint8Array>((resolve, reject) => {\n const chunks: Uint8Array[] = []\n let ended = false\n let finished = false\n let settled = false\n let resolveTimer: ReturnType<typeof setTimeout> | null = null\n\n const settle = () => {\n if (settled) return\n settled = true\n if (resolveTimer) clearTimeout(resolveTimer)\n resolve(concatUint8Arrays(chunks))\n }\n const maybeResolve = () => {\n if (settled) return\n if (ended && finished) return settle()\n if (ended || finished) {\n if (resolveTimer) clearTimeout(resolveTimer)\n resolveTimer = setTimeout(settle, 0)\n }\n }\n\n stream.on(\"data\", (chunk: unknown) => {\n chunks.push(chunkToUint8Array(chunk as Uint8Array | ArrayBuffer | string))\n })\n stream.on(\"end\", () => {\n ended = true\n maybeResolve()\n })\n stream.on(\"finish\", () => {\n finished = true\n maybeResolve()\n })\n stream.on(\"error\", reject)\n })\n\nexport type PdfInstance = PdfRuntimeInstance<PdfDocumentStream> & {\n toUint8Array: () => Promise<Uint8Array>\n toBlob: () => Promise<Blob>\n}\n\nconst wrapInstance = (instance: PdfRuntimeInstance<PdfDocumentStream>): PdfInstance => ({\n ...instance,\n async toUint8Array() {\n return collectStreamBytes(await instance.toStream())\n },\n async toBlob() {\n const bytes = await this.toUint8Array()\n return new Blob([Uint8Array.from(bytes)], { type: \"application/pdf\" })\n },\n})\n\nexport const pdf = (initialValue?: PdfElement, options: PdfRenderOptions = {}): PdfInstance => {\n return wrapInstance(runtime.pdf(initialValue, options))\n}\n\nexport const renderToUint8Array = (\n element: PdfElement,\n options: PdfRenderOptions = {},\n): Promise<Uint8Array> => pdf(element, options).toUint8Array()\n\nexport const renderToBlob = (\n element: PdfElement,\n options: PdfRenderOptions = {},\n): Promise<Blob> => pdf(element, options).toBlob()\n\nexport type CompiledTemplate<Props = unknown> = Omit<\n CompiledRuntimeTemplate<Props, PdfDocumentStream>,\n \"toStream\"\n> & {\n toUint8Array: (props: Props, options?: PdfRenderOptions) => Promise<Uint8Array>\n toBlob: (props: Props, options?: PdfRenderOptions) => Promise<Blob>\n}\n\nexport const compile = async <Props>(\n component: PdfComponent<Props>,\n options: PdfRenderOptions = {},\n): Promise<CompiledTemplate<Props>> => {\n const template = await runtime.compile(component, options)\n const toUint8Array = async (props: Props, renderOptions: PdfRenderOptions = {}) => {\n return collectStreamBytes(await template.toStream(props, renderOptions))\n }\n return {\n ...template,\n toUint8Array,\n async toBlob(props, renderOptions = {}) {\n const bytes = await toUint8Array(props, renderOptions)\n return new Blob([Uint8Array.from(bytes)], { type: \"application/pdf\" })\n },\n }\n}\n\nexport type { PdfComponent }\n", "import type { BindingToken, LayoutNode, PdfElement, PdfPageSizeValue, PdfProps, PdfStyle, PdfValue } from \"@jsxpdf/core\"\nimport { Document, Page, View, createBindingToken, isBindingToken, materializeChildren, materializeElement, parseSizeValue } from \"@jsxpdf/core\"\nimport {\n buildConcatenatedDocumentLayout,\n compilePrecompiledTemplateSync,\n initCompiledRenderState,\n runSinglePageIncrementalPipeline,\n type IncrementalYogaLayoutState,\n type PrecompiledTemplateRenderState,\n} from \"@jsxpdf/layout\"\nimport { jsx, jsxs, Fragment } from \"./jsx-runtime\"\n\nexport type RepeatOverflowMode = \"clip\" | \"error\" | \"shrink\"\n\nexport type RepeatPageProps = {\n size?: PdfPageSizeValue\n orientation?: \"portrait\" | \"landscape\"\n dpi?: number\n style?: PdfStyle | PdfStyle[]\n}\n\nexport type RepeatedDocumentProps<T> = {\n items: readonly T[] | BindingToken\n page?: RepeatPageProps\n slots: {\n columns: number\n rows: number\n }\n gap?: number\n fill?: \"row\" | \"column\"\n children: ((item: T, index: number) => PdfValue) | PdfValue\n} & Pick<ConcatProps, \"title\" | \"author\" | \"subject\" | \"creator\" | \"keywords\" | \"producer\" | \"language\" | \"creationDate\" | \"modificationDate\" | \"pdfVersion\" | \"tagged\" | \"attachments\" | \"xmp\" | \"pdfaid\" | \"pageMode\" | \"pageLayout\">\n\nexport type CardSlotProps = PdfProps & {\n padding?: number\n overflow?: RepeatOverflowMode\n}\n\nexport type ConcatProps = {\n children?: PdfValue\n title?: string\n author?: string\n subject?: string\n creator?: string\n keywords?: string\n producer?: string\n language?: string\n creationDate?: Date\n modificationDate?: Date\n pdfVersion?: string\n tagged?: PdfProps[\"tagged\"]\n attachments?: PdfProps[\"attachments\"]\n xmp?: PdfProps[\"xmp\"]\n pdfaid?: PdfProps[\"pdfaid\"]\n pageMode?: string\n pageLayout?: string\n}\n\nconst pageSizes: Record<string, [number, number]> = {\n A0: [2383.94, 3370.39],\n A1: [1683.78, 2383.94],\n A2: [1190.55, 1683.78],\n A3: [841.89, 1190.55],\n A4: [595.28, 841.89],\n A5: [419.53, 595.28],\n A6: [297.64, 419.53],\n LETTER: [612.0, 792.0],\n LEGAL: [612.0, 1008.0],\n TABLOID: [792.0, 1224.0]\n}\n\nconst TRACKED_PATH_SYMBOL = Symbol.for(\"jsxpdf.trackedPath\")\n\ntype InjectedCardSlotMetrics = {\n x: number\n y: number\n width: number\n height: number\n}\n\nconst h = (type: unknown, props?: Record<string, unknown> | null, ...children: unknown[]): PdfElement => {\n const normalizedChildren = children.flat(Infinity).filter((child) => child !== undefined && child !== null && child !== false)\n const nextProps = { ...(props ?? {}) } as Record<string, unknown>\n\n if (normalizedChildren.length === 1) {\n nextProps.children = normalizedChildren[0]\n } else if (normalizedChildren.length > 1) {\n nextProps.children = normalizedChildren\n }\n\n const key = nextProps.key as string | undefined\n delete nextProps.key\n\n return Array.isArray(nextProps.children) ? jsxs(type, nextProps as never, key) : jsx(type, nextProps as never, key)\n}\n\nconst chunk = <T,>(items: readonly T[], size: number): T[][] => {\n const result: T[][] = []\n for (let index = 0; index < items.length; index += size) {\n result.push(items.slice(index, index + size))\n }\n return result\n}\n\nconst resolveRepeatPageSize = (\n size: PdfPageSizeValue | undefined,\n orientation?: \"portrait\" | \"landscape\",\n dpi = 72\n): [number, number] => {\n let resolved: [number, number]\n\n if (typeof size === \"string\") {\n resolved = pageSizes[size.toUpperCase()] ?? pageSizes.A4\n } else if (Array.isArray(size)) {\n resolved = [\n parseSizeValue(size[0], 0, dpi) ?? pageSizes.A4[0],\n parseSizeValue(size[1], 0, dpi) ?? pageSizes.A4[1]\n ]\n } else if (typeof size === \"number\") {\n resolved = [size, size]\n } else if (size && typeof size === \"object\") {\n resolved = [\n parseSizeValue(size.width, 0, dpi) ?? pageSizes.A4[0],\n parseSizeValue(size.height, 0, dpi) ?? pageSizes.A4[1]\n ]\n } else {\n resolved = pageSizes.A4\n }\n\n return orientation === \"landscape\" ? [resolved[1], resolved[0]] : resolved\n}\n\nconst reorderForColumnFill = <T,>(items: readonly T[], columns: number, rows: number): T[] => {\n const perPage = Math.max(1, columns * rows)\n const reordered: T[] = []\n\n for (const pageItems of chunk(items, perPage)) {\n for (let row = 0; row < rows; row += 1) {\n for (let column = 0; column < columns; column += 1) {\n const sourceIndex = column * rows + row\n const item = pageItems[sourceIndex]\n if (item !== undefined) reordered.push(item)\n }\n }\n }\n\n return reordered\n}\n\nconst isElement = (value: PdfValue): value is PdfElement => typeof value === \"object\" && value !== null && \"type\" in value && \"props\" in value\n\nconst resolveTrackedPathValue = (root: unknown, path: Array<string | number>): unknown => {\n let current = root\n for (const segment of path) {\n if (current == null) return undefined\n current = (current as Record<string | number, unknown>)[segment]\n }\n return current\n}\n\nconst resolveBindingValues = (value: unknown, rootProps: unknown): unknown => {\n if (isBindingToken(value)) {\n return resolveTrackedPathValue(rootProps, value.path)\n }\n if (Array.isArray(value)) {\n return value.map((entry) => resolveBindingValues(entry, rootProps))\n }\n if (value instanceof Date || value instanceof Uint8Array) return value\n if (typeof value === \"function\") return value\n if (value && typeof value === \"object\") {\n const source = value as Record<string, unknown>\n const resolved: Record<string, unknown> = {}\n for (const [key, entry] of Object.entries(source)) {\n resolved[key] = resolveBindingValues(entry, rootProps)\n }\n return resolved\n }\n return value\n}\n\nconst extractConcatDocuments = (value: PdfValue): PdfElement[] => {\n const resolved = materializeElement(value)\n const children = materializeChildren(resolved)\n const documents: PdfElement[] = []\n\n for (const child of children) {\n const resolvedChild = materializeElement(child)\n if (!isElement(resolvedChild)) continue\n if (resolvedChild.type === Document) {\n documents.push(resolvedChild)\n continue\n }\n if (resolvedChild.type === Page) {\n documents.push(h(Document, null, resolvedChild))\n continue\n }\n throw new Error(`Concat only accepts Document, RepeatedDocument, or Page children. Received ${String(resolvedChild.type)}.`)\n }\n\n return documents\n}\n\nexport function CardSlot(props: CardSlotProps): PdfElement {\n const { __repeatSlotMetrics, padding = 0, overflow = \"clip\", clip, wrap, style, children, ...rest } = props\n\n if (!__repeatSlotMetrics) {\n throw new Error(\"CardSlot must be used inside Repeat.\")\n }\n\n const contentWidth = Math.max(0, __repeatSlotMetrics.width - padding * 2)\n const contentHeight = Math.max(0, __repeatSlotMetrics.height - padding * 2)\n\n return h(\n View,\n {\n ...rest,\n wrap: wrap ?? false,\n clip: clip ?? overflow !== \"error\",\n repeatSlotConfig: {\n overflow,\n contentWidth,\n contentHeight\n },\n style: [\n style,\n {\n left: __repeatSlotMetrics.x,\n top: __repeatSlotMetrics.y,\n width: __repeatSlotMetrics.width,\n height: __repeatSlotMetrics.height,\n paddingTop: padding,\n paddingRight: padding,\n paddingBottom: padding,\n paddingLeft: padding,\n position: \"absolute\"\n }\n ]\n },\n h(\n View,\n {\n repeatSlotContent: true,\n wrap: false,\n style: {\n width: contentWidth,\n height: contentHeight,\n position: \"relative\"\n }\n },\n children\n )\n )\n}\n\nconst getRepeatedDocumentPlan = <T,>(props: RepeatedDocumentProps<T>) => {\n // Binding-token items only occur on the compile path, which never reaches\n // layout planning: `RepeatedDocument` routes tokens to the schema renderer\n // (or throws) before any page is built.\n if (isBindingToken(props.items)) {\n throw new Error(\"jsxpdf.compile.unsupported: RepeatedDocument requires static items during layout.\")\n }\n const items = props.fill === \"column\"\n ? reorderForColumnFill(props.items, props.slots.columns, props.slots.rows)\n : [...props.items]\n const columns = Math.max(1, Math.floor(props.slots.columns))\n const rows = Math.max(1, Math.floor(props.slots.rows))\n const gap = Math.max(0, props.gap ?? 0)\n const perPage = columns * rows\n const [pageWidth, pageHeight] = resolveRepeatPageSize(\n props.page?.size,\n props.page?.orientation,\n props.page?.dpi\n )\n const totalHorizontalGap = gap * (columns - 1)\n const totalVerticalGap = gap * (rows - 1)\n const slotWidth = (pageWidth - totalHorizontalGap) / columns\n const slotHeight = (pageHeight - totalVerticalGap) / rows\n const pageCount = Math.ceil(items.length / perPage)\n\n return {\n items,\n columns,\n gap,\n perPage,\n pageWidth,\n pageHeight,\n pageCount,\n slotWidth,\n slotHeight\n }\n}\n\nconst createRepeatedPageDocument = <T,>(props: RepeatedDocumentProps<T>, pageIndex: number): PdfElement => {\n const plan = getRepeatedDocumentPlan(props)\n const pageItems = plan.items.slice(pageIndex * plan.perPage, pageIndex * plan.perPage + plan.perPage)\n const trackedItemPaths = pageItems\n .map((item) => (\n item &&\n typeof item === \"object\" &&\n Array.isArray((item as Record<PropertyKey, unknown>)[TRACKED_PATH_SYMBOL])\n ? [...((item as Record<PropertyKey, unknown>)[TRACKED_PATH_SYMBOL] as Array<string | number>)]\n : null\n ))\n .filter((path): path is Array<string | number> => Array.isArray(path) && path.length >= 2 && typeof path[path.length - 1] === \"number\")\n const firstTrackedPath = trackedItemPaths[0]\n const pageCollectionPath =\n firstTrackedPath &&\n trackedItemPaths.every((path) =>\n path.length === firstTrackedPath.length &&\n path.slice(0, -1).every((segment, index) => segment === firstTrackedPath[index])\n )\n ? firstTrackedPath.slice(0, -1)\n : undefined\n const pageIndexRange: [number, number] | undefined =\n pageCollectionPath && trackedItemPaths.length > 0\n ? [\n Math.min(...trackedItemPaths.map((path) => path[path.length - 1] as number)),\n Math.max(...trackedItemPaths.map((path) => path[path.length - 1] as number)),\n ]\n : undefined\n\n return h(\n Document,\n {\n key: `repeated-document-${pageIndex + 1}`\n },\n h(\n Page,\n {\n key: `repeat-page-${pageIndex + 1}`,\n size: [plan.pageWidth, plan.pageHeight],\n dpi: props.page?.dpi,\n __repeatTrackedCollectionPath: pageCollectionPath,\n __repeatTrackedIndexRange: pageIndexRange,\n style: [\n {\n padding: 0,\n position: \"relative\"\n },\n props.page?.style\n ]\n },\n ...pageItems.map((item, itemIndex) => {\n const childIndex = pageIndex * plan.perPage + itemIndex\n const row = Math.floor(itemIndex / plan.columns)\n const column = itemIndex % plan.columns\n const rendered = typeof props.children === \"function\" ? props.children(item, childIndex) : props.children\n const metrics = {\n x: column * (plan.slotWidth + plan.gap),\n y: row * (plan.slotHeight + plan.gap),\n width: plan.slotWidth,\n height: plan.slotHeight\n }\n const repeatTrackedItemPath = (\n item &&\n typeof item === \"object\" &&\n Array.isArray((item as Record<PropertyKey, unknown>)[TRACKED_PATH_SYMBOL])\n )\n ? [...((item as Record<PropertyKey, unknown>)[TRACKED_PATH_SYMBOL] as Array<string | number>)]\n : undefined\n\n if (isElement(rendered) && rendered.type === CardSlot) {\n return {\n ...rendered,\n props: {\n ...rendered.props,\n __repeatSlotMetrics: metrics,\n __repeatTrackedItemPath: repeatTrackedItemPath\n }\n }\n }\n\n return h(CardSlot, {\n key: `repeat-slot-${childIndex + 1}`,\n __repeatSlotMetrics: metrics,\n __repeatTrackedItemPath: repeatTrackedItemPath,\n children: rendered\n })\n })\n )\n ) as PdfElement\n}\n\nconst createRepeatedPages = <T,>(props: RepeatedDocumentProps<T>) => {\n const plan = getRepeatedDocumentPlan(props)\n return Array.from({ length: plan.pageCount }, (_, pageIndex) => {\n const document = createRepeatedPageDocument(props, pageIndex)\n return materializeChildren(document.props.children ?? [])[0] as PdfElement\n })\n}\n\nconst createRepeatedSlotElement = <T,>(\n props: RepeatedDocumentProps<T>,\n item: T,\n itemIndex: number,\n metrics: InjectedCardSlotMetrics\n): PdfElement => {\n const rendered = typeof props.children === \"function\" ? props.children(item, itemIndex) : props.children\n const repeatTrackedItemPath = (\n item &&\n typeof item === \"object\" &&\n Array.isArray((item as Record<PropertyKey, unknown>)[TRACKED_PATH_SYMBOL])\n )\n ? [...((item as Record<PropertyKey, unknown>)[TRACKED_PATH_SYMBOL] as Array<string | number>)]\n : undefined\n\n if (isElement(rendered) && rendered.type === CardSlot) {\n return {\n ...rendered,\n props: {\n ...rendered.props,\n __repeatSlotMetrics: metrics,\n __repeatTrackedItemPath: repeatTrackedItemPath\n }\n }\n }\n\n return h(CardSlot, {\n key: `repeat-slot-${itemIndex + 1}`,\n __repeatSlotMetrics: metrics,\n __repeatTrackedItemPath: repeatTrackedItemPath,\n children: rendered\n })\n}\n\nconst canCompileRepeatedSchema = <T,>(props: RepeatedDocumentProps<T>): boolean => {\n if (!isBindingToken(props.items)) return false\n if (isBindingToken(props.page?.size) || isBindingToken(props.page?.orientation) || isBindingToken(props.page?.dpi)) return false\n if (isBindingToken(props.gap) || isBindingToken(props.fill)) return false\n if (isBindingToken(props.slots.columns) || isBindingToken(props.slots.rows)) return false\n return true\n}\n\nconst createRepeatedSchemaRender = <T,>(props: RepeatedDocumentProps<T>) => {\n // Only called after `canCompileRepeatedSchema` confirmed token items.\n if (!isBindingToken(props.items)) {\n throw new Error(\"jsxpdf.compile.unsupported: RepeatedDocument schema render requires binding-token items.\")\n }\n const itemsPath = [...props.items.path]\n const staticPlan = getRepeatedDocumentPlan({\n ...props,\n items: []\n })\n\n const documentTemplate = compilePrecompiledTemplateSync(h(Document, {\n title: props.title,\n author: props.author,\n subject: props.subject,\n creator: props.creator,\n keywords: props.keywords,\n producer: props.producer,\n language: props.language,\n creationDate: props.creationDate,\n modificationDate: props.modificationDate,\n pdfVersion: props.pdfVersion,\n tagged: props.tagged,\n attachments: props.attachments,\n xmp: props.xmp,\n pdfaid: props.pdfaid,\n pageMode: props.pageMode,\n pageLayout: props.pageLayout,\n }))\n\n const pageTemplate = compilePrecompiledTemplateSync(\n h(Document, null,\n h(\n Page,\n {\n size: [staticPlan.pageWidth, staticPlan.pageHeight],\n dpi: props.page?.dpi,\n style: [\n {\n padding: 0,\n position: \"relative\"\n },\n props.page?.style\n ]\n }\n )\n )\n )\n\n const slotTemplate = compilePrecompiledTemplateSync(\n createRepeatedSlotElement(\n props,\n createBindingToken([\"__repeatItem\"], \"\", undefined, true) as unknown as T,\n 0,\n {\n x: 0,\n y: 0,\n width: staticPlan.slotWidth,\n height: staticPlan.slotHeight\n }\n )\n )\n\n const declaredBindingPaths = [\n itemsPath,\n ...documentTemplate.placeholders.flatMap((entry) => [\n ...(entry.bindingPath ? [entry.bindingPath] : []),\n ...(entry.bindingPaths ?? [])\n ]),\n ...pageTemplate.placeholders.flatMap((entry) => [\n ...(entry.bindingPath ? [entry.bindingPath] : []),\n ...(entry.bindingPaths ?? [])\n ]),\n ...slotTemplate.placeholders.flatMap((entry) => [\n ...(entry.bindingPath ? [entry.bindingPath] : []),\n ...(entry.bindingPaths ?? [])\n ]),\n ].flatMap((path) => (\n path[0] === \"__repeatItem\"\n ? [path]\n : Array.from({ length: path.length }, (_, index) => path.slice(0, index + 1))\n ))\n const uniqueBindingPaths = declaredBindingPaths.filter((path, index, all) =>\n all.findIndex((candidate) =>\n candidate.length === path.length &&\n candidate.every((segment, segmentIndex) => segment === path[segmentIndex])\n ) === index\n )\n\n // Per-page compiled template: one slot per grid position, each with an indexed binding token\n // This lets us reuse the Yoga tree across pages \u2014 only data changes, structure stays the same.\n const indexedSlotElements = Array.from({ length: staticPlan.perPage }, (_, i) => {\n const row = Math.floor(i / staticPlan.columns)\n const col = i % staticPlan.columns\n return createRepeatedSlotElement(\n props,\n createBindingToken([\"__slots\", i], \"\", undefined, true) as unknown as T,\n i,\n {\n x: col * (staticPlan.slotWidth + staticPlan.gap),\n y: row * (staticPlan.slotHeight + staticPlan.gap),\n width: staticPlan.slotWidth,\n height: staticPlan.slotHeight\n }\n )\n })\n\n const perPageCompiledTemplate = compilePrecompiledTemplateSync(\n h(Document, null,\n h(Page, {\n size: [staticPlan.pageWidth, staticPlan.pageHeight],\n dpi: props.page?.dpi,\n style: [{ padding: 0, position: \"relative\" }, props.page?.style]\n }, ...indexedSlotElements)\n )\n )\n\n type PageOptimizedState = { renderState: PrecompiledTemplateRenderState; incrementalState: IncrementalYogaLayoutState }\n let pageOptimizedStatePromise: Promise<PageOptimizedState> | null = null\n let renderQueue: Promise<void> = Promise.resolve()\n\n const getPageOptimizedState = (): Promise<PageOptimizedState> => {\n if (!pageOptimizedStatePromise) {\n pageOptimizedStatePromise = initCompiledRenderState(perPageCompiledTemplate).then(\n ({ renderState, incrementalLayoutState }) => ({ renderState, incrementalState: incrementalLayoutState })\n )\n }\n return pageOptimizedStatePromise\n }\n\n return Object.assign(\n (rootProps: unknown): PdfElement | Promise<LayoutNode> => {\n const resolvedItems = resolveTrackedPathValue(rootProps, itemsPath)\n if (!Array.isArray(resolvedItems)) {\n throw new Error(\"jsxpdf.compile.unsupported: RepeatedDocument items must resolve to an array at render time.\")\n }\n\n const allItems: readonly T[] = props.fill === \"column\"\n ? reorderForColumnFill(resolvedItems as readonly T[], staticPlan.columns, staticPlan.perPage / staticPlan.columns)\n : resolvedItems as readonly T[]\n\n const pageCount = Math.ceil(allItems.length / staticPlan.perPage)\n\n // Optimized path: all pages are full so the per-page Yoga tree can be reused without structural changes\n if (allItems.length > 0 && allItems.length % staticPlan.perPage === 0) {\n const result = renderQueue.then(async () => {\n const state = await getPageOptimizedState()\n const pageLayouts: LayoutNode[] = []\n for (let pageIndex = 0; pageIndex < pageCount; pageIndex++) {\n const pageItems = allItems.slice(pageIndex * staticPlan.perPage, (pageIndex + 1) * staticPlan.perPage)\n const { pageLayout, incrementalState: nextState } = await runSinglePageIncrementalPipeline(\n state.renderState,\n state.incrementalState,\n { __slots: pageItems }\n )\n state.incrementalState = nextState\n pageLayouts.push(pageLayout)\n }\n const documentProps = resolveBindingValues({\n title: props.title,\n author: props.author,\n subject: props.subject,\n creator: props.creator,\n keywords: props.keywords,\n producer: props.producer,\n language: props.language,\n creationDate: props.creationDate,\n modificationDate: props.modificationDate,\n pdfVersion: props.pdfVersion,\n tagged: props.tagged,\n attachments: props.attachments,\n xmp: props.xmp,\n pdfaid: props.pdfaid,\n pageMode: props.pageMode,\n pageLayout: props.pageLayout,\n }, rootProps) as Record<string, unknown>\n return buildConcatenatedDocumentLayout(documentProps, pageLayouts)\n })\n renderQueue = result.then(() => {}).catch(() => {})\n return result\n }\n\n // Fallback: partial last page \u2014 build full JSX tree and let the layout pipeline handle it\n const concreteProps = {\n ...(resolveBindingValues(props, rootProps) as RepeatedDocumentProps<T>),\n items: resolvedItems as readonly T[],\n }\n return materializeElement(createRepeatedDocumentElement(concreteProps)) as PdfElement\n },\n { bindingPaths: uniqueBindingPaths }\n )\n}\n\nconst createRepeatedDocumentElement = <T,>(props: RepeatedDocumentProps<T>): PdfElement => {\n const concatDocuments = createRepeatedPages(props).map((page) => h(Document, null, page))\n return h(\n Document,\n {\n title: props.title,\n author: props.author,\n subject: props.subject,\n creator: props.creator,\n keywords: props.keywords,\n producer: props.producer,\n language: props.language,\n creationDate: props.creationDate,\n modificationDate: props.modificationDate,\n pdfVersion: props.pdfVersion,\n tagged: props.tagged,\n attachments: props.attachments,\n xmp: props.xmp,\n pdfaid: props.pdfaid,\n pageMode: props.pageMode,\n pageLayout: props.pageLayout,\n concatDocuments\n }\n )\n}\n\nexport function RepeatedDocument<T>(props: RepeatedDocumentProps<T>) {\n if (canCompileRepeatedSchema(props)) {\n const schemaRender = createRepeatedSchemaRender(props)\n return h(\n Document,\n {\n title: typeof props.title === \"string\" ? props.title : undefined,\n __compiledBindingPaths: schemaRender.bindingPaths,\n __compiledSchemaRender: schemaRender\n }\n )\n }\n if (isBindingToken(props.items)) {\n throw new Error(\"jsxpdf.compile.unsupported: RepeatedDocument requires static layout props during compile.\")\n }\n return createRepeatedDocumentElement(props)\n}\n\nexport function Repeat<T>(props: RepeatedDocumentProps<T>): PdfElement {\n // Fragment unwraps to the raw pages array at runtime; the PdfElement\n // annotation keeps `<Repeat>` usable as a JSX component. Pages flatten\n // through children materialization exactly like a returned array.\n return h(Fragment, null, ...createRepeatedPages(props)) as PdfElement\n}\n\nexport function Concat(props: ConcatProps): PdfElement {\n const { children, ...documentProps } = props\n return h(\n Document,\n {\n ...documentProps,\n concatDocuments: extractConcatDocuments(children ?? [])\n }\n )\n}\n", "/// <reference path=\"./global.d.ts\" />\n\nexport { Fragment, jsx, jsxs, jsxDEV } from \"@jsxpdf/core/jsx-runtime\"\n"],
5
- "mappings": "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",
6
- "names": ["Document", "Page", "View", "chunk", "pdf"]
3
+ "sources": ["../../core/src/binary.ts", "../../core/src/binding.ts", "../../core/src/color.ts", "../../core/src/vendor/base14-font-metrics.json", "../../core/src/font.ts", "../../core/src/primitives.ts", "../../core/src/jsx.ts", "../../core/src/style.ts", "../../core/src/node.ts", "../../core/src/profile.ts", "../../core/src/winansi.ts", "../../layout/src/yoga-runtime.ts", "../../layout/src/pdfkit-runtime.ts", "../../layout/src/text-engine.ts", "../../layout/src/table.ts", "../../layout/src/yoga.ts", "../../layout/src/paginate.ts", "../../layout/src/normalize.ts", "../../layout/src/precompile.ts", "../../layout/src/repeat.ts", "../../layout/src/index.ts", "../../render/src/runtime.ts", "../../render/src/index.ts", "../../render-pdfkit/src/vendor/svg-to-pdfkit.js", "../../render-pdfkit/src/pdfkit-stdfont-state.ts", "../../render-pdfkit/src/pdfkit-runtime.ts", "../../render-pdfkit/src/attachments.ts", "../../render-pdfkit/src/output-intent.ts", "../../render-pdfkit/src/tagged.ts", "../../render-pdfkit/src/xmp.ts", "../../render-pdfkit/src/index.ts", "../src/render.ts", "../../core/src/jsx-runtime.ts", "../src/repeat.ts", "../../node/src/index.ts"],
4
+ "sourcesContent": ["export type BinaryInput = Uint8Array | ArrayBuffer\n\nexport const isArrayBuffer = (value: unknown): value is ArrayBuffer =>\n typeof ArrayBuffer !== \"undefined\" && value instanceof ArrayBuffer\n\nexport const isBinaryInput = (value: unknown): value is BinaryInput =>\n value instanceof Uint8Array || isArrayBuffer(value)\n\n/** react-pdf Image `src`/`source` objects (`{ uri }`, `{ data }`, \u2026). */\nexport const unwrapImageSource = (source: unknown): unknown => {\n if (source == null || typeof source === \"string\" || isBinaryInput(source)) return source\n if (typeof source !== \"object\") return source\n const record = source as Record<string, unknown>\n if (typeof record.uri === \"string\") return record.uri\n if (typeof record.url === \"string\") return record.url\n if (typeof record.src === \"string\") return record.src\n if (record.data != null) return unwrapImageSource(record.data)\n return source\n}\n\nexport const toUint8Array = (value: BinaryInput): Uint8Array =>\n value instanceof Uint8Array ? value : new Uint8Array(value)\n\nexport const base64ToBytes = (value: string): Uint8Array => {\n if (typeof Buffer !== \"undefined\") {\n // Copy via set() instead of Uint8Array.from(iterable): the iterable path\n // is an order of magnitude slower for large payloads.\n const buffer = Buffer.from(value, \"base64\")\n const bytes = new Uint8Array(buffer.byteLength)\n bytes.set(buffer)\n return bytes\n }\n\n const decoded = atob(value)\n const bytes = new Uint8Array(decoded.length)\n for (let index = 0; index < decoded.length; index += 1) {\n bytes[index] = decoded.charCodeAt(index)\n }\n return bytes\n}\n\nexport const base64ToText = (value: string): string => new TextDecoder().decode(base64ToBytes(value))\n\nexport const bytesToBase64 = (value: Uint8Array): string => {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(value).toString(\"base64\")\n }\n\n let binary = \"\"\n for (let index = 0; index < value.length; index += 1) {\n binary += String.fromCharCode(value[index])\n }\n return btoa(binary)\n}\n\nexport const concatUint8Arrays = (chunks: Uint8Array[]): Uint8Array => {\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0)\n const merged = new Uint8Array(totalLength)\n let offset = 0\n\n for (const chunk of chunks) {\n merged.set(chunk, offset)\n offset += chunk.length\n }\n\n return merged\n}\n\nexport const readUint32BE = (value: Uint8Array, offset: number): number =>\n new DataView(value.buffer, value.byteOffset, value.byteLength).getUint32(offset, false)\n", "import { base64ToText, bytesToBase64 } from \"./binary\"\n\nexport type BindingPath = Array<string | number>\n\nconst BINDING_TOKEN_SYMBOL = Symbol.for(\"jsxpdf.bindingToken\")\ntype BindingAccessHandler = (path: BindingPath) => void\nconst BINDING_MARKER_PREFIX = \"\\u0001jsxpdf.binding:\"\nconst BINDING_MARKER_SUFFIX = \"\\u0002\"\n\nexport type BindingToken = {\n readonly [BINDING_TOKEN_SYMBOL]: true\n readonly path: BindingPath\n readonly value: unknown\n}\n\nexport type BindingTemplatePart =\n | { type: \"text\"; value: string }\n | { type: \"binding\"; path: BindingPath }\n\nconst DEFAULT_BINDING_PRIMITIVE = \"\"\nconst DEFAULT_SCHEMA_NUMBER = 999\n\nconst encodeBindingPath = (path: BindingPath): string => {\n const json = JSON.stringify(path)\n return bytesToBase64(new TextEncoder().encode(json))\n}\n\nconst decodeBindingPath = (encoded: string): BindingPath | null => {\n try {\n const json = base64ToText(encoded)\n const parsed = JSON.parse(json)\n return Array.isArray(parsed) ? parsed as BindingPath : null\n } catch {\n return null\n }\n}\n\nconst serializeBindingMarker = (path: BindingPath): string => (\n `${BINDING_MARKER_PREFIX}${encodeBindingPath(path)}${BINDING_MARKER_SUFFIX}`\n)\n\nexport const parseBindingTemplateString = (value: string): BindingTemplatePart[] | null => {\n if (!value.includes(BINDING_MARKER_PREFIX)) return null\n\n const parts: BindingTemplatePart[] = []\n let cursor = 0\n\n while (cursor < value.length) {\n const markerStart = value.indexOf(BINDING_MARKER_PREFIX, cursor)\n if (markerStart < 0) {\n if (cursor < value.length) parts.push({ type: \"text\", value: value.slice(cursor) })\n break\n }\n\n if (markerStart > cursor) {\n parts.push({ type: \"text\", value: value.slice(cursor, markerStart) })\n }\n\n const encodedStart = markerStart + BINDING_MARKER_PREFIX.length\n const markerEnd = value.indexOf(BINDING_MARKER_SUFFIX, encodedStart)\n if (markerEnd < 0) return null\n\n const path = decodeBindingPath(value.slice(encodedStart, markerEnd))\n if (!path) return null\n parts.push({ type: \"binding\", path })\n cursor = markerEnd + BINDING_MARKER_SUFFIX.length\n }\n\n return parts.some((part) => part.type === \"binding\") ? parts : null\n}\n\nexport const createBindingToken = (\n path: BindingPath,\n value: unknown = DEFAULT_BINDING_PRIMITIVE,\n onAccess?: BindingAccessHandler,\n templateString = false,\n): BindingToken => {\n const target = {\n [BINDING_TOKEN_SYMBOL]: true as const,\n path: [...path],\n value,\n }\n\n return new Proxy(target, {\n get(currentTarget, property, receiver) {\n if (property === BINDING_TOKEN_SYMBOL || property === \"path\" || property === \"value\") {\n return Reflect.get(currentTarget, property, receiver)\n }\n if (templateString && (property === \"toLocaleDateString\" || property === \"toDateString\" || property === \"toLocaleString\")) {\n return () => serializeBindingMarker(currentTarget.path)\n }\n if (property === \"toString\") {\n return () => templateString\n ? serializeBindingMarker(currentTarget.path)\n : String(currentTarget.value ?? DEFAULT_BINDING_PRIMITIVE)\n }\n if (property === \"valueOf\") {\n return () => templateString\n ? DEFAULT_SCHEMA_NUMBER\n : currentTarget.value ?? DEFAULT_BINDING_PRIMITIVE\n }\n if (property === Symbol.toPrimitive) {\n return (hint: string) => templateString\n ? (hint === \"number\" ? DEFAULT_SCHEMA_NUMBER : serializeBindingMarker(currentTarget.path))\n : currentTarget.value ?? DEFAULT_BINDING_PRIMITIVE\n }\n if (typeof property === \"symbol\") return Reflect.get(currentTarget, property, receiver)\n const nextPath = [...currentTarget.path, property]\n onAccess?.(nextPath)\n return createBindingToken(nextPath, DEFAULT_BINDING_PRIMITIVE, onAccess, templateString)\n }\n }) as BindingToken\n}\n\nexport const isBindingToken = (value: unknown): value is BindingToken => {\n return Boolean(value && typeof value === \"object\" && (value as Record<PropertyKey, unknown>)[BINDING_TOKEN_SYMBOL] === true)\n}\n", "import colorString from \"color-string\"\n\nexport type PdfColor = {\n value: string\n opacity: number\n}\n\nconst clampOpacity = (value: number | undefined): number => {\n if (value == null || Number.isNaN(value)) return 1\n return Math.max(0, Math.min(1, value))\n}\n\n// Bounded memo: colors repeat heavily across nodes and renders.\nconst RESOLVE_COLOR_CACHE_LIMIT = 2048\nlet resolveColorCache = new Map<string, PdfColor>()\n\nexport const resolveColor = (input: string | undefined, fallback = \"#000000\"): PdfColor => {\n if (!input) return { value: fallback, opacity: 1 }\n const cached = resolveColorCache.get(input)\n if (cached) return cached\n\n const parsed = colorString.get(input)\n let resolved: PdfColor\n if (!parsed) {\n resolved = { value: input, opacity: 1 }\n } else if (parsed.model === \"rgb\") {\n const [red, green, blue, alpha] = parsed.value as [number, number, number, number?]\n resolved = {\n value: colorString.to.hex(red, green, blue) ?? input,\n opacity: clampOpacity(alpha)\n }\n } else {\n const rgb = colorString.to.rgb(...(parsed.value as [number, number, number, number?]))\n const parsedRgb = rgb ? colorString.get(rgb) : null\n if (!parsedRgb || parsedRgb.model !== \"rgb\") {\n resolved = { value: input, opacity: 1 }\n } else {\n const [red, green, blue, alpha] = parsedRgb.value as [number, number, number, number?]\n resolved = {\n value: colorString.to.hex(red, green, blue) ?? input,\n opacity: clampOpacity(alpha)\n }\n }\n }\n\n if (resolveColorCache.size >= RESOLVE_COLOR_CACHE_LIMIT) {\n resolveColorCache = new Map()\n }\n resolveColorCache.set(input, resolved)\n return resolved\n}\n", "{\"Courier\":{\"ascender\":629,\"descender\":-157,\"capHeight\":562,\"xHeight\":426,\"lineGap\":269,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,0,600,0,600,600,600,600,600,600,600,600,600,600,600,0,600,0,0,600,600,600,600,600,600,600,600,600,600,600,600,0,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]},\"Courier-Bold\":{\"ascender\":629,\"descender\":-157,\"capHeight\":562,\"xHeight\":439,\"lineGap\":265,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,0,600,0,600,600,600,600,600,600,600,600,600,600,600,0,600,0,0,600,600,600,600,600,600,600,600,600,600,600,600,0,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]},\"Courier-Oblique\":{\"ascender\":629,\"descender\":-157,\"capHeight\":562,\"xHeight\":426,\"lineGap\":269,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,0,600,0,600,600,600,600,600,600,600,600,600,600,600,0,600,0,0,600,600,600,600,600,600,600,600,600,600,600,600,0,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]},\"Courier-BoldOblique\":{\"ascender\":629,\"descender\":-157,\"capHeight\":562,\"xHeight\":439,\"lineGap\":265,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,0,600,0,600,600,600,600,600,600,600,600,600,600,600,0,600,0,0,600,600,600,600,600,600,600,600,600,600,600,600,0,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]},\"Helvetica\":{\"ascender\":718,\"descender\":-207,\"capHeight\":718,\"xHeight\":523,\"lineGap\":231,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,0,556,0,222,556,333,1000,556,556,333,1000,667,333,1000,0,611,0,0,222,222,333,333,350,556,1000,333,1000,500,333,944,0,500,500,278,333,556,556,556,556,260,556,333,737,370,556,584,333,737,333,400,584,333,333,333,556,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1000,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,584,611,556,556,556,556,500,556,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]},\"Helvetica-Bold\":{\"ascender\":718,\"descender\":-207,\"capHeight\":718,\"xHeight\":532,\"lineGap\":265,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,0,556,0,278,556,500,1000,556,556,333,1000,667,333,1000,0,611,0,0,278,278,500,500,350,556,1000,333,1000,556,333,944,0,500,556,278,333,556,556,556,556,280,556,333,737,370,556,584,333,737,333,400,584,333,333,333,611,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1000,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,584,611,611,611,611,611,556,611,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]},\"Helvetica-Oblique\":{\"ascender\":718,\"descender\":-207,\"capHeight\":718,\"xHeight\":523,\"lineGap\":231,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,0,556,0,222,556,333,1000,556,556,333,1000,667,333,1000,0,611,0,0,222,222,333,333,350,556,1000,333,1000,500,333,944,0,500,500,278,333,556,556,556,556,260,556,333,737,370,556,584,333,737,333,400,584,333,333,333,556,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1000,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,584,611,556,556,556,556,500,556,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]},\"Helvetica-BoldOblique\":{\"ascender\":718,\"descender\":-207,\"capHeight\":718,\"xHeight\":532,\"lineGap\":265,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,0,556,0,278,556,500,1000,556,556,333,1000,667,333,1000,0,611,0,0,278,278,500,500,350,556,1000,333,1000,556,333,944,0,500,556,278,333,556,556,556,556,280,556,333,737,370,556,584,333,737,333,400,584,333,333,333,611,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1000,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,584,611,611,611,611,611,556,611,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]},\"Times-Roman\":{\"ascender\":683,\"descender\":-217,\"capHeight\":662,\"xHeight\":450,\"lineGap\":216,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,250,333,408,500,500,833,778,180,333,333,500,564,250,333,250,278,500,500,500,500,500,500,500,500,500,500,278,278,564,564,564,444,921,722,667,667,722,611,556,722,722,333,389,722,611,889,722,722,556,722,667,556,611,722,722,944,722,722,611,333,278,333,469,500,333,444,500,444,500,444,333,500,500,278,278,500,278,778,500,500,500,500,333,389,278,500,500,722,500,500,444,480,200,480,541,0,500,0,333,500,444,1000,500,500,333,1000,556,333,889,0,611,0,0,333,333,444,444,350,500,1000,333,980,389,333,722,0,444,500,250,333,500,500,500,500,200,500,333,760,276,500,564,333,760,333,400,564,300,300,333,500,453,250,333,300,310,500,750,750,750,444,722,722,722,722,722,722,889,667,611,611,611,611,333,333,333,333,722,722,722,722,722,722,722,564,722,722,722,722,722,722,556,500,444,444,444,444,444,444,667,444,444,444,444,444,278,278,278,278,500,500,500,500,500,500,500,564,500,500,500,500,500,500,500,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]},\"Times-Bold\":{\"ascender\":683,\"descender\":-217,\"capHeight\":676,\"xHeight\":461,\"lineGap\":253,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,250,333,555,500,500,1000,833,278,333,333,500,570,250,333,250,278,500,500,500,500,500,500,500,500,500,500,333,333,570,570,570,500,930,722,667,722,722,667,611,778,778,389,500,778,667,944,722,778,611,778,722,556,667,722,722,1000,722,722,667,333,278,333,581,500,333,500,556,444,556,444,333,500,556,278,333,556,278,833,556,500,556,556,444,389,333,556,500,722,500,500,444,394,220,394,520,0,500,0,333,500,500,1000,500,500,333,1000,556,333,1000,0,667,0,0,333,333,500,500,350,500,1000,333,1000,389,333,722,0,444,500,250,333,500,500,500,500,220,500,333,747,300,500,570,333,747,333,400,570,300,300,333,556,540,250,333,300,330,500,750,750,750,500,722,722,722,722,722,722,1000,722,667,667,667,667,389,389,389,389,722,722,778,778,778,778,778,570,778,722,722,722,722,722,611,556,500,500,500,500,500,500,722,444,444,444,444,444,278,278,278,278,500,556,500,500,500,500,500,570,500,556,556,556,556,500,556,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]},\"Times-Italic\":{\"ascender\":683,\"descender\":-217,\"capHeight\":653,\"xHeight\":441,\"lineGap\":200,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,250,333,420,500,500,833,778,214,333,333,500,675,250,333,250,278,500,500,500,500,500,500,500,500,500,500,333,333,675,675,675,500,920,611,611,667,722,611,611,722,722,333,444,667,556,833,667,722,611,722,611,500,556,722,611,833,611,556,556,389,278,389,422,500,333,500,500,444,500,444,278,500,500,278,278,444,278,722,500,500,500,500,389,389,278,500,444,667,444,444,389,400,275,400,541,0,500,0,333,500,556,889,500,500,333,1000,500,333,944,0,556,0,0,333,333,556,556,350,500,889,333,980,389,333,667,0,389,444,250,389,500,500,500,500,275,500,333,760,276,500,675,333,760,333,400,675,300,300,333,500,523,250,333,300,310,500,750,750,750,500,611,611,611,611,611,611,889,667,611,611,611,611,333,333,333,333,722,667,722,722,722,722,722,675,722,722,722,722,722,556,611,500,500,500,500,500,500,500,667,444,444,444,444,444,278,278,278,278,500,500,500,500,500,500,500,675,500,500,500,500,500,444,500,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]},\"Times-BoldItalic\":{\"ascender\":683,\"descender\":-217,\"capHeight\":669,\"xHeight\":462,\"lineGap\":239,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,250,389,555,500,500,833,778,278,333,333,500,570,250,333,250,278,500,500,500,500,500,500,500,500,500,500,333,333,570,570,570,500,832,667,667,667,722,667,667,722,778,389,500,667,611,889,722,722,611,722,667,556,611,722,667,889,667,611,611,333,278,333,570,500,333,500,500,444,500,444,333,500,556,278,278,500,278,778,556,500,500,500,389,389,278,556,444,667,500,444,389,348,220,348,570,0,500,0,333,500,500,1000,500,500,333,1000,556,333,944,0,611,0,0,333,333,500,500,350,500,1000,333,1000,389,333,722,0,389,444,250,389,500,500,500,500,220,500,333,747,266,500,606,333,747,333,400,570,300,300,333,576,500,250,333,300,300,500,750,750,750,500,667,667,667,667,667,667,944,667,667,667,667,667,389,389,389,389,722,722,722,722,722,722,722,570,722,722,722,722,722,611,611,500,500,500,500,500,500,500,722,444,444,444,444,444,278,278,278,278,500,556,500,500,500,500,500,570,500,556,556,556,556,444,500,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]},\"Symbol\":{\"ascender\":0,\"descender\":0,\"capHeight\":0,\"xHeight\":0,\"lineGap\":1303,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,250,333,0,500,0,833,778,0,333,333,0,549,250,0,250,278,500,500,500,500,500,500,500,500,500,500,278,278,549,549,549,444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,333,0,333,0,500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,480,200,480,0,0,750,0,0,500,0,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,460,0,0,0,0,0,0,0,0,0,0,250,0,0,0,0,0,0,0,0,0,0,0,713,0,0,0,400,549,0,0,0,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0,0,0,0,0,0,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]},\"ZapfDingbats\":{\"ascender\":0,\"descender\":0,\"capHeight\":0,\"xHeight\":0,\"lineGap\":963,\"widths\":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\"names\":[\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\".notdef\",\"Euro\",\".notdef\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\".notdef\",\"Zcaron\",\".notdef\",\".notdef\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\".notdef\",\"zcaron\",\"ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\\\\\"]}}", "import type { HyphenationCallback } from \"./types\"\nimport base14Metrics from \"./vendor/base14-font-metrics.json\"\n\nexport type FontStyle = \"normal\" | \"italic\" | \"oblique\"\nexport type FontWeight = \"thin\" | \"ultralight\" | \"light\" | \"normal\" | \"medium\" | \"semibold\" | \"bold\" | \"ultrabold\" | \"heavy\" | number\n\nexport type FontSource = {\n src: string\n fontStyle?: FontStyle\n fontWeight?: FontWeight\n}\n\nexport type FontRegistration = {\n family: string\n} & FontSource\n\nexport type BulkFontRegistration = {\n family: string\n fonts: FontSource[]\n}\n\nconst FONT_WEIGHT_KEYWORDS = new Set<Exclude<FontWeight, number>>([\n \"thin\",\n \"ultralight\",\n \"light\",\n \"normal\",\n \"medium\",\n \"semibold\",\n \"bold\",\n \"ultrabold\",\n \"heavy\"\n])\n\nexport const BUILTIN_PDF_FONTS = new Set(Object.keys(base14Metrics))\n\nconst BASE14_ALIASES: Record<string, string> = {}\nfor (const name of Object.keys(base14Metrics)) {\n BASE14_ALIASES[name.toLowerCase().replaceAll(\"-\", \"\")] = name\n}\n\nexport const normalizeStandardFamily = (family: string): string =>\n BASE14_ALIASES[family.toLowerCase().replaceAll(\"-\", \"\")] ?? family\n\n/**\n * Metric-compatible TrueType substitutes for the base-14 families\n * (`./vendor/fonts`, Liberation 2.1.5). Lets the renderer embed font\n * programs (required by PDF/UA and PDF/A) while layout keeps using the AFM\n * metrics, so advances and line heights are unchanged. Symbol and\n * ZapfDingbats have no metric-compatible OFL equivalent and stay standard.\n */\nconst VENDORED_FACE_FILES: Record<string, string> = {\n Helvetica: \"LiberationSans-Regular.ttf\",\n \"Helvetica-Bold\": \"LiberationSans-Bold.ttf\",\n \"Helvetica-Oblique\": \"LiberationSans-Italic.ttf\",\n \"Helvetica-BoldOblique\": \"LiberationSans-BoldItalic.ttf\",\n \"Times-Roman\": \"LiberationSerif-Regular.ttf\",\n \"Times-Bold\": \"LiberationSerif-Bold.ttf\",\n \"Times-Italic\": \"LiberationSerif-Italic.ttf\",\n \"Times-BoldItalic\": \"LiberationSerif-BoldItalic.ttf\",\n Courier: \"LiberationMono-Regular.ttf\",\n \"Courier-Bold\": \"LiberationMono-Bold.ttf\",\n \"Courier-Oblique\": \"LiberationMono-Italic.ttf\",\n \"Courier-BoldOblique\": \"LiberationMono-BoldItalic.ttf\"\n}\n\n/**\n * File URL for a vendored font, resolved relative to this module so it\n * works both from source (`src/vendor/fonts/\u2026`) and from the packaged\n * bundle (`dist/vendor/fonts/\u2026`; the build script copies the directory).\n */\nconst vendoredFontUrl = (file: string): string =>\n new URL(`./vendor/fonts/${file}`, import.meta.url).href\n\n/**\n * Map a requested family/weight/style onto one of the 14 standard faces.\n * Returns null for families outside the base-14 set.\n */\nexport const resolveStandardFace = (\n family: string,\n fontWeight?: string | number,\n fontStyle?: FontStyle\n): string | null => {\n const normalized = normalizeStandardFamily(family)\n if (!BUILTIN_PDF_FONTS.has(normalized)) return null\n\n // Composite faces (\"Times-Bold\", \"Courier-Oblique\", ...) already encode their style.\n if (/-(Bold|Oblique|Italic|BoldOblique|BoldItalic|Roman)$/.test(normalized)) return normalized\n\n const weightValue =\n typeof fontWeight === \"number\"\n ? fontWeight\n : ({\n thin: 100,\n ultralight: 200,\n light: 300,\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n ultrabold: 800,\n heavy: 900\n } as Record<string, number>)[fontWeight ?? \"normal\"] ?? 400\n const isBold = weightValue >= 600\n const isItalic = fontStyle === \"italic\" || fontStyle === \"oblique\"\n const hasItalicName = /Italic/.test(normalized)\n\n let suffix = \"\"\n if (isBold && isItalic) suffix = hasItalicName ? \"BoldItalic\" : \"BoldOblique\"\n else if (isBold) suffix = \"Bold\"\n else if (isItalic) suffix = hasItalicName ? \"Italic\" : \"Oblique\"\n\n if (suffix === \"\") return normalized\n const candidate = `${normalized}-${suffix}`\n return BUILTIN_PDF_FONTS.has(candidate) ? candidate : normalized\n}\n\nexport type StandardFontMetrics = {\n ascender: number\n descender: number\n capHeight: number\n xHeight: number\n lineGap: number\n widths: number[]\n}\n\nexport const getStandardFontMetrics = (name: string): StandardFontMetrics | undefined => {\n const direct = (base14Metrics as Record<string, StandardFontMetrics>)[name]\n if (direct) return direct\n return (base14Metrics as Record<string, StandardFontMetrics>)[BASE14_ALIASES[name.toLowerCase().replaceAll(\"-\", \"\")]]\n}\n\n// Minimal structural view of a parsed fontkit font. Core stays decoupled from\n// fontkit's own typings on purpose.\nexport type EmbeddedFont = {\n postscriptName?: string\n unitsPerEm: number\n ascent: number\n descent: number\n lineGap: number\n layout(text: string): {\n glyphs: Array<{ id: number; advanceWidth: number; codePoints: number[] }>\n positions: Array<{ xAdvance: number; yAdvance: number; xOffset: number; yOffset: number }>\n }\n}\n\nexport type ResolvedFontData =\n | { kind: \"standard\"; name: string; metrics: StandardFontMetrics }\n | {\n kind: \"embedded\"\n src: string\n font: EmbeddedFont\n /**\n * AFM metrics override for vendored base-14 substitutes: layout keeps\n * measuring exactly like the standard face while the embedded outlines\n * come from the TrueType file. Absent for user-registered fonts, which\n * measure with their own OpenType metrics.\n */\n metrics?: StandardFontMetrics\n }\n\ntype FontkitModule = {\n create(source: Buffer | Uint8Array, postscriptName?: string): EmbeddedFont | { fonts?: EmbeddedFont[] }\n}\n\nlet fontkitPromise: Promise<FontkitModule> | null = null\nconst loadFontkit = (): Promise<FontkitModule> => {\n fontkitPromise ??= import(\"fontkit\") as Promise<FontkitModule>\n return fontkitPromise\n}\n\nconst normalizeFontWeight = (fontWeight: string | number | undefined): FontWeight | undefined => {\n if (typeof fontWeight === \"number\") return fontWeight\n return fontWeight && FONT_WEIGHT_KEYWORDS.has(fontWeight as Exclude<FontWeight, number>)\n ? fontWeight as Exclude<FontWeight, number>\n : undefined\n}\n\nconst toFontFamilyList = (fontFamily: string | string[] | undefined): string[] => {\n if (fontFamily == null) return []\n return Array.isArray(fontFamily) ? fontFamily : [fontFamily]\n}\n\nconst FONT_WEIGHT_VALUE_BY_NAME: Record<string, number> = {\n thin: 100,\n ultralight: 200,\n light: 300,\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n ultrabold: 800,\n heavy: 900\n}\n\nconst weightDistance = (registered: FontWeight | undefined, requested: FontWeight | undefined): number => {\n if (requested == null || registered == null) return 0\n const a = typeof registered === \"number\" ? registered : FONT_WEIGHT_VALUE_BY_NAME[registered] ?? 400\n const b = typeof requested === \"number\" ? requested : FONT_WEIGHT_VALUE_BY_NAME[requested] ?? 400\n return Math.abs(a - b)\n}\n\nconst isBrowserRuntime = (): boolean => typeof window !== \"undefined\" && typeof document !== \"undefined\"\n\nclass FontRegistry {\n private fonts = new Map<string, FontRegistration[]>()\n private hyphenationCallback: HyphenationCallback | null = null\n private sourceCache = new Map<string, string | undefined>()\n private renderSourceCache = new Map<string, string | Uint8Array | undefined>()\n private renderSourceBySrc = new Map<string, string | Uint8Array>()\n private fontDataCache = new Map<string, ResolvedFontData>()\n private fontDataMemo = new Map<string, ResolvedFontData | null>()\n private binaryBySrc = new Map<string, Uint8Array>()\n\n private descriptorKey(descriptor: {\n fontFamily: string | string[]\n fontWeight?: string | number\n fontStyle?: string\n }): string {\n const families = toFontFamilyList(descriptor.fontFamily).join(\",\")\n const weight = normalizeFontWeight(descriptor.fontWeight)\n const weightKey = weight == null || weight === \"normal\" || weight === 400 ? \"\" : String(weight)\n const styleKey = !descriptor.fontStyle || descriptor.fontStyle === \"normal\" ? \"\" : descriptor.fontStyle\n return `${families}::${weightKey}::${styleKey}`\n }\n\n register(font: FontRegistration | BulkFontRegistration): void {\n this.sourceCache.clear()\n this.renderSourceCache.clear()\n this.renderSourceBySrc.clear()\n this.fontDataCache.clear()\n this.fontDataMemo.clear()\n\n const entries = \"fonts\" in font\n ? font.fonts.map((entry) => ({ family: font.family, ...entry }))\n : [{ family: font.family, src: font.src, fontWeight: font.fontWeight, fontStyle: font.fontStyle }]\n this.fonts.set(font.family, entries)\n }\n\n get(family: string | string[] | undefined): FontRegistration | undefined {\n for (const entry of toFontFamilyList(family)) {\n const resolved = this.fonts.get(entry)?.[0]\n if (resolved) return resolved\n }\n return undefined\n }\n\n clear(): void {\n this.fonts.clear()\n this.hyphenationCallback = null\n this.sourceCache.clear()\n this.renderSourceCache.clear()\n this.renderSourceBySrc.clear()\n this.fontDataCache.clear()\n this.fontDataMemo.clear()\n this.binaryBySrc.clear()\n }\n\n registerHyphenationCallback(callback: HyphenationCallback): void {\n this.hyphenationCallback = callback\n }\n\n getHyphenationCallback(): HyphenationCallback | null {\n return this.hyphenationCallback\n }\n\n clearHyphenationCallback(): void {\n this.hyphenationCallback = null\n }\n\n /**\n * Resolve and parse the best matching font face for a descriptor.\n * Standard PDF base-14 faces resolve without any I/O; custom families are\n * fetched/read and parsed with fontkit exactly once and then cached.\n */\n async load(descriptor: { fontFamily: string | string[]; fontWeight?: string | number; fontStyle?: FontStyle }): Promise<ResolvedFontData> {\n let lastError: unknown\n for (const family of toFontFamilyList(descriptor.fontFamily)) {\n try {\n return await this.resolveFontData({\n fontFamily: family,\n fontWeight: descriptor.fontWeight,\n fontStyle: descriptor.fontStyle\n })\n } catch (error) {\n lastError = error\n }\n }\n if (lastError) throw lastError\n throw new Error(\n `Unable to load font for family \"${toFontFamilyList(descriptor.fontFamily).join(\", \")}\". Register it with Font.register(...) first.`\n )\n }\n\n getFontData(descriptor: { fontFamily: string | string[]; fontWeight?: string | number; fontStyle?: FontStyle }): ResolvedFontData | null {\n // Hot path: resolveStyle/shapeText call this for every text measurement.\n const fullKey = this.descriptorKey(descriptor)\n const memo = this.fontDataMemo.get(fullKey)\n if (memo !== undefined) return memo\n const resolved = this.resolveFontDataSlow(descriptor)\n this.fontDataMemo.set(fullKey, resolved)\n return resolved\n }\n\n private resolveFontDataSlow(descriptor: { fontFamily: string | string[]; fontWeight?: string | number; fontStyle?: FontStyle }): ResolvedFontData | null {\n // A preloaded vendored embedded face (see resolveFontData) wins over the\n // I/O-free standard face so sync shaping and rendering agree on the\n // encoding. Standard entries cached here fall through to the identical\n // logic below.\n const preloaded = this.fontDataCache.get(this.descriptorKey(descriptor))\n if (preloaded && preloaded.kind === \"embedded\") return preloaded\n for (const family of toFontFamilyList(descriptor.fontFamily)) {\n if (!this.fonts.has(family)) {\n const face = resolveStandardFace(family, descriptor.fontWeight, descriptor.fontStyle)\n if (face) {\n return { kind: \"standard\", name: face, metrics: getStandardFontMetrics(face)! }\n }\n }\n const cached = this.fontDataCache.get(this.descriptorKey({ ...descriptor, fontFamily: family }))\n if (cached) return cached\n }\n // Family-level fallback: any previously parsed face for a listed family.\n for (const family of toFontFamilyList(descriptor.fontFamily)) {\n const prefix = `${family}::`\n for (const [key, value] of this.fontDataCache) {\n if (key.startsWith(prefix)) return value\n }\n }\n return null\n }\n\n getSource(descriptor: { fontFamily: string | string[]; fontWeight?: string | number; fontStyle?: FontStyle }): string | undefined {\n const cacheKey = this.descriptorKey(descriptor)\n if (this.sourceCache.has(cacheKey)) return this.sourceCache.get(cacheKey)\n let source: string | undefined\n for (const family of toFontFamilyList(descriptor.fontFamily)) {\n if (!this.fonts.has(family)) continue\n const registrations = this.fonts.get(family)!\n const requestedWeight = normalizeFontWeight(descriptor.fontWeight)\n const requestedStyle = descriptor.fontStyle ?? \"normal\"\n const best = registrations\n .map((registration, index) => ({\n registration,\n score:\n weightDistance(registration.fontWeight, requestedWeight) +\n ((registration.fontStyle ?? \"normal\") === requestedStyle ? 0 : 10) +\n index * 0.01\n }))\n .sort((a, b) => a.score - b.score)[0]?.registration\n if (best?.src) {\n source = best.src\n break\n }\n }\n if (source == null) {\n // Implicit metric-compatible substitutes for the base-14 families so\n // renderers can embed without an explicit Font.register(...). User\n // registrations above always win. The file: URL only resolves where\n // fs access exists (Node); elsewhere loading fails downstream and the\n // pipeline falls back to standard fonts.\n for (const family of toFontFamilyList(descriptor.fontFamily)) {\n if (this.fonts.has(family)) continue\n const face = resolveStandardFace(family, descriptor.fontWeight, descriptor.fontStyle)\n const file = face ? VENDORED_FACE_FILES[face] : undefined\n if (file) {\n source = vendoredFontUrl(file)\n break\n }\n }\n }\n this.sourceCache.set(cacheKey, source)\n return source\n }\n\n getRenderSource(descriptor: { fontFamily: string | string[]; fontWeight?: string | number; fontStyle?: FontStyle }): string | Uint8Array | undefined {\n const cacheKey = this.descriptorKey(descriptor)\n if (this.renderSourceCache.has(cacheKey)) return this.renderSourceCache.get(cacheKey)\n\n const source = this.getSource(descriptor)\n if (source == null) return undefined\n if (BUILTIN_PDF_FONTS.has(source)) {\n this.renderSourceCache.set(cacheKey, source)\n return source\n }\n const cachedBySrc = this.renderSourceBySrc.get(source)\n if (cachedBySrc) {\n this.renderSourceCache.set(cacheKey, cachedBySrc)\n return cachedBySrc\n }\n if (isBrowserRuntime()) {\n throw new Error(\n `Font source \"${source}\" was not preloaded for browser rendering. Register the font with a browser-accessible URL or data URI before rendering.`\n )\n }\n\n this.renderSourceCache.set(cacheKey, source)\n return source\n }\n\n private async fetchBinary(source: string): Promise<Uint8Array> {\n const cached = this.binaryBySrc.get(source)\n if (cached) return cached\n let bytes: Uint8Array\n if (/^data:/.test(source)) {\n const response = await fetch(source)\n bytes = new Uint8Array(await response.arrayBuffer())\n } else if (isBrowserRuntime()) {\n const response = await fetch(source)\n if (!response.ok) {\n throw new Error(`Unable to load font from \"${source}\". Use a public URL, imported asset URL, or data URI.`)\n }\n bytes = new Uint8Array(await response.arrayBuffer())\n } else {\n // Hidden behind an indirect import so browser bundles don't try to\n // resolve node builtins. file: URLs (vendored base-14 substitutes, see\n // VENDORED_FACE_FILES) are converted to URL objects, which readFile\n // accepts; environments without fs access throw and callers fall back\n // to standard fonts.\n const loadNodeFs = new Function(\"return import('node:fs/promises')\") as () => Promise<{ readFile: (path: string | URL) => Promise<Buffer> }>\n const fsModule = await loadNodeFs()\n bytes = new Uint8Array(await fsModule.readFile(source.startsWith(\"file:\") ? new URL(source) : source))\n }\n this.binaryBySrc.set(source, bytes)\n return bytes\n }\n\n private standardFromSrc(src: string, descriptor: { fontWeight?: string | number; fontStyle?: FontStyle }): ResolvedFontData | null {\n if (!BUILTIN_PDF_FONTS.has(src)) return null\n const face = resolveStandardFace(src, descriptor.fontWeight, descriptor.fontStyle)\n const metrics = face ? getStandardFontMetrics(face) : undefined\n return face && metrics ? { kind: \"standard\", name: face, metrics } : null\n }\n\n private async tryVendoredFace(\n family: string,\n descriptor: { fontWeight?: string | number; fontStyle?: FontStyle }\n ): Promise<ResolvedFontData | null> {\n const face = resolveStandardFace(family, descriptor.fontWeight, descriptor.fontStyle)\n const file = face ? VENDORED_FACE_FILES[face] : undefined\n const metrics = face ? getStandardFontMetrics(face) : undefined\n if (!face || !file || !metrics) return null\n const src = vendoredFontUrl(file)\n try {\n const bytes = await this.fetchBinary(src)\n const fontkit = await loadFontkit()\n const created = fontkit.create(bytes)\n const font = Array.isArray((created as { fonts?: EmbeddedFont[] }).fonts)\n ? (created as { fonts: EmbeddedFont[] }).fonts[0]\n : (created as EmbeddedFont)\n if (!font || typeof font.layout !== \"function\") return null\n const resolved: ResolvedFontData = { kind: \"embedded\", src, font, metrics }\n this.renderSourceBySrc.set(src, bytes)\n return resolved\n } catch {\n // Missing files, workers without fs access, parse errors: fall back\n // to the unembedded standard face (previous behavior).\n return null\n }\n }\n\n private async resolveFontData(descriptor: {\n fontFamily: string | string[]\n fontWeight?: string | number\n fontStyle?: FontStyle\n }): Promise<ResolvedFontData> {\n const cacheKey = this.descriptorKey(descriptor)\n const cached = this.fontDataCache.get(cacheKey)\n if (cached) return cached\n\n for (const family of toFontFamilyList(descriptor.fontFamily)) {\n if (!this.fonts.has(family)) {\n const vendored = await this.tryVendoredFace(family, descriptor)\n if (vendored) {\n this.fontDataCache.set(cacheKey, vendored)\n return vendored\n }\n const face = resolveStandardFace(family, descriptor.fontWeight, descriptor.fontStyle)\n const metrics = face ? getStandardFontMetrics(face) : undefined\n if (face && metrics) {\n const resolved: ResolvedFontData = { kind: \"standard\", name: face, metrics }\n this.fontDataCache.set(cacheKey, resolved)\n return resolved\n }\n }\n\n const src = this.getSource({ ...descriptor, fontFamily: family })\n if (!src) continue\n\n // Sources may themselves be standard font names (aliases like\n // { family: \"Body\", src: \"Times-Roman\" }) \u2014 resolve without I/O.\n const fromSrc = this.standardFromSrc(src, descriptor)\n if (fromSrc) {\n this.fontDataCache.set(cacheKey, fromSrc)\n return fromSrc\n }\n\n const bytes = await this.fetchBinary(src)\n const fontkit = await loadFontkit()\n const created = fontkit.create(bytes)\n const font = Array.isArray((created as { fonts?: EmbeddedFont[] }).fonts)\n ? (created as { fonts: EmbeddedFont[] }).fonts[0]\n : (created as EmbeddedFont)\n if (!font || typeof font.layout !== \"function\") {\n throw new Error(`Unsupported font file for family \"${family}\": ${src}`)\n }\n const resolved: ResolvedFontData = { kind: \"embedded\", src, font }\n this.fontDataCache.set(this.descriptorKey({ ...descriptor, fontFamily: family }), resolved)\n this.renderSourceBySrc.set(src, bytes)\n return resolved\n }\n\n throw new Error(\n `Font family \"${toFontFamilyList(descriptor.fontFamily).join(\", \")}\" is not registered. Register it with Font.register(...) before rendering, or use a built-in PDF font like Helvetica.`\n )\n }\n}\n\nexport const Font = new FontRegistry()\n\n", "export const Document = \"DOCUMENT\" as const\nexport const Page = \"PAGE\" as const\nexport const PageBreak = \"PAGE_BREAK\" as const\nexport const View = \"VIEW\" as const\nexport const Table = \"TABLE\" as const\nexport const TableHead = \"TABLE_HEAD\" as const\nexport const TableBody = \"TABLE_BODY\" as const\nexport const TableRow = \"TABLE_ROW\" as const\nexport const TableCell = \"TABLE_CELL\" as const\nexport const TableFooter = \"TABLE_FOOTER\" as const\nexport const Text = \"TEXT\" as const\nexport const Image = \"IMAGE\" as const\nexport const Link = \"LINK\" as const\nexport const Note = \"NOTE\" as const\nexport const Canvas = \"CANVAS\" as const\nexport const FieldSet = \"FIELD_SET\" as const\nexport const TextInput = \"TEXT_INPUT\" as const\nexport const Select = \"SELECT\" as const\nexport const Checkbox = \"CHECKBOX\" as const\nexport const List = \"LIST\" as const\nexport const Svg = \"SVG\" as const\nexport const G = \"G\" as const\nexport const Path = \"PATH\" as const\nexport const Rect = \"RECT\" as const\nexport const Line = \"LINE\" as const\nexport const Circle = \"CIRCLE\" as const\nexport const Ellipse = \"ELLIPSE\" as const\nexport const Polygon = \"POLYGON\" as const\nexport const Polyline = \"POLYLINE\" as const\nexport const Defs = \"DEFS\" as const\nexport const ClipPath = \"CLIP_PATH\" as const\nexport const LinearGradient = \"LINEAR_GRADIENT\" as const\nexport const RadialGradient = \"RADIAL_GRADIENT\" as const\nexport const Stop = \"STOP\" as const\nexport const Tspan = \"TSPAN\" as const\nexport const TextInstance = \"TEXT_INSTANCE\" as const\n", "import { TextInstance } from \"./primitives\"\nimport type { PdfElement, PdfProps, PdfValue } from \"./types\"\n\nconst flattenChildren = (input: PdfValue): PdfValue[] => {\n if (!Array.isArray(input)) return [input]\n // Iterative depth-first flatten that preserves order without flatMap's\n // per-level intermediate arrays and closures.\n const out: PdfValue[] = []\n const pending: PdfValue[] = [input]\n while (pending.length > 0) {\n const current = pending.pop() as PdfValue\n if (Array.isArray(current)) {\n for (let index = current.length - 1; index >= 0; index -= 1) pending.push(current[index])\n } else {\n out.push(current)\n }\n }\n return out\n}\n\nexport const createElement = (type: PdfElement[\"type\"], props: PdfProps, key?: string): PdfElement => {\n const normalizedProps = props ?? {}\n return {\n type,\n key,\n props: normalizedProps\n }\n}\n\nexport const materializeChildren = (children: PdfValue): PdfValue[] => {\n if (!Array.isArray(children)) {\n return children === undefined || children === false || children === null ? [] : [children]\n }\n // Fast path: already-flat arrays are filtered in place without a flatten pass.\n let hasNested = false\n for (let index = 0; index < children.length; index += 1) {\n if (Array.isArray(children[index])) {\n hasNested = true\n break\n }\n }\n if (!hasNested) {\n const out: PdfValue[] = []\n for (let index = 0; index < children.length; index += 1) {\n const value = children[index]\n if (value !== undefined && value !== false && value !== null) out.push(value)\n }\n return out\n }\n return flattenChildren(children).filter((value) => value !== undefined && value !== false && value !== null)\n}\n\nexport const createTextElement = (value: string | number): PdfElement => ({\n type: TextInstance,\n props: {\n children: String(value)\n }\n})\n", "import type { BorderEdge, BorderEdgeStyle, PdfStyle, ResolvedStyle } from \"./types\"\n\ntype InheritedTextStyle = Pick<ResolvedStyle, \"fontSize\" | \"lineHeight\" | \"color\" | \"fontFamily\" | \"fontStyle\" | \"textAlign\" | \"direction\" | \"lang\" | \"letterSpacing\" | \"opacity\" | \"textDecoration\" | \"textDecorationColor\" | \"textDecorationStyle\"> & {\n fontWeight?: ResolvedStyle[\"fontWeight\"]\n}\n\nconst defaultBorder = (): BorderEdge => ({ width: 0, color: \"#000000\", style: \"solid\" })\nconst BORDER_STYLE_TOKENS = new Set<BorderEdgeStyle>([\"solid\", \"dashed\", \"dotted\", \"none\"])\n\nconst FLEX_DEFAULTS = [1, 1, 0] as const\nconst FLEX_AUTO_DEFAULTS = [1, 1, \"auto\"] as const\nconst STYLE_CACHE_LIMIT = 4096\nlet resolvedStyleCache = new Map<string, ResolvedStyle>()\n// Memoizes serialization results by object identity. Style objects are treated\n// as immutable across the pipeline (they are spread, never mutated), so this\n// avoids re-walking/sorting the same shared style objects for every node.\nlet serializedStyleValueCache = new WeakMap<object, string | null>()\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (typeof value !== \"object\" || value === null) return false\n const prototype = Object.getPrototypeOf(value)\n return prototype === Object.prototype || prototype === null\n}\n\nconst stableSerializeStyleValue = (value: unknown): string | null => {\n if (value == null) return \"null\"\n if (typeof value === \"string\") return `s:${value}`\n if (typeof value === \"number\") return Number.isFinite(value) ? `n:${value}` : null\n if (typeof value === \"boolean\") return value ? \"b:1\" : \"b:0\"\n if (typeof value === \"object\") {\n // Inherited text styles have a fixed primitive-only shape; serialize them\n // directly instead of walking/sorting generic objects.\n if ((value as Record<string, unknown>).__jsxpdfInheritedTextStyle === true) {\n return serializeInheritedTextStyle(value as Record<string, unknown>)\n }\n const cached = serializedStyleValueCache.get(value)\n if (cached !== undefined) return cached\n const serialized = Array.isArray(value)\n ? serializeArrayParts(value as unknown[])\n : isPlainObject(value)\n ? serializeObjectParts(value as Record<string, unknown>)\n : null\n serializedStyleValueCache.set(value, serialized)\n return serialized\n }\n return null\n}\n\nconst serializeInheritedTextStyle = (value: Record<string, unknown>): string => {\n const rawFontFamily = value.fontFamily\n // fontFamily may be a string or a fallback list; keep list identity distinct.\n const fontFamilyPart = Array.isArray(rawFontFamily)\n ? serializeArrayParts(rawFontFamily)\n : `${typeof rawFontFamily}:${String(rawFontFamily)}`\n return `i{fontSize:${typeof value.fontSize}:${value.fontSize}`\n + `|lineHeight:${typeof value.lineHeight}:${value.lineHeight}`\n + `|color:${typeof value.color}:${value.color}`\n + `|fontFamily:${fontFamilyPart}`\n + `|fontWeight:${typeof value.fontWeight}:${String(value.fontWeight)}`\n + `|fontStyle:${typeof value.fontStyle}:${value.fontStyle}`\n + `|letterSpacing:${typeof value.letterSpacing}:${value.letterSpacing}`\n + `|opacity:${typeof value.opacity}:${value.opacity}`\n + `|textDecoration:${typeof value.textDecoration}:${value.textDecoration}`\n + `|textDecorationColor:${typeof value.textDecorationColor}:${value.textDecorationColor}`\n + `|textDecorationStyle:${typeof value.textDecorationStyle}:${value.textDecorationStyle}`\n + `|textAlign:${typeof value.textAlign}:${value.textAlign}`\n + `|direction:${typeof value.direction}:${value.direction}`\n + `|lang:${typeof value.lang}:${value.lang}}`\n}\n\nconst serializeArrayParts = (value: unknown[]): string | null => {\n let result = \"[\"\n for (let index = 0; index < value.length; index += 1) {\n const serialized = stableSerializeStyleValue(value[index])\n if (serialized == null) return null\n if (index > 0) result += \",\"\n result += serialized\n }\n return `${result}]`\n}\n\nconst serializeObjectParts = (value: Record<string, unknown>): string | null => {\n const keys = Object.keys(value).sort()\n let result = \"{\"\n for (let index = 0; index < keys.length; index += 1) {\n const serialized = stableSerializeStyleValue(value[keys[index]])\n if (serialized == null) return null\n if (index > 0) result += \",\"\n result += `${keys[index]}:${serialized}`\n }\n return `${result}}`\n}\n\nconst getResolvedStyleCacheKey = (\n styleInput: PdfStyle | PdfStyle[] | undefined,\n inheritedTextStyle?: InheritedTextStyle\n): string | null => {\n const styleKey = stableSerializeStyleValue(styleInput ?? null)\n const inheritedKey = stableSerializeStyleValue(inheritedTextStyle ?? null)\n if (styleKey == null || inheritedKey == null) return null\n return `${styleKey}::${inheritedKey}`\n}\n\nconst toNumber = (value: string | number | undefined): number => {\n if (typeof value === \"number\") return value\n if (!value) return 0\n const parsed = Number.parseFloat(value)\n return Number.isFinite(parsed) ? parsed : 0\n}\n\nconst parseFlexShorthand = (\n value: PdfStyle[\"flex\"]\n): Pick<PdfStyle, \"flexGrow\" | \"flexShrink\" | \"flexBasis\"> => {\n if (value == null) return {}\n const parts = value === \"auto\"\n ? [...FLEX_AUTO_DEFAULTS]\n : `${value}`.trim().split(/\\s+/).filter(Boolean)\n\n const flexGrow = Number.parseFloat(`${parts[0] ?? FLEX_DEFAULTS[0]}`)\n const flexShrink = Number.parseFloat(`${parts[1] ?? FLEX_DEFAULTS[1]}`)\n const flexBasis = (parts[2] ?? FLEX_DEFAULTS[2]) as PdfStyle[\"flexBasis\"]\n\n return {\n flexGrow: Number.isFinite(flexGrow) ? flexGrow : undefined,\n flexShrink: Number.isFinite(flexShrink) ? flexShrink : undefined,\n flexBasis\n }\n}\n\nconst parseBorderStyleToken = (value: string | undefined): BorderEdgeStyle | undefined => {\n if (!value) return undefined\n const normalized = value.trim().toLowerCase()\n return BORDER_STYLE_TOKENS.has(normalized as BorderEdgeStyle) ? normalized as BorderEdgeStyle : undefined\n}\n\nconst parseBorder = (value: string | number | undefined): BorderEdge => {\n if (typeof value === \"number\") {\n return { width: value, color: \"#000000\", style: \"solid\" }\n }\n if (!value) return defaultBorder()\n const parts = value.trim().split(/\\s+/).filter(Boolean)\n let width = 0\n let color = \"#000000\"\n let style: BorderEdgeStyle = \"solid\"\n let sawWidth = false\n for (const part of parts) {\n const borderStyle = parseBorderStyleToken(part)\n if (borderStyle) {\n style = borderStyle\n continue\n }\n if (!sawWidth && /^-?\\d/.test(part)) {\n width = toNumber(part)\n sawWidth = true\n continue\n }\n color = part\n }\n if (!sawWidth && parts.length === 1 && !parseBorderStyleToken(parts[0])) {\n width = toNumber(parts[0])\n }\n if (style === \"none\") width = 0\n return { width, color, style }\n}\n\nconst resolveLineHeight = (lineHeight: number, fontSize: number): number => {\n // CSS-style unitless multipliers (react-pdf examples, Yoga/RN) vs explicit point sizes.\n if (lineHeight > 0 && lineHeight <= 4) return lineHeight * fontSize\n return lineHeight\n}\n\nexport const flattenStyle = (style: PdfStyle | PdfStyle[] | undefined): PdfStyle => {\n if (!style) return {}\n if (!Array.isArray(style)) return { ...style }\n return style.reduce<PdfStyle>((acc, entry) => Object.assign(acc, flattenStyle(entry)), {})\n}\n\nexport const resolveStyle = (\n styleInput: PdfStyle | PdfStyle[] | undefined,\n inheritedTextStyle?: InheritedTextStyle\n): ResolvedStyle => {\n const cacheKey = getResolvedStyleCacheKey(styleInput, inheritedTextStyle)\n if (cacheKey) {\n const cached = resolvedStyleCache.get(cacheKey)\n if (cached) return cached\n }\n\n const flattenedStyle = flattenStyle(styleInput)\n const flexShorthand = parseFlexShorthand(flattenedStyle.flex)\n const style = { ...flattenedStyle, ...flexShorthand }\n const marginVertical = toNumber(style.marginVertical ?? style.margin)\n const marginHorizontal = toNumber(style.marginHorizontal ?? style.margin)\n const paddingVertical = toNumber(style.paddingVertical ?? style.padding)\n const paddingHorizontal = toNumber(style.paddingHorizontal ?? style.padding)\n\n const border = parseBorder(style.border)\n const borderTop = style.borderTop != null ? parseBorder(style.borderTop) : { ...border }\n const borderRight = style.borderRight != null ? parseBorder(style.borderRight) : { ...border }\n const borderBottom = style.borderBottom != null ? parseBorder(style.borderBottom) : { ...border }\n const borderLeft = style.borderLeft != null ? parseBorder(style.borderLeft) : { ...border }\n\n if (style.borderWidth != null) {\n const width = toNumber(style.borderWidth)\n if (style.borderTopWidth == null) borderTop.width = width\n if (style.borderRightWidth == null) borderRight.width = width\n if (style.borderBottomWidth == null) borderBottom.width = width\n if (style.borderLeftWidth == null) borderLeft.width = width\n }\n if (style.borderTopWidth != null) borderTop.width = toNumber(style.borderTopWidth)\n if (style.borderRightWidth != null) borderRight.width = toNumber(style.borderRightWidth)\n if (style.borderBottomWidth != null) borderBottom.width = toNumber(style.borderBottomWidth)\n if (style.borderLeftWidth != null) borderLeft.width = toNumber(style.borderLeftWidth)\n\n const defaultBorderStyle = parseBorderStyleToken(style.borderStyle) ?? border.style ?? \"solid\"\n borderTop.style = parseBorderStyleToken(style.borderTopStyle) ?? (style.borderTop != null ? borderTop.style : defaultBorderStyle) ?? \"solid\"\n borderRight.style = parseBorderStyleToken(style.borderRightStyle) ?? (style.borderRight != null ? borderRight.style : defaultBorderStyle) ?? \"solid\"\n borderBottom.style = parseBorderStyleToken(style.borderBottomStyle) ?? (style.borderBottom != null ? borderBottom.style : defaultBorderStyle) ?? \"solid\"\n borderLeft.style = parseBorderStyleToken(style.borderLeftStyle) ?? (style.borderLeft != null ? borderLeft.style : defaultBorderStyle) ?? \"solid\"\n\n borderTop.color = style.borderTopColor ?? style.borderColor ?? borderTop.color\n borderRight.color = style.borderRightColor ?? style.borderColor ?? borderRight.color\n borderBottom.color = style.borderBottomColor ?? style.borderColor ?? borderBottom.color\n borderLeft.color = style.borderLeftColor ?? style.borderColor ?? borderLeft.color\n\n const fontSize = style.fontSize ?? inheritedTextStyle?.fontSize ?? 12\n const hasExplicitLineHeight = style.lineHeight != null\n const lineHeight =\n style.lineHeight != null\n ? resolveLineHeight(style.lineHeight, fontSize)\n : (style.fontSize != null\n ? fontSize\n : inheritedTextStyle?.lineHeight ?? fontSize)\n\n const resolved = {\n ...style,\n marginTop: toNumber(style.marginTop ?? marginVertical),\n marginRight: toNumber(style.marginRight ?? marginHorizontal),\n marginBottom: toNumber(style.marginBottom ?? marginVertical),\n marginLeft: toNumber(style.marginLeft ?? marginHorizontal),\n paddingTop: toNumber(style.paddingTop ?? paddingVertical),\n paddingRight: toNumber(style.paddingRight ?? paddingHorizontal),\n paddingBottom: toNumber(style.paddingBottom ?? paddingVertical),\n paddingLeft: toNumber(style.paddingLeft ?? paddingHorizontal),\n borderTop,\n borderRight,\n borderBottom,\n borderLeft,\n fontSize,\n lineHeight,\n flexDirection: style.flexDirection ?? \"column\",\n color: style.color ?? inheritedTextStyle?.color ?? \"#000000\",\n fontFamily: style.fontFamily ?? inheritedTextStyle?.fontFamily ?? \"Helvetica\",\n fontWeight: style.fontWeight ?? inheritedTextStyle?.fontWeight,\n fontStyle: style.fontStyle ?? inheritedTextStyle?.fontStyle ?? \"normal\",\n letterSpacing: style.letterSpacing ?? inheritedTextStyle?.letterSpacing ?? 0,\n opacity: style.opacity ?? inheritedTextStyle?.opacity ?? 1,\n textDecoration: style.textDecoration ?? inheritedTextStyle?.textDecoration,\n textDecorationColor: style.textDecorationColor ?? inheritedTextStyle?.textDecorationColor,\n textDecorationStyle: style.textDecorationStyle ?? inheritedTextStyle?.textDecorationStyle,\n textAlign: style.textAlign ?? inheritedTextStyle?.textAlign ?? \"left\",\n direction: style.direction ?? inheritedTextStyle?.direction ?? \"ltr\",\n lang: style.lang ?? inheritedTextStyle?.lang ?? undefined,\n display: style.display ?? \"flex\",\n hasExplicitLineHeight\n }\n\n if (cacheKey) {\n if (resolvedStyleCache.size >= STYLE_CACHE_LIMIT) {\n resolvedStyleCache = new Map()\n }\n resolvedStyleCache.set(cacheKey, resolved)\n }\n\n return resolved\n}\n\nexport const StyleSheet = {\n create<T extends Record<string, PdfStyle>>(styles: T): T {\n return styles\n }\n}\n\nexport const isPercent = (value: unknown): value is string => typeof value === \"string\" && value.trim().endsWith(\"%\")\n\nconst parseUnitValue = (value: string, dpi: number): number | undefined => {\n const match = /^(-?\\d*\\.?\\d+)(in|mm|cm|pt|px)?$/i.exec(value.trim())\n if (!match) return undefined\n\n const scalar = Number.parseFloat(match[1] ?? \"\")\n if (!Number.isFinite(scalar)) return undefined\n\n switch ((match[2] ?? \"pt\").toLowerCase()) {\n case \"in\":\n return scalar * 72\n case \"mm\":\n return scalar * (72 / 25.4)\n case \"cm\":\n return scalar * (72 / 2.54)\n case \"px\":\n return scalar * (72 / dpi)\n default:\n return scalar\n }\n}\n\nexport const parseSizeValue = (value: string | number | undefined, total: number, dpi = 72): number | undefined => {\n if (value == null) return undefined\n if (typeof value === \"number\") return value\n if (isPercent(value)) return (Number.parseFloat(value) / 100) * total\n return parseUnitValue(value, dpi)\n}\n", "import {\n Circle,\n ClipPath,\n Canvas,\n Checkbox,\n Defs,\n Document,\n Ellipse,\n FieldSet,\n G,\n Image,\n Line,\n LinearGradient,\n Link,\n List,\n Note,\n Page,\n PageBreak,\n Path,\n Polygon,\n Polyline,\n RadialGradient,\n Rect,\n Select,\n Stop,\n Svg,\n Text,\n TextInput,\n TextInstance,\n Tspan,\n View,\n Table,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n TableFooter\n} from \"./primitives\"\nimport { isBindingToken } from \"./binding\"\nimport { materializeChildren } from \"./jsx\"\nimport { resolveStyle } from \"./style\"\nimport type { AttributedTextRun, PdfElement, PdfElementNode, PdfNodeType, PdfValue, ResolvedStyle } from \"./types\"\n\nconst DEFAULT_DYNAMIC_RENDER_CONTEXT = {\n pageNumber: 999,\n totalPages: 999\n} as const\n\ntype InheritedTextStyle = Pick<ResolvedStyle, \"fontSize\" | \"lineHeight\" | \"color\" | \"fontFamily\" | \"fontWeight\" | \"fontStyle\" | \"textAlign\" | \"direction\" | \"lang\" | \"letterSpacing\" | \"opacity\" | \"textDecoration\" | \"textDecorationColor\" | \"textDecorationStyle\">\n\nconst STRING_NODE_TYPES = new Set<PdfNodeType>([\n \"DOCUMENT\",\n \"PAGE\",\n \"PAGE_BREAK\",\n \"VIEW\",\n \"TABLE\",\n \"TABLE_HEAD\",\n \"TABLE_BODY\",\n \"TABLE_ROW\",\n \"TABLE_CELL\",\n \"TABLE_FOOTER\",\n \"TEXT\",\n \"IMAGE\",\n \"LINK\",\n \"NOTE\",\n \"CANVAS\",\n \"FIELD_SET\",\n \"TEXT_INPUT\",\n \"SELECT\",\n \"CHECKBOX\",\n \"LIST\",\n \"SVG\",\n \"G\",\n \"PATH\",\n \"RECT\",\n \"LINE\",\n \"CIRCLE\",\n \"ELLIPSE\",\n \"POLYGON\",\n \"POLYLINE\",\n \"DEFS\",\n \"CLIP_PATH\",\n \"LINEAR_GRADIENT\",\n \"RADIAL_GRADIENT\",\n \"STOP\",\n \"TSPAN\",\n \"ROOT\",\n \"TEXT_INSTANCE\"\n])\n\nconst isElement = (value: PdfValue): value is PdfElement => {\n return typeof value === \"object\" && value !== null && \"type\" in value && \"props\" in value\n}\n\nconst normalizeType = (type: PdfElement[\"type\"]): PdfNodeType => {\n switch (type) {\n case Document:\n return \"DOCUMENT\"\n case Page:\n return \"PAGE\"\n case PageBreak:\n return \"PAGE_BREAK\"\n case Table:\n return \"TABLE\"\n case TableHead:\n return \"TABLE_HEAD\"\n case TableBody:\n return \"TABLE_BODY\"\n case TableRow:\n return \"TABLE_ROW\"\n case TableCell:\n return \"TABLE_CELL\"\n case TableFooter:\n return \"TABLE_FOOTER\"\n case View:\n return \"VIEW\"\n case Text:\n return \"TEXT\"\n case Image:\n return \"IMAGE\"\n case Link:\n return \"LINK\"\n case Note:\n return \"NOTE\"\n case Canvas:\n return \"CANVAS\"\n case FieldSet:\n return \"FIELD_SET\"\n case TextInput:\n return \"TEXT_INPUT\"\n case Select:\n return \"SELECT\"\n case Checkbox:\n return \"CHECKBOX\"\n case List:\n return \"LIST\"\n case Svg:\n return \"SVG\"\n case G:\n return \"G\"\n case Path:\n return \"PATH\"\n case Rect:\n return \"RECT\"\n case Line:\n return \"LINE\"\n case Circle:\n return \"CIRCLE\"\n case Ellipse:\n return \"ELLIPSE\"\n case Polygon:\n return \"POLYGON\"\n case Polyline:\n return \"POLYLINE\"\n case Defs:\n return \"DEFS\"\n case ClipPath:\n return \"CLIP_PATH\"\n case LinearGradient:\n return \"LINEAR_GRADIENT\"\n case RadialGradient:\n return \"RADIAL_GRADIENT\"\n case Stop:\n return \"STOP\"\n case Tspan:\n return \"TSPAN\"\n case TextInstance:\n return \"TEXT_INSTANCE\"\n default: {\n if (typeof type === \"string\") {\n const normalized = (\n type.includes(\"_\") || type === type.toUpperCase()\n ? type\n : type.replace(/([a-z0-9])([A-Z])/g, \"$1_$2\").replace(/-/g, \"_\").toUpperCase()\n ) as PdfNodeType\n if (STRING_NODE_TYPES.has(normalized)) return normalized\n }\n throw new Error(`Unsupported node type: ${String(type)}`)\n }\n }\n}\n\n// Memoizes fully materialized trees by root element identity. Rendering the\n// same element object twice (benchmarks, repeated templates, re-renders of an\n// unchanged tree) then skips re-invoking every component function. Pipeline\n// mutations applied to the materialized tree afterwards (bookmark refs,\n// resolved image assets) are idempotent, so reuse is safe.\nconst materializedElementCache = new WeakMap<object, PdfValue>()\n\nexport const materializeElement = (value: PdfValue): PdfValue => {\n if (!isElement(value)) return value\n if (typeof value.type === \"function\") {\n const cached = materializedElementCache.get(value)\n if (cached) return cached\n const materialized = materializeElement(value.type(value.props))\n materializedElementCache.set(value, materialized)\n return materialized\n }\n const sourceChildren =\n typeof value.props.render === \"function\"\n ? value.props.render(DEFAULT_DYNAMIC_RENDER_CONTEXT)\n : value.props.children ?? []\n const flattened = materializeChildren(sourceChildren)\n const children: PdfValue[] = []\n for (let index = 0; index < flattened.length; index += 1) {\n children.push(materializeElement(flattened[index]))\n }\n return {\n ...value,\n props: {\n ...value.props,\n children\n }\n }\n}\n\nconst INHERITED_TEXT_STYLE_MARKER = \"__jsxpdfInheritedTextStyle\"\n\nexport const inheritTextStyle = (style: ResolvedStyle): InheritedTextStyle => {\n const inherited: InheritedTextStyle = {\n fontSize: style.fontSize,\n lineHeight: style.lineHeight,\n color: style.color,\n fontFamily: style.fontFamily,\n fontWeight: style.fontWeight,\n fontStyle: style.fontStyle,\n letterSpacing: style.letterSpacing,\n opacity: style.opacity,\n textDecoration: style.textDecoration,\n textDecorationColor: style.textDecorationColor,\n textDecorationStyle: style.textDecorationStyle,\n textAlign: style.textAlign,\n direction: style.direction,\n lang: style.lang\n }\n // Non-enumerable marker lets the style cache use a fast fixed-shape\n // serializer for these objects (they are created once per parent node).\n Object.defineProperty(inherited, INHERITED_TEXT_STYLE_MARKER, { value: true, enumerable: false })\n return inherited\n}\n\nexport const buildNodeChildren = (\n childrenValue: PdfValue,\n inheritedTextStyle?: InheritedTextStyle\n): PdfElementNode[] => {\n const childrenValues = materializeChildren(childrenValue)\n const children: PdfElementNode[] = []\n for (let index = 0; index < childrenValues.length; index += 1) {\n const child = childrenValues[index]\n if (typeof child === \"string\" || typeof child === \"number\") {\n children.push(buildNodeTree({\n type: TextInstance,\n props: { children: String(child) }\n }, inheritedTextStyle))\n continue\n }\n if (isBindingToken(child)) {\n children.push(buildNodeTree({\n type: TextInstance,\n props: { children: String(child.value) }\n }, inheritedTextStyle))\n continue\n }\n if (!isElement(child)) continue\n children.push(buildNodeTree(materializeElement(child) as PdfElement, inheritedTextStyle))\n }\n return children\n}\n\nexport const buildNodeTree = (\n element: PdfElement,\n inheritedTextStyle?: InheritedTextStyle\n): PdfElementNode => {\n const nodeType = normalizeType(element.type)\n const resolved = resolveStyle(element.props.style, inheritedTextStyle)\n // Document `language` prop seeds the per-node `lang` default for the whole\n // tree: style.lang ?? inherited lang ?? Document language ?? undefined.\n const style = nodeType === \"DOCUMENT\" && resolved.lang == null && typeof element.props.language === \"string\" && element.props.language\n ? { ...resolved, lang: element.props.language }\n : resolved\n if (nodeType === \"TEXT_INSTANCE\") {\n return {\n type: nodeType,\n props: element.props,\n style,\n children: [],\n text: String(element.props.children ?? \"\")\n }\n }\n const children = buildNodeChildren(element.props.children ?? [], inheritTextStyle(style))\n\n return {\n type: nodeType,\n props: element.props,\n style,\n children,\n text: undefined\n }\n}\n\nexport const extractText = (node: PdfElementNode): string => {\n if (node.type === \"TEXT_INSTANCE\") return node.text ?? \"\"\n if (node.children.length === 0 && typeof node.text === \"string\") return node.text\n return node.children.map((child) => extractText(child)).join(\"\")\n}\n\nconst mergeAdjacentTextRuns = (runs: AttributedTextRun[]): AttributedTextRun[] => {\n const merged: AttributedTextRun[] = []\n for (const run of runs) {\n if (!run.text) continue\n const previous = merged.length > 0 ? merged[merged.length - 1] : undefined\n if (\n previous &&\n previous.style.fontFamily === run.style.fontFamily &&\n previous.style.fontSize === run.style.fontSize &&\n previous.style.fontWeight === run.style.fontWeight &&\n previous.style.fontStyle === run.style.fontStyle &&\n previous.style.lineHeight === run.style.lineHeight &&\n previous.style.hasExplicitLineHeight === run.style.hasExplicitLineHeight &&\n previous.style.color === run.style.color &&\n previous.style.letterSpacing === run.style.letterSpacing &&\n previous.style.opacity === run.style.opacity &&\n previous.style.textDecoration === run.style.textDecoration &&\n previous.style.textDecorationColor === run.style.textDecorationColor &&\n previous.style.textDecorationStyle === run.style.textDecorationStyle &&\n previous.style.textAlign === run.style.textAlign &&\n previous.style.direction === run.style.direction &&\n previous.style.lang === run.style.lang\n ) {\n previous.text += run.text\n continue\n }\n merged.push({ text: run.text, style: run.style })\n }\n return merged\n}\n\nexport const extractTextRuns = (node: PdfElementNode): AttributedTextRun[] => {\n if (node.type === \"TEXT_INSTANCE\") {\n return node.text ? [{ text: node.text, style: node.style }] : []\n }\n\n const childRuns = mergeAdjacentTextRuns(node.children.flatMap((child) => extractTextRuns(child)))\n if (childRuns.length > 0) return childRuns\n if ((node.type === \"TEXT\" || node.type === \"LINK\") && typeof node.text === \"string\" && node.text.length > 0) {\n return [{ text: node.text, style: node.style }]\n }\n return []\n}\n", "import type { ProfileCounters, ProfileOptions, ProfileStage, ProfileStageName, ProfileTrace } from \"./types\"\n\nconst defaultCounters = (): ProfileCounters => ({\n elementNodes: 0,\n textInstances: 0,\n pages: 0,\n images: 0,\n textRuns: 0,\n backendOps: 0,\n textMeasureCalls: 0,\n textMeasureCacheHits: 0,\n textMeasureCacheMisses: 0,\n textShapeCalls: 0,\n textMeasureDistinctCacheKeys: 0,\n textMeasureDistinctRunFingerprints: 0,\n textMeasureDistinctWidths: 0,\n specializedTablesUsed: 0,\n fastCellsMeasured: 0,\n fallbackCellsMeasured: 0,\n rowCacheHits: 0,\n rowCacheMisses: 0\n})\n\nconst appendProfileLog = async (logFile: string, payload: string): Promise<void> => {\n if (typeof process === \"undefined\" || !process.versions?.node) return\n const loadNodeFs = new Function(\"return import('node:fs')\") as () => Promise<{ default: { appendFileSync: (path: string, data: string) => void } }>\n const { default: fs } = await loadNodeFs()\n fs.appendFileSync(logFile, payload)\n}\n\nexport class ProfileCollector {\n private stages: ProfileStage[] = []\n readonly counters: ProfileCounters = defaultCounters()\n private totalStart = performance.now()\n /** When false, stage/record/addCounter are no-ops so un-profiled renders pay no collection cost. */\n readonly enabled: boolean\n constructor(private readonly options: ProfileOptions | undefined) {\n this.enabled = options != null\n }\n\n async stage<T>(name: ProfileStageName, fn: () => Promise<T> | T): Promise<T> {\n if (!this.enabled) return fn()\n const start = performance.now()\n const result = await fn()\n this.record(name, performance.now() - start)\n return result\n }\n\n record(name: ProfileStageName, durationMs: number): void {\n if (!this.enabled) return\n this.stages.push({ name, durationMs })\n }\n\n addCounter(name: keyof ProfileCounters, value = 1): void {\n if (!this.enabled) return\n this.counters[name] += value\n }\n\n finish(): ProfileTrace {\n const trace = {\n stages: [...this.stages],\n totalMs: performance.now() - this.totalStart,\n counters: { ...this.counters }\n }\n this.write(trace)\n return trace\n }\n\n private write(trace: ProfileTrace): void {\n const logFile = this.options?.logFile ?? (\n typeof process !== \"undefined\" && process.versions?.node\n ? process.env.PDF_JSX_PERF_LOG\n : undefined\n )\n if (!logFile) return\n const payload = {\n ts: new Date().toISOString(),\n label: this.options?.label ?? \"jsxpdf.render.total\",\n ...this.options?.context,\n trace\n }\n void appendProfileLog(logFile, `${JSON.stringify(payload)}\\n`)\n }\n}\n\nexport const normalizeProfileOptions = (profile: boolean | ProfileOptions | undefined): ProfileOptions | undefined => {\n if (!profile) return undefined\n if (profile === true) return { enabled: true }\n return { enabled: true, ...profile }\n}\n", "// Unicode code point -> WinAnsiEncoding byte mapping for the PDF base-14 fonts.\n// Code points below 0x100 map identity except for the Euro/currency/smart-punct\n// range, which lives in 0x80-0x9F of WinAnsi.\nconst WIN_ANSI_MAP: Record<number, number> = {\n 0x0152: 140,\n 0x0153: 156,\n 0x0160: 138,\n 0x0161: 154,\n 0x0178: 159,\n 0x017D: 142,\n 0x017E: 158,\n 0x0192: 131,\n 0x02C6: 136,\n 0x02DC: 152,\n 0x2013: 150,\n 0x2014: 151,\n 0x2018: 145,\n 0x2019: 146,\n 0x201A: 130,\n 0x201C: 147,\n 0x201D: 148,\n 0x201E: 132,\n 0x2020: 134,\n 0x2021: 135,\n 0x2022: 149,\n 0x2026: 133,\n 0x2030: 137,\n 0x2039: 139,\n 0x203A: 155,\n 0x20AC: 128,\n 0x2122: 153\n}\n\nexport const toWinAnsiByte = (codePoint: number): number => {\n const mapped = WIN_ANSI_MAP[codePoint] ?? codePoint\n return mapped >= 0 && mapped <= 255 ? mapped : 63\n}\n\nexport const toWinAnsiBytes = (text: string): number[] => {\n const bytes: number[] = []\n for (const char of text) {\n bytes.push(toWinAnsiByte(char.codePointAt(0) ?? 63))\n }\n return bytes\n}\n", "import type {\n Align as AlignValue,\n Direction as DirectionValue,\n Display as DisplayValue,\n Edge as EdgeValue,\n FlexDirection as FlexDirectionValue,\n Gutter as GutterValue,\n Justify as JustifyValue,\n MeasureMode as MeasureModeValue,\n Node as YogaNode,\n PositionType as PositionTypeValue,\n Wrap as WrapValue,\n Yoga as YogaInstance\n} from \"yoga-wasm-web\"\n\ntype YogaWasmModule = typeof import(\"yoga-wasm-web\")\ntype YogaBackend = \"wasm\" | \"provided\"\ntype YogaRuntime = { Yoga: YogaInstance; backend: YogaBackend }\ntype YogaRuntimeLoader = () => Promise<YogaInstance> | YogaInstance\n\ndeclare global {\n var __PDF_JSX_LAST_YOGA_BACKEND__: YogaBackend | undefined\n}\n\nlet configuredYogaRuntimeLoader: YogaRuntimeLoader | null = null\nlet activeYogaRuntime: YogaRuntime | null = null\nlet yogaRuntimePromise: Promise<YogaRuntime> | null = null\n\nconst isBrowserRuntime = (): boolean => {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\"\n}\n\nconst isCloudflareWorkerRuntime = (): boolean => {\n return typeof WebSocketPair === \"function\" || typeof MiniflareCoreError === \"function\"\n}\n\nconst getErrorMessage = (error: unknown): string => {\n if (error instanceof Error) return error.message\n return String(error)\n}\n\nconst getProvidedYogaRuntime = async (): Promise<YogaRuntime> => {\n if (!configuredYogaRuntimeLoader) {\n throw new Error(\n \"jsxpdf could not initialize the default WASM Yoga runtime. Configure a compatible Yoga runtime with configureYogaRuntime(...) before rendering.\"\n )\n }\n\n const Yoga = await configuredYogaRuntimeLoader()\n return { Yoga, backend: \"provided\" }\n}\n\nconst loadDefaultYogaRuntime = async (): Promise<YogaRuntime> => {\n if (isBrowserRuntime()) {\n const module = await import(\"yoga-wasm-web/auto\")\n return {\n Yoga: module.default,\n backend: \"wasm\"\n }\n }\n\n const module: YogaWasmModule = await import(\"yoga-wasm-web\")\n\n if (!isCloudflareWorkerRuntime() && typeof process !== \"undefined\" && process.versions?.node) {\n const loadNodeFs = new Function(\"return import('node:fs/promises')\") as () => Promise<{ readFile: (path: string) => Promise<Uint8Array> }>\n const loadNodeModule = new Function(\"return import('node:module')\") as () => Promise<{ createRequire: (url: string) => NodeRequire }>\n const [{ readFile }, { createRequire }] = await Promise.all([loadNodeFs(), loadNodeModule()])\n const require = createRequire(import.meta.url)\n const wasmPath = require.resolve(\"yoga-wasm-web/dist/yoga.wasm\")\n const wasm = await readFile(wasmPath)\n return {\n Yoga: await module.default(wasm),\n backend: \"wasm\"\n }\n }\n\n const loadWasmModule = new Function(\"return import('yoga-wasm-web/dist/yoga.wasm')\") as () => Promise<{ default: WebAssembly.Module }>\n const wasmModule = (await loadWasmModule()).default\n return {\n Yoga: await module.default(wasmModule),\n backend: \"wasm\"\n }\n}\n\nexport const configureYogaRuntime = (loader: YogaRuntimeLoader | null): void => {\n configuredYogaRuntimeLoader = loader\n activeYogaRuntime = null\n yogaRuntimePromise = null\n globalThis.__PDF_JSX_LAST_YOGA_BACKEND__ = undefined\n}\n\nexport const loadYogaRuntime = async (\n loaders: {\n loadWasm?: () => Promise<YogaRuntime>\n loadProvided?: () => Promise<YogaRuntime>\n } = {}\n): Promise<YogaRuntime> => {\n const loadWasm = loaders.loadWasm ?? loadDefaultYogaRuntime\n const loadProvided = loaders.loadProvided ?? getProvidedYogaRuntime\n\n if (configuredYogaRuntimeLoader) {\n const providedRuntime = await loadProvided()\n if (providedRuntime.backend !== \"provided\") {\n throw new Error(`Expected a provided Yoga runtime override, received ${providedRuntime.backend}`)\n }\n return providedRuntime\n }\n\n try {\n return await loadWasm()\n } catch (error) {\n throw new Error(`Failed to initialize the default WASM Yoga runtime: ${getErrorMessage(error)}`)\n }\n}\n\nexport const ensureYogaRuntime = async (): Promise<YogaRuntime> => {\n if (activeYogaRuntime) return activeYogaRuntime\n yogaRuntimePromise ??= loadYogaRuntime()\n activeYogaRuntime = await yogaRuntimePromise\n globalThis.__PDF_JSX_LAST_YOGA_BACKEND__ = activeYogaRuntime.backend\n return activeYogaRuntime\n}\n\nconst getResolvedYogaRuntime = (): YogaRuntime => {\n if (!activeYogaRuntime) {\n throw new Error(\"Yoga runtime accessed before initialization. Call ensureYogaRuntime() before layout.\")\n }\n return activeYogaRuntime\n}\n\nexport const getActiveYoga = (): YogaInstance => getResolvedYogaRuntime().Yoga\n\nconst getYoga = (): YogaInstance => getResolvedYogaRuntime().Yoga\n\nexport const getYogaBackend = (): YogaBackend | undefined => activeYogaRuntime?.backend\n\nexport const Align = {\n get Auto() { return getYoga().ALIGN_AUTO as AlignValue },\n get Baseline() { return getYoga().ALIGN_BASELINE as AlignValue },\n get Center() { return getYoga().ALIGN_CENTER as AlignValue },\n get FlexEnd() { return getYoga().ALIGN_FLEX_END as AlignValue },\n get FlexStart() { return getYoga().ALIGN_FLEX_START as AlignValue },\n get SpaceAround() { return getYoga().ALIGN_SPACE_AROUND as AlignValue },\n get SpaceBetween() { return getYoga().ALIGN_SPACE_BETWEEN as AlignValue },\n get SpaceEvenly() {\n const yoga = getYoga() as Record<string, unknown>\n return (yoga.ALIGN_SPACE_EVENLY ?? yoga.ALIGN_SPACE_BETWEEN) as AlignValue\n },\n get Stretch() { return getYoga().ALIGN_STRETCH as AlignValue }\n} as const\n\nexport const Direction = {\n get Inherit() { return getYoga().DIRECTION_INHERIT as DirectionValue },\n get LTR() { return getYoga().DIRECTION_LTR as DirectionValue },\n get RTL() { return getYoga().DIRECTION_RTL as DirectionValue }\n} as const\n\nexport const Display = {\n get Flex() { return getYoga().DISPLAY_FLEX as DisplayValue },\n get None() { return getYoga().DISPLAY_NONE as DisplayValue }\n} as const\n\nexport const Edge = {\n get All() { return getYoga().EDGE_ALL as EdgeValue },\n get Bottom() { return getYoga().EDGE_BOTTOM as EdgeValue },\n get End() { return getYoga().EDGE_END as EdgeValue },\n get Horizontal() { return getYoga().EDGE_HORIZONTAL as EdgeValue },\n get Left() { return getYoga().EDGE_LEFT as EdgeValue },\n get Right() { return getYoga().EDGE_RIGHT as EdgeValue },\n get Start() { return getYoga().EDGE_START as EdgeValue },\n get Top() { return getYoga().EDGE_TOP as EdgeValue },\n get Vertical() { return getYoga().EDGE_VERTICAL as EdgeValue }\n} as const\n\nexport const FlexDirection = {\n get Column() { return getYoga().FLEX_DIRECTION_COLUMN as FlexDirectionValue },\n get ColumnReverse() { return getYoga().FLEX_DIRECTION_COLUMN_REVERSE as FlexDirectionValue },\n get Row() { return getYoga().FLEX_DIRECTION_ROW as FlexDirectionValue },\n get RowReverse() { return getYoga().FLEX_DIRECTION_ROW_REVERSE as FlexDirectionValue }\n} as const\n\nexport const Gutter = {\n get All() { return getYoga().GUTTER_ALL as GutterValue },\n get Column() { return getYoga().GUTTER_COLUMN as GutterValue },\n get Row() { return getYoga().GUTTER_ROW as GutterValue }\n} as const\n\nexport const Justify = {\n get Center() { return getYoga().JUSTIFY_CENTER as JustifyValue },\n get FlexEnd() { return getYoga().JUSTIFY_FLEX_END as JustifyValue },\n get FlexStart() { return getYoga().JUSTIFY_FLEX_START as JustifyValue },\n get SpaceAround() { return getYoga().JUSTIFY_SPACE_AROUND as JustifyValue },\n get SpaceBetween() { return getYoga().JUSTIFY_SPACE_BETWEEN as JustifyValue },\n get SpaceEvenly() { return getYoga().JUSTIFY_SPACE_EVENLY as JustifyValue }\n} as const\n\nexport const MeasureMode = {\n get AtMost() { return getYoga().MEASURE_MODE_AT_MOST as MeasureModeValue },\n get Exactly() { return getYoga().MEASURE_MODE_EXACTLY as MeasureModeValue },\n get Undefined() { return getYoga().MEASURE_MODE_UNDEFINED as MeasureModeValue }\n} as const\n\nexport const PositionType = {\n get Absolute() { return getYoga().POSITION_TYPE_ABSOLUTE as PositionTypeValue },\n get Relative() { return getYoga().POSITION_TYPE_RELATIVE as PositionTypeValue },\n get Static() { return getYoga().POSITION_TYPE_STATIC as PositionTypeValue }\n} as const\n\nexport const Wrap = {\n get NoWrap() { return getYoga().WRAP_NO_WRAP as WrapValue },\n get Wrap() { return getYoga().WRAP_WRAP as WrapValue },\n get WrapReverse() { return getYoga().WRAP_WRAP_REVERSE as WrapValue }\n} as const\n\nconst Yoga = new Proxy({} as YogaInstance, {\n get(_target, property, receiver) {\n return Reflect.get(getYoga(), property, receiver)\n }\n})\n\nexport type { YogaNode as Node, YogaBackend, YogaRuntimeLoader }\n\nexport default Yoga\n", "const pdfkitModule = await import(\"pdfkit\")\nexport default pdfkitModule.default\n", "import {\n Font,\n toWinAnsiBytes,\n type AttributedTextRun,\n type GlyphPosition,\n type HyphenationCallback,\n type MeasuredText,\n type MeasuredTextLine,\n type ResolvedStyle,\n type ShapedGlyph,\n type ShapedGlyphRun,\n type ShapedTextLine,\n type TextDecorationLine\n} from \"@jsxpdf/core\"\nimport type { EmbeddedFont, ResolvedFontData } from \"@jsxpdf/core\"\n\nconst SOFT_HYPHEN = \"\\u00ad\"\nconst ELLIPSIS = \"\u2026\"\n\n// ---------------------------------------------------------------------------\n// Font metrics\n// ---------------------------------------------------------------------------\n\ntype FontMetrics = {\n unitsPerEm: number\n ascent: number // positive, font units\n descent: number // negative, font units\n lineGap: number // font units\n}\n\nconst getFontMetrics = (data: ResolvedFontData): FontMetrics => {\n if (data.kind === \"standard\") {\n return {\n unitsPerEm: 1000,\n ascent: data.metrics.ascender,\n descent: data.metrics.descender,\n lineGap: Math.max(0, data.metrics.lineGap)\n }\n }\n // Vendored base-14 substitutes carry their AFM metrics so implicit line\n // heights match standard shaping exactly; only the embedded outlines come\n // from the TrueType file.\n if (data.metrics != null) {\n return {\n unitsPerEm: 1000,\n ascent: data.metrics.ascender,\n descent: data.metrics.descender,\n lineGap: Math.max(0, data.metrics.lineGap)\n }\n }\n const font = data.font\n return {\n unitsPerEm: font.unitsPerEm || 1000,\n ascent: font.ascent ?? font.unitsPerEm * 0.8,\n descent: font.descent ?? -(font.unitsPerEm || 1000) * 0.2,\n lineGap: font.lineGap ?? 0\n }\n}\n\nexport const resolveEngineFont = (style: ResolvedStyle): ResolvedFontData => {\n const data = Font.getFontData({\n fontFamily: style.fontFamily,\n fontWeight: style.fontWeight,\n fontStyle: style.fontStyle\n })\n if (!data) {\n throw new Error(\n `Unable to resolve font \"${Array.isArray(style.fontFamily) ? style.fontFamily.join(\", \") : style.fontFamily}\". Register it with Font.register(...) before rendering.`\n )\n }\n return data\n}\n\nexport const getImplicitTextHeight = (style: ResolvedStyle): number => {\n const { ascent, descent, lineGap, unitsPerEm } = getFontMetrics(resolveEngineFont(style))\n return ((ascent - descent + lineGap) / unitsPerEm) * style.fontSize\n}\n\nexport const getTextLineHeight = (style: ResolvedStyle): number => {\n if (style.hasExplicitLineHeight) return style.lineHeight\n return getImplicitTextHeight(style)\n}\n\nconst getAscentDescent = (style: ResolvedStyle): { ascent: number; descent: number } => {\n const { ascent, descent, unitsPerEm } = getFontMetrics(resolveEngineFont(style))\n const scale = style.fontSize / unitsPerEm\n return { ascent: ascent * scale, descent: descent * scale }\n}\n\n// ---------------------------------------------------------------------------\n// Shaping \u2014 every run of text flows through exactly one shaping path.\n// ---------------------------------------------------------------------------\n\ntype ShapedToken = {\n glyphs: Array<{ code: number; codePoints: number[]; advance: number; xOffset: number; yOffset: number }>\n encoding: \"standard\" | \"embedded\"\n scale: number // points per font unit at the requested size\n width: number\n}\n\nconst shapeCache = new Map<string, ShapedToken>()\n\nconst cacheKeyFor = (data: ResolvedFontData, fontSize: number, text: string): string =>\n `${data.kind}:${data.kind === \"standard\" ? data.name : data.src}:${fontSize}:${text}`\n\n/**\n * Shape `text` into positioned glyph advances. Standard fonts go through the\n * WinAnsi table plus AFM widths; embedded fonts go through fontkit's OpenType\n * shaper (GSUB/GPOS). This is the only shaping function in the pipeline.\n */\nexport const shapeText = (data: ResolvedFontData, fontSize: number, text: string): ShapedToken => {\n const cacheKey = cacheKeyFor(data, fontSize, text)\n const cached = shapeCache.get(cacheKey)\n if (cached) return cached\n\n let shaped: ShapedToken\n if (data.kind === \"standard\") {\n const bytes = toWinAnsiBytes(text)\n const scale = fontSize / 1000\n const glyphs = bytes.map((byte) => ({\n code: byte,\n codePoints: [],\n advance: data.metrics.widths[byte] * scale,\n xOffset: 0,\n yOffset: 0\n }))\n shaped = { glyphs, encoding: \"standard\", scale, width: glyphs.reduce((sum, g) => sum + g.advance, 0) }\n } else {\n const font = data.font\n const unitsPerEm = font.unitsPerEm || 1000\n const scale = fontSize / unitsPerEm\n const run = font.layout(text)\n const glyphs = run.glyphs.map((glyph, index) => ({\n code: glyph.id,\n codePoints: glyph.codePoints ?? [],\n advance: (run.positions[index]?.xAdvance ?? glyph.advanceWidth) * scale,\n xOffset: (run.positions[index]?.xOffset ?? 0) * scale,\n yOffset: (run.positions[index]?.yOffset ?? 0) * scale\n }))\n shaped = { glyphs, encoding: \"embedded\", scale, width: glyphs.reduce((sum, g) => sum + g.advance, 0) }\n }\n\n shapeCache.set(cacheKey, shaped)\n return shaped\n}\n\nexport const clearShapeCaches = (): void => {\n shapeCache.clear()\n}\n\nconst countGraphemes = (text: string): number => {\n let count = 0\n for (const _ of text) count += 1\n return count\n}\n\nexport const getStringWidth = (text: string, style: ResolvedStyle): number => {\n if (text.length === 0) return 0\n const width = shapeText(resolveEngineFont(style), style.fontSize, text).width\n // Letter spacing is 0 in the common case; skip grapheme iteration entirely.\n if (!style.letterSpacing) return width\n return width + style.letterSpacing * countGraphemes(text)\n}\n\n// ---------------------------------------------------------------------------\n// Tokenization (\"prepare\" phase): runs -> flat token stream.\n// ---------------------------------------------------------------------------\n\ntype WordPart = { text: string; hyphenAfter: boolean; style: ResolvedStyle; width: number; hyphenWidth: number }\n\ntype PreparedToken =\n | { kind: \"newline\" }\n | { kind: \"space\"; text: string; style: ResolvedStyle; width: number }\n | { kind: \"word\"; parts: WordPart[]; style: ResolvedStyle; fullWidth: number }\n\nconst defaultHyphenationCallback: HyphenationCallback = (word) => [word ?? \"\"]\n\nexport type PreparedText = {\n tokens: PreparedToken[]\n runs: AttributedTextRun[]\n}\n\nconst tokenizeRuns = (\n runs: AttributedTextRun[],\n hyphenationCallback: HyphenationCallback | null\n): PreparedToken[] => {\n const tokens: PreparedToken[] = []\n const tokenPattern = /(\\n|[^\\S\\n]+|[^\\s\\n]+)/g\n\n for (const run of runs) {\n for (const match of run.text.matchAll(tokenPattern)) {\n const raw = match[0]\n if (raw === \"\\n\") {\n tokens.push({ kind: \"newline\" })\n continue\n }\n if (/^\\s+$/.test(raw)) {\n tokens.push({ kind: \"space\", text: raw, style: run.style, width: getStringWidth(raw, run.style) })\n continue\n }\n\n const rawParts = (hyphenationCallback ?? defaultHyphenationCallback)(raw, defaultHyphenationCallback)\n const normalized = (rawParts.length > 0 ? rawParts : [raw]).map((part) => ({\n text: part.replaceAll(SOFT_HYPHEN, \"\"),\n insertHyphenOnBreak: part.endsWith(SOFT_HYPHEN)\n }))\n const usable = normalized.filter((entry) => entry.text.length > 0)\n\n if (usable.length <= 1 && !usable.some((entry) => entry.insertHyphenOnBreak)) {\n const text = usable[0]?.text ?? raw\n tokens.push({\n kind: \"word\",\n parts: [{ text, hyphenAfter: false, style: run.style, width: getStringWidth(text, run.style), hyphenWidth: 0 }],\n style: run.style,\n fullWidth: getStringWidth(raw, run.style)\n })\n continue\n }\n\n const hyphenWidth = getStringWidth(\"-\", run.style)\n const parts: WordPart[] = usable.map((entry) => ({\n text: entry.text,\n hyphenAfter: entry.insertHyphenOnBreak,\n style: run.style,\n width: getStringWidth(entry.text, run.style),\n hyphenWidth\n }))\n const fullWidth =\n parts.reduce((sum, part) => sum + part.width, 0) +\n parts.slice(0, -1).reduce((sum, part) => sum + (part.hyphenAfter ? part.hyphenWidth : 0), 0)\n tokens.push({ kind: \"word\", parts, style: run.style, fullWidth })\n }\n }\n\n return tokens\n}\n\n/** Precompute tokens + widths once per unique input (pretext-style `prepare`). */\nexport const prepareText = (input: EngineMeasureInput): PreparedText => ({\n tokens: tokenizeRuns(input.runs, input.hyphenationCallback),\n runs: input.runs\n})\n\n// ---------------------------------------------------------------------------\n// Line breaking (\"layout\" phase): pure arithmetic over prepared tokens.\n// ---------------------------------------------------------------------------\n\ntype PlacedItem =\n | { kind: \"space\"; text: string; style: ResolvedStyle; width: number }\n | {\n kind: \"shaped\"\n text: string\n style: ResolvedStyle\n shaped: ShapedToken\n fromIndex: number\n toIndex: number\n letterSpacing: number\n hyphenAfter: boolean\n }\n\nconst placedItemWidth = (item: PlacedItem): number => {\n if (item.kind === \"space\") return item.width\n let width = 0\n for (let index = item.fromIndex; index < item.toIndex; index += 1) width += item.shaped.glyphs[index].advance\n return width + item.letterSpacing * Math.max(0, item.toIndex - item.fromIndex)\n}\n\nconst placedItemText = (item: Extract<PlacedItem, { kind: \"shaped\" }>): string => {\n if (item.fromIndex === 0 && item.toIndex === item.shaped.glyphs.length) return item.text\n let text = \"\"\n for (let index = item.fromIndex; index < item.toIndex; index += 1) {\n if (item.shaped.encoding === \"standard\") {\n text += String.fromCodePoint(item.shaped.glyphs[index].code)\n } else {\n for (const codePoint of item.shaped.glyphs[index].codePoints) text += String.fromCodePoint(codePoint)\n }\n }\n return text\n}\n\nconst maxFittingGlyphPrefix = (item: Extract<PlacedItem, { kind: \"shaped\" }>, maxWidth: number): number => {\n let width = 0\n let splitAt = item.fromIndex\n while (splitAt < item.toIndex) {\n const next = width + item.shaped.glyphs[splitAt].advance + item.letterSpacing\n if (next > maxWidth && splitAt > item.fromIndex) break\n width = next\n splitAt += 1\n }\n return splitAt\n}\n\nexport const shouldOverflowUnbrokenToken = (text: string): boolean => {\n if (text.length === 0 || text.length > 32) return false\n if (/\\s/.test(text)) return false\n return /^[\\x21-\\x7E]+$/.test(text)\n}\n\nconst LINE_FIT_EPSILON = 0.5\n\nconst exceedsLine = (width: number, targetWidth: number): boolean =>\n width > targetWidth + LINE_FIT_EPSILON\n\n// ---------------------------------------------------------------------------\n// Intra-word break points. Dictionary-based segmentation (Intl.Segmenter)\n// gives correct Thai/Japanese word breaks and per-ideograph CJK breaks; runs\n// the segmenter cannot split (a single Latin word, a URL) fall back to\n// grapheme-level splitting so nothing silently overflows its box.\n// ---------------------------------------------------------------------------\n\nlet segmenterCache = new Map<string, Intl.Segmenter | null>()\nconst breakChunkCache = new Map<string, string[]>()\n\nconst getWordSegmenter = (locale?: string): Intl.Segmenter | null => {\n const key = locale ?? \"\"\n const cached = segmenterCache.get(key)\n if (cached !== undefined) return cached\n let segmenter: Intl.Segmenter | null = null\n if (typeof Intl !== \"undefined\" && \"Segmenter\" in Intl) {\n try {\n segmenter = new Intl.Segmenter(locale, { granularity: \"word\" })\n } catch {\n segmenter = locale ? getWordSegmenter(undefined) : null\n }\n }\n // Bound the cache; locales are few but texts are many (those live in\n // breakChunkCache keyed by locale + text below).\n if (segmenterCache.size >= 32) segmenterCache = new Map()\n segmenterCache.set(key, segmenter)\n return segmenter\n}\n\n/** Split `text` into intra-word break chunks using the run's locale (BCP 47 `lang`). */\nexport const getBreakChunks = (text: string, locale?: string): string[] => {\n const cacheKey = `${locale ?? \"\"}::${text}`\n const cached = breakChunkCache.get(cacheKey)\n if (cached) return cached\n\n let chunks: string[]\n // Intl.Segmenter(word) splits \"Judge:\" / \"Referee:\" into \"Judge\" + \":\".\n // react-pdf keeps those tokens on one line; glyph-stacking them is the\n // result-sheet bug. Leave Thai/CJK segmentation for non-ASCII tokens.\n if (countGraphemes(text) <= 1 || shouldOverflowUnbrokenToken(text) || shouldOverflowUnbrokenToken(text.trim())) {\n chunks = [shouldOverflowUnbrokenToken(text) || countGraphemes(text) <= 1 ? text : text.trim()]\n } else {\n const segmenter = getWordSegmenter(locale)\n chunks = segmenter\n ? Array.from(segmenter.segment(text), (segment) => segment.segment)\n : [text]\n }\n\n breakChunkCache.set(cacheKey, chunks)\n return chunks\n}\n\nexport const clearBreakChunkCache = (): void => {\n breakChunkCache.clear()\n segmenterCache.clear()\n}\n\n// ---------------------------------------------------------------------------\n// Simplified BiDi line reordering with paragraph base-direction support.\n// fontkit's shaper already emits glyphs of each run in visual order; what\n// remains is mirroring the ORDER OF ITEMS inside contiguous opposite-\n// direction sequences (neutral digit/symbol items sandwiched between\n// same-direction items join them, other neutrals take the base direction).\n// - \"ltr\" base (default): reverse RTL sequences (previous behavior).\n// - \"rtl\" base: mirror \u2014 reverse LTR sequences instead.\n// - \"auto\": first strong directional char in the line picks the base.\n// ---------------------------------------------------------------------------\n\nconst STRONG_RTL_RE = /[\\u0590-\\u05FF\\u0600-\\u06FF\\u0700-\\u074F\\u0750-\\u077F\\u08A0-\\u08FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFF]/\nconst ANY_LETTER_RE = /\\p{L}/u\n\nconst itemSourceText = (item: PlacedItem): string => item.text\n\nexport type BidiBaseDirection = \"ltr\" | \"rtl\" | \"auto\"\n\n/** Resolve \"auto\" to ltr/rtl from the first strong directional char. */\nexport const resolveBidiBaseDirection = (\n texts: Array<string | { text: string }> | string,\n direction: BidiBaseDirection = \"ltr\"\n): \"ltr\" | \"rtl\" => {\n if (direction !== \"auto\") return direction\n const sources = typeof texts === \"string\" ? [texts] : texts\n for (const source of sources) {\n const text = typeof source === \"string\" ? source : source.text\n for (const char of text) {\n if (STRONG_RTL_RE.test(char)) return \"rtl\"\n if (ANY_LETTER_RE.test(char)) return \"ltr\"\n }\n }\n return \"ltr\"\n}\n\nconst applyBidiOrdering = (items: PlacedItem[], baseDirection: BidiBaseDirection = \"ltr\"): PlacedItem[] => {\n if (items.length === 0) return items\n const base = resolveBidiBaseDirection(items, baseDirection)\n\n const classes = items.map((item) => {\n const text = itemSourceText(item)\n if (STRONG_RTL_RE.test(text)) return \"rtl\" as const\n // Neutral (no letters at all): inherit neighbours during resolution below.\n return ANY_LETTER_RE.test(text) ? (\"ltr\" as const) : (\"neutral\" as const)\n })\n\n // Fast path: LTR base only reorders lines containing RTL; RTL base only\n // reorders mixed-direction lines (single-direction lines keep logical\n // order under either base, so inherited `direction: \"rtl\"` never scrambles\n // pure-Latin lines).\n const hasRtl = classes.includes(\"rtl\")\n if (!hasRtl) return items\n if (base === \"rtl\" && !classes.includes(\"ltr\")) return items\n\n // Resolve neutrals: surrounded by the non-base direction on both sides\n // -> that direction; otherwise the base direction.\n const resolved = [...classes]\n for (let index = 0; index < resolved.length; index += 1) {\n if (resolved[index] !== \"neutral\") continue\n let prevRtl = false\n for (let p = index - 1; p >= 0; p -= 1) {\n if (resolved[p] === \"neutral\") continue\n prevRtl = resolved[p] === \"rtl\"\n break\n }\n let nextRtl = false\n for (let n = index + 1; n < resolved.length; n += 1) {\n if (resolved[n] === \"neutral\") continue\n nextRtl = resolved[n] === \"rtl\"\n break\n }\n resolved[index] = base === \"rtl\"\n ? (!prevRtl && !nextRtl ? \"ltr\" : \"rtl\")\n : (prevRtl && nextRtl ? \"rtl\" : \"ltr\")\n }\n\n // Reverse contiguous opposite-direction sequences: RTL runs under an LTR\n // base, LTR runs under an RTL base.\n const reversedClass = base === \"rtl\" ? \"ltr\" : \"rtl\"\n const out: PlacedItem[] = []\n let index = 0\n while (index < items.length) {\n if (resolved[index] !== reversedClass) {\n out.push(items[index])\n index += 1\n continue\n }\n let end = index\n while (end < items.length && resolved[end] === reversedClass) end += 1\n for (let r = end - 1; r >= index; r -= 1) out.push(items[r])\n index = end\n }\n return out\n}\n\nexport type EngineMeasureInput = {\n runs: AttributedTextRun[]\n style: ResolvedStyle\n noWrap?: boolean\n maxLines?: number\n textOverflow?: ResolvedStyle[\"textOverflow\"]\n textAlign?: ResolvedStyle[\"textAlign\"]\n direction?: ResolvedStyle[\"direction\"]\n hyphenationCallback: HyphenationCallback | null\n}\n\nexport type LayoutPreparedOptions = {\n targetWidth: number\n noWrap?: boolean\n maxLines?: number\n ellipsis?: boolean\n justify?: boolean\n defaultLineHeight: number\n direction?: ResolvedStyle[\"direction\"]\n}\n\ntype AssembledLine = {\n items: PlacedItem[]\n width: number\n height: number\n baseline: number\n ascent: number\n}\n\nconst lineHeightOf = (style: ResolvedStyle, defaultLineHeight: number): number =>\n style.hasExplicitLineHeight ? style.lineHeight : defaultLineHeight\n\nconst assembleLines = (tokens: PreparedToken[], options: LayoutPreparedOptions): AssembledLine[] => {\n const { targetWidth } = options\n const finiteWidth = Number.isFinite(targetWidth) && targetWidth > 0\n const lines: AssembledLine[] = []\n let current: PlacedItem[] = []\n\n const currentWidth = (): number => current.reduce((sum, item) => sum + placedItemWidth(item), 0)\n\n const pushLine = (stripTrailingSpaces = true): void => {\n // Wrapped / hard-broken lines shed end-of-line spaces (CSS white-space: normal).\n // The last line of a Text leaf keeps in-flow trailing spaces so a label like\n // \"Referee: \" still occupies a gap before a sibling name (react-pdf).\n if (stripTrailingSpaces) {\n while (current.length > 0 && current.at(-1)!.kind === \"space\") current.pop()\n }\n if (current.length === 0) {\n lines.push({ items: [], width: 0, height: Math.max(options.defaultLineHeight, 0), baseline: options.defaultLineHeight * 0.8, ascent: options.defaultLineHeight * 0.8 })\n current = []\n return\n }\n const ordered = applyBidiOrdering(current, options.direction ?? \"ltr\")\n current = []\n let width = 0\n let height = 0\n let ascent = 0\n let descent = 0\n for (const item of ordered) {\n width += placedItemWidth(item)\n height = Math.max(height, lineHeightOf(item.style, options.defaultLineHeight))\n const metrics = getAscentDescent(item.style)\n ascent = Math.max(ascent, metrics.ascent)\n descent = Math.max(descent, -metrics.descent)\n }\n const contentHeight = ascent + descent\n lines.push({\n items: ordered,\n width,\n height: Math.max(height, contentHeight),\n baseline: height > contentHeight ? (height - contentHeight) / 2 + ascent : ascent,\n ascent\n })\n }\n\n const placeWholeWord = (part: WordPart, withHyphen: boolean): void => {\n const shaped = shapeText(resolveEngineFont(part.style), part.style.fontSize, part.text)\n current.push({\n kind: \"shaped\",\n text: part.text,\n style: part.style,\n shaped,\n fromIndex: 0,\n toIndex: shaped.glyphs.length,\n letterSpacing: part.style.letterSpacing,\n hyphenAfter: false\n })\n if (withHyphen) {\n const hyphenShaped = shapeText(resolveEngineFont(part.style), part.style.fontSize, \"-\")\n current.push({\n kind: \"shaped\",\n text: \"-\",\n style: part.style,\n shaped: hyphenShaped,\n fromIndex: 0,\n toIndex: hyphenShaped.glyphs.length,\n letterSpacing: part.style.letterSpacing,\n hyphenAfter: false\n })\n }\n }\n\n for (let tokenIndex = 0; tokenIndex < tokens.length; tokenIndex += 1) {\n const token = tokens[tokenIndex]\n if (token.kind === \"newline\") {\n pushLine()\n continue\n }\n\n if (token.kind === \"space\") {\n if (current.length === 0) continue\n if (finiteWidth && exceedsLine(currentWidth() + token.width, targetWidth)) {\n pushLine()\n continue\n }\n current.push({ kind: \"space\", text: token.text, style: token.style, width: token.width })\n continue\n }\n\n // Word token: fit whole word, then hyphenation parts, then split by glyph.\n let remainingParts = token.parts\n let startedWord = false\n\n while (remainingParts.length > 0) {\n const baseWidth = currentWidth()\n\n if (!finiteWidth) {\n for (const [index, part] of remainingParts.entries()) {\n placeWholeWord(part, part.hyphenAfter && index < remainingParts.length - 1)\n }\n startedWord = true\n remainingParts = []\n break\n }\n\n let fitCount = 0\n let measuredWidth = baseWidth\n for (let index = 0; index < remainingParts.length; index += 1) {\n const part = remainingParts[index]\n const hyphenSuffix = index < remainingParts.length - 1 && part.hyphenAfter ? part.hyphenWidth : 0\n if (exceedsLine(measuredWidth + part.width + hyphenSuffix, targetWidth)) break\n measuredWidth += part.width + hyphenSuffix\n fitCount += 1\n }\n\n if (fitCount > 0) {\n for (let index = 0; index < fitCount; index += 1) {\n placeWholeWord(remainingParts[index], false)\n // Break hyphen: this part ends a line but more parts of the word remain.\n if (index < remainingParts.length - 1 && remainingParts[index].hyphenAfter) {\n const hyphenShaped = shapeText(resolveEngineFont(remainingParts[index].style), remainingParts[index].style.fontSize, \"-\")\n current.push({\n kind: \"shaped\",\n text: \"-\",\n style: remainingParts[index].style,\n shaped: hyphenShaped,\n fromIndex: 0,\n toIndex: hyphenShaped.glyphs.length,\n letterSpacing: remainingParts[index].style.letterSpacing,\n hyphenAfter: false\n })\n }\n }\n remainingParts = remainingParts.slice(fitCount)\n startedWord = true\n if (remainingParts.length > 0) pushLine()\n continue\n }\n\n if (current.length > 0 || startedWord) {\n pushLine()\n continue\n }\n\n // Word wider than the line: first try intra-word break opportunities\n // (dictionary boundaries via Intl.Segmenter \u2014 Thai/Japanese words,\n // CJK ideographs). Short Latin/numeric tokens and maxLines:1 boxes\n // overflow like react-pdf instead of stacking glyphs (\"2\" / \"9\").\n const firstPart = remainingParts[0]\n const restParts = remainingParts.slice(1)\n const chunks = getBreakChunks(firstPart.text, firstPart.style.lang)\n if (chunks.length > 1) {\n const chunkParts: WordPart[] = chunks.map((text, index) => ({\n text,\n hyphenAfter: index === chunks.length - 1 && firstPart.hyphenAfter,\n style: firstPart.style,\n width: getStringWidth(text, firstPart.style),\n hyphenWidth: 0\n }))\n remainingParts = [...chunkParts, ...restParts]\n continue\n }\n\n const shaped = shapeText(resolveEngineFont(firstPart.style), firstPart.style.fontSize, firstPart.text)\n const candidate: Extract<PlacedItem, { kind: \"shaped\" }> = {\n kind: \"shaped\",\n text: firstPart.text,\n style: firstPart.style,\n shaped,\n fromIndex: 0,\n toIndex: shaped.glyphs.length,\n letterSpacing: firstPart.style.letterSpacing,\n hyphenAfter: false\n }\n if (options.maxLines === 1 || shouldOverflowUnbrokenToken(firstPart.text)) {\n current.push(candidate)\n pushLine()\n remainingParts = restParts\n continue\n }\n const splitAt = maxFittingGlyphPrefix(candidate, targetWidth)\n current.push({ ...candidate, toIndex: splitAt })\n pushLine()\n if (splitAt < candidate.toIndex) {\n const tailItem: Extract<PlacedItem, { kind: \"shaped\" }> = { ...candidate, fromIndex: splitAt }\n remainingParts = [{ ...firstPart, text: placedItemText(tailItem), width: placedItemWidth(tailItem) }, ...restParts]\n } else {\n remainingParts = restParts\n }\n }\n }\n\n if (current.length > 0) pushLine(false)\n if (lines.length === 0) pushLine()\n\n return lines\n}\n\n// ---------------------------------------------------------------------------\n// MeasuredText assembly\n// ---------------------------------------------------------------------------\n\nconst UNDERLINE_OFFSET_RATIO = 0.12\nconst STRIKE_OFFSET_RATIO = 0.28\nconst DECORATION_THICKNESS_RATIO = 0.06\n\nconst buildDecorationLines = (line: AssembledLine): TextDecorationLine[] => {\n const decorations: TextDecorationLine[] = []\n type Span = { fromX: number; toX: number; color: string; opacity: number; style: ResolvedStyle } | null\n const openSpans: Partial<Record<\"underline\" | \"strike\", Span>> = { underline: null, strike: null }\n\n const flush = (kind: \"underline\" | \"strike\"): void => {\n const current = openSpans[kind]\n if (!current) return\n const height = Math.max(0.5, current.style.fontSize * DECORATION_THICKNESS_RATIO)\n const offset = kind === \"underline\" ? UNDERLINE_OFFSET_RATIO : STRIKE_OFFSET_RATIO\n decorations.push({\n rect: {\n x: current.fromX,\n y: line.baseline + current.style.fontSize * offset - height / 2,\n width: current.toX - current.fromX,\n height\n },\n opacity: current.opacity,\n color: current.style.textDecorationColor ?? current.style.color,\n style: current.style.textDecorationStyle\n })\n openSpans[kind] = null\n }\n\n let cursorX = 0\n for (const item of line.items) {\n const itemWidth = placedItemWidth(item)\n const textDecoration = item.style.textDecoration ?? \"\"\n const opacity = item.style.opacity\n const decorationColor = item.style.textDecorationColor ?? item.style.color\n\n for (const kind of [\"underline\", \"strike\"] as const) {\n const wanted = kind === \"underline\"\n ? textDecoration.includes(\"underline\")\n : textDecoration.includes(\"line-through\")\n const current = openSpans[kind]\n if (!wanted) {\n flush(kind)\n } else if (current && current.color === decorationColor && current.opacity === opacity) {\n current.toX = cursorX + itemWidth\n } else {\n flush(kind)\n openSpans[kind] = { fromX: cursorX, toX: cursorX + itemWidth, color: decorationColor, opacity, style: item.style }\n }\n }\n cursorX += itemWidth\n }\n flush(\"underline\")\n flush(\"strike\")\n return decorations\n}\n\nconst countSpaceChars = (items: PlacedItem[]): number =>\n items.reduce((sum, item) => sum + (item.kind === \"space\" ? countGraphemes(item.text) : 0), 0)\n\nconst buildShapedRun = (item: PlacedItem, extraSpace: number): ShapedGlyphRun => {\n const letterSpacing = item.kind === \"shaped\" ? item.letterSpacing : item.style.letterSpacing\n const data = resolveEngineFont(item.style)\n const shaped = item.kind === \"shaped\"\n ? item.shaped\n : shapeText(data, item.style.fontSize, item.text)\n const from = item.kind === \"shaped\" ? item.fromIndex : 0\n const to = item.kind === \"shaped\" ? item.toIndex : shaped.glyphs.length\n const graphemeCount = Math.max(1, to - from)\n const perCharExtra = extraSpace / graphemeCount\n\n const glyphs: ShapedGlyph[] = []\n const positions: GlyphPosition[] = []\n const bytes: number[] = []\n const advances: number[] = []\n\n for (let index = from; index < to; index += 1) {\n const glyph = shaped.glyphs[index]\n const advance = glyph.advance + letterSpacing + perCharExtra\n positions.push({ xAdvance: advance, yAdvance: 0, xOffset: glyph.xOffset, yOffset: glyph.yOffset })\n advances.push(advance)\n if (shaped.encoding === \"standard\") {\n bytes.push(glyph.code)\n } else {\n glyphs.push({\n id: glyph.code,\n advanceWidth: Math.round(advance / shaped.scale),\n xOffset: glyph.xOffset / shaped.scale,\n yOffset: glyph.yOffset / shaped.scale,\n codePoints: glyph.codePoints\n })\n }\n }\n\n return {\n text: item.kind === \"shaped\" ? placedItemText(item) : item.text,\n style: item.style,\n kind: item.kind === \"space\" ? \"space\" : \"text\",\n xAdvance: placedItemWidth(item) + extraSpace,\n encoding: shaped.encoding === \"standard\"\n ? { type: \"standard\", bytes, advances }\n : { type: \"embedded\", glyphs, positions }\n }\n}\n\nconst runStyleKey = (style: ResolvedStyle): string =>\n [\n Array.isArray(style.fontFamily) ? style.fontFamily.join(\",\") : style.fontFamily,\n style.fontSize,\n style.fontWeight ?? \"\",\n style.fontStyle,\n style.letterSpacing,\n style.color,\n style.opacity\n ].join(\"::\")\n\n/** Merge adjacent runs that resolve to the same font + paint into one run. */\nconst mergeRuns = (runs: ShapedGlyphRun[]): ShapedGlyphRun[] => {\n const merged: ShapedGlyphRun[] = []\n for (const run of runs) {\n const last = merged.at(-1)\n if (last && run.kind === \"text\" && last.kind === \"text\" && runStyleKey(run.style) === runStyleKey(last.style)) {\n last.text += run.text\n last.xAdvance += run.xAdvance\n if (run.encoding.type === \"standard\" && last.encoding.type === \"standard\") {\n last.encoding.bytes.push(...run.encoding.bytes)\n last.encoding.advances.push(...run.encoding.advances)\n } else if (run.encoding.type === \"embedded\" && last.encoding.type === \"embedded\") {\n last.encoding.glyphs.push(...run.encoding.glyphs)\n last.encoding.positions.push(...run.encoding.positions)\n }\n continue\n }\n merged.push(run)\n }\n return merged\n}\n\nexport const layoutPreparedText = (prepared: PreparedText, options: LayoutPreparedOptions): MeasuredText => {\n const assembled = assembleLines(prepared.tokens, options)\n\n let visible = assembled\n let truncated = false\n if (options.maxLines != null && assembled.length > options.maxLines) {\n truncated = true\n visible = assembled.slice(0, options.maxLines)\n } else if (\n options.ellipsis &&\n options.maxLines === 1 &&\n assembled.length === 1 &&\n Number.isFinite(options.targetWidth) &&\n assembled[0]!.width > options.targetWidth + LINE_FIT_EPSILON\n ) {\n truncated = true\n }\n\n const applyEllipsis = truncated && options.ellipsis\n\n const lineData: MeasuredTextLine[] = []\n const shapedLines: ShapedTextLine[] = []\n\n for (const [index, line] of visible.entries()) {\n const isLastVisible = index === visible.length - 1\n const justify =\n options.justify && !isLastVisible && Number.isFinite(options.targetWidth) && options.targetWidth > line.width\n const spaceChars = countSpaceChars(line.items)\n const extraPerSpaceChar = justify && spaceChars > 0 ? (options.targetWidth - line.width) / spaceChars : 0\n\n const shapedRuns = mergeRuns(line.items.map((item) =>\n buildShapedRun(item, item.kind === \"space\" ? extraPerSpaceChar * countGraphemes(item.text) : 0)\n ))\n\n if (!isLastVisible) {\n while (shapedRuns.length > 0 && shapedRuns.at(-1)!.kind === \"space\") shapedRuns.pop()\n }\n\n if (applyEllipsis && isLastVisible) {\n const style = shapedRuns.at(-1)?.style ?? prepared.runs.at(-1)?.style\n if (style) {\n const ellipsisWidth = getStringWidth(ELLIPSIS, style)\n const totalWidth = (): number => shapedRuns.reduce((sum, run) => sum + run.xAdvance, 0)\n while (shapedRuns.length > 0 && totalWidth() + ellipsisWidth > options.targetWidth) {\n const last = shapedRuns.at(-1)!\n if (last.encoding.type === \"embedded\" && last.encoding.glyphs.length > 1) {\n const popped = last.encoding.positions.pop()!\n last.encoding.glyphs.pop()\n last.xAdvance -= popped.xAdvance\n } else if (last.encoding.type === \"standard\" && last.encoding.bytes.length > 1) {\n const popped = last.encoding.advances.pop()!\n last.encoding.bytes.pop()\n last.xAdvance -= popped\n } else {\n shapedRuns.pop()\n }\n }\n shapedRuns.push(buildShapedRun(\n {\n kind: \"shaped\",\n text: ELLIPSIS,\n style,\n shaped: shapeText(resolveEngineFont(style), style.fontSize, ELLIPSIS),\n fromIndex: 0,\n toIndex: shapeText(resolveEngineFont(style), style.fontSize, ELLIPSIS).glyphs.length,\n letterSpacing: style.letterSpacing,\n hyphenAfter: false\n },\n 0\n ))\n }\n }\n\n const text = shapedRuns.map((run) => run.text).join(\"\")\n const lineWidth = shapedRuns.reduce((sum, run) => sum + run.xAdvance, 0)\n lineData.push({\n text,\n runs: shapedRuns.map((run) => ({ text: run.text, style: run.style, kind: run.kind, width: run.xAdvance })),\n width: lineWidth,\n height: line.height\n })\n\n shapedLines.push({\n text,\n width: lineWidth,\n height: line.height,\n baseline: line.baseline,\n ascent: line.ascent,\n runs: shapedRuns,\n decorationLines: buildDecorationLines(line)\n })\n }\n\n const measuredHeight = lineData.reduce((sum, line) => sum + line.height, 0)\n const measuredWidth = lineData.reduce((max, line) => Math.max(max, line.width), 0)\n\n return {\n lines: lineData.map((line) => line.text),\n runs: prepared.runs,\n lineData,\n shapedLines,\n width: Number.isFinite(options.targetWidth) ? Math.min(options.targetWidth, measuredWidth) : measuredWidth,\n height: measuredHeight,\n lineHeight: lineData.length > 0 ? measuredHeight / lineData.length : options.defaultLineHeight\n }\n}\n\nexport const measureTextWithEngine = (input: EngineMeasureInput, width: number): MeasuredText => {\n const prepared = prepareText(input)\n const requestedWidth = width > 0 ? width : Number.POSITIVE_INFINITY\n // Single-line text (wrap disabled / width-fit) breaks against an infinite\n // line; the caller compares natural width against its own constraint.\n const targetWidth = input.noWrap ? Number.POSITIVE_INFINITY : requestedWidth\n return layoutPreparedText(prepared, {\n targetWidth,\n maxLines: input.noWrap ? undefined : input.maxLines,\n ellipsis: !input.noWrap && input.textOverflow === \"ellipsis\",\n justify: !input.noWrap && (input.textAlign ?? input.style.textAlign) === \"justify\",\n defaultLineHeight: getTextLineHeight(input.style),\n direction: input.direction ?? input.style.direction ?? \"ltr\",\n ...(input.noWrap ? {} : {})\n })\n}\n\n/** Natural single-line width used by the width-fit binary search. */\nexport const getNaturalLineWidth = (prepared: PreparedText): number => {\n let width = 0\n for (const token of prepared.tokens) {\n if (token.kind === \"newline\") break\n width += token.kind === \"space\" ? token.width : token.fullWidth\n }\n return width\n}\n", "import { isPercent, parseSizeValue } from \"@jsxpdf/core\"\nimport type { LayoutNode, MeasuredText, PdfElementNode, ResolvedStyle } from \"@jsxpdf/core\"\n\nexport const TABLE_STRUCTURE_TYPES = new Set([\n \"TABLE\",\n \"TABLE_HEAD\",\n \"TABLE_BODY\",\n \"TABLE_FOOTER\",\n \"TABLE_ROW\",\n \"TABLE_CELL\"\n] as const)\n\nexport const TABLE_SECTION_TYPES = new Set([\n \"TABLE_HEAD\",\n \"TABLE_BODY\",\n \"TABLE_FOOTER\"\n] as const)\n\nconst isTableStructureType = (type: PdfElementNode[\"type\"]): type is typeof TABLE_STRUCTURE_TYPES extends Set<infer T> ? T : never =>\n TABLE_STRUCTURE_TYPES.has(type as never)\n\nconst isTableSectionType = (type: PdfElementNode[\"type\"]): type is typeof TABLE_SECTION_TYPES extends Set<infer T> ? T : never =>\n TABLE_SECTION_TYPES.has(type as never)\n\ntype TableColumnWidth = number | string | undefined\ntype TableCellWidth = TableColumnWidth | undefined\n\nexport type TableLayoutContext = {\n cellWidthByNode: WeakMap<PdfElementNode, TableCellWidth>\n}\n\nexport type TableModelCell = {\n node: PdfElementNode\n sectionIndex: number\n rowIndex: number\n columnIndex: number\n colSpan: number\n rowSpan: number\n}\n\nexport type TableModelRow = {\n node: PdfElementNode\n sectionIndex: number\n rowIndex: number\n cells: TableModelCell[]\n fingerprint: string | null\n fixedHeight: number | null\n}\n\nexport type TableModelSection = {\n node: PdfElementNode\n sectionIndex: number\n rows: TableModelRow[]\n}\n\nexport type TableModel = {\n tableNode: PdfElementNode\n requestedColumns: TableColumnWidth[]\n columnCount: number\n sections: TableModelSection[]\n rows: TableModelRow[]\n cells: TableModelCell[]\n}\n\ntype TableMeasurementCell = {\n cell: TableModelCell\n layout: LayoutNode\n}\n\ntype TableMeasurementRow = {\n row: TableModelRow\n cells: TableMeasurementCell[]\n}\n\ntype TableMeasurements = {\n rows: TableMeasurementRow[]\n}\n\ntype TableLayoutNodeWithDrawNodes = LayoutNode & {\n props: LayoutNode[\"props\"] & {\n __tableDrawNodes?: LayoutNode[]\n }\n}\n\ntype TableCounterName =\n | \"specializedTablesUsed\"\n | \"fastCellsMeasured\"\n | \"fallbackCellsMeasured\"\n | \"rowCacheHits\"\n | \"rowCacheMisses\"\n\ntype TableLayoutDependencies = {\n addCounter(name: TableCounterName, value?: number): void\n cloneLayoutSubtree(layoutNode: LayoutNode): LayoutNode\n getNodePreferredWidth(node: PdfElementNode, parentWidth: number): number\n layoutCellGeneric(node: PdfElementNode, width: number, height: number, timings?: Record<string, number>): LayoutNode\n measureTextNode(node: PdfElementNode, width: number): MeasuredText\n shiftLayoutSubtree(layoutNode: LayoutNode, deltaX: number, deltaY: number): LayoutNode\n}\n\nconst TABLE_MAX_COLUMNS = 512\nconst tableColumnsCache = new WeakMap<PdfElementNode, TableColumnWidth[]>()\nconst tableSpecializationCache = new WeakMap<PdfElementNode, boolean>()\nconst tableModelCache = new WeakMap<PdfElementNode, TableModel>()\nconst rowFingerprintCache = new WeakMap<PdfElementNode, string>()\nconst rowMeasurementCache = new Map<string, TableMeasurementRow>()\n\nexport const clearTableLayoutCaches = (): void => {\n rowMeasurementCache.clear()\n}\n\nconst clampToPositiveInt = (value: unknown): number | null => {\n const numeric = Number(value)\n if (!Number.isFinite(numeric) || numeric <= 0) return null\n return Math.floor(numeric)\n}\n\nconst normalizeTableColumnValue = (value: unknown): TableColumnWidth => {\n if (typeof value === \"number\") return Number.isFinite(value) ? value : undefined\n if (typeof value === \"string\") {\n const trimmed = value.trim()\n if (!trimmed) return undefined\n if (isPercent(trimmed)) return trimmed\n const parsed = Number.parseFloat(trimmed)\n return Number.isFinite(parsed) ? parsed : undefined\n }\n return undefined\n}\n\nconst getTableColumnsFromProps = (node: PdfElementNode): TableColumnWidth[] => {\n const cached = tableColumnsCache.get(node)\n if (cached != null) return cached\n const raw = node.props.tableColumns\n if (Array.isArray(raw)) {\n const resolved = raw\n .map((entry) => normalizeTableColumnValue(entry))\n .filter((entry): entry is Exclude<TableColumnWidth, undefined> => entry !== undefined)\n tableColumnsCache.set(node, resolved)\n return resolved\n }\n if (typeof raw === \"string\") {\n const resolved = raw\n .split(\",\")\n .map((entry) => normalizeTableColumnValue(entry))\n .filter((entry): entry is Exclude<TableColumnWidth, undefined> => entry !== undefined)\n tableColumnsCache.set(node, resolved)\n return resolved\n }\n tableColumnsCache.set(node, [])\n return []\n}\n\nconst sumColumnWidths = (columns: number[], start: number, count: number): number | undefined => {\n if (count <= 0 || start >= columns.length) return undefined\n const end = Math.min(start + count, columns.length)\n let total = 0\n for (let index = start; index < end; index += 1) total += columns[index]\n return total\n}\n\nconst scaleColumnWidthsToTarget = (widths: number[], targetWidth: number): number[] => {\n const normalized = widths.map((width) => Number.isFinite(width) && width > 0 ? width : 0)\n const totalWidth = normalized.reduce((sum, width) => sum + width, 0)\n if (!Number.isFinite(targetWidth) || targetWidth <= 0) return normalized\n if (normalized.length === 0) return normalized\n if (totalWidth === 0) return normalized.map(() => targetWidth / normalized.length)\n if (Math.abs(totalWidth - targetWidth) < 0.001) return normalized\n if (totalWidth > targetWidth) {\n const ratio = targetWidth / totalWidth\n return normalized.map((width) => width * ratio)\n }\n const extraWidth = targetWidth - totalWidth\n return normalized.map((width) => width + extraWidth * (width / totalWidth))\n}\n\nconst getNodeHorizontalInset = (node: PdfElementNode): number =>\n node.style.paddingLeft + node.style.paddingRight + node.style.borderLeft.width + node.style.borderRight.width\n\nconst getNodeVerticalInset = (node: PdfElementNode): number =>\n node.style.paddingTop + node.style.paddingBottom + node.style.borderTop.width + node.style.borderBottom.width\n\nconst hasTransforms = (node: PdfElementNode): boolean => {\n const transform = (node.style as ResolvedStyle & { transform?: unknown }).transform\n return Array.isArray(transform) ? transform.length > 0 : typeof transform === \"string\" ? transform.length > 0 : false\n}\n\nconst hasUnsupportedTableDescendant = (node: PdfElementNode, withinCell = false): boolean => {\n if (node.style.position === \"absolute\") return true\n if (hasTransforms(node)) return true\n if (node.type === \"CANVAS\" || node.type === \"SVG\" || node.type === \"TEXT_INPUT\" || node.type === \"SELECT\" || node.type === \"CHECKBOX\" || node.type === \"LIST\" || node.type === \"FIELD_SET\" || node.type === \"IMAGE\" || node.type === \"NOTE\") {\n return true\n }\n if (withinCell) {\n if (node.type === \"VIEW\" && (node.style.flexDirection === \"row\" || node.style.flexDirection === \"row-reverse\" || node.style.flexWrap === \"wrap\" || node.style.flexWrap === \"wrap-reverse\")) {\n return true\n }\n if (!isTableStructureType(node.type) && node.type !== \"VIEW\" && node.type !== \"TEXT\" && node.type !== \"LINK\" && node.type !== \"TEXT_INSTANCE\") {\n return true\n }\n }\n if (node.type === \"TABLE_CELL\") withinCell = true\n for (const child of node.children) {\n if (hasUnsupportedTableDescendant(child, withinCell)) return true\n }\n return false\n}\n\nexport const canUseSpecializedTableLayout = (tableNode: PdfElementNode): boolean => {\n if (tableNode.type !== \"TABLE\") return false\n const cached = tableSpecializationCache.get(tableNode)\n if (cached != null) return cached\n const resolved = !hasUnsupportedTableDescendant(tableNode)\n tableSpecializationCache.set(tableNode, resolved)\n return resolved\n}\n\nexport const extractTableModel = (tableNode: PdfElementNode): TableModel => {\n const cached = tableModelCache.get(tableNode)\n if (cached) return cached\n const sections: TableModelSection[] = []\n const rows: TableModelRow[] = []\n const cells: TableModelCell[] = []\n let columnCount = getTableColumnsFromProps(tableNode).length\n\n const serializeNode = (node: PdfElementNode): unknown => ({\n type: node.type,\n text: node.type === \"TEXT_INSTANCE\" ? node.text ?? \"\" : undefined,\n style: {\n width: node.style.width,\n height: node.style.height,\n minWidth: node.style.minWidth,\n minHeight: node.style.minHeight,\n maxWidth: node.style.maxWidth,\n maxHeight: node.style.maxHeight,\n marginTop: node.style.marginTop,\n marginRight: node.style.marginRight,\n marginBottom: node.style.marginBottom,\n marginLeft: node.style.marginLeft,\n paddingTop: node.style.paddingTop,\n paddingRight: node.style.paddingRight,\n paddingBottom: node.style.paddingBottom,\n paddingLeft: node.style.paddingLeft,\n fontSize: node.style.fontSize,\n fontFamily: node.style.fontFamily,\n fontWeight: node.style.fontWeight,\n fontStyle: node.style.fontStyle,\n lineHeight: node.style.lineHeight,\n letterSpacing: node.style.letterSpacing,\n color: node.style.color,\n textAlign: node.style.textAlign,\n direction: node.style.direction,\n lang: node.style.lang,\n maxLines: node.style.maxLines,\n textOverflow: node.style.textOverflow,\n borderTop: node.style.borderTop,\n borderRight: node.style.borderRight,\n borderBottom: node.style.borderBottom,\n borderLeft: node.style.borderLeft,\n backgroundColor: node.style.backgroundColor,\n },\n props: {\n colSpan: node.props.colSpan,\n rowSpan: node.props.rowSpan,\n href: node.props.href,\n fixedHeight: node.props.fixedHeight,\n },\n children: node.children.map((child) => serializeNode(child)),\n })\n\n const visitRows = (sectionNode: PdfElementNode, sectionIndex: number): void => {\n const sectionRows: TableModelRow[] = []\n let sectionRowIndex = 0\n const spannedColumns = new Map<number, number>()\n for (const child of sectionNode.children) {\n if (child.type !== \"TABLE_ROW\") continue\n const expiringSpans = [...spannedColumns]\n let cursor = 0\n const rowCells: TableModelCell[] = []\n for (const cellNode of child.children) {\n if (cellNode.type !== \"TABLE_CELL\") continue\n while ((spannedColumns.get(cursor) ?? 0) > 0) cursor += 1\n const colSpan = Math.max(1, clampToPositiveInt(cellNode.props.colSpan) ?? 1)\n const rowSpan = Math.max(1, clampToPositiveInt(cellNode.props.rowSpan) ?? 1)\n const cell = {\n node: cellNode,\n sectionIndex,\n rowIndex: sectionRowIndex,\n columnIndex: cursor,\n colSpan,\n rowSpan\n } satisfies TableModelCell\n rowCells.push(cell)\n cells.push(cell)\n if (rowSpan > 1) {\n for (let offset = 0; offset < colSpan; offset += 1) {\n spannedColumns.set(cursor + offset, rowSpan - 1)\n }\n }\n cursor += colSpan\n }\n columnCount = Math.max(columnCount, cursor)\n for (const [column, remaining] of expiringSpans) {\n if (remaining <= 1) spannedColumns.delete(column)\n else spannedColumns.set(column, remaining - 1)\n }\n const row = {\n node: child,\n sectionIndex,\n rowIndex: sectionRowIndex,\n cells: rowCells,\n fingerprint: null,\n fixedHeight:\n typeof child.props.fixedHeight === \"number\" && Number.isFinite(child.props.fixedHeight) && child.props.fixedHeight > 0\n ? child.props.fixedHeight\n : null\n } satisfies TableModelRow\n sectionRows.push(row)\n rows.push(row)\n sectionRowIndex += 1\n }\n sections.push({ node: sectionNode, sectionIndex, rows: sectionRows })\n }\n\n let sectionIndex = 0\n for (const child of tableNode.children) {\n if (isTableSectionType(child.type)) {\n visitRows(child, sectionIndex)\n sectionIndex += 1\n }\n }\n\n const model = {\n tableNode,\n requestedColumns: getTableColumnsFromProps(tableNode),\n columnCount: Math.max(1, Math.min(TABLE_MAX_COLUMNS, columnCount || 1)),\n sections,\n rows,\n cells\n }\n for (const row of rows) {\n row.fingerprint = rowFingerprintCache.get(row.node) ?? JSON.stringify(serializeNode(row.node))\n rowFingerprintCache.set(row.node, row.fingerprint)\n }\n tableModelCache.set(tableNode, model)\n return model\n}\n\nconst getAutoTableColumnWidths = (\n model: TableModel,\n parentWidth: number,\n dependencies: Pick<TableLayoutDependencies, \"getNodePreferredWidth\">\n): number[] => {\n const widths = new Array<number>(model.columnCount).fill(0)\n const spanningCells: Array<{ start: number; span: number; width: number }> = []\n\n for (const row of model.rows) {\n for (const cell of row.cells) {\n const span = Math.min(Math.max(1, cell.colSpan), Math.max(1, model.columnCount - cell.columnIndex))\n const preferredWidth = dependencies.getNodePreferredWidth(cell.node, parentWidth)\n if (span === 1) {\n widths[cell.columnIndex] = Math.max(widths[cell.columnIndex] ?? 0, preferredWidth)\n } else {\n spanningCells.push({ start: cell.columnIndex, span, width: preferredWidth })\n }\n }\n }\n\n for (const cell of spanningCells) {\n const currentWidth = sumColumnWidths(widths, cell.start, cell.span) ?? 0\n if (currentWidth >= cell.width) continue\n const extraPerColumn = (cell.width - currentWidth) / cell.span\n for (let index = cell.start; index < Math.min(cell.start + cell.span, widths.length); index += 1) {\n widths[index] += extraPerColumn\n }\n }\n\n const targetWidth = parentWidth > 0 ? parentWidth : widths.reduce((sum, width) => sum + width, 0)\n return scaleColumnWidthsToTarget(widths, targetWidth)\n}\n\nexport const resolveColumnWidths = (\n model: TableModel,\n tableWidth: number,\n dependencies: Pick<TableLayoutDependencies, \"getNodePreferredWidth\">\n): number[] => {\n const parentWidth = Math.max(0, tableWidth)\n const rawColumns = model.requestedColumns.length > 0\n ? [...model.requestedColumns]\n : getAutoTableColumnWidths(model, parentWidth, dependencies)\n if (rawColumns.length < model.columnCount) rawColumns.push(...new Array(model.columnCount - rawColumns.length).fill(undefined))\n const fixedPixelColumns = rawColumns.slice(0, model.columnCount).map((value) => {\n if (typeof value === \"number\") return Number.isFinite(value) ? value : undefined\n if (typeof value === \"string\" && isPercent(value)) {\n const parsed = parseSizeValue(value, parentWidth)\n return parsed == null ? undefined : parsed\n }\n const parsedValue = parseSizeValue(typeof value === \"string\" ? value : undefined, parentWidth)\n return parsedValue ?? undefined\n })\n\n const fixedWidth = fixedPixelColumns.reduce<number>((sum, value) => sum + (value ?? 0), 0)\n const unresolvedColumns = fixedPixelColumns.filter((value) => value == null).length\n const leftoverWidth = Math.max(0, parentWidth - fixedWidth)\n const autoWidth = unresolvedColumns > 0 ? leftoverWidth / unresolvedColumns : 0\n const computedColumns = fixedPixelColumns.map((value) => value == null ? autoWidth : value)\n return scaleColumnWidthsToTarget(computedColumns, parentWidth)\n}\n\nexport const createTableLayoutContext = (\n tableNode: PdfElementNode,\n parentWidth: number,\n dependencies: Pick<TableLayoutDependencies, \"getNodePreferredWidth\">\n): TableLayoutContext => {\n const model = extractTableModel(tableNode)\n const columnWidths = resolveColumnWidths(model, parentWidth, dependencies)\n const cellWidthByNode = new WeakMap<PdfElementNode, TableCellWidth>()\n\n for (const cell of model.cells) {\n const directWidth = cell.node.style.width\n const width = directWidth != null ? directWidth : sumColumnWidths(columnWidths, cell.columnIndex, cell.colSpan)\n cellWidthByNode.set(cell.node, width)\n }\n\n return { cellWidthByNode }\n}\n\nexport const getTableCellWidthFromContext = (\n node: PdfElementNode,\n tableContext?: TableLayoutContext\n): TableCellWidth => tableContext?.cellWidthByNode.get(node)\n\nconst resolveFastTextNodeLayout = (\n node: PdfElementNode,\n width: number,\n dependencies: Pick<TableLayoutDependencies, \"measureTextNode\">\n): LayoutNode | null => {\n if (node.type !== \"TEXT\" && node.type !== \"LINK\") return null\n if (node.style.position === \"absolute\" || hasTransforms(node)) return null\n const insetX = getNodeHorizontalInset(node)\n const insetY = getNodeVerticalInset(node)\n const explicitWidth = parseSizeValue(node.style.width as string | number | undefined, width)\n const boxWidth = explicitWidth ?? Math.max(0, width)\n const contentWidth = Math.max(0, boxWidth - insetX)\n const measuredText = dependencies.measureTextNode(node, contentWidth)\n const explicitHeight = parseSizeValue(node.style.height as string | number | undefined, 0)\n const unclampedHeight = explicitHeight ?? Math.max(measuredText.height + insetY, insetY)\n const minHeight = parseSizeValue(node.style.minHeight as string | number | undefined, 0)\n const maxHeight = parseSizeValue(node.style.maxHeight as string | number | undefined, 0)\n let boxHeight = unclampedHeight\n if (minHeight != null) boxHeight = Math.max(boxHeight, minHeight)\n if (maxHeight != null) boxHeight = Math.min(boxHeight, maxHeight)\n return {\n ...node,\n box: { x: 0, y: 0, width: boxWidth, height: boxHeight },\n pageNumber: 0,\n absoluteX: 0,\n absoluteY: 0,\n text: measuredText.lines.join(\"\"),\n measuredText,\n children: []\n }\n}\n\nconst canMeasureTableCellFast = (cellNode: PdfElementNode): boolean => {\n if (cellNode.type !== \"TABLE_CELL\") return false\n if (cellNode.style.position === \"absolute\" || hasTransforms(cellNode)) return false\n for (const child of cellNode.children) {\n if (child.type !== \"TEXT\" && child.type !== \"LINK\" && child.type !== \"TEXT_INSTANCE\") return false\n if (child.type !== \"TEXT_INSTANCE\") {\n if (child.style.position === \"absolute\" || hasTransforms(child)) return false\n }\n }\n return true\n}\n\nexport const measureTableCellFast = (\n cellNode: PdfElementNode,\n width: number,\n dependencies: Pick<TableLayoutDependencies, \"measureTextNode\">\n): LayoutNode | null => {\n if (!canMeasureTableCellFast(cellNode)) return null\n\n const insetLeft = cellNode.style.paddingLeft + cellNode.style.borderLeft.width\n const insetRight = cellNode.style.paddingRight + cellNode.style.borderRight.width\n const insetTop = cellNode.style.paddingTop + cellNode.style.borderTop.width\n const insetBottom = cellNode.style.paddingBottom + cellNode.style.borderBottom.width\n const contentWidth = Math.max(0, width - insetLeft - insetRight)\n const gap = parseSizeValue(cellNode.style.rowGap as string | number | undefined, 0) ??\n parseSizeValue(cellNode.style.gap as string | number | undefined, 0) ?? 0\n\n let cursorY = insetTop\n const children: LayoutNode[] = []\n let hasRenderableChild = false\n\n for (const child of cellNode.children) {\n if (child.type === \"TEXT_INSTANCE\") continue\n const marginTop = child.style.marginTop\n const marginBottom = child.style.marginBottom\n const marginLeft = child.style.marginLeft\n const marginRight = child.style.marginRight\n const childAvailableWidth = Math.max(0, contentWidth - marginLeft - marginRight)\n const childLayout = resolveFastTextNodeLayout(child, childAvailableWidth, dependencies)\n if (!childLayout) return null\n const shifted = {\n ...childLayout,\n box: {\n ...childLayout.box,\n x: insetLeft + marginLeft,\n y: cursorY + marginTop\n },\n absoluteX: 0,\n absoluteY: 0\n }\n children.push(shifted)\n cursorY += marginTop + childLayout.box.height + marginBottom\n hasRenderableChild = true\n cursorY += gap\n }\n\n if (hasRenderableChild) cursorY -= gap\n\n const explicitHeight = parseSizeValue(cellNode.style.height as string | number | undefined, 0)\n const rawHeight = explicitHeight ?? Math.max(insetTop + insetBottom, cursorY + insetBottom)\n const minHeight = parseSizeValue(cellNode.style.minHeight as string | number | undefined, 0)\n const maxHeight = parseSizeValue(cellNode.style.maxHeight as string | number | undefined, 0)\n let boxHeight = rawHeight\n if (minHeight != null) boxHeight = Math.max(boxHeight, minHeight)\n if (maxHeight != null) boxHeight = Math.min(boxHeight, maxHeight)\n\n return {\n ...cellNode,\n box: { x: 0, y: 0, width, height: boxHeight },\n pageNumber: 0,\n absoluteX: 0,\n absoluteY: 0,\n measuredText: undefined,\n children\n }\n}\n\nconst measureRow = (\n row: TableModelRow,\n columnWidths: number[],\n parentHeight: number,\n dependencies: TableLayoutDependencies,\n timings?: Record<string, number>\n): TableMeasurementRow => {\n const cacheKey = `${row.fingerprint ?? \"\"}::${columnWidths.join(\",\")}`\n const cached = rowMeasurementCache.get(cacheKey)\n if (cached) {\n dependencies.addCounter(\"rowCacheHits\")\n return {\n ...cached,\n row,\n cells: cached.cells.map((cell) => ({\n cell: cell.cell,\n layout: dependencies.cloneLayoutSubtree(cell.layout)\n }))\n }\n }\n\n dependencies.addCounter(\"rowCacheMisses\")\n const measuredCells = row.cells.map((cell) => {\n const cellWidth = sumColumnWidths(columnWidths, cell.columnIndex, cell.colSpan) ?? 0\n const fastLayout = measureTableCellFast(cell.node, cellWidth, dependencies)\n if (fastLayout) {\n dependencies.addCounter(\"fastCellsMeasured\")\n return { cell, layout: fastLayout } satisfies TableMeasurementCell\n }\n dependencies.addCounter(\"fallbackCellsMeasured\")\n return {\n cell,\n layout: dependencies.layoutCellGeneric(cell.node, cellWidth, row.fixedHeight ?? parentHeight, timings)\n } satisfies TableMeasurementCell\n })\n\n const measuredRow = { row, cells: measuredCells } satisfies TableMeasurementRow\n rowMeasurementCache.set(cacheKey, {\n ...measuredRow,\n cells: measuredRow.cells.map((cell) => ({\n cell: cell.cell,\n layout: dependencies.cloneLayoutSubtree(cell.layout)\n }))\n })\n return measuredRow\n}\n\nexport const measureCells = (\n model: TableModel,\n columnWidths: number[],\n parentHeight: number,\n dependencies: TableLayoutDependencies,\n timings?: Record<string, number>\n): TableMeasurements => ({\n rows: model.rows.map((row) => measureRow(row, columnWidths, parentHeight, dependencies, timings))\n})\n\nexport const resolveRowHeights = (\n model: TableModel,\n measurements: TableMeasurements\n): Map<TableModelRow, number> => {\n const heights = new Map<TableModelRow, number>()\n const measurementsByRow = new Map(measurements.rows.map((entry) => [entry.row, entry]))\n for (const section of model.sections) {\n for (const row of section.rows) {\n if (row.fixedHeight != null) {\n heights.set(row, row.fixedHeight)\n continue\n }\n const measurement = measurementsByRow.get(row)\n const rowHeight = measurement\n ? measurement.cells\n .filter((cell) => cell.cell.rowSpan === 1)\n .reduce((maxHeight, cell) => Math.max(maxHeight, cell.layout.box.height), 0)\n : 0\n heights.set(row, rowHeight)\n }\n }\n return heights\n}\n\nexport const applyRowSpanAdjustments = (\n model: TableModel,\n measurements: TableMeasurements,\n rowHeights: Map<TableModelRow, number>\n): Map<TableModelRow, number> => {\n const nextHeights = new Map(rowHeights)\n const measurementsByRow = new Map(measurements.rows.map((entry) => [entry.row, entry]))\n for (const section of model.sections) {\n for (const row of section.rows) {\n if (row.fixedHeight != null) continue\n const measurement = measurementsByRow.get(row)\n if (!measurement) continue\n for (const measuredCell of measurement.cells) {\n if (measuredCell.cell.rowSpan <= 1) continue\n const endRowIndex = Math.min(section.rows.length, measuredCell.cell.rowIndex + measuredCell.cell.rowSpan)\n const spannedRows = section.rows.slice(measuredCell.cell.rowIndex, endRowIndex)\n const currentSpanHeight = spannedRows.reduce((sum, candidate) => sum + (nextHeights.get(candidate) ?? 0), 0)\n if (currentSpanHeight >= measuredCell.layout.box.height) continue\n const deficit = measuredCell.layout.box.height - currentSpanHeight\n const spread = deficit / Math.max(1, spannedRows.length)\n for (const spannedRow of spannedRows) {\n nextHeights.set(spannedRow, (nextHeights.get(spannedRow) ?? 0) + spread)\n }\n }\n }\n }\n return nextHeights\n}\n\nexport const emitTableLayout = (\n model: TableModel,\n columnWidths: number[],\n rowHeights: Map<TableModelRow, number>,\n measurements: TableMeasurements,\n dependencies: Pick<TableLayoutDependencies, \"shiftLayoutSubtree\">\n): LayoutNode => {\n const collectTableDrawNodes = (nodes: LayoutNode[]): LayoutNode[] =>\n nodes.flatMap((node) => [node, ...collectTableDrawNodes(node.children)])\n\n const tableNode = model.tableNode\n const tableWidth = columnWidths.reduce((sum, width) => sum + width, 0) + getNodeHorizontalInset(tableNode)\n const contentWidth = Math.max(0, tableWidth - getNodeHorizontalInset(tableNode))\n let sectionY = tableNode.style.paddingTop + tableNode.style.borderTop.width\n\n const rowMeasurementByRow = new Map(measurements.rows.map((row) => [row.row, row]))\n const sectionLayouts = model.sections.map((section) => {\n let rowY = sectionY\n let withinSectionY = 0\n const rowLayouts = section.rows.map((row) => {\n const measurement = rowMeasurementByRow.get(row)\n const rowHeight = rowHeights.get(row) ?? 0\n const cellLayouts = (measurement?.cells ?? []).map(({ cell, layout }) => {\n // Column offset relative to the row's left edge (row.box.x already accounts for table padding)\n const columnOffset = sumColumnWidths(columnWidths, 0, cell.columnIndex) ?? 0\n const width = sumColumnWidths(columnWidths, cell.columnIndex, cell.colSpan) ?? layout.box.width\n const endRowIndex = Math.min(section.rows.length, cell.rowIndex + cell.rowSpan)\n const height = section.rows\n .slice(cell.rowIndex, endRowIndex)\n .reduce((sum, currentRow) => sum + (rowHeights.get(currentRow) ?? 0), 0)\n // Only update the cell's own box position \u2014 children already have positions relative to\n // the cell from measurement, so do NOT shift them with shiftLayoutSubtree (that would\n // bake the column offset into child box.x/y, causing assignSubtreeAbsolutePosition to\n // double-count it when computing absoluteX/absoluteY).\n return {\n ...layout,\n box: { ...layout.box, x: columnOffset, y: 0, width, height }\n }\n })\n const rowLayout: LayoutNode = {\n ...row.node,\n box: {\n x: 0,\n y: withinSectionY,\n width: contentWidth,\n height: rowHeight\n },\n pageNumber: 0,\n absoluteX: 0,\n absoluteY: 0,\n measuredText: undefined,\n children: cellLayouts\n }\n rowY += rowHeight\n withinSectionY += rowHeight\n return rowLayout\n })\n const sectionHeight = section.rows.reduce((sum, row) => sum + (rowHeights.get(row) ?? 0), 0)\n const sectionLayout: LayoutNode = {\n ...section.node,\n box: {\n x: tableNode.style.paddingLeft + tableNode.style.borderLeft.width,\n y: sectionY,\n width: contentWidth,\n height: sectionHeight\n },\n pageNumber: 0,\n absoluteX: 0,\n absoluteY: 0,\n measuredText: undefined,\n children: rowLayouts\n }\n sectionY += sectionHeight\n return sectionLayout\n })\n\n const layout: TableLayoutNodeWithDrawNodes = {\n ...tableNode,\n props: {\n ...tableNode.props,\n __tableDrawNodes: collectTableDrawNodes(sectionLayouts)\n },\n box: {\n x: 0,\n y: 0,\n width: tableWidth,\n height: Math.max(getNodeVerticalInset(tableNode), sectionY + tableNode.style.paddingBottom + tableNode.style.borderBottom.width)\n },\n pageNumber: 0,\n absoluteX: 0,\n absoluteY: 0,\n measuredText: undefined,\n children: sectionLayouts\n }\n return layout\n}\n\nexport const layoutSpecializedTable = (\n tableNode: PdfElementNode,\n width: number,\n parentHeight: number,\n dependencies: TableLayoutDependencies,\n timings?: Record<string, number>\n): LayoutNode => {\n dependencies.addCounter(\"specializedTablesUsed\")\n const tableWidth = Math.max(0, width)\n const contentWidth = Math.max(0, tableWidth - getNodeHorizontalInset(tableNode))\n const model = extractTableModel(tableNode)\n const columnWidths = resolveColumnWidths(model, contentWidth, dependencies)\n const measurements = measureCells(model, columnWidths, parentHeight, dependencies, timings)\n const rowHeights = applyRowSpanAdjustments(model, measurements, resolveRowHeights(model, measurements))\n const layout = emitTableLayout(model, columnWidths, rowHeights, measurements, dependencies)\n return {\n ...layout,\n box: {\n ...layout.box,\n width: tableWidth\n }\n }\n}\n", "import Yoga, {\n Align,\n Direction,\n Display,\n Edge,\n FlexDirection,\n Gutter,\n Justify,\n MeasureMode,\n PositionType,\n Wrap,\n ensureYogaRuntime,\n getActiveYoga,\n type Node as YogaNode\n} from \"./yoga-runtime\"\nimport PDFDocument from \"./pdfkit-runtime\"\nimport {\n clearBreakChunkCache,\n clearShapeCaches,\n getTextLineHeight as engineGetTextLineHeight,\n measureTextWithEngine,\n shouldOverflowUnbrokenToken\n} from \"./text-engine\"\nimport {\n TABLE_SECTION_TYPES,\n TABLE_STRUCTURE_TYPES,\n canUseSpecializedTableLayout,\n clearTableLayoutCaches,\n createTableLayoutContext,\n getTableCellWidthFromContext,\n layoutSpecializedTable,\n type TableLayoutContext\n} from \"./table\"\nimport { base64ToBytes, base64ToText, extractTextRuns, Font, isBinaryInput, ProfileCollector, readUint32BE, toUint8Array, isPercent, parseSizeValue, unwrapImageSource } from \"@jsxpdf/core\"\nimport type { AttributedTextRun, HyphenationCallback, LayoutNode, MeasuredText, MeasuredTextLine, MeasuredTextRun, PdfElementNode, PdfTextFit, ResolvedStyle } from \"@jsxpdf/core\"\nimport type { PrecompiledBindingChange } from \"./precompile\"\n\nconst SVG_CHILD_TYPES = new Set([\n \"G\",\n \"PATH\",\n \"RECT\",\n \"LINE\",\n \"CIRCLE\",\n \"ELLIPSE\",\n \"POLYGON\",\n \"POLYLINE\",\n \"DEFS\",\n \"CLIP_PATH\",\n \"LINEAR_GRADIENT\",\n \"RADIAL_GRADIENT\",\n \"STOP\",\n \"TSPAN\"\n])\n\nconst FIXED_SIZE_LEAF_TYPES = new Set([\n \"NOTE\",\n \"CANVAS\",\n \"TEXT_INPUT\",\n \"SELECT\",\n \"CHECKBOX\",\n \"LIST\"\n])\n\n/** TEXT, and LINK that only wraps text runs \u2014 not Image/View/Svg mixed trees. */\nexport const isTextLayoutLeaf = (node: PdfElementNode): boolean => {\n if (node.type === \"TEXT\") return true\n if (node.type !== \"LINK\") return false\n for (const child of node.children) {\n if (child.type === \"TEXT_INSTANCE\" || child.type === \"TEXT\") continue\n return false\n }\n return true\n}\n\nconst isTableSectionType = (type: PdfElementNode[\"type\"]): type is typeof TABLE_SECTION_TYPES extends Set<infer T> ? T : never =>\n TABLE_SECTION_TYPES.has(type as never)\n\nconst isTableStructureType = (type: PdfElementNode[\"type\"]): type is typeof TABLE_STRUCTURE_TYPES extends Set<infer T> ? T : never =>\n TABLE_STRUCTURE_TYPES.has(type as never)\n\nconst pageSizes: Record<string, [number, number]> = {\n \"4A0\": [4767.87, 6740.79],\n \"2A0\": [3370.39, 4767.87],\n A0: [2383.94, 3370.39],\n A1: [1683.78, 2383.94],\n A2: [1190.55, 1683.78],\n A3: [841.89, 1190.55],\n A4: [595.28, 841.89],\n A5: [419.53, 595.28],\n A6: [297.64, 419.53],\n A7: [209.76, 297.64],\n A8: [147.4, 209.76],\n A9: [104.88, 147.4],\n A10: [73.7, 104.88],\n B0: [2834.65, 4008.19],\n B1: [2004.09, 2834.65],\n B2: [1417.32, 2004.09],\n B3: [1000.63, 1417.32],\n B4: [708.66, 1000.63],\n B5: [498.9, 708.66],\n B6: [354.33, 498.9],\n B7: [249.45, 354.33],\n B8: [175.75, 249.45],\n B9: [124.72, 175.75],\n B10: [87.87, 124.72],\n C0: [2599.37, 3676.54],\n C1: [1836.85, 2599.37],\n C2: [1298.27, 1836.85],\n C3: [918.43, 1298.27],\n C4: [649.13, 918.43],\n C5: [459.21, 649.13],\n C6: [323.15, 459.21],\n C7: [229.61, 323.15],\n C8: [161.57, 229.61],\n C9: [113.39, 161.57],\n C10: [79.37, 113.39],\n RA0: [2437.8, 3458.27],\n RA1: [1729.13, 2437.8],\n RA2: [1218.9, 1729.13],\n RA3: [864.57, 1218.9],\n RA4: [609.45, 864.57],\n SRA0: [2551.18, 3628.35],\n SRA1: [1814.17, 2551.18],\n SRA2: [1275.59, 1814.17],\n SRA3: [907.09, 1275.59],\n SRA4: [637.8, 907.09],\n EXECUTIVE: [521.86, 756.0],\n FOLIO: [612.0, 936.0],\n LEGAL: [612.0, 1008.0],\n LETTER: [612.0, 792.0],\n TABLOID: [792.0, 1224.0],\n ID1: [153, 243]\n}\n\nconst metricsDocument = new PDFDocument({ autoFirstPage: false, font: null as never })\nmetricsDocument.addPage({ size: [2000, 2000], margin: 0 })\nlet textMeasureCache = new Map<string, MeasuredText>()\nlet intrinsicImageSizeCache = new Map<string, { width: number; height: number } | null>()\nlet intrinsicImageSizeObjectCache = new WeakMap<object, { width: number; height: number } | null>()\nlet hyphenationCallbackIds = new WeakMap<HyphenationCallback, number>()\nlet nextHyphenationCallbackId = 1\nlet textMeasureInputCache = new WeakMap<PdfElementNode, TextMeasureInput>()\nlet specializedTableLayoutByYogaNode = new WeakMap<YogaNode, LayoutNode>()\nlet specializedTableLayoutByNode = new WeakMap<PdfElementNode, LayoutNode>()\nlet specializedTableLayoutCacheByNode = new WeakMap<PdfElementNode, { width: number; height: number; layout: LayoutNode }>()\nlet specializedTableNodes = new WeakSet<PdfElementNode>()\nlet tableCellLayoutCache = new Map<string, LayoutNode>()\nlet tableCellFingerprintCache = new WeakMap<PdfElementNode, string>()\nlet textRunsFingerprintCache = new Map<string, number>()\nlet nextTextRunsFingerprintId = 1\nconst yogaConfigs = new WeakMap<object, ReturnType<typeof Yoga.Config.create>>()\n\nexport const clearLayoutCaches = (): void => {\n textMeasureCache = new Map()\n intrinsicImageSizeCache = new Map()\n intrinsicImageSizeObjectCache = new WeakMap()\n hyphenationCallbackIds = new WeakMap()\n nextHyphenationCallbackId = 1\n textMeasureInputCache = new WeakMap()\n specializedTableLayoutByYogaNode = new WeakMap()\n specializedTableLayoutByNode = new WeakMap()\n specializedTableLayoutCacheByNode = new WeakMap()\n specializedTableNodes = new WeakSet()\n tableCellLayoutCache = new Map()\n tableCellFingerprintCache = new WeakMap()\n clearTableLayoutCaches()\n textRunsFingerprintCache = new Map()\n nextTextRunsFingerprintId = 1\n clearShapeCaches()\n clearBreakChunkCache()\n}\n\nconst getYogaConfig = () => {\n const activeYoga = getActiveYoga()\n let config = yogaConfigs.get(activeYoga)\n if (!config) {\n config = activeYoga.Config.create()\n config.setPointScaleFactor(0)\n yogaConfigs.set(activeYoga, config)\n }\n return config\n}\n\nexport type IncrementalYogaLayoutState = {\n documentNode: PdfElementNode\n documentYoga: YogaNode\n pageEntries: Array<{ node: PdfElementNode; yoga: YogaNode; width: number; height: number }>\n yogaByNode: WeakMap<PdfElementNode, YogaNode>\n pageSizeByNode: WeakMap<PdfElementNode, { width: number; height: number }>\n parentByNode: WeakMap<PdfElementNode, PdfElementNode | null>\n cachedPageLayouts: LayoutNode[]\n cachedLayoutByYoga: WeakMap<YogaNode, LayoutNode>\n}\n\ntype YogaRegistry = {\n yogaByNode: WeakMap<PdfElementNode, YogaNode>\n pageSizeByNode: WeakMap<PdfElementNode, { width: number; height: number }>\n parentByNode: WeakMap<PdfElementNode, PdfElementNode | null>\n}\n\nconst invalidateTextMeasureInputCache = (node: PdfElementNode): void => {\n textMeasureInputCache.delete(node)\n const children = node.children\n for (let index = 0; index < children.length; index += 1) {\n invalidateTextMeasureInputCache(children[index])\n }\n}\n\nconst getTextLineGap = (style: ResolvedStyle): number => {\n if (!style.hasExplicitLineHeight) return 0\n return Math.max(0, style.lineHeight - engineGetTextLineHeight(style))\n}\n\nconst getTextLineHeight = (style: ResolvedStyle): number => engineGetTextLineHeight(style)\n\nconst getImplicitTextHeight = (style: ResolvedStyle): number => engineGetTextLineHeight(style)\n\nexport const resolvePageSizeSpec = (\n size: PdfElementNode[\"props\"][\"size\"],\n orientation?: PdfElementNode[\"props\"][\"orientation\"],\n dpi = 72\n): [number, number] => {\n let resolved: [number, number]\n\n if (typeof size === \"string\") {\n resolved = pageSizes[size.toUpperCase()] ?? pageSizes.A4\n } else if (Array.isArray(size)) {\n resolved = [\n parseSizeValue(size[0], 0, dpi) ?? pageSizes.A4[0],\n parseSizeValue(size[1], 0, dpi) ?? pageSizes.A4[1]\n ]\n } else if (typeof size === \"number\") {\n resolved = [size, size]\n } else if (size && typeof size === \"object\") {\n resolved = [\n parseSizeValue(size.width, 0, dpi) ?? pageSizes.A4[0],\n parseSizeValue(size.height, 0, dpi) ?? pageSizes.A4[1]\n ]\n } else {\n resolved = pageSizes.A4\n }\n\n return orientation === \"landscape\" ? [resolved[1], resolved[0]] : resolved\n}\n\nconst resolvePageSize = (node: PdfElementNode): [number, number] => {\n return resolvePageSizeSpec(node.props.size, node.props.orientation, node.props.dpi ?? 72)\n}\n\nconst clampToPositiveInt = (value: unknown): number | null => {\n const numeric = Number(value)\n if (!Number.isFinite(numeric) || numeric <= 0) return null\n return Math.floor(numeric)\n}\n\nconst sumColumnWidths = (columns: number[], start: number, count: number): number | undefined => {\n if (count <= 0 || start >= columns.length) return undefined\n const end = Math.min(start + count, columns.length)\n let total = 0\n for (let index = start; index < end; index += 1) total += columns[index]\n return total\n}\n\nconst scaleColumnWidthsToTarget = (widths: number[], targetWidth: number): number[] => {\n const normalized = widths.map((width) => Number.isFinite(width) && width > 0 ? width : 0)\n const totalWidth = normalized.reduce((sum, width) => sum + width, 0)\n if (!Number.isFinite(targetWidth) || targetWidth <= 0) return normalized\n if (normalized.length === 0) return normalized\n if (totalWidth === 0) return normalized.map(() => targetWidth / normalized.length)\n\n if (Math.abs(totalWidth - targetWidth) < 0.001) return normalized\n\n if (totalWidth > targetWidth) {\n const ratio = targetWidth / totalWidth\n return normalized.map((width) => width * ratio)\n }\n\n const extraWidth = targetWidth - totalWidth\n return normalized.map((width) => width + extraWidth * (width / totalWidth))\n}\n\nconst getNodeHorizontalInset = (node: PdfElementNode): number =>\n node.style.paddingLeft + node.style.paddingRight + node.style.borderLeft.width + node.style.borderRight.width\n\nconst getNodeLeftInset = (node: PdfElementNode): number =>\n node.style.paddingLeft + node.style.borderLeft.width\n\nconst getNodePreferredWidth = (node: PdfElementNode, parentWidth: number): number => {\n const explicitWidth = parseSizeValue(node.style.width as string | number | undefined, parentWidth)\n let preferredWidth = explicitWidth\n\n if (preferredWidth == null) {\n if (isTextLayoutLeaf(node)) {\n preferredWidth = measureText(getTextMeasureInput(node), Number.POSITIVE_INFINITY).width\n } else {\n switch (node.type) {\n case \"IMAGE\": {\n const intrinsic = getIntrinsicImageSize(node)\n if (intrinsic) {\n const resolvedHeight = parseSizeValue(node.style.height as string | number | undefined, 0)\n preferredWidth = resolvedHeight != null\n ? resolvedHeight * (intrinsic.width / intrinsic.height)\n : intrinsic.width\n }\n break\n }\n case \"SVG\":\n preferredWidth = getSvgIntrinsicSize(node, parentWidth, 0).width\n break\n default: {\n const children = node.children.filter((child) => child.type !== \"TEXT_INSTANCE\")\n if (children.length > 0) {\n const isRowLike = node.style.flexDirection === \"row\" || node.style.flexDirection === \"row-reverse\" || node.type === \"TABLE_ROW\"\n const gap = isRowLike\n ? parseSizeValue(node.style.columnGap ?? node.style.gap as string | number | undefined, parentWidth) ?? 0\n : 0\n preferredWidth = isRowLike\n ? children.reduce((sum, child) => sum + getNodePreferredWidth(child, parentWidth), 0) + gap * Math.max(0, children.length - 1)\n : Math.max(...children.map((child) => getNodePreferredWidth(child, parentWidth)), 0)\n }\n break\n }\n }\n }\n }\n\n const minWidth = parseSizeValue(node.style.minWidth as string | number | undefined, parentWidth)\n const maxWidth = parseSizeValue(node.style.maxWidth as string | number | undefined, parentWidth)\n let resolvedWidth = (preferredWidth ?? 0) + (explicitWidth == null ? getNodeHorizontalInset(node) : 0)\n if (minWidth != null) resolvedWidth = Math.max(resolvedWidth, minWidth)\n if (maxWidth != null) resolvedWidth = Math.min(resolvedWidth, maxWidth)\n return Number.isFinite(resolvedWidth) ? resolvedWidth : 0\n}\n\n\nconst getSvgIntrinsicSize = (node: PdfElementNode, parentWidth: number, parentHeight: number): { width: number; height: number } => {\n const width =\n parseSizeValue(node.props.width as string | number | undefined, parentWidth) ??\n parseSizeValue(node.style.width as string | number | undefined, parentWidth)\n const height =\n parseSizeValue(node.props.height as string | number | undefined, parentHeight) ??\n parseSizeValue(node.style.height as string | number | undefined, parentHeight)\n if (width != null && height != null) return { width, height }\n if (typeof node.props.viewBox === \"string\") {\n const parts = node.props.viewBox.trim().split(/[\\s,]+/).map(Number)\n if (parts.length === 4 && parts.every(Number.isFinite)) {\n const [, , viewBoxWidth, viewBoxHeight] = parts\n if (width != null) return { width, height: width * (viewBoxHeight / viewBoxWidth) }\n if (height != null) return { width: height * (viewBoxWidth / viewBoxHeight), height }\n return { width: viewBoxWidth, height: viewBoxHeight }\n }\n }\n return { width: width ?? 0, height: height ?? 0 }\n}\n\nlet JUSTIFY_MAP: Record<string, number> | null = null\nconst getJustifyMap = (): Record<string, number> => {\n if (!JUSTIFY_MAP) {\n JUSTIFY_MAP = {\n \"flex-start\": Justify.FlexStart,\n center: Justify.Center,\n \"flex-end\": Justify.FlexEnd,\n \"space-between\": Justify.SpaceBetween,\n \"space-around\": Justify.SpaceAround,\n \"space-evenly\": Justify.SpaceEvenly\n }\n }\n return JUSTIFY_MAP\n}\nlet ALIGN_MAP: Record<string, number> | null = null\nconst getAlignMap = (): Record<string, number> => {\n if (!ALIGN_MAP) {\n ALIGN_MAP = {\n auto: Align.Auto,\n \"flex-start\": Align.FlexStart,\n center: Align.Center,\n \"flex-end\": Align.FlexEnd,\n stretch: Align.Stretch,\n baseline: Align.Baseline,\n \"space-between\": Align.SpaceBetween,\n \"space-around\": Align.SpaceAround,\n \"space-evenly\": Align.SpaceEvenly\n }\n }\n return ALIGN_MAP\n}\n\nconst applyLayoutStyle = (yogaNode: YogaNode, style: ResolvedStyle, parentWidth: number, parentHeight: number): void => {\n const setDimension = (\n value: string | number | undefined,\n parentSize: number,\n fixedMethod: \"setWidth\" | \"setHeight\" | \"setMinWidth\" | \"setMinHeight\" | \"setMaxWidth\" | \"setMaxHeight\",\n percentMethod:\n | \"setWidthPercent\"\n | \"setHeightPercent\"\n | \"setMinWidthPercent\"\n | \"setMinHeightPercent\"\n | \"setMaxWidthPercent\"\n | \"setMaxHeightPercent\"\n ) => {\n if (value == null) return\n if (isPercent(value)) {\n yogaNode[percentMethod]?.(Number.parseFloat(value))\n return\n }\n const resolved = parseSizeValue(value, parentSize)\n if (resolved != null) yogaNode[fixedMethod](resolved)\n }\n\n if (style.display === \"none\") {\n yogaNode.setDisplay(Display.None)\n }\n const flexDirection =\n style.flexDirection === \"row\"\n ? FlexDirection.Row\n : style.flexDirection === \"row-reverse\"\n ? FlexDirection.RowReverse\n : style.flexDirection === \"column-reverse\"\n ? FlexDirection.ColumnReverse\n : FlexDirection.Column\n // Yoga defaults to column; avoid a no-op boundary call for the common case.\n if (flexDirection !== FlexDirection.Column) {\n yogaNode.setFlexDirection(flexDirection)\n }\n if (style.flexWrap === \"wrap\") yogaNode.setFlexWrap(Wrap.Wrap)\n else if (style.flexWrap === \"wrap-reverse\") yogaNode.setFlexWrap(Wrap.WrapReverse)\n\n const width = parseSizeValue(style.width as string | number | undefined, parentWidth)\n const height = parseSizeValue(style.height as string | number | undefined, parentHeight)\n setDimension(style.width as string | number | undefined, parentWidth, \"setWidth\", \"setWidthPercent\")\n setDimension(style.height as string | number | undefined, parentHeight, \"setHeight\", \"setHeightPercent\")\n setDimension(style.minWidth as string | number | undefined, parentWidth, \"setMinWidth\", \"setMinWidthPercent\")\n setDimension(style.minHeight as string | number | undefined, parentHeight, \"setMinHeight\", \"setMinHeightPercent\")\n setDimension(style.maxWidth as string | number | undefined, parentWidth, \"setMaxWidth\", \"setMaxWidthPercent\")\n setDimension(style.maxHeight as string | number | undefined, parentHeight, \"setMaxHeight\", \"setMaxHeightPercent\")\n if (typeof style.flexGrow === \"number\") yogaNode.setFlexGrow(style.flexGrow)\n // Yoga / react-pdf default flexShrink is 0. Do not force 1 just because width\n // or flexBasis is set \u2014 percent table columns and fixed cells then collapse\n // and glyph-wrap (\"Re\"/\"Judge:\") unlike react-pdf.\n if (typeof style.flexShrink === \"number\") {\n yogaNode.setFlexShrink(style.flexShrink)\n }\n if (typeof style.flexBasis === \"number\") {\n yogaNode.setFlexBasis(style.flexBasis)\n } else if (typeof style.flexBasis === \"string\") {\n if (isPercent(style.flexBasis)) {\n yogaNode.setFlexBasisPercent?.(Number.parseFloat(style.flexBasis))\n } else {\n const resolvedBasis = parseSizeValue(style.flexBasis, parentWidth)\n if (resolvedBasis != null) yogaNode.setFlexBasis(resolvedBasis)\n }\n }\n const gapWidthBase = width ?? parentWidth\n const gapHeightBase = height ?? parentHeight\n const resolvedGap = parseSizeValue(style.gap as string | number | undefined, flexDirection === FlexDirection.Column ? gapHeightBase : gapWidthBase)\n const resolvedRowGap = parseSizeValue(style.rowGap as string | number | undefined, gapHeightBase)\n const resolvedColumnGap = parseSizeValue(style.columnGap as string | number | undefined, gapWidthBase)\n if (resolvedGap != null) {\n yogaNode.setGap(Gutter.Row, resolvedGap)\n yogaNode.setGap(Gutter.Column, resolvedGap)\n }\n if (resolvedRowGap != null) yogaNode.setGap(Gutter.Row, resolvedRowGap)\n if (resolvedColumnGap != null) yogaNode.setGap(Gutter.Column, resolvedColumnGap)\n\n if (style.justifyContent) yogaNode.setJustifyContent((getJustifyMap()[style.justifyContent] ?? Justify.FlexStart) as never)\n if (style.alignItems) yogaNode.setAlignItems((getAlignMap()[style.alignItems] ?? Align.Stretch) as never)\n if (style.alignSelf) yogaNode.setAlignSelf((getAlignMap()[style.alignSelf] ?? Align.Auto) as never)\n\n const marginTop = style.marginTop\n const marginRight = style.marginRight\n const marginBottom = style.marginBottom\n const marginLeft = style.marginLeft\n if (marginTop !== 0) yogaNode.setMargin(Edge.Top, marginTop)\n if (marginRight !== 0) yogaNode.setMargin(Edge.Right, marginRight)\n if (marginBottom !== 0) yogaNode.setMargin(Edge.Bottom, marginBottom)\n if (marginLeft !== 0) yogaNode.setMargin(Edge.Left, marginLeft)\n\n const paddingTop = style.paddingTop + style.borderTop.width\n const paddingRight = style.paddingRight + style.borderRight.width\n const paddingBottom = style.paddingBottom + style.borderBottom.width\n const paddingLeft = style.paddingLeft + style.borderLeft.width\n if (paddingTop !== 0) yogaNode.setPadding(Edge.Top, paddingTop)\n if (paddingRight !== 0) yogaNode.setPadding(Edge.Right, paddingRight)\n if (paddingBottom !== 0) yogaNode.setPadding(Edge.Bottom, paddingBottom)\n if (paddingLeft !== 0) yogaNode.setPadding(Edge.Left, paddingLeft)\n\n if (style.position === \"absolute\") {\n yogaNode.setPositionType(PositionType.Absolute)\n if (style.top != null) yogaNode.setPosition(Edge.Top, Number(style.top))\n if (style.right != null) yogaNode.setPosition(Edge.Right, Number(style.right))\n if (style.bottom != null) yogaNode.setPosition(Edge.Bottom, Number(style.bottom))\n if (style.left != null) yogaNode.setPosition(Edge.Left, Number(style.left))\n }\n}\n\nconst getCacheKeyForRuns = (runs: AttributedTextRun[]): string =>\n runs\n .map((run) =>\n [\n run.style.fontFamily,\n run.style.fontSize,\n run.style.fontWeight ?? \"\",\n run.style.lineHeight,\n run.style.hasExplicitLineHeight ? \"explicit\" : \"implicit\",\n run.style.color,\n run.style.textAlign,\n run.style.direction,\n run.style.lang ?? \"\",\n run.text\n ].join(\"::\")\n )\n .join(\"|||\")\n\ntype TextMeasureInput = {\n style: ResolvedStyle\n runs: AttributedTextRun[]\n flattenedText: string\n runFingerprintId: number\n maxLines: number | undefined\n textOverflow: ResolvedStyle[\"textOverflow\"]\n textAlign: ResolvedStyle[\"textAlign\"]\n direction: ResolvedStyle[\"direction\"]\n lang: ResolvedStyle[\"lang\"]\n hasExplicitLineHeight: boolean\n noWrap: boolean\n fit: PdfTextFit | null\n hyphenationCallback: HyphenationCallback | null\n hyphenationCallbackId: number\n /** Prebuilt static portion of the measure-cache key (everything except the target width). */\n measureKeyPrefix: string\n}\n\nconst buildMeasureKeyPrefix = (\n runFingerprintId: number,\n style: ResolvedStyle,\n maxLines: number | undefined,\n textOverflow: ResolvedStyle[\"textOverflow\"],\n textAlign: ResolvedStyle[\"textAlign\"],\n direction: ResolvedStyle[\"direction\"],\n lang: ResolvedStyle[\"lang\"],\n hasExplicitLineHeight: boolean,\n hyphenationCallbackId: number\n): string =>\n [\n \"shaped\",\n runFingerprintId,\n style.fontFamily,\n style.fontSize,\n style.fontWeight ?? \"\",\n maxLines ?? \"\",\n textOverflow ?? \"\",\n textAlign,\n direction,\n lang ?? \"\",\n hasExplicitLineHeight ? \"explicit\" : \"implicit\",\n hyphenationCallbackId\n ].join(\"::\")\n\nconst normalizeTextFit = (fit: PdfElementNode[\"props\"][\"fit\"], style: ResolvedStyle): PdfTextFit | null => {\n if (!fit || fit.axis !== \"width\") return null\n const maxFontSize = typeof fit.maxFontSize === \"number\" && fit.maxFontSize > 0 ? fit.maxFontSize : style.fontSize\n const minFontSize =\n typeof fit.minFontSize === \"number\" && fit.minFontSize > 0\n ? Math.min(fit.minFontSize, maxFontSize)\n : Math.min(style.fontSize, maxFontSize)\n\n return {\n axis: \"width\",\n minFontSize,\n maxFontSize\n }\n}\n\nconst scaleResolvedStyle = (style: ResolvedStyle, factor: number): ResolvedStyle => ({\n ...style,\n fontSize: style.fontSize * factor,\n lineHeight: style.lineHeight * factor,\n letterSpacing: style.letterSpacing * factor\n})\n\nconst scaleTextRuns = (runs: AttributedTextRun[], factor: number): AttributedTextRun[] =>\n runs.map((run) => ({\n text: run.text,\n style: scaleResolvedStyle(run.style, factor)\n }))\n\nconst getTextRunsFingerprintId = (runs: AttributedTextRun[]): number => {\n const key = getCacheKeyForRuns(runs)\n const existing = textRunsFingerprintCache.get(key)\n if (existing != null) return existing\n const next = nextTextRunsFingerprintId\n nextTextRunsFingerprintId += 1\n textRunsFingerprintCache.set(key, next)\n return next\n}\n\nconst defaultHyphenationCallback: HyphenationCallback = (word) => [word ?? \"\"]\n\nconst getHyphenationCallbackId = (callback?: HyphenationCallback | null): number => {\n if (!callback) return 0\n const cached = hyphenationCallbackIds.get(callback)\n if (cached != null) return cached\n const next = nextHyphenationCallbackId++\n hyphenationCallbackIds.set(callback, next)\n return next\n}\n\nconst getActiveHyphenationCallback = (node: PdfElementNode): HyphenationCallback | null =>\n node.props.hyphenationCallback ?? Font.getHyphenationCallback()\n\nconst scaleTextMeasureInput = (input: TextMeasureInput, fontSize: number): TextMeasureInput => {\n const baseFontSize = input.style.fontSize\n if (!(baseFontSize > 0) || Math.abs(fontSize - baseFontSize) < 0.01) return input\n const factor = fontSize / baseFontSize\n const style = scaleResolvedStyle(input.style, factor)\n const runs = scaleTextRuns(input.runs, factor)\n const runFingerprintId = getTextRunsFingerprintId(runs)\n return {\n ...input,\n style,\n runs,\n runFingerprintId,\n measureKeyPrefix: buildMeasureKeyPrefix(\n runFingerprintId,\n style,\n input.maxLines,\n input.textOverflow,\n input.textAlign,\n input.direction,\n input.lang,\n input.hasExplicitLineHeight,\n input.hyphenationCallbackId\n )\n }\n}\n\nconst getTextMeasureInput = (node: PdfElementNode): TextMeasureInput => {\n const cached = textMeasureInputCache.get(node)\n if (cached != null) return cached\n\n const input: TextMeasureInput = timeActiveLayoutBlock(\"layoutYoga.textMeasure.prepareInput\", () => {\n const runs = getLayoutTextRuns(node)\n const style = node.style\n const hyphenationCallback = getActiveHyphenationCallback(node)\n const fit = normalizeTextFit(node.props.fit, style)\n const maxLines = style.maxLines\n const textOverflow = style.textOverflow\n const textAlign = style.textAlign\n const direction = style.direction\n const lang = style.lang\n const hasExplicitLineHeight = style.hasExplicitLineHeight\n const noWrap: boolean = node.props.wrap === false || fit?.axis === \"width\"\n const hyphenationCallbackId = getHyphenationCallbackId(hyphenationCallback)\n const runFingerprintId = getTextRunsFingerprintId(runs)\n return {\n style,\n runs,\n flattenedText: flattenTextRuns(runs),\n runFingerprintId,\n maxLines,\n textOverflow,\n textAlign,\n direction,\n lang,\n hasExplicitLineHeight,\n noWrap,\n fit,\n hyphenationCallback,\n hyphenationCallbackId,\n measureKeyPrefix: buildMeasureKeyPrefix(\n runFingerprintId,\n style,\n maxLines,\n textOverflow,\n textAlign,\n direction,\n lang,\n hasExplicitLineHeight,\n hyphenationCallbackId\n )\n }\n })\n textMeasureInputCache.set(node, input)\n return input\n}\n\n/**\n * Single text pipeline: tokenize -> shape (fontkit / base-14 AFM) -> break\n * lines -> assemble glyph runs. There is no fallback path; failures throw.\n */\nconst measureTextRaw = (input: TextMeasureInput, width: number): MeasuredText => {\n addActiveLayoutCounter(\"textMeasureCalls\")\n const targetWidth = width > 0 ? width : Number.POSITIVE_INFINITY\n const cacheKey = `${input.measureKeyPrefix}::${Number.isFinite(targetWidth) ? targetWidth : \"inf\"}`\n recordActiveTextMeasureKey(cacheKey, input.runFingerprintId, targetWidth)\n const cached = textMeasureCache.get(cacheKey)\n if (cached) {\n addActiveLayoutCounter(\"textMeasureCacheHits\")\n return cached\n }\n addActiveLayoutCounter(\"textMeasureCacheMisses\")\n\n addActiveLayoutCounter(\"textShapeCalls\")\n const measured = timeActiveLayoutBlock(\"layoutYoga.textMeasure.shape\", () =>\n measureTextWithEngine(\n {\n runs: input.runs,\n style: input.style,\n noWrap: input.noWrap,\n maxLines: input.maxLines,\n textOverflow: input.textOverflow,\n textAlign: input.textAlign,\n direction: input.direction,\n hyphenationCallback: input.hyphenationCallback\n },\n width\n )\n )\n textMeasureCache.set(cacheKey, measured)\n return measured\n}\n\nconst fitTextToWidth = (input: TextMeasureInput, width: number): MeasuredText => {\n const fit = input.fit\n const targetWidth = width > 0 ? width : Number.POSITIVE_INFINITY\n if (!fit || fit.axis !== \"width\" || !input.noWrap || !Number.isFinite(targetWidth)) {\n return measureTextRaw(input, width)\n }\n\n const maxFontSize = fit.maxFontSize ?? input.style.fontSize\n const minFontSize = fit.minFontSize ?? Math.min(input.style.fontSize, maxFontSize)\n const cacheKey = [\n \"fit-width\",\n input.runFingerprintId,\n input.style.fontFamily,\n input.style.fontWeight ?? \"\",\n minFontSize,\n maxFontSize,\n targetWidth\n ].join(\"::\")\n recordActiveTextMeasureKey(cacheKey, input.runFingerprintId, targetWidth)\n const cached = textMeasureCache.get(cacheKey)\n if (cached) {\n addActiveLayoutCounter(\"textMeasureCacheHits\")\n return cached\n }\n\n const maxMeasure = measureTextRaw(scaleTextMeasureInput(input, maxFontSize), width)\n if ((maxMeasure.lineData[0]?.width ?? 0) <= targetWidth) {\n textMeasureCache.set(cacheKey, maxMeasure)\n return maxMeasure\n }\n\n const minMeasure = measureTextRaw(scaleTextMeasureInput(input, minFontSize), width)\n if ((minMeasure.lineData[0]?.width ?? 0) > targetWidth) {\n textMeasureCache.set(cacheKey, minMeasure)\n return minMeasure\n }\n\n let low = minFontSize\n let high = maxFontSize\n let best = minMeasure\n\n for (let iteration = 0; iteration < 12; iteration += 1) {\n const mid = (low + high) / 2\n const measured = measureTextRaw(scaleTextMeasureInput(input, mid), width)\n if ((measured.lineData[0]?.width ?? 0) <= targetWidth) {\n best = measured\n low = mid\n } else {\n high = mid\n }\n }\n\n textMeasureCache.set(cacheKey, best)\n return best\n}\n\nconst measureText = (input: TextMeasureInput, width: number): MeasuredText => fitTextToWidth(input, width)\n\nconst PNG_SIGNATURE = \"89504e470d0a1a0a\"\nconst toHex = (value: Uint8Array): string => Array.from(value).map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\")\n\nconst readImageSource = (\n node: PdfElementNode\n): { kind: \"raster\"; buffer: Uint8Array } | { kind: \"svg\"; markup: string } | null => {\n const src = unwrapImageSource(node.props.src ?? node.props.source)\n if (isBinaryInput(src)) return { kind: \"raster\", buffer: toUint8Array(src) }\n if (typeof src !== \"string\") return null\n\n const rasterDataUriMatch = src.match(/^data:image\\/(?:png|jpe?g|webp);base64,([A-Za-z0-9+/=]+)$/i)\n if (rasterDataUriMatch) return { kind: \"raster\", buffer: base64ToBytes(rasterDataUriMatch[1]) }\n\n const svgBase64DataUriMatch = src.match(/^data:image\\/svg\\+xml;base64,([A-Za-z0-9+/=]+)$/)\n if (svgBase64DataUriMatch) return { kind: \"svg\", markup: base64ToText(svgBase64DataUriMatch[1]) }\n\n const svgUriDataUriMatch = src.match(/^data:image\\/svg\\+xml(?:;charset=[^;,]+|;utf-?8)?,(.*)$/i)\n if (svgUriDataUriMatch) return { kind: \"svg\", markup: decodeURIComponent(svgUriDataUriMatch[1]) }\n\n const svgMarkupStart = src.indexOf(\"<svg\")\n if (svgMarkupStart >= 0) return { kind: \"svg\", markup: src.slice(svgMarkupStart) }\n\n return null\n}\n\nconst getIntrinsicImageSize = (node: PdfElementNode): { width: number; height: number } | null => {\n const source = readImageSource(node)\n const rawSource = unwrapImageSource(node.props.src ?? node.props.source)\n const objectCacheKey =\n rawSource != null && typeof rawSource === \"object\"\n ? rawSource\n : source?.kind === \"raster\"\n ? source.buffer\n : null\n if (objectCacheKey) {\n const cached = intrinsicImageSizeObjectCache.get(objectCacheKey)\n if (cached !== undefined) return cached\n }\n const stringCacheKey =\n typeof rawSource === \"string\"\n ? rawSource\n : source?.kind === \"svg\"\n ? source.markup\n : null\n if (stringCacheKey != null && intrinsicImageSizeCache.has(stringCacheKey)) {\n return intrinsicImageSizeCache.get(stringCacheKey) ?? null\n }\n if (!source && rawSource == null) return null\n\n let resolved: { width: number; height: number } | null = null\n if (source?.kind === \"svg\") {\n const widthMatch = source.markup.match(/\\bwidth=\"([^\"]+)\"/i)\n const heightMatch = source.markup.match(/\\bheight=\"([^\"]+)\"/i)\n const parseNumericSize = (value?: string): number | null => {\n if (!value) return null\n const match = value.match(/^([0-9]*\\.?[0-9]+)/)\n return match ? Number(match[1]) : null\n }\n\n const width = parseNumericSize(widthMatch?.[1])\n const height = parseNumericSize(heightMatch?.[1])\n if (width != null && height != null) {\n resolved = { width, height }\n } else {\n const viewBoxMatch = source.markup.match(/\\bviewBox=\"([^\"]+)\"/i)\n if (!viewBoxMatch) {\n resolved = null\n } else {\n const viewBoxParts = viewBoxMatch[1].trim().split(/[\\s,]+/).map(Number)\n resolved =\n viewBoxParts.length !== 4 || viewBoxParts.some((part) => !Number.isFinite(part))\n ? null\n : { width: viewBoxParts[2], height: viewBoxParts[3] }\n }\n }\n } else if (source?.kind === \"raster\" && source.buffer.length >= 24 && toHex(source.buffer.subarray(0, 8)) === PNG_SIGNATURE) {\n resolved = {\n width: readUint32BE(source.buffer, 16),\n height: readUint32BE(source.buffer, 20)\n }\n } else {\n try {\n const input =\n isBinaryInput(rawSource)\n ? toUint8Array(rawSource)\n : typeof rawSource === \"string\" && !rawSource.startsWith(\"data:\")\n ? rawSource\n : source?.kind === \"raster\"\n ? source.buffer\n : null\n if (!input) {\n resolved = null\n } else {\n const image = (metricsDocument as InstanceType<typeof PDFDocument> & {\n openImage(source: unknown): { width: number; height: number; orientation?: number } | null\n }).openImage(input)\n if (!image) {\n resolved = null\n } else {\n const orientation = image.orientation ?? 1\n resolved =\n orientation > 4\n ? { width: image.height, height: image.width }\n : { width: image.width, height: image.height }\n }\n }\n } catch {\n resolved = null\n }\n }\n\n if (objectCacheKey) intrinsicImageSizeObjectCache.set(objectCacheKey, resolved)\n if (stringCacheKey != null) intrinsicImageSizeCache.set(stringCacheKey, resolved)\n return resolved\n}\n\nconst fitImageSize = (\n intrinsic: { width: number; height: number },\n style: ResolvedStyle,\n parentWidth: number,\n parentHeight: number\n): { width: number; height: number } => {\n const resolvedWidth = parseSizeValue(style.width as string | number | undefined, parentWidth)\n const resolvedHeight = parseSizeValue(style.height as string | number | undefined, parentHeight)\n const resolvedMaxWidth = parseSizeValue(style.maxWidth as string | number | undefined, parentWidth)\n const resolvedMaxHeight = parseSizeValue(style.maxHeight as string | number | undefined, parentHeight)\n\n let width = resolvedWidth ?? intrinsic.width\n let height = resolvedHeight ?? intrinsic.height\n\n if (resolvedWidth != null && resolvedHeight == null) {\n height = width * (intrinsic.height / intrinsic.width)\n } else if (resolvedHeight != null && resolvedWidth == null) {\n width = height * (intrinsic.width / intrinsic.height)\n }\n\n const scale = Math.min(\n resolvedMaxWidth != null ? resolvedMaxWidth / width : 1,\n resolvedMaxHeight != null ? resolvedMaxHeight / height : 1,\n resolvedWidth == null ? parentWidth / width : 1,\n resolvedHeight == null && parentHeight > 0 ? parentHeight / height : 1\n )\n\n if (Number.isFinite(scale) && scale < 1) {\n width *= scale\n height *= scale\n }\n\n return { width, height }\n}\n\nconst measureImage = (\n intrinsic: { width: number; height: number },\n style: ResolvedStyle,\n width: number,\n widthMode: number,\n height: number,\n heightMode: number,\n parentWidth: number,\n parentHeight: number\n): { width: number; height: number } => {\n const resolvedWidth = parseSizeValue(style.width as string | number | undefined, parentWidth)\n const resolvedHeight = parseSizeValue(style.height as string | number | undefined, parentHeight)\n\n if (resolvedWidth != null && resolvedHeight != null) {\n return { width: resolvedWidth, height: resolvedHeight }\n }\n\n const imageRatio = intrinsic.width / intrinsic.height\n\n if (widthMode === MeasureMode.Exactly && heightMode === MeasureMode.Undefined) {\n return { width, height: width / imageRatio }\n }\n\n if (\n heightMode === MeasureMode.Exactly &&\n (widthMode === MeasureMode.AtMost || widthMode === MeasureMode.Undefined)\n ) {\n return { width: Math.min(height * imageRatio, width || parentWidth), height }\n }\n\n if (widthMode === MeasureMode.Exactly && heightMode === MeasureMode.AtMost) {\n return { width, height: Math.min(height, width / imageRatio) }\n }\n\n if (widthMode === MeasureMode.AtMost && heightMode === MeasureMode.AtMost) {\n if (imageRatio > 1) {\n return {\n width,\n height: Math.min(width / imageRatio, height)\n }\n }\n\n return {\n height,\n width: Math.min(height * imageRatio, width)\n }\n }\n\n return fitImageSize(intrinsic, style, parentWidth, parentHeight)\n}\n\nconst getLayoutTextRuns = (node: PdfElementNode): AttributedTextRun[] => {\n const runs = extractTextRuns(node)\n if (runs.length > 0) return runs\n if (typeof node.props.render === \"function\") {\n // Reserve reasonable space for page-number style callbacks before final page counts are known.\n return [{\n text: String(node.props.render({ pageNumber: 999, totalPages: 999 }) ?? \"\"),\n style: node.style\n }]\n }\n return []\n}\n\nconst flattenTextRuns = (runs: AttributedTextRun[]): string => runs.map((run) => run.text).join(\"\")\n\ntype TimingAccumulator = Record<string, number>\nlet activeLayoutTimings: TimingAccumulator | null = null\nlet activeLayoutProfiler: ProfileCollector | null = null\nlet activeTextMeasureCacheKeys: Set<string> | null = null\nlet activeTextMeasureRunFingerprints: Set<string> | null = null\nlet activeTextMeasureWidths: Set<string> | null = null\n\nconst timeBlock = <T>(timings: TimingAccumulator | undefined, name: string, fn: () => T): T => {\n if (!timings) return fn()\n const start = performance.now()\n const result = fn()\n timings[name] = (timings[name] ?? 0) + (performance.now() - start)\n return result\n}\n\nconst timeActiveLayoutBlock = <T>(name: string, fn: () => T): T => {\n if (!activeLayoutTimings) return fn()\n return timeBlock(activeLayoutTimings, name, fn)\n}\n\nconst addActiveLayoutCounter = (\n name:\n | \"textMeasureCalls\"\n | \"textMeasureCacheHits\"\n | \"textMeasureCacheMisses\"\n | \"textShapeCalls\"\n | \"specializedTablesUsed\"\n | \"fastCellsMeasured\"\n | \"fallbackCellsMeasured\"\n | \"rowCacheHits\"\n | \"rowCacheMisses\",\n value = 1\n): void => {\n activeLayoutProfiler?.addCounter(name, value)\n}\n\nconst recordActiveTextMeasureKey = (\n cacheKey: string,\n runFingerprintId: number,\n targetWidth: number\n): void => {\n activeTextMeasureCacheKeys?.add(cacheKey)\n activeTextMeasureRunFingerprints?.add(String(runFingerprintId))\n activeTextMeasureWidths?.add(Number.isFinite(targetWidth) ? String(targetWidth) : \"inf\")\n}\n\nconst getSpecializedTableLayout = (\n node: PdfElementNode,\n width: number,\n height: number,\n timings?: TimingAccumulator\n): LayoutNode => {\n const cached = specializedTableLayoutCacheByNode.get(node)\n if (cached && Math.abs(cached.width - width) < 0.001 && Math.abs(cached.height - height) < 0.001) {\n return cached.layout\n }\n const layout = layoutSpecializedTable(node, width, height, {\n addCounter: addActiveLayoutCounter,\n cloneLayoutSubtree,\n getNodePreferredWidth,\n layoutCellGeneric: layoutStandaloneNode,\n measureTextNode: (targetNode, targetWidth) => measureText(getTextMeasureInput(targetNode), targetWidth),\n shiftLayoutSubtree\n }, timings)\n specializedTableLayoutCacheByNode.set(node, { width, height, layout })\n specializedTableLayoutByNode.set(node, layout)\n return layout\n}\n\nconst getTableAwareStyle = (\n node: PdfElementNode,\n parentWidth: number,\n tableContext?: TableLayoutContext\n): ResolvedStyle => {\n if (node.type === \"TABLE\") {\n if (node.style.alignItems === \"stretch\") return node.style\n return {\n ...node.style,\n flexDirection: node.style.flexDirection,\n alignItems: node.style.alignItems ?? \"stretch\"\n }\n }\n if (isTableSectionType(node.type)) {\n if (node.style.flexDirection === \"column\") return node.style\n return {\n ...node.style,\n flexDirection: \"column\"\n }\n }\n if (node.type === \"TABLE_ROW\") {\n if (node.style.flexDirection === \"row\") return node.style\n return {\n ...node.style,\n flexDirection: \"row\"\n }\n }\n if (node.type === \"TABLE_CELL\") {\n const tableCellWidth = getTableCellWidthFromContext(node, tableContext)\n const width = node.style.width ?? tableCellWidth\n const style: ResolvedStyle = {\n ...node.style,\n width: width ?? node.style.width,\n flexGrow: width == null && node.style.flexGrow == null ? 1 : node.style.flexGrow,\n flexShrink: width == null && node.style.flexShrink == null ? 1 : node.style.flexShrink\n }\n if (typeof width === \"number\" && width >= 0 && parentWidth > 0 && width > parentWidth) {\n style.flexShrink = 0\n }\n return style\n }\n if (isTableStructureType(node.type)) {\n return {\n ...node.style,\n flexDirection: node.type === \"TABLE_ROW\" ? \"row\" : node.style.flexDirection\n }\n }\n return node.style\n}\n\nconst getLayoutStyle = (\n node: PdfElementNode,\n parentWidth: number,\n tableContext?: TableLayoutContext\n): ResolvedStyle => {\n const baseStyle = getTableAwareStyle(node, parentWidth, tableContext)\n if (node.type !== \"IMAGE\" && node.type !== \"SVG\") return baseStyle\n\n return {\n ...baseStyle,\n width: baseStyle.width ?? (node.props.width as ResolvedStyle[\"width\"]),\n height: baseStyle.height ?? (node.props.height as ResolvedStyle[\"height\"]),\n flexShrink: baseStyle.flexShrink ?? 0\n }\n}\n\nconst configureYogaNodeForElement = (\n node: PdfElementNode,\n yogaNode: YogaNode,\n parentWidth: number,\n parentHeight: number,\n contextForNode: TableLayoutContext | undefined,\n useSpecializedTableLayout: boolean,\n timings?: TimingAccumulator,\n parentHasFixedHeight?: boolean,\n /** Direct parent element; used to scope TEXT height=0 measure hack (Repeat CardSlot only). */\n parentElement?: PdfElementNode | null\n): void => {\n node.style = getLayoutStyle(node, parentWidth, contextForNode)\n if (timings) {\n timeBlock(timings, \"layoutYoga.applyLayoutStyle\", () => applyLayoutStyle(yogaNode, node.style, parentWidth, parentHeight))\n } else {\n applyLayoutStyle(yogaNode, node.style, parentWidth, parentHeight)\n }\n\n if (isTextLayoutLeaf(node)) {\n invalidateTextMeasureInputCache(node)\n yogaNode.setMeasureFunc((width, widthMode) => {\n // Only Repeat/CardSlot slot surfaces need intrinsic height suppressed when the slot has a\n // fixed height \u2014 otherwise TEXT in any fixed-height column (e.g. headers) measures as\n // height 0 and Yoga stacks flex column siblings at the same Y (overlapping text).\n const repeatSlotSurface =\n parentElement != null &&\n typeof parentElement.props === \"object\" &&\n parentElement.props !== null &&\n (parentElement.props as { repeatSlotContent?: boolean }).repeatSlotContent === true\n if (parentHasFixedHeight && widthMode === MeasureMode.Exactly && repeatSlotSurface) {\n return { width, height: 0 }\n }\n const measureInput = getTextMeasureInput(node)\n const resolvedWidth =\n widthMode === MeasureMode.Undefined\n ? Number.POSITIVE_INFINITY\n : width > 0\n ? width\n : parentWidth > 0\n ? parentWidth\n : Number.POSITIVE_INFINITY\n const measuredText = measureText(measureInput, resolvedWidth)\n const keepIntrinsicWidth =\n (measureInput.maxLines === 1 || shouldOverflowUnbrokenToken(measureInput.flattenedText.trim()))\n && node.style.minWidth == null\n && node.style.width == null\n && node.style.flexShrink == null\n if (keepIntrinsicWidth && widthMode !== MeasureMode.Exactly) {\n const intrinsic = measureText(measureInput, Number.POSITIVE_INFINITY)\n return { width: intrinsic.width, height: measuredText.height }\n }\n return { width: measuredText.width, height: measuredText.height }\n })\n } else if (node.type === \"IMAGE\") {\n const intrinsicSize = getIntrinsicImageSize(node)\n if (intrinsicSize) {\n yogaNode.setMeasureFunc((width, widthMode, height, heightMode) =>\n measureImage(intrinsicSize, node.style, width, widthMode, height, heightMode, parentWidth, parentHeight)\n )\n }\n } else if (node.type === \"SVG\") {\n const intrinsicSize = getSvgIntrinsicSize(node, parentWidth, parentHeight)\n yogaNode.setMeasureFunc((width, widthMode, height, heightMode) =>\n measureImage(intrinsicSize, node.style, width, widthMode, height, heightMode, parentWidth, parentHeight)\n )\n } else if (useSpecializedTableLayout) {\n yogaNode.setMeasureFunc((width, widthMode) => {\n const resolvedWidth =\n widthMode === MeasureMode.Undefined\n ? parseSizeValue(node.style.width as string | number | undefined, parentWidth) ?? parentWidth\n : width\n const layout = getSpecializedTableLayout(node, resolvedWidth, parentHeight, timings)\n specializedTableLayoutByYogaNode.set(yogaNode, layout)\n return { width: layout.box.width, height: layout.box.height }\n })\n } else if (FIXED_SIZE_LEAF_TYPES.has(node.type)) {\n const intrinsicSize =\n node.type === \"CHECKBOX\"\n ? {\n width:\n parseSizeValue(node.props.width as string | number | undefined, parentWidth) ??\n parseSizeValue(node.style.width as string | number | undefined, parentWidth) ??\n 12,\n height:\n parseSizeValue(node.props.height as string | number | undefined, parentHeight) ??\n parseSizeValue(node.style.height as string | number | undefined, parentHeight) ??\n 12\n }\n : {\n width:\n parseSizeValue(node.props.width as string | number | undefined, parentWidth) ??\n parseSizeValue(node.style.width as string | number | undefined, parentWidth) ??\n Math.max(120, parentWidth * 0.25),\n height:\n parseSizeValue(node.props.height as string | number | undefined, parentHeight) ??\n parseSizeValue(node.style.height as string | number | undefined, parentHeight) ??\n (node.type === \"LIST\" ? 72 : 24)\n }\n yogaNode.setMeasureFunc((width, widthMode, height, heightMode) =>\n measureImage(intrinsicSize, node.style, width, widthMode, height, heightMode, parentWidth, parentHeight)\n )\n } else if (SVG_CHILD_TYPES.has(node.type)) {\n yogaNode.setDisplay(Display.None)\n } else if (node.type === \"PAGE_BREAK\") {\n yogaNode.setDisplay(Display.None)\n } else if (node.type === \"TEXT_INSTANCE\") {\n yogaNode.setDisplay(Display.None)\n }\n}\n\nconst createYogaTree = (\n node: PdfElementNode,\n parentWidth: number,\n parentHeight: number,\n tableContext?: TableLayoutContext,\n timings?: TimingAccumulator,\n registry?: YogaRegistry,\n parentNode?: PdfElementNode | null,\n parentHasFixedHeight?: boolean\n): { yogaNode: YogaNode } => {\n const yogaNode = timings\n ? timeBlock(timings, \"layoutYoga.createYogaNode\", () => Yoga.Node.createWithConfig(getYogaConfig()))\n : Yoga.Node.createWithConfig(getYogaConfig())\n registry?.yogaByNode.set(node, yogaNode)\n registry?.parentByNode.set(node, parentNode ?? null)\n const useSpecializedTableLayout = node.type === \"TABLE\" && canUseSpecializedTableLayout(node)\n if (useSpecializedTableLayout) specializedTableNodes.add(node)\n const contextForNode = node.type === \"TABLE\"\n ? createTableLayoutContext(\n node,\n parseSizeValue(node.style.width as string | number | undefined, parentWidth) ??\n parseSizeValue(node.style.maxWidth as string | number | undefined, parentWidth) ??\n parseSizeValue(node.style.minWidth as string | number | undefined, parentWidth) ??\n parentWidth,\n { getNodePreferredWidth }\n )\n : tableContext\n configureYogaNodeForElement(node, yogaNode, parentWidth, parentHeight, contextForNode, useSpecializedTableLayout, timings, parentHasFixedHeight, parentNode ?? null)\n\n const nodeHasFixedHeight = parseSizeValue(node.style.height as string | number | undefined, parentHeight) != null\n // Propagate fixed-height context only when the current node itself has a fixed height.\n // An auto-sizing node (no explicit height) must NOT propagate the context, because its own\n // height is determined by its children \u2014 meaning descendant Text heights do affect sizing.\n // Propagating through auto-sizing nodes causes Text to return height:0, collapsing their\n // parent Views and breaking layout (the CardSlot bug).\n const childrenInFixedHeightContext = nodeHasFixedHeight\n // Hoist parent-dependent skip conditions out of the child loop. When any of\n // these hold, every child is skipped (only TEXT_INSTANCEs or nothing remain).\n const skipAllElementChildren =\n node.type === \"TEXT\"\n || isTextLayoutLeaf(node)\n || useSpecializedTableLayout\n || node.type === \"SVG\"\n || FIXED_SIZE_LEAF_TYPES.has(node.type)\n || SVG_CHILD_TYPES.has(node.type)\n\n if (!skipAllElementChildren) {\n let childIndex = 0\n const children = node.children\n for (let index = 0; index < children.length; index += 1) {\n const child = children[index]\n if (child.type === \"TEXT_INSTANCE\") continue\n const childYoga = createYogaTree(child, parentWidth, parentHeight, contextForNode, timings, registry, node, childrenInFixedHeightContext)\n if (timings) {\n timeBlock(timings, \"layoutYoga.insertChild\", () => yogaNode.insertChild(childYoga.yogaNode, childIndex))\n } else {\n yogaNode.insertChild(childYoga.yogaNode, childIndex)\n }\n childIndex += 1\n }\n }\n\n return { yogaNode }\n}\n\nconst hydrateLayout = (\n node: PdfElementNode,\n yogaNode: YogaNode,\n pageNumber: number,\n absoluteX: number,\n absoluteY: number,\n /** Parent content box when this TEXT/LINK is the sole child of a row flex parent (Yoga may shrink TEXT to intrinsic width). */\n parentContentBoxHint?: { x: number; width: number },\n incrementalState?: IncrementalYogaLayoutState\n): LayoutNode => {\n if (incrementalState) {\n const cached = incrementalState.cachedLayoutByYoga.get(yogaNode)\n if (!hasNewLayout(yogaNode) && cached) {\n return cloneLayoutSubtree(cached)\n }\n }\n\n const shiftSubtreeAbsolutePosition = (layoutNode: LayoutNode, deltaX: number, deltaY: number): LayoutNode => ({\n ...layoutNode,\n absoluteX: layoutNode.absoluteX + deltaX,\n absoluteY: layoutNode.absoluteY + deltaY,\n children: (layoutNode.children as LayoutNode[]).map((child) => shiftSubtreeAbsolutePosition(child, deltaX, deltaY))\n })\n\n const alignAbsoluteToParentBox = (layoutNode: LayoutNode, parentBox: { width: number; height: number }): LayoutNode => {\n if (layoutNode.style.position !== \"absolute\") return layoutNode\n\n const nextX =\n layoutNode.style.left != null\n ? Number(layoutNode.style.left)\n : layoutNode.style.right != null\n ? parentBox.width - layoutNode.box.width - Number(layoutNode.style.right)\n : layoutNode.box.x\n const nextY =\n layoutNode.style.top != null\n ? Number(layoutNode.style.top)\n : layoutNode.style.bottom != null\n ? parentBox.height - layoutNode.box.height - Number(layoutNode.style.bottom)\n : layoutNode.box.y\n\n const deltaX = nextX - layoutNode.box.x\n const deltaY = nextY - layoutNode.box.y\n\n return shiftSubtreeAbsolutePosition(\n {\n ...layoutNode,\n box: {\n ...layoutNode.box,\n x: nextX,\n y: nextY\n }\n },\n deltaX,\n deltaY\n )\n }\n\n const hydrateStaticSubtree = (staticNode: PdfElementNode): LayoutNode => ({\n ...staticNode,\n box: { x: 0, y: 0, width: 0, height: 0 },\n pageNumber,\n absoluteX,\n absoluteY,\n measuredText: undefined,\n children: staticNode.children.map((child) => hydrateStaticSubtree(child))\n })\n // Scalar getters avoid embind's array/vector copy in getComputedLayout().\n const box = {\n x: yogaNode.getComputedLeft(),\n y: yogaNode.getComputedTop(),\n width: yogaNode.getComputedWidth(),\n height: yogaNode.getComputedHeight()\n }\n if (isTextLayoutLeaf(node)) {\n const textMeasureInput = getTextMeasureInput(node)\n const text = textMeasureInput.flattenedText\n const insetX = getNodeHorizontalInset(node)\n const contentWidth = Math.max(0, box.width - insetX)\n const layoutWidth =\n parentContentBoxHint != null && parentContentBoxHint.width > box.width + 0.5\n ? Math.max(contentWidth, parentContentBoxHint.width - insetX)\n : contentWidth\n const measuredText = measureText(textMeasureInput, layoutWidth)\n const textHeight = Math.max(box.height, measuredText.height)\n const outBoxWidth =\n parentContentBoxHint != null && parentContentBoxHint.width > box.width + 0.5 ? parentContentBoxHint.width : box.width\n const outBoxX =\n parentContentBoxHint != null && parentContentBoxHint.width > box.width + 0.5 ? parentContentBoxHint.x : box.x\n return {\n ...node,\n box: {\n ...box,\n x: outBoxX,\n width: outBoxWidth,\n height: textHeight\n },\n pageNumber,\n absoluteX: absoluteX + outBoxX,\n absoluteY: absoluteY + box.y,\n text,\n measuredText,\n children: []\n }\n }\n if (node.type === \"SVG\") {\n return {\n ...node,\n box,\n pageNumber,\n absoluteX: absoluteX + box.x,\n absoluteY: absoluteY + box.y,\n measuredText: undefined,\n children: node.children.map((child) => hydrateStaticSubtree(child))\n }\n }\n if (node.type === \"TABLE\" && specializedTableNodes.has(node)) {\n const specialized = specializedTableLayoutByYogaNode.get(yogaNode) ??\n specializedTableLayoutByNode.get(node) ??\n getSpecializedTableLayout(node, box.width, box.height)\n // Children in `specialized` already have positions relative to the table (box={x:0,y:0}).\n // assignSubtreeAbsolutePosition propagates the table's absolute position into children,\n // so do NOT pre-shift children with shiftLayoutSubtree \u2014 that would double-count box.x/y.\n return assignSubtreeAbsolutePosition(\n {\n ...specialized,\n box\n },\n absoluteX + box.x,\n absoluteY + box.y,\n pageNumber\n )\n }\n const structuralChildren = node.children.filter((child) => child.type !== \"TEXT_INSTANCE\")\n const parentContentBox = {\n x: getNodeLeftInset(node),\n width: Math.max(0, box.width - getNodeHorizontalInset(node))\n }\n const isRow = node.style.flexDirection === \"row\" || node.style.flexDirection === \"row-reverse\"\n const justifyContent = node.style.justifyContent\n const packsOnMainAxis =\n justifyContent === \"flex-end\"\n || justifyContent === \"end\"\n || justifyContent === \"space-between\"\n || justifyContent === \"space-around\"\n || justifyContent === \"space-evenly\"\n const singleRowTextHint =\n structuralChildren.length === 1\n && isRow\n && !packsOnMainAxis\n && isTextLayoutLeaf(structuralChildren[0])\n ? parentContentBox\n : undefined\n\n let childIndex = 0\n const children = structuralChildren.map((child) => {\n const childYoga = yogaNode.getChild(childIndex)\n childIndex += 1\n const childHint =\n isTextLayoutLeaf(child) && singleRowTextHint != null ? singleRowTextHint : undefined\n const childLayout = hydrateLayout(\n child,\n childYoga,\n pageNumber,\n absoluteX + box.x,\n absoluteY + box.y,\n childHint,\n incrementalState\n )\n return alignAbsoluteToParentBox(childLayout, { width: box.width, height: box.height })\n })\n const hydrated = {\n ...node,\n box,\n pageNumber,\n absoluteX: absoluteX + box.x,\n absoluteY: absoluteY + box.y,\n measuredText: undefined,\n children\n }\n\n if (incrementalState) {\n incrementalState.cachedLayoutByYoga.set(yogaNode, cloneLayoutSubtree(hydrated))\n markLayoutSeen(yogaNode)\n }\n\n return hydrated\n}\n\nconst shiftLayoutSubtree = (layoutNode: LayoutNode, deltaX: number, deltaY: number): LayoutNode => ({\n ...layoutNode,\n box: {\n ...layoutNode.box,\n x: layoutNode.box.x + deltaX,\n y: layoutNode.box.y + deltaY\n },\n absoluteX: layoutNode.absoluteX + deltaX,\n absoluteY: layoutNode.absoluteY + deltaY,\n children: (layoutNode.children as LayoutNode[]).map((child) => shiftLayoutSubtree(child, deltaX, deltaY))\n})\n\nconst cloneLayoutSubtree = (layoutNode: LayoutNode): LayoutNode => ({\n ...layoutNode,\n box: { ...layoutNode.box },\n children: (layoutNode.children as LayoutNode[]).map((child) => cloneLayoutSubtree(child)),\n measuredText: layoutNode.measuredText\n ? {\n ...layoutNode.measuredText,\n lines: [...layoutNode.measuredText.lines],\n runs: [...layoutNode.measuredText.runs],\n lineData: layoutNode.measuredText.lineData.map((line) => ({\n ...line,\n runs: [...line.runs],\n })),\n shapedLines: layoutNode.measuredText.shapedLines,\n }\n : undefined,\n})\n\n\nconst getTableCellLayoutFingerprint = (node: PdfElementNode): string => {\n const cached = tableCellFingerprintCache.get(node)\n if (cached != null) return cached\n const fingerprint = JSON.stringify((function serialize(current: PdfElementNode): unknown {\n return {\n type: current.type,\n text: current.type === \"TEXT_INSTANCE\" ? current.text ?? \"\" : undefined,\n style: {\n width: current.style.width,\n height: current.style.height,\n minWidth: current.style.minWidth,\n minHeight: current.style.minHeight,\n maxWidth: current.style.maxWidth,\n maxHeight: current.style.maxHeight,\n marginTop: current.style.marginTop,\n marginRight: current.style.marginRight,\n marginBottom: current.style.marginBottom,\n marginLeft: current.style.marginLeft,\n paddingTop: current.style.paddingTop,\n paddingRight: current.style.paddingRight,\n paddingBottom: current.style.paddingBottom,\n paddingLeft: current.style.paddingLeft,\n fontSize: current.style.fontSize,\n fontFamily: current.style.fontFamily,\n fontWeight: current.style.fontWeight,\n fontStyle: current.style.fontStyle,\n lineHeight: current.style.lineHeight,\n letterSpacing: current.style.letterSpacing,\n color: current.style.color,\n textAlign: current.style.textAlign,\n direction: current.style.direction,\n lang: current.style.lang,\n maxLines: current.style.maxLines,\n textOverflow: current.style.textOverflow,\n borderTop: current.style.borderTop,\n borderRight: current.style.borderRight,\n borderBottom: current.style.borderBottom,\n borderLeft: current.style.borderLeft,\n backgroundColor: current.style.backgroundColor,\n },\n props: {\n colSpan: current.props.colSpan,\n rowSpan: current.props.rowSpan,\n href: current.props.href,\n },\n children: current.children.map((child) => serialize(child)),\n }\n })(node))\n tableCellFingerprintCache.set(node, fingerprint)\n return fingerprint\n}\n\nconst assignSubtreeAbsolutePosition = (layoutNode: LayoutNode, absoluteX: number, absoluteY: number, pageNumber: number): LayoutNode => ({\n ...layoutNode,\n pageNumber,\n absoluteX,\n absoluteY,\n children: (layoutNode.children as LayoutNode[]).map((child) =>\n assignSubtreeAbsolutePosition(child, absoluteX + child.box.x, absoluteY + child.box.y, pageNumber)\n )\n})\n\nexport const layoutStandaloneNode = (\n node: PdfElementNode,\n width: number,\n height: number,\n timings?: TimingAccumulator\n): LayoutNode => {\n if (node.type === \"TABLE_CELL\") {\n const cacheKey = `${Math.round(width * 1000)}::${getTableCellLayoutFingerprint(node)}`\n const cached = tableCellLayoutCache.get(cacheKey)\n if (cached) return cloneLayoutSubtree(cached)\n const { yogaNode } = createYogaTree(node, width, height, undefined, timings)\n if (Number.isFinite(width) && width > 0) yogaNode.setWidth(width)\n yogaNode.calculateLayout(width, height, Direction.LTR)\n const hydrated = hydrateLayout(node, yogaNode, 0, 0, 0)\n tableCellLayoutCache.set(cacheKey, cloneLayoutSubtree(hydrated))\n return hydrated\n }\n const { yogaNode } = createYogaTree(node, width, height, undefined, timings)\n if (Number.isFinite(width) && width > 0) yogaNode.setWidth(width)\n if ((node.style.flexGrow ?? 0) > 0 && Number.isFinite(height) && height > 0) yogaNode.setHeight(height)\n yogaNode.calculateLayout(width, height, Direction.LTR)\n return hydrateLayout(node, yogaNode, 0, 0, 0)\n}\n\nconst hasNewLayout = (yogaNode: YogaNode): boolean => {\n const trackedNode = yogaNode as YogaNode & { hasNewLayout?: () => boolean }\n return typeof trackedNode.hasNewLayout === \"function\" ? trackedNode.hasNewLayout() : true\n}\n\nconst markLayoutSeen = (yogaNode: YogaNode): void => {\n const trackedNode = yogaNode as YogaNode & { markLayoutSeen?: () => void }\n if (typeof trackedNode.markLayoutSeen === \"function\") trackedNode.markLayoutSeen()\n}\n\nconst getRootPageNode = (state: IncrementalYogaLayoutState, node: PdfElementNode): PdfElementNode | null => {\n let current: PdfElementNode | null = node\n while (current) {\n if (current.type === \"PAGE\") return current\n current = state.parentByNode.get(current) ?? null\n }\n return null\n}\n\nconst refreshIncrementalNode = (\n state: IncrementalYogaLayoutState,\n node: PdfElementNode,\n timings?: TimingAccumulator\n): void => {\n const yogaNode = state.yogaByNode.get(node)\n if (!yogaNode) return\n const pageNode = getRootPageNode(state, node)\n if (!pageNode) return\n const pageSize = state.pageSizeByNode.get(pageNode)\n if (!pageSize) return\n const useSpecializedTableLayout = node.type === \"TABLE\" && canUseSpecializedTableLayout(node)\n const contextForNode = node.type === \"TABLE\"\n ? createTableLayoutContext(\n node,\n parseSizeValue(node.style.width as string | number | undefined, pageSize.width) ??\n parseSizeValue(node.style.maxWidth as string | number | undefined, pageSize.width) ??\n parseSizeValue(node.style.minWidth as string | number | undefined, pageSize.width) ??\n pageSize.width,\n { getNodePreferredWidth }\n )\n : undefined\n\n const parentNode = isTextLayoutLeaf(node) ? state.parentByNode.get(node) : undefined\n const grandparentNode = parentNode != null ? state.parentByNode.get(parentNode) : undefined\n const parentHasFixedHeight = parentNode != null\n ? parseSizeValue(parentNode.style.height as string | number | undefined, pageSize.height) != null ||\n (grandparentNode != null && parseSizeValue(grandparentNode.style.height as string | number | undefined, pageSize.height) != null)\n : false\n\n configureYogaNodeForElement(\n node,\n yogaNode,\n pageSize.width,\n pageSize.height,\n contextForNode,\n useSpecializedTableLayout,\n timings,\n parentHasFixedHeight,\n parentNode ?? null\n )\n}\n\nexport const createIncrementalYogaLayoutState = async (\n documentNode: PdfElementNode,\n timings?: TimingAccumulator\n): Promise<IncrementalYogaLayoutState> => {\n await ensureYogaRuntime()\n const registry: YogaRegistry = {\n yogaByNode: new WeakMap(),\n pageSizeByNode: new WeakMap(),\n parentByNode: new WeakMap()\n }\n const documentYoga = timings\n ? timeBlock(timings, \"layoutYoga.createDocumentYoga\", () => Yoga.Node.createWithConfig(getYogaConfig()))\n : Yoga.Node.createWithConfig(getYogaConfig())\n if (timings) timeBlock(timings, \"layoutYoga.setupDocumentYoga\", () => documentYoga.setFlexDirection(FlexDirection.Column))\n else documentYoga.setFlexDirection(FlexDirection.Column)\n\n const pageEntries: IncrementalYogaLayoutState[\"pageEntries\"] = []\n const pageNodes = documentNode.children.filter((child) => child.type === \"PAGE\")\n for (const pageNode of pageNodes) {\n const [width, height] = resolvePageSize(pageNode)\n registry.pageSizeByNode.set(pageNode, { width, height })\n const yogaPage = timings\n ? timeBlock(timings, \"layoutYoga.createPageYogaTrees\", () => createYogaTree(pageNode, width, height, undefined, timings, registry, documentNode).yogaNode)\n : createYogaTree(pageNode, width, height, undefined, timings, registry, documentNode).yogaNode\n if (timings) {\n timeBlock(timings, \"layoutYoga.sizePageYoga\", () => {\n yogaPage.setWidth(width)\n yogaPage.setHeight(height)\n })\n timeBlock(timings, \"layoutYoga.insertPageYoga\", () => documentYoga.insertChild(yogaPage, documentYoga.getChildCount()))\n } else {\n yogaPage.setWidth(width)\n yogaPage.setHeight(height)\n documentYoga.insertChild(yogaPage, documentYoga.getChildCount())\n }\n pageEntries.push({ node: pageNode, yoga: yogaPage, width, height })\n }\n\n return {\n documentNode,\n documentYoga,\n pageEntries,\n yogaByNode: registry.yogaByNode,\n pageSizeByNode: registry.pageSizeByNode,\n parentByNode: registry.parentByNode,\n cachedPageLayouts: [],\n cachedLayoutByYoga: new WeakMap()\n }\n}\n\nconst getResolvedTableColumnWidths = (tableNode: LayoutNode): number[] => {\n const rawColumns = Array.isArray(tableNode.props.tableColumns)\n ? tableNode.props.tableColumns\n : typeof tableNode.props.tableColumns === \"string\"\n ? tableNode.props.tableColumns.split(\",\").map((entry) => entry.trim())\n : []\n\n const normalized = rawColumns\n .map((entry) => {\n if (typeof entry === \"number\") return entry\n if (typeof entry === \"string\" && isPercent(entry)) return parseSizeValue(entry, tableNode.box.width)\n if (typeof entry === \"string\") return Number.parseFloat(entry)\n return undefined\n })\n .filter((entry): entry is number => entry != null && Number.isFinite(entry))\n\n if (normalized.length > 0) return normalized\n\n const rows = (tableNode.children as LayoutNode[])\n .filter((child) => isTableSectionType(child.type))\n .flatMap((section) => section.children)\n .filter((child) => child.type === \"TABLE_ROW\")\n\n if (rows.length === 0) return [tableNode.box.width]\n\n let columnsCount = 0\n for (const row of rows) {\n let count = 0\n for (const cell of row.children) count += Math.max(1, clampToPositiveInt(cell.props.colSpan) ?? 1)\n columnsCount = Math.max(columnsCount, count)\n }\n\n const widths = new Array<number>(Math.max(columnsCount, 1)).fill(0)\n const spanningCells: Array<{ start: number; span: number; width: number }> = []\n\n for (const row of rows) {\n let cursor = 0\n for (const cell of row.children) {\n const span = Math.min(Math.max(1, clampToPositiveInt(cell.props.colSpan) ?? 1), Math.max(1, widths.length - cursor))\n const columnWidth = cell.box.width / span\n if (span === 1) {\n widths[cursor] = Math.max(widths[cursor] ?? 0, columnWidth)\n } else {\n spanningCells.push({ start: cursor, span, width: cell.box.width })\n }\n cursor += span\n if (cursor >= widths.length) break\n }\n }\n\n for (const cell of spanningCells) {\n const currentWidth = sumColumnWidths(widths, cell.start, cell.span) ?? 0\n if (currentWidth >= cell.width) continue\n const extraPerColumn = (cell.width - currentWidth) / cell.span\n for (let index = cell.start; index < Math.min(cell.start + cell.span, widths.length); index += 1) {\n widths[index] += extraPerColumn\n }\n }\n\n return scaleColumnWidthsToTarget(widths, tableNode.box.width)\n}\n\ntype RowSpanPlacement = {\n rowIndex: number\n rowSpan: number\n}\n\nconst applyTableGridLayout = (tableNode: LayoutNode): LayoutNode => {\n const columnWidths = getResolvedTableColumnWidths(tableNode)\n if (columnWidths.length === 0) return tableNode\n\n const nextChildren = (tableNode.children as LayoutNode[]).map((child) => {\n if (!isTableSectionType(child.type)) return child\n\n const rows = (child.children as LayoutNode[]).filter((row) => row.type === \"TABLE_ROW\")\n const activeRowSpans = new Array<number>(columnWidths.length).fill(0)\n const rowSpanPlacements = new WeakMap<LayoutNode, RowSpanPlacement>()\n\n const adjustedRows = rows.map((row, rowIndex) => {\n let cursor = 0\n const adjustedCells = (row.children as LayoutNode[]).map((cell) => {\n while (cursor < activeRowSpans.length && activeRowSpans[cursor] > 0) cursor += 1\n\n const colSpan = Math.max(1, clampToPositiveInt(cell.props.colSpan) ?? 1)\n const rowSpan = Math.max(1, clampToPositiveInt(cell.props.rowSpan) ?? 1)\n const nextX = sumColumnWidths(columnWidths, 0, cursor) ?? 0\n const nextWidth = sumColumnWidths(columnWidths, cursor, colSpan) ?? cell.box.width\n const shiftedCell = nextX === cell.box.x ? cell : shiftLayoutSubtree(cell, nextX - cell.box.x, 0)\n const resizedCell = {\n ...shiftedCell,\n box: {\n ...shiftedCell.box,\n width: nextWidth\n }\n }\n\n if (rowSpan > 1) {\n for (let index = cursor; index < Math.min(cursor + colSpan, activeRowSpans.length); index += 1) {\n activeRowSpans[index] = Math.max(activeRowSpans[index], rowSpan)\n }\n rowSpanPlacements.set(resizedCell, { rowIndex, rowSpan })\n }\n\n cursor += colSpan\n return resizedCell\n })\n\n for (let index = 0; index < activeRowSpans.length; index += 1) {\n if (activeRowSpans[index] > 0) activeRowSpans[index] -= 1\n }\n\n return {\n ...row,\n children: adjustedCells\n }\n })\n\n const adjustedRowHeights = adjustedRows.map((row) => row.box.height)\n\n return {\n ...child,\n children: adjustedRows.map((row) => ({\n ...row,\n children: row.children.map((cell) => {\n const placement = rowSpanPlacements.get(cell)\n if (!placement) return cell\n const endRowIndex = Math.min(adjustedRows.length, placement.rowIndex + placement.rowSpan)\n return {\n ...cell,\n box: {\n ...cell.box,\n height: adjustedRowHeights.slice(placement.rowIndex, endRowIndex).reduce((sum, height) => sum + height, 0)\n }\n }\n })\n }))\n }\n })\n\n return {\n ...tableNode,\n children: nextChildren\n }\n}\n\nconst finalizeLayout = (node: LayoutNode): LayoutNode => {\n const nextNode = {\n ...node,\n children: (node.children as LayoutNode[]).map((child) => finalizeLayout(child))\n }\n if (nextNode.type === \"TABLE\" && canUseSpecializedTableLayout(nextNode)) {\n const specialized = specializedTableLayoutByNode.get(nextNode)\n if (specialized) {\n return assignSubtreeAbsolutePosition(\n {\n ...specialized,\n box: nextNode.box\n },\n nextNode.absoluteX,\n nextNode.absoluteY,\n nextNode.pageNumber\n )\n }\n // The specialized layout populated __tableDrawNodes with zero absolute positions, then\n // hydrateLayout correctly positioned the children tree via assignSubtreeAbsolutePosition,\n // but __tableDrawNodes still holds the original stale references. The WeakMap lookup above\n // missed because nextNode is a spread copy, not the original PdfElementNode key.\n // If __tableDrawNodes is present the table came through the specialized path \u2014 rebuild it\n // from the finalized children so the renderer gets correct absoluteX/absoluteY values.\n if (Array.isArray((nextNode.props as { __tableDrawNodes?: unknown }).__tableDrawNodes)) {\n const collectFlatNodes = (nodes: LayoutNode[]): LayoutNode[] =>\n nodes.flatMap((n) => [n, ...collectFlatNodes(n.children as LayoutNode[])])\n return {\n ...nextNode,\n props: {\n ...nextNode.props,\n __tableDrawNodes: collectFlatNodes(nextNode.children as LayoutNode[])\n }\n }\n }\n return applyTableGridLayout(nextNode)\n }\n return nextNode\n}\n\nexport const layoutDocument = async (documentNode: PdfElementNode, profiler?: ProfileCollector): Promise<LayoutNode> => {\n await ensureYogaRuntime()\n const collectTimings = profiler?.enabled ?? false\n const timings: TimingAccumulator | undefined = collectTimings ? {} : undefined\n const previousTimings = activeLayoutTimings\n const previousProfiler = activeLayoutProfiler\n const previousTextMeasureCacheKeys = activeTextMeasureCacheKeys\n const previousTextMeasureRunFingerprints = activeTextMeasureRunFingerprints\n const previousTextMeasureWidths = activeTextMeasureWidths\n activeLayoutTimings = timings ?? null\n activeLayoutProfiler = profiler ?? null\n activeTextMeasureCacheKeys = collectTimings ? new Set() : null\n activeTextMeasureRunFingerprints = collectTimings ? new Set() : null\n activeTextMeasureWidths = collectTimings ? new Set() : null\n\n try {\n const incrementalState = await createIncrementalYogaLayoutState(documentNode, timings)\n const rootSize = { width: 0, height: 0 }\n timeBlock(timings, \"layoutYoga.calculateDocumentLayout\", () => incrementalState.documentYoga.calculateLayout(rootSize.width, rootSize.height, Direction.LTR))\n\n const children = timeBlock(timings, \"layoutYoga.hydratePages\", () => incrementalState.pageEntries.map((pageEntry, index) =>\n timeBlock(timings, \"layoutYoga.hydratePage\", () => hydrateLayout(pageEntry.node, pageEntry.yoga, index + 1, 0, 0))\n ))\n\n if (timings) {\n for (const [name, durationMs] of Object.entries(timings)) {\n profiler?.record(name, durationMs)\n }\n }\n profiler?.addCounter(\"textMeasureDistinctCacheKeys\", activeTextMeasureCacheKeys?.size ?? 0)\n profiler?.addCounter(\"textMeasureDistinctRunFingerprints\", activeTextMeasureRunFingerprints?.size ?? 0)\n profiler?.addCounter(\"textMeasureDistinctWidths\", activeTextMeasureWidths?.size ?? 0)\n\n return finalizeLayout({\n ...documentNode,\n box: { x: 0, y: 0, width: 0, height: 0 },\n pageNumber: 0,\n absoluteX: 0,\n absoluteY: 0,\n children\n })\n } finally {\n activeLayoutTimings = previousTimings\n activeLayoutProfiler = previousProfiler\n activeTextMeasureCacheKeys = previousTextMeasureCacheKeys\n activeTextMeasureRunFingerprints = previousTextMeasureRunFingerprints\n activeTextMeasureWidths = previousTextMeasureWidths\n }\n}\n\nexport const layoutDocumentIncremental = async (\n documentNode: PdfElementNode,\n state: IncrementalYogaLayoutState | null,\n changes: PrecompiledBindingChange[],\n profiler?: ProfileCollector\n): Promise<{ layout: LayoutNode; state: IncrementalYogaLayoutState }> => {\n await ensureYogaRuntime()\n const collectTimings = profiler?.enabled ?? false\n const timings: TimingAccumulator | undefined = collectTimings ? {} : undefined\n const previousTimings = activeLayoutTimings\n const previousProfiler = activeLayoutProfiler\n const previousTextMeasureCacheKeys = activeTextMeasureCacheKeys\n const previousTextMeasureRunFingerprints = activeTextMeasureRunFingerprints\n const previousTextMeasureWidths = activeTextMeasureWidths\n activeLayoutTimings = timings ?? null\n activeLayoutProfiler = profiler ?? null\n activeTextMeasureCacheKeys = collectTimings ? new Set() : null\n activeTextMeasureRunFingerprints = collectTimings ? new Set() : null\n activeTextMeasureWidths = collectTimings ? new Set() : null\n\n try {\n const incrementalState =\n !state || state.documentNode !== documentNode\n ? await createIncrementalYogaLayoutState(documentNode, timings)\n : state\n\n if (state && state.documentNode === documentNode) {\n for (const change of changes) {\n if (change.layoutNode) refreshIncrementalNode(incrementalState, change.layoutNode, timings)\n }\n }\n\n const rootSize = { width: 0, height: 0 }\n timeBlock(timings, \"layoutYoga.calculateDocumentLayout\", () => incrementalState.documentYoga.calculateLayout(rootSize.width, rootSize.height, Direction.LTR))\n\n const children = timeBlock(timings, \"layoutYoga.hydratePages\", () => incrementalState.pageEntries.map((pageEntry, index) =>\n timeBlock(timings, \"layoutYoga.hydratePage\", () => {\n if (state && state.documentNode === documentNode && !hasNewLayout(pageEntry.yoga) && incrementalState.cachedPageLayouts[index]) {\n return cloneLayoutSubtree(incrementalState.cachedPageLayouts[index] as LayoutNode)\n }\n\n const hydrated = hydrateLayout(pageEntry.node, pageEntry.yoga, index + 1, 0, 0, undefined, incrementalState)\n incrementalState.cachedPageLayouts[index] = hydrated\n return hydrated\n })\n ))\n\n if (timings) {\n for (const [name, durationMs] of Object.entries(timings)) {\n profiler?.record(name, durationMs)\n }\n }\n profiler?.addCounter(\"textMeasureDistinctCacheKeys\", activeTextMeasureCacheKeys?.size ?? 0)\n profiler?.addCounter(\"textMeasureDistinctRunFingerprints\", activeTextMeasureRunFingerprints?.size ?? 0)\n profiler?.addCounter(\"textMeasureDistinctWidths\", activeTextMeasureWidths?.size ?? 0)\n\n return {\n layout: finalizeLayout({\n ...documentNode,\n box: { x: 0, y: 0, width: 0, height: 0 },\n pageNumber: 0,\n absoluteX: 0,\n absoluteY: 0,\n children\n }),\n state: incrementalState\n }\n } finally {\n activeLayoutTimings = previousTimings\n activeLayoutProfiler = previousProfiler\n activeTextMeasureCacheKeys = previousTextMeasureCacheKeys\n activeTextMeasureRunFingerprints = previousTextMeasureRunFingerprints\n activeTextMeasureWidths = previousTextMeasureWidths\n }\n}\n", "import { buildNodeChildren, inheritTextStyle } from \"@jsxpdf/core\"\nimport type { LayoutNode, PdfElementNode } from \"@jsxpdf/core\"\nimport { isTextLayoutLeaf, layoutStandaloneNode } from \"./yoga\"\n\nconst getContinuationProps = (node: LayoutNode): LayoutNode[\"props\"] => ({\n ...node.props,\n bookmark: undefined,\n id: undefined\n})\n\nconst cloneSubtree = (\n node: LayoutNode,\n absoluteYOffset: number,\n pageNumber: number,\n rootBoxYOffset = 0\n): LayoutNode => {\n const nextAbsoluteY = node.absoluteY + absoluteYOffset\n return {\n ...node,\n pageNumber,\n box: {\n ...node.box,\n y: node.box.y + rootBoxYOffset\n },\n absoluteY: nextAbsoluteY,\n children: (node.children as LayoutNode[]).map((child) => cloneSubtree(child, absoluteYOffset, pageNumber))\n }\n}\n\nconst cloneAtY = (node: LayoutNode, nextY: number, pageNumber: number): LayoutNode => {\n const yOffset = nextY - node.box.y\n return cloneSubtree(node, yOffset, pageNumber, yOffset)\n}\n\nconst assignSubtreeAbsolutePosition = (node: LayoutNode, absoluteX: number, absoluteY: number, pageNumber: number): LayoutNode => ({\n ...node,\n pageNumber,\n absoluteX,\n absoluteY,\n children: (node.children as LayoutNode[]).map((child) =>\n assignSubtreeAbsolutePosition(child, absoluteX + child.box.x, absoluteY + child.box.y, pageNumber)\n )\n})\n\nconst shiftSubtreeAbsolutePosition = (node: LayoutNode, deltaX: number, deltaY: number): LayoutNode => ({\n ...node,\n absoluteX: node.absoluteX + deltaX,\n absoluteY: node.absoluteY + deltaY,\n children: (node.children as LayoutNode[]).map((child) => shiftSubtreeAbsolutePosition(child, deltaX, deltaY))\n})\n\nconst clamp = (value: number, min: number, max: number): number => {\n return Math.min(Math.max(value, min), max)\n}\n\nconst hasVisibleBoxStyle = (node: LayoutNode): boolean => {\n return Boolean(\n node.style.backgroundColor ||\n node.style.borderTop.width ||\n node.style.borderRight.width ||\n node.style.borderBottom.width ||\n node.style.borderLeft.width\n )\n}\n\nconst findRelativeVisibleTop = (node: LayoutNode, cache: WeakMap<LayoutNode, number>): number => {\n const cached = cache.get(node)\n if (cached != null) return cached\n\n let visibleTop = Number.POSITIVE_INFINITY\n for (const child of node.children as LayoutNode[]) {\n const childVisibleTop = findRelativeVisibleTop(child, cache)\n if (Number.isFinite(childVisibleTop)) {\n visibleTop = Math.min(visibleTop, child.box.y + childVisibleTop)\n }\n }\n\n if (\n !Number.isFinite(visibleTop)\n && (isTextLayoutLeaf(node) || node.type === \"IMAGE\" || node.type === \"SVG\" || hasVisibleBoxStyle(node))\n ) {\n visibleTop = 0\n }\n\n cache.set(node, visibleTop)\n return visibleTop\n}\n\nconst findVisibleTop = (node: LayoutNode, cache: WeakMap<LayoutNode, number>): number => {\n const relativeVisibleTop = findRelativeVisibleTop(node, cache)\n return Number.isFinite(relativeVisibleTop) ? node.box.y + relativeVisibleTop : Number.POSITIVE_INFINITY\n}\n\nconst normalizeFixedClone = (node: LayoutNode, contentTop: number, contentBottom: number, pageNumber: number): LayoutNode => {\n const maxY = Math.max(contentTop, contentBottom - node.box.height)\n const targetY = clamp(node.box.y, contentTop, maxY)\n return cloneAtY(node, targetY, pageNumber)\n}\n\nconst alignStandaloneAbsoluteNode = (node: LayoutNode, parentWidth: number, parentHeight: number): LayoutNode => {\n if (node.style.position !== \"absolute\") return node\n\n const resolvedHeight =\n (isTextLayoutLeaf(node) || node.type === \"IMAGE\") && node.style.height == null\n ? node.measuredText?.height ?? node.box.height\n : node.box.height\n\n const nextX =\n node.style.left != null\n ? Number(node.style.left)\n : node.style.right != null\n ? parentWidth - node.box.width - Number(node.style.right)\n : node.box.x\n const nextY =\n node.style.top != null\n ? Number(node.style.top)\n : node.style.bottom != null\n ? parentHeight - resolvedHeight - Number(node.style.bottom)\n : node.box.y\n\n const deltaX = nextX - node.box.x\n const deltaY = nextY - node.box.y\n\n return shiftSubtreeAbsolutePosition(\n {\n ...node,\n box: {\n ...node.box,\n x: nextX,\n y: nextY,\n height: resolvedHeight\n }\n },\n deltaX,\n deltaY\n )\n}\n\ntype FixedLayout = {\n children: LayoutNode[]\n topFixedBottom: number\n contentBottom: number\n}\n\ntype FixedLayoutEntry = {\n index: number\n clone: LayoutNode\n anchorY: number\n bottomAnchored: boolean\n isAbsolute: boolean\n}\n\nconst hasDynamicPageContent = (node: LayoutNode): boolean => {\n if (typeof node.props.render === \"function\") return true\n return (node.children as LayoutNode[]).some((child) => hasDynamicPageContent(child))\n}\n\nconst buildFixedBaseEntries = (\n repeatableChildren: Array<{ child: LayoutNode; index: number }>,\n contentTop: number,\n pageContentBottom: number,\n pageHeight: number,\n pageNumber: number,\n visibleTopCache: WeakMap<LayoutNode, number>\n): FixedLayoutEntry[] => {\n const middleY = pageHeight / 2\n return repeatableChildren.map(({ child, index }) => {\n const originalVisibleTop = findVisibleTop(child, visibleTopCache)\n const originalAnchorY = Number.isFinite(originalVisibleTop) ? originalVisibleTop : child.box.y\n const bottomAnchored = child.style.bottom != null || (child.style.flexGrow ?? 0) > 0 || originalAnchorY >= middleY\n const isAbsolute = child.style.position === \"absolute\"\n const clone = normalizeFixedClone(\n child,\n isAbsolute ? 0 : contentTop,\n bottomAnchored ? pageHeight : pageContentBottom,\n pageNumber\n )\n const visibleTop = findVisibleTop(clone, visibleTopCache)\n const anchorY = Number.isFinite(visibleTop) ? visibleTop : clone.box.y\n return {\n index,\n clone,\n anchorY,\n bottomAnchored,\n isAbsolute\n }\n })\n}\n\nconst materializeDynamicRender = (node: LayoutNode, pageNumber: number, totalPages: number): PdfElementNode => {\n if (typeof node.props.render === \"function\") {\n const renderedChildren = node.props.render({ pageNumber, totalPages })\n return {\n type: node.type,\n props: {\n ...node.props,\n children: renderedChildren,\n render: undefined\n },\n style: node.style,\n text: undefined,\n children: buildNodeChildren(renderedChildren, inheritTextStyle(node.style))\n }\n }\n\n const restoredTextChildren =\n (node.type === \"TEXT\" || node.type === \"LINK\") &&\n node.children.length === 0 &&\n typeof node.text === \"string\" &&\n node.text.length > 0\n ? buildNodeChildren(node.text, inheritTextStyle(node.style))\n : null\n\n return {\n type: node.type,\n props: node.props,\n style: node.style,\n text: node.text,\n children: restoredTextChildren ?? (node.children as LayoutNode[]).map((child) => materializeDynamicRender(child, pageNumber, totalPages))\n }\n}\n\nconst shouldRelayoutFixedNode = (node: LayoutNode): boolean =>\n hasDynamicPageContent(node) || (node.style.flexGrow ?? 0) > 0\n\nconst resolveDynamicFixedNode = (\n node: LayoutNode,\n page: LayoutNode,\n pageNumber: number,\n totalPages: number,\n contentTop: number,\n pageContentBottom: number\n): LayoutNode => {\n if (!shouldRelayoutFixedNode(node)) return node\n\n const resolvedNode = materializeDynamicRender(node, pageNumber, totalPages)\n const contentWidth = Math.max(\n 0,\n page.box.width - page.style.paddingLeft - page.style.paddingRight - page.style.borderLeft.width - page.style.borderRight.width\n )\n const contentHeight = Math.max(0, pageContentBottom - contentTop)\n const parentWidth = node.style.position === \"absolute\" ? page.box.width : contentWidth\n const parentHeight = node.style.position === \"absolute\" ? page.box.height : contentHeight\n const laidOut = layoutStandaloneNode(resolvedNode, parentWidth, parentHeight)\n if (node.style.height == null && laidOut.children.length > 0 && (node.style.flexGrow ?? 0) <= 0) {\n const contentHeight = (laidOut.children as LayoutNode[]).reduce(\n (max, child) => Math.max(max, child.box.y + child.box.height + child.style.marginBottom),\n 0\n )\n const adjusted = {\n ...laidOut,\n box: {\n ...laidOut.box,\n height: contentHeight\n }\n }\n return alignStandaloneAbsoluteNode(adjusted, parentWidth, parentHeight)\n }\n return alignStandaloneAbsoluteNode(laidOut, parentWidth, parentHeight)\n}\n\nconst buildFixedLayout = (\n baseEntries: FixedLayoutEntry[],\n pageNumber: number,\n continuation: boolean,\n contentTop: number,\n pageContentBottom: number,\n visibleTopCache: WeakMap<LayoutNode, number>\n): FixedLayout => {\n const adjusted = [...baseEntries]\n if (continuation) {\n const topEntries = baseEntries\n .filter((entry) => !entry.bottomAnchored && !entry.isAbsolute)\n .sort((left, right) => left.anchorY - right.anchorY)\n let nextY = contentTop\n for (const entry of topEntries) {\n const clone = cloneAtY(entry.clone, nextY, pageNumber)\n adjusted[entry.index] = {\n ...entry,\n clone,\n anchorY: findVisibleTop(clone, visibleTopCache)\n }\n nextY = clone.box.y + clone.box.height + clone.style.marginBottom\n }\n }\n\n const topFixedBottom = adjusted\n .filter((entry) => !entry.bottomAnchored && !entry.isAbsolute)\n .reduce((max, entry) => Math.max(max, entry.clone.box.y + entry.clone.box.height + entry.clone.style.marginBottom), contentTop)\n\n const bottomFixedTop = adjusted\n .filter((entry) => entry.bottomAnchored && !entry.isAbsolute)\n .reduce((min, entry) => Math.min(min, Number.isFinite(entry.anchorY) ? entry.anchorY : entry.clone.box.y), pageContentBottom)\n\n return {\n children: adjusted.map((entry) => entry.clone),\n topFixedBottom,\n contentBottom: Math.min(pageContentBottom, bottomFixedTop)\n }\n}\n\nconst canSplitNode = (node: LayoutNode): boolean => {\n if (node.type === \"TABLE\") return node.props.wrap !== false\n if (node.type === \"VIEW\" || (node.type === \"LINK\" && !isTextLayoutLeaf(node))) {\n return node.props.wrap !== false && (node.children.length > 0 || node.box.height > 0)\n }\n if (isTextLayoutLeaf(node) && node.props.wrap !== false) {\n return (node.measuredText?.lines.length ?? 0) > 1\n }\n return false\n}\n\nconst shouldBreakForPresenceAhead = (\n child: LayoutNode,\n furthestFutureEnd: number,\n contentBottom: number,\n hasPreviousFlowingSiblings: boolean\n): boolean => {\n if (!hasPreviousFlowingSiblings) return false\n const minPresenceAhead = child.props.minPresenceAhead ?? 0\n if (minPresenceAhead <= 0) return false\n\n const endOfMinPresenceAhead = child.box.y + child.box.height + child.style.marginBottom + minPresenceAhead\n const endOfPresence = Number.isFinite(furthestFutureEnd)\n ? Math.min(endOfMinPresenceAhead, furthestFutureEnd)\n : endOfMinPresenceAhead\n\n return endOfPresence > contentBottom\n}\n\nconst canUseSequentialPagination = (flowingChildren: LayoutNode[]): boolean => {\n return flowingChildren.every((child) =>\n child.style.position !== \"absolute\"\n && !child.props.break\n && (child.props.minPresenceAhead ?? 0) <= 0\n && !canSplitNode(child)\n )\n}\n\nconst collectTableDrawNodes = (nodes: LayoutNode[]): LayoutNode[] =>\n nodes.flatMap((n) => [n, ...collectTableDrawNodes(n.children as LayoutNode[])])\n\nconst splitTableAcrossPages = (\n tableNode: LayoutNode,\n firstPageTargetY: number,\n continuationTargetY: number,\n contentBottom: number,\n pageNumberStart: number\n): LayoutNode[] | null => {\n const sections = tableNode.children as LayoutNode[]\n const headSection = sections.find((s) => s.type === \"TABLE_HEAD\") ?? null\n const bodySection = sections.find((s) => s.type === \"TABLE_BODY\") ?? null\n const footSection = sections.find((s) => s.type === \"TABLE_FOOTER\") ?? null\n\n const headHeight = headSection?.box.height ?? 0\n const footHeight = footSection?.box.height ?? 0\n const bodyRows = (bodySection?.children as LayoutNode[]) ?? []\n\n if (bodyRows.length === 0) return null\n\n const fragments: LayoutNode[] = []\n let rowIndex = 0\n let pageNumber = pageNumberStart\n\n while (rowIndex < bodyRows.length) {\n const isFirst = fragments.length === 0\n const targetY = isFirst ? firstPageTargetY : continuationTargetY\n const availableHeight = contentBottom - targetY\n\n if (availableHeight <= headHeight) return null\n\n const bodyAvailable = availableHeight - headHeight\n\n // Greedily fit as many body rows as possible\n let fragmentBodyHeight = 0\n let endRowIndex = rowIndex\n while (endRowIndex < bodyRows.length) {\n const rowHeight = bodyRows[endRowIndex].box.height\n if (fragmentBodyHeight + rowHeight > bodyAvailable && endRowIndex > rowIndex) break\n fragmentBodyHeight += rowHeight\n endRowIndex++\n }\n\n // If on the last batch, ensure footer fits too; if not, give back the last row\n const isLastFragment = endRowIndex >= bodyRows.length\n if (isLastFragment && footSection != null && fragmentBodyHeight + footHeight > bodyAvailable && endRowIndex > rowIndex + 1) {\n endRowIndex--\n fragmentBodyHeight -= bodyRows[endRowIndex].box.height\n }\n\n const slicedRows = bodyRows.slice(rowIndex, endRowIndex)\n const startRowLocalY = slicedRows[0]?.box.y ?? 0\n const includeFooter = endRowIndex >= bodyRows.length && footSection != null\n\n // Head: clone as-is at box.y=0 relative to the fragment table\n const fragmentHead = headSection ? { ...headSection, pageNumber, box: { ...headSection.box, y: 0 } } : null\n\n // Body rows repositioned so the first row in this fragment starts at box.y=0\n const fragmentBodyRows = slicedRows.map((row) => ({\n ...row,\n pageNumber,\n box: { ...row.box, y: row.box.y - startRowLocalY }\n }))\n\n const fragmentBody = bodySection ? {\n ...bodySection,\n pageNumber,\n box: { ...bodySection.box, y: headHeight, height: fragmentBodyHeight },\n children: fragmentBodyRows\n } : null\n\n const fragmentFoot = (includeFooter && footSection) ? {\n ...footSection,\n pageNumber,\n box: { ...footSection.box, y: headHeight + fragmentBodyHeight }\n } : null\n\n const fragmentHeight = headHeight + fragmentBodyHeight + (fragmentFoot ? footHeight : 0)\n const fragmentAbsoluteY = tableNode.absoluteY + (targetY - tableNode.box.y)\n const fragmentChildren = [fragmentHead, fragmentBody, fragmentFoot].filter(Boolean) as LayoutNode[]\n\n // Recompute all absolute positions from the new fragment root\n const fragmentTable = assignSubtreeAbsolutePosition(\n {\n ...tableNode,\n props: { ...(isFirst ? tableNode.props : getContinuationProps(tableNode)), __tableDrawNodes: [] },\n pageNumber,\n box: { ...tableNode.box, y: targetY, height: fragmentHeight },\n absoluteY: fragmentAbsoluteY,\n children: fragmentChildren\n },\n tableNode.absoluteX,\n fragmentAbsoluteY,\n pageNumber\n )\n\n // Rebuild __tableDrawNodes from the correctly-positioned children\n fragments.push({\n ...fragmentTable,\n props: { ...fragmentTable.props, __tableDrawNodes: collectTableDrawNodes(fragmentTable.children as LayoutNode[]) }\n })\n\n rowIndex = endRowIndex\n pageNumber++\n }\n\n return fragments.length > 1 ? fragments : null\n}\n\nconst splitNodeAcrossPages = (\n node: LayoutNode,\n firstPageTargetY: number,\n continuationTargetY: number,\n contentBottom: number,\n pageNumberStart: number\n): LayoutNode[] | null => {\n if (!canSplitNode(node)) return null\n if (node.type === \"TABLE\") {\n return splitTableAcrossPages(node, firstPageTargetY, continuationTargetY, contentBottom, pageNumberStart)\n }\n if (isTextLayoutLeaf(node)) {\n return splitTextNodeAcrossPages(node, firstPageTargetY, continuationTargetY, contentBottom, pageNumberStart)\n }\n if (node.children.length === 0) {\n const fragments: LayoutNode[] = []\n let remainingHeight = node.box.height\n let pageNumber = pageNumberStart\n\n while (remainingHeight > 0) {\n const targetY = fragments.length === 0 ? firstPageTargetY : continuationTargetY\n const availableHeight = contentBottom - targetY\n if (availableHeight <= 0) return null\n\n const fragmentHeight = Math.min(remainingHeight, availableHeight)\n fragments.push({\n ...node,\n props: fragments.length === 0 ? node.props : getContinuationProps(node),\n pageNumber,\n box: {\n ...node.box,\n y: targetY,\n height: fragmentHeight\n },\n absoluteY: node.absoluteY + (targetY - node.box.y),\n children: []\n })\n\n remainingHeight -= fragmentHeight\n pageNumber += 1\n }\n\n return fragments.length > 1 ? fragments : null\n }\n\n const getAvailableHeight = (targetY: number) => contentBottom - targetY\n\n const children = node.children as LayoutNode[]\n const fragments: LayoutNode[] = []\n let startIndex = 0\n let pageNumber = pageNumberStart\n\n while (startIndex < children.length) {\n const targetY = fragments.length === 0 ? firstPageTargetY : continuationTargetY\n const availableHeight = getAvailableHeight(targetY)\n if (availableHeight <= 0) return null\n\n const startLocalY = children[startIndex]?.box.y ?? 0\n let endIndex = startIndex\n let fragmentBottom = startLocalY\n\n while (endIndex < children.length) {\n const child = children[endIndex]\n const nextBottom = child.box.y + child.box.height\n if (nextBottom - startLocalY > availableHeight && endIndex > startIndex) break\n fragmentBottom = nextBottom\n endIndex += 1\n if (nextBottom - startLocalY > availableHeight) break\n }\n\n if (endIndex === startIndex) return null\n\n fragments.push({\n ...node,\n props: fragments.length === 0 ? node.props : getContinuationProps(node),\n pageNumber,\n box: {\n ...node.box,\n y: targetY,\n height: fragmentBottom - startLocalY\n },\n absoluteY: node.absoluteY + (targetY - node.box.y),\n children: children\n .slice(startIndex, endIndex)\n .map((child) => cloneSubtree(child, targetY - node.box.y - startLocalY, pageNumber, -startLocalY))\n })\n\n startIndex = endIndex\n pageNumber += 1\n }\n\n return fragments.length > 1 ? fragments : null\n}\n\nconst getTextLineBreak = (node: LayoutNode, availableHeight: number): number => {\n const measured = node.measuredText\n if (!measured || measured.lines.length === 0) return 0\n const lineHeights = measured.lineData.length > 0\n ? measured.lineData.map((line) => line.height)\n : measured.lines.map(() => measured.lineHeight || node.style.lineHeight)\n let slicedLine = 0\n let consumedHeight = 0\n for (const lineHeight of lineHeights) {\n if (consumedHeight + lineHeight > availableHeight) break\n consumedHeight += lineHeight\n slicedLine += 1\n }\n const widows = node.props.widows ?? 2\n const orphans = node.props.orphans ?? 2\n const linesQuantity = measured.lines.length\n\n if (slicedLine === 0) return 0\n if (linesQuantity < orphans) return linesQuantity\n if (slicedLine < orphans || linesQuantity < orphans + widows) return 0\n if (linesQuantity === orphans + widows) return orphans\n if (linesQuantity - slicedLine < widows) return linesQuantity - widows\n return Math.min(slicedLine, linesQuantity)\n}\n\nconst splitTextNodeAcrossPages = (\n node: LayoutNode,\n firstPageTargetY: number,\n continuationTargetY: number,\n contentBottom: number,\n pageNumberStart: number\n): LayoutNode[] | null => {\n const measured = node.measuredText\n if (!measured || measured.lines.length <= 1) return null\n\n const fragments: LayoutNode[] = []\n let remainingLineData = measured.lineData.length > 0\n ? measured.lineData\n : measured.lines.map((line) => ({ text: line, runs: [], width: measured.width, height: measured.lineHeight }))\n let remainingShapedLines = measured.shapedLines\n let pageNumber = pageNumberStart\n\n while (remainingLineData.length > 0) {\n const targetY = fragments.length === 0 ? firstPageTargetY : continuationTargetY\n const availableHeight = contentBottom - targetY\n const remainingHeight = remainingLineData.reduce((sum, line) => sum + line.height, 0)\n const measuredForRemaining = {\n ...measured,\n lines: remainingLineData.map((line) => line.text),\n lineData: remainingLineData,\n shapedLines: remainingShapedLines,\n height: remainingHeight,\n lineHeight: remainingLineData.length > 0 ? remainingHeight / remainingLineData.length : measured.lineHeight\n }\n if (measuredForRemaining.height <= availableHeight) {\n fragments.push({\n ...node,\n props: fragments.length === 0 ? node.props : getContinuationProps(node),\n pageNumber,\n text: remainingLineData.map((line) => line.text).join(\"\\n\"),\n box: {\n ...node.box,\n y: targetY,\n height: measuredForRemaining.height\n },\n absoluteY: node.absoluteY + (targetY - node.box.y),\n measuredText: measuredForRemaining,\n children: []\n })\n break\n }\n const breakIndex = getTextLineBreak(\n {\n ...node,\n measuredText: measuredForRemaining\n },\n availableHeight\n )\n\n if (breakIndex === 0) return null\n if (breakIndex >= remainingLineData.length && fragments.length === 0) return null\n\n const currentLineData = remainingLineData.slice(0, breakIndex)\n const currentHeight = currentLineData.reduce((sum, line) => sum + line.height, 0)\n fragments.push({\n ...node,\n pageNumber,\n text: currentLineData.map((line) => line.text).join(\"\\n\"),\n box: {\n ...node.box,\n y: targetY,\n height: currentHeight\n },\n absoluteY: node.absoluteY + (targetY - node.box.y),\n measuredText: {\n ...measured,\n lines: currentLineData.map((line) => line.text),\n lineData: currentLineData,\n shapedLines: remainingShapedLines?.slice(0, breakIndex),\n height: currentHeight,\n lineHeight: currentLineData.length > 0 ? currentHeight / currentLineData.length : measured.lineHeight\n },\n children: []\n })\n\n remainingLineData = remainingLineData.slice(breakIndex)\n remainingShapedLines = remainingShapedLines?.slice(breakIndex)\n if (remainingLineData.length === 0) break\n pageNumber += 1\n }\n\n return fragments.length > 1 ? fragments : null\n}\n\nconst createPageClone = (page: LayoutNode, pageNumber: number, children: LayoutNode[]): LayoutNode => ({\n ...page,\n pageNumber,\n children: children.map((child) =>\n assignSubtreeAbsolutePosition(child, page.absoluteX + child.box.x, page.absoluteY + child.box.y, pageNumber)\n )\n})\n\nexport const paginateDocument = (document: LayoutNode): LayoutNode => {\n const sourcePages = document.children as LayoutNode[]\n const hasDynamicFixedContent = sourcePages.some((page) =>\n (page.children as LayoutNode[]).some((child) => child.props.fixed && hasDynamicPageContent(child))\n )\n let totalPagesEstimate = sourcePages.length\n let pages: LayoutNode[] = []\n\n for (let pass = 0; pass < 8; pass += 1) {\n pages = []\n let pageNumber = 1\n for (const page of sourcePages) {\n const paginated = paginatePage(page, pageNumber, totalPagesEstimate)\n pages.push(...paginated)\n pageNumber += paginated.length\n }\n if (!hasDynamicFixedContent || pages.length === totalPagesEstimate) break\n totalPagesEstimate = pages.length\n }\n\n const seenBookmarks = new Set<string>()\n const seenIds = new Set<string>()\n return {\n ...document,\n children: pages.map((page, index) => stripRepeatedNavigationProps({\n ...page,\n pageNumber: index + 1\n }, seenBookmarks, seenIds))\n }\n}\n\nconst stripRepeatedNavigationProps = (\n node: LayoutNode,\n seenBookmarks: Set<string>,\n seenIds: Set<string>\n): LayoutNode => {\n const bookmarkRef =\n node.props.bookmark && typeof node.props.bookmark === \"object\"\n ? String(node.props.bookmark.ref ?? node.props.bookmark.title)\n : typeof node.props.bookmark === \"string\"\n ? node.props.bookmark\n : null\n\n const shouldStripBookmark = bookmarkRef != null && seenBookmarks.has(bookmarkRef)\n const shouldStripId = typeof node.props.id === \"string\" && seenIds.has(node.props.id)\n\n if (bookmarkRef != null && !shouldStripBookmark) seenBookmarks.add(bookmarkRef)\n if (typeof node.props.id === \"string\" && !shouldStripId) seenIds.add(node.props.id)\n\n return {\n ...node,\n props: shouldStripBookmark || shouldStripId\n ? {\n ...node.props,\n bookmark: shouldStripBookmark ? undefined : node.props.bookmark,\n id: shouldStripId ? undefined : node.props.id\n }\n : node.props,\n children: (node.children as LayoutNode[]).map((child) => stripRepeatedNavigationProps(child, seenBookmarks, seenIds))\n }\n}\n\nconst paginatePage = (page: LayoutNode, pageNumberStart: number, totalPages: number): LayoutNode[] => {\n if (page.props.wrap === false) {\n return [createPageClone(\n page,\n pageNumberStart,\n (page.children as LayoutNode[]).map((child) => cloneAtY(child, child.box.y, pageNumberStart))\n )]\n }\n\n const contentTop = page.style.paddingTop + page.style.borderTop.width\n const pageContentBottom = page.box.height - page.style.paddingBottom - page.style.borderBottom.width\n const pageChildren = page.children as LayoutNode[]\n const isRowPage = page.style.flexDirection === \"row\" || page.style.flexDirection === \"row-reverse\"\n const repeatableChildren = pageChildren.filter((child) => child.props.fixed)\n const flowingChildren = pageChildren.filter((child) => !child.props.fixed)\n const visibleTopCache = new WeakMap<LayoutNode, number>()\n const indexedRepeatableChildren = repeatableChildren.map((child, index) => ({ child, index }))\n const staticRepeatableChildren = indexedRepeatableChildren.filter(({ child }) => !shouldRelayoutFixedNode(child))\n const dynamicRepeatableChildren = indexedRepeatableChildren.filter(({ child }) => shouldRelayoutFixedNode(child))\n const staticFixedBaseEntries = buildFixedBaseEntries(\n staticRepeatableChildren,\n contentTop,\n pageContentBottom,\n page.box.height,\n 0,\n visibleTopCache\n )\n const useSequentialPagination = canUseSequentialPagination(flowingChildren)\n const furthestFutureEnds = useSequentialPagination\n ? []\n : new Array<number>(flowingChildren.length).fill(Number.NEGATIVE_INFINITY)\n if (!useSequentialPagination) {\n let futureEnd = Number.NEGATIVE_INFINITY\n for (let index = flowingChildren.length - 1; index >= 0; index -= 1) {\n furthestFutureEnds[index] = futureEnd\n const child = flowingChildren[index]\n futureEnd = Math.max(futureEnd, child.box.y + child.box.height)\n }\n }\n\n const pages: LayoutNode[] = []\n const buildPageFixedLayout = (pageNumber: number, continuation: boolean): FixedLayout => buildFixedLayout(\n [\n ...staticFixedBaseEntries,\n ...buildFixedBaseEntries(\n dynamicRepeatableChildren.map(({ child, index }) => ({\n child: resolveDynamicFixedNode(child, page, pageNumber, totalPages, contentTop, pageContentBottom),\n index\n })),\n contentTop,\n pageContentBottom,\n page.box.height,\n pageNumber,\n visibleTopCache\n )\n ].sort((left, right) => left.index - right.index),\n pageNumber,\n continuation,\n contentTop,\n pageContentBottom,\n visibleTopCache\n )\n const continuationFixedLayout = buildPageFixedLayout(pageNumberStart + 1, true)\n let currentFixedLayout = buildFixedLayout(\n [\n ...staticFixedBaseEntries,\n ...buildFixedBaseEntries(\n dynamicRepeatableChildren.map(({ child, index }) => ({\n child: resolveDynamicFixedNode(child, page, pageNumberStart, totalPages, contentTop, pageContentBottom),\n index\n })),\n contentTop,\n pageContentBottom,\n page.box.height,\n pageNumberStart,\n visibleTopCache\n )\n ].sort((left, right) => left.index - right.index),\n pageNumberStart,\n false,\n contentTop,\n pageContentBottom,\n visibleTopCache\n )\n let currentChildren = [...currentFixedLayout.children]\n let currentBottom = contentTop\n let contentBottom = currentFixedLayout.contentBottom\n let pageIndex = pageNumberStart\n let previousFlowBottom = contentTop\n let hasPlacedFlowingChild = false\n let suppressNextSourceGap = false\n\n const flushPage = () => {\n pages.push(createPageClone(page, pageIndex, currentChildren))\n pageIndex += 1\n currentFixedLayout = buildPageFixedLayout(pageIndex, true)\n currentChildren = [...currentFixedLayout.children]\n currentBottom = currentFixedLayout.topFixedBottom\n contentBottom = currentFixedLayout.contentBottom\n hasPlacedFlowingChild = false\n }\n\n if (useSequentialPagination) {\n for (const child of flowingChildren) {\n if (child.type === \"PAGE_BREAK\") {\n flushPage()\n previousFlowBottom = child.box.y + child.box.height\n suppressNextSourceGap = true\n continue\n }\n\n if (isRowPage) {\n currentChildren.push(cloneAtY(child, child.box.y, pageIndex))\n currentBottom = Math.max(currentBottom, child.box.y + child.box.height)\n previousFlowBottom = Math.max(previousFlowBottom, child.box.y + child.box.height)\n hasPlacedFlowingChild = true\n continue\n }\n\n const requiredHeight = child.box.height\n const sourceGap = suppressNextSourceGap ? 0 : Math.max(0, child.box.y - previousFlowBottom)\n const targetY =\n !hasPlacedFlowingChild && pageIndex === pageNumberStart\n ? child.box.y\n : currentChildren.length === repeatableChildren.length\n ? currentBottom\n : currentBottom + sourceGap\n if (hasPlacedFlowingChild && targetY + requiredHeight > contentBottom) {\n flushPage()\n }\n const nextTargetY =\n !hasPlacedFlowingChild && pageIndex === pageNumberStart\n ? child.box.y\n : currentChildren.length === repeatableChildren.length\n ? currentBottom\n : currentBottom + sourceGap\n currentChildren.push(cloneAtY(child, nextTargetY, pageIndex))\n currentBottom = nextTargetY + requiredHeight\n previousFlowBottom = child.box.y + child.box.height\n hasPlacedFlowingChild = true\n suppressNextSourceGap = false\n }\n\n if (currentChildren.length > 0 || pages.length === 0) {\n pages.push(createPageClone(page, pageIndex, currentChildren))\n }\n\n return pages\n }\n\n for (const [flowIndex, child] of flowingChildren.entries()) {\n if (child.type === \"PAGE_BREAK\") {\n flushPage()\n previousFlowBottom = child.box.y + child.box.height\n suppressNextSourceGap = true\n continue\n }\n\n if (child.style.position === \"absolute\") {\n currentChildren.push(cloneAtY(child, child.box.y, pageIndex))\n continue\n }\n\n if (isRowPage) {\n currentChildren.push(cloneAtY(child, child.box.y, pageIndex))\n currentBottom = Math.max(currentBottom, child.box.y + child.box.height)\n previousFlowBottom = Math.max(previousFlowBottom, child.box.y + child.box.height)\n hasPlacedFlowingChild = true\n continue\n }\n\n const childTop = child.box.y\n const childBottom = child.box.y + child.box.height\n const requiredHeight = childBottom - childTop\n const sourceGap = suppressNextSourceGap ? 0 : Math.max(0, childTop - previousFlowBottom)\n const getTargetY = () => {\n if (!hasPlacedFlowingChild && pageIndex === pageNumberStart) return childTop\n return currentChildren.length === repeatableChildren.length ? currentBottom : currentBottom + sourceGap\n }\n\n let targetY = getTargetY()\n let availableHeight = contentBottom - targetY\n let splitChildren =\n requiredHeight > availableHeight\n ? splitNodeAcrossPages(child, targetY, continuationFixedLayout.topFixedBottom, contentBottom, pageIndex)\n : null\n const willOverflow = currentChildren.length > repeatableChildren.length && targetY + requiredHeight > contentBottom\n const breaksForPresenceAhead = shouldBreakForPresenceAhead(\n child,\n furthestFutureEnds[flowIndex] ?? Number.NEGATIVE_INFINITY,\n contentBottom,\n currentChildren.length > repeatableChildren.length\n )\n if (child.props.break || breaksForPresenceAhead || (willOverflow && !splitChildren)) {\n flushPage()\n targetY = getTargetY()\n availableHeight = contentBottom - targetY\n splitChildren =\n requiredHeight > availableHeight\n ? splitNodeAcrossPages(child, targetY, continuationFixedLayout.topFixedBottom, contentBottom, pageIndex)\n : null\n }\n\n if (splitChildren) {\n for (const [index, fragment] of splitChildren.entries()) {\n if (index > 0) flushPage()\n currentChildren.push(fragment)\n currentBottom = fragment.box.y + fragment.box.height\n hasPlacedFlowingChild = true\n }\n previousFlowBottom = childBottom\n suppressNextSourceGap = false\n continue\n }\n\n currentChildren.push(cloneAtY(child, targetY, pageIndex))\n currentBottom = targetY + requiredHeight\n previousFlowBottom = childBottom\n hasPlacedFlowingChild = true\n suppressNextSourceGap = false\n }\n\n if (currentChildren.length > 0 || pages.length === 0) {\n pages.push(createPageClone(page, pageIndex, currentChildren))\n }\n\n return pages\n}\n", "import type { PdfBookmark, PdfElementNode } from \"@jsxpdf/core\"\n\ntype ResolvedBookmark = Exclude<PdfBookmark, string> & {\n ref: number\n parent?: number\n}\n\nconst resolveBookmarkValue = (bookmark: PdfBookmark): ResolvedBookmark | null => {\n if (!bookmark) return null\n if (typeof bookmark === \"string\") {\n return {\n ref: -1,\n title: bookmark,\n fit: false,\n expanded: false\n }\n }\n\n return {\n fit: false,\n expanded: false,\n ...bookmark,\n parent: typeof bookmark.parent === \"number\" ? bookmark.parent : undefined,\n ref: -1\n }\n}\n\nexport const normalizeDocumentTree = (node: PdfElementNode): PdfElementNode => {\n let refs = 0\n const queue: Array<{ node: PdfElementNode; parentBookmark?: ResolvedBookmark }> = node.children.map((child) => ({\n node: child\n }))\n let cursor = 0\n\n while (cursor < queue.length) {\n const current = queue[cursor]\n cursor += 1\n if (!current) break\n\n let parentBookmark = current.parentBookmark\n const rawBookmark = current.node.props.bookmark\n if (rawBookmark) {\n const resolved = resolveBookmarkValue(rawBookmark)\n if (resolved) {\n resolved.ref = refs++\n if (parentBookmark) resolved.parent = parentBookmark.ref\n current.node.props = {\n ...current.node.props,\n bookmark: resolved\n }\n parentBookmark = resolved\n }\n }\n\n for (const child of current.node.children) {\n queue.push({\n node: child,\n parentBookmark\n })\n }\n }\n\n return node\n}\n", "import { buildNodeTree, createBindingToken, isBindingToken, materializeChildren, materializeElement, parseBindingTemplateString } from \"@jsxpdf/core\"\nimport type {\n PdfElement,\n PdfElementNode,\n PdfProps,\n PdfValue,\n ProfileCollector,\n} from \"@jsxpdf/core\"\nimport { normalizeDocumentTree } from \"./normalize\"\n\nconst PRECOMPILED_TEMPLATE_VERSION = 1\n\ntype TemplatePlaceholderKind = \"prop\"\ntype TemplateFastPathKind = \"unsafe\"\n\ntype TemplatePathSegment = string | number\n\nexport type TemplatePlaceholderRecord = {\n name: string\n kind: TemplatePlaceholderKind\n fastPath: TemplateFastPathKind\n nodePath: TemplatePathSegment[]\n bindingPath?: TemplatePathSegment[]\n bindingPaths?: TemplatePathSegment[][]\n stringTemplate?: Array<string | TemplatePathSegment[]>\n propKey?: string\n styleKey?: string\n childIndex?: number\n defaultValue?: unknown\n}\n\nexport type CompiledPrecompiledTemplate = {\n version: number\n materializedTemplate: PdfElement\n preparedNodeTree: PdfElementNode\n placeholders: TemplatePlaceholderRecord[]\n}\n\nexport type PrecompiledTemplateRenderState = {\n compiled: CompiledPrecompiledTemplate\n workingTree: PdfElementNode\n}\n\nexport type PrecompiledBindingChange = {\n entry?: TemplatePlaceholderRecord | null\n targetNode: PdfElementNode | null\n layoutNode: PdfElementNode | null\n}\n\nexport type TrackedPropPath = Array<string | number>\n\nexport type SchemaCompileResult =\n | { kind: \"compiled\"; compiled: CompiledPrecompiledTemplate }\n | { kind: \"fallback\"; reason: string }\n\nconst AUTO_COMPILE_CHANGE_ENTRY: TemplatePlaceholderRecord = {\n name: \"__auto__\",\n kind: \"prop\",\n fastPath: \"unsafe\",\n nodePath: [],\n}\n\nconst collectDeclaredBindingPaths = (value: unknown, paths: TemplatePathSegment[][] = []): TemplatePathSegment[][] => {\n if (!value || typeof value !== \"object\") return paths\n\n const record = value as Record<string, unknown>\n if (Array.isArray(record.__compiledBindingPaths)) {\n for (const entry of record.__compiledBindingPaths) {\n if (Array.isArray(entry)) {\n paths.push([...entry] as TemplatePathSegment[])\n }\n }\n }\n\n if (Array.isArray(value)) {\n for (const entry of value) collectDeclaredBindingPaths(entry, paths)\n return paths\n }\n\n if (\"props\" in record) {\n collectDeclaredBindingPaths(record.props, paths)\n }\n\n if (\"children\" in record) {\n collectDeclaredBindingPaths(record.children, paths)\n }\n\n return paths\n}\n\nconst getPlaceholderBindingPaths = (entry: TemplatePlaceholderRecord): TemplatePathSegment[][] => {\n const paths: TemplatePathSegment[][] = []\n if (Array.isArray(entry.bindingPath)) paths.push(entry.bindingPath)\n if (Array.isArray(entry.bindingPaths)) paths.push(...entry.bindingPaths)\n return paths\n}\n\nconst prepareStringTemplateValue = (\n value: string,\n nodePath: TemplatePathSegment[],\n placeholders: TemplatePlaceholderRecord[],\n propKey?: string,\n styleKey?: string,\n): string | null => {\n const parts = parseBindingTemplateString(value)\n if (!parts) return null\n\n const stringTemplate: Array<string | TemplatePathSegment[]> = []\n const bindingPaths: TemplatePathSegment[][] = []\n let defaultValue = \"\"\n\n for (const part of parts) {\n if (part.type === \"text\") {\n stringTemplate.push(part.value)\n defaultValue += part.value\n continue\n }\n stringTemplate.push([...part.path])\n bindingPaths.push([...part.path])\n }\n\n placeholders.push({\n name: bindingPaths.map((path) => pathKeyOf(path as TrackedPropPath)).join(\"::\"),\n kind: \"prop\",\n fastPath: \"unsafe\",\n nodePath: [...nodePath],\n bindingPaths,\n stringTemplate,\n propKey,\n styleKey,\n defaultValue\n })\n\n return defaultValue\n}\n\nconst resolvePlaceholderValue = (entry: TemplatePlaceholderRecord, props: unknown): unknown => {\n if (entry.stringTemplate) {\n return entry.stringTemplate.map((part) => (\n Array.isArray(part)\n ? String(resolveTrackedPathValue(props, part as TrackedPropPath) ?? \"\")\n : part\n )).join(\"\")\n }\n\n if (entry.bindingPath) {\n return resolveTrackedPathValue(props, entry.bindingPath as TrackedPropPath)\n }\n\n return undefined\n}\n\nconst cloneDeep = <T,>(value: T): T => {\n if (Array.isArray(value)) return value.map((entry) => cloneDeep(entry)) as T\n if (value instanceof Uint8Array) return new Uint8Array(value) as T\n if (value instanceof Date) return new Date(value) as T\n if (value && typeof value === \"object\") {\n const source = value as Record<string, unknown>\n const target: Record<string, unknown> = {}\n for (const [key, entry] of Object.entries(source)) {\n target[key] = cloneDeep(entry)\n }\n return target as T\n }\n return value\n}\n\nconst pathKeyOf = (path: TrackedPropPath): string => path.map((segment) => `${typeof segment}:${String(segment)}`).join(\"|\")\n\nconst resolveTrackedPathValue = (root: unknown, path: TrackedPropPath): unknown => {\n let current = root\n for (const segment of path) {\n if (current == null) return undefined\n current = (current as Record<string | number, unknown>)[segment]\n }\n return current\n}\n\nconst trackedPathStartsWith = (path: TrackedPropPath, prefix: TrackedPropPath): boolean => {\n return prefix.length <= path.length && prefix.every((segment, index) => path[index] === segment)\n}\n\nexport const compileComponentSchema = <Props,>(\n component: (props: Props) => PdfElement,\n): SchemaCompileResult => {\n try {\n const accessedPaths: TrackedPropPath[] = []\n const seen = new Set<string>()\n const recordPath = (path: TrackedPropPath) => {\n const key = pathKeyOf(path)\n if (seen.has(key)) return\n seen.add(key)\n accessedPaths.push(path)\n }\n const symbolicProps = new Proxy({} as object, {\n get(_target, property) {\n if (typeof property === \"symbol\") return undefined\n const path = [property]\n recordPath(path)\n return createBindingToken(path, \"\", recordPath, true)\n }\n }) as Props\n const element = materializeElement(component(symbolicProps)) as PdfElement\n const compiled = compilePrecompiledTemplateInternal(element)\n const bindingPaths = compiled.placeholders\n .flatMap((entry) => getPlaceholderBindingPaths(entry))\n .concat(collectDeclaredBindingPaths(element))\n const isCovered = (path: TrackedPropPath): boolean =>\n bindingPaths.some((bindingPath) =>\n trackedPathStartsWith(bindingPath as TrackedPropPath, path) || trackedPathStartsWith(path, bindingPath as TrackedPropPath)\n )\n if (!accessedPaths.every(isCovered)) {\n return {\n kind: \"fallback\",\n reason: \"jsxpdf.compile.unsupported: schema compile found prop-dependent structure.\"\n }\n }\n return { kind: \"compiled\", compiled }\n } catch (error) {\n return {\n kind: \"fallback\",\n reason: error instanceof Error ? error.message : String(error)\n }\n }\n}\n\nconst assignNodeIds = (node: PdfElementNode, path: TemplatePathSegment[] = []): void => {\n node.props = {\n ...node.props,\n __templateNodeId: path.join(\".\"),\n } as PdfProps\n for (let index = 0; index < node.children.length; index += 1) {\n assignNodeIds(node.children[index], [...path, index])\n }\n}\n\nconst prepareStyleValue = (\n styleValue: unknown,\n nodePath: TemplatePathSegment[],\n placeholders: TemplatePlaceholderRecord[],\n styleKey?: string,\n): unknown => {\n if (isBindingToken(styleValue)) {\n placeholders.push({\n name: pathKeyOf(styleValue.path),\n kind: \"prop\",\n fastPath: \"unsafe\",\n nodePath: [...nodePath],\n bindingPath: [...styleValue.path],\n styleKey,\n defaultValue: styleValue.value\n })\n return styleValue.value\n }\n if (typeof styleValue === \"string\") {\n const prepared = prepareStringTemplateValue(styleValue, nodePath, placeholders, undefined, styleKey)\n if (prepared !== null) return prepared\n }\n if (Array.isArray(styleValue)) {\n return styleValue.map((entry) => prepareStyleValue(entry, nodePath, placeholders, styleKey))\n }\n\n if (!styleValue || typeof styleValue !== \"object\") return styleValue\n\n const source = styleValue as Record<string, unknown>\n const prepared: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(source)) {\n prepared[key] = prepareStyleValue(value, nodePath, placeholders, key)\n }\n\n return prepared\n}\n\nconst prepareElementValue = (\n value: PdfValue,\n nodePath: TemplatePathSegment[],\n placeholders: TemplatePlaceholderRecord[],\n propKey?: string,\n): PdfValue => {\n if (typeof value === \"string\") {\n const prepared = prepareStringTemplateValue(value, nodePath, placeholders, propKey)\n if (prepared !== null) return prepared\n }\n if (isBindingToken(value)) {\n placeholders.push({\n name: pathKeyOf(value.path),\n kind: \"prop\",\n fastPath: \"unsafe\",\n nodePath: [...nodePath],\n bindingPath: [...value.path],\n propKey,\n defaultValue: value.value\n })\n return value.value as PdfValue\n }\n if (Array.isArray(value)) return value.map((entry) => prepareElementValue(entry, nodePath, placeholders))\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\" || value == null) return value\n\n if (typeof value === \"object\" && value !== null && \"type\" in value && \"props\" in value) {\n return prepareMaterializedElement(value as PdfElement, nodePath, placeholders)\n }\n\n return cloneDeep(value)\n}\n\nconst prepareProps = (\n props: PdfProps,\n nodePath: TemplatePathSegment[],\n placeholders: TemplatePlaceholderRecord[],\n): PdfProps => {\n const nextProps: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(props)) {\n if (key === \"children\") {\n const children = materializeChildren(value as PdfValue)\n nextProps.children = children.map((child, index) => prepareElementValue(child, [...nodePath, index], placeholders))\n continue\n }\n\n if (key === \"style\") {\n nextProps.style = prepareStyleValue(value, nodePath, placeholders)\n continue\n }\n\n nextProps[key] = prepareElementValue(value as PdfValue, nodePath, placeholders, key)\n }\n\n return nextProps as PdfProps\n}\n\nconst prepareMaterializedElement = (\n element: PdfElement,\n nodePath: TemplatePathSegment[],\n placeholders: TemplatePlaceholderRecord[],\n): PdfElement => ({\n ...element,\n props: prepareProps(element.props, nodePath, placeholders),\n})\n\nconst flattenConcatDocuments = (element: PdfElement): PdfElement => {\n if (element.type !== \"DOCUMENT\" || !Array.isArray(element.props.concatDocuments)) return element\n\n const flattenedPages = element.props.concatDocuments.flatMap((document) => {\n const materializedDocument = materializeElement(document) as PdfElement\n return materializeChildren(materializedDocument.props.children ?? []).filter(\n (child): child is PdfElement => typeof child === \"object\" && child !== null && \"type\" in child && \"props\" in child\n )\n })\n\n return {\n ...element,\n props: {\n ...element.props,\n concatDocuments: undefined,\n children: flattenedPages,\n },\n }\n}\n\nconst compilePrecompiledTemplateInternal = (materialized: PdfElement): CompiledPrecompiledTemplate => {\n const placeholders: TemplatePlaceholderRecord[] = []\n const flattened = flattenConcatDocuments(materialized)\n const preparedTemplate = prepareMaterializedElement(flattened, [], placeholders)\n const preparedNodeTree = normalizeDocumentTree(buildNodeTree(preparedTemplate))\n assignNodeIds(preparedNodeTree)\n return {\n version: PRECOMPILED_TEMPLATE_VERSION,\n materializedTemplate: preparedTemplate,\n preparedNodeTree,\n placeholders,\n }\n}\n\nexport const compilePrecompiledTemplateSync = (template: PdfElement): CompiledPrecompiledTemplate => {\n const materialized = materializeElement(template) as PdfElement\n return compilePrecompiledTemplateInternal(materialized)\n}\n\nexport const compilePrecompiledTemplate = async (template: PdfElement, profiler?: ProfileCollector): Promise<CompiledPrecompiledTemplate> => {\n const materialized = profiler\n ? await profiler.stage(\"precompile.materialize\", () => materializeElement(template) as PdfElement)\n : materializeElement(template) as PdfElement\n return compilePrecompiledTemplateInternal(materialized)\n}\n\nconst getNodeByPath = (root: PdfElementNode, path: TemplatePathSegment[]): PdfElementNode | null => {\n let current: PdfElementNode | null = root\n for (const segment of path) {\n if (typeof segment !== \"number\") continue\n current = current?.children[segment] ?? null\n if (!current) return null\n }\n return current\n}\n\nexport const createPrecompiledTemplateState = (compiled: CompiledPrecompiledTemplate): PrecompiledTemplateRenderState => ({\n compiled,\n workingTree: cloneDeep(compiled.preparedNodeTree),\n})\n\nexport const bindCompiledTemplateState = (\n state: PrecompiledTemplateRenderState,\n props: unknown,\n): { root: PdfElementNode; changes: PrecompiledBindingChange[] } => {\n const schemaRender = state.compiled.materializedTemplate.props.__compiledSchemaRender\n if (typeof schemaRender === \"function\") {\n const rendered = schemaRender(props)\n if (\n rendered &&\n typeof rendered === \"object\" &&\n typeof (rendered as { type?: unknown }).type === \"string\" &&\n Array.isArray((rendered as { children?: unknown }).children)\n ) {\n state.workingTree = cloneDeep(rendered as PdfElementNode)\n } else {\n const compiledRendered = compilePrecompiledTemplateSync(rendered as PdfElement)\n state.workingTree = cloneDeep(compiledRendered.preparedNodeTree)\n }\n return {\n root: state.workingTree,\n changes: [{\n entry: AUTO_COMPILE_CHANGE_ENTRY,\n targetNode: state.workingTree,\n layoutNode: state.workingTree\n }]\n }\n }\n\n const changes: PrecompiledBindingChange[] = []\n for (const entry of state.compiled.placeholders) {\n const targetNode = getNodeByPath(state.workingTree, entry.nodePath)\n if (!targetNode) continue\n const nextValue = resolvePlaceholderValue(entry, props)\n\n if (targetNode.type === \"TEXT_INSTANCE\") {\n const text = nextValue == null ? \"\" : String(nextValue)\n targetNode.text = text\n targetNode.props = {\n ...targetNode.props,\n children: text\n }\n changes.push({\n entry,\n targetNode,\n layoutNode: getNodeByPath(state.workingTree, entry.nodePath.slice(0, -1))\n })\n continue\n }\n\n if (entry.propKey) {\n targetNode.props = {\n ...targetNode.props,\n [entry.propKey]: nextValue as never\n }\n if (entry.propKey === \"src\" || entry.propKey === \"source\") {\n delete (targetNode.props as Record<string, unknown>).__resolvedAssetSource\n }\n }\n\n if (entry.styleKey) {\n targetNode.style = {\n ...targetNode.style,\n [entry.styleKey]: nextValue as never\n }\n }\n\n changes.push({\n entry,\n targetNode,\n // TEXT_INSTANCE targets are handled by the branch above (which continues),\n // so only regular element nodes reach this push.\n layoutNode: targetNode\n })\n }\n\n return { root: state.workingTree, changes }\n}\n", "import type { LayoutNode } from \"@jsxpdf/core\"\n\nconst EPSILON = 0.01\n\ntype Bounds = {\n minX: number\n minY: number\n maxX: number\n maxY: number\n}\n\nconst combineTransforms = (existing: string | undefined, next: string): string => {\n const normalized = typeof existing === \"string\" ? existing.trim() : \"\"\n return normalized.length > 0 ? `${normalized} ${next}` : next\n}\n\nconst collectBounds = (node: LayoutNode, root: LayoutNode, bounds: Bounds): void => {\n const relativeX = node.absoluteX - root.absoluteX\n const relativeY = node.absoluteY - root.absoluteY\n bounds.minX = Math.min(bounds.minX, relativeX)\n bounds.minY = Math.min(bounds.minY, relativeY)\n bounds.maxX = Math.max(bounds.maxX, relativeX + node.box.width)\n bounds.maxY = Math.max(bounds.maxY, relativeY + node.box.height)\n\n for (const child of node.children) {\n collectBounds(child, root, bounds)\n }\n}\n\nconst getSlotContentBounds = (node: LayoutNode): Bounds | null => {\n const contentNode = node.children.find((child) => child.props.repeatSlotContent)\n if (!contentNode) return null\n\n const bounds: Bounds = {\n minX: Number.POSITIVE_INFINITY,\n minY: Number.POSITIVE_INFINITY,\n maxX: Number.NEGATIVE_INFINITY,\n maxY: Number.NEGATIVE_INFINITY\n }\n\n collectBounds(contentNode, contentNode, bounds)\n\n if (!Number.isFinite(bounds.minX) || !Number.isFinite(bounds.minY)) {\n return {\n minX: 0,\n minY: 0,\n maxX: 0,\n maxY: 0\n }\n }\n\n return bounds\n}\n\nconst visit = (node: LayoutNode): LayoutNode => {\n const nextNode: LayoutNode = {\n ...node,\n children: node.children.map((child) => visit(child))\n }\n\n const slotConfig = nextNode.props.repeatSlotConfig\n if (!slotConfig) return nextNode\n\n const contentNodeIndex = nextNode.children.findIndex((child) => child.props.repeatSlotContent)\n if (contentNodeIndex < 0) return nextNode\n\n const contentNode = nextNode.children[contentNodeIndex]\n const bounds = getSlotContentBounds(nextNode)\n if (!bounds) return nextNode\n\n const contentWidth = Math.max(0, bounds.maxX - Math.min(0, bounds.minX))\n const contentHeight = Math.max(0, bounds.maxY - Math.min(0, bounds.minY))\n const overflowX = bounds.minX < -EPSILON || contentWidth > slotConfig.contentWidth + EPSILON\n const overflowY = bounds.minY < -EPSILON || contentHeight > slotConfig.contentHeight + EPSILON\n const hasOverflow = overflowX || overflowY\n\n if (!hasOverflow) return nextNode\n\n if (slotConfig.overflow === \"error\") {\n throw new Error(\n `Repeat slot overflow: content ${contentWidth.toFixed(2)}x${contentHeight.toFixed(2)} exceeds slot ${slotConfig.contentWidth.toFixed(2)}x${slotConfig.contentHeight.toFixed(2)}.`\n )\n }\n\n if (slotConfig.overflow === \"shrink\") {\n const scaleX = contentWidth > EPSILON ? slotConfig.contentWidth / contentWidth : 1\n const scaleY = contentHeight > EPSILON ? slotConfig.contentHeight / contentHeight : 1\n const factor = Math.min(1, scaleX, scaleY)\n\n if (factor < 1 - EPSILON) {\n const nextContentNode: LayoutNode = {\n ...contentNode,\n style: {\n ...contentNode.style,\n transform: combineTransforms(contentNode.style.transform, `scale(${factor})`),\n transformOrigin: contentNode.style.transformOrigin ?? \"0 0\"\n }\n }\n\n const children = [...nextNode.children]\n children[contentNodeIndex] = nextContentNode\n return {\n ...nextNode,\n children\n }\n }\n }\n\n return nextNode\n}\n\nexport const applyRepeatSlotOverflow = (root: LayoutNode): LayoutNode => visit(root)\n", "import { Font, ProfileCollector, base64ToBytes, base64ToText, buildNodeTree, materializeElement, resolveStyle, unwrapImageSource } from \"@jsxpdf/core\"\nimport type { LayoutNode, PdfElement, PdfElementNode, PdfRenderOptions, ProfileTrace } from \"@jsxpdf/core\"\nimport { paginateDocument } from \"./paginate\"\nimport { normalizeDocumentTree } from \"./normalize\"\nimport {\n bindCompiledTemplateState,\n compileComponentSchema,\n compilePrecompiledTemplate,\n compilePrecompiledTemplateSync,\n createPrecompiledTemplateState,\n type CompiledPrecompiledTemplate,\n type PrecompiledTemplateRenderState,\n type TemplatePlaceholderRecord\n} from \"./precompile\"\nimport { createIncrementalYogaLayoutState, layoutDocument, layoutDocumentIncremental, resolvePageSizeSpec, type IncrementalYogaLayoutState } from \"./yoga\"\nimport { applyRepeatSlotOverflow } from \"./repeat\"\nexport { configureYogaRuntime, getYogaBackend, type YogaBackend, type YogaRuntimeLoader } from \"./yoga-runtime\"\n\nexport { normalizeDocumentTree } from \"./normalize\"\nexport { getBreakChunks, clearBreakChunkCache } from \"./text-engine\"\nexport { resolvePageSizeSpec } from \"./yoga\"\nexport { createIncrementalYogaLayoutState, layoutDocumentIncremental, type IncrementalYogaLayoutState } from \"./yoga\"\nexport {\n bindCompiledTemplateState,\n compileComponentSchema,\n compilePrecompiledTemplate,\n compilePrecompiledTemplateSync,\n createPrecompiledTemplateState,\n type CompiledPrecompiledTemplate,\n type PrecompiledTemplateRenderState,\n type TemplatePlaceholderRecord\n} from \"./precompile\"\n\nconst isHttpUrl = (value: string): boolean => {\n try {\n const parsed = new URL(value)\n return parsed.protocol === \"http:\" || parsed.protocol === \"https:\"\n } catch {\n return false\n }\n}\n\nconst isSvgImage = (source: string, contentType: string | null): boolean => {\n const normalizedType = contentType?.toLowerCase() ?? \"\"\n return (\n normalizedType.includes(\"image/svg+xml\") ||\n /\\.svg(?:\\?|#|$)/i.test(source)\n )\n}\n\nconst parseDataImageUri = (\n source: string\n): { mimeType: string; encoding: \"base64\" | \"uri\"; payload: string } | null => {\n if (!source.startsWith(\"data:\")) return null\n const match = source.match(/^data:([^;,]+)((?:;[^,]+)*?),(.*)$/i)\n if (!match) return null\n const mimeType = (match[1] ?? \"\").toLowerCase()\n const params = (match[2] ?? \"\").toLowerCase()\n const payload = match[3] ?? \"\"\n return {\n mimeType,\n encoding: params.includes(\";base64\") ? \"base64\" : \"uri\",\n payload\n }\n}\n\nconst resolveImageSource = async (source: string): Promise<string | Uint8Array> => {\n if (source.startsWith(\"data:\")) {\n const parsed = parseDataImageUri(source)\n if (parsed?.mimeType === \"image/svg+xml\") {\n return parsed.encoding === \"base64\"\n ? base64ToText(parsed.payload)\n : decodeURIComponent(parsed.payload)\n }\n\n if (parsed?.mimeType.startsWith(\"image/\")) {\n return parsed.encoding === \"base64\"\n ? base64ToBytes(parsed.payload)\n : new TextEncoder().encode(decodeURIComponent(parsed.payload))\n }\n return source\n }\n\n const response = await fetch(source)\n if (!response.ok) {\n throw new Error(`Unable to fetch image from URL: ${source} (${response.status} ${response.statusText})`)\n }\n\n const contentType = response.headers.get(\"content-type\")\n if (isSvgImage(source, contentType)) {\n return response.text()\n }\n return new Uint8Array(await response.arrayBuffer())\n}\n\n// Data URIs are immutable, so their decoded payloads can be cached for the\n// lifetime of the process (bounded to avoid unbounded growth).\nconst GLOBAL_DATA_IMAGE_CACHE_LIMIT = 256\nconst globalDataImageCache = new Map<string, Promise<string | Uint8Array>>()\n\nconst getResolvedImageSource = (\n source: string,\n cache: Map<string, Promise<string | Uint8Array>>\n): Promise<string | Uint8Array> => {\n if (source.startsWith(\"data:\")) {\n let cached = globalDataImageCache.get(source)\n if (!cached) {\n cached = resolveImageSource(source).catch((error) => {\n globalDataImageCache.delete(source)\n throw error\n })\n if (globalDataImageCache.size >= GLOBAL_DATA_IMAGE_CACHE_LIMIT) {\n const oldest = globalDataImageCache.keys().next().value\n if (oldest != null) globalDataImageCache.delete(oldest)\n }\n globalDataImageCache.set(source, cached)\n }\n return cached\n }\n\n const cached = cache.get(source)\n if (cached) return cached\n\n const pending = resolveImageSource(source).catch((error) => {\n cache.delete(source)\n throw error\n })\n cache.set(source, pending)\n return pending\n}\n\nconst resolveImageAssets = async (\n node: PdfElementNode,\n cache: Map<string, Promise<string | Uint8Array>>\n): Promise<void> => {\n if (node.type === \"IMAGE\") {\n const source = unwrapImageSource(node.props.src ?? node.props.source)\n // Check data URIs before isHttpUrl: new URL() on large data URIs is expensive.\n if (typeof source === \"string\" && source.startsWith(\"data:image\")) {\n const resolved = await getResolvedImageSource(source, cache)\n if (resolved !== source) {\n node.props = {\n ...node.props,\n __resolvedAssetSource: source,\n src: resolved\n }\n }\n } else if (typeof source === \"string\" && isHttpUrl(source)) {\n const resolved = await getResolvedImageSource(source, cache)\n node.props = {\n ...node.props,\n __resolvedAssetSource: source,\n src: resolved\n }\n }\n }\n\n await Promise.all(node.children.map((child) => resolveImageAssets(child, cache)))\n}\n\nexport type LayoutResult = {\n layout: LayoutNode\n profile?: ProfileTrace\n}\n\nexport const runLayoutPipeline = async (element: PdfElement, profiler: ProfileCollector): Promise<LayoutNode> => {\n const compiled = await profiler.stage(\"compile\", () => materializeElement(element) as PdfElement)\n const root = await profiler.stage(\"createNode\", () => normalizeDocumentTree(buildNodeTree(compiled)))\n return runPreparedNodeLayoutPipeline(root, profiler)\n}\n\nexport const runPreparedNodeLayoutPipeline = async (\n root: PdfElementNode,\n profiler: ProfileCollector\n): Promise<LayoutNode> => {\n countNodes(root, profiler)\n await profiler.stage(\"resolveStyles\", () => root)\n await profiler.stage(\"resolveAssets\", () => resolveImageAssets(root, new Map()))\n await profiler.stage(\"shapeText\", async () => {\n await preloadFonts(root)\n return root\n })\n const laidOut = await profiler.stage(\"layoutYoga\", () => layoutDocument(root, profiler))\n const paginated = await profiler.stage(\"paginate\", () => paginateDocument(laidOut))\n return profiler.stage(\"repeatSlots\", () => applyRepeatSlotOverflow(paginated))\n}\n\nexport const runPreparedIncrementalLayoutPipeline = async (\n root: PdfElementNode,\n previousState: IncrementalYogaLayoutState | null,\n changes: Parameters<typeof layoutDocumentIncremental>[2],\n profiler: ProfileCollector\n): Promise<{ layout: LayoutNode; state: IncrementalYogaLayoutState }> => {\n countNodes(root, profiler)\n await profiler.stage(\"resolveStyles\", () => root)\n const needsAssetRefresh =\n !previousState ||\n changes.length === 0 ||\n changes.some((change) =>\n change.targetNode?.type === \"IMAGE\" ||\n change.layoutNode?.type === \"IMAGE\"\n )\n if (needsAssetRefresh) {\n await profiler.stage(\"resolveAssets\", () => resolveImageAssets(root, new Map()))\n } else {\n profiler.record(\"resolveAssets.skipped\", 0)\n }\n if (!previousState) {\n await profiler.stage(\"shapeText\", async () => {\n await preloadFonts(root)\n return root\n })\n } else {\n profiler.record(\"shapeText.skipped\", 0)\n }\n const laidOut = await profiler.stage(\"layoutPrepared\", () =>\n layoutDocumentIncremental(root, previousState, changes, profiler)\n )\n const paginated = await profiler.stage(\"paginate\", () => paginateDocument(laidOut.layout))\n const layout = await profiler.stage(\"repeatSlots\", () => applyRepeatSlotOverflow(paginated))\n return { layout, state: laidOut.state }\n}\n\nconst renumberSubtreePages = (node: LayoutNode, pageNumber: number): LayoutNode => ({\n ...node,\n pageNumber,\n children: (node.children as LayoutNode[]).map((child) => renumberSubtreePages(child, pageNumber))\n})\n\nexport const runConcatenatedLayoutPipeline = async (\n rootDocument: PdfElement,\n documents: PdfElement[],\n profiler: ProfileCollector\n): Promise<LayoutNode> => {\n const sectionLayouts: LayoutNode[] = []\n\n for (const document of documents) {\n sectionLayouts.push(await runCompositeLayoutPipeline(document, profiler))\n }\n\n let nextPageNumber = 1\n const children = sectionLayouts.flatMap((layout) =>\n (layout.children as LayoutNode[]).map((page) => {\n const renumbered = renumberSubtreePages(page, nextPageNumber)\n nextPageNumber += 1\n return renumbered\n })\n )\n\n return {\n type: \"DOCUMENT\",\n props: rootDocument.props,\n style: resolveStyle(undefined),\n children,\n text: undefined,\n box: { x: 0, y: 0, width: 0, height: 0 },\n pageNumber: 0,\n absoluteX: 0,\n absoluteY: 0,\n measuredText: undefined\n }\n}\n\nexport const runCompositeLayoutPipeline = async (\n document: PdfElement,\n profiler: ProfileCollector\n): Promise<LayoutNode> => {\n const nestedDocuments = Array.isArray(document.props.concatDocuments) ? document.props.concatDocuments : null\n if (nestedDocuments) {\n return runConcatenatedLayoutPipeline(document, nestedDocuments, profiler)\n }\n\n return runLayoutPipeline(document, profiler)\n}\n\nexport { runConcatenatedLayoutPipeline as concatenateLayoutPipeline }\n\nexport const runSinglePageIncrementalPipeline = async (\n renderState: PrecompiledTemplateRenderState,\n previousIncrementalState: IncrementalYogaLayoutState | null,\n slotProps: unknown\n): Promise<{ pageLayout: LayoutNode; incrementalState: IncrementalYogaLayoutState }> => {\n const { root, changes } = bindCompiledTemplateState(renderState, slotProps)\n const { layout, state } = await layoutDocumentIncremental(root, previousIncrementalState, changes)\n const paginated = paginateDocument(layout)\n const withSlots = applyRepeatSlotOverflow(paginated)\n const pageLayout = (withSlots.children as LayoutNode[])[0]\n if (!pageLayout) throw new Error(\"No page layout produced by single-page incremental pipeline\")\n return { pageLayout, incrementalState: state }\n}\n\nexport const buildConcatenatedDocumentLayout = (\n documentProps: Record<string, unknown>,\n pageLayouts: LayoutNode[]\n): LayoutNode => {\n let pageNumber = 1\n const children = pageLayouts.map((page) => {\n const renumbered = renumberSubtreePages(page, pageNumber)\n pageNumber += 1\n return renumbered\n })\n return {\n type: \"DOCUMENT\",\n props: documentProps as never,\n style: resolveStyle(undefined),\n children,\n text: undefined,\n box: { x: 0, y: 0, width: 0, height: 0 },\n pageNumber: 0,\n absoluteX: 0,\n absoluteY: 0,\n measuredText: undefined\n }\n}\n\nconst countNodes = (node: PdfElementNode, profiler: ProfileCollector): void => {\n profiler.addCounter(\"elementNodes\")\n if (node.type === \"TEXT_INSTANCE\") profiler.addCounter(\"textInstances\")\n if (node.type === \"PAGE\") profiler.addCounter(\"pages\")\n if (node.type === \"IMAGE\") profiler.addCounter(\"images\")\n if (node.type === \"TEXT\" || node.type === \"LINK\") profiler.addCounter(\"textRuns\")\n for (const child of node.children) countNodes(child, profiler)\n}\n\nconst collectFontDescriptors = (\n node: PdfElementNode,\n descriptors: Map<string, { fontFamily: string | string[]; fontWeight?: string | number; fontStyle?: \"normal\" | \"italic\" | \"oblique\" }>\n): void => {\n if (node.type === \"TEXT\" || node.type === \"TEXT_INSTANCE\" || node.type === \"LINK\") {\n const { fontFamily, fontWeight, fontStyle } = node.style\n // Cheap composite key: JSON.stringify here is measurable at ~10k nodes.\n const key = `${Array.isArray(fontFamily) ? JSON.stringify(fontFamily) : fontFamily}|${fontWeight ?? \"\"}|${fontStyle ?? \"\"}`\n let descriptor = descriptors.get(key)\n if (!descriptor) {\n descriptor = { fontFamily, fontWeight, fontStyle }\n descriptors.set(key, descriptor)\n }\n }\n\n const children = node.children\n for (let index = 0; index < children.length; index += 1) {\n collectFontDescriptors(children[index], descriptors)\n }\n}\n\nexport const preloadFonts = async (node: PdfElementNode): Promise<void> => {\n const descriptors = new Map<string, { fontFamily: string | string[]; fontWeight?: string | number; fontStyle?: \"normal\" | \"italic\" | \"oblique\" }>()\n collectFontDescriptors(node, descriptors)\n for (const descriptor of descriptors.values()) {\n await Font.load(descriptor)\n }\n}\n\nexport type CompiledRenderStateInit = {\n renderState: PrecompiledTemplateRenderState\n incrementalLayoutState: IncrementalYogaLayoutState\n}\n\nexport const initCompiledRenderState = async (compiled: CompiledPrecompiledTemplate): Promise<CompiledRenderStateInit> => {\n const renderState = createPrecompiledTemplateState(compiled)\n await resolveImageAssets(renderState.workingTree, new Map())\n await preloadFonts(renderState.workingTree)\n const incrementalLayoutState = await createIncrementalYogaLayoutState(renderState.workingTree)\n return { renderState, incrementalLayoutState }\n}\n\nexport const layout = async (element: PdfElement, options: PdfRenderOptions = {}): Promise<LayoutResult> => {\n const profiler = new ProfileCollector(options.profile ? (typeof options.profile === \"object\" ? options.profile : { enabled: true }) : undefined)\n const result = await runLayoutPipeline(element, profiler)\n return {\n layout: result,\n profile: options.profile ? profiler.finish() : undefined\n }\n}\n", "import {\n ProfileCollector,\n materializeElement,\n normalizeProfileOptions,\n type LayoutNode,\n type PdfElement,\n type PdfRenderOptions,\n type ProfileTrace,\n} from \"@jsxpdf/core\"\nimport {\n bindCompiledTemplateState,\n compileComponentSchema,\n initCompiledRenderState,\n runCompositeLayoutPipeline,\n runPreparedIncrementalLayoutPipeline,\n runLayoutPipeline,\n type CompiledPrecompiledTemplate,\n type IncrementalYogaLayoutState,\n type PrecompiledTemplateRenderState,\n} from \"@jsxpdf/layout\"\n\nexport type PdfBackendRenderer<TOutput> = (\n layout: LayoutNode,\n profiler: ProfileCollector,\n) => Promise<TOutput>\n\nexport type PdfComponent<Props> = (props: Props) => PdfElement\n\nexport type PdfRenderResult<TOutput> = {\n layout: LayoutNode\n fileStream: TOutput\n profile?: ProfileTrace\n}\n\nexport type PdfRuntimeInstance<TOutput> = {\n container: { document: PdfElement | null }\n updateContainer: (element: PdfElement) => void\n render: () => Promise<PdfRenderResult<TOutput>>\n toStream: () => Promise<TOutput>\n getProfile: () => ProfileTrace | undefined\n}\n\nexport type CompiledRuntimeTemplate<Props, TOutput> = {\n render: (props: Props, options?: PdfRenderOptions) => Promise<PdfRenderResult<TOutput>>\n toStream: (props: Props, options?: PdfRenderOptions) => Promise<TOutput>\n getProfile: () => ProfileTrace | undefined\n}\n\ntype CompiledComponentInternalState<Props> =\n | {\n kind: \"schema\"\n component: PdfComponent<Props>\n compiled: CompiledPrecompiledTemplate\n renderState: PrecompiledTemplateRenderState\n incrementalLayoutState: IncrementalYogaLayoutState\n defaultOptions: PdfRenderOptions\n lastProfile?: ProfileTrace\n renderQueue: Promise<unknown>\n }\n | {\n kind: \"fallback\"\n component: PdfComponent<Props>\n reason: string\n defaultOptions: PdfRenderOptions\n lastProfile?: ProfileTrace\n }\n\nexport const createPdfRuntime = <TOutput>(renderPdf: PdfBackendRenderer<TOutput>) => {\n const renderElement = async (\n element: PdfElement,\n options: PdfRenderOptions,\n ): Promise<PdfRenderResult<TOutput>> => {\n const profileOptions = normalizeProfileOptions(options.profile)\n const profiler = new ProfileCollector(profileOptions)\n const materialized = materializeElement(element) as PdfElement\n const layout = Array.isArray(materialized.props.concatDocuments)\n ? await runCompositeLayoutPipeline(materialized, profiler)\n : await runLayoutPipeline(materialized, profiler)\n const fileStream = await renderPdf(layout, profiler)\n const profile = profileOptions ? profiler.finish() : undefined\n materialized.props.onProfile?.(profile as ProfileTrace)\n return { layout, fileStream, profile }\n }\n\n const pdf = (\n initialValue?: PdfElement,\n options: PdfRenderOptions = {},\n ): PdfRuntimeInstance<TOutput> => {\n const container = { document: initialValue ?? null }\n let lastProfile: ProfileTrace | undefined\n\n const render = async () => {\n if (!container.document) throw new Error(\"No document provided\")\n const result = await renderElement(container.document, options)\n lastProfile = result.profile\n return result\n }\n\n return {\n container,\n updateContainer(element) {\n container.document = element\n },\n render,\n async toStream() {\n return (await render()).fileStream\n },\n getProfile() {\n return lastProfile\n },\n }\n }\n\n const renderCompiled = async <Props>(\n internal: CompiledComponentInternalState<Props>,\n props: Props,\n options: PdfRenderOptions = {},\n ): Promise<PdfRenderResult<TOutput>> => {\n const mergedOptions = {\n ...internal.defaultOptions,\n ...options,\n profile: options.profile ?? internal.defaultOptions.profile,\n }\n const profileOptions = normalizeProfileOptions(mergedOptions.profile)\n const profiler = new ProfileCollector(profileOptions)\n const layout = internal.kind === \"schema\"\n ? await profiler.stage(\"compile.bindings\", async () => {\n const schemaRender = internal.compiled.materializedTemplate.props.__compiledSchemaRender\n if (typeof schemaRender === \"function\") {\n const rendered = await schemaRender(props)\n if (rendered && typeof rendered === \"object\" && \"props\" in rendered && \"type\" in rendered) {\n const materialized = materializeElement(rendered as PdfElement) as PdfElement\n return Array.isArray(materialized.props.concatDocuments)\n ? runCompositeLayoutPipeline(materialized, profiler)\n : runLayoutPipeline(materialized, profiler)\n }\n if (rendered && typeof rendered === \"object\" && \"children\" in rendered) {\n return rendered as LayoutNode\n }\n }\n\n const renderPromise = internal.renderQueue.then(async () => {\n const { changes } = bindCompiledTemplateState(internal.renderState, props)\n const { layout, state } = await runPreparedIncrementalLayoutPipeline(\n internal.renderState.workingTree,\n internal.incrementalLayoutState,\n changes,\n profiler,\n )\n internal.incrementalLayoutState = state\n return layout\n })\n internal.renderQueue = renderPromise.catch(() => {})\n return renderPromise\n })\n : await profiler.stage(\"compile.component\", async () => {\n const materialized = materializeElement(internal.component(props)) as PdfElement\n return Array.isArray(materialized.props.concatDocuments)\n ? runCompositeLayoutPipeline(materialized, profiler)\n : runLayoutPipeline(materialized, profiler)\n })\n const fileStream = await renderPdf(layout, profiler)\n internal.lastProfile = profileOptions ? profiler.finish() : undefined\n if (internal.kind === \"schema\") {\n internal.compiled.materializedTemplate.props.onProfile?.(internal.lastProfile as ProfileTrace)\n }\n return { layout, fileStream, profile: internal.lastProfile }\n }\n\n const compile = async <Props>(\n component: PdfComponent<Props>,\n options: PdfRenderOptions = {},\n ): Promise<CompiledRuntimeTemplate<Props, TOutput>> => {\n const schema = compileComponentSchema(component)\n let internal: CompiledComponentInternalState<Props>\n\n if (schema.kind === \"compiled\") {\n const { renderState, incrementalLayoutState } = await initCompiledRenderState(schema.compiled)\n internal = {\n kind: \"schema\",\n component,\n compiled: schema.compiled,\n renderState,\n incrementalLayoutState,\n defaultOptions: options,\n renderQueue: Promise.resolve(),\n }\n } else {\n internal = {\n kind: \"fallback\",\n component,\n reason: schema.reason,\n defaultOptions: options,\n }\n }\n\n return {\n render: (props, renderOptions = {}) => renderCompiled(internal, props, renderOptions),\n async toStream(props, renderOptions = {}) {\n return (await renderCompiled(internal, props, renderOptions)).fileStream\n },\n getProfile() {\n return internal.lastProfile\n },\n }\n }\n\n return { pdf, compile }\n}\n", "import type { LayoutNode, ProfileCollector } from \"@jsxpdf/core\"\n\nexport type RenderGraphicsContext = {\n save(): void\n restore(): void\n transform(a: number, b: number, c: number, d: number, e: number, f: number): void\n clipRect(x: number, y: number, width: number, height: number): void\n}\n\nexport type RenderBackend<TDocument = unknown> = {\n readonly document: TDocument\n readonly graphics: RenderGraphicsContext\n beginDocument(doc: LayoutNode): void\n beginPage(page: LayoutNode): void\n pagePoint?(x: number, y: number): { x: number; y: number }\n enterNode?(node: LayoutNode): void\n leaveNode?(node: LayoutNode): void\n drawNode(node: LayoutNode): void\n endPage(page?: LayoutNode): void\n endDocument(): void\n}\n\nconst hasBorderStyle = (node: LayoutNode): boolean =>\n node.style.borderTop.width > 0\n || node.style.borderRight.width > 0\n || node.style.borderBottom.width > 0\n || node.style.borderLeft.width > 0\n\nconst TABLE_STRUCTURE_TYPES = new Set<LayoutNode[\"type\"]>([\n \"TABLE_HEAD\",\n \"TABLE_BODY\",\n \"TABLE_FOOTER\",\n \"TABLE_ROW\",\n \"TABLE_CELL\",\n])\n\nconst isSkippableTableWrapper = (node: LayoutNode): boolean => {\n if (!TABLE_STRUCTURE_TYPES.has(node.type)) return false\n if (hasBorderStyle(node)) return false\n if (node.style.backgroundColor) return false\n if (node.props.debug || node.props.id || node.props.bookmark) return false\n return true\n}\n\nexport const isSkippableContainerNode = (node: LayoutNode): boolean => {\n if (isSkippableTableWrapper(node)) return true\n if (node.type !== \"VIEW\") return false\n if (hasBorderStyle(node)) return false\n if (node.style.backgroundColor) return false\n if (node.props.debug || node.props.id || node.props.bookmark) return false\n return true\n}\n\nconst Y_AXIS_ORIGIN_KEYWORDS = new Set([\"top\", \"bottom\"])\n\nconst parseTransformOriginValue = (token: string, size: number, axis: \"x\" | \"y\"): number => {\n switch (token) {\n case \"left\":\n case \"top\":\n return 0\n case \"center\":\n return size / 2\n case \"right\":\n case \"bottom\":\n return size\n default: {\n if (token.endsWith(\"%\")) {\n const percentage = Number.parseFloat(token)\n return Number.isFinite(percentage) ? (size * percentage) / 100 : 0\n }\n const parsed = Number.parseFloat(token)\n return Number.isFinite(parsed) ? parsed : 0\n }\n }\n}\n\nexport const resolveTransformOrigin = (node: LayoutNode): { x: number; y: number } => {\n const rawValue = node.style.transformOrigin\n if (typeof rawValue === \"number\") return { x: rawValue, y: rawValue }\n const value = typeof rawValue === \"string\" ? rawValue.trim().toLowerCase() : \"\"\n if (!value) return { x: 0, y: 0 }\n\n const tokens = value.split(/\\s+/).filter(Boolean)\n if (tokens.length === 1) {\n const token = tokens[0]\n return {\n x: parseTransformOriginValue(token, node.box.width, \"x\"),\n y: parseTransformOriginValue(token, node.box.height, \"y\")\n }\n }\n\n // Match react-pdf's pairing rule: Y-axis keywords always sort into the Y\n // slot, remaining tokens keep their relative order for X then Y.\n const sorted = [...tokens].sort((a, b) => {\n if (Y_AXIS_ORIGIN_KEYWORDS.has(a)) return 1\n if (Y_AXIS_ORIGIN_KEYWORDS.has(b)) return -1\n return 0\n })\n\n return {\n x: parseTransformOriginValue(sorted[0] ?? \"0\", node.box.width, \"x\"),\n y: parseTransformOriginValue(sorted[1] ?? sorted[0] ?? \"0\", node.box.height, \"y\")\n }\n}\n\nexport const walkLayout = <TDocument>(\n node: LayoutNode,\n backend: RenderBackend<TDocument>,\n timings?: Record<string, number>\n): void => {\n backend.enterNode?.(node)\n const transform = typeof node.style.transform === \"string\" ? node.style.transform.trim() : \"\"\n const hasTransform = node.type !== \"PAGE\" && node.type !== \"TEXT_INSTANCE\" && transform.length > 0\n if (hasTransform) {\n const { x: originOffsetX, y: originOffsetY } = resolveTransformOrigin(node)\n const pagePoint = typeof backend.pagePoint === \"function\"\n ? backend.pagePoint(node.absoluteX, node.absoluteY)\n : { x: node.absoluteX, y: node.absoluteY }\n const originX = pagePoint.x + originOffsetX\n const originY = pagePoint.y + originOffsetY\n backend.graphics.save()\n const transformPattern = /([a-zA-Z]+)\\(([^)]*)\\)/g\n for (const match of transform.matchAll(transformPattern)) {\n const [, command, rawArgs] = match\n const args = rawArgs\n .split(/[,\\s]+/)\n .map((entry) => entry.trim())\n .filter(Boolean)\n const numberAt = (index: number, fallback = 0) => {\n const parsed = Number.parseFloat(args[index] ?? \"\")\n return Number.isFinite(parsed) ? parsed : fallback\n }\n switch (command) {\n case \"translate\":\n backend.graphics.transform(1, 0, 0, 1, numberAt(0), numberAt(1))\n break\n case \"translateX\":\n backend.graphics.transform(1, 0, 0, 1, numberAt(0), 0)\n break\n case \"translateY\":\n backend.graphics.transform(1, 0, 0, 1, 0, numberAt(0))\n break\n case \"scale\": {\n const sx = numberAt(0, 1)\n const sy = args.length > 1 ? numberAt(1, sx) : sx\n backend.graphics.transform(sx, 0, 0, sy, originX - originX * sx, originY - originY * sy)\n break\n }\n case \"scaleX\": {\n const sx = numberAt(0, 1)\n backend.graphics.transform(sx, 0, 0, 1, originX - originX * sx, 0)\n break\n }\n case \"scaleY\": {\n const sy = numberAt(0, 1)\n backend.graphics.transform(1, 0, 0, sy, 0, originY - originY * sy)\n break\n }\n case \"rotate\": {\n const angle = (numberAt(0) * Math.PI) / 180\n const cos = Math.cos(angle)\n const sin = Math.sin(angle)\n backend.graphics.transform(\n cos,\n sin,\n -sin,\n cos,\n originX - originX * cos + originY * sin,\n originY - originX * sin - originY * cos\n )\n break\n }\n }\n }\n }\n\n const shouldClipChildren = node.type !== \"PAGE\" && node.type !== \"TEXT_INSTANCE\" && node.props.clip === true && node.box.width > 0 && node.box.height > 0\n if (node.type !== \"PAGE\" && node.type !== \"TEXT_INSTANCE\" && !isSkippableContainerNode(node)) {\n if (timings) {\n const start = performance.now()\n backend.drawNode(node)\n timings[`renderPdf.draw.${node.type}`] = (timings[`renderPdf.draw.${node.type}`] ?? 0) + (performance.now() - start)\n } else {\n backend.drawNode(node)\n }\n }\n\n if (shouldClipChildren) {\n const pagePoint = typeof backend.pagePoint === \"function\"\n ? backend.pagePoint(node.absoluteX, node.absoluteY)\n : { x: node.absoluteX, y: node.absoluteY }\n backend.graphics.save()\n backend.graphics.clipRect(pagePoint.x, pagePoint.y, node.box.width, node.box.height)\n }\n\n if (node.type === \"SVG\" || node.type === \"TABLE\") {\n if (shouldClipChildren) backend.graphics.restore()\n if (hasTransform) backend.graphics.restore()\n backend.leaveNode?.(node)\n return\n }\n\n for (const child of node.children) walkLayout(child, backend, timings)\n if (shouldClipChildren) backend.graphics.restore()\n if (hasTransform) backend.graphics.restore()\n backend.leaveNode?.(node)\n}\n\nexport const renderLayout = async <TDocument>(\n layout: LayoutNode,\n profiler: ProfileCollector,\n createBackend: () => RenderBackend<TDocument>,\n stageName = \"renderPdf\"\n): Promise<TDocument> => {\n return profiler.stage(stageName, async () => {\n const timings: Record<string, number> | undefined = profiler.enabled ? {} : undefined\n const timeBlock = <T>(name: string, fn: () => T): T => {\n if (!timings) return fn()\n const start = performance.now()\n const result = fn()\n timings[name] = (timings[name] ?? 0) + (performance.now() - start)\n return result\n }\n\n const backend = timeBlock(`${stageName}.initBackend`, () => createBackend())\n timeBlock(`${stageName}.beginDocument`, () => backend.beginDocument(layout))\n for (const page of layout.children) {\n timeBlock(`${stageName}.beginPage`, () => backend.beginPage(page))\n timeBlock(`${stageName}.walk`, () => walkLayout(page, backend, timings))\n timeBlock(`${stageName}.endPage`, () => backend.endPage(page))\n }\n timeBlock(`${stageName}.endDocument`, () => backend.endDocument())\n if (timings) {\n for (const [name, durationMs] of Object.entries(timings)) {\n profiler.record(name as never, durationMs)\n }\n }\n return backend.document\n })\n}\n\nexport * from \"./runtime\"\n", "/*!\n * SVG-to-PDFKit\n * Copyright (c) 2019 SVG-to-PDFKit contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is furnished\n * to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * Vendored from https://github.com/alafr/SVG-to-PDFKit (npm v0.1.8).\n */\nvar SVGtoPDF = function(doc, svg, x, y, options) {\n \"use strict\";\n\n const NamedColors = {aliceblue: [240,248,255], antiquewhite: [250,235,215], aqua: [0,255,255], aquamarine: [127,255,212], azure: [240,255,255], beige: [245,245,220], bisque: [255,228,196], black: [0,0,0], blanchedalmond: [255,235,205], blue: [0,0,255], blueviolet: [138,43,226], brown: [165,42,42], burlywood: [222,184,135], cadetblue: [95,158,160], chartreuse: [127,255,0],\n chocolate: [210,105,30], coral: [255,127,80], cornflowerblue: [100,149,237], cornsilk: [255,248,220], crimson: [220,20,60], cyan: [0,255,255], darkblue: [0,0,139], darkcyan: [0,139,139], darkgoldenrod: [184,134,11], darkgray: [169,169,169], darkgrey: [169,169,169], darkgreen: [0,100,0], darkkhaki: [189,183,107], darkmagenta: [139,0,139], darkolivegreen: [85,107,47],\n darkorange: [255,140,0], darkorchid: [153,50,204], darkred: [139,0,0], darksalmon: [233,150,122], darkseagreen: [143,188,143], darkslateblue: [72,61,139], darkslategray: [47,79,79], darkslategrey: [47,79,79], darkturquoise: [0,206,209], darkviolet: [148,0,211], deeppink: [255,20,147], deepskyblue: [0,191,255], dimgray: [105,105,105], dimgrey: [105,105,105],\n dodgerblue: [30,144,255], firebrick: [178,34,34], floralwhite: [255,250,240], forestgreen: [34,139,34], fuchsia: [255,0,255], gainsboro: [220,220,220], ghostwhite: [248,248,255], gold: [255,215,0], goldenrod: [218,165,32], gray: [128,128,128], grey: [128,128,128], green: [0,128,0], greenyellow: [173,255,47], honeydew: [240,255,240], hotpink: [255,105,180],\n indianred: [205,92,92], indigo: [75,0,130], ivory: [255,255,240], khaki: [240,230,140], lavender: [230,230,250], lavenderblush: [255,240,245], lawngreen: [124,252,0], lemonchiffon: [255,250,205], lightblue: [173,216,230], lightcoral: [240,128,128], lightcyan: [224,255,255], lightgoldenrodyellow: [250,250,210], lightgray: [211,211,211], lightgrey: [211,211,211],\n lightgreen: [144,238,144], lightpink: [255,182,193], lightsalmon: [255,160,122], lightseagreen: [32,178,170], lightskyblue: [135,206,250], lightslategray: [119,136,153], lightslategrey: [119,136,153], lightsteelblue: [176,196,222], lightyellow: [255,255,224], lime: [0,255,0], limegreen: [50,205,50], linen: [250,240,230], magenta: [255,0,255], maroon: [128,0,0],\n mediumaquamarine: [102,205,170], mediumblue: [0,0,205], mediumorchid: [186,85,211], mediumpurple: [147,112,219], mediumseagreen: [60,179,113], mediumslateblue: [123,104,238], mediumspringgreen: [0,250,154], mediumturquoise: [72,209,204], mediumvioletred: [199,21,133], midnightblue: [25,25,112], mintcream: [245,255,250], mistyrose: [255,228,225], moccasin: [255,228,181],\n navajowhite: [255,222,173], navy: [0,0,128], oldlace: [253,245,230], olive: [128,128,0], olivedrab: [107,142,35], orange: [255,165,0], orangered: [255,69,0], orchid: [218,112,214], palegoldenrod: [238,232,170], palegreen: [152,251,152], paleturquoise: [175,238,238], palevioletred: [219,112,147], papayawhip: [255,239,213], peachpuff: [255,218,185], peru: [205,133,63],\n pink: [255,192,203], plum: [221,160,221], powderblue: [176,224,230], purple: [128,0,128], rebeccapurple: [102,51,153], red: [255,0,0], rosybrown: [188,143,143], royalblue: [65,105,225], saddlebrown: [139,69,19], salmon: [250,128,114], sandybrown: [244,164,96], seagreen: [46,139,87], seashell: [255,245,238], sienna: [160,82,45], silver: [192,192,192], skyblue: [135,206,235],\n slateblue: [106,90,205], slategray: [112,128,144], slategrey: [112,128,144], snow: [255,250,250], springgreen: [0,255,127], steelblue: [70,130,180], tan: [210,180,140], teal: [0,128,128], thistle: [216,191,216], tomato: [255,99,71], turquoise: [64,224,208], violet: [238,130,238], wheat: [245,222,179], white: [255,255,255], whitesmoke: [245,245,245], yellow: [255,255,0]};\n const DefaultColors = {black: [NamedColors.black, 1], white: [NamedColors.white, 1], transparent: [NamedColors.black, 0]};\n const Entities = {quot: 34, amp: 38, lt: 60, gt: 62, apos: 39, OElig: 338, oelig: 339, Scaron: 352, scaron: 353, Yuml: 376, circ: 710, tilde: 732, ensp: 8194, emsp: 8195, thinsp: 8201, zwnj: 8204, zwj: 8205, lrm: 8206, rlm: 8207, ndash: 8211, mdash: 8212, lsquo: 8216, rsquo: 8217, sbquo: 8218, ldquo: 8220, rdquo: 8221, bdquo: 8222, dagger: 8224, Dagger: 8225, permil: 8240, lsaquo: 8249,\n rsaquo: 8250, euro: 8364, nbsp: 160, iexcl: 161, cent: 162, pound: 163, curren: 164, yen: 165, brvbar: 166, sect: 167, uml: 168, copy: 169, ordf: 170, laquo: 171, not: 172, shy: 173, reg: 174, macr: 175, deg: 176, plusmn: 177, sup2: 178, sup3: 179, acute: 180, micro: 181, para: 182, middot: 183, cedil: 184, sup1: 185, ordm: 186, raquo: 187, frac14: 188, frac12: 189, frac34: 190,\n iquest: 191, Agrave: 192, Aacute: 193, Acirc: 194, Atilde: 195, Auml: 196, Aring: 197, AElig: 198, Ccedil: 199, Egrave: 200, Eacute: 201, Ecirc: 202, Euml: 203, Igrave: 204, Iacute: 205, Icirc: 206, Iuml: 207, ETH: 208, Ntilde: 209, Ograve: 210, Oacute: 211, Ocirc: 212, Otilde: 213, Ouml: 214, times: 215, Oslash: 216, Ugrave: 217, Uacute: 218, Ucirc: 219, Uuml: 220, Yacute: 221,\n THORN: 222, szlig: 223, agrave: 224, aacute: 225, acirc: 226, atilde: 227, auml: 228, aring: 229, aelig: 230, ccedil: 231, egrave: 232, eacute: 233, ecirc: 234, euml: 235, igrave: 236, iacute: 237, icirc: 238, iuml: 239, eth: 240, ntilde: 241, ograve: 242, oacute: 243, ocirc: 244, otilde: 245, ouml: 246, divide: 247, oslash: 248, ugrave: 249, uacute: 250, ucirc: 251, uuml: 252,\n yacute: 253, thorn: 254, yuml: 255, fnof: 402, Alpha: 913, Beta: 914, Gamma: 915, Delta: 916, Epsilon: 917, Zeta: 918, Eta: 919, Theta: 920, Iota: 921, Kappa: 922, Lambda: 923, Mu: 924, Nu: 925, Xi: 926, Omicron: 927, Pi: 928, Rho: 929, Sigma: 931, Tau: 932, Upsilon: 933, Phi: 934, Chi: 935, Psi: 936, Omega: 937, alpha: 945, beta: 946, gamma: 947, delta: 948, epsilon: 949,\n zeta: 950, eta: 951, theta: 952, iota: 953, kappa: 954, lambda: 955, mu: 956, nu: 957, xi: 958, omicron: 959, pi: 960, rho: 961, sigmaf: 962, sigma: 963, tau: 964, upsilon: 965, phi: 966, chi: 967, psi: 968, omega: 969, thetasym: 977, upsih: 978, piv: 982, bull: 8226, hellip: 8230, prime: 8242, Prime: 8243, oline: 8254, frasl: 8260, weierp: 8472, image: 8465, real: 8476,\n trade: 8482, alefsym: 8501, larr: 8592, uarr: 8593, rarr: 8594, darr: 8595, harr: 8596, crarr: 8629, lArr: 8656, uArr: 8657, rArr: 8658, dArr: 8659, hArr: 8660, forall: 8704, part: 8706, exist: 8707, empty: 8709, nabla: 8711, isin: 8712, notin: 8713, ni: 8715, prod: 8719, sum: 8721, minus: 8722, lowast: 8727, radic: 8730, prop: 8733, infin: 8734, ang: 8736, and: 8743, or: 8744,\n cap: 8745, cup: 8746, int: 8747, there4: 8756, sim: 8764, cong: 8773, asymp: 8776, ne: 8800, equiv: 8801, le: 8804, ge: 8805, sub: 8834, sup: 8835, nsub: 8836, sube: 8838, supe: 8839, oplus: 8853, otimes: 8855, perp: 8869, sdot: 8901, lceil: 8968, rceil: 8969, lfloor: 8970, rfloor: 8971, lang: 9001, rang: 9002, loz: 9674, spades: 9824, clubs: 9827, hearts: 9829, diams: 9830};\n const PathArguments = {A: 7, a: 7, C: 6, c: 6, H: 1, h: 1, L: 2, l: 2, M: 2, m: 2, Q: 4, q: 4, S: 4, s: 4, T: 2, t: 2, V: 1, v: 1, Z: 0, z: 0};\n const PathFlags = {A3: true, A4: true, a3: true, a4: true};\n const Properties = {\n 'color': {inherit: true, initial: undefined},\n 'visibility': {inherit: true, initial: 'visible', values: {'hidden': 'hidden', 'collapse': 'hidden', 'visible':'visible'}},\n 'fill': {inherit: true, initial: DefaultColors.black},\n 'stroke': {inherit: true, initial: 'none'},\n 'stop-color': {inherit: false, initial: DefaultColors.black},\n 'fill-opacity': {inherit: true, initial: 1},\n 'stroke-opacity': {inherit: true, initial: 1},\n 'stop-opacity': {inherit: false, initial: 1},\n 'fill-rule': {inherit: true, initial: 'nonzero', values: {'nonzero':'nonzero', 'evenodd':'evenodd'}},\n 'clip-rule': {inherit: true, initial: 'nonzero', values: {'nonzero':'nonzero', 'evenodd':'evenodd'}},\n 'stroke-width': {inherit: true, initial: 1},\n 'stroke-dasharray': {inherit: true, initial: []},\n 'stroke-dashoffset': {inherit: true, initial: 0},\n 'stroke-miterlimit': {inherit: true, initial: 4},\n 'stroke-linejoin': {inherit: true, initial: 'miter', values: {'miter':'miter', 'round':'round', 'bevel':'bevel'}},\n 'stroke-linecap': {inherit: true, initial: 'butt', values: {'butt':'butt', 'round':'round', 'square':'square'}},\n 'font-size': {inherit: true, initial: 16, values: {'xx-small':9, 'x-small':10, 'small':13, 'medium':16, 'large':18, 'x-large':24, 'xx-large':32}},\n 'font-family': {inherit: true, initial: 'sans-serif'},\n 'font-weight': {inherit: true, initial: 'normal', values: {'600':'bold', '700':'bold', '800':'bold', '900':'bold', 'bold':'bold', 'bolder':'bold', '500':'normal', '400':'normal', '300':'normal', '200':'normal', '100':'normal', 'normal':'normal', 'lighter':'normal'}},\n 'font-style': {inherit: true, initial: 'normal', values: {'italic':'italic', 'oblique':'italic', 'normal':'normal'}},\n 'text-anchor': {inherit: true, initial: 'start', values: {'start':'start', 'middle':'middle', 'end':'end'}},\n 'direction': {inherit: true, initial: 'ltr', values: {'ltr':'ltr', 'rtl':'rtl'}},\n 'dominant-baseline': {inherit: true, initial: 'baseline', values: {'auto':'baseline', 'baseline':'baseline', 'before-edge':'before-edge', 'text-before-edge':'before-edge', 'middle':'middle', 'central':'central', 'after-edge':'after-edge', 'text-after-edge':'after-edge', 'ideographic':'ideographic', 'alphabetic':'alphabetic', 'hanging':'hanging', 'mathematical':'mathematical'}},\n 'alignment-baseline': {inherit: false, initial: undefined, values: {'auto':'baseline', 'baseline':'baseline', 'before-edge':'before-edge', 'text-before-edge':'before-edge', 'middle':'middle', 'central':'central', 'after-edge':'after-edge', 'text-after-edge':'after-edge', 'ideographic':'ideographic', 'alphabetic':'alphabetic', 'hanging':'hanging', 'mathematical':'mathematical'}},\n 'baseline-shift': {inherit: true, initial: 'baseline', values: {'baseline':'baseline', 'sub':'sub', 'super':'super'}},\n 'word-spacing': {inherit: true, initial: 0, values: {normal:0}},\n 'letter-spacing': {inherit: true, initial: 0, values: {normal:0}},\n 'text-decoration': {inherit: false, initial: 'none', values: {'none':'none', 'underline':'underline', 'overline':'overline', 'line-through':'line-through'}},\n 'xml:space': {inherit: true, initial: 'default', css: 'white-space', values: {'preserve':'preserve', 'default':'default', 'pre':'preserve', 'pre-line':'preserve', 'pre-wrap':'preserve', 'nowrap': 'default'}},\n 'marker-start': {inherit: true, initial: 'none'},\n 'marker-mid': {inherit: true, initial: 'none'},\n 'marker-end': {inherit: true, initial: 'none'},\n 'opacity': {inherit: false, initial: 1},\n 'transform': {inherit: false, initial: [1, 0, 0, 1, 0, 0]},\n 'display': {inherit: false, initial: 'inline', values: {'none':'none', 'inline':'inline', 'block':'inline'}},\n 'clip-path': {inherit: false, initial: 'none'},\n 'mask': {inherit: false, initial: 'none'},\n 'overflow': {inherit: false, initial: 'hidden', values: {'hidden':'hidden', 'scroll':'hidden', 'visible':'visible'}}\n };\n\n function docBeginGroup(bbox) {\n let group = new (function PDFGroup() {})();\n group.name = 'G' + (doc._groupCount = (doc._groupCount || 0) + 1);\n group.resources = doc.ref();\n group.xobj = doc.ref({\n Type: 'XObject',\n Subtype: 'Form',\n FormType: 1,\n BBox: bbox,\n Group: {S: 'Transparency', CS: 'DeviceRGB', I: true, K: false},\n Resources: group.resources\n });\n group.xobj.write('');\n group.savedMatrix = doc._ctm;\n group.savedPage = doc.page;\n groupStack.push(group);\n doc._ctm = [1, 0, 0, 1, 0, 0];\n doc.page = {\n width: doc.page.width, height: doc.page.height,\n write: function(data) {group.xobj.write(data);},\n fonts: {}, xobjects: {}, ext_gstates: {}, patterns: {}\n };\n return group;\n }\n function docEndGroup(group) {\n if (group !== groupStack.pop()) {throw('Group not matching');}\n if (Object.keys(doc.page.fonts).length) {group.resources.data.Font = doc.page.fonts;}\n if (Object.keys(doc.page.xobjects).length) {group.resources.data.XObject = doc.page.xobjects;}\n if (Object.keys(doc.page.ext_gstates).length) {group.resources.data.ExtGState = doc.page.ext_gstates;}\n if (Object.keys(doc.page.patterns).length) {group.resources.data.Pattern = doc.page.patterns;}\n group.resources.end();\n group.xobj.end();\n doc._ctm = group.savedMatrix;\n doc.page = group.savedPage;\n }\n function docInsertGroup(group) {\n doc.page.xobjects[group.name] = group.xobj;\n doc.addContent('/' + group.name + ' Do');\n }\n function docApplyMask(group, clip) {\n let name = 'M' + (doc._maskCount = (doc._maskCount || 0) + 1);\n let gstate = doc.ref({\n Type: 'ExtGState', CA: 1, ca: 1, BM: 'Normal',\n SMask: {S: 'Luminosity', G: group.xobj, BC: (clip ? [0, 0, 0] : [1, 1, 1])}\n });\n gstate.end();\n doc.page.ext_gstates[name] = gstate;\n doc.addContent('/' + name + ' gs');\n }\n function docCreatePattern(group, dx, dy, matrix) {\n let pattern = new (function PDFPattern() {})();\n pattern.group = group;\n pattern.dx = dx;\n pattern.dy = dy;\n pattern.matrix = matrix || [1, 0, 0, 1, 0, 0];\n return pattern;\n }\n function docUsePattern(pattern, stroke) {\n let name = 'P' + (doc._patternCount = (doc._patternCount || 0) + 1);\n let ref = doc.ref({\n Type: 'Pattern', PatternType: 1, PaintType: 1, TilingType: 2,\n BBox: [0, 0, pattern.dx, pattern.dy], XStep: pattern.dx, YStep: pattern.dy,\n Matrix: multiplyMatrix(doc._ctm, pattern.matrix),\n Resources: {\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\n XObject: (function() {let temp = {}; temp[pattern.group.name] = pattern.group.xobj; return temp;})()\n }\n });\n ref.write('/' + pattern.group.name + ' Do');\n ref.end();\n doc.page.patterns[name] = ref;\n if (stroke) {\n doc.addContent('/Pattern CS');\n doc.addContent('/' + name + ' SCN');\n } else {\n doc.addContent('/Pattern cs');\n doc.addContent('/' + name + ' scn');\n }\n }\n function docBeginText(font, size) {\n if (!doc.page.fonts[font.id]) {doc.page.fonts[font.id] = font.ref();}\n doc.addContent('BT').addContent('/' + font.id + ' ' + size + ' Tf');\n }\n function docSetTextMatrix(a, b, c, d, e, f) {\n doc.addContent(validateNumber(a) + ' ' + validateNumber(b) + ' ' + validateNumber(-c) + ' ' + validateNumber(-d) + ' ' + validateNumber(e) + ' ' + validateNumber(f) + ' Tm');\n }\n function docSetTextMode(fill, stroke) {\n let mode = fill && stroke ? 2 : stroke ? 1 : fill ? 0 : 3;\n doc.addContent(mode + ' Tr');\n }\n function docWriteGlyph(glyph) {\n doc.addContent('<' + glyph + '> Tj');\n }\n function docEndText() {\n doc.addContent('ET');\n }\n function docFillColor(color) {\n if (color[0].constructor.name === 'PDFPattern') {\n doc.fillOpacity(color[1]);\n docUsePattern(color[0], false);\n } else {\n doc.fillColor(color[0], color[1]);\n }\n }\n function docStrokeColor(color) {\n if (color[0].constructor.name === 'PDFPattern') {\n doc.strokeOpacity(color[1]);\n docUsePattern(color[0], true);\n } else {\n doc.strokeColor(color[0], color[1]);\n }\n }\n function docInsertLink(x, y, w, h, url) {\n let ref = doc.ref({\n Type: 'Annot',\n Subtype: 'Link',\n Rect: [x, y, w, h],\n Border: [0, 0, 0],\n A: {\n S: 'URI',\n URI: new String(url)\n }\n });\n ref.end();\n links.push(ref);\n }\n function parseXml(xml) {\n let SvgNode = function(tag, type, value, error) {\n this.error = error;\n this.nodeName = tag;\n this.nodeValue = value;\n this.nodeType = type;\n this.attributes = Object.create(null);\n this.childNodes = [];\n this.parentNode = null;\n this.id = '';\n this.textContent = '';\n this.classList = [];\n };\n SvgNode.prototype.getAttribute = function(attr) {\n return this.attributes[attr] != null ? this.attributes[attr] : null;\n };\n SvgNode.prototype.getElementById = function(id) {\n let result = null;\n (function recursive(node) {\n if (result) {return;}\n if (node.nodeType === 1) {\n if (node.id === id) {result = node;}\n for (let i = 0; i < node.childNodes.length; i++) {\n recursive(node.childNodes[i]);\n }\n }\n })(this);\n return result;\n };\n SvgNode.prototype.getElementsByTagName = function(tag) {\n let result = [];\n (function recursive(node) {\n if (node.nodeType === 1) {\n if (node.nodeName === tag) {result.push(node);}\n for (let i = 0; i < node.childNodes.length; i++) {\n recursive(node.childNodes[i]);\n }\n }\n })(this);\n return result;\n };\n let parser = new StringParser(xml.trim()), result, child, error = false;\n let recursive = function() {\n let temp, child;\n if (temp = parser.match(/^<([\\w:.-]+)\\s*/, true)) { // Opening tag\n let node = new SvgNode(temp[1], 1, null, error);\n while (temp = parser.match(/^([\\w:.-]+)(?:\\s*=\\s*\"([^\"]*)\"|\\s*=\\s*'([^']*)')?\\s*/, true)) { // Attribute\n let attr = temp[1], value = decodeEntities(temp[2] || temp[3] || '');\n if (!node.attributes[attr]) {\n node.attributes[attr] = value;\n if (attr === 'id') {node.id = value;}\n if (attr === 'class') {node.classList = value.split(' ');}\n } else {\n warningCallback('parseXml: duplicate attribute \"' + attr + '\"');\n error = true;\n }\n }\n if (parser.match(/^>/)) { // End of opening tag\n while (child = recursive()) {\n node.childNodes.push(child);\n child.parentNode = node;\n node.textContent += (child.nodeType === 3 || child.nodeType === 4 ? child.nodeValue : child.textContent);\n }\n if (temp = parser.match(/^<\\/([\\w:.-]+)\\s*>/, true)) { // Closing tag\n if (temp[1] === node.nodeName) {\n return node;\n } else {\n warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & closing \"' + temp[1] + '\"');\n error = true;\n return node;\n }\n } else {\n warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & not closing');\n error = true;\n return node;\n }\n } else if (parser.match(/^\\/>/)) { // Self-closing tag\n return node;\n } else {\n warningCallback('parseXml: tag could not be parsed \"' + node.nodeName + '\"');\n error = true;\n }\n } else if (temp = parser.match(/^<!--[\\s\\S]*?-->/)) { // Comment\n return new SvgNode(null, 8, temp, error);\n } else if (temp = parser.match(/^<\\?[\\s\\S]*?\\?>/)) { // Processing instructions\n return new SvgNode(null, 7, temp, error);\n } else if (temp = parser.match(/^<!DOCTYPE\\s*([\\s\\S]*?)>/)) { // Doctype\n return new SvgNode(null, 10, temp, error);\n } else if (temp = parser.match(/^<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/, true)) { // Cdata node\n return new SvgNode('#cdata-section', 4, temp[1], error);\n } else if (temp = parser.match(/^([^<]+)/, true)) { // Text node\n return new SvgNode('#text', 3, decodeEntities(temp[1]), error);\n }\n };\n while (child = recursive()) {\n if (child.nodeType === 1 && !result) {\n result = child;\n } else if (child.nodeType === 1 || (child.nodeType === 3 && child.nodeValue.trim() !== '')) {\n warningCallback('parseXml: data after document end has been discarded');\n }\n }\n if (parser.matchAll()) {\n warningCallback('parseXml: parsing error');\n }\n return result;\n };\n function decodeEntities(str) {\n return(str.replace(/&(?:#([0-9]+)|#[xX]([0-9A-Fa-f]+)|([0-9A-Za-z]+));/g, function(mt, m0, m1, m2) {\n if (m0) {return String.fromCharCode(parseInt(m0, 10));}\n else if (m1) {return String.fromCharCode(parseInt(m1, 16));}\n else if (m2 && Entities[m2]) {return String.fromCharCode(Entities[m2]);}\n else {return mt;}\n }));\n }\n function parseColor(raw) {\n let temp, result;\n raw = (raw || '').trim();\n if (temp = NamedColors[raw]) {\n result = [temp.slice(), 1];\n } else if (temp = raw.match(/^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)$/i)) {\n temp[1] = parseInt(temp[1]); temp[2] = parseInt(temp[2]); temp[3] = parseInt(temp[3]); temp[4] = parseFloat(temp[4]);\n if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256 && temp[4] <= 1) {\n result = [temp.slice(1, 4), temp[4]];\n }\n } else if (temp = raw.match(/^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)$/i)) {\n temp[1] = parseInt(temp[1]); temp[2] = parseInt(temp[2]); temp[3] = parseInt(temp[3]);\n if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\n result = [temp.slice(1, 4), 1];\n }\n } else if (temp = raw.match(/^rgb\\(\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*\\)$/i)) {\n temp[1] = 2.55 * parseFloat(temp[1]); temp[2] = 2.55 * parseFloat(temp[2]); temp[3] = 2.55 * parseFloat(temp[3]);\n if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\n result = [temp.slice(1, 4), 1];\n }\n } else if (temp = raw.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i)) {\n result = [[parseInt(temp[1], 16), parseInt(temp[2], 16), parseInt(temp[3], 16)], 1];\n } else if (temp = raw.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i)) {\n result = [[0x11 * parseInt(temp[1], 16), 0x11 * parseInt(temp[2], 16), 0x11 * parseInt(temp[3], 16)], 1];\n }\n return colorCallback ? colorCallback(result, raw) : result;\n }\n function opacityToColor(color, opacity, isMask) {\n let newColor = color[0].slice(),\n newOpacity = color[1] * opacity;\n if (isMask) {\n for (let i = 0; i < color.length; i++) {\n newColor[i] *= newOpacity;\n }\n return [newColor, 1];\n } else {\n return [newColor, newOpacity];\n }\n }\n function multiplyMatrix() {\n function multiply(a, b) {\n return [ a[0]*b[0]+a[2]*b[1], a[1]*b[0]+a[3]*b[1], a[0]*b[2]+a[2]*b[3],\n a[1]*b[2]+a[3]*b[3], a[0]*b[4]+a[2]*b[5]+a[4], a[1]*b[4]+a[3]*b[5]+a[5] ];\n }\n let result = arguments[0];\n for (let i = 1; i < arguments.length; i++) {\n result = multiply(result, arguments[i]);\n }\n return result;\n }\n function transformPoint(p, m) {\n return [m[0] * p[0] + m[2] * p[1] + m[4], m[1] * p[0] + m[3] * p[1] + m[5]];\n }\n function getGlobalMatrix() {\n let ctm = doc._ctm;\n for (let i = groupStack.length - 1; i >= 0; i--) {\n ctm = multiplyMatrix(groupStack[i].savedMatrix, ctm);\n }\n return ctm;\n }\n function getPageBBox() {\n return new SvgShape().M(0, 0).L(doc.page.width, 0).L(doc.page.width, doc.page.height).L(0, doc.page.height)\n .transform(inverseMatrix(getGlobalMatrix())).getBoundingBox();\n }\n function inverseMatrix(m) {\n let dt = m[0] * m[3] - m[1] * m[2];\n return [m[3] / dt, -m[1] / dt, -m[2] / dt, m[0] / dt, (m[2]*m[5] - m[3]*m[4]) / dt, (m[1]*m[4] - m[0]*m[5]) / dt];\n }\n function validateMatrix(m) {\n let m0 = validateNumber(m[0]), m1 = validateNumber(m[1]), m2 = validateNumber(m[2]),\n m3 = validateNumber(m[3]), m4 = validateNumber(m[4]), m5 = validateNumber(m[5]);\n if (isNotEqual(m0 * m3 - m1 * m2, 0)) {\n return [m0, m1, m2, m3, m4, m5];\n }\n }\n function solveEquation(curve) {\n let a = curve[2] || 0, b = curve[1] || 0, c = curve[0] || 0;\n if (isEqual(a, 0) && isEqual(b, 0)) {\n return [];\n } else if (isEqual(a, 0)) {\n return [(-c) / b];\n } else {\n let d = b * b - 4 * a * c;\n if (isNotEqual(d, 0) && d > 0) {\n return [(-b + Math.sqrt(d)) / (2 * a), (-b - Math.sqrt(d)) / (2 * a)];\n } else if (isEqual(d, 0)) {\n return [(-b) / (2 * a)];\n } else {\n return [];\n }\n }\n }\n function getCurveValue(t, curve) {\n return (curve[0] || 0) + (curve[1] || 0) * t + (curve[2] || 0) * t * t + (curve[3] || 0) * t * t * t;\n }\n function isEqual(number, ref) {\n return Math.abs(number - ref) < 1e-10;\n }\n function isNotEqual(number, ref) {\n return Math.abs(number - ref) >= 1e-10;\n }\n function validateNumber(n) {\n return n > -1e21 && n < 1e21 ? Math.round(n * 1e6) / 1e6 : 0;\n }\n function isArrayLike(v) {\n return typeof v === 'object' && v !== null && typeof v.length === 'number';\n }\n function parseTranform(v) {\n let parser = new StringParser((v || '').trim()), result = [1, 0, 0, 1, 0, 0], temp;\n while (temp = parser.match(/^([A-Za-z]+)\\s*[(]([^(]+)[)]/, true)) {\n let func = temp[1], nums = [], parser2 = new StringParser(temp[2].trim()), temp2;\n while (temp2 = parser2.matchNumber()) {\n nums.push(Number(temp2));\n parser2.matchSeparator();\n }\n if (func === 'matrix' && nums.length === 6) {\n result = multiplyMatrix(result, [nums[0], nums[1], nums[2], nums[3], nums[4], nums[5]]);\n } else if (func === 'translate' && nums.length === 2) {\n result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], nums[1]]);\n } else if (func === 'translate' && nums.length === 1) {\n result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], 0]);\n } else if (func === 'scale' && nums.length === 2) {\n result = multiplyMatrix(result, [nums[0], 0, 0, nums[1], 0, 0]);\n } else if (func === 'scale' && nums.length === 1) {\n result = multiplyMatrix(result, [nums[0], 0, 0, nums[0], 0, 0]);\n } else if (func === 'rotate' && nums.length === 3) {\n let a = nums[0] * Math.PI / 180;\n result = multiplyMatrix(result, [1, 0, 0, 1, nums[1], nums[2]], [Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0], [1, 0, 0, 1, -nums[1], -nums[2]]);\n } else if (func === 'rotate' && nums.length === 1) {\n let a = nums[0] * Math.PI / 180;\n result = multiplyMatrix(result, [Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]);\n } else if (func === 'skewX' && nums.length === 1) {\n let a = nums[0] * Math.PI / 180;\n result = multiplyMatrix(result, [1, 0, Math.tan(a), 1, 0, 0]);\n } else if (func === 'skewY' && nums.length === 1) {\n let a = nums[0] * Math.PI / 180;\n result = multiplyMatrix(result, [1, Math.tan(a), 0, 1, 0, 0]);\n } else {return;}\n parser.matchSeparator();\n }\n if (parser.matchAll()) {return;}\n return result;\n }\n function parseAspectRatio(aspectRatio, availWidth, availHeight, elemWidth, elemHeight, initAlign) {\n let temp = (aspectRatio || '').trim().match(/^(none)$|^x(Min|Mid|Max)Y(Min|Mid|Max)(?:\\s+(meet|slice))?$/) || [],\n ratioType = temp[1] || temp[4] || 'meet',\n xAlign = temp[2] || 'Mid',\n yAlign = temp[3] || 'Mid',\n scaleX = availWidth / elemWidth,\n scaleY = availHeight / elemHeight,\n dx = {'Min':0, 'Mid':0.5, 'Max':1}[xAlign] - (initAlign || 0),\n dy = {'Min':0, 'Mid':0.5, 'Max':1}[yAlign] - (initAlign || 0);\n if (ratioType === 'slice') {\n scaleY = scaleX = Math.max(scaleX, scaleY);\n } else if (ratioType === 'meet') {\n scaleY = scaleX = Math.min(scaleX, scaleY);\n }\n return [scaleX, 0, 0, scaleY, dx * (availWidth - elemWidth * scaleX), dy * (availHeight - elemHeight * scaleY)];\n }\n function parseStyleAttr(v) {\n let result = Object.create(null);\n v = (v || '').trim().split(/;/);\n for (let i = 0; i < v.length; i++) {\n let key = (v[i].split(':')[0] || '').trim(),\n value = (v[i].split(':')[1] || '').trim();\n if (key) {\n result[key] = value;\n }\n }\n if (result['marker']) {\n if (!result['marker-start']) {result['marker-start'] = result['marker'];}\n if (!result['marker-mid']) {result['marker-mid'] = result['marker'];}\n if (!result['marker-end']) {result['marker-end'] = result['marker'];}\n }\n if (result['font']) {\n let fontFamily = null, fontSize = null, fontStyle = \"normal\", fontWeight = \"normal\", fontVariant = \"normal\";\n let parts = result['font'].split(/\\s+/);\n for (let i = 0; i < parts.length; i++) {\n switch (parts[i]) {\n case \"normal\":\n break;\n case \"italic\": case \"oblique\":\n fontStyle = parts[i];\n break;\n case \"small-caps\":\n fontVariant = parts[i];\n break;\n case \"bold\": case \"bolder\": case \"lighter\": case \"100\": case \"200\": case \"300\":\n case \"400\": case \"500\": case \"600\": case \"700\": case \"800\": case \"900\":\n fontWeight = parts[i];\n break;\n default:\n if (!fontSize) {\n fontSize = parts[i].split('/')[0];\n } else {\n if (!fontFamily) {\n fontFamily = parts[i];\n } else {\n fontFamily += ' ' + parts[i];\n }\n }\n break;\n }\n }\n if (!result['font-style']) {result['font-style'] = fontStyle;}\n if (!result['font-variant']) {result['font-variant'] = fontVariant;}\n if (!result['font-weight']) {result['font-weight'] = fontWeight;}\n if (!result['font-size']) {result['font-size'] = fontSize;}\n if (!result['font-family']) {result['font-family'] = fontFamily;}\n }\n return result;\n }\n function parseSelector(v) {\n let parts = v.split(/(?=[.#])/g), ids = [], classes = [], tags = [], temp;\n for (let i = 0; i < parts.length; i++) {\n if (temp = parts[i].match(/^[#]([_A-Za-z0-9-]+)$/)) {\n ids.push(temp[1]);\n } else if (temp = parts[i].match(/^[.]([_A-Za-z0-9-]+)$/)) {\n classes.push(temp[1]);\n } else if (temp = parts[i].match(/^([_A-Za-z0-9-]+)$/)) {\n tags.push(temp[1]);\n } else if (parts[i] !== '*') {\n return;\n }\n }\n return {\n tags: tags, ids: ids, classes: classes,\n specificity: ids.length * 10000 + classes.length * 100 + tags.length\n };\n }\n function parseStyleSheet(v) {\n let parser = new StringParser(v.trim()), rules = [], rule;\n while (rule = parser.match(/^\\s*([^\\{\\}]*?)\\s*\\{([^\\{\\}]*?)\\}/, true)) {\n let selectors = rule[1].split(/\\s*,\\s*/g),\n css = parseStyleAttr(rule[2]);\n for (let i = 0; i < selectors.length; i++) {\n let selector = parseSelector(selectors[i]);\n if (selector) {\n rules.push({selector: selector, css:css});\n }\n }\n }\n return rules;\n }\n function matchesSelector(elem, selector) {\n if (elem.nodeType !== 1) {return false;}\n for (let i = 0; i < selector.tags.length; i++) {\n if (selector.tags[i] !== elem.nodeName) {return false;}\n }\n for (let i = 0; i < selector.ids.length; i++) {\n if (selector.ids[i] !== elem.id) {return false;}\n }\n for (let i = 0; i < selector.classes.length; i++) {\n if (elem.classList.indexOf(selector.classes[i]) === -1) {return false;}\n }\n return true;\n }\n function getStyle(elem) {\n let result = Object.create(null);\n let specificities = Object.create(null);\n for (let i = 0; i < styleRules.length; i++) {\n let rule = styleRules[i];\n if (matchesSelector(elem, rule.selector)) {\n for (let key in rule.css) {\n if (!(specificities[key] > rule.selector.specificity)) {\n result[key] = rule.css[key];\n specificities[key] = rule.selector.specificity;\n }\n }\n }\n }\n return result;\n }\n function combineArrays(array1, array2) {\n return array1.concat(array2.slice(array1.length));\n }\n function getAscent(font, size) {\n return Math.max(font.ascender, (font.bbox[3] || font.bbox.maxY) * (font.scale || 1)) * size / 1000;\n }\n function getDescent(font, size) {\n return Math.min(font.descender, (font.bbox[1] || font.bbox.minY) * (font.scale || 1)) * size / 1000;\n }\n function getXHeight(font, size) {\n return (font.xHeight || 0.5 * (font.ascender - font.descender)) * size / 1000;\n }\n function getBaseline(font, size, baseline, shift) {\n let dy1, dy2;\n switch (baseline) {\n case 'middle': dy1 = 0.5 * getXHeight(font, size); break;\n case 'central': dy1 = 0.5 * (getDescent(font, size) + getAscent(font, size)); break;\n case 'after-edge': case 'text-after-edge': dy1 = getDescent(font, size); break;\n case 'alphabetic': case 'auto': case 'baseline': dy1 = 0; break;\n case 'mathematical': dy1 = 0.5 * getAscent(font, size); break;\n case 'hanging': dy1 = 0.8 * getAscent(font, size); break;\n case 'before-edge': case 'text-before-edge': dy1 = getAscent(font, size); break;\n default: dy1 = 0; break;\n }\n switch (shift) {\n case 'baseline': dy2 = 0; break;\n case 'super': dy2 = 0.6 * size; break;\n case 'sub': dy2 = -0.6 * size; break;\n default: dy2 = shift; break;\n }\n return dy1 - dy2;\n }\n function getTextPos(font, size, text) {\n let encoded = font.encode('' + text), hex = encoded[0], pos = encoded[1], data = [];\n for (let i = 0; i < hex.length; i++) {\n let unicode = font.unicode ? font.unicode[parseInt(hex[i], 16)] : [text.charCodeAt(i)];\n data.push({\n glyph: hex[i],\n unicode: unicode,\n width: pos[i].advanceWidth * size / 1000,\n xOffset: pos[i].xOffset * size / 1000,\n yOffset: pos[i].yOffset * size / 1000,\n xAdvance: pos[i].xAdvance * size / 1000,\n yAdvance: pos[i].yAdvance * size / 1000\n });\n }\n return data;\n }\n function createSVGElement(obj, inherits) {\n switch (obj.nodeName) {\n case 'use': return new SvgElemUse(obj, inherits);\n case 'symbol': return new SvgElemSymbol(obj, inherits);\n case 'g': return new SvgElemGroup(obj, inherits);\n case 'a': return new SvgElemLink(obj, inherits);\n case 'svg': return new SvgElemSvg(obj, inherits);\n case 'image': return new SVGElemImage(obj, inherits);\n case 'rect': return new SvgElemRect(obj, inherits);\n case 'circle': return new SvgElemCircle(obj, inherits);\n case 'ellipse': return new SvgElemEllipse(obj, inherits);\n case 'line': return new SvgElemLine(obj, inherits);\n case 'polyline': return new SvgElemPolyline(obj, inherits);\n case 'polygon': return new SvgElemPolygon(obj, inherits);\n case 'path': return new SvgElemPath(obj, inherits);\n case 'text': return new SvgElemText(obj, inherits);\n case 'tspan': return new SvgElemTspan(obj, inherits);\n case 'textPath': return new SvgElemTextPath(obj, inherits);\n case '#text': case '#cdata-section': return new SvgElemTextNode(obj, inherits);\n default: return new SvgElem(obj, inherits);\n }\n }\n\n var StringParser = function(str) {\n this.match = function(exp, all) {\n let temp = str.match(exp);\n if (!temp || temp.index !== 0) {return;}\n str = str.substring(temp[0].length);\n return (all ? temp : temp[0]);\n };\n this.matchSeparator = function() {\n return this.match(/^(?:\\s*,\\s*|\\s*|)/);\n };\n this.matchSpace = function() {\n return this.match(/^(?:\\s*)/);\n };\n this.matchLengthUnit = function() {\n return this.match(/^(?:px|pt|cm|mm|in|pc|em|ex|%|)/);\n };\n this.matchNumber = function() {\n return this.match(/^(?:[-+]?(?:[0-9]+[.][0-9]+|[0-9]+[.]|[.][0-9]+|[0-9]+)(?:[eE][-+]?[0-9]+)?)/);\n };\n this.matchAll = function() {\n return this.match(/^[\\s\\S]+/);\n };\n };\n\n var BezierSegment = function(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n let divisions = 6 * precision;\n let equationX = [p1x, -3 * p1x + 3 * c1x, 3 * p1x - 6 * c1x + 3 * c2x, -p1x + 3 * c1x - 3 * c2x + p2x];\n let equationY = [p1y, -3 * p1y + 3 * c1y, 3 * p1y - 6 * c1y + 3 * c2y, -p1y + 3 * c1y - 3 * c2y + p2y];\n let derivativeX = [-3 * p1x + 3 * c1x, 6 * p1x - 12 * c1x + 6 * c2x, -3 * p1x + 9 * c1x - 9 * c2x + 3 * p2x];\n let derivativeY = [-3 * p1y + 3 * c1y, 6 * p1y - 12 * c1y + 6 * c2y, -3 * p1y + 9 * c1y - 9 * c2y + 3 * p2y];\n let lengthMap = [0];\n for (let i = 1; i <= divisions; i++) {\n let t = (i - 0.5) / divisions;\n let dx = getCurveValue(t, derivativeX) / divisions,\n dy = getCurveValue(t, derivativeY) / divisions,\n l = Math.sqrt(dx * dx + dy * dy);\n lengthMap[i] = lengthMap[i - 1] + l;\n }\n this.totalLength = lengthMap[divisions];\n this.startPoint = [p1x, p1y, isEqual(p1x, c1x) && isEqual(p1y, c1y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(c1y - p1y, c1x - p1x)];\n this.endPoint = [p2x, p2y, isEqual(c2x, p2x) && isEqual(c2y, p2y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(p2y - c2y, p2x - c2x)];\n this.getBoundingBox = function() {\n let temp;\n let minX = getCurveValue(0, equationX), minY = getCurveValue(0, equationY),\n maxX = getCurveValue(1, equationX), maxY = getCurveValue(1, equationY);\n if (minX > maxX) {temp = maxX; maxX = minX; minX = temp;}\n if (minY > maxY) {temp = maxY; maxY = minY; minY = temp;}\n let rootsX = solveEquation(derivativeX);\n for (let i = 0; i < rootsX.length; i++) {\n if (rootsX[i] >= 0 && rootsX[i] <= 1) {\n let x = getCurveValue(rootsX[i], equationX);\n if (x < minX) {minX = x;}\n if (x > maxX) {maxX = x;}\n }\n }\n let rootsY = solveEquation(derivativeY);\n for (let i = 0; i < rootsY.length; i++) {\n if (rootsY[i] >= 0 && rootsY[i] <= 1) {\n let y = getCurveValue(rootsY[i], equationY);\n if (y < minY) {minY = y;}\n if (y > maxY) {maxY = y;}\n }\n }\n return [minX, minY, maxX, maxY];\n };\n this.getPointAtLength = function(l) {\n if (isEqual(l, 0)) {return this.startPoint;}\n if (isEqual(l, this.totalLength)) {return this.endPoint;}\n if (l < 0 || l > this.totalLength) {return;}\n for (let i = 1; i <= divisions; i++) {\n let l1 = lengthMap[i-1], l2 = lengthMap[i];\n if (l1 <= l && l <= l2) {\n let t = (i - (l2 - l) / (l2 - l1)) / divisions,\n x = getCurveValue(t, equationX), y = getCurveValue(t, equationY),\n dx = getCurveValue(t, derivativeX), dy = getCurveValue(t, derivativeY);\n return [x, y, Math.atan2(dy, dx)];\n }\n }\n };\n };\n\n var LineSegment = function(p1x, p1y, p2x, p2y) {\n this.totalLength = Math.sqrt((p2x - p1x) * (p2x - p1x) + (p2y - p1y) * (p2y - p1y));\n this.startPoint = [p1x, p1y, Math.atan2(p2y - p1y, p2x - p1x)];\n this.endPoint = [p2x, p2y, Math.atan2(p2y - p1y, p2x - p1x)];\n this.getBoundingBox = function() {\n return [Math.min(this.startPoint[0], this.endPoint[0]), Math.min(this.startPoint[1], this.endPoint[1]),\n Math.max(this.startPoint[0], this.endPoint[0]), Math.max(this.startPoint[1], this.endPoint[1])];\n };\n this.getPointAtLength = function(l) {\n if (l >= 0 && l <= this.totalLength) {\n let r = l / this.totalLength || 0,\n x = this.startPoint[0] + r * (this.endPoint[0] - this.startPoint[0]),\n y = this.startPoint[1] + r * (this.endPoint[1] - this.startPoint[1]);\n return [x, y, this.startPoint[2]];\n }\n };\n };\n\n var SvgShape = function() {\n this.pathCommands = [];\n this.pathSegments = [];\n this.startPoint = null;\n this.endPoint = null;\n this.totalLength = 0;\n let startX = 0, startY = 0, currX = 0, currY = 0, lastCom, lastCtrlX, lastCtrlY;\n this.move = function(x, y) {\n startX = currX = x; startY = currY = y;\n return null;\n };\n this.line = function(x, y) {\n let segment = new LineSegment(currX, currY, x, y);\n currX = x; currY = y;\n return segment;\n };\n this.curve = function(c1x, c1y, c2x, c2y, x, y) {\n let segment = new BezierSegment(currX, currY, c1x, c1y, c2x, c2y, x, y);\n currX = x; currY = y;\n return segment;\n };\n this.close = function() {\n let segment = new LineSegment(currX, currY, startX, startY);\n currX = startX; currY = startY;\n return segment;\n };\n this.addCommand = function(data) {\n this.pathCommands.push(data);\n let segment = this[data[0]].apply(this, data.slice(3));\n if (segment) {\n segment.hasStart = data[1];\n segment.hasEnd = data[2];\n this.startPoint = this.startPoint || segment.startPoint;\n this.endPoint = segment.endPoint;\n this.pathSegments.push(segment);\n this.totalLength += segment.totalLength;\n }\n };\n this.M = function(x, y) {\n this.addCommand(['move', true, true, x, y]);\n lastCom = 'M';\n return this;\n };\n this.m = function(x, y) {\n return this.M(currX + x, currY + y);\n };\n this.Z = this.z = function() {\n this.addCommand(['close', true, true]);\n lastCom = 'Z';\n return this;\n };\n this.L = function(x, y) {\n this.addCommand(['line', true, true, x, y]);\n lastCom = 'L';\n return this;\n };\n this.l = function(x, y) {\n return this.L(currX + x, currY + y);\n };\n this.H = function(x) {\n return this.L(x, currY);\n };\n this.h = function(x) {\n return this.L(currX + x, currY);\n };\n this.V = function(y) {\n return this.L(currX, y);\n };\n this.v = function(y) {\n return this.L(currX, currY + y);\n };\n this.C = function(c1x, c1y, c2x, c2y, x, y) {\n this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\n lastCom = 'C'; lastCtrlX = c2x; lastCtrlY = c2y;\n return this;\n };\n this.c = function(c1x, c1y, c2x, c2y, x, y) {\n return this.C(currX + c1x, currY + c1y, currX + c2x, currY + c2y, currX + x, currY + y);\n };\n this.S = function(c1x, c1y, x, y) {\n return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), c1x, c1y, x, y);\n };\n this.s = function(c1x, c1y, x, y) {\n return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), currX + c1x, currY + c1y, currX + x, currY + y);\n };\n this.Q = function(cx, cy, x, y) {\n let c1x = currX + 2 / 3 * (cx - currX), c1y = currY + 2 / 3 * (cy - currY),\n c2x = x + 2 / 3 * (cx - x), c2y = y + 2 / 3 * (cy - y);\n this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\n lastCom = 'Q'; lastCtrlX = cx; lastCtrlY = cy;\n return this;\n };\n this.q = function(c1x, c1y, x, y) {\n return this.Q(currX + c1x, currY + c1y, currX + x, currY + y);\n };\n this.T = function(x, y) {\n return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), x, y);\n };\n this.t = function(x, y) {\n return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), currX + x, currY + y);\n };\n this.A = function(rx, ry, fi, fa, fs, x, y) {\n if (isEqual(rx, 0) || isEqual(ry, 0)) {\n this.addCommand(['line', true, true, x, y]);\n } else {\n fi = fi * (Math.PI / 180);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n fa = 1 * !!fa;\n fs = 1 * !!fs;\n let x1 = Math.cos(fi) * (currX - x) / 2 + Math.sin(fi) * (currY - y) / 2,\n y1 = Math.cos(fi) * (currY - y) / 2 - Math.sin(fi) * (currX - x) / 2,\n lambda = (x1 * x1) / (rx * rx) + (y1 * y1) / (ry * ry);\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n let r = Math.sqrt(Math.max(0, rx * rx * ry * ry - rx * rx * y1 * y1 - ry * ry * x1 * x1) / (rx * rx * y1 * y1 + ry * ry * x1 * x1)),\n x2 = (fa === fs ? -1 : 1) * r * rx * y1 / ry,\n y2 = (fa === fs ? 1 : -1) * r * ry * x1 / rx;\n let cx = Math.cos(fi) * x2 - Math.sin(fi) * y2 + (currX + x) / 2,\n cy = Math.sin(fi) * x2 + Math.cos(fi) * y2 + (currY + y) / 2,\n th1 = Math.atan2((y1 - y2) / ry, (x1 - x2) / rx),\n th2 = Math.atan2((-y1 - y2) / ry, (-x1 - x2) / rx);\n if (fs === 0 && th2 - th1 > 0) {\n th2 -= 2 * Math.PI;\n } else if (fs === 1 && th2 - th1 < 0) {\n th2 += 2 * Math.PI;\n }\n let segms = Math.ceil(Math.abs(th2 - th1) / (Math.PI / precision));\n for (let i = 0; i < segms; i++) {\n let th3 = th1 + i * (th2 - th1) / segms,\n th4 = th1 + (i + 1) * (th2 - th1) / segms,\n t = 4/3 * Math.tan((th4 - th3) / 4);\n let c1x = cx + Math.cos(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) - Math.sin(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\n c1y = cy + Math.sin(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) + Math.cos(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\n c2x = cx + Math.cos(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) - Math.sin(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\n c2y = cy + Math.sin(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) + Math.cos(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\n endX = cx + Math.cos(fi) * rx * Math.cos(th4) - Math.sin(fi) * ry * Math.sin(th4),\n endY = cy + Math.sin(fi) * rx * Math.cos(th4) + Math.cos(fi) * ry * Math.sin(th4);\n this.addCommand(['curve', (i === 0), (i === segms - 1), c1x, c1y, c2x, c2y, endX, endY]);\n }\n }\n lastCom = 'A';\n return this;\n };\n this.a = function(rx, ry, fi, fa, fs, x, y) {\n return this.A(rx, ry, fi, fa, fs, currX + x, currY + y);\n };\n this.path = function(d) {\n let command, value, temp,\n parser = new StringParser((d || '').trim());\n while (command = parser.match(/^[astvzqmhlcASTVZQMHLC]/)) {\n parser.matchSeparator();\n let values = [];\n while (value = (PathFlags[command + values.length] ? parser.match(/^[01]/) : parser.matchNumber())) {\n parser.matchSeparator();\n if (values.length === PathArguments[command]) {\n this[command].apply(this, values);\n values = [];\n if (command === 'M') {command = 'L';}\n else if (command === 'm') {command = 'l';}\n }\n values.push(Number(value));\n }\n if (values.length === PathArguments[command]) {\n this[command].apply(this, values);\n } else {\n warningCallback('SvgPath: command ' + command + ' with ' + values.length + ' numbers'); return;\n }\n }\n if (temp = parser.matchAll()) {\n warningCallback('SvgPath: unexpected string ' + temp);\n }\n return this;\n };\n this.getBoundingBox = function() {\n let bbox = [Infinity, Infinity, -Infinity, -Infinity];\n function addBounds(bbox1) {\n if (bbox1[0] < bbox[0]) {bbox[0] = bbox1[0];}\n if (bbox1[2] > bbox[2]) {bbox[2] = bbox1[2];}\n if (bbox1[1] < bbox[1]) {bbox[1] = bbox1[1];}\n if (bbox1[3] > bbox[3]) {bbox[3] = bbox1[3];}\n }\n for (let i = 0; i < this.pathSegments.length; i++) {\n addBounds(this.pathSegments[i].getBoundingBox());\n }\n if (bbox[0] === Infinity) {bbox[0] = 0;}\n if (bbox[1] === Infinity) {bbox[1] = 0;}\n if (bbox[2] === -Infinity) {bbox[2] = 0;}\n if (bbox[3] === -Infinity) {bbox[3] = 0;}\n return bbox;\n };\n this.getPointAtLength = function(l) {\n if (l >= 0 && l <= this.totalLength) {\n let temp;\n for (let i = 0; i < this.pathSegments.length; i++) {\n if (temp = this.pathSegments[i].getPointAtLength(l)) {\n return temp;\n }\n l -= this.pathSegments[i].totalLength;\n }\n return this.endPoint;\n }\n };\n this.transform = function(m) {\n this.pathSegments = [];\n this.startPoint = null;\n this.endPoint = null;\n this.totalLength = 0;\n for (let i = 0; i < this.pathCommands.length; i++) {\n let data = this.pathCommands.shift();\n for (let j = 3; j < data.length; j+=2) {\n let p = transformPoint([data[j], data[j + 1]], m)\n data[j] = p[0];\n data[j + 1] = p[1];\n }\n this.addCommand(data);\n }\n return this;\n };\n this.mergeShape = function(shape) {\n for (let i = 0; i < shape.pathCommands.length; i++) {\n this.addCommand(shape.pathCommands[i].slice());\n }\n return this;\n };\n this.clone = function() {\n return new SvgShape().mergeShape(this);\n };\n this.insertInDocument = function() {\n for (let i = 0; i < this.pathCommands.length; i++) {\n let command = this.pathCommands[i][0], values = this.pathCommands[i].slice(3);\n switch(command) {\n case 'move': doc.moveTo(values[0], values[1]); break;\n case 'line': doc.lineTo(values[0], values[1]); break;\n case 'curve': doc.bezierCurveTo(values[0], values[1], values[2], values[3], values[4], values[5]); break;\n case 'close': doc.closePath(); break;\n }\n }\n };\n this.getSubPaths = function() {\n let subPaths = [], shape = new SvgShape();\n for (let i = 0; i < this.pathCommands.length; i++) {\n let data = this.pathCommands[i], command = this.pathCommands[i][0];\n if (command === 'move' && i !== 0) {\n subPaths.push(shape);\n shape = new SvgShape();\n }\n shape.addCommand(data);\n }\n subPaths.push(shape);\n return subPaths;\n };\n this.getMarkers = function() {\n let markers = [], subPaths = this.getSubPaths();\n for (let i = 0; i < subPaths.length; i++) {\n let subPath = subPaths[i], subPathMarkers = [];\n for (let j = 0; j < subPath.pathSegments.length; j++) {\n let segment = subPath.pathSegments[j];\n if (isNotEqual(segment.totalLength, 0) || j === 0 || j === subPath.pathSegments.length - 1) {\n if (segment.hasStart) {\n let startMarker = segment.getPointAtLength(0), prevEndMarker = subPathMarkers.pop();\n if (prevEndMarker) {startMarker[2] = 0.5 * (prevEndMarker[2] + startMarker[2]);}\n subPathMarkers.push(startMarker);\n }\n if (segment.hasEnd) {\n let endMarker = segment.getPointAtLength(segment.totalLength);\n subPathMarkers.push(endMarker);\n }\n }\n }\n markers = markers.concat(subPathMarkers);\n }\n return markers;\n };\n };\n\n var SvgElem = function(obj, inherits) {\n let styleCache = Object.create(null);\n let childrenCache = null;\n this.name = obj.nodeName;\n this.isOuterElement = obj === svg || !obj.parentNode;\n this.inherits = inherits || (!this.isOuterElement ? createSVGElement(obj.parentNode, null) : null);\n this.stack = (this.inherits ? this.inherits.stack.concat(obj) : [obj]);\n this.style = parseStyleAttr(typeof obj.getAttribute === 'function' && obj.getAttribute('style'));\n this.css = useCSS ? getComputedStyle(obj) : getStyle(obj);\n this.allowedChildren = [];\n this.attr = function(key) {\n if (typeof obj.getAttribute === 'function') {\n return obj.getAttribute(key);\n }\n };\n this.resolveUrl = function(value) {\n let temp = (value || '').match(/^\\s*(?:url\\(\"(.*)#(.*)\"\\)|url\\('(.*)#(.*)'\\)|url\\((.*)#(.*)\\)|(.*)#(.*))\\s*$/) || [];\n let file = temp[1] || temp[3] || temp[5] || temp[7],\n id = temp[2] || temp[4] || temp[6] || temp[8];\n if (id) {\n if (!file) {\n let svgObj = svg.getElementById(id);\n if (svgObj) {\n if (this.stack.indexOf(svgObj) === -1) {\n return svgObj;\n } else {\n warningCallback('SVGtoPDF: loop of circular references for id \"' + id + '\"');\n return;\n }\n }\n }\n if (documentCallback) {\n let svgs = documentCache[file];\n if (!svgs) {\n svgs = documentCallback(file);\n if (!isArrayLike(svgs)) {svgs = [svgs];}\n for (let i = 0; i < svgs.length; i++) {\n if (typeof svgs[i] === 'string') {svgs[i] = parseXml(svgs[i]);}\n }\n documentCache[file] = svgs;\n }\n for (let i = 0; i < svgs.length; i++) {\n let svgObj = svgs[i].getElementById(id);\n if (svgObj) {\n if (this.stack.indexOf(svgObj) === -1) {\n return svgObj;\n } else {\n warningCallback('SVGtoPDF: loop of circular references for id \"' + file + '#' + id + '\"');\n return;\n }\n }\n }\n }\n }\n };\n this.computeUnits = function(value, unit, percent, isFontSize) {\n if (unit === '%') {\n return parseFloat(value) / 100 * (isFontSize || percent != null ? percent : this.getViewport());\n } else if (unit === 'ex' || unit === 'em') {\n return value * {'em':1, 'ex':0.5}[unit] * (isFontSize ? percent : this.get('font-size'));\n } else {\n return value * {'':1, 'px':1, 'pt':96/72, 'cm':96/2.54, 'mm':96/25.4, 'in':96, 'pc':96/6}[unit];\n }\n };\n this.computeLength = function(value, percent, initial, isFontSize) {\n let parser = new StringParser((value || '').trim()), temp1, temp2;\n if (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string' && !parser.matchAll()) {\n return this.computeUnits(temp1, temp2, percent, isFontSize);\n }\n return initial;\n };\n this.computeLengthList = function(value, percent, strict) {\n let parser = new StringParser((value || '').trim()), result = [], temp1, temp2;\n while (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string') {\n result.push(this.computeUnits(temp1, temp2, percent));\n parser.matchSeparator();\n }\n if (strict && parser.matchAll()) {return;}\n return result;\n };\n this.getLength = function(key, percent, initial) {\n return this.computeLength(this.attr(key), percent, initial);\n };\n this.getLengthList = function(key, percent) {\n return this.computeLengthList(this.attr(key), percent);\n };\n this.getUrl = function(key) {\n return this.resolveUrl(this.attr(key))\n };\n this.getNumberList = function(key) {\n let parser = new StringParser((this.attr(key) || '').trim()), result = [], temp;\n while (temp = parser.matchNumber()) {\n result.push(Number(temp));\n parser.matchSeparator();\n }\n result.error = parser.matchAll();\n return result;\n }\n this.getViewbox = function(key, initial) {\n let viewBox = this.getNumberList(key);\n if (viewBox.length === 4 && viewBox[2] >= 0 && viewBox[3] >= 0) {return viewBox;}\n return initial;\n };\n this.getPercent = function(key, initial) {\n let value = this.attr(key);\n let parser = new StringParser((value || '').trim()), temp1, temp2;\n let number = parser.matchNumber();\n if (!number) {return initial;}\n if (parser.match('%')) {number *= 0.01;}\n if (parser.matchAll()) {return initial;}\n return Math.max(0, Math.min(1, number));\n };\n this.chooseValue = function(args) {\n for (let i = 0; i < arguments.length; i++) {\n if (arguments[i] != null && arguments[i] === arguments[i]) {return arguments[i];}\n }\n return arguments[arguments.length - 1];\n };\n this.get = function(key) {\n if (styleCache[key] !== undefined) {return styleCache[key];}\n let keyInfo = Properties[key] || {}, value, result;\n for (let i = 0; i < 3; i++) {\n switch (i) {\n case 0:\n if (key !== 'transform') { // the CSS transform behaves strangely\n value = this.css[keyInfo.css || key];\n }\n break;\n case 1:\n value = this.style[key];\n break;\n case 2:\n value = this.attr(key);\n break;\n }\n if (value === 'inherit') {\n result = (this.inherits ? this.inherits.get(key) : keyInfo.initial);\n if (result != null) {return styleCache[key] = result;}\n }\n if (keyInfo.values != null) {\n result = keyInfo.values[value];\n if (result != null) {return styleCache[key] = result;}\n }\n if (value != null) {\n let parsed;\n switch (key) {\n case 'font-size':\n result = this.computeLength(value, this.inherits ? this.inherits.get(key) : keyInfo.initial, undefined, true);\n break;\n case 'baseline-shift':\n result = this.computeLength(value, this.get('font-size'));\n break;\n case 'font-family':\n result = value || undefined;\n break;\n case 'opacity': case 'stroke-opacity': case 'fill-opacity': case 'stop-opacity':\n parsed = parseFloat(value);\n if (!isNaN(parsed)) {\n result = Math.max(0, Math.min(1, parsed));\n }\n break;\n case 'transform':\n result = parseTranform(value);\n break;\n case 'stroke-dasharray':\n if (value === 'none') {\n result = [];\n } else if (parsed = this.computeLengthList(value, this.getViewport(), true)) {\n let sum = 0, error = false;\n for (let j = 0; j < parsed.length; j++) {\n if (parsed[j] < 0) {error = true;}\n sum += parsed[j];\n }\n if (!error) {\n if (parsed.length % 2 === 1) {\n parsed = parsed.concat(parsed);\n }\n result = (sum === 0 ? [] : parsed);\n }\n }\n break;\n case 'color':\n if (value === 'none' || value === 'transparent') {\n result = 'none';\n } else {\n result = parseColor(value);\n }\n break;\n case 'fill': case 'stroke':\n if (value === 'none' || value === 'transparent') {\n result = 'none';\n } else if (value === 'currentColor') {\n result = this.get('color');\n } else if (parsed = parseColor(value)) {\n return parsed;\n } else if (parsed = (value || '').split(' ')) {\n let object = this.resolveUrl(parsed[0]),\n fallbackColor = parseColor(parsed[1]);\n if (object == null) {\n result = fallbackColor;\n } else if (object.nodeName === 'linearGradient' || object.nodeName === 'radialGradient') {\n result = new SvgElemGradient(object, null, fallbackColor);\n } else if (object.nodeName === 'pattern') {\n result = new SvgElemPattern(object, null, fallbackColor);\n } else {\n result = fallbackColor;\n }\n }\n break;\n case 'stop-color':\n if (value === 'none' || value === 'transparent') {\n result = 'none';\n } else if (value === 'currentColor') {\n result = this.get('color');\n } else {\n result = parseColor(value);\n }\n break;\n case 'marker-start': case 'marker-mid': case 'marker-end': case 'clip-path': case 'mask':\n if (value === 'none') {\n result = 'none';\n } else {\n result = this.resolveUrl(value);\n }\n break;\n case 'stroke-width':\n parsed = this.computeLength(value, this.getViewport());\n if (parsed != null && parsed >= 0) {\n result = parsed;\n }\n break;\n case 'stroke-miterlimit':\n parsed = parseFloat(value);\n if (parsed != null && parsed >= 1) {\n result = parsed;\n }\n break;\n case 'word-spacing': case 'letter-spacing':\n result = this.computeLength(value, this.getViewport());\n break;\n case 'stroke-dashoffset':\n result = this.computeLength(value, this.getViewport());\n if (result != null) {\n if (result < 0) { // fix for crbug.com/660850\n let dasharray = this.get('stroke-dasharray');\n for (let j = 0; j < dasharray.length; j++) {result += dasharray[j];}\n }\n }\n break;\n }\n if (result != null) {return styleCache[key] = result;}\n }\n }\n return styleCache[key] = (keyInfo.inherit && this.inherits ? this.inherits.get(key) : keyInfo.initial);\n };\n this.getChildren = function() {\n if (childrenCache != null) {return childrenCache;}\n let children = [];\n for (let i = 0; i < obj.childNodes.length; i++) {\n let child = obj.childNodes[i];\n if (!child.error && this.allowedChildren.indexOf(child.nodeName) !== -1) {\n children.push(createSVGElement(child, this));\n }\n }\n return childrenCache = children;\n };\n this.getParentVWidth = function() {\n return (this.inherits ? this.inherits.getVWidth(): viewportWidth);\n };\n this.getParentVHeight = function() {\n return (this.inherits ? this.inherits.getVHeight() : viewportHeight);\n };\n this.getParentViewport = function() {\n return Math.sqrt(0.5 * this.getParentVWidth() * this.getParentVWidth() + 0.5 * this.getParentVHeight() * this.getParentVHeight());\n };\n this.getVWidth = function() {\n return this.getParentVWidth();\n };\n this.getVHeight = function() {\n return this.getParentVHeight();\n };\n this.getViewport = function() {\n return Math.sqrt(0.5 * this.getVWidth() * this.getVWidth() + 0.5 * this.getVHeight() * this.getVHeight());\n };\n this.getBoundingBox = function() {\n let shape = this.getBoundingShape();\n return shape.getBoundingBox();\n };\n };\n\n var SvgElemStylable = function(obj, inherits) {\n SvgElem.call(this, obj, inherits);\n this.transform = function() {\n doc.transform.apply(doc, this.getTransformation());\n };\n this.clip = function() {\n if (this.get('clip-path') !== 'none') {\n let clipPath = new SvgElemClipPath(this.get('clip-path'), null);\n clipPath.useMask(this.getBoundingBox());\n return true;\n }\n };\n this.mask = function() {\n if (this.get('mask') !== 'none') {\n let mask = new SvgElemMask(this.get('mask'), null);\n mask.useMask(this.getBoundingBox());\n return true;\n }\n };\n this.getFill = function(isClip, isMask) {\n let opacity = this.get('opacity'),\n fill = this.get('fill'),\n fillOpacity = this.get('fill-opacity');\n if (isClip) {return DefaultColors.white;}\n if (fill !== 'none' && opacity && fillOpacity) {\n if (fill instanceof SvgElemGradient || fill instanceof SvgElemPattern) {\n return fill.getPaint(this.getBoundingBox(), fillOpacity * opacity, isClip, isMask);\n }\n return opacityToColor(fill, fillOpacity * opacity, isMask);\n }\n };\n this.getStroke = function(isClip, isMask) {\n let opacity = this.get('opacity'),\n stroke = this.get('stroke'),\n strokeOpacity = this.get('stroke-opacity');\n if (isClip || isEqual(this.get('stroke-width'), 0)) {return;}\n if (stroke !== 'none' && opacity && strokeOpacity) {\n if (stroke instanceof SvgElemGradient || stroke instanceof SvgElemPattern) {\n return stroke.getPaint(this.getBoundingBox(), strokeOpacity * opacity, isClip, isMask);\n }\n return opacityToColor(stroke, strokeOpacity * opacity, isMask);\n }\n };\n };\n\n var SvgElemHasChildren = function(obj, inherits) {\n SvgElemStylable.call(this, obj, inherits);\n this.allowedChildren = ['use', 'g', 'a', 'svg', 'image', 'rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon', 'path', 'text'];\n this.getBoundingShape = function() {\n let shape = new SvgShape(),\n children = this.getChildren();\n for (let i = 0; i < children.length; i++) {\n if (children[i].get('display') !== 'none') {\n if (typeof children[i].getBoundingShape === 'function') {\n let childShape = children[i].getBoundingShape().clone();\n if (typeof children[i].getTransformation === 'function') {\n childShape.transform(children[i].getTransformation());\n }\n shape.mergeShape(childShape);\n }\n }\n }\n return shape;\n };\n this.drawChildren = function(isClip, isMask) {\n let children = this.getChildren();\n for (let i = 0; i < children.length; i++) {\n if (children[i].get('display') !== 'none') {\n if (typeof children[i].drawInDocument === 'function') {\n children[i].drawInDocument(isClip, isMask);\n }\n }\n }\n };\n };\n\n var SvgElemContainer = function(obj, inherits) {\n SvgElemHasChildren.call(this, obj, inherits);\n this.drawContent = function(isClip, isMask) {\n this.transform();\n let clipped = this.clip(),\n masked = this.mask(),\n group;\n if ((this.get('opacity') < 1 || clipped || masked) && !isClip) {\n group = docBeginGroup(getPageBBox());\n }\n this.drawChildren(isClip, isMask);\n if (group) {\n docEndGroup(group);\n doc.fillOpacity(this.get('opacity'));\n docInsertGroup(group);\n }\n };\n };\n\n var SvgElemUse = function(obj, inherits) {\n SvgElemContainer.call(this, obj, inherits);\n let x = this.getLength('x', this.getVWidth(), 0),\n y = this.getLength('y', this.getVHeight(), 0),\n child = this.getUrl('href') || this.getUrl('xlink:href');\n if (child) {child = createSVGElement(child, this);}\n this.getChildren = function() {\n return child ? [child] : [];\n };\n this.drawInDocument = function(isClip, isMask) {\n doc.save();\n this.drawContent(isClip, isMask);\n doc.restore();\n };\n this.getTransformation = function() {\n return multiplyMatrix(this.get('transform'), [1, 0, 0, 1, x, y]);\n };\n };\n\n var SvgElemSymbol = function(obj, inherits) {\n SvgElemContainer.call(this, obj, inherits);\n let width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\n height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight());\n if (inherits instanceof SvgElemUse) {\n width = inherits.getLength('width', inherits.getParentVWidth(), width);\n height = inherits.getLength('height', inherits.getParentVHeight(), height);\n }\n let aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\n viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\n this.getVWidth = function() {\n return viewBox[2];\n };\n this.getVHeight = function() {\n return viewBox[3];\n };\n this.drawInDocument = function(isClip, isMask) {\n doc.save();\n this.drawContent(isClip, isMask);\n doc.restore();\n };\n this.getTransformation = function() {\n return multiplyMatrix(parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]), [1, 0, 0, 1, -viewBox[0], -viewBox[1]]);\n };\n };\n\n var SvgElemGroup = function(obj, inherits) {\n SvgElemContainer.call(this, obj, inherits);\n this.drawInDocument = function(isClip, isMask) {\n doc.save();\n if (this.link && !isClip && !isMask) {this.addLink();}\n this.drawContent(isClip, isMask);\n doc.restore();\n };\n this.getTransformation = function() {\n return this.get('transform');\n };\n };\n\n var SvgElemLink = function(obj, inherits) {\n if (inherits && inherits.isText) {\n SvgElemTspan.call(this, obj, inherits);\n this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\n } else {\n SvgElemGroup.call(this, obj, inherits);\n }\n this.link = this.attr('href') || this.attr('xlink:href');\n this.addLink = function() {\n if (this.link.match(/^(?:[a-z][a-z0-9+.-]*:|\\/\\/)?/i) && this.getChildren().length) {\n let bbox = this.getBoundingShape().transform(getGlobalMatrix()).getBoundingBox();\n docInsertLink(bbox[0], bbox[1], bbox[2], bbox[3], this.link);\n }\n }\n };\n\n var SvgElemSvg = function(obj, inherits) {\n SvgElemContainer.call(this, obj, inherits);\n let width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\n height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight()),\n x = this.getLength('x', this.getParentVWidth(), 0),\n y = this.getLength('y', this.getParentVHeight(), 0);\n if (inherits instanceof SvgElemUse) {\n width = inherits.getLength('width', inherits.getParentVWidth(), width);\n height = inherits.getLength('height', inherits.getParentVHeight(), height);\n }\n let aspectRatio = this.attr('preserveAspectRatio'),\n viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\n if (this.isOuterElement && preserveAspectRatio) {\n x = y = 0;\n width = viewportWidth;\n height = viewportHeight;\n aspectRatio = preserveAspectRatio;\n }\n this.getVWidth = function() {\n return viewBox[2];\n };\n this.getVHeight = function() {\n return viewBox[3];\n };\n this.drawInDocument = function(isClip, isMask) {\n doc.save();\n if (this.get('overflow') === 'hidden') {\n new SvgShape().M(x, y).L(x + width, y).L(x + width, y + height).L(x, y + height).Z()\n .transform(this.get('transform'))\n .insertInDocument();\n doc.clip();\n }\n this.drawContent(isClip, isMask);\n doc.restore();\n };\n this.getTransformation = function() {\n return multiplyMatrix(\n this.get('transform'),\n [1, 0, 0, 1, x, y],\n parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]),\n [1, 0, 0, 1, -viewBox[0], -viewBox[1]]\n );\n };\n };\n\n var SVGElemImage = function(obj, inherits) {\n SvgElemStylable.call(this, obj, inherits);\n let link = imageCallback(this.attr('href') || this.attr('xlink:href') || ''),\n x = this.getLength('x', this.getVWidth(), 0),\n y = this.getLength('y', this.getVHeight(), 0),\n width = this.getLength('width', this.getVWidth(), 'auto'),\n height = this.getLength('height', this.getVHeight(), 'auto'),\n image;\n try {\n image = doc.openImage(link);\n } catch(e) {\n warningCallback('SVGElemImage: failed to open image \"' + link + '\" in PDFKit');\n }\n if (image) {\n if (width === 'auto' && height !== 'auto') {\n width = height * image.width / image.height;\n } else if (height === 'auto' && width !== 'auto') {\n height = width * image.height / image.width;\n } else if (width === 'auto' && height === 'auto') {\n width = image.width;\n height = image.height;\n }\n }\n if (width === 'auto' || width < 0) {width = 0;}\n if (height === 'auto' || height < 0) {height = 0;}\n this.getTransformation = function() {\n return this.get('transform');\n };\n this.getBoundingShape = function() {\n return new SvgShape().M(x, y).L(x + width, y).M(x + width, y + height).L(x, y + height);\n };\n this.drawInDocument = function(isClip, isMask) {\n if (this.get('visibility') === 'hidden' || !image) {return;}\n doc.save();\n this.transform();\n if (this.get('overflow') === 'hidden') {\n doc.rect(x, y, width, height).clip();\n }\n this.clip();\n this.mask();\n doc.translate(x, y);\n doc.transform.apply(doc, parseAspectRatio(this.attr('preserveAspectRatio'), width, height, image ? image.width : width, image ? image.height : height));\n if (!isClip) {\n doc.fillOpacity(this.get('opacity'));\n doc.image(image, 0, 0);\n } else {\n doc.rect(0, 0, image.width, image.height);\n docFillColor(DefaultColors.white).fill();\n }\n doc.restore();\n };\n };\n\n var SvgElemPattern = function(obj, inherits, fallback) {\n SvgElemHasChildren.call(this, obj, inherits);\n this.ref = (function() {\n let ref = this.getUrl('href') || this.getUrl('xlink:href');\n if (ref && ref.nodeName === obj.nodeName) {\n return new SvgElemPattern(ref, inherits, fallback);\n }\n }).call(this);\n let _attr = this.attr;\n this.attr = function(key) {\n let attr = _attr.call(this, key);\n if (attr != null || key === 'href' || key === 'xlink:href') {return attr;}\n return this.ref ? this.ref.attr(key) : null;\n };\n let _getChildren = this.getChildren;\n this.getChildren = function() {\n let children = _getChildren.call(this);\n if (children.length > 0) {return children;}\n return this.ref ? this.ref.getChildren() : [];\n };\n this.getPaint = function(bBox, gOpacity, isClip, isMask) {\n let bBoxUnitsPattern = (this.attr('patternUnits') !== 'userSpaceOnUse'),\n bBoxUnitsContent = (this.attr('patternContentUnits') === 'objectBoundingBox'),\n x = this.getLength('x', (bBoxUnitsPattern ? 1 : this.getParentVWidth()), 0),\n y = this.getLength('y', (bBoxUnitsPattern ? 1 : this.getParentVHeight()), 0),\n width = this.getLength('width', (bBoxUnitsPattern ? 1 : this.getParentVWidth()), 0),\n height = this.getLength('height', (bBoxUnitsPattern ? 1 : this.getParentVHeight()), 0);\n if (bBoxUnitsContent && !bBoxUnitsPattern) { // Use the same units for pattern & pattern content\n x = (x - bBox[0]) / (bBox[2] - bBox[0]) || 0;\n y = (y - bBox[1]) / (bBox[3] - bBox[1]) || 0;\n width = width / (bBox[2] - bBox[0]) || 0;\n height = height / (bBox[3] - bBox[1]) || 0;\n } else if (!bBoxUnitsContent && bBoxUnitsPattern) {\n x = bBox[0] + x * (bBox[2] - bBox[0]);\n y = bBox[1] + y * (bBox[3] - bBox[1]);\n width = width * (bBox[2] - bBox[0]);\n height = height * (bBox[3] - bBox[1]);\n }\n let viewBox = this.getViewbox('viewBox', [0, 0, width, height]),\n aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\n aspectRatioMatrix = multiplyMatrix(\n parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3], 0),\n [1, 0, 0, 1, -viewBox[0], -viewBox[1]]\n ),\n matrix = parseTranform(this.attr('patternTransform'));\n if (bBoxUnitsContent) {\n matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\n }\n matrix = multiplyMatrix(matrix, [1, 0, 0, 1, x, y]);\n if ((matrix = validateMatrix(matrix)) && (aspectRatioMatrix = validateMatrix(aspectRatioMatrix)) && (width = validateNumber(width)) && (height = validateNumber(height))) {\n let group = docBeginGroup([0, 0, width, height]);\n doc.transform.apply(doc, aspectRatioMatrix);\n this.drawChildren(isClip, isMask);\n docEndGroup(group);\n return [docCreatePattern(group, width, height, matrix), gOpacity];\n } else {\n return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\n }\n };\n this.getVWidth = function() {\n let bBoxUnitsPattern = (this.attr('patternUnits') !== 'userSpaceOnUse'),\n width = this.getLength('width', (bBoxUnitsPattern ? 1 : this.getParentVWidth()), 0);\n return this.getViewbox('viewBox', [0, 0, width, 0])[2];\n };\n this.getVHeight = function() {\n let bBoxUnitsPattern = (this.attr('patternUnits') !== 'userSpaceOnUse'),\n height = this.getLength('height', (bBoxUnitsPattern ? 1 : this.getParentVHeight()), 0);\n return this.getViewbox('viewBox', [0, 0, 0, height])[3];\n };\n };\n\n var SvgElemGradient = function(obj, inherits, fallback) {\n SvgElem.call(this, obj, inherits);\n this.allowedChildren = ['stop'];\n this.ref = (function() {\n let ref = this.getUrl('href') || this.getUrl('xlink:href');\n if (ref && ref.nodeName === obj.nodeName) {\n return new SvgElemGradient(ref, inherits, fallback);\n }\n }).call(this);\n let _attr = this.attr;\n this.attr = function(key) {\n let attr = _attr.call(this, key);\n if (attr != null || key === 'href' || key === 'xlink:href') {return attr;}\n return this.ref ? this.ref.attr(key) : null;\n };\n let _getChildren = this.getChildren;\n this.getChildren = function() {\n let children = _getChildren.call(this);\n if (children.length > 0) {return children;}\n return this.ref ? this.ref.getChildren() : [];\n };\n this.getPaint = function(bBox, gOpacity, isClip, isMask) {\n let children = this.getChildren();\n if (children.length === 0) {return;}\n if (children.length === 1) {\n let child = children[0],\n stopColor = child.get('stop-color');\n if (stopColor === 'none') {return;}\n return opacityToColor(stopColor, child.get('stop-opacity') * gOpacity, isMask);\n }\n let bBoxUnits = (this.attr('gradientUnits') !== 'userSpaceOnUse'),\n matrix = parseTranform(this.attr('gradientTransform')),\n spread = this.attr('spreadMethod'),\n grad,\n x1, x2, y1, y2, r2,\n nAfter = 0,\n nBefore = 0,\n nTotal = 1;\n if (bBoxUnits) {\n matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\n }\n if (matrix = validateMatrix(matrix)) {\n if (this.name === 'linearGradient') {\n x1 = this.getLength('x1', (bBoxUnits ? 1 : this.getVWidth()), 0);\n x2 = this.getLength('x2', (bBoxUnits ? 1 : this.getVWidth()), (bBoxUnits ? 1 : this.getVWidth()));\n y1 = this.getLength('y1', (bBoxUnits ? 1 : this.getVHeight()), 0);\n y2 = this.getLength('y2', (bBoxUnits ? 1 : this.getVHeight()), 0);\n } else {\n x2 = this.getLength('cx', (bBoxUnits ? 1 : this.getVWidth()), (bBoxUnits ? 0.5 : 0.5 * this.getVWidth()));\n y2 = this.getLength('cy', (bBoxUnits ? 1 : this.getVHeight()), (bBoxUnits ? 0.5 : 0.5 * this.getVHeight()));\n r2 = this.getLength('r', (bBoxUnits ? 1 : this.getViewport()), (bBoxUnits ? 0.5 : 0.5 * this.getViewport()));\n x1 = this.getLength('fx', (bBoxUnits ? 1 : this.getVWidth()), x2);\n y1 = this.getLength('fy', (bBoxUnits ? 1 : this.getVHeight()), y2);\n if (r2 < 0) {\n warningCallback('SvgElemGradient: negative r value');\n }\n let d = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)),\n multiplier = 1;\n if (d > r2) { // according to specification\n multiplier = r2 / d;\n x1 = x2 + (x1 - x2) * multiplier;\n y1 = y2 + (y1 - y2) * multiplier;\n }\n r2 = Math.max(r2, d * multiplier * (1 + 1e-6)); // fix for edge-case gradients see issue #84\n }\n if (spread === 'reflect' || spread === 'repeat') {\n let inv = inverseMatrix(matrix),\n corner1 = transformPoint([bBox[0], bBox[1]], inv),\n corner2 = transformPoint([bBox[2], bBox[1]], inv),\n corner3 = transformPoint([bBox[2], bBox[3]], inv),\n corner4 = transformPoint([bBox[0], bBox[3]], inv);\n if (this.name === 'linearGradient') { // See file 'gradient-repeat-maths.png'\n nAfter = Math.max((corner1[0] - x2) * (x2 - x1) + (corner1[1] - y2) * (y2 - y1),\n (corner2[0] - x2) * (x2 - x1) + (corner2[1] - y2) * (y2 - y1),\n (corner3[0] - x2) * (x2 - x1) + (corner3[1] - y2) * (y2 - y1),\n (corner4[0] - x2) * (x2 - x1) + (corner4[1] - y2) * (y2 - y1))\n / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n nBefore = Math.max((corner1[0] - x1) * (x1 - x2) + (corner1[1] - y1) * (y1 - y2),\n (corner2[0] - x1) * (x1 - x2) + (corner2[1] - y1) * (y1 - y2),\n (corner3[0] - x1) * (x1 - x2) + (corner3[1] - y1) * (y1 - y2),\n (corner4[0] - x1) * (x1 - x2) + (corner4[1] - y1) * (y1 - y2))\n / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n } else {\n nAfter = Math.sqrt(Math.max(Math.pow(corner1[0] - x2, 2) + Math.pow(corner1[1] - y2, 2),\n Math.pow(corner2[0] - x2, 2) + Math.pow(corner2[1] - y2, 2),\n Math.pow(corner3[0] - x2, 2) + Math.pow(corner3[1] - y2, 2),\n Math.pow(corner4[0] - x2, 2) + Math.pow(corner4[1] - y2, 2))) / r2 - 1;\n }\n nAfter = Math.ceil(nAfter + 0.5); // Add a little more because the stroke can extend outside of the bounding box\n nBefore = Math.ceil(nBefore + 0.5);\n nTotal = nBefore + 1 + nAfter; // How many times the gradient needs to be repeated to fill the object bounding box\n }\n if (this.name === 'linearGradient') {\n grad = doc.linearGradient(x1 - nBefore * (x2 - x1), y1 - nBefore * (y2 - y1), x2 + nAfter * (x2 - x1), y2 + nAfter * (y2 - y1));\n } else {\n grad = doc.radialGradient(x1, y1, 0, x2, y2, r2 + nAfter * r2);\n }\n for (let n = 0; n < nTotal; n++) {\n let offset = 0,\n inOrder = (spread !== 'reflect' || (n - nBefore) % 2 === 0);\n for (let i = 0; i < children.length; i++) {\n let child = children[inOrder ? i : children.length - 1 - i],\n stopColor = child.get('stop-color');\n if (stopColor === 'none') {stopColor = DefaultColors.transparent;}\n stopColor = opacityToColor(stopColor, child.get('stop-opacity') * gOpacity, isMask);\n offset = Math.max(offset, inOrder ? child.getPercent('offset', 0) : 1 - child.getPercent('offset', 0));\n if (i === 0 && stopColor[0].length === 4) {grad._colorSpace = 'DeviceCMYK';} // Fix until PR #763 is merged into PDFKit\n if (i === 0 && offset > 0) {\n grad.stop((n + 0) / nTotal, stopColor[0], stopColor[1]);\n }\n grad.stop((n + offset) / (nAfter + nBefore + 1), stopColor[0], stopColor[1]);\n if (i === children.length - 1 && offset < 1) {\n grad.stop((n + 1) / nTotal, stopColor[0], stopColor[1]);\n }\n }\n }\n grad.setTransform.apply(grad, matrix);\n return [grad, 1];\n } else {\n return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\n }\n }\n };\n\n var SvgElemBasicShape = function(obj, inherits) {\n SvgElemStylable.call(this, obj, inherits);\n this.dashScale = 1;\n this.getBoundingShape = function() {\n return this.shape;\n };\n this.getTransformation = function() {\n return this.get('transform');\n };\n this.drawInDocument = function(isClip, isMask) {\n if (this.get('visibility') === 'hidden' || !this.shape) {return;}\n doc.save();\n this.transform();\n this.clip();\n if (!isClip) {\n let masked = this.mask(),\n group;\n if (masked) {\n group = docBeginGroup(getPageBBox());\n }\n let subPaths = this.shape.getSubPaths(),\n fill = this.getFill(isClip, isMask),\n stroke = this.getStroke(isClip, isMask),\n lineWidth = this.get('stroke-width'),\n lineCap = this.get('stroke-linecap');\n if (fill || stroke) {\n if (fill) {\n docFillColor(fill);\n }\n if (stroke) {\n for (let j = 0; j < subPaths.length; j++) {\n if (isEqual(subPaths[j].totalLength, 0)) {\n if ((lineCap === 'square' || lineCap === 'round') && lineWidth > 0) {\n if (subPaths[j].startPoint && subPaths[j].startPoint.length > 1) {\n let x = subPaths[j].startPoint[0],\n y = subPaths[j].startPoint[1];\n docFillColor(stroke);\n if (lineCap === 'square') {\n doc.rect(x - 0.5 * lineWidth, y - 0.5 * lineWidth, lineWidth, lineWidth);\n } else if (lineCap === 'round') {\n doc.circle(x, y, 0.5 * lineWidth);\n }\n doc.fill();\n }\n }\n }\n }\n let dashArray = this.get('stroke-dasharray'),\n dashOffset = this.get('stroke-dashoffset');\n if (isNotEqual(this.dashScale, 1)) {\n for (let j = 0; j < dashArray.length; j++) {\n dashArray[j] *= this.dashScale;\n }\n dashOffset *= this.dashScale;\n }\n docStrokeColor(stroke);\n doc.lineWidth(lineWidth)\n .miterLimit(this.get('stroke-miterlimit'))\n .lineJoin(this.get('stroke-linejoin'))\n .lineCap(lineCap)\n .dash(dashArray, {phase: dashOffset});\n }\n for (let j = 0; j < subPaths.length; j++) {\n if (subPaths[j].totalLength > 0) {\n subPaths[j].insertInDocument();\n }\n }\n if (fill && stroke) {\n doc.fillAndStroke(this.get('fill-rule'));\n } else if (fill) {\n doc.fill(this.get('fill-rule'));\n } else if (stroke) {\n doc.stroke();\n }\n }\n let markerStart = this.get('marker-start'),\n markerMid = this.get('marker-mid'),\n markerEnd = this.get('marker-end');\n if (markerStart !== 'none' || markerMid !== 'none' || markerEnd !== 'none') {\n let markersPos = this.shape.getMarkers();\n if (markerStart !== 'none') {\n let marker = new SvgElemMarker(markerStart, null);\n marker.drawMarker(false, isMask, markersPos[0], lineWidth);\n }\n if (markerMid !== 'none') {\n for (let i = 1; i < markersPos.length - 1; i++) {\n let marker = new SvgElemMarker(markerMid, null);\n marker.drawMarker(false, isMask, markersPos[i], lineWidth);\n }\n }\n if (markerEnd !== 'none') {\n let marker = new SvgElemMarker(markerEnd, null);\n marker.drawMarker(false, isMask, markersPos[markersPos.length - 1], lineWidth);\n }\n }\n if (group) {\n docEndGroup(group);\n docInsertGroup(group);\n }\n } else {\n this.shape.insertInDocument();\n docFillColor(DefaultColors.white);\n doc.fill(this.get('clip-rule'));\n }\n doc.restore();\n };\n };\n\n var SvgElemRect = function(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n let x = this.getLength('x', this.getVWidth(), 0),\n y = this.getLength('y', this.getVHeight(), 0),\n w = this.getLength('width', this.getVWidth(), 0),\n h = this.getLength('height', this.getVHeight(), 0),\n rx = this.getLength('rx', this.getVWidth()),\n ry = this.getLength('ry', this.getVHeight());\n if (rx === undefined && ry === undefined) {rx = ry = 0;}\n else if (rx === undefined && ry !== undefined) {rx = ry;}\n else if (rx !== undefined && ry === undefined) {ry = rx;}\n if (w > 0 && h > 0) {\n if (rx && ry) {\n rx = Math.min(rx, 0.5 * w);\n ry = Math.min(ry, 0.5 * h);\n this.shape = new SvgShape().M(x + rx, y).L(x + w - rx, y).A(rx, ry, 0, 0, 1, x + w, y + ry)\n .L(x + w, y + h - ry).A(rx, ry, 0, 0, 1, x + w - rx, y + h).L(x + rx, y + h)\n .A(rx, ry, 0, 0, 1, x, y + h - ry).L(x, y + ry).A(rx, ry, 0, 0, 1, x + rx, y).Z();\n } else {\n this.shape = new SvgShape().M(x, y).L(x + w, y).L(x + w, y + h).L(x, y + h).Z();\n }\n } else {\n this.shape = new SvgShape();\n }\n };\n\n var SvgElemCircle = function(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n let cx = this.getLength('cx', this.getVWidth(), 0),\n cy = this.getLength('cy', this.getVHeight(), 0),\n r = this.getLength('r', this.getViewport(), 0);\n if (r > 0) {\n this.shape = new SvgShape().M(cx + r, cy).A(r, r, 0, 0, 1, cx - r, cy).A(r, r, 0, 0, 1, cx + r, cy).Z();\n } else {\n this.shape = new SvgShape();\n }\n };\n\n var SvgElemEllipse = function(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n let cx = this.getLength('cx', this.getVWidth(), 0),\n cy = this.getLength('cy', this.getVHeight(), 0),\n rx = this.getLength('rx', this.getVWidth(), 0),\n ry = this.getLength('ry', this.getVHeight(), 0);\n if (rx > 0 && ry > 0) {\n this.shape = new SvgShape().M(cx + rx, cy).A(rx, ry, 0, 0, 1, cx - rx, cy).A(rx, ry, 0, 0, 1, cx + rx, cy).Z();\n } else {\n this.shape = new SvgShape();\n }\n };\n\n var SvgElemLine = function(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n let x1 = this.getLength('x1', this.getVWidth(), 0),\n y1 = this.getLength('y1', this.getVHeight(), 0),\n x2 = this.getLength('x2', this.getVWidth(), 0),\n y2 = this.getLength('y2', this.getVHeight(), 0);\n this.shape = new SvgShape().M(x1, y1).L(x2, y2);\n };\n\n var SvgElemPolyline = function(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n let points = this.getNumberList('points');\n this.shape = new SvgShape();\n for (let i = 0; i < points.length - 1; i += 2) {\n if (i === 0) {\n this.shape.M(points[i], points[i+1]);\n } else {\n this.shape.L(points[i], points[i+1]);\n }\n }\n if (points.error) {warningCallback('SvgElemPolygon: unexpected string ' + points.error);}\n if (points.length % 2 === 1) {warningCallback('SvgElemPolyline: uneven number of coordinates');}\n };\n\n var SvgElemPolygon = function(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n let points = this.getNumberList('points');\n this.shape = new SvgShape();\n for (let i = 0; i < points.length - 1; i += 2) {\n if (i === 0) {\n this.shape.M(points[i], points[i+1]);\n } else {\n this.shape.L(points[i], points[i+1]);\n }\n }\n this.shape.Z();\n if (points.error) {warningCallback('SvgElemPolygon: unexpected string ' + points.error);}\n if (points.length % 2 === 1) {warningCallback('SvgElemPolygon: uneven number of coordinates');}\n };\n\n var SvgElemPath = function(obj, inherits) {\n SvgElemBasicShape.call(this, obj, inherits);\n this.shape = new SvgShape().path(this.attr('d'));\n let pathLength = this.getLength('pathLength', this.getViewport());\n this.pathLength = pathLength > 0 ? pathLength : undefined;\n this.dashScale = (this.pathLength !== undefined ? this.shape.totalLength / this.pathLength : 1);\n };\n\n var SvgElemMarker = function(obj, inherits) {\n SvgElemHasChildren.call(this, obj, inherits);\n let width = this.getLength('markerWidth', this.getParentVWidth(), 3),\n height = this.getLength('markerHeight', this.getParentVHeight(), 3),\n viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\n this.getVWidth = function() {\n return viewBox[2];\n };\n this.getVHeight = function() {\n return viewBox[3];\n };\n this.drawMarker = function(isClip, isMask, posArray, strokeWidth) {\n doc.save();\n let orient = this.attr('orient'),\n units = this.attr('markerUnits'),\n rotate = (orient === 'auto' ? posArray[2] : (parseFloat(orient) || 0) * Math.PI / 180),\n scale = (units === 'userSpaceOnUse' ? 1 : strokeWidth);\n doc.transform(Math.cos(rotate) * scale, Math.sin(rotate) * scale, -Math.sin(rotate) * scale, Math.cos(rotate) * scale, posArray[0], posArray[1]);\n let refX = this.getLength('refX', this.getVWidth(), 0),\n refY = this.getLength('refY', this.getVHeight(), 0),\n aspectRatioMatrix = parseAspectRatio(this.attr('preserveAspectRatio'), width, height, viewBox[2], viewBox[3], 0.5);\n if (this.get('overflow') === 'hidden') {\n doc.rect(aspectRatioMatrix[0] * (viewBox[0] + viewBox[2] / 2 - refX) - width / 2, aspectRatioMatrix[3] * (viewBox[1] + viewBox[3] / 2 - refY) - height / 2, width, height).clip();\n }\n doc.transform.apply(doc, aspectRatioMatrix);\n doc.translate(-refX, -refY);\n let group;\n if (this.get('opacity') < 1 && !isClip) {\n group = docBeginGroup(getPageBBox());\n }\n this.drawChildren(isClip, isMask);\n if (group) {\n docEndGroup(group);\n doc.fillOpacity(this.get('opacity'));\n docInsertGroup(group);\n }\n doc.restore();\n };\n };\n\n var SvgElemClipPath = function(obj, inherits) {\n SvgElemHasChildren.call(this, obj, inherits);\n this.useMask = function(bBox) {\n let group = docBeginGroup(getPageBBox());\n doc.save();\n if (this.attr('clipPathUnits') === 'objectBoundingBox') {\n doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\n }\n this.clip();\n this.drawChildren(true, false);\n doc.restore();\n docEndGroup(group);\n docApplyMask(group, true);\n };\n };\n\n var SvgElemMask = function(obj, inherits) {\n SvgElemHasChildren.call(this, obj, inherits);\n this.useMask = function(bBox) {\n let group = docBeginGroup(getPageBBox());\n doc.save();\n let x, y, w, h;\n if (this.attr('maskUnits') === 'userSpaceOnUse') {\n x = this.getLength('x', this.getVWidth(), -0.1 * (bBox[2] - bBox[0]) + bBox[0]);\n y = this.getLength('y', this.getVHeight(), -0.1 * (bBox[3] - bBox[1]) + bBox[1]);\n w = this.getLength('width', this.getVWidth(), 1.2 * (bBox[2] - bBox[0]));\n h = this.getLength('height', this.getVHeight(), 1.2 * (bBox[3] - bBox[1]));\n } else {\n x = this.getLength('x', this.getVWidth(), -0.1) * (bBox[2] - bBox[0]) + bBox[0];\n y = this.getLength('y', this.getVHeight(), -0.1) * (bBox[3] - bBox[1]) + bBox[1];\n w = this.getLength('width', this.getVWidth(), 1.2) * (bBox[2] - bBox[0]);\n h = this.getLength('height', this.getVHeight(), 1.2) * (bBox[3] - bBox[1]);\n }\n doc.rect(x, y, w, h).clip();\n if (this.attr('maskContentUnits') === 'objectBoundingBox') {\n doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\n }\n this.clip();\n this.drawChildren(false, true);\n doc.restore();\n docEndGroup(group);\n docApplyMask(group, true);\n };\n };\n\n var SvgElemTextContainer = function(obj, inherits) {\n SvgElemStylable.call(this, obj, inherits);\n this.allowedChildren = ['tspan', '#text', '#cdata-section', 'a'];\n this.isText = true;\n this.getBoundingShape = function() {\n let shape = new SvgShape();\n for (let i = 0; i < this._pos.length; i++) {\n let pos = this._pos[i];\n if (!pos.hidden) {\n let dx0 = pos.ascent * Math.sin(pos.rotate), dy0 = -pos.ascent * Math.cos(pos.rotate),\n dx1 = pos.descent * Math.sin(pos.rotate), dy1 = -pos.descent * Math.cos(pos.rotate),\n dx2 = pos.width * Math.cos(pos.rotate), dy2 = pos.width * Math.sin(pos.rotate);\n shape.M(pos.x + dx0, pos.y + dy0).L(pos.x + dx0 + dx2, pos.y + dy0 + dy2)\n .M(pos.x + dx1 + dx2, pos.y + dy1 + dy2).L(pos.x + dx1, pos.y + dy1);\n }\n }\n return shape;\n };\n this.drawTextInDocument = function(isClip, isMask) {\n if (this.link && !isClip && !isMask) {this.addLink();}\n if (this.get('text-decoration') === 'underline') {\n this.decorate(0.05 * this._font.size, -0.075 * this._font.size, isClip, isMask);\n }\n if (this.get('text-decoration') === 'overline') {\n this.decorate(0.05 * this._font.size, getAscent(this._font.font, this._font.size) + 0.075 * this._font.size, isClip, isMask);\n }\n let fill = this.getFill(isClip, isMask),\n stroke = this.getStroke(isClip, isMask),\n strokeWidth = this.get('stroke-width');\n if (this._font.fauxBold) {\n if (!stroke) {\n stroke = fill;\n strokeWidth = this._font.size * 0.03;\n } else {\n strokeWidth += this._font.size * 0.03;\n }\n }\n let children = this.getChildren();\n for (let i = 0; i < children.length; i++) {\n let childElem = children[i];\n switch(childElem.name) {\n case 'tspan': case 'textPath': case 'a':\n if (childElem.get('display') !== 'none') {\n childElem.drawTextInDocument(isClip, isMask);\n }\n break;\n case '#text': case '#cdata-section':\n if (this.get('visibility') === 'hidden') {continue;}\n if (fill || stroke || isClip) {\n if (fill) {\n docFillColor(fill);\n }\n if (stroke && strokeWidth) {\n docStrokeColor(stroke);\n doc.lineWidth(strokeWidth)\n .miterLimit(this.get('stroke-miterlimit'))\n .lineJoin(this.get('stroke-linejoin'))\n .lineCap(this.get('stroke-linecap'))\n .dash(this.get('stroke-dasharray'), {phase:this.get('stroke-dashoffset')});\n }\n docBeginText(this._font.font, this._font.size);\n docSetTextMode(!!fill, !!stroke);\n for (let j = 0, pos = childElem._pos; j < pos.length; j++) {\n if (!pos[j].hidden && isNotEqual(pos[j].width, 0)) {\n let cos = Math.cos(pos[j].rotate), sin = Math.sin(pos[j].rotate), skew = (this._font.fauxItalic ? -0.25 : 0);\n docSetTextMatrix(cos * pos[j].scale, sin * pos[j].scale, cos * skew - sin, sin * skew + cos, pos[j].x, pos[j].y);\n docWriteGlyph(pos[j].glyph);\n }\n }\n docEndText();\n }\n break;\n }\n }\n if (this.get('text-decoration') === 'line-through') {\n this.decorate(0.05 * this._font.size, 0.5 * (getAscent(this._font.font, this._font.size) + getDescent(this._font.font, this._font.size)), isClip, isMask);\n }\n };\n this.decorate = function(lineWidth, linePosition, isClip, isMask) {\n let fill = this.getFill(isClip, isMask),\n stroke = this.getStroke(isClip, isMask);\n if (fill) {\n docFillColor(fill);\n }\n if (stroke) {\n docStrokeColor(stroke);\n doc.lineWidth(this.get('stroke-width'))\n .miterLimit(this.get('stroke-miterlimit'))\n .lineJoin(this.get('stroke-linejoin'))\n .lineCap(this.get('stroke-linecap'))\n .dash(this.get('stroke-dasharray'), {phase:this.get('stroke-dashoffset')});\n }\n for (let j = 0, pos = this._pos; j < pos.length; j++) {\n if (!pos[j].hidden && isNotEqual(pos[j].width, 0)) {\n let dx0 = (linePosition + lineWidth / 2) * Math.sin(pos[j].rotate),\n dy0 = -(linePosition + lineWidth / 2) * Math.cos(pos[j].rotate),\n dx1 = (linePosition - lineWidth / 2) * Math.sin(pos[j].rotate),\n dy1 = -(linePosition - lineWidth / 2) * Math.cos(pos[j].rotate),\n dx2 = pos[j].width * Math.cos(pos[j].rotate),\n dy2 = pos[j].width * Math.sin(pos[j].rotate);\n new SvgShape().M(pos[j].x + dx0, pos[j].y + dy0)\n .L(pos[j].x + dx0 + dx2, pos[j].y + dy0 + dy2)\n .L(pos[j].x + dx1 + dx2, pos[j].y + dy1 + dy2)\n .L(pos[j].x + dx1, pos[j].y + dy1).Z()\n .insertInDocument();\n if (fill && stroke) {\n doc.fillAndStroke();\n } else if (fill) {\n doc.fill();\n } else if (stroke) {\n doc.stroke();\n }\n }\n }\n };\n };\n\n var SvgElemTextNode = function(obj, inherits) {\n this.name = obj.nodeName;\n this.textContent = obj.nodeValue;\n };\n\n var SvgElemTspan = function(obj, inherits) {\n SvgElemTextContainer.call(this, obj, inherits);\n };\n\n var SvgElemTextPath = function(obj, inherits) {\n SvgElemTextContainer.call(this, obj, inherits);\n let pathObject, pathLength, temp;\n if ((temp = this.attr('path')) && temp.trim() !== '') {\n let pathLength = this.getLength('pathLength', this.getViewport());\n this.pathObject = new SvgShape().path(temp);\n this.pathLength = pathLength > 0 ? pathLength : this.pathObject.totalLength;\n this.pathScale = this.pathObject.totalLength / this.pathLength;\n } else if ((temp = this.getUrl('href') || this.getUrl('xlink:href')) && temp.nodeName === 'path') {\n let pathElem = new SvgElemPath(temp, this);\n this.pathObject = pathElem.shape.clone().transform(pathElem.get('transform'));\n this.pathLength = this.chooseValue(pathElem.pathLength, this.pathObject.totalLength);\n this.pathScale = this.pathObject.totalLength / this.pathLength;\n }\n };\n\n var SvgElemText = function(obj, inherits) {\n SvgElemTextContainer.call(this, obj, inherits);\n this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\n (function (textParentElem) {\n let processedText = '', remainingText = obj.textContent, textPaths = [], currentChunk = [], currentAnchor, currentDirection, currentX = 0, currentY = 0;\n function doAnchoring() {\n if (currentChunk.length) {\n let last = currentChunk[currentChunk.length - 1];\n let first = currentChunk[0]\n let width = last.x + last.width - first.x;\n let anchordx = {'startltr': 0, 'middleltr': 0.5, 'endltr': 1, 'startrtl': 1, 'middlertl': 0.5, 'endrtl': 0}[currentAnchor + currentDirection] * width || 0;\n for (let i = 0; i < currentChunk.length; i++) {\n currentChunk[i].x -= anchordx;\n }\n }\n currentChunk = [];\n }\n function adjustLength(pos, length, spacingAndGlyphs) {\n let firstChar = pos[0], lastChar = pos[pos.length - 1],\n startX = firstChar.x, endX = lastChar.x + lastChar.width;\n if (spacingAndGlyphs) {\n let textScale = length / (endX - startX);\n if (textScale > 0 && textScale < Infinity) {\n for (let j = 0; j < pos.length; j++) {\n pos[j].x = startX + textScale * (pos[j].x - startX);\n pos[j].scale *= textScale;\n pos[j].width *= textScale;\n }\n }\n } else {\n if (pos.length >= 2) {\n let spaceDiff = (length - (endX - startX)) / (pos.length - 1);\n for (let j = 0; j < pos.length; j++) {\n pos[j].x += j * spaceDiff;\n }\n }\n }\n currentX += length - (endX - startX);\n }\n function recursive(currentElem, parentElem) {\n currentElem._x = combineArrays(currentElem.getLengthList('x', currentElem.getVWidth()), (parentElem ? parentElem._x.slice(parentElem._pos.length) : []));\n currentElem._y = combineArrays(currentElem.getLengthList('y', currentElem.getVHeight()), (parentElem ? parentElem._y.slice(parentElem._pos.length) : []));\n currentElem._dx = combineArrays(currentElem.getLengthList('dx', currentElem.getVWidth()), (parentElem ? parentElem._dx.slice(parentElem._pos.length) : []));\n currentElem._dy = combineArrays(currentElem.getLengthList('dy', currentElem.getVHeight()), (parentElem ? parentElem._dy.slice(parentElem._pos.length) : []));\n currentElem._rot = combineArrays(currentElem.getNumberList('rotate'), (parentElem ? parentElem._rot.slice(parentElem._pos.length) : []));\n currentElem._defRot = currentElem.chooseValue(currentElem._rot[currentElem._rot.length - 1], parentElem && parentElem._defRot, 0);\n if (currentElem.name === 'textPath') {currentElem._y = [];}\n let fontOptions = {fauxItalic: false, fauxBold: false},\n fontNameorLink = fontCallback(currentElem.get('font-family'), currentElem.get('font-weight') === 'bold', currentElem.get('font-style') === 'italic', fontOptions);\n try {\n doc.font(fontNameorLink);\n } catch(e) {\n warningCallback('SVGElemText: failed to open font \"' + fontNameorLink + '\" in PDFKit');\n }\n currentElem._pos = [];\n currentElem._index = 0;\n currentElem._font = {font: doc._font, size: currentElem.get('font-size'), fauxItalic: fontOptions.fauxItalic, fauxBold: fontOptions.fauxBold};\n let textLength = currentElem.getLength('textLength', currentElem.getVWidth(), undefined),\n spacingAndGlyphs = currentElem.attr('lengthAdjust') === 'spacingAndGlyphs',\n wordSpacing = currentElem.get('word-spacing'),\n letterSpacing = currentElem.get('letter-spacing'),\n textAnchor = currentElem.get('text-anchor'),\n textDirection = currentElem.get('direction'),\n baseline = getBaseline(currentElem._font.font, currentElem._font.size, currentElem.get('alignment-baseline') || currentElem.get('dominant-baseline'), currentElem.get('baseline-shift'));\n if (currentElem.name === 'textPath') {\n doAnchoring();\n currentX = currentY = 0;\n }\n let children = currentElem.getChildren();\n for (let i = 0; i < children.length; i++) {\n let childElem = children[i];\n switch(childElem.name) {\n case 'tspan': case 'textPath': case 'a':\n recursive(childElem, currentElem);\n break;\n case '#text': case '#cdata-section':\n let rawText = childElem.textContent, renderedText = rawText, words;\n childElem._font = currentElem._font;\n childElem._pos = [];\n remainingText = remainingText.substring(rawText.length);\n if (currentElem.get('xml:space') === 'preserve') {\n renderedText = renderedText.replace(/[\\s]/g, ' ');\n } else {\n renderedText = renderedText.replace(/[\\s]+/g, ' ');\n if (processedText.match(/[\\s]$|^$/)) {renderedText = renderedText.replace(/^[\\s]/, '');}\n if (remainingText.match(/^[\\s]*$/)) {renderedText = renderedText.replace(/[\\s]$/, '');}\n }\n processedText += rawText;\n if (wordSpacing === 0) {\n words = [renderedText];\n } else {\n words = renderedText.split(/(\\s)/);\n }\n for (let w = 0; w < words.length; w++) {\n let pos = getTextPos(currentElem._font.font, currentElem._font.size, words[w]);\n for (let j = 0; j < pos.length; j++) {\n let index = currentElem._index,\n xAttr = currentElem._x[index],\n yAttr = currentElem._y[index],\n dxAttr = currentElem._dx[index],\n dyAttr = currentElem._dy[index],\n rotAttr = currentElem._rot[index],\n continuous = !(w === 0 && j === 0);\n if (xAttr !== undefined) {continuous = false; doAnchoring(); currentX = xAttr;}\n if (yAttr !== undefined) {continuous = false; doAnchoring(); currentY = yAttr;}\n if (dxAttr !== undefined) {continuous = false; currentX += dxAttr;}\n if (dyAttr !== undefined) {continuous = false; currentY += dyAttr;}\n if (rotAttr !== undefined || currentElem._defRot !== 0) {continuous = false;}\n let position = {\n glyph: pos[j].glyph,\n rotate: (Math.PI / 180) * currentElem.chooseValue(rotAttr, currentElem._defRot),\n x: currentX + pos[j].xOffset,\n y: currentY + baseline + pos[j].yOffset,\n width: pos[j].width,\n ascent: getAscent(currentElem._font.font, currentElem._font.size),\n descent: getDescent(currentElem._font.font, currentElem._font.size),\n scale: 1,\n hidden: false,\n continuous: continuous\n };\n currentChunk.push(position);\n childElem._pos.push(position);\n currentElem._pos.push(position);\n currentElem._index += pos[j].unicode.length;\n if (currentChunk.length === 1) {\n currentAnchor = textAnchor;\n currentDirection = textDirection;\n }\n currentX += pos[j].xAdvance + letterSpacing;\n currentY += pos[j].yAdvance;\n }\n if (words[w] === ' ') {\n currentX += wordSpacing;\n }\n }\n break;\n default:\n remainingText = remainingText.substring(childElem.textContent.length);\n }\n }\n if (textLength && currentElem._pos.length) {\n adjustLength(currentElem._pos, textLength, spacingAndGlyphs);\n }\n if (currentElem.name === 'textPath' || currentElem.name === 'text') {\n doAnchoring();\n }\n if (currentElem.name === 'textPath') {\n textPaths.push(currentElem);\n let pathObject = currentElem.pathObject;\n if (pathObject) {\n currentX = pathObject.endPoint[0]; currentY = pathObject.endPoint[1];\n }\n }\n if (parentElem) {\n parentElem._pos = parentElem._pos.concat(currentElem._pos);\n parentElem._index += currentElem._index;\n }\n }\n function textOnPath(currentElem) {\n let pathObject = currentElem.pathObject,\n pathLength = currentElem.pathLength,\n pathScale = currentElem.pathScale;\n if (pathObject) {\n let textOffset = currentElem.getLength('startOffset', pathLength, 0);\n for (let j = 0; j < currentElem._pos.length; j++) {\n let charMidX = textOffset + currentElem._pos[j].x + 0.5 * currentElem._pos[j].width;\n if (charMidX > pathLength || charMidX < 0) {\n currentElem._pos[j].hidden = true;\n } else {\n let pointOnPath = pathObject.getPointAtLength(charMidX * pathScale);\n if (isNotEqual(pathScale, 1)) {\n currentElem._pos[j].scale *= pathScale;\n currentElem._pos[j].width *= pathScale;\n }\n currentElem._pos[j].x = pointOnPath[0] - 0.5 * currentElem._pos[j].width * Math.cos(pointOnPath[2]) - currentElem._pos[j].y * Math.sin(pointOnPath[2]);\n currentElem._pos[j].y = pointOnPath[1] - 0.5 * currentElem._pos[j].width * Math.sin(pointOnPath[2]) + currentElem._pos[j].y * Math.cos(pointOnPath[2]);\n currentElem._pos[j].rotate = pointOnPath[2] + currentElem._pos[j].rotate;\n currentElem._pos[j].continuous = false;\n }\n }\n } else {\n for (let j = 0; j < currentElem._pos.length; j++) {\n currentElem._pos[j].hidden = true;\n }\n }\n }\n recursive(textParentElem, null);\n for (let i = 0; i < textPaths.length; i++) {\n textOnPath(textPaths[i]);\n }\n })(this);\n this.getTransformation = function() {\n return this.get('transform');\n };\n this.drawInDocument = function(isClip, isMask) {\n doc.save();\n this.transform();\n this.clip();\n let masked = this.mask(), group;\n if (masked) {\n group = docBeginGroup(getPageBBox());\n }\n this.drawTextInDocument(isClip, isMask);\n if (group) {\n docEndGroup(group);\n docInsertGroup(group);\n }\n doc.restore();\n };\n };\n\n options = options || {};\n var pxToPt = options.assumePt ? 1 : (72/96), // 1px = 72/96pt, but only if assumePt is false\n viewportWidth = (options.width || doc.page.width) / pxToPt,\n viewportHeight = (options.height || doc.page.height) / pxToPt,\n preserveAspectRatio = options.preserveAspectRatio || null, // default to null so that the attr can override if not passed\n useCSS = options.useCSS && typeof SVGElement !== 'undefined' && svg instanceof SVGElement && typeof getComputedStyle === 'function',\n warningCallback = options.warningCallback,\n fontCallback = options.fontCallback,\n imageCallback = options.imageCallback,\n colorCallback = options.colorCallback,\n documentCallback = options.documentCallback,\n precision = Math.ceil(Math.max(1, options.precision)) || 3,\n groupStack = [],\n documentCache = {},\n links = [],\n styleRules = [];\n\n if (typeof warningCallback !== 'function') {\n warningCallback = function(str) {\n if (typeof console !== undefined && typeof console.warn === 'function') {console.warn(str);}\n };\n }\n if (typeof fontCallback !== 'function') {\n fontCallback = function(family, bold, italic, fontOptions) {\n // Check if the font is already registered in the document\n if (bold && italic) {\n if (doc._registeredFonts.hasOwnProperty(family + '-BoldItalic')) {\n return family + '-BoldItalic';\n } else if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\n fontOptions.fauxBold = true;\n return family + '-Italic';\n } else if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\n fontOptions.fauxItalic = true;\n return family + '-Bold';\n } else if (doc._registeredFonts.hasOwnProperty(family)) {\n fontOptions.fauxBold = true;\n fontOptions.fauxItalic = true;\n return family;\n }\n }\n if (bold && !italic) {\n if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\n return family + '-Bold';\n } else if (doc._registeredFonts.hasOwnProperty(family)) {\n fontOptions.fauxBold = true;\n return family;\n }\n }\n if (!bold && italic) {\n if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\n return family + '-Italic';\n } else if (doc._registeredFonts.hasOwnProperty(family)) {\n fontOptions.fauxItalic = true;\n return family;\n }\n }\n if (!bold && !italic) {\n if (doc._registeredFonts.hasOwnProperty(family)) {\n return family;\n }\n }\n // Use standard fonts as fallback\n if (family.match(/(?:^|,)\\s*serif\\s*$/)) {\n if (bold && italic) {return 'Times-BoldItalic';}\n if (bold && !italic) {return 'Times-Bold';}\n if (!bold && italic) {return 'Times-Italic';}\n if (!bold && !italic) {return 'Times-Roman';}\n } else if (family.match(/(?:^|,)\\s*monospace\\s*$/)) {\n if (bold && italic) {return 'Courier-BoldOblique';}\n if (bold && !italic) {return 'Courier-Bold';}\n if (!bold && italic) {return 'Courier-Oblique';}\n if (!bold && !italic) {return 'Courier';}\n } else if (family.match(/(?:^|,)\\s*sans-serif\\s*$/) || true) {\n if (bold && italic) {return 'Helvetica-BoldOblique';}\n if (bold && !italic) {return 'Helvetica-Bold';}\n if (!bold && italic) {return 'Helvetica-Oblique';}\n if (!bold && !italic) {return 'Helvetica';}\n }\n };\n }\n if (typeof imageCallback !== 'function') {\n imageCallback = function(link) {\n return link.replace(/\\s+/g, '');\n };\n }\n if (typeof colorCallback !== 'function') {\n colorCallback = null;\n } else {\n for (let color in DefaultColors) {\n let newColor = colorCallback(DefaultColors[color]);\n DefaultColors[color][0] = newColor[0];\n DefaultColors[color][1] = newColor[1];\n }\n }\n if (typeof documentCallback !== 'function') {\n documentCallback = null;\n }\n\n if (typeof svg === 'string') {svg = parseXml(svg);}\n if (svg) {\n let styles = svg.getElementsByTagName('style');\n for (let i = 0; i < styles.length; i++) {\n styleRules = styleRules.concat(parseStyleSheet(styles[i].textContent));\n }\n let elem = createSVGElement(svg, null);\n if (typeof elem.drawInDocument === 'function') {\n if (options.useCSS && !useCSS) {\n warningCallback('SVGtoPDF: useCSS option can only be used for SVG *elements* in compatible browsers');\n }\n let savedFillColor = doc._fillColor;\n doc.save().translate(x || 0, y || 0).scale(pxToPt);\n elem.drawInDocument();\n for (let i = 0; i < links.length; i++) {\n doc.page.annotations.push(links[i]);\n }\n doc.restore();\n doc._fillColor = savedFillColor;\n } else {\n warningCallback('SVGtoPDF: this element can\\'t be rendered directly: ' + svg.nodeName);\n }\n } else {\n warningCallback('SVGtoPDF: the input does not look like a valid SVG');\n }\n\n};\n\nexport default SVGtoPDF;\n", "export const BROWSER_DEFAULT_STD_FONTS = new Set([\n \"Helvetica\",\n \"Helvetica-Bold\",\n \"Helvetica-Oblique\",\n \"Helvetica-BoldOblique\"\n])\n\nexport let extraPdfStandardFontsRegistered = false\n\nexport const markExtraPdfStandardFontsRegistered = (): void => {\n extraPdfStandardFontsRegistered = true\n}\n", "const pdfkitModule = await import(\"pdfkit\")\nconst PDFDocument = pdfkitModule.default\nconst registerStdFonts = (\n pdfkitModule as typeof pdfkitModule & {\n registerStdFonts?: (...fonts: Array<{ name: string }>) => void\n }\n).registerStdFonts\n\n// PDFKit 0.20's browser build does not self-register standard fonts. Helvetica\n// is the default document font (including bold/oblique variants from style),\n// so those four faces are registered here. Courier / Times / Symbol /\n// ZapfDingbats stay out of the default graph \u2014 call registerPdfStandardFonts()\n// when a browser bundle needs them. Node already loads every standard font\n// lazily and never hits this branch.\nif (typeof registerStdFonts === \"function\") {\n const fonts = await Promise.all([\n import(\"pdfkit/standard-fonts/Helvetica\"),\n import(\"pdfkit/standard-fonts/HelveticaBold\"),\n import(\"pdfkit/standard-fonts/HelveticaBoldOblique\"),\n import(\"pdfkit/standard-fonts/HelveticaOblique\")\n ])\n registerStdFonts(...fonts.map((mod) => mod.default))\n}\n\nexport default PDFDocument\n", "import type { PdfAttachment } from \"@jsxpdf/core\"\n\n/**\n * Attachments Phase-1: embed Document `attachments` as real PDF\n * EmbeddedFiles (PDF/A-3 style associated files).\n *\n * Delegates stream/name-tree/catalog emission to pdfkit's `file()`\n * primitive (see AttachmentsMixin in pdfkit), which creates the\n * EmbeddedFile stream (+ Params Size/CheckSum/CreationDate/ModDate), the\n * FileSpec dict (+ AFRelationship, Desc, EF), registers it in the\n * EmbeddedFiles name tree, and appends it to the catalog /AF array.\n * Compression follows the pipeline automatically: PDFReference deflates\n * stream data iff `document.compress` is set, and the backend enables\n * `compress` in Node only (see PdfKitBackend constructor).\n */\n\ntype PdfKitFileOptions = {\n name: string\n relationship: string\n description?: string\n type?: string\n creationDate: Date\n modifiedDate: Date\n}\n\ntype PdfKitFileCapableDocument = {\n file(src: unknown, options: PdfKitFileOptions): unknown\n}\n\nconst RELATIONSHIP_NAMES: Record<NonNullable<PdfAttachment[\"relationship\"]>, string> = {\n source: \"Source\",\n alternative: \"Alternative\",\n data: \"Data\",\n supplement: \"Supplement\",\n unspecified: \"Unspecified\",\n}\n\n/**\n * Duplicate-name policy: LAST-WINS replacement.\n *\n * Attachments are deduped by `name`, keeping the LAST occurrence. This\n * matches pdfkit's own overwrite semantics (`AttachmentsMixin.file()`\n * replaces `this._fileRegistry[options.name]`, and `PDFNameTree.add()`\n * replaces `this._items[key]`), so callers observe the same \"last write\n * wins\" behavior they would get from raw pdfkit \u2014 minus the damage:\n * passing duplicates straight through would additionally leave an\n * orphaned EmbeddedFile stream in the file AND push a second FileSpec\n * onto the catalog `/AF` array (pdfkit appends one FileSpec per `file()`\n * call unconditionally), i.e. two catalog entries claiming the same\n * filename. Deduping here keeps exactly one EmbeddedFile stream, one\n * name-tree entry, and one `/AF` entry per name.\n */\nexport const dedupeAttachmentsByName = (attachments: PdfAttachment[]): PdfAttachment[] => {\n const byName = new Map<string, PdfAttachment>()\n for (const attachment of attachments) {\n byName.set(attachment.name, attachment)\n }\n return [...byName.values()]\n}\n\n/**\n * Reject attachments pdfkit cannot represent: an empty (or\n * whitespace-only) `name` would produce a nameless FileSpec / name-tree\n * key, so it throws before anything is embedded.\n */\nconst assertValidAttachment = (attachment: PdfAttachment): void => {\n if (attachment.name.trim().length === 0) {\n throw new Error(\"embedAttachments: attachment name must be a non-empty string.\")\n }\n}\n\nconst isNodeRuntime = (): boolean =>\n typeof process !== \"undefined\" && Boolean(process.versions?.node)\n\n/**\n * Normalize attachment payloads to what pdfkit `file()` accepts.\n * NOTE: pdfkit treats string `src` as a filepath/data-uri, so raw text\n * must be UTF-8 encoded to bytes first \u2014 never pass strings through.\n */\nconst toFileSource = (data: PdfAttachment[\"data\"]): Buffer | ArrayBuffer => {\n const bytes: Uint8Array = typeof data === \"string\" ? new TextEncoder().encode(data) : data\n if (isNodeRuntime()) {\n return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n }\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer\n}\n\n/**\n * Embed attachments into an open PDFKit document. Must be called before\n * the document is ended. `fallbackDate` supplies both dates when an\n * attachment omits them (the caller passes the Document creationDate);\n * `modificationDate` falls back to the attachment's own `creationDate`\n * first so ModDate equals CreationDate for date-less attachments.\n *\n * Hardening (Phase-2): duplicate names are resolved LAST-WINS via\n * `dedupeAttachmentsByName` before touching the document, and every entry\n * is validated up front so an empty name throws before anything is\n * embedded (no partial state). `relationship` passes through verbatim via\n * the AFRelationship mapping (default `\"unspecified\"` \u2192 `/Unspecified`).\n */\nexport const embedAttachments = (\n document: unknown,\n attachments: PdfAttachment[],\n fallbackDate: Date,\n): void => {\n const candidate = document as Partial<PdfKitFileCapableDocument> | null\n if (candidate == null || typeof candidate.file !== \"function\") {\n throw new Error(\"embedAttachments: document does not support file attachments (missing pdfkit file() API).\")\n }\n const deduped = dedupeAttachmentsByName(attachments)\n for (const attachment of deduped) {\n assertValidAttachment(attachment)\n }\n const doc = candidate as PdfKitFileCapableDocument\n for (const attachment of deduped) {\n const creationDate = attachment.creationDate ?? fallbackDate\n doc.file(toFileSource(attachment.data), {\n name: attachment.name,\n relationship: RELATIONSHIP_NAMES[attachment.relationship ?? \"unspecified\"] ?? \"Unspecified\",\n description: attachment.description,\n type: attachment.mimeType,\n creationDate,\n // pdfkit's option is `modifiedDate` (not `modificationDate`).\n modifiedDate: attachment.modificationDate ?? creationDate,\n })\n }\n}\n", "/**\n * PDF/A color-output wiring (sRGB OutputIntent + page transparency Group).\n *\n * Background: PDF/A-3b (ISO 19005-3) veraPDF findings on Factur-X output:\n * - 6.2.4.3/2 (x38): DeviceRGB used with no RGB OutputIntent profile.\n * - 6.2.4.3/4 (x1): DeviceGray used with no OutputIntent profile.\n * - 6.2.10/2 (x1): transparent objects (fill/stroke opacity < 1 emits an\n * ExtGState) with no page Group blending colour space (/CS).\n *\n * This module mirrors what pdfkit's own PDFA mixin does for\n * `subset: \"PDF/A-*\"`, but jsxpdf never passes `subset` (it would also\n * duplicate the `pdfaid:` XMP block this repo emits itself via `xmp.ts`).\n * Instead the backend applies the same two catalog/page entries directly,\n * gated on the existing `pdfaid` Document prop so default (non-PDF/A)\n * output is byte-identical to before.\n *\n * The sRGB ICC profile bytes are pdfkit's own bundled\n * `sRGB_IEC61966_2_1.icc` (3024 bytes), inlined as base64 so the feature\n * works in every runtime (Node, browser, workers) with no `node:fs`\n * dependency and no path lookups into the pdfkit package layout.\n */\n\nimport { base64ToBytes } from \"@jsxpdf/core\"\n\n/** Base64 of the sRGB IEC61966-2.1 ICC profile (3024 bytes when decoded). */\nconst SRGB_ICC_BASE64 = \"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\"\n\nlet cachedIccBytes: Uint8Array | null = null\n\n/** Decode (once) and return the sRGB ICC profile bytes. */\nexport const getSrgbIccBytes = (): Uint8Array => {\n cachedIccBytes ??= base64ToBytes(SRGB_ICC_BASE64)\n return cachedIccBytes\n}\n\nexport const SRGB_PROFILE_INFO = \"sRGB IEC61966-2.1\"\n\n/** Minimal structural view of the pdfkit document surface this module needs. */\nexport type OutputIntentDocument = {\n ref(data?: Record<string, unknown>): {\n end(chunk?: unknown): unknown\n write(chunk: unknown): unknown\n }\n _root: { data: Record<string, unknown> }\n}\n\nexport type PageGroupDocument = {\n page: { dictionary: { data: Record<string, unknown> } } | null | undefined\n}\n\n/**\n * Gate: PDF/A color output applies exactly when the Document claims PDF/A\n * conformance via the `pdfaid` prop. Default output (no `pdfaid`) is\n * unchanged \u2014 no OutputIntent, no page Group entries.\n */\nexport const shouldApplyPdfAColorOutput = (props: { pdfaid?: unknown }): boolean =>\n props.pdfaid != null\n\n/** True once an OutputIntent array is present on the catalog. */\nexport const hasOutputIntent = (document: Pick<OutputIntentDocument, \"_root\">): boolean =>\n document._root.data.OutputIntents != null\n\n/**\n * Ensure a GTS_PDFA1 sRGB OutputIntent on the catalog. Idempotent: returns\n * false (and touches nothing) when one is already present. Must be called\n * before `document.end()` \u2014 the backend calls it in the constructor.\n */\nexport const ensureSrgbOutputIntent = (document: OutputIntentDocument): boolean => {\n if (hasOutputIntent(document)) return false\n const iccBytes = getSrgbIccBytes()\n // Match pdfkit's own _addColorOutputIntent emission: Buffer payload in\n // Node (Buffer IS-A Uint8Array, so PDFReference.write handles both).\n const profilePayload: unknown =\n typeof Buffer !== \"undefined\"\n ? Buffer.from(iccBytes.buffer, iccBytes.byteOffset, iccBytes.byteLength)\n : iccBytes\n const colorProfileRef = document.ref({\n Length: iccBytes.length,\n N: 3\n })\n colorProfileRef.write(profilePayload)\n colorProfileRef.end()\n const intentRef = document.ref({\n Type: \"OutputIntent\",\n S: \"GTS_PDFA1\",\n // `new String(...)` serializes as a PDF literal string; a plain string\n // would serialize as a /Name. (See PDFObject.convert in pdfkit.)\n Info: new String(SRGB_PROFILE_INFO),\n OutputConditionIdentifier: new String(SRGB_PROFILE_INFO),\n DestOutputProfile: colorProfileRef\n })\n intentRef.end()\n document._root.data.OutputIntents = [intentRef]\n return true\n}\n\n/**\n * Ensure the open page carries a transparency Group with an explicit\n * blending colour space (`/Group << /Type /Group /S /Transparency\n * /CS /DeviceRGB >>`). Idempotent per page; no-op when there is no open\n * page. The backend calls it from `beginPage` right after `addPage`.\n */\nexport const ensurePageTransparencyGroup = (document: PageGroupDocument): boolean => {\n const dictionary = document.page?.dictionary\n if (dictionary == null) return false\n if (dictionary.data.Group != null) return false\n dictionary.data.Group = {\n Type: \"Group\",\n S: \"Transparency\",\n CS: \"DeviceRGB\"\n }\n return true\n}\n", "import type { PdfProps } from \"@jsxpdf/core\"\n\n/**\n * Tagged PDF Phase-1: public validation plumbing only.\n *\n * Phase-2 wires real structure-tree emission in PdfKitBackend (MarkInfo /\n * StructTreeRoot / ParentTree / BDC operators), so the default flipped to\n * tagged: `undefined` now resolves to `\"on\"`, matching Takumi semantics\n * (`tagged?: boolean | \"ua1\" | \"ua2\"`, default true). Pass `tagged={false}`\n * explicitly for untagged output.\n *\n * Reference semantics (Takumi): `tagged?: boolean | \"ua1\" | \"ua2\"`,\n * default true. Unlike Takumi, `creationDate` is NOT required for\n * `\"ua1\"`/`\"ua2\"` because the backend already defaults\n * `CreationDate` to `new Date()` when the prop is absent.\n */\n\nexport type TaggedOption = NonNullable<PdfProps[\"tagged\"]>\n\nexport type ResolvedTaggedMode = \"off\" | \"on\" | \"ua1\" | \"ua2\"\n\nexport type TaggedDocumentProps = Pick<\n PdfProps,\n \"language\" | \"title\" | \"creationDate\" | \"pdfVersion\"\n>\n\n/**\n * Combination table for docs: what each `tagged` value requires.\n * `requiresLanguage` / `requiresTitle` refer to the Document props of the\n * same name; `pdfVersionConstraint` describes the accepted `pdfVersion` prop.\n */\nexport const TAGGED_COMBINATION_TABLE = [\n {\n tagged: \"false\",\n mode: \"off\",\n requiresLanguage: false,\n requiresTitle: false,\n pdfVersionConstraint: \"any\",\n notes: \"Explicit opt-out: untagged output (no MarkInfo/StructTreeRoot).\",\n },\n {\n tagged: \"undefined | true\",\n mode: \"on\",\n requiresLanguage: false,\n requiresTitle: false,\n pdfVersionConstraint: \"any\",\n notes: \"Default (Takumi-compatible): basic tagged PDF (MarkInfo Marked:true + StructTreeRoot + ParentTree); no PDF/UA metadata guarantees.\",\n },\n {\n tagged: '\"ua1\"',\n mode: \"ua1\",\n requiresLanguage: true,\n requiresTitle: true,\n pdfVersionConstraint: \"1.7+ (PDF/UA-1 is defined against PDF 1.7; 2.0 also accepted)\",\n notes: \"PDF/UA-1: creationDate is auto-defaulted to now by the backend, so it is not required.\",\n },\n {\n tagged: '\"ua2\"',\n mode: \"ua2\",\n requiresLanguage: true,\n requiresTitle: true,\n pdfVersionConstraint: \"PDF 2.0 only (pdfVersion must be unset or 2.0; 1.x is rejected)\",\n notes: \"PDF/UA-2 is defined against PDF 2.0 only.\",\n },\n] as const\n\n/**\n * Normalize the `tagged` Document option to a resolved mode.\n * `undefined` maps to `\"on\"` (Takumi-compatible tagged default; pass\n * `false` explicitly for untagged output). Throws on runtime values outside\n * the declared union.\n */\nexport const resolveTagged = (\n tagged: TaggedOption | undefined,\n): ResolvedTaggedMode => {\n if (tagged === undefined || tagged === true) return \"on\"\n if (tagged === false) return \"off\"\n if (tagged === \"ua1\" || tagged === \"ua2\") return tagged\n throw new Error(\n `Invalid \"tagged\" option ${JSON.stringify(tagged)}: expected true, false, \"ua1\", or \"ua2\".`,\n )\n}\n\nconst hasText = (value: unknown): value is string =>\n typeof value === \"string\" && value.trim().length > 0\n\n/**\n * Reject invalid `tagged` / Document-prop combinations with descriptive\n * errors. Valid modes (`\"off\"`, `\"on\"`, valid `\"ua1\"`/`\"ua2\"`) return\n * without throwing. Intended to be called during Document\n * props-normalization before render (wiring lands with the integrator /\n * Phase-2; the function is pure and side-effect free).\n *\n * Rules:\n * - `\"ua1\"` / `\"ua2\"` require the `language` prop (catalog /Lang entry).\n * - `\"ua1\"` / `\"ua2\"` require the `title` prop (displayTitle + /Title entry).\n * - `\"ua2\"` additionally requires PDF 2.0: a set `pdfVersion` starting\n * with `\"1.\"` is rejected (unset means the backend will emit 2.0).\n */\nexport const validateTaggedOption = (\n tagged: TaggedOption | undefined,\n props: TaggedDocumentProps = {},\n): void => {\n const mode = resolveTagged(tagged)\n if (mode !== \"ua1\" && mode !== \"ua2\") return\n if (!hasText(props.language)) {\n throw new Error(\n `Invalid tagged PDF option \"${tagged}\": the Document \"language\" prop is required (e.g. language=\"en-US\") so the catalog can carry a /Lang entry.`,\n )\n }\n if (!hasText(props.title)) {\n throw new Error(\n `Invalid tagged PDF option \"${tagged}\": the Document \"title\" prop is required (used for displayTitle and the /Title entry).`,\n )\n }\n const pdfVersion = typeof props.pdfVersion === \"string\" ? props.pdfVersion.trim() : \"\"\n if (mode === \"ua2\" && pdfVersion.startsWith(\"1.\")) {\n throw new Error(\n `Invalid tagged PDF option \"ua2\": PDF/UA-2 requires PDF 2.0, but the Document \"pdfVersion\" prop is \"${props.pdfVersion}\". Remove \"pdfVersion\" or set it to \"2.0\".`,\n )\n }\n}\n", "/**\n * Attachments Phase-2: XMP metadata packet builder.\n *\n * Pure functions (no pdfkit dependency) that produce a well-formed XMP\n * packet string for embedding in a PDF `/Metadata` stream. The standard\n * blocks mirror pdfkit's own `_addInfo` emission (dc:, xmp:, pdf:) and add\n * the xap: mirror block plus optional pdfaid: (PDF/A) and pdfuaid: (PDF/UA\n * identification) blocks.\n *\n * `customSchemas` injects arbitrary `prefix:` blocks \u2014 e.g. the Factur-X\n * `fx:` extension schema (`urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#`)\n * \u2014 the same way Takumi's `metadata.xmp` carries Factur-X properties \u2014 plus\n * the PDF/A extension-schema description (`pdfaExtension:`) veraPDF rule\n * 6.6.2.3.1 requires for non-predefined properties.\n *\n * Wiring note (for the integrator \u2014 this module intentionally does NOT\n * touch the live PDFKit document; `index.ts` is owned by another agent):\n * pdfkit's `endMetadata()` always appends its own `_addInfo` fragment and\n * then seals the packet, so a *full* packet from `buildXmpPacket()` cannot\n * be passed to `document.appendXML()` (that would nest `x:xmpmeta` inside\n * `x:xmpmeta`). Instead, call `document.appendXML()` with *fragments* from\n * `buildXmpDescriptions()` / `buildXmpCustomSchemaDescriptions()` /\n * `buildXmpPdfAIdDescription()` in `endDocument()` before `document.end()`.\n * See the exact snippet at the bottom of this file.\n */\n\nimport type { PdfXmpCustomSchema, PdfXmpPdfAId } from \"@jsxpdf/core\"\n\nexport type XmpCustomSchema = PdfXmpCustomSchema\n\nexport type XmpPdfAId = PdfXmpPdfAId\n\nexport type BuildXmpPacketOptions = {\n title?: string\n author?: string\n subject?: string\n creator?: string\n producer?: string\n creationDate?: Date\n modificationDate?: Date\n /**\n * Document natural language (e.g. `\"en-US\"`). When set together with\n * `title`/`subject`, the `dc:title`/`dc:description` Alt items carry this\n * language tag instead of `x-default`, so veraPDF PDF/UA-1 rule 7.2/33\n * (\"Natural language for document metadata shall be determined\",\n * `xDefault == false || gContainsCatalogLang == true`) passes on the\n * `xDefault == false` branch.\n */\n language?: string\n customSchemas?: XmpCustomSchema[]\n /** When set, a `pdfaid:` block is appended claiming PDF/A conformance. */\n pdfaid?: XmpPdfAId\n}\n\nconst RDF_NS = \"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\nconst DC_NS = \"http://purl.org/dc/elements/1.1/\"\nconst XMP_NS = \"http://ns.adobe.com/xap/1.0/\"\nconst XAP_NS = \"http://ns.adobe.com/xap/1.0/\"\nconst PDF_NS = \"http://ns.adobe.com/pdf/1.3/\"\nconst PDFAID_NS = \"http://www.aiim.org/pdfa/ns/id/\"\nconst PDFUAID_NS = \"http://www.aiim.org/pdfua/ns/id/\"\nconst PDFAEXTENSION_NS = \"http://www.aiim.org/pdfa/ns/extension/\"\nconst PDFASCHEMA_NS = \"http://www.aiim.org/pdfa/ns/schema#\"\nconst PDFAPROPERTY_NS = \"http://www.aiim.org/pdfa/ns/property#\"\n\n/** Canonical Factur-X extension-schema namespace (Cross-Industry Invoice). */\nexport const FACTUR_X_NAMESPACE = \"urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#\"\n/** Canonical Factur-X extension-schema prefix. */\nexport const FACTUR_X_PREFIX = \"fx\"\n\n/**\n * XML-escape a scalar for use as element text content.\n */\nexport const escapeXmp = (value: string | number | boolean): string =>\n String(value)\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"'\", \"&apos;\")\n\n/**\n * Format a Date as an XMP date-time (`YYYY-MM-DDTHH:mm:ssZ`, no millis \u2014\n * same truncation pdfkit applies to its `xmp:CreateDate` emission).\n */\nexport const toXmpDate = (date: Date): string => date.toISOString().replace(/\\.\\d+Z$/, \"Z\")\n\nconst PREFIX_PATTERN = /^[A-Za-z_][A-Za-z0-9_.-]*$/\n\nconst assertPrefix = (prefix: string): void => {\n if (!PREFIX_PATTERN.test(prefix)) {\n throw new Error(`buildXmpPacket: invalid custom schema prefix ${JSON.stringify(prefix)} (must match ${String(PREFIX_PATTERN)}).`)\n }\n}\n\n/**\n * XMP predefined value type for a custom-schema scalar, inferred from the\n * JS value so the `pdfaExtension` description (`pdfaProperty:valueType`)\n * matches the emitted lexical form (veraPDF PDF/A-3 rule 6.6.2.3.1 test 2,\n * `isValueTypeCorrect == true`).\n */\nexport const xmpPropertyValueType = (value: string | number | boolean): \"Text\" | \"Integer\" | \"Real\" | \"Boolean\" => {\n if (typeof value === \"boolean\") return \"Boolean\"\n if (typeof value === \"number\") return Number.isInteger(value) ? \"Integer\" : \"Real\"\n return \"Text\"\n}\n\n/**\n * Lexical form of a custom-schema scalar. Booleans use the XMP canonical\n * `True`/`False` (matching the declared `Boolean` value type); numbers and\n * strings use their plain string form.\n */\nexport const xmpPropertyValueText = (value: string | number | boolean): string => {\n if (typeof value === \"boolean\") return value ? \"True\" : \"False\"\n return String(value)\n}\n\n/**\n * Build the inner `rdf:Description` fragments for extension schemas.\n * The returned string contains NO `x:xmpmeta` wrapper, so it can be passed\n * directly to pdfkit's `document.appendXML(fragment)`.\n *\n * Besides the `prefix:` property blocks, a PDF/A-compliant extension-schema\n * description (`pdfaExtension:schemas` bag of `pdfaSchema`/`pdfaProperty`\n * resources, per ISO 19005-3 6.6.2.3.3) is appended describing every schema\n * and property. Without it, veraPDF PDF/A rule 6.6.2.3.1 rejects each custom\n * property (\"XMP property is either not predefined, or is not defined in\n * any XMP extension schema\"). The description carries only the fields the\n * schema tables define (6.6.2.3.2 test 1, `containsUndefinedFields == false`).\n */\nexport const buildXmpCustomSchemaDescriptions = (customSchemas: XmpCustomSchema[]): string => {\n const blocks: string[] = []\n for (const schema of customSchemas) {\n assertPrefix(schema.prefix)\n if (schema.namespace.length === 0) {\n throw new Error(\"buildXmpPacket: custom schema namespace must be a non-empty string.\")\n }\n const entries = Object.entries(schema.properties)\n .map(([name, value]) => ` <${schema.prefix}:${name}>${escapeXmp(xmpPropertyValueText(value))}</${schema.prefix}:${name}>`)\n .join(\"\\n\")\n blocks.push(\n ` <rdf:Description rdf:about=\"\" xmlns:${schema.prefix}=\"${escapeXmp(schema.namespace)}\">\\n${entries}\\n </rdf:Description>`,\n )\n }\n const extensionSchema = buildXmpExtensionSchemaDescription(customSchemas)\n if (extensionSchema.length > 0) blocks.push(extensionSchema)\n return blocks.join(\"\\n\")\n}\n\n/**\n * Build the PDF/A extension-schema description (`rdf:Description` fragment,\n * no `x:xmpmeta` wrapper \u2014 safe for `document.appendXML(fragment)`) for the\n * given custom schemas: one `pdfaSchema` resource per schema (schema text,\n * namespaceURI, prefix, property Seq) with one `pdfaProperty` resource per\n * property (name, valueType, category `external`, description). All\n * `valueType`s are predefined XMP types inferred from the JS values, so no\n * `pdfaSchema:valueType` Seq is needed.\n */\nexport const buildXmpExtensionSchemaDescription = (customSchemas: XmpCustomSchema[]): string => {\n if (customSchemas.length === 0) return \"\"\n const schemas = customSchemas\n .map((schema) => {\n assertPrefix(schema.prefix)\n if (schema.namespace.length === 0) {\n throw new Error(\"buildXmpPacket: custom schema namespace must be a non-empty string.\")\n }\n const properties = Object.entries(schema.properties)\n .map(\n ([name, value]) =>\n ` <rdf:li rdf:parseType=\"Resource\">\\n` +\n ` <pdfaProperty:name>${escapeXmp(name)}</pdfaProperty:name>\\n` +\n ` <pdfaProperty:valueType>${xmpPropertyValueType(value)}</pdfaProperty:valueType>\\n` +\n ` <pdfaProperty:category>external</pdfaProperty:category>\\n` +\n ` <pdfaProperty:description>${escapeXmp(`${schema.prefix}:${name} extension property`)}</pdfaProperty:description>\\n` +\n ` </rdf:li>`,\n )\n .join(\"\\n\")\n return (\n ` <rdf:li rdf:parseType=\"Resource\">\\n` +\n ` <pdfaSchema:schema>${escapeXmp(`${schema.prefix} extension schema`)}</pdfaSchema:schema>\\n` +\n ` <pdfaSchema:namespaceURI>${escapeXmp(schema.namespace)}</pdfaSchema:namespaceURI>\\n` +\n ` <pdfaSchema:prefix>${escapeXmp(schema.prefix)}</pdfaSchema:prefix>\\n` +\n ` <pdfaSchema:property>\\n` +\n ` <rdf:Seq>\\n${properties}\\n </rdf:Seq>\\n` +\n ` </pdfaSchema:property>\\n` +\n ` </rdf:li>`\n )\n })\n .join(\"\\n\")\n return (\n ` <rdf:Description rdf:about=\"\" xmlns:pdfaExtension=\"${PDFAEXTENSION_NS}\" xmlns:pdfaSchema=\"${PDFASCHEMA_NS}\" xmlns:pdfaProperty=\"${PDFAPROPERTY_NS}\">\\n` +\n ` <pdfaExtension:schemas>\\n` +\n ` <rdf:Bag>\\n${schemas}\\n </rdf:Bag>\\n` +\n ` </pdfaExtension:schemas>\\n` +\n ` </rdf:Description>`\n )\n}\n\n/**\n * Build the inner `rdf:Description` fragment claiming PDF/A conformance.\n * No `x:xmpmeta` wrapper \u2014 safe for `document.appendXML(fragment)`.\n */\nexport const buildXmpPdfAIdDescription = (pdfaid: XmpPdfAId): string =>\n ` <rdf:Description rdf:about=\"\" xmlns:pdfaid=\"${PDFAID_NS}\">\\n` +\n ` <pdfaid:part>${escapeXmp(pdfaid.part)}</pdfaid:part>\\n` +\n ` <pdfaid:conformance>${escapeXmp(pdfaid.conformance)}</pdfaid:conformance>\\n` +\n ` </rdf:Description>`\n\n/**\n * PDF/UA Identification extension-schema fragment (`part` 1 for PDF/UA-1,\n * 2 for PDF/UA-2; namespace `http://www.aiim.org/pdfua/ns/id/`). No\n * `x:xmpmeta` wrapper \u2014 safe for `document.appendXML(fragment)`.\n *\n * veraPDF PDF/UA-1 rule 5/1 (`containsPDFUAIdentification == true`) passes\n * on any property from this namespace; rule 5/2 additionally requires\n * `part == 1` for a PDF/UA-1 claim.\n */\nexport const buildXmpPdfUaIdDescription = (part: 1 | 2): string => {\n if (part !== 1 && part !== 2) {\n throw new Error(`buildXmpPdfUaIdDescription: invalid PDF/UA part ${JSON.stringify(part)} (expected 1 or 2).`)\n }\n return (\n ` <rdf:Description rdf:about=\"\" xmlns:pdfuaid=\"${PDFUAID_NS}\">\\n` +\n ` <pdfuaid:part>${part}</pdfuaid:part>\\n` +\n ` </rdf:Description>`\n )\n}\n\n/**\n * Assert a Document natural-language tag is usable as an `xml:lang` value\n * (non-empty after trimming). Returns the trimmed tag.\n */\nexport const assertXmpLanguage = (language: string): string => {\n const trimmed = language.trim()\n if (trimmed.length === 0) {\n throw new Error(\"buildXmpPacket: language must be a non-empty language tag (e.g. \\\"en-US\\\").\")\n }\n return trimmed\n}\n\n/**\n * Retag pdfkit's own `x-default` title/description items with the real\n * document language tag.\n *\n * pdfkit's `_addInfo` emission hardcodes `xml:lang=\"x-default\"` on its\n * `dc:title`/`dc:description` Alt items, which veraPDF PDF/UA-1 rule 7.2/33\n * (`xDefault == false || gContainsCatalogLang == true` on `XMPLangAlt`)\n * rejects as undeterminable. Rewriting the tag in place keeps a single\n * `dc:title`/`dc:description` (veraPDF's RDF parser throws\n * `Duplicate property or field node` on repeated properties, so appending a\n * second language-tagged `dc:` fragment is NOT an option). Fragments without\n * the marker pass through unchanged.\n */\nexport const retagXmpDefaultLanguage = (fragment: string, language: string): string => {\n const tag = assertXmpLanguage(language)\n return fragment.replaceAll('<rdf:li xml:lang=\"x-default\">', `<rdf:li xml:lang=\"${escapeXmp(tag)}\">`)\n}\n\n/**\n * Build the inner `rdf:Description` fragments for the standard document\n * properties (dc:/xmp:/xap:/pdf: blocks). Only blocks with at least one\n * provided value are emitted (`dc:format` is always present when the dc:\n * block is emitted). No `x:xmpmeta` wrapper \u2014 safe for\n * `document.appendXML(fragment)`.\n */\nexport const buildXmpDescriptions = (options: BuildXmpPacketOptions = {}): string => {\n const blocks: string[] = []\n\n const datesAndTool: string[] = []\n if (options.creator != null) datesAndTool.push(` <xmp:CreatorTool>${escapeXmp(options.creator)}</xmp:CreatorTool>`)\n if (options.creationDate != null) datesAndTool.push(` <xmp:CreateDate>${escapeXmp(toXmpDate(options.creationDate))}</xmp:CreateDate>`)\n if (options.modificationDate != null) datesAndTool.push(` <xmp:ModifyDate>${escapeXmp(toXmpDate(options.modificationDate))}</xmp:ModifyDate>`)\n if (datesAndTool.length > 0) {\n blocks.push(` <rdf:Description rdf:about=\"\" xmlns:xmp=\"${XMP_NS}\">\\n${datesAndTool.join(\"\\n\")}\\n </rdf:Description>`)\n const xapMirrors = datesAndTool.map((line) => line.replaceAll(\"<xmp:\", \"<xap:\").replaceAll(\"</xmp:\", \"</xap:\"))\n blocks.push(` <rdf:Description rdf:about=\"\" xmlns:xap=\"${XAP_NS}\">\\n${xapMirrors.join(\"\\n\")}\\n </rdf:Description>`)\n }\n\n if (options.title != null || options.author != null || options.subject != null) {\n const dcEntries: string[] = [` <dc:format>application/pdf</dc:format>`]\n // With a document language, tag the Alt items with the real language\n // tag (see buildXmpLanguageDescription); otherwise keep pdfkit's\n // `x-default` convention.\n const altLang = options.language != null ? assertXmpLanguage(options.language) : \"x-default\"\n if (options.title != null) {\n dcEntries.push(\n ` <dc:title>\\n <rdf:Alt>\\n <rdf:li xml:lang=\"${escapeXmp(altLang)}\">${escapeXmp(options.title)}</rdf:li>\\n </rdf:Alt>\\n </dc:title>`,\n )\n }\n if (options.subject != null) {\n dcEntries.push(\n ` <dc:description>\\n <rdf:Alt>\\n <rdf:li xml:lang=\"${escapeXmp(altLang)}\">${escapeXmp(options.subject)}</rdf:li>\\n </rdf:Alt>\\n </dc:description>`,\n )\n }\n if (options.author != null) {\n dcEntries.push(\n ` <dc:creator>\\n <rdf:Seq>\\n <rdf:li>${escapeXmp(options.author)}</rdf:li>\\n </rdf:Seq>\\n </dc:creator>`,\n )\n }\n blocks.push(` <rdf:Description rdf:about=\"\" xmlns:dc=\"${DC_NS}\">\\n${dcEntries.join(\"\\n\")}\\n </rdf:Description>`)\n }\n\n if (options.producer != null) {\n blocks.push(\n ` <rdf:Description rdf:about=\"\" xmlns:pdf=\"${PDF_NS}\">\\n` +\n ` <pdf:Producer>${escapeXmp(options.producer)}</pdf:Producer>\\n` +\n ` </rdf:Description>`,\n )\n }\n\n if (options.customSchemas?.length) {\n blocks.push(buildXmpCustomSchemaDescriptions(options.customSchemas))\n }\n if (options.pdfaid != null) {\n blocks.push(buildXmpPdfAIdDescription(options.pdfaid))\n }\n\n return blocks.join(\"\\n\")\n}\n\n/**\n * Build a complete, well-formed XMP packet string (with `x:xmpmeta` /\n * `rdf:RDF` wrappers and `xpacket` processing instructions), ready to be\n * written verbatim into a PDF `/Metadata` stream.\n */\nexport const buildXmpPacket = (options: BuildXmpPacketOptions = {}): string =>\n `<?xpacket begin=\"\\uFEFF\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>\\n` +\n `<x:xmpmeta xmlns:x=\"adobe:ns:meta/\">\\n` +\n ` <rdf:RDF xmlns:rdf=\"${RDF_NS}\">\\n` +\n `${buildXmpDescriptions(options)}\\n` +\n ` </rdf:RDF>\\n` +\n `</x:xmpmeta>\\n` +\n `<?xpacket end=\"w\"?>`\n\n/**\n * Exact wiring snippet for the integrator (in `endDocument()`, owned file\n * `packages/render-pdfkit/src/index.ts` \u2014 DO NOT add this here):\n *\n * ```ts\n * import {\n * buildXmpCustomSchemaDescriptions,\n * buildXmpPdfAIdDescription,\n * buildXmpPdfUaIdDescription,\n * retagXmpDefaultLanguage,\n * } from \"./xmp\"\n * // ... inside endDocument(), BEFORE this.document.end():\n * // Retag pdfkit's x-default title/description items with the Document\n * // language (single dc:title is required \u2014 veraPDF rejects duplicates).\n * const docForXmp = this.document as unknown as {\n * appendXML(xml: string, newline?: boolean): void\n * }\n * if (language?.trim() && (title != null || subject != null)) {\n * const originalAppendXML = docForXmp.appendXML.bind(this.document)\n * docForXmp.appendXML = (xml: string, newline?: boolean) =>\n * originalAppendXML(retagXmpDefaultLanguage(xml, language), newline)\n * }\n * if (xmpCustomSchemas?.length) {\n * (this.document as unknown as { appendXML(xml: string): void })\n * .appendXML(buildXmpCustomSchemaDescriptions(xmpCustomSchemas))\n * }\n * if (pdfaid != null) {\n * (this.document as unknown as { appendXML(xml: string): void })\n * .appendXML(buildXmpPdfAIdDescription(pdfaid))\n * }\n * if (taggedMode === \"ua1\" || taggedMode === \"ua2\") {\n * (this.document as unknown as { appendXML(xml: string): void })\n * .appendXML(buildXmpPdfUaIdDescription(taggedMode === \"ua2\" ? 2 : 1))\n * }\n * // NOTE: never pass buildXmpPacket() output to appendXML() \u2014 pdfkit wraps\n * // fragments in its own x:xmpmeta/rdf:RDF shell at endMetadata() time.\n * ```\n */\nexport const XMP_WIRING_ANCHOR = \"endDocument:before-document.end:appendXML-fragments\"\n", "import SVGtoPDF from \"./vendor/svg-to-pdfkit.js\"\nimport { base64ToBytes, base64ToText, extractText, Font, isBinaryInput, parseSizeValue, resolveColor, toUint8Array, unwrapImageSource } from \"@jsxpdf/core\"\nimport type { LayoutNode, PdfBookmark, ProfileCollector, ResolvedStyle, ShapedGlyphRun, TextDecorationLine } from \"@jsxpdf/core\"\nimport { isSkippableContainerNode, renderLayout } from \"@jsxpdf/render\"\nimport type { RenderBackend, RenderGraphicsContext } from \"@jsxpdf/render\"\nimport { BROWSER_DEFAULT_STD_FONTS, extraPdfStandardFontsRegistered } from \"./pdfkit-stdfont-state\"\nimport PDFDocument from \"./pdfkit-runtime\"\nimport { embedAttachments } from \"./attachments\"\nimport { ensurePageTransparencyGroup, ensureSrgbOutputIntent, shouldApplyPdfAColorOutput } from \"./output-intent\"\nimport { resolveTagged, validateTaggedOption } from \"./tagged\"\nimport type { ResolvedTaggedMode } from \"./tagged\"\nimport { buildXmpCustomSchemaDescriptions, buildXmpPdfAIdDescription, buildXmpPdfUaIdDescription, retagXmpDefaultLanguage } from \"./xmp\"\n\ntype PdfKitDocument = InstanceType<typeof PDFDocument>\n\nexport type PdfDocumentStream = {\n on(event: string, listener: (...args: any[]) => void): PdfDocumentStream\n pipe<T>(destination: T): T\n}\n\ntype InternalPdfDocument = PdfKitDocument & {\n openImage(source: unknown): { width: number; height: number; orientation?: number } | null\n _fontSize: number\n _font: {\n id: string\n ref(): unknown\n encode(text: string): [string[], unknown[]]\n font?: { unitsPerEm?: number }\n subset?: { includeGlyph(glyphId: number): number }\n widths?: Record<number, number>\n unicode?: Record<number, number[]>\n scale?: number\n }\n _root: { data: Record<string, unknown> }\n page: PdfKitDocument[\"page\"] & { fonts: Record<string, unknown> }\n}\n\ntype LayoutGlyph = {\n id: number\n advanceWidth?: number\n codePoints?: number[]\n}\n\nconst glyphHexCaches = new WeakMap<InternalPdfDocument[\"_font\"], Map<number, string>>()\n\nconst encodeLaidOutGlyphs = (font: InternalPdfDocument[\"_font\"], glyphs: LayoutGlyph[]): string[] => {\n if (!font.subset || !font.widths || !font.unicode) {\n return []\n }\n const scale = font.scale ?? 1\n let cache = glyphHexCaches.get(font)\n if (cache == null) {\n cache = new Map()\n glyphHexCaches.set(font, cache)\n }\n const encoded: string[] = new Array(glyphs.length)\n for (let index = 0; index < glyphs.length; index += 1) {\n const glyph = glyphs[index]\n if (glyph == null) continue\n const cached = cache.get(glyph.id)\n if (cached != null) {\n encoded[index] = cached\n continue\n }\n const gid = font.subset!.includeGlyph(glyph.id)\n if (font.widths![gid] == null && glyph.advanceWidth != null) {\n font.widths![gid] = glyph.advanceWidth * scale\n }\n if (font.unicode![gid] == null && glyph.codePoints != null) {\n font.unicode![gid] = glyph.codePoints\n }\n const hex = `0000${gid.toString(16)}`.slice(-4)\n cache.set(glyph.id, hex)\n encoded[index] = hex\n }\n return encoded\n}\n\nconst SVG_NODE_TAGS: Partial<Record<LayoutNode[\"type\"], string>> = {\n SVG: \"svg\",\n G: \"g\",\n TEXT: \"text\",\n PATH: \"path\",\n RECT: \"rect\",\n LINE: \"line\",\n CIRCLE: \"circle\",\n ELLIPSE: \"ellipse\",\n POLYGON: \"polygon\",\n POLYLINE: \"polyline\",\n DEFS: \"defs\",\n CLIP_PATH: \"clipPath\",\n LINEAR_GRADIENT: \"linearGradient\",\n RADIAL_GRADIENT: \"radialGradient\",\n STOP: \"stop\",\n TSPAN: \"tspan\"\n}\n\nconst SVG_ATTR_KEYS = [\n \"xmlns\",\n \"viewBox\",\n \"preserveAspectRatio\",\n \"x\",\n \"y\",\n \"x1\",\n \"y1\",\n \"x2\",\n \"y2\",\n \"cx\",\n \"cy\",\n \"rx\",\n \"ry\",\n \"r\",\n \"d\",\n \"points\",\n \"fill\",\n \"fillOpacity\",\n \"fillRule\",\n \"stroke\",\n \"strokeWidth\",\n \"strokeOpacity\",\n \"strokeLinecap\",\n \"strokeLinejoin\",\n \"strokeDasharray\",\n \"opacity\",\n \"transform\",\n \"overflow\",\n \"clipPath\",\n \"offset\",\n \"stopColor\",\n \"stopOpacity\",\n \"gradientUnits\",\n \"gradientTransform\",\n \"id\",\n \"fontSize\",\n \"fontFamily\",\n \"fontWeight\",\n \"fontStyle\",\n \"textAnchor\",\n \"dominantBaseline\"\n] as const\n\nconst escapeXml = (value: unknown): string =>\n String(value)\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\")\n\nconst SVG_CAMEL_CASE_ATTRS = new Set([\n \"viewBox\",\n \"preserveAspectRatio\",\n \"gradientUnits\",\n \"gradientTransform\"\n])\n\nconst toKebabCase = (value: string): string => value.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`)\n\nconst toSvgAttrName = (value: string): string => (SVG_CAMEL_CASE_ATTRS.has(value) ? value : toKebabCase(value))\n\nlet serializedSvgMarkupCache = new WeakMap<LayoutNode, string>()\nlet resolvedFontSourceCache = new Map<string, string | Uint8Array>()\nconst BUILTIN_PDF_FONTS = new Set([\n \"Courier\",\n \"Courier-Bold\",\n \"Courier-Oblique\",\n \"Courier-BoldOblique\",\n \"Helvetica\",\n \"Helvetica-Bold\",\n \"Helvetica-Oblique\",\n \"Helvetica-BoldOblique\",\n \"Times-Roman\",\n \"Times-Bold\",\n \"Times-Italic\",\n \"Times-BoldItalic\",\n \"Symbol\",\n \"ZapfDingbats\"\n])\n\nexport const clearRenderPdfCaches = (): void => {\n serializedSvgMarkupCache = new WeakMap()\n resolvedFontSourceCache = new Map()\n}\n\nconst isNodeRuntime = (): boolean =>\n typeof process !== \"undefined\" && Boolean(process.versions?.node)\n\n// Stable binary sources let PDFKit's image caches (keyed by buffer identity)\n// hit across renders instead of re-parsing/decoding images every document.\nconst binaryImageSourceCache = new WeakMap<Uint8Array, Uint8Array | ArrayBuffer>()\n\nconst toBinaryImageSource = (value: Uint8Array): Uint8Array | ArrayBuffer => {\n const cached = binaryImageSourceCache.get(value)\n if (cached) return cached\n // Copy into a fresh Buffer instead of viewing `value.buffer`: a view would\n // leak surrounding bytes when byteOffset > 0, and `value.buffer` may be a\n // SharedArrayBuffer, which `Buffer.from(buffer, offset, length)` does not\n // accept in the installed node types. One copy per unique view, cached above,\n // so the source stays stable for PDFKit's identity-keyed image cache.\n const backing = value.buffer\n const resolved: Uint8Array | ArrayBuffer = isNodeRuntime()\n ? Buffer.from(value)\n : backing instanceof ArrayBuffer && value.byteOffset === 0 && value.byteLength === backing.byteLength\n ? backing\n : value.slice()\n binaryImageSourceCache.set(value, resolved)\n return resolved\n}\n\nconst fingerprintBinary = (bytes: Uint8Array): string => {\n let hash = 2166136261\n for (let index = 0; index < bytes.length; index += 1) {\n hash ^= bytes[index]\n hash = Math.imul(hash, 16777619)\n }\n return `bin:${bytes.byteLength}:${hash >>> 0}`\n}\n\nconst parseDataImageUri = (\n source: string\n): { mimeType: string; encoding: \"base64\" | \"uri\"; payload: string } | null => {\n if (!source.startsWith(\"data:\")) return null\n const match = source.match(/^data:([^;,]+)((?:;[^,]+)*?),(.*)$/i)\n if (!match) return null\n const mimeType = (match[1] ?? \"\").toLowerCase()\n const params = (match[2] ?? \"\").toLowerCase()\n const payload = match[3] ?? \"\"\n return {\n mimeType,\n encoding: params.includes(\";base64\") ? \"base64\" : \"uri\",\n payload\n }\n}\n\nconst readImageSource = (\n source: unknown\n): { kind: \"raster\"; buffer: Uint8Array } | { kind: \"svg\"; markup: string } | null => {\n const unwrapped = unwrapImageSource(source)\n if (isBinaryInput(unwrapped)) return { kind: \"raster\", buffer: toUint8Array(unwrapped) }\n if (typeof unwrapped !== \"string\") return null\n\n const parsed = parseDataImageUri(source)\n if (parsed?.mimeType === \"image/svg+xml\") {\n return {\n kind: \"svg\",\n markup: parsed.encoding === \"base64\" ? base64ToText(parsed.payload) : decodeURIComponent(parsed.payload)\n }\n }\n if (parsed?.mimeType.startsWith(\"image/\")) {\n return {\n kind: \"raster\",\n buffer: parsed.encoding === \"base64\"\n ? base64ToBytes(parsed.payload)\n : new TextEncoder().encode(decodeURIComponent(parsed.payload))\n }\n }\n\n return null\n}\n\nconst resolveObjectPositionToken = (\n value: string | undefined,\n axis: \"x\" | \"y\"\n): number | `${number}%` => {\n const normalized = value?.trim().toLowerCase()\n if (!normalized) return \"50%\"\n if (axis === \"x\") {\n if (normalized === \"left\") return \"0%\"\n if (normalized === \"center\") return \"50%\"\n if (normalized === \"right\") return \"100%\"\n } else {\n if (normalized === \"top\") return \"0%\"\n if (normalized === \"center\") return \"50%\"\n if (normalized === \"bottom\") return \"100%\"\n }\n if (normalized.endsWith(\"%\")) return `${Number.parseFloat(normalized)}%`\n const resolved = parseSizeValue(normalized, 0)\n if (resolved != null) return resolved\n return \"50%\"\n}\n\nconst resolveImageObjectPosition = (style: ResolvedStyle): { x: number | `${number}%`; y: number | `${number}%` } => {\n const objectPosition = typeof style.objectPosition === \"string\" ? style.objectPosition.trim() : \"\"\n if (!objectPosition) return { x: \"50%\", y: \"50%\" }\n\n const [first, second] = objectPosition.split(/\\s+/)\n if (second == null) {\n const isVertical = first === \"top\" || first === \"bottom\"\n return isVertical\n ? { x: \"50%\", y: resolveObjectPositionToken(first, \"y\") }\n : { x: resolveObjectPositionToken(first, \"x\"), y: \"50%\" }\n }\n\n return {\n x: resolveObjectPositionToken(first, \"x\"),\n y: resolveObjectPositionToken(second, \"y\")\n }\n}\n\nconst resolveObjectFitFrame = (\n fit: ResolvedStyle[\"objectFit\"],\n containerWidth: number,\n containerHeight: number,\n intrinsicWidth: number,\n intrinsicHeight: number,\n positionX: number | `${number}%`,\n positionY: number | `${number}%`\n): { width: number; height: number; xOffset: number; yOffset: number } => {\n const containerRatio = containerWidth / containerHeight\n const intrinsicRatio = intrinsicWidth / intrinsicHeight\n const percentX = typeof positionX === \"string\" ? Number.parseFloat(positionX) / 100 : null\n const percentY = typeof positionY === \"string\" ? Number.parseFloat(positionY) / 100 : null\n const xOffsetFromPercent = (renderWidth: number) => (containerWidth - renderWidth) * (percentX ?? 0.5)\n const yOffsetFromPercent = (renderHeight: number) => (containerHeight - renderHeight) * (percentY ?? 0.5)\n\n switch (fit) {\n case \"contain\": {\n if (containerRatio > intrinsicRatio) {\n const height = containerHeight\n const width = height * intrinsicRatio\n return {\n width,\n height,\n xOffset: typeof positionX === \"number\" ? positionX : xOffsetFromPercent(width),\n yOffset: typeof positionY === \"number\" ? positionY : 0\n }\n }\n const width = containerWidth\n const height = width / intrinsicRatio\n return {\n width,\n height,\n xOffset: typeof positionX === \"number\" ? positionX : 0,\n yOffset: typeof positionY === \"number\" ? positionY : yOffsetFromPercent(height)\n }\n }\n case \"cover\": {\n if (containerRatio > intrinsicRatio) {\n const width = containerWidth\n const height = width / intrinsicRatio\n return {\n width,\n height,\n xOffset: typeof positionX === \"number\" ? positionX : 0,\n yOffset: typeof positionY === \"number\" ? positionY : yOffsetFromPercent(height)\n }\n }\n const height = containerHeight\n const width = height * intrinsicRatio\n return {\n width,\n height,\n xOffset: typeof positionX === \"number\" ? positionX : xOffsetFromPercent(width),\n yOffset: typeof positionY === \"number\" ? positionY : 0\n }\n }\n case \"none\": {\n return {\n width: intrinsicWidth,\n height: intrinsicHeight,\n xOffset: typeof positionX === \"number\" ? positionX : xOffsetFromPercent(intrinsicWidth),\n yOffset: typeof positionY === \"number\" ? positionY : yOffsetFromPercent(intrinsicHeight)\n }\n }\n case \"scale-down\": {\n const contain = resolveObjectFitFrame(\"contain\", containerWidth, containerHeight, intrinsicWidth, intrinsicHeight, positionX, positionY)\n const none = resolveObjectFitFrame(\"none\", containerWidth, containerHeight, intrinsicWidth, intrinsicHeight, positionX, positionY)\n return contain.width < none.width ? contain : none\n }\n default:\n return {\n width: containerWidth,\n height: containerHeight,\n xOffset: typeof positionX === \"number\" ? positionX : 0,\n yOffset: typeof positionY === \"number\" ? positionY : 0\n }\n }\n}\n\nconst hasBorderStyle = (node: LayoutNode): boolean =>\n node.style.borderTop.width > 0\n || node.style.borderRight.width > 0\n || node.style.borderBottom.width > 0\n || node.style.borderLeft.width > 0\n\nconst hasUniformBorderStyle = (node: LayoutNode): boolean => {\n const top = node.style.borderTop\n const right = node.style.borderRight\n const bottom = node.style.borderBottom\n const left = node.style.borderLeft\n return top.width > 0\n && top.width === right.width\n && top.width === bottom.width\n && top.width === left.width\n && top.color === right.color\n && top.color === bottom.color\n && top.color === left.color\n && (top.style ?? \"solid\") === (right.style ?? \"solid\")\n && (top.style ?? \"solid\") === (bottom.style ?? \"solid\")\n && (top.style ?? \"solid\") === (left.style ?? \"solid\")\n}\n\nconst nodeBorderRadius = (node: LayoutNode): number => {\n const value = node.style.borderRadius\n if (typeof value === \"number\" && Number.isFinite(value)) return Math.max(0, value)\n if (typeof value === \"string\") {\n const parsed = Number.parseFloat(value)\n return Number.isFinite(parsed) ? Math.max(0, parsed) : 0\n }\n return 0\n}\n\nconst borderDashPattern = (style: string | undefined): { length: number; space: number } | null => {\n if (style === \"dashed\") return { length: 3, space: 2 }\n if (style === \"dotted\") return { length: 1, space: 1 }\n return null\n}\n\nconst TABLE_STRUCTURE_TYPES = new Set<LayoutNode[\"type\"]>([\n \"TABLE\",\n \"TABLE_HEAD\",\n \"TABLE_BODY\",\n \"TABLE_FOOTER\",\n \"TABLE_ROW\",\n \"TABLE_CELL\",\n])\n\n/**\n * Tagged PDF Phase-2: real structure-tree emission via pdfkit's marking API\n * (`tagged: true` document option + `markStructureContent` / `struct` /\n * `addStructure`, which maintain MarkInfo, StructTreeRoot, the ParentTree\n * number tree, and per-page StructParents entries).\n *\n * Content mapping:\n * - TEXT -> P, LINK -> Link, IMAGE -> Figure (/Alt from the `alt` prop).\n * - TABLE -> Table, TABLE_HEAD -> THead, TABLE_BODY -> TBody,\n * TABLE_FOOTER -> TFoot, TABLE_ROW -> TR, TABLE_CELL -> TD (TH for cells\n * under THead). Containers carry no MCID; only leaves open BDC/EMC\n * marked-content chunks, so each leaf closes before the next opens and\n * the content stream stays a flat sibling sequence while the tree nests.\n * - Nodes in a `fixed` band (headers/footers, Pagination artifacts) and all\n * other drawn output (VIEW decorations, SVG, NOTE, CANVAS, form widgets,\n * table backgrounds/borders) -> /Artifact BMC...EMC (no MCID).\n *\n * Approximations (documented gaps toward veraPDF PDF/UA-1):\n * - Background/border rects of a TEXT/LINK/IMAGE leaf share that leaf's\n * MCID chunk instead of being split into separate Artifact chunks.\n * - Link structure elements carry the MCID kid only (no OBJR reference to\n * the link annotation); image Figure elements carry /Alt but no /BBox.\n * - Nested tables in the flattened table path (`__tableDrawNodes`) are\n * folded into the outer Table element instead of nesting.\n * - No heading primitives exist yet, so nothing maps to H1-H6.\n * - No role-map customization, no XMP UA identification metadata, no\n * font ToUnicode guarantees beyond what pdfkit already emits, and the\n * PDF version is not forced up (pdfkit defaults to 1.3; veraPDF UA-1\n * wants 1.7+).\n */\nconst TAGGED_LEAF_TAGS: Partial<Record<LayoutNode[\"type\"], string>> = {\n TEXT: \"P\",\n LINK: \"Link\",\n IMAGE: \"Figure\"\n}\n\nconst TAGGED_TABLE_SECTION_TAGS: Partial<Record<LayoutNode[\"type\"], string>> = {\n TABLE_HEAD: \"THead\",\n TABLE_BODY: \"TBody\",\n TABLE_FOOTER: \"TFoot\"\n}\n\nconst TAGGED_TABLE_SECTION_FRAMES = new Set([\"THead\", \"TBody\", \"TFoot\"])\n\n// Node types that never have meaningful drawn children: fully rendered by\n// drawRenderableNode, so the tagged table walker must not recurse into them.\nconst TAGGED_TABLE_LEAF_TYPES = new Set<LayoutNode[\"type\"]>([\n \"TEXT\",\n \"LINK\",\n \"IMAGE\",\n \"SVG\",\n \"NOTE\",\n \"CANVAS\",\n \"TEXT_INPUT\",\n \"SELECT\",\n \"LIST\",\n \"CHECKBOX\"\n])\n\ntype TaggedStructElement = ReturnType<PdfKitDocument[\"struct\"]>\ntype TaggedStructContent = ReturnType<PdfKitDocument[\"markStructureContent\"]>\ntype TaggedFrameChild = TaggedStructElement | TaggedStructContent\ntype TaggedFrame = { tag: string; children: TaggedFrameChild[]; lang?: string }\n\ntype BorderRect = {\n x: number\n y: number\n width: number\n height: number\n}\n\n\nconst serializeSvgNode = (node: LayoutNode): string => {\n const cached = serializedSvgMarkupCache.get(node)\n if (cached != null) return cached\n if (node.type === \"TEXT_INSTANCE\") return escapeXml(node.text ?? \"\")\n const tagName = SVG_NODE_TAGS[node.type]\n if (!tagName) return \"\"\n\n const attrs = new Map<string, string>()\n const nodeProps = node.props as Record<string, unknown>\n const nodeStyle = node.style as Record<string, unknown>\n for (const key of SVG_ATTR_KEYS) {\n const value = nodeProps[key] ?? nodeStyle[key]\n if (value != null) attrs.set(toSvgAttrName(key), escapeXml(value))\n }\n\n if (node.type === \"SVG\") {\n attrs.set(\"xmlns\", attrs.get(\"xmlns\") ?? \"http://www.w3.org/2000/svg\")\n attrs.set(\"width\", escapeXml(node.box.width))\n attrs.set(\"height\", escapeXml(node.box.height))\n }\n\n if (node.style.color && !attrs.has(\"color\")) attrs.set(\"color\", escapeXml(node.style.color))\n if (node.style.backgroundColor && !attrs.has(\"fill\") && node.type === \"RECT\") attrs.set(\"fill\", escapeXml(node.style.backgroundColor))\n\n const attrString = Array.from(attrs.entries())\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(\" \")\n const childrenMarkup = (node.children as LayoutNode[]).map((child) => serializeSvgNode(child)).join(\"\")\n const textContent = node.text ? escapeXml(node.text) : \"\"\n const body = textContent || childrenMarkup\n const markup = body\n ? `<${tagName}${attrString ? ` ${attrString}` : \"\"}>${body}</${tagName}>`\n : `<${tagName}${attrString ? ` ${attrString}` : \"\"} />`\n serializedSvgMarkupCache.set(node, markup)\n return markup\n}\n\nconst flattenNodeText = (node: LayoutNode): string => extractText(node)\n\nconst pdfNumber = (value: number): number => {\n if (value > -1e21 && value < 1e21) return Math.round(value * 1e6) / 1e6\n throw new Error(`unsupported number: ${value}`)\n}\n\n/**\n * Emit one shaped glyph run at (x, y). All geometry arrives in points; the\n * emitter converts to text-space units for TJ adjustments.\n */\nconst renderShapedGlyphRun = (\n document: PdfKitDocument,\n run: ShapedGlyphRun,\n x: number,\n y: number\n): void => {\n const internal = document as InternalPdfDocument\n const encoding = run.encoding\n\n let encodedGlyphs: string[]\n let advancesPt: number[]\n let naturalWidthUnits: number[] // glyph widths in 1000/em text-space units\n if (encoding.type === \"embedded\") {\n const font = internal._font\n encodedGlyphs = encodeLaidOutGlyphs(font, encoding.glyphs)\n advancesPt = encoding.positions.map((position) => position.xAdvance)\n const unitsPerEm = font.font?.unitsPerEm || 1000\n naturalWidthUnits = encoding.glyphs.map((glyph) => ((glyph.advanceWidth ?? 0) / unitsPerEm) * 1000)\n } else {\n encodedGlyphs = encoding.bytes.map((byte) => byte.toString(16).padStart(2, \"0\"))\n advancesPt = encoding.advances\n const scale = 1000 / internal._fontSize\n // Standard-font natural advance = laid-out advance minus letter spacing.\n naturalWidthUnits = advancesPt.map((advance) => Math.max(0, (advance - run.style.letterSpacing) * scale))\n }\n\n document.save()\n document.transform(1, 0, 0, -1, 0, document.page.height)\n let cursorX = x\n const cursorY = document.page.height - y\n if (internal.page.fonts[internal._font.id] == null) {\n internal.page.fonts[internal._font.id] = internal._font.ref()\n }\n\n const commands: string[] = []\n let last = 0\n let hadOffset = false\n\n document.addContent(\"BT\")\n document.addContent(`1 0 0 1 ${pdfNumber(cursorX)} ${pdfNumber(cursorY)} Tm`)\n document.addContent(`/${internal._font.id} ${pdfNumber(internal._fontSize)} Tf`)\n\n const addSegment = (current: number): void => {\n if (last < current) {\n const hex = encodedGlyphs.slice(last, current).join(\"\")\n const adjustment =\n advancesPt[current - 1] * (1000 / internal._fontSize) - naturalWidthUnits[current - 1]\n commands.push(`<${hex}> ${pdfNumber(-adjustment)}`)\n }\n last = current\n }\n\n const flush = (current: number): void => {\n addSegment(current)\n if (commands.length > 0) {\n document.addContent(`[${commands.join(\" \")}] TJ`)\n commands.length = 0\n }\n }\n\n const offsets = encoding.type === \"embedded\"\n ? encoding.positions.map((position) => ({ x: position.xOffset, y: position.yOffset }))\n : null\n\n for (let index = 0; index < encodedGlyphs.length; index += 1) {\n const offset = offsets?.[index]\n if (offset && (offset.x !== 0 || offset.y !== 0)) {\n flush(index)\n document.addContent(\n `1 0 0 1 ${pdfNumber(cursorX + offset.x)} ${pdfNumber(cursorY + offset.y)} Tm`\n )\n flush(index + 1)\n hadOffset = true\n } else {\n if (hadOffset) {\n document.addContent(`1 0 0 1 ${pdfNumber(cursorX)} ${pdfNumber(cursorY)} Tm`)\n hadOffset = false\n }\n const desired = advancesPt[index]\n const natural = naturalWidthUnits[index] * (internal._fontSize / 1000)\n if (Math.abs(desired - natural) > 1e-6) addSegment(index + 1)\n }\n cursorX += advancesPt[index]\n }\n\n flush(encodedGlyphs.length)\n document.addContent(\"ET\")\n document.restore()\n}\n\nconst renderDecorationLine = (\n document: PdfKitDocument,\n decorationLine: TextDecorationLine\n): void => {\n const style = decorationLine.style ?? \"\"\n document.save()\n document.lineWidth(decorationLine.rect.height)\n document.strokeOpacity(decorationLine.opacity)\n\n if (/dashed/.test(style)) {\n document.dash(3 * decorationLine.rect.height, {})\n } else if (/dotted/.test(style)) {\n document.dash(decorationLine.rect.height, {})\n }\n\n if (/wavy/.test(style)) {\n const dist = Math.max(2, decorationLine.rect.height)\n let step = 1.1 * dist\n const stepCount = Math.max(1, Math.floor(decorationLine.rect.width / (2 * step)))\n const remainingWidth = decorationLine.rect.width - stepCount * 2 * step\n const adjustment = remainingWidth / stepCount / 2\n step += adjustment\n const cp1y = decorationLine.rect.y + dist\n const cp2y = decorationLine.rect.y - dist\n let currentX = decorationLine.rect.x\n\n document.moveTo(decorationLine.rect.x, decorationLine.rect.y)\n for (let index = 0; index < stepCount; index += 1) {\n document.bezierCurveTo(\n currentX + step,\n cp1y,\n currentX + step,\n cp2y,\n currentX + 2 * step,\n decorationLine.rect.y\n )\n currentX += 2 * step\n }\n } else {\n document.moveTo(decorationLine.rect.x, decorationLine.rect.y)\n document.lineTo(decorationLine.rect.x + decorationLine.rect.width, decorationLine.rect.y)\n\n if (/double/.test(style)) {\n document.moveTo(decorationLine.rect.x, decorationLine.rect.y + decorationLine.rect.height * 2)\n document.lineTo(\n decorationLine.rect.x + decorationLine.rect.width,\n decorationLine.rect.y + decorationLine.rect.height * 2\n )\n }\n }\n\n document.stroke(decorationLine.color)\n document.restore()\n}\n\nclass PdfKitBackend implements RenderBackend {\n readonly document: PdfKitDocument\n readonly graphics: RenderGraphicsContext\n private initializedForm = false\n private readonly fieldSetStack: ReturnType<PdfKitDocument[\"formField\"]>[] = []\n private readonly namedDestinations = new Set<string>()\n private readonly bookmarkRegistry = new Map<string, ReturnType<PdfKitDocument[\"outline\"][\"addItem\"]>>()\n private readonly seenBookmarks = new Set<string>()\n private readonly embeddedFontAliases = new Map<Uint8Array, string>()\n private readonly batchedTableBorderNodes = new WeakSet<LayoutNode>()\n private readonly openedImages = new Map<string, { image: unknown; width: number; height: number }>()\n private readonly openedImagesByObject = new WeakMap<object, { image: unknown; width: number; height: number }>()\n private currentPageOrigin = { x: 0, y: 0 }\n private readonly taggedMode: ResolvedTaggedMode\n private readonly taggedEnabled: boolean\n // PDF/A color output (sRGB OutputIntent + page transparency Group) applies\n // exactly when the Document claims PDF/A conformance via `pdfaid`; see\n // output-intent.ts. Default output without `pdfaid` is unchanged.\n private readonly pdfaColorOutput: boolean\n private readonly ancestorStack: LayoutNode[] = []\n private readonly taggedFrames: TaggedFrame[] = []\n constructor(private readonly root: LayoutNode, private readonly profiler: ProfileCollector) {\n // Fail fast on invalid tagged/Document-prop combinations with the\n // Phase-1 error strings before any PDF bytes are written.\n this.taggedMode = resolveTagged(root.props.tagged)\n validateTaggedOption(root.props.tagged, {\n language: root.props.language,\n title: root.props.title,\n pdfVersion: root.props.pdfVersion\n })\n this.taggedEnabled = this.taggedMode !== \"off\"\n // XMP fragments only survive into the file when pdfkit emits the\n // /Metadata stream, which it skips for PDF 1.3 \u2014 fail fast instead of\n // silently dropping the Factur-X / PDF/A blocks.\n if ((root.props.xmp?.length ?? 0) > 0 || root.props.pdfaid != null) {\n const version = root.props.pdfVersion\n if (version == null || version === \"1.3\") {\n throw new Error(\n `Invalid Document \"xmp\"/\"pdfaid\" option: XMP metadata requires a \"pdfVersion\" of \"1.4\" or newer (e.g. pdfVersion=\"1.7\"), otherwise pdfkit omits the /Metadata stream.`\n )\n }\n }\n const info = omitNilValues({\n Title: root.props.title,\n Author: root.props.author,\n Subject: root.props.subject,\n Creator: root.props.creator ?? \"jsxpdf\",\n Producer: root.props.producer ?? \"jsxpdf\",\n Keywords: root.props.keywords,\n CreationDate: root.props.creationDate ?? new Date(),\n ModDate: root.props.modificationDate ?? root.props.creationDate ?? new Date()\n })\n this.document = new PDFDocument({\n autoFirstPage: false,\n // Browser builds stub node:zlib, so content compression is disabled\n // outside Node (PDF viewers handle uncompressed streams natively).\n compress: isNodeRuntime(),\n pdfVersion: root.props.pdfVersion as \"1.3\" | \"1.4\" | \"1.5\" | \"1.6\" | \"1.7\" | \"1.7ext3\" | undefined,\n lang: root.props.language,\n displayTitle: root.props.title != null,\n tagged: this.taggedEnabled,\n info\n } as never)\n if (root.props.pageLayout) {\n ;(this.document as InternalPdfDocument)._root.data.PageLayout = toPdfCatalogName(root.props.pageLayout)\n }\n if (root.props.pageMode) {\n ;(this.document as InternalPdfDocument)._root.data.PageMode = toPdfCatalogName(root.props.pageMode)\n }\n this.pdfaColorOutput = shouldApplyPdfAColorOutput(root.props)\n if (this.pdfaColorOutput) {\n ensureSrgbOutputIntent(this.document as unknown as Parameters<typeof ensureSrgbOutputIntent>[0])\n }\n this.graphics = {\n save: () => this.document.save(),\n restore: () => this.document.restore(),\n transform: (a, b, c, d, e, f) => {\n this.document.transform(a, b, c, d, e, f)\n },\n clipRect: (x, y, width, height) => {\n this.document.rect(x, y, width, height).clip()\n }\n }\n }\n\n private hasNodeType(type: LayoutNode[\"type\"], node: LayoutNode = this.root): boolean {\n if (node.type === type) return true\n return (node.children as LayoutNode[]).some((child) => this.hasNodeType(type, child))\n }\n\n beginDocument(_doc: LayoutNode): void {\n if (\n this.hasNodeType(\"TEXT_INPUT\") ||\n this.hasNodeType(\"SELECT\") ||\n this.hasNodeType(\"CHECKBOX\") ||\n this.hasNodeType(\"LIST\")\n ) {\n this.document.font(\"Helvetica\").fontSize(12)\n this.document.initForm()\n this.initializedForm = true\n }\n }\n\n beginPage(page: LayoutNode): void {\n this.currentPageOrigin = { x: page.absoluteX, y: page.absoluteY }\n this.document.addPage({\n size: [page.box.width, page.box.height],\n margin: 0,\n userUnit: (page.props.dpi ?? 72) / 72\n } as never)\n if (this.pdfaColorOutput) {\n ensurePageTransparencyGroup(this.document as unknown as Parameters<typeof ensurePageTransparencyGroup>[0])\n }\n }\n\n pagePoint(x: number, y: number): { x: number; y: number } {\n return {\n x: x - this.currentPageOrigin.x,\n y: y - this.currentPageOrigin.y\n }\n }\n\n enterNode(node: LayoutNode): void {\n this.ancestorStack.push(node)\n if (node.type !== \"FIELD_SET\") return\n if (!(this.document as InternalPdfDocument)._root.data.AcroForm) {\n this.document.font(\"Helvetica\").fontSize(12)\n this.document.initForm()\n this.initializedForm = true\n }\n this.fieldSetStack.push(this.document.formField(node.props.name ?? \"\"))\n }\n\n leaveNode(node: LayoutNode): void {\n const index = this.ancestorStack.lastIndexOf(node)\n if (index >= 0) this.ancestorStack.splice(index, 1)\n if (node.type !== \"FIELD_SET\") return\n this.fieldSetStack.pop()\n }\n\n private primaryFontFamily(fontFamily: ResolvedStyle[\"fontFamily\"]): string {\n return Array.isArray(fontFamily) ? fontFamily[0] ?? \"Helvetica\" : fontFamily\n }\n\n private resolveFontSource(style: ResolvedStyle): string | Uint8Array {\n const cacheKey = `${Array.isArray(style.fontFamily) ? style.fontFamily.join(\",\") : style.fontFamily}::${style.fontWeight ?? \"\"}::${style.fontStyle ?? \"\"}`\n const cached = resolvedFontSourceCache.get(cacheKey)\n if (cached != null) return cached\n const descriptor = {\n fontFamily: style.fontFamily,\n fontWeight: style.fontWeight,\n fontStyle: style.fontStyle\n }\n const fontData = Font.getFontData(descriptor)\n let finalSource: string | Uint8Array | null = null\n if (fontData?.kind === \"standard\") {\n finalSource = fontData.name\n } else {\n const resolved = Font.getRenderSource(descriptor)\n const fallbackFamily = this.primaryFontFamily(style.fontFamily)\n finalSource = resolved ?? (BUILTIN_PDF_FONTS.has(fallbackFamily) ? fallbackFamily : null)\n }\n if (finalSource == null) {\n throw new Error(\n `Font family \"${this.primaryFontFamily(style.fontFamily)}\" is not registered. Register it with Font.register(...) before rendering, or use a built-in PDF font like Helvetica.`\n )\n }\n if (\n typeof finalSource === \"string\"\n && BUILTIN_PDF_FONTS.has(finalSource)\n && !isNodeRuntime()\n && !BROWSER_DEFAULT_STD_FONTS.has(finalSource)\n && !extraPdfStandardFontsRegistered\n ) {\n throw new Error(\n `Built-in PDF font \"${finalSource}\" is not registered in this browser bundle. Import { registerPdfStandardFonts } from \"@jsxpdf/jsxpdf/standard-fonts\" and await it once at startup, or Font.register(...) a font file. Helvetica and its bold/oblique variants are always available.`\n )\n }\n resolvedFontSourceCache.set(cacheKey, finalSource)\n return finalSource\n }\n\n /**\n * Resolve a style to something `document.font()` accepts. Binary sources are\n * registered once under a stable alias so PDFKit caches the parsed face \u2014\n * passing buffers directly would re-parse the font on every call.\n *\n * Aliases are keyed by the resolved source, not the style key: two style\n * keys (e.g. regular and bold) that resolve to the same face must share one\n * alias, or PDFKit's postscript-name dedupe returns early on every call and\n * re-opens (and re-parses) the font for each text run.\n */\n private resolveDocumentFont(style: ResolvedStyle): string {\n const source = this.resolveFontSource(style)\n if (typeof source === \"string\") return source\n let alias = this.embeddedFontAliases.get(source)\n if (alias == null) {\n alias = `JsxpdfEmbedded${this.embeddedFontAliases.size + 1}`\n this.document.registerFont(alias, source)\n this.embeddedFontAliases.set(source, alias)\n }\n return alias\n }\n\n private applyFontStyle(style: ResolvedStyle): void {\n this.document.font(this.resolveDocumentFont(style)).fontSize(style.fontSize)\n }\n\n private resolveText(node: LayoutNode): string {\n if (typeof node.props.render === \"function\") {\n return String(node.props.render({\n pageNumber: node.pageNumber,\n totalPages: this.root.children.length\n }) ?? \"\")\n }\n return node.text ?? \"\"\n }\n\n private getTextRenderWidth(node: LayoutNode, text: string): number {\n if (!text) return node.box.width\n const measuredWidth = node.measuredText?.width ?? 0\n const safetyPadding = node.style.fontSize * 0.35\n return Math.max(node.box.width, measuredWidth + safetyPadding)\n }\n\n private drawTextLines(node: LayoutNode, x: number, y: number): void {\n const measured = node.measuredText\n const shapedLines = measured?.shapedLines\n\n if (!shapedLines || shapedLines.length === 0) {\n if (!this.resolveText(node)) return\n throw new Error(\n \"Text node was not shaped by the layout pipeline. This indicates a broken pipeline; please report it.\"\n )\n }\n\n let lineY = y\n let lastFontKey: string | null = null\n let lastFontSize: number | null = null\n let lastFillValue: string | null = null\n let lastFillOpacity: number | null = null\n for (const line of shapedLines) {\n const lineWidth = Math.max(0, line.width)\n const baseX =\n node.style.textAlign === \"center\"\n ? x + Math.max(0, (node.box.width - lineWidth) / 2)\n : node.style.textAlign === \"right\"\n ? x + Math.max(0, node.box.width - lineWidth)\n : x\n\n this.document.save()\n this.document.translate(baseX, lineY)\n let runX = 0\n\n for (const run of line.runs) {\n if (run.encoding.type === \"embedded\" && run.encoding.glyphs.length === 0) continue\n if (run.encoding.type === \"standard\" && run.encoding.bytes.length === 0) continue\n\n const style = run.style\n const fontAlias = this.resolveDocumentFont(style)\n const fill = resolveColor(style.color)\n const fontSize = style.fontSize\n\n if (lastFillValue !== fill.value) {\n this.document.fillColor(fill.value)\n lastFillValue = fill.value\n }\n if (lastFillOpacity !== fill.opacity) {\n this.document.fillOpacity(fill.opacity)\n lastFillOpacity = fill.opacity\n }\n if (lastFontKey !== fontAlias || lastFontSize !== fontSize) {\n this.document.font(fontAlias).fontSize(fontSize)\n lastFontKey = fontAlias\n lastFontSize = fontSize\n }\n\n renderShapedGlyphRun(this.document, run, runX, line.baseline)\n runX += run.xAdvance\n }\n this.document.restore()\n\n if (line.decorationLines.length > 0) {\n this.document.save()\n this.document.translate(baseX, lineY)\n for (const decorationLine of line.decorationLines) {\n renderDecorationLine(this.document, decorationLine)\n }\n this.document.restore()\n }\n\n lineY += line.height\n }\n }\n\n private getSvgMarkup(source: unknown): string | null {\n const unwrapped = unwrapImageSource(source)\n if (typeof unwrapped !== \"string\") return null\n const svgBase64DataUriMatch = unwrapped.match(/^data:image\\/svg\\+xml;base64,([A-Za-z0-9+/=]+)$/)\n if (svgBase64DataUriMatch) return base64ToText(svgBase64DataUriMatch[1])\n const svgUriDataUriMatch = unwrapped.match(/^data:image\\/svg\\+xml(?:;charset=[^;,]+|;utf-?8)?,(.*)$/i)\n if (svgUriDataUriMatch) return decodeURIComponent(svgUriDataUriMatch[1])\n const trimmedSource = unwrapped.trim()\n const svgStart = trimmedSource.indexOf(\"<svg\")\n if (svgStart >= 0) return trimmedSource.slice(svgStart)\n return null\n }\n\n private createCanvasPainter(x: number, y: number) {\n const doc = this.document\n const painter = {\n save: () => {\n doc.save()\n return painter\n },\n restore: () => {\n doc.restore()\n return painter\n },\n translate: (dx: number, dy: number) => {\n doc.translate(x + dx, y + dy)\n return painter\n },\n scale: (factor: number) => {\n doc.scale(factor)\n return painter\n },\n lineWidth: (value: number) => {\n doc.lineWidth(value)\n return painter\n },\n strokeColor: (value: string) => {\n doc.strokeColor(resolveColor(value).value)\n return painter\n },\n fillColor: (value: string) => {\n doc.fillColor(resolveColor(value).value)\n return painter\n },\n moveTo: (dx: number, dy: number) => {\n doc.moveTo(x + dx, y + dy)\n return painter\n },\n lineTo: (dx: number, dy: number) => {\n doc.lineTo(x + dx, y + dy)\n return painter\n },\n rect: (dx: number, dy: number, width: number, height: number) => {\n doc.rect(x + dx, y + dy, width, height)\n return painter\n },\n circle: (dx: number, dy: number, radius: number) => {\n doc.circle(x + dx, y + dy, radius)\n return painter\n },\n text: (text: string, dx: number, dy: number, options?: PDFKit.Mixins.TextOptions) => {\n doc.text(text, x + dx, y + dy, options)\n return painter\n },\n stroke: () => {\n doc.stroke()\n return painter\n },\n fill: (rule?: string) => {\n doc.fill(rule as never)\n return painter\n },\n fillAndStroke: (fillRule?: string) => {\n doc.fillAndStroke(fillRule as never)\n return painter\n },\n doc\n }\n return painter\n }\n\n private normalizeBookmark(bookmark: PdfBookmark): Exclude<PdfBookmark, string> {\n return typeof bookmark === \"string\"\n ? { title: bookmark, expanded: false, fit: false }\n : bookmark\n }\n\n private registerNamedDestination(node: LayoutNode, x: number, y: number): void {\n if (!node.props.id || this.namedDestinations.has(node.props.id)) return\n this.document.addNamedDestination(node.props.id, \"XYZ\", x, y, null)\n this.namedDestinations.add(node.props.id)\n }\n\n private registerBookmark(node: LayoutNode): void {\n const rawBookmark = node.props.bookmark\n if (!rawBookmark) return\n const bookmark = this.normalizeBookmark(rawBookmark)\n const ref = String(bookmark.ref ?? bookmark.title)\n if (this.seenBookmarks.has(ref)) return\n const parent = bookmark.parent != null ? this.bookmarkRegistry.get(String(bookmark.parent)) : this.document.outline\n const pageNumber = typeof node.pageNumber === \"number\" && node.pageNumber >= 1 ? node.pageNumber - 1 : null\n // PDFKit 0.20 resolves `options.pageNumber` to a page destination at runtime,\n // but @types/pdfkit still only declares `{ expanded }` \u2014 extend the options type.\n const outline = (parent ?? this.document.outline).addItem(bookmark.title, {\n expanded: bookmark.expanded ?? false,\n pageNumber\n } as { expanded: boolean; pageNumber: number | null })\n this.bookmarkRegistry.set(ref, outline)\n this.seenBookmarks.add(ref)\n }\n\n private imageReuseKey(src: unknown, node: LayoutNode): string | null {\n if (typeof node.props.__resolvedAssetSource === \"string\") return node.props.__resolvedAssetSource\n const unwrapped = unwrapImageSource(src)\n if (typeof unwrapped === \"string\") return unwrapped\n if (isBinaryInput(unwrapped)) return fingerprintBinary(toUint8Array(unwrapped))\n return null\n }\n\n private openReusableImage(src: unknown, node: LayoutNode): { image: unknown; width: number; height: number } | null {\n const key = this.imageReuseKey(src, node)\n if (key) {\n const cached = this.openedImages.get(key)\n if (cached) return cached\n }\n if (src != null && typeof src === \"object\") {\n const cached = this.openedImagesByObject.get(src)\n if (cached) return cached\n }\n\n const resolvedSource = readImageSource(src)\n if (resolvedSource?.kind === \"svg\") return null\n const unwrapped = unwrapImageSource(src)\n\n const openSrc = resolvedSource?.kind === \"raster\"\n ? toBinaryImageSource(resolvedSource.buffer)\n : typeof unwrapped === \"string\"\n ? unwrapped\n : isBinaryInput(unwrapped)\n ? toBinaryImageSource(toUint8Array(unwrapped))\n : null\n if (openSrc == null) return null\n\n let image: { width: number; height: number; orientation?: number } | null = null\n try {\n image = (this.document as InternalPdfDocument).openImage(openSrc)\n } catch {\n image = null\n }\n if (!image) return null\n\n // Effective dimensions swap for sideways/upside-down EXIF orientations; the\n // raw PDFImage object is kept so document.image() can embed it.\n const orientation = image.orientation ?? 1\n const effective = orientation > 4\n ? { width: image.height, height: image.width }\n : { width: image.width, height: image.height }\n const result = { image, ...effective }\n\n if (key) this.openedImages.set(key, result)\n if (src != null && typeof src === \"object\") this.openedImagesByObject.set(src, result)\n return result\n }\n\n private fillRect(color: string, x: number, y: number, width: number, height: number): void {\n if (width <= 0 || height <= 0) return\n const resolved = resolveColor(color)\n this.document.save()\n this.document.fillOpacity(resolved.opacity)\n this.document.rect(x, y, width, height).fill(resolved.value)\n this.document.restore()\n }\n\n private drawDebugLabel(label: string, x: number, y: number): void {\n this.document.save()\n this.document\n .font(\"Helvetica\")\n .fontSize(10)\n .fillOpacity(1)\n .fillColor(\"#111111\")\n .text(label, x, Math.max(0, y - 12), { lineBreak: false })\n this.document.restore()\n }\n\n private applyDebug(node: LayoutNode, x: number, y: number, width: number, height: number): void {\n if (!node.props.debug) return\n const marginLeft = Math.max(0, node.style.marginLeft)\n const marginTop = Math.max(0, node.style.marginTop)\n const marginRight = Math.max(0, node.style.marginRight)\n const marginBottom = Math.max(0, node.style.marginBottom)\n const borderLeft = Math.max(0, node.style.borderLeft.width)\n const borderTop = Math.max(0, node.style.borderTop.width)\n const borderRight = Math.max(0, node.style.borderRight.width)\n const borderBottom = Math.max(0, node.style.borderBottom.width)\n const paddingLeft = Math.max(0, node.style.paddingLeft)\n const paddingTop = Math.max(0, node.style.paddingTop)\n const paddingRight = Math.max(0, node.style.paddingRight)\n const paddingBottom = Math.max(0, node.style.paddingBottom)\n\n const marginX = x - marginLeft\n const marginY = y - marginTop\n const marginWidth = width + marginLeft + marginRight\n const marginHeight = height + marginTop + marginBottom\n\n const paddingBoxX = x + borderLeft\n const paddingBoxY = y + borderTop\n const paddingBoxWidth = Math.max(0, width - borderLeft - borderRight)\n const paddingBoxHeight = Math.max(0, height - borderTop - borderBottom)\n\n const contentX = paddingBoxX + paddingLeft\n const contentY = paddingBoxY + paddingTop\n const contentWidth = Math.max(0, paddingBoxWidth - paddingLeft - paddingRight)\n const contentHeight = Math.max(0, paddingBoxHeight - paddingTop - paddingBottom)\n\n this.fillRect(\"#eedcc8\", marginX, marginY, marginWidth, marginTop)\n this.fillRect(\"#eedcc8\", marginX, y + height, marginWidth, marginBottom)\n this.fillRect(\"#eedcc8\", marginX, y, marginLeft, height)\n this.fillRect(\"#eedcc8\", x + width, y, marginRight, height)\n\n this.fillRect(\"#dce8d7\", paddingBoxX, paddingBoxY, paddingBoxWidth, paddingTop)\n this.fillRect(\"#dce8d7\", paddingBoxX, contentY + contentHeight, paddingBoxWidth, paddingBottom)\n this.fillRect(\"#dce8d7\", paddingBoxX, contentY, paddingLeft, contentHeight)\n this.fillRect(\"#dce8d7\", contentX + contentWidth, contentY, paddingRight, contentHeight)\n\n this.fillRect(\"#cfe0f2\", contentX, contentY, contentWidth, contentHeight)\n\n this.document.save()\n this.document\n .lineWidth(0.75)\n .dash(2, { space: 2 })\n .strokeColor(\"#5b6470\")\n .rect(x, y, width, height)\n .stroke()\n this.document.undash()\n this.document.restore()\n\n this.drawDebugLabel(`${Math.round(width)}x${Math.round(height)}`, marginX, marginY)\n }\n\n private normalizeFieldOptions(node: LayoutNode): Record<string, unknown> {\n const options = Array.isArray(node.props.options)\n ? node.props.options.map((entry) =>\n typeof entry === \"string\" ? { label: entry, value: entry } : entry\n )\n : undefined\n const fieldOptions: Record<string, unknown> = {}\n if (node.props.value != null) fieldOptions.V = node.props.value\n if (node.props.defaultValue != null) fieldOptions.defaultValue = node.props.defaultValue\n if (node.props.checked != null) {\n fieldOptions.checked = node.props.checked\n fieldOptions.Checked = node.props.checked\n }\n if (node.props.required) fieldOptions.required = true\n if (node.props.noExport) fieldOptions.noExport = true\n if (node.props.readOnly) fieldOptions.readOnly = true\n if (node.props.align) fieldOptions.align = node.props.align\n if (node.props.multiline) fieldOptions.multiline = true\n if (node.props.password) fieldOptions.password = true\n if (node.props.noSpell) fieldOptions.noSpell = true\n if (node.props.format) fieldOptions.format = node.props.format\n if (node.props.maxLength != null) fieldOptions.MaxLen = node.props.maxLength\n if (node.props.fontSize != null) fieldOptions.fontSize = node.props.fontSize\n if (node.props.placeholder) fieldOptions.TU = new String(node.props.placeholder)\n if (node.props.sort) fieldOptions.sort = true\n if (node.props.edit) fieldOptions.edit = true\n if (node.props.multiSelect || node.props.multiple) fieldOptions.multiSelect = true\n if (node.props.select) fieldOptions.select = node.props.select\n if (node.props.backgroundColor) fieldOptions.backgroundColor = node.props.backgroundColor\n if (node.props.borderColor) fieldOptions.borderColor = node.props.borderColor\n if (node.props.onState) fieldOptions.OnState = node.props.onState\n if (node.props.offState) fieldOptions.OffState = node.props.offState\n if (node.props.xMark) fieldOptions.XMark = true\n const parentFieldSet = this.fieldSetStack.at(-1)\n if (parentFieldSet) fieldOptions.parent = parentFieldSet\n if (options) {\n fieldOptions.Options = options.map((entry) => entry.value)\n fieldOptions.Opt = options.map((entry) => [entry.value, entry.label])\n }\n return fieldOptions\n }\n\n private clipPolygon(points: Array<{ x: number; y: number }>): void {\n if (points.length === 0) return\n this.document.moveTo(points[0].x, points[0].y)\n for (let index = 1; index < points.length; index += 1) {\n this.document.lineTo(points[index].x, points[index].y)\n }\n this.document.closePath().clip()\n }\n\n private strokeBorderSegment(\n points: Array<{ x: number; y: number }>,\n start: { x: number; y: number },\n end: { x: number; y: number },\n width: number,\n color: string | undefined,\n borderStyle?: string\n ): void {\n if (width <= 0) return\n const stroke = resolveColor(color ?? \"#000000\")\n const dash = borderDashPattern(borderStyle)\n this.document.save()\n this.clipPolygon(points)\n this.document\n .strokeOpacity(stroke.opacity)\n .strokeColor(stroke.value)\n .lineWidth(width)\n .lineJoin(\"miter\")\n .lineCap(dash ? \"butt\" : \"butt\")\n if (dash) this.document.dash(dash.length, { space: dash.space })\n this.document\n .moveTo(start.x, start.y)\n .lineTo(end.x, end.y)\n .stroke()\n if (dash) this.document.undash()\n this.document.restore()\n }\n\n private drawBorders(node: LayoutNode, x: number, y: number, width: number, height: number): void {\n if (hasUniformBorderStyle(node)) {\n const stroke = resolveColor(node.style.borderTop.color ?? \"#000000\")\n const dash = borderDashPattern(node.style.borderTop.style)\n const radius = nodeBorderRadius(node)\n const inset = node.style.borderTop.width / 2\n this.document.save()\n this.document\n .lineWidth(node.style.borderTop.width)\n .strokeOpacity(stroke.opacity)\n .strokeColor(stroke.value)\n if (dash) this.document.dash(dash.length, { space: dash.space })\n if (radius > 0) {\n this.document.roundedRect(\n x + inset,\n y + inset,\n width - node.style.borderTop.width,\n height - node.style.borderTop.width,\n Math.max(0, radius - inset)\n ).stroke()\n } else {\n this.document\n .rect(x + inset, y + inset, width - node.style.borderTop.width, height - node.style.borderTop.width)\n .stroke()\n }\n if (dash) this.document.undash()\n this.document.restore()\n return\n }\n\n const top = Math.min(node.style.borderTop.width, height)\n const right = Math.min(node.style.borderRight.width, width)\n const bottom = Math.min(node.style.borderBottom.width, height)\n const left = Math.min(node.style.borderLeft.width, width)\n\n const innerLeftX = x + left\n const innerRightX = x + width - right\n const innerTopY = y + top\n const innerBottomY = y + height - bottom\n\n if (top > 0) {\n this.strokeBorderSegment(\n [\n { x, y },\n { x: x + width, y },\n { x: innerRightX, y: innerTopY },\n { x: innerLeftX, y: innerTopY }\n ],\n { x, y },\n { x: x + width, y },\n Math.max(top, left, right) * 2,\n node.style.borderTop.color,\n node.style.borderTop.style\n )\n }\n\n if (right > 0) {\n this.strokeBorderSegment(\n [\n { x: x + width, y },\n { x: x + width, y: y + height },\n { x: innerRightX, y: innerBottomY },\n { x: innerRightX, y: innerTopY }\n ],\n { x: x + width, y },\n { x: x + width, y: y + height },\n Math.max(right, top, bottom) * 2,\n node.style.borderRight.color,\n node.style.borderRight.style\n )\n }\n\n if (bottom > 0) {\n this.strokeBorderSegment(\n [\n { x: x + width, y: y + height },\n { x, y: y + height },\n { x: innerLeftX, y: innerBottomY },\n { x: innerRightX, y: innerBottomY }\n ],\n { x: x + width, y: y + height },\n { x, y: y + height },\n Math.max(bottom, right, left) * 2,\n node.style.borderBottom.color,\n node.style.borderBottom.style\n )\n }\n\n if (left > 0) {\n this.strokeBorderSegment(\n [\n { x, y: y + height },\n { x, y },\n { x: innerLeftX, y: innerTopY },\n { x: innerLeftX, y: innerBottomY }\n ],\n { x, y: y + height },\n { x, y },\n Math.max(left, top, bottom) * 2,\n node.style.borderLeft.color,\n node.style.borderLeft.style\n )\n }\n }\n\n private canBatchTableBorders(root: LayoutNode): boolean {\n let batchable = false\n const visit = (node: LayoutNode): void => {\n if (!TABLE_STRUCTURE_TYPES.has(node.type)) return\n if ((node.style.transform?.length ?? 0) > 0) return\n if (hasUniformBorderStyle(node)) batchable = true\n for (const child of node.children) visit(child)\n }\n visit(root)\n return batchable\n }\n\n private drawBatchedTableBorders(root: LayoutNode): void {\n const groups = new Map<string, { width: number; color: string; opacity: number; dash: { length: number; space: number } | null; rects: BorderRect[] }>()\n const visit = (node: LayoutNode): void => {\n if (!TABLE_STRUCTURE_TYPES.has(node.type)) return\n if (hasUniformBorderStyle(node) && node.box.width > 0 && node.box.height > 0 && (node.style.transform?.length ?? 0) === 0) {\n const stroke = resolveColor(node.style.borderTop.color ?? \"#000000\")\n const lineWidth = node.style.borderTop.width\n const dash = borderDashPattern(node.style.borderTop.style)\n const { x, y } = this.pagePoint(node.absoluteX, node.absoluteY)\n const key = `${stroke.value}::${stroke.opacity}::${lineWidth}::${dash ? `${dash.length},${dash.space}` : \"solid\"}`\n const group = groups.get(key) ?? { width: lineWidth, color: stroke.value, opacity: stroke.opacity, dash, rects: [] }\n group.rects.push({\n x: x + lineWidth / 2,\n y: y + lineWidth / 2,\n width: node.box.width - lineWidth,\n height: node.box.height - lineWidth,\n })\n groups.set(key, group)\n this.batchedTableBorderNodes.add(node)\n }\n for (const child of node.children) visit(child)\n }\n\n visit(root)\n\n for (const group of groups.values()) {\n if (group.rects.length === 0) continue\n this.document.save()\n this.document\n .lineWidth(group.width)\n .strokeOpacity(group.opacity)\n .strokeColor(group.color)\n if (group.dash) this.document.dash(group.dash.length, { space: group.dash.space })\n for (const rect of group.rects) {\n this.document.rect(rect.x, rect.y, rect.width, rect.height)\n }\n this.document.stroke()\n if (group.dash) this.document.undash()\n this.document.restore()\n }\n }\n\n /**\n * True when the node currently being drawn sits inside a `fixed` band\n * (header/footer repeated on every page). The ancestor stack includes the\n * node itself: walkLayout calls enterNode before drawNode. Fixed-band\n * content is emitted as Pagination Artifact, never as structure leaves.\n */\n private inFixedArtifactBand(): boolean {\n if (!this.taggedEnabled) return false\n return this.ancestorStack.some((node) => node.props.fixed === true)\n }\n\n private emitArtifact(draw: () => void): void {\n this.document.markContent(\"Artifact\")\n try {\n draw()\n } finally {\n this.document.endMarkedContent()\n }\n }\n\n /**\n * Resolve the natural language for a tagged structure element: the node's\n * inherited per-node `lang` (seeded from the Document `language` prop, see\n * `buildNodeTree`) with fallback to the Document `language` prop itself.\n * Returns undefined when no language is known, in which case no /Lang is\n * emitted (preserving the previous output shape for language-less docs).\n */\n private resolveTaggedLang(node?: LayoutNode): string | undefined {\n const candidate = node?.style.lang ?? this.root.props.language\n if (typeof candidate !== \"string\") return undefined\n const trimmed = candidate.trim()\n return trimmed.length > 0 ? trimmed : undefined\n }\n\n /**\n * Draw one structure leaf: open `/Tag << /MCID n >> BDC`, draw, close with\n * EMC (always paired via finally \u2014 marks never span drawNode calls, so\n * pdfkit's auto-close of open struct marks can never misfire), then attach\n * the new structure element to the innermost open table frame or, when\n * outside tables, directly to the StructTreeRoot.\n *\n * The structure element carries /Lang (veraPDF PDF/UA-1 rules 7.2/34 for\n * page-content text and 7.2/22 for Figure /Alt text); pdfkit serializes\n * the `lang` struct option as a `(text-string)` /Lang entry.\n */\n private emitTaggedLeaf(node: LayoutNode, tag: string, draw: () => void): void {\n const content = this.document.markStructureContent(tag)\n try {\n draw()\n } finally {\n this.document.endMarkedContent()\n }\n const options: { lang?: string; alt?: string } = {}\n const lang = this.resolveTaggedLang(node)\n if (lang != null) options.lang = lang\n if (tag === \"Figure\" && typeof node.props.alt === \"string\" && node.props.alt.length > 0) {\n options.alt = node.props.alt\n }\n const element = this.document.struct(tag, options, [content])\n const frame = this.taggedFrames.at(-1)\n if (frame) frame.children.push(element)\n else this.document.addStructure(element)\n }\n\n private pushTableFrame(tag: string, lang?: string): void {\n this.taggedFrames.push(lang != null ? { tag, children: [], lang } : { tag, children: [] })\n }\n\n private closeTaggedFrame(): void {\n const frame = this.taggedFrames.pop()\n if (!frame || frame.children.length === 0) return\n const element = this.document.struct(\n frame.tag,\n frame.lang != null ? { lang: frame.lang } : {},\n frame.children\n )\n const parent = this.taggedFrames.at(-1)\n if (parent) parent.children.push(element)\n else this.document.addStructure(element)\n }\n\n private closeTableCellFrames(): void {\n for (;;) {\n const top = this.taggedFrames.at(-1)?.tag\n if (top === \"TD\" || top === \"TH\" || top === \"TR\") this.closeTaggedFrame()\n else break\n }\n }\n\n private currentTableSection(): string | null {\n for (let index = this.taggedFrames.length - 1; index >= 0; index -= 1) {\n const tag = this.taggedFrames[index]?.tag\n if (tag != null && TAGGED_TABLE_SECTION_FRAMES.has(tag)) return tag\n }\n return null\n }\n\n private drawTableWrapperDeco(child: LayoutNode): void {\n if (isSkippableContainerNode(child)) return\n this.emitArtifact(() => this.drawRenderableNode(child, true))\n }\n\n /**\n * Frame bookkeeping + decoration drawing for TABLE_* wrapper nodes.\n * Returns true when the child is a wrapper (caller must not draw it again\n * or treat it as a leaf).\n */\n private handleTableWrapper(child: LayoutNode): boolean {\n const sectionTag = TAGGED_TABLE_SECTION_TAGS[child.type]\n if (sectionTag != null) {\n this.closeTableCellFrames()\n if (TAGGED_TABLE_SECTION_FRAMES.has(this.taggedFrames.at(-1)?.tag ?? \"\")) {\n this.closeTaggedFrame()\n }\n this.pushTableFrame(sectionTag, this.resolveTaggedLang(child))\n this.drawTableWrapperDeco(child)\n return true\n }\n if (child.type === \"TABLE_ROW\") {\n this.closeTableCellFrames()\n this.pushTableFrame(\"TR\", this.resolveTaggedLang(child))\n this.drawTableWrapperDeco(child)\n return true\n }\n if (child.type === \"TABLE_CELL\") {\n const top = this.taggedFrames.at(-1)?.tag\n if (top === \"TD\" || top === \"TH\") this.closeTaggedFrame()\n this.pushTableFrame(this.currentTableSection() === \"THead\" ? \"TH\" : \"TD\", this.resolveTaggedLang(child))\n this.drawTableWrapperDeco(child)\n return true\n }\n return false\n }\n\n /** Leaf-or-artifact drawing for table children (no recursion: the flat path). */\n private drawTableLeafContent(child: LayoutNode): void {\n const leafTag = TAGGED_LEAF_TAGS[child.type]\n if (leafTag != null) {\n this.emitTaggedLeaf(child, leafTag, () => this.drawRenderableNode(child, true))\n return\n }\n this.emitArtifact(() => this.drawRenderableNode(child, true))\n }\n\n private drawTaggedTableEntry(child: LayoutNode): void {\n if (child.type === \"TEXT_INSTANCE\") return\n if (child.type === \"TABLE\") {\n // Recursive-layout path only (the flat __tableDrawNodes path never\n // recurses): a nested table gets its own properly nested Table element.\n this.drawTableNode(child)\n return\n }\n if (this.handleTableWrapper(child)) {\n for (const grandchild of child.children) this.drawTaggedTableEntry(grandchild)\n return\n }\n if (isSkippableContainerNode(child)) {\n for (const grandchild of child.children) this.drawTaggedTableEntry(grandchild)\n return\n }\n this.drawTableLeafContent(child)\n if (!TAGGED_TABLE_LEAF_TYPES.has(child.type)) {\n for (const grandchild of child.children) this.drawTaggedTableEntry(grandchild)\n }\n }\n\n private drawTaggedTableSubtree(node: LayoutNode): void {\n for (const child of node.children) this.drawTaggedTableEntry(child)\n }\n\n private drawUntaggedTable(node: LayoutNode): void {\n this.drawRenderableNode(node, true)\n const flatDrawNodes = Array.isArray((node.props as { __tableDrawNodes?: unknown }).__tableDrawNodes)\n ? (node.props as { __tableDrawNodes: LayoutNode[] }).__tableDrawNodes\n : null\n if (flatDrawNodes) {\n for (const child of flatDrawNodes) {\n if (child.type === \"TEXT_INSTANCE\" || isSkippableContainerNode(child)) continue\n this.drawRenderableNode(child, true)\n }\n } else {\n this.drawTableSubtree(node)\n }\n }\n\n private drawTableNode(node: LayoutNode): void {\n if (!this.taggedEnabled || this.inFixedArtifactBand()) {\n if (this.taggedEnabled) this.emitArtifact(() => this.drawUntaggedTable(node))\n else this.drawUntaggedTable(node)\n return\n }\n // The table's own background/borders are page graphics, not content.\n this.emitArtifact(() => this.drawRenderableNode(node, true))\n const frameDepth = this.taggedFrames.length\n this.pushTableFrame(\"Table\", this.resolveTaggedLang(node))\n try {\n const flatDrawNodes = Array.isArray((node.props as { __tableDrawNodes?: unknown }).__tableDrawNodes)\n ? (node.props as { __tableDrawNodes: LayoutNode[] }).__tableDrawNodes\n : null\n if (flatDrawNodes) {\n for (const child of flatDrawNodes) {\n if (child.type === \"TEXT_INSTANCE\") continue\n if (child.type === \"TABLE\") {\n // Nested tables are flattened into the outer Table element here:\n // the flat list already contains the nested table's descendants\n // as individual entries, so recursing would draw them twice.\n this.closeTableCellFrames()\n if (TAGGED_TABLE_SECTION_FRAMES.has(this.taggedFrames.at(-1)?.tag ?? \"\")) {\n this.closeTaggedFrame()\n }\n this.emitArtifact(() => this.drawRenderableNode(child, true))\n continue\n }\n if (this.handleTableWrapper(child)) continue\n if (isSkippableContainerNode(child)) continue\n this.drawTableLeafContent(child)\n }\n } else {\n this.drawTaggedTableSubtree(node)\n }\n } finally {\n while (this.taggedFrames.length > frameDepth) this.closeTaggedFrame()\n }\n }\n\n private drawRenderableNode(node: LayoutNode, countBackendOps = true): void {\n if (countBackendOps) this.profiler.addCounter(\"backendOps\")\n const { x, y } = this.pagePoint(node.absoluteX, node.absoluteY)\n const { width, height } = node.box\n if (width <= 0 || height <= 0) return\n if (node.props.id) this.registerNamedDestination(node, x, y)\n if (node.props.bookmark) this.registerBookmark(node)\n\n if (node.style.backgroundColor) {\n const background = resolveColor(node.style.backgroundColor)\n const radius = nodeBorderRadius(node)\n this.document.save()\n this.document.fillOpacity(background.opacity)\n if (radius > 0) this.document.roundedRect(x, y, width, height, radius).fill(background.value)\n else this.document.rect(x, y, width, height).fill(background.value)\n this.document.restore()\n }\n\n if (node.type === \"TABLE\" && this.canBatchTableBorders(node)) {\n this.drawBatchedTableBorders(node)\n } else if (hasBorderStyle(node) && !this.batchedTableBorderNodes.has(node)) {\n this.drawBorders(node, x, y, width, height)\n }\n\n if (node.type === \"TEXT\" || (node.type === \"LINK\" && node.measuredText)) {\n const shouldIsolateText = node.type === \"LINK\" && typeof node.props.href === \"string\" && node.props.href.length > 0\n if (shouldIsolateText) this.document.save()\n this.drawTextLines(node, x, y)\n if (shouldIsolateText) this.document.restore()\n }\n if (node.type === \"LINK\" && node.props.href) {\n if (node.props.href.startsWith(\"#\")) {\n this.document.goTo(x, y, width, height, node.props.href.slice(1))\n } else {\n this.document.link(x, y, width, height, node.props.href)\n }\n }\n\n if (node.type === \"IMAGE\") {\n const src = node.props.src ?? node.props.source\n if (src) {\n const svgMarkup = this.getSvgMarkup(src)\n if (svgMarkup) {\n SVGtoPDF(this.document, svgMarkup, x, y, {\n width,\n height,\n assumePt: true,\n preserveAspectRatio: \"xMidYMid meet\",\n warningCallback: () => {}\n })\n } else {\n const image = this.openReusableImage(src, node)\n if (!image) return\n const position = resolveImageObjectPosition(node.style)\n const frame = resolveObjectFitFrame(\n node.style.objectFit,\n width,\n height,\n image.width,\n image.height,\n position.x,\n position.y\n )\n this.document.save()\n this.document.rect(x, y, width, height).clip()\n this.document.image(image.image as never, x + frame.xOffset, y + frame.yOffset, { width: frame.width, height: frame.height })\n this.document.restore()\n }\n }\n }\n\n if (node.type === \"SVG\") {\n const markup = serializeSvgNode(node)\n if (markup) {\n SVGtoPDF(this.document, markup, x, y, {\n width,\n height,\n assumePt: true,\n preserveAspectRatio: node.props.preserveAspectRatio ?? \"xMidYMid meet\",\n warningCallback: () => {}\n })\n }\n }\n\n if (node.type === \"NOTE\") {\n const noteText = node.props.note ?? node.text ?? flattenNodeText(node)\n if (noteText) {\n this.document.textAnnotation(x, y, width || 16, height || 16, noteText)\n }\n }\n\n if (node.type === \"CANVAS\" && typeof node.props.paint === \"function\") {\n this.document.save()\n this.document.rect(x, y, width, height).clip()\n node.props.paint(this.createCanvasPainter(x, y), width, height)\n this.document.restore()\n }\n\n if (node.type === \"TEXT_INPUT\") {\n this.document.formText(node.props.name ?? node.props.id ?? `text-input-${x}-${y}`, x, y, width, height, this.normalizeFieldOptions(node))\n }\n\n if (node.type === \"SELECT\") {\n this.document.formCombo(node.props.name ?? node.props.id ?? `select-${x}-${y}`, x, y, width, height, this.normalizeFieldOptions(node))\n }\n\n if (node.type === \"LIST\") {\n this.document.formList(node.props.name ?? node.props.id ?? `list-${x}-${y}`, x, y, width, height, this.normalizeFieldOptions(node))\n }\n\n if (node.type === \"CHECKBOX\") {\n this.document.formCheckbox(node.props.name ?? node.props.id ?? `checkbox-${x}-${y}`, x, y, width, height, this.normalizeFieldOptions(node))\n }\n\n this.applyDebug(node, x, y, width, height)\n }\n\n private drawTableSubtree(node: LayoutNode): void {\n for (const child of node.children) {\n if (child.type === \"TEXT_INSTANCE\") continue\n const shouldDrawWrapper = !isSkippableContainerNode(child)\n if (shouldDrawWrapper) this.drawRenderableNode(child, true)\n if (child.type !== \"TEXT\" && child.type !== \"LINK\" && child.type !== \"IMAGE\" && child.type !== \"SVG\" && child.type !== \"NOTE\" && child.type !== \"CANVAS\" && child.type !== \"TEXT_INPUT\" && child.type !== \"SELECT\" && child.type !== \"LIST\" && child.type !== \"CHECKBOX\") {\n this.drawTableSubtree(child)\n }\n }\n }\n\n drawNode(node: LayoutNode): void {\n if (node.type === \"TABLE\") {\n this.drawTableNode(node)\n return\n }\n if (!this.taggedEnabled) {\n this.drawRenderableNode(node, true)\n return\n }\n const leafTag = TAGGED_LEAF_TAGS[node.type]\n if (leafTag != null && !this.inFixedArtifactBand()) {\n this.emitTaggedLeaf(node, leafTag, () => this.drawRenderableNode(node, true))\n return\n }\n this.emitArtifact(() => this.drawRenderableNode(node, true))\n }\n\n endPage(_page?: LayoutNode): void {}\n\n endDocument(): void {\n if (this.root.props.attachments?.length) {\n embedAttachments(this.document, this.root.props.attachments, this.root.props.creationDate ?? new Date())\n }\n // XMP fragments must be appended before document.end(): pdfkit's\n // endMetadata() seals the packet, and full packets must never be passed\n // (pdfkit wraps fragments in its own x:xmpmeta/rdf:RDF shell).\n if (this.root.props.xmp?.length) {\n ;(this.document as unknown as { appendXML(xml: string): void })\n .appendXML(buildXmpCustomSchemaDescriptions(this.root.props.xmp))\n }\n if (this.root.props.pdfaid != null) {\n ;(this.document as unknown as { appendXML(xml: string): void })\n .appendXML(buildXmpPdfAIdDescription(this.root.props.pdfaid))\n }\n // PDF/UA identification (veraPDF UA-1 rule 5/1): claim the part matching\n // the resolved tagged mode.\n if (this.taggedMode === \"ua1\" || this.taggedMode === \"ua2\") {\n ;(this.document as unknown as { appendXML(xml: string): void })\n .appendXML(buildXmpPdfUaIdDescription(this.taggedMode === \"ua2\" ? 2 : 1))\n }\n // Language-tagged dc:title/dc:description (veraPDF UA-1 rule 7.2/33):\n // pdfkit's own _addInfo block hardcodes xml:lang=\"x-default\", so retag\n // its items with the Document language in place. A second appended dc:\n // fragment is NOT an option \u2014 veraPDF's RDF parser throws\n // `Duplicate property or field node` on repeated properties, which voids\n // the whole packet (rules 5/1 and 7.1/9 included).\n const documentLanguage = this.root.props.language\n if (\n documentLanguage != null &&\n documentLanguage.trim() !== \"\" &&\n (this.root.props.title != null || this.root.props.subject != null)\n ) {\n const documentForXmp = this.document as unknown as {\n appendXML(xml: string, newline?: boolean): void\n }\n const originalAppendXML = documentForXmp.appendXML.bind(this.document)\n const retagLanguage = documentLanguage\n documentForXmp.appendXML = (xml: string, newline?: boolean): void => {\n originalAppendXML(retagXmpDefaultLanguage(xml, retagLanguage), newline)\n }\n }\n this.document.end()\n }\n}\n\nconst omitNilValues = <T extends Record<string, unknown>>(value: T): Partial<T> => {\n return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined && entry !== null)) as Partial<T>\n}\n\nconst toPdfCatalogName = (value: string): string =>\n value\n .trim()\n .replace(/^[a-z]/, (match) => match.toUpperCase())\n\nexport const renderPdf = async (layout: LayoutNode, profiler: ProfileCollector): Promise<PdfDocumentStream> => {\n return renderLayout(layout, profiler, () => new PdfKitBackend(layout, profiler)) as Promise<PdfDocumentStream>\n}\n", "/// <reference path=\"./global.d.ts\" />\n\nimport { concatUint8Arrays, type PdfElement, type PdfRenderOptions } from \"@jsxpdf/core\"\nimport {\n createPdfRuntime,\n type CompiledRuntimeTemplate,\n type PdfComponent,\n type PdfRuntimeInstance,\n} from \"@jsxpdf/render\"\nimport { renderPdf } from \"@jsxpdf/render-pdfkit\"\n\ntype PdfDocumentStream = Awaited<ReturnType<typeof renderPdf>>\n\nconst runtime = createPdfRuntime<PdfDocumentStream>(renderPdf)\n\nconst chunkToUint8Array = (chunk: Uint8Array | ArrayBuffer | string): Uint8Array => {\n if (chunk instanceof Uint8Array) return chunk\n if (typeof chunk === \"string\") return new TextEncoder().encode(chunk)\n return new Uint8Array(chunk)\n}\n\nconst collectStreamBytes = (stream: PdfDocumentStream): Promise<Uint8Array> =>\n new Promise<Uint8Array>((resolve, reject) => {\n const chunks: Uint8Array[] = []\n let ended = false\n let finished = false\n let settled = false\n let resolveTimer: ReturnType<typeof setTimeout> | null = null\n\n const settle = () => {\n if (settled) return\n settled = true\n if (resolveTimer) clearTimeout(resolveTimer)\n resolve(concatUint8Arrays(chunks))\n }\n const maybeResolve = () => {\n if (settled) return\n if (ended && finished) return settle()\n if (ended || finished) {\n if (resolveTimer) clearTimeout(resolveTimer)\n resolveTimer = setTimeout(settle, 0)\n }\n }\n\n stream.on(\"data\", (chunk: unknown) => {\n chunks.push(chunkToUint8Array(chunk as Uint8Array | ArrayBuffer | string))\n })\n stream.on(\"end\", () => {\n ended = true\n maybeResolve()\n })\n stream.on(\"finish\", () => {\n finished = true\n maybeResolve()\n })\n stream.on(\"error\", reject)\n })\n\nexport type PdfInstance = PdfRuntimeInstance<PdfDocumentStream> & {\n toUint8Array: () => Promise<Uint8Array>\n toBlob: () => Promise<Blob>\n}\n\nconst wrapInstance = (instance: PdfRuntimeInstance<PdfDocumentStream>): PdfInstance => ({\n ...instance,\n async toUint8Array() {\n return collectStreamBytes(await instance.toStream())\n },\n async toBlob() {\n const bytes = await this.toUint8Array()\n return new Blob([Uint8Array.from(bytes)], { type: \"application/pdf\" })\n },\n})\n\nexport const pdf = (initialValue?: PdfElement, options: PdfRenderOptions = {}): PdfInstance => {\n return wrapInstance(runtime.pdf(initialValue, options))\n}\n\nexport const renderToUint8Array = (\n element: PdfElement,\n options: PdfRenderOptions = {},\n): Promise<Uint8Array> => pdf(element, options).toUint8Array()\n\nexport const renderToBlob = (\n element: PdfElement,\n options: PdfRenderOptions = {},\n): Promise<Blob> => pdf(element, options).toBlob()\n\nexport type CompiledTemplate<Props = unknown> = Omit<\n CompiledRuntimeTemplate<Props, PdfDocumentStream>,\n \"toStream\"\n> & {\n toUint8Array: (props: Props, options?: PdfRenderOptions) => Promise<Uint8Array>\n toBlob: (props: Props, options?: PdfRenderOptions) => Promise<Blob>\n}\n\nexport const compile = async <Props>(\n component: PdfComponent<Props>,\n options: PdfRenderOptions = {},\n): Promise<CompiledTemplate<Props>> => {\n const template = await runtime.compile(component, options)\n const toUint8Array = async (props: Props, renderOptions: PdfRenderOptions = {}) => {\n return collectStreamBytes(await template.toStream(props, renderOptions))\n }\n return {\n ...template,\n toUint8Array,\n async toBlob(props, renderOptions = {}) {\n const bytes = await toUint8Array(props, renderOptions)\n return new Blob([Uint8Array.from(bytes)], { type: \"application/pdf\" })\n },\n }\n}\n\nexport type { PdfComponent }\n", "import { createElement } from \"./jsx\"\nimport type { PdfElement, PdfProps, PdfValue } from \"./types\"\n\nexport const Fragment = Symbol.for(\"jsxpdf.fragment\")\n\n// Fragment unwraps to raw children (any PdfValue); every other call builds\n// exactly one PdfElement via createElement. The overloads keep that precision\n// so callers don't inherit a spurious `| PdfValue` union.\nexport function jsx(type: typeof Fragment, props: PdfProps, key?: string): PdfValue\nexport function jsx(type: unknown, props: PdfProps, key?: string): PdfElement\nexport function jsx(type: unknown, props: PdfProps, key?: string): PdfElement | PdfValue {\n if (type === Fragment) return props.children\n return createElement(type as never, props, key)\n}\n\nexport const jsxs = jsx\nexport const jsxDEV = jsx\n", "import type { BindingToken, LayoutNode, PdfElement, PdfPageSizeValue, PdfProps, PdfStyle, PdfValue } from \"@jsxpdf/core\"\nimport { Document, Page, View, createBindingToken, isBindingToken, materializeChildren, materializeElement, parseSizeValue } from \"@jsxpdf/core\"\nimport {\n buildConcatenatedDocumentLayout,\n compilePrecompiledTemplateSync,\n initCompiledRenderState,\n runSinglePageIncrementalPipeline,\n type IncrementalYogaLayoutState,\n type PrecompiledTemplateRenderState,\n} from \"@jsxpdf/layout\"\nimport { jsx, jsxs, Fragment } from \"./jsx-runtime\"\n\nexport type RepeatOverflowMode = \"clip\" | \"error\" | \"shrink\"\n\nexport type RepeatPageProps = {\n size?: PdfPageSizeValue\n orientation?: \"portrait\" | \"landscape\"\n dpi?: number\n style?: PdfStyle | PdfStyle[]\n}\n\nexport type RepeatedDocumentProps<T> = {\n items: readonly T[] | BindingToken\n page?: RepeatPageProps\n slots: {\n columns: number\n rows: number\n }\n gap?: number\n fill?: \"row\" | \"column\"\n children: ((item: T, index: number) => PdfValue) | PdfValue\n} & Pick<ConcatProps, \"title\" | \"author\" | \"subject\" | \"creator\" | \"keywords\" | \"producer\" | \"language\" | \"creationDate\" | \"modificationDate\" | \"pdfVersion\" | \"tagged\" | \"attachments\" | \"xmp\" | \"pdfaid\" | \"pageMode\" | \"pageLayout\">\n\nexport type CardSlotProps = PdfProps & {\n padding?: number\n overflow?: RepeatOverflowMode\n}\n\nexport type ConcatProps = {\n children?: PdfValue\n title?: string\n author?: string\n subject?: string\n creator?: string\n keywords?: string\n producer?: string\n language?: string\n creationDate?: Date\n modificationDate?: Date\n pdfVersion?: string\n tagged?: PdfProps[\"tagged\"]\n attachments?: PdfProps[\"attachments\"]\n xmp?: PdfProps[\"xmp\"]\n pdfaid?: PdfProps[\"pdfaid\"]\n pageMode?: string\n pageLayout?: string\n}\n\nconst pageSizes: Record<string, [number, number]> = {\n A0: [2383.94, 3370.39],\n A1: [1683.78, 2383.94],\n A2: [1190.55, 1683.78],\n A3: [841.89, 1190.55],\n A4: [595.28, 841.89],\n A5: [419.53, 595.28],\n A6: [297.64, 419.53],\n LETTER: [612.0, 792.0],\n LEGAL: [612.0, 1008.0],\n TABLOID: [792.0, 1224.0]\n}\n\nconst TRACKED_PATH_SYMBOL = Symbol.for(\"jsxpdf.trackedPath\")\n\ntype InjectedCardSlotMetrics = {\n x: number\n y: number\n width: number\n height: number\n}\n\nconst h = (type: unknown, props?: Record<string, unknown> | null, ...children: unknown[]): PdfElement => {\n const normalizedChildren = children.flat(Infinity).filter((child) => child !== undefined && child !== null && child !== false)\n const nextProps = { ...(props ?? {}) } as Record<string, unknown>\n\n if (normalizedChildren.length === 1) {\n nextProps.children = normalizedChildren[0]\n } else if (normalizedChildren.length > 1) {\n nextProps.children = normalizedChildren\n }\n\n const key = nextProps.key as string | undefined\n delete nextProps.key\n\n return Array.isArray(nextProps.children) ? jsxs(type, nextProps as never, key) : jsx(type, nextProps as never, key)\n}\n\nconst chunk = <T,>(items: readonly T[], size: number): T[][] => {\n const result: T[][] = []\n for (let index = 0; index < items.length; index += size) {\n result.push(items.slice(index, index + size))\n }\n return result\n}\n\nconst resolveRepeatPageSize = (\n size: PdfPageSizeValue | undefined,\n orientation?: \"portrait\" | \"landscape\",\n dpi = 72\n): [number, number] => {\n let resolved: [number, number]\n\n if (typeof size === \"string\") {\n resolved = pageSizes[size.toUpperCase()] ?? pageSizes.A4\n } else if (Array.isArray(size)) {\n resolved = [\n parseSizeValue(size[0], 0, dpi) ?? pageSizes.A4[0],\n parseSizeValue(size[1], 0, dpi) ?? pageSizes.A4[1]\n ]\n } else if (typeof size === \"number\") {\n resolved = [size, size]\n } else if (size && typeof size === \"object\") {\n resolved = [\n parseSizeValue(size.width, 0, dpi) ?? pageSizes.A4[0],\n parseSizeValue(size.height, 0, dpi) ?? pageSizes.A4[1]\n ]\n } else {\n resolved = pageSizes.A4\n }\n\n return orientation === \"landscape\" ? [resolved[1], resolved[0]] : resolved\n}\n\nconst reorderForColumnFill = <T,>(items: readonly T[], columns: number, rows: number): T[] => {\n const perPage = Math.max(1, columns * rows)\n const reordered: T[] = []\n\n for (const pageItems of chunk(items, perPage)) {\n for (let row = 0; row < rows; row += 1) {\n for (let column = 0; column < columns; column += 1) {\n const sourceIndex = column * rows + row\n const item = pageItems[sourceIndex]\n if (item !== undefined) reordered.push(item)\n }\n }\n }\n\n return reordered\n}\n\nconst isElement = (value: PdfValue): value is PdfElement => typeof value === \"object\" && value !== null && \"type\" in value && \"props\" in value\n\nconst resolveTrackedPathValue = (root: unknown, path: Array<string | number>): unknown => {\n let current = root\n for (const segment of path) {\n if (current == null) return undefined\n current = (current as Record<string | number, unknown>)[segment]\n }\n return current\n}\n\nconst resolveBindingValues = (value: unknown, rootProps: unknown): unknown => {\n if (isBindingToken(value)) {\n return resolveTrackedPathValue(rootProps, value.path)\n }\n if (Array.isArray(value)) {\n return value.map((entry) => resolveBindingValues(entry, rootProps))\n }\n if (value instanceof Date || value instanceof Uint8Array) return value\n if (typeof value === \"function\") return value\n if (value && typeof value === \"object\") {\n const source = value as Record<string, unknown>\n const resolved: Record<string, unknown> = {}\n for (const [key, entry] of Object.entries(source)) {\n resolved[key] = resolveBindingValues(entry, rootProps)\n }\n return resolved\n }\n return value\n}\n\nconst extractConcatDocuments = (value: PdfValue): PdfElement[] => {\n const resolved = materializeElement(value)\n const children = materializeChildren(resolved)\n const documents: PdfElement[] = []\n\n for (const child of children) {\n const resolvedChild = materializeElement(child)\n if (!isElement(resolvedChild)) continue\n if (resolvedChild.type === Document) {\n documents.push(resolvedChild)\n continue\n }\n if (resolvedChild.type === Page) {\n documents.push(h(Document, null, resolvedChild))\n continue\n }\n throw new Error(`Concat only accepts Document, RepeatedDocument, or Page children. Received ${String(resolvedChild.type)}.`)\n }\n\n return documents\n}\n\nexport function CardSlot(props: CardSlotProps): PdfElement {\n const { __repeatSlotMetrics, padding = 0, overflow = \"clip\", clip, wrap, style, children, ...rest } = props\n\n if (!__repeatSlotMetrics) {\n throw new Error(\"CardSlot must be used inside Repeat.\")\n }\n\n const contentWidth = Math.max(0, __repeatSlotMetrics.width - padding * 2)\n const contentHeight = Math.max(0, __repeatSlotMetrics.height - padding * 2)\n\n return h(\n View,\n {\n ...rest,\n wrap: wrap ?? false,\n clip: clip ?? overflow !== \"error\",\n repeatSlotConfig: {\n overflow,\n contentWidth,\n contentHeight\n },\n style: [\n style,\n {\n left: __repeatSlotMetrics.x,\n top: __repeatSlotMetrics.y,\n width: __repeatSlotMetrics.width,\n height: __repeatSlotMetrics.height,\n paddingTop: padding,\n paddingRight: padding,\n paddingBottom: padding,\n paddingLeft: padding,\n position: \"absolute\"\n }\n ]\n },\n h(\n View,\n {\n repeatSlotContent: true,\n wrap: false,\n style: {\n width: contentWidth,\n height: contentHeight,\n position: \"relative\"\n }\n },\n children\n )\n )\n}\n\nconst getRepeatedDocumentPlan = <T,>(props: RepeatedDocumentProps<T>) => {\n // Binding-token items only occur on the compile path, which never reaches\n // layout planning: `RepeatedDocument` routes tokens to the schema renderer\n // (or throws) before any page is built.\n if (isBindingToken(props.items)) {\n throw new Error(\"jsxpdf.compile.unsupported: RepeatedDocument requires static items during layout.\")\n }\n const items = props.fill === \"column\"\n ? reorderForColumnFill(props.items, props.slots.columns, props.slots.rows)\n : [...props.items]\n const columns = Math.max(1, Math.floor(props.slots.columns))\n const rows = Math.max(1, Math.floor(props.slots.rows))\n const gap = Math.max(0, props.gap ?? 0)\n const perPage = columns * rows\n const [pageWidth, pageHeight] = resolveRepeatPageSize(\n props.page?.size,\n props.page?.orientation,\n props.page?.dpi\n )\n const totalHorizontalGap = gap * (columns - 1)\n const totalVerticalGap = gap * (rows - 1)\n const slotWidth = (pageWidth - totalHorizontalGap) / columns\n const slotHeight = (pageHeight - totalVerticalGap) / rows\n const pageCount = Math.ceil(items.length / perPage)\n\n return {\n items,\n columns,\n gap,\n perPage,\n pageWidth,\n pageHeight,\n pageCount,\n slotWidth,\n slotHeight\n }\n}\n\nconst createRepeatedPageDocument = <T,>(props: RepeatedDocumentProps<T>, pageIndex: number): PdfElement => {\n const plan = getRepeatedDocumentPlan(props)\n const pageItems = plan.items.slice(pageIndex * plan.perPage, pageIndex * plan.perPage + plan.perPage)\n const trackedItemPaths = pageItems\n .map((item) => (\n item &&\n typeof item === \"object\" &&\n Array.isArray((item as Record<PropertyKey, unknown>)[TRACKED_PATH_SYMBOL])\n ? [...((item as Record<PropertyKey, unknown>)[TRACKED_PATH_SYMBOL] as Array<string | number>)]\n : null\n ))\n .filter((path): path is Array<string | number> => Array.isArray(path) && path.length >= 2 && typeof path[path.length - 1] === \"number\")\n const firstTrackedPath = trackedItemPaths[0]\n const pageCollectionPath =\n firstTrackedPath &&\n trackedItemPaths.every((path) =>\n path.length === firstTrackedPath.length &&\n path.slice(0, -1).every((segment, index) => segment === firstTrackedPath[index])\n )\n ? firstTrackedPath.slice(0, -1)\n : undefined\n const pageIndexRange: [number, number] | undefined =\n pageCollectionPath && trackedItemPaths.length > 0\n ? [\n Math.min(...trackedItemPaths.map((path) => path[path.length - 1] as number)),\n Math.max(...trackedItemPaths.map((path) => path[path.length - 1] as number)),\n ]\n : undefined\n\n return h(\n Document,\n {\n key: `repeated-document-${pageIndex + 1}`\n },\n h(\n Page,\n {\n key: `repeat-page-${pageIndex + 1}`,\n size: [plan.pageWidth, plan.pageHeight],\n dpi: props.page?.dpi,\n __repeatTrackedCollectionPath: pageCollectionPath,\n __repeatTrackedIndexRange: pageIndexRange,\n style: [\n {\n padding: 0,\n position: \"relative\"\n },\n props.page?.style\n ]\n },\n ...pageItems.map((item, itemIndex) => {\n const childIndex = pageIndex * plan.perPage + itemIndex\n const row = Math.floor(itemIndex / plan.columns)\n const column = itemIndex % plan.columns\n const rendered = typeof props.children === \"function\" ? props.children(item, childIndex) : props.children\n const metrics = {\n x: column * (plan.slotWidth + plan.gap),\n y: row * (plan.slotHeight + plan.gap),\n width: plan.slotWidth,\n height: plan.slotHeight\n }\n const repeatTrackedItemPath = (\n item &&\n typeof item === \"object\" &&\n Array.isArray((item as Record<PropertyKey, unknown>)[TRACKED_PATH_SYMBOL])\n )\n ? [...((item as Record<PropertyKey, unknown>)[TRACKED_PATH_SYMBOL] as Array<string | number>)]\n : undefined\n\n if (isElement(rendered) && rendered.type === CardSlot) {\n return {\n ...rendered,\n props: {\n ...rendered.props,\n __repeatSlotMetrics: metrics,\n __repeatTrackedItemPath: repeatTrackedItemPath\n }\n }\n }\n\n return h(CardSlot, {\n key: `repeat-slot-${childIndex + 1}`,\n __repeatSlotMetrics: metrics,\n __repeatTrackedItemPath: repeatTrackedItemPath,\n children: rendered\n })\n })\n )\n ) as PdfElement\n}\n\nconst createRepeatedPages = <T,>(props: RepeatedDocumentProps<T>) => {\n const plan = getRepeatedDocumentPlan(props)\n return Array.from({ length: plan.pageCount }, (_, pageIndex) => {\n const document = createRepeatedPageDocument(props, pageIndex)\n return materializeChildren(document.props.children ?? [])[0] as PdfElement\n })\n}\n\nconst createRepeatedSlotElement = <T,>(\n props: RepeatedDocumentProps<T>,\n item: T,\n itemIndex: number,\n metrics: InjectedCardSlotMetrics\n): PdfElement => {\n const rendered = typeof props.children === \"function\" ? props.children(item, itemIndex) : props.children\n const repeatTrackedItemPath = (\n item &&\n typeof item === \"object\" &&\n Array.isArray((item as Record<PropertyKey, unknown>)[TRACKED_PATH_SYMBOL])\n )\n ? [...((item as Record<PropertyKey, unknown>)[TRACKED_PATH_SYMBOL] as Array<string | number>)]\n : undefined\n\n if (isElement(rendered) && rendered.type === CardSlot) {\n return {\n ...rendered,\n props: {\n ...rendered.props,\n __repeatSlotMetrics: metrics,\n __repeatTrackedItemPath: repeatTrackedItemPath\n }\n }\n }\n\n return h(CardSlot, {\n key: `repeat-slot-${itemIndex + 1}`,\n __repeatSlotMetrics: metrics,\n __repeatTrackedItemPath: repeatTrackedItemPath,\n children: rendered\n })\n}\n\nconst canCompileRepeatedSchema = <T,>(props: RepeatedDocumentProps<T>): boolean => {\n if (!isBindingToken(props.items)) return false\n if (isBindingToken(props.page?.size) || isBindingToken(props.page?.orientation) || isBindingToken(props.page?.dpi)) return false\n if (isBindingToken(props.gap) || isBindingToken(props.fill)) return false\n if (isBindingToken(props.slots.columns) || isBindingToken(props.slots.rows)) return false\n return true\n}\n\nconst createRepeatedSchemaRender = <T,>(props: RepeatedDocumentProps<T>) => {\n // Only called after `canCompileRepeatedSchema` confirmed token items.\n if (!isBindingToken(props.items)) {\n throw new Error(\"jsxpdf.compile.unsupported: RepeatedDocument schema render requires binding-token items.\")\n }\n const itemsPath = [...props.items.path]\n const staticPlan = getRepeatedDocumentPlan({\n ...props,\n items: []\n })\n\n const documentTemplate = compilePrecompiledTemplateSync(h(Document, {\n title: props.title,\n author: props.author,\n subject: props.subject,\n creator: props.creator,\n keywords: props.keywords,\n producer: props.producer,\n language: props.language,\n creationDate: props.creationDate,\n modificationDate: props.modificationDate,\n pdfVersion: props.pdfVersion,\n tagged: props.tagged,\n attachments: props.attachments,\n xmp: props.xmp,\n pdfaid: props.pdfaid,\n pageMode: props.pageMode,\n pageLayout: props.pageLayout,\n }))\n\n const pageTemplate = compilePrecompiledTemplateSync(\n h(Document, null,\n h(\n Page,\n {\n size: [staticPlan.pageWidth, staticPlan.pageHeight],\n dpi: props.page?.dpi,\n style: [\n {\n padding: 0,\n position: \"relative\"\n },\n props.page?.style\n ]\n }\n )\n )\n )\n\n const slotTemplate = compilePrecompiledTemplateSync(\n createRepeatedSlotElement(\n props,\n createBindingToken([\"__repeatItem\"], \"\", undefined, true) as unknown as T,\n 0,\n {\n x: 0,\n y: 0,\n width: staticPlan.slotWidth,\n height: staticPlan.slotHeight\n }\n )\n )\n\n const declaredBindingPaths = [\n itemsPath,\n ...documentTemplate.placeholders.flatMap((entry) => [\n ...(entry.bindingPath ? [entry.bindingPath] : []),\n ...(entry.bindingPaths ?? [])\n ]),\n ...pageTemplate.placeholders.flatMap((entry) => [\n ...(entry.bindingPath ? [entry.bindingPath] : []),\n ...(entry.bindingPaths ?? [])\n ]),\n ...slotTemplate.placeholders.flatMap((entry) => [\n ...(entry.bindingPath ? [entry.bindingPath] : []),\n ...(entry.bindingPaths ?? [])\n ]),\n ].flatMap((path) => (\n path[0] === \"__repeatItem\"\n ? [path]\n : Array.from({ length: path.length }, (_, index) => path.slice(0, index + 1))\n ))\n const uniqueBindingPaths = declaredBindingPaths.filter((path, index, all) =>\n all.findIndex((candidate) =>\n candidate.length === path.length &&\n candidate.every((segment, segmentIndex) => segment === path[segmentIndex])\n ) === index\n )\n\n // Per-page compiled template: one slot per grid position, each with an indexed binding token\n // This lets us reuse the Yoga tree across pages \u2014 only data changes, structure stays the same.\n const indexedSlotElements = Array.from({ length: staticPlan.perPage }, (_, i) => {\n const row = Math.floor(i / staticPlan.columns)\n const col = i % staticPlan.columns\n return createRepeatedSlotElement(\n props,\n createBindingToken([\"__slots\", i], \"\", undefined, true) as unknown as T,\n i,\n {\n x: col * (staticPlan.slotWidth + staticPlan.gap),\n y: row * (staticPlan.slotHeight + staticPlan.gap),\n width: staticPlan.slotWidth,\n height: staticPlan.slotHeight\n }\n )\n })\n\n const perPageCompiledTemplate = compilePrecompiledTemplateSync(\n h(Document, null,\n h(Page, {\n size: [staticPlan.pageWidth, staticPlan.pageHeight],\n dpi: props.page?.dpi,\n style: [{ padding: 0, position: \"relative\" }, props.page?.style]\n }, ...indexedSlotElements)\n )\n )\n\n type PageOptimizedState = { renderState: PrecompiledTemplateRenderState; incrementalState: IncrementalYogaLayoutState }\n let pageOptimizedStatePromise: Promise<PageOptimizedState> | null = null\n let renderQueue: Promise<void> = Promise.resolve()\n\n const getPageOptimizedState = (): Promise<PageOptimizedState> => {\n if (!pageOptimizedStatePromise) {\n pageOptimizedStatePromise = initCompiledRenderState(perPageCompiledTemplate).then(\n ({ renderState, incrementalLayoutState }) => ({ renderState, incrementalState: incrementalLayoutState })\n )\n }\n return pageOptimizedStatePromise\n }\n\n return Object.assign(\n (rootProps: unknown): PdfElement | Promise<LayoutNode> => {\n const resolvedItems = resolveTrackedPathValue(rootProps, itemsPath)\n if (!Array.isArray(resolvedItems)) {\n throw new Error(\"jsxpdf.compile.unsupported: RepeatedDocument items must resolve to an array at render time.\")\n }\n\n const allItems: readonly T[] = props.fill === \"column\"\n ? reorderForColumnFill(resolvedItems as readonly T[], staticPlan.columns, staticPlan.perPage / staticPlan.columns)\n : resolvedItems as readonly T[]\n\n const pageCount = Math.ceil(allItems.length / staticPlan.perPage)\n\n // Optimized path: all pages are full so the per-page Yoga tree can be reused without structural changes\n if (allItems.length > 0 && allItems.length % staticPlan.perPage === 0) {\n const result = renderQueue.then(async () => {\n const state = await getPageOptimizedState()\n const pageLayouts: LayoutNode[] = []\n for (let pageIndex = 0; pageIndex < pageCount; pageIndex++) {\n const pageItems = allItems.slice(pageIndex * staticPlan.perPage, (pageIndex + 1) * staticPlan.perPage)\n const { pageLayout, incrementalState: nextState } = await runSinglePageIncrementalPipeline(\n state.renderState,\n state.incrementalState,\n { __slots: pageItems }\n )\n state.incrementalState = nextState\n pageLayouts.push(pageLayout)\n }\n const documentProps = resolveBindingValues({\n title: props.title,\n author: props.author,\n subject: props.subject,\n creator: props.creator,\n keywords: props.keywords,\n producer: props.producer,\n language: props.language,\n creationDate: props.creationDate,\n modificationDate: props.modificationDate,\n pdfVersion: props.pdfVersion,\n tagged: props.tagged,\n attachments: props.attachments,\n xmp: props.xmp,\n pdfaid: props.pdfaid,\n pageMode: props.pageMode,\n pageLayout: props.pageLayout,\n }, rootProps) as Record<string, unknown>\n return buildConcatenatedDocumentLayout(documentProps, pageLayouts)\n })\n renderQueue = result.then(() => {}).catch(() => {})\n return result\n }\n\n // Fallback: partial last page \u2014 build full JSX tree and let the layout pipeline handle it\n const concreteProps = {\n ...(resolveBindingValues(props, rootProps) as RepeatedDocumentProps<T>),\n items: resolvedItems as readonly T[],\n }\n return materializeElement(createRepeatedDocumentElement(concreteProps)) as PdfElement\n },\n { bindingPaths: uniqueBindingPaths }\n )\n}\n\nconst createRepeatedDocumentElement = <T,>(props: RepeatedDocumentProps<T>): PdfElement => {\n const concatDocuments = createRepeatedPages(props).map((page) => h(Document, null, page))\n return h(\n Document,\n {\n title: props.title,\n author: props.author,\n subject: props.subject,\n creator: props.creator,\n keywords: props.keywords,\n producer: props.producer,\n language: props.language,\n creationDate: props.creationDate,\n modificationDate: props.modificationDate,\n pdfVersion: props.pdfVersion,\n tagged: props.tagged,\n attachments: props.attachments,\n xmp: props.xmp,\n pdfaid: props.pdfaid,\n pageMode: props.pageMode,\n pageLayout: props.pageLayout,\n concatDocuments\n }\n )\n}\n\nexport function RepeatedDocument<T>(props: RepeatedDocumentProps<T>) {\n if (canCompileRepeatedSchema(props)) {\n const schemaRender = createRepeatedSchemaRender(props)\n return h(\n Document,\n {\n title: typeof props.title === \"string\" ? props.title : undefined,\n __compiledBindingPaths: schemaRender.bindingPaths,\n __compiledSchemaRender: schemaRender\n }\n )\n }\n if (isBindingToken(props.items)) {\n throw new Error(\"jsxpdf.compile.unsupported: RepeatedDocument requires static layout props during compile.\")\n }\n return createRepeatedDocumentElement(props)\n}\n\nexport function Repeat<T>(props: RepeatedDocumentProps<T>): PdfElement {\n // Fragment unwraps to the raw pages array at runtime; the PdfElement\n // annotation keeps `<Repeat>` usable as a JSX component. Pages flatten\n // through children materialization exactly like a returned array.\n return h(Fragment, null, ...createRepeatedPages(props)) as PdfElement\n}\n\nexport function Concat(props: ConcatProps): PdfElement {\n const { children, ...documentProps } = props\n return h(\n Document,\n {\n ...documentProps,\n concatDocuments: extractConcatDocuments(children ?? [])\n }\n )\n}\n", "import fs from \"node:fs\"\nimport type { PdfElement, PdfRenderOptions } from \"@jsxpdf/core\"\nimport {\n createPdfRuntime,\n type CompiledRuntimeTemplate,\n type PdfComponent,\n type PdfRuntimeInstance,\n} from \"@jsxpdf/render\"\nimport { renderPdf } from \"@jsxpdf/render-pdfkit\"\n\ntype PdfDocumentStream = Awaited<ReturnType<typeof renderPdf>>\n\nconst runtime = createPdfRuntime<PdfDocumentStream>(renderPdf)\n\nconst collectStreamBuffer = (stream: PdfDocumentStream): Promise<Buffer> =>\n new Promise<Buffer>((resolve, reject) => {\n const chunks: Buffer[] = []\n let ended = false\n let finished = false\n let settled = false\n let resolveTimer: ReturnType<typeof setTimeout> | null = null\n\n const settle = () => {\n if (settled) return\n settled = true\n if (resolveTimer) clearTimeout(resolveTimer)\n resolve(Buffer.concat(chunks))\n }\n const maybeResolve = () => {\n if (settled) return\n if (ended && finished) return settle()\n if (ended || finished) {\n if (resolveTimer) clearTimeout(resolveTimer)\n resolveTimer = setTimeout(settle, 0)\n }\n }\n\n stream.on(\"data\", (chunk: unknown) => {\n const bytes = chunk as Buffer | Uint8Array\n chunks.push(Buffer.isBuffer(bytes) ? bytes : Buffer.from(bytes))\n })\n stream.on(\"end\", () => {\n ended = true\n maybeResolve()\n })\n stream.on(\"finish\", () => {\n finished = true\n maybeResolve()\n })\n stream.on(\"error\", reject)\n })\n\nexport type PdfInstance = PdfRuntimeInstance<PdfDocumentStream> & {\n toBuffer: () => Promise<Buffer>\n toFile: (filePath: string) => Promise<PdfDocumentStream>\n}\n\nconst wrapInstance = (instance: PdfRuntimeInstance<PdfDocumentStream>): PdfInstance => ({\n ...instance,\n async toBuffer() {\n return collectStreamBuffer(await instance.toStream())\n },\n async toFile(filePath) {\n const stream = await instance.toStream()\n const output = fs.createWriteStream(filePath)\n stream.pipe(output)\n await new Promise<void>((resolve, reject) => {\n output.on(\"finish\", resolve)\n output.on(\"error\", reject)\n })\n return stream\n },\n})\n\nexport const pdf = (initialValue?: PdfElement, options: PdfRenderOptions = {}): PdfInstance => {\n return wrapInstance(runtime.pdf(initialValue, options))\n}\n\nexport const renderToStream = (element: PdfElement, options: PdfRenderOptions = {}): Promise<PdfDocumentStream> =>\n pdf(element, options).toStream()\n\nexport const renderToBuffer = (element: PdfElement, options: PdfRenderOptions = {}): Promise<Buffer> =>\n pdf(element, options).toBuffer()\n\nexport const renderToFile = (\n element: PdfElement,\n filePath: string,\n options: PdfRenderOptions = {},\n): Promise<PdfDocumentStream> => pdf(element, options).toFile(filePath)\n\nexport type CompiledTemplate<Props = unknown> = Omit<\n CompiledRuntimeTemplate<Props, PdfDocumentStream>,\n \"toStream\"\n> & {\n toStream: (props: Props, options?: PdfRenderOptions) => Promise<PdfDocumentStream>\n toBuffer: (props: Props, options?: PdfRenderOptions) => Promise<Buffer>\n toFile: (filePath: string, props: Props, options?: PdfRenderOptions) => Promise<PdfDocumentStream>\n}\n\nexport const compile = async <Props>(\n component: PdfComponent<Props>,\n options: PdfRenderOptions = {},\n): Promise<CompiledTemplate<Props>> => {\n const template = await runtime.compile(component, options)\n return {\n ...template,\n async toBuffer(props, renderOptions = {}) {\n return collectStreamBuffer(await template.toStream(props, renderOptions))\n },\n async toFile(filePath, props, renderOptions = {}) {\n const stream = await template.toStream(props, renderOptions)\n const output = fs.createWriteStream(filePath)\n stream.pipe(output)\n await new Promise<void>((resolve, reject) => {\n output.on(\"finish\", resolve)\n output.on(\"error\", reject)\n })\n return stream\n },\n }\n}\n\nexport type { PdfComponent }\nexport type {\n HyphenationCallback,\n LayoutNode,\n PdfBookmark,\n PdfPageSizeValue,\n PdfRenderOptions,\n PdfStyle,\n PdfStyleValue,\n ProfileOptions,\n ProfileTrace,\n} from \"@jsxpdf/core\"\n"],
5
+ "mappings": "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AAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,GAAE,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,GAAE,GAAE,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,CAAC,G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,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,GAAE,KAAI,KAAI,KAAI,KAAK,KAAI,KAAI,KAAI,KAAK,KAAI,KAAI,KAAK,GAAE,KAAI,GAAE,GAAE,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAK,KAAI,KAAK,KAAI,KAAI,KAAI,GAAE,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,CAAC,GAAE,OAAQ,CAAC,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU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AAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,GAAE,KAAI,KAAI,KAAI,KAAK,KAAI,KAAI,KAAI,KAAK,KAAI,KAAI,KAAI,GAAE,KAAI,GAAE,GAAE,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAK,KAAI,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,CAAC,GAAE,OAAQ,CAAC,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,SAAQ,UAAS,YAAW,cAAa,UAAS,WAAU,aAAY,eAAc,aAAY,cAAa,YAAW,QAAO,SAAQ,UAAS,UAAS,SAAQ,QAAO,OAAM,OAAM,SAAQ,QAAO,QAAO,OAAM,SAAQ,SAAQ,QAAO,SAAQ,aAAY,QAAO,SAAQ,WAAU,YAAW,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,eAAc,aAAY,gBAAe,eAAc,cAAa,SAAQ,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,aAAY,OAAM,cAAa,cAAa,WAAU,QAAO,WAAU,kBAAiB,UAAS,gBAAe,YAAW,UAAS,aAAY,cAAa,eAAc,UAAS,iBAAgB,MAAK,WAAU,UAAS,WAAU,WAAU,aAAY,cAAa,gBAAe,iBAAgB,UAAS,UAAS,UAAS,SAAQ,aAAY,UAAS,kBAAiB,MAAK,WAAU,UAAS,aAAY,SAAQ,cAAa,QAAO,YAAW,YAAW,OAAM,aAAY,WAAU,YAAW,aAAY,eAAc,iBAAgB,cAAa,UAAS,cAAa,UAAS,UAAS,aAAY,eAAc,iBAAgB,SAAQ,MAAK,aAAY,kBAAiB,WAAU,eAAc,gBAAe,kBAAiB,cAAa,WAAU,iBAAgB,gBAAe,UAAS,UAAS,eAAc,UAAS,aAAY,SAAQ,MAAK,YAAW,UAAS,UAAS,eAAc,aAAY,UAAS,UAAS,eAAc,aAAY,OAAM,UAAS,UAAS,UAAS,eAAc,UAAS,aAAY,YAAW,UAAS,UAAS,UAAS,eAAc,aAAY,UAAS,SAAQ,cAAa,UAAS,UAAS,eAAc,UAAS,aAAY,SAAQ,MAAK,YAAW,UAAS,UAAS,eAAc,aAAY,UAAS,UAAS,eAAc,aAAY,OAAM,UAAS,UAAS,UAAS,eAAc,UAAS,aAAY,UAAS,UAAS,UAAS,UAAS,eAAc,aAAY,UAAS,SAAQ,aAAa,EAAC,GAAE,cAAa,EAAC,UAAW,KAAI,WAAY,MAAK,WAAY,KAAI,SAAU,KAAI,SAAU,KAAI,QAAS,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,KAAI,KAAI,KAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,GAAE,KAAI,KAAI,KAAI,KAAK,KAAI,KAAI,KAAI,KAAK,KAAI,KAAI,KAAK,GAAE,KAAI,GAAE,GAAE,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAK,KAAI,KAAK,KAAI,KAAI,KAAI,GAAE,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAA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E,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAA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AA,IAAK,MAAM;AAAA,IAAK,QAAQ;AAAA,IAAK,OAAO;AAAA,IAAK,MAAM;AAAA,IAAK,MAAM;AAAA,IAAK,OAAO;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IACzX,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,OAAO;AAAA,IAAK,QAAQ;AAAA,IAAK,MAAM;AAAA,IAAK,OAAO;AAAA,IAAK,OAAO;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,OAAO;AAAA,IAAK,MAAM;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,OAAO;AAAA,IAAK,MAAM;AAAA,IAAK,KAAK;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,OAAO;AAAA,IAAK,QAAQ;AAAA,IAAK,MAAM;AAAA,IAAK,OAAO;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,OAAO;AAAA,IAAK,MAAM;AAAA,IAAK,QAAQ;AAAA,IACzX,OAAO;AAAA,IAAK,OAAO;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,OAAO;AAAA,IAAK,QAAQ;AAAA,IAAK,MAAM;AAAA,IAAK,OAAO;AAAA,IAAK,OAAO;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,OAAO;AAAA,IAAK,MAAM;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,OAAO;AAAA,IAAK,MAAM;AAAA,IAAK,KAAK;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,OAAO;AAAA,IAAK,QAAQ;AAAA,IAAK,MAAM;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,QAAQ;AAAA,IAAK,OAAO;AAAA,IAAK,MAAM;AAAA,IACxX,QAAQ;AAAA,IAAK,OAAO;AAAA,IAAK,MAAM;AAAA,IAAK,MAAM;AAAA,IAAK,OAAO;AAAA,IAAK,MAAM;AAAA,IAAK,OAAO;AAAA,IAAK,OAAO;AAAA,IAAK,SAAS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",
6
+ "names": ["bytes", "chunk", "resolved", "fs", "isBrowserRuntime", "Yoga", "module", "require", "index", "sectionIndex", "collectTableDrawNodes", "layout", "isTableSectionType", "isTableStructureType", "clampToPositiveInt", "sumColumnWidths", "scaleColumnWidthsToTarget", "getNodeHorizontalInset", "isTableSectionType", "isTableStructureType", "shiftSubtreeAbsolutePosition", "getNodeHorizontalInset", "yogaNode", "clampToPositiveInt", "sumColumnWidths", "scaleColumnWidthsToTarget", "assignSubtreeAbsolutePosition", "contentHeight", "fragments", "pageNumber", "document", "prepared", "document", "cached", "document", "renderPdf", "pdf", "layout", "compile", "TABLE_STRUCTURE_TYPES", "timeBlock", "x", "y", "h", "error", "result", "recursive", "child", "fs", "x2", "y2", "pathLength", "pdfkitModule", "pdfkit_runtime_default", "document", "document", "BUILTIN_PDF_FONTS", "isNodeRuntime", "parseDataImageUri", "readImageSource", "height", "width", "hasBorderStyle", "TABLE_STRUCTURE_TYPES", "document", "pdfkit_runtime_default", "BUILTIN_PDF_FONTS", "visit", "chunk", "pageSizes", "isElement", "resolveTrackedPathValue", "document", "runtime", "chunk", "wrapInstance", "pdf"]
7
7
  }