Even more UI tweaks

This commit is contained in:
Colin Dawson 2026-03-13 09:18:35 +00:00
parent 47b0528275
commit 7bf87b95a4

View File

@ -515,6 +515,42 @@ const VisualiserTab: React.FC<VisualiserTabProps> = ({
return eligibility;
}, [edges, levelByGuid]);
const mergedRightSourcesByTarget = React.useMemo(() => {
const map = new Map<string, Set<string>>();
edges.forEach((edge) => {
const sourceLevel = levelByGuid.get(edge.sourceGuid) ?? 0;
const targetLevel = levelByGuid.get(edge.targetGuid) ?? 0;
const levelDelta = targetLevel - sourceLevel;
if (levelDelta <= 0) {
return;
}
if (!mergedRightIncomingByTarget.has(edge.targetGuid)) {
return;
}
const eligibility = rightMergeEligibleByTarget.get(edge.targetGuid);
const isMergedEdge =
(levelDelta > 1 && eligibility?.mergeLong) ||
(levelDelta === 1 && eligibility?.mergeAdjacent);
if (!isMergedEdge) {
return;
}
const contributors = map.get(edge.targetGuid) ?? new Set<string>();
contributors.add(edge.sourceGuid);
map.set(edge.targetGuid, contributors);
});
return map;
}, [
edges,
levelByGuid,
mergedRightIncomingByTarget,
rightMergeEligibleByTarget,
]);
const connectedByGuid = React.useMemo(() => {
const map = new Map<string, Set<string>>();
@ -706,13 +742,12 @@ const VisualiserTab: React.FC<VisualiserTabProps> = ({
const mergedRightLaneX = mergedRightIncomingByTarget.get(
edge.targetGuid,
);
const rightMergeEligibility = rightMergeEligibleByTarget.get(
const mergedRightSources = mergedRightSourcesByTarget.get(
edge.targetGuid,
);
const isMergedRight =
mergedRightLaneX !== undefined &&
((levelDelta > 1 && rightMergeEligibility?.mergeLong) ||
(levelDelta === 1 && rightMergeEligibility?.mergeAdjacent));
(mergedRightSources?.has(edge.sourceGuid) ?? false);
let path = "";
let labelX = 0;
@ -907,16 +942,11 @@ const VisualiserTab: React.FC<VisualiserTabProps> = ({
const endX = target.x + target.width / 2;
const endY = target.y;
const mergedSources =
mergedRightSourcesByTarget.get(targetGuid) ?? new Set<string>();
const mergedIsActive =
hoveredGuid !== null &&
(hoveredGuid === targetGuid ||
edges.some(
(edge) =>
edge.targetGuid === targetGuid &&
edge.sourceGuid === hoveredGuid &&
(levelByGuid.get(edge.targetGuid) ?? 0) >
(levelByGuid.get(edge.sourceGuid) ?? 0),
));
(hoveredGuid === targetGuid || mergedSources.has(hoveredGuid));
const mergedIsDim = hoveredGuid !== null && !mergedIsActive;
const mergedIntensityClass =
hoveredGuid === targetGuid