@tangle-network/charts 0.21.10 → 0.21.11

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.
@@ -30,7 +30,8 @@
30
30
  /* Root agent neutral, then five agent hues. Each passes 3:1 against both surfaces as a mark. */
31
31
  --fw-h0: light-dark(#6c6f84, #a3a6bb);
32
32
  --fw-h1: light-dark(#4b55d6, #8f96ff);
33
- --fw-h2: light-dark(#c3570f, #f2913f);
33
+ /* No warm hue among the agents: amber is kept for the slowest and red for failure. */
34
+ --fw-h2: light-dark(#3d8a52, #6fcb8a);
34
35
  --fw-h3: light-dark(#0b87a0, #35c2db);
35
36
  --fw-h4: light-dark(#b0418a, #dc72bb);
36
37
  --fw-h5: light-dark(#6d44c7, #ab8cf7);
@@ -249,7 +250,7 @@
249
250
  /* Muted agents (the default): one quiet tone for every agent bar, its steps and handoffs; the slowest agent alone takes amber, and
250
251
  failure keeps its red glyph, so color only ever means state. */
251
252
  .fw-root.fw-fill-muted .fw-view-agents [data-tone] { --tone: var(--fw-h0); }
252
- .fw-root.fw-fill-muted .fw-view-agents .fw-row[data-slowest], .fw-root.fw-fill-muted .fw-view-agents .fw-row[data-slowest] [data-tone] { --tone: var(--fw-amber); }
253
+ .fw-root:is(.fw-fill-muted, .fw-fill-agent) .fw-view-agents .fw-row[data-slowest], .fw-root:is(.fw-fill-muted, .fw-fill-agent) .fw-view-agents .fw-row[data-slowest] [data-tone] { --tone: var(--fw-amber); }
253
254
  .fw-root [data-outcome="ok"], .fw-root [data-outcome="ok"] [data-tone] { --tone: var(--fw-ok); }
254
255
  .fw-root [data-outcome="failed"], .fw-root [data-outcome="failed"] [data-tone] { --tone: var(--fw-failed); }
255
256
  .fw-root [data-outcome="warn"], .fw-root [data-outcome="warn"] [data-tone] { --tone: var(--fw-amber); }
@@ -260,6 +261,9 @@
260
261
  .fw-root .fw-legends .fw-legend { margin: 0; }
261
262
  .fw-root .fw-kinds { margin: 0; padding: 0; justify-content: flex-start; color: var(--fw-muted); }
262
263
  .fw-root .fw-kinds .fw-swatch-model { width: 12px; height: 8px; border-radius: 2px; background: var(--fw-kind-model); }
264
+ /* With per-agent hues the key shows kind as shade, as the bars do: darker for a model call, lighter for a tool call. */
265
+ .fw-root.fw-fill-agent .fw-kinds .fw-swatch-model { background: color-mix(in oklab, var(--fw-text) 58%, var(--fw-surface)); }
266
+ .fw-root.fw-fill-agent .fw-kinds .fw-swatch-tool { background: color-mix(in oklab, var(--fw-text) 24%, var(--fw-surface)); }
263
267
  .fw-root .fw-kinds .fw-swatch-tool { width: 12px; height: 8px; border-radius: 2px; background: var(--fw-kind-tool); }
264
268
  .fw-root .fw-kinds .fw-swatch-wait { width: 12px; height: 8px; border-radius: 2px; background: color-mix(in oklab, var(--fw-text) 12%, transparent); box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--fw-text) 18%, transparent); }
265
269
  .fw-root .fw-kinds .fw-swatch-handoff { width: 10px; height: 8px; border-left: 1.5px solid var(--fw-muted); border-bottom: 1.5px solid var(--fw-muted); border-bottom-left-radius: 3px; }
@@ -274,13 +278,14 @@
274
278
  .fw-root .fw-view-agents .fw-seg { pointer-events: auto; }
275
279
  .fw-root .fw-seg-model { background: var(--fill); box-shadow: inset 0 0 0 1px var(--line); }
276
280
  .fw-root .fw-seg-tool { background: var(--dim); box-shadow: inset 0 0 0 1px var(--dim-line); }
277
- /* In the agent view a step's kind owns its color, strong on both themes; the agent's outcome stays on its lane tint, dot and end label. */
278
- .fw-root .fw-view-agents .fw-seg-model { background: var(--fw-kind-model); box-shadow: none; }
279
- .fw-root .fw-view-agents .fw-seg-tool { background: var(--fw-kind-tool); box-shadow: none; }
281
+ /* Without per-agent hues (muted or outcome fill), a step's kind owns its color; with them, kind is the darker and lighter shade of the
282
+ agent's own hue (the rules above), so each agent stays one color. */
283
+ .fw-root:is(.fw-fill-muted, .fw-fill-outcome) .fw-view-agents .fw-seg-model { background: var(--fw-kind-model); box-shadow: none; }
284
+ .fw-root:is(.fw-fill-muted, .fw-fill-outcome) .fw-view-agents .fw-seg-tool { background: var(--fw-kind-tool); box-shadow: none; }
280
285
  .fw-root .fw-view-agents .fw-seg-tool { container-type: inline-size; justify-content: flex-start; }
281
- .fw-root .fw-seg-name { padding: 0 6px; overflow: hidden; white-space: nowrap; text-overflow: clip; font-size: 11px; line-height: 16px; font-weight: 600; color: light-dark(#fff, #06222b); pointer-events: none; }
286
+ .fw-root .fw-seg-name { padding: 0 6px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: 11px; line-height: 16px; font-weight: 600; color: light-dark(#fff, #06222b); pointer-events: none; }
282
287
  @container (max-width: 56px) { .fw-root .fw-seg-name { display: none; } }
283
- .fw-root .fw-view-agents .fw-seg-alt.fw-seg-model, .fw-root .fw-view-agents .fw-seg-alt.fw-seg-tool { filter: brightness(.88); }
288
+ .fw-root:is(.fw-fill-muted, .fw-fill-outcome) .fw-view-agents :is(.fw-seg-alt.fw-seg-model, .fw-seg-alt.fw-seg-tool) { filter: brightness(.88); }
284
289
  .fw-root .fw-seg-failed { background: color-mix(in oklab, var(--fw-failed) 18%, var(--fw-surface)); box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--fw-failed) 70%, transparent); color: var(--fw-failed); }
285
290
  /* In the agent view a failed turn draws like any turn; the agent's own failure shows once, by its name and its end label. */
286
291
  .fw-root .fw-view-agents .fw-seg-failed { background: var(--dim); box-shadow: inset 0 0 0 1px var(--dim-line); }
@@ -399,9 +399,9 @@ interface FlowWaterfallProps {
399
399
  markers?: FlowMarker[];
400
400
  /** The time the reader moved to, in trace ms; `null` when following live or showing the whole trace. */
401
401
  onTimeChange?: (t: number | null) => void;
402
- /** What an agent bar's color means. Default: `outcome` when any agent carries one, so bars match the outcome legend, else `muted`.
403
- * `muted`: every agent one quiet tone, color spent on state only (red for failure, amber for the slowest). `agent`: each agent its
404
- * own hue, shared by its steps and handoffs. `outcome`: the bar takes its outcome's color. */
402
+ /** What an agent bar's color means. `agent` (default): each agent or family its own muted hue across dot, bar and handoffs, with
403
+ * model and tool steps as darker and lighter shades of it; the outcome stays on the row dot and amber marks the slowest (blind round
404
+ * 25: global step hues made agents blur together). `muted`: one quiet tone, color on state only. `outcome`: the bar takes its outcome. */
405
405
  agentFill?: 'muted' | 'outcome' | 'agent';
406
406
  /** One line beside the title saying what the run was for, such as its goal. */
407
407
  description?: string;
@@ -4496,7 +4496,7 @@ function FlowWaterfall({ trace, live, startedAt, label = "Trace waterfall", defa
4496
4496
  const [laneElement, setLaneElement] = useState(null);
4497
4497
  const observedTotal = Number.isFinite(trace.totalMs) && trace.totalMs >= 0 ? trace.totalMs : 0;
4498
4498
  const isLive = live ?? trace.spans.some(spanRunning);
4499
- const agentFill = fillProp ?? (trace.spans.some((span) => span.kind === "pipeline" && span.outcome) ? "outcome" : "muted");
4499
+ const agentFill = fillProp ?? "agent";
4500
4500
  const dataEnd = useMemo(() => Math.max(observedTotal, ...trace.spans.map((span) => Number.isFinite(span.endMs) ? span.endMs : 0)), [trace, observedTotal]);
4501
4501
  const trackPx = Math.max(40, laneWidth - LANE_PAD - Math.min(END_LABEL_GUTTER[view], laneWidth * .3));
4502
4502
  useEffect(() => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/charts",
3
- "version": "0.21.10",
3
+ "version": "0.21.11",
4
4
  "description": "Static SVG and HTML figures for benchmarks and operational timing. Draws from producer data and refuses what it cannot draw honestly.",
5
5
  "type": "module",
6
6
  "license": "MIT",