@agile-team/mach-report 2.6.1 → 2.8.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 (61) hide show
  1. package/README.md +59 -8
  2. package/dist/ReportPreview-BKKDAv8e.js +4481 -0
  3. package/dist/ReportPreview-E3cm67Tk.cjs +6 -0
  4. package/dist/{assets-NVA_sftu.js → assets-B9qJku3V.js} +54 -57
  5. package/dist/assets-RZan7EyL.cjs +1 -0
  6. package/dist/capabilities-joSutDF8.js +63 -0
  7. package/dist/capabilities-xGTpnPjJ.cjs +1 -0
  8. package/dist/designer.cjs +1 -1
  9. package/dist/designer.d.cts +922 -753
  10. package/dist/designer.d.ts +922 -753
  11. package/dist/designer.js +490 -234
  12. package/dist/index.cjs +8 -8
  13. package/dist/index.d.cts +128 -3
  14. package/dist/index.d.ts +128 -3
  15. package/dist/index.js +971 -699
  16. package/dist/pdf.cjs +30 -30
  17. package/dist/pdf.d.cts +11 -3
  18. package/dist/pdf.d.ts +11 -3
  19. package/dist/pdf.js +1501 -1500
  20. package/dist/{plugin-Ds10VnQO.js → plugin-PCgxBVB2.js} +1 -1
  21. package/dist/{plugin-BqBkn_kI.cjs → plugin-mAfvgSey.cjs} +1 -1
  22. package/dist/progress-DD964VAB.js +102 -0
  23. package/dist/progress-KvhwXZ1Q.cjs +1 -0
  24. package/dist/{report-source-B9bENO0F.js → report-source-BXHNy_AD.js} +337 -332
  25. package/dist/report-source-CCAvFE3t.cjs +1 -0
  26. package/dist/server/node.d.cts +26 -3
  27. package/dist/server/node.d.ts +26 -3
  28. package/dist/server-node.cjs +1 -1
  29. package/dist/server-node.js +125 -92
  30. package/dist/server.cjs +1 -1
  31. package/dist/server.d.cts +28 -3
  32. package/dist/server.d.ts +28 -3
  33. package/dist/server.js +172 -164
  34. package/dist/style.css +1 -1
  35. package/dist/task-events-DQ276fn2.cjs +1 -0
  36. package/dist/task-events-Dpsvf_t2.js +47 -0
  37. package/dist/vue/async.d.cts +1553 -2083
  38. package/dist/vue/async.d.ts +1553 -2083
  39. package/dist/vue/index.d.cts +2465 -3310
  40. package/dist/vue/index.d.ts +2465 -3310
  41. package/dist/vue-async.cjs +1 -1
  42. package/dist/vue-async.js +3 -3
  43. package/dist/vue.cjs +1 -1
  44. package/dist/vue.js +159 -132
  45. package/dist/worker.cjs +1 -1
  46. package/dist/worker.d.cts +26 -3
  47. package/dist/worker.d.ts +26 -3
  48. package/dist/worker.js +110 -85
  49. package/dist/xlsx.cjs +14 -14
  50. package/dist/xlsx.d.cts +11 -3
  51. package/dist/xlsx.d.ts +11 -3
  52. package/dist/xlsx.js +656 -652
  53. package/package.json +2 -2
  54. package/dist/ReportPreview-Dk-28QAi.js +0 -2946
  55. package/dist/ReportPreview-FSvcBLjH.cjs +0 -6
  56. package/dist/assets-66UBlhES.cjs +0 -1
  57. package/dist/capabilities-CNjIirfo.js +0 -36
  58. package/dist/capabilities-D4xeVYSR.cjs +0 -1
  59. package/dist/grid-geometry-BNptEcMm.js +0 -65
  60. package/dist/grid-geometry-CZ_cYB6O.cjs +0 -1
  61. package/dist/report-source-BbNkkBDy.cjs +0 -1
@@ -1,32 +1,34 @@
1
- import { d as v, c as k, e as M } from "./style-Dv5o_x6b.js";
1
+ import { d as v, c as k, e as S } from "./style-Dv5o_x6b.js";
2
+ import { n as x } from "./capabilities-joSutDF8.js";
3
+ import { w as y } from "./progress-DD964VAB.js";
2
4
  const A = ["borderTop", "borderRight", "borderBottom", "borderLeft", "borderColor", "lineColor", "lineWidthPt"];
3
- function S(n, e) {
5
+ function O(n, e) {
4
6
  const t = v(e.style), r = t.inner ? [...n.edges] : [];
5
7
  t.top && r.push({ kind: "h", pos: 0, from: 0, to: e.widthMm }), t.bottom && r.push({ kind: "h", pos: e.heightMm, from: 0, to: e.widthMm }), t.left && r.push({ kind: "v", pos: 0, from: 0, to: e.heightMm }), t.right && r.push({ kind: "v", pos: e.widthMm, from: 0, to: e.heightMm });
6
8
  const o = k(e.style);
7
9
  return r.map((s) => ({ ...s, ...o }));
8
10
  }
9
- function x(n, e, t) {
11
+ function I(n, e, t) {
10
12
  const r = n.get(e);
11
13
  (!r || t.widthPt > r.widthPt) && n.set(e, t);
12
14
  }
13
15
  function p(n, e, t, r, o, s) {
14
16
  const i = t < e.rows.length ? e.rows[t].pos : e.rows[e.rows.length - 1].pos + e.rows[e.rows.length - 1].size;
15
17
  for (let a = r; a < o; a++) {
16
- const c = e.columns[a];
17
- x(n, `h:${t}:${a}`, { kind: "h", pos: i, from: c.pos, to: c.pos + c.size, ...s });
18
+ const d = e.columns[a];
19
+ I(n, `h:${t}:${a}`, { kind: "h", pos: i, from: d.pos, to: d.pos + d.size, ...s });
18
20
  }
19
21
  }
20
22
  function w(n, e, t, r, o, s) {
21
23
  const i = t < e.columns.length ? e.columns[t].pos : e.columns[e.columns.length - 1].pos + e.columns[e.columns.length - 1].size;
22
24
  for (let a = r; a < o; a++) {
23
- const c = e.rows[a];
24
- x(n, `v:${t}:${a}`, { kind: "v", pos: i, from: c.pos, to: c.pos + c.size, ...s });
25
+ const d = e.rows[a];
26
+ I(n, `v:${t}:${a}`, { kind: "v", pos: i, from: d.pos, to: d.pos + d.size, ...s });
25
27
  }
26
28
  }
27
29
  function b(n, e, t, r) {
28
- const o = Math.min(e.columns.length, t.ci + (t.cell.colSpan ?? 1)), s = Math.min(e.rows.length, t.ri + (t.cell.rowSpan ?? 1)), i = M(r, t.cell.style), a = v(i), c = k(i);
29
- a.top && p(n, e, t.ri, t.ci, o, c), a.bottom && p(n, e, s, t.ci, o, c), a.left && w(n, e, t.ci, t.ri, s, c), a.right && w(n, e, o, t.ri, s, c);
30
+ const o = Math.min(e.columns.length, t.ci + (t.cell.colSpan ?? 1)), s = Math.min(e.rows.length, t.ri + (t.cell.rowSpan ?? 1)), i = S(r, t.cell.style), a = v(i), d = k(i);
31
+ a.top && p(n, e, t.ri, t.ci, o, d), a.bottom && p(n, e, s, t.ci, o, d), a.left && w(n, e, t.ci, t.ri, s, d), a.right && w(n, e, o, t.ri, s, d);
30
32
  }
31
33
  function P(n) {
32
34
  const e = [...n.values()].sort((r, o) => r.kind.localeCompare(o.kind) || r.pos - o.pos || r.from - o.from), t = [];
@@ -36,64 +38,58 @@ function P(n) {
36
38
  }
37
39
  return t;
38
40
  }
39
- function L(n, e) {
40
- if (!n.cells.some(({ cell: s }) => A.some((i) => s.style?.[i] !== void 0))) return S(n, e);
41
+ function j(n, e) {
42
+ if (!n.cells.some(({ cell: s }) => A.some((i) => s.style?.[i] !== void 0))) return O(n, e);
41
43
  const t = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Set(), o = n.columns.length;
42
44
  for (const s of n.cells) {
43
45
  b(t, n, s, e.style);
44
46
  const i = Math.min(n.rows.length, s.ri + (s.cell.rowSpan ?? 1)), a = Math.min(o, s.ci + (s.cell.colSpan ?? 1));
45
- for (let c = s.ri; c < i; c++) for (let d = s.ci; d < a; d++) r.add(c * o + d);
47
+ for (let d = s.ri; d < i; d++) for (let c = s.ci; c < a; c++) r.add(d * o + c);
46
48
  }
47
49
  for (let s = 0; s < n.rows.length; s++) for (let i = 0; i < o; i++)
48
50
  r.has(s * o + i) || b(t, n, { ri: s, ci: i, cell: {} }, e.style);
49
51
  return P(t);
50
52
  }
51
- class l extends Error {
53
+ class u extends Error {
52
54
  constructor(e, t) {
53
55
  super(e.message), this.name = "OutputAssetError", this.diagnostic = e, this.cause = t;
54
56
  }
55
57
  }
56
- function u(n) {
58
+ function f(n) {
57
59
  if (n.aborted) throw n.reason ?? new DOMException("The operation was aborted.", "AbortError");
58
60
  }
59
- function y(n, e) {
60
- return u(e), new Promise((t, r) => {
61
- const o = () => r(e.reason ?? new DOMException("The operation was aborted.", "AbortError"));
62
- e.addEventListener("abort", o, { once: !0 }), Promise.resolve(n).then(t, r).finally(() => e.removeEventListener("abort", o));
63
- });
64
- }
65
- function D(n) {
61
+ function B(n) {
66
62
  const e = { maxAssets: 1e3, maxImageBytes: 33554432, maxTotalImageBytes: 134217728, maxDurationMs: 3e4, ...n.assetBudget };
67
63
  for (const [t, r] of Object.entries(e))
68
64
  if (!Number.isSafeInteger(r) || r <= 0 || r > 2147483647) throw new RangeError(`${t} must be a positive safe integer at most 2147483647.`);
69
65
  return e;
70
66
  }
71
- function B(n) {
67
+ function D(n) {
72
68
  const e = /^data:image\/[a-z0-9.+-]+(;base64)?,(.*)$/is.exec(n);
73
69
  if (!e) throw new TypeError("Asset renderers must return an image data URL.");
74
70
  return e[1] ? Math.ceil(e[2].length * 3 / 4) : new TextEncoder().encode(decodeURIComponent(e[2])).byteLength;
75
71
  }
76
- function f(n, e, t, r, o) {
72
+ function h(n, e, t, r, o) {
77
73
  const s = { code: t, message: r, severity: "warning", format: n.options.format ?? "dom", pageIndex: e.pageIndex, componentIndex: e.componentIndex, componentPath: e.componentPath, kind: e.component.kind, nid: e.component.nid };
78
- if (n.diagnostics.push(s), n.options.onDiagnostic?.(s), n.options.assetFailure !== "placeholder") throw new l(s, o);
74
+ if (n.diagnostics.push(s), x(s, { ...n.options, signal: n.signal }), n.options.assetFailure !== "placeholder") throw new u(s, o);
79
75
  }
80
- async function O(n, e, t) {
76
+ async function T(n, e, t) {
81
77
  const r = n.options.assetRenderers?.[e.kind];
82
78
  if (e.imageData || !r) return e.imageData;
83
- if (++n.rendered > n.budget.maxAssets) return f(n, t, "asset-budget-exceeded", "Output exceeded the asset count budget.");
79
+ if (++n.rendered > n.budget.maxAssets) return h(n, t, "asset-budget-exceeded", "Output exceeded the asset count budget.");
84
80
  let o;
85
81
  try {
86
- if (n.active = t, o = await y(r({ ...t, signal: n.signal }), n.signal), u(n.signal), o.length > n.budget.maxImageBytes * 4 + 1024) return f(n, t, "asset-budget-exceeded", "Output exceeded the image payload byte budget.");
87
- const s = B(o);
88
- if (s > n.budget.maxImageBytes || n.bytes + s > n.budget.maxTotalImageBytes) return f(n, t, "asset-budget-exceeded", "Output exceeded the encoded image byte budget.");
82
+ if (n.active = t, o = await y(r({ ...t, signal: n.signal }), n.signal), f(n.signal), o.length > n.budget.maxImageBytes * 4 + 1024) return h(n, t, "asset-budget-exceeded", "Output exceeded the image payload byte budget.");
83
+ const s = D(o);
84
+ if (s > n.budget.maxImageBytes || n.bytes + s > n.budget.maxTotalImageBytes) return h(n, t, "asset-budget-exceeded", "Output exceeded the encoded image byte budget.");
89
85
  n.bytes += s;
90
86
  } catch (s) {
91
- if (n.signal.aborted || s instanceof l) throw s;
92
- return f(n, t, "asset-render-failed", `Asset renderer failed for ${e.kind}; output was not silently omitted.`, s);
87
+ if (n.signal.aborted || s instanceof u) throw s;
88
+ return h(n, t, "asset-render-failed", `Asset renderer failed for ${e.kind}; output was not silently omitted.`, s);
93
89
  }
94
90
  return o;
95
91
  }
96
- function T(n, e) {
92
+ function C(n, e) {
97
93
  const t = n.active;
98
94
  if (!t) {
99
95
  e.abort(new Error("Asset rendering exceeded maxDurationMs."));
@@ -102,62 +98,63 @@ function T(n, e) {
102
98
  const r = { code: "asset-budget-exceeded", message: "Asset rendering exceeded maxDurationMs.", severity: "warning", format: n.options.format ?? "dom", pageIndex: t.pageIndex, componentIndex: t.componentIndex, componentPath: t.componentPath, kind: t.component.kind, nid: t.component.nid };
103
99
  n.diagnostics.push(r);
104
100
  try {
105
- n.options.onDiagnostic?.(r);
101
+ x(r, { ...n.options, signal: n.signal });
106
102
  } catch (o) {
107
103
  e.abort(o);
108
104
  return;
109
105
  }
110
- e.abort(new l(r));
106
+ e.abort(new u(r));
111
107
  }
112
- async function C(n, e, t, r, o) {
108
+ async function R(n, e, t, r, o) {
113
109
  if (!e?.children?.length) return e;
114
110
  const s = [];
115
111
  for (const [i, a] of e.children.entries())
116
- s.push(await E(n, a, { ...t, component: a, componentPath: [...r, i] }, o));
112
+ s.push(await M(n, a, { ...t, component: a, componentPath: [...r, i] }, o));
117
113
  return s.some((i, a) => i !== e.children[a]) ? { ...e, children: s } : e;
118
114
  }
119
- async function E(n, e, t, r) {
120
- if (u(n.signal), r.has(e)) throw new TypeError("Cyclic grid children cannot be rendered.");
115
+ async function M(n, e, t, r) {
116
+ if (f(n.signal), r.has(e)) throw new TypeError("Cyclic grid children cannot be rendered.");
121
117
  let o = n.cache.get(e);
122
- o || (o = O(n, e, t), n.cache.set(e, o));
118
+ o || (o = T(n, e, t), n.cache.set(e, o));
123
119
  const s = await o;
120
+ f(n.signal);
124
121
  let i = e.grid;
125
122
  if (i) {
126
- const a = new Set(r).add(e), c = [];
127
- for (const [d, h] of i.cells.entries()) {
123
+ const a = new Set(r).add(e), d = [];
124
+ for (const [c, l] of i.cells.entries()) {
128
125
  const g = [];
129
- for (const [m, I] of h.entries()) g.push(await C(n, I, t, [...t.componentPath, d, m], a));
130
- c.push(g);
126
+ for (const [m, E] of l.entries()) g.push(await R(n, E, t, [...t.componentPath, c, m], a));
127
+ d.push(g);
131
128
  }
132
- c.some((d, h) => d.some((g, m) => g !== i.cells[h][m])) && (i = { ...i, cells: c });
129
+ d.some((c, l) => c.some((g, m) => g !== i.cells[l][m])) && (i = { ...i, cells: d });
133
130
  }
134
131
  return s !== e.imageData || i !== e.grid ? { ...e, imageData: s, grid: i } : e;
135
132
  }
136
- async function $(n, e = {}) {
137
- const t = D(e);
133
+ async function F(n, e = {}) {
134
+ const t = B(e);
138
135
  if (e.signal?.aborted) throw e.signal.reason ?? new DOMException("The operation was aborted.", "AbortError");
139
136
  const r = new AbortController(), o = () => r.abort(e.signal?.reason);
140
137
  if (e.signal?.addEventListener("abort", o, { once: !0 }), !e.assetRenderers || !Object.keys(e.assetRenderers).length)
141
138
  return e.signal?.removeEventListener("abort", o), { plan: n, diagnostics: [] };
142
- const s = { options: e, signal: r.signal, diagnostics: [], rendered: 0, bytes: 0, budget: t, cache: /* @__PURE__ */ new WeakMap() }, i = setTimeout(() => T(s, r), t.maxDurationMs);
139
+ const s = { options: e, signal: r.signal, diagnostics: [], rendered: 0, bytes: 0, budget: t, cache: /* @__PURE__ */ new WeakMap() }, i = setTimeout(() => C(s, r), t.maxDurationMs);
143
140
  try {
144
141
  const a = [];
145
- for (const [c, d] of n.pages.entries()) {
146
- if (c < (e.start ?? 0) || c > (e.end ?? n.pages.length - 1)) {
147
- a.push(d);
142
+ for (const [d, c] of n.pages.entries()) {
143
+ if (d < (e.start ?? 0) || d > (e.end ?? n.pages.length - 1)) {
144
+ a.push(c);
148
145
  continue;
149
146
  }
150
- const h = [];
151
- for (const [g, m] of d.components.entries()) h.push(await E(s, m, { component: m, pageIndex: c, componentIndex: g, componentPath: [] }, /* @__PURE__ */ new Set()));
152
- a.push(h.some((g, m) => g !== d.components[m]) ? { ...d, components: h } : d);
147
+ const l = [];
148
+ for (const [g, m] of c.components.entries()) l.push(await M(s, m, { component: m, pageIndex: d, componentIndex: g, componentPath: [] }, /* @__PURE__ */ new Set()));
149
+ a.push(l.some((g, m) => g !== c.components[m]) ? { ...c, components: l } : c);
153
150
  }
154
- return { plan: a.some((c, d) => c !== n.pages[d]) ? { ...n, pages: a } : n, diagnostics: s.diagnostics };
151
+ return f(s.signal), { plan: a.some((d, c) => d !== n.pages[c]) ? { ...n, pages: a } : n, diagnostics: s.diagnostics };
155
152
  } finally {
156
153
  clearTimeout(i), e.signal?.removeEventListener("abort", o);
157
154
  }
158
155
  }
159
156
  export {
160
- l as O,
161
- $ as a,
162
- L as r
157
+ u as O,
158
+ F as a,
159
+ j as r
163
160
  };
@@ -0,0 +1 @@
1
+ "use strict";const m=require("./style-CpwiOPyB.cjs"),k=require("./capabilities-xGTpnPjJ.cjs"),E=require("./progress-KvhwXZ1Q.cjs"),S=["borderTop","borderRight","borderBottom","borderLeft","borderColor","lineColor","lineWidthPt"];function y(n,e){const t=m.resolveBoxBorders(e.style),r=t.inner?[...n.edges]:[];t.top&&r.push({kind:"h",pos:0,from:0,to:e.widthMm}),t.bottom&&r.push({kind:"h",pos:e.heightMm,from:0,to:e.widthMm}),t.left&&r.push({kind:"v",pos:0,from:0,to:e.heightMm}),t.right&&r.push({kind:"v",pos:e.widthMm,from:0,to:e.heightMm});const o=m.resolveStroke(e.style);return r.map(s=>({...s,...o}))}function x(n,e,t){const r=n.get(e);(!r||t.widthPt>r.widthPt)&&n.set(e,t)}function w(n,e,t,r,o,s){const i=t<e.rows.length?e.rows[t].pos:e.rows[e.rows.length-1].pos+e.rows[e.rows.length-1].size;for(let c=r;c<o;c++){const d=e.columns[c];x(n,`h:${t}:${c}`,{kind:"h",pos:i,from:d.pos,to:d.pos+d.size,...s})}}function b(n,e,t,r,o,s){const i=t<e.columns.length?e.columns[t].pos:e.columns[e.columns.length-1].pos+e.columns[e.columns.length-1].size;for(let c=r;c<o;c++){const d=e.rows[c];x(n,`v:${t}:${c}`,{kind:"v",pos:i,from:d.pos,to:d.pos+d.size,...s})}}function v(n,e,t,r){const o=Math.min(e.columns.length,t.ci+(t.cell.colSpan??1)),s=Math.min(e.rows.length,t.ri+(t.cell.rowSpan??1)),i=m.mergeComponentStyles(r,t.cell.style),c=m.resolveBoxBorders(i),d=m.resolveStroke(i);c.top&&w(n,e,t.ri,t.ci,o,d),c.bottom&&w(n,e,s,t.ci,o,d),c.left&&b(n,e,t.ci,t.ri,s,d),c.right&&b(n,e,o,t.ri,s,d)}function A(n){const e=[...n.values()].sort((r,o)=>r.kind.localeCompare(o.kind)||r.pos-o.pos||r.from-o.from),t=[];for(const r of e){const o=t[t.length-1];o&&o.kind===r.kind&&o.pos===r.pos&&Math.abs(o.to-r.from)<1e-6&&o.color===r.color&&o.widthPt===r.widthPt?o.to=r.to:t.push({...r})}return t}function B(n,e){if(!n.cells.some(({cell:s})=>S.some(i=>s.style?.[i]!==void 0)))return y(n,e);const t=new Map,r=new Set,o=n.columns.length;for(const s of n.cells){v(t,n,s,e.style);const i=Math.min(n.rows.length,s.ri+(s.cell.rowSpan??1)),c=Math.min(o,s.ci+(s.cell.colSpan??1));for(let d=s.ri;d<i;d++)for(let a=s.ci;a<c;a++)r.add(d*o+a)}for(let s=0;s<n.rows.length;s++)for(let i=0;i<o;i++)r.has(s*o+i)||v(t,n,{ri:s,ci:i,cell:{}},e.style);return A(t)}class p extends Error{constructor(e,t){super(e.message),this.name="OutputAssetError",this.diagnostic=e,this.cause=t}}function f(n){if(n.aborted)throw n.reason??new DOMException("The operation was aborted.","AbortError")}function O(n){const e={maxAssets:1e3,maxImageBytes:33554432,maxTotalImageBytes:134217728,maxDurationMs:3e4,...n.assetBudget};for(const[t,r]of Object.entries(e))if(!Number.isSafeInteger(r)||r<=0||r>2147483647)throw new RangeError(`${t} must be a positive safe integer at most 2147483647.`);return e}function P(n){const e=/^data:image\/[a-z0-9.+-]+(;base64)?,(.*)$/is.exec(n);if(!e)throw new TypeError("Asset renderers must return an image data URL.");return e[1]?Math.ceil(e[2].length*3/4):new TextEncoder().encode(decodeURIComponent(e[2])).byteLength}function h(n,e,t,r,o){const s={code:t,message:r,severity:"warning",format:n.options.format??"dom",pageIndex:e.pageIndex,componentIndex:e.componentIndex,componentPath:e.componentPath,kind:e.component.kind,nid:e.component.nid};if(n.diagnostics.push(s),k.notifyOutputDiagnostic(s,{...n.options,signal:n.signal}),n.options.assetFailure!=="placeholder")throw new p(s,o)}async function D(n,e,t){const r=n.options.assetRenderers?.[e.kind];if(e.imageData||!r)return e.imageData;if(++n.rendered>n.budget.maxAssets)return h(n,t,"asset-budget-exceeded","Output exceeded the asset count budget.");let o;try{if(n.active=t,o=await E.waitForOutput(r({...t,signal:n.signal}),n.signal),f(n.signal),o.length>n.budget.maxImageBytes*4+1024)return h(n,t,"asset-budget-exceeded","Output exceeded the image payload byte budget.");const s=P(o);if(s>n.budget.maxImageBytes||n.bytes+s>n.budget.maxTotalImageBytes)return h(n,t,"asset-budget-exceeded","Output exceeded the encoded image byte budget.");n.bytes+=s}catch(s){if(n.signal.aborted||s instanceof p)throw s;return h(n,t,"asset-render-failed",`Asset renderer failed for ${e.kind}; output was not silently omitted.`,s)}return o}function T(n,e){const t=n.active;if(!t){e.abort(new Error("Asset rendering exceeded maxDurationMs."));return}const r={code:"asset-budget-exceeded",message:"Asset rendering exceeded maxDurationMs.",severity:"warning",format:n.options.format??"dom",pageIndex:t.pageIndex,componentIndex:t.componentIndex,componentPath:t.componentPath,kind:t.component.kind,nid:t.component.nid};n.diagnostics.push(r);try{k.notifyOutputDiagnostic(r,{...n.options,signal:n.signal})}catch(o){e.abort(o);return}e.abort(new p(r))}async function C(n,e,t,r,o){if(!e?.children?.length)return e;const s=[];for(const[i,c]of e.children.entries())s.push(await I(n,c,{...t,component:c,componentPath:[...r,i]},o));return s.some((i,c)=>i!==e.children[c])?{...e,children:s}:e}async function I(n,e,t,r){if(f(n.signal),r.has(e))throw new TypeError("Cyclic grid children cannot be rendered.");let o=n.cache.get(e);o||(o=D(n,e,t),n.cache.set(e,o));const s=await o;f(n.signal);let i=e.grid;if(i){const c=new Set(r).add(e),d=[];for(const[a,u]of i.cells.entries()){const g=[];for(const[l,M]of u.entries())g.push(await C(n,M,t,[...t.componentPath,a,l],c));d.push(g)}d.some((a,u)=>a.some((g,l)=>g!==i.cells[u][l]))&&(i={...i,cells:d})}return s!==e.imageData||i!==e.grid?{...e,imageData:s,grid:i}:e}async function R(n,e={}){const t=O(e);if(e.signal?.aborted)throw e.signal.reason??new DOMException("The operation was aborted.","AbortError");const r=new AbortController,o=()=>r.abort(e.signal?.reason);if(e.signal?.addEventListener("abort",o,{once:!0}),!e.assetRenderers||!Object.keys(e.assetRenderers).length)return e.signal?.removeEventListener("abort",o),{plan:n,diagnostics:[]};const s={options:e,signal:r.signal,diagnostics:[],rendered:0,bytes:0,budget:t,cache:new WeakMap},i=setTimeout(()=>T(s,r),t.maxDurationMs);try{const c=[];for(const[d,a]of n.pages.entries()){if(d<(e.start??0)||d>(e.end??n.pages.length-1)){c.push(a);continue}const u=[];for(const[g,l]of a.components.entries())u.push(await I(s,l,{component:l,pageIndex:d,componentIndex:g,componentPath:[]},new Set));c.push(u.some((g,l)=>g!==a.components[l])?{...a,components:u}:a)}return f(s.signal),{plan:c.some((d,a)=>d!==n.pages[a])?{...n,pages:c}:n,diagnostics:s.diagnostics}}finally{clearTimeout(i),e.signal?.removeEventListener("abort",o)}}exports.OutputAssetError=p;exports.resolveGridStrokes=B;exports.resolvePlanAssets=R;
@@ -0,0 +1,63 @@
1
+ import { a as l } from "./progress-DD964VAB.js";
2
+ import { b as S, i as w } from "./render-plan-uzZYYSy1.js";
3
+ function E(e, t) {
4
+ l(t.signal);
5
+ try {
6
+ t.onDiagnostic?.(e);
7
+ } catch {
8
+ }
9
+ l(t.signal);
10
+ }
11
+ class O extends Error {
12
+ constructor(t) {
13
+ super(`Output contains ${t.length} known fidelity issue(s): ${t[0]?.code}`), this.diagnostics = t, this.code = "output-fidelity", this.name = "OutputFidelityError";
14
+ }
15
+ }
16
+ const b = /* @__PURE__ */ new Set(["text", "rect", "line", "ellipse"]), $ = /* @__PURE__ */ new Set(["image", "chart", "barcode", "qrcode"]);
17
+ function N(e, t) {
18
+ if (!e.grid) {
19
+ if (w(e))
20
+ return t === "xlsx" ? { code: "unsupported-component", message: "XLSX data export omits image-backed components; use PDF or PNG for visual output." } : t === "pdf" && !/^data:image\/(png|jpe?g);base64,/i.test(e.imageData) ? { code: "unsupported-image-format", message: "PDF accepts PNG or JPEG data URLs; convert this image before exporting." } : void 0;
21
+ if ($.has(e.kind)) return { code: "missing-image", message: `${e.kind} requires imageData or a renderer adapter before output.` };
22
+ if (!b.has(e.kind)) return { code: "unsupported-component", message: `Unsupported component kind: ${e.kind}.` };
23
+ if (t === "xlsx" && e.kind !== "text") return { code: "unsupported-component", message: `XLSX data export omits ${e.kind} geometry.` };
24
+ }
25
+ }
26
+ function u(e, t, i, s, n) {
27
+ return { ...n, severity: "warning", format: t, pageIndex: i, componentIndex: s, kind: e.kind, nid: e.nid };
28
+ }
29
+ function h(e, t) {
30
+ if (!e || t === "dom") return;
31
+ const i = [];
32
+ return e.rotateDeg && i.push("rotateDeg"), e.opacity !== void 0 && e.opacity !== 1 && i.push("opacity"), t !== "xlsx" && e.align === "justify" && i.push("justify"), t === "canvas" && e.underline && i.push("underline"), t === "xlsx" && e.letterSpacing && i.push("letterSpacing"), i.length ? `${t} does not preserve these styles: ${i.join(", ")}.` : void 0;
33
+ }
34
+ function y(e, t, i, s, n, r, o) {
35
+ if (o.has(e)) return;
36
+ const v = new Set(o).add(e), p = N(e, t);
37
+ p && r.push({ ...u(e, t, i, s, p), componentPath: n });
38
+ const g = h(e.style, t);
39
+ g && r.push({ ...u(e, t, i, s, { code: "unsupported-style", message: g }), componentPath: n }), S(e) && t !== "dom" && r.push(u(e, t, i, s, { code: "rich-text-flattened", message: "Rich text is exported as plain text; inline styles are not preserved." }));
40
+ for (const [d, x] of (e.grid?.cells ?? []).entries()) for (const [a, c] of x.entries()) {
41
+ const f = h(c?.style, t);
42
+ if (f && r.push({ ...u(e, t, i, s, { code: "unsupported-style", message: f }), componentPath: [...n, d, a] }), c?.children?.length && t !== "dom")
43
+ r.push({ ...u(e, t, i, s, { code: "nested-components-omitted", message: "Nested grid components are omitted; cell text is preserved." }), componentPath: [...n, d, a] });
44
+ else if (t === "dom")
45
+ for (const [k, D] of (c?.children ?? []).entries()) y(D, t, i, s, [...n, d, a, k], r, v);
46
+ }
47
+ }
48
+ function j(e, t) {
49
+ const i = [];
50
+ return e.pages.forEach((s, n) => s.components.forEach((r, o) => y(r, t, n, o, [], i, /* @__PURE__ */ new Set()))), i;
51
+ }
52
+ function G(e, t, i) {
53
+ l(i.signal);
54
+ const s = j(e, t);
55
+ if (s.forEach((n) => E(n, i)), i.fidelity === "strict" && s.length) throw new O(s);
56
+ return s;
57
+ }
58
+ export {
59
+ O,
60
+ j as i,
61
+ E as n,
62
+ G as r
63
+ };
@@ -0,0 +1 @@
1
+ "use strict";const l=require("./progress-KvhwXZ1Q.cjs"),y=require("./render-plan-CckPEQyf.cjs");function v(e,t){l.assertOutputActive(t.signal);try{t.onDiagnostic?.(e)}catch{}l.assertOutputActive(t.signal)}class D extends Error{constructor(t){super(`Output contains ${t.length} known fidelity issue(s): ${t[0]?.code}`),this.diagnostics=t,this.code="output-fidelity",this.name="OutputFidelityError"}}const b=new Set(["text","rect","line","ellipse"]),$=new Set(["image","chart","barcode","qrcode"]);function C(e,t){if(!e.grid){if(y.isImageBackedComponent(e))return t==="xlsx"?{code:"unsupported-component",message:"XLSX data export omits image-backed components; use PDF or PNG for visual output."}:t==="pdf"&&!/^data:image\/(png|jpe?g);base64,/i.test(e.imageData)?{code:"unsupported-image-format",message:"PDF accepts PNG or JPEG data URLs; convert this image before exporting."}:void 0;if($.has(e.kind))return{code:"missing-image",message:`${e.kind} requires imageData or a renderer adapter before output.`};if(!b.has(e.kind))return{code:"unsupported-component",message:`Unsupported component kind: ${e.kind}.`};if(t==="xlsx"&&e.kind!=="text")return{code:"unsupported-component",message:`XLSX data export omits ${e.kind} geometry.`}}}function u(e,t,i,s,n){return{...n,severity:"warning",format:t,pageIndex:i,componentIndex:s,kind:e.kind,nid:e.nid}}function h(e,t){if(!e||t==="dom")return;const i=[];return e.rotateDeg&&i.push("rotateDeg"),e.opacity!==void 0&&e.opacity!==1&&i.push("opacity"),t!=="xlsx"&&e.align==="justify"&&i.push("justify"),t==="canvas"&&e.underline&&i.push("underline"),t==="xlsx"&&e.letterSpacing&&i.push("letterSpacing"),i.length?`${t} does not preserve these styles: ${i.join(", ")}.`:void 0}function O(e,t,i,s,n,r,o){if(o.has(e))return;const k=new Set(o).add(e),p=C(e,t);p&&r.push({...u(e,t,i,s,p),componentPath:n});const g=h(e.style,t);g&&r.push({...u(e,t,i,s,{code:"unsupported-style",message:g}),componentPath:n}),y.isRichText(e)&&t!=="dom"&&r.push(u(e,t,i,s,{code:"rich-text-flattened",message:"Rich text is exported as plain text; inline styles are not preserved."}));for(const[d,S]of(e.grid?.cells??[]).entries())for(const[c,a]of S.entries()){const f=h(a?.style,t);if(f&&r.push({...u(e,t,i,s,{code:"unsupported-style",message:f}),componentPath:[...n,d,c]}),a?.children?.length&&t!=="dom")r.push({...u(e,t,i,s,{code:"nested-components-omitted",message:"Nested grid components are omitted; cell text is preserved."}),componentPath:[...n,d,c]});else if(t==="dom")for(const[w,E]of(a?.children??[]).entries())O(E,t,i,s,[...n,d,c,w],r,k)}}function x(e,t){const i=[];return e.pages.forEach((s,n)=>s.components.forEach((r,o)=>O(r,t,n,o,[],i,new Set))),i}function F(e,t,i){l.assertOutputActive(i.signal);const s=x(e,t);if(s.forEach(n=>v(n,i)),i.fidelity==="strict"&&s.length)throw new D(s);return s}exports.OutputFidelityError=D;exports.inspectOutputCapabilities=x;exports.notifyOutputDiagnostic=v;exports.reportOutputDiagnostics=F;
package/dist/designer.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),M=require("@agile-team/mach-report/vue"),d=require("@agile-team/mach-report"),z=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),x={title:"报表模板属性编辑器",heading:"模板属性",unpublished:"未发布",dirty:"有未保存修改",reset:"恢复草稿",saving:"正在保存…",save:"保存草稿",name:"模板名称",description:"说明",area:"明细区域",page:"页",header:"表头",field:"业务字段",width:"列宽(mm)",semantic:"字段语义",identifier:"编号",dimension:"分类",measure:"数值",date:"日期",text:"文本",bodyAlign:"正文对齐",headerAlign:"表头对齐",auto:"按字段语义",left:"居左",center:"居中",right:"居右",justify:"两端对齐",editable:"允许编辑",json:"完整模板 JSON",applyJson:"校验并应用 JSON",note:"字段映射应与数据源契约一致。此编辑器维护模板属性;保存由接入方提供的版本服务处理。",invalid:"请先修正模板错误,再预览或保存。"};function J(o,T){const i=e.ref(d.parseReportTemplate(o.modelValue)),V=e.ref(d.serializeReportTemplate(i.value)),s=e.ref(0),h=e.ref(d.serializeReportTemplate(i.value)),y=e.ref(""),v=e.ref(!1),R=e.computed(()=>({...x,...o.messages})),E=e.computed(()=>({showExport:!1,showPrint:!1,showPdfWindow:!1,...o.preview,theme:{shellBg:"#f1f5f9",shellFg:"#334155",toolbarBg:"#ffffff",toolbarBorder:"#e2e8f0",toolbarFg:"#334155",btnFg:"#475569",btnBorder:"#cbd5e1",btnHoverBg:"#eff6ff",btnHoverFg:"#1d4ed8",btnActiveBg:"#2563eb",...o.preview?.theme}}));M.provideMachReportConfig({get defaults(){return E.value}});let S,b=0;const D=e.computed(()=>d.validateReportTemplateDocument(i.value)),w=e.computed(()=>{try{return d.serializeReportTemplate(i.value)!==V.value}catch{return!0}}),B=e.computed(()=>i.value.template.pages.flatMap((n,r)=>n.components.flatMap((l,c)=>l.kind==="list"?[{component:l,pageIndex:r,componentIndex:c}]:[]))),t=e.computed(()=>B.value[s.value]?.component),N=e.computed(()=>{const n=t.value;if(!n)return[];const r=n.columns.map(l=>l.headerStyle?.align??l.headerAlign??n.headerStyle?.align??n.headerAlign??l.style?.align??"center");if(n.headerGrid&&D.value.ok)for(const l of d.resolveGridLayout(n.headerGrid,n.widthMm,100).cells)for(let c=l.ci;c<l.ci+(l.cell.colSpan??1);c++)r[c]=l.cell.style?.align??"left";return r}),C=e.computed(()=>D.value.ok?M.createLocalFetcher({draft:{template:i.value.template,datasets:o.datasets??{},params:[]}}):void 0);function _(){b++,S?.abort(),S=void 0,v.value=!1}e.watch(()=>o.modelValue,n=>{const r=d.parseReportTemplate(n);try{if(d.serializeReportTemplate(r)===d.serializeReportTemplate(i.value))return}catch{}_(),i.value=r,V.value=d.serializeReportTemplate(r),h.value=V.value,y.value="",s.value=0}),e.onBeforeUnmount(_);function u(){y.value="",D.value.ok&&(h.value=d.serializeReportTemplate(i.value),T("update:modelValue",d.parseReportTemplate(i.value)))}function a(n){o.readonly||v.value||(i.value.name=n,u())}function f(n){o.readonly||v.value||(i.value.description=n,u())}function p(n,r,l){if(o.readonly||v.value)return;const c=t.value?.columns[n];c&&(Object.assign(c,{[r]:r==="widthMm"?Number(l):l}),r==="header"&&j(n,String(l)),r==="headerAlign"&&G(n,l),r==="widthMm"&&A(),u())}function A(){const n=B.value[s.value];if(!n)return;const r=n.component,l=i.value.template.pages[n.pageIndex],c=r.columns.map(m=>m.widthMm);r.headerGrid&&(r.headerGrid.colWidthsMm=c),l.layout==="wide"&&c.every(m=>Number.isFinite(m)&&m>0)&&(r.widthMm=c.reduce((m,g)=>m+g,0),l.widthMm=Math.max(...l.components.map(m=>m.leftMm+m.widthMm))+(l.marginRightMm??0))}function j(n,r){const l=t.value;if(!l?.headerGrid)return;const m=d.resolveGridLayout(l.headerGrid,l.widthMm,100).cells.filter(({ci:g,cell:k})=>g<=n&&g+(k.colSpan??1)>n).slice(-1)[0];m&&(Object.assign(m.cell,{text:r,rawText:r,value:r}),l.columns.slice(m.ci,m.ci+(m.cell.colSpan??1)).forEach(g=>{g.header=r}))}function G(n,r){const l=t.value,c=l?.columns[n];if(c?.headerStyle?.align!==void 0&&(c.headerStyle={...c.headerStyle,align:r}),!l?.headerGrid)return;const g=d.resolveGridLayout(l.headerGrid,l.widthMm,100).cells.filter(({ci:k,cell:O})=>k<=n&&k+(O.colSpan??1)>n).slice(-1)[0];g&&(g.cell.style={...g.cell.style,align:r},l.columns.slice(g.ci,g.ci+(g.cell.colSpan??1)).forEach(k=>{k.headerAlign=r,k.headerStyle?.align!==void 0&&(k.headerStyle={...k.headerStyle,align:r})}))}function L(){if(!(o.readonly||v.value))try{const n=d.parseReportTemplate(h.value);if(n.id!==i.value.id)throw new Error("属性编辑不允许更换模板 ID,请另存为新模板");if(n.revision!==i.value.revision)throw new Error("修订号由保存服务管理,不能在 JSON 中修改");i.value=n,s.value=0,u()}catch(n){y.value=n instanceof Error?n.message:String(n)}}function F(){v.value||o.readonly||(i.value=d.parseReportTemplate(V.value),h.value=V.value,y.value="",T("update:modelValue",d.parseReportTemplate(i.value)))}async function I(){if(!o.save||o.readonly||v.value||!D.value.ok)return;const n=++b;S=new AbortController,v.value=!0,y.value="";const r=d.parseReportTemplate(i.value);try{const l=d.parseReportTemplate(await o.save(r,{expectedRevision:r.revision,signal:S.signal}));if(n!==b)return;if(l.id!==r.id)throw new Error("保存服务返回了其他模板的文档");i.value=l,V.value=d.serializeReportTemplate(l),h.value=V.value,T("saved",d.parseReportTemplate(l)),T("update:modelValue",d.parseReportTemplate(l))}catch(l){n===b&&(y.value=l instanceof Error?l.message:String(l))}finally{n===b&&(v.value=!1,S=void 0)}}return{draft:i,json:h,selected:s,error:y,saving:v,dirty:w,validation:D,lists:B,activeList:t,headerAlignments:N,previewOptions:E,fetcher:C,messages:R,setName:a,setDescription:f,setColumn:p,applyJson:L,reset:F,save:I}}const P=["aria-label"],H={class:"mr-designer-bar"},q={key:0},U=["disabled"],W=["disabled"],$={class:"mr-designer-body"},K={class:"mr-designer-panel"},Q=["value","disabled"],X=["value","disabled"],Y={key:0},Z=["value"],ee={key:1,class:"mr-designer-columns"},te=["disabled"],ne=["value","onInput"],le=["value","onChange"],re=["value","onChange"],ae=["value","onChange"],oe={value:"identifier"},ie={value:"dimension"},se={value:"measure"},ue={value:"date"},de={value:"text"},ce=["value","onChange"],me={value:"auto"},fe={value:"left"},pe={value:"center"},ve={value:"right"},ge={value:"justify"},he=["value","onChange"],ye={value:"left"},Ee={value:"center"},Ve={value:"right"},be={value:"justify"},Ne={class:"mr-designer-toggle"},Se=["checked","onChange"],_e=["aria-label","disabled"],ke=["disabled"],De={class:"mr-designer-note"},Te={class:"mr-designer-preview"},Be={key:0,role:"alert",class:"mr-designer-error"},we={key:1,role:"alert",class:"mr-designer-error"},Re={key:3,class:"mr-designer-note"},Ce=e.defineComponent({__name:"ReportTemplateEditor",props:{modelValue:{},datasets:{},readonly:{type:Boolean},messages:{},preview:{},save:{type:Function}},emits:["update:modelValue","saved"],setup(o,{emit:T}){const i=o,V=T,s=J(i,(_,u)=>{V(_==="saved"?"saved":"update:modelValue",u)}),{draft:h,json:y,selected:v,error:R,saving:E,dirty:S,validation:b,lists:D,activeList:w,fetcher:B,messages:t}=s;function N(_){return _.target.value}function C(_){return _.target.checked}return(_,u)=>(e.openBlock(),e.createElementBlock("section",{class:"mr-designer","aria-label":e.unref(t).title},[e.createElementVNode("header",H,[e.createElementVNode("div",null,[e.createElementVNode("strong",null,e.toDisplayString(e.unref(t).heading),1),e.createElementVNode("span",null,[e.createTextVNode(e.toDisplayString(e.unref(h).id)+" · "+e.toDisplayString(e.unref(h).revision||e.unref(t).unpublished),1),e.unref(S)?(e.openBlock(),e.createElementBlock("b",q," · "+e.toDisplayString(e.unref(t).dirty),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",null,[e.createElementVNode("button",{type:"button",disabled:o.readonly||e.unref(E)||!e.unref(S),onClick:u[0]||(u[0]=(...a)=>e.unref(s).reset&&e.unref(s).reset(...a))},e.toDisplayString(e.unref(t).reset),9,U),o.save?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",disabled:o.readonly||e.unref(E)||!e.unref(b).ok||!e.unref(S),onClick:u[1]||(u[1]=(...a)=>e.unref(s).save&&e.unref(s).save(...a))},e.toDisplayString(e.unref(E)?e.unref(t).saving:e.unref(t).save),9,W)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",$,[e.createElementVNode("aside",K,[e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).name),1),e.createElementVNode("input",{value:e.unref(h).name,disabled:o.readonly||e.unref(E),onInput:u[2]||(u[2]=a=>e.unref(s).setName(N(a)))},null,40,Q)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).description),1),e.createElementVNode("textarea",{value:e.unref(h).description,disabled:o.readonly||e.unref(E),onInput:u[3]||(u[3]=a=>e.unref(s).setDescription(N(a)))},null,40,X)]),e.unref(D).length?(e.openBlock(),e.createElementBlock("label",Y,[e.createTextVNode(e.toDisplayString(e.unref(t).area),1),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":u[4]||(u[4]=a=>e.isRef(v)?v.value=a:null)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(D),(a,f)=>(e.openBlock(),e.createElementBlock("option",{key:f,value:f},e.toDisplayString(a.pageIndex+1)+" "+e.toDisplayString(e.unref(t).page)+" · "+e.toDisplayString(a.component.title||a.component.dataset),9,Z))),128))],512),[[e.vModelSelect,e.unref(v)]])])):e.createCommentVNode("",!0),e.unref(w)?(e.openBlock(),e.createElementBlock("div",ee,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(w).columns,(a,f)=>(e.openBlock(),e.createElementBlock("fieldset",{key:f,disabled:o.readonly||e.unref(E)},[e.createElementVNode("legend",null,e.toDisplayString(f+1)+" · "+e.toDisplayString(a.header),1),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).header),1),e.createElementVNode("input",{value:a.header,onInput:p=>e.unref(s).setColumn(f,"header",N(p))},null,40,ne)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).field),1),e.createElementVNode("input",{value:a.field,onChange:p=>e.unref(s).setColumn(f,"field",N(p))},null,40,le)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).width),1),e.createElementVNode("input",{type:"number",min:"0.1",step:"0.5",value:a.widthMm,onChange:p=>e.unref(s).setColumn(f,"widthMm",N(p))},null,40,re)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).semantic),1),e.createElementVNode("select",{value:a.semanticRole||"text",onChange:p=>e.unref(s).setColumn(f,"semanticRole",N(p))},[e.createElementVNode("option",oe,e.toDisplayString(e.unref(t).identifier),1),e.createElementVNode("option",ie,e.toDisplayString(e.unref(t).dimension),1),e.createElementVNode("option",se,e.toDisplayString(e.unref(t).measure),1),e.createElementVNode("option",ue,e.toDisplayString(e.unref(t).date),1),e.createElementVNode("option",de,e.toDisplayString(e.unref(t).text),1)],40,ae)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).bodyAlign),1),e.createElementVNode("select",{value:a.align??a.style?.align??e.unref(w).align??"left",onChange:p=>e.unref(s).setColumn(f,"align",N(p))},[e.createElementVNode("option",me,e.toDisplayString(e.unref(t).auto),1),e.createElementVNode("option",fe,e.toDisplayString(e.unref(t).left),1),e.createElementVNode("option",pe,e.toDisplayString(e.unref(t).center),1),e.createElementVNode("option",ve,e.toDisplayString(e.unref(t).right),1),e.createElementVNode("option",ge,e.toDisplayString(e.unref(t).justify),1)],40,ce)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).headerAlign),1),e.createElementVNode("select",{value:e.unref(s).headerAlignments.value[f],onChange:p=>e.unref(s).setColumn(f,"headerAlign",N(p))},[e.createElementVNode("option",ye,e.toDisplayString(e.unref(t).left),1),e.createElementVNode("option",Ee,e.toDisplayString(e.unref(t).center),1),e.createElementVNode("option",Ve,e.toDisplayString(e.unref(t).right),1),e.createElementVNode("option",be,e.toDisplayString(e.unref(t).justify),1)],40,he)]),e.createElementVNode("label",Ne,[e.createTextVNode(e.toDisplayString(e.unref(t).editable),1),e.createElementVNode("input",{type:"checkbox",checked:a.editable===!0,onChange:p=>e.unref(s).setColumn(f,"editable",C(p))},null,40,Se)])],8,te))),128))])):e.createCommentVNode("",!0),e.createElementVNode("details",null,[e.createElementVNode("summary",null,e.toDisplayString(e.unref(t).json),1),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":u[5]||(u[5]=a=>e.isRef(y)?y.value=a:null),class:"mr-designer-json","aria-label":e.unref(t).json,disabled:o.readonly||e.unref(E),spellcheck:"false"},null,8,_e),[[e.vModelText,e.unref(y)]]),e.createElementVNode("button",{type:"button",disabled:o.readonly||e.unref(E),onClick:u[6]||(u[6]=(...a)=>e.unref(s).applyJson&&e.unref(s).applyJson(...a))},e.toDisplayString(e.unref(t).applyJson),9,ke)]),e.createElementVNode("p",De,e.toDisplayString(e.unref(t).note),1)]),e.createElementVNode("div",Te,[e.unref(R)?(e.openBlock(),e.createElementBlock("div",Be,e.toDisplayString(e.unref(R)),1)):e.createCommentVNode("",!0),e.unref(b).ok?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("ul",we,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b).errors,a=>(e.openBlock(),e.createElementBlock("li",{key:a.path},e.toDisplayString(a.path)+":"+e.toDisplayString(a.message),1))),128))])),e.unref(B)&&e.unref(b).ok?(e.openBlock(),e.createBlock(e.unref(M.ReportPreview),{key:2,"report-id":"draft",fetcher:e.unref(B),"show-params":!1,editable:!1,"excel-import":!1},null,8,["fetcher"])):(e.openBlock(),e.createElementBlock("p",Re,e.toDisplayString(e.unref(t).invalid),1))])])],8,P))}}),Me=z._export_sfc(Ce,[["__scopeId","data-v-5c39594b"]]);exports.ReportTemplateEditor=Me;exports.TEMPLATE_EDITOR_MESSAGES=x;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),F=require("@agile-team/mach-report/vue"),p=require("@agile-team/mach-report"),K=require("./_plugin-vue_export-helper-BHFhmbuH.cjs");function Q(u,S,i,f){const d=e.ref(0),l=e.ref(""),h=e.ref([]),R=e.computed(()=>u.value.template.pages.flatMap((a,r)=>a.components.flatMap((o,c)=>o.kind==="list"?[{component:o,pageIndex:r,componentIndex:c}]:[]))),b=e.computed(()=>R.value[d.value]?.component),V=e.computed(()=>{const a=b.value;if(!a)return[];const r=a.columns.map(o=>o.headerStyle?.align??o.headerAlign??a.headerStyle?.align??a.headerAlign??o.style?.align??"center");if(a.headerGrid&&S())for(const o of p.resolveGridLayout(a.headerGrid,a.widthMm,100).cells)for(let c=o.ci;c<o.ci+(o.cell.colSpan??1);c++)r[c]=o.cell.style?.align??"left";return r}),E=e.computed(()=>{const a=l.value.trim().toLocaleLowerCase().split(/\s+/).filter(Boolean);return(b.value?.columns??[]).flatMap((r,o)=>{const c=`${r.header} ${r.field}`.toLocaleLowerCase();return a.every(y=>c.includes(y))?[{column:r,index:o}]:[]})});function v(a,r){h.value=r?[...new Set([...h.value,a])]:h.value.filter(o=>o!==a)}function N(a){for(const r of E.value)v(r.index,a)}function m(){h.value=[]}function M(a,r,o){if(!i())return;const c=b.value?.columns[a];c&&(Object.assign(c,{[r]:r==="widthMm"?Number(o):o}),r==="header"&&A(a,String(o)),r==="headerAlign"&&D(a,o),r==="widthMm"&&G(),f())}function G(){const a=R.value[d.value];if(!a)return;const r=a.component,o=u.value.template.pages[a.pageIndex],c=r.columns.map(y=>y.widthMm);r.headerGrid&&(r.headerGrid.colWidthsMm=c),o.layout==="wide"&&c.every(y=>Number.isFinite(y)&&y>0)&&(r.widthMm=c.reduce((y,t)=>y+t,0),o.widthMm=Math.max(...o.components.map(y=>y.leftMm+y.widthMm))+(o.marginRightMm??0))}function A(a,r){const o=b.value;if(!o?.headerGrid)return;const y=p.resolveGridLayout(o.headerGrid,o.widthMm,100).cells.filter(({ci:t,cell:T})=>t<=a&&t+(T.colSpan??1)>a).slice(-1)[0];y&&(Object.assign(y.cell,{text:r,rawText:r,value:r}),o.columns.slice(y.ci,y.ci+(y.cell.colSpan??1)).forEach(t=>{t.header=r}))}function D(a,r){const o=b.value,c=o?.columns[a];if(c?.headerStyle?.align!==void 0&&(c.headerStyle={...c.headerStyle,align:r}),!o?.headerGrid)return;const t=p.resolveGridLayout(o.headerGrid,o.widthMm,100).cells.filter(({ci:T,cell:L})=>T<=a&&T+(L.colSpan??1)>a).slice(-1)[0];t&&(t.cell.style={...t.cell.style,align:r},o.columns.slice(t.ci,t.ci+(t.cell.colSpan??1)).forEach(T=>{T.headerAlign=r,T.headerStyle?.align!==void 0&&(T.headerStyle={...T.headerStyle,align:r})}))}function j(a,r){if(!(!i()||a==="headerAlign"&&r==="auto")){for(const o of h.value){const c=b.value?.columns[o];c&&(Object.assign(c,{[a]:r}),a==="headerAlign"&&D(o,r))}f()}}return{selected:d,query:l,selectedColumns:h,lists:R,activeList:b,headerAlignments:V,visibleColumns:E,toggleColumn:v,selectVisible:N,clearSelection:m,setColumn:M,alignColumns:j}}function X(u,S={entries:100,bytes:16*1024*1024}){const i=e.ref([u]),f=e.ref(0),d=e.computed(()=>f.value>0),l=e.computed(()=>f.value+1<i.value.length),h=e.computed(()=>i.value[f.value]);function R(E){i.value=[E],f.value=0}function b(E){if(i.value[f.value]===E)return;const v=i.value.slice(0,f.value+1);v.push(E);let N=v.reduce((m,M)=>m+M.length*2,0);for(;v.length>1&&(v.length>S.entries||N>S.bytes);)N-=v.shift().length*2;i.value=v,f.value=i.value.length-1}function V(E){if(!(E<0?!d.value:!l.value))return f.value+=E,i.value[f.value]}return{canUndo:d,canRedo:l,current:h,reset:R,record:b,move:V}}function Y(u){const S=e.shallowRef(null),i=e.ref(!1);let f,d=0;function l(b){f?.(b),f=void 0,S.value=null}function h(){d++,l(!1),i.value=!1}async function R(b){h();const V=d,E=u();i.value=!0;try{const v=await new Promise((N,m)=>{if(f=N,!E){S.value=b;return}Promise.resolve().then(()=>d===V?E(b):!1).then(M=>{d===V&&l(M===!0)},M=>{d===V&&(f=void 0,S.value=null,m(M))})});return d===V&&v===!0}finally{d===V&&(i.value=!1)}}return e.onBeforeUnmount(h),{confirmation:S,pending:i,decide:l,request:R,cancel:h}}const Z={title:"报表模板属性编辑器",heading:"模板属性",unpublished:"未发布",dirty:"有未保存修改",reset:"恢复草稿",saving:"正在保存…",save:"保存草稿",name:"模板名称",description:"说明",area:"明细区域",page:"页",header:"表头",field:"业务字段",width:"列宽(mm)",semantic:"字段语义",identifier:"编号",dimension:"分类",measure:"数值",date:"日期",text:"文本",bodyAlign:"正文对齐",headerAlign:"表头对齐",auto:"按字段语义",left:"居左",center:"居中",right:"居右",justify:"两端对齐",editable:"允许编辑",json:"完整模板 JSON",applyJson:"校验并应用 JSON",note:"字段映射应与数据源契约一致。此编辑器维护模板属性;保存由接入方提供的版本服务处理。",invalid:"请先修正模板错误,再预览或保存。"},ee={undo:"撤销",redo:"重做",columnsSearch:"搜索列名或字段",columnsSelected:"已选列",selectVisible:"选择当前结果",clearSelection:"清除选择",noColumns:"没有匹配的列",batchBody:"批量正文对齐",batchHeader:"批量表头对齐",chooseAlignment:"选择对齐方式",discardTitle:"保留当前修改?",discardDescription:"当前包含未保存的属性或尚未应用的 JSON,继续将丢弃这些修改。",keepEditing:"继续编辑",discard:"丢弃修改并继续",jsonPending:"JSON 尚未应用。请先校验并应用,或撤销 JSON 修改后继续属性编辑与保存。"},H={...Z,...ee};function te(u,S){const i=e.ref(p.parseReportTemplate(u.modelValue)),f=e.ref(p.serializeReportTemplate(i.value)),d=e.ref(p.serializeReportTemplate(i.value)),l=e.ref(""),h=e.ref(!1),R=e.computed(()=>({...H,...u.messages})),b=e.computed(()=>({showExport:!1,showPrint:!1,showPdfWindow:!1,...u.preview,theme:{shellBg:"#f1f5f9",shellFg:"#334155",toolbarBg:"#ffffff",toolbarBorder:"#e2e8f0",toolbarFg:"#334155",btnFg:"#475569",btnBorder:"#cbd5e1",btnHoverBg:"#eff6ff",btnHoverFg:"#1d4ed8",btnActiveBg:"#2563eb",...u.preview?.theme}}));F.provideMachReportConfig({get defaults(){return b.value}});let V,E=0;const v=e.computed(()=>p.validateReportTemplateDocument(i.value)),N=e.computed(()=>{try{return p.serializeReportTemplate(i.value)!==f.value}catch{return!0}}),m=e.ref(d.value),M=e.computed(()=>d.value!==m.value),G=e.computed(()=>N.value||d.value!==m.value),A=()=>JSON.stringify({document:i.value,json:d.value,appliedJson:m.value}),D=X(A()),j=Y(()=>u.beforeDiscard),a=e.computed(()=>h.value||j.pending.value),r=()=>!u.readonly&&!a.value&&!M.value,o=Q(i,()=>v.value.ok,r,n),{selected:c,lists:y,activeList:t,headerAlignments:T,setColumn:L}=o;e.watch(c,()=>o.clearSelection());const x=e.computed(()=>v.value.ok?F.createLocalFetcher({draft:{template:i.value.template,datasets:u.datasets??{},params:[]}}):void 0);function P(){E++,V?.abort(),V=void 0,h.value=!1}let J=0;async function w(g="replace",B){if(!G.value)return!0;const _=A();try{return await j.request({reason:g,document:JSON.parse(JSON.stringify(i.value)),replacement:B?p.parseReportTemplate(B):void 0,pendingLocalChanges:!0})&&_===A()}catch(O){return l.value=O instanceof Error?O.message:String(O),!1}}function s(g){P(),i.value=g,f.value=p.serializeReportTemplate(g),d.value=f.value,m.value=d.value,l.value="",c.value=0,o.clearSelection(),D.reset(A())}e.watch(()=>u.modelValue,async g=>{let B;try{B=p.parseReportTemplate(g)}catch(O){l.value=O instanceof Error?O.message:String(O);return}try{if(p.serializeReportTemplate(B)===p.serializeReportTemplate(i.value))return}catch{}const _=++J;if(P(),!await w("replace",B)){_===J&&v.value.ok&&S("update:modelValue",p.parseReportTemplate(i.value));return}_===J&&s(B)}),e.onBeforeUnmount(()=>{J++,P()});function n(){j.cancel(),l.value="",v.value.ok&&(d.value=p.serializeReportTemplate(i.value),m.value=d.value,S("update:modelValue",p.parseReportTemplate(i.value))),D.record(A())}function k(g){r()&&(i.value.name=g,n())}function C(g){r()&&(i.value.description=g,n())}function U(){if(!(u.readonly||a.value))try{const g=p.parseReportTemplate(d.value);if(g.id!==i.value.id)throw new Error("属性编辑不允许更换模板 ID,请另存为新模板");if(g.revision!==i.value.revision)throw new Error("修订号由保存服务管理,不能在 JSON 中修改");i.value=g,c.value=0,o.clearSelection(),n()}catch(g){l.value=g instanceof Error?g.message:String(g)}}async function q(){a.value||u.readonly||!await w("reset")||(s(p.parseReportTemplate(f.value)),S("update:modelValue",p.parseReportTemplate(i.value)))}function I(g){if(a.value||u.readonly)return;D.record(A());const B=D.move(g);if(!B)return;j.cancel();const _=JSON.parse(B);i.value=_.document,d.value=_.json,m.value=_.appliedJson,l.value="",c.value=0,o.clearSelection(),v.value.ok&&S("update:modelValue",p.parseReportTemplate(i.value))}async function z(){if(!u.save||!r()||!v.value.ok)return;const g=++E;V=new AbortController,h.value=!0,l.value="";const B=p.parseReportTemplate(i.value);try{const _=p.parseReportTemplate(await u.save(B,{expectedRevision:B.revision,signal:V.signal}));if(g!==E)return;if(_.id!==B.id)throw new Error("保存服务返回了其他模板的文档");i.value=_,f.value=p.serializeReportTemplate(_),d.value=f.value,m.value=d.value,D.reset(A()),S("saved",p.parseReportTemplate(_)),S("update:modelValue",p.parseReportTemplate(_))}catch(_){g===E&&(l.value=_ instanceof Error?_.message:String(_))}finally{g===E&&(h.value=!1,V=void 0)}}const $=e.computed(()=>D.canUndo.value||A()!==D.current.value),W=e.computed(()=>D.canRedo.value&&A()===D.current.value);return{...o,canUndo:$,canRedo:W,undo:()=>I(-1),redo:()=>I(1),pendingLocalChanges:G,jsonPending:M,blocked:a,confirmation:j.confirmation,decideDiscard:j.decide,guardChanges:w,draft:i,json:d,selected:c,error:l,saving:h,dirty:N,validation:v,lists:y,activeList:t,headerAlignments:T,previewOptions:b,fetcher:x,messages:R,setName:k,setDescription:C,setColumn:L,applyJson:U,reset:q,save:z}}const ne=["aria-label"],le={class:"mr-designer-bar"},oe={key:0},re=["disabled"],ae=["disabled"],ie=["disabled"],se=["disabled"],ue=["aria-label"],ce={class:"mr-designer-body"},de={class:"mr-designer-panel"},fe=["value","disabled"],me=["value","disabled"],pe={key:0},ve=["value"],ge={key:1,class:"mr-designer-columns"},he={class:"mr-designer-column-tools"},ye=["disabled"],be=["disabled"],Ee={role:"status"},Se={key:0,class:"mr-designer-batch"},Ve=["aria-label","disabled"],Ne={value:""},_e={value:"auto"},De={value:"left"},ke={value:"center"},Ce={value:"right"},Te={value:"justify"},we=["aria-label","disabled"],Be={value:""},Re={value:"left"},Me={value:"center"},Ae={value:"right"},je={value:"justify"},xe={key:1,role:"status"},Le=["disabled"],Oe={class:"mr-designer-select-column"},Je=["checked","onChange"],Ge=["value","onInput"],Pe=["value","onChange"],Fe=["value","onChange"],Ie=["value","onChange"],He={value:"identifier"},Ue={value:"dimension"},qe={value:"measure"},ze={value:"date"},$e={value:"text"},We=["value","onChange"],Ke={value:"auto"},Qe={value:"left"},Xe={value:"center"},Ye={value:"right"},Ze={value:"justify"},et=["value","onChange"],tt={value:"left"},nt={value:"center"},lt={value:"right"},ot={value:"justify"},rt={class:"mr-designer-toggle"},at=["checked","onChange"],it=["aria-label","disabled"],st=["disabled"],ut={key:2,role:"status",class:"mr-designer-note"},ct={class:"mr-designer-note"},dt={class:"mr-designer-preview"},ft={key:0,role:"alert",class:"mr-designer-error"},mt={key:1,role:"alert",class:"mr-designer-error"},pt={key:3,class:"mr-designer-note"},vt=e.defineComponent({__name:"ReportTemplateEditor",props:{modelValue:{},datasets:{},readonly:{type:Boolean},messages:{},preview:{},beforeDiscard:{type:Function},save:{type:Function}},emits:["update:modelValue","saved"],setup(u,{expose:S,emit:i}){const f=u,d=i,l=te(f,(w,s)=>{d(w==="saved"?"saved":"update:modelValue",s)}),{draft:h,json:R,selected:b,error:V,saving:E,pendingLocalChanges:v,jsonPending:N,blocked:m,confirmation:M,canUndo:G,canRedo:A,validation:D,lists:j,activeList:a,visibleColumns:r,query:o,selectedColumns:c,fetcher:y,messages:t}=l,T=e.ref(null);let L=null;e.watch(M,async w=>{w?(L=document.activeElement,await e.nextTick(),T.value?.focus()):(await e.nextTick(),L?.isConnected&&L.focus(),L=null)}),S({get pendingLocalChanges(){return v.value},guardChanges:l.guardChanges,reset:l.reset,save:l.save});function x(w){return w.target.value}function P(w){return w.target.checked}function J(w,s){const n=w.target;l.alignColumns(s,n.value),n.value=""}return(w,s)=>(e.openBlock(),e.createElementBlock("section",{class:"mr-designer","aria-label":e.unref(t).title},[e.createElementVNode("header",le,[e.createElementVNode("div",null,[e.createElementVNode("strong",null,e.toDisplayString(e.unref(t).heading),1),e.createElementVNode("span",null,[e.createTextVNode(e.toDisplayString(e.unref(h).id)+" · "+e.toDisplayString(e.unref(h).revision||e.unref(t).unpublished),1),e.unref(v)?(e.openBlock(),e.createElementBlock("b",oe," · "+e.toDisplayString(e.unref(t).dirty),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",null,[e.createElementVNode("button",{type:"button",disabled:u.readonly||e.unref(m)||!e.unref(G),onClick:s[0]||(s[0]=(...n)=>e.unref(l).undo&&e.unref(l).undo(...n))},e.toDisplayString(e.unref(t).undo),9,re),e.createElementVNode("button",{type:"button",disabled:u.readonly||e.unref(m)||!e.unref(A),onClick:s[1]||(s[1]=(...n)=>e.unref(l).redo&&e.unref(l).redo(...n))},e.toDisplayString(e.unref(t).redo),9,ae),e.createElementVNode("button",{type:"button",disabled:u.readonly||e.unref(m)||!e.unref(v),onClick:s[2]||(s[2]=(...n)=>e.unref(l).reset&&e.unref(l).reset(...n))},e.toDisplayString(e.unref(t).reset),9,ie),u.save?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",disabled:u.readonly||e.unref(m)||e.unref(N)||!e.unref(D).ok||!e.unref(v),onClick:s[3]||(s[3]=(...n)=>e.unref(l).save&&e.unref(l).save(...n))},e.toDisplayString(e.unref(E)?e.unref(t).saving:e.unref(t).save),9,se)):e.createCommentVNode("",!0)])]),e.unref(M)?(e.openBlock(),e.createElementBlock("div",{key:0,role:"alertdialog","aria-label":e.unref(t).discardTitle,class:"mr-designer-confirm",onKeydown:s[6]||(s[6]=e.withKeys(e.withModifiers(n=>e.unref(l).decideDiscard(!1),["prevent"]),["esc"]))},[e.createElementVNode("strong",null,e.toDisplayString(e.unref(t).discardTitle),1),e.createElementVNode("p",null,e.toDisplayString(e.unref(t).discardDescription),1),e.createElementVNode("button",{ref_key:"keepButton",ref:T,type:"button",onClick:s[4]||(s[4]=n=>e.unref(l).decideDiscard(!1))},e.toDisplayString(e.unref(t).keepEditing),513),e.createElementVNode("button",{type:"button",onClick:s[5]||(s[5]=n=>e.unref(l).decideDiscard(!0))},e.toDisplayString(e.unref(t).discard),1)],40,ue)):e.createCommentVNode("",!0),e.createElementVNode("div",ce,[e.createElementVNode("aside",de,[e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).name),1),e.createElementVNode("input",{value:e.unref(h).name,disabled:u.readonly||e.unref(m)||e.unref(N),onInput:s[7]||(s[7]=n=>e.unref(l).setName(x(n)))},null,40,fe)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).description),1),e.createElementVNode("textarea",{value:e.unref(h).description,disabled:u.readonly||e.unref(m)||e.unref(N),onInput:s[8]||(s[8]=n=>e.unref(l).setDescription(x(n)))},null,40,me)]),e.unref(j).length?(e.openBlock(),e.createElementBlock("label",pe,[e.createTextVNode(e.toDisplayString(e.unref(t).area),1),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":s[9]||(s[9]=n=>e.isRef(b)?b.value=n:null)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(j),(n,k)=>(e.openBlock(),e.createElementBlock("option",{key:k,value:k},e.toDisplayString(n.pageIndex+1)+" "+e.toDisplayString(e.unref(t).page)+" · "+e.toDisplayString(n.component.title||n.component.dataset),9,ve))),128))],512),[[e.vModelSelect,e.unref(b)]])])):e.createCommentVNode("",!0),e.unref(a)?(e.openBlock(),e.createElementBlock("div",ge,[e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).columnsSearch),1),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":s[10]||(s[10]=n=>e.isRef(o)?o.value=n:null),type:"search"},null,512),[[e.vModelText,e.unref(o)]])]),e.createElementVNode("div",he,[e.createElementVNode("button",{type:"button",disabled:u.readonly||e.unref(m)||e.unref(N)||!e.unref(r).length,onClick:s[11]||(s[11]=n=>e.unref(l).selectVisible(!0))},e.toDisplayString(e.unref(t).selectVisible),9,ye),e.createElementVNode("button",{type:"button",disabled:!e.unref(c).length,onClick:s[12]||(s[12]=(...n)=>e.unref(l).clearSelection&&e.unref(l).clearSelection(...n))},e.toDisplayString(e.unref(t).clearSelection),9,be),e.createElementVNode("span",Ee,e.toDisplayString(e.unref(t).columnsSelected)+" "+e.toDisplayString(e.unref(c).length)+" / "+e.toDisplayString(e.unref(a).columns.length),1)]),e.unref(c).length?(e.openBlock(),e.createElementBlock("div",Se,[e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).batchBody),1),e.createElementVNode("select",{"aria-label":e.unref(t).batchBody,disabled:u.readonly||e.unref(m)||e.unref(N),onChange:s[13]||(s[13]=n=>J(n,"align"))},[e.createElementVNode("option",Ne,e.toDisplayString(e.unref(t).chooseAlignment),1),e.createElementVNode("option",_e,e.toDisplayString(e.unref(t).auto),1),e.createElementVNode("option",De,e.toDisplayString(e.unref(t).left),1),e.createElementVNode("option",ke,e.toDisplayString(e.unref(t).center),1),e.createElementVNode("option",Ce,e.toDisplayString(e.unref(t).right),1),e.createElementVNode("option",Te,e.toDisplayString(e.unref(t).justify),1)],40,Ve)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).batchHeader),1),e.createElementVNode("select",{"aria-label":e.unref(t).batchHeader,disabled:u.readonly||e.unref(m)||e.unref(N),onChange:s[14]||(s[14]=n=>J(n,"headerAlign"))},[e.createElementVNode("option",Be,e.toDisplayString(e.unref(t).chooseAlignment),1),e.createElementVNode("option",Re,e.toDisplayString(e.unref(t).left),1),e.createElementVNode("option",Me,e.toDisplayString(e.unref(t).center),1),e.createElementVNode("option",Ae,e.toDisplayString(e.unref(t).right),1),e.createElementVNode("option",je,e.toDisplayString(e.unref(t).justify),1)],40,we)])])):e.createCommentVNode("",!0),e.unref(r).length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("p",xe,e.toDisplayString(e.unref(t).noColumns),1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r),({column:n,index:k})=>(e.openBlock(),e.createElementBlock("fieldset",{key:k,disabled:u.readonly||e.unref(m)||e.unref(N)},[e.createElementVNode("legend",null,[e.createElementVNode("label",Oe,[e.createElementVNode("input",{type:"checkbox",checked:e.unref(c).includes(k),onChange:C=>e.unref(l).toggleColumn(k,P(C))},null,40,Je),e.createTextVNode(e.toDisplayString(k+1)+" · "+e.toDisplayString(n.header),1)])]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).header),1),e.createElementVNode("input",{value:n.header,onInput:C=>e.unref(l).setColumn(k,"header",x(C))},null,40,Ge)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).field),1),e.createElementVNode("input",{value:n.field,onChange:C=>e.unref(l).setColumn(k,"field",x(C))},null,40,Pe)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).width),1),e.createElementVNode("input",{type:"number",min:"0.1",step:"0.5",value:n.widthMm,onChange:C=>e.unref(l).setColumn(k,"widthMm",x(C))},null,40,Fe)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).semantic),1),e.createElementVNode("select",{value:n.semanticRole||"text",onChange:C=>e.unref(l).setColumn(k,"semanticRole",x(C))},[e.createElementVNode("option",He,e.toDisplayString(e.unref(t).identifier),1),e.createElementVNode("option",Ue,e.toDisplayString(e.unref(t).dimension),1),e.createElementVNode("option",qe,e.toDisplayString(e.unref(t).measure),1),e.createElementVNode("option",ze,e.toDisplayString(e.unref(t).date),1),e.createElementVNode("option",$e,e.toDisplayString(e.unref(t).text),1)],40,Ie)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).bodyAlign),1),e.createElementVNode("select",{value:n.align??n.style?.align??e.unref(a).align??"left",onChange:C=>e.unref(l).setColumn(k,"align",x(C))},[e.createElementVNode("option",Ke,e.toDisplayString(e.unref(t).auto),1),e.createElementVNode("option",Qe,e.toDisplayString(e.unref(t).left),1),e.createElementVNode("option",Xe,e.toDisplayString(e.unref(t).center),1),e.createElementVNode("option",Ye,e.toDisplayString(e.unref(t).right),1),e.createElementVNode("option",Ze,e.toDisplayString(e.unref(t).justify),1)],40,We)]),e.createElementVNode("label",null,[e.createTextVNode(e.toDisplayString(e.unref(t).headerAlign),1),e.createElementVNode("select",{value:e.unref(l).headerAlignments.value[k],onChange:C=>e.unref(l).setColumn(k,"headerAlign",x(C))},[e.createElementVNode("option",tt,e.toDisplayString(e.unref(t).left),1),e.createElementVNode("option",nt,e.toDisplayString(e.unref(t).center),1),e.createElementVNode("option",lt,e.toDisplayString(e.unref(t).right),1),e.createElementVNode("option",ot,e.toDisplayString(e.unref(t).justify),1)],40,et)]),e.createElementVNode("label",rt,[e.createTextVNode(e.toDisplayString(e.unref(t).editable),1),e.createElementVNode("input",{type:"checkbox",checked:n.editable===!0,onChange:C=>e.unref(l).setColumn(k,"editable",P(C))},null,40,at)])],8,Le))),128))])):e.createCommentVNode("",!0),e.createElementVNode("details",null,[e.createElementVNode("summary",null,e.toDisplayString(e.unref(t).json),1),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":s[15]||(s[15]=n=>e.isRef(R)?R.value=n:null),class:"mr-designer-json","aria-label":e.unref(t).json,disabled:u.readonly||e.unref(m),spellcheck:"false"},null,8,it),[[e.vModelText,e.unref(R)]]),e.createElementVNode("button",{type:"button",disabled:u.readonly||e.unref(m),onClick:s[16]||(s[16]=(...n)=>e.unref(l).applyJson&&e.unref(l).applyJson(...n))},e.toDisplayString(e.unref(t).applyJson),9,st)]),e.unref(N)?(e.openBlock(),e.createElementBlock("p",ut,e.toDisplayString(e.unref(t).jsonPending),1)):e.createCommentVNode("",!0),e.createElementVNode("p",ct,e.toDisplayString(e.unref(t).note),1)]),e.createElementVNode("div",dt,[e.unref(V)?(e.openBlock(),e.createElementBlock("div",ft,e.toDisplayString(e.unref(V)),1)):e.createCommentVNode("",!0),e.unref(D).ok?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("ul",mt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(D).errors,n=>(e.openBlock(),e.createElementBlock("li",{key:n.path},e.toDisplayString(n.path)+":"+e.toDisplayString(n.message),1))),128))])),e.unref(y)&&e.unref(D).ok?(e.openBlock(),e.createBlock(e.unref(F.ReportPreview),{key:2,"report-id":"draft",fetcher:e.unref(y),"show-params":!1,editable:!1,"excel-import":!1},null,8,["fetcher"])):(e.openBlock(),e.createElementBlock("p",pt,e.toDisplayString(e.unref(t).invalid),1))])])],8,ne))}}),gt=K._export_sfc(vt,[["__scopeId","data-v-e2d0e1d5"]]);exports.ReportTemplateEditor=gt;exports.TEMPLATE_EDITOR_MESSAGES=H;