weaver-e10-builder 1.5.11 → 1.5.12
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/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-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 +26 -2
- 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/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/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/formula_service.d.ts.map +1 -1
- package/dist/services/actionflow/formula_service.js +19 -8
- 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 +127 -2
- 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 +26 -0
- 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-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/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/package.json +3 -1
- package/skill-docs/SKILL.md +15 -6
- package/skill-docs/_catalog.md +1 -0
- 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/common/guide-plan-template.md +3 -0
- package/skill-docs/references/common/ref-cli-commands.md +17 -4
- package/skill-docs/references/form/guide-create-form.md +2 -0
- package/skill-docs/references/form/guide-field-linkage.md +140 -55
- 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-view.md +1 -1
- package/skill-docs/references/form/guide-formula-linkage.md +44 -1
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
2
|
+
import { resolve, posix } from 'node:path';
|
|
3
|
+
import JSZip from 'jszip';
|
|
4
|
+
import { DOMParser } from '@xmldom/xmldom';
|
|
5
|
+
import { assert, byteHash, LIMITS, validateSheet, validateSource } from './schema.js';
|
|
6
|
+
const children = (node, name) => Array.from(node?.childNodes || []).filter((n) => n.nodeType === 1 && (!name || n.localName === name));
|
|
7
|
+
const child = (node, name) => children(node, name)[0];
|
|
8
|
+
const attr = (node, name) => node?.getAttribute(name) || '';
|
|
9
|
+
const num = (node, name, fallback) => attr(node, name) === '' ? fallback : Number(attr(node, name));
|
|
10
|
+
const enabled = (node) => !!node && attr(node, 'val') !== '0' && attr(node, 'val') !== 'false';
|
|
11
|
+
const all = (node, name) => Array.from(node?.getElementsByTagNameNS('*', name) || []);
|
|
12
|
+
const BORDER = { hair: 1, thin: 1, medium: 2, dashed: 3, dashDot: 3, dashDotDot: 3, dotted: 4, thick: 5, double: 6, mediumDashed: 8, mediumDashDot: 8, mediumDashDotDot: 8, slantDashDot: 8 };
|
|
13
|
+
const INDEXED = ['000000', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', 'FF00FF', '00FFFF', '000000', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', 'FF00FF', '00FFFF'];
|
|
14
|
+
export function cellPoint(ref) {
|
|
15
|
+
const match = /^([A-Z]+)([1-9]\d*)$/i.exec(ref);
|
|
16
|
+
assert(match, `无效单元格引用 ${ref}`);
|
|
17
|
+
let col = 0;
|
|
18
|
+
for (const letter of match[1].toUpperCase())
|
|
19
|
+
col = col * 26 + letter.charCodeAt(0) - 64;
|
|
20
|
+
return { row: Number(match[2]) - 1, col: col - 1 };
|
|
21
|
+
}
|
|
22
|
+
function range(ref) {
|
|
23
|
+
const [first, last] = ref.split(':');
|
|
24
|
+
const a = cellPoint(first);
|
|
25
|
+
const b = cellPoint(last || first);
|
|
26
|
+
assert(b.row >= a.row && b.col >= a.col, `无效范围 ${ref}`);
|
|
27
|
+
return { ...a, rowCount: b.row - a.row + 1, colCount: b.col - a.col + 1 };
|
|
28
|
+
}
|
|
29
|
+
/** 在解压之前检查 ZIP 中央目录大小与路径,JSZip 仅在限额闭合后读取条目。 */
|
|
30
|
+
function preflight(bytes) {
|
|
31
|
+
assert(bytes.length <= LIMITS.bytes, 'Excel 文件超过 20 MiB');
|
|
32
|
+
let end = -1;
|
|
33
|
+
for (let i = bytes.length - 22; i >= Math.max(0, bytes.length - 65557); i--)
|
|
34
|
+
if (bytes.readUInt32LE(i) === 0x06054b50 && i + 22 + bytes.readUInt16LE(i + 20) === bytes.length) {
|
|
35
|
+
end = i;
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
assert(end >= 0, '只支持完整 XLSX ZIP 文件');
|
|
39
|
+
const count = bytes.readUInt16LE(end + 10);
|
|
40
|
+
let offset = bytes.readUInt32LE(end + 16);
|
|
41
|
+
let total = 0;
|
|
42
|
+
assert(count > 0 && count <= LIMITS.entries && bytes.readUInt16LE(end + 4) === 0 && bytes.readUInt16LE(end + 6) === 0, 'ZIP 条目或分卷无效');
|
|
43
|
+
const names = new Set();
|
|
44
|
+
for (let i = 0; i < count; i++) {
|
|
45
|
+
assert(offset + 46 <= end && bytes.readUInt32LE(offset) === 0x02014b50, 'ZIP 中央目录无效');
|
|
46
|
+
const size = bytes.readUInt32LE(offset + 24);
|
|
47
|
+
const length = bytes.readUInt16LE(offset + 28);
|
|
48
|
+
const extra = bytes.readUInt16LE(offset + 30);
|
|
49
|
+
const comment = bytes.readUInt16LE(offset + 32);
|
|
50
|
+
assert(offset + 46 + length + extra + comment <= end, 'ZIP 条目截断');
|
|
51
|
+
const name = bytes.subarray(offset + 46, offset + 46 + length).toString('utf8');
|
|
52
|
+
assert(!name.startsWith('/') && !name.includes('\\') && !name.split('/').includes('..') && !names.has(name), 'ZIP 路径越界或重复');
|
|
53
|
+
names.add(name);
|
|
54
|
+
assert(!/vbaProject|\.bin$/i.test(name) && !(bytes.readUInt16LE(offset + 8) & 1), '不支持宏或加密工作簿');
|
|
55
|
+
total += size;
|
|
56
|
+
assert(size <= LIMITS.expanded && total <= LIMITS.expanded, 'ZIP 展开大小超限');
|
|
57
|
+
offset += 46 + length + extra + comment;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function xml(zip, name, optional = false) {
|
|
61
|
+
const file = zip.file(name);
|
|
62
|
+
if (optional && !file)
|
|
63
|
+
return null;
|
|
64
|
+
assert(file, `XLSX 缺少 ${name}`);
|
|
65
|
+
const text = await file.async('string');
|
|
66
|
+
assert(!/<!DOCTYPE|<!ENTITY/i.test(text), `XML 不允许外部实体 ${name}`);
|
|
67
|
+
let error = '';
|
|
68
|
+
const parsed = new DOMParser({ errorHandler: { warning: (s) => { error = s; }, error: (s) => { error = s; }, fatalError: (s) => { error = s; } } }).parseFromString(text, 'application/xml');
|
|
69
|
+
assert(!error && parsed.documentElement, `XML 格式错误 ${name}`);
|
|
70
|
+
return parsed;
|
|
71
|
+
}
|
|
72
|
+
function color(node, theme, unsupported) {
|
|
73
|
+
if (!node)
|
|
74
|
+
return undefined;
|
|
75
|
+
let hex = attr(node, 'rgb').slice(-6);
|
|
76
|
+
if (!hex && attr(node, 'theme') !== '')
|
|
77
|
+
hex = theme[Number(attr(node, 'theme'))];
|
|
78
|
+
if (!hex && attr(node, 'indexed') !== '')
|
|
79
|
+
hex = INDEXED[Number(attr(node, 'indexed'))];
|
|
80
|
+
if (!hex && attr(node, 'auto') === '1')
|
|
81
|
+
hex = '000000';
|
|
82
|
+
if (!hex || !/^[0-9a-f]{6}$/i.test(hex)) {
|
|
83
|
+
unsupported.push('无法解析的源颜色');
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
const tint = num(node, 'tint', 0);
|
|
87
|
+
if (tint)
|
|
88
|
+
hex = [0, 2, 4].map(i => { const n = parseInt(hex.slice(i, i + 2), 16); return Math.round(Math.max(0, Math.min(255, tint < 0 ? n * (1 + tint) : n * (1 - tint) + 255 * tint))).toString(16).padStart(2, '0'); }).join('');
|
|
89
|
+
return `#${hex.toUpperCase()}`;
|
|
90
|
+
}
|
|
91
|
+
function styleOf(index, tables, theme, unsupported) {
|
|
92
|
+
const xf = tables.xfs[index];
|
|
93
|
+
assert(xf || index === 0, `样式索引不存在 ${index}`);
|
|
94
|
+
if (!xf)
|
|
95
|
+
return {};
|
|
96
|
+
const style = {};
|
|
97
|
+
const font = tables.fonts[num(xf, 'fontId', 0)];
|
|
98
|
+
if (font) {
|
|
99
|
+
const size = Math.round(num(child(font, 'sz'), 'val', 11) * 96 / 72 * 10) / 10;
|
|
100
|
+
const family = attr(child(font, 'name'), 'val') || 'Calibri';
|
|
101
|
+
style.font = `${enabled(child(font, 'i')) ? 'italic ' : ''}${enabled(child(font, 'b')) ? '700 ' : ''}${size}px ${family}`;
|
|
102
|
+
const fg = color(child(font, 'color'), theme, unsupported);
|
|
103
|
+
if (fg)
|
|
104
|
+
style.foreColor = fg;
|
|
105
|
+
if (enabled(child(font, 'u')))
|
|
106
|
+
style.textDecoration = 1;
|
|
107
|
+
if (child(font, 'vertAlign') || child(font, 'strike'))
|
|
108
|
+
unsupported.push('字体上标、下标或删除线');
|
|
109
|
+
}
|
|
110
|
+
const fill = tables.fills[num(xf, 'fillId', 0)];
|
|
111
|
+
const pattern = child(fill, 'patternFill');
|
|
112
|
+
if (child(fill, 'gradientFill'))
|
|
113
|
+
unsupported.push('渐变填充');
|
|
114
|
+
if (pattern && attr(pattern, 'patternType') === 'solid') {
|
|
115
|
+
const bg = color(child(pattern, 'fgColor'), theme, unsupported);
|
|
116
|
+
if (bg)
|
|
117
|
+
style.backColor = bg;
|
|
118
|
+
}
|
|
119
|
+
else if (pattern && !['', 'none', 'gray125'].includes(attr(pattern, 'patternType')))
|
|
120
|
+
unsupported.push(`图案填充 ${attr(pattern, 'patternType')}`);
|
|
121
|
+
const border = tables.borders[num(xf, 'borderId', 0)];
|
|
122
|
+
for (const [key, side] of [['borderLeft', 'left'], ['borderRight', 'right'], ['borderTop', 'top'], ['borderBottom', 'bottom']]) {
|
|
123
|
+
const edge = child(border, side);
|
|
124
|
+
const kind = attr(edge, 'style');
|
|
125
|
+
if (!kind)
|
|
126
|
+
continue;
|
|
127
|
+
if (!BORDER[kind]) {
|
|
128
|
+
unsupported.push(`未知边框 ${kind}`);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
style[key] = { style: BORDER[kind], color: color(child(edge, 'color'), theme, unsupported) || '#000000' };
|
|
132
|
+
}
|
|
133
|
+
if (attr(child(border, 'diagonal'), 'style'))
|
|
134
|
+
unsupported.push('斜线边框');
|
|
135
|
+
const align = child(xf, 'alignment');
|
|
136
|
+
for (const [native, xmlKey, values] of [['hAlign', 'horizontal', ['left', 'center', 'right', 'general']], ['vAlign', 'vertical', ['top', 'center', 'bottom']]]) {
|
|
137
|
+
const value = attr(align, xmlKey);
|
|
138
|
+
if (!value)
|
|
139
|
+
continue;
|
|
140
|
+
const idx = values.indexOf(value);
|
|
141
|
+
if (idx < 0)
|
|
142
|
+
unsupported.push(`对齐 ${xmlKey}=${value}`);
|
|
143
|
+
else
|
|
144
|
+
style[native] = idx;
|
|
145
|
+
}
|
|
146
|
+
if (attr(align, 'wrapText') !== '')
|
|
147
|
+
style.wordWrap = attr(align, 'wrapText') === '1';
|
|
148
|
+
if (attr(align, 'indent') !== '')
|
|
149
|
+
style.textIndent = num(align, 'indent', 0);
|
|
150
|
+
if (num(align, 'textRotation', 0) || attr(align, 'shrinkToFit') === '1')
|
|
151
|
+
unsupported.push('旋转文字或缩小字体');
|
|
152
|
+
if (num(xf, 'numFmtId', 0) !== 0)
|
|
153
|
+
unsupported.push(`数值格式 ${num(xf, 'numFmtId', 0)}(保留源值,未映射显示格式)`);
|
|
154
|
+
if (num(xf, 'xfId', 0) !== 0 || child(xf, 'protection'))
|
|
155
|
+
unsupported.push('命名样式关联或单元格保护未进入原生投影');
|
|
156
|
+
return style;
|
|
157
|
+
}
|
|
158
|
+
export async function extractExcelSource(path) {
|
|
159
|
+
assert(statSync(path).size <= LIMITS.bytes, 'Excel 文件超过 20 MiB');
|
|
160
|
+
const bytes = readFileSync(path);
|
|
161
|
+
preflight(bytes);
|
|
162
|
+
const zip = await JSZip.loadAsync(bytes);
|
|
163
|
+
const workbook = await xml(zip, 'xl/workbook.xml');
|
|
164
|
+
const relationships = await xml(zip, 'xl/_rels/workbook.xml.rels');
|
|
165
|
+
const rels = new Map();
|
|
166
|
+
for (const rel of all(relationships, 'Relationship')) {
|
|
167
|
+
if (attr(rel, 'TargetMode') === 'External')
|
|
168
|
+
continue;
|
|
169
|
+
const target = attr(rel, 'Target');
|
|
170
|
+
const normalized = target.startsWith('/') ? target.slice(1) : posix.normalize(posix.join('xl', target));
|
|
171
|
+
assert(normalized.startsWith('xl/') && !normalized.split('/').includes('..'), '工作簿关联越界');
|
|
172
|
+
rels.set(attr(rel, 'Id'), normalized);
|
|
173
|
+
}
|
|
174
|
+
const shared = await xml(zip, 'xl/sharedStrings.xml', true);
|
|
175
|
+
const sharedItems = all(shared, 'si');
|
|
176
|
+
const texts = sharedItems.map(si => all(si, 't').map(t => t.textContent || '').join(''));
|
|
177
|
+
const styles = await xml(zip, 'xl/styles.xml', true);
|
|
178
|
+
const styleRoot = styles?.documentElement;
|
|
179
|
+
const tables = { fonts: children(child(styleRoot, 'fonts')), fills: children(child(styleRoot, 'fills')), borders: children(child(styleRoot, 'borders')), xfs: children(child(styleRoot, 'cellXfs')) };
|
|
180
|
+
const themeXml = await xml(zip, 'xl/theme/theme1.xml', true);
|
|
181
|
+
const theme = children(all(themeXml, 'clrScheme')[0]).map(n => { const c = children(n)[0]; return attr(c, 'val') || attr(c, 'lastClr'); });
|
|
182
|
+
// OOXML 的主题索引先 light1/dark1,主题表本身却先 dark1/light1。
|
|
183
|
+
if (theme.length >= 4)
|
|
184
|
+
[theme[0], theme[1], theme[2], theme[3]] = [theme[1], theme[0], theme[3], theme[2]];
|
|
185
|
+
const unsupported = [];
|
|
186
|
+
const sheets = [];
|
|
187
|
+
let workbookCellCount = 0;
|
|
188
|
+
const sheetNodes = all(workbook, 'sheet');
|
|
189
|
+
assert(sheetNodes.length > 0 && sheetNodes.length <= 50, '工作表数量超限');
|
|
190
|
+
for (const sheetNode of sheetNodes) {
|
|
191
|
+
const name = attr(sheetNode, 'name');
|
|
192
|
+
const part = rels.get(attr(sheetNode, 'r:id'));
|
|
193
|
+
assert(part, `Sheet 缺少关联 ${name}`);
|
|
194
|
+
const doc = await xml(zip, part);
|
|
195
|
+
const spans = all(doc, 'mergeCell').map(n => range(attr(n, 'ref')));
|
|
196
|
+
const cells = [];
|
|
197
|
+
let rowCount = 1;
|
|
198
|
+
let columnCount = 1;
|
|
199
|
+
const rowsXml = all(doc, 'row');
|
|
200
|
+
const colsXml = all(doc, 'col');
|
|
201
|
+
assert(rowsXml.length <= LIMITS.rows && colsXml.length <= 16384, '行列元数据数量超限');
|
|
202
|
+
const rowsByIndex = new Map();
|
|
203
|
+
for (const row of rowsXml) {
|
|
204
|
+
const index = num(row, 'r', 1);
|
|
205
|
+
assert(!rowsByIndex.has(index), '重复行元数据');
|
|
206
|
+
rowsByIndex.set(index, row);
|
|
207
|
+
}
|
|
208
|
+
const colsByIndex = [];
|
|
209
|
+
for (const col of colsXml) {
|
|
210
|
+
const min = num(col, 'min', 1), max = num(col, 'max', 1);
|
|
211
|
+
assert(Number.isInteger(min) && Number.isInteger(max) && min > 0 && max >= min && max <= 16384, '列元数据范围无效');
|
|
212
|
+
for (let c = min - 1; c < Math.min(max, LIMITS.cols); c++) {
|
|
213
|
+
assert(!colsByIndex[c], '重复列元数据');
|
|
214
|
+
colsByIndex[c] = col;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
for (const row of rowsXml)
|
|
218
|
+
for (const c of children(row, 'c')) {
|
|
219
|
+
assert(++workbookCellCount <= LIMITS.cells, '真实工作簿总单元格数量超限');
|
|
220
|
+
const p = cellPoint(attr(c, 'r'));
|
|
221
|
+
assert(p.row < LIMITS.rows && p.col < LIMITS.cols, `真实单元格超限 ${name}!${attr(c, 'r')}`);
|
|
222
|
+
rowCount = Math.max(rowCount, p.row + 1);
|
|
223
|
+
columnCount = Math.max(columnCount, p.col + 1);
|
|
224
|
+
const items = [];
|
|
225
|
+
const inherited = colsByIndex[p.col];
|
|
226
|
+
const index = num(c, 's', num(row, 's', num(inherited, 'style', 0)));
|
|
227
|
+
const target = { row: String(p.row), col: String(p.col), style: styleOf(index, tables, theme, items) };
|
|
228
|
+
const type = attr(c, 't');
|
|
229
|
+
const value = child(c, 'v')?.textContent;
|
|
230
|
+
if (type === 's') {
|
|
231
|
+
assert(/^\d+$/.test(value || '') && texts[Number(value)] !== undefined, '共享字符串索引无效');
|
|
232
|
+
target.value = texts[Number(value)];
|
|
233
|
+
}
|
|
234
|
+
else if (type === 'inlineStr')
|
|
235
|
+
target.value = all(child(c, 'is'), 't').map(t => t.textContent || '').join('');
|
|
236
|
+
else if (value !== undefined)
|
|
237
|
+
target.value = String(value);
|
|
238
|
+
const formula = child(c, 'f');
|
|
239
|
+
if (formula) {
|
|
240
|
+
if (/(?:DISPIMG|IMAGE)\s*\(/i.test(formula.textContent || '')) {
|
|
241
|
+
delete target.value;
|
|
242
|
+
unsupported.push(`${name}!${attr(c, 'r')}: 图片公式省略`);
|
|
243
|
+
}
|
|
244
|
+
else if (attr(formula, 't') && attr(formula, 't') !== 'normal')
|
|
245
|
+
unsupported.push(`${name}!${attr(c, 'r')}: 共享或数组公式`);
|
|
246
|
+
else
|
|
247
|
+
target.formula = formula.textContent || '';
|
|
248
|
+
}
|
|
249
|
+
if (type === 'e')
|
|
250
|
+
unsupported.push(`${name}!${attr(c, 'r')}: 源公式错误值`);
|
|
251
|
+
if (all(c, 'rPr').length || type === 's' && all(sharedItems[Number(value)], 'rPr').length)
|
|
252
|
+
unsupported.push(`${name}!${attr(c, 'r')}: 富文本局部样式未进入原生投影`);
|
|
253
|
+
items.forEach(item => unsupported.push(`${name}!${attr(c, 'r')}: ${item}`));
|
|
254
|
+
cells.push(target);
|
|
255
|
+
assert(cells.length <= LIMITS.cells, '真实单元格总数超限');
|
|
256
|
+
}
|
|
257
|
+
for (const row of rowsXml) {
|
|
258
|
+
const r = num(row, 'r', 1);
|
|
259
|
+
assert(Number.isInteger(r) && r > 0, '行元数据坐标无效');
|
|
260
|
+
if (r <= LIMITS.rows)
|
|
261
|
+
rowCount = Math.max(rowCount, r);
|
|
262
|
+
else
|
|
263
|
+
unsupported.push(`${name}: 超出布局范围的行元数据 ${r}`);
|
|
264
|
+
}
|
|
265
|
+
for (const span of spans) {
|
|
266
|
+
rowCount = Math.max(rowCount, span.row + span.rowCount);
|
|
267
|
+
columnCount = Math.max(columnCount, span.col + span.colCount);
|
|
268
|
+
}
|
|
269
|
+
const dim = attr(all(doc, 'dimension')[0], 'ref');
|
|
270
|
+
if (dim) {
|
|
271
|
+
const d = range(dim);
|
|
272
|
+
if (d.row + d.rowCount <= LIMITS.rows && d.col + d.colCount <= LIMITS.cols) {
|
|
273
|
+
rowCount = Math.max(rowCount, d.row + d.rowCount);
|
|
274
|
+
columnCount = Math.max(columnCount, d.col + d.colCount);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
assert(rowCount <= LIMITS.rows && columnCount <= LIMITS.cols, '源合并区域超限');
|
|
278
|
+
const fmt = all(doc, 'sheetFormatPr')[0];
|
|
279
|
+
const rows = Array.from({ length: rowCount }, () => ({ size: num(fmt, 'defaultRowHeight', 15) * 96 / 72, visible: true }));
|
|
280
|
+
const columns = Array.from({ length: columnCount }, () => ({ size: Math.floor(num(fmt, 'defaultColWidth', 8.43) * 7 + 5), visible: true }));
|
|
281
|
+
for (const row of rowsXml) {
|
|
282
|
+
const r = num(row, 'r', 1) - 1;
|
|
283
|
+
if (r >= 0 && r < rowCount)
|
|
284
|
+
rows[r] = { size: num(row, 'ht', 15) * 96 / 72, visible: attr(row, 'hidden') !== '1' };
|
|
285
|
+
}
|
|
286
|
+
for (const col of colsXml)
|
|
287
|
+
for (let c = Math.max(0, num(col, 'min', 1) - 1); c < Math.min(columnCount, num(col, 'max', 1)); c++)
|
|
288
|
+
columns[c] = { size: Math.floor(num(col, 'width', 8.43) * 7 + 5), visible: attr(col, 'hidden') !== '1' };
|
|
289
|
+
const existing = new Set(cells.map(c => `${c.row},${c.col}`));
|
|
290
|
+
for (let r = 0; r < rowCount; r++) {
|
|
291
|
+
const rowStyle = rowsByIndex.get(r + 1);
|
|
292
|
+
for (let c = 0; c < columnCount; c++) {
|
|
293
|
+
if (existing.has(`${r},${c}`))
|
|
294
|
+
continue;
|
|
295
|
+
const colStyle = colsByIndex[c];
|
|
296
|
+
const index = num(rowStyle, 's', num(colStyle, 'style', 0));
|
|
297
|
+
if (!index)
|
|
298
|
+
continue;
|
|
299
|
+
assert(++workbookCellCount <= LIMITS.cells, '继承行列样式后单元格数量超限');
|
|
300
|
+
const items = [];
|
|
301
|
+
cells.push({ row: String(r), col: String(c), style: styleOf(index, tables, theme, items) });
|
|
302
|
+
items.forEach(item => unsupported.push(`${name}!${r},${c}: ${item}`));
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
for (const item of ['drawing', 'legacyDrawing', 'conditionalFormatting', 'dataValidations', 'hyperlinks', 'tableParts', 'sheetProtection', 'pane', 'autoFilter'])
|
|
306
|
+
if (all(doc, item).length)
|
|
307
|
+
unsupported.push(`${name}: ${item} 未进入原生样式投影`);
|
|
308
|
+
if ([...rowsXml, ...colsXml].some(n => num(n, 'outlineLevel', 0) || attr(n, 'collapsed') === '1'))
|
|
309
|
+
unsupported.push(`${name}: 行列分组未进入原生样式投影`);
|
|
310
|
+
validateSheet({ name, rowCount, columnCount, rows, columns, spans, cells });
|
|
311
|
+
// 合并单元格的语义只出现在锚点;边缘样式保留并补到锚点的外边框。
|
|
312
|
+
const byPosition = new Map(cells.map(c => [`${Number(c.row)},${Number(c.col)}`, c]));
|
|
313
|
+
for (const span of spans) {
|
|
314
|
+
let anchor = byPosition.get(`${span.row},${span.col}`);
|
|
315
|
+
if (!anchor) {
|
|
316
|
+
assert(++workbookCellCount <= LIMITS.cells, '合并锚点补齐后单元格数量超限');
|
|
317
|
+
anchor = { row: String(span.row), col: String(span.col), style: {} };
|
|
318
|
+
cells.push(anchor);
|
|
319
|
+
byPosition.set(`${span.row},${span.col}`, anchor);
|
|
320
|
+
}
|
|
321
|
+
for (let r = span.row; r < span.row + span.rowCount; r++)
|
|
322
|
+
for (let c = span.col; c < span.col + span.colCount; c++) {
|
|
323
|
+
const cell = byPosition.get(`${r},${c}`);
|
|
324
|
+
if (!cell)
|
|
325
|
+
continue;
|
|
326
|
+
for (const [key, atEdge] of [['borderLeft', c === span.col], ['borderRight', c === span.col + span.colCount - 1], ['borderTop', r === span.row], ['borderBottom', r === span.row + span.rowCount - 1]]) {
|
|
327
|
+
if (atEdge && !anchor.style[key] && cell.style[key])
|
|
328
|
+
anchor.style[key] = { ...cell.style[key] };
|
|
329
|
+
}
|
|
330
|
+
if (cell !== anchor) {
|
|
331
|
+
delete cell.value;
|
|
332
|
+
delete cell.formula;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
sheets.push({ name, rowCount, columnCount, rows, columns, spans, cells });
|
|
337
|
+
}
|
|
338
|
+
const source = { schemaVersion: 'e10.layout-source/v1', sourceType: 'excel', sourceHash: byteHash(bytes), sourceFile: resolve(path), sheets, unsupported: [...new Set(unsupported)] };
|
|
339
|
+
validateSource(source);
|
|
340
|
+
return source;
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=excel-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excel-extractor.js","sourceRoot":"","sources":["../../../src/services/form-layout-source/excel-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGtF,MAAM,QAAQ,GAAG,CAAC,IAAS,EAAE,IAAa,EAAS,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;AACjK,MAAM,KAAK,GAAG,CAAC,IAAS,EAAE,IAAY,EAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,MAAM,IAAI,GAAG,CAAC,IAAS,EAAE,IAAY,EAAU,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACjF,MAAM,GAAG,GAAG,CAAC,IAAS,EAAE,IAAY,EAAE,QAAgB,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACjI,MAAM,OAAO,GAAG,CAAC,IAAS,EAAW,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,OAAO,CAAC;AAC7G,MAAM,GAAG,GAAG,CAAC,IAAS,EAAE,IAAY,EAAS,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1G,MAAM,MAAM,GAA2B,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;AACtN,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACjL,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,EAAE,CAAC,CAAC;IACjF,IAAI,GAAG,GAAG,CAAC,CAAC;IAAC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACrG,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;AACD,SAAS,KAAK,CAAC,GAAW;IACxB,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAAC,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;IACrG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC;IACxD,OAAO,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;AAC5E,CAAC;AACD,+CAA+C;AAC/C,SAAS,SAAS,CAAC,KAAa;IAC9B,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAC1D,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAAC,GAAG,GAAG,CAAC,CAAC;YAAC,MAAM;QAAC,CAAC;IAClM,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,mBAAmB,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAAC,IAAI,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAAC,IAAI,KAAK,GAAG,CAAC,CAAC;IACrG,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC;IACtI,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,YAAY,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAAC,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAC7F,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAAC,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAC/F,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,IAAI,GAAG,EAAE,UAAU,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChF,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;QAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7I,MAAM,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAChG,KAAK,IAAI,IAAI,CAAC;QAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACzF,MAAM,IAAI,EAAE,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;IAC1C,CAAC;AACH,CAAC;AACD,KAAK,UAAU,GAAG,CAAC,GAAU,EAAE,IAAY,EAAE,QAAQ,GAAG,KAAK;IAC3D,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAAC,IAAI,QAAQ,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAChE,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;IAAC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzE,MAAM,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,eAAe,IAAI,EAAE,CAAC,CAAC;IACjE,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IACrN,MAAM,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,eAAe,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,MAAM,CAAC;AAC9E,CAAC;AACD,SAAS,KAAK,CAAC,IAAS,EAAE,KAAe,EAAE,WAAqB;IAC9D,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE;QAAE,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACjF,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE;QAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACvF,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG;QAAE,GAAG,GAAG,QAAQ,CAAC;IACvD,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAC5F,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAClC,IAAI,IAAI;QAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpO,OAAO,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;AACjC,CAAC;AACD,SAAS,OAAO,CAAC,KAAa,EAAE,MAAW,EAAE,KAAe,EAAE,WAAqB;IACjF,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,WAAW,KAAK,EAAE,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IAChG,MAAM,KAAK,GAAQ,EAAE,CAAC;IAAC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IACvE,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC;QAC7D,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,MAAM,MAAM,EAAE,CAAC;QAC1H,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QAAC,IAAI,EAAE;YAAE,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;QACzF,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAAE,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;QACxD,IAAI,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IAAC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC5F,IAAI,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC;QAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,OAAO,EAAE,CAAC;QAAC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QAAC,IAAI,EAAE;YAAE,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;IAAC,CAAC;SACtJ,IAAI,OAAO,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;IAC9I,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC/H,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAAC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAAC,IAAI,CAAC,IAAI;YAAE,SAAS;QACxF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAClE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,SAAS,EAAE,CAAC;IAC5G,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACrC,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAU,EAAE,CAAC;QACxK,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK;YAAE,SAAS;QACxD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAAC,IAAI,GAAG,GAAG,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;;YAAM,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;IACtH,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,CAAC;IACrF,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,GAAG;QAAE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvG,IAAI,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC;QAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACnG,IAAI,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,YAAY,CAAC;QAAE,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACjG,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY;IACnD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAAC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7F,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAAC,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;IACvH,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,CAAC;QACrD,IAAI,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,UAAU;YAAE,SAAS;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAAC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5I,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;QAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IAClI,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IAAC,MAAM,SAAS,GAAG,MAAM,EAAE,eAAe,CAAC;IAChG,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;IACtM,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;IAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzM,kDAAkD;IAClD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,MAAM,WAAW,GAAa,EAAE,CAAC;IAAC,MAAM,MAAM,GAAkB,EAAE,CAAC;IAAC,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC9F,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IAC/G,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC;QACnF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAAC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACtG,MAAM,KAAK,GAAU,EAAE,CAAC;QAAC,IAAI,QAAQ,GAAG,CAAC,CAAC;QAAC,IAAI,WAAW,GAAG,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAAC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE,WAAW,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,IAAI,GAAG,EAAe,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;YAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzG,CAAC;QACD,MAAM,WAAW,GAAU,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,EAAE,UAAU,CAAC,CAAC;YAC5G,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAAC,CAAC;QACzH,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,OAAO;YAAE,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC9D,MAAM,CAAC,EAAE,iBAAiB,IAAI,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBAC7D,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACzH,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBACzF,MAAM,KAAK,GAAa,EAAE,CAAC;gBAAC,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjE,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrE,MAAM,MAAM,GAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC5G,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAAC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC;gBACpE,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;oBAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,SAAS,EAAE,WAAW,CAAC,CAAC;oBAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAC,CAAC;qBAC3I,IAAI,IAAI,KAAK,WAAW;oBAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;qBACzG,IAAI,KAAK,KAAK,SAAS;oBAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC9B,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;wBAAC,OAAO,MAAM,CAAC,KAAK,CAAC;wBAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;oBAAC,CAAC;yBACvI,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,QAAQ;wBAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;;wBAChH,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;gBAClD,CAAC;gBACD,IAAI,IAAI,KAAK,GAAG;oBAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;gBACtE,IAAI,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM;oBAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBACvJ,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACpD,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;YAC7E,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI;gBAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;;gBAClD,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QACrJ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,GAAG,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;QAAC,CAAC;QAC9N,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzE,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,kBAAkB,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3H,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5I,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ;gBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;QAAC,CAAC;QAClL,KAAK,MAAM,GAAG,IAAI,OAAO;YAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBAAE,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;QAC1O,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,KAAK;oBAAE,SAAS;gBAClF,MAAM,CAAC,EAAE,iBAAiB,IAAI,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBAC9D,MAAM,KAAK,GAAa,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC5F,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,CAAC;YAAE,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,MAAM;gBAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,YAAY,CAAC,CAAC;QAC5O,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,GAAG,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,iBAAiB,CAAC,CAAC;QAC9I,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5E,kCAAkC;QAClC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,CAAC,EAAE,iBAAiB,IAAI,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBAC9D,MAAM,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gBACrE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;YACxE,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;gBAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;oBACnH,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAAC,IAAI,CAAC,IAAI;wBAAE,SAAS;oBAC9D,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAU,EAAE,CAAC;wBAChN,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;4BAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClG,CAAC;oBACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;wBAAC,OAAO,IAAI,CAAC,KAAK,CAAC;wBAAC,OAAO,IAAI,CAAC,OAAO,CAAC;oBAAC,CAAC;gBAClE,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,MAAM,GAAiB,EAAE,aAAa,EAAE,sBAAsB,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;IACpM,cAAc,CAAC,MAAM,CAAC,CAAC;IAAC,OAAO,MAAM,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ImageBorderProjection, ImageBorderReport, ImageTableBorder, LayoutSource, ObservedBorder } from './types.js';
|
|
2
|
+
export declare function nativeBorderObservation(border: any): ObservedBorder | undefined;
|
|
3
|
+
/** 表格线粗细清单按原生渲染契约显示;控件输入框边框另列,不能混为表格线。 */
|
|
4
|
+
export declare function summarizeGridBorders(sheets: any[], tables?: ImageTableBorder[]): any[];
|
|
5
|
+
export declare function assertBorderObservation(source: LayoutSource, allowUnsupported?: boolean): void;
|
|
6
|
+
/** 只按明确声明的表格外框投影;不为整页、标题、编号或空白列推定边框。 */
|
|
7
|
+
export declare function projectImageBorders(source: LayoutSource, grid: any, sheet: string, removed?: Set<number>): ImageBorderProjection;
|
|
8
|
+
export declare function imageBorderReport(projection?: ImageBorderProjection, grid?: any): ImageBorderReport;
|
|
9
|
+
//# sourceMappingURL=image-border.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-border.d.ts","sourceRoot":"","sources":["../../../src/services/form-layout-source/image-border.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI3H,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,GAAG,GAAG,cAAc,GAAG,SAAS,CAG/E;AAED,0CAA0C;AAC1C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,gBAAgB,EAAE,GAAG,GAAG,EAAE,CAWtF;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,gBAAgB,UAAQ,GAAG,IAAI,CAI5F;AAED,wCAAwC;AACxC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,cAAoB,GAAG,qBAAqB,CA+DtI;AAED,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,qBAAqB,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,iBAAiB,CAOnG"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { assert, clone, stable } from './schema.js';
|
|
2
|
+
import { observedNative } from './image-style.js';
|
|
3
|
+
export function nativeBorderObservation(border) {
|
|
4
|
+
const modes = { 1: [1, 'solid'], 2: [2, 'solid'], 5: [3, 'solid'], 3: [1, 'dashed'], 8: [2, 'dashed'], 4: [2, 'dotted'], 6: [2, 'double'] };
|
|
5
|
+
const mode = modes[border?.style];
|
|
6
|
+
return mode ? { color: border.color, width: mode[0], line: mode[1] } : undefined;
|
|
7
|
+
}
|
|
8
|
+
/** 表格线粗细清单按原生渲染契约显示;控件输入框边框另列,不能混为表格线。 */
|
|
9
|
+
export function summarizeGridBorders(sheets, tables) {
|
|
10
|
+
const groups = new Map();
|
|
11
|
+
for (const sheet of sheets)
|
|
12
|
+
for (const cell of sheet.cells)
|
|
13
|
+
for (const side of ['borderTop', 'borderRight', 'borderBottom', 'borderLeft']) {
|
|
14
|
+
const border = cell.style?.[side];
|
|
15
|
+
if (!border)
|
|
16
|
+
continue;
|
|
17
|
+
const observed = nativeBorderObservation(border);
|
|
18
|
+
const scope = tables === undefined ? 'UNCLASSIFIED' : tables.some(t => t.sheet === sheet.name && Number(cell.row) >= t.row && Number(cell.row) < t.row + t.rowCount && Number(cell.col) >= t.col && Number(cell.col) < t.col + t.colCount) ? 'TABLE' : 'OUTSIDE_TABLE';
|
|
19
|
+
const appearance = { scope, direction: ['borderTop', 'borderBottom'].includes(side) ? 'HORIZONTAL' : 'VERTICAL', color: border.color, width: observed ? observed.width : null, line: observed?.line || 'unknown', nativeStyle: border.style };
|
|
20
|
+
const key = stable(appearance), group = groups.get(key) || { ...appearance, count: 0, examples: [] };
|
|
21
|
+
group.count++;
|
|
22
|
+
if (group.examples.length < 3)
|
|
23
|
+
group.examples.push({ sheet: sheet.name, row: Number(cell.row), col: Number(cell.col), side });
|
|
24
|
+
groups.set(key, group);
|
|
25
|
+
}
|
|
26
|
+
return [...groups.values()];
|
|
27
|
+
}
|
|
28
|
+
export function assertBorderObservation(source, allowUnsupported = false) {
|
|
29
|
+
if (source.sourceType !== 'image')
|
|
30
|
+
return;
|
|
31
|
+
assert(source.imageStyles?.tableBorders !== undefined, '[IMAGE_BORDER_OBSERVATION_REQUIRED] 请逐张记录表格正文范围及 top/right/bottom/left 四侧边框;明确没有表格时记录 tableBorders:[],4% 留白不能承接或代替外边框');
|
|
32
|
+
assert(allowUnsupported || !source.imageStyles.tableBorders.some(t => [t.top, t.right, t.bottom, t.left].includes('unknown')), '[IMAGE_BORDER_UNCERTAIN] 外边框尚有 unknown,需重新观察或取得用户明确接受后使用 allowUnsupported');
|
|
33
|
+
}
|
|
34
|
+
/** 只按明确声明的表格外框投影;不为整页、标题、编号或空白列推定边框。 */
|
|
35
|
+
export function projectImageBorders(source, grid, sheet, removed = new Set()) {
|
|
36
|
+
const declared = source.imageStyles?.tableBorders;
|
|
37
|
+
const projection = { observed: declared !== undefined, tables: [], issues: [], entries: [] };
|
|
38
|
+
const cells = new Map(grid.cells.map((c) => [`${Number(c.row)},${Number(c.col)}`, c]));
|
|
39
|
+
const get = (row, col) => {
|
|
40
|
+
const key = `${row},${col}`;
|
|
41
|
+
let cell = cells.get(key);
|
|
42
|
+
if (!cell) {
|
|
43
|
+
cell = { row: String(row), col: String(col), style: {} };
|
|
44
|
+
cells.set(key, cell);
|
|
45
|
+
grid.cells.push(cell);
|
|
46
|
+
}
|
|
47
|
+
cell.style ||= {};
|
|
48
|
+
return cell;
|
|
49
|
+
};
|
|
50
|
+
const expected = new Map(), lines = new Map();
|
|
51
|
+
const spans = new Map();
|
|
52
|
+
let covered = 0;
|
|
53
|
+
for (const span of grid.spans || []) {
|
|
54
|
+
assert((covered += span.rowCount * span.colCount) <= 100000, '合并边框总面积超限');
|
|
55
|
+
for (let r = span.row; r < span.row + span.rowCount; r++)
|
|
56
|
+
for (let c = span.col; c < span.col + span.colCount; c++)
|
|
57
|
+
spans.set(`${r},${c}`, span);
|
|
58
|
+
}
|
|
59
|
+
const write = (row, col, side, border) => {
|
|
60
|
+
if (row < 0 || row >= grid.rowCount || col < 0 || col >= grid.columnCount)
|
|
61
|
+
return;
|
|
62
|
+
const key = `${row},${col}:${side}`, previous = expected.get(key);
|
|
63
|
+
assert(!previous || stable(previous.expected) === stable(border), '相邻表格外边框声明冲突');
|
|
64
|
+
const cell = get(row, col);
|
|
65
|
+
if (border === null)
|
|
66
|
+
delete cell.style[side];
|
|
67
|
+
else
|
|
68
|
+
cell.style[side] = clone(border);
|
|
69
|
+
expected.set(key, { row, col, side, expected: border });
|
|
70
|
+
};
|
|
71
|
+
let work = 0;
|
|
72
|
+
for (const raw of declared || []) {
|
|
73
|
+
assert(raw.sheet === sheet, '外边框包含未选择的 Sheet,请分别编译');
|
|
74
|
+
assert(!Array.from(removed).some(r => r >= raw.row && r < raw.row + raw.rowCount), '表格外框跨越明细迁移行,请按主表/明细分别观察边框');
|
|
75
|
+
const table = { ...clone(raw), row: raw.row - [...removed].filter(r => r < raw.row).length };
|
|
76
|
+
projection.tables.push(table);
|
|
77
|
+
assert((work += 2 * (table.rowCount + table.colCount)) <= 100000, '表格外边框总长度超限');
|
|
78
|
+
for (const span of grid.spans || []) {
|
|
79
|
+
const overlap = span.row < table.row + table.rowCount && span.row + span.rowCount > table.row && span.col < table.col + table.colCount && span.col + span.colCount > table.col;
|
|
80
|
+
assert(!overlap || span.row >= table.row && span.col >= table.col && span.row + span.rowCount <= table.row + table.rowCount && span.col + span.colCount <= table.col + table.colCount, '表格外框切断了合并区域');
|
|
81
|
+
}
|
|
82
|
+
for (const side of ['top', 'right', 'bottom', 'left']) {
|
|
83
|
+
const value = table[side];
|
|
84
|
+
if (value === 'unknown') {
|
|
85
|
+
projection.issues.push(`${sheet}!${raw.row},${raw.col} ${side} 外边框未识别`);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const nativeSide = `border${side[0].toUpperCase()}${side.slice(1)}`;
|
|
89
|
+
const border = value === 'none' ? null : observedNative({ border: value }).borderTop;
|
|
90
|
+
const vertical = side === 'left' || side === 'right', length = vertical ? table.rowCount : table.colCount;
|
|
91
|
+
for (let i = 0; i < length; i++) {
|
|
92
|
+
const row = table.row + (vertical ? i : side === 'bottom' ? table.rowCount - 1 : 0);
|
|
93
|
+
const col = table.col + (vertical ? side === 'right' ? table.colCount - 1 : 0 : i);
|
|
94
|
+
const line = vertical ? `v:${col + Number(side === 'right')}:${row}` : `h:${row + Number(side === 'bottom')}:${col}`;
|
|
95
|
+
assert(!lines.has(line) || stable(lines.get(line)) === stable(border), '同一条可见边线有互相冲突的外框声明');
|
|
96
|
+
lines.set(line, border);
|
|
97
|
+
write(row, col, nativeSide, border);
|
|
98
|
+
const span = spans.get(`${row},${col}`);
|
|
99
|
+
if (span)
|
|
100
|
+
write(span.row, span.col, nativeSide, border);
|
|
101
|
+
// 明确无边框时,同时去掉相邻格对应边,防止共享边线仍被相邻格绘制。
|
|
102
|
+
if (border === null) {
|
|
103
|
+
const neighborRow = row + (side === 'top' ? -1 : side === 'bottom' ? 1 : 0), neighborCol = col + (side === 'left' ? -1 : side === 'right' ? 1 : 0);
|
|
104
|
+
const opposite = { top: 'borderBottom', right: 'borderLeft', bottom: 'borderTop', left: 'borderRight' }[side];
|
|
105
|
+
write(neighborRow, neighborCol, opposite, null);
|
|
106
|
+
const adjacent = spans.get(`${neighborRow},${neighborCol}`);
|
|
107
|
+
if (adjacent) {
|
|
108
|
+
assert(vertical ? adjacent.row >= table.row && adjacent.row + adjacent.rowCount <= table.row + table.rowCount : adjacent.col >= table.col && adjacent.col + adjacent.colCount <= table.col + table.colCount, '无边框声明会影响相邻跨区域合并格,请拆分观察范围');
|
|
109
|
+
write(adjacent.row, adjacent.col, opposite, null);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
projection.entries = [...expected.values()];
|
|
116
|
+
return projection;
|
|
117
|
+
}
|
|
118
|
+
export function imageBorderReport(projection, grid) {
|
|
119
|
+
const base = { tableCount: projection?.tables.length || 0, expectedSegments: projection?.entries.length || 0, matchedSegments: 0, differences: [], issues: clone(projection?.issues || []) };
|
|
120
|
+
if (!projection?.observed)
|
|
121
|
+
return { ...base, status: 'NOT_OBSERVED' };
|
|
122
|
+
if (!grid)
|
|
123
|
+
return { ...base, status: projection.issues.length ? 'INCOMPLETE' : 'COMPILED' };
|
|
124
|
+
const cells = new Map((grid.cells || []).map((c) => [`${Number(c.row)},${Number(c.col)}`, c]));
|
|
125
|
+
const differences = projection.entries.filter(e => stable(cells.get(`${e.row},${e.col}`)?.style?.[e.side] ?? null) !== stable(e.expected));
|
|
126
|
+
return { ...base, matchedSegments: projection.entries.length - differences.length, differences: differences.slice(0, 100).map(e => ({ ...clone(e), actual: clone(cells.get(`${e.row},${e.col}`)?.style?.[e.side] ?? null) })), status: projection.issues.length ? 'INCOMPLETE' : differences.length ? 'MISMATCH' : 'VERIFIED' };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=image-border.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-border.js","sourceRoot":"","sources":["../../../src/services/form-layout-source/image-border.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { LayoutSource } from './types.js';
|
|
2
|
+
/** 读取头部像素尺寸,不依赖 OCR、网络或图像解码服务。 */
|
|
3
|
+
export declare function imageDimensions(path: string): {
|
|
4
|
+
imageWidth: number;
|
|
5
|
+
imageHeight: number;
|
|
6
|
+
};
|
|
7
|
+
export declare function verifyImageGeometryFile(path: string, source: LayoutSource): void;
|
|
8
|
+
/** 图片的语义来自 Agent 观察;这里只验证原图身份和结构,不调用 OCR 或模型服务。 */
|
|
9
|
+
export declare function imageIdentity(path: string): {
|
|
10
|
+
sourceFile: string;
|
|
11
|
+
sourceHash: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function bindImageObservation(path: string, observation: LayoutSource): LayoutSource;
|
|
14
|
+
//# sourceMappingURL=image-observation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-observation.d.ts","sourceRoot":"","sources":["../../../src/services/form-layout-source/image-observation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CA2BzF;AACD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAIhF;AAED,mDAAmD;AACnD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAOtF;AACD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,GAAG,YAAY,CAK1F"}
|