diff --git a/frontend/src/components/Flow/EdgeInspector.tsx b/frontend/src/components/Flow/EdgeInspector.tsx index 5c46932..c0db9f3 100644 --- a/frontend/src/components/Flow/EdgeInspector.tsx +++ b/frontend/src/components/Flow/EdgeInspector.tsx @@ -11,6 +11,7 @@ import useCustomToast from "@/hooks/useCustomToast" import { cn } from "@/lib/utils" import { displayName } from "./deriveEdges" import { useLiveValue } from "./liveStore" +import { MessageSparkline } from "./MessageSparkline" function relativeTime(ts: number | null | undefined): string { if (!ts) return "not seen yet" @@ -173,6 +174,17 @@ export function EdgeInspector({ + {/* The same curve the node panel draws for this message: one value + says little, how it has been moving says the rest. */} + {live === undefined ? null : ( +
+ +
+ )} + {/* Several nodes can publish one message, and so can a dashboard or another flow — so the value alone does not say what caused it. */} {live?.source && live.source.kind !== "node" ? ( diff --git a/frontend/src/components/Flow/flow.css b/frontend/src/components/Flow/flow.css index 5428cd4..16fa810 100644 --- a/frontend/src/components/Flow/flow.css +++ b/frontend/src/components/Flow/flow.css @@ -37,15 +37,16 @@ animation: edge-pulse var(--duration-pulse) var(--ease-emphasized); } + /* + * No `to` on purpose: the implied one is the edge's own resting style, so + * the decay lands exactly where it started rather than on a second colour + * that has to snap back — and a selected edge decays to its own blue. + */ @keyframes edge-pulse { from { stroke: var(--primary); stroke-width: 2.5; } - to { - stroke: var(--xy-edge-stroke); - stroke-width: var(--xy-edge-stroke-width); - } } }