@reportwright/viewer 0.13.0 → 0.13.2-rc.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 +53 -0
- package/README.md +150 -7
- package/THIRD-PARTY-NOTICES.md +1 -1
- package/dist/{chunk-L6YEIVVD.js → chunk-2KNQVFKW.js} +82 -55
- package/dist/{chunk-L6YEIVVD.js.map → chunk-2KNQVFKW.js.map} +2 -2
- package/dist/{chunk-DXHLIJEY.js → chunk-47ZAKRVN.js} +6 -6
- package/dist/chunk-CCH7CFU5.js +5026 -0
- package/dist/chunk-CCH7CFU5.js.map +6 -0
- package/dist/{chunk-YIX3OJXU.js → chunk-D7S5DL46.js} +4 -4
- package/dist/{chunk-CNDUJ7IV.js → chunk-DVJYE7HZ.js} +9 -6
- package/dist/chunk-DVJYE7HZ.js.map +6 -0
- package/dist/{chunk-BF7GCWZY.js → chunk-GOCWG6FG.js} +15 -15
- package/dist/{chunk-IFYCJZNS.js → chunk-GRYITZPG.js} +30 -30
- package/dist/{chunk-F5EPQTPF.js → chunk-H422SRD3.js} +29 -29
- package/dist/{chunk-FEM2QVOO.js → chunk-JD6EJ3LI.js} +4 -4
- package/dist/{chunk-QFLVVM3H.js → chunk-MS2LQC2O.js} +38 -28
- package/dist/chunk-MS2LQC2O.js.map +6 -0
- package/dist/{chunk-UHHURTSV.js → chunk-NARXO3DB.js} +7 -7
- package/dist/{chunk-TZXEEVKE.js → chunk-OED3YZYP.js} +90 -45
- package/dist/chunk-OED3YZYP.js.map +6 -0
- package/dist/{chunk-EK5CJY22.js → chunk-OMCWZYRI.js} +69 -39
- package/dist/chunk-OMCWZYRI.js.map +6 -0
- package/dist/{chunk-UJL7C2AS.js → chunk-U2ZY2NPQ.js} +4 -4
- package/dist/{chunk-PQNM6ET7.js → chunk-WOBRKNIA.js} +12 -12
- package/dist/designer.js +349 -147
- package/dist/designer.js.map +3 -3
- package/dist/engine.worker.bwip.js +4781 -0
- package/dist/engine.worker.bwip.js.map +6 -0
- package/dist/engine.worker.js +5675 -16781
- package/dist/engine.worker.js.map +3 -3
- package/dist/peer/{chunk-2CD5COHN.js → chunk-6KUUNDNN.js} +57 -30
- package/dist/peer/{chunk-2CD5COHN.js.map → chunk-6KUUNDNN.js.map} +1 -1
- package/dist/peer/{chunk-LWXQX3NJ.js → chunk-A6UXBSTP.js} +29 -29
- package/dist/peer/{chunk-V42KN7HD.js → chunk-CFTFTV2O.js} +6 -6
- package/dist/peer/{chunk-45GVDKP5.js → chunk-FN3FXACD.js} +7 -7
- package/dist/peer/chunk-ILBTPBOA.js +14226 -0
- package/dist/peer/chunk-ILBTPBOA.js.map +6 -0
- package/dist/peer/{chunk-VZHHNQYB.js → chunk-JQDW5OR3.js} +90 -45
- package/dist/peer/chunk-JQDW5OR3.js.map +6 -0
- 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/peer/{chunk-MKY3SDXU.js → chunk-OUTKMWFM.js} +9 -6
- package/dist/peer/chunk-OUTKMWFM.js.map +6 -0
- package/dist/peer/{chunk-Z5II55QT.js → chunk-VJLMUGUI.js} +4 -4
- package/dist/peer/{chunk-3CBV5SAI.js → chunk-WABYQWMT.js} +12 -12
- package/dist/peer/{chunk-S6LSPHSU.js → chunk-XHCRHVRK.js} +4 -4
- package/dist/peer/{chunk-YITWGAR4.js → chunk-ZS3J4WBH.js} +30 -30
- package/dist/peer/designer.js +335 -134
- package/dist/peer/designer.js.map +3 -3
- package/dist/peer/engine.worker.bwip.js +4781 -0
- package/dist/peer/engine.worker.bwip.js.map +6 -0
- package/dist/peer/engine.worker.js +5675 -16781
- package/dist/peer/engine.worker.js.map +3 -3
- package/dist/peer/viewer.js +44 -12
- package/dist/peer/viewer.js.map +1 -1
- package/dist/viewer.d.ts +2 -0
- package/dist/viewer.js +44 -12
- package/dist/viewer.js.map +1 -1
- package/package.json +1 -2
- package/dist/chunk-CNDUJ7IV.js.map +0 -6
- package/dist/chunk-EK5CJY22.js.map +0 -6
- package/dist/chunk-QFLVVM3H.js.map +0 -6
- package/dist/chunk-TZXEEVKE.js.map +0 -6
- package/dist/peer/chunk-MKY3SDXU.js.map +0 -6
- package/dist/peer/chunk-VZHHNQYB.js.map +0 -6
- /package/dist/{chunk-DXHLIJEY.js.map → chunk-47ZAKRVN.js.map} +0 -0
- /package/dist/{chunk-FEM2QVOO.js.map → chunk-D7S5DL46.js.map} +0 -0
- /package/dist/{chunk-BF7GCWZY.js.map → chunk-GOCWG6FG.js.map} +0 -0
- /package/dist/{chunk-IFYCJZNS.js.map → chunk-GRYITZPG.js.map} +0 -0
- /package/dist/{chunk-F5EPQTPF.js.map → chunk-H422SRD3.js.map} +0 -0
- /package/dist/{chunk-YIX3OJXU.js.map → chunk-JD6EJ3LI.js.map} +0 -0
- /package/dist/{chunk-UHHURTSV.js.map → chunk-NARXO3DB.js.map} +0 -0
- /package/dist/{chunk-UJL7C2AS.js.map → chunk-U2ZY2NPQ.js.map} +0 -0
- /package/dist/{chunk-PQNM6ET7.js.map → chunk-WOBRKNIA.js.map} +0 -0
- /package/dist/peer/{chunk-LWXQX3NJ.js.map → chunk-A6UXBSTP.js.map} +0 -0
- /package/dist/peer/{chunk-V42KN7HD.js.map → chunk-CFTFTV2O.js.map} +0 -0
- /package/dist/peer/{chunk-45GVDKP5.js.map → chunk-FN3FXACD.js.map} +0 -0
- /package/dist/peer/{chunk-S6LSPHSU.js.map → chunk-VJLMUGUI.js.map} +0 -0
- /package/dist/peer/{chunk-3CBV5SAI.js.map → chunk-WABYQWMT.js.map} +0 -0
- /package/dist/peer/{chunk-Z5II55QT.js.map → chunk-XHCRHVRK.js.map} +0 -0
- /package/dist/peer/{chunk-YITWGAR4.js.map → chunk-ZS3J4WBH.js.map} +0 -0
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IMAGE_LIMITS,
|
|
3
|
+
dataUriBytesOf,
|
|
4
|
+
fontCss,
|
|
5
|
+
fontFile,
|
|
6
|
+
imageInfoOf,
|
|
7
|
+
isStandard,
|
|
8
|
+
standardCss,
|
|
9
|
+
unicodeRange
|
|
10
|
+
} from "./chunk-JQTRDHQP.js";
|
|
11
|
+
|
|
12
|
+
// src/exporters/color.js
|
|
13
|
+
var NAMED = { black: "#000000", white: "#ffffff", red: "#ff0000", green: "#008000", blue: "#0000ff", gray: "#808080", grey: "#808080", orange: "#ffa500", yellow: "#ffff00" };
|
|
14
|
+
function parseColor(c) {
|
|
15
|
+
if (!c || c === "none" || c === "transparent") return null;
|
|
16
|
+
let s = String(c).trim().toLowerCase();
|
|
17
|
+
if (NAMED[s]) s = NAMED[s];
|
|
18
|
+
let m = /^#([0-9a-f]{3,8})$/.exec(s);
|
|
19
|
+
if (m) {
|
|
20
|
+
let h = m[1];
|
|
21
|
+
if (h.length === 3 || h.length === 4) h = [...h].map((x) => x + x).join("");
|
|
22
|
+
const n2 = parseInt(h.slice(0, 6), 16);
|
|
23
|
+
const a = h.length === 8 ? parseInt(h.slice(6, 8), 16) / 255 : 1;
|
|
24
|
+
return { r: (n2 >> 16 & 255) / 255, g: (n2 >> 8 & 255) / 255, b: (n2 & 255) / 255, a };
|
|
25
|
+
}
|
|
26
|
+
m = /^rgba?\(([^)]+)\)$/.exec(s);
|
|
27
|
+
if (m) {
|
|
28
|
+
const [r, g, b, a = 1] = m[1].split(/[\s,/]+/).map(Number);
|
|
29
|
+
return { r: r / 255, g: g / 255, b: b / 255, a };
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
function cssColor(c) {
|
|
34
|
+
const p = parseColor(c);
|
|
35
|
+
if (!p) return "none";
|
|
36
|
+
return `rgba(${Math.round(p.r * 255)},${Math.round(p.g * 255)},${Math.round(p.b * 255)},${p.a})`;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// src/exporters/svg.js
|
|
40
|
+
var fontFamilyCss = (key) => `pw-${key}`;
|
|
41
|
+
var esc = (s) => String(s).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
42
|
+
var fontAttrs = (key) => {
|
|
43
|
+
const stack = standardCss(key);
|
|
44
|
+
if (!stack) return `font-family="${fontFamilyCss(key)}"`;
|
|
45
|
+
const c = fontCss(key);
|
|
46
|
+
return `font-family="${esc(stack)}"${c.weight !== 400 ? ` font-weight="${c.weight}"` : ""}${c.style === "italic" ? ' font-style="italic"' : ""}`;
|
|
47
|
+
};
|
|
48
|
+
function imageHref(src, proxyBase = "") {
|
|
49
|
+
const s = String(src ?? "").trim();
|
|
50
|
+
if (/^data:image\/(png|jpe?g|gif|webp|bmp|svg\+xml)[;,]/i.test(s)) return s;
|
|
51
|
+
if (/^https?:\/\//i.test(s)) return `${proxyBase}/api/data/proxy?url=${encodeURIComponent(s)}`;
|
|
52
|
+
if (s && !/^[a-z][a-z0-9+.-]*:/i.test(s) && !s.startsWith("//") && !s.includes("\\")) return s;
|
|
53
|
+
return "";
|
|
54
|
+
}
|
|
55
|
+
var n = (v) => Math.round(v * 100) / 100;
|
|
56
|
+
var ANIM_CSS = ("<style>@media (prefers-reduced-motion:no-preference){.pw-a{transform-box:fill-box;animation:pw-fade .55s ease-out both}.pw-a-growY{animation-name:pw-growY}.pw-a-growX{animation-name:pw-growX}.pw-a-scale{animation-name:pw-scale}@keyframes pw-fade{from{opacity:0}}@keyframes pw-growY{from{transform:scaleY(0)}}@keyframes pw-growX{from{transform:scaleX(0)}}@keyframes pw-scale{from{trans"+
|
|
57
|
+
"form:scale(0);opacity:0}}}</style>");
|
|
58
|
+
var ANIM_KINDS = /* @__PURE__ */ new Set(["growY", "growX", "scale", "fade"]);
|
|
59
|
+
var ANIM_ORIGIN = { bottom: "center bottom", top: "center top", left: "left center", right: "right center" };
|
|
60
|
+
function pageToSvg(page, w, h, { background = true, animate = false, box = void 0, outline = null, proxyBase = "" } = {}) {
|
|
61
|
+
const vb = box ? `${n(box.x)} ${n(box.y)} ${n(box.w)} ${n(box.h)}` : `0 0 ${n(w)} ${n(h)}`;
|
|
62
|
+
const out = [`<svg xmlns="http://www.w3.org/2000/svg" viewBox="${vb}" width="${n(w)}" height="${n(h)}" style="font-kerning:none;font-variant-ligatures:none;text-rendering:geometricPrecision">`];
|
|
63
|
+
if (background) out.push(`<rect width="${n(w)}" height="${n(h)}" fill="#ffffff"/>`);
|
|
64
|
+
let animated = false;
|
|
65
|
+
for (const it of page.items.flatMap((i) => i.t === "field" ? i.draw : [i])) {
|
|
66
|
+
const an = animate && it.anim && ANIM_KINDS.has(it.anim.k) ? it.anim : null;
|
|
67
|
+
if (an) {
|
|
68
|
+
if (!animated) {
|
|
69
|
+
out.push(ANIM_CSS);
|
|
70
|
+
animated = true;
|
|
71
|
+
}
|
|
72
|
+
const origin = ANIM_ORIGIN[an.o] || "center";
|
|
73
|
+
out.push(`<g class="pw-a pw-a-${an.k}" style="transform-origin:${origin};animation-delay:${Math.min(40, Math.max(0, Math.round(Number(an.i)) || 0)) * 25}ms">`);
|
|
74
|
+
}
|
|
75
|
+
if (it.rotate) out.push(`<g transform="rotate(${n(it.rotate.a)} ${n(it.rotate.cx)} ${n(it.rotate.cy)})">`);
|
|
76
|
+
switch (it.t) {
|
|
77
|
+
case "rect": {
|
|
78
|
+
const r = it.radius ? ` rx="${n(it.radius)}"` : "";
|
|
79
|
+
const stroke = it.stroke ? ` stroke="${cssColor(it.stroke)}" stroke-width="${n(it.strokeWidth || 1)}"${it.dash ? ` stroke-dasharray="${it.dash.join(" ")}"` : ""}` : "";
|
|
80
|
+
out.push(`<rect x="${n(it.x)}" y="${n(it.y)}" width="${n(it.w)}" height="${n(it.h)}"${r} fill="${cssColor(it.fill)}"${stroke}/>`);
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
case "ellipse": {
|
|
84
|
+
const stroke = it.stroke ? ` stroke="${cssColor(it.stroke)}" stroke-width="${n(it.strokeWidth || 1)}"` : "";
|
|
85
|
+
out.push(`<ellipse cx="${n(it.cx)}" cy="${n(it.cy)}" rx="${n(it.rx)}" ry="${n(it.ry)}" fill="${cssColor(it.fill)}"${stroke}/>`);
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case "line":
|
|
89
|
+
out.push(`<line x1="${n(it.x1)}" y1="${n(it.y1)}" x2="${n(it.x2)}" y2="${n(it.y2)}" stroke="${cssColor(it.stroke)}" stroke-width="${n(it.strokeWidth)}"${it.dash ? ` stroke-dasharray="${it.dash.join(" ")}"` : ""}/>`);
|
|
90
|
+
break;
|
|
91
|
+
case "text": {
|
|
92
|
+
const d = outline ? textOutline(it, outline) : null;
|
|
93
|
+
if (d) {
|
|
94
|
+
out.push(`<path d="${d}" fill="${cssColor(it.color)}"/>`);
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
const paint = `font-size="${n(it.size)}" fill="${cssColor(it.color)}"`;
|
|
98
|
+
const attrs = `${fontAttrs(it.font)} ${paint}`;
|
|
99
|
+
for (const l of it.lines) {
|
|
100
|
+
if (!l.runs) {
|
|
101
|
+
out.push(`<text x="${n(l.x)}" y="${n(l.y)}" ${attrs} xml:space="preserve">${esc(l.text)}</text>`);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
for (const r of l.runs) {
|
|
105
|
+
if (!r.text.trim()) continue;
|
|
106
|
+
const font = `${fontAttrs(r.font)} ${paint}`;
|
|
107
|
+
if (!r.shaped && !r.rtl) {
|
|
108
|
+
out.push(`<text x="${n(l.x + r.x)}" y="${n(l.y)}" ${font}>${esc(r.text)}</text>`);
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
const style = (r.rtl ? "direction:rtl;unicode-bidi:bidi-override;" : "") + (r.shaped ? "font-kerning:normal;font-variant-ligatures:normal" : "");
|
|
112
|
+
out.push(`<text x="${n(l.x + r.x + r.w / 2)}" y="${n(l.y)}" text-anchor="middle" ${font} style="${style}">${esc(r.text)}</text>`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
case "path": {
|
|
118
|
+
const stroke = it.stroke ? ` stroke="${cssColor(it.stroke)}" stroke-width="${n(it.strokeWidth || 1)}" stroke-linecap="${it.lineCap || "round"}" stroke-linejoin="round"${it.dash ? ` stroke-dasharray="${it.dash.join(" ")}"` : ""}` : "";
|
|
119
|
+
out.push(`<path transform="translate(${n(it.x)} ${n(it.y)})" d="${esc(it.d)}" fill="${cssColor(it.fill)}"${stroke}/>`);
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case "link": {
|
|
123
|
+
const tip = it.tip ?? (it.action ? linkTitle(it.action) : "");
|
|
124
|
+
const title = tip ? `<title>${esc(tip)}</title>` : "";
|
|
125
|
+
const tag = it.d ? "path" : "rect";
|
|
126
|
+
const geo = it.d ? `transform="translate(${n(it.x - (it.x0 ?? it.x))} ${n(it.y - (it.y0 ?? it.y))})" d="${esc(it.d)}"` : `x="${n(it.x)}" y="${n(it.y)}" width="${n(it.w)}" height="${n(it.h)}"`;
|
|
127
|
+
if (!it.action) out.push(`<${tag} class="pw-tip" ${geo} fill="transparent">${title}</${tag}>`);
|
|
128
|
+
else out.push(`<${tag} class="pw-link" ${geo} fill="transparent" data-action="${esc(JSON.stringify(it.action))}" style="cursor:pointer">${title}</${tag}>`);
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case "image": {
|
|
132
|
+
if (it.fit === "clip") out.push(`<svg x="${n(it.x)}" y="${n(it.y)}" width="${n(it.cw)}" height="${n(it.ch)}" overflow="hidden"><image x="0" y="0" width="${n(it.w)}" height="${n(it.h)}" href="${esc(imageHref(it.src, proxyBase))}" preserveAspectRatio="none"/></svg>`);
|
|
133
|
+
else {
|
|
134
|
+
const par = it.fit === "fill" ? "none" : it.fit === "cover" ? "xMidYMid slice" : "xMidYMid meet";
|
|
135
|
+
out.push(`<image x="${n(it.x)}" y="${n(it.y)}" width="${n(it.w)}" height="${n(it.h)}" href="${esc(imageHref(it.src, proxyBase))}" preserveAspectRatio="${par}"/>`);
|
|
136
|
+
}
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (it.rotate) out.push("</g>");
|
|
141
|
+
if (an) out.push("</g>");
|
|
142
|
+
}
|
|
143
|
+
out.push("</svg>");
|
|
144
|
+
return out.join("");
|
|
145
|
+
}
|
|
146
|
+
function linkTitle(a) {
|
|
147
|
+
if (a.type === "url") return a.href;
|
|
148
|
+
if (a.type === "drill") return `Open ${a.report}`;
|
|
149
|
+
if (a.type === "toggle") return "Show or hide details";
|
|
150
|
+
if (a.type === "sort") return "Sort";
|
|
151
|
+
if (a.type === "bookmark") return `Go to ${a.target}`;
|
|
152
|
+
if (a.type === "params") return "Filter the report";
|
|
153
|
+
return "";
|
|
154
|
+
}
|
|
155
|
+
function fontFaceCss(keys, base = "/fonts") {
|
|
156
|
+
return keys.filter((k) => !isStandard(k)).map((k) => {
|
|
157
|
+
const file = fontFile(k), range = unicodeRange(k);
|
|
158
|
+
return `@font-face{font-family:"${fontFamilyCss(k)}";src:url("${base}/${file}")${file.endsWith(".ttf") ? ' format("truetype")' : ""};font-display:block${range ? `;unicode-range:${range}` : ""}}`;
|
|
159
|
+
}).join("\n");
|
|
160
|
+
}
|
|
161
|
+
function fontKeysOf(model) {
|
|
162
|
+
const keys = /* @__PURE__ */ new Set();
|
|
163
|
+
for (const pg of model?.pages || []) for (const it of pg.items.flatMap((i) => i.t === "field" ? [i, ...i.draw] : [i])) {
|
|
164
|
+
if (it.font) keys.add(it.font);
|
|
165
|
+
if (it.t === "text") for (const l of it.lines) for (const r of l.runs || []) keys.add(r.font);
|
|
166
|
+
}
|
|
167
|
+
return [...keys];
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// src/exporters/figures.js
|
|
171
|
+
var FIGURE_KINDS = /* @__PURE__ */ new Set(["image", "chart", "map", "barcode", "shape", "line", "sparkline", "databar", "bullet", "iconset", "rangebar"]);
|
|
172
|
+
function figures(items) {
|
|
173
|
+
const shared = items.some((it, i) => i > 0 && it.tag && it.tag === items[i - 1].tag);
|
|
174
|
+
const same = (a, b) => a === b || !!a && !!b && (a.id != null ? a.id === b.id : !shared && a.k === b.k && a.alt === b.alt && a.h === b.h);
|
|
175
|
+
const out = [];
|
|
176
|
+
let cur = null;
|
|
177
|
+
items.forEach((it, i) => {
|
|
178
|
+
const t = it.tag;
|
|
179
|
+
if (!t || !FIGURE_KINDS.has(t.k)) {
|
|
180
|
+
cur = null;
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (cur && same(cur.tag, t) && cur.last === i - 1) {
|
|
184
|
+
cur.items.push(it);
|
|
185
|
+
cur.last = i;
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
cur = { tag: t, items: [it], at: i, last: i };
|
|
189
|
+
out.push(cur);
|
|
190
|
+
});
|
|
191
|
+
for (const f of out) f.box = boxOf(f.items);
|
|
192
|
+
return out.filter((f) => f.box && f.box.w > 0.5 && f.box.h > 0.5);
|
|
193
|
+
}
|
|
194
|
+
function boxOf(items) {
|
|
195
|
+
let x0 = Infinity, y0 = Infinity, x1 = -Infinity, y1 = -Infinity;
|
|
196
|
+
const add = (x, y, rot) => {
|
|
197
|
+
if (rot) {
|
|
198
|
+
const a = rot.a * Math.PI / 180, dx = x - rot.cx, dy = y - rot.cy;
|
|
199
|
+
x = rot.cx + dx * Math.cos(a) - dy * Math.sin(a);
|
|
200
|
+
y = rot.cy + dx * Math.sin(a) + dy * Math.cos(a);
|
|
201
|
+
}
|
|
202
|
+
if (!Number.isFinite(x) || !Number.isFinite(y)) return;
|
|
203
|
+
if (x < x0) x0 = x;
|
|
204
|
+
if (x > x1) x1 = x;
|
|
205
|
+
if (y < y0) y0 = y;
|
|
206
|
+
if (y > y1) y1 = y;
|
|
207
|
+
};
|
|
208
|
+
const rect = (x, y, w, h, r) => {
|
|
209
|
+
add(x, y, r);
|
|
210
|
+
add(x + w, y, r);
|
|
211
|
+
add(x, y + h, r);
|
|
212
|
+
add(x + w, y + h, r);
|
|
213
|
+
};
|
|
214
|
+
for (const it of items) {
|
|
215
|
+
const r = it.rotate;
|
|
216
|
+
const sw = (it.stroke ? Number(it.strokeWidth) || 1 : 0) / 2;
|
|
217
|
+
switch (it.t) {
|
|
218
|
+
case "rect":
|
|
219
|
+
case "image":
|
|
220
|
+
rect(it.x - sw, it.y - sw, (it.cw ?? it.w) + 2 * sw, (it.ch ?? it.h) + 2 * sw, r);
|
|
221
|
+
break;
|
|
222
|
+
case "ellipse":
|
|
223
|
+
rect(it.cx - it.rx - sw, it.cy - it.ry - sw, 2 * (it.rx + sw), 2 * (it.ry + sw), r);
|
|
224
|
+
break;
|
|
225
|
+
case "line":
|
|
226
|
+
rect(Math.min(it.x1, it.x2) - sw, Math.min(it.y1, it.y2) - sw, Math.abs(it.x2 - it.x1) + 2 * sw, Math.abs(it.y2 - it.y1) + 2 * sw, r);
|
|
227
|
+
break;
|
|
228
|
+
case "text":
|
|
229
|
+
for (const l of it.lines) rect(l.x, l.y - it.size, l.w ?? l.text.length * it.size * 0.6, it.size * 1.3, r);
|
|
230
|
+
break;
|
|
231
|
+
case "path": {
|
|
232
|
+
const b = pathBox(it.d);
|
|
233
|
+
if (b) rect(it.x + b.x0 - sw, it.y + b.y0 - sw, b.x1 - b.x0 + 2 * sw, b.y1 - b.y0 + 2 * sw, r);
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return x0 === Infinity ? null : { x: x0, y: y0, w: x1 - x0, h: y1 - y0 };
|
|
239
|
+
}
|
|
240
|
+
function pathBox(d) {
|
|
241
|
+
const toks = String(d).match(/[a-zA-Z]|-?(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?/g) || [];
|
|
242
|
+
let x0 = Infinity, y0 = Infinity, x1 = -Infinity, y1 = -Infinity;
|
|
243
|
+
const add = (x, y) => {
|
|
244
|
+
if (x < x0) x0 = x;
|
|
245
|
+
if (x > x1) x1 = x;
|
|
246
|
+
if (y < y0) y0 = y;
|
|
247
|
+
if (y > y1) y1 = y;
|
|
248
|
+
};
|
|
249
|
+
let cx = 0, cy = 0, sx = 0, sy = 0, cmd = "M", i = 0;
|
|
250
|
+
const num = () => Number(toks[i++]);
|
|
251
|
+
const ARGS = { M: 2, L: 2, H: 1, V: 1, C: 6, S: 4, Q: 4, T: 2, A: 7, Z: 0 };
|
|
252
|
+
let guard = 0;
|
|
253
|
+
while (i < toks.length && guard++ < 1e6) {
|
|
254
|
+
if (/[a-zA-Z]/.test(toks[i])) cmd = toks[i++];
|
|
255
|
+
const C = cmd.toUpperCase(), rel = cmd !== C, n2 = ARGS[C];
|
|
256
|
+
if (n2 === void 0) break;
|
|
257
|
+
if (C === "Z") {
|
|
258
|
+
cx = sx;
|
|
259
|
+
cy = sy;
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
if (i + n2 > toks.length) break;
|
|
263
|
+
const a = Array.from({ length: n2 }, num);
|
|
264
|
+
if (a.some((v) => !Number.isFinite(v))) break;
|
|
265
|
+
const ox = rel ? cx : 0, oy = rel ? cy : 0;
|
|
266
|
+
if (C === "H") {
|
|
267
|
+
cx = a[0] + ox;
|
|
268
|
+
add(cx, cy);
|
|
269
|
+
} else if (C === "V") {
|
|
270
|
+
cy = a[0] + oy;
|
|
271
|
+
add(cx, cy);
|
|
272
|
+
} else if (C === "A") {
|
|
273
|
+
const ex = a[5] + ox, ey = a[6] + oy;
|
|
274
|
+
add(cx, cy);
|
|
275
|
+
add(ex, ey);
|
|
276
|
+
for (const [px, py] of arcExtremes(cx, cy, a[0], a[1], a[2], a[3], a[4], ex, ey)) add(px, py);
|
|
277
|
+
cx = ex;
|
|
278
|
+
cy = ey;
|
|
279
|
+
} else {
|
|
280
|
+
for (let k = 0; k < n2; k += 2) add(a[k] + ox, a[k + 1] + oy);
|
|
281
|
+
cx = a[n2 - 2] + ox;
|
|
282
|
+
cy = a[n2 - 1] + oy;
|
|
283
|
+
if (C === "M") {
|
|
284
|
+
sx = cx;
|
|
285
|
+
sy = cy;
|
|
286
|
+
cmd = rel ? "l" : "L";
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return x0 === Infinity ? null : { x0, y0, x1, y1 };
|
|
291
|
+
}
|
|
292
|
+
function arcExtremes(x1, y1, rx, ry, phi, large, sweep, x2, y2) {
|
|
293
|
+
rx = Math.abs(rx);
|
|
294
|
+
ry = Math.abs(ry);
|
|
295
|
+
if (!rx || !ry || x1 === x2 && y1 === y2) return [];
|
|
296
|
+
const f = phi % 360 * Math.PI / 180, cf = Math.cos(f), sf = Math.sin(f);
|
|
297
|
+
const dx = (x1 - x2) / 2, dy = (y1 - y2) / 2;
|
|
298
|
+
const x1p = cf * dx + sf * dy, y1p = -sf * dx + cf * dy;
|
|
299
|
+
const lam = x1p * x1p / (rx * rx) + y1p * y1p / (ry * ry);
|
|
300
|
+
if (lam > 1) {
|
|
301
|
+
rx *= Math.sqrt(lam);
|
|
302
|
+
ry *= Math.sqrt(lam);
|
|
303
|
+
}
|
|
304
|
+
const num = rx * rx * ry * ry - rx * rx * y1p * y1p - ry * ry * x1p * x1p;
|
|
305
|
+
const k = (large !== sweep ? 1 : -1) * Math.sqrt(Math.max(0, num / (rx * rx * y1p * y1p + ry * ry * x1p * x1p)));
|
|
306
|
+
const cxp = k * rx * y1p / ry, cyp = -k * ry * x1p / rx;
|
|
307
|
+
const cx = cf * cxp - sf * cyp + (x1 + x2) / 2, cy = sf * cxp + cf * cyp + (y1 + y2) / 2;
|
|
308
|
+
if (Math.abs(sf) > 1e-9) {
|
|
309
|
+
const R = Math.max(rx, ry);
|
|
310
|
+
return [[cx - R, cy - R], [cx + R, cy + R]];
|
|
311
|
+
}
|
|
312
|
+
const ang = (ux, uy) => Math.atan2(uy, ux);
|
|
313
|
+
const t1 = ang((x1p - cxp) / rx, (y1p - cyp) / ry);
|
|
314
|
+
let dt = ang((-x1p - cxp) / rx, (-y1p - cyp) / ry) - t1;
|
|
315
|
+
if (sweep && dt < 0) dt += 2 * Math.PI;
|
|
316
|
+
else if (!sweep && dt > 0) dt -= 2 * Math.PI;
|
|
317
|
+
const out = [];
|
|
318
|
+
for (let q = -4; q <= 4; q++) {
|
|
319
|
+
const t = q * Math.PI / 2, rel = dt >= 0 ? t - t1 : t1 - t;
|
|
320
|
+
const nrm = (rel % (2 * Math.PI) + 2 * Math.PI) % (2 * Math.PI);
|
|
321
|
+
if (nrm <= Math.abs(dt) + 1e-9) out.push([cx + rx * Math.cos(t) * cf, cy + ry * Math.sin(t)]);
|
|
322
|
+
}
|
|
323
|
+
return out;
|
|
324
|
+
}
|
|
325
|
+
function textOutline(it, fontOf) {
|
|
326
|
+
let d = "";
|
|
327
|
+
const glyph = (f, g, x, y, size) => {
|
|
328
|
+
const s = size / f.unitsPerEm;
|
|
329
|
+
const p = g.path;
|
|
330
|
+
for (const c of p.commands) {
|
|
331
|
+
const a = [];
|
|
332
|
+
for (let k = 0; k < c.args.length; k += 2) a.push(r2(x + c.args[k] * s), r2(y - c.args[k + 1] * s));
|
|
333
|
+
d += { moveTo: "M", lineTo: "L", quadraticCurveTo: "Q", bezierCurveTo: "C", closePath: "Z" }[c.command] + a.join(" ");
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
for (const l of it.lines) {
|
|
337
|
+
if (!l.runs) {
|
|
338
|
+
const f = fontOf(it.font);
|
|
339
|
+
if (!f || f.standard) return null;
|
|
340
|
+
let x = l.x;
|
|
341
|
+
for (const ch of l.text.replace(/\t/g, " ")) {
|
|
342
|
+
const g = f.glyphForCodePoint(
|
|
343
|
+
/** @type {number} */
|
|
344
|
+
ch.codePointAt(0)
|
|
345
|
+
);
|
|
346
|
+
glyph(f, g, x, l.y, it.size);
|
|
347
|
+
x += g.advanceWidth * it.size / f.unitsPerEm;
|
|
348
|
+
}
|
|
349
|
+
continue;
|
|
350
|
+
}
|
|
351
|
+
for (const r of l.runs) {
|
|
352
|
+
const f = fontOf(r.font);
|
|
353
|
+
if (!f || f.standard) return null;
|
|
354
|
+
const gs = r.glyphs || [];
|
|
355
|
+
for (let k = 0; k < gs.length; k += 4) glyph(f, f.getGlyph(gs[k]), l.x + r.x + gs[k + 1], l.y - gs[k + 2], it.size);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return d;
|
|
359
|
+
}
|
|
360
|
+
var r2 = (v) => Math.round(v * 100) / 100;
|
|
361
|
+
function figureSvg(fig, fontStore) {
|
|
362
|
+
const fontOf = (k) => {
|
|
363
|
+
try {
|
|
364
|
+
return fontStore?.get(k) || null;
|
|
365
|
+
} catch {
|
|
366
|
+
return null;
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
return pageToSvg({ items: fig.items.filter((i) => i.t !== "link" && i.t !== "bookmark") }, fig.box.w, fig.box.h, { background: false, box: fig.box, outline: fontStore ? fontOf : null });
|
|
370
|
+
}
|
|
371
|
+
async function rasterize(svg, w, h, opt = {}) {
|
|
372
|
+
const scale = opt.scale || 2;
|
|
373
|
+
const W = Math.max(1, Math.min(8e3, Math.round(w * scale))), H = Math.max(1, Math.min(8e3, Math.round(h * scale)));
|
|
374
|
+
try {
|
|
375
|
+
if (opt.rasterize) return await opt.rasterize(svg, w, h, scale);
|
|
376
|
+
if (typeof document !== "undefined" && typeof Image !== "undefined") {
|
|
377
|
+
const url = URL.createObjectURL(new Blob([svg], { type: "image/svg+xml" }));
|
|
378
|
+
try {
|
|
379
|
+
const img = new Image();
|
|
380
|
+
img.src = url;
|
|
381
|
+
await img.decode();
|
|
382
|
+
const c = document.createElement("canvas");
|
|
383
|
+
c.width = W;
|
|
384
|
+
c.height = H;
|
|
385
|
+
c.getContext("2d")?.drawImage(img, 0, 0, W, H);
|
|
386
|
+
const blob = await new Promise((res) => c.toBlob(res, "image/png"));
|
|
387
|
+
return blob ? new Uint8Array(await /** @type {Blob} */
|
|
388
|
+
blob.arrayBuffer()) : null;
|
|
389
|
+
} finally {
|
|
390
|
+
URL.revokeObjectURL(url);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
if (
|
|
394
|
+
/** @type {any} */
|
|
395
|
+
globalThis.process?.versions?.node
|
|
396
|
+
) {
|
|
397
|
+
const name = "sharp";
|
|
398
|
+
const sharp = (await import(
|
|
399
|
+
/* @vite-ignore */
|
|
400
|
+
/* webpackIgnore: true */
|
|
401
|
+
/* turbopackIgnore: true */
|
|
402
|
+
name
|
|
403
|
+
)).default;
|
|
404
|
+
return new Uint8Array(await sharp(Buffer.from(svg), { density: 72 * scale }).resize(W, H, { fit: "fill" }).png().toBuffer());
|
|
405
|
+
}
|
|
406
|
+
} catch {
|
|
407
|
+
}
|
|
408
|
+
return null;
|
|
409
|
+
}
|
|
410
|
+
async function figurePicture(fig, opt = {}) {
|
|
411
|
+
const bytesOf = async (src) => {
|
|
412
|
+
try {
|
|
413
|
+
const b = /^data:/i.test(src) ? dataUriBytesOf(src) : opt.fetchImage ? await opt.fetchImage(src) : null;
|
|
414
|
+
const info = b && b.length <= IMAGE_LIMITS.bytes ? imageInfoOf(b) : null;
|
|
415
|
+
return info && ["png", "jpeg", "svg"].includes(info.type) ? { b, info } : null;
|
|
416
|
+
} catch {
|
|
417
|
+
return null;
|
|
418
|
+
}
|
|
419
|
+
};
|
|
420
|
+
const items = [];
|
|
421
|
+
for (const it of fig.items) {
|
|
422
|
+
if (it.t !== "image") {
|
|
423
|
+
items.push(it);
|
|
424
|
+
continue;
|
|
425
|
+
}
|
|
426
|
+
const got = await bytesOf(it.src);
|
|
427
|
+
if (!got) continue;
|
|
428
|
+
const alone = fig.items.every((i) => i === it || i.t === "link" || i.t === "bookmark");
|
|
429
|
+
if (alone && (got.info.type === "png" || got.info.type === "jpeg") && (it.fit === "fill" || (it.fit || "contain") === "contain" && got.info.w > 0)) {
|
|
430
|
+
if (it.fit === "fill") return { [got.info.type]: got.b, w: it.w, h: it.h, x: it.x, y: it.y };
|
|
431
|
+
const s = Math.min(it.w / got.info.w, it.h / got.info.h);
|
|
432
|
+
const w = got.info.w * s, h = got.info.h * s;
|
|
433
|
+
return { [got.info.type]: got.b, w, h, x: it.x + (it.w - w) / 2, y: it.y + (it.h - h) / 2 };
|
|
434
|
+
}
|
|
435
|
+
items.push({ ...it, src: `data:image/${got.info.type === "svg" ? "svg+xml" : got.info.type};base64,${b64(got.b)}` });
|
|
436
|
+
}
|
|
437
|
+
const svg = figureSvg({ items, box: fig.box }, opt.fontStore);
|
|
438
|
+
const png = await rasterize(svg, fig.box.w, fig.box.h, opt);
|
|
439
|
+
return { svg, png, w: fig.box.w, h: fig.box.h, x: fig.box.x, y: fig.box.y };
|
|
440
|
+
}
|
|
441
|
+
function b64(u8) {
|
|
442
|
+
if (typeof Buffer !== "undefined") return Buffer.from(u8).toString("base64");
|
|
443
|
+
let s = "";
|
|
444
|
+
for (let i = 0; i < u8.length; i += 32768) s += String.fromCharCode.apply(
|
|
445
|
+
null,
|
|
446
|
+
/** @type {any} */
|
|
447
|
+
u8.subarray(i, i + 32768)
|
|
448
|
+
);
|
|
449
|
+
return btoa(s);
|
|
450
|
+
}
|
|
451
|
+
var hexOrNull = (c) => {
|
|
452
|
+
const s = String(c || "").trim();
|
|
453
|
+
const m = /^#?([0-9a-f]{6})([0-9a-f]{2})?$/i.exec(s) || /^#?([0-9a-f]{3})$/i.exec(s);
|
|
454
|
+
if (!m || m[2] === "00") return null;
|
|
455
|
+
return (m[1].length === 3 ? [...m[1]].map((x) => x + x).join("") : m[1]).toUpperCase();
|
|
456
|
+
};
|
|
457
|
+
var altOf = (tag) => tag?.alt || { chart: "Chart", image: "Picture", map: "Map", barcode: "Barcode", shape: "Shape", line: "Line", sparkline: "Sparkline", databar: "Data bar", bullet: "Bullet chart", iconset: "Status icon", rangebar: "Range bar" }[tag?.k] || "Graphic";
|
|
458
|
+
function boxDecor(items, i) {
|
|
459
|
+
const it = items[i], c = it.clip;
|
|
460
|
+
if (!c) return null;
|
|
461
|
+
const near = (a, b) => Math.abs(a - b) < 0.05;
|
|
462
|
+
const isBox = (r) => r && r.t === "rect" && !r.tag && near(r.x, c.x) && near(r.y, c.y) && near(r.w, c.w) && near(r.h, c.h);
|
|
463
|
+
let fill = null, radius = 0;
|
|
464
|
+
for (let k = i - 1; k >= Math.max(0, i - 2); k--) if (isBox(items[k]) && items[k].fill) {
|
|
465
|
+
fill = hexOrNull(items[k].fill);
|
|
466
|
+
radius = items[k].radius || 0;
|
|
467
|
+
break;
|
|
468
|
+
}
|
|
469
|
+
const sides = {};
|
|
470
|
+
for (let k = i + 1; k < items.length && k <= i + 6 + 2 * it.lines.length; k++) {
|
|
471
|
+
const o = items[k];
|
|
472
|
+
if (o.tag || o.art !== it.art) break;
|
|
473
|
+
if (o.t === "rect" && isBox(o) && o.stroke) {
|
|
474
|
+
for (const s of ["top", "right", "bottom", "left"]) sides[s] = o;
|
|
475
|
+
radius = o.radius || radius;
|
|
476
|
+
break;
|
|
477
|
+
}
|
|
478
|
+
if (o.t !== "line") break;
|
|
479
|
+
if (near(o.y1, o.y2) && near(o.y1, c.y) && near(Math.min(o.x1, o.x2), c.x)) sides.top = o;
|
|
480
|
+
else if (near(o.y1, o.y2) && near(o.y1, c.y + c.h) && near(Math.min(o.x1, o.x2), c.x)) sides.bottom = o;
|
|
481
|
+
else if (near(o.x1, o.x2) && near(o.x1, c.x) && near(Math.min(o.y1, o.y2), c.y)) sides.left = o;
|
|
482
|
+
else if (near(o.x1, o.x2) && near(o.x1, c.x + c.w) && near(Math.min(o.y1, o.y2), c.y)) sides.right = o;
|
|
483
|
+
}
|
|
484
|
+
return fill || Object.keys(sides).length ? { fill, radius, sides } : null;
|
|
485
|
+
}
|
|
486
|
+
function cellVisuals(items, used, tables) {
|
|
487
|
+
const out = /* @__PURE__ */ new Map();
|
|
488
|
+
if (!tables.size) return out;
|
|
489
|
+
const geo = [...tables.entries()].map(([key, b]) => {
|
|
490
|
+
const rows = /* @__PURE__ */ new Map();
|
|
491
|
+
let left = Infinity;
|
|
492
|
+
for (const it of b.cells) {
|
|
493
|
+
const c = it.clip;
|
|
494
|
+
if (!c) continue;
|
|
495
|
+
if (!rows.has(it.cell.row)) rows.set(it.cell.row, { y: c.y, h: c.h });
|
|
496
|
+
left = Math.min(left, c.x - it.cell.cols.slice(0, it.cell.col).reduce((s, w) => s + w, 0));
|
|
497
|
+
}
|
|
498
|
+
const cols = b.cells[0].cell.cols;
|
|
499
|
+
const edges = [left];
|
|
500
|
+
for (const w of cols) edges.push(edges[edges.length - 1] + w);
|
|
501
|
+
return { key, rows: [...rows.entries()], left, cols, edges, right: edges[edges.length - 1] };
|
|
502
|
+
});
|
|
503
|
+
const near = (a, b) => Math.abs(a - b) < 0.05;
|
|
504
|
+
items.forEach((it, i) => {
|
|
505
|
+
if (used.has(i) || it.tag || it.art || !["path", "ellipse", "rect"].includes(it.t)) return;
|
|
506
|
+
const bx = boxOf([it]);
|
|
507
|
+
if (!bx) return;
|
|
508
|
+
const cx = bx.x + bx.w / 2, cy = bx.y + bx.h / 2;
|
|
509
|
+
for (const g of geo) {
|
|
510
|
+
if (cx < g.left || cx > g.right) continue;
|
|
511
|
+
const row = g.rows.find(([, r3]) => cy >= r3.y && cy <= r3.y + r3.h);
|
|
512
|
+
if (!row) continue;
|
|
513
|
+
const [rid, r] = row;
|
|
514
|
+
if (it.t === "rect" && g.edges.some((e) => near(e, it.x)) && g.edges.some((e) => near(e, it.x + it.w))) return;
|
|
515
|
+
let col = 0, x = g.left;
|
|
516
|
+
while (col < g.cols.length - 1 && cx > x + g.cols[col]) x += g.cols[col++];
|
|
517
|
+
const m = out.get(g.key) || out.set(g.key, /* @__PURE__ */ new Map()).get(g.key);
|
|
518
|
+
const k = `${rid}|${col}`;
|
|
519
|
+
const v = m.get(k) || m.set(k, { items: [], box: null }).get(k);
|
|
520
|
+
v.items.push(it);
|
|
521
|
+
used.add(i);
|
|
522
|
+
return;
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
for (const m of out.values()) for (const v of m.values()) v.box = boxOf(v.items);
|
|
526
|
+
return out;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
export {
|
|
530
|
+
parseColor,
|
|
531
|
+
figures,
|
|
532
|
+
boxOf,
|
|
533
|
+
figureSvg,
|
|
534
|
+
rasterize,
|
|
535
|
+
figurePicture,
|
|
536
|
+
hexOrNull,
|
|
537
|
+
altOf,
|
|
538
|
+
boxDecor,
|
|
539
|
+
cellVisuals,
|
|
540
|
+
fontFamilyCss,
|
|
541
|
+
pageToSvg,
|
|
542
|
+
linkTitle,
|
|
543
|
+
fontFaceCss,
|
|
544
|
+
fontKeysOf
|
|
545
|
+
};
|
|
546
|
+
//# sourceMappingURL=chunk-MXR6JBMP.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/exporters/color.js", "../../../src/exporters/svg.js", "../../../src/exporters/figures.js"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["n", "n", "r"]
|
|
6
|
+
}
|