weaver-e10-builder 1.5.11 → 1.5.13
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 +212 -189
- package/assets/image-style-observation.schema.json +1355 -0
- package/assets/layout-spec.schema.json +52 -0
- package/dist/commands/designer-common.d.ts.map +1 -1
- package/dist/commands/designer-common.js +91 -0
- package/dist/commands/designer-common.js.map +1 -1
- package/dist/commands/form-add-detail-table.d.ts.map +1 -1
- package/dist/commands/form-add-detail-table.js +97 -1
- package/dist/commands/form-add-detail-table.js.map +1 -1
- package/dist/commands/form-field-linkage.d.ts +55 -0
- package/dist/commands/form-field-linkage.d.ts.map +1 -1
- package/dist/commands/form-field-linkage.js +1026 -12
- package/dist/commands/form-field-linkage.js.map +1 -1
- package/dist/commands/form-formula-linkage.d.ts +36 -0
- package/dist/commands/form-formula-linkage.d.ts.map +1 -1
- package/dist/commands/form-formula-linkage.js +107 -7
- package/dist/commands/form-formula-linkage.js.map +1 -1
- package/dist/commands/form-formula.d.ts.map +1 -1
- package/dist/commands/form-formula.js +21 -4
- package/dist/commands/form-formula.js.map +1 -1
- package/dist/commands/form-layout-restore.d.ts +3 -0
- package/dist/commands/form-layout-restore.d.ts.map +1 -0
- package/dist/commands/form-layout-restore.js +217 -0
- package/dist/commands/form-layout-restore.js.map +1 -0
- package/dist/commands/form-layout.d.ts.map +1 -1
- package/dist/commands/form-layout.js +11 -1
- package/dist/commands/form-layout.js.map +1 -1
- package/dist/commands/form-obj-meta.d.ts +12 -0
- package/dist/commands/form-obj-meta.d.ts.map +1 -0
- package/dist/commands/form-obj-meta.js +116 -0
- package/dist/commands/form-obj-meta.js.map +1 -0
- package/dist/commands/form-validate.d.ts.map +1 -1
- package/dist/commands/form-validate.js +167 -35
- package/dist/commands/form-validate.js.map +1 -1
- package/dist/commands/form.d.ts.map +1 -1
- package/dist/commands/form.js +359 -27
- package/dist/commands/form.js.map +1 -1
- package/dist/commands/menu.d.ts.map +1 -1
- package/dist/commands/menu.js +5 -3
- package/dist/commands/menu.js.map +1 -1
- package/dist/commands/wf-form.d.ts.map +1 -1
- package/dist/commands/wf-form.js +215 -13
- package/dist/commands/wf-form.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +18 -4
- package/dist/commands/workflow.js.map +1 -1
- package/dist/core/client.d.ts +2 -1
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +4 -2
- package/dist/core/client.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/services/actionflow/calendar_mapper.d.ts.map +1 -1
- package/dist/services/actionflow/calendar_mapper.js +34 -14
- package/dist/services/actionflow/calendar_mapper.js.map +1 -1
- package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
- package/dist/services/actionflow/components/document_actions.js +113 -4
- package/dist/services/actionflow/components/document_actions.js.map +1 -1
- package/dist/services/actionflow/components/eb_get_data_by_id.d.ts.map +1 -1
- package/dist/services/actionflow/components/eb_get_data_by_id.js +18 -1
- package/dist/services/actionflow/components/eb_get_data_by_id.js.map +1 -1
- package/dist/services/actionflow/components/index.d.ts.map +1 -1
- package/dist/services/actionflow/components/index.js +2 -1
- package/dist/services/actionflow/components/index.js.map +1 -1
- package/dist/services/actionflow/components/schedule_create.d.ts.map +1 -1
- package/dist/services/actionflow/components/schedule_create.js +22 -6
- package/dist/services/actionflow/components/schedule_create.js.map +1 -1
- package/dist/services/actionflow/components/workflow_actions.d.ts +1 -0
- package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
- package/dist/services/actionflow/components/workflow_actions.js +31 -6
- package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
- package/dist/services/actionflow/context_preflight.d.ts +5 -0
- package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
- package/dist/services/actionflow/context_preflight.js +88 -34
- package/dist/services/actionflow/context_preflight.js.map +1 -1
- package/dist/services/actionflow/document_source.d.ts +5 -0
- package/dist/services/actionflow/document_source.d.ts.map +1 -1
- package/dist/services/actionflow/document_source.js +16 -0
- package/dist/services/actionflow/document_source.js.map +1 -1
- package/dist/services/actionflow/filter_rules.d.ts.map +1 -1
- package/dist/services/actionflow/filter_rules.js +9 -8
- package/dist/services/actionflow/filter_rules.js.map +1 -1
- package/dist/services/actionflow/formula_service.d.ts +2 -1
- package/dist/services/actionflow/formula_service.d.ts.map +1 -1
- package/dist/services/actionflow/formula_service.js +52 -22
- package/dist/services/actionflow/formula_service.js.map +1 -1
- package/dist/services/actionflow/preflight_service.d.ts +5 -0
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
- package/dist/services/actionflow/preflight_service.js +128 -3
- package/dist/services/actionflow/preflight_service.js.map +1 -1
- package/dist/services/actionflow/save_workflow_draft.d.ts +7 -0
- package/dist/services/actionflow/save_workflow_draft.d.ts.map +1 -1
- package/dist/services/actionflow/save_workflow_draft.js +1 -1
- package/dist/services/actionflow/save_workflow_draft.js.map +1 -1
- package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/workflow_compiler.js +51 -13
- package/dist/services/actionflow/workflow_compiler.js.map +1 -1
- package/dist/services/form-formula-linkage.d.ts +4 -0
- package/dist/services/form-formula-linkage.d.ts.map +1 -1
- package/dist/services/form-formula-linkage.js +3 -1
- package/dist/services/form-formula-linkage.js.map +1 -1
- package/dist/services/form-layout-io.d.ts +18 -0
- package/dist/services/form-layout-io.d.ts.map +1 -0
- package/dist/services/form-layout-io.js +89 -0
- package/dist/services/form-layout-io.js.map +1 -0
- package/dist/services/form-layout-source/artifact.d.ts +8 -0
- package/dist/services/form-layout-source/artifact.d.ts.map +1 -0
- package/dist/services/form-layout-source/artifact.js +52 -0
- package/dist/services/form-layout-source/artifact.js.map +1 -0
- package/dist/services/form-layout-source/binding.d.ts +10 -0
- package/dist/services/form-layout-source/binding.d.ts.map +1 -0
- package/dist/services/form-layout-source/binding.js +43 -0
- package/dist/services/form-layout-source/binding.js.map +1 -0
- package/dist/services/form-layout-source/compile.d.ts +7 -0
- package/dist/services/form-layout-source/compile.d.ts.map +1 -0
- package/dist/services/form-layout-source/compile.js +262 -0
- package/dist/services/form-layout-source/compile.js.map +1 -0
- package/dist/services/form-layout-source/creation.d.ts +18 -0
- package/dist/services/form-layout-source/creation.d.ts.map +1 -0
- package/dist/services/form-layout-source/creation.js +42 -0
- package/dist/services/form-layout-source/creation.js.map +1 -0
- package/dist/services/form-layout-source/excel-extractor.d.ts +7 -0
- package/dist/services/form-layout-source/excel-extractor.d.ts.map +1 -0
- package/dist/services/form-layout-source/excel-extractor.js +342 -0
- package/dist/services/form-layout-source/excel-extractor.js.map +1 -0
- package/dist/services/form-layout-source/image-border.d.ts +9 -0
- package/dist/services/form-layout-source/image-border.d.ts.map +1 -0
- package/dist/services/form-layout-source/image-border.js +128 -0
- package/dist/services/form-layout-source/image-border.js.map +1 -0
- package/dist/services/form-layout-source/image-observation.d.ts +14 -0
- package/dist/services/form-layout-source/image-observation.d.ts.map +1 -0
- package/dist/services/form-layout-source/image-observation.js +90 -0
- package/dist/services/form-layout-source/image-observation.js.map +1 -0
- package/dist/services/form-layout-source/image-review.d.ts +32 -0
- package/dist/services/form-layout-source/image-review.d.ts.map +1 -0
- package/dist/services/form-layout-source/image-review.js +266 -0
- package/dist/services/form-layout-source/image-review.js.map +1 -0
- package/dist/services/form-layout-source/image-style.d.ts +16 -0
- package/dist/services/form-layout-source/image-style.d.ts.map +1 -0
- package/dist/services/form-layout-source/image-style.js +539 -0
- package/dist/services/form-layout-source/image-style.js.map +1 -0
- package/dist/services/form-layout-source/json.d.ts +3 -0
- package/dist/services/form-layout-source/json.d.ts.map +1 -0
- package/dist/services/form-layout-source/json.js +33 -0
- package/dist/services/form-layout-source/json.js.map +1 -0
- package/dist/services/form-layout-source/presentation.d.ts +23 -0
- package/dist/services/form-layout-source/presentation.d.ts.map +1 -0
- package/dist/services/form-layout-source/presentation.js +174 -0
- package/dist/services/form-layout-source/presentation.js.map +1 -0
- package/dist/services/form-layout-source/preview.d.ts +4 -0
- package/dist/services/form-layout-source/preview.d.ts.map +1 -0
- package/dist/services/form-layout-source/preview.js +49 -0
- package/dist/services/form-layout-source/preview.js.map +1 -0
- package/dist/services/form-layout-source/schema.d.ts +20 -0
- package/dist/services/form-layout-source/schema.d.ts.map +1 -0
- package/dist/services/form-layout-source/schema.js +149 -0
- package/dist/services/form-layout-source/schema.js.map +1 -0
- package/dist/services/form-layout-source/source-grid.d.ts +8 -0
- package/dist/services/form-layout-source/source-grid.d.ts.map +1 -0
- package/dist/services/form-layout-source/source-grid.js +61 -0
- package/dist/services/form-layout-source/source-grid.js.map +1 -0
- package/dist/services/form-layout-source/types.d.ts +242 -0
- package/dist/services/form-layout-source/types.d.ts.map +1 -0
- package/dist/services/form-layout-source/types.js +2 -0
- package/dist/services/form-layout-source/types.js.map +1 -0
- package/dist/services/form-layout-source/verify.d.ts +14 -0
- package/dist/services/form-layout-source/verify.d.ts.map +1 -0
- package/dist/services/form-layout-source/verify.js +226 -0
- package/dist/services/form-layout-source/verify.js.map +1 -0
- package/dist/services/form-linkage-condition.d.ts +15 -0
- package/dist/services/form-linkage-condition.d.ts.map +1 -1
- package/dist/services/form-linkage-condition.js +19 -10
- package/dist/services/form-linkage-condition.js.map +1 -1
- package/dist/services/form-obj-meta.d.ts +72 -0
- package/dist/services/form-obj-meta.d.ts.map +1 -0
- package/dist/services/form-obj-meta.js +103 -0
- package/dist/services/form-obj-meta.js.map +1 -0
- package/dist/services/form-sub-detail.d.ts +25 -0
- package/dist/services/form-sub-detail.d.ts.map +1 -1
- package/dist/services/form-sub-detail.js +64 -0
- package/dist/services/form-sub-detail.js.map +1 -1
- package/dist/services/validate-help.d.ts +25 -0
- package/dist/services/validate-help.d.ts.map +1 -0
- package/dist/services/validate-help.js +29 -0
- package/dist/services/validate-help.js.map +1 -0
- package/dist/services/workflow-operator.d.ts +12 -5
- package/dist/services/workflow-operator.d.ts.map +1 -1
- package/dist/services/workflow-operator.js +41 -16
- package/dist/services/workflow-operator.js.map +1 -1
- package/package.json +3 -1
- package/skill-docs/SKILL.md +38 -165
- package/skill-docs/_catalog.md +4 -1
- package/skill-docs/actionflows/references/components/document/DocumentSave.md +17 -17
- package/skill-docs/actionflows/references/components/workflow/ApproveCompletelyDelete.md +29 -0
- package/skill-docs/actionflows/references/components/workflow/ApproveDelete.md +1 -1
- package/skill-docs/assets/schemas/image-style-observation.schema.json +1355 -0
- package/skill-docs/references/coding/guide-page-code.md +2 -0
- package/skill-docs/references/coding/ref-compile-rules.md +2 -0
- package/skill-docs/references/common/capability-boundaries.md +15 -0
- package/skill-docs/references/common/guide-install.md +44 -0
- package/skill-docs/references/common/guide-plan-template.md +167 -164
- package/skill-docs/references/common/map.md +9 -0
- package/skill-docs/references/common/ref-cli-commands.md +650 -635
- package/skill-docs/references/form/guide-create-form.md +2 -0
- package/skill-docs/references/form/guide-field-linkage.md +185 -58
- package/skill-docs/references/form/guide-form-formula-functions.md +354 -343
- package/skill-docs/references/form/guide-form-layout-planning.md +6 -0
- package/skill-docs/references/form/guide-form-layout-source.md +366 -0
- package/skill-docs/references/form/guide-form-linkage.md +56 -66
- package/skill-docs/references/form/guide-form-view.md +1 -1
- package/skill-docs/references/form/guide-formula-linkage.md +44 -1
- package/skill-docs/references/workflow/guide-workflow.md +1 -1
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { assert, byteHash, LIMITS, validateSource } from './schema.js';
|
|
4
|
+
import { geometrySheet, normalizeImageCells } from './image-style.js';
|
|
5
|
+
/** 读取头部像素尺寸,不依赖 OCR、网络或图像解码服务。 */
|
|
6
|
+
export function imageDimensions(path) {
|
|
7
|
+
const b = readFileSync(path);
|
|
8
|
+
assert(b.length <= LIMITS.bytes, '图片超过 20 MiB');
|
|
9
|
+
let width = 0, height = 0;
|
|
10
|
+
if (b.length >= 24 && b.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10])) && b.toString('ascii', 12, 16) === 'IHDR') {
|
|
11
|
+
width = b.readUInt32BE(16);
|
|
12
|
+
height = b.readUInt32BE(20);
|
|
13
|
+
}
|
|
14
|
+
else if (b[0] === 255 && b[1] === 216) {
|
|
15
|
+
let i = 2;
|
|
16
|
+
while (i < b.length) {
|
|
17
|
+
assert(b[i++] === 255, 'JPEG 段标记无效');
|
|
18
|
+
while (b[i] === 255)
|
|
19
|
+
i++;
|
|
20
|
+
const marker = b[i++];
|
|
21
|
+
if (marker === 217 || marker === 218)
|
|
22
|
+
break;
|
|
23
|
+
if (marker === 1 || marker >= 208 && marker <= 215)
|
|
24
|
+
continue;
|
|
25
|
+
assert(i + 2 <= b.length, 'JPEG 段截断');
|
|
26
|
+
const size = b.readUInt16BE(i);
|
|
27
|
+
assert(size >= 2 && i + size <= b.length, 'JPEG 段长度无效');
|
|
28
|
+
if ([192, 193, 194, 195, 197, 198, 199, 201, 202, 203, 205, 206, 207].includes(marker)) {
|
|
29
|
+
assert(size >= 8, 'JPEG 帧截断');
|
|
30
|
+
height = b.readUInt16BE(i + 3);
|
|
31
|
+
width = b.readUInt16BE(i + 5);
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
i += size;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else if (b.length >= 20 && b.toString('ascii', 0, 4) === 'RIFF' && b.toString('ascii', 8, 12) === 'WEBP') {
|
|
38
|
+
for (let i = 12; i + 8 <= b.length;) {
|
|
39
|
+
const kind = b.toString('ascii', i, i + 4), size = b.readUInt32LE(i + 4), p = i + 8;
|
|
40
|
+
assert(p + size <= b.length, 'WebP 段截断');
|
|
41
|
+
if (kind === 'VP8X' && size >= 10) {
|
|
42
|
+
width = b.readUIntLE(p + 4, 3) + 1;
|
|
43
|
+
height = b.readUIntLE(p + 7, 3) + 1;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
if (kind === 'VP8 ' && size >= 10 && b[p + 3] === 157 && b[p + 4] === 1 && b[p + 5] === 42) {
|
|
47
|
+
width = b.readUInt16LE(p + 6) & 16383;
|
|
48
|
+
height = b.readUInt16LE(p + 8) & 16383;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
if (kind === 'VP8L' && size >= 5 && b[p] === 47) {
|
|
52
|
+
width = (b[p + 1] | (b[p + 2] & 63) << 8) + 1;
|
|
53
|
+
height = ((b[p + 2] >> 6) | b[p + 3] << 2 | (b[p + 4] & 15) << 10) + 1;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
i = p + size + size % 2;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
assert(width > 0 && height > 0 && width <= 100000 && height <= 100000, '无法读取真实图片像素尺寸');
|
|
60
|
+
return { imageWidth: width, imageHeight: height };
|
|
61
|
+
}
|
|
62
|
+
export function verifyImageGeometryFile(path, source) {
|
|
63
|
+
const g = source.imageStyles?.geometry;
|
|
64
|
+
if (!g)
|
|
65
|
+
return;
|
|
66
|
+
const actual = imageDimensions(path);
|
|
67
|
+
assert(actual.imageWidth === g.imageWidth && actual.imageHeight === g.imageHeight, '图片几何尺寸与真实文件不一致');
|
|
68
|
+
}
|
|
69
|
+
/** 图片的语义来自 Agent 观察;这里只验证原图身份和结构,不调用 OCR 或模型服务。 */
|
|
70
|
+
export function imageIdentity(path) {
|
|
71
|
+
const bytes = readFileSync(path);
|
|
72
|
+
assert(bytes.length <= LIMITS.bytes, '图片超过 20 MiB');
|
|
73
|
+
const png = bytes.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]));
|
|
74
|
+
const jpg = bytes[0] === 255 && bytes[1] === 216;
|
|
75
|
+
const webp = bytes.subarray(0, 4).toString() === 'RIFF' && bytes.subarray(8, 12).toString() === 'WEBP';
|
|
76
|
+
assert(png || jpg || webp, '图片仅支持 PNG、JPEG 或 WebP');
|
|
77
|
+
return { sourceFile: resolve(path), sourceHash: byteHash(bytes) };
|
|
78
|
+
}
|
|
79
|
+
export function bindImageObservation(path, observation) {
|
|
80
|
+
const identity = imageIdentity(path);
|
|
81
|
+
assert(observation.sourceType === 'image' && observation.sourceHash === identity.sourceHash, '图片观察与真实文件哈希不一致');
|
|
82
|
+
const result = normalizeImageCells(observation);
|
|
83
|
+
result.sourceFile = resolve(path);
|
|
84
|
+
validateSource(result);
|
|
85
|
+
verifyImageGeometryFile(path, result);
|
|
86
|
+
result.sheets = result.sheets.map(s => geometrySheet(result, s, false, true));
|
|
87
|
+
validateSource(result);
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=image-observation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-observation.js","sourceRoot":"","sources":["../../../src/services/form-layout-source/image-observation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { LayoutArtifact, LayoutSource, LayoutSpec } from './types.js';
|
|
2
|
+
export declare function assertImageStyleConfirmed(artifact: LayoutArtifact): void;
|
|
3
|
+
export interface ImageStyleOverrides {
|
|
4
|
+
gridBorderStyle?: {
|
|
5
|
+
color?: unknown;
|
|
6
|
+
width?: unknown;
|
|
7
|
+
line?: unknown;
|
|
8
|
+
};
|
|
9
|
+
cells?: Array<{
|
|
10
|
+
sheet: string;
|
|
11
|
+
row: number;
|
|
12
|
+
col: number;
|
|
13
|
+
style: Record<string, unknown>;
|
|
14
|
+
}>;
|
|
15
|
+
fields?: Array<{
|
|
16
|
+
fieldId?: string;
|
|
17
|
+
fieldName?: string;
|
|
18
|
+
subFormId?: string;
|
|
19
|
+
title?: Record<string, unknown>;
|
|
20
|
+
content?: Record<string, unknown>;
|
|
21
|
+
}>;
|
|
22
|
+
page?: {
|
|
23
|
+
backgroundColor: unknown;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** 列出真实观察值,未知字体不冒充平台默认字体;图片字号均为视觉估计。 */
|
|
27
|
+
export declare function summarizeImageStyles(source: LayoutSource, spec?: LayoutSpec): any;
|
|
28
|
+
export declare function reviewImageStyles(input: LayoutSource, overrides?: ImageStyleOverrides, confirmed?: boolean, spec?: LayoutSpec): {
|
|
29
|
+
source: LayoutSource;
|
|
30
|
+
report: any;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=image-review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-review.d.ts","sourceRoot":"","sources":["../../../src/services/form-layout-source/image-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,cAAc,EAAE,YAAY,EAAE,UAAU,EAAiC,MAAM,YAAY,CAAC;AAoB3H,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAGxE;AACD,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACvE,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC3F,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IACjJ,IAAI,CAAC,EAAE;QAAE,eAAe,EAAE,OAAO,CAAA;KAAE,CAAC;CACrC;AAyBD,wCAAwC;AACxC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,GAAG,CA4BjF;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,GAAE,mBAAwB,EAAE,SAAS,UAAQ,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,GAAG,CAAA;CAAE,CAkGvK"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { assert, clone, safeTree, stable, validateSource, validateSpec } from './schema.js';
|
|
2
|
+
import { cellAt, extent } from './source-grid.js';
|
|
3
|
+
import { imageColor, normalizeObservedStyle, observedCss, observedNative, prepareImageStyleSheet } from './image-style.js';
|
|
4
|
+
import { assertBorderObservation, nativeBorderObservation, summarizeGridBorders } from './image-border.js';
|
|
5
|
+
const fontAliases = {
|
|
6
|
+
'宋体': 'SimSun', simsun: 'SimSun', '黑体': 'SimHei', simhei: 'SimHei',
|
|
7
|
+
'微软雅黑': 'Microsoft YaHei', 'microsoft yahei': 'Microsoft YaHei',
|
|
8
|
+
'仿宋': 'FangSong', fangsong: 'FangSong', '楷体': 'KaiTi', kaiti: 'KaiTi',
|
|
9
|
+
arial: 'Arial', 'times new roman': 'Times New Roman', 'sans-serif': 'sans-serif', serif: 'serif',
|
|
10
|
+
};
|
|
11
|
+
// 原生前端字体选项的中文名/配置值;只表示可编码,不证明目标设备的字体安装状态。
|
|
12
|
+
for (const pair of ['新宋体/NSimSun', '仿宋_GB2312/FangSong_GB2312', '方正小标宋简体/FZXiaoBiaoSong-B05S', '楷体_GB2312/KaiTi_GB2312', '华文细黑/STXihei', '华文楷体/STKaiti', '华文宋体/STSong', '华文中宋/STZhongsong', '华文仿宋/STFangsong', '华文彩云/STCaiyun', '华文琥珀/STHupo', '华文隶书/STLiti', '华文行楷/STXingkai', '华文新魏/STXinwei', '方正舒体/FZShuTi', '方正姚体/FZYaoti', '细明体/MingLiU', '新细明体/PMingLiU', 'Comic Sans MS', 'Courier New', 'Georgia', 'Lucida Sans Unicode', 'Tahoma', 'Trebuchet MS', 'Verdana']) {
|
|
13
|
+
const [label, value = label] = pair.split('/');
|
|
14
|
+
fontAliases[label.toLowerCase()] = value;
|
|
15
|
+
fontAliases[value.toLowerCase()] = value;
|
|
16
|
+
}
|
|
17
|
+
const chineseSizes = { '初号': 42, '小初': 36, '一号': 26, '小一': 24, '二号': 22, '小二': 18, '三号': 16, '小三': 15, '四号': 14, '小四': 12, '五号': 10.5, '小五': 9, '六号': 7.5, '小六': 6.5, '七号': 5.5, '八号': 5 };
|
|
18
|
+
const colors = { '红色': 'red', '红': 'red', '黑色': 'black', '黑': 'black', '白色': 'white', '白': 'white', '蓝色': 'blue', '蓝': 'blue', '灰色': 'gray', '灰': 'gray', '绿色': 'green', '绿': 'green' };
|
|
19
|
+
const textKeys = ['fontFamily', 'fontSize', 'fontUnit', 'fontWeight', 'fontStyle', 'color', 'backgroundColor', 'textAlign', 'verticalAlign', 'bold', 'align'];
|
|
20
|
+
export function assertImageStyleConfirmed(artifact) {
|
|
21
|
+
assert(!['e10.layout-compiler/v4', 'e10.layout-compiler/v5'].includes(String(artifact.compilerVersion)) || artifact.source.sourceType !== 'image' || artifact.source.observations?.confirmed === true, '[IMAGE_STYLE_CONFIRMATION_REQUIRED] 请先向用户展示识别的字体、字号、颜色、对齐及表格外框并确认;收到用户确认后 style-review --confirm,再重新 compile,不能由 Agent 自行确认');
|
|
22
|
+
if (artifact.compilerVersion === 'e10.layout-compiler/v5')
|
|
23
|
+
assertBorderObservation(artifact.source, artifact.spec.allowUnsupported === true);
|
|
24
|
+
}
|
|
25
|
+
const keys = (v, allowed, label) => assert(v && typeof v === 'object' && !Array.isArray(v) && Object.keys(v).every(k => allowed.includes(k)), `${label} 结构无效`);
|
|
26
|
+
/** 自然语言由 Agent 定位对象;CLI 只转换有明确映射的单项,未知单项保留观察稿。 */
|
|
27
|
+
function convert(property, value, input) {
|
|
28
|
+
assert(textKeys.includes(property), '不支持的文字样式属性');
|
|
29
|
+
const text = typeof value === 'string' ? value.trim() : '';
|
|
30
|
+
if (property === 'fontFamily') {
|
|
31
|
+
const family = fontAliases[text.toLowerCase()];
|
|
32
|
+
assert(family, '字体未在已核对的原生字体映射中登记');
|
|
33
|
+
return { fontFamily: family };
|
|
34
|
+
}
|
|
35
|
+
if (property === 'color' || property === 'backgroundColor')
|
|
36
|
+
return { [property]: imageColor(colors[text] || text) };
|
|
37
|
+
if (property === 'fontSize') {
|
|
38
|
+
if (chineseSizes[text])
|
|
39
|
+
return { fontSize: chineseSizes[text], fontUnit: 'pt' };
|
|
40
|
+
const parsed = /^(\d+(?:\.\d+)?)\s*(px|pt|像素|磅)$/i.exec(text);
|
|
41
|
+
assert(typeof value === 'number' || parsed, '字号需数字加 px/pt/像素/磅,或明确中文字号');
|
|
42
|
+
const unit = parsed ? ['pt', '磅'].includes(parsed[2].toLowerCase()) ? 'pt' : 'px' : input.fontUnit ?? 'px';
|
|
43
|
+
return normalizeObservedStyle({ fontSize: parsed ? Number(parsed[1]) : value, fontUnit: unit });
|
|
44
|
+
}
|
|
45
|
+
if (property === 'textAlign' || property === 'align')
|
|
46
|
+
return normalizeObservedStyle({ textAlign: { '居中': 'center', '居中对齐': 'center', '左对齐': 'left', '居左': 'left', '右对齐': 'right', '居右': 'right' }[text] || value });
|
|
47
|
+
if (property === 'verticalAlign')
|
|
48
|
+
return normalizeObservedStyle({ verticalAlign: { '垂直居中': 'middle', '居中': 'middle', '顶部': 'top', '底部': 'bottom' }[text] || value });
|
|
49
|
+
if (property === 'fontWeight')
|
|
50
|
+
return normalizeObservedStyle({ fontWeight: { '加粗': 'bold', '粗体': 'bold', '常规': 'normal', '正常': 'normal' }[text] || value });
|
|
51
|
+
if (property === 'fontStyle')
|
|
52
|
+
return normalizeObservedStyle({ fontStyle: { '斜体': 'italic', '常规': 'normal' }[text] || value });
|
|
53
|
+
return normalizeObservedStyle({ [property]: value });
|
|
54
|
+
}
|
|
55
|
+
/** 列出真实观察值,未知字体不冒充平台默认字体;图片字号均为视觉估计。 */
|
|
56
|
+
export function summarizeImageStyles(source, spec) {
|
|
57
|
+
const sheets = source.sheets.map(s => prepareImageStyleSheet(source, s, true, true));
|
|
58
|
+
const summary = (cell, extra) => {
|
|
59
|
+
const s = cell?.style || {}, font = /^(.*?)\s*(\d+(?:\.\d+)?)(px|pt)\s+(.+)$/.exec(s.font || '');
|
|
60
|
+
const base = { fontFamily: font?.[4] ?? null, fontSize: font ? Number(font[2]) : null, fontUnit: font?.[3] ?? null,
|
|
61
|
+
color: s.foreColor ? imageColor(s.foreColor) : null, backgroundColor: s.backColor ? imageColor(s.backColor) : null,
|
|
62
|
+
fontWeight: font ? /bold|700/.test(font[1]) ? 'bold' : font[1].trim() || 'normal' : null,
|
|
63
|
+
fontStyle: font ? /italic/.test(font[1]) ? 'italic' : 'normal' : null,
|
|
64
|
+
textAlign: ['left', 'center', 'right'][s.hAlign] ?? null, verticalAlign: ['top', 'middle', 'bottom'][s.vAlign] ?? null };
|
|
65
|
+
if (extra?.fontSize !== undefined)
|
|
66
|
+
base.fontUnit = extra.fontUnit || 'px';
|
|
67
|
+
Object.assign(base, extra ? normalizeObservedStyle(extra) : {});
|
|
68
|
+
return { ...base, nativeCss: extra ? observedCss(extra) : {}, visualEstimate: true };
|
|
69
|
+
};
|
|
70
|
+
const cells = sheets.flatMap(sheet => sheet.cells.filter(c => c.value !== undefined && c.value !== '').map(c => ({ sheet: sheet.name, row: Number(c.row), col: Number(c.col), text: String(c.value), ...summary(c) })));
|
|
71
|
+
const placements = spec ? [...spec.fields.map(f => ({ ...f, subFormId: undefined })), ...(spec.details || []).flatMap(d => d.fields.map(f => ({ ...f, subFormId: d.subFormId })))] : [];
|
|
72
|
+
const identities = [...placements];
|
|
73
|
+
for (const f of source.imageStyles?.fields || [])
|
|
74
|
+
if (!identities.some(p => sameField(p, f)))
|
|
75
|
+
identities.push(f);
|
|
76
|
+
const fields = identities.map(f => {
|
|
77
|
+
const p = placements.find(p => sameField(p, f)), rule = source.imageStyles?.fields?.find(r => sameField(f, r));
|
|
78
|
+
const sheet = sheets.find(s => s.name === spec?.sheet);
|
|
79
|
+
return { fieldId: f.fieldId, fieldName: f.fieldName, subFormId: f.subFormId,
|
|
80
|
+
title: summary(sheet && p ? cellAt(sheet, p.title) : undefined, rule?.title),
|
|
81
|
+
content: summary(sheet && p ? cellAt(sheet, p.value) : undefined, rule?.content),
|
|
82
|
+
input: rule?.input ? normalizeObservedStyle(rule.input) : null, inputTarget: rule?.inputTarget || 'component' };
|
|
83
|
+
});
|
|
84
|
+
const missingAttributes = fields.flatMap(f => ['fontFamily', 'fontSize', 'color', 'textAlign', 'verticalAlign'].filter(k => f.title[k] === null).map(property => ({ fieldId: f.fieldId, fieldName: f.fieldName, part: 'title', property })));
|
|
85
|
+
return { cells, fields, missingAttributes, gridBorderStyles: summarizeGridBorders(sheets, source.imageStyles?.tableBorders), tableBorders: clone(source.imageStyles?.tableBorders ?? null), borderObservationRequired: source.imageStyles?.tableBorders === undefined,
|
|
86
|
+
page: source.imageStyles?.page || null, unknownValue: null, note: '字体名称与字号来自视觉估计,不等于图片内嵌字体元数据;映射成功不证明目标设备已安装该字体。未识别项显示 null,不猜测;标题缺少对齐时必须重新观察或明确向用户说明。表格外框逐侧确认,4% 留白不承接外边线。' };
|
|
87
|
+
}
|
|
88
|
+
function sameField(a, b) {
|
|
89
|
+
const sub = (v) => ['', '0', '-1'].includes(String(v || '')) ? '' : String(v);
|
|
90
|
+
return sub(a.subFormId) === sub(b.subFormId) && !!(a.fieldId && b.fieldId && a.fieldId === b.fieldId || a.fieldName && b.fieldName && a.fieldName === b.fieldName);
|
|
91
|
+
}
|
|
92
|
+
export function reviewImageStyles(input, overrides = {}, confirmed = false, spec) {
|
|
93
|
+
safeTree(input);
|
|
94
|
+
safeTree(overrides);
|
|
95
|
+
assert(input.sourceType === 'image' && input.observations, '样式确认只支持带观察结果的图片');
|
|
96
|
+
const validated = clone(input);
|
|
97
|
+
validated.observations.confirmed = true;
|
|
98
|
+
validateSource(validated);
|
|
99
|
+
if (spec)
|
|
100
|
+
validateSpec(spec, validated);
|
|
101
|
+
if (confirmed)
|
|
102
|
+
assertBorderObservation(input, spec?.allowUnsupported === true);
|
|
103
|
+
keys(overrides, ['cells', 'fields', 'page', 'gridBorderStyle'], '样式调整');
|
|
104
|
+
for (const name of ['cells', 'fields'])
|
|
105
|
+
assert(overrides[name] === undefined || Array.isArray(overrides[name]) && overrides[name].length <= 1000, '样式调整数量超限');
|
|
106
|
+
const source = clone(input);
|
|
107
|
+
source.imageStyles ||= { schemaVersion: 'e10.image-styles/v1', issues: [] };
|
|
108
|
+
const recognized = summarizeImageStyles(source, spec), accepted = [], rejected = [];
|
|
109
|
+
if (overrides.gridBorderStyle) {
|
|
110
|
+
const patch = overrides.gridBorderStyle;
|
|
111
|
+
keys(patch, ['color', 'width', 'line'], '表格线样式调整');
|
|
112
|
+
assertBorderObservation(source, spec?.allowUnsupported === true);
|
|
113
|
+
const borderKeys = ['border', 'borderTop', 'borderRight', 'borderBottom', 'borderLeft'];
|
|
114
|
+
assert(spec || !(source.imageStyles.fields || []).some(f => [f.title, f.content, ...(f.inputTarget === 'cell' ? [f.input] : [])].some(s => s && borderKeys.some(k => s[k]))), '字段区域也声明了表格边线,gridBorderStyle 需要 --spec 准确定位这些标题/值区域');
|
|
115
|
+
const tables = source.imageStyles.tableBorders;
|
|
116
|
+
const inside = (sheet, row, col) => tables.some(t => t.sheet === sheet && row >= t.row && row < t.row + t.rowCount && col >= t.col && col < t.col + t.colCount);
|
|
117
|
+
const cache = new Map(), unsupportedNative = new Set();
|
|
118
|
+
const convertBorder = (border) => {
|
|
119
|
+
const key = stable(border);
|
|
120
|
+
if (cache.has(key))
|
|
121
|
+
return clone(cache.get(key));
|
|
122
|
+
let result = clone(border);
|
|
123
|
+
for (const [property, requested] of Object.entries(patch)) {
|
|
124
|
+
try {
|
|
125
|
+
let value = requested;
|
|
126
|
+
if (property === 'color')
|
|
127
|
+
value = imageColor(colors[String(requested).trim()] || String(requested));
|
|
128
|
+
if (property === 'width') {
|
|
129
|
+
const m = /^([123])\s*(?:px|像素)?$/i.exec(String(requested).trim());
|
|
130
|
+
assert(m, '表格线宽只支持明确的 1/2/3px');
|
|
131
|
+
value = Number(m[1]);
|
|
132
|
+
}
|
|
133
|
+
if (property === 'line')
|
|
134
|
+
value = { '实线': 'solid', '虚线': 'dashed', '点线': 'dotted', '双线': 'double' }[String(requested).trim()] || requested;
|
|
135
|
+
result = normalizeObservedStyle({ border: { ...result, [property]: value } }).border;
|
|
136
|
+
accepted.push({ target: `gridBorderStyle:${key}`, property, requested, value });
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
rejected.push({ target: `gridBorderStyle:${key}`, property, requested, reason: error.message, fallback: result[property] });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
cache.set(key, result);
|
|
143
|
+
return clone(result);
|
|
144
|
+
};
|
|
145
|
+
const style = (s) => { if (s)
|
|
146
|
+
for (const key of ['border', 'borderTop', 'borderRight', 'borderBottom', 'borderLeft'])
|
|
147
|
+
if (s[key])
|
|
148
|
+
s[key] = convertBorder(s[key]); };
|
|
149
|
+
for (const table of tables)
|
|
150
|
+
for (const side of ['top', 'right', 'bottom', 'left'])
|
|
151
|
+
if (typeof table[side] === 'object')
|
|
152
|
+
table[side] = convertBorder(table[side]);
|
|
153
|
+
for (const sheet of source.sheets)
|
|
154
|
+
for (const cell of sheet.cells)
|
|
155
|
+
if (inside(sheet.name, Number(cell.row), Number(cell.col))) {
|
|
156
|
+
for (const key of ['borderTop', 'borderRight', 'borderBottom', 'borderLeft'])
|
|
157
|
+
if (cell.style?.[key]) {
|
|
158
|
+
const old = nativeBorderObservation(cell.style[key]);
|
|
159
|
+
if (old)
|
|
160
|
+
cell.style[key] = observedNative({ border: convertBorder(old) }).borderTop;
|
|
161
|
+
else if (!unsupportedNative.has(cell.style[key].style)) {
|
|
162
|
+
unsupportedNative.add(cell.style[key].style);
|
|
163
|
+
rejected.push({ target: 'gridBorderStyle', property: 'nativeStyle', requested: cell.style[key].style, reason: '原生线型尚未核对,保留原边框' });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
for (const grid of source.imageStyles.geometry?.sheets || [])
|
|
168
|
+
for (const r of grid.regions)
|
|
169
|
+
if (inside(grid.sheet, r.row, r.col))
|
|
170
|
+
style(r.style);
|
|
171
|
+
for (const cell of source.imageStyles.cells || [])
|
|
172
|
+
if (inside(cell.sheet, cell.row, cell.col))
|
|
173
|
+
style(cell.style);
|
|
174
|
+
const positions = spec ? [...spec.fields, ...(spec.details || []).flatMap(d => d.fields.map(f => ({ ...f, subFormId: d.subFormId })))] : [];
|
|
175
|
+
for (const field of source.imageStyles.fields || []) {
|
|
176
|
+
const position = positions.find(p => sameField(p, field));
|
|
177
|
+
if (position && inside(spec.sheet, position.title.row, position.title.col))
|
|
178
|
+
style(field.title);
|
|
179
|
+
if (position && inside(spec.sheet, position.value.row, position.value.col)) {
|
|
180
|
+
style(field.content);
|
|
181
|
+
if (field.inputTarget === 'cell')
|
|
182
|
+
style(field.input);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (!tables.length)
|
|
186
|
+
rejected.push({ target: 'gridBorderStyle', property: 'target', requested: patch, reason: '声明没有表格,不能给整页或控件输入框擅自补线' });
|
|
187
|
+
}
|
|
188
|
+
const apply = (target, original, patch, fallback = {}) => {
|
|
189
|
+
assert(patch && typeof patch === 'object' && !Array.isArray(patch), '单项样式必须为对象');
|
|
190
|
+
let result = normalizeObservedStyle(original);
|
|
191
|
+
for (const [property, requested] of Object.entries(patch)) {
|
|
192
|
+
if (property === 'fontUnit' && patch.fontSize !== undefined)
|
|
193
|
+
continue;
|
|
194
|
+
try {
|
|
195
|
+
assert(property !== 'fontUnit', '字号单位必须与字号一起指定');
|
|
196
|
+
const normalized = convert(property, requested, patch);
|
|
197
|
+
result = normalizeObservedStyle({ ...result, ...normalized });
|
|
198
|
+
accepted.push({ target, property, requested, value: clone(normalized) });
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
rejected.push({ target, property, requested, reason: error.message, fallback: result[property] ?? fallback[property] ?? null });
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return result;
|
|
205
|
+
};
|
|
206
|
+
for (const item of overrides.cells || []) {
|
|
207
|
+
keys(item, ['sheet', 'row', 'col', 'style'], '单元格调整');
|
|
208
|
+
const target = `${item.sheet}!${item.row},${item.col}`, sheet = source.sheets.find(s => s.name === item.sheet);
|
|
209
|
+
const valid = sheet && Number.isInteger(item.row) && Number.isInteger(item.col) && item.row >= 0 && item.row < sheet.rowCount && item.col >= 0 && item.col < sheet.columnCount;
|
|
210
|
+
if (!valid) {
|
|
211
|
+
rejected.push({ target, property: 'target', requested: item, reason: '目标不在图片网格内,保留图片观察' });
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
const prepared = prepareImageStyleSheet(source, sheet, true);
|
|
215
|
+
try {
|
|
216
|
+
extent(prepared, item);
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
rejected.push({ target, property: 'target', requested: item, reason: '目标必须为合并区域锚点' });
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
const cells = source.imageStyles.cells ||= [], existing = cells.find(c => c.sheet === item.sheet && c.row === item.row && c.col === item.col);
|
|
223
|
+
const style = apply(target, existing?.style || {}, item.style, recognized.cells.find((c) => c.sheet === item.sheet && c.row === item.row && c.col === item.col));
|
|
224
|
+
if (Object.keys(style).length) {
|
|
225
|
+
if (existing)
|
|
226
|
+
existing.style = style;
|
|
227
|
+
else
|
|
228
|
+
cells.push({ sheet: item.sheet, row: item.row, col: item.col, style });
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
const known = recognized.fields;
|
|
232
|
+
for (const item of overrides.fields || []) {
|
|
233
|
+
keys(item, ['fieldId', 'fieldName', 'subFormId', 'title', 'content'], '字段样式调整');
|
|
234
|
+
const target = `field:${item.subFormId || 'main'}:${item.fieldId || item.fieldName}`;
|
|
235
|
+
const matches = known.filter((f) => sameField(f, item) && (!item.fieldId || !f.fieldId || f.fieldId === item.fieldId) && (!item.fieldName || !f.fieldName || f.fieldName === item.fieldName));
|
|
236
|
+
if (matches.length !== 1) {
|
|
237
|
+
rejected.push({ target, property: 'target', requested: item, reason: '缺少唯一已观察字段;提供已有 LayoutSpec,不能凭名称新增字段' });
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
const fields = source.imageStyles.fields ||= [], found = fields.find(f => sameField(f, item));
|
|
241
|
+
const rule = found || { fieldId: matches[0].fieldId, fieldName: matches[0].fieldName, subFormId: matches[0].subFormId };
|
|
242
|
+
for (const part of ['title', 'content'])
|
|
243
|
+
if (item[part]) {
|
|
244
|
+
const style = apply(`${target}.${part}`, rule[part] || {}, item[part], matches[0][part]);
|
|
245
|
+
if (Object.keys(style).length)
|
|
246
|
+
rule[part] = style;
|
|
247
|
+
}
|
|
248
|
+
if (!found && (rule.title || rule.content))
|
|
249
|
+
fields.push(rule);
|
|
250
|
+
}
|
|
251
|
+
if (overrides.page) {
|
|
252
|
+
keys(overrides.page, ['backgroundColor'], '页面样式调整');
|
|
253
|
+
const style = apply('page', source.imageStyles.page || {}, overrides.page);
|
|
254
|
+
if (style.backgroundColor)
|
|
255
|
+
source.imageStyles.page = { backgroundColor: style.backgroundColor };
|
|
256
|
+
}
|
|
257
|
+
source.observations.confirmed = confirmed;
|
|
258
|
+
const checked = clone(source);
|
|
259
|
+
checked.observations.confirmed = true;
|
|
260
|
+
validateSource(checked);
|
|
261
|
+
return { source, report: { status: confirmed ? 'STYLE_CONFIRMED' : 'STYLE_CONFIRMATION_REQUIRED', confirmed, sourceHash: source.sourceHash,
|
|
262
|
+
recognized, effective: summarizeImageStyles(source, spec), accepted, rejected, issues: clone(source.imageStyles.issues), notes: clone(source.imageStyles.notes || []),
|
|
263
|
+
fallbackPolicy: '仅无法转换的单项保留图片识别值;有效单项按用户指定,不修改字段业务配置。',
|
|
264
|
+
nextStep: confirmed ? '重新 compile → preview → apply' : '向用户展示 recognized/effective、估计项、accepted/rejected;得到用户确认后再用 --confirm,不得代用户确认。' } };
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=image-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-review.js","sourceRoot":"","sources":["../../../src/services/form-layout-source/image-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ImageStyleObservation, ImageStyleProjection, ImageStyleReport, LayoutSource, ObservedStyle, SourceSheet } from './types.js';
|
|
2
|
+
export declare function imageColor(value: string): string;
|
|
3
|
+
export declare function normalizeObservedStyle(input: ObservedStyle): ObservedStyle;
|
|
4
|
+
/** 像素边界是几何来源,不从字段数或默认两字段模板推定网格。 */
|
|
5
|
+
export declare function geometrySheet(source: LayoutSource, selected: SourceSheet, mergedAnchorBorders?: boolean, preserveBorders?: boolean): SourceSheet;
|
|
6
|
+
export declare function validateImageStyles(profile: ImageStyleObservation, source: LayoutSource): void;
|
|
7
|
+
export declare function observedCss(input: ObservedStyle): Record<string, any>;
|
|
8
|
+
export declare function observedNative(input: ObservedStyle, existing?: any): Record<string, any>;
|
|
9
|
+
/** 图像单元格键别名规范化,仅在 extract 图片入口使用,Excel 与旧产物不变。 */
|
|
10
|
+
export declare function normalizeImageCells(source: LayoutSource): LayoutSource;
|
|
11
|
+
export declare function prepareImageStyleSheet(source: LayoutSource, selected: SourceSheet, mergedAnchorBorders?: boolean, preserveBorders?: boolean): SourceSheet;
|
|
12
|
+
export declare function projectImageField(source: LayoutSource, binding: any, title: any, content: any, projection: ImageStyleProjection, used: Set<any>, sheetName: string, effectiveDisplay?: boolean, effectiveText?: boolean): void;
|
|
13
|
+
export declare function projectImagePage(source: LayoutSource, layout: any, projection: ImageStyleProjection): void;
|
|
14
|
+
export declare function canonicalImageFormStyle(value: any): any;
|
|
15
|
+
export declare function imageStyleReport(projection?: ImageStyleProjection, pages?: any[], formStyle?: any): ImageStyleReport;
|
|
16
|
+
//# sourceMappingURL=image-style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-style.d.ts","sourceRoot":"","sources":["../../../src/services/form-layout-source/image-style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAe1I,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUhD;AACD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAqB1E;AA0BD,mCAAmC;AACnC,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,UAAQ,EAAE,eAAe,UAAQ,GAAG,WAAW,CAkD5I;AACD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CA8C9F;AACD,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CASrE;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,GAAE,GAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAoB5F;AACD,kDAAkD;AAClD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CA2BtE;AACD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,UAAQ,EAAE,eAAe,UAAQ,GAAG,WAAW,CAerJ;AAUD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,UAAQ,EAAE,aAAa,UAAQ,GAAG,IAAI,CA0D1N;AACD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAe1G;AACD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAKvD;AACD,wBAAgB,gBAAgB,CAAC,UAAU,CAAC,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,GAAG,gBAAgB,CAqBpH"}
|