'use client'; import React from 'react'; import { Accordion } from '@/components/ui/Accordion'; interface VisualItem { id: string; alt: string; caption?: string; page: number; image_url?: string; // real URL from backend ColPali retrieval } interface SourceVisualEvidenceAccordionProps { visuals: VisualItem[]; onOpenPage?: (page: number) => void; } export function SourceVisualEvidenceAccordion({ visuals, onOpenPage }: SourceVisualEvidenceAccordionProps) { const [selected, setSelected] = React.useState(null); const [imgErrors, setImgErrors] = React.useState>({}); const handleImgError = (id: string) => { setImgErrors(prev => ({ ...prev, [id]: true })); }; return ( {visuals.length === 0 ? (
๐Ÿ“‰
No chart or graph evidence was found for this response.
) : ( <>

Showing only chart and graph evidence retrieved by ColPali visual search. Only exact PDF page screenshots are shown โ€” no recreated or AI-generated visuals.

{visuals.map((v, i) => { const hasRealImage = !!v.image_url && !imgErrors[v.id]; return (
{ setSelected(i); onOpenPage?.(v.page); }} id={`visual-item-${v.id}`} role="button" tabIndex={0} onKeyDown={e => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); setSelected(i); onOpenPage?.(v.page); } }} > {/* Image area */} {hasRealImage ? ( // Real ColPali-retrieved page screenshot
{/* eslint-disable-next-line @next/next/no-img-element */} {v.alt} handleImgError(v.id)} style={{ width: '100%', display: 'block', borderRadius: 'var(--radius-md) var(--radius-md) 0 0', maxHeight: '600px', objectFit: 'contain', background: '#fff', }} /> {/* ColPali badge */}
ColPali
) : ( // Placeholder (demo mode or image load error)
๐Ÿ“Š
{v.alt}
Page {v.page} ยท ColPali retrieved
Start backend to view screenshot
)} {/* Expand detail */} {selected === i && (
{v.caption || `Page ${v.page} visual evidence`}

{hasRealImage ? 'Exact PDF page screenshot retrieved by ColPali visual search. No values approximated from visual shape.' : 'Connect the backend to display the exact PDF page screenshot from ColPali retrieval.'}

)}
); })}
{/* Guardrail notice */}
IRIS never recreates, redraws, or approximates charts. Only exact PDF page screenshots retrieved by ColPali are shown. Numeric values are sourced exclusively from validated text or table data โ€” never from visual shape estimation.
)}
); }