diff --git a/src/components/AiChatWidget.tsx b/src/components/AiChatWidget.tsx index ab9dbf6..bbb0c1c 100644 --- a/src/components/AiChatWidget.tsx +++ b/src/components/AiChatWidget.tsx @@ -1,6 +1,6 @@ // AiChatWidget.tsx import { useState, useRef, useEffect, useCallback } from "react"; -import { X, RefreshCw } from "lucide-react"; +import { X, RefreshCw, MoreVertical, Database } from "lucide-react"; import { MarkdownRenderer } from "./MarkdownRenderer"; function GeminiIcon({ size = 24 }: { size?: number }) { @@ -20,7 +20,7 @@ function GeminiIcon({ size = 24 }: { size?: number }) { function SendIcon() { return ( -
+
+
+ + +
+
+

Assistant Mandat

+
+ + {currentText} + +
+
+
+ + {/* Visual scanning/progress line */} +
+
+
+ + +
+ ); +} function AssistantBubble({ message }: { message: Message }) { const isStreaming = message.streaming; const isEmpty = !message.content; return ( -
+
{isStreaming && isEmpty ? ( -
- {[0, 1, 2].map((j) => ( - - ))} -
+ ) : ( -
- {message.isError ? ( -

{message.content}

- ) : ( - - )} - {isStreaming && !isEmpty && ( - - )} +
+
+ {message.isError ? ( +

{message.content}

+ ) : ( + + )} + {isStreaming && !isEmpty && ( + + )} +
)}
@@ -187,7 +250,7 @@ export function AiChatWidget() { aria-expanded={open} className={[ "fixed right-5 bottom-24 z-[9998] w-14 h-14 rounded-full", - "flex items-center justify-center bg-white", + "flex items-center justify-center bg-white border border-slate-100", "transition-all duration-300 hover:scale-110 active:scale-95", open ? "scale-110 shadow-[0_0_0_3px_oklch(0.70_0.16_265/40%),0_8px_32px_oklch(0.50_0.20_285/40%)]" @@ -199,58 +262,60 @@ export function AiChatWidget() { - {/* Panneau */} + {/* Panneau (Sidebar) */}
-
+
{/* Header */}
-
- -
-
-

Assistant Mandat

-

- - {rateLimited ? "Quota atteint — réessayez dans quelques secondes" : "Accès Turso en temps réel · Function calling"} -

+
+
+ + Mandat IA +
+ {/* Modèle unique bloqué */} +
+ + Llama 3.3 70B +
-
+
{hasMessages && ( - )} - +
@@ -258,73 +323,84 @@ export function AiChatWidget() { {/* Messages */}
- {!hasMessages && ( -
-
-
- -
-

Posez une question

-

- Accès en direct à la base de données : députés, scrutins 17e & 16e, blog. -

+ {!hasMessages ? ( +
+
+

+ Bonjour, +

+

+ Par où devrions-nous commencer ? +

+
+
+ {SUGGESTIONS.map((s, idx) => ( + + ))}
-
+ ) : ( + messages.map((m, i) => ( +
+ {m.role === "assistant" && ( +
+ +
+ )} + {m.role === "user" ? ( +
+ {m.content} +
+ ) : ( + + )} +
+ )) )} +
+
- {messages.map((m, i) => ( -
- {m.role === "assistant" && ( -
- -
- )} - {m.role === "user" ? ( -
- {m.content} -
- ) : ( - - )} + {/* Context Pill (Real-time active DB connection) */} +
+
+
+
+ +
+ Données de « Mandat » connectées (Turso)
- ))} -
+
+ + + + +
+
- {/* Barre d'envoi — largeur réduite */} -
+ {/* Barre d'envoi — style Chrome side-panel / Gemini */} +