11import { PageHeader } from '@vibe/shared' ;
2- import { Badge , Card , CardGrid } from '@vibe/ui' ;
3- import { GitBranch , Star , Package , Users , ExternalLink , Clock , TrendingUp } from 'lucide-react' ;
2+ import { Card } from '@vibe/ui' ;
3+ import { GitBranch , ExternalLink , Clock , TrendingUp , Star } from 'lucide-react' ;
44import { useState } from 'react' ;
55import dependentsData from '../../../../data/dependents.json' ;
66import { PageContainer } from '../components/layout/PageContainer' ;
@@ -57,110 +57,47 @@ function DependentsPage() {
5757 } ) ;
5858 } ) ;
5959
60- // Calculate stats based on current view mode
61- const totalRepos = Object . keys ( data ) . length ;
62- const totalPackages = allPackages . length ;
63-
64- const currentDependents = viewMode === 'top' ? 'topDependents' : 'latestDependents' ;
65- const totalDependents = allPackages . reduce ( ( sum , pkg ) => sum + pkg [ currentDependents ] . length , 0 ) ;
66-
67- // Get top dependent across all packages for current view
68- const allDependents : Array < Dependent & { package : string ; repo : string } > = [ ] ;
69- allPackages . forEach ( ( { repo, package : pkg , topDependents, latestDependents } ) => {
70- const deps = viewMode === 'top' ? topDependents : latestDependents ;
71- deps . forEach ( dep => {
72- allDependents . push ( { ...dep , package : pkg , repo } ) ;
73- } ) ;
74- } ) ;
75- const topDependent = allDependents . sort ( ( a , b ) => b . stars - a . stars ) [ 0 ] ;
60+ // No stats calculation needed since we removed the cards
7661
7762 return (
7863 < PageContainer >
7964 < PageHeader
8065 icon = { < GitBranch className = 'text-purple-600 dark:text-purple-400' /> }
8166 title = 'GitHub Dependents'
82- subtitle = { viewMode === 'top' ? 'Top repositories by stars that depend on our projects' : 'Most recent repositories that depend on our projects' }
83- action = {
84- < div className = 'flex items-center gap-4' >
85- < div className = 'flex rounded-lg bg-slate-100 dark:bg-slate-800 p-1' >
86- < button
87- onClick = { ( ) => setViewMode ( 'top' ) }
88- className = { `px-3 py-1 rounded-md text-sm font-medium transition-all ${
89- viewMode === 'top'
90- ? 'bg-white dark:bg-slate-700 text-purple-600 dark:text-purple-400 shadow-sm'
91- : 'text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-200'
92- } `}
93- >
94- < span className = 'flex items-center gap-1' >
95- < TrendingUp className = 'w-3.5 h-3.5' />
96- Top by Stars
97- </ span >
98- </ button >
99- < button
100- onClick = { ( ) => setViewMode ( 'latest' ) }
101- className = { `px-3 py-1 rounded-md text-sm font-medium transition-all ${
102- viewMode === 'latest'
103- ? 'bg-white dark:bg-slate-700 text-purple-600 dark:text-purple-400 shadow-sm'
104- : 'text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-200'
105- } `}
106- >
107- < span className = 'flex items-center gap-1' >
108- < Clock className = 'w-3.5 h-3.5' />
109- Most Recent
110- </ span >
111- </ button >
112- </ div >
113- < Badge variant = 'info' size = 'md' >
114- { totalDependents } { viewMode === 'top' ? 'Top' : 'Latest' } Dependents
115- </ Badge >
116- </ div >
117- }
67+ subtitle = 'Repositories and packages that depend on our projects'
11868 />
11969
120- { /* Stats Cards */ }
121- < CardGrid className = 'grid-cols-1 md:grid-cols-4 mb-8' >
122- < Card className = 'bg-gradient-to-br from-purple-50 to-purple-100 dark:from-purple-900/20 dark:to-purple-800/20 border-purple-200 dark:border-purple-800' >
123- < div className = 'flex items-center justify-between' >
124- < div >
125- < p className = 'text-sm font-medium text-purple-600 dark:text-purple-300' > Repositories</ p >
126- < p className = 'text-2xl font-bold text-purple-900 dark:text-white' > { totalRepos } </ p >
127- </ div >
128- < GitBranch className = 'w-8 h-8 text-purple-500' />
129- </ div >
130- </ Card >
131-
132- < Card className = 'bg-gradient-to-br from-blue-50 to-blue-100 dark:from-blue-900/20 dark:to-blue-800/20 border-blue-200 dark:border-blue-800' >
133- < div className = 'flex items-center justify-between' >
134- < div >
135- < p className = 'text-sm font-medium text-blue-600 dark:text-blue-300' > Packages</ p >
136- < p className = 'text-2xl font-bold text-blue-900 dark:text-white' > { totalPackages } </ p >
137- </ div >
138- < Package className = 'w-8 h-8 text-blue-500' />
139- </ div >
140- </ Card >
141-
142- < Card className = 'bg-gradient-to-br from-amber-50 to-amber-100 dark:from-amber-900/20 dark:to-amber-800/20 border-amber-200 dark:border-amber-800' >
143- < div className = 'flex items-center justify-between' >
144- < div >
145- < p className = 'text-sm font-medium text-amber-600 dark:text-amber-300' > Top Stars</ p >
146- < p className = 'text-2xl font-bold text-amber-900 dark:text-white' >
147- { topDependent ? topDependent . stars . toLocaleString ( ) : '0' }
148- </ p >
149- </ div >
150- < Star className = 'w-8 h-8 text-amber-500' />
151- </ div >
152- </ Card >
153-
154- < Card className = 'bg-gradient-to-br from-green-50 to-green-100 dark:from-green-900/20 dark:to-green-800/20 border-green-200 dark:border-green-800' >
155- < div className = 'flex items-center justify-between' >
156- < div >
157- < p className = 'text-sm font-medium text-green-600 dark:text-green-300' > Total Dependents</ p >
158- < p className = 'text-2xl font-bold text-green-900 dark:text-white' > { totalDependents } </ p >
159- </ div >
160- < Users className = 'w-8 h-8 text-green-500' />
161- </ div >
162- </ Card >
163- </ CardGrid >
70+ { /* Tab Switcher */ }
71+ < div className = 'mb-8 flex justify-center' >
72+ < div className = 'flex rounded-lg bg-slate-100 dark:bg-slate-800 p-1.5 shadow-sm' >
73+ < button
74+ onClick = { ( ) => setViewMode ( 'top' ) }
75+ className = { `px-6 py-3 rounded-md text-base font-semibold transition-all ${
76+ viewMode === 'top'
77+ ? 'bg-white dark:bg-slate-700 text-purple-600 dark:text-purple-400 shadow-md'
78+ : 'text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-200'
79+ } `}
80+ >
81+ < span className = 'flex items-center gap-2' >
82+ < TrendingUp className = 'w-5 h-5' />
83+ Top by Stars
84+ </ span >
85+ </ button >
86+ < button
87+ onClick = { ( ) => setViewMode ( 'latest' ) }
88+ className = { `px-6 py-3 rounded-md text-base font-semibold transition-all ${
89+ viewMode === 'latest'
90+ ? 'bg-white dark:bg-slate-700 text-purple-600 dark:text-purple-400 shadow-md'
91+ : 'text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-200'
92+ } `}
93+ >
94+ < span className = 'flex items-center gap-2' >
95+ < Clock className = 'w-5 h-5' />
96+ Most Recent
97+ </ span >
98+ </ button >
99+ </ div >
100+ </ div >
164101
165102 { /* All Packages in 2 Column Grid */ }
166103 < div className = 'grid grid-cols-1 lg:grid-cols-2 gap-6' >
@@ -170,7 +107,7 @@ function DependentsPage() {
170107 < Card key = { `${ repo } /${ pkg } ` } className = 'p-6' >
171108 < div className = 'mb-4 flex items-center justify-between' >
172109 < div className = 'flex items-center gap-2' >
173- < Package className = 'w-4 h-4' />
110+ < GitBranch className = 'w-4 h-4' />
174111 < span className = 'text-sm text-slate-600 dark:text-slate-400' > { repo } </ span >
175112 </ div >
176113 < h3 className = 'text-lg font-semibold' >
0 commit comments