ooxml-core 1.11.0 → 1.12.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/dist/automation/index.cjs +210 -20
- package/dist/automation/index.mjs +210 -20
- package/dist/docx/embedded.cjs +1 -1
- package/dist/docx/embedded.mjs +1 -1
- package/dist/docx/index.cjs +1 -1
- package/dist/docx/index.mjs +1 -1
- package/dist/docx/layout/adapt-table.d.ts.map +1 -1
- package/dist/docx/layout/flow-table.d.ts.map +1 -1
- package/dist/docx/layout/index.cjs +145 -9
- package/dist/docx/layout/index.d.ts +1 -0
- package/dist/docx/layout/index.d.ts.map +1 -1
- package/dist/docx/layout/index.mjs +145 -10
- package/dist/docx/layout/input.d.ts +5 -0
- package/dist/docx/layout/input.d.ts.map +1 -1
- package/dist/docx/layout/layout-session.d.ts +10 -0
- package/dist/docx/layout/layout-session.d.ts.map +1 -0
- package/dist/docx/layout/nested-fragment-edges.d.ts.map +1 -1
- package/dist/docx/layout/paragraph-cache.d.ts +8 -0
- package/dist/docx/layout/paragraph-cache.d.ts.map +1 -0
- package/dist/docx/layout/paragraph-layout.d.ts.map +1 -1
- package/dist/docx/layout/paragraph-tokens.d.ts +1 -1
- package/dist/docx/layout/paragraph-tokens.d.ts.map +1 -1
- package/dist/docx/layout/table-paragraph-keeps.d.ts +14 -0
- package/dist/docx/layout/table-paragraph-keeps.d.ts.map +1 -0
- package/dist/docx/load/index.cjs +1 -1
- package/dist/docx/load/index.mjs +1 -1
- package/dist/docx/ui/index.cjs +83 -6
- package/dist/docx/ui/index.mjs +83 -7
- package/dist/docx/ui/ribbon-action-ids.d.ts +1 -1
- package/dist/docx/ui/ribbon-action-ids.d.ts.map +1 -1
- package/dist/docx/ui/word-count.d.ts +3 -0
- package/dist/docx/ui/word-count.d.ts.map +1 -1
- package/dist/geometry/element-transform.d.ts +90 -0
- package/dist/geometry/element-transform.d.ts.map +1 -0
- package/dist/geometry/index.cjs +90 -0
- package/dist/geometry/index.d.ts +1 -0
- package/dist/geometry/index.d.ts.map +1 -1
- package/dist/geometry/index.mjs +83 -1
- package/dist/index.cjs +90 -0
- package/dist/index.mjs +90 -0
- package/dist/visio/index.cjs +314 -39
- package/dist/visio/index.d.ts +1 -0
- package/dist/visio/index.d.ts.map +1 -1
- package/dist/visio/index.mjs +313 -40
- package/dist/visio/model.d.ts +12 -0
- package/dist/visio/model.d.ts.map +1 -1
- package/dist/visio/paper-sizes.d.ts +5 -0
- package/dist/visio/paper-sizes.d.ts.map +1 -1
- package/dist/visio/parser.d.ts.map +1 -1
- package/dist/visio/print-count.d.ts +20 -0
- package/dist/visio/print-count.d.ts.map +1 -0
- package/dist/visio/print-settings.d.ts +14 -0
- package/dist/visio/print-settings.d.ts.map +1 -0
- package/dist/visio/ui/index.cjs +194 -4
- package/dist/visio/ui/index.mjs +194 -4
- package/dist/xlsx/ui/ribbon/parts.d.ts +1 -0
- package/dist/xlsx/ui/ribbon/parts.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -4526,10 +4526,14 @@ function fontOf(run) {
|
|
|
4526
4526
|
};
|
|
4527
4527
|
}
|
|
4528
4528
|
var graphemes2 = new Intl.Segmenter(void 0, { granularity: "grapheme" });
|
|
4529
|
-
function runTextWidth(text2, run, measurer) {
|
|
4529
|
+
function runTextWidth(text2, run, measurer, font = fontOf(run)) {
|
|
4530
|
+
let characters = 0;
|
|
4531
|
+
if (run.characterSpacingPx) {
|
|
4532
|
+
for (const _segment of graphemes2.segment(text2)) characters++;
|
|
4533
|
+
}
|
|
4530
4534
|
return Math.max(
|
|
4531
4535
|
0,
|
|
4532
|
-
measurer.widthOf(text2,
|
|
4536
|
+
measurer.widthOf(text2, font) * (run.textScalePercent ?? 100) / 100 + characters * (run.characterSpacingPx ?? 0)
|
|
4533
4537
|
);
|
|
4534
4538
|
}
|
|
4535
4539
|
function resolveIndents(paragraph) {
|
|
@@ -4663,8 +4667,45 @@ function alignFragments(fragments, width, isLastLine, effectiveAlign) {
|
|
|
4663
4667
|
return offset === 0 ? fragments : fragments.map((f) => ({ ...f, xPx: f.xPx + offset }));
|
|
4664
4668
|
}
|
|
4665
4669
|
|
|
4670
|
+
// docx/layout/paragraph-cache.ts
|
|
4671
|
+
var sessions = /* @__PURE__ */ new WeakMap();
|
|
4672
|
+
function registerParagraphCache(measurer) {
|
|
4673
|
+
sessions.set(measurer, /* @__PURE__ */ new Map());
|
|
4674
|
+
}
|
|
4675
|
+
function cachedParagraphLayout(measurer, key, note, compute) {
|
|
4676
|
+
const cache = sessions.get(measurer);
|
|
4677
|
+
if (!cache) return compute(note);
|
|
4678
|
+
const { index, signature } = key();
|
|
4679
|
+
const cached = cache.get(index);
|
|
4680
|
+
if (cached?.signature === signature) {
|
|
4681
|
+
for (const warning of cached.warnings) note(warning);
|
|
4682
|
+
return structuredClone(cached.result);
|
|
4683
|
+
}
|
|
4684
|
+
const warnings = [];
|
|
4685
|
+
const result = compute((warning) => {
|
|
4686
|
+
warnings.push(warning);
|
|
4687
|
+
note(warning);
|
|
4688
|
+
});
|
|
4689
|
+
if (!cache.has(index) && cache.size >= 4e3) cache.delete(cache.keys().next().value);
|
|
4690
|
+
cache.set(index, { signature, result: structuredClone(result), warnings });
|
|
4691
|
+
return result;
|
|
4692
|
+
}
|
|
4693
|
+
|
|
4666
4694
|
// docx/layout/paragraph-layout.ts
|
|
4667
4695
|
function layoutParagraph(paragraph, contentWidthPx, measurer, note, lineBox, startToken = 0) {
|
|
4696
|
+
if (lineBox)
|
|
4697
|
+
return measureParagraph(paragraph, contentWidthPx, measurer, note, lineBox, startToken);
|
|
4698
|
+
return cachedParagraphLayout(
|
|
4699
|
+
measurer,
|
|
4700
|
+
() => ({
|
|
4701
|
+
index: JSON.stringify([paragraph.id, contentWidthPx, startToken]),
|
|
4702
|
+
signature: JSON.stringify(paragraph)
|
|
4703
|
+
}),
|
|
4704
|
+
note,
|
|
4705
|
+
(report) => measureParagraph(paragraph, contentWidthPx, measurer, report, void 0, startToken)
|
|
4706
|
+
);
|
|
4707
|
+
}
|
|
4708
|
+
function measureParagraph(paragraph, contentWidthPx, measurer, note, lineBox, startToken = 0) {
|
|
4668
4709
|
const { leftPx, rightPx, firstLineExtraPx: initialIndent } = resolveIndents(paragraph);
|
|
4669
4710
|
const firstLineExtraPx = startToken ? 0 : initialIndent;
|
|
4670
4711
|
const bodyWidth = Math.max(1, contentWidthPx - leftPx - rightPx);
|
|
@@ -4721,7 +4762,8 @@ function layoutParagraph(paragraph, contentWidthPx, measurer, note, lineBox, sta
|
|
|
4721
4762
|
const tokenWidth = (token) => token.kind === "word" || token.kind === "space" ? runTextWidth(
|
|
4722
4763
|
token.text,
|
|
4723
4764
|
expectDefined(paragraph.runs[token.runIndex], "token run"),
|
|
4724
|
-
measurer
|
|
4765
|
+
measurer,
|
|
4766
|
+
fonts[token.runIndex]
|
|
4725
4767
|
) : token.kind === "object" ? paragraph.runs[token.runIndex]?.object?.widthPx ?? 0 : 0;
|
|
4726
4768
|
const widths = tokens.map(tokenWidth);
|
|
4727
4769
|
const ends = /* @__PURE__ */ new Set(["tab", "lineBreak", "pageBreak", "columnBreak"]);
|
|
@@ -4937,8 +4979,8 @@ function nestedFrameProfile(table, tableWidthPx = table.widthPx) {
|
|
|
4937
4979
|
var plain = (paragraph) => !paragraph.keepLines && !paragraph.keepNext && !paragraph.pageBreakBefore && !paragraph.footnotes?.length && !paragraph.runs.some((run) => run.footnoteReferenceId !== void 0 || run.breakAfter);
|
|
4938
4980
|
function nestedFragmentEdges(table) {
|
|
4939
4981
|
if (table.widthPx === void 0 || !Number.isFinite(table.widthPx) || table.widthPx <= 0 || table.rows.length < 2 || !nestedFrameProfile(table, table.widthPx) || table.rows.some(
|
|
4940
|
-
(row) => row.heightPx !== void 0 || row.cantSplit || row.isHeader || row.cells.length !== 2 || row.cells.some(
|
|
4941
|
-
(cell) => cell.verticalAlign && cell.verticalAlign !== "top" || cell.blocks?.some((block) => block.kind !== "paragraph") || !(cell.blocks ?? cell.paragraphs).every(
|
|
4982
|
+
(row) => row.heightPx !== void 0 || row.heightSpecified || row.cantSplit || row.isHeader || row.cells.length !== 2 || row.cells.some(
|
|
4983
|
+
(cell) => (cell.gridSpan ?? 1) !== 1 || cell.verticalMerge !== void 0 || cell.verticalAlign && cell.verticalAlign !== "top" || cell.blocks?.some((block) => block.kind !== "paragraph") || !(cell.blocks ?? cell.paragraphs).every(
|
|
4942
4984
|
(block) => block.kind === "paragraph" && plain(block)
|
|
4943
4985
|
)
|
|
4944
4986
|
)
|
|
@@ -4949,10 +4991,11 @@ function nestedFragmentEdges(table) {
|
|
|
4949
4991
|
return top.every(Boolean) && bottom.every(Boolean) ? { top, bottom } : void 0;
|
|
4950
4992
|
}
|
|
4951
4993
|
function reflowNestedFragments(row) {
|
|
4952
|
-
if (row.heightPx !== void 0 || row.cantSplit || row.isHeader || row.cells.length !== 2)
|
|
4994
|
+
if (row.heightPx !== void 0 || row.heightSpecified || row.cantSplit || row.isHeader || row.cells.length !== 2)
|
|
4953
4995
|
return false;
|
|
4954
4996
|
let tables = 0;
|
|
4955
4997
|
for (const cell of row.cells) {
|
|
4998
|
+
if ((cell.gridSpan ?? 1) !== 1 || cell.verticalMerge !== void 0) return false;
|
|
4956
4999
|
if (cell.verticalAlign && cell.verticalAlign !== "top") return false;
|
|
4957
5000
|
for (const [index, block] of (cell.blocks ?? cell.paragraphs).entries()) {
|
|
4958
5001
|
if (block.kind === "paragraph") {
|
|
@@ -6039,6 +6082,55 @@ function placeParagraph(cursor, placement, note) {
|
|
|
6039
6082
|
}
|
|
6040
6083
|
}
|
|
6041
6084
|
|
|
6085
|
+
// docx/layout/table-paragraph-keeps.ts
|
|
6086
|
+
function tableParagraphKeeps(table) {
|
|
6087
|
+
const row = table.rows[0];
|
|
6088
|
+
if (table.rows.length !== 1 || !row || row.cells.length !== 2 || row.heightPx !== void 0 || row.heightSpecified || row.cantSplit || row.isHeader || table.widthPx === void 0 || !Number.isFinite(table.widthPx) || table.widthPx <= 0 || !nestedFrameProfile(table, table.widthPx) || row.cells.some(
|
|
6089
|
+
(cell) => !cell.borders?.top || (cell.gridSpan ?? 1) !== 1 || cell.verticalMerge !== void 0 || cell.verticalAlign && cell.verticalAlign !== "top" || cell.blocks?.some((block) => block.kind !== "paragraph")
|
|
6090
|
+
))
|
|
6091
|
+
return void 0;
|
|
6092
|
+
const paragraphs = row.cells.flatMap(cellParagraphs);
|
|
6093
|
+
if (paragraphs.some(
|
|
6094
|
+
(p) => p.keepNext || p.pageBreakBefore || p.footnotes?.length || p.floats?.length || p.borders || p.shading || p.widowControl !== false || p.lineSpacingRule !== "exact" || p.lineSpacingTwips === void 0 || !Number.isFinite(p.lineSpacingTwips) || p.lineSpacingTwips <= 0 || (p.spacingBeforeTwips ?? 0) !== 0 || (p.spacingAfterTwips ?? 0) !== 0 || p.runs.some((run) => run.footnoteReferenceId !== void 0 || run.breakAfter || run.object)
|
|
6095
|
+
))
|
|
6096
|
+
return void 0;
|
|
6097
|
+
const sources = new Map(paragraphs.map((p) => [p.id, p]));
|
|
6098
|
+
if (sources.size !== paragraphs.length || !paragraphs.some((p) => p.keepLines)) return void 0;
|
|
6099
|
+
return new TableParagraphKeeps(sources);
|
|
6100
|
+
}
|
|
6101
|
+
var TableParagraphKeeps = class {
|
|
6102
|
+
constructor(sources) {
|
|
6103
|
+
this.sources = sources;
|
|
6104
|
+
}
|
|
6105
|
+
sources;
|
|
6106
|
+
/** Before an ordinary row starts, a first kept paragraph can defer the entire row. */
|
|
6107
|
+
startupMinimum(row) {
|
|
6108
|
+
return Math.max(
|
|
6109
|
+
0,
|
|
6110
|
+
...row.cells.map((cell, index) => {
|
|
6111
|
+
const first3 = cell[0];
|
|
6112
|
+
return first3 && this.sources.get(first3.blockId)?.keepLines ? first3.yPx + first3.heightPx + (row.cellPadding?.[index]?.bottom ?? 0) : 0;
|
|
6113
|
+
})
|
|
6114
|
+
);
|
|
6115
|
+
}
|
|
6116
|
+
/** Defer an unstarted paragraph and its following cell content, leaving other cells independent. */
|
|
6117
|
+
cuts(row, available, fresh) {
|
|
6118
|
+
const cuts = /* @__PURE__ */ new Map();
|
|
6119
|
+
row.cells.forEach((cell, index) => {
|
|
6120
|
+
const padding = row.cellPadding?.[index] ?? { top: 0, bottom: 0 };
|
|
6121
|
+
let deferred = false;
|
|
6122
|
+
for (const [position, box] of cell.entries()) {
|
|
6123
|
+
const source = this.sources.get(box.blockId);
|
|
6124
|
+
const atFreshOrigin = fresh && position === 0 && Math.abs(box.yPx - padding.top) < 1e-6;
|
|
6125
|
+
if (!deferred && source?.keepLines && (box.lines[0]?.firstToken ?? 0) === 0 && box.yPx + box.heightPx + padding.bottom > available + 1e-6 && !atFreshOrigin)
|
|
6126
|
+
deferred = true;
|
|
6127
|
+
if (deferred) cuts.set(box.blockId, 0);
|
|
6128
|
+
}
|
|
6129
|
+
});
|
|
6130
|
+
return cuts.size ? cuts : void 0;
|
|
6131
|
+
}
|
|
6132
|
+
};
|
|
6133
|
+
|
|
6042
6134
|
// docx/layout/table-note-stories.ts
|
|
6043
6135
|
function independentNoteStories(cell) {
|
|
6044
6136
|
const first3 = cell.blocks?.[0];
|
|
@@ -6390,6 +6482,11 @@ function placeTable(cursor, table, measurer, note, resolveFootnotes) {
|
|
|
6390
6482
|
const firstBodyRow = table.rows.findIndex((row) => !row.isHeader);
|
|
6391
6483
|
const headerRows = table.rows.slice(0, firstBodyRow < 0 ? table.rows.length : firstBodyRow);
|
|
6392
6484
|
const nativeFragments = new Map(table.rows.map((row) => [row, reflowNestedFragments(row)]));
|
|
6485
|
+
const paragraphKeeps = tableParagraphKeeps(table);
|
|
6486
|
+
const hasParagraphKeeps = table.rows.some(
|
|
6487
|
+
(row) => row.cells.some((cell) => cellParagraphs(cell).some((paragraph) => paragraph.keepLines))
|
|
6488
|
+
);
|
|
6489
|
+
let keepWarning = false;
|
|
6393
6490
|
const xPosition = () => {
|
|
6394
6491
|
const width = (table.widthPx ?? cursor.columnWidthPx) + (activeBorders ? (profile.leftPx + profile.rightPx) / 2 : 0);
|
|
6395
6492
|
return table.alignment === "center" ? Math.max(0, (cursor.columnWidthPx - width) / 2) : table.alignment === "right" ? Math.max(0, cursor.columnWidthPx - width) : table.indentPx ?? 0;
|
|
@@ -6464,6 +6561,17 @@ function placeTable(cursor, table, measurer, note, resolveFootnotes) {
|
|
|
6464
6561
|
let remainingRow = initial;
|
|
6465
6562
|
while (remainingRow) {
|
|
6466
6563
|
fragmentHeight += fragmentBorders.remove(fragmentRows.at(-1));
|
|
6564
|
+
const keeps = paragraphKeeps && cursor.page.columns.length === 1 && cursor.column.startYPx === void 0 && Math.abs(cursor.remainingHeightPx() - (cursor.columnHeightPx - cursor.usedColumnHeightPx)) < 1e-6 ? paragraphKeeps : void 0;
|
|
6565
|
+
if (hasParagraphKeeps && !keeps && !keepWarning) {
|
|
6566
|
+
note(
|
|
6567
|
+
"Table-cell keep-lines pagination remains approximate outside the measured ordinary automatic two-cell, top-aligned, single-column, note-free row with direct exact-spaced paragraphs, zero paragraph spacing and widow control off."
|
|
6568
|
+
);
|
|
6569
|
+
keepWarning = true;
|
|
6570
|
+
}
|
|
6571
|
+
if (keeps && remainingRow === initial && !cursor.atColumnTop && keeps.startupMinimum(remainingRow) > cursor.remainingHeightPx() - fragmentHeight + 1e-6) {
|
|
6572
|
+
startNewFragment();
|
|
6573
|
+
continue;
|
|
6574
|
+
}
|
|
6467
6575
|
const minimum = cantSplit ? Math.min(remainingRow.heightPx, cursor.columnHeightPx) : Math.min(
|
|
6468
6576
|
...remainingRow.cells.flatMap(
|
|
6469
6577
|
(cell, index) => cell.map(
|
|
@@ -6491,7 +6599,7 @@ function placeTable(cursor, table, measurer, note, resolveFootnotes) {
|
|
|
6491
6599
|
continue;
|
|
6492
6600
|
}
|
|
6493
6601
|
}
|
|
6494
|
-
if (footnotes) {
|
|
6602
|
+
if (footnotes && !keeps) {
|
|
6495
6603
|
const selected = footnotes.choose(remainingRow, cantSplit);
|
|
6496
6604
|
if (selected) {
|
|
6497
6605
|
if (selected.layout === remainingRow) {
|
|
@@ -6563,7 +6671,17 @@ function placeTable(cursor, table, measurer, note, resolveFootnotes) {
|
|
|
6563
6671
|
remainingRow = null;
|
|
6564
6672
|
continue;
|
|
6565
6673
|
}
|
|
6566
|
-
const
|
|
6674
|
+
const paragraphCuts = keeps?.cuts(
|
|
6675
|
+
remainingRow,
|
|
6676
|
+
remaining,
|
|
6677
|
+
cursor.atColumnTop && fragmentRows.length === 0
|
|
6678
|
+
);
|
|
6679
|
+
const { before, after } = splitRowAtHeight(
|
|
6680
|
+
remainingRow,
|
|
6681
|
+
Math.max(0, remaining),
|
|
6682
|
+
void 0,
|
|
6683
|
+
paragraphCuts
|
|
6684
|
+
);
|
|
6567
6685
|
if (!before.cells.some((cell) => cell.length) && cursor.atColumnTop && fragmentRows.every((row2) => row2.repeated)) {
|
|
6568
6686
|
note(
|
|
6569
6687
|
"A table row cannot fit a line in an empty page/column and was placed without splitting."
|
|
@@ -6575,7 +6693,7 @@ function placeTable(cursor, table, measurer, note, resolveFootnotes) {
|
|
|
6575
6693
|
const previousWidth = cursor.columnWidthPx;
|
|
6576
6694
|
if (before.cells.some((cell) => cell.length)) fragmentRows.push(toRowBox(before, false));
|
|
6577
6695
|
startNewFragment();
|
|
6578
|
-
remainingRow = after && (previousWidth !== cursor.columnWidthPx || nativeFragments.get(row)) ? layoutRow2(
|
|
6696
|
+
remainingRow = after && (paragraphCuts || previousWidth !== cursor.columnWidthPx || nativeFragments.get(row)) ? layoutRow2(
|
|
6579
6697
|
{ ...row, heightPx: 0, heightRule: "atLeast" },
|
|
6580
6698
|
cursor.columnWidthPx,
|
|
6581
6699
|
measurer,
|
|
@@ -7123,6 +7241,7 @@ function border(side, theme, preserveSingleWidth = false) {
|
|
|
7123
7241
|
function rowLayout(props) {
|
|
7124
7242
|
if (!props) return {};
|
|
7125
7243
|
return {
|
|
7244
|
+
...props.heightTwips !== void 0 ? { heightSpecified: true } : {},
|
|
7126
7245
|
...props.heightTwips ? { heightPx: twipsToPx2(props.heightTwips), heightRule: props.heightRule ?? "atLeast" } : {},
|
|
7127
7246
|
...props.cantSplit ? { cantSplit: true } : {},
|
|
7128
7247
|
...props.header ? { isHeader: true } : {}
|
|
@@ -7187,6 +7306,8 @@ function adaptTable(table, model, adaptParagraph, _nested = false) {
|
|
|
7187
7306
|
const fill = cssHex(visuals.shadingFill);
|
|
7188
7307
|
return {
|
|
7189
7308
|
paragraphs: cell.paragraphs.map(adaptParagraph),
|
|
7309
|
+
...cell.gridSpan !== void 0 ? { gridSpan: cell.gridSpan } : {},
|
|
7310
|
+
...cell.verticalMerge ? { verticalMerge: cell.verticalMerge } : {},
|
|
7190
7311
|
...cell.sourceBlocks ? {
|
|
7191
7312
|
blocks: cellSourceBlocks(cell).map(
|
|
7192
7313
|
(block) => block.type === "paragraph" ? adaptParagraph(block) : adaptTable(block, model, adaptParagraph, true)
|
|
@@ -7756,6 +7877,20 @@ function cssFontStack(family) {
|
|
|
7756
7877
|
);
|
|
7757
7878
|
}
|
|
7758
7879
|
|
|
7880
|
+
// docx/layout/layout-session.ts
|
|
7881
|
+
function createLayoutSession(measurer) {
|
|
7882
|
+
const sessionMeasurer = {
|
|
7883
|
+
widthOf: (text2, font) => measurer.widthOf(text2, font),
|
|
7884
|
+
lineHeightOf: (font) => measurer.lineHeightOf(font),
|
|
7885
|
+
...measurer.ascentOf ? { ascentOf: measurer.ascentOf.bind(measurer) } : {}
|
|
7886
|
+
};
|
|
7887
|
+
registerParagraphCache(sessionMeasurer);
|
|
7888
|
+
return {
|
|
7889
|
+
layoutDocument: (input) => layoutDocument(input, sessionMeasurer),
|
|
7890
|
+
layoutDocumentModel: (model, options = {}) => layoutDocumentModel(model, sessionMeasurer, options)
|
|
7891
|
+
};
|
|
7892
|
+
}
|
|
7893
|
+
|
|
7759
7894
|
exports.DEFAULT_FONT_FAMILY = DEFAULT_FONT_FAMILY;
|
|
7760
7895
|
exports.DEFAULT_FONT_SIZE_PT = DEFAULT_FONT_SIZE_PT;
|
|
7761
7896
|
exports.DEFAULT_TAB_STOP_PX = DEFAULT_TAB_STOP_PX;
|
|
@@ -7768,6 +7903,7 @@ exports.adjustForWidowOrphan = adjustForWidowOrphan;
|
|
|
7768
7903
|
exports.appendBreakMarker = appendBreakMarker;
|
|
7769
7904
|
exports.cellVerticalOffset = cellVerticalOffset;
|
|
7770
7905
|
exports.createFakeMeasurer = createFakeMeasurer;
|
|
7906
|
+
exports.createLayoutSession = createLayoutSession;
|
|
7771
7907
|
exports.cssFontStack = cssFontStack;
|
|
7772
7908
|
exports.fieldDisplayText = fieldDisplayText;
|
|
7773
7909
|
exports.floatPosition = floatPosition;
|
|
@@ -19,4 +19,5 @@ export type { LayoutReviewOptions } from './review-display.js';
|
|
|
19
19
|
export { floatPosition, positionFloats, FLOAT_WRAP_NOTE } from './floats.js';
|
|
20
20
|
export { cssFontStack } from './fonts.js';
|
|
21
21
|
export { placeTab, type TabPlacement } from './tab-stops.js';
|
|
22
|
+
export { createLayoutSession } from './layout-session.js';
|
|
22
23
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../docx/layout/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/D,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../docx/layout/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/D,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -4524,10 +4524,14 @@ function fontOf(run) {
|
|
|
4524
4524
|
};
|
|
4525
4525
|
}
|
|
4526
4526
|
var graphemes2 = new Intl.Segmenter(void 0, { granularity: "grapheme" });
|
|
4527
|
-
function runTextWidth(text2, run, measurer) {
|
|
4527
|
+
function runTextWidth(text2, run, measurer, font = fontOf(run)) {
|
|
4528
|
+
let characters = 0;
|
|
4529
|
+
if (run.characterSpacingPx) {
|
|
4530
|
+
for (const _segment of graphemes2.segment(text2)) characters++;
|
|
4531
|
+
}
|
|
4528
4532
|
return Math.max(
|
|
4529
4533
|
0,
|
|
4530
|
-
measurer.widthOf(text2,
|
|
4534
|
+
measurer.widthOf(text2, font) * (run.textScalePercent ?? 100) / 100 + characters * (run.characterSpacingPx ?? 0)
|
|
4531
4535
|
);
|
|
4532
4536
|
}
|
|
4533
4537
|
function resolveIndents(paragraph) {
|
|
@@ -4661,8 +4665,45 @@ function alignFragments(fragments, width, isLastLine, effectiveAlign) {
|
|
|
4661
4665
|
return offset === 0 ? fragments : fragments.map((f) => ({ ...f, xPx: f.xPx + offset }));
|
|
4662
4666
|
}
|
|
4663
4667
|
|
|
4668
|
+
// docx/layout/paragraph-cache.ts
|
|
4669
|
+
var sessions = /* @__PURE__ */ new WeakMap();
|
|
4670
|
+
function registerParagraphCache(measurer) {
|
|
4671
|
+
sessions.set(measurer, /* @__PURE__ */ new Map());
|
|
4672
|
+
}
|
|
4673
|
+
function cachedParagraphLayout(measurer, key, note, compute) {
|
|
4674
|
+
const cache = sessions.get(measurer);
|
|
4675
|
+
if (!cache) return compute(note);
|
|
4676
|
+
const { index, signature } = key();
|
|
4677
|
+
const cached = cache.get(index);
|
|
4678
|
+
if (cached?.signature === signature) {
|
|
4679
|
+
for (const warning of cached.warnings) note(warning);
|
|
4680
|
+
return structuredClone(cached.result);
|
|
4681
|
+
}
|
|
4682
|
+
const warnings = [];
|
|
4683
|
+
const result = compute((warning) => {
|
|
4684
|
+
warnings.push(warning);
|
|
4685
|
+
note(warning);
|
|
4686
|
+
});
|
|
4687
|
+
if (!cache.has(index) && cache.size >= 4e3) cache.delete(cache.keys().next().value);
|
|
4688
|
+
cache.set(index, { signature, result: structuredClone(result), warnings });
|
|
4689
|
+
return result;
|
|
4690
|
+
}
|
|
4691
|
+
|
|
4664
4692
|
// docx/layout/paragraph-layout.ts
|
|
4665
4693
|
function layoutParagraph(paragraph, contentWidthPx, measurer, note, lineBox, startToken = 0) {
|
|
4694
|
+
if (lineBox)
|
|
4695
|
+
return measureParagraph(paragraph, contentWidthPx, measurer, note, lineBox, startToken);
|
|
4696
|
+
return cachedParagraphLayout(
|
|
4697
|
+
measurer,
|
|
4698
|
+
() => ({
|
|
4699
|
+
index: JSON.stringify([paragraph.id, contentWidthPx, startToken]),
|
|
4700
|
+
signature: JSON.stringify(paragraph)
|
|
4701
|
+
}),
|
|
4702
|
+
note,
|
|
4703
|
+
(report) => measureParagraph(paragraph, contentWidthPx, measurer, report, void 0, startToken)
|
|
4704
|
+
);
|
|
4705
|
+
}
|
|
4706
|
+
function measureParagraph(paragraph, contentWidthPx, measurer, note, lineBox, startToken = 0) {
|
|
4666
4707
|
const { leftPx, rightPx, firstLineExtraPx: initialIndent } = resolveIndents(paragraph);
|
|
4667
4708
|
const firstLineExtraPx = startToken ? 0 : initialIndent;
|
|
4668
4709
|
const bodyWidth = Math.max(1, contentWidthPx - leftPx - rightPx);
|
|
@@ -4719,7 +4760,8 @@ function layoutParagraph(paragraph, contentWidthPx, measurer, note, lineBox, sta
|
|
|
4719
4760
|
const tokenWidth = (token) => token.kind === "word" || token.kind === "space" ? runTextWidth(
|
|
4720
4761
|
token.text,
|
|
4721
4762
|
expectDefined(paragraph.runs[token.runIndex], "token run"),
|
|
4722
|
-
measurer
|
|
4763
|
+
measurer,
|
|
4764
|
+
fonts[token.runIndex]
|
|
4723
4765
|
) : token.kind === "object" ? paragraph.runs[token.runIndex]?.object?.widthPx ?? 0 : 0;
|
|
4724
4766
|
const widths = tokens.map(tokenWidth);
|
|
4725
4767
|
const ends = /* @__PURE__ */ new Set(["tab", "lineBreak", "pageBreak", "columnBreak"]);
|
|
@@ -4935,8 +4977,8 @@ function nestedFrameProfile(table, tableWidthPx = table.widthPx) {
|
|
|
4935
4977
|
var plain = (paragraph) => !paragraph.keepLines && !paragraph.keepNext && !paragraph.pageBreakBefore && !paragraph.footnotes?.length && !paragraph.runs.some((run) => run.footnoteReferenceId !== void 0 || run.breakAfter);
|
|
4936
4978
|
function nestedFragmentEdges(table) {
|
|
4937
4979
|
if (table.widthPx === void 0 || !Number.isFinite(table.widthPx) || table.widthPx <= 0 || table.rows.length < 2 || !nestedFrameProfile(table, table.widthPx) || table.rows.some(
|
|
4938
|
-
(row) => row.heightPx !== void 0 || row.cantSplit || row.isHeader || row.cells.length !== 2 || row.cells.some(
|
|
4939
|
-
(cell) => cell.verticalAlign && cell.verticalAlign !== "top" || cell.blocks?.some((block) => block.kind !== "paragraph") || !(cell.blocks ?? cell.paragraphs).every(
|
|
4980
|
+
(row) => row.heightPx !== void 0 || row.heightSpecified || row.cantSplit || row.isHeader || row.cells.length !== 2 || row.cells.some(
|
|
4981
|
+
(cell) => (cell.gridSpan ?? 1) !== 1 || cell.verticalMerge !== void 0 || cell.verticalAlign && cell.verticalAlign !== "top" || cell.blocks?.some((block) => block.kind !== "paragraph") || !(cell.blocks ?? cell.paragraphs).every(
|
|
4940
4982
|
(block) => block.kind === "paragraph" && plain(block)
|
|
4941
4983
|
)
|
|
4942
4984
|
)
|
|
@@ -4947,10 +4989,11 @@ function nestedFragmentEdges(table) {
|
|
|
4947
4989
|
return top.every(Boolean) && bottom.every(Boolean) ? { top, bottom } : void 0;
|
|
4948
4990
|
}
|
|
4949
4991
|
function reflowNestedFragments(row) {
|
|
4950
|
-
if (row.heightPx !== void 0 || row.cantSplit || row.isHeader || row.cells.length !== 2)
|
|
4992
|
+
if (row.heightPx !== void 0 || row.heightSpecified || row.cantSplit || row.isHeader || row.cells.length !== 2)
|
|
4951
4993
|
return false;
|
|
4952
4994
|
let tables = 0;
|
|
4953
4995
|
for (const cell of row.cells) {
|
|
4996
|
+
if ((cell.gridSpan ?? 1) !== 1 || cell.verticalMerge !== void 0) return false;
|
|
4954
4997
|
if (cell.verticalAlign && cell.verticalAlign !== "top") return false;
|
|
4955
4998
|
for (const [index, block] of (cell.blocks ?? cell.paragraphs).entries()) {
|
|
4956
4999
|
if (block.kind === "paragraph") {
|
|
@@ -6037,6 +6080,55 @@ function placeParagraph(cursor, placement, note) {
|
|
|
6037
6080
|
}
|
|
6038
6081
|
}
|
|
6039
6082
|
|
|
6083
|
+
// docx/layout/table-paragraph-keeps.ts
|
|
6084
|
+
function tableParagraphKeeps(table) {
|
|
6085
|
+
const row = table.rows[0];
|
|
6086
|
+
if (table.rows.length !== 1 || !row || row.cells.length !== 2 || row.heightPx !== void 0 || row.heightSpecified || row.cantSplit || row.isHeader || table.widthPx === void 0 || !Number.isFinite(table.widthPx) || table.widthPx <= 0 || !nestedFrameProfile(table, table.widthPx) || row.cells.some(
|
|
6087
|
+
(cell) => !cell.borders?.top || (cell.gridSpan ?? 1) !== 1 || cell.verticalMerge !== void 0 || cell.verticalAlign && cell.verticalAlign !== "top" || cell.blocks?.some((block) => block.kind !== "paragraph")
|
|
6088
|
+
))
|
|
6089
|
+
return void 0;
|
|
6090
|
+
const paragraphs = row.cells.flatMap(cellParagraphs);
|
|
6091
|
+
if (paragraphs.some(
|
|
6092
|
+
(p) => p.keepNext || p.pageBreakBefore || p.footnotes?.length || p.floats?.length || p.borders || p.shading || p.widowControl !== false || p.lineSpacingRule !== "exact" || p.lineSpacingTwips === void 0 || !Number.isFinite(p.lineSpacingTwips) || p.lineSpacingTwips <= 0 || (p.spacingBeforeTwips ?? 0) !== 0 || (p.spacingAfterTwips ?? 0) !== 0 || p.runs.some((run) => run.footnoteReferenceId !== void 0 || run.breakAfter || run.object)
|
|
6093
|
+
))
|
|
6094
|
+
return void 0;
|
|
6095
|
+
const sources = new Map(paragraphs.map((p) => [p.id, p]));
|
|
6096
|
+
if (sources.size !== paragraphs.length || !paragraphs.some((p) => p.keepLines)) return void 0;
|
|
6097
|
+
return new TableParagraphKeeps(sources);
|
|
6098
|
+
}
|
|
6099
|
+
var TableParagraphKeeps = class {
|
|
6100
|
+
constructor(sources) {
|
|
6101
|
+
this.sources = sources;
|
|
6102
|
+
}
|
|
6103
|
+
sources;
|
|
6104
|
+
/** Before an ordinary row starts, a first kept paragraph can defer the entire row. */
|
|
6105
|
+
startupMinimum(row) {
|
|
6106
|
+
return Math.max(
|
|
6107
|
+
0,
|
|
6108
|
+
...row.cells.map((cell, index) => {
|
|
6109
|
+
const first3 = cell[0];
|
|
6110
|
+
return first3 && this.sources.get(first3.blockId)?.keepLines ? first3.yPx + first3.heightPx + (row.cellPadding?.[index]?.bottom ?? 0) : 0;
|
|
6111
|
+
})
|
|
6112
|
+
);
|
|
6113
|
+
}
|
|
6114
|
+
/** Defer an unstarted paragraph and its following cell content, leaving other cells independent. */
|
|
6115
|
+
cuts(row, available, fresh) {
|
|
6116
|
+
const cuts = /* @__PURE__ */ new Map();
|
|
6117
|
+
row.cells.forEach((cell, index) => {
|
|
6118
|
+
const padding = row.cellPadding?.[index] ?? { top: 0, bottom: 0 };
|
|
6119
|
+
let deferred = false;
|
|
6120
|
+
for (const [position, box] of cell.entries()) {
|
|
6121
|
+
const source = this.sources.get(box.blockId);
|
|
6122
|
+
const atFreshOrigin = fresh && position === 0 && Math.abs(box.yPx - padding.top) < 1e-6;
|
|
6123
|
+
if (!deferred && source?.keepLines && (box.lines[0]?.firstToken ?? 0) === 0 && box.yPx + box.heightPx + padding.bottom > available + 1e-6 && !atFreshOrigin)
|
|
6124
|
+
deferred = true;
|
|
6125
|
+
if (deferred) cuts.set(box.blockId, 0);
|
|
6126
|
+
}
|
|
6127
|
+
});
|
|
6128
|
+
return cuts.size ? cuts : void 0;
|
|
6129
|
+
}
|
|
6130
|
+
};
|
|
6131
|
+
|
|
6040
6132
|
// docx/layout/table-note-stories.ts
|
|
6041
6133
|
function independentNoteStories(cell) {
|
|
6042
6134
|
const first3 = cell.blocks?.[0];
|
|
@@ -6388,6 +6480,11 @@ function placeTable(cursor, table, measurer, note, resolveFootnotes) {
|
|
|
6388
6480
|
const firstBodyRow = table.rows.findIndex((row) => !row.isHeader);
|
|
6389
6481
|
const headerRows = table.rows.slice(0, firstBodyRow < 0 ? table.rows.length : firstBodyRow);
|
|
6390
6482
|
const nativeFragments = new Map(table.rows.map((row) => [row, reflowNestedFragments(row)]));
|
|
6483
|
+
const paragraphKeeps = tableParagraphKeeps(table);
|
|
6484
|
+
const hasParagraphKeeps = table.rows.some(
|
|
6485
|
+
(row) => row.cells.some((cell) => cellParagraphs(cell).some((paragraph) => paragraph.keepLines))
|
|
6486
|
+
);
|
|
6487
|
+
let keepWarning = false;
|
|
6391
6488
|
const xPosition = () => {
|
|
6392
6489
|
const width = (table.widthPx ?? cursor.columnWidthPx) + (activeBorders ? (profile.leftPx + profile.rightPx) / 2 : 0);
|
|
6393
6490
|
return table.alignment === "center" ? Math.max(0, (cursor.columnWidthPx - width) / 2) : table.alignment === "right" ? Math.max(0, cursor.columnWidthPx - width) : table.indentPx ?? 0;
|
|
@@ -6462,6 +6559,17 @@ function placeTable(cursor, table, measurer, note, resolveFootnotes) {
|
|
|
6462
6559
|
let remainingRow = initial;
|
|
6463
6560
|
while (remainingRow) {
|
|
6464
6561
|
fragmentHeight += fragmentBorders.remove(fragmentRows.at(-1));
|
|
6562
|
+
const keeps = paragraphKeeps && cursor.page.columns.length === 1 && cursor.column.startYPx === void 0 && Math.abs(cursor.remainingHeightPx() - (cursor.columnHeightPx - cursor.usedColumnHeightPx)) < 1e-6 ? paragraphKeeps : void 0;
|
|
6563
|
+
if (hasParagraphKeeps && !keeps && !keepWarning) {
|
|
6564
|
+
note(
|
|
6565
|
+
"Table-cell keep-lines pagination remains approximate outside the measured ordinary automatic two-cell, top-aligned, single-column, note-free row with direct exact-spaced paragraphs, zero paragraph spacing and widow control off."
|
|
6566
|
+
);
|
|
6567
|
+
keepWarning = true;
|
|
6568
|
+
}
|
|
6569
|
+
if (keeps && remainingRow === initial && !cursor.atColumnTop && keeps.startupMinimum(remainingRow) > cursor.remainingHeightPx() - fragmentHeight + 1e-6) {
|
|
6570
|
+
startNewFragment();
|
|
6571
|
+
continue;
|
|
6572
|
+
}
|
|
6465
6573
|
const minimum = cantSplit ? Math.min(remainingRow.heightPx, cursor.columnHeightPx) : Math.min(
|
|
6466
6574
|
...remainingRow.cells.flatMap(
|
|
6467
6575
|
(cell, index) => cell.map(
|
|
@@ -6489,7 +6597,7 @@ function placeTable(cursor, table, measurer, note, resolveFootnotes) {
|
|
|
6489
6597
|
continue;
|
|
6490
6598
|
}
|
|
6491
6599
|
}
|
|
6492
|
-
if (footnotes) {
|
|
6600
|
+
if (footnotes && !keeps) {
|
|
6493
6601
|
const selected = footnotes.choose(remainingRow, cantSplit);
|
|
6494
6602
|
if (selected) {
|
|
6495
6603
|
if (selected.layout === remainingRow) {
|
|
@@ -6561,7 +6669,17 @@ function placeTable(cursor, table, measurer, note, resolveFootnotes) {
|
|
|
6561
6669
|
remainingRow = null;
|
|
6562
6670
|
continue;
|
|
6563
6671
|
}
|
|
6564
|
-
const
|
|
6672
|
+
const paragraphCuts = keeps?.cuts(
|
|
6673
|
+
remainingRow,
|
|
6674
|
+
remaining,
|
|
6675
|
+
cursor.atColumnTop && fragmentRows.length === 0
|
|
6676
|
+
);
|
|
6677
|
+
const { before, after } = splitRowAtHeight(
|
|
6678
|
+
remainingRow,
|
|
6679
|
+
Math.max(0, remaining),
|
|
6680
|
+
void 0,
|
|
6681
|
+
paragraphCuts
|
|
6682
|
+
);
|
|
6565
6683
|
if (!before.cells.some((cell) => cell.length) && cursor.atColumnTop && fragmentRows.every((row2) => row2.repeated)) {
|
|
6566
6684
|
note(
|
|
6567
6685
|
"A table row cannot fit a line in an empty page/column and was placed without splitting."
|
|
@@ -6573,7 +6691,7 @@ function placeTable(cursor, table, measurer, note, resolveFootnotes) {
|
|
|
6573
6691
|
const previousWidth = cursor.columnWidthPx;
|
|
6574
6692
|
if (before.cells.some((cell) => cell.length)) fragmentRows.push(toRowBox(before, false));
|
|
6575
6693
|
startNewFragment();
|
|
6576
|
-
remainingRow = after && (previousWidth !== cursor.columnWidthPx || nativeFragments.get(row)) ? layoutRow2(
|
|
6694
|
+
remainingRow = after && (paragraphCuts || previousWidth !== cursor.columnWidthPx || nativeFragments.get(row)) ? layoutRow2(
|
|
6577
6695
|
{ ...row, heightPx: 0, heightRule: "atLeast" },
|
|
6578
6696
|
cursor.columnWidthPx,
|
|
6579
6697
|
measurer,
|
|
@@ -7121,6 +7239,7 @@ function border(side, theme, preserveSingleWidth = false) {
|
|
|
7121
7239
|
function rowLayout(props) {
|
|
7122
7240
|
if (!props) return {};
|
|
7123
7241
|
return {
|
|
7242
|
+
...props.heightTwips !== void 0 ? { heightSpecified: true } : {},
|
|
7124
7243
|
...props.heightTwips ? { heightPx: twipsToPx2(props.heightTwips), heightRule: props.heightRule ?? "atLeast" } : {},
|
|
7125
7244
|
...props.cantSplit ? { cantSplit: true } : {},
|
|
7126
7245
|
...props.header ? { isHeader: true } : {}
|
|
@@ -7185,6 +7304,8 @@ function adaptTable(table, model, adaptParagraph, _nested = false) {
|
|
|
7185
7304
|
const fill = cssHex(visuals.shadingFill);
|
|
7186
7305
|
return {
|
|
7187
7306
|
paragraphs: cell.paragraphs.map(adaptParagraph),
|
|
7307
|
+
...cell.gridSpan !== void 0 ? { gridSpan: cell.gridSpan } : {},
|
|
7308
|
+
...cell.verticalMerge ? { verticalMerge: cell.verticalMerge } : {},
|
|
7188
7309
|
...cell.sourceBlocks ? {
|
|
7189
7310
|
blocks: cellSourceBlocks(cell).map(
|
|
7190
7311
|
(block) => block.type === "paragraph" ? adaptParagraph(block) : adaptTable(block, model, adaptParagraph, true)
|
|
@@ -7754,4 +7875,18 @@ function cssFontStack(family) {
|
|
|
7754
7875
|
);
|
|
7755
7876
|
}
|
|
7756
7877
|
|
|
7757
|
-
|
|
7878
|
+
// docx/layout/layout-session.ts
|
|
7879
|
+
function createLayoutSession(measurer) {
|
|
7880
|
+
const sessionMeasurer = {
|
|
7881
|
+
widthOf: (text2, font) => measurer.widthOf(text2, font),
|
|
7882
|
+
lineHeightOf: (font) => measurer.lineHeightOf(font),
|
|
7883
|
+
...measurer.ascentOf ? { ascentOf: measurer.ascentOf.bind(measurer) } : {}
|
|
7884
|
+
};
|
|
7885
|
+
registerParagraphCache(sessionMeasurer);
|
|
7886
|
+
return {
|
|
7887
|
+
layoutDocument: (input) => layoutDocument(input, sessionMeasurer),
|
|
7888
|
+
layoutDocumentModel: (model, options = {}) => layoutDocumentModel(model, sessionMeasurer, options)
|
|
7889
|
+
};
|
|
7890
|
+
}
|
|
7891
|
+
|
|
7892
|
+
export { DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE_PT, DEFAULT_TAB_STOP_PX, FLOAT_WRAP_NOTE, NO_TWIPS, PageCursor, SINGLE_LINE_SPACING_UNITS, adaptDocumentModel, adjustForWidowOrphan, appendBreakMarker, cellVerticalOffset, createFakeMeasurer, createLayoutSession, cssFontStack, fieldDisplayText, floatPosition, fontMetrics, headerFooterForPage, isEastAsianChar, layoutDocument, layoutDocumentModel, layoutParagraph, layoutRow, layoutSections, ligatureCss, pageNumberValues, pageNumbers, paragraphFloats, placeParagraph, placeTab, placeTable, positionFloats, ptToPx, pxToTwips, sectionPageCounts, splitRowAtHeight, suppressesSpacing, tokenizeRun, twipsToPx, widowControlEnabled };
|
|
@@ -155,6 +155,9 @@ export interface LayoutCellPadding {
|
|
|
155
155
|
}
|
|
156
156
|
export interface LayoutTableCell {
|
|
157
157
|
paragraphs: LayoutParagraph[];
|
|
158
|
+
/** Source merge provenance, retained for bounded paragraph-keeping admission. */
|
|
159
|
+
gridSpan?: number;
|
|
160
|
+
verticalMerge?: 'restart' | 'continue';
|
|
158
161
|
/** Source child order including read-only nested table stories. */
|
|
159
162
|
blocks?: LayoutBlock[];
|
|
160
163
|
/** Column width in CSS pixels; undefined cells share the row's remaining width evenly. */
|
|
@@ -170,6 +173,8 @@ export interface LayoutTableCell {
|
|
|
170
173
|
}
|
|
171
174
|
export interface LayoutTableRow {
|
|
172
175
|
cells: LayoutTableCell[];
|
|
176
|
+
/** Source height provenance, including zero heights not retained by the existing box adapter. */
|
|
177
|
+
heightSpecified?: boolean;
|
|
173
178
|
/** `w:trPr/w:cantSplit`: this row must stay on one page. */
|
|
174
179
|
cantSplit?: boolean;
|
|
175
180
|
/** `w:trHeight`: a minimum (`atLeast`) or fixed (`exact`) row height. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../docx/layout/input.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../docx/layout/input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DocumentModel } from '../index.js';
|
|
2
|
+
import type { LayoutDocumentInput } from './input.js';
|
|
3
|
+
import type { TextMeasurer } from './measure.js';
|
|
4
|
+
import type { LayoutReviewOptions } from './review-display.js';
|
|
5
|
+
/** Reuses measured paragraphs across edits. Create a new session when font metrics change. */
|
|
6
|
+
export declare function createLayoutSession(measurer: TextMeasurer): {
|
|
7
|
+
layoutDocument: (input: LayoutDocumentInput) => import("./result.js").LayoutResult;
|
|
8
|
+
layoutDocumentModel: (model: DocumentModel, options?: LayoutReviewOptions) => import("./result.js").LayoutResult;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=layout-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-session.d.ts","sourceRoot":"","sources":["../../../docx/layout/layout-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,8FAA8F;AAC9F,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY;IAQxD,cAAc,UAAU,mBAAmB;IAC3C,mBAAmB,UAAU,aAAa,YAAW,mBAAmB;EAGzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nested-fragment-edges.d.ts","sourceRoot":"","sources":["../../../docx/layout/nested-fragment-edges.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAQ5E,+FAA+F;AAC/F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW;;;
|
|
1
|
+
{"version":3,"file":"nested-fragment-edges.d.ts","sourceRoot":"","sources":["../../../docx/layout/nested-fragment-edges.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAQ5E,+FAA+F;AAC/F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW;;;cA8BrD;AACD,6FAA6F;AAC7F,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAsBlE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TextMeasurer } from './measure.js';
|
|
2
|
+
import type { ParagraphLayoutResult } from './paragraph-layout.js';
|
|
3
|
+
export declare function registerParagraphCache(measurer: TextMeasurer): void;
|
|
4
|
+
export declare function cachedParagraphLayout(measurer: TextMeasurer, key: () => {
|
|
5
|
+
index: string;
|
|
6
|
+
signature: string;
|
|
7
|
+
}, note: (message: string) => void, compute: (note: (message: string) => void) => ParagraphLayoutResult): ParagraphLayoutResult;
|
|
8
|
+
//# sourceMappingURL=paragraph-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paragraph-cache.d.ts","sourceRoot":"","sources":["../../../docx/layout/paragraph-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAWhE,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAEnE;AAED,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,YAAY,EACtB,GAAG,EAAE,MAAM;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC/C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KAAK,qBAAqB,GACjE,qBAAqB,CAkBvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paragraph-layout.d.ts","sourceRoot":"","sources":["../../../docx/layout/paragraph-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,KAAK,EAAkB,UAAU,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"paragraph-layout.d.ts","sourceRoot":"","sources":["../../../docx/layout/paragraph-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,KAAK,EAAkB,UAAU,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAgB/C,MAAM,WAAW,qBAAqB;IACrC,uFAAuF;IACvF,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,uEAAuE;IACvE,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,qFAAqF;IACrF,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,oBAAoB,CAAC;CAC7B;AAED;;;;;;GAMG;AACH;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,CACvB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,KACZ;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,wBAAgB,eAAe,CAC9B,SAAS,EAAE,eAAe,EAC1B,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EAC/B,OAAO,CAAC,EAAE,SAAS,EACnB,UAAU,SAAI,GACZ,qBAAqB,CAavB"}
|
|
@@ -6,7 +6,7 @@ import type { LayoutParagraph, LayoutRun } from './input.js';
|
|
|
6
6
|
export declare const SCRIPT_SCALE = 0.65;
|
|
7
7
|
export declare function fontOf(run: LayoutRun): LayoutFontSpec;
|
|
8
8
|
/** Word applies additional character spacing after scaling the glyph advances. */
|
|
9
|
-
export declare function runTextWidth(text: string, run: LayoutRun, measurer: TextMeasurer): number;
|
|
9
|
+
export declare function runTextWidth(text: string, run: LayoutRun, measurer: TextMeasurer, font?: LayoutFontSpec): number;
|
|
10
10
|
export declare function resolveIndents(paragraph: LayoutParagraph): {
|
|
11
11
|
leftPx: number;
|
|
12
12
|
rightPx: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paragraph-tokens.d.ts","sourceRoot":"","sources":["../../../docx/layout/paragraph-tokens.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAkC,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAG1D,uFAAuF;AACvF,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,wBAAgB,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,cAAc,CAerD;AAGD,kFAAkF;AAClF,wBAAgB,YAAY,
|
|
1
|
+
{"version":3,"file":"paragraph-tokens.d.ts","sourceRoot":"","sources":["../../../docx/layout/paragraph-tokens.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAkC,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAG1D,uFAAuF;AACvF,eAAO,MAAM,YAAY,OAAO,CAAC;AAEjC,wBAAgB,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,cAAc,CAerD;AAGD,kFAAkF;AAClF,wBAAgB,YAAY,CAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,YAAY,EACtB,IAAI,iBAAc,GAChB,MAAM,CAUR;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,eAAe,GAAG;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;CACzB,CAqBA;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAErD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,eAAe,GAAG;IAC9D,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACrB,CA6BA;AAED,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;CAClC"}
|