import type { TreeNode } from "./tree"; function fmt(x: number): string { if (Number.isNaN(x)) return "NaN"; if (!Number.isFinite(x)) return x > 0 ? "Inf" : "-Inf"; return Number.isInteger(x) ? String(x) : Number(x.toPrecision(6)).toString(); } export function InfoPanel({ node }: { node: TreeNode | null }) { if (!node) { return (

Select an object in the tree to inspect it.

); } const { detail } = node; return (
{detail.type === "dataset" ? "⋯" : ""} {node.label} {detail.type === "dataset" ? "dataset" : detail.kind}
{detail.type === "object" ? ( detail.properties.length === 0 ? (

No properties.

) : ( {detail.properties.map(p => ( ))}
{p.key} {p.swatch && ( )} {p.value}
) ) : (
{detail.stats && ( <> {detail.stats.nan > 0 && ( )} )}
shape {detail.shapeLabel}
count {detail.count}
min {fmt(detail.stats.min)}
max {fmt(detail.stats.max)}
mean {fmt(detail.stats.mean)}
NaN {detail.stats.nan}
values
{detail.preview}
)}
); }