import { useState, useMemo } from 'react'; import { useSeoMeta } from '@unhead/react'; import { Input } from '@/components/ui/input'; import { cn } from '@/lib/utils'; import { GLOSSARY, TOTAL_TRICKS, searchTricks, type FlatTrick, } from '@/lib/glossary'; import { BookOpen, Search, X } from 'lucide-react'; import { useTranslation } from '@/contexts/language'; function TrickRow({ trick }: { trick: { name: string; aka?: string[]; desc: string } }) { return (

{trick.name}

{trick.aka && trick.aka.length > 0 && (

a.k.a. {trick.aka.join(' ยท ')}

)}

{trick.desc}

); } export default function GlossaryPage() { const { t } = useTranslation(); const [query, setQuery] = useState(''); const [activeCat, setActiveCat] = useState(null); useSeoMeta({ title: t('settingsUi.glossary.seoTitle'), description: t('settingsUi.glossary.seoDescription', { count: TOTAL_TRICKS }), }); const isSearching = query.trim().length > 0; const searchResults: FlatTrick[] = useMemo( () => (isSearching ? searchTricks(query) : []), [query, isSearching], ); const visibleCategories = useMemo( () => (activeCat ? GLOSSARY.filter((c) => c.id === activeCat) : GLOSSARY), [activeCat], ); return ( <>
{/* Hero */}

{t('settingsUi.glossary.heading')}

{t('settingsUi.glossary.subheading', { count: TOTAL_TRICKS })}

{/* Search */}
setQuery(e.target.value)} placeholder={t('settingsUi.glossary.searchPlaceholder')} className="h-11 rounded-xl border-white/10 bg-black/40 pl-9 pr-9 text-white placeholder:text-gray-500 focus-visible:ring-red-500/40" /> {query && ( )}
{/* Category filter pills โ€” hidden while searching */} {!isSearching && (
{GLOSSARY.map((cat) => ( ))}
)} {/* Search results */} {isSearching ? (

{t('settingsUi.glossary.results', { count: searchResults.length, s: searchResults.length === 1 ? '' : 's' })} โ€œ{query}โ€

{searchResults.length === 0 ? (

{t('settingsUi.glossary.noMatch')}

) : (
{searchResults.map((t) => (

{t.categoryGlyph} {t.categoryTitle}

))}
)}
) : ( /* Category sections */
{visibleCategories.map((cat) => (

{cat.glyph} {cat.title}

{t('settingsUi.glossary.tricksCount', { count: cat.tricks.length })}

{cat.blurb}

{cat.tricks.map((t) => ( ))}
))}
)} {/* Footer note */}

{t('settingsUi.glossary.footerBefore')}{' '} {' '} {t('settingsUi.glossary.footerAfter')}

); }