@@ -134,9 +134,9 @@ export default function SearchPage() {
134134 }
135135
136136 return (
137- < div className = "mx-auto flex w-full max-w-7xl px-4 sm:px-6 lg:px-8" >
138- { /* Left Sidebar - Categories */ }
139- < aside className = "sticky top-[var(--spacing-app-header)] h-[calc(100vh-var(--spacing-app-header))] w-[220px] flex-shrink-0 border-r border-gray-200 dark:border-gray-800" >
137+ < div className = "mx-auto flex w-full max-w-7xl flex-col px-4 sm:px-6 md:flex-row lg:px-8" >
138+ { /* Left Sidebar - Categories (Desktop only) */ }
139+ < aside className = "sticky top-[var(--spacing-app-header)] hidden h-[calc(100vh-var(--spacing-app-header))] w-[220px] flex-shrink-0 border-r border-gray-200 dark:border-gray-800 md:block " >
140140 < ScrollArea className = "h-full" >
141141 < div className = "py-3 pr-2" >
142142 { /* All category */ }
@@ -192,7 +192,45 @@ export default function SearchPage() {
192192
193193 { /* Right Content */ }
194194 < main className = "min-w-0 flex-1" >
195- < div className = "py-3 pl-6" >
195+ < div className = "py-3 md:pl-6" >
196+ { /* Mobile Category Tabs */ }
197+ < div className = "-mx-4 mb-4 overflow-x-auto px-4 md:hidden" >
198+ < div className = "flex gap-2 pb-2" >
199+ < button
200+ onClick = { ( ) => handleCategoryClick ( 0 ) }
201+ className = { cn (
202+ "flex-shrink-0 rounded-full px-3 py-1.5 text-sm transition-colors" ,
203+ selectedCategoryId === 0
204+ ? "bg-gray-900 text-white dark:bg-gray-100 dark:text-gray-900"
205+ : "border border-gray-200 text-gray-600 dark:border-gray-700 dark:text-gray-400"
206+ ) }
207+ >
208+ 全部
209+ </ button >
210+ { isCategoryLoading
211+ ? Array . from ( { length : 4 } ) . map ( ( _ , i ) => (
212+ < div
213+ key = { i }
214+ className = "h-8 w-16 flex-shrink-0 animate-pulse rounded-full bg-gray-100 dark:bg-gray-800"
215+ />
216+ ) )
217+ : categories . map ( ( category ) => (
218+ < button
219+ key = { category . id }
220+ onClick = { ( ) => handleCategoryClick ( category . id ) }
221+ className = { cn (
222+ "flex-shrink-0 rounded-full px-3 py-1.5 text-sm transition-colors" ,
223+ selectedCategoryId === category . id
224+ ? "bg-gray-900 text-white dark:bg-gray-100 dark:text-gray-900"
225+ : "border border-gray-200 text-gray-600 dark:border-gray-700 dark:text-gray-400"
226+ ) }
227+ >
228+ { category . name }
229+ </ button >
230+ ) ) }
231+ </ div >
232+ </ div >
233+
196234 { /* Search Bar */ }
197235 < div className = "mb-6 flex items-center gap-3" >
198236 < div className = "relative flex-1" >
@@ -211,7 +249,7 @@ export default function SearchPage() {
211249 < Link href = "/build/skill" >
212250 < Button variant = "outline" className = "h-10 gap-2 whitespace-nowrap" >
213251 < Sparkles className = "h-4 w-4" />
214- 提交 Skill
252+ < span className = "hidden sm:inline" > 提交 Skill</ span >
215253 </ Button >
216254 </ Link >
217255 </ div >
@@ -243,8 +281,8 @@ export default function SearchPage() {
243281 className = "group py-5 first:pt-0"
244282 >
245283 { /* Row 1: Avatar + owner/name + verified + star count */ }
246- < div className = "flex items-center justify-between" >
247- < div className = "flex items-center gap-3" >
284+ < div className = "flex items-center justify-between gap-2 " >
285+ < div className = "flex min-w-0 items-center gap-3" >
248286 < Avatar className = "h-9 w-9 flex-shrink-0" >
249287 < AvatarImage
250288 src = { skill . avatar }
@@ -256,9 +294,9 @@ export default function SearchPage() {
256294 </ Avatar >
257295 < Link
258296 href = { `/skills/${ skill . owner } /${ skill . name } ` }
259- className = "flex items-center gap-1.5"
297+ className = "flex min-w-0 items-center gap-1.5"
260298 >
261- < span className = "text-base font-semibold transition-colors" >
299+ < span className = "truncate text-base font-semibold transition-colors" >
262300 { skill . owner } /{ skill . name }
263301 </ span >
264302 < CheckCircle2 className = "h-4 w-4 flex-shrink-0 text-green-500" />
@@ -291,7 +329,7 @@ export default function SearchPage() {
291329
292330 { /* Pagination */ }
293331 { totalPages > 1 && ! isLoading && (
294- < div className = "mt-8 flex items-center justify-between border-t border-gray-100 pt-4 dark:border-gray-800" >
332+ < div className = "mt-8 flex flex-col gap-3 border-t border-gray-100 pt-4 dark:border-gray-800 sm:flex-row sm:items-center sm:justify-between " >
295333 < p className = "text-xs text-gray-500 dark:text-gray-400" >
296334 共 { totalSkills } 个 Skill,第 { currentPage } /{ totalPages } 页
297335 </ p >
0 commit comments