@@ -137,6 +137,8 @@ export default function Layout(props: ParentProps) {
137137 const [ hoverSession , setHoverSession ] = createSignal < string | undefined > ( )
138138 const [ hoverProject , setHoverProject ] = createSignal < string | undefined > ( )
139139
140+ const navRef = { current : undefined as HTMLElement | undefined }
141+
140142 const sidebarHovering = createMemo ( ( ) => ! layout . sidebar . opened ( ) && hoverProject ( ) !== undefined )
141143 const sidebarExpanded = createMemo ( ( ) => layout . sidebar . opened ( ) || sidebarHovering ( ) )
142144
@@ -151,6 +153,19 @@ export default function Layout(props: ParentProps) {
151153 setHoverProject ( undefined )
152154 } )
153155
156+ createEffect (
157+ on (
158+ ( ) => ( { dir : params . dir , id : params . id } ) ,
159+ ( ) => {
160+ if ( layout . sidebar . opened ( ) ) return
161+ if ( ! hoverProject ( ) ) return
162+ setHoverSession ( undefined )
163+ setHoverProject ( undefined )
164+ } ,
165+ { defer : true } ,
166+ ) ,
167+ )
168+
154169 const autoselecting = createMemo ( ( ) => {
155170 if ( params . dir ) return false
156171 if ( initialDir ) return false
@@ -1044,6 +1059,10 @@ export default function Layout(props: ParentProps) {
10441059
10451060 function navigateToProject ( directory : string | undefined ) {
10461061 if ( ! directory ) return
1062+ if ( ! layout . sidebar . opened ( ) ) {
1063+ setHoverSession ( undefined )
1064+ setHoverProject ( undefined )
1065+ }
10471066 server . projects . touch ( directory )
10481067 const lastSession = store . lastSession [ directory ]
10491068 navigate ( `/${ base64Encode ( directory ) } ${ lastSession ? `/session/${ lastSession } ` : "" } ` )
@@ -1052,6 +1071,10 @@ export default function Layout(props: ParentProps) {
10521071
10531072 function navigateToSession ( session : Session | undefined ) {
10541073 if ( ! session ) return
1074+ if ( ! layout . sidebar . opened ( ) ) {
1075+ setHoverSession ( undefined )
1076+ setHoverProject ( undefined )
1077+ }
10551078 navigate ( `/${ base64Encode ( session . directory ) } /session/${ session . id } ` )
10561079 layout . mobileSidebar . hide ( )
10571080 }
@@ -1730,7 +1753,7 @@ export default function Layout(props: ParentProps) {
17301753 aria-label = { language . t ( "common.moreOptions" ) }
17311754 />
17321755 </ Tooltip >
1733- < DropdownMenu . Portal >
1756+ < DropdownMenu . Portal mount = { ! props . mobile ? navRef . current : undefined } >
17341757 < DropdownMenu . Content
17351758 onCloseAutoFocus = { ( event ) => {
17361759 if ( ! pendingRename ( ) ) return
@@ -1980,7 +2003,7 @@ export default function Layout(props: ParentProps) {
19802003 aria-label = { language . t ( "common.moreOptions" ) }
19812004 />
19822005 </ Tooltip >
1983- < DropdownMenu . Portal >
2006+ < DropdownMenu . Portal mount = { ! props . mobile ? navRef . current : undefined } >
19842007 < DropdownMenu . Content
19852008 onCloseAutoFocus = { ( event ) => {
19862009 if ( ! pendingRename ( ) ) return
@@ -2291,6 +2314,10 @@ export default function Layout(props: ParentProps) {
22912314 }
22922315
22932316 const createWorkspace = async ( project : LocalProject ) => {
2317+ if ( ! layout . sidebar . opened ( ) ) {
2318+ setHoverSession ( undefined )
2319+ setHoverProject ( undefined )
2320+ }
22942321 const created = await globalSDK . client . worktree
22952322 . create ( { directory : project . worktree } )
22962323 . then ( ( x ) => x . data )
@@ -2392,7 +2419,7 @@ export default function Layout(props: ParentProps) {
23922419 class = "shrink-0 size-6 rounded-md opacity-0 group-hover/project:opacity-100 data-[expanded]:opacity-100 data-[expanded]:bg-surface-base-active"
23932420 aria-label = { language . t ( "common.moreOptions" ) }
23942421 />
2395- < DropdownMenu . Portal >
2422+ < DropdownMenu . Portal mount = { ! panelProps . mobile ? navRef . current : undefined } >
23962423 < DropdownMenu . Content class = "mt-1" >
23972424 < DropdownMenu . Item onSelect = { ( ) => dialog . show ( ( ) => < DialogEditProject project = { p } /> ) } >
23982425 < DropdownMenu . ItemLabel > { language . t ( "common.edit" ) } </ DropdownMenu . ItemLabel >
@@ -2440,6 +2467,10 @@ export default function Layout(props: ParentProps) {
24402467 icon = "plus-small"
24412468 class = "w-full"
24422469 onClick = { ( ) => {
2470+ if ( ! layout . sidebar . opened ( ) ) {
2471+ setHoverSession ( undefined )
2472+ setHoverProject ( undefined )
2473+ }
24432474 navigate ( `/${ base64Encode ( p . worktree ) } /session` )
24442475 layout . mobileSidebar . hide ( )
24452476 } }
@@ -2628,7 +2659,13 @@ export default function Layout(props: ParentProps) {
26282659 "relative shrink-0" : true ,
26292660 } }
26302661 style = { { width : layout . sidebar . opened ( ) ? `${ Math . max ( layout . sidebar . width ( ) , 244 ) } px` : "64px" } }
2631- onMouseLeave = { ( ) => setHoverProject ( undefined ) }
2662+ ref = { ( el ) => {
2663+ navRef . current = el
2664+ } }
2665+ onMouseLeave = { ( ) => {
2666+ setHoverSession ( undefined )
2667+ setHoverProject ( undefined )
2668+ } }
26322669 >
26332670 < div class = "@container w-full h-full contain-strict" >
26342671 < SidebarContent />
0 commit comments