Download packages/app/src/pages/layout/session-tab-avatar.tsx from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 2.02 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/app/src/pages/layout/session-tab-avatar.tsx
- Command line
-
hf download hf://SaylorTwift/opencode/packages/app/src/pages/layout/session-tab-avatar.tsx
-
curl -L -o session-tab-avatar.tsx https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/app/src/pages/layout/session-tab-avatar.tsx
2.02 kB
| import type { LocalProject } from "@/context/layout" | |
| import { getProjectAvatarVariant } from "@/context/layout" | |
| import type { ServerConnection } from "@/context/server" | |
| 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 | |
| server: ServerConnection.Key | |
| revealProjectOnHover?: boolean | |
| }) { | |
| const state = useSessionTabAvatarState( | |
| () => props.server, | |
| () => props.directory, | |
| () => props.sessionId, | |
| ) | |
| return ( | |
| <SessionTabAvatarView | |
| project={props.project} | |
| directory={props.directory} | |
| revealProjectOnHover={props.revealProjectOnHover} | |
| unread={state.unread()} | |
| loading={state.loading()} | |
| /> | |
| ) | |
| } | |
| export function SessionTabAvatarView(props: { | |
| project?: LocalProject | |
| directory: string | |
| revealProjectOnHover?: boolean | |
| unread: boolean | |
| loading: boolean | |
| }) { | |
| 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={props.unread} | |
| /> | |
| ) | |
| return ( | |
| <Show when={props.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> | |
| ) | |
| } | |