@tangle-network/charts 0.8.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -2
- package/dist/figure.css +64 -6
- package/dist/index.d.ts +39 -4
- package/dist/index.js +737 -124
- package/dist/react/index.d.ts +2 -6
- package/dist/react/index.js +1 -1
- package/dist/react/live.css +2 -0
- package/dist/{timeline-CCWFvLxg.js → timeline-BAwebuqb.js} +69 -14
- package/dist/{timeline-CCEJug7n.d.ts → timeline-CNHABOS1.d.ts} +80 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -177,7 +177,7 @@ type ChartMark = { at: number; label: string; kind: "pass" | "deadline" | "died"
|
|
|
177
177
|
type ChartBand = { from: number; to: number; label: string; kind: "after-pass" | "idle" | "missing" | "blocked" };
|
|
178
178
|
type TimelineLane = { id: string; label: string; spans: Array<{ start: number; end: number | null; state: string; note?: string }>;
|
|
179
179
|
parent?: string; depth?: number; ticks?: TimelineTick[]; detail?: string[] };
|
|
180
|
-
type TimelineTick = { at: number; outcome: "ok" | "quota" | "rate-limit" | "oom" | "refused" | "aborted" | "other"; note?: string };
|
|
180
|
+
type TimelineTick = { at: number; outcome: "ok" | "quota" | "lost" | "rate-limit" | "oom" | "refused" | "aborted" | "other"; note?: string };
|
|
181
181
|
type MultiplePanel = { id: string; label: string; unit?: string; domain?: [number, number]; points?: TimePoint[];
|
|
182
182
|
missing?: { why: string; detail?: string }; end?: { at: number; kind: ChartMark["kind"]; label?: string }; marks?: ChartMark[] };
|
|
183
183
|
type MeterSegment = { label: string; value: number | null; color?: string; kind?: "measured" | "untraced" };
|
|
@@ -197,7 +197,7 @@ The window defaults to the extent of the data (spans, ticks and `now`), so a run
|
|
|
197
197
|
Pass `start` (the run's start) to show time before the first span.
|
|
198
198
|
|
|
199
199
|
Lanes form a tree through `parent`: each lane is drawn under its parent with a connector, siblings and roots keep their input order, and `depth` defaults to the parent's depth plus one. A stated depth that disagrees with the parent, a parent that is not a lane and a parent chain that loops are refused.
|
|
200
|
-
`ticks` are recorded attempts, such as driver turns, at the time each ended: ok ticks rise above the bar and failed ticks drop below it in their outcome's colour
|
|
200
|
+
`ticks` are recorded attempts, such as driver turns, at the time each ended: ok ticks rise above the bar and failed ticks drop below it in their outcome's colour from the shared outcome palette (below), and the lane ends with its counts, `21✓ 250✗`. A lane without `ticks` shows no counts; an empty `ticks` shows `0✓ 0✗`. Ticks of one outcome within 2 px are drawn as one, with the count and the commonest `note` in its hover. An unknown outcome is refused.
|
|
201
201
|
A mark with a `lane` is drawn on that lane only (a steer to one agent, a wake of the root) instead of across every lane; a lane that is not in the figure is refused.
|
|
202
202
|
`detail` is the caller's facts about a lane (profile, model, status, attempts, cost, top error), one hover line each on the lane's label and every span, and a column of the lanes table.
|
|
203
203
|
`collapsed` folds the named lanes' subtrees: descendants are hidden, the label gains `+N`, and the folded lane's ticks and counts total its subtree. Passing `collapsed`, even empty, makes each parent lane's label a fold toggle (`data-toggle`, a button with `aria-expanded`); `TimelineView` keeps the fold state and wires the toggles to a click, Enter or Space, returning focus to the toggle.
|
|
@@ -213,6 +213,44 @@ A mark with a `lane` is drawn on that lane only (a steer to one agent, a wake of
|
|
|
213
213
|
|
|
214
214
|
`node scripts/capture-run-page.mjs [dir]` (after `npm run build`) captures each addition at 1440 px light and 390 px dark; the reviewed images are `docs/screenshots/run-page-*.png`.
|
|
215
215
|
|
|
216
|
+
### Release checks: the climb and the bar
|
|
217
|
+
|
|
218
|
+
A play's page asks how close its releases are to the check and to the goal's bar. `timeSeries` and `smallMultiples` draw it from the producer's recorded rows; Charts decides no verdict, comparability or checker.
|
|
219
|
+
|
|
220
|
+
```ts
|
|
221
|
+
const climb = timeSeries(rows, {
|
|
222
|
+
x: { label: "release", domain: [-0.5, 16.5], categories: tags.map((tag, at) => ({ at, label: tag })) },
|
|
223
|
+
y: { label: "check progress", unit: "", domain: [-0.05, 1.06], strip: "no score",
|
|
224
|
+
ticks: [...stages.map((label, i) => ({ at: i / stages.length, label })), { at: 1, label: "SOLVED" }] },
|
|
225
|
+
bands: [{ from: 0, to: 16, label: "18b · 5 published, 7 withheld", kind: "group" }],
|
|
226
|
+
marks: [{ at: 9.5, label: "10.5 h", kind: "event", source: "gap" }, { at: 13.47, label: "v4 · operator amendment 20:52Z", kind: "ruling" }],
|
|
227
|
+
markers: { circle: "check", diamond: "gate" },
|
|
228
|
+
});
|
|
229
|
+
// rows: one per checker (and run), `colorIndex` 0 for the current checker; points such as
|
|
230
|
+
// { x: 13, y: 1, verdict: "pass", glyph: "check", marker: "circle", count: 3, firstAt, lastAt, annotation: line }
|
|
231
|
+
// { x: 15, y: null, verdict: "unknown", marker: "diamond", label: "6/15", count: 12 } → the strip, never a height
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
| Field | Drawn as |
|
|
235
|
+
|---|---|
|
|
236
|
+
| `verdict` | `pass` filled, `fail` outlined, `unknown` dashed; with `y: null`, a square in the strip under the plot (hatched when unknown) |
|
|
237
|
+
| `count`, `firstAt`, `lastAt` | `×n` beside the mark; first and last times in the hover and the table |
|
|
238
|
+
| `comparable` | `false` outlined with `*`, `null` outlined with `?` |
|
|
239
|
+
| `glyph` | `✓` (`check`) or `✕` (`cross`), the only marks in the status tones |
|
|
240
|
+
| `marker`, `label` | the mark's shape, named by the figure's `markers`; a short direct label such as `9/15` |
|
|
241
|
+
| `y.scale`, `y.targets`, `y.ticks` | log10 y; target bands (dashed when `stretch`); caller-named gridlines |
|
|
242
|
+
| `x.categories` | an ordinal axis of weighted columns; points sharing a column are spread across it |
|
|
243
|
+
| `colorIndex` (row) | the checker palette, 0 current; dashes follow the index |
|
|
244
|
+
|
|
245
|
+
The bar panels share the climb's columns: `smallMultiples(panels, { shared: "x", x: { label, domain, categories }, columns: 2, connect: false, markers })`, each panel with its own `unit`, `format`, `scale: "log"`, `domain` and `targets`. `docs/fixtures/magnetar-play.json` holds the Magnetar play's real 17c, 18b and 19b rows in these shapes (`docs/fixtures/export-magnetar-play.mjs` exports them on the Lab host), and `src/run-page-figures.test.ts` draws them.
|
|
246
|
+
|
|
247
|
+
Attempt outcomes and checkers have one palette in every view. `OUTCOME_ORDER` is the stack order (ok, quota, lost, rate-limit, oom, refused, aborted, other; an open attempt is hatched, never an outcome); `OUTCOME_COLORS[outcome]` and `checkerColor(index)` return the `var(--chart-outcome-*)` and `var(--chart-checker-*)` tokens `figure.css` defines as `light-dark()` pairs, so they follow the page's `color-scheme`. Aborted and other share the neutral tone and always carry a label. `node scripts/palette-check.mjs <dataviz validate_palette.js>` checks both palettes, adjacent pairs in order, on the light surface and on #161616.
|
|
248
|
+
|
|
249
|
+
| Play page figure | 1440 light | 390 dark |
|
|
250
|
+
|---|---|---|
|
|
251
|
+
| Climb |  |  |
|
|
252
|
+
| Against the bar |  |  |
|
|
253
|
+
|
|
216
254
|
### Plots without visible report controls
|
|
217
255
|
|
|
218
256
|
Use `renderFigure(figure, noteNumber, { presentation: "plot" })` to show the responsive plot alone.
|
package/dist/figure.css
CHANGED
|
@@ -310,8 +310,8 @@
|
|
|
310
310
|
.tgc-tip-bg { fill: var(--chart-ink); }
|
|
311
311
|
.tgc-tip-ink { fill: var(--chart-canvas); }
|
|
312
312
|
|
|
313
|
-
.tgc-series-line { fill: none; stroke: var(--chart-accent); stroke-width: 2; stroke-linejoin: round; }
|
|
314
|
-
.tgc-series-point, .tgc-series-key { fill: var(--chart-accent); stroke: var(--chart-canvas); stroke-width: 2; }
|
|
313
|
+
.tgc-series-line { fill: none; stroke: var(--tgc-series, var(--chart-accent)); stroke-width: 2; stroke-linejoin: round; }
|
|
314
|
+
.tgc-series-point, .tgc-series-key { fill: var(--tgc-series, var(--chart-accent)); stroke: var(--chart-canvas); stroke-width: 2; }
|
|
315
315
|
|
|
316
316
|
/* Semantic states stay tied to Brand status tokens. No-data has its own neutral mark. */
|
|
317
317
|
.tgc-heat-pass { fill: color-mix(in srgb, var(--chart-pass, var(--status-running)) 19%, var(--chart-canvas)); stroke: var(--chart-pass, var(--status-running)); stroke-width: .8; }
|
|
@@ -389,10 +389,13 @@
|
|
|
389
389
|
.tgc-lane-toggle:hover .tgc-lane-hit { fill: var(--chart-shade); }
|
|
390
390
|
.tgc-lane-toggle:focus-visible .tgc-lane-hit { stroke: var(--chart-accent); }
|
|
391
391
|
.tgc-tick { stroke-width: 1.5; }
|
|
392
|
-
.tgc-tick-ok { stroke: var(--chart-
|
|
393
|
-
.tgc-tick-quota
|
|
394
|
-
.tgc-tick-
|
|
395
|
-
.tgc-tick-
|
|
392
|
+
.tgc-tick-ok { stroke: var(--chart-outcome-ok); }
|
|
393
|
+
.tgc-tick-quota { stroke: var(--chart-outcome-quota); }
|
|
394
|
+
.tgc-tick-lost { stroke: var(--chart-outcome-lost); }
|
|
395
|
+
.tgc-tick-rate-limit { stroke: var(--chart-outcome-rate-limit); }
|
|
396
|
+
.tgc-tick-oom { stroke: var(--chart-outcome-oom); }
|
|
397
|
+
.tgc-tick-refused { stroke: var(--chart-outcome-refused); }
|
|
398
|
+
.tgc-tick-aborted, .tgc-tick-other { stroke: var(--chart-outcome-neutral); }
|
|
396
399
|
/* Lane labels and counts keep a canvas halo, so rules and ticks under them never strike through the text. */
|
|
397
400
|
.tgc-lane-label, .tgc-count { paint-order: stroke; stroke: var(--chart-canvas); stroke-width: 3px; stroke-linejoin: round; }
|
|
398
401
|
.tgc-count { fill: var(--chart-ink); }
|
|
@@ -404,3 +407,58 @@
|
|
|
404
407
|
.tgc-view-plot svg { display: block; overflow: visible; }
|
|
405
408
|
.tgc-view-wide svg { width: 100%; height: auto; }
|
|
406
409
|
.tgc-view-narrow svg { max-width: 100%; height: auto; }
|
|
410
|
+
|
|
411
|
+
/*
|
|
412
|
+
* One fixed palette for attempt outcomes and check versions in every view (src/outcomes.ts names them). Each is a
|
|
413
|
+
* light-dark() pair picked by the page's color-scheme. Outcomes pass the dataviz colour-vision checks as adjacent
|
|
414
|
+
* pairs in stack order (ok, quota, lost, rate-limit, oom, refused) on the light surface and on #161616; checkers pass
|
|
415
|
+
* as adjacent series (current, then older). `scripts/palette-check.mjs` re-runs the validator. A page may override
|
|
416
|
+
* any of these properties; :where() keeps them at zero specificity.
|
|
417
|
+
*/
|
|
418
|
+
:where(:root) {
|
|
419
|
+
--chart-outcome-ok: light-dark(#2a78d6, #3987e5);
|
|
420
|
+
--chart-outcome-quota: light-dark(#eb6834, #d95926);
|
|
421
|
+
--chart-outcome-lost: light-dark(#1baf7a, #199e70);
|
|
422
|
+
--chart-outcome-rate-limit: light-dark(#eda100, #c98500);
|
|
423
|
+
--chart-outcome-oom: light-dark(#e87ba4, #d55181);
|
|
424
|
+
--chart-outcome-refused: light-dark(#6250d6, #9085e9);
|
|
425
|
+
--chart-outcome-neutral: #898781;
|
|
426
|
+
--chart-checker-0: light-dark(#2a78d6, #3987e5);
|
|
427
|
+
--chart-checker-1: light-dark(#1baf7a, #199e70);
|
|
428
|
+
--chart-checker-2: light-dark(#6250d6, #9085e9);
|
|
429
|
+
--chart-checker-3: light-dark(#eda100, #c98500);
|
|
430
|
+
}
|
|
431
|
+
/* A series drawn in a checker's hue; past the fourth hue it is muted and named by its label. */
|
|
432
|
+
.tgc-checker-0 { --tgc-series: var(--chart-checker-0); }
|
|
433
|
+
.tgc-checker-1 { --tgc-series: var(--chart-checker-1); }
|
|
434
|
+
.tgc-checker-2 { --tgc-series: var(--chart-checker-2); }
|
|
435
|
+
.tgc-checker-3 { --tgc-series: var(--chart-checker-3); }
|
|
436
|
+
.tgc-checker-other { --tgc-series: var(--chart-muted); }
|
|
437
|
+
/* Recorded verdicts: a pass is filled, a fail or an incomparable value is an outline, an undecided one dashed. */
|
|
438
|
+
.tgc-series-point.tgc-point-outline { fill: var(--chart-canvas); stroke: var(--tgc-series, var(--chart-accent)); stroke-width: 1.75; }
|
|
439
|
+
.tgc-series-point.tgc-point-undecided { fill: var(--chart-canvas); stroke: var(--tgc-series, var(--chart-accent)); stroke-width: 1.5; stroke-dasharray: 2 1.5; }
|
|
440
|
+
.tgc-strip-hatch .tgc-hatch { stroke: var(--tgc-series, var(--chart-muted)); }
|
|
441
|
+
.tgc-strip-edge { fill: none; stroke: var(--tgc-series, var(--chart-muted)); stroke-width: 1.25; }
|
|
442
|
+
.tgc-strip-observation:focus-visible { outline: none; }
|
|
443
|
+
.tgc-strip-observation:focus-visible .tgc-series-hit { stroke: var(--chart-ink); stroke-width: 2; }
|
|
444
|
+
.tgc-point-badge { paint-order: stroke; stroke: var(--chart-canvas); stroke-width: 3px; stroke-linejoin: round; font-family: var(--font-mono, "JetBrains Mono", ui-monospace, monospace); }
|
|
445
|
+
.tgc-point-label { fill: var(--chart-ink-muted); }
|
|
446
|
+
.tgc-glyph-note { fill: var(--chart-ink); font-weight: 600; }
|
|
447
|
+
/* Status colours appear only on these glyphs. */
|
|
448
|
+
.tgc-glyph-check { fill: var(--chart-pass, var(--status-running)); font-weight: 600; }
|
|
449
|
+
.tgc-glyph-cross { fill: var(--chart-breach, var(--status-error)); font-weight: 600; }
|
|
450
|
+
/* Recorded targets sit under the data: a target is a soft band between solid edges, a stretch a dashed outline. */
|
|
451
|
+
.tgc-target-target { fill: color-mix(in srgb, var(--chart-ink) 7%, transparent); }
|
|
452
|
+
.tgc-target-stretch { fill: none; }
|
|
453
|
+
.tgc-target-target-edge, .tgc-target-target.tgc-target-line { stroke: var(--chart-ink-muted); stroke-width: 1; }
|
|
454
|
+
.tgc-target-stretch-edge, .tgc-target-stretch.tgc-target-line { stroke: var(--chart-ink-muted); stroke-width: 1; stroke-dasharray: 4 3; }
|
|
455
|
+
.tgc-target-label { fill: var(--chart-ink-muted); paint-order: stroke; stroke: var(--chart-canvas); stroke-width: 3px; stroke-linejoin: round; }
|
|
456
|
+
/* Group headers: a labelled bracket above the plot and a light rule at each inner edge. */
|
|
457
|
+
.tgc-group-rule { stroke: var(--chart-ink-muted); stroke-width: 1.5; }
|
|
458
|
+
.tgc-group-edge { stroke: var(--chart-rule); stroke-width: 1; }
|
|
459
|
+
.tgc-group-label { fill: var(--chart-ink); paint-order: stroke; stroke: var(--chart-canvas); stroke-width: 3px; stroke-linejoin: round; }
|
|
460
|
+
/* The verdict key: glyphs in the neutral ink, so they describe a mark's form, not a series. */
|
|
461
|
+
.tgc-key-mark { stroke-width: 1.5; }
|
|
462
|
+
.tgc-key-filled { fill: var(--chart-ink-muted); stroke: none; }
|
|
463
|
+
.tgc-key-outline { fill: none; stroke: var(--chart-ink-muted); }
|
|
464
|
+
.tgc-key-dashed { fill: none; stroke: var(--chart-ink-muted); stroke-dasharray: 2 1.5; }
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as
|
|
1
|
+
import { A as IntervalMethod, C as BreakdownInput, D as Exclusion, E as Estimate, F as Tier, I as TierCounts, L as isRefusal, M as RateRow, N as Refusal, O as Figure, P as Setup, S as YTick, T as CostBasis, _ as MarkVerdict, a as timeline, b as YScale, c as OUTCOME_ORDER, d as PointFields, f as PointGlyph, g as MarkKind, h as ChartMark, i as TimelineTick, j as MatrixCell, k as Interval, l as TickOutcome, m as ChartBand, n as TimelineOptions, o as CHECKER_HUES, p as BandKind, r as TimelineSpan, s as OUTCOME_COLORS, t as TimelineLane, u as checkerColor, v as MarkerShape, w as ComparisonRow, x as YTarget, y as XCategory } from "./timeline-CNHABOS1.js";
|
|
2
2
|
//#region src/block.d.ts
|
|
3
3
|
interface RenderFigureOptions {
|
|
4
4
|
/** Chart uses a closed data disclosure; plot keeps only the SVG and accessible data. */
|
|
@@ -185,7 +185,7 @@ interface MetricBarsOptions {
|
|
|
185
185
|
export declare function metricBars(rows: MetricRow[], o: MetricBarsOptions): Figure | Refusal;
|
|
186
186
|
//#endregion
|
|
187
187
|
//#region src/time-series.d.ts
|
|
188
|
-
interface TimePoint {
|
|
188
|
+
interface TimePoint extends PointFields {
|
|
189
189
|
x: number;
|
|
190
190
|
y: number | null;
|
|
191
191
|
observations?: Observations;
|
|
@@ -197,16 +197,32 @@ interface TimeSeriesRow {
|
|
|
197
197
|
id: string;
|
|
198
198
|
label: string;
|
|
199
199
|
points: TimePoint[];
|
|
200
|
+
/** Draw this series in checker `colorIndex`'s hue (0 is the current checker); past the fourth hue it is muted. */
|
|
201
|
+
colorIndex?: number;
|
|
200
202
|
}
|
|
201
203
|
interface TimeSeriesOptions {
|
|
202
204
|
x: {
|
|
203
205
|
label: string;
|
|
204
206
|
domain: [number, number];
|
|
207
|
+
/**
|
|
208
|
+
* An ordinal axis: one column per category, its width proportional to `weight`. Every point sits at a category's
|
|
209
|
+
* `at`; several points may share a column and are spread across it. Marks and bands between categories are placed
|
|
210
|
+
* between their columns, and a band bound that names a category covers that column.
|
|
211
|
+
*/
|
|
212
|
+
categories?: XCategory[];
|
|
205
213
|
};
|
|
206
214
|
y: {
|
|
207
215
|
label: string;
|
|
208
216
|
unit: string;
|
|
209
217
|
domain: [number, number];
|
|
218
|
+
/** `log` places values on a log10 scale and needs a positive domain. Default: linear. */
|
|
219
|
+
scale?: YScale;
|
|
220
|
+
/** Caller-named gridlines, such as check stages, in place of evenly spaced values. */
|
|
221
|
+
ticks?: YTick[];
|
|
222
|
+
/** Recorded goals drawn under the data: a shaded band (target) or a dashed one (stretch), a line when from equals to. */
|
|
223
|
+
targets?: YTarget[];
|
|
224
|
+
/** The label of the strip under the plot that holds verdicts recorded without a value. Default: no value. */
|
|
225
|
+
strip?: string;
|
|
210
226
|
};
|
|
211
227
|
formatX?: (value: number) => string;
|
|
212
228
|
formatY?: (value: number) => string;
|
|
@@ -214,6 +230,8 @@ interface TimeSeriesOptions {
|
|
|
214
230
|
marks?: ChartMark[];
|
|
215
231
|
/** Recorded shaded spans on the x axis, such as time after the first pass or idle time; `missing` is hatched. */
|
|
216
232
|
bands?: ChartBand[];
|
|
233
|
+
/** What each point `marker` stands for, such as `{ circle: "check", diamond: "gate" }`, named in the figure's key. */
|
|
234
|
+
markers?: Partial<Record<MarkerShape, string>>;
|
|
217
235
|
id?: string;
|
|
218
236
|
}
|
|
219
237
|
export declare function timeSeries(rows: TimeSeriesRow[], o: TimeSeriesOptions): Figure | Refusal;
|
|
@@ -222,10 +240,19 @@ export declare function timeSeries(rows: TimeSeriesRow[], o: TimeSeriesOptions):
|
|
|
222
240
|
interface MultiplePanel {
|
|
223
241
|
id: string;
|
|
224
242
|
label: string;
|
|
225
|
-
/**
|
|
243
|
+
/**
|
|
244
|
+
* The panel's recorded unit. With `shared: "both"` it must match the figure's y unit; with `shared: "x"` each panel
|
|
245
|
+
* may record its own (a rate, a size, a time), and the figure's y unit is the default for panels that set none.
|
|
246
|
+
*/
|
|
226
247
|
unit?: string;
|
|
248
|
+
/** `shared: "x"` only: formats this panel's y values in place of the figure's `formatY`. */
|
|
249
|
+
format?: (value: number) => string;
|
|
227
250
|
/** The panel's own y domain; required when only the x axis is shared. */
|
|
228
251
|
domain?: [number, number];
|
|
252
|
+
/** `log` places values on a log10 scale and needs a positive domain. Default: linear. */
|
|
253
|
+
scale?: YScale;
|
|
254
|
+
/** Recorded goals drawn under the panel's data, such as a paper's bar: a shaded band, dashed for a stretch. */
|
|
255
|
+
targets?: YTarget[];
|
|
229
256
|
points?: TimePoint[];
|
|
230
257
|
/** The arm produced no data. The panel is hatched and names the reason. */
|
|
231
258
|
missing?: {
|
|
@@ -241,9 +268,11 @@ interface MultiplePanel {
|
|
|
241
268
|
marks?: ChartMark[];
|
|
242
269
|
}
|
|
243
270
|
interface SmallMultiplesOptions {
|
|
271
|
+
/** `categories` makes x ordinal, as in `timeSeries`: every panel shares the same columns. */
|
|
244
272
|
x: {
|
|
245
273
|
label: string;
|
|
246
274
|
domain: [number, number];
|
|
275
|
+
categories?: XCategory[];
|
|
247
276
|
};
|
|
248
277
|
y: {
|
|
249
278
|
label: string;
|
|
@@ -254,10 +283,16 @@ interface SmallMultiplesOptions {
|
|
|
254
283
|
shared: "both" | "x";
|
|
255
284
|
/** What one panel is, for the lede: "3 of 4 arms have data". Default: panel. */
|
|
256
285
|
noun?: string;
|
|
286
|
+
/** Panels per row in the wide render (default 3); the phone render is one column. */
|
|
287
|
+
columns?: number;
|
|
288
|
+
/** false draws points without joining them, for values that are not one trajectory. Default true. */
|
|
289
|
+
connect?: boolean;
|
|
290
|
+
/** What each point `marker` stands for, such as `{ circle: "check", diamond: "gate" }`, named in the figure's key. */
|
|
291
|
+
markers?: Partial<Record<MarkerShape, string>>;
|
|
257
292
|
formatX?: (value: number) => string;
|
|
258
293
|
formatY?: (value: number) => string;
|
|
259
294
|
id?: string;
|
|
260
295
|
}
|
|
261
296
|
export declare function smallMultiples(panels: MultiplePanel[], o: SmallMultiplesOptions): Figure | Refusal;
|
|
262
297
|
//#endregion
|
|
263
|
-
export { type BandKind, type BreakdownInput, type BreakdownOptions, type ChartBand, type ChartMark, type ComparisonIntervalsOptions, type ComparisonRow, type CostBasis, type CostFrontierOptions, type Estimate, type Exclusion, type Figure, type HeatmapCell, type HeatmapColumn, type HeatmapOptions, type HeatmapRow, type HeatmapStatus, type Interval, type IntervalMethod, type LatencyRangeOptions, type LatencyRangeRow, type MarkKind, type MarkVerdict, type MatrixCell, type MetricBarsOptions, type MetricRow, type MultiplePanel, type Observations, type PhaseWaterfallOptions, type RankedRatesOptions, type RateIdentity, type RateRow, type Refusal, type RenderFigureOptions, type Setup, type SmallMultiplesOptions, type TaskMatrixOptions, type TickOutcome, type Tier, type TierCounts, type TimePoint, type TimeSeriesOptions, type TimeSeriesRow, type TimelineLane, type TimelineOptions, type TimelineSpan, type TimelineTick, type WaterfallPhase, isRefusal, timeline };
|
|
298
|
+
export { type BandKind, type BreakdownInput, type BreakdownOptions, CHECKER_HUES, type ChartBand, type ChartMark, type ComparisonIntervalsOptions, type ComparisonRow, type CostBasis, type CostFrontierOptions, type Estimate, type Exclusion, type Figure, type HeatmapCell, type HeatmapColumn, type HeatmapOptions, type HeatmapRow, type HeatmapStatus, type Interval, type IntervalMethod, type LatencyRangeOptions, type LatencyRangeRow, type MarkKind, type MarkVerdict, type MatrixCell, type MetricBarsOptions, type MetricRow, type MultiplePanel, OUTCOME_COLORS, OUTCOME_ORDER, type Observations, type PhaseWaterfallOptions, type PointFields, type PointGlyph, type RankedRatesOptions, type RateIdentity, type RateRow, type Refusal, type RenderFigureOptions, type Setup, type SmallMultiplesOptions, type TaskMatrixOptions, type TickOutcome, type Tier, type TierCounts, type TimePoint, type TimeSeriesOptions, type TimeSeriesRow, type TimelineLane, type TimelineOptions, type TimelineSpan, type TimelineTick, type WaterfallPhase, type XCategory, type YScale, type YTarget, type YTick, checkerColor, isRefusal, timeline };
|