desic-okx-agent 0.3.2 → 0.3.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"chart-script.js","sourceRoot":"","sources":["../../src/report/chart-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqIrC,CAAC"}
1
+ {"version":3,"file":"chart-script.js","sourceRoot":"","sources":["../../src/report/chart-script.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsvBrC,CAAC"}
@@ -1,8 +1,3 @@
1
1
  import type { ComparisonReport } from "./compare.js";
2
- /**
3
- * Renders a self-contained comparison of two or more runs.
4
- *
5
- * Same constraints as a single report: everything inlined, nothing fetched at view
6
- * time, so it opens offline and never sends a strategy anywhere.
7
- */
2
+ /** Renders a self-contained, offline comparison observatory for two to six runs. */
8
3
  export declare function renderComparisonHtml(report: ComparisonReport): string;
@@ -1,14 +1,10 @@
1
1
  import { activeLocale, activeMessages } from "../i18n/locale.js";
2
+ import { BRAND_FONT_WOFF2 } from "./brand-font.js";
2
3
  import { COMPARE_SCRIPT } from "./compare-script.js";
3
4
  import { COMPARE_STYLES, escapeAttribute, escapeHtml } from "./html.js";
4
- /** One colour per curve. Distinguishable in both colour schemes and when printed. */
5
- const SERIES_COLOURS = ["#4f9cf9", "#f2777a", "#3fb950", "#d29922", "#a371f7", "#22b8cf"];
6
- /**
7
- * Renders a self-contained comparison of two or more runs.
8
- *
9
- * Same constraints as a single report: everything inlined, nothing fetched at view
10
- * time, so it opens offline and never sends a strategy anywhere.
11
- */
5
+ /** Distinct in both themes, without competing with positive/negative metric colours. */
6
+ const SERIES_COLOURS = ["#6f3ff5", "#007f64", "#d13b55", "#9a6700", "#3272d9", "#8b5a9f"];
7
+ /** Renders a self-contained, offline comparison observatory for two to six runs. */
12
8
  export function renderComparisonHtml(report) {
13
9
  const text = activeMessages();
14
10
  const title = report.runs.map((run) => run.id).join(" · ");
@@ -18,117 +14,192 @@ export function renderComparisonHtml(report) {
18
14
  <meta charset="utf-8">
19
15
  <meta name="viewport" content="width=device-width, initial-scale=1">
20
16
  <title>${escapeHtml(text.comparisonHeading)} · ${escapeHtml(title)}</title>
21
- <style>${COMPARE_STYLES}</style>
17
+ <style>@font-face{font-family:BubbledotICG-FinePos;src:url(data:font/woff2;base64,${BRAND_FONT_WOFF2}) format("woff2");font-weight:400;font-style:normal;font-display:swap}${COMPARE_STYLES}</style>
22
18
  </head>
23
- <body>
24
- <main>
25
- <header>
26
- <div>
27
- <h1>${escapeHtml(text.comparisonHeading)}</h1>
28
- <p class="sub">${escapeHtml(report.runs.map((run) => run.strategyName).join(" · "))}</p>
29
- </div>
30
- </header>
31
-
32
- ${renderWarnings(report, text)}
33
- ${renderLegend(report)}
19
+ <body class="comparison-report">
20
+ <div class="compare-progress" aria-hidden="true"></div>
21
+ <main class="compare-shell">
22
+ ${renderCover(report, text)}
23
+ ${renderWarnings(report)}
34
24
 
35
- <section>
36
- <h2>${escapeHtml(text.normalizedEquityHeading)}</h2>
25
+ <section class="compare-section compare-observatory" id="overlay">
26
+ ${renderSectionHeading("01", text.normalizedEquityHeading)}
27
+ ${renderRunDeck(report, text)}
37
28
  ${renderOverlay(report, text)}
38
29
  </section>
39
30
 
40
- ${renderMetrics(report, text)}
41
- ${renderAssumptions(report, text)}
31
+ <section class="compare-section" id="matrix">
32
+ ${renderSectionHeading("02", text.comparedRunsHeading)}
33
+ ${renderMetrics(report, text)}
34
+ </section>
35
+
36
+ <section class="compare-section" id="parameters">
37
+ ${renderSectionHeading("03", text.differingAssumptionsHeading)}
38
+ ${renderAssumptions(report, text)}
39
+ </section>
42
40
 
43
- <footer>
41
+ <footer class="compare-footer">
44
42
  <p>${escapeHtml(text.compareNormalizedNote)}</p>
45
43
  <p>${escapeHtml(text.simulationNote)}</p>
44
+ <p class="type-credit">BubbledotICG-FinePos · Web Fonts · CC BY 4.0</p>
46
45
  </footer>
47
46
  </main>
48
47
  <script>${COMPARE_SCRIPT}</script>
49
48
  </body>
50
49
  </html>`;
51
50
  }
52
- function renderWarnings(report, text) {
51
+ function renderCover(report, text) {
52
+ const plotted = report.series.filter((series) => series.timeMs.length > 0);
53
+ const start = plotted.length > 0 ? Math.min(...plotted.map((series) => series.timeMs[0])) : null;
54
+ const end = plotted.length > 0 ? Math.max(...plotted.map((series) => series.timeMs.at(-1))) : null;
55
+ const instruments = [...new Set(report.runs.map((run) => run.instId))].join(" · ");
56
+ const snapshots = new Set(report.runs.map((run) => run.dataSnapshotId ?? "-")).size;
57
+ const strategies = [...new Set(report.runs.map((run) => run.strategyName))].join(" · ");
58
+ return `<header class="compare-mast">
59
+ <div class="compare-rail">
60
+ <span class="brand-mark">DESIC / OBSERVATORY</span>
61
+ <span class="compare-state"><i></i>${escapeHtml(text.comparisonHeading)}</span>
62
+ <span class="run-signature mono">${escapeHtml(report.runs.map((run) => run.id).join(" / "))}</span>
63
+ <button class="compare-theme" type="button" data-theme-toggle aria-label="${escapeAttribute(text.themeLabel)}" title="${escapeAttribute(text.themeLabel)}">◐</button>
64
+ </div>
65
+ <div class="compare-identity">
66
+ <div>
67
+ <span class="instrument-line mono">${escapeHtml(instruments)}</span>
68
+ <h1>${escapeHtml(text.comparisonHeading)}</h1>
69
+ <p>${escapeHtml(strategies)}</p>
70
+ </div>
71
+ <div class="run-total">
72
+ <span>${escapeHtml(text.comparedRunsHeading)}</span>
73
+ <strong>${report.runs.length.toString().padStart(2, "0")}</strong>
74
+ </div>
75
+ </div>
76
+ <dl class="compare-facts">
77
+ <div><dt>${escapeHtml(text.selectedWindow)}</dt><dd class="mono">${start === null || end === null ? "-" : `${escapeHtml(isoMinute(start))} → ${escapeHtml(isoMinute(end))}`}</dd></div>
78
+ <div><dt>${escapeHtml(text.snapshotLabel)}</dt><dd>${snapshots}</dd></div>
79
+ <div><dt>${escapeHtml(text.differingAssumptionsHeading)}</dt><dd>${report.differingAssumptions.length}</dd></div>
80
+ <div><dt>${escapeHtml(text.comparisonWarningsLabel)}</dt><dd>${report.warnings.length}</dd></div>
81
+ </dl>
82
+ </header>`;
83
+ }
84
+ function renderSectionHeading(index, heading) {
85
+ return `<div class="compare-heading"><span>${index}</span><h2>${escapeHtml(heading)}</h2></div>`;
86
+ }
87
+ function renderWarnings(report) {
53
88
  if (report.warnings.length === 0)
54
89
  return "";
55
- // Placed above the chart on purpose: a reader who scrolls straight to the curves
56
- // should not have to look for the reason they may not be comparable.
57
- return `<div class="warnings">${report.warnings
58
- .map((warning) => `<p>${escapeHtml(warning.message)}</p>`)
59
- .join("")}</div>`;
90
+ return `<aside class="warnings" aria-live="polite">${report.warnings
91
+ .map((warning, index) => `<div><span>${String(index + 1).padStart(2, "0")}</span><p>${escapeHtml(warning.message)}</p><code>${escapeHtml(warning.code)}</code></div>`)
92
+ .join("")}</aside>`;
60
93
  }
61
- function renderLegend(report) {
62
- return `<div class="legend">${report.series
63
- .map((series, index) => `<div><i style="background:${colour(index)}"></i><span>${escapeHtml(series.label)}</span></div>`)
64
- .join("")}</div>`;
94
+ function renderRunDeck(report, text) {
95
+ return `<nav class="run-deck" aria-label="${escapeAttribute(text.comparedRunsHeading)}">${report.runs
96
+ .map((run, index) => {
97
+ const metrics = (run.metrics ?? {});
98
+ return `<button type="button" class="run-track" data-series-toggle="${index}" aria-pressed="true" style="--series:${colour(index)}">
99
+ <span class="run-number">${String(index + 1).padStart(2, "0")}</span>
100
+ <span class="run-name"><strong>${escapeHtml(run.strategyName)}</strong><small class="mono">${escapeHtml(run.id)}</small></span>
101
+ <span class="run-metric"><small>${escapeHtml(text.returnLabel)}</small><b class="${tone(num(metrics.returnPct))}">${escapeHtml(format(num(metrics.returnPct), "signed"))}</b></span>
102
+ <span class="run-metric"><small>${escapeHtml(text.maxDrawdown)}</small><b class="negative">${escapeHtml(format(num(metrics.maxDrawdownPct), "pct"))}</b></span>
103
+ </button>`;
104
+ })
105
+ .join("")}</nav>`;
65
106
  }
66
- /**
67
- * Overlays every curve on one indexed axis.
68
- *
69
- * The x axis is wall-clock time spanning the union of all runs, so two runs over
70
- * different windows sit where they actually happened rather than being stretched
71
- * to the same width — which would imply they covered the same period.
72
- */
73
107
  function renderOverlay(report, text) {
74
108
  const plotted = report.series.filter((series) => series.indexed.length > 1);
75
109
  if (plotted.length === 0)
76
110
  return `<p class="empty">${escapeHtml(text.notEnoughPoints)}</p>`;
77
111
  const width = 1000;
78
- const height = 300;
112
+ const height = 320;
79
113
  const startMs = Math.min(...plotted.map((series) => series.timeMs[0]));
80
114
  const endMs = Math.max(...plotted.map((series) => series.timeMs.at(-1)));
81
115
  const span = endMs - startMs || 1;
82
116
  const values = plotted.flatMap((series) => series.indexed);
83
- const minimum = Math.min(...values, 100);
84
- const maximum = Math.max(...values, 100);
117
+ const rawMinimum = Math.min(...values, 100);
118
+ const rawMaximum = Math.max(...values, 100);
119
+ const centre = (rawMinimum + rawMaximum) / 2;
120
+ const visibleRange = Math.max(4, (rawMaximum - rawMinimum) * 1.3);
121
+ const minimum = centre - visibleRange / 2;
122
+ const maximum = centre + visibleRange / 2;
85
123
  const range = maximum - minimum || 1;
86
124
  const x = (timeMs) => ((timeMs - startMs) / span) * width;
87
125
  const y = (value) => height - ((value - minimum) / range) * height;
88
126
  const paths = plotted
89
- .map((series, index) => {
127
+ .map((series) => {
128
+ const index = report.series.indexOf(series);
90
129
  const path = series.indexed
91
- .map((value, point) => `${point === 0 ? "M" : "L"}${x(series.timeMs[point]).toFixed(1)},${y(value).toFixed(1)}`)
130
+ .map((value, point) => `${point === 0 ? "M" : "L"}${x(series.timeMs[point]).toFixed(4)},${y(value).toFixed(2)}`)
92
131
  .join("");
93
- return `<path d="${path}" fill="none" stroke="${colour(index)}" stroke-width="1.6" vector-effect="non-scaling-stroke"/>`;
132
+ return `<path class="compare-series" data-series-path="${index}" d="${path}" fill="none" stroke="${colour(index)}" vector-effect="non-scaling-stroke"/>`;
133
+ })
134
+ .join("");
135
+ const markers = plotted
136
+ .map((series) => {
137
+ const index = report.series.indexOf(series);
138
+ return `<ellipse class="compare-marker" data-series-marker="${index}" cx="0" cy="0" rx="4" ry="4" stroke="${colour(index)}" data-marker-radius="4" hidden/>`;
94
139
  })
95
140
  .join("");
96
- // Index 100 is break-even. Without it, "did this make money" is unanswerable
97
- // from a curve scaled to its own range.
98
- const baseline = minimum < 100 && maximum > 100
99
- ? `<line class="baseline" x1="0" y1="${y(100).toFixed(1)}" x2="${width}" y2="${y(100).toFixed(1)}"/>`
141
+ const baseline = minimum <= 100 && maximum >= 100
142
+ ? `<line class="compare-baseline" x1="0" y1="${y(100).toFixed(2)}" x2="${width}" y2="${y(100).toFixed(2)}"/>`
100
143
  : "";
101
144
  const payload = {
102
145
  startMs,
103
146
  endMs,
104
- series: plotted.map((series, index) => ({
147
+ width,
148
+ height,
149
+ minimum,
150
+ maximum,
151
+ series: report.series.map((series, index) => ({
105
152
  label: series.label,
153
+ runId: series.runId,
106
154
  colour: colour(index),
107
155
  t: series.timeMs,
108
156
  v: series.indexed.map((value) => Number(value.toFixed(3)))
109
157
  })),
110
158
  labels: { time: text.hoverTime, equity: text.normalizedEquityHeading }
111
159
  };
112
- return `
113
- <div class="chart" id="compare-chart" data-series='${escapeAttribute(JSON.stringify(payload))}'>
114
- <svg viewBox="0 -8 ${width} ${height + 16}" preserveAspectRatio="none" role="img" aria-label="normalized equity comparison">
115
- ${baseline}
116
- ${paths}
117
- <line class="crosshair" x1="0" y1="-8" x2="0" y2="${height}" hidden/>
118
- </svg>
119
- <div class="axis"><span>${maximum.toFixed(1)}</span><span>${minimum.toFixed(1)}</span></div>
120
- <div class="tooltip" hidden></div>
121
- </div>
122
- <p class="range mono">${escapeHtml(isoMinute(startMs))} → ${escapeHtml(isoMinute(endMs))} UTC · ${escapeHtml(text.hoverPrompt)}</p>`;
123
- }
124
- /**
125
- * Metrics table, one column per run.
126
- *
127
- * The best value in each row is marked. On a six-run table that is the difference
128
- * between reading the comparison and doing arithmetic across columns — and the
129
- * direction differs per metric, since a low drawdown is good and a low return is
130
- * not.
131
- */
160
+ return `<div class="compare-chart-frame">
161
+ <div class="compare-toolbar">
162
+ <span>${escapeHtml(text.selectedWindow)}</span>
163
+ <div role="group" aria-label="${escapeAttribute(text.selectedWindow)}">
164
+ <button type="button" data-compare-range="30">30D</button>
165
+ <button type="button" data-compare-range="90">90D</button>
166
+ <button type="button" data-compare-range="180">180D</button>
167
+ <button type="button" data-compare-range="all" aria-pressed="true">${escapeHtml(text.rangeAll)}</button>
168
+ </div>
169
+ </div>
170
+ <div class="compare-chart" id="compare-chart" data-series='${escapeAttribute(JSON.stringify(payload))}'>
171
+ <svg viewBox="0 0 ${width} ${height}" preserveAspectRatio="none" role="img" aria-label="${escapeAttribute(text.normalizedEquityHeading)}">
172
+ <g class="compare-grid" aria-hidden="true">
173
+ <line x1="0" y1="0" x2="${width}" y2="0"/><line x1="0" y1="80" x2="${width}" y2="80"/>
174
+ <line x1="0" y1="160" x2="${width}" y2="160"/><line x1="0" y1="240" x2="${width}" y2="240"/>
175
+ <line x1="0" y1="320" x2="${width}" y2="320"/>
176
+ <line x1="250" y1="0" x2="250" y2="320"/><line x1="500" y1="0" x2="500" y2="320"/><line x1="750" y1="0" x2="750" y2="320"/>
177
+ </g>
178
+ ${baseline}${paths}
179
+ <line class="compare-crosshair" x1="0" y1="0" x2="0" y2="${height}" hidden/>
180
+ ${markers}
181
+ </svg>
182
+ <div class="compare-axis"><span data-axis-maximum>${maximum.toFixed(1)}</span><span data-axis-minimum>${minimum.toFixed(1)}</span></div>
183
+ <div class="tooltip compare-tooltip" hidden></div>
184
+ </div>
185
+ <p class="compare-range mono"><span id="compare-window-period">${escapeHtml(isoMinute(startMs))} → ${escapeHtml(isoMinute(endMs))}</span> UTC</p>
186
+ ${renderWindowStrip(report, text)}
187
+ </div>`;
188
+ }
189
+ function renderWindowStrip(report, text) {
190
+ return `<div class="compare-window-strip">${report.series
191
+ .map((series, index) => {
192
+ const first = series.indexed[0] ?? 100;
193
+ const last = series.indexed.at(-1) ?? first;
194
+ const change = last - first;
195
+ return `<div data-window-series="${index}" style="--series:${colour(index)}">
196
+ <span>${escapeHtml(series.runId)}</span>
197
+ <strong class="${tone(change)}" data-window-return>${formatSigned(change)}%</strong>
198
+ <small><span>${escapeHtml(text.normalizedEquityHeading)}</span> <b data-window-value>${last.toFixed(2)}</b></small>
199
+ </div>`;
200
+ })
201
+ .join("")}</div>`;
202
+ }
132
203
  function renderMetrics(report, text) {
133
204
  const rows = COMPARED_ROWS.map(([label, key, better, kind]) => {
134
205
  const values = report.runs.map((run) => num(run.metrics?.[key]));
@@ -136,24 +207,17 @@ function renderMetrics(report, text) {
136
207
  return `<tr>
137
208
  <th scope="row">${escapeHtml(label(text))}</th>
138
209
  ${values
139
- .map((value, index) => `<td class="n${index === best ? " best" : ""}">${escapeHtml(format(value, kind))}</td>`)
210
+ .map((value, index) => `<td class="n${index === best ? " best" : ""}"><span>${escapeHtml(format(value, kind))}</span></td>`)
140
211
  .join("")}
141
212
  </tr>`;
142
213
  }).join("");
143
- return `
144
- <section>
145
- <h2>${escapeHtml(text.comparedRunsHeading)}</h2>
146
- <div class="scroll">
147
- <table class="matrix">
148
- <thead><tr><th></th>${report.runs
149
- .map((run, index) => `<th class="n"><i style="background:${colour(index)}"></i>${escapeHtml(run.id)}<span class="dim">${escapeHtml(run.instId)}</span></th>`)
214
+ return `<div class="matrix-shell"><table class="matrix" style="--run-count:${report.runs.length}">
215
+ <thead><tr><th>${escapeHtml(text.strategyColumn)}</th>${report.runs
216
+ .map((run, index) => `<th class="n" style="--series:${colour(index)}"><i></i>${escapeHtml(run.strategyName)}<span class="dim mono">${escapeHtml(run.id)} · ${escapeHtml(run.instId)}</span></th>`)
150
217
  .join("")}</tr></thead>
151
- <tbody>${rows}</tbody>
152
- </table>
153
- </div>
154
- </section>`;
218
+ <tbody>${rows}</tbody>
219
+ </table></div>`;
155
220
  }
156
- /** `higher` and `lower` say which direction is an improvement for each metric. */
157
221
  const COMPARED_ROWS = [
158
222
  [(text) => text.returnLabel, "returnPct", "higher", "signed"],
159
223
  [(text) => text.maxDrawdown, "maxDrawdownPct", "lower", "pct"],
@@ -169,43 +233,26 @@ const COMPARED_ROWS = [
169
233
  [(text) => text.turnover, "turnoverUsdt", "none", "plain"],
170
234
  [(text) => text.exposure, "exposurePct", "none", "pct"]
171
235
  ];
172
- /**
173
- * Assumption rows, differences first.
174
- *
175
- * The shared ones are listed after and collapsed to a single column, because the
176
- * question a comparison answers is what changed.
177
- */
178
236
  function renderAssumptions(report, text) {
179
- if (report.differingAssumptions.length === 0) {
180
- return `<section><h2>${escapeHtml(text.differingAssumptionsHeading)}</h2><p class="empty">${escapeHtml(text.assumptionsIdentical)}</p></section>`;
181
- }
182
- const rows = report.differingAssumptions
183
- .map((entry) => `<tr>
184
- <th scope="row">${escapeHtml(entry.key)}</th>
185
- ${entry.values.map((value) => `<td class="n differs">${escapeHtml(value ?? "-")}</td>`).join("")}
186
- </tr>`)
187
- .join("");
188
- const shared = report.sharedAssumptions.length > 0
189
- ? `<p class="empty">${escapeHtml(text.sharedAssumptionsNote(String(report.sharedAssumptions.length)))}</p>`
190
- : "";
191
- return `
192
- <section>
193
- <h2>${escapeHtml(text.differingAssumptionsHeading)}</h2>
194
- <div class="scroll">
195
- <table class="matrix">
196
- <thead><tr><th></th>${report.runs.map((run) => `<th class="n">${escapeHtml(run.id)}</th>`).join("")}</tr></thead>
197
- <tbody>${rows}</tbody>
198
- </table>
199
- </div>
200
- ${shared}
201
- </section>`;
202
- }
203
- /**
204
- * Index of the best value in a row, or -1 when there is no winner.
205
- *
206
- * A tie is left unmarked: highlighting one of two identical numbers invents a
207
- * distinction that is not in the data.
208
- */
237
+ const differences = report.differingAssumptions.length === 0
238
+ ? `<p class="empty">${escapeHtml(text.assumptionsIdentical)}</p>`
239
+ : `<div class="matrix-shell"><table class="matrix assumption-matrix" style="--run-count:${report.runs.length}">
240
+ <thead><tr><th>${escapeHtml(text.differingAssumptionsHeading)}</th>${report.runs
241
+ .map((run, index) => `<th class="n" style="--series:${colour(index)}"><i></i><span class="mono">${escapeHtml(run.id)}</span></th>`)
242
+ .join("")}</tr></thead>
243
+ <tbody>${report.differingAssumptions
244
+ .map((entry) => `<tr><th scope="row"><code>${escapeHtml(entry.key)}</code></th>${entry.values
245
+ .map((value) => `<td class="n differs"><span>${escapeHtml(value ?? "-")}</span></td>`)
246
+ .join("")}</tr>`)
247
+ .join("")}</tbody>
248
+ </table></div>`;
249
+ const shared = report.sharedAssumptions.length === 0
250
+ ? ""
251
+ : `<details class="shared-assumptions"><summary>${escapeHtml(text.sharedAssumptionsNote(String(report.sharedAssumptions.length)))}</summary><dl>${report.sharedAssumptions
252
+ .map((entry) => `<div><dt><code>${escapeHtml(entry.key)}</code></dt><dd>${escapeHtml(entry.value)}</dd></div>`)
253
+ .join("")}</dl></details>`;
254
+ return `${differences}${shared}`;
255
+ }
209
256
  function bestIndex(values, better) {
210
257
  if (better === "none")
211
258
  return -1;
@@ -245,6 +292,14 @@ function format(value, kind) {
245
292
  const sign = kind === "signed" && value > 0 ? "+" : "";
246
293
  return `${sign}${body}${kind === "plain" ? "" : "%"}`;
247
294
  }
295
+ function formatSigned(value) {
296
+ return `${value > 0 ? "+" : ""}${value.toFixed(2)}`;
297
+ }
298
+ function tone(value) {
299
+ if (value === null || value === 0)
300
+ return "neutral";
301
+ return value > 0 ? "positive" : "negative";
302
+ }
248
303
  function colour(index) {
249
304
  return SERIES_COLOURS[index % SERIES_COLOURS.length];
250
305
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compare-html.js","sourceRoot":"","sources":["../../src/report/compare-html.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compare-html.js","sourceRoot":"","sources":["../../src/report/compare-html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAExE,wFAAwF;AACxF,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAE1F,oFAAoF;AACpF,MAAM,UAAU,oBAAoB,CAAC,MAAwB;IAC3D,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE3D,OAAO;cACK,YAAY,EAAE;;;;SAInB,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC;oFACkB,gBAAgB,yEAAyE,cAAc;;;;;IAKvL,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC;IACzB,cAAc,CAAC,MAAM,CAAC;;;MAGpB,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,uBAAuB,CAAC;MACxD,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC;MAC3B,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC;;;;MAI3B,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC;MACpD,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC;;;;MAI3B,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,2BAA2B,CAAC;MAC5D,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC;;;;SAI5B,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC;SACtC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;;;;UAI9B,cAAc;;QAEhB,CAAC;AACT,CAAC;AAED,SAAS,WAAW,CAAC,MAAwB,EAAE,IAAc;IAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClG,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpG,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACpF,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAExF,OAAO;;;2CAGkC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;yCACpC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;kFACf,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;;;;6CAIjH,UAAU,CAAC,WAAW,CAAC;cACtD,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;aACnC,UAAU,CAAC,UAAU,CAAC;;;gBAGnB,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC;kBAClC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;;;;iBAI/C,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,yBAAyB,KAAK,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;iBAChK,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,SAAS;iBACnD,UAAU,CAAC,IAAI,CAAC,2BAA2B,CAAC,YAAY,MAAM,CAAC,oBAAoB,CAAC,MAAM;iBAC1F,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAC,YAAY,MAAM,CAAC,QAAQ,CAAC,MAAM;;YAE/E,CAAC;AACb,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa,EAAE,OAAe;IAC1D,OAAO,sCAAsC,KAAK,cAAc,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC;AACnG,CAAC;AAED,SAAS,cAAc,CAAC,MAAwB;IAC9C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5C,OAAO,8CAA8C,MAAM,CAAC,QAAQ;SACjE,GAAG,CACF,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CACjB,cAAc,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,aAAa,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAC/I;SACA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC;AACxB,CAAC;AAED,SAAS,aAAa,CAAC,MAAwB,EAAE,IAAc;IAC7D,OAAO,qCAAqC,eAAe,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,MAAM,CAAC,IAAI;SAClG,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAClB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;QAC/D,OAAO,+DAA+D,KAAK,yCAAyC,MAAM,CAAC,KAAK,CAAC;mCACpG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;yCAC5B,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,gCAAgC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;0CAC7E,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,qBAAqB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;0CACtI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,+BAA+B,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC3I,CAAC;IACb,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,MAAwB,EAAE,IAAc;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,oBAAoB,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;IAE5F,MAAM,KAAK,GAAG,IAAI,CAAC;IACnB,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,KAAK,GAAG,OAAO,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;IAErC,MAAM,CAAC,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;IAC1E,MAAM,CAAC,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC;IACnF,MAAM,KAAK,GAAG,OAAO;SAClB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO;aACxB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;aAChH,IAAI,CAAC,EAAE,CAAC,CAAC;QACZ,OAAO,kDAAkD,KAAK,QAAQ,IAAI,yBAAyB,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC;IAC3J,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,MAAM,OAAO,GAAG,OAAO;SACpB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,uDAAuD,KAAK,yCAAyC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC;IAC/J,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,MAAM,QAAQ,GACZ,OAAO,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG;QAC9B,CAAC,CAAC,6CAA6C,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;QAC7G,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,OAAO,GAAG;QACd,OAAO;QACP,KAAK;QACL,KAAK;QACL,MAAM;QACN,OAAO;QACP,OAAO;QACP,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5C,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;YACrB,CAAC,EAAE,MAAM,CAAC,MAAM;YAChB,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3D,CAAC,CAAC;QACH,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,uBAAuB,EAAE;KACvE,CAAC;IAEF,OAAO;;cAEK,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;sCACP,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;;;;6EAIG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;;;iEAGrC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;0BAC/E,KAAK,IAAI,MAAM,uDAAuD,eAAe,CAAC,IAAI,CAAC,uBAAuB,CAAC;;oCAEzG,KAAK,sCAAsC,KAAK;sCAC9C,KAAK,yCAAyC,KAAK;sCACnD,KAAK;;;UAGjC,QAAQ,GAAG,KAAK;mEACyC,MAAM;UAC/D,OAAO;;0DAEyC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kCAAkC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;;;qEAG3D,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;MAC/H,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC;SAC5B,CAAC;AACV,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAwB,EAAE,IAAc;IACjE,OAAO,qCAAqC,MAAM,CAAC,MAAM;SACtD,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;QAC5B,OAAO,4BAA4B,KAAK,qBAAqB,MAAM,CAAC,KAAK,CAAC;gBAChE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;yBACf,IAAI,CAAC,MAAM,CAAC,wBAAwB,YAAY,CAAC,MAAM,CAAC;uBAC1D,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAC,gCAAgC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;aACjG,CAAC;IACV,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;AACtB,CAAC;AAED,SAAS,aAAa,CAAC,MAAwB,EAAE,IAAc;IAC7D,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;QAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO;wBACa,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM;aACL,GAAG,CACF,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,eAAe,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,cAAc,CACvG;aACA,IAAI,CAAC,EAAE,CAAC;UACP,CAAC;IACT,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,sEAAsE,MAAM,CAAC,IAAI,CAAC,MAAM;qBAC5E,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,MAAM,CAAC,IAAI;SAChE,GAAG,CACF,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CACb,iCAAiC,MAAM,CAAC,KAAK,CAAC,YAAY,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,0BAA0B,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAC/K;SACA,IAAI,CAAC,EAAE,CAAC;aACF,IAAI;iBACA,CAAC;AAClB,CAAC;AAED,MAAM,aAAa,GAEf;IACF,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC7D,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC;IAC9D,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;IACzD,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;IACzD,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC;IAC3D,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;IAC3D,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC;IACvD,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,CAAC;IAChE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC;IACjE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC;IAC7D,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC;IAC9D,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC;IAC1D,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC;CACxD,CAAC;AAEF,SAAS,iBAAiB,CAAC,MAAwB,EAAE,IAAc;IACjE,MAAM,WAAW,GACf,MAAM,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC;QACtC,CAAC,CAAC,oBAAoB,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM;QACjE,CAAC,CAAC,wFAAwF,MAAM,CAAC,IAAI,CAAC,MAAM;2BACvF,UAAU,CAAC,IAAI,CAAC,2BAA2B,CAAC,QAAQ,MAAM,CAAC,IAAI;aAC7E,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,iCAAiC,MAAM,CAAC,KAAK,CAAC,+BAA+B,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC;aAClI,IAAI,CAAC,EAAE,CAAC;mBACF,MAAM,CAAC,oBAAoB;aACjC,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CAAC,6BAA6B,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,MAAM;aACrF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,+BAA+B,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC,cAAc,CAAC;aACrF,IAAI,CAAC,EAAE,CAAC,OAAO,CACnB;aACA,IAAI,CAAC,EAAE,CAAC;uBACE,CAAC;IAEtB,MAAM,MAAM,GACV,MAAM,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC;QACnC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,gDAAgD,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,MAAM,CAAC,iBAAiB;aACrK,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;aAC9G,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC;IACnC,OAAO,GAAG,WAAW,GAAG,MAAM,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,SAAS,CAAC,MAA4B,EAAE,MAAmC;IAClF,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC,CAAC;IACjC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC3D,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO;QAC3B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,CAAC;YACV,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC;YAChE,SAAS,GAAG,KAAK,CAAC;YAClB,IAAI,GAAG,KAAK,CAAC;YACb,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9B,CAAC;AAED,SAAS,GAAG,CAAC,KAAc;IACzB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,SAAS,MAAM,CAAC,KAAoB,EAAE,IAAgC;IACpE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,IAAI,GACR,SAAS,IAAI,SAAS;QACpB,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QACtC,CAAC,CAAC,SAAS,IAAI,KAAK;YAClB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,IAAI,CAAC,KAAoB;IAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACpD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;AAC7C,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,MAAM,CAAE,CAAC;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,EAAU;IAC3B,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACnE,CAAC"}
@@ -1,12 +1,2 @@
1
- /**
2
- * Hover readout for the comparison overlay.
3
- *
4
- * Shows every curve's value at one instant, which is the question an overlay
5
- * raises and a static image cannot answer: two lines crossing tells you they
6
- * crossed, not by how much.
7
- *
8
- * Same constraints as the single-run script — one IIFE, no network, no storage,
9
- * data read from a `data-series` attribute — so the report stays a self-contained
10
- * file that sends nothing.
11
- */
1
+ /** Interactive controller for the self-contained comparison observatory. */
12
2
  export declare const COMPARE_SCRIPT: string;