niceeval 0.13.1 → 0.13.2

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 (548) hide show
  1. package/INDEX.md +25 -2
  2. package/README.md +9 -10
  3. package/README.zh.md +9 -10
  4. package/dist/agents/ai-sdk.cjs.map +1 -1
  5. package/dist/agents/ai-sdk.d.cts +1 -1
  6. package/dist/agents/ai-sdk.d.mts +1 -1
  7. package/dist/agents/ai-sdk.d.ts +1 -1
  8. package/dist/agents/bub-install-spec.cjs +19 -5
  9. package/dist/agents/bub-install-spec.cjs.map +1 -1
  10. package/dist/agents/bub-install-spec.d.cts +9 -2
  11. package/dist/agents/bub-install-spec.d.mts +9 -2
  12. package/dist/agents/bub-install-spec.d.ts +9 -2
  13. package/dist/agents/bub-install-spec.js +14 -12
  14. package/dist/agents/bub.cjs +10 -6
  15. package/dist/agents/bub.cjs.map +1 -1
  16. package/dist/agents/bub.d.cts +2 -2
  17. package/dist/agents/bub.d.mts +2 -2
  18. package/dist/agents/bub.d.ts +2 -2
  19. package/dist/agents/claude-code.cjs.map +1 -1
  20. package/dist/agents/claude-code.d.cts +2 -2
  21. package/dist/agents/claude-code.d.mts +2 -2
  22. package/dist/agents/claude-code.d.ts +2 -2
  23. package/dist/agents/codex.cjs +4 -4
  24. package/dist/agents/codex.cjs.map +1 -1
  25. package/dist/agents/codex.d.cts +3 -3
  26. package/dist/agents/codex.d.mts +3 -3
  27. package/dist/agents/codex.d.ts +3 -3
  28. package/dist/agents/coding-cli-versions.cjs +10 -1
  29. package/dist/agents/coding-cli-versions.cjs.map +1 -1
  30. package/dist/agents/coding-cli-versions.d.cts +8 -3
  31. package/dist/agents/coding-cli-versions.d.mts +8 -3
  32. package/dist/agents/coding-cli-versions.d.ts +8 -3
  33. package/dist/agents/coding-cli-versions.js +18 -12
  34. package/dist/agents/deepseek-harness.cjs +151 -0
  35. package/dist/agents/deepseek-harness.cjs.map +1 -0
  36. package/dist/agents/deepseek-harness.d.cts +14 -0
  37. package/dist/agents/deepseek-harness.d.mts +14 -0
  38. package/dist/agents/deepseek-harness.d.ts +14 -0
  39. package/dist/agents/deepseek-harness.js +7 -0
  40. package/dist/agents/deepseek-harness.js.map +1 -0
  41. package/dist/agents/exact-npm-plugins.cjs +28 -0
  42. package/dist/agents/exact-npm-plugins.cjs.map +1 -0
  43. package/dist/agents/exact-npm-plugins.d.cts +10 -0
  44. package/dist/agents/exact-npm-plugins.d.mts +10 -0
  45. package/dist/agents/exact-npm-plugins.d.ts +10 -0
  46. package/dist/agents/exact-npm-plugins.js +8 -0
  47. package/dist/agents/exact-npm-plugins.js.map +1 -0
  48. package/dist/agents/index.cjs +5 -1
  49. package/dist/agents/index.cjs.map +1 -1
  50. package/dist/agents/index.d.cts +4 -0
  51. package/dist/agents/index.d.mts +4 -0
  52. package/dist/agents/index.d.ts +4 -0
  53. package/dist/agents/index.js +54 -50
  54. package/dist/agents/index.mjs +54 -50
  55. package/dist/agents/omp.cjs +170 -0
  56. package/dist/agents/omp.cjs.map +1 -0
  57. package/dist/agents/omp.d.cts +14 -0
  58. package/dist/agents/omp.d.mts +14 -0
  59. package/dist/agents/omp.d.ts +14 -0
  60. package/dist/agents/omp.js +7 -0
  61. package/dist/agents/omp.js.map +1 -0
  62. package/dist/agents/openclaw.cjs +51 -2
  63. package/dist/agents/openclaw.cjs.map +1 -1
  64. package/dist/agents/openclaw.d.cts +2 -0
  65. package/dist/agents/openclaw.d.mts +2 -0
  66. package/dist/agents/openclaw.d.ts +2 -0
  67. package/dist/agents/types.cjs.map +1 -1
  68. package/dist/agents/types.d.cts +4 -4
  69. package/dist/agents/types.d.mts +4 -4
  70. package/dist/agents/types.d.ts +4 -4
  71. package/dist/agents/ui-message-stream.cjs +24 -7
  72. package/dist/agents/ui-message-stream.cjs.map +1 -1
  73. package/dist/analysis/api.cjs +28 -2
  74. package/dist/analysis/api.cjs.map +1 -1
  75. package/dist/analysis/api.d.cts +22 -1
  76. package/dist/analysis/api.d.mts +22 -1
  77. package/dist/analysis/api.d.ts +22 -1
  78. package/dist/analysis/api.js +8 -6
  79. package/dist/analysis/bindings.cjs +11 -18
  80. package/dist/analysis/bindings.cjs.map +1 -1
  81. package/dist/analysis/bindings.d.cts +177 -49
  82. package/dist/analysis/bindings.d.mts +177 -49
  83. package/dist/analysis/bindings.d.ts +177 -49
  84. package/dist/analysis/contracts.cjs +1 -0
  85. package/dist/analysis/contracts.cjs.map +1 -1
  86. package/dist/analysis/contracts.d.cts +43 -3
  87. package/dist/analysis/contracts.d.mts +43 -3
  88. package/dist/analysis/contracts.d.ts +43 -3
  89. package/dist/analysis/cost-projection.cjs +2 -1
  90. package/dist/analysis/cost-projection.cjs.map +1 -1
  91. package/dist/analysis/cost-projection.d.cts +1 -1
  92. package/dist/analysis/cost-projection.d.mts +1 -1
  93. package/dist/analysis/cost-projection.d.ts +1 -1
  94. package/dist/analysis/cost.cjs +13 -3
  95. package/dist/analysis/cost.cjs.map +1 -1
  96. package/dist/analysis/cost.d.cts +10 -3
  97. package/dist/analysis/cost.d.mts +10 -3
  98. package/dist/analysis/cost.d.ts +10 -3
  99. package/dist/analysis/experiment-groups.cjs +96 -0
  100. package/dist/analysis/experiment-groups.cjs.map +1 -0
  101. package/dist/analysis/experiment-groups.d.cts +9 -0
  102. package/dist/analysis/experiment-groups.d.mts +9 -0
  103. package/dist/analysis/experiment-groups.d.ts +9 -0
  104. package/dist/analysis/experiment-groups.js +10 -0
  105. package/dist/analysis/experiment-groups.js.map +1 -0
  106. package/dist/analysis/index.cjs +4 -1
  107. package/dist/analysis/index.cjs.map +1 -1
  108. package/dist/analysis/index.d.cts +4 -2
  109. package/dist/analysis/index.d.mts +4 -2
  110. package/dist/analysis/index.d.ts +4 -2
  111. package/dist/analysis/index.js +40 -36
  112. package/dist/analysis/index.mjs +40 -36
  113. package/dist/assertions/limits.cjs +4 -0
  114. package/dist/assertions/limits.cjs.map +1 -1
  115. package/dist/assertions/limits.d.cts +4 -0
  116. package/dist/assertions/limits.d.mts +4 -0
  117. package/dist/assertions/limits.d.ts +4 -0
  118. package/dist/assertions/match.cjs +63 -25
  119. package/dist/assertions/match.cjs.map +1 -1
  120. package/dist/assertions/match.d.cts +7 -0
  121. package/dist/assertions/match.d.mts +7 -0
  122. package/dist/assertions/match.d.ts +7 -0
  123. package/dist/assertions/record/attachment.cjs +32 -4
  124. package/dist/assertions/record/attachment.cjs.map +1 -1
  125. package/dist/assertions/record/diff.cjs +10 -4
  126. package/dist/assertions/record/diff.cjs.map +1 -1
  127. package/dist/assertions/record/producer.cjs +101 -4
  128. package/dist/assertions/record/producer.cjs.map +1 -1
  129. package/dist/assertions/record/producer.d.cts +4 -1
  130. package/dist/assertions/record/producer.d.mts +4 -1
  131. package/dist/assertions/record/producer.d.ts +4 -1
  132. package/dist/assertions/runtime.cjs +45 -5
  133. package/dist/assertions/runtime.cjs.map +1 -1
  134. package/dist/cli/record.cjs +113 -8
  135. package/dist/cli/record.cjs.map +1 -1
  136. package/dist/cli/record.d.cts +20 -1
  137. package/dist/cli/record.d.mts +20 -1
  138. package/dist/cli/record.d.ts +20 -1
  139. package/dist/cli/record.js +4 -2
  140. package/dist/cli.cjs +386 -31
  141. package/dist/cli.cjs.map +1 -1
  142. package/dist/cli.d.cts +10 -2
  143. package/dist/cli.d.mts +10 -2
  144. package/dist/cli.d.ts +10 -2
  145. package/dist/context/send-retry.cjs +4 -4
  146. package/dist/context/send-retry.cjs.map +1 -1
  147. package/dist/coordination/host/runtime.cjs +8 -30
  148. package/dist/coordination/host/runtime.cjs.map +1 -1
  149. package/dist/coordination/host/runtime.d.cts +3 -3
  150. package/dist/coordination/host/runtime.d.mts +3 -3
  151. package/dist/coordination/host/runtime.d.ts +3 -3
  152. package/dist/coordination/host/types.cjs.map +1 -1
  153. package/dist/coordination/host/types.d.cts +0 -5
  154. package/dist/coordination/host/types.d.mts +0 -5
  155. package/dist/coordination/host/types.d.ts +0 -5
  156. package/dist/coordination/platform/node.cjs +90 -9
  157. package/dist/coordination/platform/node.cjs.map +1 -1
  158. package/dist/define.cjs +25 -1
  159. package/dist/define.cjs.map +1 -1
  160. package/dist/experiment/host/index.cjs +1 -0
  161. package/dist/experiment/host/index.cjs.map +1 -1
  162. package/dist/i18n/en.cjs +26 -8
  163. package/dist/i18n/en.cjs.map +1 -1
  164. package/dist/i18n/en.d.cts +19 -6
  165. package/dist/i18n/en.d.mts +19 -6
  166. package/dist/i18n/en.d.ts +19 -6
  167. package/dist/index.cjs.map +1 -1
  168. package/dist/index.d.cts +1 -1
  169. package/dist/index.d.mts +1 -1
  170. package/dist/index.d.ts +1 -1
  171. package/dist/o11y/parsers/hermes.cjs +1 -1
  172. package/dist/o11y/parsers/hermes.cjs.map +1 -1
  173. package/dist/o11y/prices.json +1 -1
  174. package/dist/o11y/record/families.cjs +12 -3
  175. package/dist/o11y/record/families.cjs.map +1 -1
  176. package/dist/o11y/record/families.d.cts +8 -8
  177. package/dist/o11y/record/families.d.mts +8 -8
  178. package/dist/o11y/record/families.d.ts +8 -8
  179. package/dist/o11y/record/family-projectors.d.cts +66 -18
  180. package/dist/o11y/record/family-projectors.d.mts +66 -18
  181. package/dist/o11y/record/family-projectors.d.ts +66 -18
  182. package/dist/o11y/record/family-writers.d.cts +11 -3
  183. package/dist/o11y/record/family-writers.d.mts +11 -3
  184. package/dist/o11y/record/family-writers.d.ts +11 -3
  185. package/dist/o11y/record/runner-producer.cjs +14 -4
  186. package/dist/o11y/record/runner-producer.cjs.map +1 -1
  187. package/dist/record/codec/core.d.cts +2 -2
  188. package/dist/record/codec/core.d.mts +2 -2
  189. package/dist/record/codec/core.d.ts +2 -2
  190. package/dist/record/family/catalog.d.cts +44 -12
  191. package/dist/record/family/catalog.d.mts +44 -12
  192. package/dist/record/family/catalog.d.ts +44 -12
  193. package/dist/record/family/index.js +128 -124
  194. package/dist/record/family/observability-v1.cjs +35 -0
  195. package/dist/record/family/observability-v1.cjs.map +1 -0
  196. package/dist/record/family/observability-v1.d.cts +3 -0
  197. package/dist/record/family/observability-v1.d.mts +3 -0
  198. package/dist/record/family/observability-v1.d.ts +3 -0
  199. package/dist/record/family/observability-v1.js +6 -0
  200. package/dist/record/family/observability-v1.js.map +1 -0
  201. package/dist/record/family/observability.cjs +58 -9
  202. package/dist/record/family/observability.cjs.map +1 -1
  203. package/dist/record/family/observability.d.cts +1014 -15
  204. package/dist/record/family/observability.d.mts +1014 -15
  205. package/dist/record/family/observability.d.ts +1014 -15
  206. package/dist/record/family/observability.js +22 -18
  207. package/dist/record/host/runtime.cjs +600 -31
  208. package/dist/record/host/runtime.cjs.map +1 -1
  209. package/dist/record/host/types.cjs.map +1 -1
  210. package/dist/record/host/types.d.cts +33 -9
  211. package/dist/record/host/types.d.mts +33 -9
  212. package/dist/record/host/types.d.ts +33 -9
  213. package/dist/record/maintenance/runtime.cjs +1 -2
  214. package/dist/record/maintenance/runtime.cjs.map +1 -1
  215. package/dist/record/model/core.cjs.map +1 -1
  216. package/dist/record/model/core.d.cts +1 -1
  217. package/dist/record/model/core.d.mts +1 -1
  218. package/dist/record/model/core.d.ts +1 -1
  219. package/dist/record/model/definition.d.cts +6 -6
  220. package/dist/record/model/definition.d.mts +6 -6
  221. package/dist/record/model/definition.d.ts +6 -6
  222. package/dist/record/model/identifiers.cjs +1 -1
  223. package/dist/record/model/identifiers.cjs.map +1 -1
  224. package/dist/record/model/identifiers.d.cts +1 -1
  225. package/dist/record/model/identifiers.d.mts +1 -1
  226. package/dist/record/model/identifiers.d.ts +1 -1
  227. package/dist/record/platform/node.cjs +159 -23
  228. package/dist/record/platform/node.cjs.map +1 -1
  229. package/dist/record/platform/services.cjs.map +1 -1
  230. package/dist/record/platform/services.d.cts +15 -2
  231. package/dist/record/platform/services.d.mts +15 -2
  232. package/dist/record/platform/services.d.ts +15 -2
  233. package/dist/record/reader/errors.cjs +37 -1
  234. package/dist/record/reader/errors.cjs.map +1 -1
  235. package/dist/record/reader/errors.d.cts +49 -1
  236. package/dist/record/reader/errors.d.mts +49 -1
  237. package/dist/record/reader/errors.d.ts +49 -1
  238. package/dist/record/reader/errors.js +22 -12
  239. package/dist/record/reader/format.cjs +76 -17
  240. package/dist/record/reader/format.cjs.map +1 -1
  241. package/dist/record/reader/format.d.cts +11 -4
  242. package/dist/record/reader/format.d.mts +11 -4
  243. package/dist/record/reader/format.d.ts +11 -4
  244. package/dist/record/reader/format.js +2 -0
  245. package/dist/record/reader/index.js +32 -18
  246. package/dist/record/reader/runtime.cjs +64 -0
  247. package/dist/record/reader/runtime.cjs.map +1 -1
  248. package/dist/record/reader/runtime.d.cts +15 -0
  249. package/dist/record/reader/runtime.d.mts +15 -0
  250. package/dist/record/reader/runtime.d.ts +15 -0
  251. package/dist/record/reader/runtime.js +2 -0
  252. package/dist/report/assets/styles.css +53 -29
  253. package/dist/report/built-in/analysis-values.cjs +21 -13
  254. package/dist/report/built-in/analysis-values.cjs.map +1 -1
  255. package/dist/report/built-in/analysis-values.d.cts +11 -22
  256. package/dist/report/built-in/analysis-values.d.mts +11 -22
  257. package/dist/report/built-in/analysis-values.d.ts +11 -22
  258. package/dist/report/built-in/analysis-values.js +4 -6
  259. package/dist/report/built-in/index.cjs +1 -3
  260. package/dist/report/built-in/index.cjs.map +1 -1
  261. package/dist/report/built-in/index.d.cts +1 -1
  262. package/dist/report/built-in/index.d.mts +1 -1
  263. package/dist/report/built-in/index.d.ts +1 -1
  264. package/dist/report/built-in/index.js +4 -8
  265. package/dist/report/built-in/index.mjs +4 -8
  266. package/dist/report/built-in/machine.cjs +0 -2
  267. package/dist/report/built-in/machine.cjs.map +1 -1
  268. package/dist/report/built-in/machine.d.cts +0 -2
  269. package/dist/report/built-in/machine.d.mts +0 -2
  270. package/dist/report/built-in/machine.d.ts +0 -2
  271. package/dist/report/built-in/result-components.cjs +49 -51
  272. package/dist/report/built-in/result-components.cjs.map +1 -1
  273. package/dist/report/built-in/result-components.d.cts +16 -17
  274. package/dist/report/built-in/result-components.d.mts +16 -17
  275. package/dist/report/built-in/result-components.d.ts +16 -17
  276. package/dist/report/built-in/result-components.js +0 -4
  277. package/dist/report/built-in/run-membership-overview.cjs +126 -17
  278. package/dist/report/built-in/run-membership-overview.cjs.map +1 -1
  279. package/dist/report/built-in/run-membership-overview.d.cts +14 -0
  280. package/dist/report/built-in/run-membership-overview.d.mts +14 -0
  281. package/dist/report/built-in/run-membership-overview.d.ts +14 -0
  282. package/dist/report/built-in/run-membership-overview.js +4 -2
  283. package/dist/report/built-in/standard.cjs +80 -45
  284. package/dist/report/built-in/standard.cjs.map +1 -1
  285. package/dist/report/built-in/standard.d.cts +19 -41
  286. package/dist/report/built-in/standard.d.mts +19 -41
  287. package/dist/report/built-in/standard.d.ts +19 -41
  288. package/dist/report/built-in/standard.js +6 -6
  289. package/dist/report/components/attempt-detail/compute.cjs +78 -2
  290. package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
  291. package/dist/report/components/attempt-detail/compute.d.cts +1 -1
  292. package/dist/report/components/attempt-detail/compute.d.mts +1 -1
  293. package/dist/report/components/attempt-detail/compute.d.ts +1 -1
  294. package/dist/report/components/attempt-detail/content.cjs +1 -1
  295. package/dist/report/components/attempt-detail/content.cjs.map +1 -1
  296. package/dist/report/components/entity-lists/compute.cjs +42 -5
  297. package/dist/report/components/entity-lists/compute.cjs.map +1 -1
  298. package/dist/report/components/entity-lists/compute.d.cts +10 -8
  299. package/dist/report/components/entity-lists/compute.d.mts +10 -8
  300. package/dist/report/components/entity-lists/compute.d.ts +10 -8
  301. package/dist/report/components/entity-lists/content.cjs +31 -6
  302. package/dist/report/components/entity-lists/content.cjs.map +1 -1
  303. package/dist/report/components/entity-lists/index.cjs +9 -4
  304. package/dist/report/components/entity-lists/index.cjs.map +1 -1
  305. package/dist/report/components/entity-lists/index.d.cts +4 -7
  306. package/dist/report/components/entity-lists/index.d.mts +4 -7
  307. package/dist/report/components/entity-lists/index.d.ts +4 -7
  308. package/dist/report/components/summaries/compute.cjs +8 -1
  309. package/dist/report/components/summaries/compute.cjs.map +1 -1
  310. package/dist/report/components/summaries/compute.d.cts +9 -1
  311. package/dist/report/components/summaries/compute.d.mts +9 -1
  312. package/dist/report/components/summaries/compute.d.ts +9 -1
  313. package/dist/report/components/summaries/index.cjs +48 -4
  314. package/dist/report/components/summaries/index.cjs.map +1 -1
  315. package/dist/report/components/summaries/index.d.cts +7 -4
  316. package/dist/report/components/summaries/index.d.mts +7 -4
  317. package/dist/report/components/summaries/index.d.ts +7 -4
  318. package/dist/report/definition/cell.cjs +3 -0
  319. package/dist/report/definition/cell.cjs.map +1 -1
  320. package/dist/report/definition/cell.d.cts +2 -0
  321. package/dist/report/definition/cell.d.mts +2 -0
  322. package/dist/report/definition/cell.d.ts +2 -0
  323. package/dist/report/definition/primitives/chart.cjs +8 -5
  324. package/dist/report/definition/primitives/chart.cjs.map +1 -1
  325. package/dist/report/definition/primitives/points-dataset.cjs +1 -0
  326. package/dist/report/definition/primitives/points-dataset.cjs.map +1 -1
  327. package/dist/report/definition/primitives.cjs +15 -2
  328. package/dist/report/definition/primitives.cjs.map +1 -1
  329. package/dist/report/definition/report.cjs +27 -3
  330. package/dist/report/definition/report.cjs.map +1 -1
  331. package/dist/report/definition/report.d.cts +8 -0
  332. package/dist/report/definition/report.d.mts +8 -0
  333. package/dist/report/definition/report.d.ts +8 -0
  334. package/dist/report/execution/machine.cjs +30 -14
  335. package/dist/report/execution/machine.cjs.map +1 -1
  336. package/dist/report/execution/machine.d.cts +20 -10
  337. package/dist/report/execution/machine.d.mts +20 -10
  338. package/dist/report/execution/machine.d.ts +20 -10
  339. package/dist/report/execution/machine.js +6 -6
  340. package/dist/report/host/execute.cjs +25 -16
  341. package/dist/report/host/execute.cjs.map +1 -1
  342. package/dist/report/host/execute.d.cts +4 -0
  343. package/dist/report/host/execute.d.mts +4 -0
  344. package/dist/report/host/execute.d.ts +4 -0
  345. package/dist/report/host/from-record.cjs +22 -5
  346. package/dist/report/host/from-record.cjs.map +1 -1
  347. package/dist/report/host/machine.cjs +53 -11
  348. package/dist/report/host/machine.cjs.map +1 -1
  349. package/dist/report/host/site-runtime.cjs +9 -8
  350. package/dist/report/host/site-runtime.cjs.map +1 -1
  351. package/dist/report/host/site-runtime.d.cts +1 -1
  352. package/dist/report/host/site-runtime.d.mts +1 -1
  353. package/dist/report/host/site-runtime.d.ts +1 -1
  354. package/dist/report/host/static.cjs +56 -9
  355. package/dist/report/host/static.cjs.map +1 -1
  356. package/dist/report/index.cjs.map +1 -1
  357. package/dist/report/index.d.cts +1 -1
  358. package/dist/report/index.d.mts +1 -1
  359. package/dist/report/index.d.ts +1 -1
  360. package/dist/report/model/dataset.cjs +7 -2
  361. package/dist/report/model/dataset.cjs.map +1 -1
  362. package/dist/report/model/locale.cjs +2 -0
  363. package/dist/report/model/locale.cjs.map +1 -1
  364. package/dist/report/model/locale.d.cts +1 -0
  365. package/dist/report/model/locale.d.mts +1 -0
  366. package/dist/report/model/locale.d.ts +1 -0
  367. package/dist/report/model/metrics.cjs +3 -1
  368. package/dist/report/model/metrics.cjs.map +1 -1
  369. package/dist/report/model/pricing.cjs +16 -11
  370. package/dist/report/model/pricing.cjs.map +1 -1
  371. package/dist/report/react/styles.css +53 -29
  372. package/dist/runner/adoption.cjs +1 -0
  373. package/dist/runner/adoption.cjs.map +1 -1
  374. package/dist/runner/attempt.cjs +44 -5
  375. package/dist/runner/attempt.cjs.map +1 -1
  376. package/dist/runner/attempt.d.cts +13 -1
  377. package/dist/runner/attempt.d.mts +13 -1
  378. package/dist/runner/attempt.d.ts +13 -1
  379. package/dist/runner/config-identity.cjs +10 -2
  380. package/dist/runner/config-identity.cjs.map +1 -1
  381. package/dist/runner/config-identity.d.cts +4 -2
  382. package/dist/runner/config-identity.d.mts +4 -2
  383. package/dist/runner/config-identity.d.ts +4 -2
  384. package/dist/runner/feedback/human.cjs +298 -59
  385. package/dist/runner/feedback/human.cjs.map +1 -1
  386. package/dist/runner/feedback/json.cjs +14 -6
  387. package/dist/runner/feedback/json.cjs.map +1 -1
  388. package/dist/runner/feedback/json.d.cts +3 -2
  389. package/dist/runner/feedback/json.d.mts +3 -2
  390. package/dist/runner/feedback/json.d.ts +3 -2
  391. package/dist/runner/feedback/reducer.cjs +2 -0
  392. package/dist/runner/feedback/reducer.cjs.map +1 -1
  393. package/dist/runner/judge-config.cjs +1 -1
  394. package/dist/runner/judge-config.cjs.map +1 -1
  395. package/dist/runner/ledger.cjs +124 -12
  396. package/dist/runner/ledger.cjs.map +1 -1
  397. package/dist/runner/project-current.cjs +13 -5
  398. package/dist/runner/project-current.cjs.map +1 -1
  399. package/dist/runner/run.cjs +564 -256
  400. package/dist/runner/run.cjs.map +1 -1
  401. package/dist/runner/sandbox-pool.cjs +161 -30
  402. package/dist/runner/sandbox-pool.cjs.map +1 -1
  403. package/dist/runner/sandbox-pool.d.cts +34 -2
  404. package/dist/runner/sandbox-pool.d.mts +34 -2
  405. package/dist/runner/sandbox-pool.d.ts +34 -2
  406. package/dist/runner/shared-state-lease.cjs +803 -0
  407. package/dist/runner/shared-state-lease.cjs.map +1 -0
  408. package/dist/runner/shared-state-lease.d.cts +121 -0
  409. package/dist/runner/shared-state-lease.d.mts +121 -0
  410. package/dist/runner/shared-state-lease.d.ts +121 -0
  411. package/dist/runner/shared-state-lease.js +24 -0
  412. package/dist/runner/shared-state-lease.js.map +1 -0
  413. package/dist/runner/teardown-registry.cjs +97 -34
  414. package/dist/runner/teardown-registry.cjs.map +1 -1
  415. package/dist/runner/teardown-registry.d.cts +27 -1
  416. package/dist/runner/teardown-registry.d.mts +27 -1
  417. package/dist/runner/teardown-registry.d.ts +27 -1
  418. package/dist/runner/teardown-registry.js +20 -16
  419. package/dist/runner/types.cjs.map +1 -1
  420. package/dist/runner/types.d.cts +31 -5
  421. package/dist/runner/types.d.mts +31 -5
  422. package/dist/runner/types.d.ts +31 -5
  423. package/dist/sample/analysis.cjs +249 -459
  424. package/dist/sample/analysis.cjs.map +1 -1
  425. package/dist/sample/capability.cjs +138 -7
  426. package/dist/sample/capability.cjs.map +1 -1
  427. package/dist/sample/capability.d.cts +3 -1
  428. package/dist/sample/capability.d.mts +3 -1
  429. package/dist/sample/capability.d.ts +3 -1
  430. package/dist/sample/capability.js +8 -6
  431. package/dist/sandbox/docker-agent-image.cjs +5 -1
  432. package/dist/sandbox/docker-agent-image.cjs.map +1 -1
  433. package/dist/sandbox/docker-agent-image.d.cts +2 -0
  434. package/dist/sandbox/docker-agent-image.d.mts +2 -0
  435. package/dist/sandbox/docker-agent-image.d.ts +2 -0
  436. package/dist/sandbox/docker-agent-image.js +14 -10
  437. package/dist/sandbox/docker-profile/schema.cjs +283 -534
  438. package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
  439. package/dist/sandbox/docker-profile/schema.d.cts +10 -27
  440. package/dist/sandbox/docker-profile/schema.d.mts +10 -27
  441. package/dist/sandbox/docker-profile/schema.d.ts +10 -27
  442. package/dist/sandbox/e2b-agent-template.cjs +5 -2
  443. package/dist/sandbox/e2b-agent-template.cjs.map +1 -1
  444. package/dist/sandbox/index.cjs +4 -2
  445. package/dist/sandbox/index.cjs.map +1 -1
  446. package/dist/sandbox/index.d.cts +1 -1
  447. package/dist/sandbox/index.d.mts +1 -1
  448. package/dist/sandbox/index.d.ts +1 -1
  449. package/dist/sandbox/index.js +120 -116
  450. package/dist/sandbox/index.mjs +120 -116
  451. package/dist/sandbox/keep-registry.cjs +28 -66
  452. package/dist/sandbox/keep-registry.cjs.map +1 -1
  453. package/dist/sandbox/types.cjs.map +1 -1
  454. package/dist/sandbox/types.d.cts +1 -1
  455. package/dist/sandbox/types.d.mts +1 -1
  456. package/dist/sandbox/types.d.ts +1 -1
  457. package/dist/shared/aggregate.cjs +16 -6
  458. package/dist/shared/aggregate.cjs.map +1 -1
  459. package/dist/shared/aggregate.d.cts +12 -4
  460. package/dist/shared/aggregate.d.mts +12 -4
  461. package/dist/shared/aggregate.d.ts +12 -4
  462. package/dist/shared/turn-label.cjs +20 -2
  463. package/dist/shared/turn-label.cjs.map +1 -1
  464. package/dist/shared/turn-label.d.cts +2 -0
  465. package/dist/shared/turn-label.d.mts +2 -0
  466. package/dist/shared/turn-label.d.ts +2 -0
  467. package/dist/shared/turn-label.js +4 -2
  468. package/dist/vendor/remark/remark-gfm.cjs +7 -7
  469. package/dist/vendor/remark/remark-gfm.cjs.map +1 -1
  470. package/dist/vendor/remark/remark-parse.cjs +12 -12
  471. package/dist/vendor/remark/remark-parse.cjs.map +1 -1
  472. package/dist/vendor/remark/remark.cjs +13 -13
  473. package/dist/vendor/remark/remark.cjs.map +1 -1
  474. package/dist/view/server.cjs +6 -0
  475. package/dist/view/server.cjs.map +1 -1
  476. package/docs-site/images/hitl-handshake-zh.svg +3 -3
  477. package/docs-site/zh/examples/ai-agent-application.mdx +1 -1
  478. package/docs-site/zh/examples/coding-agent-extensions.mdx +1 -1
  479. package/docs-site/zh/examples/integrations/ai-sdk-v7.mdx +4 -3
  480. package/docs-site/zh/examples/integrations/claude-sdk.mdx +3 -3
  481. package/docs-site/zh/examples/integrations/codex-sdk.mdx +5 -5
  482. package/docs-site/zh/examples/integrations/langgraph.mdx +4 -4
  483. package/docs-site/zh/examples/integrations/pi-sdk.mdx +5 -5
  484. package/docs-site/zh/explanation/adapter.mdx +5 -5
  485. package/docs-site/zh/explanation/assert.mdx +7 -7
  486. package/docs-site/zh/explanation/drive.mdx +4 -2
  487. package/docs-site/zh/explanation/evals.mdx +10 -8
  488. package/docs-site/zh/explanation/experiment.mdx +2 -2
  489. package/docs-site/zh/explanation/hitl.mdx +9 -9
  490. package/docs-site/zh/explanation/judge.mdx +5 -5
  491. package/docs-site/zh/explanation/overview.mdx +3 -3
  492. package/docs-site/zh/explanation/runner.mdx +1 -1
  493. package/docs-site/zh/index.mdx +3 -3
  494. package/docs-site/zh/reference/builtin-agents.mdx +13 -13
  495. package/docs-site/zh/reference/capabilities.mdx +1 -1
  496. package/docs-site/zh/reference/cli.mdx +18 -12
  497. package/docs-site/zh/reference/define-agent.mdx +130 -5
  498. package/docs-site/zh/reference/define-config.mdx +2 -2
  499. package/docs-site/zh/reference/define-eval.mdx +4 -4
  500. package/docs-site/zh/reference/events.mdx +11 -11
  501. package/docs-site/zh/reference/official-adapters.mdx +6 -6
  502. package/docs-site/zh/reference/results-data.mdx +6 -0
  503. package/docs-site/zh/troubleshooting/debugging.mdx +1 -1
  504. package/docs-site/zh/troubleshooting/recover-after-kill.mdx +37 -5
  505. package/docs-site/zh/tutorials/accept-results.mdx +72 -0
  506. package/docs-site/zh/tutorials/agent-onboarding.mdx +6 -6
  507. package/docs-site/zh/tutorials/authoring.mdx +9 -13
  508. package/docs-site/zh/tutorials/ci-integration.mdx +6 -6
  509. package/docs-site/zh/tutorials/compare-runs.mdx +61 -0
  510. package/docs-site/zh/tutorials/concurrency.mdx +13 -12
  511. package/docs-site/zh/tutorials/configuration.mdx +4 -6
  512. package/docs-site/zh/tutorials/connect-your-agent.mdx +1 -1
  513. package/docs-site/zh/tutorials/control-run-cost.mdx +58 -0
  514. package/docs-site/zh/tutorials/criteria-files.mdx +2 -2
  515. package/docs-site/zh/tutorials/custom-reports.mdx +2 -2
  516. package/docs-site/zh/tutorials/debug-lifecycle-plan.mdx +46 -0
  517. package/docs-site/zh/tutorials/docker-in-docker.mdx +52 -43
  518. package/docs-site/zh/tutorials/eval-groups.mdx +6 -6
  519. package/docs-site/zh/tutorials/evaluation-kinds.mdx +3 -3
  520. package/docs-site/zh/tutorials/experiments.mdx +2 -3
  521. package/docs-site/zh/tutorials/handle-execution-failures.mdx +18 -10
  522. package/docs-site/zh/tutorials/install-custom-sandbox-agent.mdx +16 -8
  523. package/docs-site/zh/tutorials/nixos-managed-dind.mdx +160 -0
  524. package/docs-site/zh/tutorials/plugins.mdx +14 -0
  525. package/docs-site/zh/tutorials/rerun-and-cache.mdx +4 -2
  526. package/docs-site/zh/tutorials/sandbox-agent.mdx +17 -11
  527. package/docs-site/zh/tutorials/sandbox-providers.mdx +17 -13
  528. package/docs-site/zh/tutorials/sandbox-reuse.mdx +12 -19
  529. package/docs-site/zh/tutorials/select-and-preview.mdx +65 -0
  530. package/docs-site/zh/tutorials/verify-judge.mdx +78 -0
  531. package/docs-site/zh/tutorials/viewing-results.mdx +38 -1
  532. package/docs-site/zh/tutorials/write-experiment.mdx +7 -5
  533. package/docs-site/zh/tutorials/write-send.mdx +9 -8
  534. package/package.json +9 -5
  535. package/dist/report/built-in/overview.cjs +0 -44
  536. package/dist/report/built-in/overview.cjs.map +0 -1
  537. package/dist/report/built-in/overview.d.cts +0 -6
  538. package/dist/report/built-in/overview.d.mts +0 -6
  539. package/dist/report/built-in/overview.d.ts +0 -6
  540. package/dist/report/built-in/overview.js +0 -9
  541. package/dist/report/built-in/overview.js.map +0 -1
  542. package/dist/runner/gate-lease.cjs +0 -283
  543. package/dist/runner/gate-lease.cjs.map +0 -1
  544. package/dist/runner/gate-lease.d.cts +0 -62
  545. package/dist/runner/gate-lease.d.mts +0 -62
  546. package/dist/runner/gate-lease.d.ts +0 -62
  547. package/dist/runner/gate-lease.js +0 -22
  548. package/dist/runner/gate-lease.js.map +0 -1
@@ -93,7 +93,10 @@ function chartFieldLabel(field, meta, locale) {
93
93
  tokens: "experimentList.tokens",
94
94
  };
95
95
  const base = dictionary[field] ? (0, locale_ts_1.localeText)(locale, dictionary[field]) : field;
96
- return meta.unit ? `${base}(${meta.unit})` : base;
96
+ return meta.unit && meta.format !== "percent" ? `${base}(${meta.unit})` : base;
97
+ }
98
+ function chartTickUnit(meta) {
99
+ return meta.format === "percent" ? "%" : meta.unit;
97
100
  }
98
101
  /** 解析点所属 series 句柄与下标;单系列隐式图不声明视觉身份。 */
99
102
  function dimensionAt(ctx, handle, index) {
@@ -331,11 +334,11 @@ function renderChartWeb(mapped, axes, locale, ctx, options) {
331
334
  ? [...new Set(drawable.map((point) => point.y))]
332
335
  : yScale.ticks).map((tick) => ((0, jsx_runtime_1.jsx)("text", { className: "niceeval-chart-tick", x: MARGIN.left - 8, y: yScale.scale(tick) + 3, textAnchor: "end", children: axes.yMeta.kind === "dimension"
333
336
  ? drawable.find((point) => point.y === tick)?.yLabel
334
- : (0, format_ts_1.formatAxisTick)(tick, (0, math_ts_1.tickStepOf)(yScale.ticks), axes.yMeta.unit) }, `ay${tick}`))) }), (0, jsx_runtime_1.jsx)("g", { className: "niceeval-chart-axis niceeval-chart-axis-x", children: (axes.xMeta.kind === "dimension"
337
+ : (0, format_ts_1.formatAxisTick)(tick, (0, math_ts_1.tickStepOf)(yScale.ticks), chartTickUnit(axes.yMeta)) }, `ay${tick}`))) }), (0, jsx_runtime_1.jsx)("g", { className: "niceeval-chart-axis niceeval-chart-axis-x", children: (axes.xMeta.kind === "dimension"
335
338
  ? [...new Set(drawable.map((point) => point.x))]
336
339
  : xScale.ticks).map((tick) => ((0, jsx_runtime_1.jsx)("text", { className: "niceeval-chart-tick", x: xScale.scale(tick), y: MARGIN.top + PLOT_H + 16, textAnchor: "middle", children: axes.xMeta.kind === "dimension"
337
340
  ? drawable.find((point) => point.x === tick)?.xLabel
338
- : (0, format_ts_1.formatAxisTick)(tick, (0, math_ts_1.tickStepOf)(xScale.ticks), axes.xMeta.unit) }, `ax${tick}`))) }), axes.xMeta.better !== undefined && axes.yMeta.better !== undefined ? ((0, jsx_runtime_1.jsx)("text", { className: "niceeval-chart-better-hint", x: MARGIN.left + PLOT_W - 6, y: MARGIN.top + 14, textAnchor: "end", children: (0, locale_ts_1.localeText)(locale, "scatter.betterUpperRight") })) : null, (0, jsx_runtime_1.jsx)("text", { className: "niceeval-chart-xlabel", x: MARGIN.left + PLOT_W / 2, y: HEIGHT - 8, textAnchor: "middle", children: xLabel }), (0, jsx_runtime_1.jsx)("text", { className: "niceeval-chart-ylabel", x: 14, y: MARGIN.top + PLOT_H / 2, textAnchor: "middle", transform: `rotate(-90 14 ${MARGIN.top + PLOT_H / 2})`, children: yLabel }), visible.flatMap((series) => {
341
+ : (0, format_ts_1.formatAxisTick)(tick, (0, math_ts_1.tickStepOf)(xScale.ticks), chartTickUnit(axes.xMeta)) }, `ax${tick}`))) }), axes.xMeta.better !== undefined && axes.yMeta.better !== undefined ? ((0, jsx_runtime_1.jsx)("text", { className: "niceeval-chart-better-hint", x: MARGIN.left + PLOT_W - 6, y: MARGIN.top + 14, textAnchor: "end", children: (0, locale_ts_1.localeText)(locale, "scatter.betterUpperRight") })) : null, (0, jsx_runtime_1.jsx)("text", { className: "niceeval-chart-xlabel", x: MARGIN.left + PLOT_W / 2, y: HEIGHT - 8, textAnchor: "middle", children: xLabel }), (0, jsx_runtime_1.jsx)("text", { className: "niceeval-chart-ylabel", x: 14, y: MARGIN.top + PLOT_H / 2, textAnchor: "middle", transform: `rotate(-90 14 ${MARGIN.top + PLOT_H / 2})`, children: yLabel }), visible.flatMap((series) => {
339
342
  const values = series.byField ? (0, chart_map_ts_1.seriesDimensionValues)(mapped, series.byField) : [series.id];
340
343
  return values.map((value) => {
341
344
  const seriesPoints = drawable.filter((p) => p.sourceSeriesId === series.id &&
@@ -478,10 +481,10 @@ function chartText(dataset, props, ctx) {
478
481
  // 印到轴上(步长的小数位数才是精度)。
479
482
  formatX: (v) => axes.xMeta.kind === "dimension"
480
483
  ? (points.find((point) => point.x === Math.round(v))?.xLabel ?? "")
481
- : (0, format_ts_1.formatAxisTick)(v, (0, math_ts_1.tickStepOf)((0, math_ts_1.ticksInDomain)(xDomain[0], xDomain[1], 5)), axes.xMeta.unit),
484
+ : (0, format_ts_1.formatAxisTick)(v, (0, math_ts_1.tickStepOf)((0, math_ts_1.ticksInDomain)(xDomain[0], xDomain[1], 5)), chartTickUnit(axes.xMeta)),
482
485
  formatY: (v) => axes.yMeta.kind === "dimension"
483
486
  ? (points.find((point) => point.y === Math.round(v))?.yLabel ?? "")
484
- : (0, format_ts_1.formatAxisTick)(v, (0, math_ts_1.tickStepOf)((0, math_ts_1.ticksInDomain)(yDomain[0], yDomain[1], 5)), axes.yMeta.unit),
487
+ : (0, format_ts_1.formatAxisTick)(v, (0, math_ts_1.tickStepOf)((0, math_ts_1.ticksInDomain)(yDomain[0], yDomain[1], 5)), chartTickUnit(axes.yMeta)),
485
488
  invertX: axes.xMeta.better === "lower",
486
489
  invertY: axes.yMeta.better === "lower",
487
490
  });
@@ -1 +1 @@
1
- {"version":3,"file":"chart.js","sourceRoot":"","sources":["chart.tsx"],"names":[],"mappings":"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","sourcesContent":["// Chart 原语:消费 Dataset,用 x/y 与 <Series> 映射坐标与 mark(docs/feature/reports/library.md)。\nimport type { CSSProperties, ReactNode } from \"react\";\nimport type { AttemptLocator } from \"../../../attempt-locator.ts\";\nimport { SeriesPatternDefs, seriesClassFromColorVar, seriesClassesFromFill, } from \"../../assets/series-encoding.tsx\";\nimport { defineComponent, type ReportNode, type TextContext, type WebContext } from \"../tree.ts\";\nimport type { ReportTarget } from \"../report.ts\";\nimport type { DimensionDeclarations, DimensionPresentation } from \"../../presentation.ts\";\nimport type { Dataset, DatasetField } from \"../../model/types.ts\";\nimport type { ReportLocale } from \"../../model/locale.ts\";\nimport { countText, localeText, resolveLocalizedText, type ReportLocale as RL } from \"../../model/locale.ts\";\nimport { formatAxisTick, formatMetricScalar, shortestUniqueLabels } from \"../../model/format.ts\";\nimport { axisScale, paddedAxisDomain, placePointLabels, ticksInDomain, tickStepOf } from \"../../model/chart/math.ts\";\nimport { renderCharPlot, renderCoordinateTable } from \"../../model/chart/plot.ts\";\nimport { padDisplay, padStartDisplay, stringWidth, textBar } from \"../../model/text-layout.ts\";\nimport { dataShapeError, targetOfRefs, type ValueProps } from \"./shared.ts\";\nimport { isDataset } from \"../../model/dataset.ts\";\nimport { mapChartSeries, resolveChartAxes, seriesDimensionValues, type ChartAxisBinding, type ChartSeriesOverride, type MappedSeries, type SeriesProps, } from \"./chart-map.ts\";\nexport type { SeriesProps };\nconst WIDTH = 760;\nconst HEIGHT = 400;\nconst MARGIN = { top: 28, right: 32, bottom: 48, left: 64 };\nconst PLOT_W = WIDTH - MARGIN.left - MARGIN.right;\nconst PLOT_H = HEIGHT - MARGIN.top - MARGIN.bottom;\nconst IMPLICIT_SERIES_HANDLE = \"__chartSeries\";\nfunction cx(...parts: (string | undefined | false)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\n/**\n * Chart 内部一个可下钻的点(x/y 映射后);pointTarget 只看 `refs` 与 `key`,不看坐标或 label。\n * `key` 是该点在 Dataset 里的行 key——`Scatter`/`Bars` 等声明了 `point=\"<field>\"` 时,它就是\n * 该字段的原始值(如 experiment id),让上层的 pointTarget 不必反查证据即可拿到点的业务身份。\n */\nexport interface ChartTargetPoint {\n refs: readonly AttemptLocator[];\n key: string;\n}\nexport interface ChartPresentation {\n children?: ReportNode;\n width?: number | `${number}%`;\n height?: number;\n aspect?: number;\n layout?: \"horizontal\" | \"vertical\";\n legend?: boolean;\n tooltip?: boolean;\n grid?: boolean;\n series?: Readonly<Record<string, ChartSeriesOverride>>;\n /**\n * 「这个点该指向谁」由放点的上层决定(library.md「目标与下钻」)。省略时落到全库唯一的\n * 默认规则 `targetOfRefs(point.refs)`——单证据给出 attempt 目标,零或多证据不成链\n * (这正是 refs[0] 快捷写法的已知 bug:多 attempt 点被压成第一个 attempt 的目标,而不是\n * 报不出目标)。\n */\n pointTarget?: (point: ChartTargetPoint) => ReportTarget | undefined;\n locale?: ReportLocale;\n className?: string;\n}\n/** `pointTarget` 缺省时的目标:`targetOfRefs`,把 refs[0] 式的错误收窄成结构化的唯一规则。 */\nfunction resolvePointTarget(point: ChartTargetPoint, pointTarget: ((point: ChartTargetPoint) => ReportTarget | undefined) | undefined): ReportTarget | undefined {\n return pointTarget ? pointTarget(point) : targetOfRefs(point.refs);\n}\nfunction pointHref(point: {\n refs: readonly string[];\n key: string;\n}, ctx: WebContext, pointTarget: ((point: ChartTargetPoint) => ReportTarget | undefined) | undefined): string | undefined {\n const target = resolvePointTarget({ refs: point.refs as readonly AttemptLocator[], key: point.key }, pointTarget);\n return target === undefined ? undefined : ctx.href(target);\n}\nexport type ChartProps = ValueProps<Dataset, ChartPresentation & {\n x: ChartAxisBinding;\n y: ChartAxisBinding;\n}>;\nfunction assertDataset(data: unknown): Dataset {\n if (!isDataset(data)) {\n throw dataShapeError(\"Chart\", \"data\", \"Dataset\", '\"data\" must be a Dataset { fields, rows }');\n }\n return data;\n}\nfunction seriesNodesOf(children: ReportNode | undefined): SeriesProps[] {\n if (children === null || children === undefined || typeof children === \"boolean\")\n return [];\n const out: SeriesProps[] = [];\n const visit = (node: unknown): void => {\n if (node === null || node === undefined || typeof node === \"boolean\")\n return;\n if (Array.isArray(node)) {\n for (const child of node)\n visit(child);\n return;\n }\n if (typeof node === \"object\" && node !== null && \"type\" in node && \"props\" in node) {\n const el = node as {\n type: unknown;\n props: SeriesProps;\n };\n if (el.type === Series)\n out.push(el.props);\n }\n };\n visit(children);\n return out;\n}\nfunction validateChart(dataset: Dataset, specs: SeriesProps[], x: ChartAxisBinding, y: ChartAxisBinding): void {\n if (specs.length === 0) {\n throw new Error(\"Chart needs at least one <Series> child declaring mark and id.\");\n }\n const ids = new Set<string>();\n for (const spec of specs) {\n if (!spec.id || typeof spec.id !== \"string\") {\n throw new Error('Each <Series> needs a non-empty string \"id\".');\n }\n if (ids.has(spec.id)) {\n throw new Error(`Chart contains duplicate <Series id=${JSON.stringify(spec.id)}>.`);\n }\n ids.add(spec.id);\n }\n resolveChartAxes(dataset, x, y);\n}\nfunction lineDash(style: MappedSeries[\"line\"]): string | undefined {\n if (style === \"dashed\")\n return \"6 4\";\n if (style === \"dotted\")\n return \"2 3\";\n return undefined;\n}\nfunction seriesMarkChar(mark: MappedSeries[\"mark\"], index: number): string {\n if (mark === \"scatter\" || mark === \"line\")\n return String.fromCharCode(65 + (index % 26));\n return \"█\";\n}\nfunction chartFieldLabel(field: string, meta: DatasetField, locale: RL): string {\n const dictionary: globalThis.Record<string, Parameters<typeof localeText>[1]> = {\n costUSD: \"experimentList.cost\",\n passRate: \"scopeSummary.passRate\",\n totalScore: \"scopeSummary.totalScore\",\n durationMs: \"experimentList.avgDuration\",\n tokens: \"experimentList.tokens\",\n };\n const base = dictionary[field] ? localeText(locale, dictionary[field]!) : field;\n return meta.unit ? `${base}(${meta.unit})` : base;\n}\n/** 解析点所属 series 句柄与下标;单系列隐式图不声明视觉身份。 */\nfunction dimensionAt(ctx: WebContext, handle: string, index: number): DimensionPresentation | undefined {\n // 语义适配:当前 tree.ts 的 WebContext.dimension 返回 unknown(呈现分配由 renderer 层\n // 接通);这里只做防御性结构收窄,拿不到 PresentedDimension 时回退无视觉身份。\n const value = ctx.dimension(handle) as unknown;\n if (value === undefined || value === null || typeof value !== \"object\")\n return undefined;\n const at = (value as {\n at?: unknown;\n }).at;\n if (typeof at !== \"function\")\n return undefined;\n return (at as (i: number) => DimensionPresentation).call(value, index);\n}\nfunction seriesPresentationOf(mapped: MappedSeries[], series: MappedSeries, point: MappedSeries[\"points\"][number], ctx: WebContext): DimensionPresentation | undefined {\n let handle: string;\n let index: number;\n if (series.byField !== undefined && point.seriesValue !== undefined) {\n handle = series.byField;\n index = seriesDimensionValues(mapped, series.byField).indexOf(point.seriesValue);\n }\n else {\n const ids = mapped.filter((item) => !item.hidden && item.byField === undefined).map((item) => item.id);\n if (ids.length < 2)\n return undefined;\n handle = IMPLICIT_SERIES_HANDLE;\n index = ids.indexOf(series.id);\n }\n if (index < 0)\n return undefined;\n return dimensionAt(ctx, handle, index);\n}\n/** SVG 路径:只挂 series-cN 设 --series;pattern 由 fill 属性 / style 承载。 */\nfunction seriesColorClass(presentation: DimensionPresentation | undefined): string {\n if (!presentation)\n return \"niceeval-series-none\";\n if (presentation.kind === \"color\")\n return seriesClassFromColorVar(presentation.color);\n if (presentation.kind !== \"series\")\n return \"niceeval-series-none\";\n // switch 按 mark 收窄;Fill 的 mark 是 \"bar\"|\"area\" 联合,if/|| 在部分 TS 版本下剔不干净。\n switch (presentation.mark) {\n case \"bar\":\n case \"area\": {\n // 只要色类,不要 HTML 专用的 fill-vN(SVG 用 url(#pattern))。\n const classes = seriesClassesFromFill(presentation.fill).split(\" \");\n return classes.find((c) => c.startsWith(\"niceeval-series-c\") || c === \"niceeval-series-none\") ?? \"niceeval-series-none\";\n }\n case \"line\":\n return seriesClassFromColorVar(presentation.stroke);\n case \"scatter\":\n return seriesClassFromColorVar(presentation.marker.fill);\n }\n}\n/** HTML 横向柱:色类 + fill-vN 图案类(CSS repeating-linear-gradient 等效 SVG pattern)。 */\nfunction seriesHtmlBarClass(presentation: DimensionPresentation | undefined): string {\n if (!presentation)\n return \"niceeval-series-none\";\n if (presentation.kind === \"series\" && (presentation.mark === \"bar\" || presentation.mark === \"area\")) {\n return seriesClassesFromFill(presentation.fill);\n }\n return seriesColorClass(presentation);\n}\n/**\n * 作者在 `<Series line>` 上显式声明的 dashed/dotted **优先于** 页级 variant 的 strokeDasharray。\n * 未声明时消费 LineSeriesPresentation / FillSeriesPresentation 的 strokeDasharray(空串 = 实线)。\n */\nfunction resolveStrokeDasharray(series: MappedSeries, presentation: DimensionPresentation | undefined): string | undefined {\n if (series.line !== undefined)\n return lineDash(series.line);\n if (presentation?.kind === \"series\" && \"strokeDasharray\" in presentation) {\n return presentation.strokeDasharray || undefined;\n }\n return undefined;\n}\n/** SVG 柱/面:pattern fill 必须用 style 压过 `.niceeval-chart-bar { fill: var(--series) }`。 */\nfunction seriesSvgFillStyle(presentation: DimensionPresentation | undefined): CSSProperties | undefined {\n if (presentation?.kind !== \"series\")\n return undefined;\n if (presentation.mark !== \"bar\" && presentation.mark !== \"area\")\n return undefined;\n if (!presentation.fill.startsWith(\"url(\"))\n return undefined;\n return { fill: presentation.fill };\n}\nfunction renderMarkerShape(presentation: DimensionPresentation | undefined, px: number, py: number, colorClass: string, title: ReactNode): ReactNode {\n const marker = presentation?.kind === \"series\" && (presentation.mark === \"scatter\" || presentation.mark === \"line\")\n ? presentation.marker\n : undefined;\n if (!marker) {\n return (<circle className={cx(\"niceeval-chart-dot\", colorClass)} cx={px} cy={py} r={4.5}>\n {title}\n </circle>);\n }\n // path 在 0..12 viewBox;缩放到 ~9px 并居中到 (px, py)。\n return (<path className={cx(\"niceeval-chart-dot\", colorClass)} d={marker.path} transform={`translate(${px} ${py}) scale(0.75) translate(-6 -6)`} fill={marker.fill} stroke=\"var(--panel)\" strokeWidth={1.6}>\n {title}\n </path>);\n}\nfunction legendSwatch(presentation: DimensionPresentation | undefined, mark: MappedSeries[\"mark\"]): ReactNode {\n if (!presentation || presentation.kind !== \"series\") {\n return <span className={cx(\"niceeval-chart-legend-swatch\", \"niceeval-series-none\")}/>;\n }\n // 图例方块跟 series mark 取义:柱/面用填充图案,线用 dash+marker,散点用 marker 形状。\n if (mark === \"bar\" || mark === \"area\") {\n const fillClass = presentation.mark === \"bar\" || presentation.mark === \"area\"\n ? seriesClassesFromFill(presentation.fill)\n : seriesColorClass(presentation);\n return <span className={cx(\"niceeval-chart-legend-swatch\", fillClass)}/>;\n }\n if (mark === \"line\") {\n // 线系图例需要 stroke + marker;presentation 可能是 line 或 scatter(by 切分后 mark 对齐)。\n if (presentation.mark === \"line\") {\n return (<svg className=\"niceeval-chart-legend-swatch-svg\" width=\"16\" height=\"10\" aria-hidden=\"true\">\n <line x1=\"0\" y1=\"5\" x2=\"16\" y2=\"5\" stroke={presentation.stroke} strokeWidth={2} strokeDasharray={presentation.strokeDasharray || undefined}/>\n <path d={presentation.marker.path} transform=\"translate(8 5) scale(0.55) translate(-6 -6)\" fill={presentation.marker.fill}/>\n </svg>);\n }\n if (presentation.mark === \"scatter\") {\n return (<svg className=\"niceeval-chart-legend-swatch-svg\" width=\"16\" height=\"10\" aria-hidden=\"true\">\n <line x1=\"0\" y1=\"5\" x2=\"16\" y2=\"5\" stroke={presentation.marker.fill} strokeWidth={2}/>\n <path d={presentation.marker.path} transform=\"translate(8 5) scale(0.55) translate(-6 -6)\" fill={presentation.marker.fill}/>\n </svg>);\n }\n // fill presentation 配 line mark 的退化:只画色块。\n return <span className={cx(\"niceeval-chart-legend-swatch\", seriesColorClass(presentation))}/>;\n }\n // mark === \"scatter\"\n if (presentation.mark === \"scatter\" || presentation.mark === \"line\") {\n return (<svg className=\"niceeval-chart-legend-swatch-svg\" width=\"10\" height=\"10\" aria-hidden=\"true\">\n <path d={presentation.marker.path} transform=\"translate(5 5) scale(0.7) translate(-6 -6)\" fill={presentation.marker.fill}/>\n </svg>);\n }\n return <span className={cx(\"niceeval-chart-legend-swatch\", seriesColorClass(presentation))}/>;\n}\nfunction metricDisplay(point: MappedSeries[\"points\"][number], axis: \"x\" | \"y\", meta: DatasetField, locale: RL): string {\n if (meta.kind === \"dimension\") {\n return axis === \"x\" ? (point.xLabel ?? point.pointLabel) : (point.yLabel ?? point.pointLabel);\n }\n const value = point[axis];\n const cell = axis === \"x\" ? point.xCell : point.yCell;\n return formatMetricScalar(value, meta.unit, cell?.format, locale);\n}\nfunction renderLegend(mapped: MappedSeries[], visible: MappedSeries[], locale: RL, ctx: WebContext): ReactNode {\n return (<ul className=\"niceeval-chart-legend\">\n {visible.flatMap((series) => {\n const byValues = series.byField ? seriesDimensionValues(mapped, series.byField) : [series.id];\n return byValues.map((value) => {\n const implicitIds = visible\n .filter((item) => item.byField === undefined)\n .map((item) => item.id);\n const handle = series.byField ?? (implicitIds.length > 1 ? IMPLICIT_SERIES_HANDLE : undefined);\n const index = series.byField\n ? seriesDimensionValues(mapped, series.byField).indexOf(value)\n : implicitIds.indexOf(series.id);\n const presentation = handle ? dimensionAt(ctx, handle, index) : undefined;\n const label = presentation?.label ?? (series.label ? resolveLocalizedText(series.label, locale) : series.id);\n return (<li key={`${series.id}:${value}`} className=\"niceeval-chart-legend-item\">\n {legendSwatch(presentation, series.mark)}\n {label}\n </li>);\n });\n })}\n </ul>);\n}\nfunction renderMissingNote(missing: number | undefined, locale: RL): ReactNode {\n if (missing === undefined || missing === 0)\n return null;\n return (<p className=\"niceeval-chart-missing\" title={String(missing)}>\n {countText(locale, \"pointsMissing\", missing)}\n </p>);\n}\nfunction renderHorizontalBarsWeb(mapped: MappedSeries[], visible: MappedSeries[], axes: ReturnType<typeof resolveChartAxes>, locale: RL, ctx: WebContext, options: {\n legend?: boolean;\n pointTarget?: (point: ChartTargetPoint) => ReportTarget | undefined;\n className?: string;\n missing?: number;\n}): ReactNode {\n const entries = visible.flatMap((series) => series.points.map((point) => ({ series, point })));\n const labels = shortestUniqueLabels(entries.map(({ point }) => point.xLabel ?? point.pointLabel));\n const values = entries.map(({ point }) => point.y);\n const boundMax = axes.yMeta.kind === \"metric\" ? axes.yMeta.bounds?.max : undefined;\n const max = boundMax !== undefined && boundMax > 0 ? boundMax : Math.max(0, ...values);\n return (<figure className={cx(\"niceeval-report\", \"niceeval-chart\", \"niceeval-chart--bars-horizontal\", options.className)}>\n {/* 横向 HTML 柱不引用 pattern,但同页可能另有 SVG 图;defs 全局一份无害。 */}\n <SeriesPatternDefs />\n <div className=\"niceeval-chart-bars-heading\">\n {chartFieldLabel(axes.yField, axes.yMeta, locale)}\n </div>\n <ol className=\"niceeval-chart-bars\">\n {entries.map(({ series, point }) => {\n const rawLabel = point.xLabel ?? point.pointLabel;\n const label = labels.get(rawLabel) ?? rawLabel;\n const display = metricDisplay(point, \"y\", axes.yMeta, locale);\n const href = pointHref(point, ctx, options.pointTarget);\n const presentation = seriesPresentationOf(mapped, series, point, ctx);\n const colorClass = seriesHtmlBarClass(presentation);\n const ratio = max > 0 ? Math.max(0, Math.min(1, point.y / max)) : 0;\n const value = (<span className=\"niceeval-chart-bar-value\">\n {display}\n {point.yCell && point.yCell.samples < point.yCell.total ? (<sup>\n {point.yCell.samples}/{point.yCell.total}\n </sup>) : null}\n </span>);\n return (<li key={`${series.id}:${point.key}`} className=\"niceeval-chart-bar-row\">\n <span className=\"niceeval-chart-bar-label\" title={rawLabel}>{label}</span>\n <span className=\"niceeval-chart-bar-track\">\n <span className={cx(\"niceeval-chart-bar-fill\", colorClass)} style={{ width: `${ratio * 100}%` }} title={`${rawLabel}\\n${axes.yField}: ${display}`}/>\n </span>\n {href ? <a className=\"niceeval-locator\" href={href}>{value}</a> : value}\n </li>);\n })}\n </ol>\n {options.legend ? renderLegend(mapped, visible, locale, ctx) : null}\n {renderMissingNote(options.missing, locale)}\n </figure>);\n}\nfunction stackedBarBase(visible: readonly MappedSeries[], target: MappedSeries, x: number): number {\n if (target.stack === undefined)\n return 0;\n let total = 0;\n for (const series of visible) {\n if (series === target)\n break;\n if (series.mark !== \"bar\" || series.stack !== target.stack)\n continue;\n const point = series.points.find((item) => item.x === x);\n if (point)\n total += point.y;\n }\n return total;\n}\nfunction chartYValues(visible: readonly MappedSeries[]): number[] {\n const values: number[] = [];\n const stacks = new Map<string, number>();\n for (const series of visible) {\n for (const point of series.points) {\n if (series.mark === \"bar\" && series.stack !== undefined) {\n const key = `${series.stack}\\0${point.x}`;\n stacks.set(key, (stacks.get(key) ?? 0) + point.y);\n }\n else {\n values.push(point.y);\n }\n }\n }\n values.push(...stacks.values());\n return values;\n}\nfunction renderChartWeb(mapped: MappedSeries[], axes: ReturnType<typeof resolveChartAxes>, locale: RL, ctx: WebContext, options: {\n layout?: \"horizontal\" | \"vertical\";\n legend?: boolean;\n grid?: boolean;\n pointTarget?: (point: ChartTargetPoint) => ReportTarget | undefined;\n className?: string;\n missing?: number;\n}): ReactNode {\n const visible = mapped.filter((s) => !s.hidden);\n const allPoints = visible.flatMap((s) => s.points);\n if (allPoints.length === 0) {\n return (<figure className={cx(\"niceeval-report\", \"niceeval-chart\", \"niceeval-chart--scatter\", options.className)}>\n <p className=\"niceeval-chart-empty niceeval-missing\">{localeText(locale, \"cell.missing\")}</p>\n {renderMissingNote(options.missing, locale)}\n </figure>);\n }\n if (options.layout === \"horizontal\" && visible.every((series) => series.mark === \"bar\")) {\n return renderHorizontalBarsWeb(mapped, visible, axes, locale, ctx, options);\n }\n const xBounds = axes.xMeta.kind === \"metric\" ? axes.xMeta.bounds : undefined;\n const yBounds = axes.yMeta.kind === \"metric\" ? axes.yMeta.bounds : undefined;\n const hasVerticalFill = visible.some((series) => series.mark === \"bar\" || series.mark === \"area\");\n const yValues = [...chartYValues(visible), ...(hasVerticalFill ? [0] : [])];\n const xScale = axisScale(allPoints.map((p) => p.x), xBounds, MARGIN.left, MARGIN.left + PLOT_W, axes.xMeta.better === \"lower\");\n const yScale = axisScale(yValues, yBounds, MARGIN.top + PLOT_H, MARGIN.top, axes.yMeta.better === \"lower\");\n const labelByKey = shortestUniqueLabels(allPoints.map((p) => p.pointLabel));\n const xLabel = chartFieldLabel(axes.xField, axes.xMeta, locale);\n const yLabel = chartFieldLabel(axes.yField, axes.yMeta, locale);\n const drawable = visible.flatMap((series) => series.points.map((point) => {\n const presentation = seriesPresentationOf(mapped, series, point, ctx);\n return {\n ...point,\n sourceSeriesId: series.id,\n label: labelByKey.get(point.pointLabel) ?? point.pointLabel,\n px: xScale.scale(point.x),\n py: yScale.scale(point.y),\n presentation,\n seriesClass: seriesColorClass(presentation),\n };\n }));\n const labels = placePointLabels(drawable.map((p) => ({ cx: p.px, cy: p.py, width: p.label.length * 6.4 + 10 })), { x0: 2, y0: 2, x1: WIDTH - 2, y1: HEIGHT - 2 });\n return (<figure className={cx(\"niceeval-report\", \"niceeval-chart\", \"niceeval-chart--scatter\", options.className)}>\n <SeriesPatternDefs />\n <svg className=\"niceeval-chart-svg\" viewBox={`0 0 ${WIDTH} ${HEIGHT}`} role=\"img\" aria-label={`${axes.xField} × ${axes.yField}`}>\n {options.grid !== false ? (<g className=\"niceeval-chart-grid\">\n {yScale.ticks.map((tick) => (<line key={`gy${tick}`} x1={MARGIN.left} x2={MARGIN.left + PLOT_W} y1={yScale.scale(tick)} y2={yScale.scale(tick)}/>))}\n {xScale.ticks.map((tick) => (<line key={`gx${tick}`} y1={MARGIN.top} y2={MARGIN.top + PLOT_H} x1={xScale.scale(tick)} x2={xScale.scale(tick)}/>))}\n </g>) : null}\n <g className=\"niceeval-chart-axis niceeval-chart-axis-y\">\n {(axes.yMeta.kind === \"dimension\"\n ? [...new Set(drawable.map((point) => point.y))]\n : yScale.ticks).map((tick) => (<text key={`ay${tick}`} className=\"niceeval-chart-tick\" x={MARGIN.left - 8} y={yScale.scale(tick) + 3} textAnchor=\"end\">\n {axes.yMeta.kind === \"dimension\"\n ? drawable.find((point) => point.y === tick)?.yLabel\n : formatAxisTick(tick, tickStepOf(yScale.ticks), axes.yMeta.unit)}\n </text>))}\n </g>\n <g className=\"niceeval-chart-axis niceeval-chart-axis-x\">\n {(axes.xMeta.kind === \"dimension\"\n ? [...new Set(drawable.map((point) => point.x))]\n : xScale.ticks).map((tick) => (<text key={`ax${tick}`} className=\"niceeval-chart-tick\" x={xScale.scale(tick)} y={MARGIN.top + PLOT_H + 16} textAnchor=\"middle\">\n {axes.xMeta.kind === \"dimension\"\n ? drawable.find((point) => point.x === tick)?.xLabel\n : formatAxisTick(tick, tickStepOf(xScale.ticks), axes.xMeta.unit)}\n </text>))}\n </g>\n {axes.xMeta.better !== undefined && axes.yMeta.better !== undefined ? (<text className=\"niceeval-chart-better-hint\" x={MARGIN.left + PLOT_W - 6} y={MARGIN.top + 14} textAnchor=\"end\">\n {localeText(locale, \"scatter.betterUpperRight\")}\n </text>) : null}\n <text className=\"niceeval-chart-xlabel\" x={MARGIN.left + PLOT_W / 2} y={HEIGHT - 8} textAnchor=\"middle\">\n {xLabel}\n </text>\n <text className=\"niceeval-chart-ylabel\" x={14} y={MARGIN.top + PLOT_H / 2} textAnchor=\"middle\" transform={`rotate(-90 14 ${MARGIN.top + PLOT_H / 2})`}>\n {yLabel}\n </text>\n {visible.flatMap((series) => {\n const values = series.byField ? seriesDimensionValues(mapped, series.byField) : [series.id];\n return values.map((value) => {\n const seriesPoints = drawable.filter((p) => p.sourceSeriesId === series.id &&\n (series.byField === undefined || p.seriesValue === value));\n const ordered = series.connect ? [...seriesPoints].sort((a, b) => a.x - b.x) : seriesPoints;\n const seriesClassName = ordered[0]?.seriesClass ?? \"niceeval-series-none\";\n const seriesPresentation = ordered[0]?.presentation;\n const baseline = yScale.scale(0);\n const barGroups = [...new Set(visible\n .filter((item) => item.mark === \"bar\")\n .map((item) => item.stack ?? `series:${item.id}`))];\n const barGroup = series.stack ?? `series:${series.id}`;\n const groupIndex = Math.max(0, barGroups.indexOf(barGroup));\n const totalBarWidth = Math.max(8, Math.min(48, PLOT_W / Math.max(1, allPoints.length)));\n const barWidth = totalBarWidth / Math.max(1, barGroups.length);\n const dash = resolveStrokeDasharray(series, seriesPresentation);\n const areaFillStyle = seriesSvgFillStyle(seriesPresentation);\n return (<g key={`${series.id}:${value}`} className={cx(\"niceeval-chart-series\", seriesClassName)} data-series={`${series.id}:${value}`}>\n {series.mark === \"area\" && ordered.length > 1 ? (<polygon className=\"niceeval-chart-area\" style={areaFillStyle} points={[\n `${ordered[0]!.px},${baseline}`,\n ...ordered.map((point) => `${point.px},${point.py}`),\n `${ordered[ordered.length - 1]!.px},${baseline}`,\n ].join(\" \")}/>) : null}\n {(series.mark === \"line\" || series.mark === \"area\" || series.connect) && ordered.length > 1 ? (<polyline className=\"niceeval-chart-line\" points={ordered.map((p) => `${p.px},${p.py}`).join(\" \")} strokeDasharray={dash}/>) : null}\n {ordered.map((p) => {\n const placed = labels[drawable.indexOf(p)];\n const href = pointHref(p, ctx, options.pointTarget);\n let shape: ReactNode;\n if (series.mark === \"bar\") {\n const baseValue = stackedBarBase(visible, series, p.x);\n const baseY = yScale.scale(baseValue);\n const topY = yScale.scale(baseValue + p.y);\n shape = (<rect className={cx(\"niceeval-chart-bar\", p.seriesClass)} style={seriesSvgFillStyle(p.presentation)} x={p.px - totalBarWidth / 2 + groupIndex * barWidth} y={Math.min(topY, baseY)} width={barWidth} height={Math.max(1, Math.abs(baseY - topY))}>\n <title>{`${p.pointLabel}\\n${series.id}: ${metricDisplay(p, \"y\", axes.yMeta, locale)}`}</title>\n </rect>);\n }\n else {\n shape = renderMarkerShape(p.presentation, p.px, p.py, p.seriesClass, <title>{`${p.pointLabel}\\n${axes.xField}: ${metricDisplay(p, \"x\", axes.xMeta, locale)}\\n${axes.yField}: ${metricDisplay(p, \"y\", axes.yMeta, locale)}`}</title>);\n }\n return (<g key={p.key} className=\"niceeval-chart-point\">\n {href ? <a href={href}>{shape}</a> : shape}\n {series.mark === \"scatter\" && placed ? (<text className=\"niceeval-chart-point-label\" x={placed.x} y={placed.y} textAnchor={placed.anchor}>\n {p.label}\n </text>) : null}\n </g>);\n })}\n </g>);\n });\n })}\n </svg>\n {options.legend ? renderLegend(mapped, visible, locale, ctx) : null}\n {renderMissingNote(options.missing, locale)}\n </figure>);\n}\nfunction renderBarsText(visible: MappedSeries[], axes: ReturnType<typeof resolveChartAxes>, locale: RL, ctx: TextContext): string {\n const entries: Array<{\n rawLabel: string;\n value: number;\n display: string;\n }> = [];\n const stacked = new Map<string, {\n rawLabel: string;\n value: number;\n parts: string[];\n }>();\n for (const series of visible) {\n for (const point of series.points) {\n const rawLabel = point.xLabel ?? point.pointLabel;\n const display = metricDisplay(point, \"y\", axes.yMeta, locale);\n if (series.stack !== undefined) {\n const key = `${series.stack}\\0${point.x}`;\n let entry = stacked.get(key);\n if (!entry) {\n entry = { rawLabel, value: 0, parts: [] };\n stacked.set(key, entry);\n }\n entry.value += point.y;\n entry.parts.push(`${series.id}=${display}`);\n }\n else {\n entries.push({\n rawLabel,\n value: point.y,\n display: point.yCell && point.yCell.samples < point.yCell.total\n ? `${display} ${point.yCell.samples}/${point.yCell.total}`\n : display,\n });\n }\n }\n }\n entries.push(...[...stacked.values()].map((entry) => ({\n rawLabel: entry.rawLabel,\n value: entry.value,\n display: entry.parts.join(\" · \"),\n })));\n const rawLabels = entries.map((entry) => entry.rawLabel);\n const labels = shortestUniqueLabels(rawLabels);\n const displays = entries.map((entry) => entry.display);\n const labelWidth = Math.max(0, ...rawLabels.map((label) => stringWidth(labels.get(label) ?? label)));\n const valueWidth = Math.max(0, ...displays.map(stringWidth));\n const barWidth = Math.max(8, Math.min(24, ctx.width - labelWidth - valueWidth - 4));\n const boundMax = axes.yMeta.kind === \"metric\" ? axes.yMeta.bounds?.max : undefined;\n const max = boundMax !== undefined && boundMax > 0\n ? boundMax\n : Math.max(0, ...entries.map((entry) => entry.value));\n const heading = chartFieldLabel(axes.yField, axes.yMeta, locale);\n return [\n `${padDisplay(\"\", labelWidth)} ${padDisplay(heading, barWidth)} ${padStartDisplay(\"\", valueWidth)}`,\n ...entries.map((entry, index) => {\n const rawLabel = rawLabels[index]!;\n const label = labels.get(rawLabel) ?? rawLabel;\n const ratio = max > 0 ? Math.max(0, Math.min(1, entry.value / max)) : 0;\n return `${padDisplay(label, labelWidth)} ${textBar(ratio, barWidth)} ${padStartDisplay(displays[index]!, valueWidth)}`;\n }),\n ].join(\"\\n\");\n}\nfunction chartText(dataset: Dataset, props: ChartProps & {\n x: ChartAxisBinding;\n y: ChartAxisBinding;\n}, ctx: TextContext): string {\n const locale = props.locale ?? ctx.locale;\n const specs = seriesNodesOf(props.children);\n validateChart(dataset, specs, props.x, props.y);\n const axes = resolveChartAxes(dataset, props.x, props.y);\n const { series, missing } = mapChartSeries(dataset, axes, specs, props.series);\n const visible = series.filter((s) => !s.hidden);\n const points = visible.flatMap((s) => s.points);\n if (points.length === 0) {\n return localeText(locale, \"cell.missing\");\n }\n if (visible.every((item) => item.mark === \"bar\")) {\n const bars = renderBarsText(visible, axes, locale, ctx);\n const missingNote = missing > 0 ? `\\n${countText(locale, \"pointsMissing\", missing)}` : \"\";\n return `${bars}${missingNote}`;\n }\n const xBounds = axes.xMeta.kind === \"metric\" ? axes.xMeta.bounds : undefined;\n const yBounds = axes.yMeta.kind === \"metric\" ? axes.yMeta.bounds : undefined;\n const xDomain = paddedAxisDomain(points.map((p) => p.x), xBounds);\n const yDomain = paddedAxisDomain(points.map((p) => p.y), yBounds);\n // 标记字母按图例顺序逐点分配:series 按显示键字典序,series 内按 x 原始值升序\n // (docs/feature/reports/cli.md)。按 series 下标分配会让一个 series 的\n // 全部点共用一个字母,图上读不出哪个点是哪一行。\n const groups = legendGroups(visible);\n const marks = new Map<string, string>();\n let letter = 0;\n for (const group of groups) {\n for (const point of group.points) {\n marks.set(point.key, group.mark === \"bar\" ? \"█\" : String.fromCharCode(65 + (letter % 26)));\n if (group.mark !== \"bar\")\n letter++;\n }\n }\n const lines = visible\n .filter((s) => s.connect && (s.mark === \"line\" || s.mark === \"scatter\" || s.mark === \"area\"))\n .map((s) => [...s.points].sort((a, b) => a.x - b.x).map((p) => ({ x: p.x, y: p.y })));\n const plot = renderCharPlot({\n width: Math.min(ctx.width, 72),\n height: 9,\n points: points.map((p) => ({ mark: marks.get(p.key) ?? \"•\", x: p.x, y: p.y })),\n xDomain,\n yDomain,\n lines,\n xLabel: axes.xField,\n yLabel: axes.yField,\n // 刻度精度跟随整齐步长,与 web 面同一支:传值域跨度会让 $0.35045992 这种原始值直接\n // 印到轴上(步长的小数位数才是精度)。\n formatX: (v) => axes.xMeta.kind === \"dimension\"\n ? (points.find((point) => point.x === Math.round(v))?.xLabel ?? \"\")\n : formatAxisTick(v, tickStepOf(ticksInDomain(xDomain[0], xDomain[1], 5)), axes.xMeta.unit),\n formatY: (v) => axes.yMeta.kind === \"dimension\"\n ? (points.find((point) => point.y === Math.round(v))?.yLabel ?? \"\")\n : formatAxisTick(v, tickStepOf(ticksInDomain(yDomain[0], yDomain[1], 5)), axes.yMeta.unit),\n invertX: axes.xMeta.better === \"lower\",\n invertY: axes.yMeta.better === \"lower\",\n });\n const values = renderScatterValuesText(groups, marks, axes, locale);\n const missingNote = missing > 0 ? `\\n${countText(locale, \"pointsMissing\", missing)}` : \"\";\n return `${plot}\\n\\n${values}${missingNote}`;\n}\n/** 图例分组:一个显示键一组。series 绑了维度时按维度值分组,否则整个 series 一组。 */\ninterface LegendGroup {\n readonly key: string;\n readonly mark: MappedSeries[\"mark\"];\n readonly connect: boolean;\n readonly points: readonly MappedSeries[\"points\"][number][];\n}\n/** 显示键字典序,组内按 x 原始值升序——图例顺序即标记字母顺序,两处不各自排序。 */\nfunction legendGroups(visible: readonly MappedSeries[]): LegendGroup[] {\n const byKey = new Map<string, {\n key: string;\n mark: MappedSeries[\"mark\"];\n connect: boolean;\n points: MappedSeries[\"points\"][number][];\n }>();\n for (const series of visible) {\n for (const point of series.points) {\n const key = point.seriesValue ?? series.id;\n let group = byKey.get(key);\n if (group === undefined) {\n group = { key, mark: series.mark, connect: series.connect === true, points: [] };\n byKey.set(key, group);\n }\n group.points.push(point);\n }\n }\n const groups = [...byKey.values()];\n groups.sort((a, b) => a.key.localeCompare(b.key));\n for (const group of groups)\n group.points.sort((a, b) => a.x - b.x);\n return groups;\n}\n/**\n * 散点 / 折线的 text 面读值块:两轴都声明了 better 时先给一行方向提示,随后一张读值表\n * (标记字母、系列、点名与两轴终值),最后给连线系列的位移摘要。字母、系列顺序与图上一致。\n * 位移摘要的符号是原始差值,方向好坏由读数的 better 语义判断,摘要不替读者下结论。\n */\nfunction renderScatterValuesText(groups: readonly LegendGroup[], marks: ReadonlyMap<string, string>, axes: ReturnType<typeof resolveChartAxes>, locale: RL): string {\n const blocks: string[] = [];\n if (axes.xMeta.better !== undefined && axes.yMeta.better !== undefined) {\n blocks.push(localeText(locale, \"scatter.betterUpperRight\"));\n }\n const multiSeries = groups.length > 1;\n const rows = groups.flatMap((group) => group.points.map((point) => ({\n mark: marks.get(point.key) ?? \"•\",\n ...(multiSeries ? { series: group.key } : {}),\n key: point.pointLabel,\n x: metricDisplay(point, \"x\", axes.xMeta, locale),\n y: metricDisplay(point, \"y\", axes.yMeta, locale),\n })));\n blocks.push(renderCoordinateTable(rows, {\n mark: \"\",\n ...(multiSeries ? { series: localeText(locale, \"chart.series\") } : {}),\n key: \"key\",\n x: axes.xField,\n y: axes.yField,\n }));\n const shifts = groups\n .filter((group) => group.connect)\n .map((group) => {\n const summary = shiftSummary(group, axes, locale);\n if (summary === undefined)\n return undefined;\n const path = group.points.map((point) => marks.get(point.key) ?? \"•\").join(\" → \");\n return `${group.key} ${path} ${summary}`;\n })\n .filter((line): line is string => line !== undefined);\n if (shifts.length > 0)\n blocks.push(shifts.join(\"\\n\"));\n return blocks.join(\"\\n\\n\");\n}\n/** 一条线首尾两点的原始差值:`通过率 +25pt · 成本 +$0.20`。百分比读数按百分点报,不按倍数。 */\nfunction shiftSummary(group: LegendGroup, axes: ReturnType<typeof resolveChartAxes>, locale: RL): string | undefined {\n if (group.points.length < 2)\n return undefined;\n const first = group.points[0]!;\n const last = group.points[group.points.length - 1]!;\n const parts: string[] = [];\n for (const axis of [\"y\", \"x\"] as const) {\n const meta = axis === \"y\" ? axes.yMeta : axes.xMeta;\n if (meta.kind !== \"metric\")\n continue;\n const label = chartFieldLabel(axis === \"y\" ? axes.yField : axes.xField, meta, locale);\n parts.push(`${label} ${signedDelta(last[axis] - first[axis], meta.unit, locale)}`);\n }\n return parts.length > 0 ? parts.join(\" · \") : undefined;\n}\n/** 带符号的差值:百分比记百分点(`+25pt`),其余按读数自己的单位格式化。 */\nfunction signedDelta(delta: number, unit: string | undefined, locale: RL): string {\n const sign = delta > 0 ? \"+\" : delta < 0 ? \"-\" : \"\";\n const abs = Math.abs(delta);\n if (unit === \"%\") {\n const points = abs * 100;\n return `${sign}${Number.isInteger(points) ? points : points.toFixed(1)}pt`;\n }\n return `${sign}${formatMetricScalar(abs, unit, undefined, locale)}`;\n}\nexport const Series = defineComponent<SeriesProps>({\n dimensions: () => ({}),\n web: () => null,\n text: () => \"\",\n});\nSeries.displayName = \"Series\";\nexport const Chart = defineComponent<ChartProps>({\n /**\n * 与页级 presentation plan 的对接契约:\n * - 每个声明项恰是 { dimension, encoding: { kind: \"series\", mark }, values } 形状,\n * tree.ts 的 collectPageDimensions 按此校验(names 键只在本组件内唯一,它负责拼\n * `${nodeIndex}\\0${handle}` 的页级句柄)并交给 presentation.ts 的\n * allocatePageDimensions 分配 label keyset 与 series 槽位。\n * - 渲染面查询的句柄名与这里声明的键一一对应:按 `by` 字段拆系列时用字段名,\n * 多隐式系列(未绑 by)时用 IMPLICIT_SERIES_HANDLE(\"__chartSeries\")。\n * - values 顺序即 renderer 遍历顺序(seriesDimensionValues 的字典序 / 系列声明序),\n * 与 web 面 `ctx.dimension(handle).at(index)` 的 index 一致。\n * 消费不到任何维度时返回空对象(dimensions 由声明回答「参不参与页级身份分配」)。\n */\n dimensions(props) {\n const chartProps = props as ChartProps;\n const data = chartProps.data;\n if (!data || !isDataset(data))\n return {};\n const specs = seriesNodesOf(chartProps.children);\n const axes = resolveChartAxes(data, chartProps.x, chartProps.y);\n const { series } = mapChartSeries(data, axes, specs, chartProps.series);\n const decls: globalThis.Record<string, DimensionDeclarations[string]> = {};\n for (const spec of specs) {\n if (spec.by === undefined)\n continue;\n const values = seriesDimensionValues(series, spec.by);\n if (values.length === 0)\n continue;\n decls[spec.by] = {\n dimension: spec.by,\n // area 是 FillSeriesPresentation(填充图案),不再折叠成 line。\n encoding: { kind: \"series\", mark: spec.mark },\n values,\n };\n }\n const implicit = series.filter((item) => item.byField === undefined && !item.hidden);\n if (implicit.length > 1) {\n decls[IMPLICIT_SERIES_HANDLE] = {\n dimension: \"series\",\n encoding: { kind: \"series\", mark: implicit[0]!.mark },\n values: implicit.map((item) => item.id),\n };\n }\n return decls;\n },\n web(props, ctx) {\n const data = assertDataset(props.data);\n const specs = seriesNodesOf(props.children);\n validateChart(data, specs, props.x, props.y);\n const axes = resolveChartAxes(data, props.x, props.y);\n const { series, missing } = mapChartSeries(data, axes, specs, props.series);\n const locale = props.locale ?? ctx.locale;\n const node = renderChartWeb(series, axes, locale, ctx, {\n layout: props.layout,\n legend: props.legend,\n grid: props.grid,\n pointTarget: props.pointTarget,\n className: props.className,\n missing,\n });\n return node;\n },\n text(props, ctx) {\n const data = assertDataset(props.data);\n return chartText(data, props, ctx);\n },\n});\nChart.displayName = \"Chart\";\n"]}
1
+ {"version":3,"file":"chart.js","sourceRoot":"","sources":["chart.tsx"],"names":[],"mappings":"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","sourcesContent":["// Chart 原语:消费 Dataset,用 x/y 与 <Series> 映射坐标与 mark(docs/feature/reports/library.md)。\nimport type { CSSProperties, ReactNode } from \"react\";\nimport type { AttemptLocator } from \"../../../attempt-locator.ts\";\nimport { SeriesPatternDefs, seriesClassFromColorVar, seriesClassesFromFill, } from \"../../assets/series-encoding.tsx\";\nimport { defineComponent, type ReportNode, type TextContext, type WebContext } from \"../tree.ts\";\nimport type { ReportTarget } from \"../report.ts\";\nimport type { DimensionDeclarations, DimensionPresentation } from \"../../presentation.ts\";\nimport type { Dataset, DatasetField } from \"../../model/types.ts\";\nimport type { ReportLocale } from \"../../model/locale.ts\";\nimport { countText, localeText, resolveLocalizedText, type ReportLocale as RL } from \"../../model/locale.ts\";\nimport { formatAxisTick, formatMetricScalar, shortestUniqueLabels } from \"../../model/format.ts\";\nimport { axisScale, paddedAxisDomain, placePointLabels, ticksInDomain, tickStepOf } from \"../../model/chart/math.ts\";\nimport { renderCharPlot, renderCoordinateTable } from \"../../model/chart/plot.ts\";\nimport { padDisplay, padStartDisplay, stringWidth, textBar } from \"../../model/text-layout.ts\";\nimport { dataShapeError, targetOfRefs, type ValueProps } from \"./shared.ts\";\nimport { isDataset } from \"../../model/dataset.ts\";\nimport { mapChartSeries, resolveChartAxes, seriesDimensionValues, type ChartAxisBinding, type ChartSeriesOverride, type MappedSeries, type SeriesProps, } from \"./chart-map.ts\";\nexport type { SeriesProps };\nconst WIDTH = 760;\nconst HEIGHT = 400;\nconst MARGIN = { top: 28, right: 32, bottom: 48, left: 64 };\nconst PLOT_W = WIDTH - MARGIN.left - MARGIN.right;\nconst PLOT_H = HEIGHT - MARGIN.top - MARGIN.bottom;\nconst IMPLICIT_SERIES_HANDLE = \"__chartSeries\";\nfunction cx(...parts: (string | undefined | false)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\n/**\n * Chart 内部一个可下钻的点(x/y 映射后);pointTarget 只看 `refs` 与 `key`,不看坐标或 label。\n * `key` 是该点在 Dataset 里的行 key——`Scatter`/`Bars` 等声明了 `point=\"<field>\"` 时,它就是\n * 该字段的原始值(如 experiment id),让上层的 pointTarget 不必反查证据即可拿到点的业务身份。\n */\nexport interface ChartTargetPoint {\n refs: readonly AttemptLocator[];\n key: string;\n}\nexport interface ChartPresentation {\n children?: ReportNode;\n width?: number | `${number}%`;\n height?: number;\n aspect?: number;\n layout?: \"horizontal\" | \"vertical\";\n legend?: boolean;\n tooltip?: boolean;\n grid?: boolean;\n series?: Readonly<Record<string, ChartSeriesOverride>>;\n /**\n * 「这个点该指向谁」由放点的上层决定(library.md「目标与下钻」)。省略时落到全库唯一的\n * 默认规则 `targetOfRefs(point.refs)`——单证据给出 attempt 目标,零或多证据不成链\n * (这正是 refs[0] 快捷写法的已知 bug:多 attempt 点被压成第一个 attempt 的目标,而不是\n * 报不出目标)。\n */\n pointTarget?: (point: ChartTargetPoint) => ReportTarget | undefined;\n locale?: ReportLocale;\n className?: string;\n}\n/** `pointTarget` 缺省时的目标:`targetOfRefs`,把 refs[0] 式的错误收窄成结构化的唯一规则。 */\nfunction resolvePointTarget(point: ChartTargetPoint, pointTarget: ((point: ChartTargetPoint) => ReportTarget | undefined) | undefined): ReportTarget | undefined {\n return pointTarget ? pointTarget(point) : targetOfRefs(point.refs);\n}\nfunction pointHref(point: {\n refs: readonly string[];\n key: string;\n}, ctx: WebContext, pointTarget: ((point: ChartTargetPoint) => ReportTarget | undefined) | undefined): string | undefined {\n const target = resolvePointTarget({ refs: point.refs as readonly AttemptLocator[], key: point.key }, pointTarget);\n return target === undefined ? undefined : ctx.href(target);\n}\nexport type ChartProps = ValueProps<Dataset, ChartPresentation & {\n x: ChartAxisBinding;\n y: ChartAxisBinding;\n}>;\nfunction assertDataset(data: unknown): Dataset {\n if (!isDataset(data)) {\n throw dataShapeError(\"Chart\", \"data\", \"Dataset\", '\"data\" must be a Dataset { fields, rows }');\n }\n return data;\n}\nfunction seriesNodesOf(children: ReportNode | undefined): SeriesProps[] {\n if (children === null || children === undefined || typeof children === \"boolean\")\n return [];\n const out: SeriesProps[] = [];\n const visit = (node: unknown): void => {\n if (node === null || node === undefined || typeof node === \"boolean\")\n return;\n if (Array.isArray(node)) {\n for (const child of node)\n visit(child);\n return;\n }\n if (typeof node === \"object\" && node !== null && \"type\" in node && \"props\" in node) {\n const el = node as {\n type: unknown;\n props: SeriesProps;\n };\n if (el.type === Series)\n out.push(el.props);\n }\n };\n visit(children);\n return out;\n}\nfunction validateChart(dataset: Dataset, specs: SeriesProps[], x: ChartAxisBinding, y: ChartAxisBinding): void {\n if (specs.length === 0) {\n throw new Error(\"Chart needs at least one <Series> child declaring mark and id.\");\n }\n const ids = new Set<string>();\n for (const spec of specs) {\n if (!spec.id || typeof spec.id !== \"string\") {\n throw new Error('Each <Series> needs a non-empty string \"id\".');\n }\n if (ids.has(spec.id)) {\n throw new Error(`Chart contains duplicate <Series id=${JSON.stringify(spec.id)}>.`);\n }\n ids.add(spec.id);\n }\n resolveChartAxes(dataset, x, y);\n}\nfunction lineDash(style: MappedSeries[\"line\"]): string | undefined {\n if (style === \"dashed\")\n return \"6 4\";\n if (style === \"dotted\")\n return \"2 3\";\n return undefined;\n}\nfunction seriesMarkChar(mark: MappedSeries[\"mark\"], index: number): string {\n if (mark === \"scatter\" || mark === \"line\")\n return String.fromCharCode(65 + (index % 26));\n return \"█\";\n}\nfunction chartFieldLabel(field: string, meta: DatasetField, locale: RL): string {\n const dictionary: globalThis.Record<string, Parameters<typeof localeText>[1]> = {\n costUSD: \"experimentList.cost\",\n passRate: \"scopeSummary.passRate\",\n totalScore: \"scopeSummary.totalScore\",\n durationMs: \"experimentList.avgDuration\",\n tokens: \"experimentList.tokens\",\n };\n const base = dictionary[field] ? localeText(locale, dictionary[field]!) : field;\n return meta.unit && meta.format !== \"percent\" ? `${base}(${meta.unit})` : base;\n}\nfunction chartTickUnit(meta: DatasetField): string | undefined {\n return meta.format === \"percent\" ? \"%\" : meta.unit;\n}\n/** 解析点所属 series 句柄与下标;单系列隐式图不声明视觉身份。 */\nfunction dimensionAt(ctx: WebContext, handle: string, index: number): DimensionPresentation | undefined {\n // 语义适配:当前 tree.ts 的 WebContext.dimension 返回 unknown(呈现分配由 renderer 层\n // 接通);这里只做防御性结构收窄,拿不到 PresentedDimension 时回退无视觉身份。\n const value = ctx.dimension(handle) as unknown;\n if (value === undefined || value === null || typeof value !== \"object\")\n return undefined;\n const at = (value as {\n at?: unknown;\n }).at;\n if (typeof at !== \"function\")\n return undefined;\n return (at as (i: number) => DimensionPresentation).call(value, index);\n}\nfunction seriesPresentationOf(mapped: MappedSeries[], series: MappedSeries, point: MappedSeries[\"points\"][number], ctx: WebContext): DimensionPresentation | undefined {\n let handle: string;\n let index: number;\n if (series.byField !== undefined && point.seriesValue !== undefined) {\n handle = series.byField;\n index = seriesDimensionValues(mapped, series.byField).indexOf(point.seriesValue);\n }\n else {\n const ids = mapped.filter((item) => !item.hidden && item.byField === undefined).map((item) => item.id);\n if (ids.length < 2)\n return undefined;\n handle = IMPLICIT_SERIES_HANDLE;\n index = ids.indexOf(series.id);\n }\n if (index < 0)\n return undefined;\n return dimensionAt(ctx, handle, index);\n}\n/** SVG 路径:只挂 series-cN 设 --series;pattern 由 fill 属性 / style 承载。 */\nfunction seriesColorClass(presentation: DimensionPresentation | undefined): string {\n if (!presentation)\n return \"niceeval-series-none\";\n if (presentation.kind === \"color\")\n return seriesClassFromColorVar(presentation.color);\n if (presentation.kind !== \"series\")\n return \"niceeval-series-none\";\n // switch 按 mark 收窄;Fill 的 mark 是 \"bar\"|\"area\" 联合,if/|| 在部分 TS 版本下剔不干净。\n switch (presentation.mark) {\n case \"bar\":\n case \"area\": {\n // 只要色类,不要 HTML 专用的 fill-vN(SVG 用 url(#pattern))。\n const classes = seriesClassesFromFill(presentation.fill).split(\" \");\n return classes.find((c) => c.startsWith(\"niceeval-series-c\") || c === \"niceeval-series-none\") ?? \"niceeval-series-none\";\n }\n case \"line\":\n return seriesClassFromColorVar(presentation.stroke);\n case \"scatter\":\n return seriesClassFromColorVar(presentation.marker.fill);\n }\n}\n/** HTML 横向柱:色类 + fill-vN 图案类(CSS repeating-linear-gradient 等效 SVG pattern)。 */\nfunction seriesHtmlBarClass(presentation: DimensionPresentation | undefined): string {\n if (!presentation)\n return \"niceeval-series-none\";\n if (presentation.kind === \"series\" && (presentation.mark === \"bar\" || presentation.mark === \"area\")) {\n return seriesClassesFromFill(presentation.fill);\n }\n return seriesColorClass(presentation);\n}\n/**\n * 作者在 `<Series line>` 上显式声明的 dashed/dotted **优先于** 页级 variant 的 strokeDasharray。\n * 未声明时消费 LineSeriesPresentation / FillSeriesPresentation 的 strokeDasharray(空串 = 实线)。\n */\nfunction resolveStrokeDasharray(series: MappedSeries, presentation: DimensionPresentation | undefined): string | undefined {\n if (series.line !== undefined)\n return lineDash(series.line);\n if (presentation?.kind === \"series\" && \"strokeDasharray\" in presentation) {\n return presentation.strokeDasharray || undefined;\n }\n return undefined;\n}\n/** SVG 柱/面:pattern fill 必须用 style 压过 `.niceeval-chart-bar { fill: var(--series) }`。 */\nfunction seriesSvgFillStyle(presentation: DimensionPresentation | undefined): CSSProperties | undefined {\n if (presentation?.kind !== \"series\")\n return undefined;\n if (presentation.mark !== \"bar\" && presentation.mark !== \"area\")\n return undefined;\n if (!presentation.fill.startsWith(\"url(\"))\n return undefined;\n return { fill: presentation.fill };\n}\nfunction renderMarkerShape(presentation: DimensionPresentation | undefined, px: number, py: number, colorClass: string, title: ReactNode): ReactNode {\n const marker = presentation?.kind === \"series\" && (presentation.mark === \"scatter\" || presentation.mark === \"line\")\n ? presentation.marker\n : undefined;\n if (!marker) {\n return (<circle className={cx(\"niceeval-chart-dot\", colorClass)} cx={px} cy={py} r={4.5}>\n {title}\n </circle>);\n }\n // path 在 0..12 viewBox;缩放到 ~9px 并居中到 (px, py)。\n return (<path className={cx(\"niceeval-chart-dot\", colorClass)} d={marker.path} transform={`translate(${px} ${py}) scale(0.75) translate(-6 -6)`} fill={marker.fill} stroke=\"var(--panel)\" strokeWidth={1.6}>\n {title}\n </path>);\n}\nfunction legendSwatch(presentation: DimensionPresentation | undefined, mark: MappedSeries[\"mark\"]): ReactNode {\n if (!presentation || presentation.kind !== \"series\") {\n return <span className={cx(\"niceeval-chart-legend-swatch\", \"niceeval-series-none\")}/>;\n }\n // 图例方块跟 series mark 取义:柱/面用填充图案,线用 dash+marker,散点用 marker 形状。\n if (mark === \"bar\" || mark === \"area\") {\n const fillClass = presentation.mark === \"bar\" || presentation.mark === \"area\"\n ? seriesClassesFromFill(presentation.fill)\n : seriesColorClass(presentation);\n return <span className={cx(\"niceeval-chart-legend-swatch\", fillClass)}/>;\n }\n if (mark === \"line\") {\n // 线系图例需要 stroke + marker;presentation 可能是 line 或 scatter(by 切分后 mark 对齐)。\n if (presentation.mark === \"line\") {\n return (<svg className=\"niceeval-chart-legend-swatch-svg\" width=\"16\" height=\"10\" aria-hidden=\"true\">\n <line x1=\"0\" y1=\"5\" x2=\"16\" y2=\"5\" stroke={presentation.stroke} strokeWidth={2} strokeDasharray={presentation.strokeDasharray || undefined}/>\n <path d={presentation.marker.path} transform=\"translate(8 5) scale(0.55) translate(-6 -6)\" fill={presentation.marker.fill}/>\n </svg>);\n }\n if (presentation.mark === \"scatter\") {\n return (<svg className=\"niceeval-chart-legend-swatch-svg\" width=\"16\" height=\"10\" aria-hidden=\"true\">\n <line x1=\"0\" y1=\"5\" x2=\"16\" y2=\"5\" stroke={presentation.marker.fill} strokeWidth={2}/>\n <path d={presentation.marker.path} transform=\"translate(8 5) scale(0.55) translate(-6 -6)\" fill={presentation.marker.fill}/>\n </svg>);\n }\n // fill presentation 配 line mark 的退化:只画色块。\n return <span className={cx(\"niceeval-chart-legend-swatch\", seriesColorClass(presentation))}/>;\n }\n // mark === \"scatter\"\n if (presentation.mark === \"scatter\" || presentation.mark === \"line\") {\n return (<svg className=\"niceeval-chart-legend-swatch-svg\" width=\"10\" height=\"10\" aria-hidden=\"true\">\n <path d={presentation.marker.path} transform=\"translate(5 5) scale(0.7) translate(-6 -6)\" fill={presentation.marker.fill}/>\n </svg>);\n }\n return <span className={cx(\"niceeval-chart-legend-swatch\", seriesColorClass(presentation))}/>;\n}\nfunction metricDisplay(point: MappedSeries[\"points\"][number], axis: \"x\" | \"y\", meta: DatasetField, locale: RL): string {\n if (meta.kind === \"dimension\") {\n return axis === \"x\" ? (point.xLabel ?? point.pointLabel) : (point.yLabel ?? point.pointLabel);\n }\n const value = point[axis];\n const cell = axis === \"x\" ? point.xCell : point.yCell;\n return formatMetricScalar(value, meta.unit, cell?.format, locale);\n}\nfunction renderLegend(mapped: MappedSeries[], visible: MappedSeries[], locale: RL, ctx: WebContext): ReactNode {\n return (<ul className=\"niceeval-chart-legend\">\n {visible.flatMap((series) => {\n const byValues = series.byField ? seriesDimensionValues(mapped, series.byField) : [series.id];\n return byValues.map((value) => {\n const implicitIds = visible\n .filter((item) => item.byField === undefined)\n .map((item) => item.id);\n const handle = series.byField ?? (implicitIds.length > 1 ? IMPLICIT_SERIES_HANDLE : undefined);\n const index = series.byField\n ? seriesDimensionValues(mapped, series.byField).indexOf(value)\n : implicitIds.indexOf(series.id);\n const presentation = handle ? dimensionAt(ctx, handle, index) : undefined;\n const label = presentation?.label ?? (series.label ? resolveLocalizedText(series.label, locale) : series.id);\n return (<li key={`${series.id}:${value}`} className=\"niceeval-chart-legend-item\">\n {legendSwatch(presentation, series.mark)}\n {label}\n </li>);\n });\n })}\n </ul>);\n}\nfunction renderMissingNote(missing: number | undefined, locale: RL): ReactNode {\n if (missing === undefined || missing === 0)\n return null;\n return (<p className=\"niceeval-chart-missing\" title={String(missing)}>\n {countText(locale, \"pointsMissing\", missing)}\n </p>);\n}\nfunction renderHorizontalBarsWeb(mapped: MappedSeries[], visible: MappedSeries[], axes: ReturnType<typeof resolveChartAxes>, locale: RL, ctx: WebContext, options: {\n legend?: boolean;\n pointTarget?: (point: ChartTargetPoint) => ReportTarget | undefined;\n className?: string;\n missing?: number;\n}): ReactNode {\n const entries = visible.flatMap((series) => series.points.map((point) => ({ series, point })));\n const labels = shortestUniqueLabels(entries.map(({ point }) => point.xLabel ?? point.pointLabel));\n const values = entries.map(({ point }) => point.y);\n const boundMax = axes.yMeta.kind === \"metric\" ? axes.yMeta.bounds?.max : undefined;\n const max = boundMax !== undefined && boundMax > 0 ? boundMax : Math.max(0, ...values);\n return (<figure className={cx(\"niceeval-report\", \"niceeval-chart\", \"niceeval-chart--bars-horizontal\", options.className)}>\n {/* 横向 HTML 柱不引用 pattern,但同页可能另有 SVG 图;defs 全局一份无害。 */}\n <SeriesPatternDefs />\n <div className=\"niceeval-chart-bars-heading\">\n {chartFieldLabel(axes.yField, axes.yMeta, locale)}\n </div>\n <ol className=\"niceeval-chart-bars\">\n {entries.map(({ series, point }) => {\n const rawLabel = point.xLabel ?? point.pointLabel;\n const label = labels.get(rawLabel) ?? rawLabel;\n const display = metricDisplay(point, \"y\", axes.yMeta, locale);\n const href = pointHref(point, ctx, options.pointTarget);\n const presentation = seriesPresentationOf(mapped, series, point, ctx);\n const colorClass = seriesHtmlBarClass(presentation);\n const ratio = max > 0 ? Math.max(0, Math.min(1, point.y / max)) : 0;\n const value = (<span className=\"niceeval-chart-bar-value\">\n {display}\n {point.yCell && point.yCell.samples < point.yCell.total ? (<sup>\n {point.yCell.samples}/{point.yCell.total}\n </sup>) : null}\n </span>);\n return (<li key={`${series.id}:${point.key}`} className=\"niceeval-chart-bar-row\">\n <span className=\"niceeval-chart-bar-label\" title={rawLabel}>{label}</span>\n <span className=\"niceeval-chart-bar-track\">\n <span className={cx(\"niceeval-chart-bar-fill\", colorClass)} style={{ width: `${ratio * 100}%` }} title={`${rawLabel}\\n${axes.yField}: ${display}`}/>\n </span>\n {href ? <a className=\"niceeval-locator\" href={href}>{value}</a> : value}\n </li>);\n })}\n </ol>\n {options.legend ? renderLegend(mapped, visible, locale, ctx) : null}\n {renderMissingNote(options.missing, locale)}\n </figure>);\n}\nfunction stackedBarBase(visible: readonly MappedSeries[], target: MappedSeries, x: number): number {\n if (target.stack === undefined)\n return 0;\n let total = 0;\n for (const series of visible) {\n if (series === target)\n break;\n if (series.mark !== \"bar\" || series.stack !== target.stack)\n continue;\n const point = series.points.find((item) => item.x === x);\n if (point)\n total += point.y;\n }\n return total;\n}\nfunction chartYValues(visible: readonly MappedSeries[]): number[] {\n const values: number[] = [];\n const stacks = new Map<string, number>();\n for (const series of visible) {\n for (const point of series.points) {\n if (series.mark === \"bar\" && series.stack !== undefined) {\n const key = `${series.stack}\\0${point.x}`;\n stacks.set(key, (stacks.get(key) ?? 0) + point.y);\n }\n else {\n values.push(point.y);\n }\n }\n }\n values.push(...stacks.values());\n return values;\n}\nfunction renderChartWeb(mapped: MappedSeries[], axes: ReturnType<typeof resolveChartAxes>, locale: RL, ctx: WebContext, options: {\n layout?: \"horizontal\" | \"vertical\";\n legend?: boolean;\n grid?: boolean;\n pointTarget?: (point: ChartTargetPoint) => ReportTarget | undefined;\n className?: string;\n missing?: number;\n}): ReactNode {\n const visible = mapped.filter((s) => !s.hidden);\n const allPoints = visible.flatMap((s) => s.points);\n if (allPoints.length === 0) {\n return (<figure className={cx(\"niceeval-report\", \"niceeval-chart\", \"niceeval-chart--scatter\", options.className)}>\n <p className=\"niceeval-chart-empty niceeval-missing\">{localeText(locale, \"cell.missing\")}</p>\n {renderMissingNote(options.missing, locale)}\n </figure>);\n }\n if (options.layout === \"horizontal\" && visible.every((series) => series.mark === \"bar\")) {\n return renderHorizontalBarsWeb(mapped, visible, axes, locale, ctx, options);\n }\n const xBounds = axes.xMeta.kind === \"metric\" ? axes.xMeta.bounds : undefined;\n const yBounds = axes.yMeta.kind === \"metric\" ? axes.yMeta.bounds : undefined;\n const hasVerticalFill = visible.some((series) => series.mark === \"bar\" || series.mark === \"area\");\n const yValues = [...chartYValues(visible), ...(hasVerticalFill ? [0] : [])];\n const xScale = axisScale(allPoints.map((p) => p.x), xBounds, MARGIN.left, MARGIN.left + PLOT_W, axes.xMeta.better === \"lower\");\n const yScale = axisScale(yValues, yBounds, MARGIN.top + PLOT_H, MARGIN.top, axes.yMeta.better === \"lower\");\n const labelByKey = shortestUniqueLabels(allPoints.map((p) => p.pointLabel));\n const xLabel = chartFieldLabel(axes.xField, axes.xMeta, locale);\n const yLabel = chartFieldLabel(axes.yField, axes.yMeta, locale);\n const drawable = visible.flatMap((series) => series.points.map((point) => {\n const presentation = seriesPresentationOf(mapped, series, point, ctx);\n return {\n ...point,\n sourceSeriesId: series.id,\n label: labelByKey.get(point.pointLabel) ?? point.pointLabel,\n px: xScale.scale(point.x),\n py: yScale.scale(point.y),\n presentation,\n seriesClass: seriesColorClass(presentation),\n };\n }));\n const labels = placePointLabels(drawable.map((p) => ({ cx: p.px, cy: p.py, width: p.label.length * 6.4 + 10 })), { x0: 2, y0: 2, x1: WIDTH - 2, y1: HEIGHT - 2 });\n return (<figure className={cx(\"niceeval-report\", \"niceeval-chart\", \"niceeval-chart--scatter\", options.className)}>\n <SeriesPatternDefs />\n <svg className=\"niceeval-chart-svg\" viewBox={`0 0 ${WIDTH} ${HEIGHT}`} role=\"img\" aria-label={`${axes.xField} × ${axes.yField}`}>\n {options.grid !== false ? (<g className=\"niceeval-chart-grid\">\n {yScale.ticks.map((tick) => (<line key={`gy${tick}`} x1={MARGIN.left} x2={MARGIN.left + PLOT_W} y1={yScale.scale(tick)} y2={yScale.scale(tick)}/>))}\n {xScale.ticks.map((tick) => (<line key={`gx${tick}`} y1={MARGIN.top} y2={MARGIN.top + PLOT_H} x1={xScale.scale(tick)} x2={xScale.scale(tick)}/>))}\n </g>) : null}\n <g className=\"niceeval-chart-axis niceeval-chart-axis-y\">\n {(axes.yMeta.kind === \"dimension\"\n ? [...new Set(drawable.map((point) => point.y))]\n : yScale.ticks).map((tick) => (<text key={`ay${tick}`} className=\"niceeval-chart-tick\" x={MARGIN.left - 8} y={yScale.scale(tick) + 3} textAnchor=\"end\">\n {axes.yMeta.kind === \"dimension\"\n ? drawable.find((point) => point.y === tick)?.yLabel\n : formatAxisTick(tick, tickStepOf(yScale.ticks), chartTickUnit(axes.yMeta))}\n </text>))}\n </g>\n <g className=\"niceeval-chart-axis niceeval-chart-axis-x\">\n {(axes.xMeta.kind === \"dimension\"\n ? [...new Set(drawable.map((point) => point.x))]\n : xScale.ticks).map((tick) => (<text key={`ax${tick}`} className=\"niceeval-chart-tick\" x={xScale.scale(tick)} y={MARGIN.top + PLOT_H + 16} textAnchor=\"middle\">\n {axes.xMeta.kind === \"dimension\"\n ? drawable.find((point) => point.x === tick)?.xLabel\n : formatAxisTick(tick, tickStepOf(xScale.ticks), chartTickUnit(axes.xMeta))}\n </text>))}\n </g>\n {axes.xMeta.better !== undefined && axes.yMeta.better !== undefined ? (<text className=\"niceeval-chart-better-hint\" x={MARGIN.left + PLOT_W - 6} y={MARGIN.top + 14} textAnchor=\"end\">\n {localeText(locale, \"scatter.betterUpperRight\")}\n </text>) : null}\n <text className=\"niceeval-chart-xlabel\" x={MARGIN.left + PLOT_W / 2} y={HEIGHT - 8} textAnchor=\"middle\">\n {xLabel}\n </text>\n <text className=\"niceeval-chart-ylabel\" x={14} y={MARGIN.top + PLOT_H / 2} textAnchor=\"middle\" transform={`rotate(-90 14 ${MARGIN.top + PLOT_H / 2})`}>\n {yLabel}\n </text>\n {visible.flatMap((series) => {\n const values = series.byField ? seriesDimensionValues(mapped, series.byField) : [series.id];\n return values.map((value) => {\n const seriesPoints = drawable.filter((p) => p.sourceSeriesId === series.id &&\n (series.byField === undefined || p.seriesValue === value));\n const ordered = series.connect ? [...seriesPoints].sort((a, b) => a.x - b.x) : seriesPoints;\n const seriesClassName = ordered[0]?.seriesClass ?? \"niceeval-series-none\";\n const seriesPresentation = ordered[0]?.presentation;\n const baseline = yScale.scale(0);\n const barGroups = [...new Set(visible\n .filter((item) => item.mark === \"bar\")\n .map((item) => item.stack ?? `series:${item.id}`))];\n const barGroup = series.stack ?? `series:${series.id}`;\n const groupIndex = Math.max(0, barGroups.indexOf(barGroup));\n const totalBarWidth = Math.max(8, Math.min(48, PLOT_W / Math.max(1, allPoints.length)));\n const barWidth = totalBarWidth / Math.max(1, barGroups.length);\n const dash = resolveStrokeDasharray(series, seriesPresentation);\n const areaFillStyle = seriesSvgFillStyle(seriesPresentation);\n return (<g key={`${series.id}:${value}`} className={cx(\"niceeval-chart-series\", seriesClassName)} data-series={`${series.id}:${value}`}>\n {series.mark === \"area\" && ordered.length > 1 ? (<polygon className=\"niceeval-chart-area\" style={areaFillStyle} points={[\n `${ordered[0]!.px},${baseline}`,\n ...ordered.map((point) => `${point.px},${point.py}`),\n `${ordered[ordered.length - 1]!.px},${baseline}`,\n ].join(\" \")}/>) : null}\n {(series.mark === \"line\" || series.mark === \"area\" || series.connect) && ordered.length > 1 ? (<polyline className=\"niceeval-chart-line\" points={ordered.map((p) => `${p.px},${p.py}`).join(\" \")} strokeDasharray={dash}/>) : null}\n {ordered.map((p) => {\n const placed = labels[drawable.indexOf(p)];\n const href = pointHref(p, ctx, options.pointTarget);\n let shape: ReactNode;\n if (series.mark === \"bar\") {\n const baseValue = stackedBarBase(visible, series, p.x);\n const baseY = yScale.scale(baseValue);\n const topY = yScale.scale(baseValue + p.y);\n shape = (<rect className={cx(\"niceeval-chart-bar\", p.seriesClass)} style={seriesSvgFillStyle(p.presentation)} x={p.px - totalBarWidth / 2 + groupIndex * barWidth} y={Math.min(topY, baseY)} width={barWidth} height={Math.max(1, Math.abs(baseY - topY))}>\n <title>{`${p.pointLabel}\\n${series.id}: ${metricDisplay(p, \"y\", axes.yMeta, locale)}`}</title>\n </rect>);\n }\n else {\n shape = renderMarkerShape(p.presentation, p.px, p.py, p.seriesClass, <title>{`${p.pointLabel}\\n${axes.xField}: ${metricDisplay(p, \"x\", axes.xMeta, locale)}\\n${axes.yField}: ${metricDisplay(p, \"y\", axes.yMeta, locale)}`}</title>);\n }\n return (<g key={p.key} className=\"niceeval-chart-point\">\n {href ? <a href={href}>{shape}</a> : shape}\n {series.mark === \"scatter\" && placed ? (<text className=\"niceeval-chart-point-label\" x={placed.x} y={placed.y} textAnchor={placed.anchor}>\n {p.label}\n </text>) : null}\n </g>);\n })}\n </g>);\n });\n })}\n </svg>\n {options.legend ? renderLegend(mapped, visible, locale, ctx) : null}\n {renderMissingNote(options.missing, locale)}\n </figure>);\n}\nfunction renderBarsText(visible: MappedSeries[], axes: ReturnType<typeof resolveChartAxes>, locale: RL, ctx: TextContext): string {\n const entries: Array<{\n rawLabel: string;\n value: number;\n display: string;\n }> = [];\n const stacked = new Map<string, {\n rawLabel: string;\n value: number;\n parts: string[];\n }>();\n for (const series of visible) {\n for (const point of series.points) {\n const rawLabel = point.xLabel ?? point.pointLabel;\n const display = metricDisplay(point, \"y\", axes.yMeta, locale);\n if (series.stack !== undefined) {\n const key = `${series.stack}\\0${point.x}`;\n let entry = stacked.get(key);\n if (!entry) {\n entry = { rawLabel, value: 0, parts: [] };\n stacked.set(key, entry);\n }\n entry.value += point.y;\n entry.parts.push(`${series.id}=${display}`);\n }\n else {\n entries.push({\n rawLabel,\n value: point.y,\n display: point.yCell && point.yCell.samples < point.yCell.total\n ? `${display} ${point.yCell.samples}/${point.yCell.total}`\n : display,\n });\n }\n }\n }\n entries.push(...[...stacked.values()].map((entry) => ({\n rawLabel: entry.rawLabel,\n value: entry.value,\n display: entry.parts.join(\" · \"),\n })));\n const rawLabels = entries.map((entry) => entry.rawLabel);\n const labels = shortestUniqueLabels(rawLabels);\n const displays = entries.map((entry) => entry.display);\n const labelWidth = Math.max(0, ...rawLabels.map((label) => stringWidth(labels.get(label) ?? label)));\n const valueWidth = Math.max(0, ...displays.map(stringWidth));\n const barWidth = Math.max(8, Math.min(24, ctx.width - labelWidth - valueWidth - 4));\n const boundMax = axes.yMeta.kind === \"metric\" ? axes.yMeta.bounds?.max : undefined;\n const max = boundMax !== undefined && boundMax > 0\n ? boundMax\n : Math.max(0, ...entries.map((entry) => entry.value));\n const heading = chartFieldLabel(axes.yField, axes.yMeta, locale);\n return [\n `${padDisplay(\"\", labelWidth)} ${padDisplay(heading, barWidth)} ${padStartDisplay(\"\", valueWidth)}`,\n ...entries.map((entry, index) => {\n const rawLabel = rawLabels[index]!;\n const label = labels.get(rawLabel) ?? rawLabel;\n const ratio = max > 0 ? Math.max(0, Math.min(1, entry.value / max)) : 0;\n return `${padDisplay(label, labelWidth)} ${textBar(ratio, barWidth)} ${padStartDisplay(displays[index]!, valueWidth)}`;\n }),\n ].join(\"\\n\");\n}\nfunction chartText(dataset: Dataset, props: ChartProps & {\n x: ChartAxisBinding;\n y: ChartAxisBinding;\n}, ctx: TextContext): string {\n const locale = props.locale ?? ctx.locale;\n const specs = seriesNodesOf(props.children);\n validateChart(dataset, specs, props.x, props.y);\n const axes = resolveChartAxes(dataset, props.x, props.y);\n const { series, missing } = mapChartSeries(dataset, axes, specs, props.series);\n const visible = series.filter((s) => !s.hidden);\n const points = visible.flatMap((s) => s.points);\n if (points.length === 0) {\n return localeText(locale, \"cell.missing\");\n }\n if (visible.every((item) => item.mark === \"bar\")) {\n const bars = renderBarsText(visible, axes, locale, ctx);\n const missingNote = missing > 0 ? `\\n${countText(locale, \"pointsMissing\", missing)}` : \"\";\n return `${bars}${missingNote}`;\n }\n const xBounds = axes.xMeta.kind === \"metric\" ? axes.xMeta.bounds : undefined;\n const yBounds = axes.yMeta.kind === \"metric\" ? axes.yMeta.bounds : undefined;\n const xDomain = paddedAxisDomain(points.map((p) => p.x), xBounds);\n const yDomain = paddedAxisDomain(points.map((p) => p.y), yBounds);\n // 标记字母按图例顺序逐点分配:series 按显示键字典序,series 内按 x 原始值升序\n // (docs/feature/reports/cli.md)。按 series 下标分配会让一个 series 的\n // 全部点共用一个字母,图上读不出哪个点是哪一行。\n const groups = legendGroups(visible);\n const marks = new Map<string, string>();\n let letter = 0;\n for (const group of groups) {\n for (const point of group.points) {\n marks.set(point.key, group.mark === \"bar\" ? \"█\" : String.fromCharCode(65 + (letter % 26)));\n if (group.mark !== \"bar\")\n letter++;\n }\n }\n const lines = visible\n .filter((s) => s.connect && (s.mark === \"line\" || s.mark === \"scatter\" || s.mark === \"area\"))\n .map((s) => [...s.points].sort((a, b) => a.x - b.x).map((p) => ({ x: p.x, y: p.y })));\n const plot = renderCharPlot({\n width: Math.min(ctx.width, 72),\n height: 9,\n points: points.map((p) => ({ mark: marks.get(p.key) ?? \"•\", x: p.x, y: p.y })),\n xDomain,\n yDomain,\n lines,\n xLabel: axes.xField,\n yLabel: axes.yField,\n // 刻度精度跟随整齐步长,与 web 面同一支:传值域跨度会让 $0.35045992 这种原始值直接\n // 印到轴上(步长的小数位数才是精度)。\n formatX: (v) => axes.xMeta.kind === \"dimension\"\n ? (points.find((point) => point.x === Math.round(v))?.xLabel ?? \"\")\n : formatAxisTick(v, tickStepOf(ticksInDomain(xDomain[0], xDomain[1], 5)), chartTickUnit(axes.xMeta)),\n formatY: (v) => axes.yMeta.kind === \"dimension\"\n ? (points.find((point) => point.y === Math.round(v))?.yLabel ?? \"\")\n : formatAxisTick(v, tickStepOf(ticksInDomain(yDomain[0], yDomain[1], 5)), chartTickUnit(axes.yMeta)),\n invertX: axes.xMeta.better === \"lower\",\n invertY: axes.yMeta.better === \"lower\",\n });\n const values = renderScatterValuesText(groups, marks, axes, locale);\n const missingNote = missing > 0 ? `\\n${countText(locale, \"pointsMissing\", missing)}` : \"\";\n return `${plot}\\n\\n${values}${missingNote}`;\n}\n/** 图例分组:一个显示键一组。series 绑了维度时按维度值分组,否则整个 series 一组。 */\ninterface LegendGroup {\n readonly key: string;\n readonly mark: MappedSeries[\"mark\"];\n readonly connect: boolean;\n readonly points: readonly MappedSeries[\"points\"][number][];\n}\n/** 显示键字典序,组内按 x 原始值升序——图例顺序即标记字母顺序,两处不各自排序。 */\nfunction legendGroups(visible: readonly MappedSeries[]): LegendGroup[] {\n const byKey = new Map<string, {\n key: string;\n mark: MappedSeries[\"mark\"];\n connect: boolean;\n points: MappedSeries[\"points\"][number][];\n }>();\n for (const series of visible) {\n for (const point of series.points) {\n const key = point.seriesValue ?? series.id;\n let group = byKey.get(key);\n if (group === undefined) {\n group = { key, mark: series.mark, connect: series.connect === true, points: [] };\n byKey.set(key, group);\n }\n group.points.push(point);\n }\n }\n const groups = [...byKey.values()];\n groups.sort((a, b) => a.key.localeCompare(b.key));\n for (const group of groups)\n group.points.sort((a, b) => a.x - b.x);\n return groups;\n}\n/**\n * 散点 / 折线的 text 面读值块:两轴都声明了 better 时先给一行方向提示,随后一张读值表\n * (标记字母、系列、点名与两轴终值),最后给连线系列的位移摘要。字母、系列顺序与图上一致。\n * 位移摘要的符号是原始差值,方向好坏由读数的 better 语义判断,摘要不替读者下结论。\n */\nfunction renderScatterValuesText(groups: readonly LegendGroup[], marks: ReadonlyMap<string, string>, axes: ReturnType<typeof resolveChartAxes>, locale: RL): string {\n const blocks: string[] = [];\n if (axes.xMeta.better !== undefined && axes.yMeta.better !== undefined) {\n blocks.push(localeText(locale, \"scatter.betterUpperRight\"));\n }\n const multiSeries = groups.length > 1;\n const rows = groups.flatMap((group) => group.points.map((point) => ({\n mark: marks.get(point.key) ?? \"•\",\n ...(multiSeries ? { series: group.key } : {}),\n key: point.pointLabel,\n x: metricDisplay(point, \"x\", axes.xMeta, locale),\n y: metricDisplay(point, \"y\", axes.yMeta, locale),\n })));\n blocks.push(renderCoordinateTable(rows, {\n mark: \"\",\n ...(multiSeries ? { series: localeText(locale, \"chart.series\") } : {}),\n key: \"key\",\n x: axes.xField,\n y: axes.yField,\n }));\n const shifts = groups\n .filter((group) => group.connect)\n .map((group) => {\n const summary = shiftSummary(group, axes, locale);\n if (summary === undefined)\n return undefined;\n const path = group.points.map((point) => marks.get(point.key) ?? \"•\").join(\" → \");\n return `${group.key} ${path} ${summary}`;\n })\n .filter((line): line is string => line !== undefined);\n if (shifts.length > 0)\n blocks.push(shifts.join(\"\\n\"));\n return blocks.join(\"\\n\\n\");\n}\n/** 一条线首尾两点的原始差值:`通过率 +25pt · 成本 +$0.20`。百分比读数按百分点报,不按倍数。 */\nfunction shiftSummary(group: LegendGroup, axes: ReturnType<typeof resolveChartAxes>, locale: RL): string | undefined {\n if (group.points.length < 2)\n return undefined;\n const first = group.points[0]!;\n const last = group.points[group.points.length - 1]!;\n const parts: string[] = [];\n for (const axis of [\"y\", \"x\"] as const) {\n const meta = axis === \"y\" ? axes.yMeta : axes.xMeta;\n if (meta.kind !== \"metric\")\n continue;\n const label = chartFieldLabel(axis === \"y\" ? axes.yField : axes.xField, meta, locale);\n parts.push(`${label} ${signedDelta(last[axis] - first[axis], meta.unit, locale)}`);\n }\n return parts.length > 0 ? parts.join(\" · \") : undefined;\n}\n/** 带符号的差值:百分比记百分点(`+25pt`),其余按读数自己的单位格式化。 */\nfunction signedDelta(delta: number, unit: string | undefined, locale: RL): string {\n const sign = delta > 0 ? \"+\" : delta < 0 ? \"-\" : \"\";\n const abs = Math.abs(delta);\n if (unit === \"%\") {\n const points = abs * 100;\n return `${sign}${Number.isInteger(points) ? points : points.toFixed(1)}pt`;\n }\n return `${sign}${formatMetricScalar(abs, unit, undefined, locale)}`;\n}\nexport const Series = defineComponent<SeriesProps>({\n dimensions: () => ({}),\n web: () => null,\n text: () => \"\",\n});\nSeries.displayName = \"Series\";\nexport const Chart = defineComponent<ChartProps>({\n /**\n * 与页级 presentation plan 的对接契约:\n * - 每个声明项恰是 { dimension, encoding: { kind: \"series\", mark }, values } 形状,\n * tree.ts 的 collectPageDimensions 按此校验(names 键只在本组件内唯一,它负责拼\n * `${nodeIndex}\\0${handle}` 的页级句柄)并交给 presentation.ts 的\n * allocatePageDimensions 分配 label keyset 与 series 槽位。\n * - 渲染面查询的句柄名与这里声明的键一一对应:按 `by` 字段拆系列时用字段名,\n * 多隐式系列(未绑 by)时用 IMPLICIT_SERIES_HANDLE(\"__chartSeries\")。\n * - values 顺序即 renderer 遍历顺序(seriesDimensionValues 的字典序 / 系列声明序),\n * 与 web 面 `ctx.dimension(handle).at(index)` 的 index 一致。\n * 消费不到任何维度时返回空对象(dimensions 由声明回答「参不参与页级身份分配」)。\n */\n dimensions(props) {\n const chartProps = props as ChartProps;\n const data = chartProps.data;\n if (!data || !isDataset(data))\n return {};\n const specs = seriesNodesOf(chartProps.children);\n const axes = resolveChartAxes(data, chartProps.x, chartProps.y);\n const { series } = mapChartSeries(data, axes, specs, chartProps.series);\n const decls: globalThis.Record<string, DimensionDeclarations[string]> = {};\n for (const spec of specs) {\n if (spec.by === undefined)\n continue;\n const values = seriesDimensionValues(series, spec.by);\n if (values.length === 0)\n continue;\n decls[spec.by] = {\n dimension: spec.by,\n // area 是 FillSeriesPresentation(填充图案),不再折叠成 line。\n encoding: { kind: \"series\", mark: spec.mark },\n values,\n };\n }\n const implicit = series.filter((item) => item.byField === undefined && !item.hidden);\n if (implicit.length > 1) {\n decls[IMPLICIT_SERIES_HANDLE] = {\n dimension: \"series\",\n encoding: { kind: \"series\", mark: implicit[0]!.mark },\n values: implicit.map((item) => item.id),\n };\n }\n return decls;\n },\n web(props, ctx) {\n const data = assertDataset(props.data);\n const specs = seriesNodesOf(props.children);\n validateChart(data, specs, props.x, props.y);\n const axes = resolveChartAxes(data, props.x, props.y);\n const { series, missing } = mapChartSeries(data, axes, specs, props.series);\n const locale = props.locale ?? ctx.locale;\n const node = renderChartWeb(series, axes, locale, ctx, {\n layout: props.layout,\n legend: props.legend,\n grid: props.grid,\n pointTarget: props.pointTarget,\n className: props.className,\n missing,\n });\n return node;\n },\n text(props, ctx) {\n const data = assertDataset(props.data);\n return chartText(data, props, ctx);\n },\n});\nChart.displayName = \"Chart\";\n"]}
@@ -14,6 +14,7 @@ function readAxisField(row, field, path, external) {
14
14
  cell: raw,
15
15
  meta: {
16
16
  ...(raw.unit !== undefined ? { unit: raw.unit } : {}),
17
+ ...(raw.format !== undefined ? { format: raw.format } : {}),
17
18
  ...(raw.better !== undefined ? { better: raw.better } : {}),
18
19
  ...(raw.bounds !== undefined ? { bounds: raw.bounds } : {}),
19
20
  },
@@ -1 +1 @@
1
- {"version":3,"file":"points-dataset.js","sourceRoot":"","sources":["points-dataset.ts"],"names":[],"mappings":";;AA6FA,0CAqEC;AA/JD,uDAAyE;AAEzE,2CAA0D;AAa1D,SAAS,aAAa,CAAC,GAAuC,EAAE,KAAa,EAAE,IAAY,EAAE,QAAiB;IAK1G,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,IAAI,IAAA,0BAAa,EAAC,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,QAAQ,IAAI,sGAAsG,CAAC,CAAC;QAC7J,CAAC;QACD,OAAO;YACH,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,GAAG;YACT,IAAI,EAAE;gBACF,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9D;SACJ,CAAC;IACN,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,QAAQ,IAAI,6EAA6E;gBAC1H,8FAA8F,CAAC,CAAC;QACxG,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,GAAG,KAAK,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC3B,uEAAuE;QACvE,mEAAmE;QACnE,4CAA4C;QAC5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,QAAQ,IAAI,wBAAwB;QACrE,CAAC,QAAQ,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,qBAAqB,CAAC;QAC1E,SAAS,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;AACxD,CAAC;AACD,SAAS,YAAY,CAAC,GAAuC;IACzD,IAAI,KAAK,CAAC,OAAO,CAAE,GAA4B,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,OAAQ,GAA4B,CAAC,IAA8B,CAAC;IACxE,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,0BAAa,CAAC,CAAC;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QACpB,OAAO,SAAS,CAAC;IACrB,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AACD,SAAS,iBAAiB,CAAC,GAAY,EAAE,IAAY;IACjD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,gCAAgC,CAAC,CAAC;IAC7D,CAAC;IACD,qEAAqE;IACrE,yEAAyE;IACzE,IAAI,YAAY,CAAC,GAAyC,CAAC,KAAK,SAAS,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,yIAAyI,CAAC,CAAC;IACtK,CAAC;AACL,CAAC;AACD,iFAAiF;AACjF,SAAS,oBAAoB,CAAC,GAAY;IACtC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QACrD,OAAO,SAAS,CAAC;IACrB,MAAM,IAAI,GAAG,YAAY,CAAC,GAAyC,CAAC,CAAC;IACrE,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QACvC,OAAO,SAAS,CAAC;IACrB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QACnC,OAAO,SAAS,CAAC;IACrB,OAAO,IAAA,uCAA2B,EAAC,KAAoB,CAAC,CAAC;AAC7D,CAAC;AACD;;;GAGG;AACH,SAAgB,eAAe,CAAC,MAAyB,EAAE,MAAyB;IAChF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,QAAQ,GAAqD,EAAE,CAAC;IACtE,MAAM,QAAQ,GAAqD,EAAE,CAAC;IACtE,IAAI,KAAK,GAAa,QAAQ,CAAC;IAC/B,IAAI,KAAK,GAAa,QAAQ,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,IAAI,MAAM,CAAC,MAAM;QACb,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,KAAK;QACZ,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAmC,EAAE,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QACvB,IAAI,CAAC,QAAQ;YACT,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;aAC5B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oBAAoB,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,MAAM,GAAG,GAAyC,CAAC;QACzD,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1D,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;QACf,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;YACtB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;YACtB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,MAAM,GAA4C;YACpD,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI;YAClB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI;SACrB,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC;gBACpC,SAAS;YACb,MAAM,GAAG,GAAI,GAA0C,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjG,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,GAAG,kDAAkD,CAAC,CAAC;YACtF,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QACD,iDAAiD;QACjD,2BAA2B;QAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,KAAK,SAAS;YAClC,CAAC,CAAC,MAAM,CAAE,GAA0C,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC,QAAQ;gBACP,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;gBAC3C,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC;YACpC,SAAS;QACb,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW;QAChC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE;QAC5D,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IAC5E,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW;QAChC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE;QAC5D,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IAC5E,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC","sourcesContent":["// EvidenceRow / external points → Dataset,供 Chart 内核绘制。\n// 契约见 docs/feature/reports/library.md「图表」、components/charts/README.md。\nimport type { Dataset, DatasetField, DatasetValue } from \"../../model/types.ts\";\nimport { isMetricValue, type EvidenceRow } from \"../../model/metrics.ts\";\nimport type { EvidenceRef } from \"../../../analysis/index.ts\";\nimport { attemptLocatorOfEvidenceRef } from \"./shared.ts\";\nexport type ExternalScalar = string | number | boolean | null;\nexport type ExternalPoint = Readonly<globalThis.Record<string, ExternalScalar>>;\nexport interface PointsChartFields {\n x: string;\n y: string;\n /** 系列拆分键(docs 的 color / series)。 */\n series?: string;\n /** 点身份键(docs 的 point)。 */\n point?: string;\n external?: boolean;\n}\ntype AxisKind = \"metric\" | \"dimension\";\nfunction readAxisField(row: globalThis.Record<string, unknown>, field: string, path: string, external: boolean): {\n kind: AxisKind;\n cell: DatasetValue;\n meta: Pick<DatasetField, \"unit\" | \"better\" | \"bounds\">;\n} {\n const raw = row[field];\n if (isMetricValue(raw)) {\n if (external) {\n throw new Error(`Chart field \"${field}\" at ${path} is a MetricValue but this chart declared external: true — external points only accept JSON scalars.`);\n }\n return {\n kind: \"metric\",\n cell: raw,\n meta: {\n ...(raw.unit !== undefined ? { unit: raw.unit } : {}),\n ...(raw.better !== undefined ? { better: raw.better } : {}),\n ...(raw.bounds !== undefined ? { bounds: raw.bounds } : {}),\n },\n };\n }\n if (typeof raw === \"number\" && Number.isFinite(raw)) {\n if (!external) {\n throw new Error(`Chart field \"${field}\" at ${path} is a bare number — Sample-derived charts require MetricValue (with refs). ` +\n `Pass MetricValue from aggregate()/rollup(), or declare external: true for non-Sample series.`);\n }\n return { kind: \"metric\", cell: raw, meta: {} };\n }\n if (typeof raw === \"string\" || typeof raw === \"boolean\") {\n return { kind: \"dimension\", cell: String(raw), meta: {} };\n }\n if (raw === null && external) {\n // External data has no Analysis provenance. Preserve null as a neutral\n // Dataset scalar so the chart records a missing coordinate without\n // manufacturing a Report-owned MetricValue.\n return { kind: \"metric\", cell: null, meta: {} };\n }\n throw new Error(`Chart field \"${field}\" at ${path} must be a MetricValue` +\n (external ? \", finite number, or category string\" : \" or category string\") +\n `, got ${raw === null ? \"null\" : typeof raw}.`);\n}\nfunction evidenceRefs(row: globalThis.Record<string, unknown>): readonly EvidenceRef[] | undefined {\n if (Array.isArray((row as Partial<EvidenceRow>).refs)) {\n return (row as Partial<EvidenceRow>).refs as readonly EvidenceRef[];\n }\n const metrics = Object.values(row).filter(isMetricValue);\n if (metrics.length === 0)\n return undefined;\n return metrics.flatMap((metric) => metric.refs);\n}\nfunction assertEvidenceRow(row: unknown, path: string): asserts row is globalThis.Record<string, unknown> {\n if (!row || typeof row !== \"object\" || Array.isArray(row)) {\n throw new Error(`${path} must be an object EvidenceRow`);\n }\n // aggregate() rows keep refs on their Analysis-owned MetricValues. A\n // presentation EvidenceRow may additionally hoist their union to `refs`.\n if (evidenceRefs(row as globalThis.Record<string, unknown>) === undefined) {\n throw new Error(`${path} has neither EvidenceRow.refs nor an Analysis MetricValue — Sample-derived chart points must carry evidence, or declare external: true.`);\n }\n}\n/** closed EvidenceRow 第一条 ref 的 attempt locator;ref 不是 attempt 时退回 undefined。 */\nfunction firstEvidenceLocator(row: unknown): string | undefined {\n if (!row || typeof row !== \"object\" || Array.isArray(row))\n return undefined;\n const refs = evidenceRefs(row as globalThis.Record<string, unknown>);\n if (refs === undefined || refs.length === 0)\n return undefined;\n const first = refs[0];\n if (!first || typeof first !== \"object\")\n return undefined;\n return attemptLocatorOfEvidenceRef(first as EvidenceRef);\n}\n/**\n * 把普通 points 行转成 Chart 内核消费的 Dataset。\n * 非 external:校验 EvidenceRow.refs 与 MetricValue;external:只收 JSON 标量。\n */\nexport function pointsToDataset(points: readonly object[], fields: PointsChartFields): Dataset {\n const external = fields.external === true;\n if (!Array.isArray(points)) {\n throw new Error('Chart \"points\" must be an array');\n }\n const xMetaAcc: Pick<DatasetField, \"unit\" | \"better\" | \"bounds\"> = {};\n const yMetaAcc: Pick<DatasetField, \"unit\" | \"better\" | \"bounds\"> = {};\n let xKind: AxisKind = \"metric\";\n let yKind: AxisKind = \"metric\";\n const dimNames = new Set<string>();\n if (fields.series)\n dimNames.add(fields.series);\n if (fields.point)\n dimNames.add(fields.point);\n const rows: Array<Dataset[\"rows\"][number]> = [];\n for (let i = 0; i < points.length; i++) {\n const path = `points[${i}]`;\n const row = points[i]!;\n if (!external)\n assertEvidenceRow(row, path);\n else if (!row || typeof row !== \"object\" || Array.isArray(row)) {\n throw new Error(`${path} must be an object`);\n }\n const record = row as globalThis.Record<string, unknown>;\n const x = readAxisField(record, fields.x, path, external);\n const y = readAxisField(record, fields.y, path, external);\n xKind = x.kind;\n yKind = y.kind;\n Object.assign(xMetaAcc, x.meta);\n Object.assign(yMetaAcc, y.meta);\n if (x.kind === \"dimension\")\n dimNames.add(fields.x);\n if (y.kind === \"dimension\")\n dimNames.add(fields.y);\n const values: globalThis.Record<string, DatasetValue> = {\n [fields.x]: x.cell,\n [fields.y]: y.cell,\n };\n for (const dim of dimNames) {\n if (dim === fields.x || dim === fields.y)\n continue;\n const raw = (row as globalThis.Record<string, unknown>)[dim];\n if (typeof raw !== \"string\" && typeof raw !== \"number\" && typeof raw !== \"boolean\" && raw !== null) {\n throw new Error(`${path}.${dim} must be a string/number/boolean dimension value`);\n }\n values[dim] = String(raw);\n }\n // 语义适配:行身份优先取显式 point 字段;缺失时落到第一条 evidence ref 的\n // attempt locator;再缺才退回行序。\n const key = fields.point !== undefined\n ? String((row as globalThis.Record<string, unknown>)[fields.point])\n : !external\n ? (firstEvidenceLocator(row) ?? `row-${i}`)\n : `row-${i}`;\n rows.push({ key, values });\n }\n const fieldList: DatasetField[] = [];\n for (const dim of dimNames) {\n if (dim === fields.x || dim === fields.y)\n continue;\n fieldList.push({ name: dim, kind: \"dimension\", valueType: \"string\" });\n }\n fieldList.push(xKind === \"dimension\"\n ? { name: fields.x, kind: \"dimension\", valueType: \"string\" }\n : { name: fields.x, kind: \"metric\", valueType: \"number\", ...xMetaAcc });\n fieldList.push(yKind === \"dimension\"\n ? { name: fields.y, kind: \"dimension\", valueType: \"string\" }\n : { name: fields.y, kind: \"metric\", valueType: \"number\", ...yMetaAcc });\n return { fields: fieldList, rows };\n}\n"]}
1
+ {"version":3,"file":"points-dataset.js","sourceRoot":"","sources":["points-dataset.ts"],"names":[],"mappings":"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","sourcesContent":["// EvidenceRow / external points → Dataset,供 Chart 内核绘制。\n// 契约见 docs/feature/reports/library.md「图表」、components/charts/README.md。\nimport type { Dataset, DatasetField, DatasetValue } from \"../../model/types.ts\";\nimport { isMetricValue, type EvidenceRow } from \"../../model/metrics.ts\";\nimport type { EvidenceRef } from \"../../../analysis/index.ts\";\nimport { attemptLocatorOfEvidenceRef } from \"./shared.ts\";\nexport type ExternalScalar = string | number | boolean | null;\nexport type ExternalPoint = Readonly<globalThis.Record<string, ExternalScalar>>;\nexport interface PointsChartFields {\n x: string;\n y: string;\n /** 系列拆分键(docs 的 color / series)。 */\n series?: string;\n /** 点身份键(docs 的 point)。 */\n point?: string;\n external?: boolean;\n}\ntype AxisKind = \"metric\" | \"dimension\";\nfunction readAxisField(row: globalThis.Record<string, unknown>, field: string, path: string, external: boolean): {\n kind: AxisKind;\n cell: DatasetValue;\n meta: Pick<DatasetField, \"unit\" | \"format\" | \"better\" | \"bounds\">;\n} {\n const raw = row[field];\n if (isMetricValue(raw)) {\n if (external) {\n throw new Error(`Chart field \"${field}\" at ${path} is a MetricValue but this chart declared external: true — external points only accept JSON scalars.`);\n }\n return {\n kind: \"metric\",\n cell: raw,\n meta: {\n ...(raw.unit !== undefined ? { unit: raw.unit } : {}),\n ...(raw.format !== undefined ? { format: raw.format } : {}),\n ...(raw.better !== undefined ? { better: raw.better } : {}),\n ...(raw.bounds !== undefined ? { bounds: raw.bounds } : {}),\n },\n };\n }\n if (typeof raw === \"number\" && Number.isFinite(raw)) {\n if (!external) {\n throw new Error(`Chart field \"${field}\" at ${path} is a bare number — Sample-derived charts require MetricValue (with refs). ` +\n `Pass MetricValue from aggregate()/rollup(), or declare external: true for non-Sample series.`);\n }\n return { kind: \"metric\", cell: raw, meta: {} };\n }\n if (typeof raw === \"string\" || typeof raw === \"boolean\") {\n return { kind: \"dimension\", cell: String(raw), meta: {} };\n }\n if (raw === null && external) {\n // External data has no Analysis provenance. Preserve null as a neutral\n // Dataset scalar so the chart records a missing coordinate without\n // manufacturing a Report-owned MetricValue.\n return { kind: \"metric\", cell: null, meta: {} };\n }\n throw new Error(`Chart field \"${field}\" at ${path} must be a MetricValue` +\n (external ? \", finite number, or category string\" : \" or category string\") +\n `, got ${raw === null ? \"null\" : typeof raw}.`);\n}\nfunction evidenceRefs(row: globalThis.Record<string, unknown>): readonly EvidenceRef[] | undefined {\n if (Array.isArray((row as Partial<EvidenceRow>).refs)) {\n return (row as Partial<EvidenceRow>).refs as readonly EvidenceRef[];\n }\n const metrics = Object.values(row).filter(isMetricValue);\n if (metrics.length === 0)\n return undefined;\n return metrics.flatMap((metric) => metric.refs);\n}\nfunction assertEvidenceRow(row: unknown, path: string): asserts row is globalThis.Record<string, unknown> {\n if (!row || typeof row !== \"object\" || Array.isArray(row)) {\n throw new Error(`${path} must be an object EvidenceRow`);\n }\n // aggregate() rows keep refs on their Analysis-owned MetricValues. A\n // presentation EvidenceRow may additionally hoist their union to `refs`.\n if (evidenceRefs(row as globalThis.Record<string, unknown>) === undefined) {\n throw new Error(`${path} has neither EvidenceRow.refs nor an Analysis MetricValue — Sample-derived chart points must carry evidence, or declare external: true.`);\n }\n}\n/** closed EvidenceRow 第一条 ref 的 attempt locator;ref 不是 attempt 时退回 undefined。 */\nfunction firstEvidenceLocator(row: unknown): string | undefined {\n if (!row || typeof row !== \"object\" || Array.isArray(row))\n return undefined;\n const refs = evidenceRefs(row as globalThis.Record<string, unknown>);\n if (refs === undefined || refs.length === 0)\n return undefined;\n const first = refs[0];\n if (!first || typeof first !== \"object\")\n return undefined;\n return attemptLocatorOfEvidenceRef(first as EvidenceRef);\n}\n/**\n * 把普通 points 行转成 Chart 内核消费的 Dataset。\n * 非 external:校验 EvidenceRow.refs 与 MetricValue;external:只收 JSON 标量。\n */\nexport function pointsToDataset(points: readonly object[], fields: PointsChartFields): Dataset {\n const external = fields.external === true;\n if (!Array.isArray(points)) {\n throw new Error('Chart \"points\" must be an array');\n }\n const xMetaAcc: Pick<DatasetField, \"unit\" | \"format\" | \"better\" | \"bounds\"> = {};\n const yMetaAcc: Pick<DatasetField, \"unit\" | \"format\" | \"better\" | \"bounds\"> = {};\n let xKind: AxisKind = \"metric\";\n let yKind: AxisKind = \"metric\";\n const dimNames = new Set<string>();\n if (fields.series)\n dimNames.add(fields.series);\n if (fields.point)\n dimNames.add(fields.point);\n const rows: Array<Dataset[\"rows\"][number]> = [];\n for (let i = 0; i < points.length; i++) {\n const path = `points[${i}]`;\n const row = points[i]!;\n if (!external)\n assertEvidenceRow(row, path);\n else if (!row || typeof row !== \"object\" || Array.isArray(row)) {\n throw new Error(`${path} must be an object`);\n }\n const record = row as globalThis.Record<string, unknown>;\n const x = readAxisField(record, fields.x, path, external);\n const y = readAxisField(record, fields.y, path, external);\n xKind = x.kind;\n yKind = y.kind;\n Object.assign(xMetaAcc, x.meta);\n Object.assign(yMetaAcc, y.meta);\n if (x.kind === \"dimension\")\n dimNames.add(fields.x);\n if (y.kind === \"dimension\")\n dimNames.add(fields.y);\n const values: globalThis.Record<string, DatasetValue> = {\n [fields.x]: x.cell,\n [fields.y]: y.cell,\n };\n for (const dim of dimNames) {\n if (dim === fields.x || dim === fields.y)\n continue;\n const raw = (row as globalThis.Record<string, unknown>)[dim];\n if (typeof raw !== \"string\" && typeof raw !== \"number\" && typeof raw !== \"boolean\" && raw !== null) {\n throw new Error(`${path}.${dim} must be a string/number/boolean dimension value`);\n }\n values[dim] = String(raw);\n }\n // 语义适配:行身份优先取显式 point 字段;缺失时落到第一条 evidence ref 的\n // attempt locator;再缺才退回行序。\n const key = fields.point !== undefined\n ? String((row as globalThis.Record<string, unknown>)[fields.point])\n : !external\n ? (firstEvidenceLocator(row) ?? `row-${i}`)\n : `row-${i}`;\n rows.push({ key, values });\n }\n const fieldList: DatasetField[] = [];\n for (const dim of dimNames) {\n if (dim === fields.x || dim === fields.y)\n continue;\n fieldList.push({ name: dim, kind: \"dimension\", valueType: \"string\" });\n }\n fieldList.push(xKind === \"dimension\"\n ? { name: fields.x, kind: \"dimension\", valueType: \"string\" }\n : { name: fields.x, kind: \"metric\", valueType: \"number\", ...xMetaAcc });\n fieldList.push(yKind === \"dimension\"\n ? { name: fields.y, kind: \"dimension\", valueType: \"string\" }\n : { name: fields.y, kind: \"metric\", valueType: \"number\", ...yMetaAcc });\n return { fields: fieldList, rows };\n}\n"]}
@@ -422,6 +422,12 @@ function plainValueToCell(value, path, locale) {
422
422
  if (value === undefined) {
423
423
  throw new Error(`Table ${path} is missing — every declared column must exist on the row object.`);
424
424
  }
425
+ if (value !== null &&
426
+ typeof value === "object" &&
427
+ Object.hasOwn(value, "projection") &&
428
+ !(0, pricing_ts_1.isCostMetricValue)(value)) {
429
+ throw new Error(`Table ${path} has unsupported object type — Table rows only accept scalars, LocalizedText, MetricValue, or Cell.`);
430
+ }
425
431
  if ((0, metrics_ts_1.isMetricValue)(value)) {
426
432
  return { kind: "metric", metric: value };
427
433
  }
@@ -469,7 +475,14 @@ function plainRowsToTableContent(rows, columnSpecs, locale) {
469
475
  throw new Error("Table needs at least one column: pass columns, or provide a non-empty rows array with fields.");
470
476
  }
471
477
  const columns = columnSpecs.map((spec) => {
472
- const sample = rows.map((row) => row[spec.field]).find(metrics_ts_1.isMetricValue);
478
+ const sample = rows
479
+ .map((row) => {
480
+ const value = row[spec.field];
481
+ if ((0, metrics_ts_1.isMetricValue)(value))
482
+ return value;
483
+ return isPlainCellValue(value) && value.kind === "metric" ? value.metric : undefined;
484
+ })
485
+ .find((value) => value !== undefined);
473
486
  // 语义适配:当前 MetricValue.better 含 "neutral";列排序方向只认 higher/lower。
474
487
  const better = sample?.better === "higher" || sample?.better === "lower" ? sample.better : undefined;
475
488
  return {
@@ -634,7 +647,7 @@ function renderCellWeb(cell, ctx) {
634
647
  return ((0, jsx_runtime_1.jsxs)("span", { className: cx("niceeval-verdict", `niceeval-verdict-${verdict}`), children: [(0, format_ts_1.verdictMark)(verdict === "skipped" ? "skipped" : verdict), !cell.bare ? (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [" ", (0, locale_ts_1.localeText)(ctx.locale, `verdict.${verdict === "skipped" ? "skipped" : verdict}`)] }) : null] }));
635
648
  }
636
649
  case "metric":
637
- return ((0, jsx_runtime_1.jsx)(MetricCellView, { cell: cell.metric, href: ctx.showMeasureRefs === false ? undefined : ctx.href, locale: ctx.locale }));
650
+ return ((0, jsx_runtime_1.jsx)(MetricCellView, { cell: cell.metric, href: ctx.showMeasureRefs === false ? undefined : ctx.href, locale: ctx.locale, showCoverage: cell.showCoverage !== false }));
638
651
  default: {
639
652
  const _e = cell;
640
653
  return _e;