setView("summary")}
+ />
);
const headerActions = (
-
- {view === "memories" && viewerIsOwner && effectivePubkey ? (
-
- ) : null}
-
-
+
);
const profileBody = (
diff --git a/desktop/src/features/profile/ui/UserProfilePanelHeaderControls.tsx b/desktop/src/features/profile/ui/UserProfilePanelHeaderControls.tsx
new file mode 100644
index 000000000..f590bdecb
--- /dev/null
+++ b/desktop/src/features/profile/ui/UserProfilePanelHeaderControls.tsx
@@ -0,0 +1,72 @@
+import { ArrowLeft, X } from "lucide-react";
+
+import { MemoryRefreshButton } from "@/features/agent-memory/ui/MemorySection";
+import type { ProfilePanelView } from "@/features/profile/ui/UserProfilePanelUtils";
+import {
+ AuxiliaryPanelHeaderGroup,
+ AuxiliaryPanelTitle,
+} from "@/shared/layout/AuxiliaryPanelHeader";
+import { Button } from "@/shared/ui/button";
+
+export function UserProfilePanelHeaderLeft({
+ title,
+ view,
+ onBack,
+}: {
+ title: string;
+ view: ProfilePanelView;
+ onBack: () => void;
+}) {
+ return (
+
+ {view !== "summary" ? (
+
+ ) : null}
+ {title}
+
+ );
+}
+
+export function UserProfilePanelHeaderActions({
+ effectivePubkey,
+ view,
+ viewerIsOwner,
+ onClose,
+}: {
+ effectivePubkey: string | null;
+ view: ProfilePanelView;
+ viewerIsOwner: boolean;
+ onClose: () => void;
+}) {
+ return (
+
+ {view === "memories" && viewerIsOwner && effectivePubkey ? (
+
+ ) : null}
+
+
+ );
+}
diff --git a/desktop/tests/e2e/mentions.spec.ts b/desktop/tests/e2e/mentions.spec.ts
index c969bd2a0..25ec481fc 100644
--- a/desktop/tests/e2e/mentions.spec.ts
+++ b/desktop/tests/e2e/mentions.spec.ts
@@ -1034,7 +1034,7 @@ test("clicking author name opens user profile panel", async ({ page }) => {
// Click now opens the full profile panel instead of the popover
const panel = page.getByTestId("user-profile-panel");
await expect(panel).toBeVisible();
- await expect(panel).toContainText("deadbeef");
+ await expect(panel).toContainText("npub1mock...");
});
test("hovering avatar opens popover, clicking opens profile panel", async ({