Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Affan Ali <93028901+affanali2k3@users.noreply.github.com> Co-authored-by: affanali2k3 <affanalikhanxx@gmail.com> Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: 𝓛𝓲𝓽𝓽𝓵𝓮 𝓕𝓻𝓪𝓷𝓴 <little-frank@opencord.local> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Jay V <air@live.ca> Co-authored-by: Dax Raad <d@ironbay.co> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: OpeOginni <107570612+OpeOginni@users.noreply.github.com> Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: Ben Guthrie <benjee.012@gmail.com> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: Filip <34747899+neriousy@users.noreply.github.com> Co-authored-by: Max Anderson <max.a.anderson95@gmail.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: Jack <jack@anoma.ly> Co-authored-by: Shoubhit Dash <shoubhit2005@gmail.com> Co-authored-by: Dustin Deus <deusdustin@gmail.com> Co-authored-by: starptech <starptech@starptechs-MBP.fritz.box> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com> Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: runvip <164729189+runvip@users.noreply.github.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Julian Coy <julian@ex-machina.co> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com>
39 lines
1.6 KiB
TypeScript
39 lines
1.6 KiB
TypeScript
import type { LocalProject } from "@/context/layout"
|
|
import { getProjectAvatarVariant } from "@/context/layout"
|
|
import { displayName, getProjectAvatarSource } from "@/pages/layout/helpers"
|
|
import { useSessionTabAvatarState } from "@/pages/layout/project-avatar-state"
|
|
import { ProjectAvatar } from "@opencode-ai/ui/v2/project-avatar-v2"
|
|
import { SessionProgressIndicatorV2 } from "@opencode-ai/session-ui/v2/session-progress-indicator-v2"
|
|
import { Show } from "solid-js"
|
|
|
|
export function SessionTabAvatar(props: {
|
|
project?: LocalProject
|
|
directory: string
|
|
sessionId: string
|
|
activeServer: boolean
|
|
revealProjectOnHover?: boolean
|
|
}) {
|
|
const directory = () => props.directory
|
|
const sessionId = () => props.sessionId
|
|
const state = useSessionTabAvatarState(directory, sessionId, () => props.activeServer)
|
|
const projectAvatar = () => (
|
|
<ProjectAvatar
|
|
fallback={displayName(props.project ?? { worktree: props.directory })}
|
|
src={getProjectAvatarSource(props.project?.id, props.project?.icon)}
|
|
variant={getProjectAvatarVariant(props.project?.icon?.color)}
|
|
unread={state.unread()}
|
|
/>
|
|
)
|
|
return (
|
|
<Show when={state.loading()} fallback={projectAvatar()}>
|
|
<span class="relative block size-4 shrink-0">
|
|
<SessionProgressIndicatorV2
|
|
class={`absolute inset-0 ${props.revealProjectOnHover === false ? "" : "group-hover:invisible"}`}
|
|
/>
|
|
<Show when={props.revealProjectOnHover !== false}>
|
|
<span class="invisible absolute inset-0 group-hover:visible">{projectAvatar()}</span>
|
|
</Show>
|
|
</span>
|
|
</Show>
|
|
)
|
|
}
|