feat(graph-ui): polish memory graph visuals

This commit is contained in:
youzini
2026-06-04 08:07:09 +00:00
parent fe18a05147
commit 05d2c703c8
4 changed files with 389 additions and 54 deletions

View File

@@ -12,6 +12,11 @@ globalThis.ResizeObserver = class ResizeObserver {
disconnect() {}
};
const canvasMockStats = {
radialGradientCalls: 0,
linearGradientCalls: 0,
};
function createNoopContext() {
const noop = () => {};
return {
@@ -35,7 +40,14 @@ function createNoopContext() {
fillRect: noop,
strokeRect: noop,
measureText: (text = "") => ({ width: String(text).length * 6 }),
createRadialGradient: () => ({ addColorStop: noop }),
createRadialGradient: () => {
canvasMockStats.radialGradientCalls += 1;
return { addColorStop: noop };
},
createLinearGradient: () => {
canvasMockStats.linearGradientCalls += 1;
return { addColorStop: noop };
},
set fillStyle(_value) {},
set strokeStyle(_value) {},
set lineWidth(_value) {},
@@ -162,4 +174,41 @@ const { GraphRenderer } = await import("../ui/graph-renderer.js");
renderer.destroy();
}
{
const graph = createGraphFixture();
const before = JSON.stringify(graph);
const renderer = new GraphRenderer(createCanvas(), {
runtimeConfig: { graphUseNativeLayout: false, graphNativeForceDisable: true },
layoutConfig: {
minNodeRadius: 4,
maxNodeRadius: 14,
neuralIterations: 8,
},
});
const radius = renderer._nodeRadius({ type: "character", importance: 10 });
assert.equal(radius, 14);
renderer.loadGraph(graph, { userPovAliases: ["Host"] });
renderer.highlightNode("char-1");
assertInputUnchanged(graph, before);
assert.ok(canvasMockStats.radialGradientCalls > 0);
assert.ok(canvasMockStats.linearGradientCalls > 0);
renderer.destroy();
}
{
const graph = createGraphFixture();
const before = JSON.stringify(graph);
const renderer = new GraphRenderer(createCanvas(), {
theme: "paperDawn",
runtimeConfig: { graphUseNativeLayout: false, graphNativeForceDisable: true },
layoutConfig: { neuralIterations: 8 },
});
assert.doesNotThrow(() => renderer.loadGraph(graph, { userPovAliases: ["Host"] }));
renderer.highlightNode("objective-1");
assertInputUnchanged(graph, before);
renderer.destroy();
}
console.log("graph-renderer guardrail tests passed");