pretext-pdf 1.1.1 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +659 -0
- package/README.md +82 -7
- package/dist/allowed-props.d.ts +76 -0
- package/dist/allowed-props.d.ts.map +1 -1
- package/dist/allowed-props.js.map +1 -1
- package/dist/assets/generators/barcode.d.ts +9 -0
- package/dist/assets/generators/barcode.d.ts.map +1 -0
- package/dist/assets/generators/barcode.js +24 -0
- package/dist/assets/generators/barcode.js.map +1 -0
- package/dist/assets/generators/chart.d.ts +13 -0
- package/dist/assets/generators/chart.d.ts.map +1 -0
- package/dist/assets/generators/chart.js +32 -0
- package/dist/assets/generators/chart.js.map +1 -0
- package/dist/assets/generators/qr.d.ts +9 -0
- package/dist/assets/generators/qr.d.ts.map +1 -0
- package/dist/assets/generators/qr.js +25 -0
- package/dist/assets/generators/qr.js.map +1 -0
- package/dist/assets/index.d.ts +19 -0
- package/dist/assets/index.d.ts.map +1 -0
- package/dist/assets/index.js +19 -0
- package/dist/assets/index.js.map +1 -0
- package/dist/assets/loaders/images.d.ts +20 -0
- package/dist/assets/loaders/images.d.ts.map +1 -0
- package/dist/assets/loaders/images.js +69 -0
- package/dist/assets/loaders/images.js.map +1 -0
- package/dist/assets/loaders/orchestrator.d.ts +24 -0
- package/dist/assets/loaders/orchestrator.d.ts.map +1 -0
- package/dist/assets/loaders/orchestrator.js +109 -0
- package/dist/assets/loaders/orchestrator.js.map +1 -0
- package/dist/assets/loaders/vectors.d.ts +25 -0
- package/dist/assets/loaders/vectors.d.ts.map +1 -0
- package/dist/assets/loaders/vectors.js +118 -0
- package/dist/assets/loaders/vectors.js.map +1 -0
- package/dist/assets/loaders/watermark.d.ts +12 -0
- package/dist/assets/loaders/watermark.d.ts.map +1 -0
- package/dist/assets/loaders/watermark.js +40 -0
- package/dist/assets/loaders/watermark.js.map +1 -0
- package/dist/assets/security/fetch.d.ts +14 -0
- package/dist/assets/security/fetch.d.ts.map +1 -0
- package/dist/assets/security/fetch.js +112 -0
- package/dist/assets/security/fetch.js.map +1 -0
- package/dist/assets/security/ipv4-normalize.d.ts +28 -0
- package/dist/assets/security/ipv4-normalize.d.ts.map +1 -0
- package/dist/assets/security/ipv4-normalize.js +116 -0
- package/dist/assets/security/ipv4-normalize.js.map +1 -0
- package/dist/assets/security/path-allowlist.d.ts +12 -0
- package/dist/assets/security/path-allowlist.d.ts.map +1 -0
- package/dist/assets/security/path-allowlist.js +26 -0
- package/dist/assets/security/path-allowlist.js.map +1 -0
- package/dist/assets/security/url-validation.d.ts +22 -0
- package/dist/assets/security/url-validation.d.ts.map +1 -0
- package/dist/assets/security/url-validation.js +164 -0
- package/dist/assets/security/url-validation.js.map +1 -0
- package/dist/assets/svg/dimensions.d.ts +19 -0
- package/dist/assets/svg/dimensions.d.ts.map +1 -0
- package/dist/assets/svg/dimensions.js +43 -0
- package/dist/assets/svg/dimensions.js.map +1 -0
- package/dist/assets/svg/rasterize.d.ts +6 -0
- package/dist/assets/svg/rasterize.d.ts.map +1 -0
- package/dist/assets/svg/rasterize.js +38 -0
- package/dist/assets/svg/rasterize.js.map +1 -0
- package/dist/assets/svg/resolve-content.d.ts +16 -0
- package/dist/assets/svg/resolve-content.d.ts.map +1 -0
- package/dist/assets/svg/resolve-content.js +38 -0
- package/dist/assets/svg/resolve-content.js.map +1 -0
- package/dist/assets/svg/sanitize.d.ts +22 -0
- package/dist/assets/svg/sanitize.d.ts.map +1 -0
- package/dist/assets/svg/sanitize.js +46 -0
- package/dist/assets/svg/sanitize.js.map +1 -0
- package/dist/assets/util/redact-path.d.ts +14 -0
- package/dist/assets/util/redact-path.d.ts.map +1 -0
- package/dist/assets/util/redact-path.js +16 -0
- package/dist/assets/util/redact-path.js.map +1 -0
- package/dist/assets.d.ts +10 -27
- package/dist/assets.d.ts.map +1 -1
- package/dist/assets.js +10 -549
- package/dist/assets.js.map +1 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +2 -1
- package/dist/builder.js.map +1 -1
- package/dist/cli.js +11 -1
- package/dist/cli.js.map +1 -1
- package/dist/compat.d.ts +63 -1
- package/dist/compat.d.ts.map +1 -1
- package/dist/compat.js +42 -5
- package/dist/compat.js.map +1 -1
- package/dist/errors.d.ts +2 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -2
- package/dist/errors.js.map +1 -1
- package/dist/fonts.d.ts.map +1 -1
- package/dist/fonts.js +8 -10
- package/dist/fonts.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/layout-state.d.ts +1 -1
- package/dist/layout-state.d.ts.map +1 -1
- package/dist/layout-state.js +5 -0
- package/dist/layout-state.js.map +1 -1
- package/dist/measure-blocks/float-group.d.ts +9 -0
- package/dist/measure-blocks/float-group.d.ts.map +1 -0
- package/dist/measure-blocks/float-group.js +103 -0
- package/dist/measure-blocks/float-group.js.map +1 -0
- package/dist/measure-blocks/helpers.d.ts +44 -0
- package/dist/measure-blocks/helpers.d.ts.map +1 -0
- package/dist/measure-blocks/helpers.js +43 -0
- package/dist/measure-blocks/helpers.js.map +1 -0
- package/dist/measure-blocks/highlight.d.ts +26 -0
- package/dist/measure-blocks/highlight.d.ts.map +1 -0
- package/dist/measure-blocks/highlight.js +169 -0
- package/dist/measure-blocks/highlight.js.map +1 -0
- package/dist/measure-blocks/image.d.ts +9 -0
- package/dist/measure-blocks/image.d.ts.map +1 -0
- package/dist/measure-blocks/image.js +136 -0
- package/dist/measure-blocks/image.js.map +1 -0
- package/dist/measure-blocks/index.d.ts +24 -0
- package/dist/measure-blocks/index.d.ts.map +1 -0
- package/dist/measure-blocks/index.js +179 -0
- package/dist/measure-blocks/index.js.map +1 -0
- package/dist/measure-blocks/list.d.ts +8 -0
- package/dist/measure-blocks/list.d.ts.map +1 -0
- package/dist/measure-blocks/list.js +108 -0
- package/dist/measure-blocks/list.js.map +1 -0
- package/dist/measure-blocks/simple-blocks.d.ts +18 -0
- package/dist/measure-blocks/simple-blocks.d.ts.map +1 -0
- package/dist/measure-blocks/simple-blocks.js +121 -0
- package/dist/measure-blocks/simple-blocks.js.map +1 -0
- package/dist/measure-blocks/table/columns.d.ts +17 -0
- package/dist/measure-blocks/table/columns.d.ts.map +1 -0
- package/dist/measure-blocks/table/columns.js +83 -0
- package/dist/measure-blocks/table/columns.js.map +1 -0
- package/dist/measure-blocks/table/measure.d.ts +8 -0
- package/dist/measure-blocks/table/measure.d.ts.map +1 -0
- package/dist/measure-blocks/table/measure.js +231 -0
- package/dist/measure-blocks/table/measure.js.map +1 -0
- package/dist/measure-blocks/table/spans.d.ts +25 -0
- package/dist/measure-blocks/table/spans.d.ts.map +1 -0
- package/dist/measure-blocks/table/spans.js +55 -0
- package/dist/measure-blocks/table/spans.js.map +1 -0
- package/dist/measure-blocks/text-blocks.d.ts +17 -0
- package/dist/measure-blocks/text-blocks.d.ts.map +1 -0
- package/dist/measure-blocks/text-blocks.js +242 -0
- package/dist/measure-blocks/text-blocks.js.map +1 -0
- package/dist/measure-text.d.ts +21 -3
- package/dist/measure-text.d.ts.map +1 -1
- package/dist/measure-text.js +87 -36
- package/dist/measure-text.js.map +1 -1
- package/dist/measure.d.ts +1 -1
- package/dist/measure.d.ts.map +1 -1
- package/dist/measure.js +8 -6
- package/dist/measure.js.map +1 -1
- package/dist/node-polyfill.d.ts.map +1 -1
- package/dist/node-polyfill.js +9 -0
- package/dist/node-polyfill.js.map +1 -1
- package/dist/pipeline-footnotes.d.ts +1 -1
- package/dist/pipeline-footnotes.d.ts.map +1 -1
- package/dist/pipeline-toc.d.ts +1 -1
- package/dist/pipeline-toc.d.ts.map +1 -1
- package/dist/pipeline.d.ts +3 -3
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +4 -5
- package/dist/pipeline.js.map +1 -1
- package/dist/plugin-types.d.ts +1 -1
- package/dist/plugin-types.d.ts.map +1 -1
- package/dist/post-process.d.ts +2 -2
- package/dist/post-process.d.ts.map +1 -1
- package/dist/post-process.js +32 -9
- package/dist/post-process.js.map +1 -1
- package/dist/render-blocks/blockquote.d.ts +7 -0
- package/dist/render-blocks/blockquote.d.ts.map +1 -0
- package/dist/render-blocks/blockquote.js +87 -0
- package/dist/render-blocks/blockquote.js.map +1 -0
- package/dist/render-blocks/callout.d.ts +7 -0
- package/dist/render-blocks/callout.d.ts.map +1 -0
- package/dist/render-blocks/callout.js +84 -0
- package/dist/render-blocks/callout.js.map +1 -0
- package/dist/render-blocks/code.d.ts +7 -0
- package/dist/render-blocks/code.d.ts.map +1 -0
- package/dist/render-blocks/code.js +84 -0
- package/dist/render-blocks/code.js.map +1 -0
- package/dist/render-blocks/footnote.d.ts +11 -0
- package/dist/render-blocks/footnote.d.ts.map +1 -0
- package/dist/render-blocks/footnote.js +45 -0
- package/dist/render-blocks/footnote.js.map +1 -0
- package/dist/render-blocks/header-footer.d.ts +11 -0
- package/dist/render-blocks/header-footer.d.ts.map +1 -0
- package/dist/render-blocks/header-footer.js +56 -0
- package/dist/render-blocks/header-footer.js.map +1 -0
- package/dist/render-blocks/hr.d.ts +7 -0
- package/dist/render-blocks/hr.d.ts.map +1 -0
- package/dist/render-blocks/hr.js +24 -0
- package/dist/render-blocks/hr.js.map +1 -0
- package/dist/render-blocks/image.d.ts +9 -0
- package/dist/render-blocks/image.d.ts.map +1 -0
- package/dist/render-blocks/image.js +135 -0
- package/dist/render-blocks/image.js.map +1 -0
- package/dist/render-blocks/index.d.ts +17 -0
- package/dist/render-blocks/index.d.ts.map +1 -0
- package/dist/render-blocks/index.js +17 -0
- package/dist/render-blocks/index.js.map +1 -0
- package/dist/render-blocks/list-item.d.ts +7 -0
- package/dist/render-blocks/list-item.d.ts.map +1 -0
- package/dist/render-blocks/list-item.js +80 -0
- package/dist/render-blocks/list-item.js.map +1 -0
- package/dist/render-blocks/rich.d.ts +7 -0
- package/dist/render-blocks/rich.d.ts.map +1 -0
- package/dist/render-blocks/rich.js +160 -0
- package/dist/render-blocks/rich.js.map +1 -0
- package/dist/render-blocks/table.d.ts +7 -0
- package/dist/render-blocks/table.d.ts.map +1 -0
- package/dist/render-blocks/table.js +139 -0
- package/dist/render-blocks/table.js.map +1 -0
- package/dist/render-blocks/text.d.ts +7 -0
- package/dist/render-blocks/text.d.ts.map +1 -0
- package/dist/render-blocks/text.js +183 -0
- package/dist/render-blocks/text.js.map +1 -0
- package/dist/render-blocks/watermark.d.ts +8 -0
- package/dist/render-blocks/watermark.d.ts.map +1 -0
- package/dist/render-blocks/watermark.js +52 -0
- package/dist/render-blocks/watermark.js.map +1 -0
- package/dist/render-extras.d.ts.map +1 -1
- package/dist/render-extras.js +1 -2
- package/dist/render-extras.js.map +1 -1
- package/dist/render-utils.d.ts.map +1 -1
- package/dist/render-utils.js +10 -6
- package/dist/render-utils.js.map +1 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +9 -3
- package/dist/render.js.map +1 -1
- package/dist/rich-text.d.ts +2 -1
- package/dist/rich-text.d.ts.map +1 -1
- package/dist/rich-text.js +0 -1
- package/dist/rich-text.js.map +1 -1
- package/dist/types-internal.d.ts +19 -3
- package/dist/types-internal.d.ts.map +1 -1
- package/dist/types-public/document.d.ts +261 -0
- package/dist/types-public/document.d.ts.map +1 -0
- package/dist/types-public/document.js +2 -0
- package/dist/types-public/document.js.map +1 -0
- package/dist/types-public/elements-block.d.ts +246 -0
- package/dist/types-public/elements-block.d.ts.map +1 -0
- package/dist/types-public/elements-block.js +8 -0
- package/dist/types-public/elements-block.js.map +1 -0
- package/dist/types-public/elements-media.d.ts +199 -0
- package/dist/types-public/elements-media.d.ts.map +1 -0
- package/dist/types-public/elements-media.js +2 -0
- package/dist/types-public/elements-media.js.map +1 -0
- package/dist/types-public/elements-text.d.ts +327 -0
- package/dist/types-public/elements-text.d.ts.map +1 -0
- package/dist/types-public/elements-text.js +2 -0
- package/dist/types-public/elements-text.js.map +1 -0
- package/dist/types-public/index.d.ts +14 -0
- package/dist/types-public/index.d.ts.map +1 -0
- package/dist/types-public/index.js +2 -0
- package/dist/types-public/index.js.map +1 -0
- package/dist/types-public/render-options.d.ts +38 -0
- package/dist/types-public/render-options.d.ts.map +1 -0
- package/dist/types-public/render-options.js +2 -0
- package/dist/types-public/render-options.js.map +1 -0
- package/dist/types-public/union.d.ts +13 -0
- package/dist/types-public/union.d.ts.map +1 -0
- package/dist/types-public/union.js +2 -0
- package/dist/types-public/union.js.map +1 -0
- package/dist/types-public/validation.d.ts +64 -0
- package/dist/types-public/validation.d.ts.map +1 -0
- package/dist/types-public/validation.js +2 -0
- package/dist/types-public/validation.js.map +1 -0
- package/dist/types-public.d.ts +5 -1081
- package/dist/types-public.d.ts.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/validate/document.d.ts +28 -0
- package/dist/validate/document.d.ts.map +1 -0
- package/dist/validate/document.js +295 -0
- package/dist/validate/document.js.map +1 -0
- package/dist/validate/elements/forms-floats.d.ts +19 -0
- package/dist/validate/elements/forms-floats.d.ts.map +1 -0
- package/dist/validate/elements/forms-floats.js +96 -0
- package/dist/validate/elements/forms-floats.js.map +1 -0
- package/dist/validate/elements/list.d.ts +10 -0
- package/dist/validate/elements/list.d.ts.map +1 -0
- package/dist/validate/elements/list.js +66 -0
- package/dist/validate/elements/list.js.map +1 -0
- package/dist/validate/elements/media.d.ts +23 -0
- package/dist/validate/elements/media.d.ts.map +1 -0
- package/dist/validate/elements/media.js +179 -0
- package/dist/validate/elements/media.js.map +1 -0
- package/dist/validate/elements/structural-simple.d.ts +21 -0
- package/dist/validate/elements/structural-simple.d.ts.map +1 -0
- package/dist/validate/elements/structural-simple.js +63 -0
- package/dist/validate/elements/structural-simple.js.map +1 -0
- package/dist/validate/elements/structural.d.ts +12 -0
- package/dist/validate/elements/structural.d.ts.map +1 -0
- package/dist/validate/elements/structural.js +12 -0
- package/dist/validate/elements/structural.js.map +1 -0
- package/dist/validate/elements/table.d.ts +10 -0
- package/dist/validate/elements/table.d.ts.map +1 -0
- package/dist/validate/elements/table.js +165 -0
- package/dist/validate/elements/table.js.map +1 -0
- package/dist/validate/elements/text.d.ts +26 -0
- package/dist/validate/elements/text.d.ts.map +1 -0
- package/dist/validate/elements/text.js +331 -0
- package/dist/validate/elements/text.js.map +1 -0
- package/dist/validate/errors.d.ts +9 -0
- package/dist/validate/errors.d.ts.map +1 -0
- package/dist/validate/errors.js +43 -0
- package/dist/validate/errors.js.map +1 -0
- package/dist/validate/fonts.d.ts +11 -0
- package/dist/validate/fonts.d.ts.map +1 -0
- package/dist/validate/fonts.js +118 -0
- package/dist/validate/fonts.js.map +1 -0
- package/dist/validate/helpers.d.ts +76 -0
- package/dist/validate/helpers.d.ts.map +1 -0
- package/dist/validate/helpers.js +169 -0
- package/dist/validate/helpers.js.map +1 -0
- package/dist/validate/index.d.ts +37 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +279 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate.d.ts +6 -18
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +6 -1585
- package/dist/validate.js.map +1 -1
- package/dist/vendor/pretext/VERSION.d.ts +3 -0
- package/dist/vendor/pretext/VERSION.d.ts.map +1 -0
- package/dist/vendor/pretext/VERSION.js +12 -0
- package/dist/vendor/pretext/VERSION.js.map +1 -0
- package/dist/version-check.d.ts +47 -0
- package/dist/version-check.d.ts.map +1 -0
- package/dist/version-check.js +75 -0
- package/dist/version-check.js.map +1 -0
- package/package.json +26 -7
- package/dist/measure-blocks.d.ts +0 -26
- package/dist/measure-blocks.d.ts.map +0 -1
- package/dist/measure-blocks.js +0 -1317
- package/dist/measure-blocks.js.map +0 -1
- package/dist/render-blocks.d.ts +0 -28
- package/dist/render-blocks.d.ts.map +0 -1
- package/dist/render-blocks.js +0 -1059
- package/dist/render-blocks.js.map +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* measure-blocks/index.ts — Per-element-type measurement dispatcher.
|
|
3
|
+
*
|
|
4
|
+
* Each switch arm in measureBlock() routes to a per-type helper in a sibling
|
|
5
|
+
* module. Public API (measureBlock, measureImageWithKey, measureFloatImageBlock,
|
|
6
|
+
* measureFloatGroup, resolveColumnWidths) is re-exported from here so callers
|
|
7
|
+
* can either import the dispatcher directly or, for legacy paths,
|
|
8
|
+
* `src/measure-blocks.ts` (a one-line barrel onto this file).
|
|
9
|
+
*
|
|
10
|
+
* v1.4.1 (M2): float-group.ts no longer imports measureBlock from this
|
|
11
|
+
* module. Callers (measure.ts orchestrator) pass measureBlock in as a
|
|
12
|
+
* parameter to break the runtime import cycle:
|
|
13
|
+
* was: float-group.ts -> ./index.js -> ./float-group.js (cycle)
|
|
14
|
+
* now: index.ts re-exports measureFloatGroup; float-group.ts has no
|
|
15
|
+
* back-edge to index.ts.
|
|
16
|
+
*/
|
|
17
|
+
import type { ContentElement, PdfDocument } from '../types.js';
|
|
18
|
+
import type { MeasuredBlock } from '../types-internal.js';
|
|
19
|
+
import type { HyphenatorOpts } from '../measure-text.js';
|
|
20
|
+
export { resolveColumnWidths } from './table/columns.js';
|
|
21
|
+
export { measureImageWithKey, measureFloatImageBlock } from './image.js';
|
|
22
|
+
export { measureFloatGroup } from './float-group.js';
|
|
23
|
+
export declare function measureBlock(element: ContentElement, contentWidth: number, doc: PdfDocument, hyphenatorOpts?: HyphenatorOpts, wordWidthCache?: Map<string, number>): Promise<MeasuredBlock | MeasuredBlock[]>;
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/measure-blocks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAKzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAexD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,WAAW,EAChB,cAAc,CAAC,EAAE,cAAc,EAC/B,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,aAAa,GAAG,aAAa,EAAE,CAAC,CAkM1C"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* measure-blocks/index.ts — Per-element-type measurement dispatcher.
|
|
3
|
+
*
|
|
4
|
+
* Each switch arm in measureBlock() routes to a per-type helper in a sibling
|
|
5
|
+
* module. Public API (measureBlock, measureImageWithKey, measureFloatImageBlock,
|
|
6
|
+
* measureFloatGroup, resolveColumnWidths) is re-exported from here so callers
|
|
7
|
+
* can either import the dispatcher directly or, for legacy paths,
|
|
8
|
+
* `src/measure-blocks.ts` (a one-line barrel onto this file).
|
|
9
|
+
*
|
|
10
|
+
* v1.4.1 (M2): float-group.ts no longer imports measureBlock from this
|
|
11
|
+
* module. Callers (measure.ts orchestrator) pass measureBlock in as a
|
|
12
|
+
* parameter to break the runtime import cycle:
|
|
13
|
+
* was: float-group.ts -> ./index.js -> ./float-group.js (cycle)
|
|
14
|
+
* now: index.ts re-exports measureFloatGroup; float-group.ts has no
|
|
15
|
+
* back-edge to index.ts.
|
|
16
|
+
*/
|
|
17
|
+
import { PretextPdfError } from '../errors.js';
|
|
18
|
+
import { buildFontKey } from '../measure.js';
|
|
19
|
+
import { measureRichText } from '../rich-text.js';
|
|
20
|
+
import { detectAndReorderRTL } from '../measure-text.js';
|
|
21
|
+
import { LINE_HEIGHT_BODY } from '../render-utils.js';
|
|
22
|
+
import { measureParagraph, measureHeading, measureBlockquote, measureCallout, measureCode, } from './text-blocks.js';
|
|
23
|
+
import { measureList } from './list.js';
|
|
24
|
+
import { measureTable } from './table/measure.js';
|
|
25
|
+
import { measureSpacer, measurePageBreak, measureComment, measureFormField, measureHr, measureToc, measureFootnoteDef, } from './simple-blocks.js';
|
|
26
|
+
// Re-export the table column-width resolver for external consumers / tests.
|
|
27
|
+
export { resolveColumnWidths } from './table/columns.js';
|
|
28
|
+
// Re-export image + float-group helpers for callers that import them directly.
|
|
29
|
+
export { measureImageWithKey, measureFloatImageBlock } from './image.js';
|
|
30
|
+
export { measureFloatGroup } from './float-group.js';
|
|
31
|
+
export async function measureBlock(element, contentWidth, doc, hyphenatorOpts, wordWidthCache) {
|
|
32
|
+
const baseFontSize = doc.defaultFontSize ?? 12;
|
|
33
|
+
const baseFont = doc.defaultFont ?? 'Inter';
|
|
34
|
+
// Reject the internal TOC entry type. TocEntryElement is synthesized
|
|
35
|
+
// internally by the TOC pass and never produced from user-supplied content.
|
|
36
|
+
if (element.type === 'toc-entry') {
|
|
37
|
+
throw new PretextPdfError('VALIDATION_ERROR', 'toc-entry is an internal type and cannot be used in document content');
|
|
38
|
+
}
|
|
39
|
+
switch (element.type) {
|
|
40
|
+
case 'spacer': {
|
|
41
|
+
return measureSpacer(element);
|
|
42
|
+
}
|
|
43
|
+
case 'page-break': {
|
|
44
|
+
return measurePageBreak(element);
|
|
45
|
+
}
|
|
46
|
+
case 'comment': {
|
|
47
|
+
return measureComment(element);
|
|
48
|
+
}
|
|
49
|
+
case 'form-field': {
|
|
50
|
+
return measureFormField(element, baseFontSize, baseFont);
|
|
51
|
+
}
|
|
52
|
+
case 'paragraph': {
|
|
53
|
+
return measureParagraph(element, contentWidth, doc, baseFontSize, baseFont, hyphenatorOpts, wordWidthCache);
|
|
54
|
+
}
|
|
55
|
+
case 'heading': {
|
|
56
|
+
return measureHeading(element, contentWidth, doc, baseFontSize, baseFont, hyphenatorOpts, wordWidthCache);
|
|
57
|
+
}
|
|
58
|
+
case 'hr': {
|
|
59
|
+
return measureHr(element);
|
|
60
|
+
}
|
|
61
|
+
case 'image': {
|
|
62
|
+
// Image elements must be measured via measureAllBlocks() — not measureBlock() directly.
|
|
63
|
+
// measureAllBlocks() resolves the content-index-based imageMap key (img-N) before calling
|
|
64
|
+
// measureImageWithKey(). measureBlock() doesn't have access to the content index.
|
|
65
|
+
throw new PretextPdfError('VALIDATION_ERROR', 'Image elements cannot be measured via measureBlock() directly — use measureAllBlocks() which resolves the imageMap key correctly.');
|
|
66
|
+
}
|
|
67
|
+
case 'svg': {
|
|
68
|
+
// SVG elements must be measured via measureAllBlocks() — not measureBlock() directly.
|
|
69
|
+
// measureAllBlocks() resolves the content-index-based imageMap key (svg-N) before calling
|
|
70
|
+
// measureImageWithKey(). measureBlock() doesn't have access to the content index.
|
|
71
|
+
throw new PretextPdfError('VALIDATION_ERROR', 'SVG elements cannot be measured via measureBlock() directly — use measureAllBlocks() which resolves the imageMap key correctly.');
|
|
72
|
+
}
|
|
73
|
+
case 'qr-code':
|
|
74
|
+
case 'barcode':
|
|
75
|
+
case 'chart': {
|
|
76
|
+
// QR/barcode/chart elements measured via measureAllBlocks() which generates the SVG
|
|
77
|
+
// and dispatches through the SVG path. measureBlock() doesn't have content-index context.
|
|
78
|
+
throw new PretextPdfError('VALIDATION_ERROR', `'${element.type}' elements cannot be measured via measureBlock() directly — use measureAllBlocks() which generates the underlying SVG.`);
|
|
79
|
+
}
|
|
80
|
+
case 'list': {
|
|
81
|
+
return measureList(element, contentWidth, doc, baseFontSize, hyphenatorOpts, wordWidthCache);
|
|
82
|
+
}
|
|
83
|
+
case 'table': {
|
|
84
|
+
return measureTable(element, contentWidth, doc, baseFontSize, hyphenatorOpts, wordWidthCache);
|
|
85
|
+
}
|
|
86
|
+
case 'rich-paragraph': {
|
|
87
|
+
// Detect paragraph-level RTL direction for alignment default
|
|
88
|
+
// Individual spans can override via span.dir, but paragraph.dir sets the default
|
|
89
|
+
const fullText = element.spans.map(s => s.text).join('');
|
|
90
|
+
const { isRTL } = await detectAndReorderRTL(fullText, element.dir);
|
|
91
|
+
const fontSize = element.fontSize ?? baseFontSize;
|
|
92
|
+
const lineHeight = element.lineHeight ?? doc.defaultLineHeight ?? (fontSize * LINE_HEIGHT_BODY);
|
|
93
|
+
// 'justify' uses left alignment for measurement (justify is rendering-only)
|
|
94
|
+
const alignRaw = element.align ?? 'left';
|
|
95
|
+
const align = alignRaw === 'justify' ? 'left' : alignRaw;
|
|
96
|
+
const columns = element.columns ?? 1;
|
|
97
|
+
const columnGap = element.columnGap ?? 24;
|
|
98
|
+
let measureWidth = contentWidth;
|
|
99
|
+
let columnData;
|
|
100
|
+
// Multi-column layout
|
|
101
|
+
if (columns > 1) {
|
|
102
|
+
const columnWidth = (contentWidth - (columns - 1) * columnGap) / columns;
|
|
103
|
+
if (columnWidth < 50) {
|
|
104
|
+
throw new PretextPdfError('COLUMN_WIDTH_TOO_NARROW', `Column width would be ${columnWidth.toFixed(1)}pt, which is below the minimum 50pt. Reduce columns, increase columnGap, or increase page width.`);
|
|
105
|
+
}
|
|
106
|
+
measureWidth = columnWidth;
|
|
107
|
+
}
|
|
108
|
+
const richLines = await measureRichText(element.spans, fontSize, lineHeight, measureWidth, align, doc);
|
|
109
|
+
if (columns > 1) {
|
|
110
|
+
const columnWidth = (contentWidth - (columns - 1) * columnGap) / columns;
|
|
111
|
+
const linesPerColumn = Math.ceil(richLines.length / columns);
|
|
112
|
+
columnData = { columnCount: columns, columnGap, columnWidth, linesPerColumn };
|
|
113
|
+
}
|
|
114
|
+
// For paginator/renderer compatibility, also produce a flat lines[] array
|
|
115
|
+
// (used for orphan/widow logic and line-count-based pagination).
|
|
116
|
+
// Each RichLine becomes one PretextLine with its totalWidth.
|
|
117
|
+
const lines = richLines.map(rl => ({
|
|
118
|
+
text: rl.fragments.map(f => f.text).join(''),
|
|
119
|
+
width: rl.totalWidth,
|
|
120
|
+
}));
|
|
121
|
+
// Construct result with or without columnData depending on columns value
|
|
122
|
+
// Block height = sum of per-line heights (variable when spans use different font sizes)
|
|
123
|
+
const blockHeight = richLines.reduce((sum, rl) => sum + rl.lineHeight, 0);
|
|
124
|
+
if (columnData) {
|
|
125
|
+
return {
|
|
126
|
+
element,
|
|
127
|
+
height: blockHeight, // richLines already have per-line heights
|
|
128
|
+
lines,
|
|
129
|
+
fontSize,
|
|
130
|
+
lineHeight,
|
|
131
|
+
fontKey: buildFontKey(doc.defaultFont ?? 'Inter', 400, 'normal'),
|
|
132
|
+
spaceAfter: element.spaceAfter ?? 0,
|
|
133
|
+
spaceBefore: element.spaceBefore ?? 0,
|
|
134
|
+
richLines,
|
|
135
|
+
columnData,
|
|
136
|
+
isRTL,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
return {
|
|
141
|
+
element,
|
|
142
|
+
height: blockHeight, // richLines already have per-line heights
|
|
143
|
+
lines,
|
|
144
|
+
fontSize,
|
|
145
|
+
lineHeight,
|
|
146
|
+
fontKey: buildFontKey(doc.defaultFont ?? 'Inter', 400, 'normal'),
|
|
147
|
+
spaceAfter: element.spaceAfter ?? 0,
|
|
148
|
+
spaceBefore: element.spaceBefore ?? 0,
|
|
149
|
+
richLines,
|
|
150
|
+
isRTL,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
case 'code': {
|
|
155
|
+
return measureCode(element, contentWidth, doc, baseFontSize, wordWidthCache);
|
|
156
|
+
}
|
|
157
|
+
case 'blockquote': {
|
|
158
|
+
return measureBlockquote(element, contentWidth, doc, baseFontSize, baseFont, hyphenatorOpts, wordWidthCache);
|
|
159
|
+
}
|
|
160
|
+
case 'callout': {
|
|
161
|
+
return measureCallout(element, contentWidth, doc, baseFontSize, baseFont, hyphenatorOpts, wordWidthCache);
|
|
162
|
+
}
|
|
163
|
+
case 'toc': {
|
|
164
|
+
return measureToc(element);
|
|
165
|
+
}
|
|
166
|
+
case 'footnote-def': {
|
|
167
|
+
return measureFootnoteDef(element, contentWidth, doc, wordWidthCache);
|
|
168
|
+
}
|
|
169
|
+
case 'float-group': {
|
|
170
|
+
// Float groups are handled at the measure.ts orchestrator level, not here
|
|
171
|
+
throw new PretextPdfError('VALIDATION_ERROR', 'float-group cannot be measured by measureBlock — it should be handled by measureAllBlocks in measure.ts');
|
|
172
|
+
}
|
|
173
|
+
default: {
|
|
174
|
+
const unknownType = element.type;
|
|
175
|
+
throw new PretextPdfError('VALIDATION_ERROR', `Unknown element type: "${String(unknownType)}"`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/measure-blocks/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* measure-blocks/list.ts — List measurement (returns MeasuredBlock[] — one block per list item).
|
|
3
|
+
*/
|
|
4
|
+
import type { ListElement, PdfDocument } from '../types.js';
|
|
5
|
+
import type { MeasuredBlock } from '../types-internal.js';
|
|
6
|
+
import type { HyphenatorOpts } from '../measure-text.js';
|
|
7
|
+
export declare function measureList(element: ListElement, contentWidth: number, doc: PdfDocument, baseFontSize: number, hyphenatorOpts?: HyphenatorOpts, wordWidthCache?: Map<string, number>): Promise<MeasuredBlock[]>;
|
|
8
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/measure-blocks/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,sBAAsB,CAAA;AAIvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAIxD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,cAAc,EAC/B,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,aAAa,EAAE,CAAC,CAkH1B"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* measure-blocks/list.ts — List measurement (returns MeasuredBlock[] — one block per list item).
|
|
3
|
+
*/
|
|
4
|
+
import { PretextPdfError } from '../errors.js';
|
|
5
|
+
import { buildFontKey } from '../measure.js';
|
|
6
|
+
import { measureText } from '../measure-text.js';
|
|
7
|
+
import { LINE_HEIGHT_BODY } from '../render-utils.js';
|
|
8
|
+
import { measureNaturalTextWidth } from './helpers.js';
|
|
9
|
+
export async function measureList(element, contentWidth, doc, baseFontSize, hyphenatorOpts, wordWidthCache) {
|
|
10
|
+
const baseFontFamily = doc.defaultFont ?? 'Inter';
|
|
11
|
+
const fontSize = element.fontSize ?? baseFontSize;
|
|
12
|
+
const lineHeight = element.lineHeight ?? doc.defaultLineHeight ?? (fontSize * LINE_HEIGHT_BODY);
|
|
13
|
+
const indent = element.indent ?? 20;
|
|
14
|
+
const itemSpaceAfter = element.itemSpaceAfter ?? 4;
|
|
15
|
+
const fontKey = buildFontKey(baseFontFamily, 400, 'normal');
|
|
16
|
+
const blocks = [];
|
|
17
|
+
// Flatten items and nested items (up to 2 levels deep)
|
|
18
|
+
const nestedStyle = element.nestedNumberingStyle ?? 'continue';
|
|
19
|
+
let orderedIndex = 1;
|
|
20
|
+
const allItems = [];
|
|
21
|
+
for (let i = 0; i < element.items.length; i++) {
|
|
22
|
+
const item = element.items[i];
|
|
23
|
+
const isFirst = i === 0;
|
|
24
|
+
const marker = element.style === 'ordered'
|
|
25
|
+
? `${orderedIndex}.`
|
|
26
|
+
: (element.marker ?? '•');
|
|
27
|
+
orderedIndex++;
|
|
28
|
+
allItems.push({ text: item.text, marker, depth: 0, isFirstInList: isFirst, fontWeight: item.fontWeight ?? 400 });
|
|
29
|
+
// Nested items (depth 1)
|
|
30
|
+
if (item.items && item.items.length > 0) {
|
|
31
|
+
// 'restart': nested ordered items count from 1, parent counter unaffected
|
|
32
|
+
// 'continue': nested items share the parent counter (existing behavior)
|
|
33
|
+
let nestedIndex = nestedStyle === 'restart' ? 1 : orderedIndex;
|
|
34
|
+
for (let ni = 0; ni < item.items.length; ni++) {
|
|
35
|
+
const nested = item.items[ni];
|
|
36
|
+
const nestedMarker = element.style === 'ordered'
|
|
37
|
+
? `${nestedIndex}.`
|
|
38
|
+
: '◦'; // hollow bullet for depth-1 unordered
|
|
39
|
+
nestedIndex++;
|
|
40
|
+
if (nestedStyle === 'continue')
|
|
41
|
+
orderedIndex++;
|
|
42
|
+
allItems.push({ text: nested.text, marker: nestedMarker, depth: 1, isFirstInList: false, fontWeight: nested.fontWeight ?? 400 });
|
|
43
|
+
// Nested items (depth 2)
|
|
44
|
+
if (nested.items && nested.items.length > 0) {
|
|
45
|
+
let deepIndex = nestedStyle === 'restart' ? 1 : nestedIndex;
|
|
46
|
+
for (let di = 0; di < nested.items.length; di++) {
|
|
47
|
+
const deep = nested.items[di];
|
|
48
|
+
const deepMarker = element.style === 'ordered'
|
|
49
|
+
? `${deepIndex}.`
|
|
50
|
+
: '▪'; // small filled square for depth-2 unordered
|
|
51
|
+
deepIndex++;
|
|
52
|
+
if (nestedStyle === 'continue')
|
|
53
|
+
orderedIndex++;
|
|
54
|
+
allItems.push({ text: deep.text, marker: deepMarker, depth: 2, isFirstInList: false, fontWeight: deep.fontWeight ?? 400 });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Compute markerWidth: use explicit override if set, otherwise measure widest marker
|
|
61
|
+
let markerWidth;
|
|
62
|
+
if (element.markerWidth != null) {
|
|
63
|
+
markerWidth = element.markerWidth;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
const widestMarker = element.style === 'ordered'
|
|
67
|
+
? `${allItems.length}.`
|
|
68
|
+
: (element.marker ?? '•');
|
|
69
|
+
const measured = await measureNaturalTextWidth(widestMarker, fontSize, baseFontFamily, 400);
|
|
70
|
+
markerWidth = Math.max(16, measured + 6);
|
|
71
|
+
}
|
|
72
|
+
// Width available for item text (after indent + marker column)
|
|
73
|
+
const textWidth = contentWidth - indent - markerWidth;
|
|
74
|
+
if (textWidth <= 0) {
|
|
75
|
+
throw new PretextPdfError('VALIDATION_ERROR', `List indent (${indent}pt) + markerWidth (${markerWidth}pt) exceeds contentWidth (${contentWidth}pt). Reduce indent or markerWidth.`);
|
|
76
|
+
}
|
|
77
|
+
for (let i = 0; i < allItems.length; i++) {
|
|
78
|
+
const item = allItems[i];
|
|
79
|
+
const isLast = i === allItems.length - 1;
|
|
80
|
+
const nestedIndent = indent + item.depth * markerWidth;
|
|
81
|
+
const nestedTextWidth = textWidth - item.depth * markerWidth;
|
|
82
|
+
const lines = await measureText(item.text, fontSize, baseFontFamily, item.fontWeight, nestedTextWidth, lineHeight, hyphenatorOpts, wordWidthCache);
|
|
83
|
+
const listItemData = {
|
|
84
|
+
marker: item.marker,
|
|
85
|
+
indent: nestedIndent,
|
|
86
|
+
markerWidth,
|
|
87
|
+
color: element.color ?? '#000000',
|
|
88
|
+
fontWeight: item.fontWeight,
|
|
89
|
+
};
|
|
90
|
+
// spaceBefore: only the first item in the entire list gets the list's spaceBefore
|
|
91
|
+
// spaceAfter: itemSpaceAfter between items, list.spaceAfter on the last item
|
|
92
|
+
const spaceBefore = item.isFirstInList ? (element.spaceBefore ?? 0) : 0;
|
|
93
|
+
const spaceAfter = isLast ? (element.spaceAfter ?? 0) : itemSpaceAfter;
|
|
94
|
+
blocks.push({
|
|
95
|
+
element, // All items share the parent ListElement (for type checking in renderer)
|
|
96
|
+
height: Math.max(lines.length, 1) * lineHeight,
|
|
97
|
+
lines,
|
|
98
|
+
fontSize,
|
|
99
|
+
lineHeight,
|
|
100
|
+
fontKey,
|
|
101
|
+
spaceAfter,
|
|
102
|
+
spaceBefore,
|
|
103
|
+
listItemData,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return blocks;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/measure-blocks/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAEtD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAoB,EACpB,YAAoB,EACpB,GAAgB,EAChB,YAAoB,EACpB,cAA+B,EAC/B,cAAoC;IAEpC,MAAM,cAAc,GAAG,GAAG,CAAC,WAAW,IAAI,OAAO,CAAA;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAA;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC,iBAAiB,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,CAAA;IAC/F,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAA;IACnC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAA;IAClD,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;IAE3D,MAAM,MAAM,GAAoB,EAAE,CAAA;IAElC,uDAAuD;IACvD,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,IAAI,UAAU,CAAA;IAC9D,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,MAAM,QAAQ,GAA0G,EAAE,CAAA;IAE1H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,CAAA;QAC9B,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAA;QAEvB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS;YACxC,CAAC,CAAC,GAAG,YAAY,GAAG;YACpB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,CAAA;QAC3B,YAAY,EAAE,CAAA;QAEd,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC,CAAA;QAEhH,yBAAyB;QACzB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,0EAA0E;YAC1E,wEAAwE;YACxE,IAAI,WAAW,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;YAC9D,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;gBAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAE,CAAA;gBAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS;oBAC9C,CAAC,CAAC,GAAG,WAAW,GAAG;oBACnB,CAAC,CAAC,GAAG,CAAA,CAAE,sCAAsC;gBAC/C,WAAW,EAAE,CAAA;gBACb,IAAI,WAAW,KAAK,UAAU;oBAAE,YAAY,EAAE,CAAA;gBAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC,CAAA;gBAEhI,yBAAyB;gBACzB,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5C,IAAI,SAAS,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA;oBAC3D,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;wBAChD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAE,CAAA;wBAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS;4BAC5C,CAAC,CAAC,GAAG,SAAS,GAAG;4BACjB,CAAC,CAAC,GAAG,CAAA,CAAE,4CAA4C;wBACrD,SAAS,EAAE,CAAA;wBACX,IAAI,WAAW,KAAK,UAAU;4BAAE,YAAY,EAAE,CAAA;wBAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC,CAAA;oBAC5H,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,qFAAqF;IACrF,IAAI,WAAmB,CAAA;IACvB,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;QAChC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;IACnC,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS;YAC9C,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG;YACvB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,CAAA;QAC3B,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC,CAAA;QAC3F,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAA;IAC1C,CAAC;IAED,+DAA+D;IAC/D,MAAM,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,WAAW,CAAA;IAErD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,eAAe,CACvB,kBAAkB,EAClB,gBAAgB,MAAM,sBAAsB,WAAW,6BAA6B,YAAY,oCAAoC,CACrI,CAAA;IACH,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAA;QACzB,MAAM,MAAM,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;QACxC,MAAM,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW,CAAA;QACtD,MAAM,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW,CAAA;QAE5D,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,CAAC,CAAA;QAElJ,MAAM,YAAY,GAAiB;YACjC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,YAAY;YACpB,WAAW;YACX,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;YACjC,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAA;QAED,kFAAkF;QAClF,6EAA6E;QAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvE,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAA;QAEtE,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAS,yEAAyE;YACzF,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,UAAU;YAC9C,KAAK;YACL,QAAQ;YACR,UAAU;YACV,OAAO;YACP,UAAU;YACV,WAAW;YACX,YAAY;SACb,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* measure-blocks/simple-blocks.ts — Measurement helpers for element types
|
|
3
|
+
* whose measurement is pure metadata (no logic the dispatcher needs to
|
|
4
|
+
* coordinate): spacer, page-break, comment, form-field, hr, toc, footnote-def.
|
|
5
|
+
*
|
|
6
|
+
* Extracted from measure-blocks/index.ts to keep the dispatcher focused on
|
|
7
|
+
* routing. Behavior is identical — only the location changed.
|
|
8
|
+
*/
|
|
9
|
+
import type { PdfDocument, SpacerElement, PageBreakElement, CommentElement, FormFieldElement, HorizontalRuleElement, TocElement, FootnoteDefElement } from '../types.js';
|
|
10
|
+
import type { MeasuredBlock } from '../types-internal.js';
|
|
11
|
+
export declare function measureSpacer(element: SpacerElement): MeasuredBlock;
|
|
12
|
+
export declare function measurePageBreak(element: PageBreakElement): MeasuredBlock;
|
|
13
|
+
export declare function measureComment(element: CommentElement): MeasuredBlock;
|
|
14
|
+
export declare function measureFormField(element: FormFieldElement, baseFontSize: number, baseFont: string): MeasuredBlock;
|
|
15
|
+
export declare function measureHr(element: HorizontalRuleElement): MeasuredBlock;
|
|
16
|
+
export declare function measureToc(element: TocElement): MeasuredBlock;
|
|
17
|
+
export declare function measureFootnoteDef(element: FootnoteDefElement, contentWidth: number, doc: PdfDocument, wordWidthCache?: Map<string, number>): Promise<MeasuredBlock>;
|
|
18
|
+
//# sourceMappingURL=simple-blocks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-blocks.d.ts","sourceRoot":"","sources":["../../src/measure-blocks/simple-blocks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACM,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAC5D,cAAc,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,UAAU,EACnE,kBAAkB,EACnB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAKzD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAWnE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa,CAWzE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAWrE;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,aAAa,CAoBf;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAcvE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,aAAa,CAY7D;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,WAAW,EAChB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,aAAa,CAAC,CA+BxB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* measure-blocks/simple-blocks.ts — Measurement helpers for element types
|
|
3
|
+
* whose measurement is pure metadata (no logic the dispatcher needs to
|
|
4
|
+
* coordinate): spacer, page-break, comment, form-field, hr, toc, footnote-def.
|
|
5
|
+
*
|
|
6
|
+
* Extracted from measure-blocks/index.ts to keep the dispatcher focused on
|
|
7
|
+
* routing. Behavior is identical — only the location changed.
|
|
8
|
+
*/
|
|
9
|
+
import { buildFontKey } from '../measure.js';
|
|
10
|
+
import { measureText } from '../measure-text.js';
|
|
11
|
+
import { LINE_HEIGHT_BODY } from '../render-utils.js';
|
|
12
|
+
export function measureSpacer(element) {
|
|
13
|
+
return {
|
|
14
|
+
element: element,
|
|
15
|
+
height: element.height,
|
|
16
|
+
lines: [],
|
|
17
|
+
fontSize: 0,
|
|
18
|
+
lineHeight: 0,
|
|
19
|
+
fontKey: '',
|
|
20
|
+
spaceAfter: 0,
|
|
21
|
+
spaceBefore: 0,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function measurePageBreak(element) {
|
|
25
|
+
return {
|
|
26
|
+
element: element,
|
|
27
|
+
height: 0,
|
|
28
|
+
lines: [],
|
|
29
|
+
fontSize: 0,
|
|
30
|
+
lineHeight: 0,
|
|
31
|
+
fontKey: '',
|
|
32
|
+
spaceAfter: 0,
|
|
33
|
+
spaceBefore: 0,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function measureComment(element) {
|
|
37
|
+
return {
|
|
38
|
+
element: element,
|
|
39
|
+
height: 20,
|
|
40
|
+
lines: [],
|
|
41
|
+
fontSize: 0,
|
|
42
|
+
lineHeight: 0,
|
|
43
|
+
fontKey: '',
|
|
44
|
+
spaceAfter: element.spaceAfter ?? 0,
|
|
45
|
+
spaceBefore: 0,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export function measureFormField(element, baseFontSize, baseFont) {
|
|
49
|
+
const fs = element.fontSize ?? baseFontSize;
|
|
50
|
+
const labelHeight = element.label ? fs * LINE_HEIGHT_BODY + 4 : 0;
|
|
51
|
+
let fieldHeight = element.height;
|
|
52
|
+
if (!fieldHeight) {
|
|
53
|
+
if (element.fieldType === 'text' && element.multiline)
|
|
54
|
+
fieldHeight = 60;
|
|
55
|
+
else if (element.fieldType === 'radio')
|
|
56
|
+
fieldHeight = 20 * Math.max(1, element.options?.length ?? 1);
|
|
57
|
+
else
|
|
58
|
+
fieldHeight = 24;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
element: element,
|
|
62
|
+
height: labelHeight + fieldHeight + (element.spaceAfter ?? 8),
|
|
63
|
+
lines: [],
|
|
64
|
+
fontSize: fs,
|
|
65
|
+
lineHeight: fieldHeight,
|
|
66
|
+
fontKey: buildFontKey(baseFont, 400, 'normal'),
|
|
67
|
+
spaceAfter: element.spaceAfter ?? 8,
|
|
68
|
+
spaceBefore: element.spaceBefore ?? 0,
|
|
69
|
+
formFieldData: { labelHeight, fieldHeight },
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export function measureHr(element) {
|
|
73
|
+
const spaceAbove = element.spaceAbove ?? element.spaceBefore ?? 12;
|
|
74
|
+
const thickness = element.thickness ?? 0.5;
|
|
75
|
+
const spaceBelow = element.spaceBelow ?? element.spaceAfter ?? 12;
|
|
76
|
+
return {
|
|
77
|
+
element: element,
|
|
78
|
+
height: spaceAbove + thickness + spaceBelow,
|
|
79
|
+
lines: [],
|
|
80
|
+
fontSize: 0,
|
|
81
|
+
lineHeight: 0,
|
|
82
|
+
fontKey: '',
|
|
83
|
+
spaceAfter: 0,
|
|
84
|
+
spaceBefore: 0,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export function measureToc(element) {
|
|
88
|
+
// Placeholder: zero height. Will be replaced by actual TOC entries in two-pass mode.
|
|
89
|
+
return {
|
|
90
|
+
element: element,
|
|
91
|
+
height: 0,
|
|
92
|
+
lines: [],
|
|
93
|
+
fontSize: 0,
|
|
94
|
+
lineHeight: 0,
|
|
95
|
+
fontKey: '',
|
|
96
|
+
spaceAfter: element.spaceAfter ?? 0,
|
|
97
|
+
spaceBefore: element.spaceBefore ?? 0,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export async function measureFootnoteDef(element, contentWidth, doc, wordWidthCache) {
|
|
101
|
+
const fnBaseFontSize = doc.defaultFontSize ?? 12;
|
|
102
|
+
const fontSize = element.fontSize ?? Math.max(8, fnBaseFontSize - 2);
|
|
103
|
+
const lineHeight = fontSize * LINE_HEIGHT_BODY;
|
|
104
|
+
const fontFamily = element.fontFamily ?? doc.defaultFont ?? 'Inter';
|
|
105
|
+
const fontKey = buildFontKey(fontFamily, 400, 'normal');
|
|
106
|
+
// Measure the def text with a 20pt left indent (for the number prefix space)
|
|
107
|
+
const textLines = await measureText(element.text, fontSize, fontFamily, 400, contentWidth - 20, // leave space for "N. " prefix
|
|
108
|
+
lineHeight, undefined, wordWidthCache);
|
|
109
|
+
const height = textLines.length * lineHeight;
|
|
110
|
+
return {
|
|
111
|
+
element: element,
|
|
112
|
+
height,
|
|
113
|
+
lines: textLines,
|
|
114
|
+
fontSize,
|
|
115
|
+
lineHeight,
|
|
116
|
+
fontKey,
|
|
117
|
+
spaceAfter: element.spaceAfter ?? 4,
|
|
118
|
+
spaceBefore: 0,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=simple-blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-blocks.js","sourceRoot":"","sources":["../../src/measure-blocks/simple-blocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* measure-blocks/table/columns.ts — Column-width resolution for tables.
|
|
3
|
+
*
|
|
4
|
+
* resolveColumnWidths is exported by name — it's part of the package's public
|
|
5
|
+
* shape because tests and external consumers import it directly.
|
|
6
|
+
*/
|
|
7
|
+
import type { ColumnDef } from '../../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Resolve column width definitions to concrete pt values.
|
|
10
|
+
* Fixed widths are used as-is. Star widths ('2*', '*') share the remaining space.
|
|
11
|
+
* 'auto' columns use naturalWidths[i] (measured content width) — caller must pre-compute these.
|
|
12
|
+
*
|
|
13
|
+
* naturalWidths is required if any column uses 'auto'. It maps column index → natural text width in pt
|
|
14
|
+
* (the minimum width needed to display cell text on one line, including cellPaddingH on both sides).
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveColumnWidths(columns: ColumnDef[], contentWidth: number, cellPaddingH: number, borderWidth: number, naturalWidths?: number[]): number[];
|
|
17
|
+
//# sourceMappingURL=columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../../src/measure-blocks/table/columns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG/C;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,SAAS,EAAE,EACpB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CA4EV"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* measure-blocks/table/columns.ts — Column-width resolution for tables.
|
|
3
|
+
*
|
|
4
|
+
* resolveColumnWidths is exported by name — it's part of the package's public
|
|
5
|
+
* shape because tests and external consumers import it directly.
|
|
6
|
+
*/
|
|
7
|
+
import { PretextPdfError } from '../../errors.js';
|
|
8
|
+
/**
|
|
9
|
+
* Resolve column width definitions to concrete pt values.
|
|
10
|
+
* Fixed widths are used as-is. Star widths ('2*', '*') share the remaining space.
|
|
11
|
+
* 'auto' columns use naturalWidths[i] (measured content width) — caller must pre-compute these.
|
|
12
|
+
*
|
|
13
|
+
* naturalWidths is required if any column uses 'auto'. It maps column index → natural text width in pt
|
|
14
|
+
* (the minimum width needed to display cell text on one line, including cellPaddingH on both sides).
|
|
15
|
+
*/
|
|
16
|
+
export function resolveColumnWidths(columns, contentWidth, cellPaddingH, borderWidth, naturalWidths) {
|
|
17
|
+
const MIN_COLUMN_WIDTH = cellPaddingH * 2 + borderWidth * 2 + 4; // minimum usable pt
|
|
18
|
+
let totalFixed = 0;
|
|
19
|
+
let totalStars = 0;
|
|
20
|
+
let totalAutoNatural = 0;
|
|
21
|
+
let autoCount = 0;
|
|
22
|
+
for (let i = 0; i < columns.length; i++) {
|
|
23
|
+
const col = columns[i];
|
|
24
|
+
if (typeof col.width === 'number') {
|
|
25
|
+
totalFixed += col.width;
|
|
26
|
+
}
|
|
27
|
+
else if (col.width === 'auto') {
|
|
28
|
+
// Auto columns reserve their natural width from remaining space
|
|
29
|
+
const natural = naturalWidths?.[i] ?? MIN_COLUMN_WIDTH;
|
|
30
|
+
totalAutoNatural += natural;
|
|
31
|
+
autoCount++;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// '*' → 1 star, '2*' → 2 stars, '1.5*' → 1.5 stars
|
|
35
|
+
const match = col.width.match(/^(\d*\.?\d*)?\*$/);
|
|
36
|
+
const stars = (match && match[1]) ? parseFloat(match[1]) : 1;
|
|
37
|
+
totalStars += stars;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const remaining = contentWidth - totalFixed;
|
|
41
|
+
if (remaining < -0.01) {
|
|
42
|
+
throw new PretextPdfError('TABLE_COLUMN_OVERFLOW', `Table fixed column widths (${totalFixed.toFixed(1)}pt) exceed content width (${contentWidth.toFixed(1)}pt). ` +
|
|
43
|
+
`Reduce column widths or page margins.`);
|
|
44
|
+
}
|
|
45
|
+
// How much space is available after fixed columns
|
|
46
|
+
const availableForFlexible = Math.max(0, remaining);
|
|
47
|
+
// Auto columns claim their natural width (capped at available space).
|
|
48
|
+
// Star columns share whatever remains after auto columns.
|
|
49
|
+
// If auto columns overflow, they get proportional shares of available space.
|
|
50
|
+
const autoFits = totalAutoNatural <= availableForFlexible;
|
|
51
|
+
const autoUsed = autoFits ? totalAutoNatural : availableForFlexible;
|
|
52
|
+
const availableForStars = availableForFlexible - autoUsed;
|
|
53
|
+
const starUnit = totalStars > 0 ? Math.max(0, availableForStars) / totalStars : 0;
|
|
54
|
+
return columns.map((col, i) => {
|
|
55
|
+
let resolved;
|
|
56
|
+
if (typeof col.width === 'number') {
|
|
57
|
+
resolved = col.width;
|
|
58
|
+
}
|
|
59
|
+
else if (col.width === 'auto') {
|
|
60
|
+
const natural = naturalWidths?.[i] ?? MIN_COLUMN_WIDTH;
|
|
61
|
+
if (autoFits) {
|
|
62
|
+
resolved = natural;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// Constrained: proportional share based on natural widths
|
|
66
|
+
resolved = totalAutoNatural > 0
|
|
67
|
+
? (natural / totalAutoNatural) * availableForFlexible
|
|
68
|
+
: MIN_COLUMN_WIDTH;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const match = col.width.match(/^(\d*\.?\d*)?\*$/);
|
|
73
|
+
const stars = (match && match[1]) ? parseFloat(match[1]) : 1;
|
|
74
|
+
resolved = stars * starUnit;
|
|
75
|
+
}
|
|
76
|
+
if (resolved < MIN_COLUMN_WIDTH) {
|
|
77
|
+
throw new PretextPdfError('TABLE_COLUMN_TOO_NARROW', `Table column ${i} resolved to ${resolved.toFixed(1)}pt, minimum is ${MIN_COLUMN_WIDTH.toFixed(1)}pt. ` +
|
|
78
|
+
`Increase the column width or reduce cellPaddingH/borderWidth.`);
|
|
79
|
+
}
|
|
80
|
+
return resolved;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=columns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columns.js","sourceRoot":"","sources":["../../../src/measure-blocks/table/columns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* measure-blocks/table/measure.ts — Table cell + row measurement.
|
|
3
|
+
*/
|
|
4
|
+
import type { TableElement, PdfDocument } from '../../types.js';
|
|
5
|
+
import type { MeasuredBlock } from '../../types-internal.js';
|
|
6
|
+
import type { HyphenatorOpts } from '../../measure-text.js';
|
|
7
|
+
export declare function measureTable(element: TableElement, contentWidth: number, doc: PdfDocument, baseFontSize: number, hyphenatorOpts?: HyphenatorOpts, wordWidthCache?: Map<string, number>): Promise<MeasuredBlock>;
|
|
8
|
+
//# sourceMappingURL=measure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../../src/measure-blocks/table/measure.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAkC,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC/F,OAAO,KAAK,EACV,aAAa,EACd,MAAM,yBAAyB,CAAA;AAGhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAM3D,wBAAsB,YAAY,CAChC,OAAO,EAAE,YAAY,EACrB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,cAAc,EAC/B,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,aAAa,CAAC,CAkQxB"}
|