@@ -34,6 +34,7 @@ export function ScriptsGrid({ onInstallScript }: ScriptsGridProps) {
3434 } ) ;
3535 const [ saveFiltersEnabled , setSaveFiltersEnabled ] = useState ( false ) ;
3636 const [ isLoadingFilters , setIsLoadingFilters ] = useState ( true ) ;
37+ const [ isNewestMinimized , setIsNewestMinimized ] = useState ( false ) ;
3738 const gridRef = useRef < HTMLDivElement > ( null ) ;
3839
3940 const { data : scriptCardsData , isLoading : githubLoading , error : githubError , refetch } = api . scripts . getScriptCardsWithCategories . useQuery ( ) ;
@@ -689,48 +690,73 @@ export function ScriptsGrid({ onInstallScript }: ScriptsGridProps) {
689690 onViewModeChange = { setViewMode }
690691 />
691692
692- { /* Newest Scripts Carousel - Always show when there are newest scripts */ }
693- { newestScripts . length > 0 && (
693+ { /* Newest Scripts Carousel - Only show when no search, filters, or category is active */ }
694+ { newestScripts . length > 0 && ! hasActiveFilters && ! selectedCategory && (
694695 < div className = "mb-8" >
695696 < div className = "bg-card border-l-4 border-l-primary border border-border rounded-lg p-6 shadow-lg" >
696697 < div className = "flex items-center justify-between mb-4" >
697698 < h2 className = "text-xl font-semibold text-foreground flex items-center gap-2" >
698699 < Clock className = "h-6 w-6 text-primary" />
699700 Newest Scripts
700701 </ h2 >
701- < span className = "text-sm text-muted-foreground" >
702- { newestScripts . length } recently added
703- </ span >
702+ < div className = "flex items-center gap-2" >
703+ < span className = "text-sm text-muted-foreground" >
704+ { newestScripts . length } recently added
705+ </ span >
706+ < Button
707+ onClick = { ( ) => setIsNewestMinimized ( ! isNewestMinimized ) }
708+ variant = "ghost"
709+ size = "icon"
710+ className = "h-8 w-8 text-muted-foreground hover:text-foreground"
711+ title = { isNewestMinimized ? "Expand newest scripts" : "Minimize newest scripts" }
712+ >
713+ < svg
714+ className = { `h-4 w-4 transition-transform ${ isNewestMinimized ? "" : "rotate-180" } ` }
715+ fill = "none"
716+ stroke = "currentColor"
717+ viewBox = "0 0 24 24"
718+ >
719+ < path
720+ strokeLinecap = "round"
721+ strokeLinejoin = "round"
722+ strokeWidth = { 2 }
723+ d = "M5 15l7-7 7 7"
724+ />
725+ </ svg >
726+ </ Button >
727+ </ div >
704728 </ div >
705729
706- < div className = "overflow-x-auto scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-gray-600 scrollbar-track-transparent" >
707- < div className = "flex gap-4 pb-2" style = { { minWidth : 'max-content' } } >
708- { newestScripts . map ( ( script , index ) => {
709- if ( ! script || typeof script !== 'object' ) {
710- return null ;
711- }
712-
713- const uniqueKey = `newest-${ script . slug ?? 'unknown' } -${ script . name ?? 'unnamed' } -${ index } ` ;
714-
715- return (
716- < div key = { uniqueKey } className = "flex-shrink-0 w-64 sm:w-72 md:w-80" >
717- < div className = "relative" >
718- < ScriptCard
719- script = { script }
720- onClick = { handleCardClick }
721- isSelected = { selectedSlugs . has ( script . slug ?? '' ) }
722- onToggleSelect = { toggleScriptSelection }
723- />
724- { /* NEW badge */ }
725- < div className = "absolute top-2 right-2 bg-success text-success-foreground text-xs font-semibold px-2 py-1 rounded-md shadow-md z-10" >
726- NEW
730+ { ! isNewestMinimized && (
731+ < div className = "overflow-x-auto scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-gray-600 scrollbar-track-transparent" >
732+ < div className = "flex gap-4 pb-2" style = { { minWidth : 'max-content' } } >
733+ { newestScripts . map ( ( script , index ) => {
734+ if ( ! script || typeof script !== 'object' ) {
735+ return null ;
736+ }
737+
738+ const uniqueKey = `newest-${ script . slug ?? 'unknown' } -${ script . name ?? 'unnamed' } -${ index } ` ;
739+
740+ return (
741+ < div key = { uniqueKey } className = "flex-shrink-0 w-64 sm:w-72 md:w-80" >
742+ < div className = "relative" >
743+ < ScriptCard
744+ script = { script }
745+ onClick = { handleCardClick }
746+ isSelected = { selectedSlugs . has ( script . slug ?? '' ) }
747+ onToggleSelect = { toggleScriptSelection }
748+ />
749+ { /* NEW badge */ }
750+ < div className = "absolute top-2 right-2 bg-success text-success-foreground text-xs font-semibold px-2 py-1 rounded-md shadow-md z-10" >
751+ NEW
752+ </ div >
727753 </ div >
728754 </ div >
729- </ div >
730- ) ;
731- } ) }
755+ ) ;
756+ } ) }
757+ </ div >
732758 </ div >
733- </ div >
759+ ) }
734760 </ div >
735761 </ div >
736762 ) }
0 commit comments