@@ -111,7 +111,7 @@ type SortColumn = "name" | "language" | "stars" | "forks" | "unique_visitors" |
111111type PyPISortColumn = "name" | "downloads_last_day" | "downloads_last_week" | "downloads_last_month" | "version" ;
112112type SortDirection = "asc" | "desc" ;
113113type ActiveTab = "github" | "pypi" ;
114- type PyPIFilter = "all" | "tool" | "bootcamp" ;
114+ type PyPIFilter = "all" | "tool" | "bootcamp" | "applied-research" ;
115115
116116export default function AnalyticsPage ( ) {
117117 // Load data dynamically to ensure fresh data during development
@@ -702,7 +702,6 @@ export default function AnalyticsPage() {
702702 >
703703 < td
704704 className = "px-6 py-4 whitespace-nowrap relative"
705- title = { repo . description }
706705 >
707706 < a
708707 href = { `https://github.com/${ repo . repo_id } ` }
@@ -714,9 +713,9 @@ export default function AnalyticsPage() {
714713 < ExternalLink className = "w-3 h-3" />
715714 </ a >
716715 { repo . description && (
717- < div className = "hidden group-hover:block absolute left-0 top -full mt -2 z-50 bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 text-sm rounded-lg py-3 px-4 w-96 max-w-[calc(100vw-2rem)] shadow-xl border-2 border-gray-200 dark:border-gray-600 leading-relaxed whitespace-normal break-words" >
716+ < div className = "hidden group-hover:block absolute left-0 bottom -full mb -2 z-50 bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 text-sm rounded-lg py-3 px-4 w-96 max-w-[calc(100vw-2rem)] shadow-xl border-2 border-gray-200 dark:border-gray-600 leading-relaxed whitespace-normal break-words" >
718717 { repo . description }
719- < div className = "absolute -top -2 left-8 w-4 h-4 bg-white dark:bg-gray-800 border-l -2 border-t -2 border-gray-200 dark:border-gray-600 transform rotate-45" > </ div >
718+ < div className = "absolute -bottom -2 left-8 w-4 h-4 bg-white dark:bg-gray-800 border-r -2 border-b -2 border-gray-200 dark:border-gray-600 transform rotate-45" > </ div >
720719 </ div >
721720 ) }
722721 </ td >
@@ -783,10 +782,11 @@ export default function AnalyticsPage() {
783782 Downloads include CI/CD pipelines, automated builds, dependency installations, and development environment setups.
784783 A single user or organization typically generates many downloads through automation and tooling.
785784 </ p >
786- < p className = "text-blue-800 dark:text-blue-200 mt-2" >
787- < span className = "font-medium" > Tool packages</ span > are production-ready libraries for use in projects.
788- < span className = "font-medium ml-2" > Bootcamp packages</ span > are educational utilities for tutorials and demos.
789- </ p >
785+ < ul className = "text-blue-800 dark:text-blue-200 mt-2 space-y-1 list-disc list-inside" >
786+ < li > < span className = "font-medium" > Tool packages</ span > are production-ready libraries for use in projects.</ li >
787+ < li > < span className = "font-medium" > Bootcamp packages</ span > are educational utilities for tutorials and demos.</ li >
788+ < li > < span className = "font-medium" > Applied-research packages</ span > are implementations from applied research projects.</ li >
789+ </ ul >
790790 </ div >
791791 </ div >
792792 </ div >
@@ -836,6 +836,19 @@ export default function AnalyticsPage() {
836836 ({ allPypiMetrics . filter ( ( p ) => p . type === "bootcamp" ) . length } )
837837 </ span >
838838 </ button >
839+ < button
840+ onClick = { ( ) => setPypiFilter ( "applied-research" ) }
841+ className = { `px-4 py-2 rounded-lg text-sm font-medium transition-all ${
842+ pypiFilter === "applied-research"
843+ ? "bg-vector-magenta text-white shadow-md"
844+ : "bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700"
845+ } `}
846+ >
847+ Applied Research
848+ < span className = "ml-2 text-xs opacity-75" >
849+ ({ allPypiMetrics . filter ( ( p ) => p . type === "applied-research" ) . length } )
850+ </ span >
851+ </ button >
839852 </ div >
840853 </ div >
841854
@@ -971,7 +984,6 @@ export default function AnalyticsPage() {
971984 >
972985 < td
973986 className = "px-6 py-4 whitespace-nowrap relative"
974- title = { pkg . description }
975987 >
976988 < div >
977989 < a
@@ -984,13 +996,13 @@ export default function AnalyticsPage() {
984996 < ExternalLink className = "w-3 h-3" />
985997 </ a >
986998 < div className = "mt-1 text-xs text-gray-500 dark:text-gray-400" >
987- { pkg . type === "tool" ? "Tool" : " Bootcamp"}
999+ { pkg . type === "tool" ? "Tool" : pkg . type === "bootcamp" ? " Bootcamp" : "Applied Research "}
9881000 </ div >
9891001 </ div >
9901002 { pkg . description && (
991- < div className = "hidden group-hover:block absolute left-0 top -full mt -2 z-50 bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 text-sm rounded-lg py-3 px-4 w-96 max-w-[calc(100vw-2rem)] shadow-xl border-2 border-gray-200 dark:border-gray-600 leading-relaxed whitespace-normal break-words" >
1003+ < div className = "hidden group-hover:block absolute left-0 bottom -full mb -2 z-50 bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 text-sm rounded-lg py-3 px-4 w-96 max-w-[calc(100vw-2rem)] shadow-xl border-2 border-gray-200 dark:border-gray-600 leading-relaxed whitespace-normal break-words" >
9921004 { pkg . description }
993- < div className = "absolute -top -2 left-8 w-4 h-4 bg-white dark:bg-gray-800 border-l -2 border-t -2 border-gray-200 dark:border-gray-600 transform rotate-45" > </ div >
1005+ < div className = "absolute -bottom -2 left-8 w-4 h-4 bg-white dark:bg-gray-800 border-r -2 border-b -2 border-gray-200 dark:border-gray-600 transform rotate-45" > </ div >
9941006 </ div >
9951007 ) }
9961008 </ td >
0 commit comments