@@ -1584,6 +1584,62 @@ export default function Sidebar() {
15841584 const newThreadShortcutLabel =
15851585 shortcutLabelForCommand ( keybindings , "chat.newLocal" ) ??
15861586 shortcutLabelForCommand ( keybindings , "chat.new" ) ;
1587+ const isOnHomeRoute = pathname === "/" ;
1588+ const brandFooterStatus = serverUpdateInfo ?. updateAvailable
1589+ ? {
1590+ detail : `v${ serverUpdateInfo . latestVersion } available` ,
1591+ label : "Update" ,
1592+ pillStyle : {
1593+ backgroundColor : "color-mix(in srgb, var(--warning) 16%, transparent)" ,
1594+ color : "var(--warning-foreground)" ,
1595+ } as const ,
1596+ surfaceStyle : {
1597+ backgroundColor : "color-mix(in srgb, var(--warning) 10%, transparent)" ,
1598+ borderColor : "color-mix(in srgb, var(--warning) 22%, var(--border))" ,
1599+ } as const ,
1600+ }
1601+ : desktopUpdateState ?. status === "downloaded"
1602+ ? {
1603+ detail : "Ready to install" ,
1604+ label : "Install" ,
1605+ pillStyle : {
1606+ backgroundColor : "color-mix(in srgb, var(--success) 16%, transparent)" ,
1607+ color : "var(--success-foreground)" ,
1608+ } as const ,
1609+ surfaceStyle : {
1610+ backgroundColor : "color-mix(in srgb, var(--success) 10%, transparent)" ,
1611+ borderColor : "color-mix(in srgb, var(--success) 20%, var(--border))" ,
1612+ } as const ,
1613+ }
1614+ : desktopUpdateState ?. status === "downloading"
1615+ ? {
1616+ detail : "Update downloading" ,
1617+ label : "Syncing" ,
1618+ pillStyle : {
1619+ backgroundColor : "color-mix(in srgb, var(--info) 16%, transparent)" ,
1620+ color : "var(--info-foreground)" ,
1621+ } as const ,
1622+ surfaceStyle : {
1623+ backgroundColor : "color-mix(in srgb, var(--info) 10%, transparent)" ,
1624+ borderColor : "color-mix(in srgb, var(--info) 20%, var(--border))" ,
1625+ } as const ,
1626+ }
1627+ : {
1628+ detail : isOnHomeRoute ? "Workspace home" : "Open workspace home" ,
1629+ label : isOnHomeRoute ? "Home" : "Ready" ,
1630+ pillStyle : {
1631+ backgroundColor : "color-mix(in srgb, var(--primary) 16%, transparent)" ,
1632+ color : "var(--primary)" ,
1633+ } as const ,
1634+ surfaceStyle : {
1635+ backgroundColor : isOnHomeRoute
1636+ ? "color-mix(in srgb, var(--primary) 14%, transparent)"
1637+ : "color-mix(in srgb, var(--primary) 10%, transparent)" ,
1638+ borderColor : isOnHomeRoute
1639+ ? "color-mix(in srgb, var(--primary) 26%, var(--border))"
1640+ : "color-mix(in srgb, var(--primary) 18%, var(--border))" ,
1641+ } as const ,
1642+ } ;
15871643
15881644 const handleDesktopUpdateButtonClick = useCallback ( ( ) => {
15891645 const bridge = window . desktopBridge ;
@@ -2122,16 +2178,16 @@ export default function Sidebar() {
21222178 < Tooltip >
21232179 < TooltipTrigger
21242180 render = {
2125- < div
2126- className = "mt-2 rounded-xl border px-3 py-2 shadow-sm transition-colors "
2127- style = { {
2128- backgroundColor : "color-mix(in srgb, var(--primary) 10%, transparent)" ,
2129- borderColor : "color-mix(in srgb, var(--primary) 18%, var(--border))" ,
2130- } }
2181+ < button
2182+ type = "button "
2183+ aria-label = { isOnHomeRoute ? ` ${ APP_BASE_NAME } home` : `Open ${ APP_BASE_NAME } home` }
2184+ className = "group mt-2 flex w-full rounded-xl border px-3 py-2 text-left shadow-sm transition-[transform,background-color,border-color,box-shadow] hover:-translate-y-0.5 hover:shadow-md active:translate-y-0"
2185+ onClick = { ( ) => void navigate ( { replace : isOnHomeRoute , to : "/" } ) }
2186+ style = { brandFooterStatus . surfaceStyle }
21312187 >
2132- < div className = "flex items-center gap-2" >
2188+ < div className = "flex w-full items-center gap-2" >
21332189 < div
2134- className = "flex size-7 items-center justify-center rounded-lg"
2190+ className = "flex size-7 shrink-0 items-center justify-center rounded-lg transition-transform group-hover:scale-[1.04] "
21352191 style = { {
21362192 backgroundColor : "color-mix(in srgb, var(--primary) 18%, transparent)" ,
21372193 color : "var(--primary)" ,
@@ -2144,16 +2200,30 @@ export default function Sidebar() {
21442200 < span className = "truncate text-sm font-semibold tracking-tight text-foreground" >
21452201 { APP_BASE_NAME }
21462202 </ span >
2147- < span className = "text-[10px] font-medium uppercase tracking-[0.22em] text-primary/80" >
2148- Version { APP_VERSION }
2203+ < span className = "text-[10px] font-medium uppercase tracking-[0.22em] text-muted-foreground/80" >
2204+ { brandFooterStatus . detail }
2205+ </ span >
2206+ </ div >
2207+ < div className = "ml-auto flex shrink-0 flex-col items-end gap-1" >
2208+ < span
2209+ className = "inline-flex items-center gap-1 rounded-full px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.18em]"
2210+ style = { brandFooterStatus . pillStyle }
2211+ >
2212+ < CircleDotIcon className = "size-2.5" />
2213+ { brandFooterStatus . label }
2214+ </ span >
2215+ < span className = "text-[10px] font-medium tracking-wide text-muted-foreground/80" >
2216+ v{ APP_VERSION }
21492217 </ span >
21502218 </ div >
21512219 </ div >
2152- </ div >
2220+ </ button >
21532221 }
21542222 />
21552223 < TooltipPopup side = "top" sideOffset = { 4 } >
2156- { APP_BASE_NAME } { APP_VERSION }
2224+ { isOnHomeRoute
2225+ ? `${ APP_BASE_NAME } home • v${ APP_VERSION } `
2226+ : `Open ${ APP_BASE_NAME } home • v${ APP_VERSION } ` }
21572227 </ TooltipPopup >
21582228 </ Tooltip >
21592229 </ SidebarFooter >
0 commit comments