@reportwright/viewer 0.0.0-stage → 0.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.
Files changed (96) hide show
  1. package/CHANGELOG.md +233 -0
  2. package/LICENSE +23 -0
  3. package/README.md +146 -2
  4. package/dist/chunk-2NAW3MAP.js +1284 -0
  5. package/dist/chunk-2NAW3MAP.js.map +6 -0
  6. package/dist/chunk-3D43XGIN.js +1167 -0
  7. package/dist/chunk-3D43XGIN.js.map +6 -0
  8. package/dist/chunk-5N6OFCHJ.js +1667 -0
  9. package/dist/chunk-5N6OFCHJ.js.map +6 -0
  10. package/dist/chunk-72S6DETS.js +40 -0
  11. package/dist/chunk-72S6DETS.js.map +6 -0
  12. package/dist/chunk-AH47FS6Y.js +13 -0
  13. package/dist/chunk-AH47FS6Y.js.map +6 -0
  14. package/dist/chunk-APRPSQOD.js +301 -0
  15. package/dist/chunk-APRPSQOD.js.map +6 -0
  16. package/dist/chunk-BXKUE45K.js +1284 -0
  17. package/dist/chunk-BXKUE45K.js.map +6 -0
  18. package/dist/chunk-D2NTLAKL.js +14 -0
  19. package/dist/chunk-D2NTLAKL.js.map +6 -0
  20. package/dist/chunk-E7INJHTL.js +1284 -0
  21. package/dist/chunk-E7INJHTL.js.map +6 -0
  22. package/dist/chunk-EOVGKHAS.js +20682 -0
  23. package/dist/chunk-EOVGKHAS.js.map +6 -0
  24. package/dist/chunk-FARG6X2U.js +153 -0
  25. package/dist/chunk-FARG6X2U.js.map +6 -0
  26. package/dist/chunk-FGEFSGJT.js +1284 -0
  27. package/dist/chunk-FGEFSGJT.js.map +6 -0
  28. package/dist/chunk-GJS242RR.js +1652 -0
  29. package/dist/chunk-GJS242RR.js.map +6 -0
  30. package/dist/chunk-J56FRCFU.js +1284 -0
  31. package/dist/chunk-J56FRCFU.js.map +6 -0
  32. package/dist/chunk-KJTRZJHN.js +599 -0
  33. package/dist/chunk-KJTRZJHN.js.map +6 -0
  34. package/dist/chunk-M6GENFAH.js +14806 -0
  35. package/dist/chunk-M6GENFAH.js.map +6 -0
  36. package/dist/chunk-NJWQT6VB.js +1284 -0
  37. package/dist/chunk-NJWQT6VB.js.map +6 -0
  38. package/dist/chunk-ODREGGKA.js +219 -0
  39. package/dist/chunk-ODREGGKA.js.map +6 -0
  40. package/dist/chunk-OLLMACWA.js +35 -0
  41. package/dist/chunk-OLLMACWA.js.map +6 -0
  42. package/dist/chunk-PXXMOP4N.js +1284 -0
  43. package/dist/chunk-PXXMOP4N.js.map +6 -0
  44. package/dist/chunk-RKGIVPK5.js +1284 -0
  45. package/dist/chunk-RKGIVPK5.js.map +6 -0
  46. package/dist/chunk-RYHJUQSV.js +98 -0
  47. package/dist/chunk-RYHJUQSV.js.map +6 -0
  48. package/dist/chunk-SBD55ZES.js +316 -0
  49. package/dist/chunk-SBD55ZES.js.map +6 -0
  50. package/dist/chunk-SR2TQ2ZK.js +70 -0
  51. package/dist/chunk-SR2TQ2ZK.js.map +6 -0
  52. package/dist/designer.d.ts +48 -0
  53. package/dist/designer.js +35865 -0
  54. package/dist/designer.js.map +6 -0
  55. package/dist/peer/chunk-2NJMXASD.js +1282 -0
  56. package/dist/peer/chunk-2NJMXASD.js.map +6 -0
  57. package/dist/peer/chunk-76ZABVTI.js +598 -0
  58. package/dist/peer/chunk-76ZABVTI.js.map +6 -0
  59. package/dist/peer/chunk-BPF3SLL4.js +1282 -0
  60. package/dist/peer/chunk-BPF3SLL4.js.map +6 -0
  61. package/dist/peer/chunk-BWVDLOVL.js +1282 -0
  62. package/dist/peer/chunk-BWVDLOVL.js.map +6 -0
  63. package/dist/peer/chunk-CXM3YSWF.js +1282 -0
  64. package/dist/peer/chunk-CXM3YSWF.js.map +6 -0
  65. package/dist/peer/chunk-DQFZ6LVB.js +1282 -0
  66. package/dist/peer/chunk-DQFZ6LVB.js.map +6 -0
  67. package/dist/peer/chunk-GBITRNHE.js +14806 -0
  68. package/dist/peer/chunk-GBITRNHE.js.map +6 -0
  69. package/dist/peer/chunk-IMQRHDR4.js +12 -0
  70. package/dist/peer/chunk-IMQRHDR4.js.map +6 -0
  71. package/dist/peer/chunk-IPU2YRL2.js +300 -0
  72. package/dist/peer/chunk-IPU2YRL2.js.map +6 -0
  73. package/dist/peer/chunk-KBT6ZGGO.js +1666 -0
  74. package/dist/peer/chunk-KBT6ZGGO.js.map +6 -0
  75. package/dist/peer/chunk-M4AGFUWE.js +97 -0
  76. package/dist/peer/chunk-M4AGFUWE.js.map +6 -0
  77. package/dist/peer/chunk-MCJPN2KL.js +152 -0
  78. package/dist/peer/chunk-MCJPN2KL.js.map +6 -0
  79. package/dist/peer/chunk-NPYKZINU.js +6040 -0
  80. package/dist/peer/chunk-NPYKZINU.js.map +6 -0
  81. package/dist/peer/chunk-PG2PNYDX.js +1282 -0
  82. package/dist/peer/chunk-PG2PNYDX.js.map +6 -0
  83. package/dist/peer/chunk-QRAJXW2D.js +1282 -0
  84. package/dist/peer/chunk-QRAJXW2D.js.map +6 -0
  85. package/dist/peer/chunk-SHVCNAUG.js +1282 -0
  86. package/dist/peer/chunk-SHVCNAUG.js.map +6 -0
  87. package/dist/peer/chunk-Y5CAHLXS.js +218 -0
  88. package/dist/peer/chunk-Y5CAHLXS.js.map +6 -0
  89. package/dist/peer/designer.js +35841 -0
  90. package/dist/peer/designer.js.map +6 -0
  91. package/dist/peer/viewer.js +1061 -0
  92. package/dist/peer/viewer.js.map +6 -0
  93. package/dist/viewer.d.ts +77 -0
  94. package/dist/viewer.js +1066 -0
  95. package/dist/viewer.js.map +6 -0
  96. package/package.json +76 -4
@@ -0,0 +1,12 @@
1
+ import {
2
+ alignOf,
3
+ exportDocx
4
+ } from "../chunk-SBD55ZES.js";
5
+ import "../chunk-D2NTLAKL.js";
6
+ import "../chunk-SR2TQ2ZK.js";
7
+ import "../chunk-3D43XGIN.js";
8
+ export {
9
+ alignOf,
10
+ exportDocx
11
+ };
12
+ //# sourceMappingURL=chunk-IMQRHDR4.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "mappings": "",
5
+ "names": []
6
+ }
@@ -0,0 +1,300 @@
1
+ import {
2
+ formatValue,
3
+ isoDate
4
+ } from "../chunk-GJS242RR.js";
5
+ import {
6
+ drillUrl,
7
+ safeUrl
8
+ } from "../chunk-72S6DETS.js";
9
+ import {
10
+ withDeadline
11
+ } from "../chunk-D2NTLAKL.js";
12
+ import {
13
+ mergedRegions,
14
+ needsTableData
15
+ } from "../chunk-SR2TQ2ZK.js";
16
+ import {
17
+ fontFamilyCss,
18
+ pageToSvg
19
+ } from "../chunk-3D43XGIN.js";
20
+
21
+ // src/exporters/htmldata.js
22
+ var MAX_DATA_ROWS = 2e4;
23
+ var DATA_STRINGS = { pages: "Pages", tables: "Tables", all: "All", filter: "Filter", toggle: "Show or hide the rows of this group", sortAsc: "Sort ascending", sortDesc: "Sort descending" };
24
+ function tablesData(model, o = {}) {
25
+ const regions = mergedRegions(model);
26
+ if (!regions.length || regions.reduce((n, r) => n + r.rows.length, 0) > MAX_DATA_ROWS) return null;
27
+ const sortable = /* @__PURE__ */ new Map();
28
+ for (const pg of model.pages) {
29
+ const heads = pg.items.filter((i) => i.t === "text" && i.cell?.kind === "header" && i.clip);
30
+ for (const l of pg.items) {
31
+ if (l.t !== "link" || l.action?.type !== "sort") continue;
32
+ const h = heads.find((t) => t.cell.table === l.action.table && Math.abs(t.clip.x - l.x) < 1);
33
+ if (h) (sortable.get(h.cell.table) || sortable.set(h.cell.table, /* @__PURE__ */ new Set()).get(h.cell.table)).add(h.cell.col);
34
+ }
35
+ }
36
+ const show = (c) => c.value instanceof Date ? isoDate(c.value, model.timeZone || void 0) : typeof c.value === "boolean" ? String(c.value) : formatValue(c.value, c.format, { locale: o.locale, currency: o.currency });
37
+ return regions.map((r) => ({
38
+ name: String(r.name || "Table"),
39
+ cols: r.columns.length,
40
+ sort: [...sortable.get(r.name) || []],
41
+ rows: r.rows.map((row) => ({
42
+ k: row.kind,
43
+ l: row.level || 0,
44
+ c: row.cells.filter((c) => c.colIndex >= 0).map((c) => [c.colIndex, String(show(c) ?? ""), c.value instanceof Date ? c.value.getTime() : typeof c.value === "number" ? c.value : String(c.value ?? "").toLowerCase(), c.span || 1])
45
+ }))
46
+ }));
47
+ }
48
+ var DATA_SCRIPT = `(() => {
49
+ const d = JSON.parse(document.getElementById('pw-data').textContent), S = d.strings;
50
+ const bar = document.getElementById('pw-bar'), box = document.getElementById('pw-tables');
51
+ const el = (tag, cls, text) => { const e = document.createElement(tag); if (cls) e.className = cls; if (text != null) e.textContent = text; return e; };
52
+ bar.hidden = false;
53
+ bar.addEventListener('click', (e) => {
54
+ const b = e.target.closest('button[data-view]');
55
+ if (!b) return;
56
+ const tables = b.dataset.view === 'tables';
57
+ document.body.classList.toggle('pw-show-tables', tables);
58
+ box.hidden = !tables;
59
+ for (const x of bar.querySelectorAll('button')) x.setAttribute('aria-pressed', String(x === b));
60
+ if (tables && !box.firstChild) for (const t of d.tables) box.appendChild(view(t));
61
+ });
62
+ function view(t) {
63
+ const sec = el('section', 'pw-t');
64
+ sec.appendChild(el('h2', null, t.name));
65
+ const heads = t.rows.filter(r => r.k === 'header');
66
+ const body = t.rows.filter(r => r.k !== 'header');
67
+ const label = (c) => { for (const h of heads) for (const x of h.c) if (x[0] === c) return x[1]; return String(c + 1); };
68
+ // filters: text columns of detail rows with a few distinct values
69
+ const active = new Map();
70
+ const bar2 = el('div', 'pw-f');
71
+ for (let c = 0; c < t.cols; c++) {
72
+ const vals = new Set(); let text = true;
73
+ for (const r of body) if (r.k === 'detail') for (const x of r.c) if (x[0] === c && x[1] !== '') { vals.add(x[1]); if (typeof x[2] === 'number') text = false; }
74
+ if (!text || vals.size < 2 || vals.size > 30) continue;
75
+ const lab = el('label', null, label(c) + ' ');
76
+ const s = el('select');
77
+ s.appendChild(new Option(S.all, ''));
78
+ for (const v of [...vals].sort()) s.appendChild(new Option(v, v));
79
+ s.addEventListener('change', () => { if (s.value) active.set(c, s.value); else active.delete(c); draw(); });
80
+ lab.appendChild(s);
81
+ bar2.appendChild(lab);
82
+ }
83
+ if (bar2.firstChild) { bar2.prepend(el('span', 'pw-fl', S.filter)); sec.appendChild(bar2); }
84
+ const table = el('table'), thead = el('thead'), tbody = el('tbody');
85
+ let order = null; // { c, dir }
86
+ const closed = new Set();
87
+ for (const h of heads) {
88
+ const tr = el('tr');
89
+ for (const x of h.c) {
90
+ const th = el('th');
91
+ th.scope = 'col';
92
+ if (x[3] > 1) th.colSpan = x[3];
93
+ if (t.sort.includes(x[0])) {
94
+ const b = el('button', 'pw-s', x[1]);
95
+ b.type = 'button';
96
+ b.title = S.sortAsc;
97
+ b.addEventListener('click', () => {
98
+ order = order && order.c === x[0] && order.dir === 1 ? { c: x[0], dir: -1 } : { c: x[0], dir: 1 };
99
+ for (const o of thead.querySelectorAll('th')) o.removeAttribute('aria-sort');
100
+ th.setAttribute('aria-sort', order.dir === 1 ? 'ascending' : 'descending');
101
+ b.title = order.dir === 1 ? S.sortDesc : S.sortAsc;
102
+ draw();
103
+ });
104
+ th.appendChild(b);
105
+ } else th.textContent = x[1];
106
+ tr.appendChild(th);
107
+ }
108
+ thead.appendChild(tr);
109
+ }
110
+ table.append(thead, tbody);
111
+ sec.appendChild(table);
112
+ const key = (r) => { const x = r.c.find(y => y[0] === order.c); return x ? x[2] : ''; };
113
+ const cmp = (a, b) => { const p = key(a), q = key(b); return (typeof p === typeof q ? (p < q ? -1 : p > q ? 1 : 0) : typeof p === 'number' ? -1 : 1) * order.dir; };
114
+ function draw() {
115
+ // detail rows sorted within each run between group rows; groups keep their place
116
+ let rows = body;
117
+ if (order) {
118
+ rows = [];
119
+ for (let i = 0; i < body.length;) {
120
+ if (body[i].k !== 'detail') { rows.push(body[i++]); continue; }
121
+ const run = [];
122
+ while (i < body.length && body[i].k === 'detail') run.push(body[i++]);
123
+ for (const x of run.sort(cmp)) rows.push(x);
124
+ }
125
+ }
126
+ const keep = (r) => { for (const [c, v] of active) { const x = r.c.find(y => y[0] === c); if (!x || x[1] !== v) return false; } return true; };
127
+ tbody.textContent = '';
128
+ let hideFrom = -1; // the level of a closed group whose rows are hidden
129
+ rows.forEach((r) => {
130
+ if (hideFrom >= 0 && (r.k === 'header' || r.k === 'footer' || (r.k === 'groupHeader' && r.l <= hideFrom) || (r.k === 'groupFooter' && r.l <= hideFrom))) hideFrom = -1;
131
+ if (hideFrom >= 0) return;
132
+ if (r.k === 'detail' && !keep(r)) return;
133
+ const tr = el('tr', 'pw-' + r.k);
134
+ let c0 = true;
135
+ for (const x of r.c) {
136
+ const td = el('td', typeof x[2] === 'number' ? 'pw-n' : null);
137
+ if (x[3] > 1) td.colSpan = x[3];
138
+ if (c0 && r.k === 'groupHeader') {
139
+ const b = el('button', 'pw-g', closed.has(r) ? '▶' : '▼');
140
+ b.type = 'button';
141
+ b.title = S.toggle;
142
+ b.setAttribute('aria-expanded', String(!closed.has(r)));
143
+ b.addEventListener('click', () => { if (closed.has(r)) closed.delete(r); else closed.add(r); draw(); });
144
+ td.append(b, ' ');
145
+ }
146
+ td.append(x[1]);
147
+ tr.appendChild(td);
148
+ c0 = false;
149
+ }
150
+ tbody.appendChild(tr);
151
+ if (r.k === 'groupHeader' && closed.has(r)) hideFrom = r.l;
152
+ });
153
+ }
154
+ draw();
155
+ return sec;
156
+ }
157
+ })();`;
158
+ var DATA_CSS = `.pw-bar{position:sticky;top:0;z-index:2;display:flex;gap:4px;padding:4px;background:#fff;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.15)}
159
+ .pw-bar button{font:inherit;border:1px solid #c9d1d9;background:#fff;border-radius:6px;padding:4px 12px;cursor:pointer}.pw-bar button[aria-pressed=true]{background:#1f2937;color:#fff;border-color:#1f2937}
160
+ body.pw-show-tables .page{display:none}#pw-tables{width:100%;max-width:none;display:flex;flex-direction:column;gap:24px}
161
+ .pw-t{background:#fff;padding:16px;border-radius:8px;overflow-x:auto}.pw-t h2{font-size:16px;margin:0 0 8px}
162
+ .pw-t table{border-collapse:collapse;width:100%;font-size:13px}.pw-t th,.pw-t td{border-bottom:1px solid #e5e7eb;padding:4px 8px;text-align:left}.pw-t td.pw-n{text-align:right;font-variant-numeric:tabular-nums}
163
+ .pw-t th{background:#f1f5f9}.pw-t .pw-groupHeader td,.pw-t .pw-groupFooter td,.pw-t .pw-footer td{font-weight:600}
164
+ .pw-s,.pw-g{font:inherit;border:0;background:none;padding:0;cursor:pointer;color:inherit}.pw-s:after{content:" ⇅";opacity:.5}
165
+ .pw-f{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-bottom:8px;font-size:13px}.pw-fl{font-weight:600}
166
+ @media print{.pw-bar,#pw-tables{display:none}}`;
167
+ async function cspHash(text) {
168
+ const d = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(text));
169
+ const u8 = new Uint8Array(d);
170
+ let s = "";
171
+ for (const b of u8) s += String.fromCharCode(b);
172
+ return btoa(s);
173
+ }
174
+
175
+ // src/exporters/html.js
176
+ function exportHtml(model, fontStore, opt = {}) {
177
+ return withDeadline(
178
+ htmlOf(model, fontStore, opt),
179
+ /** @type {any} */
180
+ opt.timeoutMs
181
+ );
182
+ }
183
+ async function htmlOf(model, fontStore, opt) {
184
+ const used = /* @__PURE__ */ new Map();
185
+ const layout = /* @__PURE__ */ new Set();
186
+ const add = (key, text) => {
187
+ let s = used.get(key);
188
+ if (!s) {
189
+ s = /* @__PURE__ */ new Set([32]);
190
+ used.set(key, s);
191
+ }
192
+ for (const ch of text) s.add(
193
+ /** @type {number} */
194
+ ch.codePointAt(0)
195
+ );
196
+ };
197
+ for (const pg of model.pages) for (const it of pg.items.flatMap((i) => i.t === "field" ? i.draw : [i])) if (it.t === "text") {
198
+ for (const l of it.lines) {
199
+ if (!l.runs) {
200
+ add(it.font, l.text);
201
+ continue;
202
+ }
203
+ for (const r of l.runs) {
204
+ add(r.font, r.text);
205
+ if (r.shaped || r.rtl) layout.add(r.font);
206
+ }
207
+ }
208
+ }
209
+ const faces = [];
210
+ for (const [key, cps] of used) {
211
+ let bytes = fontStore.bytes.get(key);
212
+ if (!bytes) continue;
213
+ if (opt.subset) {
214
+ try {
215
+ bytes = await opt.subset(bytes, cps, layout.has(key) ? { layout: true } : void 0);
216
+ } catch {
217
+ }
218
+ }
219
+ faces.push(`@font-face{font-family:"${fontFamilyCss(key)}";src:url(data:font/ttf;base64,${b64(bytes)}) format("truetype")}`);
220
+ }
221
+ const esc = (s) => String(s).replace(/&/g, "&amp;").replace(/</g, "&lt;");
222
+ const anchors = /* @__PURE__ */ new Map();
223
+ const jumpTo = (a) => {
224
+ const to = a.page ? a : model.bookmarks?.find((b) => b.label === a.target) || model.headings?.find((b) => b.label === a.target);
225
+ if (!to?.page) return null;
226
+ const y = Math.max(0, Math.round(to.y || 0));
227
+ const key = `${to.page}:${y}`;
228
+ if (!anchors.has(key)) anchors.set(key, { id: `at-${to.page}-${y}`, page: to.page, y });
229
+ return `#${anchors.get(key).id}`;
230
+ };
231
+ const drillHref = (a) => drillUrl(opt.drillBase, a);
232
+ const target = (a) => {
233
+ if (a?.type === "url") {
234
+ const h = safeUrl(a.href);
235
+ return h ? { href: h, external: true } : null;
236
+ }
237
+ if (a?.type === "bookmark") {
238
+ const h = jumpTo(a);
239
+ return h ? { href: h } : null;
240
+ }
241
+ if (a?.type === "drill") {
242
+ const h = drillHref(a);
243
+ return h ? { href: h, external: true } : { off: `Opens the report "${a.report}" in the ReportWright viewer` };
244
+ }
245
+ return null;
246
+ };
247
+ const svgs = model.pages.map((p) => pageToSvg({ items: p.items.filter((it) => it.t !== "link" || target(it.action)) }, p.width ?? model.width, p.height ?? model.height, { proxyBase: opt.drillBase || "" }).replace(/<rect class="pw-link"([^>]*?)data-action="([^"]*)"[^>]*>(<title>[^<]*<\/title>)?<\/rect>/g, (m, a, act, ttl = "") => {
248
+ let t = null;
249
+ try {
250
+ t = target(JSON.parse(act.replace(/&quot;/g, '"').replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&#39;/g, "'").replace(/&amp;/g, "&")));
251
+ } catch {
252
+ }
253
+ if (t && "href" in t) return `<a href="${attr(t.href)}"${t.external ? ' target="_blank" rel="noopener"' : ""}><rect${a}/>${ttl}</a>`;
254
+ if (t && "off" in t) return `<g class="pw-off"><rect${a}/><title>${esc(t.off)}</title></g>`;
255
+ return `<rect${a}/>`;
256
+ }));
257
+ const pages = model.pages.map((p, i) => {
258
+ const H = p.height ?? model.height;
259
+ const marks = [...anchors.values()].filter((x) => x.page === i + 1).map((x) => `<a class="pw-at" id="${x.id}" style="top:${(Math.min(x.y, H) / H * 100).toFixed(3)}%"></a>`).join("");
260
+ return `<section class="page${p.width ? " wide" : ""}" id="page-${i + 1}"${p.width ? ` style="width:min(100%,${Math.round(p.width * 96 / 72)}px)"` : ""}>${marks}${svgs[i]}</section>`;
261
+ }).join("\n");
262
+ if (!opt.static) needsTableData(model, "Interactive HTML (or pass static: true)");
263
+ const data = opt.static ? null : tablesData(model, { locale: opt.locale, currency: opt.currency });
264
+ const S = { ...DATA_STRINGS, ...opt.strings || {} };
265
+ const csp = data ? `<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'sha256-${await cspHash(DATA_SCRIPT)}'; style-src 'unsafe-inline'; font-src data:; img-src data: https: http:; base-uri 'none'; form-action 'none'">
266
+ ` : "";
267
+ const lang = opt.lang && /^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$/.test(opt.lang) ? opt.lang : "en";
268
+ return `<!doctype html>
269
+ <html lang="${data ? lang : "en"}"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
270
+ ${csp}<title>${esc(opt.title || model.name || "Report")}</title>
271
+ <style>
272
+ ${faces.join("\n")}
273
+ html{background:#e6eaee}body{margin:0;padding:24px 12px;display:flex;flex-direction:column;align-items:center;gap:18px;font-family:system-ui,sans-serif}
274
+ .page{position:relative;width:min(100%,${Math.round(model.width * 96 / 72)}px);background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.08),0 6px 20px rgba(0,0,0,.08)}
275
+ .pw-at{position:absolute;left:0;width:1px;height:1px;scroll-margin-top:12px}.pw-off{cursor:not-allowed}
276
+ .page svg{display:block;width:100%;height:auto}
277
+ @media print{html{background:#fff}body{padding:0;gap:0}.page{box-shadow:none;width:100%;break-after:page}@page{size:${model.width}pt ${model.height}pt;margin:0}}
278
+ ${data ? DATA_CSS + "\n" : ""}</style></head><body>
279
+ ${data ? `<nav class="pw-bar" id="pw-bar" hidden><button type="button" data-view="pages" aria-pressed="true">${esc(S.pages)}</button><button type="button" data-view="tables" aria-pressed="false">${esc(S.tables)}</button></nav>
280
+ ` : ""}${pages}
281
+ ${data ? `<div id="pw-tables" hidden></div>
282
+ <script type="application/json" id="pw-data">${JSON.stringify({ tables: data, strings: S }).replace(/</g, "\\u003c")}<\/script>
283
+ <script>${DATA_SCRIPT}<\/script>
284
+ ` : ""}</body></html>`;
285
+ }
286
+ var attr = (s) => String(s).replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/'/g, "&#39;");
287
+ function b64(u8) {
288
+ if (typeof Buffer !== "undefined") return Buffer.from(u8).toString("base64");
289
+ let s = "";
290
+ for (let i = 0; i < u8.length; i += 32768) s += String.fromCharCode.apply(
291
+ null,
292
+ /** @type {any} */
293
+ u8.subarray(i, i + 32768)
294
+ );
295
+ return btoa(s);
296
+ }
297
+ export {
298
+ exportHtml
299
+ };
300
+ //# sourceMappingURL=chunk-IPU2YRL2.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/exporters/htmldata.js", "../../../src/exporters/html.js"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }