"use client";
import type { ReactNode } from "react";
import { Tooltip as TooltipPrimitive } from "radix-ui";
import { Info } from "lucide-react";
import { GLOSSAIRE, type CleGlossaire } from "@/lib/glossaire";
import { cn } from "@/lib/utils";
/** À placer une fois en haut de l'arbre (cf. app/providers.tsx). */
export function TooltipProvider({ children }: { children: ReactNode }) {
return (
{children}
);
}
interface TooltipProps {
content: ReactNode;
children: ReactNode;
side?: "top" | "right" | "bottom" | "left";
}
/** Infobulle accessible (survol et focus clavier), lisible dans les deux thèmes. */
export function Tooltip({ content, children, side = "top" }: TooltipProps) {
return (
{children}
{content}
);
}
interface TermeProps {
/** Entrée du glossaire à expliquer. */
id: CleGlossaire;
/** Texte affiché ; par défaut le libellé du glossaire. */
children?: ReactNode;
className?: string;
}
/**
* Terme métier avec sa définition au survol : un petit « i » signale qu'une
* explication existe, sans encombrer la lecture.
*/
export function Terme({ id, children, className }: TermeProps) {
const entree = GLOSSAIRE[id];
return (
{entree.terme}
{entree.definition}
>
}
>
{children ?? entree.terme}
);
}
/** Texte suivi d'un « i » : explication libre au survol (hors glossaire). */
export function InfoBulle({ children, explication, className }: { children: ReactNode; explication: ReactNode; className?: string }) {
return (
{children}
);
}