11import { FileLink } from './FileLink'
22import { FileActions } from './Actions'
33import type { DisplayResult } from '../../../types'
4+ import { useActiveItem } from './useListState'
45import { VscChevronDown , VscChevronRight } from 'react-icons/vsc'
56import { VSCodeBadge } from '@vscode/webview-ui-toolkit/react'
67import * as stylex from '@stylexjs/stylex'
78import { useHover } from 'react-use'
9+ import { useCallback } from 'react'
810
911const styles = stylex . create ( {
1012 fileName : {
@@ -26,6 +28,12 @@ const styles = stylex.create({
2628 scrolled : {
2729 boxShadow : 'var(--vscode-scrollbar-shadow) 0 0 6px' ,
2830 } ,
31+ active : {
32+ background : 'var(--vscode-list-activeSelectionBackground)' ,
33+ outline :
34+ '1px solid var(--vscode-list-focusAndSelectionOutline, var(--vscode-contrastActiveBorder, var(--vscode-list-focusOutline)))' ,
35+ outlineOffset : - 1 ,
36+ } ,
2937 toggleButton : {
3038 flex : 0 ,
3139 display : 'flex' ,
@@ -53,11 +61,18 @@ export default function TreeHeader({
5361} : TreeHeaderProps ) {
5462 const filePath = matches [ 0 ] . file
5563 const hasReplace = Boolean ( matches [ 0 ] . replacement )
64+ const [ active , setActive ] = useActiveItem ( matches )
65+ const styleProps = stylex . props (
66+ styles . fileName ,
67+ isScrolled && styles . scrolled ,
68+ active && styles . active ,
69+ )
70+ const onClick = useCallback ( ( ) => {
71+ toggleIsExpanded ( )
72+ setActive ( )
73+ } , [ toggleIsExpanded , setActive ] )
5674 const element = ( hovered : boolean ) => (
57- < div
58- { ...stylex . props ( styles . fileName , isScrolled && styles . scrolled ) }
59- onClick = { toggleIsExpanded }
60- >
75+ < div { ...styleProps } onClick = { onClick } >
6176 < div
6277 { ...stylex . props ( styles . toggleButton ) }
6378 aria-label = "expand/collapse button"
0 commit comments