@agile-team/mach-report 2.21.1 → 2.23.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 (169) hide show
  1. package/README.md +20 -5
  2. package/dist/{ExcelBindingWizard-mnAO2qOX.js → ExcelBindingWizard-D4FLind-.js} +3 -3
  3. package/dist/{ExcelBindingWizard-Bu0LUlzl.cjs → ExcelBindingWizard-D4RS5Bpg.cjs} +1 -1
  4. package/dist/{ParamEditor-38ZfNrPU.cjs → ParamEditor-C-6C9rd2.cjs} +1 -1
  5. package/dist/{ParamEditor-C8l0EC8m.js → ParamEditor-CASZt-Ma.js} +2 -2
  6. package/dist/{ReportBatchPanel-CfUVhvkO.js → ReportBatchPanel-Bq7t8a5r.js} +2 -2
  7. package/dist/{ReportBatchPanel-nCC06Nfp.cjs → ReportBatchPanel-YVj5IO5y.cjs} +1 -1
  8. package/dist/ReportLabelStudio-Cqhita1b.cjs +1 -0
  9. package/dist/ReportLabelStudio-Dj7GXhuv.js +783 -0
  10. package/dist/ReportParamPanel-DZbFVmDL.cjs +1 -0
  11. package/dist/{ReportParamPanel-peB-KEmm.js → ReportParamPanel-Dgmqro1Y.js} +265 -244
  12. package/dist/ReportPreview-DeWzG8jQ.js +6257 -0
  13. package/dist/ReportPreview-FFIryrIr.cjs +6 -0
  14. package/dist/{ReportTemplateLibrary-DVlsf72p.cjs → ReportTemplateLibrary-BaWodmpm.cjs} +1 -1
  15. package/dist/{ReportTemplateLibrary-B5t_EcIs.js → ReportTemplateLibrary-DdAAAD2I.js} +1 -1
  16. package/dist/{RuleEditor-kT1JsZ9f.js → RuleEditor-D2UwQGF6.js} +59 -59
  17. package/dist/{RuleEditor-xFkCVlii.cjs → RuleEditor-DcT9xI1v.cjs} +1 -1
  18. package/dist/TemplateOutlinePanel-CUHFFiNM.cjs +1 -0
  19. package/dist/{TemplateOutlinePanel-BesgGR1P.js → TemplateOutlinePanel-DrT7XN0m.js} +2 -2
  20. package/dist/{TemplateReusePanel-BNFU6V-W.js → TemplateReusePanel-4eejkNqi.js} +2 -2
  21. package/dist/{TemplateReusePanel-BG9Or5-P.cjs → TemplateReusePanel-DZMyiX5I.cjs} +1 -1
  22. package/dist/{TemplateReviewPanel-CwvwyCSs.js → TemplateReviewPanel-BIhNLeNw.js} +2 -2
  23. package/dist/TemplateReviewPanel-DnYImiXu.cjs +1 -0
  24. package/dist/analytics.cjs +1 -1
  25. package/dist/analytics.js +26 -26
  26. package/dist/artifact-integrity.json +108 -106
  27. package/dist/assets-D2gHc4Mz.cjs +1 -0
  28. package/dist/assets-T_gDeFaz.js +132 -0
  29. package/dist/auto-4pK9HePf.cjs +1 -0
  30. package/dist/auto-CTIJ6PnR.js +257 -0
  31. package/dist/capabilities-DiBj4Qgl.cjs +1 -0
  32. package/dist/capabilities-pg7j7VLT.js +106 -0
  33. package/dist/charts-Cjw5AYkg.cjs +1 -0
  34. package/dist/{charts-Dlv8j2AG.js → charts-CxJZ0XaY.js} +1 -1
  35. package/dist/computed-DK6BruFz.cjs +1 -0
  36. package/dist/{computed-C8NRZQss.js → computed-f3pOqWLX.js} +381 -301
  37. package/dist/data-bar-CeZuFmYl.cjs +1 -0
  38. package/dist/{data-bar-8baGYEZ9.js → data-bar-IkI6VvMQ.js} +1 -1
  39. package/dist/designer-DhrE7jzw.js +7169 -0
  40. package/dist/designer-IAZu6kBX.cjs +2 -0
  41. package/dist/designer.cjs +1 -1
  42. package/dist/designer.d.cts +246 -46
  43. package/dist/designer.d.ts +246 -46
  44. package/dist/designer.js +15 -14
  45. package/dist/dom-ChE5D-L-.cjs +1 -0
  46. package/dist/dom-JWrchIre.js +452 -0
  47. package/dist/dom-cell-address-DLD1mkTB.cjs +1 -0
  48. package/dist/dom-cell-address-Fn-8nk7D.js +11 -0
  49. package/dist/{encoding-B79hW4zq.cjs → encoding-BefcaHdp.cjs} +1 -1
  50. package/dist/{encoding-BSeUwrN7.js → encoding-CL6rXEkR.js} +2 -2
  51. package/dist/{font-loader-Di0lQKFf.js → font-loader-BT5baV-o.js} +1 -1
  52. package/dist/{font-loader-BB372_XN.cjs → font-loader-Ga51c2VC.cjs} +1 -1
  53. package/dist/grid-strokes-Be24LGuV.cjs +1 -0
  54. package/dist/grid-strokes-EoY66L2f.js +53 -0
  55. package/dist/index.cjs +8 -8
  56. package/dist/index.d.cts +44 -1
  57. package/dist/index.d.ts +44 -1
  58. package/dist/index.js +961 -1256
  59. package/dist/json-snapshot-1tvQNzQE.cjs +2 -0
  60. package/dist/{json-snapshot-Kgn459Oj.js → json-snapshot-OqkPyUk5.js} +763 -776
  61. package/dist/matrix-B8QWbsGM.cjs +1 -0
  62. package/dist/matrix-C6e_r_vp.js +302 -0
  63. package/dist/{pdf-CARdBcuw.cjs → pdf-HiEeXe9H.cjs} +42 -42
  64. package/dist/{pdf-DmlnL5eB.js → pdf-aobetCsy.js} +20 -20
  65. package/dist/pdf.cjs +1 -1
  66. package/dist/pdf.js +2 -2
  67. package/dist/{plugin-BaRUGORD.cjs → plugin-BFANt-i8.cjs} +1 -1
  68. package/dist/{plugin-D4kAxfLG.js → plugin-DeYYAL6F.js} +1 -1
  69. package/dist/{prefill-CJSazcVY.js → prefill-Dk4C6S5R.js} +21 -21
  70. package/dist/prefill-DsUD5OoK.cjs +1 -0
  71. package/dist/prepared-DCIxhKFo.js +94 -0
  72. package/dist/prepared-Dv-XM3i1.cjs +1 -0
  73. package/dist/progress-ByiOxUD3.js +250 -0
  74. package/dist/progress-WomPRP3B.cjs +1 -0
  75. package/dist/{protocol-C8VWF9An.cjs → protocol-B9YgfQ_d.cjs} +1 -1
  76. package/dist/{protocol-Bs9-ohHN.js → protocol-DxeUKGYG.js} +3 -3
  77. package/dist/record-bindings-DatJZv_e.js +200 -0
  78. package/dist/record-bindings-MBxbeBsi.cjs +1 -0
  79. package/dist/{region-binding-workflow-Cy4GIOUo.js → region-binding-workflow-DjrXuR1q.js} +2 -2
  80. package/dist/{region-binding-workflow-JNowHd0A.cjs → region-binding-workflow-l7NGfagJ.cjs} +2 -2
  81. package/dist/report-encoding-worker.cjs +1 -1
  82. package/dist/report-encoding-worker.js +1 -1
  83. package/dist/rich-text-layout-Ciwa6D2o.js +52 -0
  84. package/dist/rich-text-layout-DK7A_a5r.cjs +3 -0
  85. package/dist/{runtime-BDf5x1i1.js → runtime-75Y5Oq5B.js} +52 -51
  86. package/dist/runtime-DKlGd_D4.cjs +1 -0
  87. package/dist/sbom.cdx.json +1 -1
  88. package/dist/server/node.d.cts +9 -0
  89. package/dist/server/node.d.ts +9 -0
  90. package/dist/server-node.cjs +5 -4
  91. package/dist/server-node.js +2178 -2044
  92. package/dist/server.cjs +1 -1
  93. package/dist/server.d.cts +81 -0
  94. package/dist/server.d.ts +81 -0
  95. package/dist/server.js +24 -24
  96. package/dist/style.css +1 -1
  97. package/dist/{template-catalog-DFwIS9aN.js → template-catalog--cjxzgH7.js} +17 -17
  98. package/dist/template-catalog-CoT7jm_6.cjs +1 -0
  99. package/dist/{template-fragments-Dng-AlHk.js → template-fragments-CPpGpQoz.js} +24 -24
  100. package/dist/{template-fragments-DZVUBhuB.cjs → template-fragments-GVjpew_q.cjs} +1 -1
  101. package/dist/template-registry-DI59PXVK.cjs +1 -0
  102. package/dist/{template-registry-DhBqoD7W.js → template-registry-O0hNIOfB.js} +333 -261
  103. package/dist/template-serialization-CWmHq7lX.js +307 -0
  104. package/dist/template-serialization-CqQY4zDg.cjs +1 -0
  105. package/dist/{textwrap-CkGjRFT3.js → textwrap-BIjtEWmq.js} +1 -1
  106. package/dist/textwrap-Cy7o1hIR.cjs +4 -0
  107. package/dist/vue/async.d.cts +121 -2
  108. package/dist/vue/async.d.ts +121 -2
  109. package/dist/vue/index.d.cts +222 -5
  110. package/dist/vue/index.d.ts +222 -5
  111. package/dist/vue-async.cjs +1 -1
  112. package/dist/vue-async.js +3 -3
  113. package/dist/vue.cjs +1 -1
  114. package/dist/vue.js +101 -91
  115. package/dist/{workbook-session-NYv01LHe.cjs → workbook-session-C6-SrnCT.cjs} +4 -4
  116. package/dist/{workbook-session-oinxX3qo.js → workbook-session-C9ZmCBwY.js} +15 -16
  117. package/dist/workbook-sheets-CaPAulQ6.cjs +2 -0
  118. package/dist/workbook-sheets-D4M7XXBh.js +44 -0
  119. package/dist/worker.cjs +1 -1
  120. package/dist/worker.d.cts +9 -0
  121. package/dist/worker.d.ts +9 -0
  122. package/dist/worker.js +4 -4
  123. package/dist/xlsx.cjs +4 -4
  124. package/dist/xlsx.d.cts +39 -2
  125. package/dist/xlsx.d.ts +39 -2
  126. package/dist/xlsx.js +300 -275
  127. package/package.json +1 -1
  128. package/dist/ReportLabelStudio-CaEvYuSK.cjs +0 -1
  129. package/dist/ReportLabelStudio-DQPBmh4v.js +0 -765
  130. package/dist/ReportParamPanel-CVpK8mFc.cjs +0 -1
  131. package/dist/ReportPreview-BBJNlu2U.js +0 -5740
  132. package/dist/ReportPreview-nf4Dk1Jc.cjs +0 -6
  133. package/dist/TemplateOutlinePanel-CDI6mfWx.cjs +0 -1
  134. package/dist/TemplateReviewPanel-BmBrjt6P.cjs +0 -1
  135. package/dist/assets-CxHunY_9.js +0 -232
  136. package/dist/assets-vbjAGgk8.cjs +0 -1
  137. package/dist/auto-BkdGiNtr.js +0 -240
  138. package/dist/auto-Tq7ReIC1.cjs +0 -1
  139. package/dist/charts-aCtoswXq.cjs +0 -1
  140. package/dist/component-tree-1_QCiQJX.js +0 -67
  141. package/dist/component-tree-BjZIp6w9.cjs +0 -1
  142. package/dist/computed-4TnxzgIh.cjs +0 -1
  143. package/dist/data-bar-YltqGTaC.cjs +0 -1
  144. package/dist/designer-DU3yDWgs.cjs +0 -2
  145. package/dist/designer-HQi-03R6.js +0 -6869
  146. package/dist/grid-geometry-D3SJgWFv.js +0 -136
  147. package/dist/grid-geometry-D8ReblRV.cjs +0 -1
  148. package/dist/json-snapshot-I5VI84Vp.cjs +0 -2
  149. package/dist/matrix-0hywp0-F.cjs +0 -1
  150. package/dist/matrix-Dy-tyY7E.js +0 -381
  151. package/dist/prefill-Bpyn58AZ.cjs +0 -1
  152. package/dist/prepared-BiSz_9vN.cjs +0 -1
  153. package/dist/prepared-BwjwEzFz.js +0 -87
  154. package/dist/progress-B0ctFpKf.cjs +0 -1
  155. package/dist/progress-Hc2vxoCs.js +0 -52
  156. package/dist/record-bindings-Ct1HkPrc.cjs +0 -1
  157. package/dist/record-bindings-VZGS-Qd8.js +0 -155
  158. package/dist/rich-text-layout-K48VHUoW.cjs +0 -3
  159. package/dist/rich-text-layout-wxBhnAS7.js +0 -102
  160. package/dist/runtime-DsJt1PIf.cjs +0 -1
  161. package/dist/template-bindings-Cg5oBLFT.cjs +0 -1
  162. package/dist/template-bindings-TKnXM7ll.js +0 -62
  163. package/dist/template-catalog-D_2jdnkL.cjs +0 -1
  164. package/dist/template-outline-DWkzZXVC.cjs +0 -1
  165. package/dist/template-outline-DiADphlq.js +0 -88
  166. package/dist/template-registry-DpLUSLwF.cjs +0 -1
  167. package/dist/template-serialization-Cc3h-miv.js +0 -247
  168. package/dist/template-serialization-D1R5oAqh.cjs +0 -1
  169. package/dist/textwrap-OTOUMr4f.cjs +0 -4
@@ -1,247 +0,0 @@
1
- import { e as x, c as v } from "./computed-C8NRZQss.js";
2
- class V extends Error {
3
- constructor(e) {
4
- super(`树节点超出行数预算 ${e}`), this.limit = e, this.code = "tree-row-limit", this.name = "TreeRowLimitError";
5
- }
6
- }
7
- function p(r, e, n, i) {
8
- const t = r ?? e;
9
- if (!Number.isInteger(t) || t < 1 || t > n) throw new Error(`${i}应为 1–${n} 的整数`);
10
- return t;
11
- }
12
- function y(r) {
13
- return { rows: p(r.maxRows, 1e5, 1e6, "树行数预算"), depth: p(r.maxDepth, 64, 256, "树深度预算"), visits: p(r.maxAggregationVisits, 1e6, 1e7, "树聚合访问预算") };
14
- }
15
- function A(r) {
16
- return typeof r == "string" && !!r.trim();
17
- }
18
- function h(r) {
19
- return A(r) && !["__proto__", "prototype", "constructor"].includes(r);
20
- }
21
- function M(r) {
22
- if (A(r) || typeof r == "number" && Number.isFinite(r)) return r;
23
- throw new Error("树节点业务键应为非空字符串或有限数字");
24
- }
25
- function N(r) {
26
- return JSON.stringify([typeof r, r]);
27
- }
28
- function k(r) {
29
- return [r.idField, ...r.input === "flat" ? [r.parentField ?? ""] : [r.childrenField ?? "children"]];
30
- }
31
- function O(r, e) {
32
- const n = k(r);
33
- if (e?.some((i) => i.scope && i.scope !== "row" || n.includes(i.field))) throw new Error("树形布局仅支持不覆盖结构键的当前行计算");
34
- }
35
- function w(r) {
36
- if (!r?.aborted) return;
37
- const e = new Error("树报表处理已取消");
38
- throw e.name = "AbortError", e;
39
- }
40
- function $(r) {
41
- const e = r.aggregates ?? [];
42
- if (!Array.isArray(e) || e.length > 32) throw new Error("树聚合最多 32 项");
43
- if (r.parentValues !== "leaf-aggregate" && e.length) throw new Error("树聚合需显式选择 leaf-aggregate 父级取值策略");
44
- if (r.parentValues === "leaf-aggregate" && !e.length) throw new Error("叶子聚合策略至少需要一个聚合字段");
45
- const n = /* @__PURE__ */ new Set();
46
- for (const i of e) {
47
- if (!i || !h(i.field) || n.has(i.field)) throw new Error("树聚合输出字段应安全、非空且唯一");
48
- for (const t of [i.valueField, i.weightField]) if (t !== void 0 && !h(t)) throw new Error("树聚合来源字段应安全且非空");
49
- if ([...k(r), r.labelField].includes(i.field)) throw new Error("树聚合不能覆盖结构键或标签字段");
50
- n.add(i.field), v({ ...i, field: i.valueField ?? i.field });
51
- }
52
- }
53
- function R(r) {
54
- if (!h(r.idField) || !h(r.labelField)) throw new Error("树需要安全的业务键和标签字段");
55
- if (r.input === "flat" && (!h(r.parentField) || r.parentField === r.idField)) throw new Error("扁平树需要独立的父键字段");
56
- if (r.childrenField !== void 0 && !h(r.childrenField)) throw new Error("子节点字段应安全且非空");
57
- if (r.input === "nested" && [r.idField, r.labelField].includes(r.childrenField ?? "children")) throw new Error("子节点字段不能覆盖业务键或标签字段");
58
- }
59
- function I(r) {
60
- if (!r || typeof r != "object" || !["flat", "nested"].includes(r.input)) throw new Error("树输入应为 flat 或 nested");
61
- if (R(r), r.orphan !== void 0 && !["error", "root"].includes(r.orphan)) throw new Error("树孤儿策略应为 error 或 root");
62
- if (r.parentValues !== void 0 && !["source", "leaf-aggregate"].includes(r.parentValues)) throw new Error("未知树父级取值策略");
63
- if (r.indentMm !== void 0 && (!Number.isFinite(r.indentMm) || r.indentMm < 0 || r.indentMm > 20)) throw new Error("树每级缩进应为 0–20 mm");
64
- y(r), $(r);
65
- }
66
- function C(r, e, n, i) {
67
- if (!r || typeof r != "object" || Array.isArray(r)) throw new Error("树节点应为对象");
68
- if (n.size >= i.rows) throw new V(i.rows);
69
- const t = M(r[e.idField]), f = N(t);
70
- if (n.has(f)) throw new Error(`树节点业务键重复:${String(t)}`);
71
- const o = { original: r, row: r, key: t, depth: 0, children: [] };
72
- return n.set(f, o), o;
73
- }
74
- function _(r, e, n, i, t) {
75
- for (const o of r)
76
- w(t), C(o, e, n, i);
77
- const f = [];
78
- for (const o of n.values()) {
79
- w(t);
80
- const a = o.row[e.parentField];
81
- if (a == null) {
82
- f.push(o);
83
- continue;
84
- }
85
- const l = n.get(N(M(a)));
86
- if (!l) {
87
- if (e.orphan !== "root") throw new Error(`树节点 ${String(o.key)} 的父节点不存在`);
88
- f.push(o);
89
- continue;
90
- }
91
- if (l === o) throw new Error("树节点不能以自身为父节点");
92
- o.parent = l, l.children.push(o);
93
- }
94
- return f;
95
- }
96
- function j(r, e, n, i, t) {
97
- const f = [], o = [{ rows: r, next: 0 }];
98
- for (; o.length; ) {
99
- w(t);
100
- const a = o[o.length - 1];
101
- if (a.next >= a.rows.length) {
102
- o.pop();
103
- continue;
104
- }
105
- const l = C(a.rows[a.next++], e, n, i);
106
- if (l.parent = a.parent, l.depth = o.length - 1, o.length > i.depth) throw new Error(`树节点超出深度预算 ${i.depth}`);
107
- (a.parent?.children ?? f).push(l);
108
- const s = l.row[e.childrenField ?? "children"];
109
- if (s != null) {
110
- if (!Array.isArray(s)) throw new Error("嵌套树 children 字段应为数组");
111
- s.length && o.push({ rows: s, next: 0, parent: l });
112
- }
113
- }
114
- return f;
115
- }
116
- function J(r, e, n, i) {
117
- const t = [], f = [{ nodes: r, next: 0 }];
118
- for (; f.length; ) {
119
- w(i);
120
- const o = f[f.length - 1];
121
- if (o.next >= o.nodes.length) {
122
- f.pop();
123
- continue;
124
- }
125
- if (f.length > n.depth) throw new Error(`树节点超出深度预算 ${n.depth}`);
126
- const a = o.nodes[o.next++];
127
- a.depth = f.length - 1, t.push(a), a.children.length && f.push({ nodes: a.children, next: 0 });
128
- }
129
- if (t.length !== e) throw new Error("树父子关系存在循环");
130
- return t;
131
- }
132
- function L(r, e, n, i) {
133
- if (e.parentValues !== "leaf-aggregate") return;
134
- const t = e.aggregates, f = /* @__PURE__ */ new Map();
135
- for (const a of r) a.children.length && f.set(a, t.map((l) => v({ ...l, field: l.valueField ?? l.field })));
136
- let o = 0;
137
- for (const a of r)
138
- if (!a.children.length)
139
- for (let l = a.parent; l; l = l.parent) {
140
- if (w(i), o += t.length, o > n.visits) throw new Error(`树聚合超出访问预算 ${n.visits}`);
141
- for (const s of f.get(l)) s.add(a.row);
142
- }
143
- for (const [a, l] of f)
144
- a.row = { ...a.row }, t.forEach((s, c) => {
145
- a.row[s.field] = l[c].value();
146
- });
147
- }
148
- function T(r, e, n) {
149
- if (I(e), w(n), !Array.isArray(r)) throw new Error("树数据应为节点数组");
150
- const i = y(e), t = /* @__PURE__ */ new Map(), f = e.input === "flat" ? _(r, e, t, i, n) : j(r, e, t, i, n);
151
- return J(f, t.size, i, n);
152
- }
153
- function X(r, e, n) {
154
- return T(r, e, n).map((i) => i.original);
155
- }
156
- function q(r, e, n = {}) {
157
- const i = T(r, e, n.signal);
158
- if (O(e, n.computed?.fields), n.computed?.fields.length) {
159
- const t = x(i.map((f) => f.row), { ...n.computed, signal: n.signal }).rows;
160
- i.forEach((f, o) => {
161
- f.row = t[o];
162
- });
163
- }
164
- return L(i, e, y(e), n.signal), { rows: i.map((t) => t.row), entries: i.map((t) => ({ row: t.row, original: t.original, key: t.key, depth: t.depth, hasChildren: !!t.children.length })), leaves: i.filter((t) => !t.children.length).map((t) => t.row) };
165
- }
166
- const B = /^#[0-9a-f]{6}$/i;
167
- function D(r) {
168
- if (!r || typeof r != "object" || Array.isArray(r)) return !1;
169
- const e = r;
170
- return e.kind !== "colorScale" && e.kind !== "dataBar" || e.field !== void 0 && (typeof e.field != "string" || !e.field.trim()) || e.numeric !== void 0 && !["number", "decimal"].includes(e.numeric) || [e.min, e.max].some((n) => n !== void 0 && (typeof n != "number" || !Number.isFinite(n))) || e.min !== void 0 && e.max !== void 0 && e.min > e.max ? !1 : Object.entries(e).every(([n, i]) => !["color", "negativeColor", "lowColor", "highColor"].includes(n) || typeof i == "string" && B.test(i));
171
- }
172
- function S(r, e) {
173
- if (typeof r == "number") return Number.isFinite(r) ? r : void 0;
174
- if (e !== "decimal" || typeof r != "string" || r.length > 1024 || !/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/.test(r)) return;
175
- const n = Number(r);
176
- return Number.isFinite(n) ? n : void 0;
177
- }
178
- function z(r, e, n) {
179
- let i = "#";
180
- for (const t of [1, 3, 5]) {
181
- const f = parseInt(r.slice(t, t + 2), 16), o = parseInt(e.slice(t, t + 2), 16);
182
- i += Math.round(f + (o - f) * n).toString(16).padStart(2, "0");
183
- }
184
- return i;
185
- }
186
- function E(r, e, n) {
187
- if (e === n) return r < e ? 0 : r > n ? 1 : 0.5;
188
- if (r <= e) return 0;
189
- if (r >= n) return 1;
190
- const i = n - e;
191
- return Number.isFinite(i) ? (r - e) / i : (r / 2 - e / 2) / (n / 2 - e / 2);
192
- }
193
- function H(r, e, n, i) {
194
- const t = /* @__PURE__ */ new WeakMap();
195
- return { apply(f, o) {
196
- const a = S(o[e], r.numeric);
197
- if (a === void 0) return;
198
- if (r.kind === "dataBar") {
199
- const d = Math.min(n, 0), g = Math.max(i, 0), m = E(0, d, g), b = d === g ? m : E(a, d, g);
200
- f.dataBar = { start: Math.min(m, b), end: Math.max(m, b), color: a < 0 ? r.negativeColor ?? "#f3bcc3" : r.color ?? "#bad8fa" };
201
- return;
202
- }
203
- const l = z(r.lowColor ?? "#f0f7ff", r.highColor ?? "#8bbcf1", E(a, n, i)), s = f.style ?? {}, c = t.get(s) ?? /* @__PURE__ */ new Map();
204
- t.set(s, c);
205
- let u = c.get(l);
206
- u || (u = { ...s, backgroundColor: l }, c.set(l, u)), f.style = u;
207
- } };
208
- }
209
- function G(r, e, n) {
210
- return r.map((i) => {
211
- F(n);
212
- const t = i.visual;
213
- if (!t) return;
214
- if (!D(t)) throw new TypeError("Invalid column visual rule");
215
- const f = t.field ?? i.field;
216
- let o = 1 / 0, a = -1 / 0, l = 0;
217
- if (t.min === void 0 || t.max === void 0) for (const u of e) {
218
- (l++ & 1023) === 0 && F(n);
219
- const d = S(u[f], t.numeric);
220
- d !== void 0 && (o = Math.min(o, d), a = Math.max(a, d));
221
- }
222
- let s = t.min ?? o, c = t.max ?? a;
223
- if (!(!Number.isFinite(s) || !Number.isFinite(c)))
224
- return s > c && (t.min !== void 0 ? c = s : s = c), H(t, f, s, c);
225
- });
226
- }
227
- function F(r) {
228
- if (r?.aborted) throw r.reason ?? new DOMException("Aborted", "AbortError");
229
- }
230
- const P = 1e7;
231
- function K(r) {
232
- const e = JSON.stringify(r, null, 2);
233
- if (e.length > P)
234
- throw new RangeError("模板 JSON 超过 1000 万字符的导出/导入上限");
235
- return e;
236
- }
237
- export {
238
- P as M,
239
- V as T,
240
- I as a,
241
- O as b,
242
- q as c,
243
- G as d,
244
- X as f,
245
- K as s,
246
- D as v
247
- };
@@ -1 +0,0 @@
1
- "use strict";const y=require("./computed-4TnxzgIh.cjs");class A extends Error{constructor(r){super(`树节点超出行数预算 ${r}`),this.limit=r,this.code="tree-row-limit",this.name="TreeRowLimitError"}}function p(e,r,n,i){const t=e??r;if(!Number.isInteger(t)||t<1||t>n)throw new Error(`${i}应为 1–${n} 的整数`);return t}function b(e){return{rows:p(e.maxRows,1e5,1e6,"树行数预算"),depth:p(e.maxDepth,64,256,"树深度预算"),visits:p(e.maxAggregationVisits,1e6,1e7,"树聚合访问预算")}}function T(e){return typeof e=="string"&&!!e.trim()}function h(e){return T(e)&&!["__proto__","prototype","constructor"].includes(e)}function M(e){if(T(e)||typeof e=="number"&&Number.isFinite(e))return e;throw new Error("树节点业务键应为非空字符串或有限数字")}function C(e){return JSON.stringify([typeof e,e])}function N(e){return[e.idField,...e.input==="flat"?[e.parentField??""]:[e.childrenField??"children"]]}function k(e,r){const n=N(e);if(r?.some(i=>i.scope&&i.scope!=="row"||n.includes(i.field)))throw new Error("树形布局仅支持不覆盖结构键的当前行计算")}function w(e){if(!e?.aborted)return;const r=new Error("树报表处理已取消");throw r.name="AbortError",r}function $(e){const r=e.aggregates??[];if(!Array.isArray(r)||r.length>32)throw new Error("树聚合最多 32 项");if(e.parentValues!=="leaf-aggregate"&&r.length)throw new Error("树聚合需显式选择 leaf-aggregate 父级取值策略");if(e.parentValues==="leaf-aggregate"&&!r.length)throw new Error("叶子聚合策略至少需要一个聚合字段");const n=new Set;for(const i of r){if(!i||!h(i.field)||n.has(i.field))throw new Error("树聚合输出字段应安全、非空且唯一");for(const t of[i.valueField,i.weightField])if(t!==void 0&&!h(t))throw new Error("树聚合来源字段应安全且非空");if([...N(e),e.labelField].includes(i.field))throw new Error("树聚合不能覆盖结构键或标签字段");n.add(i.field),y.createAggregateAccumulator({...i,field:i.valueField??i.field})}}function I(e){if(!h(e.idField)||!h(e.labelField))throw new Error("树需要安全的业务键和标签字段");if(e.input==="flat"&&(!h(e.parentField)||e.parentField===e.idField))throw new Error("扁平树需要独立的父键字段");if(e.childrenField!==void 0&&!h(e.childrenField))throw new Error("子节点字段应安全且非空");if(e.input==="nested"&&[e.idField,e.labelField].includes(e.childrenField??"children"))throw new Error("子节点字段不能覆盖业务键或标签字段")}function S(e){if(!e||typeof e!="object"||!["flat","nested"].includes(e.input))throw new Error("树输入应为 flat 或 nested");if(I(e),e.orphan!==void 0&&!["error","root"].includes(e.orphan))throw new Error("树孤儿策略应为 error 或 root");if(e.parentValues!==void 0&&!["source","leaf-aggregate"].includes(e.parentValues))throw new Error("未知树父级取值策略");if(e.indentMm!==void 0&&(!Number.isFinite(e.indentMm)||e.indentMm<0||e.indentMm>20))throw new Error("树每级缩进应为 0–20 mm");b(e),$(e)}function V(e,r,n,i){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("树节点应为对象");if(n.size>=i.rows)throw new A(i.rows);const t=M(e[r.idField]),l=C(t);if(n.has(l))throw new Error(`树节点业务键重复:${String(t)}`);const o={original:e,row:e,key:t,depth:0,children:[]};return n.set(l,o),o}function L(e,r,n,i,t){for(const o of e)w(t),V(o,r,n,i);const l=[];for(const o of n.values()){w(t);const a=o.row[r.parentField];if(a==null){l.push(o);continue}const f=n.get(C(M(a)));if(!f){if(r.orphan!=="root")throw new Error(`树节点 ${String(o.key)} 的父节点不存在`);l.push(o);continue}if(f===o)throw new Error("树节点不能以自身为父节点");o.parent=f,f.children.push(o)}return l}function j(e,r,n,i,t){const l=[],o=[{rows:e,next:0}];for(;o.length;){w(t);const a=o[o.length-1];if(a.next>=a.rows.length){o.pop();continue}const f=V(a.rows[a.next++],r,n,i);if(f.parent=a.parent,f.depth=o.length-1,o.length>i.depth)throw new Error(`树节点超出深度预算 ${i.depth}`);(a.parent?.children??l).push(f);const c=f.row[r.childrenField??"children"];if(c!=null){if(!Array.isArray(c))throw new Error("嵌套树 children 字段应为数组");c.length&&o.push({rows:c,next:0,parent:f})}}return l}function J(e,r,n,i){const t=[],l=[{nodes:e,next:0}];for(;l.length;){w(i);const o=l[l.length-1];if(o.next>=o.nodes.length){l.pop();continue}if(l.length>n.depth)throw new Error(`树节点超出深度预算 ${n.depth}`);const a=o.nodes[o.next++];a.depth=l.length-1,t.push(a),a.children.length&&l.push({nodes:a.children,next:0})}if(t.length!==r)throw new Error("树父子关系存在循环");return t}function B(e,r,n,i){if(r.parentValues!=="leaf-aggregate")return;const t=r.aggregates,l=new Map;for(const a of e)a.children.length&&l.set(a,t.map(f=>y.createAggregateAccumulator({...f,field:f.valueField??f.field})));let o=0;for(const a of e)if(!a.children.length)for(let f=a.parent;f;f=f.parent){if(w(i),o+=t.length,o>n.visits)throw new Error(`树聚合超出访问预算 ${n.visits}`);for(const c of l.get(f))c.add(a.row)}for(const[a,f]of l)a.row={...a.row},t.forEach((c,d)=>{a.row[c.field]=f[d].value()})}function O(e,r,n){if(S(r),w(n),!Array.isArray(e))throw new Error("树数据应为节点数组");const i=b(r),t=new Map,l=r.input==="flat"?L(e,r,t,i,n):j(e,r,t,i,n);return J(l,t.size,i,n)}function D(e,r,n){return O(e,r,n).map(i=>i.original)}function z(e,r,n={}){const i=O(e,r,n.signal);if(k(r,n.computed?.fields),n.computed?.fields.length){const t=y.computeDataset(i.map(l=>l.row),{...n.computed,signal:n.signal}).rows;i.forEach((l,o)=>{l.row=t[o]})}return B(i,r,b(r),n.signal),{rows:i.map(t=>t.row),entries:i.map(t=>({row:t.row,original:t.original,key:t.key,depth:t.depth,hasChildren:!!t.children.length})),leaves:i.filter(t=>!t.children.length).map(t=>t.row)}}const H=/^#[0-9a-f]{6}$/i;function R(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;const r=e;return r.kind!=="colorScale"&&r.kind!=="dataBar"||r.field!==void 0&&(typeof r.field!="string"||!r.field.trim())||r.numeric!==void 0&&!["number","decimal"].includes(r.numeric)||[r.min,r.max].some(n=>n!==void 0&&(typeof n!="number"||!Number.isFinite(n)))||r.min!==void 0&&r.max!==void 0&&r.min>r.max?!1:Object.entries(r).every(([n,i])=>!["color","negativeColor","lowColor","highColor"].includes(n)||typeof i=="string"&&H.test(i))}function x(e,r){if(typeof e=="number")return Number.isFinite(e)?e:void 0;if(r!=="decimal"||typeof e!="string"||e.length>1024||!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/.test(e))return;const n=Number(e);return Number.isFinite(n)?n:void 0}function P(e,r,n){let i="#";for(const t of[1,3,5]){const l=parseInt(e.slice(t,t+2),16),o=parseInt(r.slice(t,t+2),16);i+=Math.round(l+(o-l)*n).toString(16).padStart(2,"0")}return i}function E(e,r,n){if(r===n)return e<r?0:e>n?1:.5;if(e<=r)return 0;if(e>=n)return 1;const i=n-r;return Number.isFinite(i)?(e-r)/i:(e/2-r/2)/(n/2-r/2)}function X(e,r,n,i){const t=new WeakMap;return{apply(l,o){const a=x(o[r],e.numeric);if(a===void 0)return;if(e.kind==="dataBar"){const s=Math.min(n,0),g=Math.max(i,0),m=E(0,s,g),F=s===g?m:E(a,s,g);l.dataBar={start:Math.min(m,F),end:Math.max(m,F),color:a<0?e.negativeColor??"#f3bcc3":e.color??"#bad8fa"};return}const f=P(e.lowColor??"#f0f7ff",e.highColor??"#8bbcf1",E(a,n,i)),c=l.style??{},d=t.get(c)??new Map;t.set(c,d);let u=d.get(f);u||(u={...c,backgroundColor:f},d.set(f,u)),l.style=u}}}function q(e,r,n){return e.map(i=>{v(n);const t=i.visual;if(!t)return;if(!R(t))throw new TypeError("Invalid column visual rule");const l=t.field??i.field;let o=1/0,a=-1/0,f=0;if(t.min===void 0||t.max===void 0)for(const u of r){(f++&1023)===0&&v(n);const s=x(u[l],t.numeric);s!==void 0&&(o=Math.min(o,s),a=Math.max(a,s))}let c=t.min??o,d=t.max??a;if(!(!Number.isFinite(c)||!Number.isFinite(d)))return c>d&&(t.min!==void 0?d=c:c=d),X(t,l,c,d)})}function v(e){if(e?.aborted)throw e.reason??new DOMException("Aborted","AbortError")}const _=1e7;function W(e){const r=JSON.stringify(e,null,2);if(r.length>_)throw new RangeError("模板 JSON 超过 1000 万字符的导出/导入上限");return r}exports.MAX_TEMPLATE_JSON_CHARACTERS=_;exports.TreeRowLimitError=A;exports.createColumnVisualResolvers=q;exports.createTreeTable=z;exports.flattenTreeInput=D;exports.stringifyValidatedTemplate=W;exports.validColumnVisual=R;exports.validateTreeComputed=k;exports.validateTreeOptions=S;
@@ -1,4 +0,0 @@
1
- "use strict";const g=require("./grid-geometry-D8ReblRV.cjs"),M=/[\u3000-\u9fff\uff00-\uffef]/,s=new Uint8Array(128);{for(const t of"iljtf.,:;'`|!()[]")s[t.charCodeAt(0)]=1;for(const t of"mwMW@")s[t.charCodeAt(0)]=2;for(let t=48;t<=57;t++)s[t]=3;for(let t=65;t<=90;t++)s[t]=4;s[32]=5}const w=[.54,.26,.95,.59,.67,.3];function d(t){const e=t.charCodeAt(0);return e<128?w[s[e]]:M.test(t)?1:/[A-Z]/.test(t)?.67:.54}const o={measureMm(t,e){const{fontSizePt:i,bold:c=!1,letterSpacingPt:u=0}=e,r=25.4/72;let n=0;for(const h of t)n+=d(h);return c&&(n*=1.04),(n*i+u*Math.max(0,Array.from(t).length-1))*r}};function p(){return o}function A(t,e){return o.measureMm(t,e)}function x(t){let e;return{measureMm(i,c){if(e===void 0&&(e=t()),!e)return o.measureMm(i,c);const u=c.fontSizePt*96/72;e.font=`${c.italic?"italic ":""}${c.bold?"bold ":""}${u}px ${c.fontFamily??g.DEFAULT_FONT_FAMILY}`,"letterSpacing"in e&&(e.letterSpacing="0px");const r=(c.letterSpacingPt??0)*Math.max(0,Array.from(i).length-1);return e.measureText(i).width*25.4/96+r*25.4/72}}}function T(t,e,i){const c=[];let u="";const r=()=>{u&&(c.push({text:u,widthMm:i.measureMm(u,e),cjk:!1}),u="")};for(const n of t){if(n===`
2
- `){r(),c.push({text:`
3
- `,widthMm:0,cjk:!1,br:!0});continue}if(n===" "){r(),c.push({text:n,widthMm:i.measureMm(n,e),cjk:!1,space:!0});continue}if(M.test(n)){r(),c.push({text:n,widthMm:i.measureMm(n,e),cjk:!0});continue}u+=n}return r(),c}function S(t,e,i,c=o){if(!t)return[""];t=t.replace(/\r\n?/g,`
4
- `);const u=[];let r="",n=0;const h=(i.letterSpacingPt??0)*25.4/72,a=()=>{u.push(r),r="",n=0};for(const f of T(t,i,c)){if(f.br){a();continue}const m=r.length>0?h:0;if(n+m+f.widthMm<=e){r+=f.text,n+=m+f.widthMm;continue}if(f.space){a();continue}if(f.cjk){r.length>0&&a(),r=f.text,n=f.widthMm;continue}if(r.length>0&&a(),f.widthMm<=e){r=f.text,n=f.widthMm;continue}for(const l of f.text)c.measureMm(r+l,i)>e&&r.length>0&&a(),r+=l,n=c.measureMm(r,i)}return a(),u}exports.charWidthEm=d;exports.createCanvasMeasurer=x;exports.createHeuristicMeasurer=p;exports.heuristicMeasurer=o;exports.measureTextMm=A;exports.wrapText=S;