@@ -1560,8 +1560,12 @@ export default function EspacesPage() {
15601560 }
15611561
15621562 if ( ! activeSpaceId ) {
1563+ const spaceBgMenu : MenuItem [ ] = [ { label : t ( 'drive.newSpace' ) , icon : Plus , onClick : ( ) => void createSpace ( ) } ] ;
15631564 return (
1564- < div className = "space-y-6" >
1565+ < div
1566+ className = "min-h-[70vh] space-y-6"
1567+ onContextMenu = { ( ev ) => openCtx ( ev , spaceBgMenu ) }
1568+ >
15651569 < Header title = { t ( 'drive.title' ) } subtitle = { t ( 'drive.subtitle' ) } >
15661570 < button className = "btn-primary" onClick = { createSpace } >
15671571 < Plus size = { 16 } /> { t ( 'drive.newSpace' ) }
@@ -1576,8 +1580,14 @@ export default function EspacesPage() {
15761580 < div
15771581 key = { s . id }
15781582 className = "card group relative flex items-center gap-4 text-left transition hover:border-accent/40 hover:bg-white/[0.04]"
1583+ onContextMenu = { ( ev ) =>
1584+ openCtx ( ev , [
1585+ { label : t ( 'drive.open' ) , icon : Folder , onClick : ( ) => void enterSpace ( s ) } ,
1586+ { label : t ( 'drive.deleteSpaceAction' ) , icon : Trash2 , danger : true , onClick : ( ) => deleteSpace ( s ) } ,
1587+ ] )
1588+ }
15791589 >
1580- < button onClick = { ( ) => enterSpace ( s ) } className = "flex min-w-0 flex-1 items-center gap-4 text-left" >
1590+ < button onClick = { ( ) => enterSpace ( s ) } className = "flex min-w-0 flex-1 items-center gap-4 rounded-lg text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-accent/50 " >
15811591 < span
15821592 className = { `grid h-12 w-12 shrink-0 place-items-center rounded-xl ${
15831593 s . isZeroKnowledge
@@ -1606,6 +1616,7 @@ export default function EspacesPage() {
16061616 { paletteOpen && < CommandPalette items = { paletteItems } onSearch = { searchFiles } onClose = { ( ) => setPaletteOpen ( false ) } /> }
16071617 { helpOpen && < ShortcutsHelp onClose = { ( ) => setHelpOpen ( false ) } /> }
16081618 { viewing && < FileViewer source = { viewing } onClose = { ( ) => setViewing ( null ) } /> }
1619+ { ctxMenu && < ContextMenu x = { ctxMenu . x } y = { ctxMenu . y } items = { ctxMenu . items } onClose = { ( ) => setCtxMenu ( null ) } /> }
16091620 </ div >
16101621 ) ;
16111622 }
@@ -1699,10 +1710,12 @@ export default function EspacesPage() {
16991710 </ button >
17001711 </ Empty >
17011712 ) : entries . length === 0 ? (
1702- < Empty icon = { Upload } title = { t ( 'drive.emptyFolderTitle' ) } hint = { t ( 'drive.emptyFolderHint' ) } />
1713+ < div className = "min-h-[55vh]" onContextMenu = { ( ev ) => ! needPass && openCtx ( ev , backgroundMenuItems ( ) ) } >
1714+ < Empty icon = { Upload } title = { t ( 'drive.emptyFolderTitle' ) } hint = { t ( 'drive.emptyFolderHint' ) } />
1715+ </ div >
17031716 ) : view === 'grid' ? (
17041717 < div
1705- className = "grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4"
1718+ className = "grid min-h-[55vh] grid-cols-2 content-start gap-3 sm:grid-cols-3 lg:grid-cols-4"
17061719 onContextMenu = { ( ev ) => ! needPass && openCtx ( ev , backgroundMenuItems ( ) ) }
17071720 >
17081721 { entries . map ( ( e ) => (
@@ -1720,7 +1733,7 @@ export default function EspacesPage() {
17201733 ) ) }
17211734 </ div >
17221735 ) : (
1723- < div className = "space-y-2" onContextMenu = { ( ev ) => ! needPass && openCtx ( ev , backgroundMenuItems ( ) ) } >
1736+ < div className = "min-h-[55vh] space-y-2" onContextMenu = { ( ev ) => ! needPass && openCtx ( ev , backgroundMenuItems ( ) ) } >
17241737 { /* column headers */ }
17251738 < div className = "flex items-center gap-3 px-3 text-xs text-zinc-500" >
17261739 < button className = "flex items-center gap-1 hover:text-zinc-300" onClick = { ( ) => toggleSort ( 'name' ) } >
@@ -1745,7 +1758,10 @@ export default function EspacesPage() {
17451758 { ...pressProps ( e ) }
17461759 className = { `row cursor-default ${ selected . has ( e . key ) ? 'bg-accent/[0.08] ring-1 ring-inset ring-accent/40' : '' } ` }
17471760 >
1748- < button className = "flex min-w-0 flex-1 items-center gap-3 text-left" onClick = { ( ev ) => onNameClick ( ev , e ) } >
1761+ < button
1762+ className = "flex min-w-0 flex-1 items-center gap-3 rounded-md text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-accent/50"
1763+ onClick = { ( ev ) => onNameClick ( ev , e ) }
1764+ >
17491765 { rowIcon ( e , isZk ) }
17501766 < span className = "truncate font-medium text-zinc-100" > { e . name } </ span >
17511767 </ button >
0 commit comments