@agile-team/mach-report 2.2.0 → 2.3.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.
Files changed (43) hide show
  1. package/README.md +54 -10
  2. package/dist/ReportPreview-B-mwUSk9.cjs +6 -0
  3. package/dist/ReportPreview-DKjr4cwO.js +1688 -0
  4. package/dist/defaults-D4o0NCLo.js +9 -0
  5. package/dist/defaults-DOO1yHwx.cjs +1 -0
  6. package/dist/grid-geometry-Dw7BlENr.js +130 -0
  7. package/dist/grid-geometry-bkciiZ4Q.cjs +1 -0
  8. package/dist/index.cjs +6 -6
  9. package/dist/index.d.cts +37 -5
  10. package/dist/index.d.ts +37 -5
  11. package/dist/index.js +1163 -1037
  12. package/dist/pdf.cjs +48 -48
  13. package/dist/pdf.d.cts +18 -0
  14. package/dist/pdf.d.ts +18 -0
  15. package/dist/pdf.js +5605 -5575
  16. package/dist/{plugin-BMoMUxrw.cjs → plugin-2lqgTX26.cjs} +1 -1
  17. package/dist/{plugin-CAcNe0FT.js → plugin-5R00MJQs.js} +1 -1
  18. package/dist/render-plan-CfJ3wf1l.cjs +1 -0
  19. package/dist/render-plan-I9AHvQv7.js +13 -0
  20. package/dist/sql.cjs +42 -42
  21. package/dist/sql.js +1366 -1363
  22. package/dist/style.css +1 -1
  23. package/dist/textwrap-nH0UYU6D.js +108 -0
  24. package/dist/textwrap-oD-t4b4B.cjs +4 -0
  25. package/dist/vue/async.d.cts +33 -7
  26. package/dist/vue/async.d.ts +33 -7
  27. package/dist/vue/index.d.cts +36 -10
  28. package/dist/vue/index.d.ts +36 -10
  29. package/dist/vue-async.cjs +1 -1
  30. package/dist/vue-async.js +3 -3
  31. package/dist/vue.cjs +1 -1
  32. package/dist/vue.js +4 -4
  33. package/dist/xlsx.cjs +24 -24
  34. package/dist/xlsx.d.cts +24 -4
  35. package/dist/xlsx.d.ts +24 -4
  36. package/dist/xlsx.js +8287 -8166
  37. package/package.json +1 -1
  38. package/dist/ReportPreview-BWrQCj9M.js +0 -1643
  39. package/dist/ReportPreview-DY0PGGqF.cjs +0 -6
  40. package/dist/grid-geometry-DBH9ExuY.cjs +0 -1
  41. package/dist/grid-geometry-DONcjshk.js +0 -130
  42. package/dist/textwrap-DdaewxAd.js +0 -117
  43. package/dist/textwrap-DqiFwAV3.cjs +0 -3
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .mrp-toolbar[data-v-601f8fa8]{display:flex;align-items:center;gap:8px;padding:6px 12px;background:var(--mrp-toolbar-bg, #323639);border-bottom:1px solid var(--mrp-toolbar-border, #22252a);flex:none;flex-wrap:wrap}.mrp-title[data-v-601f8fa8]{font-size:13px;font-weight:600;margin-right:8px;color:var(--mrp-toolbar-fg, #e8e8e8)}.mrp-nav[data-v-601f8fa8]{background:transparent;color:var(--mrp-btn-fg, #cfcfcf);border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:2px 8px;font-size:12px;cursor:pointer;white-space:nowrap}.mrp-nav[data-v-601f8fa8]:hover:not(:disabled){background:var(--mrp-btn-hover-bg, #414549);color:var(--mrp-btn-hover-fg, #fff)}.mrp-nav[data-v-601f8fa8]:disabled{opacity:.4;cursor:not-allowed}.mrp-active[data-v-601f8fa8]{background:var(--mrp-btn-active-bg, #2d5fb8);border-color:var(--mrp-btn-active-bg, #2d5fb8);color:#fff}.mrp-pageinfo[data-v-601f8fa8]{font-size:12px;min-width:56px;text-align:center;color:var(--mrp-toolbar-fg, #e8e8e8)}.mrp-spacer[data-v-601f8fa8]{flex:1}.mrp-search[data-v-601f8fa8]{display:flex;align-items:center;gap:4px}.mrp-search-input[data-v-601f8fa8]{background:#22252a;color:#e8e8e8;border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:2px 8px;font-size:12px;width:150px;outline:none}.mrp-search-input[data-v-601f8fa8]:focus{border-color:var(--mrp-btn-active-bg, #2d5fb8)}.mrp-search-count[data-v-601f8fa8]{font-size:12px;color:var(--mrp-toolbar-fg, #e8e8e8);min-width:42px;text-align:center}.mrp-params[data-v-aafce92d]{display:flex;align-items:flex-end;gap:12px;padding:6px 12px;background:var(--mrp-toolbar-bg, #323639);border-bottom:1px solid var(--mrp-toolbar-border, #22252a);flex:none;flex-wrap:wrap}.mrp-params-title[data-v-aafce92d]{font-size:12px;font-weight:600;color:var(--mrp-toolbar-fg, #e8e8e8);padding-bottom:5px;white-space:nowrap}.mrp-params-grid[data-v-aafce92d]{display:flex;flex-wrap:wrap;gap:8px 12px;flex:1}.mrp-param[data-v-aafce92d]{display:flex;flex-direction:column;gap:2px}.mrp-param-label[data-v-aafce92d]{font-size:11px;color:var(--mrp-toolbar-fg, #e8e8e8);opacity:.85}.mrp-param-star[data-v-aafce92d]{color:#ff7b72;font-style:normal;margin-left:2px}.mrp-param-input[data-v-aafce92d]{background:#22252a;color:#e8e8e8;border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:3px 8px;font-size:12px;min-width:130px;outline:none}.mrp-param-input[data-v-aafce92d]:focus{border-color:var(--mrp-btn-active-bg, #2d5fb8)}.mrp-param-missing .mrp-param-input[data-v-aafce92d]{border-color:#ff7b72}select.mrp-param-input option[data-v-aafce92d]{background:#22252a}.mrp-params-actions[data-v-aafce92d]{display:flex;gap:6px;padding-bottom:1px}.mrp-nav[data-v-aafce92d]{background:transparent;color:var(--mrp-btn-fg, #cfcfcf);border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:4px 14px;font-size:12px;cursor:pointer;white-space:nowrap}.mrp-nav[data-v-aafce92d]:hover{background:var(--mrp-btn-hover-bg, #414549);color:var(--mrp-btn-hover-fg, #fff)}.mrp-param-query[data-v-aafce92d]{background:var(--mrp-btn-active-bg, #2d5fb8);border-color:var(--mrp-btn-active-bg, #2d5fb8);color:#fff}.mach-report-preview[data-v-294f34ce]{--mrp-shell-bg: #525659;--mrp-shell-fg: #e8e8e8;--mrp-toolbar-bg: #323639;--mrp-toolbar-border: #22252a;--mrp-toolbar-fg: #e8e8e8;--mrp-btn-fg: #cfcfcf;--mrp-btn-border: #4a4d52;--mrp-btn-hover-bg: #414549;--mrp-btn-hover-fg: #ffffff;--mrp-btn-active-bg: #2d5fb8;position:relative;display:flex;flex-direction:column;background:var(--mrp-shell-bg);color:var(--mrp-shell-fg);overflow:hidden}.mrp-main[data-v-294f34ce]{display:flex;flex:1;min-height:0}.mrp-body[data-v-294f34ce]{flex:1;overflow:auto;padding:24px;outline:none}.mrp-scale[data-v-294f34ce]{margin:0 auto}.mrp-scale-inner[data-v-294f34ce]{display:flex;flex-direction:column;align-items:center}.mrp-page-holder[data-v-294f34ce]{background:#fff;box-shadow:0 2px 8px #00000059;margin-bottom:var(--v4c81cc3e);flex:none}.mrp-state[data-v-294f34ce]{padding:40px;text-align:center;color:#bfbfbf;font-size:13px}.mrp-error[data-v-294f34ce]{color:#ff9d9d}.mrp-export-notice[data-v-294f34ce]{padding:7px 12px;font-size:12px;background:#fff0c2;color:#613c00}.mrp-export-error[data-v-294f34ce]{background:#ffe0df;color:#8e1f1f}.mrp-export-progress[data-v-294f34ce]{background:#e7f0ff;color:#1a4d86}.mrp-retry[data-v-294f34ce]{margin-left:12px;background:transparent;color:#8fb7ff;border:1px solid #5a7fbf;border-radius:4px;padding:1px 10px;cursor:pointer}.mrp-overlay[data-v-294f34ce]{position:absolute;inset:0;pointer-events:none}.mrp-page-holder[data-v-294f34ce] mark.mrp-hit{background:#ffe066;color:#7a5c00;border-radius:2px;padding:0 1px}.mrp-thumbs[data-v-294f34ce]{width:140px;flex:none;overflow-y:auto;border-left:1px solid var(--mrp-toolbar-border);background:var(--mrp-toolbar-bg);padding:8px;display:flex;flex-direction:column}.mrp-thumb[data-v-294f34ce]{cursor:pointer;text-align:center;flex:none;margin-bottom:8px}.mrp-thumb-spacer[data-v-294f34ce]{flex:none}.mrp-thumb-box[data-v-294f34ce]{box-sizing:border-box;width:116px;background:#fff;box-shadow:0 1px 4px #0006;overflow:hidden;border:2px solid transparent}.mrp-thumb-active .mrp-thumb-box[data-v-294f34ce]{border-color:var(--mrp-btn-active-bg)}.mrp-thumb-no[data-v-294f34ce]{display:block;margin-top:4px;line-height:16px;font-size:11px;color:var(--mrp-toolbar-fg)}.mrp-debug[data-v-294f34ce]{position:absolute;right:8px;bottom:8px;background:#000000c7;color:#7ee787;font:11px/1.6 ui-monospace,monospace;padding:6px 10px;border-radius:6px;pointer-events:none;white-space:pre}
1
+ .mrp-toolbar[data-v-601f8fa8]{display:flex;align-items:center;gap:8px;padding:6px 12px;background:var(--mrp-toolbar-bg, #323639);border-bottom:1px solid var(--mrp-toolbar-border, #22252a);flex:none;flex-wrap:wrap}.mrp-title[data-v-601f8fa8]{font-size:13px;font-weight:600;margin-right:8px;color:var(--mrp-toolbar-fg, #e8e8e8)}.mrp-nav[data-v-601f8fa8]{background:transparent;color:var(--mrp-btn-fg, #cfcfcf);border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:2px 8px;font-size:12px;cursor:pointer;white-space:nowrap}.mrp-nav[data-v-601f8fa8]:hover:not(:disabled){background:var(--mrp-btn-hover-bg, #414549);color:var(--mrp-btn-hover-fg, #fff)}.mrp-nav[data-v-601f8fa8]:disabled{opacity:.4;cursor:not-allowed}.mrp-active[data-v-601f8fa8]{background:var(--mrp-btn-active-bg, #2d5fb8);border-color:var(--mrp-btn-active-bg, #2d5fb8);color:#fff}.mrp-pageinfo[data-v-601f8fa8]{font-size:12px;min-width:56px;text-align:center;color:var(--mrp-toolbar-fg, #e8e8e8)}.mrp-spacer[data-v-601f8fa8]{flex:1}.mrp-search[data-v-601f8fa8]{display:flex;align-items:center;gap:4px}.mrp-search-input[data-v-601f8fa8]{background:#22252a;color:#e8e8e8;border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:2px 8px;font-size:12px;width:150px;outline:none}.mrp-search-input[data-v-601f8fa8]:focus{border-color:var(--mrp-btn-active-bg, #2d5fb8)}.mrp-search-count[data-v-601f8fa8]{font-size:12px;color:var(--mrp-toolbar-fg, #e8e8e8);min-width:42px;text-align:center}.mrp-params[data-v-aafce92d]{display:flex;align-items:flex-end;gap:12px;padding:6px 12px;background:var(--mrp-toolbar-bg, #323639);border-bottom:1px solid var(--mrp-toolbar-border, #22252a);flex:none;flex-wrap:wrap}.mrp-params-title[data-v-aafce92d]{font-size:12px;font-weight:600;color:var(--mrp-toolbar-fg, #e8e8e8);padding-bottom:5px;white-space:nowrap}.mrp-params-grid[data-v-aafce92d]{display:flex;flex-wrap:wrap;gap:8px 12px;flex:1}.mrp-param[data-v-aafce92d]{display:flex;flex-direction:column;gap:2px}.mrp-param-label[data-v-aafce92d]{font-size:11px;color:var(--mrp-toolbar-fg, #e8e8e8);opacity:.85}.mrp-param-star[data-v-aafce92d]{color:#ff7b72;font-style:normal;margin-left:2px}.mrp-param-input[data-v-aafce92d]{background:#22252a;color:#e8e8e8;border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:3px 8px;font-size:12px;min-width:130px;outline:none}.mrp-param-input[data-v-aafce92d]:focus{border-color:var(--mrp-btn-active-bg, #2d5fb8)}.mrp-param-missing .mrp-param-input[data-v-aafce92d]{border-color:#ff7b72}select.mrp-param-input option[data-v-aafce92d]{background:#22252a}.mrp-params-actions[data-v-aafce92d]{display:flex;gap:6px;padding-bottom:1px}.mrp-nav[data-v-aafce92d]{background:transparent;color:var(--mrp-btn-fg, #cfcfcf);border:1px solid var(--mrp-btn-border, #4a4d52);border-radius:4px;padding:4px 14px;font-size:12px;cursor:pointer;white-space:nowrap}.mrp-nav[data-v-aafce92d]:hover{background:var(--mrp-btn-hover-bg, #414549);color:var(--mrp-btn-hover-fg, #fff)}.mrp-param-query[data-v-aafce92d]{background:var(--mrp-btn-active-bg, #2d5fb8);border-color:var(--mrp-btn-active-bg, #2d5fb8);color:#fff}.mach-report-preview[data-v-48919dc8]{--mrp-shell-bg: #525659;--mrp-shell-fg: #e8e8e8;--mrp-toolbar-bg: #323639;--mrp-toolbar-border: #22252a;--mrp-toolbar-fg: #e8e8e8;--mrp-btn-fg: #cfcfcf;--mrp-btn-border: #4a4d52;--mrp-btn-hover-bg: #414549;--mrp-btn-hover-fg: #ffffff;--mrp-btn-active-bg: #2d5fb8;position:relative;display:flex;flex-direction:column;background:var(--mrp-shell-bg);color:var(--mrp-shell-fg);overflow:hidden}.mrp-main[data-v-48919dc8]{display:flex;flex:1;min-height:0}.mrp-body[data-v-48919dc8]{flex:1;min-width:0;overflow:auto;padding:24px;outline:none}.mrp-scale[data-v-48919dc8]{position:relative;margin:0 auto}.mrp-scale-inner[data-v-48919dc8]{position:absolute;left:0;top:0;display:flex;flex-direction:column;align-items:center}.mrp-page-holder[data-v-48919dc8]{background:#fff;box-shadow:0 2px 8px #00000059;margin-bottom:var(--v8eb72344);flex:none}.mrp-wide-report .mrp-page-holder[data-v-48919dc8]{box-shadow:none}.mrp-state[data-v-48919dc8]{padding:40px;text-align:center;color:#bfbfbf;font-size:13px}.mrp-error[data-v-48919dc8]{color:#ff9d9d}.mrp-export-notice[data-v-48919dc8]{padding:7px 12px;font-size:12px;background:#fff0c2;color:#613c00}.mrp-export-error[data-v-48919dc8]{background:#ffe0df;color:#8e1f1f}.mrp-export-progress[data-v-48919dc8]{background:#e7f0ff;color:#1a4d86}.mrp-retry[data-v-48919dc8]{margin-left:12px;background:transparent;color:#8fb7ff;border:1px solid #5a7fbf;border-radius:4px;padding:1px 10px;cursor:pointer}.mrp-overlay[data-v-48919dc8]{position:absolute;inset:0;pointer-events:none}.mrp-page-holder[data-v-48919dc8] mark.mrp-hit{background:#ffe066;color:#7a5c00;border-radius:2px;padding:0 1px;scroll-margin:8px}.mrp-thumbs[data-v-48919dc8]{width:140px;flex:none;overflow-y:auto;border-left:1px solid var(--mrp-toolbar-border);background:var(--mrp-toolbar-bg);padding:8px;display:flex;flex-direction:column}.mrp-thumb[data-v-48919dc8]{cursor:pointer;text-align:center;flex:none;margin-bottom:8px}.mrp-thumb-spacer[data-v-48919dc8]{flex:none}.mrp-thumb-box[data-v-48919dc8]{box-sizing:border-box;width:116px;background:#fff;box-shadow:0 1px 4px #0006;overflow:hidden;border:2px solid transparent}.mrp-thumb-active .mrp-thumb-box[data-v-48919dc8]{border-color:var(--mrp-btn-active-bg)}.mrp-thumb-no[data-v-48919dc8]{display:block;margin-top:4px;line-height:16px;font-size:11px;color:var(--mrp-toolbar-fg)}.mrp-debug[data-v-48919dc8]{position:absolute;right:8px;bottom:8px;background:#000000c7;color:#7ee787;font:11px/1.6 ui-monospace,monospace;padding:6px 10px;border-radius:6px;pointer-events:none;white-space:pre}
@@ -0,0 +1,108 @@
1
+ const l = /[\u3000-\u9fff\uff00-\uffef]/, s = new Uint8Array(128);
2
+ {
3
+ for (const t of "iljtf.,:;'`|!()[]") s[t.charCodeAt(0)] = 1;
4
+ for (const t of "mwMW@") s[t.charCodeAt(0)] = 2;
5
+ for (let t = 48; t <= 57; t++) s[t] = 3;
6
+ for (let t = 65; t <= 90; t++) s[t] = 4;
7
+ s[32] = 5;
8
+ }
9
+ const d = [0.54, 0.26, 0.95, 0.59, 0.67, 0.3];
10
+ function M(t) {
11
+ const e = t.charCodeAt(0);
12
+ return e < 128 ? d[s[e]] : l.test(t) ? 1 : /[A-Z]/.test(t) ? 0.67 : 0.54;
13
+ }
14
+ const a = {
15
+ measureMm(t, e) {
16
+ const { fontSizePt: i, bold: f = !1, letterSpacingPt: o = 0 } = e, c = 25.4 / 72;
17
+ let r = 0;
18
+ for (const n of t)
19
+ r += M(n);
20
+ return f && (r *= 1.04), (r * i + o * t.length) * c;
21
+ }
22
+ };
23
+ function p() {
24
+ return a;
25
+ }
26
+ function x(t, e) {
27
+ return a.measureMm(t, e);
28
+ }
29
+ function A(t) {
30
+ let e;
31
+ return {
32
+ measureMm(i, f) {
33
+ if (e === void 0 && (e = t()), !e) return a.measureMm(i, f);
34
+ const o = f.fontSizePt * 96 / 72;
35
+ return e.font = `${f.bold ? "bold " : ""}${o}px sans-serif`, e.measureText(i).width * 25.4 / 96;
36
+ }
37
+ };
38
+ }
39
+ function w(t, e, i) {
40
+ const f = [];
41
+ let o = "", c = 0;
42
+ const r = () => {
43
+ o && (f.push({ text: o, widthMm: c, cjk: !1 }), o = "", c = 0);
44
+ };
45
+ for (const n of t) {
46
+ if (n === `
47
+ `) {
48
+ r(), f.push({ text: `
49
+ `, widthMm: 0, cjk: !1, br: !0 });
50
+ continue;
51
+ }
52
+ if (n === " ") {
53
+ r(), f.push({ text: n, widthMm: i.measureMm(n, e), cjk: !1, space: !0 });
54
+ continue;
55
+ }
56
+ if (l.test(n)) {
57
+ r(), f.push({ text: n, widthMm: i.measureMm(n, e), cjk: !0 });
58
+ continue;
59
+ }
60
+ o += n, c += i.measureMm(n, e);
61
+ }
62
+ return r(), f;
63
+ }
64
+ function T(t, e, i, f = a) {
65
+ if (!t) return [""];
66
+ t = t.replace(/\r\n?/g, `
67
+ `);
68
+ const o = [];
69
+ let c = "", r = 0;
70
+ const n = () => {
71
+ o.push(c), c = "", r = 0;
72
+ };
73
+ for (const u of w(t, i, f)) {
74
+ if (u.br) {
75
+ n();
76
+ continue;
77
+ }
78
+ if (r + u.widthMm <= e) {
79
+ c += u.text, r += u.widthMm;
80
+ continue;
81
+ }
82
+ if (u.space) {
83
+ n();
84
+ continue;
85
+ }
86
+ if (u.cjk) {
87
+ c.length > 0 && n(), c = u.text, r = u.widthMm;
88
+ continue;
89
+ }
90
+ if (c.length > 0 && n(), u.widthMm <= e) {
91
+ c = u.text, r = u.widthMm;
92
+ continue;
93
+ }
94
+ for (const h of u.text) {
95
+ const m = f.measureMm(h, i);
96
+ r + m > e && c.length > 0 && n(), c += h, r += m;
97
+ }
98
+ }
99
+ return n(), o;
100
+ }
101
+ export {
102
+ A as a,
103
+ p as b,
104
+ M as c,
105
+ a as h,
106
+ x as m,
107
+ T as w
108
+ };
@@ -0,0 +1,4 @@
1
+ "use strict";const M=/[\u3000-\u9fff\uff00-\uffef]/,o=new Uint8Array(128);{for(const t of"iljtf.,:;'`|!()[]")o[t.charCodeAt(0)]=1;for(const t of"mwMW@")o[t.charCodeAt(0)]=2;for(let t=48;t<=57;t++)o[t]=3;for(let t=65;t<=90;t++)o[t]=4;o[32]=5}const d=[.54,.26,.95,.59,.67,.3];function l(t){const e=t.charCodeAt(0);return e<128?d[o[e]]:M.test(t)?1:/[A-Z]/.test(t)?.67:.54}const a={measureMm(t,e){const{fontSizePt:s,bold:u=!1,letterSpacingPt:f=0}=e,c=25.4/72;let n=0;for(const r of t)n+=l(r);return u&&(n*=1.04),(n*s+f*t.length)*c}};function w(){return a}function p(t,e){return a.measureMm(t,e)}function x(t){let e;return{measureMm(s,u){if(e===void 0&&(e=t()),!e)return a.measureMm(s,u);const f=u.fontSizePt*96/72;return e.font=`${u.bold?"bold ":""}${f}px sans-serif`,e.measureText(s).width*25.4/96}}}function T(t,e,s){const u=[];let f="",c=0;const n=()=>{f&&(u.push({text:f,widthMm:c,cjk:!1}),f="",c=0)};for(const r of t){if(r===`
2
+ `){n(),u.push({text:`
3
+ `,widthMm:0,cjk:!1,br:!0});continue}if(r===" "){n(),u.push({text:r,widthMm:s.measureMm(r,e),cjk:!1,space:!0});continue}if(M.test(r)){n(),u.push({text:r,widthMm:s.measureMm(r,e),cjk:!0});continue}f+=r,c+=s.measureMm(r,e)}return n(),u}function A(t,e,s,u=a){if(!t)return[""];t=t.replace(/\r\n?/g,`
4
+ `);const f=[];let c="",n=0;const r=()=>{f.push(c),c="",n=0};for(const i of T(t,s,u)){if(i.br){r();continue}if(n+i.widthMm<=e){c+=i.text,n+=i.widthMm;continue}if(i.space){r();continue}if(i.cjk){c.length>0&&r(),c=i.text,n=i.widthMm;continue}if(c.length>0&&r(),i.widthMm<=e){c=i.text,n=i.widthMm;continue}for(const h of i.text){const m=u.measureMm(h,s);n+m>e&&c.length>0&&r(),c+=h,n+=m}}return r(),f}exports.charWidthEm=l;exports.createCanvasMeasurer=x;exports.createHeuristicMeasurer=w;exports.heuristicMeasurer=a;exports.measureTextMm=p;exports.wrapText=A;
@@ -102,6 +102,10 @@ declare interface ListColumn {
102
102
  declare interface ListComponent {
103
103
  kind: "list";
104
104
  id?: string;
105
+ /** 宽表标记用于连续 Excel;不改变低层列表的列宽和分页算法。 */
106
+ layout?: "page" | "wide";
107
+ /** 逻辑表名称,供 Excel Sheet 命名;不额外生成标题组件。 */
108
+ title?: string;
105
109
  leftMm: number;
106
110
  topMm: number;
107
111
  widthMm: number;
@@ -348,13 +352,13 @@ export declare const MachReportPreview: {
348
352
  height: string;
349
353
  gapPx: number;
350
354
  params: Record<string, string>;
355
+ reportId: string | string[] | null;
351
356
  debug: boolean;
352
357
  showExport: boolean;
353
358
  showPrint: boolean;
354
359
  showPdfWindow: boolean;
355
360
  showParams: boolean;
356
361
  messages: Partial<MachReportMessages>;
357
- reportId: string | string[] | null;
358
362
  autoLoad: boolean;
359
363
  preset: string;
360
364
  paramDefs: ReportParamDef[] | undefined;
@@ -449,13 +453,13 @@ export declare const MachReportPreview: {
449
453
  height: string;
450
454
  gapPx: number;
451
455
  params: Record<string, string>;
456
+ reportId: string | string[] | null;
452
457
  debug: boolean;
453
458
  showExport: boolean;
454
459
  showPrint: boolean;
455
460
  showPdfWindow: boolean;
456
461
  showParams: boolean;
457
462
  messages: Partial<MachReportMessages>;
458
- reportId: string | string[] | null;
459
463
  autoLoad: boolean;
460
464
  preset: string;
461
465
  paramDefs: ReportParamDef[] | undefined;
@@ -550,13 +554,13 @@ warning: (message: string) => any;
550
554
  height: string;
551
555
  gapPx: number;
552
556
  params: Record<string, string>;
557
+ reportId: string | string[] | null;
553
558
  debug: boolean;
554
559
  showExport: boolean;
555
560
  showPrint: boolean;
556
561
  showPdfWindow: boolean;
557
562
  showParams: boolean;
558
563
  messages: Partial<MachReportMessages>;
559
- reportId: string | string[] | null;
560
564
  autoLoad: boolean;
561
565
  preset: string;
562
566
  paramDefs: ReportParamDef[] | undefined;
@@ -648,6 +652,7 @@ declare interface PlanComponent {
648
652
  richParagraphs?: RichParagraph[];
649
653
  imageData?: string;
650
654
  grid?: PlanGrid;
655
+ table?: PlanTableFragment;
651
656
  style?: ComponentStyle;
652
657
  meta?: Record<string, unknown>;
653
658
  /** MachReport 扩展字段:未知 kind 的兜底渲染标记 */
@@ -665,9 +670,13 @@ declare interface PlanGrid {
665
670
  colWidthsMm?: number[];
666
671
  rowHeightsMm?: number[];
667
672
  gapMm?: number;
673
+ /** 单元格四边内距;旧静态网格默认 0.5mm,分页列表使用其真实测量内距。 */
674
+ paddingMm?: number;
668
675
  }
669
676
 
670
677
  declare interface PlanPage {
678
+ /** wide 表示完整自然列宽;页面仅为预览的垂直窗口分段。 */
679
+ layout?: "page" | "wide";
671
680
  pageWidthMm: number;
672
681
  pageHeightMm: number;
673
682
  marginTopMm?: number;
@@ -677,6 +686,19 @@ declare interface PlanPage {
677
686
  components: PlanComponent[];
678
687
  }
679
688
 
689
+ /** 列表的逻辑行来源;用于连续 Excel 重组,避免按文本猜测重复表头。 */
690
+ declare interface PlanTableFragment {
691
+ /** 在整个计划中唯一的逻辑表身份;同一表的分页片段共享身份。 */
692
+ id: string;
693
+ /** 表头固定 -1;其余行(包括组头/小计/总计)从 0 连续递增。 */
694
+ rowIndex: number;
695
+ role: "header" | "body" | "group-header" | "subtotal" | "grand-total";
696
+ /** 按物理列顺序保存字段身份;不以表头显示文本判断列结构。 */
697
+ columnKeys: string[];
698
+ layout?: "page" | "wide";
699
+ title?: string;
700
+ }
701
+
680
702
  /** 预取组件分片(路由 hover / 空闲时调用,正式渲染零等待) */
681
703
  export declare function preloadMachReport(): Promise<unknown>;
682
704
 
@@ -774,6 +796,8 @@ declare type TemplateComponent = PlanComponent | ListComponent;
774
796
  declare interface TemplatePage {
775
797
  widthMm: number;
776
798
  heightMm: number;
799
+ /** 宽表保持全列自然宽度,页高只控制内部纵向分段。 */
800
+ layout?: "page" | "wide";
777
801
  marginTopMm?: number;
778
802
  marginBottomMm?: number;
779
803
  marginLeftMm?: number;
@@ -809,11 +833,13 @@ declare interface TextMeasurer {
809
833
  * - 未支持组件、富文本专有内容与单元格嵌套组件跳过并计入 warnings
810
834
  */
811
835
  declare interface XlsxRenderOptions {
812
- /** 工作表命名(默认 "Sheet1" 起序) */
813
- sheetName?: (pageIndex: number) => string;
814
- /** 默认 text 保留显示文本;raw 使用列表自动保留的原始数值、布尔、文本与空值。 */
836
+ /** 工作表命名(连续表默认使用标题,其余默认 "Sheet1" 起序)。 */
837
+ sheetName?: (sheetIndex: number) => string;
838
+ /** auto 默认将 wide 逻辑表合并为连续 Sheet;pages 保留逐页;continuous 要求明确的表来源。 */
839
+ sheetMode?: "auto" | "pages" | "continuous";
840
+ /** 宽表或连续表默认 raw,其余默认 text;显式配置可覆盖默认值。 */
815
841
  valueMode?: "text" | "raw";
816
- /** 默认 auto 按计划识别 A3/A4/A5;自定义尺寸回退 A4 并返回告警。 */
842
+ /** 连续表默认不限制打印纸型;显式 A3/A4/A5 仅设置打印适配,不改变 Excel 列宽。 */
817
843
  paperSize?: "auto" | "a3" | "a4" | "a5";
818
844
  }
819
845
 
@@ -102,6 +102,10 @@ declare interface ListColumn {
102
102
  declare interface ListComponent {
103
103
  kind: "list";
104
104
  id?: string;
105
+ /** 宽表标记用于连续 Excel;不改变低层列表的列宽和分页算法。 */
106
+ layout?: "page" | "wide";
107
+ /** 逻辑表名称,供 Excel Sheet 命名;不额外生成标题组件。 */
108
+ title?: string;
105
109
  leftMm: number;
106
110
  topMm: number;
107
111
  widthMm: number;
@@ -348,13 +352,13 @@ export declare const MachReportPreview: {
348
352
  height: string;
349
353
  gapPx: number;
350
354
  params: Record<string, string>;
355
+ reportId: string | string[] | null;
351
356
  debug: boolean;
352
357
  showExport: boolean;
353
358
  showPrint: boolean;
354
359
  showPdfWindow: boolean;
355
360
  showParams: boolean;
356
361
  messages: Partial<MachReportMessages>;
357
- reportId: string | string[] | null;
358
362
  autoLoad: boolean;
359
363
  preset: string;
360
364
  paramDefs: ReportParamDef[] | undefined;
@@ -449,13 +453,13 @@ export declare const MachReportPreview: {
449
453
  height: string;
450
454
  gapPx: number;
451
455
  params: Record<string, string>;
456
+ reportId: string | string[] | null;
452
457
  debug: boolean;
453
458
  showExport: boolean;
454
459
  showPrint: boolean;
455
460
  showPdfWindow: boolean;
456
461
  showParams: boolean;
457
462
  messages: Partial<MachReportMessages>;
458
- reportId: string | string[] | null;
459
463
  autoLoad: boolean;
460
464
  preset: string;
461
465
  paramDefs: ReportParamDef[] | undefined;
@@ -550,13 +554,13 @@ warning: (message: string) => any;
550
554
  height: string;
551
555
  gapPx: number;
552
556
  params: Record<string, string>;
557
+ reportId: string | string[] | null;
553
558
  debug: boolean;
554
559
  showExport: boolean;
555
560
  showPrint: boolean;
556
561
  showPdfWindow: boolean;
557
562
  showParams: boolean;
558
563
  messages: Partial<MachReportMessages>;
559
- reportId: string | string[] | null;
560
564
  autoLoad: boolean;
561
565
  preset: string;
562
566
  paramDefs: ReportParamDef[] | undefined;
@@ -648,6 +652,7 @@ declare interface PlanComponent {
648
652
  richParagraphs?: RichParagraph[];
649
653
  imageData?: string;
650
654
  grid?: PlanGrid;
655
+ table?: PlanTableFragment;
651
656
  style?: ComponentStyle;
652
657
  meta?: Record<string, unknown>;
653
658
  /** MachReport 扩展字段:未知 kind 的兜底渲染标记 */
@@ -665,9 +670,13 @@ declare interface PlanGrid {
665
670
  colWidthsMm?: number[];
666
671
  rowHeightsMm?: number[];
667
672
  gapMm?: number;
673
+ /** 单元格四边内距;旧静态网格默认 0.5mm,分页列表使用其真实测量内距。 */
674
+ paddingMm?: number;
668
675
  }
669
676
 
670
677
  declare interface PlanPage {
678
+ /** wide 表示完整自然列宽;页面仅为预览的垂直窗口分段。 */
679
+ layout?: "page" | "wide";
671
680
  pageWidthMm: number;
672
681
  pageHeightMm: number;
673
682
  marginTopMm?: number;
@@ -677,6 +686,19 @@ declare interface PlanPage {
677
686
  components: PlanComponent[];
678
687
  }
679
688
 
689
+ /** 列表的逻辑行来源;用于连续 Excel 重组,避免按文本猜测重复表头。 */
690
+ declare interface PlanTableFragment {
691
+ /** 在整个计划中唯一的逻辑表身份;同一表的分页片段共享身份。 */
692
+ id: string;
693
+ /** 表头固定 -1;其余行(包括组头/小计/总计)从 0 连续递增。 */
694
+ rowIndex: number;
695
+ role: "header" | "body" | "group-header" | "subtotal" | "grand-total";
696
+ /** 按物理列顺序保存字段身份;不以表头显示文本判断列结构。 */
697
+ columnKeys: string[];
698
+ layout?: "page" | "wide";
699
+ title?: string;
700
+ }
701
+
680
702
  /** 预取组件分片(路由 hover / 空闲时调用,正式渲染零等待) */
681
703
  export declare function preloadMachReport(): Promise<unknown>;
682
704
 
@@ -774,6 +796,8 @@ declare type TemplateComponent = PlanComponent | ListComponent;
774
796
  declare interface TemplatePage {
775
797
  widthMm: number;
776
798
  heightMm: number;
799
+ /** 宽表保持全列自然宽度,页高只控制内部纵向分段。 */
800
+ layout?: "page" | "wide";
777
801
  marginTopMm?: number;
778
802
  marginBottomMm?: number;
779
803
  marginLeftMm?: number;
@@ -809,11 +833,13 @@ declare interface TextMeasurer {
809
833
  * - 未支持组件、富文本专有内容与单元格嵌套组件跳过并计入 warnings
810
834
  */
811
835
  declare interface XlsxRenderOptions {
812
- /** 工作表命名(默认 "Sheet1" 起序) */
813
- sheetName?: (pageIndex: number) => string;
814
- /** 默认 text 保留显示文本;raw 使用列表自动保留的原始数值、布尔、文本与空值。 */
836
+ /** 工作表命名(连续表默认使用标题,其余默认 "Sheet1" 起序)。 */
837
+ sheetName?: (sheetIndex: number) => string;
838
+ /** auto 默认将 wide 逻辑表合并为连续 Sheet;pages 保留逐页;continuous 要求明确的表来源。 */
839
+ sheetMode?: "auto" | "pages" | "continuous";
840
+ /** 宽表或连续表默认 raw,其余默认 text;显式配置可覆盖默认值。 */
815
841
  valueMode?: "text" | "raw";
816
- /** 默认 auto 按计划识别 A3/A4/A5;自定义尺寸回退 A4 并返回告警。 */
842
+ /** 连续表默认不限制打印纸型;显式 A3/A4/A5 仅设置打印适配,不改变 Excel 列宽。 */
817
843
  paperSize?: "auto" | "a3" | "a4" | "a5";
818
844
  }
819
845
 
@@ -173,13 +173,13 @@ onWarning?: ((message: string) => any) | undefined;
173
173
  height: string;
174
174
  gapPx: number;
175
175
  params: Record<string, string>;
176
+ reportId: string | string[] | null;
176
177
  debug: boolean;
177
178
  showExport: boolean;
178
179
  showPrint: boolean;
179
180
  showPdfWindow: boolean;
180
181
  showParams: boolean;
181
182
  messages: Partial<MachReportMessages>;
182
- reportId: string | string[] | null;
183
183
  autoLoad: boolean;
184
184
  preset: string;
185
185
  paramDefs: ReportParamDef[] | undefined;
@@ -405,6 +405,10 @@ declare interface ListColumn {
405
405
  declare interface ListComponent {
406
406
  kind: "list";
407
407
  id?: string;
408
+ /** 宽表标记用于连续 Excel;不改变低层列表的列宽和分页算法。 */
409
+ layout?: "page" | "wide";
410
+ /** 逻辑表名称,供 Excel Sheet 命名;不额外生成标题组件。 */
411
+ title?: string;
408
412
  leftMm: number;
409
413
  topMm: number;
410
414
  widthMm: number;
@@ -724,13 +728,13 @@ export declare const MachReportPreview: {
724
728
  height: string;
725
729
  gapPx: number;
726
730
  params: Record<string, string>;
731
+ reportId: string | string[] | null;
727
732
  debug: boolean;
728
733
  showExport: boolean;
729
734
  showPrint: boolean;
730
735
  showPdfWindow: boolean;
731
736
  showParams: boolean;
732
737
  messages: Partial<MachReportMessages>;
733
- reportId: string | string[] | null;
734
738
  autoLoad: boolean;
735
739
  preset: string;
736
740
  paramDefs: ReportParamDef[] | undefined;
@@ -825,13 +829,13 @@ export declare const MachReportPreview: {
825
829
  height: string;
826
830
  gapPx: number;
827
831
  params: Record<string, string>;
832
+ reportId: string | string[] | null;
828
833
  debug: boolean;
829
834
  showExport: boolean;
830
835
  showPrint: boolean;
831
836
  showPdfWindow: boolean;
832
837
  showParams: boolean;
833
838
  messages: Partial<MachReportMessages>;
834
- reportId: string | string[] | null;
835
839
  autoLoad: boolean;
836
840
  preset: string;
837
841
  paramDefs: ReportParamDef[] | undefined;
@@ -926,13 +930,13 @@ warning: (message: string) => any;
926
930
  height: string;
927
931
  gapPx: number;
928
932
  params: Record<string, string>;
933
+ reportId: string | string[] | null;
929
934
  debug: boolean;
930
935
  showExport: boolean;
931
936
  showPrint: boolean;
932
937
  showPdfWindow: boolean;
933
938
  showParams: boolean;
934
939
  messages: Partial<MachReportMessages>;
935
- reportId: string | string[] | null;
936
940
  autoLoad: boolean;
937
941
  preset: string;
938
942
  paramDefs: ReportParamDef[] | undefined;
@@ -1035,6 +1039,7 @@ declare interface PlanComponent {
1035
1039
  richParagraphs?: RichParagraph[];
1036
1040
  imageData?: string;
1037
1041
  grid?: PlanGrid;
1042
+ table?: PlanTableFragment;
1038
1043
  style?: ComponentStyle;
1039
1044
  meta?: Record<string, unknown>;
1040
1045
  /** MachReport 扩展字段:未知 kind 的兜底渲染标记 */
@@ -1052,6 +1057,8 @@ declare interface PlanGrid {
1052
1057
  colWidthsMm?: number[];
1053
1058
  rowHeightsMm?: number[];
1054
1059
  gapMm?: number;
1060
+ /** 单元格四边内距;旧静态网格默认 0.5mm,分页列表使用其真实测量内距。 */
1061
+ paddingMm?: number;
1055
1062
  }
1056
1063
 
1057
1064
  export declare class PlanLoadError extends Error {
@@ -1059,6 +1066,8 @@ export declare class PlanLoadError extends Error {
1059
1066
  }
1060
1067
 
1061
1068
  declare interface PlanPage {
1069
+ /** wide 表示完整自然列宽;页面仅为预览的垂直窗口分段。 */
1070
+ layout?: "page" | "wide";
1062
1071
  pageWidthMm: number;
1063
1072
  pageHeightMm: number;
1064
1073
  marginTopMm?: number;
@@ -1068,6 +1077,19 @@ declare interface PlanPage {
1068
1077
  components: PlanComponent[];
1069
1078
  }
1070
1079
 
1080
+ /** 列表的逻辑行来源;用于连续 Excel 重组,避免按文本猜测重复表头。 */
1081
+ declare interface PlanTableFragment {
1082
+ /** 在整个计划中唯一的逻辑表身份;同一表的分页片段共享身份。 */
1083
+ id: string;
1084
+ /** 表头固定 -1;其余行(包括组头/小计/总计)从 0 连续递增。 */
1085
+ rowIndex: number;
1086
+ role: "header" | "body" | "group-header" | "subtotal" | "grand-total";
1087
+ /** 按物理列顺序保存字段身份;不以表头显示文本判断列结构。 */
1088
+ columnKeys: string[];
1089
+ layout?: "page" | "wide";
1090
+ title?: string;
1091
+ }
1092
+
1071
1093
  declare function print_2(): Promise<void>;
1072
1094
 
1073
1095
  declare interface PrintHtmlResult {
@@ -1244,6 +1266,8 @@ declare type TemplateComponent = PlanComponent | ListComponent;
1244
1266
  declare interface TemplatePage {
1245
1267
  widthMm: number;
1246
1268
  heightMm: number;
1269
+ /** 宽表保持全列自然宽度,页高只控制内部纵向分段。 */
1270
+ layout?: "page" | "wide";
1247
1271
  marginTopMm?: number;
1248
1272
  marginBottomMm?: number;
1249
1273
  marginLeftMm?: number;
@@ -1340,8 +1364,8 @@ export declare function useReportPreview(): MachReportController | null;
1340
1364
 
1341
1365
  /**
1342
1366
  * 缩放状态(transform: scale 方案):
1343
- * - fit 模式:按视口宽自适应(clamp 0.3~1)
1344
- * - raw 模式:固定百分比
1367
+ * - fit 模式:按视口宽自适应,超宽表也能完整缩入视口
1368
+ * - raw 模式:固定百分比(30%~300%)
1345
1369
  * transform 而非 CSS zoom:标准属性、跨浏览器、零重排。
1346
1370
  */
1347
1371
  export declare function useZoom(getFitInputs: () => {
@@ -1363,11 +1387,13 @@ export declare function useZoom(getFitInputs: () => {
1363
1387
  * - 未支持组件、富文本专有内容与单元格嵌套组件跳过并计入 warnings
1364
1388
  */
1365
1389
  declare interface XlsxRenderOptions {
1366
- /** 工作表命名(默认 "Sheet1" 起序) */
1367
- sheetName?: (pageIndex: number) => string;
1368
- /** 默认 text 保留显示文本;raw 使用列表自动保留的原始数值、布尔、文本与空值。 */
1390
+ /** 工作表命名(连续表默认使用标题,其余默认 "Sheet1" 起序)。 */
1391
+ sheetName?: (sheetIndex: number) => string;
1392
+ /** auto 默认将 wide 逻辑表合并为连续 Sheet;pages 保留逐页;continuous 要求明确的表来源。 */
1393
+ sheetMode?: "auto" | "pages" | "continuous";
1394
+ /** 宽表或连续表默认 raw,其余默认 text;显式配置可覆盖默认值。 */
1369
1395
  valueMode?: "text" | "raw";
1370
- /** 默认 auto 按计划识别 A3/A4/A5;自定义尺寸回退 A4 并返回告警。 */
1396
+ /** 连续表默认不限制打印纸型;显式 A3/A4/A5 仅设置打印适配,不改变 Excel 列宽。 */
1371
1397
  paperSize?: "auto" | "a3" | "a4" | "a5";
1372
1398
  }
1373
1399