@agile-team/mach-report 1.2.2 → 2.1.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/LICENSE +2 -4
- package/LICENSING.md +15 -0
- package/README.md +240 -92
- package/dist/ReportPreview-Dwdsyk9b.js +1558 -0
- package/dist/ReportPreview-VHAIfsz1.cjs +6 -0
- package/dist/index.cjs +5 -5
- package/dist/index.d.cts +738 -14
- package/dist/index.d.ts +738 -14
- package/dist/index.js +858 -805
- package/dist/pdf.cjs +47 -47
- package/dist/pdf.d.cts +155 -6
- package/dist/pdf.d.ts +155 -6
- package/dist/pdf.js +3542 -3466
- package/dist/plugin-Bl00j_CP.cjs +1 -0
- package/dist/plugin-DVScnZ4C.js +25 -0
- package/dist/report-params-BB85g7mg.js +10 -0
- package/dist/report-params-D1NeY-eR.cjs +1 -0
- package/dist/sql.cjs +65 -64
- package/dist/sql.d.cts +109 -5
- package/dist/sql.d.ts +109 -5
- package/dist/sql.js +7947 -7922
- package/dist/style-CFZ-HE2s.cjs +3 -0
- package/dist/{style-6ihHKVCM.js → style-DnmtG7Gl.js} +69 -81
- package/dist/style.css +1 -1
- package/dist/vue/async.d.cts +769 -335
- package/dist/vue/async.d.ts +769 -335
- package/dist/vue/index.d.cts +1321 -14
- package/dist/vue/index.d.ts +1321 -14
- package/dist/vue-async.cjs +1 -1
- package/dist/vue-async.js +11 -12
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +130 -50
- package/dist/xlsx.cjs +20 -20
- package/dist/xlsx.d.cts +2292 -5
- package/dist/xlsx.d.ts +2292 -5
- package/dist/xlsx.js +5452 -5443
- package/package.json +7 -13
- package/dist/ReportPreview-CJLvkTVn.cjs +0 -6
- package/dist/ReportPreview-mZiGtf0L.js +0 -1231
- package/dist/builder/template-builder.d.ts +0 -69
- package/dist/compat/jh4j-template.d.ts +0 -12
- package/dist/defaults.d.ts +0 -27
- package/dist/format.d.ts +0 -48
- package/dist/layout/paginate.d.ts +0 -97
- package/dist/layout/textwrap.d.ts +0 -36
- package/dist/manager/api.d.ts +0 -45
- package/dist/manager/index.d.ts +0 -2
- package/dist/manager/types.d.ts +0 -50
- package/dist/manager.cjs +0 -1
- package/dist/manager.d.cts +0 -5
- package/dist/manager.d.ts +0 -5
- package/dist/manager.js +0 -104
- package/dist/pdf/font-loader.d.ts +0 -6
- package/dist/pdf/index.d.ts +0 -2
- package/dist/pdf/render-pdf.d.ts +0 -25
- package/dist/plugin-C4qpbdMJ.cjs +0 -1
- package/dist/plugin-DcmAPK_K.js +0 -85
- package/dist/render/canvas.d.ts +0 -76
- package/dist/render/dom.d.ts +0 -10
- package/dist/render/grid-geometry.d.ts +0 -41
- package/dist/render/style.d.ts +0 -33
- package/dist/render/window.d.ts +0 -23
- package/dist/schema/render-plan.d.ts +0 -96
- package/dist/schema/validate.d.ts +0 -15
- package/dist/sql/ast-check.d.ts +0 -14
- package/dist/sql/compile.d.ts +0 -31
- package/dist/sql/expr.d.ts +0 -21
- package/dist/sql/index.d.ts +0 -4
- package/dist/sql/tokenizer.d.ts +0 -25
- package/dist/style-Xq08-IsV.cjs +0 -3
- package/dist/units.d.ts +0 -11
- package/dist/vue/ReportParamPanel.d.ts +0 -19
- package/dist/vue/ReportPreview.d.ts +0 -209
- package/dist/vue/ReportToolbar.d.ts +0 -42
- package/dist/vue/adapters.d.ts +0 -40
- package/dist/vue/composables/useHighlight.d.ts +0 -8
- package/dist/vue/composables/usePageWindow.d.ts +0 -25
- package/dist/vue/composables/usePrintExport.d.ts +0 -40
- package/dist/vue/composables/useReportSearch.d.ts +0 -73
- package/dist/vue/composables/useZoom.d.ts +0 -15
- package/dist/vue/config.d.ts +0 -108
- package/dist/vue/controller.d.ts +0 -29
- package/dist/vue/errors.d.ts +0 -16
- package/dist/vue/injection-keys.d.ts +0 -14
- package/dist/vue/local-adapter.d.ts +0 -12
- package/dist/vue/pdf-exporter.d.ts +0 -13
- package/dist/vue/plugin.d.ts +0 -354
- package/dist/xlsx/render-xlsx.d.ts +0 -20
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { ListColumn, ListComponent, ReportTemplate, TemplatePage } from '../layout/paginate';
|
|
2
|
-
import { ComponentStyle, PlanComponent } from '../schema/render-plan';
|
|
3
|
-
import { PAPER_SIZES } from '../units';
|
|
4
|
-
type Geometry = Partial<Pick<PlanComponent, "leftMm" | "topMm" | "widthMm" | "heightMm">>;
|
|
5
|
-
/** 纸张预设名(对齐 PAPER_SIZES 表) */
|
|
6
|
-
export type PaperName = keyof typeof PAPER_SIZES;
|
|
7
|
-
export interface PageOptions {
|
|
8
|
-
/** 横向(宽高互换) */
|
|
9
|
-
landscape?: boolean;
|
|
10
|
-
margins?: Partial<Pick<TemplatePage, "marginTopMm" | "marginBottomMm" | "marginLeftMm" | "marginRightMm">>;
|
|
11
|
-
}
|
|
12
|
-
type PageMargins = Partial<Pick<TemplatePage, "marginTopMm" | "marginBottomMm" | "marginLeftMm" | "marginRightMm">>;
|
|
13
|
-
/** 解析纸张参数:数字按宽高使用;字符串查 PAPER_SIZES 预设;缺省 A4 纵向 */
|
|
14
|
-
export declare function resolvePaper(paper: PaperName | {
|
|
15
|
-
widthMm: number;
|
|
16
|
-
heightMm: number;
|
|
17
|
-
} | number, heightArg?: number, landscape?: boolean): {
|
|
18
|
-
widthMm: number;
|
|
19
|
-
heightMm: number;
|
|
20
|
-
};
|
|
21
|
-
export declare class TemplateBuilder {
|
|
22
|
-
readonly pages: TemplatePage[];
|
|
23
|
-
private pending;
|
|
24
|
-
private templateParams;
|
|
25
|
-
/**
|
|
26
|
-
* 声明报表参数(链式,可放在 .page() 前后任意位置):
|
|
27
|
-
* 渲染组件据此自动生成查询面板(也可由 paramDefs prop 提供,prop 优先)。
|
|
28
|
-
*
|
|
29
|
-
* ```ts
|
|
30
|
-
* createTemplate()
|
|
31
|
-
* .params([
|
|
32
|
-
* { field: "whCode", label: "仓库", type: "select", options: [...], required: true },
|
|
33
|
-
* { field: "date", label: "日期", type: "date", defaultValue: "2026-09-30" }
|
|
34
|
-
* ])
|
|
35
|
-
* .page("a4").text(...).list(...)
|
|
36
|
-
* .build();
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
params(defs: NonNullable<ReportTemplate["params"]>): this;
|
|
40
|
-
/**
|
|
41
|
-
* 新建页。纸张支持三种写法:
|
|
42
|
-
* - 预设名:.page("a4", { landscape: true, margins: {...} })
|
|
43
|
-
* - 数字:.page(210, 297)(第三参数兼容旧 margins 对象或新 options)
|
|
44
|
-
* - 对象:.page({ widthMm: 210, heightMm: 297 })
|
|
45
|
-
*/
|
|
46
|
-
page(paper?: PaperName | {
|
|
47
|
-
widthMm: number;
|
|
48
|
-
heightMm: number;
|
|
49
|
-
} | number, optionsOrHeight?: number | PageOptions, maybeOptions?: PageOptions | PageMargins): PageBuilder;
|
|
50
|
-
collect(): void;
|
|
51
|
-
build(): ReportTemplate;
|
|
52
|
-
}
|
|
53
|
-
export declare class PageBuilder {
|
|
54
|
-
private readonly parent;
|
|
55
|
-
private readonly page;
|
|
56
|
-
private components;
|
|
57
|
-
constructor(parent: TemplateBuilder, page: Omit<TemplatePage, "components">);
|
|
58
|
-
text(content: string, geometry?: Geometry, style?: ComponentStyle): this;
|
|
59
|
-
list(dataset: string, geometry: Partial<Pick<ListComponent, "leftMm" | "topMm" | "widthMm">>, columns: ListColumn[], options?: Partial<Omit<ListComponent, "kind" | "leftMm" | "topMm" | "widthMm" | "dataset" | "columns">>): this;
|
|
60
|
-
rect(geometry: Required<Pick<PlanComponent, "leftMm" | "topMm" | "widthMm" | "heightMm">>, style?: ComponentStyle): this;
|
|
61
|
-
line(leftMm: number, topMm: number, widthMm: number, style?: ComponentStyle): this;
|
|
62
|
-
barcode(content: string, geometry: Required<Geometry>): this;
|
|
63
|
-
qrcode(content: string, sizeMm: number, leftMm: number, topMm: number): this;
|
|
64
|
-
buildPage(): TemplatePage;
|
|
65
|
-
done(): TemplateBuilder;
|
|
66
|
-
build(): ReportTemplate;
|
|
67
|
-
}
|
|
68
|
-
export declare function createTemplate(): TemplateBuilder;
|
|
69
|
-
export {};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { ReportTemplate } from '../layout/paginate';
|
|
2
|
-
export interface Jh4jImportResult {
|
|
3
|
-
template: ReportTemplate;
|
|
4
|
-
warnings: string[];
|
|
5
|
-
}
|
|
6
|
-
type Raw = Record<string, unknown>;
|
|
7
|
-
/**
|
|
8
|
-
* jh4j 模板 content(exportBackendPrintConfig 产物,见 docs/reverse-findings.md §6)
|
|
9
|
-
* → MachReport ReportTemplate。单向转换,未知结构降级 + 告警,绝不抛错。
|
|
10
|
-
*/
|
|
11
|
-
export declare function importJh4jTemplateContent(content: string | Raw): Jh4jImportResult;
|
|
12
|
-
export {};
|
package/dist/defaults.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 全引擎共享默认值(唯一真相源)。
|
|
3
|
-
*
|
|
4
|
-
* 修改这里的任何常量前请注意消费方:
|
|
5
|
-
* - LINE_HEIGHT:分页行高估算 / Canvas / PDF 三处换算必须一致
|
|
6
|
-
* - DEFAULT_FONT_PT / DEFAULT_BORDER_PT:三后端默认字号与线宽
|
|
7
|
-
* - SCHEMA_VERSION_*:RenderPlan 版本标识(adapter 产出侧使用)
|
|
8
|
-
*
|
|
9
|
-
* 历史:这些值曾散落在 paginate/canvas/pdf/dom 四个文件中各写一份,
|
|
10
|
-
* 是三后端漂移的温床,收敛于此。
|
|
11
|
-
*/
|
|
12
|
-
/** 默认行高倍数(基线距 = 字号 × 该系数,与 jh4j 打印口径一致) */
|
|
13
|
-
export declare const LINE_HEIGHT = 1.35;
|
|
14
|
-
/** 默认字号(pt),对齐 jh4j 模板缺省值 */
|
|
15
|
-
export declare const DEFAULT_FONT_PT = 10.5;
|
|
16
|
-
/** 默认边框线宽(pt) */
|
|
17
|
-
export declare const DEFAULT_BORDER_PT = 0.75;
|
|
18
|
-
/** 默认描边色(#333 与 jh4j 网格线一致) */
|
|
19
|
-
export declare const DEFAULT_STROKE_COLOR = "#333333";
|
|
20
|
-
/** 默认文本色 */
|
|
21
|
-
export declare const DEFAULT_TEXT_COLOR = "#000000";
|
|
22
|
-
/** RenderPlan 正式 schema 版本(core 分页引擎产出) */
|
|
23
|
-
export declare const SCHEMA_VERSION_MACH = "1.0.0-mach";
|
|
24
|
-
/** 本地渲染适配器产出版本标识(vue/createLocalFetcher) */
|
|
25
|
-
export declare const SCHEMA_VERSION_LOCAL = "mach-local";
|
|
26
|
-
/** jh4j gridPlan 兼容数据标识(vue/createJh4jGridPlanFetcher) */
|
|
27
|
-
export declare const SCHEMA_VERSION_JH4J = "jh4j-compatible";
|
package/dist/format.d.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 列值格式化(声明式、JSON 可序列化——不破坏 gridPlan 契约)。
|
|
3
|
-
* 在 paginate 的 cellText 出口统一消费:格式化发生在进 RenderPlan 之前,
|
|
4
|
-
* 三后端(DOM/Canvas/PDF)零改动。
|
|
5
|
-
*
|
|
6
|
-
* 语义约定(v0.9 固化):
|
|
7
|
-
* - number.digits 显式给出 → 精确保留(12.5 + digits:2 → "12.50")
|
|
8
|
-
* - number.thousands 默认 false(千分位显式开启)
|
|
9
|
-
* - date 字符串按"本地时区的日历日"解析(YYYY-MM-DD / YYYY/MM/DD 直取年月日,
|
|
10
|
-
* 不经 Date 字符串构造——后者按 UTC 零点,负时区环境会少一天)
|
|
11
|
-
*/
|
|
12
|
-
export type ColumnFormat = {
|
|
13
|
-
kind: "number";
|
|
14
|
-
thousands?: boolean;
|
|
15
|
-
digits?: number;
|
|
16
|
-
} | {
|
|
17
|
-
kind: "percent";
|
|
18
|
-
digits?: number;
|
|
19
|
-
} | {
|
|
20
|
-
kind: "date";
|
|
21
|
-
pattern?: string;
|
|
22
|
-
};
|
|
23
|
-
/** 日历日字符串 → 本地 Date(不含时间的纯日期,杜绝 UTC 偏移) */
|
|
24
|
-
export declare function parseDateLocal(input: string): Date | null;
|
|
25
|
-
export declare function toNumber(value: unknown): number | null;
|
|
26
|
-
/**
|
|
27
|
-
* 应用格式化。非数值/无法解析时原样返回基础文本(降级不报错):
|
|
28
|
-
* - number:digits 小数位 + 可选千分位(12,345.60;thousands 默认 false)
|
|
29
|
-
* - percent:×100 + % 后缀(digits 默认 2)
|
|
30
|
-
* - date:Date/日历日字符串 → pattern(默认 YYYY-MM-DD);不可解析原样返回
|
|
31
|
-
*/
|
|
32
|
-
export declare function formatValue(value: unknown, format?: ColumnFormat): string;
|
|
33
|
-
/** 条件格式规则求值(声明式,见 ListColumn.rules) */
|
|
34
|
-
export interface StyleRule {
|
|
35
|
-
when: {
|
|
36
|
-
field: string;
|
|
37
|
-
op: ">" | ">=" | "<" | "<=" | "==" | "!=";
|
|
38
|
-
value: number | string;
|
|
39
|
-
};
|
|
40
|
-
/** 命中时合并进单元格样式(color/bold/backgroundColor 等) */
|
|
41
|
-
style: Record<string, unknown>;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* 规则求值语义:
|
|
45
|
-
* - 空值(null/undefined/"")永不命中(避免 Number("")===0 把空当 0 的隐式陷阱)
|
|
46
|
-
* - 数值比较:两侧均可数值化才比较;否则退化为字符串比较
|
|
47
|
-
*/
|
|
48
|
-
export declare function evalStyleRule(row: Record<string, unknown>, when: StyleRule["when"]): boolean;
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { ComponentStyle, PlanComponent, RenderPlan } from '../schema/render-plan';
|
|
2
|
-
import { TextMeasurer } from './textwrap';
|
|
3
|
-
import { ColumnFormat, StyleRule } from '../format';
|
|
4
|
-
export interface ListColumn {
|
|
5
|
-
header: string;
|
|
6
|
-
field: string;
|
|
7
|
-
widthMm: number;
|
|
8
|
-
style?: ComponentStyle;
|
|
9
|
-
/** 值格式化(声明式):千分位/小数位、百分比、日期 pattern */
|
|
10
|
-
format?: ColumnFormat;
|
|
11
|
-
/** 条件格式规则(声明式,命中合并进单元格样式;如负数红字) */
|
|
12
|
-
rules?: StyleRule[];
|
|
13
|
-
}
|
|
14
|
-
/** 分组小计配置(声明式,见 ListComponent.groupBy) */
|
|
15
|
-
export interface ListGroupBy {
|
|
16
|
-
/** 分组字段(值变化即切组) */
|
|
17
|
-
field: string;
|
|
18
|
-
/** 组头文案模板,{value} 占位(默认 "{value}") */
|
|
19
|
-
headerTemplate?: string;
|
|
20
|
-
headerStyle?: ComponentStyle;
|
|
21
|
-
/** 需要小计的列字段(组尾输出合计行;数值列求和,其余输出首值/留空) */
|
|
22
|
-
subtotal?: string[];
|
|
23
|
-
subtotalStyle?: ComponentStyle;
|
|
24
|
-
subtotalLabel?: string;
|
|
25
|
-
/** 组头防孤行(默认 true:页尾放不下"组头+首行"时整体换页) */
|
|
26
|
-
keepWithNext?: boolean;
|
|
27
|
-
}
|
|
28
|
-
export type ListGrandTotal = boolean | {
|
|
29
|
-
label?: string;
|
|
30
|
-
style?: ComponentStyle;
|
|
31
|
-
/** 合计列(缺省沿用 groupBy.subtotal) */
|
|
32
|
-
fields?: string[];
|
|
33
|
-
};
|
|
34
|
-
export interface ListComponent {
|
|
35
|
-
kind: "list";
|
|
36
|
-
id?: string;
|
|
37
|
-
leftMm: number;
|
|
38
|
-
topMm: number;
|
|
39
|
-
widthMm: number;
|
|
40
|
-
dataset: string;
|
|
41
|
-
columns: ListColumn[];
|
|
42
|
-
fontSizePt?: number;
|
|
43
|
-
headerBold?: boolean;
|
|
44
|
-
rowHeightMm?: number;
|
|
45
|
-
paddingMm?: number;
|
|
46
|
-
headerEveryPage?: boolean;
|
|
47
|
-
headerBackgroundColor?: string;
|
|
48
|
-
border?: boolean;
|
|
49
|
-
/** 分组小计(组头/组尾小计/组头防孤行) */
|
|
50
|
-
groupBy?: ListGroupBy;
|
|
51
|
-
/** 末尾总合计行(依赖 groupBy.subtotal 或显式 fields) */
|
|
52
|
-
grandTotal?: ListGrandTotal;
|
|
53
|
-
}
|
|
54
|
-
export type TemplateComponent = PlanComponent | ListComponent;
|
|
55
|
-
export interface TemplatePage {
|
|
56
|
-
widthMm: number;
|
|
57
|
-
heightMm: number;
|
|
58
|
-
marginTopMm?: number;
|
|
59
|
-
marginBottomMm?: number;
|
|
60
|
-
marginLeftMm?: number;
|
|
61
|
-
marginRightMm?: number;
|
|
62
|
-
components: TemplateComponent[];
|
|
63
|
-
}
|
|
64
|
-
/** 报表参数定义(声明式,模板自描述参数面:渲染组件据此生成查询面板) */
|
|
65
|
-
export interface ReportParamDef {
|
|
66
|
-
/** 参数名(传入 params,与数据集 SQL #{field} 绑定对应) */
|
|
67
|
-
field: string;
|
|
68
|
-
/** 显示名(缺省用 field) */
|
|
69
|
-
label?: string;
|
|
70
|
-
type?: "text" | "number" | "date" | "select";
|
|
71
|
-
/** select 选项 */
|
|
72
|
-
options?: Array<{
|
|
73
|
-
label: string;
|
|
74
|
-
value: string;
|
|
75
|
-
}>;
|
|
76
|
-
defaultValue?: string;
|
|
77
|
-
required?: boolean;
|
|
78
|
-
placeholder?: string;
|
|
79
|
-
}
|
|
80
|
-
export interface ReportTemplate {
|
|
81
|
-
schemaVersion?: string;
|
|
82
|
-
/** 参数定义(可选;宿主也可经 ReportPreview 的 paramDefs prop 提供,prop 优先) */
|
|
83
|
-
params?: ReportParamDef[];
|
|
84
|
-
pages: TemplatePage[];
|
|
85
|
-
}
|
|
86
|
-
export type DatasetRows = Record<string, Record<string, unknown>[]>;
|
|
87
|
-
export interface PaginateOptions {
|
|
88
|
-
/** 每行额外占高(mm),压测专用钩子 */
|
|
89
|
-
mmPerRow?: number;
|
|
90
|
-
/** 文本测量器(默认启发式;浏览器端可注入 canvas 测量校准) */
|
|
91
|
-
measurer?: TextMeasurer;
|
|
92
|
-
}
|
|
93
|
-
export interface PaginateResult {
|
|
94
|
-
plan: RenderPlan;
|
|
95
|
-
warnings: string[];
|
|
96
|
-
}
|
|
97
|
-
export declare function paginateTemplate(template: ReportTemplate, datasets: DatasetRows, optionsOrMmPerRow?: number | PaginateOptions): PaginateResult;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 文本测量与折行(分页/Canvas/PDF 共用的唯一折行真相源)。
|
|
3
|
-
*
|
|
4
|
-
* 测量模型可注入(TextMeasurer):
|
|
5
|
-
* - 默认 createHeuristicMeasurer():CJK/拉丁宽度启发式(零依赖、Node 可用)
|
|
6
|
-
* - 浏览器端可注入 createCanvasMeasurer()(真字体 metrics,消除三端折行差异)
|
|
7
|
-
*/
|
|
8
|
-
export interface TextMeasureOptions {
|
|
9
|
-
fontSizePt: number;
|
|
10
|
-
bold?: boolean;
|
|
11
|
-
letterSpacingPt?: number;
|
|
12
|
-
}
|
|
13
|
-
/** 宽度测量接口:返回文本在给定字号下的宽度(mm)。实现必须无副作用、可缓存。 */
|
|
14
|
-
export interface TextMeasurer {
|
|
15
|
-
measureMm(text: string, options: TextMeasureOptions): number;
|
|
16
|
-
}
|
|
17
|
-
export declare function charWidthEm(ch: string): number;
|
|
18
|
-
/** 启发式测量器:宽度模型与 jh4j 近似口径一致(默认实现) */
|
|
19
|
-
export declare const heuristicMeasurer: TextMeasurer;
|
|
20
|
-
/** 兼容旧 API:默认启发式测量 */
|
|
21
|
-
export declare function createHeuristicMeasurer(): TextMeasurer;
|
|
22
|
-
export declare function measureTextMm(text: string, options: TextMeasureOptions): number;
|
|
23
|
-
/**
|
|
24
|
-
* 浏览器 Canvas 测量器:用真实字体 metrics 校准宽度(可选注入)。
|
|
25
|
-
* 无 2D 环境时自动回退启发式(Node/SSR 安全)。
|
|
26
|
-
*/
|
|
27
|
-
export declare function createCanvasMeasurer(getCtx2d: () => CanvasRenderingContext2D | null): TextMeasurer;
|
|
28
|
-
/**
|
|
29
|
-
* 文本折行:
|
|
30
|
-
* - CJK 字符任意位置可断(与既有行为一致)
|
|
31
|
-
* - 连续拉丁/数字串视为一个词,仅在词间(空格/CJK 边界)断行;
|
|
32
|
-
* 单词本身超宽时按字符硬拆(兜底,不无限溢出)
|
|
33
|
-
* - 换行符强制断行;行首不保留折行产生的空格
|
|
34
|
-
* - 可注入 TextMeasurer(默认启发式)
|
|
35
|
-
*/
|
|
36
|
-
export declare function wrapText(text: string, maxWidthMm: number, options: TextMeasureOptions, measurer?: TextMeasurer): string[];
|
package/dist/manager/api.d.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { DatasetRecord, ImportStrategy, PageResult, ParamRecord, ReportRecord, RequestFn } from './types';
|
|
2
|
-
export declare function createReportAdminClient(options: {
|
|
3
|
-
request: RequestFn;
|
|
4
|
-
baseUrl?: string;
|
|
5
|
-
}): {
|
|
6
|
-
/** 模板列表(分页) */
|
|
7
|
-
listReports(query?: {
|
|
8
|
-
current?: number;
|
|
9
|
-
size?: number;
|
|
10
|
-
directoryId?: string;
|
|
11
|
-
keyword?: string;
|
|
12
|
-
}): Promise<PageResult<ReportRecord>>;
|
|
13
|
-
/** 模板详情(content 为 jh4j 私有模板 JSON 字符串,可喂给 importJh4jTemplateContent) */
|
|
14
|
-
getReport(id: string): Promise<ReportRecord>;
|
|
15
|
-
/** 保存模板(jh4j:PUT,body {id, code, name, content}) */
|
|
16
|
-
updateReport(input: {
|
|
17
|
-
id: string;
|
|
18
|
-
code?: string;
|
|
19
|
-
name?: string;
|
|
20
|
-
content: string;
|
|
21
|
-
}): Promise<unknown>;
|
|
22
|
-
/** 导出模板定义包(body = ID 数组,返回 ZIP blob) */
|
|
23
|
-
exportDefinition(ids: string[]): Promise<unknown>;
|
|
24
|
-
/** 导入模板定义包(multipart: file + strategy) */
|
|
25
|
-
importDefinition(file: File | Blob, strategy: ImportStrategy): Promise<unknown>;
|
|
26
|
-
/** 数据集列表 */
|
|
27
|
-
listDatasets(reportId: string): Promise<PageResult<DatasetRecord>>;
|
|
28
|
-
/** 参数列表 */
|
|
29
|
-
listParams(reportId: string): Promise<PageResult<ParamRecord>>;
|
|
30
|
-
/** 模板锁:进入设计器前获取(40s 心跳由 holdLock 驱动) */
|
|
31
|
-
acquireLock(reportId: string): Promise<unknown>;
|
|
32
|
-
lockHeartbeat(reportId: string): Promise<unknown>;
|
|
33
|
-
releaseLock(reportId: string): Promise<unknown>;
|
|
34
|
-
/**
|
|
35
|
-
* 持锁执行:acquire → fn(期间自动心跳)→ release(finally)。
|
|
36
|
-
* 返回 fn 的结果;获取锁失败时抛 ReportAdminError。
|
|
37
|
-
* 心跳连续失败(默认 2 次)视为锁丢失:触发 onLockLost 回调并停止心跳,
|
|
38
|
-
* fn 继续执行(避免中途丢弃用户编辑),由调用方决定是否提示/中止。
|
|
39
|
-
*/
|
|
40
|
-
holdLock<T>(reportId: string, fn: () => Promise<T>, options?: {
|
|
41
|
-
onLockLost?: (reason: string) => void;
|
|
42
|
-
heartbeatFailLimit?: number;
|
|
43
|
-
}): Promise<T>;
|
|
44
|
-
};
|
|
45
|
-
export type ReportAdminClient = ReturnType<typeof createReportAdminClient>;
|
package/dist/manager/index.d.ts
DELETED
package/dist/manager/types.d.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
export interface ReportRecord {
|
|
2
|
-
id: string;
|
|
3
|
-
code?: string;
|
|
4
|
-
name?: string;
|
|
5
|
-
publishStatus?: string;
|
|
6
|
-
directoryId?: string;
|
|
7
|
-
updateTime?: string;
|
|
8
|
-
[key: string]: unknown;
|
|
9
|
-
}
|
|
10
|
-
export interface PageResult<T> {
|
|
11
|
-
records: T[];
|
|
12
|
-
total?: number;
|
|
13
|
-
current?: number;
|
|
14
|
-
size?: number;
|
|
15
|
-
}
|
|
16
|
-
export interface DatasetRecord {
|
|
17
|
-
id?: string;
|
|
18
|
-
reportId?: string;
|
|
19
|
-
code?: string;
|
|
20
|
-
name?: string;
|
|
21
|
-
type?: string;
|
|
22
|
-
datasourceCode?: string;
|
|
23
|
-
sqlText?: string;
|
|
24
|
-
apiUrl?: string;
|
|
25
|
-
fields?: unknown[];
|
|
26
|
-
[key: string]: unknown;
|
|
27
|
-
}
|
|
28
|
-
export interface ParamRecord {
|
|
29
|
-
id?: string;
|
|
30
|
-
reportId?: string;
|
|
31
|
-
name?: string;
|
|
32
|
-
defaultValue?: string;
|
|
33
|
-
[key: string]: unknown;
|
|
34
|
-
}
|
|
35
|
-
export type ImportStrategy = "overwrite" | "skip";
|
|
36
|
-
export type RequestFn = (config: {
|
|
37
|
-
url: string;
|
|
38
|
-
method: string;
|
|
39
|
-
params?: Record<string, unknown>;
|
|
40
|
-
data?: unknown;
|
|
41
|
-
}) => Promise<unknown>;
|
|
42
|
-
export interface ApiResponse<T = unknown> {
|
|
43
|
-
code?: number;
|
|
44
|
-
message?: string;
|
|
45
|
-
data?: T;
|
|
46
|
-
}
|
|
47
|
-
export declare class ReportAdminError extends Error {
|
|
48
|
-
readonly url: string;
|
|
49
|
-
constructor(message: string, url: string);
|
|
50
|
-
}
|
package/dist/manager.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class h extends Error{constructor(a,r){super(a),this.url=r,this.name="ReportAdminError"}}const o="/report/codePrintReport",d="/report/codePrintReportLock";function n(s,a){const r=s;if(r&&r.code!=null&&r.code!==200)throw new h(String(r.message||"请求失败"),a);return r?.data??r}function $(s){const{request:a}=s,r=s.baseUrl??"";return{async listReports(e={}){const t=`${r}${o}/list`;return n(await a({url:t,method:"get",params:{current:1,size:20,...e}}),t)},async getReport(e){const t=`${r}${o}/getById`;return n(await a({url:t,method:"get",params:{id:e}}),t)},async updateReport(e){const t=`${r}${o}/update`;return n(await a({url:t,method:"put",data:e}),t)},async exportDefinition(e){const t=`${r}${o}/exportDefinition`;return a({url:t,method:"post",data:e})},async importDefinition(e,t){const c=`${r}${o}/importDefinition`,i=new FormData;return i.append("file",e),i.append("strategy",t),a({url:c,method:"post",data:i})},async listDatasets(e){const t=`${r}${o}Ds/list`;return n(await a({url:t,method:"get",params:{reportId:e,current:1,size:999}}),t)},async listParams(e){const t=`${r}${o}Param/list`;return n(await a({url:t,method:"get",params:{reportId:e,current:1,size:999}}),t)},async acquireLock(e){const t=`${r}${d}/acquire`;return n(await a({url:t,method:"post",data:{reportId:e}}),t)},async lockHeartbeat(e){const t=`${r}${d}/heartbeat`;return n(await a({url:t,method:"post",data:{reportId:e}}),t)},async releaseLock(e){const t=`${r}${d}/release`;return n(await a({url:t,method:"post",data:{reportId:e}}),t)},async holdLock(e,t,c={}){await this.acquireLock(e);const i=Math.max(1,c.heartbeatFailLimit??2);let l=0,m=!1;const p=setInterval(()=>{this.lockHeartbeat(e).then(()=>{l=0}).catch(u=>{l++,!m&&l>=i&&(m=!0,c.onLockLost?.(`模板锁心跳连续 ${l} 次失败(${u instanceof Error?u.message:String(u)}),锁可能已被释放`),clearInterval(p))})},4e4);try{return await t()}finally{clearInterval(p),await this.releaseLock(e).catch(()=>{})}}}}exports.ReportAdminError=h;exports.createReportAdminClient=$;
|
package/dist/manager.d.cts
DELETED
package/dist/manager.d.ts
DELETED
package/dist/manager.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
class h extends Error {
|
|
2
|
-
constructor(a, r) {
|
|
3
|
-
super(a), this.url = r, this.name = "ReportAdminError";
|
|
4
|
-
}
|
|
5
|
-
}
|
|
6
|
-
const o = "/report/codePrintReport", d = "/report/codePrintReportLock";
|
|
7
|
-
function n(s, a) {
|
|
8
|
-
const r = s;
|
|
9
|
-
if (r && r.code != null && r.code !== 200)
|
|
10
|
-
throw new h(String(r.message || "请求失败"), a);
|
|
11
|
-
return r?.data ?? r;
|
|
12
|
-
}
|
|
13
|
-
function $(s) {
|
|
14
|
-
const { request: a } = s, r = s.baseUrl ?? "";
|
|
15
|
-
return {
|
|
16
|
-
/** 模板列表(分页) */
|
|
17
|
-
async listReports(e = {}) {
|
|
18
|
-
const t = `${r}${o}/list`;
|
|
19
|
-
return n(
|
|
20
|
-
await a({ url: t, method: "get", params: { current: 1, size: 20, ...e } }),
|
|
21
|
-
t
|
|
22
|
-
);
|
|
23
|
-
},
|
|
24
|
-
/** 模板详情(content 为 jh4j 私有模板 JSON 字符串,可喂给 importJh4jTemplateContent) */
|
|
25
|
-
async getReport(e) {
|
|
26
|
-
const t = `${r}${o}/getById`;
|
|
27
|
-
return n(await a({ url: t, method: "get", params: { id: e } }), t);
|
|
28
|
-
},
|
|
29
|
-
/** 保存模板(jh4j:PUT,body {id, code, name, content}) */
|
|
30
|
-
async updateReport(e) {
|
|
31
|
-
const t = `${r}${o}/update`;
|
|
32
|
-
return n(await a({ url: t, method: "put", data: e }), t);
|
|
33
|
-
},
|
|
34
|
-
/** 导出模板定义包(body = ID 数组,返回 ZIP blob) */
|
|
35
|
-
async exportDefinition(e) {
|
|
36
|
-
const t = `${r}${o}/exportDefinition`;
|
|
37
|
-
return a({ url: t, method: "post", data: e });
|
|
38
|
-
},
|
|
39
|
-
/** 导入模板定义包(multipart: file + strategy) */
|
|
40
|
-
async importDefinition(e, t) {
|
|
41
|
-
const c = `${r}${o}/importDefinition`, i = new FormData();
|
|
42
|
-
return i.append("file", e), i.append("strategy", t), a({ url: c, method: "post", data: i });
|
|
43
|
-
},
|
|
44
|
-
/** 数据集列表 */
|
|
45
|
-
async listDatasets(e) {
|
|
46
|
-
const t = `${r}${o}Ds/list`;
|
|
47
|
-
return n(
|
|
48
|
-
await a({ url: t, method: "get", params: { reportId: e, current: 1, size: 999 } }),
|
|
49
|
-
t
|
|
50
|
-
);
|
|
51
|
-
},
|
|
52
|
-
/** 参数列表 */
|
|
53
|
-
async listParams(e) {
|
|
54
|
-
const t = `${r}${o}Param/list`;
|
|
55
|
-
return n(
|
|
56
|
-
await a({ url: t, method: "get", params: { reportId: e, current: 1, size: 999 } }),
|
|
57
|
-
t
|
|
58
|
-
);
|
|
59
|
-
},
|
|
60
|
-
/** 模板锁:进入设计器前获取(40s 心跳由 holdLock 驱动) */
|
|
61
|
-
async acquireLock(e) {
|
|
62
|
-
const t = `${r}${d}/acquire`;
|
|
63
|
-
return n(await a({ url: t, method: "post", data: { reportId: e } }), t);
|
|
64
|
-
},
|
|
65
|
-
async lockHeartbeat(e) {
|
|
66
|
-
const t = `${r}${d}/heartbeat`;
|
|
67
|
-
return n(await a({ url: t, method: "post", data: { reportId: e } }), t);
|
|
68
|
-
},
|
|
69
|
-
async releaseLock(e) {
|
|
70
|
-
const t = `${r}${d}/release`;
|
|
71
|
-
return n(await a({ url: t, method: "post", data: { reportId: e } }), t);
|
|
72
|
-
},
|
|
73
|
-
/**
|
|
74
|
-
* 持锁执行:acquire → fn(期间自动心跳)→ release(finally)。
|
|
75
|
-
* 返回 fn 的结果;获取锁失败时抛 ReportAdminError。
|
|
76
|
-
* 心跳连续失败(默认 2 次)视为锁丢失:触发 onLockLost 回调并停止心跳,
|
|
77
|
-
* fn 继续执行(避免中途丢弃用户编辑),由调用方决定是否提示/中止。
|
|
78
|
-
*/
|
|
79
|
-
async holdLock(e, t, c = {}) {
|
|
80
|
-
await this.acquireLock(e);
|
|
81
|
-
const i = Math.max(1, c.heartbeatFailLimit ?? 2);
|
|
82
|
-
let l = 0, m = !1;
|
|
83
|
-
const p = setInterval(() => {
|
|
84
|
-
this.lockHeartbeat(e).then(() => {
|
|
85
|
-
l = 0;
|
|
86
|
-
}).catch((u) => {
|
|
87
|
-
l++, !m && l >= i && (m = !0, c.onLockLost?.(
|
|
88
|
-
`模板锁心跳连续 ${l} 次失败(${u instanceof Error ? u.message : String(u)}),锁可能已被释放`
|
|
89
|
-
), clearInterval(p));
|
|
90
|
-
});
|
|
91
|
-
}, 4e4);
|
|
92
|
-
try {
|
|
93
|
-
return await t();
|
|
94
|
-
} finally {
|
|
95
|
-
clearInterval(p), await this.releaseLock(e).catch(() => {
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
export {
|
|
102
|
-
h as ReportAdminError,
|
|
103
|
-
$ as createReportAdminClient
|
|
104
|
-
};
|
package/dist/pdf/index.d.ts
DELETED
package/dist/pdf/render-pdf.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { RenderPlan } from '../schema/render-plan';
|
|
2
|
-
import { TextMeasurer } from '../index';
|
|
3
|
-
export interface PdfRenderOptions {
|
|
4
|
-
/** 嵌入字体字节(TTF,如黑体);缺省用 Helvetica(不支持 CJK) */
|
|
5
|
-
customFontBytes?: Uint8Array | ArrayBuffer;
|
|
6
|
-
customFontName?: string;
|
|
7
|
-
/** 文本测量器(默认启发式;与分页/Canvas 注入同一实例可消除折行差异) */
|
|
8
|
-
measurer?: TextMeasurer;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* PDF 文档句柄(不透明最小面):结构化仅暴露 save(),
|
|
12
|
-
* 避免在公共类型面泄漏 pdf-lib 类型(引擎保持零运行时依赖声明)。
|
|
13
|
-
*/
|
|
14
|
-
export type PdfDocumentHandle = {
|
|
15
|
-
save(): Promise<Uint8Array>;
|
|
16
|
-
};
|
|
17
|
-
export interface PdfRenderResult {
|
|
18
|
-
pdfDoc: PdfDocumentHandle;
|
|
19
|
-
bytes: Uint8Array;
|
|
20
|
-
pageErrors: string[];
|
|
21
|
-
unsupportedTextCount: number;
|
|
22
|
-
/** 保真度降级清单(富文本转纯文本、图片格式不支持等),供上层提示 */
|
|
23
|
-
fidelityWarnings: string[];
|
|
24
|
-
}
|
|
25
|
-
export declare function renderPlanToPdf(plan: RenderPlan, options?: PdfRenderOptions): Promise<PdfRenderResult>;
|
package/dist/plugin-C4qpbdMJ.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const E=require("vue");function p(r){return r==null?[]:Array.isArray(r)?r.map(String).filter(e=>e!==""):String(r).split(",").map(e=>e.trim()).filter(e=>e!=="")}function O(r){return p(r).join(",")}class o extends Error{constructor(e){super(e),this.name="PlanLoadError"}}function m(r={}){const{baseUrl:e="",headers:i,credentials:c,timeoutMs:l=3e4}=r,h=e.replace(/\/+$/,"");return async({url:a,method:s,params:t})=>{const d=t&&Object.keys(t).length>0?`?${new URLSearchParams(t)}`:"",n=new AbortController,f=setTimeout(()=>n.abort(),l);let R;try{R=await fetch(`${h}${a}${d}`,{method:s.toUpperCase(),headers:{Accept:"application/json",...i},credentials:c,signal:n.signal})}catch(u){throw u instanceof DOMException&&u.name==="AbortError"?new o(`请求超时(${l}ms): ${a}`):new o(`请求失败(${a}): ${u instanceof Error?u.message:String(u)}`)}finally{clearTimeout(f)}if(!R.ok)throw new o(`HTTP ${R.status} ${a}`);return R.json()}}function P(r){const{request:e,baseUrl:i=""}=r,c=i.replace(/\/+$/,"");return async({tempIds:l,furnitureTempId:h,params:a})=>{if(l.length===0)throw new o("缺少报表模板 ID");const s={};for(const[n,f]of Object.entries(a||{}))n&&n!=="tempId"&&n!=="furnitureTempId"&&f!=null&&f!==""&&(s[n]=String(f));s.tempId=l.join(","),h&&(s.furnitureTempId=h);const t=await e({url:`${c}/report/codePrintReport/gridPlan`,method:"get",params:s});if(t&&t.code!=null&&t.code!==200)throw new o(String(t.message||"预览加载失败"));const d=t?.data?.pages;if(!Array.isArray(d))throw new o("预览响应缺少 pages 数组,请检查 gridPlan 接口契约");return{schemaVersion:"jh4j-compatible",pages:d}}}const _="mach-report/fetcher",g="mach-report/pdf-exporter",T="mach-report/config",C="mach-report/controller",w=E.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./ReportPreview-CJLvkTVn.cjs")).then(r=>r.ReportPreview$1)),A={install(r,e={}){const i=e.fetcher??P({request:e.request??m(),baseUrl:e.baseUrl});r.provide(_,i),e.pdfExporter&&r.provide(g,e.pdfExporter),r.provide(T,E.computed(()=>{if(e.pdfFontUrl===void 0)return e.config??null;const c=e.config??{defaults:{},presets:{}};return{...c,defaults:{...c.defaults,pdfFontUrl:e.pdfFontUrl}}})),e.globalComponent!==!1&&r.component("MachReportPreview",w)}};exports.MACH_REPORT_CONFIG_KEY=T;exports.MACH_REPORT_CONTROLLER_KEY=C;exports.MACH_REPORT_FETCHER_KEY=_;exports.MACH_REPORT_PDF_EXPORTER_KEY=g;exports.MachReportPreview=w;exports.PlanLoadError=o;exports.createFetchRequest=m;exports.createJh4jGridPlanFetcher=P;exports.joinTempIds=O;exports.machReportPlugin=A;exports.normalizeTempIds=p;
|
package/dist/plugin-DcmAPK_K.js
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { defineAsyncComponent as m, computed as g } from "vue";
|
|
2
|
-
function E(r) {
|
|
3
|
-
return r == null ? [] : Array.isArray(r) ? r.map(String).filter((e) => e !== "") : String(r).split(",").map((e) => e.trim()).filter((e) => e !== "");
|
|
4
|
-
}
|
|
5
|
-
function y(r) {
|
|
6
|
-
return E(r).join(",");
|
|
7
|
-
}
|
|
8
|
-
class c extends Error {
|
|
9
|
-
constructor(e) {
|
|
10
|
-
super(e), this.name = "PlanLoadError";
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
function R(r = {}) {
|
|
14
|
-
const { baseUrl: e = "", headers: i, credentials: o, timeoutMs: l = 3e4 } = r, d = e.replace(/\/+$/, "");
|
|
15
|
-
return async ({ url: a, method: s, params: t }) => {
|
|
16
|
-
const h = t && Object.keys(t).length > 0 ? `?${new URLSearchParams(t)}` : "", n = new AbortController(), f = setTimeout(() => n.abort(), l);
|
|
17
|
-
let p;
|
|
18
|
-
try {
|
|
19
|
-
p = await fetch(`${d}${a}${h}`, {
|
|
20
|
-
method: s.toUpperCase(),
|
|
21
|
-
headers: { Accept: "application/json", ...i },
|
|
22
|
-
credentials: o,
|
|
23
|
-
signal: n.signal
|
|
24
|
-
});
|
|
25
|
-
} catch (u) {
|
|
26
|
-
throw u instanceof DOMException && u.name === "AbortError" ? new c(`请求超时(${l}ms): ${a}`) : new c(`请求失败(${a}): ${u instanceof Error ? u.message : String(u)}`);
|
|
27
|
-
} finally {
|
|
28
|
-
clearTimeout(f);
|
|
29
|
-
}
|
|
30
|
-
if (!p.ok)
|
|
31
|
-
throw new c(`HTTP ${p.status} ${a}`);
|
|
32
|
-
return p.json();
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
function w(r) {
|
|
36
|
-
const { request: e, baseUrl: i = "" } = r, o = i.replace(/\/+$/, "");
|
|
37
|
-
return async ({ tempIds: l, furnitureTempId: d, params: a }) => {
|
|
38
|
-
if (l.length === 0) throw new c("缺少报表模板 ID");
|
|
39
|
-
const s = {};
|
|
40
|
-
for (const [n, f] of Object.entries(a || {}))
|
|
41
|
-
n && n !== "tempId" && n !== "furnitureTempId" && f != null && f !== "" && (s[n] = String(f));
|
|
42
|
-
s.tempId = l.join(","), d && (s.furnitureTempId = d);
|
|
43
|
-
const t = await e({
|
|
44
|
-
url: `${o}/report/codePrintReport/gridPlan`,
|
|
45
|
-
method: "get",
|
|
46
|
-
params: s
|
|
47
|
-
});
|
|
48
|
-
if (t && t.code != null && t.code !== 200)
|
|
49
|
-
throw new c(String(t.message || "预览加载失败"));
|
|
50
|
-
const h = t?.data?.pages;
|
|
51
|
-
if (!Array.isArray(h))
|
|
52
|
-
throw new c("预览响应缺少 pages 数组,请检查 gridPlan 接口契约");
|
|
53
|
-
return {
|
|
54
|
-
schemaVersion: "jh4j-compatible",
|
|
55
|
-
pages: h
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
const P = "mach-report/fetcher", T = "mach-report/pdf-exporter", b = "mach-report/config", A = "mach-report/controller", _ = m(() => import("./ReportPreview-mZiGtf0L.js").then((r) => r.n)), j = {
|
|
60
|
-
install(r, e = {}) {
|
|
61
|
-
const i = e.fetcher ?? w({
|
|
62
|
-
// 网关前缀由 jh4j adapter 统一添加;内置 fetch 不再重复拼接。
|
|
63
|
-
request: e.request ?? R(),
|
|
64
|
-
baseUrl: e.baseUrl
|
|
65
|
-
});
|
|
66
|
-
r.provide(P, i), e.pdfExporter && r.provide(T, e.pdfExporter), r.provide(b, g(() => {
|
|
67
|
-
if (e.pdfFontUrl === void 0) return e.config ?? null;
|
|
68
|
-
const o = e.config ?? { defaults: {}, presets: {} };
|
|
69
|
-
return { ...o, defaults: { ...o.defaults, pdfFontUrl: e.pdfFontUrl } };
|
|
70
|
-
})), e.globalComponent !== !1 && r.component("MachReportPreview", _);
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
export {
|
|
74
|
-
A as M,
|
|
75
|
-
c as P,
|
|
76
|
-
b as a,
|
|
77
|
-
P as b,
|
|
78
|
-
T as c,
|
|
79
|
-
_ as d,
|
|
80
|
-
R as e,
|
|
81
|
-
w as f,
|
|
82
|
-
y as j,
|
|
83
|
-
j as m,
|
|
84
|
-
E as n
|
|
85
|
-
};
|