@reportwright/viewer 0.12.1 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +93 -0
- package/README.md +18 -1
- package/THIRD-PARTY-NOTICES.md +52 -0
- package/dist/{chunk-DXHLIJEY.js → chunk-47ZAKRVN.js} +6 -6
- package/dist/{chunk-NR2G4TMG.js → chunk-B5ZCT3UK.js} +47 -26
- package/dist/chunk-B5ZCT3UK.js.map +6 -0
- package/dist/chunk-BR5K6SBL.js +324 -0
- package/dist/chunk-BR5K6SBL.js.map +6 -0
- package/dist/chunk-CCH7CFU5.js +5026 -0
- package/dist/chunk-CCH7CFU5.js.map +6 -0
- package/dist/{peer/chunk-BQFI3DHK.js → chunk-ES2LYZ6S.js} +292 -25
- package/dist/chunk-ES2LYZ6S.js.map +6 -0
- package/dist/{chunk-S2IUUI6N.js → chunk-GOCWG6FG.js} +67 -49
- package/dist/chunk-GOCWG6FG.js.map +6 -0
- package/dist/{chunk-3D2KFKG2.js → chunk-GRYITZPG.js} +11 -9
- package/dist/chunk-GRYITZPG.js.map +6 -0
- package/dist/{chunk-2BPBQMH2.js → chunk-H422SRD3.js} +8 -8
- package/dist/chunk-JD6EJ3LI.js +18 -0
- package/dist/{chunk-Z7MKH66Z.js → chunk-MS2LQC2O.js} +236 -12
- package/dist/chunk-MS2LQC2O.js.map +6 -0
- package/dist/{chunk-Q6MMPKQA.js → chunk-PF4RFKX2.js} +13 -12
- package/dist/chunk-PF4RFKX2.js.map +6 -0
- package/dist/{chunk-PGP3QA6L.js → chunk-PKXTMC4J.js} +1351 -75
- package/dist/chunk-PKXTMC4J.js.map +6 -0
- package/dist/{chunk-M6AYND5G.js → chunk-U2ZY2NPQ.js} +16 -7
- package/dist/chunk-U2ZY2NPQ.js.map +6 -0
- package/dist/{chunk-DPVJEFKP.js → chunk-WOBRKNIA.js} +13 -13
- package/dist/{chunk-DPVJEFKP.js.map → chunk-WOBRKNIA.js.map} +1 -1
- package/dist/chunk-XXTAPZO4.js +34 -0
- package/dist/{chunk-VNOWPSE6.js → chunk-ZGRJJ6OW.js} +1226 -887
- package/dist/chunk-ZGRJJ6OW.js.map +6 -0
- package/dist/designer.d.ts +11 -3
- package/dist/designer.js +598 -390
- package/dist/designer.js.map +3 -3
- package/dist/engine.worker.bwip.js +51422 -0
- package/dist/engine.worker.bwip.js.map +6 -0
- package/dist/engine.worker.js +59582 -26
- package/dist/engine.worker.js.map +3 -3
- package/dist/peer/{chunk-WSNRD2AQ.js → chunk-3EYYRJR4.js} +13 -12
- package/dist/{chunk-Q6MMPKQA.js.map → peer/chunk-3EYYRJR4.js.map} +1 -1
- package/dist/peer/{chunk-TSC4RAH3.js → chunk-3XZY54LM.js} +1351 -75
- package/dist/peer/chunk-3XZY54LM.js.map +6 -0
- package/dist/peer/chunk-5RUNOIS7.js +33 -0
- package/dist/peer/chunk-5RUNOIS7.js.map +6 -0
- package/dist/peer/{chunk-6I2EAAVN.js → chunk-7IP67PA6.js} +47 -26
- package/dist/peer/chunk-7IP67PA6.js.map +6 -0
- package/dist/peer/{chunk-R4VX5UC7.js → chunk-A6UXBSTP.js} +8 -8
- package/dist/peer/{chunk-V42KN7HD.js → chunk-CFTFTV2O.js} +6 -6
- package/dist/peer/chunk-JQTRDHQP.js +866 -0
- package/dist/peer/chunk-JQTRDHQP.js.map +6 -0
- package/dist/peer/chunk-KD6CDYGE.js +5024 -0
- package/dist/peer/chunk-KD6CDYGE.js.map +6 -0
- package/dist/peer/chunk-MXR6JBMP.js +546 -0
- package/dist/peer/chunk-MXR6JBMP.js.map +6 -0
- package/dist/peer/chunk-N42DCZZA.js +378 -0
- package/dist/peer/chunk-N42DCZZA.js.map +6 -0
- package/dist/{chunk-6TPZ7G74.js → peer/chunk-RKFP7SDY.js} +292 -25
- package/dist/peer/chunk-RKFP7SDY.js.map +6 -0
- package/dist/peer/{chunk-BMAXIBP2.js → chunk-WABYQWMT.js} +13 -13
- package/dist/peer/{chunk-BMAXIBP2.js.map → chunk-WABYQWMT.js.map} +1 -1
- package/dist/peer/chunk-WVQQCD4M.js +14211 -0
- package/dist/peer/chunk-WVQQCD4M.js.map +6 -0
- package/dist/peer/chunk-XHCRHVRK.js +17 -0
- package/dist/peer/chunk-XHCRHVRK.js.map +6 -0
- package/dist/peer/{chunk-WQGENQZO.js → chunk-ZS3J4WBH.js} +11 -9
- package/dist/peer/chunk-ZS3J4WBH.js.map +6 -0
- package/dist/peer/designer.js +455 -247
- package/dist/peer/designer.js.map +3 -3
- package/dist/peer/engine.worker.bwip.js +51422 -0
- package/dist/peer/engine.worker.bwip.js.map +6 -0
- package/dist/peer/engine.worker.js +59582 -25
- package/dist/peer/engine.worker.js.map +3 -3
- package/dist/peer/viewer.js +16 -12
- package/dist/peer/viewer.js.map +1 -1
- package/dist/viewer.d.ts +2 -1
- package/dist/viewer.js +16 -12
- package/dist/viewer.js.map +1 -1
- package/package.json +3 -2
- package/dist/chunk-3D2KFKG2.js.map +0 -6
- package/dist/chunk-6TPZ7G74.js.map +0 -6
- package/dist/chunk-BRB34AJ2.js +0 -16
- package/dist/chunk-M6AYND5G.js.map +0 -6
- package/dist/chunk-NR2G4TMG.js.map +0 -6
- package/dist/chunk-PGP3QA6L.js.map +0 -6
- package/dist/chunk-S2IUUI6N.js.map +0 -6
- package/dist/chunk-ULKEEARQ.js +0 -553
- package/dist/chunk-ULKEEARQ.js.map +0 -6
- package/dist/chunk-VNOWPSE6.js.map +0 -6
- package/dist/chunk-Z7MKH66Z.js.map +0 -6
- package/dist/peer/chunk-2FZTYEDE.js +0 -15
- package/dist/peer/chunk-6I2EAAVN.js.map +0 -6
- package/dist/peer/chunk-BQFI3DHK.js.map +0 -6
- package/dist/peer/chunk-TSC4RAH3.js.map +0 -6
- package/dist/peer/chunk-WQGENQZO.js.map +0 -6
- package/dist/peer/chunk-WSNRD2AQ.js.map +0 -6
- /package/dist/{chunk-DXHLIJEY.js.map → chunk-47ZAKRVN.js.map} +0 -0
- /package/dist/{chunk-2BPBQMH2.js.map → chunk-H422SRD3.js.map} +0 -0
- /package/dist/{chunk-BRB34AJ2.js.map → chunk-JD6EJ3LI.js.map} +0 -0
- /package/dist/{peer/chunk-2FZTYEDE.js.map → chunk-XXTAPZO4.js.map} +0 -0
- /package/dist/peer/{chunk-R4VX5UC7.js.map → chunk-A6UXBSTP.js.map} +0 -0
- /package/dist/peer/{chunk-V42KN7HD.js.map → chunk-CFTFTV2O.js.map} +0 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import {
|
|
2
|
+
withDeadline
|
|
3
|
+
} from "../chunk-D2NTLAKL.js";
|
|
4
|
+
import {
|
|
5
|
+
isJustified,
|
|
6
|
+
needsTableData,
|
|
7
|
+
visualLines
|
|
8
|
+
} from "../chunk-F6RMRXIN.js";
|
|
9
|
+
import {
|
|
10
|
+
altOf,
|
|
11
|
+
boxDecor,
|
|
12
|
+
cellVisuals,
|
|
13
|
+
figurePicture,
|
|
14
|
+
figureSvg,
|
|
15
|
+
figures,
|
|
16
|
+
hexOrNull,
|
|
17
|
+
rasterize
|
|
18
|
+
} from "./chunk-MXR6JBMP.js";
|
|
19
|
+
import {
|
|
20
|
+
officeFamily
|
|
21
|
+
} from "./chunk-JQTRDHQP.js";
|
|
22
|
+
|
|
23
|
+
// src/exporters/docx.js
|
|
24
|
+
import { Zip, ZipDeflate, strToU8 } from "fflate";
|
|
25
|
+
var TW = 20;
|
|
26
|
+
var EMU = 12700;
|
|
27
|
+
var CONTENT_TYPES = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
28
|
+
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Default Extension="png" ContentType="image/png"/><Default Extension="jpeg" ContentType="image/jpeg"/><Default Extension="svg" ContentType="image/svg+xml"/><Override Part\
|
|
29
|
+
Name="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/><Override PartName="/word/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/></Types>`;
|
|
30
|
+
var RELS = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
31
|
+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/></Relationships>`;
|
|
32
|
+
var XML_CHUNK = 4 * 1024 * 1024;
|
|
33
|
+
function slices(s, max) {
|
|
34
|
+
const out = [];
|
|
35
|
+
let i = 0;
|
|
36
|
+
while (s.length - i > max) {
|
|
37
|
+
const j = s.indexOf(">", i + max);
|
|
38
|
+
if (j < 0) break;
|
|
39
|
+
out.push(s.slice(i, j + 1));
|
|
40
|
+
i = j + 1;
|
|
41
|
+
}
|
|
42
|
+
out.push(s.slice(i));
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
var esc = (s) => String(s).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
46
|
+
var hex = (c) => {
|
|
47
|
+
const m = /^#?([0-9a-f]{6})$/i.exec(String(c || "").trim());
|
|
48
|
+
return m ? m[1].toUpperCase() : "000000";
|
|
49
|
+
};
|
|
50
|
+
function rPr(it) {
|
|
51
|
+
const f = String(it.font || "");
|
|
52
|
+
const family = officeFamily(f);
|
|
53
|
+
const deco = String(it.deco || "");
|
|
54
|
+
const script = it.rich?.s ? `<w:vertAlign w:val="${it.rich.s === "sup" ? "superscript" : "subscript"}"/>` : "";
|
|
55
|
+
const size = it.rich?.s ? it.rich.z : it.size;
|
|
56
|
+
return `<w:rPr><w:rFonts w:ascii="${esc(family)}" w:hAnsi="${esc(family)}" w:cs="${esc(family)}"/>${/bold/i.test(f) ? "<w:b/>" : ""}${/italic|oblique/i.test(f) ? "<w:i/>" : ""}${deco.includes("line-through") ? "<w:strike/>" : ""}<w:color w:val="${hex(it.color)}"/><w:sz w:val="${Math.round((size || 9) * 2)}"/>${deco.includes("underline") ? '<w:u w:val="single"/>' : ""}${script}</w:rPr>`;
|
|
57
|
+
}
|
|
58
|
+
function alignOf(it) {
|
|
59
|
+
if (isJustified(it)) return "both";
|
|
60
|
+
const c = it.clip;
|
|
61
|
+
if (!c || !it.lines.length) return "left";
|
|
62
|
+
const l = it.lines[0];
|
|
63
|
+
const left = l.x - c.x, right = c.x + c.w - (l.x + (l.w || 0));
|
|
64
|
+
if (Math.abs(left - right) < 2 && left > 4) return "center";
|
|
65
|
+
return right < left - 2 ? "right" : "left";
|
|
66
|
+
}
|
|
67
|
+
var edge = (tag, o, space = 0) => {
|
|
68
|
+
const color = hexOrNull(o.stroke);
|
|
69
|
+
if (!color) return "";
|
|
70
|
+
const val = !o.dash ? "single" : o.dash[0] <= 1.5 ? "dotted" : "dashed";
|
|
71
|
+
return `<w:${tag} w:val="${val}" w:sz="${Math.max(2, Math.min(96, Math.round((o.strokeWidth || 1) * 8)))}" w:space="${space}" w:color="${color}"/>`;
|
|
72
|
+
};
|
|
73
|
+
var pBorders = (d) => {
|
|
74
|
+
if (!d || !Object.keys(d.sides).length) return "";
|
|
75
|
+
const s = d.sides;
|
|
76
|
+
return `<w:pBdr>${s.top ? edge("top", s.top, 1) : ""}${s.left ? edge("left", s.left, 4) : ""}${s.bottom ? edge("bottom", s.bottom, 1) : ""}${s.right ? edge("right", s.right, 4) : ""}</w:pBdr>`;
|
|
77
|
+
};
|
|
78
|
+
var shading = (fill) => fill ? `<w:shd w:val="clear" w:color="auto" w:fill="${fill}"/>` : "";
|
|
79
|
+
var textOf = (it) => visualLines(it).join(" ");
|
|
80
|
+
var headingStyle = (it) => it.tag?.h >= 1 ? `<w:pStyle w:val="Heading${Math.min(6, Math.round(it.tag.h))}"/>` : "";
|
|
81
|
+
var para = (it, indentPt, decor) => `<w:p><w:pPr>${headingStyle(it)}${pBorders(decor)}${shading(decor?.fill)}<w:spacing w:before="0" w:after="${Math.round((it.size || 9) * 4)}"/>${indentPt > 0 ? `<w:ind w:left="${Math.round(indentPt * TW)}"/>` : ""}<w:jc w:val="${alignOf(it)}"/></w:pPr><w:r>${rPr(it)}<w:t xml:space="preserve">${esc(textOf(it))}</w:t></w:r></w:p>`;
|
|
82
|
+
function richPara(items, indentPt) {
|
|
83
|
+
items.sort((a, b) => a.rich.l - b.rich.l || a.lines[0].x - b.lines[0].x);
|
|
84
|
+
let runs = "", line = items[0].rich.l, prev = "";
|
|
85
|
+
for (const it of items) {
|
|
86
|
+
if (it.rich.l !== line) {
|
|
87
|
+
if (it.rich.br) runs += "<w:r><w:br/></w:r>";
|
|
88
|
+
else if (prev && !prev.endsWith(" ")) runs += `<w:r>${rPr(it)}<w:t xml:space="preserve"> </w:t></w:r>`;
|
|
89
|
+
line = it.rich.l;
|
|
90
|
+
}
|
|
91
|
+
prev = it.lines[0].text;
|
|
92
|
+
runs += `<w:r>${rPr(it)}<w:t xml:space="preserve">${esc(prev)}</w:t></w:r>`;
|
|
93
|
+
}
|
|
94
|
+
const jc = { center: "center", right: "right" }[items[0].rich.a] || "left";
|
|
95
|
+
return `<w:p><w:pPr>${headingStyle(items[0])}<w:spacing w:before="0" w:after="${Math.round((items[0].size || 9) * 4)}"/>${indentPt > 0 ? `<w:ind w:left="${Math.round(indentPt * TW)}"/>` : ""}<w:jc w:val="${jc}"/></w:pPr>${runs}</w:p>`;
|
|
96
|
+
}
|
|
97
|
+
function commonEdge(decors) {
|
|
98
|
+
const count = /* @__PURE__ */ new Map();
|
|
99
|
+
let sides = 0;
|
|
100
|
+
for (const d of decors) for (const s of ["top", "right", "bottom", "left"]) {
|
|
101
|
+
sides++;
|
|
102
|
+
const o = d?.sides[s];
|
|
103
|
+
if (!o) continue;
|
|
104
|
+
const k = edge("x", o);
|
|
105
|
+
const e = count.get(k) || { n: 0, o };
|
|
106
|
+
e.n++;
|
|
107
|
+
count.set(k, e);
|
|
108
|
+
}
|
|
109
|
+
const best = [...count.values()].sort((a, b) => b.n - a.n)[0];
|
|
110
|
+
return best && best.n * 2.5 >= sides ? best.o : null;
|
|
111
|
+
}
|
|
112
|
+
function table(cells, indentPt, pics) {
|
|
113
|
+
const cols = cells[0].cell.cols;
|
|
114
|
+
const rows = /* @__PURE__ */ new Map();
|
|
115
|
+
for (const it of cells) {
|
|
116
|
+
const r = rows.get(it.cell.row) || rows.set(it.cell.row, { id: it.cell.row, kind: it.cell.kind, y: it.lines[0]?.y ?? 0, byCol: /* @__PURE__ */ new Map() }).get(it.cell.row);
|
|
117
|
+
r.byCol.set(it.cell.col, it);
|
|
118
|
+
}
|
|
119
|
+
const common = commonEdge(cells.map((c) => c.decor));
|
|
120
|
+
const tblB = common ? ["top", "left", "bottom", "right", "insideH", "insideV"].map((s) => edge(s, common)).join("") : '<w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/><w:insideH w:val="nil"/><w:insideV w:val="nil"/>';
|
|
121
|
+
const cellB = (d) => {
|
|
122
|
+
if (!d) return "";
|
|
123
|
+
const s = d.sides;
|
|
124
|
+
const x = (s.top ? edge("top", s.top) : "") + (s.left ? edge("left", s.left) : "") + (s.bottom ? edge("bottom", s.bottom) : "") + (s.right ? edge("right", s.right) : "");
|
|
125
|
+
return x ? `<w:tcBorders>${x}</w:tcBorders>` : "";
|
|
126
|
+
};
|
|
127
|
+
const grid = cols.map((w) => `<w:gridCol w:w="${Math.round(w * TW)}"/>`).join("");
|
|
128
|
+
const vm = /* @__PURE__ */ new Map();
|
|
129
|
+
const out = [...rows.values()].sort((a, b) => a.y - b.y).map((r) => {
|
|
130
|
+
const tcs = [];
|
|
131
|
+
for (let c = 0; c < cols.length; ) {
|
|
132
|
+
const down = vm.get(c);
|
|
133
|
+
if (down && !r.byCol.has(c)) {
|
|
134
|
+
const w2 = cols.slice(c, c + down.span).reduce((s, x) => s + x, 0);
|
|
135
|
+
tcs.push(`<w:tc><w:tcPr><w:tcW w:w="${Math.round(w2 * TW)}" w:type="dxa"/>${down.span > 1 ? `<w:gridSpan w:val="${down.span}"/>` : ""}<w:vMerge/></w:tcPr><w:p/></w:tc>`);
|
|
136
|
+
if (--down.left <= 0) vm.delete(c);
|
|
137
|
+
c += down.span;
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const it = r.byCol.get(c);
|
|
141
|
+
const rs = Math.max(1, it?.cell.rowSpan || 1);
|
|
142
|
+
if (rs > 1) vm.set(c, { left: rs - 1, span: Math.max(1, it.cell.span || 1) });
|
|
143
|
+
const span = Math.max(1, it?.cell.span || 1);
|
|
144
|
+
const w = cols.slice(c, c + span).reduce((s, x) => s + x, 0);
|
|
145
|
+
const bg = it?.cell.bg && /^#?[0-9a-f]{6}$/i.test(it.cell.bg) ? hex(it.cell.bg) : it?.decor?.fill || null;
|
|
146
|
+
const pic = pics.get(`${r.id}|${c}`) || "";
|
|
147
|
+
const text = it ? `<w:r>${rPr(it)}<w:t xml:space="preserve">${esc(textOf(it))}</w:t></w:r>` : "";
|
|
148
|
+
const p = it || pic ? `<w:p><w:pPr><w:spacing w:before="0" w:after="0"/><w:jc w:val="${it ? alignOf(it) : "left"}"/></w:pPr>${pic}${text}</w:p>` : "<w:p/>";
|
|
149
|
+
tcs.push(`<w:tc><w:tcPr><w:tcW w:w="${Math.round(w * TW)}" w:type="dxa"/>${span > 1 ? `<w:gridSpan w:val="${span}"/>` : ""}${rs > 1 ? '<w:vMerge w:val="restart"/>' : ""}${cellB(it?.decor)}${shading(bg)}</w:tcPr>${p}</w:tc>`);
|
|
150
|
+
c += span;
|
|
151
|
+
}
|
|
152
|
+
return `<w:tr>${r.kind === "header" ? "<w:trPr><w:tblHeader/></w:trPr>" : ""}${tcs.join("")}</w:tr>`;
|
|
153
|
+
}).join("");
|
|
154
|
+
return `<w:tbl><w:tblPr><w:tblW w:w="0" w:type="auto"/>${indentPt > 0 ? `<w:tblInd w:w="${Math.round(indentPt * TW)}" w:type="dxa"/>` : ""}<w:tblBorders>${tblB}</w:tblBorders><w:tblLayout w:type="fixed"/><w:tblCellMar><w:left w:w="60" w:type="dxa"/><w:right w:w="60" w:type="dxa"/></w:tblCellMar></w:tblPr><w:tblGrid>${grid}</w:tblGrid>${out}</w:tbl><w:p><w:pPr><w:spacing w:before="0" w:after="0"/\
|
|
155
|
+
></w:pPr></w:p>`;
|
|
156
|
+
}
|
|
157
|
+
function layoutRow(row, margin) {
|
|
158
|
+
const cols = [], cells = [];
|
|
159
|
+
let x = row[0].it.clip.x;
|
|
160
|
+
for (const r of row) {
|
|
161
|
+
const c = r.it.clip;
|
|
162
|
+
if (c.x - x > 0.5) {
|
|
163
|
+
cols.push(c.x - x);
|
|
164
|
+
cells.push('<w:tc><w:tcPr><w:tcW w:w="' + Math.round((c.x - x) * TW) + '" w:type="dxa"/></w:tcPr><w:p/></w:tc>');
|
|
165
|
+
}
|
|
166
|
+
cols.push(c.w);
|
|
167
|
+
const d = r.decor;
|
|
168
|
+
const bdr = d && Object.keys(d.sides).length ? `<w:tcBorders>${["top", "left", "bottom", "right"].map((sd) => d.sides[sd] ? edge(sd, d.sides[sd]) : "").join("")}</w:tcBorders>` : "";
|
|
169
|
+
cells.push(`<w:tc><w:tcPr><w:tcW w:w="${Math.round(c.w * TW)}" w:type="dxa"/>${bdr}${shading(d?.fill)}</w:tcPr><w:p><w:pPr><w:spacing w:before="0" w:after="0"/><w:jc w:val="${alignOf(r.it)}"/></w:pPr><w:r>${rPr(r.it)}<w:t xml:space="preserve">${esc(textOf(r.it))}</w:t></w:r></w:p></w:tc>`);
|
|
170
|
+
x = c.x + c.w;
|
|
171
|
+
}
|
|
172
|
+
const ind = row[0].it.clip.x - margin;
|
|
173
|
+
return `<w:tbl><w:tblPr><w:tblW w:w="0" w:type="auto"/>${Math.abs(ind) > 0.5 ? `<w:tblInd w:w="${Math.round(ind * TW)}" w:type="dxa"/>` : ""}<w:tblBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/><w:insideH w:val="nil"/><w:insideV w:val="nil"/></w:tblBorders><w:tblLayout w:type="fixed"/><w:tblCellMar><w:left w:w="0" w:type="dxa"/><w:right w:w="0" w:ty\
|
|
174
|
+
pe="dxa"/></w:tblCellMar><w:tblLook w:val="0000"/></w:tblPr><w:tblGrid>${cols.map((w) => `<w:gridCol w:w="${Math.round(w * TW)}"/>`).join("")}</w:tblGrid><w:tr>${cells.join("")}</w:tr></w:tbl><w:p><w:pPr><w:spacing w:before="0" w:after="40"/><w:rPr><w:sz w:val="4"/></w:rPr></w:pPr></w:p>`;
|
|
175
|
+
}
|
|
176
|
+
function exportDocx(model, opt = {}) {
|
|
177
|
+
return withDeadline(
|
|
178
|
+
docxOf(model, opt),
|
|
179
|
+
/** @type {any} */
|
|
180
|
+
opt.timeoutMs
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
async function docxOf(model, opt) {
|
|
184
|
+
needsTableData(model, "Word");
|
|
185
|
+
const chunks = [];
|
|
186
|
+
await writeDocx(model.pages, model, opt, (u8) => {
|
|
187
|
+
chunks.push(u8);
|
|
188
|
+
});
|
|
189
|
+
const bytes = new Uint8Array(chunks.reduce((n, c) => n + c.length, 0));
|
|
190
|
+
let at = 0;
|
|
191
|
+
for (const c of chunks) {
|
|
192
|
+
bytes.set(c, at);
|
|
193
|
+
at += c.length;
|
|
194
|
+
}
|
|
195
|
+
return bytes;
|
|
196
|
+
}
|
|
197
|
+
async function writeDocx(pages, model, opt, put) {
|
|
198
|
+
const margin = 18;
|
|
199
|
+
const media = [];
|
|
200
|
+
let docPr = 0;
|
|
201
|
+
const addMedia = (bytes, ext) => {
|
|
202
|
+
const rid = `rIdm${media.length + 1}`;
|
|
203
|
+
media.push({ name: `image${media.length + 1}.${ext}`, bytes, rid });
|
|
204
|
+
return rid;
|
|
205
|
+
};
|
|
206
|
+
const pictureRun = (pic, alt) => {
|
|
207
|
+
const main = pic.png ? addMedia(pic.png, "png") : pic.jpeg ? addMedia(pic.jpeg, "jpeg") : pic.svg ? addMedia(strToU8(pic.svg), "svg") : null;
|
|
208
|
+
if (!main) return "";
|
|
209
|
+
const svg = pic.png && pic.svg ? addMedia(strToU8(pic.svg), "svg") : null;
|
|
210
|
+
const id = ++docPr, cx = Math.max(1, Math.round(pic.w * EMU)), cy = Math.max(1, Math.round(pic.h * EMU));
|
|
211
|
+
const name = `Picture ${id}`, descr = alt ? ` descr="${esc(alt)}"` : "";
|
|
212
|
+
const ext = svg ? `<a:extLst><a:ext uri="{96DAC541-7B7A-43D3-8B79-37D633B846F1}"><asvg:svgBlip xmlns:asvg="http://schemas.microsoft.com/office/drawing/2016/SVG/main" r:embed="${svg}"/></a:ext></a:extLst>` : "";
|
|
213
|
+
return `<w:r><w:drawing><wp:inline distT="0" distB="0" distL="0" distR="0"><wp:extent cx="${cx}" cy="${cy}"/><wp:docPr id="${id}" name="${name}"${descr}/><wp:cNvGraphicFramePr><a:graphicFrameLocks noChangeAspect="1"/></wp:cNvGraphicFramePr><a:graphic><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:pic><pic:nvPicPr><pic:cNvPr id="${id}" name="${name}"${descr}/\
|
|
214
|
+
><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed="${main}">${ext}</a:blip><a:stretch><a:fillRect/></a:stretch></pic:blipFill><pic:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="${cx}" cy="${cy}"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r>`;
|
|
215
|
+
};
|
|
216
|
+
const picOpt = { fontStore: opt.fontStore, fetchImage: opt.fetchImage, rasterize: opt.rasterize };
|
|
217
|
+
const pageXml = async (pg) => {
|
|
218
|
+
const all = pg.items.flatMap((i) => i.t === "field" ? i.draw : [i]);
|
|
219
|
+
const figs = opt.figures === false ? [] : figures(all);
|
|
220
|
+
const used = /* @__PURE__ */ new Set();
|
|
221
|
+
for (const f of figs) for (let k = f.at; k <= f.last; k++) used.add(k);
|
|
222
|
+
const blocks = [];
|
|
223
|
+
const tables = /* @__PURE__ */ new Map();
|
|
224
|
+
const paras = /* @__PURE__ */ new Map();
|
|
225
|
+
all.forEach((it, i) => {
|
|
226
|
+
if (used.has(i) || it.t !== "text" || !it.lines?.length) return;
|
|
227
|
+
if (it.rich) {
|
|
228
|
+
const key = `${it.rich.id}${it.rich.p}`;
|
|
229
|
+
let b = paras.get(key);
|
|
230
|
+
if (!b) {
|
|
231
|
+
b = { kind: "rich", y: it.lines[0].y, x: it.lines[0].x, items: [] };
|
|
232
|
+
paras.set(key, b);
|
|
233
|
+
blocks.push(b);
|
|
234
|
+
}
|
|
235
|
+
b.items.push(it);
|
|
236
|
+
b.y = Math.min(b.y, it.lines[0].y);
|
|
237
|
+
b.x = Math.min(b.x, it.lines[0].x);
|
|
238
|
+
} else if (it.cell) {
|
|
239
|
+
const key = it.cell.table;
|
|
240
|
+
if (!tables.has(key)) {
|
|
241
|
+
const b2 = { kind: "table", key, y: it.lines[0].y, x: it.clip?.x ?? it.lines[0].x, cells: [] };
|
|
242
|
+
tables.set(key, b2);
|
|
243
|
+
blocks.push(b2);
|
|
244
|
+
}
|
|
245
|
+
const b = tables.get(key);
|
|
246
|
+
b.cells.push({ ...it, decor: boxDecor(all, i) });
|
|
247
|
+
b.y = Math.min(b.y, it.lines[0].y);
|
|
248
|
+
b.x = Math.min(b.x, it.clip?.x ?? it.lines[0].x);
|
|
249
|
+
} else blocks.push({ kind: "text", y: it.lines[0].y, x: it.lines[0].x, it, decor: boxDecor(all, i) });
|
|
250
|
+
});
|
|
251
|
+
const visuals = opt.figures === false ? /* @__PURE__ */ new Map() : cellVisuals(all, used, tables);
|
|
252
|
+
const frames = figs.filter((f) => f.tag.k === "shape" && f.items.length === 1 && f.items[0].t === "rect");
|
|
253
|
+
for (const b of blocks) {
|
|
254
|
+
const c = b.kind === "text" && b.it.clip;
|
|
255
|
+
const fr = c && frames.find((f) => {
|
|
256
|
+
const r2 = f.items[0];
|
|
257
|
+
return c.x >= r2.x - 0.5 && c.y >= r2.y - 0.5 && c.x + c.w <= r2.x + r2.w + 0.5 && c.y + c.h <= r2.y + r2.h + 0.5;
|
|
258
|
+
});
|
|
259
|
+
if (!fr) continue;
|
|
260
|
+
const r = fr.items[0];
|
|
261
|
+
fr.used = true;
|
|
262
|
+
b.decor = { fill: b.decor?.fill || hexOrNull(r.fill), sides: Object.keys(b.decor?.sides || {}).length ? b.decor.sides : {} };
|
|
263
|
+
}
|
|
264
|
+
for (const f of figs) if (!f.used) blocks.push({ kind: "fig", y: f.box.y, x: f.box.x, fig: f });
|
|
265
|
+
blocks.sort((a, b) => a.y - b.y || a.x - b.x);
|
|
266
|
+
let xml = "";
|
|
267
|
+
for (let bi = 0; bi < blocks.length; bi++) {
|
|
268
|
+
const b = blocks[bi];
|
|
269
|
+
if (b.kind === "fig") {
|
|
270
|
+
const row = [b];
|
|
271
|
+
while (blocks[bi + 1]?.kind === "fig" && Math.abs(blocks[bi + 1].y - b.y) < 4) row.push(blocks[++bi]);
|
|
272
|
+
row.sort((p, q) => p.x - q.x);
|
|
273
|
+
let runs = "", right = null;
|
|
274
|
+
for (const r of row) {
|
|
275
|
+
const pic = await figurePicture(r.fig, picOpt);
|
|
276
|
+
if (right != null && pic.x > right) runs += `<w:r><w:rPr><w:spacing w:val="${Math.min(31680, Math.max(0, Math.round((pic.x - right - 3) * TW)))}"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r>`;
|
|
277
|
+
runs += pictureRun(pic, altOf(r.fig.tag));
|
|
278
|
+
right = pic.x + pic.w;
|
|
279
|
+
}
|
|
280
|
+
const first = row[0];
|
|
281
|
+
xml += `<w:p><w:pPr><w:spacing w:before="0" w:after="80"/>${Math.abs(first.x - margin) > 0.5 ? `<w:ind w:left="${Math.round(Math.max(-margin, first.x - margin) * TW)}"/>` : ""}</w:pPr>${runs}</w:p>`;
|
|
282
|
+
} else if (b.kind === "table") {
|
|
283
|
+
const pics = /* @__PURE__ */ new Map();
|
|
284
|
+
for (const [k, v] of visuals.get(b.key) || []) {
|
|
285
|
+
if (!v.box) continue;
|
|
286
|
+
const svg = figureSvg({ items: v.items, box: v.box }, opt.fontStore);
|
|
287
|
+
pics.set(k, pictureRun({ svg, png: await rasterize(svg, v.box.w, v.box.h, picOpt), w: v.box.w, h: v.box.h }, "Chart in a table cell"));
|
|
288
|
+
}
|
|
289
|
+
xml += table(b.cells, b.x - margin, pics);
|
|
290
|
+
} else if (b.kind === "rich") xml += richPara(b.items, b.x - margin);
|
|
291
|
+
else {
|
|
292
|
+
const row = [b];
|
|
293
|
+
const top = (t) => t.it.clip?.y ?? t.y - t.it.size;
|
|
294
|
+
while (blocks[bi + 1]?.kind === "text" && Math.abs(top(blocks[bi + 1]) - top(b)) < 3 && blocks[bi + 1].it.clip && b.it.clip) row.push(blocks[++bi]);
|
|
295
|
+
row.sort((p, q) => p.it.clip.x - q.it.clip.x);
|
|
296
|
+
const apart = row.every((r, k) => k === 0 || r.it.clip.x >= row[k - 1].it.clip.x + row[k - 1].it.clip.w - 0.5);
|
|
297
|
+
if (row.length > 1 && apart) xml += layoutRow(row, margin);
|
|
298
|
+
else for (const r of row) xml += para(r.it, (r.it.clip?.x ?? r.x) - margin, r.decor);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return xml;
|
|
302
|
+
};
|
|
303
|
+
const M = margin * TW, V = 36 * TW;
|
|
304
|
+
const sectPr = (pg) => {
|
|
305
|
+
const W = Math.round((pg.width ?? model.width) * TW), H = Math.round((pg.height ?? model.height) * TW);
|
|
306
|
+
return `<w:sectPr><w:pgSz w:w="${W}" w:h="${H}"${W > H ? ' w:orient="landscape"' : ""}/><w:pgMar w:top="${V}" w:right="${M}" w:bottom="${V}" w:left="${M}" w:header="0" w:footer="0" w:gutter="0"/></w:sectPr>`;
|
|
307
|
+
};
|
|
308
|
+
const sizeOf = (pg) => `${pg.width ?? model.width}x${pg.height ?? model.height}`;
|
|
309
|
+
let zipOut = [], zerr = null;
|
|
310
|
+
const zip = new Zip((err, data) => {
|
|
311
|
+
if (err) zerr = err;
|
|
312
|
+
else zipOut.push(data);
|
|
313
|
+
});
|
|
314
|
+
const drain = async () => {
|
|
315
|
+
if (zerr) throw zerr;
|
|
316
|
+
const o = zipOut;
|
|
317
|
+
zipOut = [];
|
|
318
|
+
for (const c of o) await put(c);
|
|
319
|
+
};
|
|
320
|
+
const file = async (name, bytes) => {
|
|
321
|
+
const e = new ZipDeflate(name, { level: 6 });
|
|
322
|
+
zip.add(e);
|
|
323
|
+
e.push(bytes, true);
|
|
324
|
+
await drain();
|
|
325
|
+
};
|
|
326
|
+
const doc = new ZipDeflate("word/document.xml", { level: 6 });
|
|
327
|
+
const max = opt.xmlChunk || XML_CHUNK;
|
|
328
|
+
let buf = "";
|
|
329
|
+
const write = async (str) => {
|
|
330
|
+
for (const p of slices(str, max)) {
|
|
331
|
+
if (buf.length + p.length > max) {
|
|
332
|
+
doc.push(strToU8(buf), false);
|
|
333
|
+
buf = "";
|
|
334
|
+
await drain();
|
|
335
|
+
}
|
|
336
|
+
buf += p;
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
await file("[Content_Types].xml", strToU8(CONTENT_TYPES));
|
|
340
|
+
await file("_rels/.rels", strToU8(RELS));
|
|
341
|
+
zip.add(doc);
|
|
342
|
+
await write(`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
343
|
+
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"><w:body>`);
|
|
344
|
+
let prev = null;
|
|
345
|
+
for await (const pg of pages) {
|
|
346
|
+
if (prev) await write(sizeOf(pg) !== sizeOf(prev) ? `<w:p><w:pPr>${sectPr(prev)}</w:pPr></w:p>` : '<w:p><w:pPr><w:pageBreakBefore/><w:spacing w:before="0" w:after="0" w:line="20" w:lineRule="exact"/><w:rPr><w:sz w:val="2"/></w:rPr></w:pPr></w:p>');
|
|
347
|
+
await write(await pageXml(pg));
|
|
348
|
+
prev = pg;
|
|
349
|
+
}
|
|
350
|
+
await write(`${sectPr(prev || {})}</w:body></w:document>`);
|
|
351
|
+
doc.push(strToU8(buf), true);
|
|
352
|
+
buf = "";
|
|
353
|
+
await drain();
|
|
354
|
+
const lang = `<w:lang w:val="${esc(opt.lang || model.locale || "en-US")}"/>`;
|
|
355
|
+
const headings = [28, 24, 22, 20, 18, 18].map((sz, i) => `<w:style w:type="paragraph" w:styleId="Heading${i + 1}"><w:name w:val="heading ${i + 1}"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:qFormat/><w:pPr><w:keepNext/><w:outlineLvl w:val="${i}"/></w:pPr><w:rPr><w:b/><w:sz w:val="${sz}"/></w:rPr></w:style>`).join("");
|
|
356
|
+
const styles = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
357
|
+
<w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:ascii="Inter" w:hAnsi="Inter" w:cs="Inter"/><w:sz w:val="18"/>${lang}</w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:after="0" w:line="240" w:lineRule="auto"/></w:pPr></w:pPrDefault></w:docDefaults><w:style w:type="paragraph" w:default="1" w:styleId="Normal"><w:\
|
|
358
|
+
name w:val="Normal"/></w:style>${headings}</w:styles>`;
|
|
359
|
+
const now = (/* @__PURE__ */ new Date()).toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
360
|
+
const core = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
361
|
+
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:title>${esc(opt.title || model.name || "Report")}</dc:title>${opt.author ? `<dc:creator>${esc(opt.author)}</dc:creator>` : ""}<dcterms:created xsi:type="d\
|
|
362
|
+
cterms:W3CDTF">${now}</dcterms:created></cp:coreProperties>`;
|
|
363
|
+
await file("word/_rels/document.xml.rels", strToU8(`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
364
|
+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>${media.map((m) => `<Relationship Id="${m.rid}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/${m.name}"/>`).join("")}</Relationships>`));
|
|
365
|
+
await file("word/styles.xml", strToU8(styles));
|
|
366
|
+
await file("docProps/core.xml", strToU8(core));
|
|
367
|
+
for (const m of media) await file(`word/media/${m.name}`, m.bytes);
|
|
368
|
+
zip.end();
|
|
369
|
+
await drain();
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
export {
|
|
373
|
+
slices,
|
|
374
|
+
alignOf,
|
|
375
|
+
exportDocx,
|
|
376
|
+
writeDocx
|
|
377
|
+
};
|
|
378
|
+
//# sourceMappingURL=chunk-N42DCZZA.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/exporters/docx.js"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["w", "b", "r"]
|
|
6
|
+
}
|