66 forwardRef ,
77 MouseEvent ,
88 useCallback ,
9- useMemo
9+ useMemo ,
10+ useState
1011} from 'react'
1112
1213import {
@@ -91,10 +92,11 @@ export const SidebarTrigger = forwardRef<ElementRef<typeof Button>, SidebarTrigg
9192)
9293SidebarTrigger . displayName = 'SidebarTrigger'
9394
94- export const SidebarRail = forwardRef < HTMLButtonElement , ComponentProps < 'button' > > (
95- ( { className, onClick, ...props } , ref ) => {
95+ export const SidebarRail = forwardRef < HTMLButtonElement , ComponentProps < 'button' > & { open ?: boolean } > (
96+ ( { className, onClick, open , ...props } , ref ) => {
9697 const { toggleSidebar } = useSidebar ( )
9798 const { t } = useTranslation ( )
99+ const [ hovered , setHovered ] = useState ( false )
98100
99101 const onClickHandler = useCallback (
100102 ( event : MouseEvent < HTMLButtonElement > ) => {
@@ -104,16 +106,26 @@ export const SidebarRail = forwardRef<HTMLButtonElement, ComponentProps<'button'
104106 [ toggleSidebar , onClick ]
105107 )
106108
109+ const label = open ? t ( 'component:sidebar.collapse' , 'Collapse' ) : t ( 'component:sidebar.expand' , 'Expand' )
110+
107111 return (
108112 < button
109113 ref = { ref }
110- aria-label = { t ( 'component:sidebar.toggle' , 'Toggle sidebar' ) }
114+ aria-label = { label }
115+ title = { label }
111116 tabIndex = { - 1 }
112117 onClick = { onClickHandler }
113- title = { t ( 'component:sidebar.toggle' , 'Toggle sidebar' ) }
114- className = { cn ( 'cn-sidebar-rail' , className ) }
118+ onMouseEnter = { ( ) => setHovered ( true ) }
119+ onMouseLeave = { ( ) => setHovered ( false ) }
120+ className = { cn ( 'cn-sidebar-rail top-1/4 translate-x-1/2' , { 'translate-x-1/4' : hovered } , className ) }
115121 { ...props }
116- />
122+ >
123+ { hovered ? (
124+ < IconV2 name = { open ? 'nav-arrow-left' : 'nav-arrow-right' } size = "lg" />
125+ ) : (
126+ < Text className = "cn-pl-1 pl-cn-4xs" > |</ Text >
127+ ) }
128+ </ button >
117129 )
118130 }
119131)
0 commit comments