@agile-team/mach-report 2.11.2 → 2.13.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.
- package/README.md +30 -5
- package/THIRD_PARTY_NOTICES.md +270 -0
- package/dist/{ExcelBindingWizard-LWX6G1A2.js → ExcelBindingWizard-CeAf4QSE.js} +2 -2
- package/dist/{ExcelBindingWizard-a4kslPHF.cjs → ExcelBindingWizard-y0mT-AHR.cjs} +1 -1
- package/dist/{ReportBatchPanel-B5ClP9tm.js → ReportBatchPanel-CW2HV9I8.js} +1 -1
- package/dist/{ReportBatchPanel-Dc-SDkYA.cjs → ReportBatchPanel-Fp1ePFag.cjs} +1 -1
- package/dist/ReportPreview-BN6fk7Wz.cjs +6 -0
- package/dist/ReportPreview-D2Jkyh1U.js +4243 -0
- package/dist/{RuleEditor-C2QsOHOs.cjs → RuleEditor-ChRzNQuF.cjs} +1 -1
- package/dist/{RuleEditor-D9wQHrkf.js → RuleEditor-DzAmW5YH.js} +1 -1
- package/dist/analytics.d.cts +28 -0
- package/dist/analytics.d.ts +28 -0
- package/dist/assets-C2U-e-Sz.cjs +4 -0
- package/dist/assets-Q0wUwNrV.js +217 -0
- package/dist/code-options-BKXXY7NI.js +18 -0
- package/dist/code-options-BUTChiZZ.cjs +1 -0
- package/dist/codes.cjs +9 -0
- package/dist/codes.d.cts +223 -0
- package/dist/codes.d.ts +223 -0
- package/dist/codes.js +26917 -0
- package/dist/config-Bb7RiIO5.cjs +1 -0
- package/dist/{config-B612mw0x.js → config-XVwG87IA.js} +4 -0
- package/dist/designer.cjs +2 -2
- package/dist/designer.d.cts +283 -0
- package/dist/designer.d.ts +283 -0
- package/dist/designer.js +2852 -2010
- package/dist/grid-strokes-Cr7DwUux.cjs +1 -0
- package/dist/grid-strokes-DyyG1q_o.js +53 -0
- package/dist/index.cjs +7 -7
- package/dist/index.d.cts +105 -1
- package/dist/index.d.ts +105 -1
- package/dist/index.js +488 -439
- package/dist/pdf.cjs +76 -59
- package/dist/pdf.d.cts +51 -0
- package/dist/pdf.d.ts +51 -0
- package/dist/pdf.js +32128 -32048
- package/dist/{plugin-Cd5G2QQn.js → plugin-D4wizDXB.js} +1 -1
- package/dist/{plugin-BDTU4D94.cjs → plugin-DzS6pxTA.cjs} +1 -1
- package/dist/record-bindings-By_UKZ2g.cjs +1 -0
- package/dist/{list-cell-ClFra1zS.js → record-bindings-D-5jQlTj.js} +67 -44
- package/dist/{region-binding-workflow-DhQvu1co.cjs → region-binding-workflow-BzfbxRiR.cjs} +1 -1
- package/dist/{region-binding-workflow-CXDmt9Bs.js → region-binding-workflow-CcUq8W2Q.js} +1 -1
- package/dist/server/node.d.cts +52 -1
- package/dist/server/node.d.ts +52 -1
- package/dist/server-node.cjs +1 -1
- package/dist/server-node.js +239 -210
- package/dist/server.cjs +1 -1
- package/dist/server.d.cts +95 -3
- package/dist/server.d.ts +95 -3
- package/dist/server.js +457 -434
- package/dist/style.css +1 -1
- package/dist/{template-registry-WNXdkiET.js → template-registry-BjE1VS6g.js} +221 -157
- package/dist/template-registry-D3SjENi6.cjs +1 -0
- package/dist/template-review-DGwWOoCv.cjs +2 -0
- package/dist/{template-review-BdcXSYbx.js → template-review-PgEe_Wr9.js} +792 -666
- package/dist/validate-BJ5HIWY8.cjs +1 -0
- package/dist/validate-DbgEM1Hh.js +163 -0
- package/dist/vue/async.d.cts +125 -2
- package/dist/vue/async.d.ts +125 -2
- package/dist/vue/index.d.cts +121 -8
- package/dist/vue/index.d.ts +121 -8
- package/dist/vue-async.cjs +1 -1
- package/dist/vue-async.js +3 -3
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +5 -5
- package/dist/{workbook-session-BKOTwcoq.js → workbook-session-BPb3TMnT.js} +1 -1
- package/dist/{workbook-session-CLYLhZWu.cjs → workbook-session-DNa2RHNG.cjs} +1 -1
- package/dist/worker.cjs +1 -1
- package/dist/worker.d.cts +52 -1
- package/dist/worker.d.ts +52 -1
- package/dist/worker.js +2 -2
- package/dist/xlsx.cjs +1 -1
- package/dist/xlsx.d.cts +40 -0
- package/dist/xlsx.d.ts +40 -0
- package/dist/xlsx.js +3 -3
- package/package.json +16 -3
- package/dist/ReportPreview-DWXROHBP.cjs +0 -6
- package/dist/ReportPreview-DiNXhQI0.js +0 -4138
- package/dist/assets-Bu6UohJx.cjs +0 -1
- package/dist/assets-DegqDNqY.js +0 -160
- package/dist/config-BRoLo2oj.cjs +0 -1
- package/dist/list-cell-BuYn4tGF.cjs +0 -1
- package/dist/template-registry-ukBGlm8N.cjs +0 -1
- package/dist/template-review-BXp2oyqg.cjs +0 -1
- package/dist/textwrap-CWHyzkBH.cjs +0 -4
- package/dist/textwrap-DE1kgcJB.js +0 -110
- package/dist/validate-7s0yn6ii.js +0 -148
- package/dist/validate-DsRiNw8h.cjs +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const v=require("./code-options-BUTChiZZ.cjs");function g(e,s,i){e.editable!==void 0&&typeof e.editable!="boolean"&&i.push({path:`${s}.editable`,message:"编辑控制应为布尔值"}),e.valueType!==void 0&&!["text","number","boolean"].includes(e.valueType)&&i.push({path:`${s}.valueType`,message:"编辑类型应为 text、number 或 boolean"})}function A(e,s,i){g(e,s,i),e.indentMm!==void 0&&(typeof e.indentMm!="number"||!Number.isFinite(e.indentMm)||e.indentMm<0)&&i.push({path:`${s}.indentMm`,message:"单元格缩进应为有限非负数"}),e.derived!==void 0&&typeof e.derived!="boolean"&&i.push({path:`${s}.derived`,message:"派生结果标记应为布尔值"}),m(e.source,`${s}.source`,i,!0),e.formula!==void 0&&typeof e.formula!="string"&&i.push({path:`${s}.formula`,message:"单元格公式应为字符串"})}function m(e,s,i,n=!1){if(e===void 0)return;if(!e||typeof e!="object"||Array.isArray(e)){i.push({path:s,message:"业务来源应为对象"});return}const t=e;for(const a of["datasetId",...n?["field"]:[]])(typeof t[a]!="string"||!t[a].trim())&&i.push({path:`${s}.${a}`,message:"业务标识应为非空字符串"});for(const a of["rowKey","revision"]){const o=t[a];o===void 0&&!(n&&a==="rowKey")||typeof o!="string"&&!(typeof o=="number"&&Number.isFinite(o))&&i.push({path:`${s}.${a}`,message:"业务键及修订号应为字符串或有限数字"})}t.sourceToken!==void 0&&typeof t.sourceToken!="string"&&i.push({path:`${s}.sourceToken`,message:"来源令牌应为字符串"})}const b=new Set(["text","image","barcode","qrcode","chart","line","rect","ellipse"]);function d(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function M(e,s,i,n){const t=e[s];(typeof t!="number"||!Number.isFinite(t))&&n.push({path:`${i}.${s}`,message:`应为有限数字,实际 ${JSON.stringify(t)}`})}function w(e,s,i){if(e!==void 0){const n=`${s}.table`;if(!d(e))i.push({path:n,message:"逻辑表来源应为对象"});else{m(e.source,`${n}.source`,i),(typeof e.id!="string"||!e.id.trim())&&i.push({path:`${n}.id`,message:"逻辑表 ID 应为非空字符串"});const t=e.role;["header","body","group-header","subtotal","grand-total"].includes(t)||i.push({path:`${n}.role`,message:"未知逻辑表行角色"});const a=e.rowIndex;(typeof a!="number"||!Number.isInteger(a)||(t==="header"?a!==-1:a<0))&&i.push({path:`${n}.rowIndex`,message:"表头索引应为 -1,内容行索引应为非负整数"}),(!Array.isArray(e.columnKeys)||e.columnKeys.some(o=>typeof o!="string"))&&i.push({path:`${n}.columnKeys`,message:"逻辑列字段应为字符串数组"}),e.layout!==void 0&&e.layout!=="page"&&e.layout!=="wide"&&i.push({path:`${n}.layout`,message:"布局应为 page 或 wide"}),e.title!==void 0&&typeof e.title!="string"&&i.push({path:`${n}.title`,message:"逻辑表名称应为字符串"})}}}function k(e,s,i,n){if(e!==void 0)if(!d(e)||!Array.isArray(e.cells))i.push({path:`${s}.grid.cells`,message:"grid.cells 应为二维数组"});else{const t=e.paddingMm;t!==void 0&&(typeof t!="number"||!Number.isFinite(t)||t<0)&&i.push({path:`${s}.grid.paddingMm`,message:"单元格内距应为有限非负数"}),e.cells.forEach((a,o)=>{if(!Array.isArray(a)){i.push({path:`${s}.grid.cells.${o}`,message:"行应为数组"});return}a.forEach((u,f)=>{if(u==null)return;const r=`${s}.grid.cells.${o}.${f}`;if(!d(u)){i.push({path:r,message:"网格单元格应为对象或 null"});return}A(u,r,i),Array.isArray(u.children)&&u.children.forEach((y,$)=>{h(y,`${s}.grid.cells.${o}.${f}.children.${$}`,i,n)})})})}}function N(e,s,i){e!==void 0&&(Array.isArray(e)?e.forEach((n,t)=>{(!d(n)||!Array.isArray(n.segments))&&i.push({path:`${s}.richParagraphs.${t}`,message:"段落缺少 segments 数组"})}):i.push({path:`${s}.richParagraphs`,message:"richParagraphs 应为数组"}))}function h(e,s,i,n=[]){if(!d(e)){i.push({path:s,message:"组件应为对象"});return}const t=e.kind;typeof t!="string"?i.push({path:`${s}.kind`,message:"组件缺少 kind 字符串"}):b.has(t)||n.push({path:`${s}.kind`,message:`未知组件类型 ${JSON.stringify(t)},将以兜底方式渲染`});for(const a of["leftMm","topMm","widthMm","heightMm"])M(e,a,s,i);typeof e.leftMm=="number"&&e.leftMm<-100&&i.push({path:`${s}.leftMm`,message:"几何数值异常(leftMm<-100)"});for(const a of["widthMm","heightMm"])typeof e[a]=="number"&&e[a]<0&&i.push({path:`${s}.${a}`,message:"组件尺寸不能为负数"});w(e.table,s,i),E(e.code,t,s,i),e.pageAnchor!==void 0&&!["header","footer"].includes(e.pageAnchor)&&i.push({path:`${s}.pageAnchor`,message:"页面锚点应为 header 或 footer"}),e.lineDirection!==void 0&&!["down","up"].includes(e.lineDirection)&&i.push({path:`${s}.lineDirection`,message:"线段方向应为 down 或 up"}),k(e.grid,s,i,n),N(e.richParagraphs,s,i)}function E(e,s,i,n){if(e!==void 0)for(const t of v.codeOptionIssues(e,s))n.push({path:`${i}.code${t.path?`.${t.path}`:""}`,message:t.message})}function p(e,s,i){if(!d(e))return;e.binding!==void 0&&i.push({path:`${s}.binding`,message:"渲染计划不允许未解析字段绑定"});const n=e.grid;!d(n)||!Array.isArray(n.cells)||n.cells.forEach((t,a)=>{Array.isArray(t)&&t.forEach((o,u)=>{!d(o)||!Array.isArray(o.children)||o.children.forEach((f,r)=>p(f,`${s}.grid.cells.${a}.${u}.children.${r}`,i))})})}function c(e,s,i,n=[]){if(!d(e)){i.push({path:s,message:"页应为对象"});return}const t=e.pageWidthMm,a=e.pageHeightMm;(typeof t!="number"||!Number.isFinite(t)||t<=0)&&i.push({path:`${s}.pageWidthMm`,message:`页宽非法: ${JSON.stringify(t)}`}),(typeof a!="number"||!(a>0&&a<5e3))&&i.push({path:`${s}.pageHeightMm`,message:`页高非法: ${JSON.stringify(a)}`}),e.layout!==void 0&&e.layout!=="page"&&e.layout!=="wide"&&i.push({path:`${s}.layout`,message:"布局应为 page 或 wide"});const o=e.components;Array.isArray(o)?Array.isArray(o)&&o.forEach((u,f)=>{h(u,`${s}.components.${f}`,i,n),p(u,`${s}.components.${f}`,i)}):i.push({path:`${s}.components`,message:"components 应为数组"})}function l(e){const s=[],i=[],n=d(e)?e.pages:void 0;if(d(e)&&e.requiresRecalculation!==void 0&&typeof e.requiresRecalculation!="boolean"&&s.push({path:"$.requiresRecalculation",message:"重算能力要求应为布尔值"}),!Array.isArray(n))s.push({path:"$.pages",message:e==null?"渲染计划为空":"渲染计划缺少 pages 数组"});else{n.forEach((a,o)=>c(a,`$.pages.${o}`,s,i)),n.length>2e3&&i.push({path:"$.pages",message:`页数异常大(${n.length} 页),渲染与打印耗时可能显著增加`});const t=n.reduce((a,o)=>a+(d(o)&&Array.isArray(o.components)?o.components.length:0),0);t>5e4&&i.push({path:"$.pages",message:`组件总数异常大(${t} 个),可能触发浏览器性能限制`})}return{ok:s.length===0,errors:s,warnings:i}}function P(e){const s=l(e);if(!s.ok){const i=s.errors.slice(0,3).map(n=>`${n.path}: ${n.message}`).join("; ");throw new Error(`渲染计划校验失败(${s.errors.length} 处): ${i}`)}return e.pages}exports.assertRenderPlan=P;exports.validateComponent=h;exports.validateEditableMetadata=g;exports.validatePage=c;exports.validateRenderPlan=l;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { c as y } from "./code-options-BKXXY7NI.js";
|
|
2
|
+
function $(e, s, i) {
|
|
3
|
+
e.editable !== void 0 && typeof e.editable != "boolean" && i.push({ path: `${s}.editable`, message: "编辑控制应为布尔值" }), e.valueType !== void 0 && !["text", "number", "boolean"].includes(e.valueType) && i.push({ path: `${s}.valueType`, message: "编辑类型应为 text、number 或 boolean" });
|
|
4
|
+
}
|
|
5
|
+
function l(e, s, i) {
|
|
6
|
+
$(e, s, i), e.indentMm !== void 0 && (typeof e.indentMm != "number" || !Number.isFinite(e.indentMm) || e.indentMm < 0) && i.push({ path: `${s}.indentMm`, message: "单元格缩进应为有限非负数" }), e.derived !== void 0 && typeof e.derived != "boolean" && i.push({ path: `${s}.derived`, message: "派生结果标记应为布尔值" }), h(e.source, `${s}.source`, i, !0), e.formula !== void 0 && typeof e.formula != "string" && i.push({ path: `${s}.formula`, message: "单元格公式应为字符串" });
|
|
7
|
+
}
|
|
8
|
+
function h(e, s, i, t = !1) {
|
|
9
|
+
if (e === void 0) return;
|
|
10
|
+
if (!e || typeof e != "object" || Array.isArray(e)) {
|
|
11
|
+
i.push({ path: s, message: "业务来源应为对象" });
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const n = e;
|
|
15
|
+
for (const a of ["datasetId", ...t ? ["field"] : []])
|
|
16
|
+
(typeof n[a] != "string" || !n[a].trim()) && i.push({ path: `${s}.${a}`, message: "业务标识应为非空字符串" });
|
|
17
|
+
for (const a of ["rowKey", "revision"]) {
|
|
18
|
+
const o = n[a];
|
|
19
|
+
o === void 0 && !(t && a === "rowKey") || typeof o != "string" && !(typeof o == "number" && Number.isFinite(o)) && i.push({ path: `${s}.${a}`, message: "业务键及修订号应为字符串或有限数字" });
|
|
20
|
+
}
|
|
21
|
+
n.sourceToken !== void 0 && typeof n.sourceToken != "string" && i.push({ path: `${s}.sourceToken`, message: "来源令牌应为字符串" });
|
|
22
|
+
}
|
|
23
|
+
const v = /* @__PURE__ */ new Set([
|
|
24
|
+
"text",
|
|
25
|
+
"image",
|
|
26
|
+
"barcode",
|
|
27
|
+
"qrcode",
|
|
28
|
+
"chart",
|
|
29
|
+
"line",
|
|
30
|
+
"rect",
|
|
31
|
+
"ellipse"
|
|
32
|
+
]);
|
|
33
|
+
function f(e) {
|
|
34
|
+
return typeof e == "object" && e !== null && !Array.isArray(e);
|
|
35
|
+
}
|
|
36
|
+
function A(e, s, i, t) {
|
|
37
|
+
const n = e[s];
|
|
38
|
+
(typeof n != "number" || !Number.isFinite(n)) && t.push({ path: `${i}.${s}`, message: `应为有限数字,实际 ${JSON.stringify(n)}` });
|
|
39
|
+
}
|
|
40
|
+
function b(e, s, i) {
|
|
41
|
+
if (e !== void 0) {
|
|
42
|
+
const t = `${s}.table`;
|
|
43
|
+
if (!f(e)) i.push({ path: t, message: "逻辑表来源应为对象" });
|
|
44
|
+
else {
|
|
45
|
+
h(e.source, `${t}.source`, i), (typeof e.id != "string" || !e.id.trim()) && i.push({ path: `${t}.id`, message: "逻辑表 ID 应为非空字符串" });
|
|
46
|
+
const n = e.role;
|
|
47
|
+
["header", "body", "group-header", "subtotal", "grand-total"].includes(n) || i.push({ path: `${t}.role`, message: "未知逻辑表行角色" });
|
|
48
|
+
const a = e.rowIndex;
|
|
49
|
+
(typeof a != "number" || !Number.isInteger(a) || (n === "header" ? a !== -1 : a < 0)) && i.push({ path: `${t}.rowIndex`, message: "表头索引应为 -1,内容行索引应为非负整数" }), (!Array.isArray(e.columnKeys) || e.columnKeys.some((o) => typeof o != "string")) && i.push({ path: `${t}.columnKeys`, message: "逻辑列字段应为字符串数组" }), e.layout !== void 0 && e.layout !== "page" && e.layout !== "wide" && i.push({ path: `${t}.layout`, message: "布局应为 page 或 wide" }), e.title !== void 0 && typeof e.title != "string" && i.push({ path: `${t}.title`, message: "逻辑表名称应为字符串" });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function M(e, s, i, t) {
|
|
54
|
+
if (e !== void 0)
|
|
55
|
+
if (!f(e) || !Array.isArray(e.cells))
|
|
56
|
+
i.push({ path: `${s}.grid.cells`, message: "grid.cells 应为二维数组" });
|
|
57
|
+
else {
|
|
58
|
+
const n = e.paddingMm;
|
|
59
|
+
n !== void 0 && (typeof n != "number" || !Number.isFinite(n) || n < 0) && i.push({ path: `${s}.grid.paddingMm`, message: "单元格内距应为有限非负数" }), e.cells.forEach((a, o) => {
|
|
60
|
+
if (!Array.isArray(a)) {
|
|
61
|
+
i.push({ path: `${s}.grid.cells.${o}`, message: "行应为数组" });
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
a.forEach((u, d) => {
|
|
65
|
+
if (u == null) return;
|
|
66
|
+
const r = `${s}.grid.cells.${o}.${d}`;
|
|
67
|
+
if (!f(u)) {
|
|
68
|
+
i.push({ path: r, message: "网格单元格应为对象或 null" });
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
l(u, r, i), Array.isArray(u.children) && u.children.forEach((p, c) => {
|
|
72
|
+
g(p, `${s}.grid.cells.${o}.${d}.children.${c}`, i, t);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function w(e, s, i) {
|
|
79
|
+
e !== void 0 && (Array.isArray(e) ? e.forEach((t, n) => {
|
|
80
|
+
(!f(t) || !Array.isArray(t.segments)) && i.push({ path: `${s}.richParagraphs.${n}`, message: "段落缺少 segments 数组" });
|
|
81
|
+
}) : i.push({ path: `${s}.richParagraphs`, message: "richParagraphs 应为数组" }));
|
|
82
|
+
}
|
|
83
|
+
function g(e, s, i, t = []) {
|
|
84
|
+
if (!f(e)) {
|
|
85
|
+
i.push({ path: s, message: "组件应为对象" });
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const n = e.kind;
|
|
89
|
+
typeof n != "string" ? i.push({ path: `${s}.kind`, message: "组件缺少 kind 字符串" }) : v.has(n) || t.push({
|
|
90
|
+
path: `${s}.kind`,
|
|
91
|
+
message: `未知组件类型 ${JSON.stringify(n)},将以兜底方式渲染`
|
|
92
|
+
});
|
|
93
|
+
for (const a of ["leftMm", "topMm", "widthMm", "heightMm"])
|
|
94
|
+
A(e, a, s, i);
|
|
95
|
+
typeof e.leftMm == "number" && e.leftMm < -100 && i.push({ path: `${s}.leftMm`, message: "几何数值异常(leftMm<-100)" });
|
|
96
|
+
for (const a of ["widthMm", "heightMm"])
|
|
97
|
+
typeof e[a] == "number" && e[a] < 0 && i.push({ path: `${s}.${a}`, message: "组件尺寸不能为负数" });
|
|
98
|
+
b(e.table, s, i), k(e.code, n, s, i), e.pageAnchor !== void 0 && !["header", "footer"].includes(e.pageAnchor) && i.push({ path: `${s}.pageAnchor`, message: "页面锚点应为 header 或 footer" }), e.lineDirection !== void 0 && !["down", "up"].includes(e.lineDirection) && i.push({ path: `${s}.lineDirection`, message: "线段方向应为 down 或 up" }), M(e.grid, s, i, t), w(e.richParagraphs, s, i);
|
|
99
|
+
}
|
|
100
|
+
function k(e, s, i, t) {
|
|
101
|
+
if (e !== void 0)
|
|
102
|
+
for (const n of y(e, s)) t.push({ path: `${i}.code${n.path ? `.${n.path}` : ""}`, message: n.message });
|
|
103
|
+
}
|
|
104
|
+
function m(e, s, i) {
|
|
105
|
+
if (!f(e)) return;
|
|
106
|
+
e.binding !== void 0 && i.push({ path: `${s}.binding`, message: "渲染计划不允许未解析字段绑定" });
|
|
107
|
+
const t = e.grid;
|
|
108
|
+
!f(t) || !Array.isArray(t.cells) || t.cells.forEach((n, a) => {
|
|
109
|
+
Array.isArray(n) && n.forEach((o, u) => {
|
|
110
|
+
!f(o) || !Array.isArray(o.children) || o.children.forEach((d, r) => m(d, `${s}.grid.cells.${a}.${u}.children.${r}`, i));
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function N(e, s, i, t = []) {
|
|
115
|
+
if (!f(e)) {
|
|
116
|
+
i.push({ path: s, message: "页应为对象" });
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const n = e.pageWidthMm, a = e.pageHeightMm;
|
|
120
|
+
(typeof n != "number" || !Number.isFinite(n) || n <= 0) && i.push({ path: `${s}.pageWidthMm`, message: `页宽非法: ${JSON.stringify(n)}` }), (typeof a != "number" || !(a > 0 && a < 5e3)) && i.push({ path: `${s}.pageHeightMm`, message: `页高非法: ${JSON.stringify(a)}` }), e.layout !== void 0 && e.layout !== "page" && e.layout !== "wide" && i.push({ path: `${s}.layout`, message: "布局应为 page 或 wide" });
|
|
121
|
+
const o = e.components;
|
|
122
|
+
Array.isArray(o) ? Array.isArray(o) && o.forEach((u, d) => {
|
|
123
|
+
g(u, `${s}.components.${d}`, i, t), m(u, `${s}.components.${d}`, i);
|
|
124
|
+
}) : i.push({ path: `${s}.components`, message: "components 应为数组" });
|
|
125
|
+
}
|
|
126
|
+
function E(e) {
|
|
127
|
+
const s = [], i = [], t = f(e) ? e.pages : void 0;
|
|
128
|
+
if (f(e) && e.requiresRecalculation !== void 0 && typeof e.requiresRecalculation != "boolean" && s.push({ path: "$.requiresRecalculation", message: "重算能力要求应为布尔值" }), !Array.isArray(t))
|
|
129
|
+
s.push({
|
|
130
|
+
path: "$.pages",
|
|
131
|
+
message: e == null ? "渲染计划为空" : "渲染计划缺少 pages 数组"
|
|
132
|
+
});
|
|
133
|
+
else {
|
|
134
|
+
t.forEach((a, o) => N(a, `$.pages.${o}`, s, i)), t.length > 2e3 && i.push({
|
|
135
|
+
path: "$.pages",
|
|
136
|
+
message: `页数异常大(${t.length} 页),渲染与打印耗时可能显著增加`
|
|
137
|
+
});
|
|
138
|
+
const n = t.reduce(
|
|
139
|
+
(a, o) => a + (f(o) && Array.isArray(o.components) ? o.components.length : 0),
|
|
140
|
+
0
|
|
141
|
+
);
|
|
142
|
+
n > 5e4 && i.push({
|
|
143
|
+
path: "$.pages",
|
|
144
|
+
message: `组件总数异常大(${n} 个),可能触发浏览器性能限制`
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return { ok: s.length === 0, errors: s, warnings: i };
|
|
148
|
+
}
|
|
149
|
+
function I(e) {
|
|
150
|
+
const s = E(e);
|
|
151
|
+
if (!s.ok) {
|
|
152
|
+
const i = s.errors.slice(0, 3).map((t) => `${t.path}: ${t.message}`).join("; ");
|
|
153
|
+
throw new Error(`渲染计划校验失败(${s.errors.length} 处): ${i}`);
|
|
154
|
+
}
|
|
155
|
+
return e.pages;
|
|
156
|
+
}
|
|
157
|
+
export {
|
|
158
|
+
I as a,
|
|
159
|
+
N as b,
|
|
160
|
+
E as c,
|
|
161
|
+
$ as d,
|
|
162
|
+
g as v
|
|
163
|
+
};
|
package/dist/vue/async.d.cts
CHANGED
|
@@ -36,6 +36,39 @@ declare interface AssetRenderOptions extends OutputDiagnosticOptions {
|
|
|
36
36
|
assetFailure?: "throw" | "placeholder";
|
|
37
37
|
signal?: AbortSignal;
|
|
38
38
|
}
|
|
39
|
+
/** Serializable symbol settings. Encoders remain in the optional /codes entry. */
|
|
40
|
+
declare interface CodeOptions {
|
|
41
|
+
/** Explicit content, including an empty value, takes precedence over legacy fallbackText. */
|
|
42
|
+
value?: string;
|
|
43
|
+
symbology?: "code128" | "code39" | "ean13" | "ean8";
|
|
44
|
+
errorCorrection?: "L" | "M" | "Q" | "H";
|
|
45
|
+
/** White modules around a symbol: QR >=4, linear >=10, EAN >=11. */
|
|
46
|
+
quietZoneModules?: number;
|
|
47
|
+
/** Human-readable content below a linear barcode. */
|
|
48
|
+
showText?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/** Serializable symbol settings. Encoders remain in the optional /codes entry. */
|
|
51
|
+
declare interface CodeOptions_2 {
|
|
52
|
+
/** Explicit content, including an empty value, takes precedence over legacy fallbackText. */
|
|
53
|
+
value?: string;
|
|
54
|
+
symbology?: "code128" | "code39" | "ean13" | "ean8";
|
|
55
|
+
errorCorrection?: "L" | "M" | "Q" | "H";
|
|
56
|
+
/** White modules around a symbol: QR >=4, linear >=10, EAN >=11. */
|
|
57
|
+
quietZoneModules?: number;
|
|
58
|
+
/** Human-readable content below a linear barcode. */
|
|
59
|
+
showText?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/** Serializable symbol settings. Encoders remain in the optional /codes entry. */
|
|
62
|
+
declare interface CodeOptions_3 {
|
|
63
|
+
/** Explicit content, including an empty value, takes precedence over legacy fallbackText. */
|
|
64
|
+
value?: string;
|
|
65
|
+
symbology?: "code128" | "code39" | "ean13" | "ean8";
|
|
66
|
+
errorCorrection?: "L" | "M" | "Q" | "H";
|
|
67
|
+
/** White modules around a symbol: QR >=4, linear >=10, EAN >=11. */
|
|
68
|
+
quietZoneModules?: number;
|
|
69
|
+
/** Human-readable content below a linear barcode. */
|
|
70
|
+
showText?: boolean;
|
|
71
|
+
}
|
|
39
72
|
/**
|
|
40
73
|
* 列值格式化(声明式、JSON 可序列化)。
|
|
41
74
|
* 在 paginate 的 cellText 出口统一消费:格式化发生在进 RenderPlan 之前,
|
|
@@ -80,6 +113,52 @@ declare type ColumnFormat_2 = {
|
|
|
80
113
|
kind: "date";
|
|
81
114
|
pattern?: string;
|
|
82
115
|
};
|
|
116
|
+
/**
|
|
117
|
+
* 列值格式化(声明式、JSON 可序列化)。
|
|
118
|
+
* 在 paginate 的 cellText 出口统一消费:格式化发生在进 RenderPlan 之前,
|
|
119
|
+
* 三后端(DOM/Canvas/PDF)零改动。
|
|
120
|
+
*
|
|
121
|
+
* 语义约定(v0.9 固化):
|
|
122
|
+
* - number.digits 显式给出 → 精确保留(12.5 + digits:2 → "12.50")
|
|
123
|
+
* - number.thousands 默认 false(千分位显式开启)
|
|
124
|
+
* - date 字符串按"本地时区的日历日"解析(YYYY-MM-DD / YYYY/MM/DD 直取年月日,
|
|
125
|
+
* 不经 Date 字符串构造——后者按 UTC 零点,负时区环境会少一天)
|
|
126
|
+
*/
|
|
127
|
+
declare type ColumnFormat_3 = {
|
|
128
|
+
kind: "number";
|
|
129
|
+
thousands?: boolean;
|
|
130
|
+
digits?: number;
|
|
131
|
+
} | {
|
|
132
|
+
kind: "percent";
|
|
133
|
+
digits?: number;
|
|
134
|
+
} | {
|
|
135
|
+
kind: "date";
|
|
136
|
+
pattern?: string;
|
|
137
|
+
};
|
|
138
|
+
/** A literal own field of the current label record; expressions and paths are not evaluated. */
|
|
139
|
+
declare interface ComponentBinding {
|
|
140
|
+
field: string;
|
|
141
|
+
format?: ValueFormat;
|
|
142
|
+
prefix?: string;
|
|
143
|
+
suffix?: string;
|
|
144
|
+
emptyText?: string;
|
|
145
|
+
}
|
|
146
|
+
/** A literal own field of the current label record; expressions and paths are not evaluated. */
|
|
147
|
+
declare interface ComponentBinding_2 {
|
|
148
|
+
field: string;
|
|
149
|
+
format?: ValueFormat_2;
|
|
150
|
+
prefix?: string;
|
|
151
|
+
suffix?: string;
|
|
152
|
+
emptyText?: string;
|
|
153
|
+
}
|
|
154
|
+
/** A literal own field of the current label record; expressions and paths are not evaluated. */
|
|
155
|
+
declare interface ComponentBinding_3 {
|
|
156
|
+
field: string;
|
|
157
|
+
format?: ValueFormat_3;
|
|
158
|
+
prefix?: string;
|
|
159
|
+
suffix?: string;
|
|
160
|
+
emptyText?: string;
|
|
161
|
+
}
|
|
83
162
|
declare interface ComponentImageContext {
|
|
84
163
|
readonly component: Readonly<PlanComponent>;
|
|
85
164
|
readonly pageIndex: number;
|
|
@@ -394,7 +473,7 @@ declare interface ListColumn_2 {
|
|
|
394
473
|
/** 独立的表头样式,优先于列表级表头样式。 */
|
|
395
474
|
headerStyle?: ComponentStyle_3;
|
|
396
475
|
/** 值格式化(声明式):千分位/小数位、百分比、日期 pattern */
|
|
397
|
-
format?:
|
|
476
|
+
format?: ColumnFormat_3;
|
|
398
477
|
/** 条件格式规则(声明式,命中合并进单元格样式;如负数红字) */
|
|
399
478
|
rules?: StyleRule_2[];
|
|
400
479
|
/** 内容列编辑控制;仍需由预览显式开启 editing,不影响表头/小计只读规则。 */
|
|
@@ -658,6 +737,10 @@ declare interface MachReportMessages extends Partial<ReportCalculationMessages>
|
|
|
658
737
|
pageJumpInvalid?: string;
|
|
659
738
|
pageJumpHint?: string;
|
|
660
739
|
pagination?: string;
|
|
740
|
+
recordNavigation?: string;
|
|
741
|
+
recordInfo?: string;
|
|
742
|
+
prevRecord?: string;
|
|
743
|
+
nextRecord?: string;
|
|
661
744
|
columnSearchHint?: string;
|
|
662
745
|
columnSearchShortcut?: string;
|
|
663
746
|
closeColumnDirectory?: string;
|
|
@@ -1007,6 +1090,10 @@ declare interface PdfFontCheckResult {
|
|
|
1007
1090
|
/** available 仅表示字体资源可达;实际导出仍会校验文字能否编码。 */
|
|
1008
1091
|
declare type PdfFontStatus = "unchecked" | "checking" | "available" | "disabled" | "unverified" | "error";
|
|
1009
1092
|
declare interface PlanComponent {
|
|
1093
|
+
/** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
|
|
1094
|
+
code?: CodeOptions;
|
|
1095
|
+
/** Template-only binding; resolved and removed before constructing the output plan. */
|
|
1096
|
+
binding?: ComponentBinding;
|
|
1010
1097
|
/** Template page furniture repeats per page and reserves its vertical band. */
|
|
1011
1098
|
pageAnchor?: "header" | "footer";
|
|
1012
1099
|
kind: ComponentKind;
|
|
@@ -1031,6 +1118,10 @@ declare interface PlanComponent {
|
|
|
1031
1118
|
fallbackText?: string;
|
|
1032
1119
|
}
|
|
1033
1120
|
declare interface PlanComponent_2 {
|
|
1121
|
+
/** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
|
|
1122
|
+
code?: CodeOptions_2;
|
|
1123
|
+
/** Template-only binding; resolved and removed before constructing the output plan. */
|
|
1124
|
+
binding?: ComponentBinding_2;
|
|
1034
1125
|
/** Template page furniture repeats per page and reserves its vertical band. */
|
|
1035
1126
|
pageAnchor?: "header" | "footer";
|
|
1036
1127
|
kind: ComponentKind_2;
|
|
@@ -1055,6 +1146,10 @@ declare interface PlanComponent_2 {
|
|
|
1055
1146
|
fallbackText?: string;
|
|
1056
1147
|
}
|
|
1057
1148
|
declare interface PlanComponent_3 {
|
|
1149
|
+
/** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
|
|
1150
|
+
code?: CodeOptions_3;
|
|
1151
|
+
/** Template-only binding; resolved and removed before constructing the output plan. */
|
|
1152
|
+
binding?: ComponentBinding_3;
|
|
1058
1153
|
/** Template page furniture repeats per page and reserves its vertical band. */
|
|
1059
1154
|
pageAnchor?: "header" | "footer";
|
|
1060
1155
|
kind: ComponentKind_3;
|
|
@@ -1626,7 +1721,7 @@ declare interface ReportSaveResult {
|
|
|
1626
1721
|
declare interface ReportTaskEvent {
|
|
1627
1722
|
taskId: string;
|
|
1628
1723
|
correlationId?: string;
|
|
1629
|
-
stage: "query" | "validate" | "layout" | "encode";
|
|
1724
|
+
stage: "query" | "validate" | "layout" | "assets" | "encode";
|
|
1630
1725
|
status: "started" | "completed" | "failed";
|
|
1631
1726
|
reportId?: string;
|
|
1632
1727
|
completed?: number;
|
|
@@ -1642,12 +1737,16 @@ declare interface ReportTemplate {
|
|
|
1642
1737
|
schemaVersion?: string;
|
|
1643
1738
|
/** 参数定义(可选;宿主也可经 ReportPreview 的 paramDefs prop 提供,prop 优先) */
|
|
1644
1739
|
params?: ReportParamDef[];
|
|
1740
|
+
/** Fixed label pages repeat in record → copy → template-page order. */
|
|
1741
|
+
repeat?: ReportTemplateRepeat;
|
|
1645
1742
|
pages: TemplatePage[];
|
|
1646
1743
|
}
|
|
1647
1744
|
declare interface ReportTemplate_2 {
|
|
1648
1745
|
schemaVersion?: string;
|
|
1649
1746
|
/** 参数定义(可选;宿主也可经 ReportPreview 的 paramDefs prop 提供,prop 优先) */
|
|
1650
1747
|
params?: ReportParamDef_2[];
|
|
1748
|
+
/** Fixed label pages repeat in record → copy → template-page order. */
|
|
1749
|
+
repeat?: ReportTemplateRepeat_2;
|
|
1651
1750
|
pages: TemplatePage_2[];
|
|
1652
1751
|
}
|
|
1653
1752
|
/** 可存入数据库/文件的纯 JSON 模板;数据、接口与鉴权仍由宿主提供。 */
|
|
@@ -1669,6 +1768,24 @@ declare interface ReportTemplateProvider {
|
|
|
1669
1768
|
signal?: AbortSignal;
|
|
1670
1769
|
}): Promise<ReportTemplateDocument | undefined>;
|
|
1671
1770
|
}
|
|
1771
|
+
/** Every record emits its copies, each containing all template pages in their original order. */
|
|
1772
|
+
declare interface ReportTemplateRepeat {
|
|
1773
|
+
dataset: string;
|
|
1774
|
+
rowKey?: string;
|
|
1775
|
+
/** Whole copies per record, 1..1000. The field value must be a number, never a numeric string. */
|
|
1776
|
+
copies?: number | {
|
|
1777
|
+
field: string;
|
|
1778
|
+
};
|
|
1779
|
+
}
|
|
1780
|
+
/** Every record emits its copies, each containing all template pages in their original order. */
|
|
1781
|
+
declare interface ReportTemplateRepeat_2 {
|
|
1782
|
+
dataset: string;
|
|
1783
|
+
rowKey?: string;
|
|
1784
|
+
/** Whole copies per record, 1..1000. The field value must be a number, never a numeric string. */
|
|
1785
|
+
copies?: number | {
|
|
1786
|
+
field: string;
|
|
1787
|
+
};
|
|
1788
|
+
}
|
|
1672
1789
|
declare type ReportTemplateSummary = Omit<ReportTemplateDocument, "template">;
|
|
1673
1790
|
declare interface RichParagraph {
|
|
1674
1791
|
segments: RichSegment[];
|
|
@@ -1822,6 +1939,12 @@ declare interface TreeTableOptions_2 {
|
|
|
1822
1939
|
/** Bounded leaf-to-ancestor aggregate work; default one million. */
|
|
1823
1940
|
maxAggregationVisits?: number;
|
|
1824
1941
|
}
|
|
1942
|
+
/** The same declarative formatting used by list columns, before any output backend. */
|
|
1943
|
+
declare type ValueFormat = ColumnFormat;
|
|
1944
|
+
/** The same declarative formatting used by list columns, before any output backend. */
|
|
1945
|
+
declare type ValueFormat_2 = ColumnFormat_2;
|
|
1946
|
+
/** The same declarative formatting used by list columns, before any output backend. */
|
|
1947
|
+
declare type ValueFormat_3 = ColumnFormat_3;
|
|
1825
1948
|
declare interface XlsxImageOptions {
|
|
1826
1949
|
/** Decoded bytes per unique embedded image; default 16 MiB. */
|
|
1827
1950
|
maxImageBytes?: number;
|
package/dist/vue/async.d.ts
CHANGED
|
@@ -36,6 +36,39 @@ declare interface AssetRenderOptions extends OutputDiagnosticOptions {
|
|
|
36
36
|
assetFailure?: "throw" | "placeholder";
|
|
37
37
|
signal?: AbortSignal;
|
|
38
38
|
}
|
|
39
|
+
/** Serializable symbol settings. Encoders remain in the optional /codes entry. */
|
|
40
|
+
declare interface CodeOptions {
|
|
41
|
+
/** Explicit content, including an empty value, takes precedence over legacy fallbackText. */
|
|
42
|
+
value?: string;
|
|
43
|
+
symbology?: "code128" | "code39" | "ean13" | "ean8";
|
|
44
|
+
errorCorrection?: "L" | "M" | "Q" | "H";
|
|
45
|
+
/** White modules around a symbol: QR >=4, linear >=10, EAN >=11. */
|
|
46
|
+
quietZoneModules?: number;
|
|
47
|
+
/** Human-readable content below a linear barcode. */
|
|
48
|
+
showText?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/** Serializable symbol settings. Encoders remain in the optional /codes entry. */
|
|
51
|
+
declare interface CodeOptions_2 {
|
|
52
|
+
/** Explicit content, including an empty value, takes precedence over legacy fallbackText. */
|
|
53
|
+
value?: string;
|
|
54
|
+
symbology?: "code128" | "code39" | "ean13" | "ean8";
|
|
55
|
+
errorCorrection?: "L" | "M" | "Q" | "H";
|
|
56
|
+
/** White modules around a symbol: QR >=4, linear >=10, EAN >=11. */
|
|
57
|
+
quietZoneModules?: number;
|
|
58
|
+
/** Human-readable content below a linear barcode. */
|
|
59
|
+
showText?: boolean;
|
|
60
|
+
}
|
|
61
|
+
/** Serializable symbol settings. Encoders remain in the optional /codes entry. */
|
|
62
|
+
declare interface CodeOptions_3 {
|
|
63
|
+
/** Explicit content, including an empty value, takes precedence over legacy fallbackText. */
|
|
64
|
+
value?: string;
|
|
65
|
+
symbology?: "code128" | "code39" | "ean13" | "ean8";
|
|
66
|
+
errorCorrection?: "L" | "M" | "Q" | "H";
|
|
67
|
+
/** White modules around a symbol: QR >=4, linear >=10, EAN >=11. */
|
|
68
|
+
quietZoneModules?: number;
|
|
69
|
+
/** Human-readable content below a linear barcode. */
|
|
70
|
+
showText?: boolean;
|
|
71
|
+
}
|
|
39
72
|
/**
|
|
40
73
|
* 列值格式化(声明式、JSON 可序列化)。
|
|
41
74
|
* 在 paginate 的 cellText 出口统一消费:格式化发生在进 RenderPlan 之前,
|
|
@@ -80,6 +113,52 @@ declare type ColumnFormat_2 = {
|
|
|
80
113
|
kind: "date";
|
|
81
114
|
pattern?: string;
|
|
82
115
|
};
|
|
116
|
+
/**
|
|
117
|
+
* 列值格式化(声明式、JSON 可序列化)。
|
|
118
|
+
* 在 paginate 的 cellText 出口统一消费:格式化发生在进 RenderPlan 之前,
|
|
119
|
+
* 三后端(DOM/Canvas/PDF)零改动。
|
|
120
|
+
*
|
|
121
|
+
* 语义约定(v0.9 固化):
|
|
122
|
+
* - number.digits 显式给出 → 精确保留(12.5 + digits:2 → "12.50")
|
|
123
|
+
* - number.thousands 默认 false(千分位显式开启)
|
|
124
|
+
* - date 字符串按"本地时区的日历日"解析(YYYY-MM-DD / YYYY/MM/DD 直取年月日,
|
|
125
|
+
* 不经 Date 字符串构造——后者按 UTC 零点,负时区环境会少一天)
|
|
126
|
+
*/
|
|
127
|
+
declare type ColumnFormat_3 = {
|
|
128
|
+
kind: "number";
|
|
129
|
+
thousands?: boolean;
|
|
130
|
+
digits?: number;
|
|
131
|
+
} | {
|
|
132
|
+
kind: "percent";
|
|
133
|
+
digits?: number;
|
|
134
|
+
} | {
|
|
135
|
+
kind: "date";
|
|
136
|
+
pattern?: string;
|
|
137
|
+
};
|
|
138
|
+
/** A literal own field of the current label record; expressions and paths are not evaluated. */
|
|
139
|
+
declare interface ComponentBinding {
|
|
140
|
+
field: string;
|
|
141
|
+
format?: ValueFormat;
|
|
142
|
+
prefix?: string;
|
|
143
|
+
suffix?: string;
|
|
144
|
+
emptyText?: string;
|
|
145
|
+
}
|
|
146
|
+
/** A literal own field of the current label record; expressions and paths are not evaluated. */
|
|
147
|
+
declare interface ComponentBinding_2 {
|
|
148
|
+
field: string;
|
|
149
|
+
format?: ValueFormat_2;
|
|
150
|
+
prefix?: string;
|
|
151
|
+
suffix?: string;
|
|
152
|
+
emptyText?: string;
|
|
153
|
+
}
|
|
154
|
+
/** A literal own field of the current label record; expressions and paths are not evaluated. */
|
|
155
|
+
declare interface ComponentBinding_3 {
|
|
156
|
+
field: string;
|
|
157
|
+
format?: ValueFormat_3;
|
|
158
|
+
prefix?: string;
|
|
159
|
+
suffix?: string;
|
|
160
|
+
emptyText?: string;
|
|
161
|
+
}
|
|
83
162
|
declare interface ComponentImageContext {
|
|
84
163
|
readonly component: Readonly<PlanComponent>;
|
|
85
164
|
readonly pageIndex: number;
|
|
@@ -394,7 +473,7 @@ declare interface ListColumn_2 {
|
|
|
394
473
|
/** 独立的表头样式,优先于列表级表头样式。 */
|
|
395
474
|
headerStyle?: ComponentStyle_3;
|
|
396
475
|
/** 值格式化(声明式):千分位/小数位、百分比、日期 pattern */
|
|
397
|
-
format?:
|
|
476
|
+
format?: ColumnFormat_3;
|
|
398
477
|
/** 条件格式规则(声明式,命中合并进单元格样式;如负数红字) */
|
|
399
478
|
rules?: StyleRule_2[];
|
|
400
479
|
/** 内容列编辑控制;仍需由预览显式开启 editing,不影响表头/小计只读规则。 */
|
|
@@ -658,6 +737,10 @@ declare interface MachReportMessages extends Partial<ReportCalculationMessages>
|
|
|
658
737
|
pageJumpInvalid?: string;
|
|
659
738
|
pageJumpHint?: string;
|
|
660
739
|
pagination?: string;
|
|
740
|
+
recordNavigation?: string;
|
|
741
|
+
recordInfo?: string;
|
|
742
|
+
prevRecord?: string;
|
|
743
|
+
nextRecord?: string;
|
|
661
744
|
columnSearchHint?: string;
|
|
662
745
|
columnSearchShortcut?: string;
|
|
663
746
|
closeColumnDirectory?: string;
|
|
@@ -1007,6 +1090,10 @@ declare interface PdfFontCheckResult {
|
|
|
1007
1090
|
/** available 仅表示字体资源可达;实际导出仍会校验文字能否编码。 */
|
|
1008
1091
|
declare type PdfFontStatus = "unchecked" | "checking" | "available" | "disabled" | "unverified" | "error";
|
|
1009
1092
|
declare interface PlanComponent {
|
|
1093
|
+
/** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
|
|
1094
|
+
code?: CodeOptions;
|
|
1095
|
+
/** Template-only binding; resolved and removed before constructing the output plan. */
|
|
1096
|
+
binding?: ComponentBinding;
|
|
1010
1097
|
/** Template page furniture repeats per page and reserves its vertical band. */
|
|
1011
1098
|
pageAnchor?: "header" | "footer";
|
|
1012
1099
|
kind: ComponentKind;
|
|
@@ -1031,6 +1118,10 @@ declare interface PlanComponent {
|
|
|
1031
1118
|
fallbackText?: string;
|
|
1032
1119
|
}
|
|
1033
1120
|
declare interface PlanComponent_2 {
|
|
1121
|
+
/** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
|
|
1122
|
+
code?: CodeOptions_2;
|
|
1123
|
+
/** Template-only binding; resolved and removed before constructing the output plan. */
|
|
1124
|
+
binding?: ComponentBinding_2;
|
|
1034
1125
|
/** Template page furniture repeats per page and reserves its vertical band. */
|
|
1035
1126
|
pageAnchor?: "header" | "footer";
|
|
1036
1127
|
kind: ComponentKind_2;
|
|
@@ -1055,6 +1146,10 @@ declare interface PlanComponent_2 {
|
|
|
1055
1146
|
fallbackText?: string;
|
|
1056
1147
|
}
|
|
1057
1148
|
declare interface PlanComponent_3 {
|
|
1149
|
+
/** Optional QR/barcode encoding configuration; no encoder is loaded by the core. */
|
|
1150
|
+
code?: CodeOptions_3;
|
|
1151
|
+
/** Template-only binding; resolved and removed before constructing the output plan. */
|
|
1152
|
+
binding?: ComponentBinding_3;
|
|
1058
1153
|
/** Template page furniture repeats per page and reserves its vertical band. */
|
|
1059
1154
|
pageAnchor?: "header" | "footer";
|
|
1060
1155
|
kind: ComponentKind_3;
|
|
@@ -1626,7 +1721,7 @@ declare interface ReportSaveResult {
|
|
|
1626
1721
|
declare interface ReportTaskEvent {
|
|
1627
1722
|
taskId: string;
|
|
1628
1723
|
correlationId?: string;
|
|
1629
|
-
stage: "query" | "validate" | "layout" | "encode";
|
|
1724
|
+
stage: "query" | "validate" | "layout" | "assets" | "encode";
|
|
1630
1725
|
status: "started" | "completed" | "failed";
|
|
1631
1726
|
reportId?: string;
|
|
1632
1727
|
completed?: number;
|
|
@@ -1642,12 +1737,16 @@ declare interface ReportTemplate {
|
|
|
1642
1737
|
schemaVersion?: string;
|
|
1643
1738
|
/** 参数定义(可选;宿主也可经 ReportPreview 的 paramDefs prop 提供,prop 优先) */
|
|
1644
1739
|
params?: ReportParamDef[];
|
|
1740
|
+
/** Fixed label pages repeat in record → copy → template-page order. */
|
|
1741
|
+
repeat?: ReportTemplateRepeat;
|
|
1645
1742
|
pages: TemplatePage[];
|
|
1646
1743
|
}
|
|
1647
1744
|
declare interface ReportTemplate_2 {
|
|
1648
1745
|
schemaVersion?: string;
|
|
1649
1746
|
/** 参数定义(可选;宿主也可经 ReportPreview 的 paramDefs prop 提供,prop 优先) */
|
|
1650
1747
|
params?: ReportParamDef_2[];
|
|
1748
|
+
/** Fixed label pages repeat in record → copy → template-page order. */
|
|
1749
|
+
repeat?: ReportTemplateRepeat_2;
|
|
1651
1750
|
pages: TemplatePage_2[];
|
|
1652
1751
|
}
|
|
1653
1752
|
/** 可存入数据库/文件的纯 JSON 模板;数据、接口与鉴权仍由宿主提供。 */
|
|
@@ -1669,6 +1768,24 @@ declare interface ReportTemplateProvider {
|
|
|
1669
1768
|
signal?: AbortSignal;
|
|
1670
1769
|
}): Promise<ReportTemplateDocument | undefined>;
|
|
1671
1770
|
}
|
|
1771
|
+
/** Every record emits its copies, each containing all template pages in their original order. */
|
|
1772
|
+
declare interface ReportTemplateRepeat {
|
|
1773
|
+
dataset: string;
|
|
1774
|
+
rowKey?: string;
|
|
1775
|
+
/** Whole copies per record, 1..1000. The field value must be a number, never a numeric string. */
|
|
1776
|
+
copies?: number | {
|
|
1777
|
+
field: string;
|
|
1778
|
+
};
|
|
1779
|
+
}
|
|
1780
|
+
/** Every record emits its copies, each containing all template pages in their original order. */
|
|
1781
|
+
declare interface ReportTemplateRepeat_2 {
|
|
1782
|
+
dataset: string;
|
|
1783
|
+
rowKey?: string;
|
|
1784
|
+
/** Whole copies per record, 1..1000. The field value must be a number, never a numeric string. */
|
|
1785
|
+
copies?: number | {
|
|
1786
|
+
field: string;
|
|
1787
|
+
};
|
|
1788
|
+
}
|
|
1672
1789
|
declare type ReportTemplateSummary = Omit<ReportTemplateDocument, "template">;
|
|
1673
1790
|
declare interface RichParagraph {
|
|
1674
1791
|
segments: RichSegment[];
|
|
@@ -1822,6 +1939,12 @@ declare interface TreeTableOptions_2 {
|
|
|
1822
1939
|
/** Bounded leaf-to-ancestor aggregate work; default one million. */
|
|
1823
1940
|
maxAggregationVisits?: number;
|
|
1824
1941
|
}
|
|
1942
|
+
/** The same declarative formatting used by list columns, before any output backend. */
|
|
1943
|
+
declare type ValueFormat = ColumnFormat;
|
|
1944
|
+
/** The same declarative formatting used by list columns, before any output backend. */
|
|
1945
|
+
declare type ValueFormat_2 = ColumnFormat_2;
|
|
1946
|
+
/** The same declarative formatting used by list columns, before any output backend. */
|
|
1947
|
+
declare type ValueFormat_3 = ColumnFormat_3;
|
|
1825
1948
|
declare interface XlsxImageOptions {
|
|
1826
1949
|
/** Decoded bytes per unique embedded image; default 16 MiB. */
|
|
1827
1950
|
maxImageBytes?: number;
|