Skip to content

Commit 5471d2a

Browse files
opencode-agent[bot]Test
andauthored
fix(app): reveal tab avatar on hover (anomalyco#33824)
Co-authored-by: Test <test@opencode.test>
1 parent b44af11 commit 5471d2a

2 files changed

Lines changed: 11 additions & 39 deletions

File tree

packages/app/src/pages/layout/session-tab-avatar.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,17 @@ export function SessionTabAvatar(props: {
2727
/>
2828
}
2929
>
30-
<SessionProgressIndicatorV2 class="shrink-0" />
30+
<span class="relative block size-4 shrink-0">
31+
<SessionProgressIndicatorV2 class="absolute inset-0 group-hover:invisible" />
32+
<span class="invisible absolute inset-0 group-hover:visible">
33+
<ProjectAvatar
34+
fallback={displayName(props.project ?? { worktree: props.directory })}
35+
src={getProjectAvatarSource(props.project?.id, props.project?.icon)}
36+
variant={getProjectAvatarVariant(props.project?.icon?.color)}
37+
unread={state.unread()}
38+
/>
39+
</span>
40+
</span>
3141
</Show>
3242
)
3343
}

packages/app/src/pages/session/timeline/message-timeline.tsx

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import { IconButton } from "@opencode-ai/ui/icon-button"
3434
import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu"
3535
import { Dialog } from "@opencode-ai/ui/dialog"
3636
import { InlineInput } from "@opencode-ai/ui/inline-input"
37-
import { Spinner } from "@opencode-ai/ui/spinner"
3837
import { SessionRetry } from "@opencode-ai/session-ui/session-retry"
3938
import { ScrollView } from "@opencode-ai/ui/scroll-view"
4039
import { StickyAccordionHeader } from "@opencode-ai/ui/sticky-accordion-header"
@@ -66,9 +65,7 @@ import { legacySessionHref, requireServerKey, sessionHref } from "@/utils/sessio
6665
import { useSDK } from "@/context/sdk"
6766
import { useSync } from "@/context/sync"
6867
import { notifySessionTabsRemoved } from "@/components/titlebar-session-events"
69-
import { messageAgentColor } from "@/utils/agent"
7068
import { sessionTitle } from "@/utils/session-title"
71-
import { makeTimer } from "@solid-primitives/timer"
7269
import { scheduleConnectedMeasure } from "./measure"
7370
import { createTimelineProjection } from "./projection"
7471
import { MessageComment, SummaryDiff, TimelineRow, TimelineRowMap } from "./rows"
@@ -277,25 +274,7 @@ export function MessageTimeline(props: {
277274
if (!id) return idle
278275
return sync().data.session_status[id] ?? idle
279276
})
280-
const working = createMemo(() => sessionStatus().type !== "idle")
281277
const sessionMessages = createMemo(() => (sessionID() ? (sync().data.message[sessionID()!] ?? []) : []))
282-
const tint = createMemo(() => messageAgentColor(sessionMessages(), sync().data.agent))
283-
284-
const [timeoutDone, setTimeoutDone] = createSignal(true)
285-
286-
const workingStatus = createMemo<"hidden" | "showing" | "hiding">((prev) => {
287-
if (working()) return "showing"
288-
if (prev === "showing" || !timeoutDone()) return "hiding"
289-
return "hidden"
290-
})
291-
292-
createEffect(() => {
293-
if (workingStatus() !== "hiding") return
294-
295-
setTimeoutDone(false)
296-
makeTimer(() => setTimeoutDone(true), 260, setTimeout)
297-
})
298-
299278
const info = createMemo(() => {
300279
const id = sessionID()
301280
if (!id) return
@@ -1338,23 +1317,6 @@ export function MessageTimeline(props: {
13381317
/
13391318
</span>
13401319
</Show>
1341-
<div
1342-
class="shrink-0 flex items-center justify-center overflow-hidden transition-[width,margin] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)]"
1343-
style={{
1344-
width: working() ? "16px" : "0px",
1345-
"margin-right": working() ? "8px" : "0px",
1346-
}}
1347-
aria-hidden="true"
1348-
>
1349-
<Show when={workingStatus() !== "hidden"}>
1350-
<div
1351-
class="transition-opacity duration-200 ease-out"
1352-
classList={{ "opacity-0": workingStatus() === "hiding" }}
1353-
>
1354-
<Spinner class="size-4" style={{ color: tint() ?? "var(--icon-interactive-base)" }} />
1355-
</div>
1356-
</Show>
1357-
</div>
13581320
<Show when={childTitle() || title.editing}>
13591321
<Show
13601322
when={title.editing}

0 commit comments

Comments
 (0)