From 9c12f62345251c007543ef1e7d6e450e6ff51010 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 31 May 2026 19:12:39 +0200 Subject: [PATCH] fix(stammbaum): keep dimmed nodes opaque so connectors do not bleed through (#703) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Group opacity on the node made the whole node translucent — including its card fill — so the connector lines drawn beneath a dimmed node showed through it. Render the card fill at full strength outside the dim group and move the lineage focus+dim onto an inner content group (outline + labels) only. The focus ring also leaves the dim group, so a dimmed-but-focused node keeps a full-strength ring. Co-Authored-By: Claude Opus 4.8 --- .../lib/person/genealogy/StammbaumNode.svelte | 63 +++++++++++-------- .../genealogy/StammbaumTree.svelte.test.ts | 24 ++++++- 2 files changed, 59 insertions(+), 28 deletions(-) diff --git a/frontend/src/lib/person/genealogy/StammbaumNode.svelte b/frontend/src/lib/person/genealogy/StammbaumNode.svelte index e17b3c09..9b89fd91 100644 --- a/frontend/src/lib/person/genealogy/StammbaumNode.svelte +++ b/frontend/src/lib/person/genealogy/StammbaumNode.svelte @@ -9,7 +9,7 @@ interface Props { node: PersonNodeDTO; pos: { x: number; y: number }; selected: boolean; - /** Dim the whole node when a lineage is highlighted and this person is outside it. */ + /** Dim the node's outline + labels when a lineage is highlighted and this person is outside it. */ dimmed?: boolean; onSelect: (id: string) => void; } @@ -38,12 +38,11 @@ const datesLabel = $derived( aria-label="{node.displayName}{datesLabel}" aria-expanded={selected} transform="translate({pos.x}, {pos.y})" - opacity={dimmed ? DIMMED_OPACITY : undefined} onclick={() => onSelect(node.id)} onkeydown={handleKey} onfocus={() => (focused = true)} onblur={() => (focused = false)} - class="lineage-fade cursor-pointer focus:outline-none" + class="cursor-pointer focus:outline-none" > {#if focused} {/if} + - {#if selected} - - {/if} - - {node.displayName} - - {#if node.birthYear || node.deathYear} + + + + {#if selected} + + {/if} - {node.birthYear ?? '?'}–{node.deathYear ?? ''} + {node.displayName} - {/if} + {#if node.birthYear || node.deathYear} + + {node.birthYear ?? '?'}–{node.deathYear ?? ''} + + {/if} +