11/**
22 * CortexActivityBar - Pixel-perfect activity bar matching Figma Sidebar Container (37:893)
3- * Width: 40px, border-radius 12px, sidebar bg/ border from tokens
3+ * Width: 40px, border-radius 12px, bg #1C1C1D, border 1px solid #2E2F31
44 * Items: 32×32 containers, 20×20 icons, 8px gap, 4px padding
5- * Active state: sidebar-selected bg (#252628) with white icon (#FCFCFC)
6- * Bottom section: settings + avatar pinned to bottom
5+ * Active state: lime accent bg (#BFFF00) with dark icon (#141415), border-radius 8px
6+ * Inactive: #8C8D8F, hover: #FCFCFC
7+ * Bottom section: settings (settings-02) + avatar circle (24×24) with green status dot
78 */
89
910import { Component , JSX , splitProps , createSignal , For , Show } from "solid-js" ;
@@ -36,11 +37,12 @@ const DEFAULT_ITEMS: ActivityBarItem[] = [
3637 { id : "search" , icon : "search" , label : "Search" } ,
3738 { id : "git" , icon : "git" , label : "Source Control" } ,
3839 { id : "debug" , icon : "play" , label : "Run & Debug" } ,
39- { id : "extensions " , icon : "grid " , label : "Extensions " } ,
40+ { id : "plugins " , icon : "plugins " , label : "Plugins " } ,
4041 { id : "agents" , icon : "users" , label : "AI Agents" } ,
42+ { id : "extensions" , icon : "grid" , label : "Extensions" } ,
43+ { id : "docs" , icon : "book" , label : "Documentation" } ,
4144 { id : "factory" , icon : "map" , label : "Factory" } ,
42- { id : "plugins" , icon : "puzzle-piece" , label : "Plugins" } ,
43- { id : "themes" , icon : "paintbrush" , label : "Themes" } ,
45+ { id : "themes" , icon : "brush" , label : "Themes" } ,
4446] ;
4547
4648export const CortexActivityBar : Component < CortexActivityBarProps > = ( props ) => {
@@ -67,7 +69,7 @@ export const CortexActivityBar: Component<CortexActivityBarProps> = (props) => {
6769 "margin-bottom" : "var(--cortex-space-2)" ,
6870 background : "var(--cortex-sidebar-bg)" ,
6971 "border-radius" : "var(--cortex-sidebar-radius)" ,
70- border : "1px solid var(--cortex-sidebar-border) " ,
72+ border : "1px solid #2E2F31 " ,
7173 padding : "var(--cortex-space-1)" ,
7274 "flex-shrink" : "0" ,
7375 ...local . style ,
@@ -104,7 +106,6 @@ export const CortexActivityBar: Component<CortexActivityBarProps> = (props) => {
104106 "align-items" : "center" ,
105107 padding : "0" ,
106108 gap : "var(--cortex-space-2)" ,
107- "border-top" : "1px solid var(--cortex-sidebar-border)" ,
108109 } } >
109110 < ActivityBarSettingsButton onClick = { local . onSettingsClick } />
110111 < AvatarButton
@@ -134,14 +135,15 @@ const ActivityBarButton: Component<ActivityBarButtonProps> = (props) => {
134135 const [ isHovered , setIsHovered ] = createSignal ( false ) ;
135136
136137 const bg = ( ) => {
137- if ( props . isActive ) return "var(--cortex-sidebar-selected) " ;
138+ if ( props . isActive ) return "#BFFF00 " ;
138139 if ( isHovered ( ) ) return "var(--cortex-sidebar-selected)" ;
139140 return "transparent" ;
140141 } ;
141142
142143 const iconColor = ( ) => {
143- if ( props . isActive ) return "var(--cortex-text-on-surface)" ;
144- return "var(--cortex-icon-inactive)" ;
144+ if ( props . isActive ) return "#141415" ;
145+ if ( isHovered ( ) ) return "#FCFCFC" ;
146+ return "#8C8D8F" ;
145147 } ;
146148
147149 return (
@@ -185,8 +187,8 @@ const ActivityBarButton: Component<ActivityBarButtonProps> = (props) => {
185187 "align-items" : "center" ,
186188 "justify-content" : "center" ,
187189 padding : "0 var(--cortex-space-1)" ,
188- background : "var(--cortex-accent-primary) " ,
189- color : "var(--cortex-accent-text) " ,
190+ background : "#BFFF00 " ,
191+ color : "#141415 " ,
190192 "font-family" : "var(--cortex-font-sans)" ,
191193 "font-size" : "9px" ,
192194 "font-weight" : "var(--cortex-font-semibold)" ,
@@ -231,11 +233,9 @@ const ActivityBarSettingsButton: Component<{ onClick?: () => void }> = (props) =
231233 aria-label = "Settings"
232234 >
233235 < CortexIcon
234- name = "gear "
236+ name = "settings-02 "
235237 size = { 20 }
236- color = { isHovered ( )
237- ? "var(--cortex-accent-primary)"
238- : "var(--cortex-icon-inactive)" }
238+ color = { isHovered ( ) ? "#FCFCFC" : "#8C8D8F" }
239239 style = { { transition : "color var(--cortex-transition-fast)" } }
240240 />
241241 </ button >
@@ -250,18 +250,19 @@ const AvatarButton: Component<{ avatarUrl?: string; onClick?: () => void }> = (p
250250 < CortexTooltip content = "Account" position = "right" >
251251 < button
252252 style = { {
253- width : "var(--cortex-space-8)" ,
254- height : "var(--cortex-space-8)" ,
253+ position : "relative" ,
254+ width : "24px" ,
255+ height : "24px" ,
255256 "border-radius" : "var(--cortex-radius-full)" ,
256257 background : "var(--cortex-bg-tertiary)" ,
257258 border : isHovered ( )
258- ? "2px solid var(--cortex-accent-primary) "
259- : "2px solid var(--cortex-border-default) " ,
259+ ? "2px solid #BFFF00 "
260+ : "2px solid transparent " ,
260261 cursor : "pointer" ,
261262 display : "flex" ,
262263 "align-items" : "center" ,
263264 "justify-content" : "center" ,
264- overflow : "hidden " ,
265+ overflow : "visible " ,
265266 transition : "border-color var(--cortex-transition-fast)" ,
266267 padding : "0" ,
267268 } }
@@ -275,8 +276,8 @@ const AvatarButton: Component<{ avatarUrl?: string; onClick?: () => void }> = (p
275276 fallback = {
276277 < CortexIcon
277278 name = "user"
278- size = { 18 }
279- color = "var(--cortex-text-muted) "
279+ size = { 14 }
280+ color = "#8C8D8F "
280281 />
281282 }
282283 >
@@ -287,9 +288,20 @@ const AvatarButton: Component<{ avatarUrl?: string; onClick?: () => void }> = (p
287288 width : "100%" ,
288289 height : "100%" ,
289290 "object-fit" : "cover" ,
291+ "border-radius" : "var(--cortex-radius-full)" ,
290292 } }
291293 />
292294 </ Show >
295+ < span style = { {
296+ position : "absolute" ,
297+ bottom : "-1px" ,
298+ right : "-1px" ,
299+ width : "6px" ,
300+ height : "6px" ,
301+ "border-radius" : "var(--cortex-radius-full)" ,
302+ background : "#34D399" ,
303+ border : "1px solid var(--cortex-sidebar-bg)" ,
304+ } } />
293305 </ button >
294306 </ CortexTooltip >
295307 ) ;
0 commit comments