'use client'; import { useState } from "react"; import Image from "next/image"; import { Search, LibraryBigIcon, Code, Info } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { Card } from "@/components/ui/card"; import { CardContent } from "@/components/ui/card"; import { DemoExamples, DemoSearchExample, DemoSearchScope } from "@/types"; import { cn, getCodeHostIcon } from "@/lib/utils"; import useCaptureEvent from "@/hooks/useCaptureEvent"; import { SearchScopeInfoCard } from "@/features/chat/components/chatBox/searchScopeInfoCard"; interface AskSourcebotDemoCardsProps { demoExamples: DemoExamples; } export const AskSourcebotDemoCards = ({ demoExamples, }: AskSourcebotDemoCardsProps) => { const captureEvent = useCaptureEvent(); const [selectedFilterSearchScope, setSelectedFilterSearchScope] = useState(null); const handleExampleClick = (example: DemoSearchExample) => { captureEvent('wa_demo_search_example_card_pressed', { exampleTitle: example.title, exampleUrl: example.url || '', }); if (example.url) { window.open(example.url, '_blank'); } } const getSearchScopeIcon = (searchScope: DemoSearchScope, size: number = 20, isSelected: boolean = false) => { const sizeClass = size === 12 ? "h-3 w-3" : "h-5 w-5"; const colorClass = isSelected ? "text-primary-foreground" : "text-muted-foreground"; if (searchScope.type === "reposet") { return ; } if (searchScope.codeHostType) { const codeHostIcon = getCodeHostIcon(searchScope.codeHostType); if (codeHostIcon) { // When selected, icons need to match the inverted badge colors // In light mode selected: light icon on dark bg (invert) // In dark mode selected: dark icon on light bg (no invert, override dark:invert) const selectedIconClass = isSelected ? "invert dark:invert-0" : codeHostIcon.className; return ( {`${searchScope.codeHostType} ); } } return ; } return (
{/* Example Searches Row */}

Community Ask Results

{/* Search Scope Filter */}
Search Scope:
{ setSelectedFilterSearchScope(null); }} > All {demoExamples.searchScopes.map((searchScope) => ( { setSelectedFilterSearchScope(searchScope.id); }} > {getSearchScopeIcon(searchScope, 12, selectedFilterSearchScope === searchScope.id)} {searchScope.displayName} ))}
{demoExamples.searchExamples .filter((example) => { if (selectedFilterSearchScope === null) return true; return example.searchScopes.includes(selectedFilterSearchScope); }) .map((example) => { const searchScopes = demoExamples.searchScopes.filter((searchScope) => example.searchScopes.includes(searchScope.id)) return ( handleExampleClick(example)} >
{searchScopes.map((searchScope) => ( {getSearchScopeIcon(searchScope, 12)} {searchScope.displayName} ))}

{example.title}

{example.description}

) })}
); };