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.
Files changed (212) hide show
  1. package/README.md +212 -189
  2. package/assets/image-style-observation.schema.json +1355 -0
  3. package/assets/layout-spec.schema.json +52 -0
  4. package/dist/commands/designer-common.d.ts.map +1 -1
  5. package/dist/commands/designer-common.js +91 -0
  6. package/dist/commands/designer-common.js.map +1 -1
  7. package/dist/commands/form-add-detail-table.d.ts.map +1 -1
  8. package/dist/commands/form-add-detail-table.js +97 -1
  9. package/dist/commands/form-add-detail-table.js.map +1 -1
  10. package/dist/commands/form-field-linkage.d.ts +55 -0
  11. package/dist/commands/form-field-linkage.d.ts.map +1 -1
  12. package/dist/commands/form-field-linkage.js +1026 -12
  13. package/dist/commands/form-field-linkage.js.map +1 -1
  14. package/dist/commands/form-formula-linkage.d.ts +36 -0
  15. package/dist/commands/form-formula-linkage.d.ts.map +1 -1
  16. package/dist/commands/form-formula-linkage.js +107 -7
  17. package/dist/commands/form-formula-linkage.js.map +1 -1
  18. package/dist/commands/form-formula.d.ts.map +1 -1
  19. package/dist/commands/form-formula.js +21 -4
  20. package/dist/commands/form-formula.js.map +1 -1
  21. package/dist/commands/form-layout-restore.d.ts +3 -0
  22. package/dist/commands/form-layout-restore.d.ts.map +1 -0
  23. package/dist/commands/form-layout-restore.js +217 -0
  24. package/dist/commands/form-layout-restore.js.map +1 -0
  25. package/dist/commands/form-layout.d.ts.map +1 -1
  26. package/dist/commands/form-layout.js +11 -1
  27. package/dist/commands/form-layout.js.map +1 -1
  28. package/dist/commands/form-obj-meta.d.ts +12 -0
  29. package/dist/commands/form-obj-meta.d.ts.map +1 -0
  30. package/dist/commands/form-obj-meta.js +116 -0
  31. package/dist/commands/form-obj-meta.js.map +1 -0
  32. package/dist/commands/form-validate.d.ts.map +1 -1
  33. package/dist/commands/form-validate.js +167 -35
  34. package/dist/commands/form-validate.js.map +1 -1
  35. package/dist/commands/form.d.ts.map +1 -1
  36. package/dist/commands/form.js +359 -27
  37. package/dist/commands/form.js.map +1 -1
  38. package/dist/commands/menu.d.ts.map +1 -1
  39. package/dist/commands/menu.js +5 -3
  40. package/dist/commands/menu.js.map +1 -1
  41. package/dist/commands/wf-form.d.ts.map +1 -1
  42. package/dist/commands/wf-form.js +215 -13
  43. package/dist/commands/wf-form.js.map +1 -1
  44. package/dist/commands/workflow.d.ts.map +1 -1
  45. package/dist/commands/workflow.js +18 -4
  46. package/dist/commands/workflow.js.map +1 -1
  47. package/dist/core/client.d.ts +2 -1
  48. package/dist/core/client.d.ts.map +1 -1
  49. package/dist/core/client.js +4 -2
  50. package/dist/core/client.js.map +1 -1
  51. package/dist/index.js +2 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/services/actionflow/calendar_mapper.d.ts.map +1 -1
  54. package/dist/services/actionflow/calendar_mapper.js +34 -14
  55. package/dist/services/actionflow/calendar_mapper.js.map +1 -1
  56. package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
  57. package/dist/services/actionflow/components/document_actions.js +113 -4
  58. package/dist/services/actionflow/components/document_actions.js.map +1 -1
  59. package/dist/services/actionflow/components/eb_get_data_by_id.d.ts.map +1 -1
  60. package/dist/services/actionflow/components/eb_get_data_by_id.js +18 -1
  61. package/dist/services/actionflow/components/eb_get_data_by_id.js.map +1 -1
  62. package/dist/services/actionflow/components/index.d.ts.map +1 -1
  63. package/dist/services/actionflow/components/index.js +2 -1
  64. package/dist/services/actionflow/components/index.js.map +1 -1
  65. package/dist/services/actionflow/components/schedule_create.d.ts.map +1 -1
  66. package/dist/services/actionflow/components/schedule_create.js +22 -6
  67. package/dist/services/actionflow/components/schedule_create.js.map +1 -1
  68. package/dist/services/actionflow/components/workflow_actions.d.ts +1 -0
  69. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  70. package/dist/services/actionflow/components/workflow_actions.js +31 -6
  71. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  72. package/dist/services/actionflow/context_preflight.d.ts +5 -0
  73. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  74. package/dist/services/actionflow/context_preflight.js +88 -34
  75. package/dist/services/actionflow/context_preflight.js.map +1 -1
  76. package/dist/services/actionflow/document_source.d.ts +5 -0
  77. package/dist/services/actionflow/document_source.d.ts.map +1 -1
  78. package/dist/services/actionflow/document_source.js +16 -0
  79. package/dist/services/actionflow/document_source.js.map +1 -1
  80. package/dist/services/actionflow/filter_rules.d.ts.map +1 -1
  81. package/dist/services/actionflow/filter_rules.js +9 -8
  82. package/dist/services/actionflow/filter_rules.js.map +1 -1
  83. package/dist/services/actionflow/formula_service.d.ts +2 -1
  84. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  85. package/dist/services/actionflow/formula_service.js +52 -22
  86. package/dist/services/actionflow/formula_service.js.map +1 -1
  87. package/dist/services/actionflow/preflight_service.d.ts +5 -0
  88. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  89. package/dist/services/actionflow/preflight_service.js +128 -3
  90. package/dist/services/actionflow/preflight_service.js.map +1 -1
  91. package/dist/services/actionflow/save_workflow_draft.d.ts +7 -0
  92. package/dist/services/actionflow/save_workflow_draft.d.ts.map +1 -1
  93. package/dist/services/actionflow/save_workflow_draft.js +1 -1
  94. package/dist/services/actionflow/save_workflow_draft.js.map +1 -1
  95. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  96. package/dist/services/actionflow/workflow_compiler.js +51 -13
  97. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  98. package/dist/services/form-formula-linkage.d.ts +4 -0
  99. package/dist/services/form-formula-linkage.d.ts.map +1 -1
  100. package/dist/services/form-formula-linkage.js +3 -1
  101. package/dist/services/form-formula-linkage.js.map +1 -1
  102. package/dist/services/form-layout-io.d.ts +18 -0
  103. package/dist/services/form-layout-io.d.ts.map +1 -0
  104. package/dist/services/form-layout-io.js +89 -0
  105. package/dist/services/form-layout-io.js.map +1 -0
  106. package/dist/services/form-layout-source/artifact.d.ts +8 -0
  107. package/dist/services/form-layout-source/artifact.d.ts.map +1 -0
  108. package/dist/services/form-layout-source/artifact.js +52 -0
  109. package/dist/services/form-layout-source/artifact.js.map +1 -0
  110. package/dist/services/form-layout-source/binding.d.ts +10 -0
  111. package/dist/services/form-layout-source/binding.d.ts.map +1 -0
  112. package/dist/services/form-layout-source/binding.js +43 -0
  113. package/dist/services/form-layout-source/binding.js.map +1 -0
  114. package/dist/services/form-layout-source/compile.d.ts +7 -0
  115. package/dist/services/form-layout-source/compile.d.ts.map +1 -0
  116. package/dist/services/form-layout-source/compile.js +262 -0
  117. package/dist/services/form-layout-source/compile.js.map +1 -0
  118. package/dist/services/form-layout-source/creation.d.ts +18 -0
  119. package/dist/services/form-layout-source/creation.d.ts.map +1 -0
  120. package/dist/services/form-layout-source/creation.js +42 -0
  121. package/dist/services/form-layout-source/creation.js.map +1 -0
  122. package/dist/services/form-layout-source/excel-extractor.d.ts +7 -0
  123. package/dist/services/form-layout-source/excel-extractor.d.ts.map +1 -0
  124. package/dist/services/form-layout-source/excel-extractor.js +342 -0
  125. package/dist/services/form-layout-source/excel-extractor.js.map +1 -0
  126. package/dist/services/form-layout-source/image-border.d.ts +9 -0
  127. package/dist/services/form-layout-source/image-border.d.ts.map +1 -0
  128. package/dist/services/form-layout-source/image-border.js +128 -0
  129. package/dist/services/form-layout-source/image-border.js.map +1 -0
  130. package/dist/services/form-layout-source/image-observation.d.ts +14 -0
  131. package/dist/services/form-layout-source/image-observation.d.ts.map +1 -0
  132. package/dist/services/form-layout-source/image-observation.js +90 -0
  133. package/dist/services/form-layout-source/image-observation.js.map +1 -0
  134. package/dist/services/form-layout-source/image-review.d.ts +32 -0
  135. package/dist/services/form-layout-source/image-review.d.ts.map +1 -0
  136. package/dist/services/form-layout-source/image-review.js +266 -0
  137. package/dist/services/form-layout-source/image-review.js.map +1 -0
  138. package/dist/services/form-layout-source/image-style.d.ts +16 -0
  139. package/dist/services/form-layout-source/image-style.d.ts.map +1 -0
  140. package/dist/services/form-layout-source/image-style.js +539 -0
  141. package/dist/services/form-layout-source/image-style.js.map +1 -0
  142. package/dist/services/form-layout-source/json.d.ts +3 -0
  143. package/dist/services/form-layout-source/json.d.ts.map +1 -0
  144. package/dist/services/form-layout-source/json.js +33 -0
  145. package/dist/services/form-layout-source/json.js.map +1 -0
  146. package/dist/services/form-layout-source/presentation.d.ts +23 -0
  147. package/dist/services/form-layout-source/presentation.d.ts.map +1 -0
  148. package/dist/services/form-layout-source/presentation.js +174 -0
  149. package/dist/services/form-layout-source/presentation.js.map +1 -0
  150. package/dist/services/form-layout-source/preview.d.ts +4 -0
  151. package/dist/services/form-layout-source/preview.d.ts.map +1 -0
  152. package/dist/services/form-layout-source/preview.js +49 -0
  153. package/dist/services/form-layout-source/preview.js.map +1 -0
  154. package/dist/services/form-layout-source/schema.d.ts +20 -0
  155. package/dist/services/form-layout-source/schema.d.ts.map +1 -0
  156. package/dist/services/form-layout-source/schema.js +149 -0
  157. package/dist/services/form-layout-source/schema.js.map +1 -0
  158. package/dist/services/form-layout-source/source-grid.d.ts +8 -0
  159. package/dist/services/form-layout-source/source-grid.d.ts.map +1 -0
  160. package/dist/services/form-layout-source/source-grid.js +61 -0
  161. package/dist/services/form-layout-source/source-grid.js.map +1 -0
  162. package/dist/services/form-layout-source/types.d.ts +242 -0
  163. package/dist/services/form-layout-source/types.d.ts.map +1 -0
  164. package/dist/services/form-layout-source/types.js +2 -0
  165. package/dist/services/form-layout-source/types.js.map +1 -0
  166. package/dist/services/form-layout-source/verify.d.ts +14 -0
  167. package/dist/services/form-layout-source/verify.d.ts.map +1 -0
  168. package/dist/services/form-layout-source/verify.js +226 -0
  169. package/dist/services/form-layout-source/verify.js.map +1 -0
  170. package/dist/services/form-linkage-condition.d.ts +15 -0
  171. package/dist/services/form-linkage-condition.d.ts.map +1 -1
  172. package/dist/services/form-linkage-condition.js +19 -10
  173. package/dist/services/form-linkage-condition.js.map +1 -1
  174. package/dist/services/form-obj-meta.d.ts +72 -0
  175. package/dist/services/form-obj-meta.d.ts.map +1 -0
  176. package/dist/services/form-obj-meta.js +103 -0
  177. package/dist/services/form-obj-meta.js.map +1 -0
  178. package/dist/services/form-sub-detail.d.ts +25 -0
  179. package/dist/services/form-sub-detail.d.ts.map +1 -1
  180. package/dist/services/form-sub-detail.js +64 -0
  181. package/dist/services/form-sub-detail.js.map +1 -1
  182. package/dist/services/validate-help.d.ts +25 -0
  183. package/dist/services/validate-help.d.ts.map +1 -0
  184. package/dist/services/validate-help.js +29 -0
  185. package/dist/services/validate-help.js.map +1 -0
  186. package/dist/services/workflow-operator.d.ts +12 -5
  187. package/dist/services/workflow-operator.d.ts.map +1 -1
  188. package/dist/services/workflow-operator.js +41 -16
  189. package/dist/services/workflow-operator.js.map +1 -1
  190. package/package.json +3 -1
  191. package/skill-docs/SKILL.md +38 -165
  192. package/skill-docs/_catalog.md +4 -1
  193. package/skill-docs/actionflows/references/components/document/DocumentSave.md +17 -17
  194. package/skill-docs/actionflows/references/components/workflow/ApproveCompletelyDelete.md +29 -0
  195. package/skill-docs/actionflows/references/components/workflow/ApproveDelete.md +1 -1
  196. package/skill-docs/assets/schemas/image-style-observation.schema.json +1355 -0
  197. package/skill-docs/references/coding/guide-page-code.md +2 -0
  198. package/skill-docs/references/coding/ref-compile-rules.md +2 -0
  199. package/skill-docs/references/common/capability-boundaries.md +15 -0
  200. package/skill-docs/references/common/guide-install.md +44 -0
  201. package/skill-docs/references/common/guide-plan-template.md +167 -164
  202. package/skill-docs/references/common/map.md +9 -0
  203. package/skill-docs/references/common/ref-cli-commands.md +650 -635
  204. package/skill-docs/references/form/guide-create-form.md +2 -0
  205. package/skill-docs/references/form/guide-field-linkage.md +185 -58
  206. package/skill-docs/references/form/guide-form-formula-functions.md +354 -343
  207. package/skill-docs/references/form/guide-form-layout-planning.md +6 -0
  208. package/skill-docs/references/form/guide-form-layout-source.md +366 -0
  209. package/skill-docs/references/form/guide-form-linkage.md +56 -66
  210. package/skill-docs/references/form/guide-form-view.md +1 -1
  211. package/skill-docs/references/form/guide-formula-linkage.md +44 -1
  212. 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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAS,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEtE,kCAAkC;AAClC,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC9E,IAAI,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;QAAC,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAAC,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;SAChM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,YAAY,CAAC,CAAC;YAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,CAAC,EAAE,CAAC;YAC/D,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAAC,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;gBAAE,MAAM;YACnE,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG;gBAAE,SAAS;YAC7D,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAAC,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtE,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAAC,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;gBAAC,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAC,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAC,MAAM;YAAC,CAAC;YAChM,CAAC,IAAI,IAAI,CAAC;QACZ,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;QAC3G,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YACpC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpF,MAAM,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACzC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;gBAAC,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAC,MAAM;YAAC,CAAC;YACtH,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;gBAAC,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;gBAAC,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;gBAAC,MAAM;YAAC,CAAC;YACrL,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;gBAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;gBAAC,MAAM;YAAC,CAAC;YAClL,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,cAAc,CAAC,CAAC;IACvF,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;AACpD,CAAC;AACD,MAAM,UAAU,uBAAuB,CAAC,IAAY,EAAE,MAAoB;IACxE,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,CAAC;QAAE,OAAO;IACvD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;AACvG,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACtF,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACxF,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;IACjD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC;IACvG,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,EAAE,uBAAuB,CAAC,CAAC;IACpD,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AACpE,CAAC;AACD,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,WAAyB;IAC1E,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,WAAW,CAAC,UAAU,KAAK,OAAO,IAAI,WAAW,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAC/G,MAAM,MAAM,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAAC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3G,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAAC,OAAO,MAAM,CAAC;AAC9J,CAAC"}
@@ -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"}