'use client' import Image from 'next/image' import { IconCirclePlus as PlusCircle } from '@tabler/icons-react' import { SerperSearchResultItem } from '@/lib/types' import { faviconUrl } from '@/lib/utils/favicon' import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar' import { Card, CardContent } from '@/components/ui/card' import { VideoCarouselDialog } from './video-carousel-dialog' interface VideoResultGridProps { videos: SerperSearchResultItem[] query: string displayMode: 'chat' | 'artifact' } export function VideoResultGrid({ videos, query, displayMode }: VideoResultGridProps) { const containerClasses = displayMode === 'chat' ? 'flex flex-wrap' : 'grid grid-cols-1 sm:grid-cols-2 gap-4' const itemsToMap = displayMode === 'chat' ? videos.slice(0, 4) : videos return (
{itemsToMap.map((video, index) => { const baseUrl = video.imageUrl ? video.imageUrl.split('?')[0] : '' const showOverlay = displayMode === 'chat' && index === 3 && videos.length > 4 const cardClasses = displayMode === 'chat' ? 'w-1/2 md:w-1/4 p-1' : '' return (
{' '} {/* Adjusted padding */} {baseUrl && (
{`Thumbnail { const target = e.target as HTMLImageElement target.src = '/images/placeholder-image.png' }} />
)}
{' '} {/* Inner padding for text */}

{video.title}

{new URL(video.link).hostname[0]}
{/* Display channel or source if available */} {video.channel || video.source || new URL(video.link).hostname}
{showOverlay && (
)}
) })}
) }