'use client';
import {
useState,
useCallback,
createContext,
useContext,
type ReactNode,
} from 'react';
import { cn } from '@/lib/utils';
const FilterContext = createContext('');
function slugify(text: string): string {
return text
.toLowerCase()
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-|-$/g, '');
}
export function Glossary({ children }: { children: ReactNode }) {
const [filter, setFilter] = useState('');
return (
);
}
export function GlossaryTerm({
name,
children,
}: {
name: string;
children: ReactNode;
}) {
const filter = useContext(FilterContext);
const [definitionText, setDefinitionText] = useState('');
const id = slugify(name);
const definitionRef = useCallback((node: HTMLDivElement | null) => {
if (node) {
setDefinitionText(node.textContent?.toLowerCase() || '');
}
}, []);
const matches =
!filter ||
name.toLowerCase().includes(filter) ||
definitionText.includes(filter);
if (!matches) return null;
return (
);
}