From c1ae70282cb5d58527180614a80823d80ca478c5 Mon Sep 17 00:00:00 2001 From: Max Richter Date: Fri, 13 Feb 2026 00:52:07 +0100 Subject: [PATCH] feat: add color to sockets Closes #34 --- .../main.test.ts-snapshots/test-1-linux.png | Bin 43167 -> 44322 bytes app/src/lib/graph-interface/edges/Edge.svelte | 24 +++++++--- .../MeshGradientLineMaterial.svelte | 1 + .../lib/graph-interface/graph-state.svelte.ts | 26 ++++++++++ .../lib/graph-interface/graph/Graph.svelte | 11 +++++ app/src/lib/graph-interface/graph/colors.ts | 45 ++++++++++++++++++ .../graph-interface/node/NodeHeader.svelte | 21 ++++++-- .../graph-interface/node/NodeParameter.svelte | 28 +++++++---- 8 files changed, 135 insertions(+), 21 deletions(-) create mode 100644 app/src/lib/graph-interface/graph/colors.ts diff --git a/app/e2e/main.test.ts-snapshots/test-1-linux.png b/app/e2e/main.test.ts-snapshots/test-1-linux.png index 7be9fee1f53ebf2d58ef41b17e5dfaec41053d40..2ba53055247083df0be0813fd70ae4bc2a9d8c98 100644 GIT binary patch literal 44322 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

msbZFa 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�r&Sp3_Q=5%ivo+ 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 E2S3oui~s-t diff --git a/app/src/lib/graph-interface/edges/Edge.svelte b/app/src/lib/graph-interface/edges/Edge.svelte index fe58df3..4f5a9e3 100644 --- a/app/src/lib/graph-interface/edges/Edge.svelte +++ b/app/src/lib/graph-interface/edges/Edge.svelte @@ -6,15 +6,12 @@ toneMapped: false }); - let lineColor = $state(colors.outline.clone().convertSRGBToLinear()); - $effect.root(() => { $effect(() => { if (appSettings.value.theme === undefined) { return; } circleMaterial.color = colors.outline.clone().convertSRGBToLinear(); - lineColor = colors.outline.clone().convertSRGBToLinear(); }); }); @@ -35,6 +32,7 @@ import { CubicBezierCurve } from 'three/src/extras/curves/CubicBezierCurve.js'; import { Vector2 } from 'three/src/math/Vector2.js'; import { getGraphState } from '../graph-state.svelte'; + import MeshGradientLineMaterial from './MeshGradientLine/MeshGradientLineMaterial.svelte'; const graphState = getGraphState(); @@ -45,12 +43,17 @@ y2: number; z: number; id?: string; + inputType?: string; + outputType?: string; }; - const { x1, y1, x2, y2, z, id }: Props = $props(); + const { x1, y1, x2, y2, z, inputType = 'unknown', outputType = 'unknown', id }: Props = $props(); const thickness = $derived(Math.max(0.001, 0.00082 * Math.exp(0.055 * z))); + const inputColor = $derived(graphState.colors.getColor(inputType)); + const outputColor = $derived(graphState.colors.getColor(outputType)); + let points = $state([]); let lastId: string | null = null; @@ -106,9 +109,9 @@ position.z={y1} position.y={0.8} rotation.x={-Math.PI / 2} - material={circleMaterial} > + + {#if graphState.hoveredEdgeId === id} @@ -126,7 +130,8 @@ @@ -135,5 +140,10 @@ - + diff --git a/app/src/lib/graph-interface/edges/MeshGradientLine/MeshGradientLineMaterial.svelte b/app/src/lib/graph-interface/edges/MeshGradientLine/MeshGradientLineMaterial.svelte index d30a38a..8b212da 100644 --- a/app/src/lib/graph-interface/edges/MeshGradientLine/MeshGradientLineMaterial.svelte +++ b/app/src/lib/graph-interface/edges/MeshGradientLine/MeshGradientLineMaterial.svelte @@ -23,6 +23,7 @@ let { invalidate, size } = useThrelte(); + // svelte-ignore state_referenced_locally const uniforms = { lineWidth: { value: width }, colorStart: { value: new Color(colorStart) }, diff --git a/app/src/lib/graph-interface/graph-state.svelte.ts b/app/src/lib/graph-interface/graph-state.svelte.ts index a62fac5..50018d0 100644 --- a/app/src/lib/graph-interface/graph-state.svelte.ts +++ b/app/src/lib/graph-interface/graph-state.svelte.ts @@ -3,6 +3,7 @@ import { getContext, setContext } from 'svelte'; import { SvelteMap, SvelteSet } from 'svelte/reactivity'; import type { OrthographicCamera, Vector3 } from 'three'; import type { GraphManager } from './graph-manager.svelte'; +import { ColorGenerator } from './graph/colors'; import { getNodeHeight, getSocketPosition } from './helpers/nodeHelpers'; const graphStateKey = Symbol('graph-state'); @@ -28,7 +29,32 @@ type EdgeData = { points: Vector3[]; }; +const predefinedColors = { + path: { + hue: 80, + lightness: 20, + saturation: 80 + }, + float: { + hue: 70, + lightness: 10, + saturation: 0 + }, + geometry: { + hue: 0, + lightness: 50, + saturation: 70 + }, + '*': { + hue: 200, + lightness: 20, + saturation: 100 + } +} as const; + export class GraphState { + colors = new ColorGenerator(predefinedColors); + constructor(private graph: GraphManager) { $effect.root(() => { $effect(() => { diff --git a/app/src/lib/graph-interface/graph/Graph.svelte b/app/src/lib/graph-interface/graph/Graph.svelte index 48a9304..2ecaea5 100644 --- a/app/src/lib/graph-interface/graph/Graph.svelte +++ b/app/src/lib/graph-interface/graph/Graph.svelte @@ -95,6 +95,13 @@ graphState.activeSocket = null; graphState.addMenuPosition = null; } + + function getSocketType(node: NodeInstance, index: number | string): string { + if (typeof index === 'string') { + return node.state.type?.inputs?.[index].type || 'unknown'; + } + return node.state.type?.outputs?.[index] || 'unknown'; + } = new Map(); + private lightnessLevels = [10, 60]; + + constructor(predefined: Record) { + for (const [id, colorStr] of Object.entries(predefined)) { + this.colors.set(id, colorStr); + } + } + + public getColor(id: string): string { + if (this.colors.has(id)) { + return this.colorToHsl(this.colors.get(id)!); + } + + const newColor = this.generateNewColor(); + this.colors.set(id, newColor); + console.log(id, newColor); + return this.colorToHsl(newColor); + } + + private generateNewColor(): Color { + const existingHues = Array.from(this.colors.values()).map(c => c.hue).sort(); + let hue = existingHues[0]; + let attempts = 0; + + while ( + existingHues.some(h => Math.abs(h - hue) < 30 || Math.abs(h - hue) > 330) + && attempts < 360 + ) { + hue = (hue + 30) % 360; + attempts++; + } + + const lightness = 60; + + return { hue, lightness, saturation: 100 }; + } + + private colorToHsl(c: Color): string { + return `hsl(${c.hue}, ${c.saturation}%, ${c.lightness}%)`; + } +} diff --git a/app/src/lib/graph-interface/node/NodeHeader.svelte b/app/src/lib/graph-interface/node/NodeHeader.svelte index 5532b17..c82fa59 100644 --- a/app/src/lib/graph-interface/node/NodeHeader.svelte +++ b/app/src/lib/graph-interface/node/NodeHeader.svelte @@ -1,6 +1,6 @@

@@ -96,10 +107,10 @@ width: 30px; height: 30px; border-radius: 100%; - box-shadow: 0px 0px 10px var(--color-layer-3); - background-color: var(--color-layer-3); - outline: solid thin white; - opacity: 0.2; + box-shadow: 0px 0px 10px var(--socket-color); + background-color: var(--socket-color); + outline: solid thin var(--socket-color); + opacity: 0.7; z-index: -10; } diff --git a/app/src/lib/graph-interface/node/NodeParameter.svelte b/app/src/lib/graph-interface/node/NodeParameter.svelte index 6cd890b..8d3d8a7 100644 --- a/app/src/lib/graph-interface/node/NodeParameter.svelte +++ b/app/src/lib/graph-interface/node/NodeParameter.svelte @@ -1,5 +1,5 @@
{#key id && graphId} @@ -95,10 +107,8 @@ xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="none" - style={` - --path: path("${path}"); - --hover-path: path("${pathHover}"); - `} + style:--path={`path("${path}")`} + style:--hover-path={`path("${pathHover}")`} > @@ -126,10 +136,10 @@ width: 30px; height: 30px; border-radius: 100%; - box-shadow: 0px 0px 10px var(--color-layer-3); - background-color: var(--color-layer-3); - outline: solid thin white; - opacity: 0.2; + box-shadow: 0px 0px 10px var(--socket-color); + background-color: var(--socket-color); + outline: solid thin var(--socket-color); + opacity: 0.5; z-index: -10; }