diff --git a/desktop/src/components/AvatarStack.svelte b/desktop/src/components/AvatarStack.svelte
new file mode 100644
index 000000000..1ba884acc
--- /dev/null
+++ b/desktop/src/components/AvatarStack.svelte
@@ -0,0 +1,59 @@
+
+
+
+
+
+
(hovered = true)}
+ onmouseleave={() => (hovered = false)}>
+ {#each people as person, index (person.did)}
+
+ (cardsOpen[person.did] = expanded)} />
+
+ {/each}
+
diff --git a/desktop/src/components/RepoHeader.svelte b/desktop/src/components/RepoHeader.svelte
index c3d0777db..22ffc4d03 100644
--- a/desktop/src/components/RepoHeader.svelte
+++ b/desktop/src/components/RepoHeader.svelte
@@ -3,10 +3,9 @@
import type { RepoInfo } from "@bindings/repo/RepoInfo";
import * as router from "@app/lib/router";
- import { authorForNodeId } from "@app/lib/utils";
+ import AvatarStack from "@app/components/AvatarStack.svelte";
import CheckoutRepoButton from "@app/components/CheckoutRepoButton.svelte";
- import NodeId from "@app/components/NodeId.svelte";
import ShareButton from "@app/components/ShareButton.svelte";
import VisibilityBadge from "@app/components/VisibilityBadge.svelte";
@@ -18,12 +17,6 @@
const { repo, config }: Props = $props();
const project = $derived(repo.payloads["xyz.radicle.project"]!);
-
- // The cards are portaled out of the stack, so moving onto one ends the
- // stack's hover. Keep it fanned out while any card is still open.
- let hovered = $state(false);
- const cardsOpen: Record = $state({});
- const fanned = $derived(hovered || Object.values(cardsOpen).some(Boolean));