/** * Search-box.ai * Author: Simon-Pierre Boucher * Contact: contact@spboucher.ai * File: apps/web/components/Pastille.tsx * Description: Hand-made icon pastilles — one custom SVG glyph per tool/event type. */ import type { JSX } from "react"; export type PastilleKind = | "plan" | "search" | "fetch" | "read" | "claim" | "belief" | "evidence" | "contradiction" | "thought" | "synthesis" | "done" | "failed" | "source" | "confidence"; /** All glyphs are drawn on a 24×24 grid, stroke 1.8, round caps — one visual family. */ const GLYPHS: Record = { // branching trunk — the plan grows outward plan: ( <> ), search: ( <> ), // page pulled down into the tray fetch: ( <> ), // open book read: ( <> ), // hypothesis flask claim: ( <> ), // gauge — belief updated belief: ( <> ), // double quote evidence: ( <> ), // bolt — evidence collides contradiction: ( <> ), // speech bubble thought: ( <> ), // pen nib — writing the answer synthesis: ( <> ), done: ( <> ), failed: ( <> ), // layered stack — a source source: ( <> ), confidence: ( <> ) }; export function Glyph({ kind, size = 15 }: { kind: PastilleKind; size?: number }) { return ( {GLYPHS[kind]} ); } /** Colored disc + glyph. `spin` adds the working shimmer ring. */ export function Pastille({ kind, spinning = false, size = "md" }: { kind: PastilleKind; spinning?: boolean; size?: "sm" | "md"; }) { return ( ); }