import { useEffect, useState } from "react"; import { Loader2 } from "lucide-react"; import { fetchContrastingGroups } from "../api/client.js"; import "./ContrastingGroupsView.css"; export default function ContrastingGroupsView({ query }) { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { let cancelled = false; setLoading(true); fetchContrastingGroups(query) .then((d) => !cancelled && setData(d)) .finally(() => !cancelled && setLoading(false)); return () => { cancelled = true; }; }, [query]); return (
The model identifies the contrasting frames most active in this investigation and places each source on a continuous spectrum based on its coverage. Marker size reflects article count.