@tangle-network/charts 0.21.7 → 0.21.9
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/dist/react/flow-waterfall.css +9 -8
- package/dist/react/index.js +38 -16
- package/package.json +1 -1
|
@@ -136,10 +136,9 @@
|
|
|
136
136
|
background: repeating-linear-gradient(-45deg, color-mix(in oklab, var(--fw-text) 9%, transparent) 0 1px, transparent 1px 6px), color-mix(in oklab, var(--fw-text) 4%, transparent);
|
|
137
137
|
border-inline: 1px dashed color-mix(in oklab, var(--fw-text) 24%, transparent); }
|
|
138
138
|
.fw-root .fw-pause-label b { font-weight: 600; color: var(--fw-text); }
|
|
139
|
-
.fw-root .fw-pause {
|
|
140
|
-
.fw-root .fw-pause-label { position: sticky; top: 4px; display: block; width: max-content; margin: 4px 0 0 50%; translate: -50% 0; padding: 0 8px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
139
|
+
.fw-root .fw-pause-label { position: absolute; z-index: 2; top: 50%; left: calc(var(--fw-pad) + ((var(--s) + var(--e)) / 2 - var(--fw-v0)) * var(--fw-k) * 1px); translate: -50% -50%; width: max-content; padding: 0 8px; white-space: nowrap;
|
|
141
140
|
border-radius: 4px; font-size: 12px; line-height: 20px; color: var(--fw-muted); background: var(--fw-surface); box-shadow: inset 0 0 0 1px var(--fw-border); }
|
|
142
|
-
/* The label
|
|
141
|
+
/* The label takes the pointer, for its reason; the band stays click-through to the rows. */
|
|
143
142
|
.fw-root .fw-pause-label[title] { pointer-events: auto; cursor: help; }
|
|
144
143
|
.fw-root .fw-marker-label { position: absolute; top: 2px; left: 3px; max-width: 160px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 0 4px; border-radius: 4px; font-size: 12px; line-height: 16px; color: var(--fw-marker); background: var(--fw-surface); box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--fw-marker) 40%, transparent); }
|
|
145
144
|
.fw-root .fw-marker-label-left { left: auto; right: 3px; }
|
|
@@ -192,7 +191,9 @@
|
|
|
192
191
|
.fw-root .fw-view-agents .fw-label { padding-left: 16px; gap: 12px; border-right: 0; }
|
|
193
192
|
.fw-root .fw-view-agents .fw-names { flex-direction: column; align-items: flex-start; gap: 0; }
|
|
194
193
|
.fw-root .fw-view-agents .fw-span-name { font-weight: 600; line-height: 18px; }
|
|
195
|
-
|
|
194
|
+
/* One 16 px line that wraps its last part out of sight: when the line is full the tool count drops whole, never "7 to…". */
|
|
195
|
+
.fw-root .fw-view-agents .fw-subtitle { display: flex; flex-wrap: wrap; align-items: center; column-gap: 4px; height: 16px; overflow: hidden; max-width: 100%; min-width: 0; color: var(--fw-muted); font-size: 12px; line-height: 16px; }
|
|
196
|
+
.fw-root .fw-view-agents .fw-subtitle-extra { flex: none; white-space: nowrap; }
|
|
196
197
|
.fw-root .fw-view-agents .fw-subtitle-text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
197
198
|
.fw-root .fw-view-agents .fw-detail-icon { flex: none; width: 16px; height: 16px; align-items: center; justify-content: center; overflow: hidden; }
|
|
198
199
|
.fw-root .fw-view-agents .fw-detail { font-size: 12px; line-height: 16px; }
|
|
@@ -234,8 +235,8 @@
|
|
|
234
235
|
.fw-root .fw-bar.fw-k-pipeline.fw-has-marks { background: color-mix(in oklab, var(--tone) 9%, transparent); box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--tone) 18%, transparent); }
|
|
235
236
|
.fw-root .fw-bar.fw-k-pipeline.fw-has-agents { background: repeating-linear-gradient(-45deg, var(--fw-hatch) 0 1px, transparent 1px 5px), color-mix(in oklab, var(--fw-text) 4%, transparent); box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--fw-text) 12%, transparent); }
|
|
236
237
|
/* An agent bar with no child marks says who it is by its lane color, never a neutral grey. */
|
|
237
|
-
/* In the agent view the bar's own extent between steps is waiting:
|
|
238
|
-
.fw-root .fw-view-agents .fw-bar.fw-k-pipeline.fw-has-marks { background:
|
|
238
|
+
/* In the agent view the bar's own extent between steps is waiting: a flat faint fill under the step segments (long hatching read muddy). */
|
|
239
|
+
.fw-root .fw-view-agents .fw-bar.fw-k-pipeline.fw-has-marks { background: color-mix(in oklab, var(--tone) 12%, transparent); }
|
|
239
240
|
/* An agent lane is a tint of its color; full saturation is kept for its model and tool segments and its status dot, so a run never
|
|
240
241
|
reads as a wall of colored slabs. */
|
|
241
242
|
.fw-root .fw-view-agents .fw-bar.fw-k-pipeline:not(.fw-has-marks, .fw-has-agents) { background: color-mix(in oklab, var(--tone) 30%, var(--fw-surface)); box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--tone) 55%, transparent); }
|
|
@@ -309,8 +310,8 @@
|
|
|
309
310
|
.fw-root.fw-root-agents .fw-card, .fw-root.fw-root-agents .fw-card-above .fw-card { position: relative; left: auto !important; top: auto !important; transform: none; animation-name: fw-arrive; width: auto; max-width: 560px; }
|
|
310
311
|
.fw-root .fw-seg-alt { filter: brightness(.78); }
|
|
311
312
|
/* Agent view: the scrubber track shows how far the run has played, so at rest it reads full, not empty. */
|
|
312
|
-
.fw-root.fw-root-agents .fw-slider { background: linear-gradient(90deg, var(--fw-
|
|
313
|
-
/* The playhead: a round knob on a
|
|
313
|
+
.fw-root.fw-root-agents .fw-slider { background: linear-gradient(90deg, color-mix(in oklab, var(--fw-text) 32%, transparent) var(--fw-progress), var(--fw-well) var(--fw-progress)) 0 50% / 100% 4px no-repeat; }
|
|
314
|
+
/* The playhead: a round knob on a thin neutral track, visible at rest without outweighing the chart. */
|
|
314
315
|
.fw-root.fw-root-agents .fw-slider::-webkit-slider-thumb { width: 14px; height: 14px; border-radius: 50%; background: var(--fw-text); box-shadow: 0 0 0 3px var(--fw-surface); }
|
|
315
316
|
.fw-root.fw-root-agents .fw-slider::-moz-range-thumb { width: 14px; height: 14px; border-radius: 50%; background: var(--fw-text); box-shadow: 0 0 0 3px var(--fw-surface); }
|
|
316
317
|
.fw-root .fw-card { position: absolute; z-index: 20; width: 320px; padding: 12px; border-radius: 12px; background: var(--fw-raised); border: 1px solid var(--fw-border);
|
package/dist/react/index.js
CHANGED
|
@@ -2833,6 +2833,11 @@ function agentSummary(row) {
|
|
|
2833
2833
|
tools ? `${tools} tool ${tools === 1 ? "call" : "calls"}` : ""
|
|
2834
2834
|
].filter(Boolean).join(" · ");
|
|
2835
2835
|
}
|
|
2836
|
+
/** The summary split where it may be cut: the tool count goes first when the line does not fit, never half a word. */
|
|
2837
|
+
function agentSummaryParts(row) {
|
|
2838
|
+
const tools = / · (\d+ tool calls?)$/.exec(agentSummary(row));
|
|
2839
|
+
return tools ? [agentSummary(row).slice(0, tools.index), tools[1]] : [agentSummary(row)];
|
|
2840
|
+
}
|
|
2836
2841
|
/**
|
|
2837
2842
|
* The agent view's rows: families folded until opened, and an opened agent's own steps (its turns and tool calls, not its
|
|
2838
2843
|
* child agents) nested beneath it with their icons, durations and costs, as a reader drills from the run into one agent.
|
|
@@ -3322,6 +3327,7 @@ const FlowRow = memo(function FlowRow(props) {
|
|
|
3322
3327
|
const kind = !row.ok ? "failed" : row.kind;
|
|
3323
3328
|
const marks = isAgent || row.hasChildren || row.id.startsWith("run:") ? folded && !agentView ? row.segments : row.own : [];
|
|
3324
3329
|
const label = endLabel(row, clockMs);
|
|
3330
|
+
const summary = agentSummaryParts(row);
|
|
3325
3331
|
const inspect = (event) => props.onInspect(row.id, event.currentTarget);
|
|
3326
3332
|
const family = agentView && row.id.startsWith("family:");
|
|
3327
3333
|
const step = agentView && row.stepOf !== void 0;
|
|
@@ -3393,6 +3399,10 @@ const FlowRow = memo(function FlowRow(props) {
|
|
|
3393
3399
|
className: "fw-toggle-space",
|
|
3394
3400
|
"aria-hidden": true
|
|
3395
3401
|
})),
|
|
3402
|
+
agentView && !opens && /* @__PURE__ */ jsx("span", {
|
|
3403
|
+
className: "fw-toggle-space",
|
|
3404
|
+
"aria-hidden": true
|
|
3405
|
+
}),
|
|
3396
3406
|
(!agentView || step) && /* @__PURE__ */ jsx("span", {
|
|
3397
3407
|
className: "fw-icon-tile",
|
|
3398
3408
|
"aria-hidden": true,
|
|
@@ -3429,14 +3439,21 @@ const FlowRow = memo(function FlowRow(props) {
|
|
|
3429
3439
|
]
|
|
3430
3440
|
}), agentView && /* @__PURE__ */ jsxs("span", {
|
|
3431
3441
|
className: "fw-subtitle",
|
|
3432
|
-
children: [
|
|
3433
|
-
|
|
3434
|
-
|
|
3435
|
-
|
|
3436
|
-
|
|
3437
|
-
|
|
3438
|
-
|
|
3439
|
-
|
|
3442
|
+
children: [
|
|
3443
|
+
renderIcon && /* @__PURE__ */ jsx("span", {
|
|
3444
|
+
className: "fw-detail-icon",
|
|
3445
|
+
"aria-hidden": true,
|
|
3446
|
+
children: renderIcon(span)
|
|
3447
|
+
}),
|
|
3448
|
+
/* @__PURE__ */ jsx("span", {
|
|
3449
|
+
className: "fw-subtitle-text",
|
|
3450
|
+
children: span.detail && span.detail !== props.sharedDetail ? `${span.detail} · ${summary[0]}` : summary[0]
|
|
3451
|
+
}),
|
|
3452
|
+
summary[1] && /* @__PURE__ */ jsxs("span", {
|
|
3453
|
+
className: "fw-subtitle-extra",
|
|
3454
|
+
children: ["· ", summary[1]]
|
|
3455
|
+
})
|
|
3456
|
+
]
|
|
3440
3457
|
})]
|
|
3441
3458
|
}),
|
|
3442
3459
|
folded && /* @__PURE__ */ jsxs("span", {
|
|
@@ -3940,6 +3957,18 @@ function FlowBody(props) {
|
|
|
3940
3957
|
props.onScrub(marker.at);
|
|
3941
3958
|
}
|
|
3942
3959
|
}, `e-${marker.at}-${marker.label}`)),
|
|
3960
|
+
props.pauses?.filter((pause) => pauseLabels.has(pause)).map((pause) => /* @__PURE__ */ jsx("span", {
|
|
3961
|
+
className: "fw-pause-label",
|
|
3962
|
+
style: {
|
|
3963
|
+
"--s": pause.startMs,
|
|
3964
|
+
"--e": pause.endMs
|
|
3965
|
+
},
|
|
3966
|
+
title: pause.detail ? `${pause.label}: ${pause.detail}` : pause.label,
|
|
3967
|
+
tabIndex: 0,
|
|
3968
|
+
"aria-label": `${pause.label}, ${duration(pause.endMs - pause.startMs)}${pause.detail ? `: ${pause.detail}` : ""}`,
|
|
3969
|
+
onPointerDown: (event) => event.stopPropagation(),
|
|
3970
|
+
children: /* @__PURE__ */ jsx("b", { children: duration(pause.endMs - pause.startMs) })
|
|
3971
|
+
}, `pl-${pause.startMs}`)),
|
|
3943
3972
|
jumped && /* @__PURE__ */ jsx("span", {
|
|
3944
3973
|
className: "fw-event-label",
|
|
3945
3974
|
"data-tone": jumped.tone ?? "neutral",
|
|
@@ -4046,14 +4075,7 @@ function FlowBody(props) {
|
|
|
4046
4075
|
"--s": pause.startMs,
|
|
4047
4076
|
"--e": pause.endMs
|
|
4048
4077
|
},
|
|
4049
|
-
title: `${pause.label}, ${duration(pause.endMs - pause.startMs)}
|
|
4050
|
-
children: pauseLabels.has(pause) && /* @__PURE__ */ jsx("span", {
|
|
4051
|
-
className: "fw-pause-label",
|
|
4052
|
-
title: pause.detail ? `${pause.label}: ${pause.detail}` : pause.label,
|
|
4053
|
-
tabIndex: 0,
|
|
4054
|
-
"aria-label": `${pause.label}, ${duration(pause.endMs - pause.startMs)}${pause.detail ? `: ${pause.detail}` : ""}`,
|
|
4055
|
-
children: /* @__PURE__ */ jsx("b", { children: duration(pause.endMs - pause.startMs) })
|
|
4056
|
-
})
|
|
4078
|
+
title: `${pause.label}, ${duration(pause.endMs - pause.startMs)}`
|
|
4057
4079
|
}, `p-${pause.startMs}`)), props.markers?.map((marker) => /* @__PURE__ */ jsx("span", {
|
|
4058
4080
|
className: "fw-marker",
|
|
4059
4081
|
"data-tone": marker.tone ?? "neutral",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tangle-network/charts",
|
|
3
|
-
"version": "0.21.
|
|
3
|
+
"version": "0.21.9",
|
|
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",
|