@@ -29,86 +29,88 @@ export function SearchLandingHistory({
2929 const queries = data ?. queries . slice ( 0 , 5 ) ?? [ ]
3030 const selected = selection ?? ( sources . length > 0 ? 'sources' : 'queries' )
3131 return (
32- < div className = { cn ( 'w-full min-w-0' , inter . className ) } >
32+ < div className = { cn ( 'relative w-full min-w-0' , inter . className ) } >
3333 { children }
34- { ( sources . length > 0 || queries . length > 0 ) && (
35- < section aria-label = 'Recent activity' className = 'mt-6 px-2' >
36- < div className = 'mb-2 flex flex-wrap items-center justify-between gap-2' >
37- < div role = 'group' aria-label = 'History type' className = 'flex items-center gap-1' >
34+ < div className = 'absolute inset-x-0 top-full' >
35+ { ( sources . length > 0 || queries . length > 0 ) && (
36+ < section aria-label = 'Recent activity' className = 'mt-6 px-2' >
37+ < div className = 'mb-2 flex flex-wrap items-center justify-between gap-2' >
38+ < div role = 'group' aria-label = 'History type' className = 'flex items-center gap-1' >
39+ < Chip
40+ active = { selected === 'sources' }
41+ aria-pressed = { selected === 'sources' }
42+ onClick = { ( ) => setSelection ( 'sources' ) }
43+ >
44+ Recently viewed
45+ </ Chip >
46+ < Chip
47+ active = { selected === 'queries' }
48+ aria-pressed = { selected === 'queries' }
49+ onClick = { ( ) => setSelection ( 'queries' ) }
50+ >
51+ Recent searches
52+ </ Chip >
53+ </ div >
3854 < Chip
39- active = { selected === 'sources' }
40- aria-pressed = { selected === 'sources' }
41- onClick = { ( ) => setSelection ( 'sources' ) }
55+ disabled = { clear . isPending }
56+ onClick = { ( ) =>
57+ clear . mutate ( undefined , { onError : ( error ) => toast . error ( error . message ) } )
58+ }
4259 >
43- Recently viewed
60+ Clear history
4461 </ Chip >
45- < Chip
46- active = { selected === 'queries' }
47- aria-pressed = { selected === 'queries' }
48- onClick = { ( ) => setSelection ( 'queries' ) }
62+ </ div >
63+ < div className = 'grid grid-cols-1' >
64+ < div
65+ className = { cn (
66+ 'col-start-1 row-start-1 min-w-0' ,
67+ selected !== 'sources' && 'invisible'
68+ ) }
69+ inert = { selected !== 'sources' }
70+ aria-hidden = { selected !== 'sources' }
4971 >
50- Recent searches
51- </ Chip >
72+ { sources . length > 0 ? (
73+ sources . map ( ( source ) => < SourceCard key = { source . url } source = { source } dense /> )
74+ ) : (
75+ < p className = 'px-2 py-2 text-[var(--text-tertiary)] text-small' >
76+ Sources you open will appear here.
77+ </ p >
78+ ) }
79+ </ div >
80+ < div
81+ className = { cn (
82+ 'col-start-1 row-start-1 min-w-0' ,
83+ selected !== 'queries' && 'invisible'
84+ ) }
85+ inert = { selected !== 'queries' }
86+ aria-hidden = { selected !== 'queries' }
87+ >
88+ { queries . length > 0 ? (
89+ queries . map ( ( { query } ) => (
90+ < div key = { query } className = 'py-1' >
91+ < Chip fullWidth leftIcon = { Clock } onClick = { ( ) => onSearch ( query ) } >
92+ { query }
93+ </ Chip >
94+ </ div >
95+ ) )
96+ ) : (
97+ < p className = 'px-2 py-2 text-[var(--text-tertiary)] text-small' >
98+ Your recent searches will appear here.
99+ </ p >
100+ ) }
101+ </ div >
52102 </ div >
53- < Chip
54- disabled = { clear . isPending }
55- onClick = { ( ) =>
56- clear . mutate ( undefined , { onError : ( error ) => toast . error ( error . message ) } )
57- }
58- >
59- Clear history
103+ </ section >
104+ ) }
105+ { history . isError && (
106+ < div className = 'mt-6 flex items-center gap-2 px-4 text-[var(--text-tertiary)] text-small' >
107+ Recent activity couldn’t load.
108+ < Chip onClick = { ( ) => void history . refetch ( ) } disabled = { history . isFetching } >
109+ Try again
60110 </ Chip >
61111 </ div >
62- < div className = 'grid grid-cols-1' >
63- < div
64- className = { cn (
65- 'col-start-1 row-start-1 min-w-0' ,
66- selected !== 'sources' && 'invisible'
67- ) }
68- inert = { selected !== 'sources' }
69- aria-hidden = { selected !== 'sources' }
70- >
71- { sources . length > 0 ? (
72- sources . map ( ( source ) => < SourceCard key = { source . url } source = { source } dense /> )
73- ) : (
74- < p className = 'px-2 py-2 text-[var(--text-tertiary)] text-small' >
75- Sources you open will appear here.
76- </ p >
77- ) }
78- </ div >
79- < div
80- className = { cn (
81- 'col-start-1 row-start-1 min-w-0' ,
82- selected !== 'queries' && 'invisible'
83- ) }
84- inert = { selected !== 'queries' }
85- aria-hidden = { selected !== 'queries' }
86- >
87- { queries . length > 0 ? (
88- queries . map ( ( { query } ) => (
89- < div key = { query } className = 'py-1' >
90- < Chip fullWidth leftIcon = { Clock } onClick = { ( ) => onSearch ( query ) } >
91- { query }
92- </ Chip >
93- </ div >
94- ) )
95- ) : (
96- < p className = 'px-2 py-2 text-[var(--text-tertiary)] text-small' >
97- Your recent searches will appear here.
98- </ p >
99- ) }
100- </ div >
101- </ div >
102- </ section >
103- ) }
104- { history . isError && (
105- < div className = 'mt-6 flex items-center gap-2 px-4 text-[var(--text-tertiary)] text-small' >
106- Recent activity couldn’t load.
107- < Chip onClick = { ( ) => void history . refetch ( ) } disabled = { history . isFetching } >
108- Try again
109- </ Chip >
110- </ div >
111- ) }
112+ ) }
113+ </ div >
112114 </ div >
113115 )
114116}
0 commit comments