diff --git a/frontend/src/ChatWindow.jsx b/frontend/src/ChatWindow.jsx index b08373a..0e6365e 100644 --- a/frontend/src/ChatWindow.jsx +++ b/frontend/src/ChatWindow.jsx @@ -49,11 +49,6 @@ export default function ChatWindow({ messages, loading, theme }) { )} - {loading && ( -
- The model is processing... -
- )}
); diff --git a/frontend/src/UserMessage.jsx b/frontend/src/UserMessage.jsx index 84e85fd..a1fd5a8 100644 --- a/frontend/src/UserMessage.jsx +++ b/frontend/src/UserMessage.jsx @@ -1,8 +1,11 @@ // src/UserMessage.jsx import React from "react"; +import ReactMarkdown from "react-markdown"; +import remarkGfm from "remark-gfm"; +import remarkMath from "remark-math"; +import rehypeKatex from "rehype-katex"; export default function UserMessage({ content, theme, timestamp, startedAt, endedAt }) { - // Priorità: timestamp dal modello dati → endedAt → startedAt const ts = timestamp ?? endedAt ?? startedAt; return ( @@ -14,17 +17,19 @@ export default function UserMessage({ content, theme, timestamp, startedAt, ende textAlign: "left", }} > -
 (
+              
+            ),
+            th: (props) => 
, + code: CodeWithCopy }} > {content} - + {ts != null && (
+ {children} + + ); + } + + const handleCopy = async () => { + try { + await navigator.clipboard.writeText(codeText); + setCopied(true); + setTimeout(() => setCopied(false), 1500); + } catch (err) { + console.error("Copy failed", err); + } + }; + + return ( +
+
+        {codeText}
+      
+ + {copied && ( + + Copied! + + )} +
+ ); +} + function formatDateTime(dateTime) { const date = dateTime instanceof Date ? dateTime : new Date(dateTime); if (Number.isNaN(date.getTime())) return String(dateTime); @@ -55,3 +120,4 @@ function formatDateTime(dateTime) { }); } +