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) {
});
}
+