// src/Chat.jsx — chat thread with messages, sources, photo galleries, follow-ups
const FLOWS = () => window.ALCY_DATA.FLOWS;
// Map a free-form question to a canned flow id. Falls back to "forges".
function routeQuestion(q) {
const s = q.toLowerCase();
if (s.includes("forge") && (s.includes("photo") || s.includes("montre") || s.includes("voir"))) return "forgesPhotos";
if (s.includes("forge") || s.includes("devos") || s.includes("lemaire")) return "forges";
if (s.includes("paris") || s.includes("roubaix") || s.includes("vélo") || s.includes("velo") || s.includes("course")) return "paris";
if (s.includes("école") || s.includes("ecole") || s.includes("classe") || s.includes("dubois")) return "ecolePhotos";
return "forges";
}
const MessageBubble = ({ msg }) => {
// Convert simple markdown-ish: **bold**, • bullets, \n
const renderText = (t) =>
t.split("\n").map((line, i) => {
const parts = line.split(/(\*\*[^*]+\*\*)/g).map((p, j) =>
p.startsWith("**") && p.endsWith("**")
? {p.slice(2, -2)}
: