@digitalsingularity/agent-ui-chat-components
Version:
Reusable UI components for agent chat and management interfaces
131 lines (118 loc) • 101 kB
JavaScript
(function(he,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("react/jsx-runtime"),require("react")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react"],e):(he=typeof globalThis<"u"?globalThis:he||self,e(he.AgentUILibrary={},he.jsxRuntime,he.React))})(this,function(he,e,r){"use strict";const Da=()=>`msg_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,Ma=(l={})=>{const c=l.endpoint||"/api/ai-agents/generate-avatar",N=l.credentials||"include",E={"Content-Type":"application/json",...l.headers};return async(f,b)=>{const M=await fetch(c,{method:"POST",headers:E,credentials:N,body:JSON.stringify({prompt:f,agentName:b})});if(!M.ok)throw new Error(`Failed to generate avatar: ${M.status} ${M.statusText}`);const P=await M.json();if(!P.success||!P.imageUrl)throw new Error("Invalid response format from avatar generation service");return{imageUrl:P.imageUrl}}},Fa=(l=2e3)=>async(c,N)=>{await new Promise(P=>setTimeout(P,l));const E=200,f=Math.floor(Math.random()*16777215).toString(16),b="ffffff",M=encodeURIComponent((N==null?void 0:N.substring(0,2).toUpperCase())||"AI");return{imageUrl:`https://via.placeholder.com/${E}x${E}/${f}/${b}?text=${M}`}};/**
* @license lucide-react v0.511.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const Oa=l=>l.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Ua=l=>l.replace(/^([A-Z])|[\s-_]+(\w)/g,(c,N,E)=>E?E.toUpperCase():N.toLowerCase()),ua=l=>{const c=Ua(l);return c.charAt(0).toUpperCase()+c.slice(1)},ga=(...l)=>l.filter((c,N,E)=>!!c&&c.trim()!==""&&E.indexOf(c)===N).join(" ").trim(),La=l=>{for(const c in l)if(c.startsWith("aria-")||c==="role"||c==="title")return!0};/**
* @license lucide-react v0.511.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/var ja={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
* @license lucide-react v0.511.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const _a=r.forwardRef(({color:l="currentColor",size:c=24,strokeWidth:N=2,absoluteStrokeWidth:E,className:f="",children:b,iconNode:M,...P},C)=>r.createElement("svg",{ref:C,...ja,width:c,height:c,stroke:l,strokeWidth:E?Number(N)*24/Number(c):N,className:ga("lucide",f),...!b&&!La(P)&&{"aria-hidden":"true"},...P},[...M.map(([z,$])=>r.createElement(z,$)),...Array.isArray(b)?b:[b]]));/**
* @license lucide-react v0.511.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const aa=(l,c)=>{const N=r.forwardRef(({className:E,...f},b)=>r.createElement(_a,{ref:b,iconNode:c,className:ga(`lucide-${Oa(ua(l))}`,`lucide-${l}`,E),...f}));return N.displayName=ua(l),N};/**
* @license lucide-react v0.511.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const na=aa("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/**
* @license lucide-react v0.511.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const Ga=aa("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/**
* @license lucide-react v0.511.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const Ka=aa("send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);/**
* @license lucide-react v0.511.0 - ISC
*
* This source code is licensed under the ISC license.
* See the LICENSE file in the root directory of this source tree.
*/const qa=aa("user",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]),Ba=({agent:l,isOpen:c,onClose:N,uiComponents:E,agentService:f,toastService:b,className:M="",maxMessages:P=100,enableHistory:C=!0})=>{const[z,$]=r.useState([]),[_,ie]=r.useState(""),[O,F]=r.useState(!1),[w,G]=r.useState(null),U=r.useRef(null),oe=r.useRef(null),J=r.useRef(null);let h=null;const{Dialog:K,DialogContent:I,DialogHeader:y,DialogTitle:L,DialogDescription:j,Button:k,Input:te,ScrollArea:W,Avatar:R,AvatarFallback:ce,AvatarImage:q}=E,u=r.useCallback(p=>`agent_chat_history_${p}`,[]),Y=r.useCallback(()=>{if(!(!l||z.length===0||!C))try{const p=u(l.id);localStorage.setItem(p,JSON.stringify(z))}catch(p){console.error("Error saving chat history:",p)}},[l,z,u,C]),B=r.useCallback(()=>{if(!(!l||!C))try{const p=u(l.id),Z=localStorage.getItem(p);if(Z){const re=JSON.parse(Z);$(re.slice(-P))}}catch(p){console.error("Error loading chat history:",p),l&&localStorage.removeItem(u(l.id))}},[l,u,C,P]),o=r.useCallback(()=>{if(l)try{const p=u(l.id);localStorage.removeItem(p),$([])}catch(p){console.error("Error clearing chat history:",p)}},[l,u]),A=async()=>{try{if(f.getUserAvatar){const p=await f.getUserAvatar();G(p)}}catch(p){console.error("Error fetching user profile:",p)}},ee=r.useCallback(()=>{oe.current&&oe.current.focus()},[]),S=r.useCallback(()=>{if(U.current){const p=U.current.querySelector("div[data-radix-scroll-area-viewport]");p&&requestAnimationFrame(()=>{p.scrollTop=p.scrollHeight})}},[]);r.useEffect(()=>{setTimeout(()=>S(),50)},[z,S]),r.useEffect(()=>{z.length>0&&!O&&Y()},[z,O,Y]),r.useEffect(()=>{c&&l&&(z.length===0&&B(),A())},[c,l,B,z.length]),r.useEffect(()=>{var p,Z;return c&&l?(ie(""),F(!1),(p=J.current)==null||p.abort()):(Z=J.current)==null||Z.abort(),()=>{var re;(re=J.current)==null||re.abort()}},[c,l]);const ae=async()=>{if(!l)return;const p=_.trim();if(!p||O)return;const Z={id:Date.now().toString(),role:"user",content:p};$(V=>[...V,Z]),ie(""),F(!0),J.current=new AbortController,h=(Date.now()+1).toString();let re="",le=!1;try{await f.sendMessage(p,l.id,V=>{re+=V,le?$(i=>i.map(s=>s.id===h?{...s,content:re}:s)):($(i=>[...i,{id:h,role:"assistant",content:re}]),le=!0)},V=>{console.error("Error sending message:",V),b==null||b.toast({title:"Chat Error",description:`Failed to send message: ${V.message}`,variant:"destructive"})},()=>{F(!1),J.current=null,h=null,setTimeout(()=>S(),0),setTimeout(()=>ee(),100)})}catch(V){V.name!=="AbortError"&&(console.error("Error sending message:",V),b==null||b.toast({title:"Chat Error",description:`Failed to send message: ${V.message}`,variant:"destructive"})),F(!1),J.current=null,h=null}},se=p=>{p.key==="Enter"&&!p.shiftKey&&(p.preventDefault(),ae())};return!c||!l?null:e.jsx(K,{open:c,onOpenChange:N,children:e.jsxs(I,{className:`sm:max-w-[600px] md:max-w-[700px] lg:max-w-[800px] flex flex-col max-h-[90vh] ${M}`,id:"agent-chat-modal-content","data-testid":"agent-chat-modal","data-component":"AgentChatModal","data-agent-id":l==null?void 0:l.id,children:[e.jsx(y,{id:"agent-chat-modal-header","data-testid":"agent-chat-modal-header","data-component":"chat-header",children:e.jsxs("div",{className:"flex items-center gap-3",id:"agent-chat-modal-agent-info","data-testid":"agent-info-section","data-component":"agent-info",children:[e.jsx(R,{className:"h-10 w-10","data-testid":"agent-avatar","data-component":"agent-avatar",children:l.avatarUrl?e.jsx(q,{src:l.avatarUrl,alt:l.name}):e.jsx(ce,{children:e.jsx(na,{size:24})})}),e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(L,{children:["Chat with Agent: ",l.name]}),C&&z.length>0&&e.jsx(k,{variant:"outline",size:"sm",onClick:o,className:"text-xs mr-10",id:"agent-chat-clear-history-btn","data-testid":"clear-history-button","data-component":"clear-history","data-action":"clear-conversation",children:"Clear History"})]}),e.jsxs(j,{children:["Model: ",l.model,l.temperature&&`, Temperature: ${l.temperature.toFixed(1)}`]})]})]})}),e.jsx(W,{className:"flex-grow border rounded-md p-4 h-[50vh] bg-background",ref:U,id:"agent-chat-messages-area","data-testid":"chat-messages-area","data-component":"messages-container",children:e.jsxs("div",{className:"space-y-4",id:"agent-chat-messages-container","data-testid":"messages-list","data-component":"messages-list",children:[z.map(p=>e.jsxs("div",{className:`flex items-start gap-3 ${p.role==="user"?"justify-end":""}`,id:`agent-chat-message-${p.id}`,"data-testid":`chat-message-${p.role}`,"data-component":"chat-message","data-message-id":p.id,"data-message-role":p.role,children:[p.role==="assistant"&&e.jsx(R,{className:"h-8 w-8","data-testid":"message-assistant-avatar","data-component":"message-avatar","data-avatar-role":"assistant",children:l.avatarUrl?e.jsx(q,{src:l.avatarUrl,alt:l.name}):e.jsx(ce,{children:e.jsx(na,{size:18})})}),e.jsx("div",{className:`rounded-lg p-3 text-sm max-w-[75%] whitespace-pre-wrap break-words ${p.role==="user"?"bg-primary text-primary-foreground":"bg-muted text-muted-foreground"}`,"data-testid":"message-content","data-component":"message-bubble","data-content-role":p.role,children:p.content}),p.role==="user"&&e.jsx(R,{className:"h-8 w-8","data-testid":"message-user-avatar","data-component":"message-avatar","data-avatar-role":"user",children:w?e.jsx(q,{src:w,alt:"User"}):e.jsx(ce,{children:e.jsx(qa,{size:18})})})]},p.id)),O&&!z.some(p=>p.role==="assistant"&&p.id===h)&&e.jsxs("div",{className:"flex items-start gap-3","data-testid":"loading-message","data-component":"loading-indicator","data-state":"loading",children:[e.jsx(R,{className:"h-8 w-8","data-testid":"loading-avatar","data-component":"loading-avatar",children:l.avatarUrl?e.jsx(q,{src:l.avatarUrl,alt:l.name}):e.jsx(ce,{children:e.jsx(na,{size:18})})}),e.jsx("div",{className:"rounded-lg p-3 text-sm bg-muted text-muted-foreground",children:e.jsx(Ga,{className:"h-4 w-4 animate-spin"})})]})]})}),e.jsxs("div",{className:"flex items-center p-1 pt-0 gap-2 border-t pt-4",id:"agent-chat-input-area","data-testid":"chat-input-area","data-component":"input-section",children:[e.jsx(te,{ref:oe,placeholder:"Type your message...",value:_,onChange:p=>ie(p.target.value),onKeyDown:se,disabled:O,className:"flex-grow",id:"agent-chat-message-input","data-testid":"message-input","data-component":"message-input","data-state":O?"disabled":"enabled"}),e.jsx(k,{onClick:ae,disabled:O||!_.trim(),size:"icon",id:"agent-chat-send-btn","data-testid":"send-message-button","data-component":"send-button","data-action":"send-message","data-state":O||!_.trim()?"disabled":"enabled",children:e.jsx(Ka,{className:"h-4 w-4"})})]})]})})},ma=["Formal","Creative","Technical","Friendly","Professional","Concise","Detailed","Humorous","Serious","Analytical"],fa=({agentData:l,setData:c,documents:N,handleFileChange:E,removeFile:f,isEditDialogOpen:b,agentDocuments:M,isLoadingDocuments:P,handleDeleteDocument:C,deleteDocumentMutation:z,personalityOptions:$,customTag:_,setCustomTag:ie,handleAddTag:O,handleRemoveTag:F,handleSelectTag:w,avatarFile:G,handleAvatarChange:U,handleGenerateAvatar:oe,isGeneratingAvatar:J,avatarPrompt:h,setAvatarPrompt:K,showSharingOption:I=!1,Label:y,Input:L,Textarea:j,Button:k,Select:te,SelectTrigger:W,SelectValue:R,SelectContent:ce,SelectItem:q,Slider:u,Badge:Y,Tabs:B,TabsList:o,TabsTrigger:A,TabsContent:ee,Checkbox:S,Upload:ae,Bot:se,Loader2:p,X:Z,Trash2:re})=>{var le,V;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(y,{htmlFor:"name",children:"Nume Agent"}),e.jsx(L,{id:"agent-name-input",value:l.name||"",onChange:i=>{c(s=>({...s,name:i.target.value}))},placeholder:"Ex: Asistent Documente Legale"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(y,{children:"Avatar Agent"}),e.jsxs("div",{className:"flex gap-4 items-start",children:[e.jsx("div",{className:"w-24 h-24 bg-muted rounded-md overflow-hidden flex items-center justify-center",id:"agent-avatar-preview",children:l.avatarUrl?e.jsx("img",{src:l.avatarUrl,alt:`Avatar for ${l.name||"agent"}`,className:"w-full h-full object-cover"}):G?e.jsx("img",{src:URL.createObjectURL(G),alt:"Avatar preview",className:"w-full h-full object-cover"}):e.jsx(se,{className:"w-12 h-12 text-muted-foreground"})}),e.jsx("div",{className:"flex-1 space-y-2",children:e.jsxs(B,{defaultValue:"upload",className:"w-full",children:[e.jsxs(o,{className:"grid w-full grid-cols-2",children:[e.jsx(A,{value:"upload",children:"Încarcă Imagine"}),e.jsx(A,{value:"generate",children:"Generează cu AI"})]}),e.jsxs(ee,{value:"upload",className:"space-y-2",children:[e.jsx(L,{id:"agent-avatar-upload-input",type:"file",accept:"image/*",onChange:U,className:"hidden"}),e.jsx(k,{asChild:!0,variant:"outline",className:"w-full",id:"agent-avatar-upload-button",children:e.jsxs(y,{htmlFor:"agent-avatar-upload-input",className:"cursor-pointer flex items-center justify-center gap-1",children:[e.jsx(ae,{className:"h-4 w-4"})," Selectează Imagine"]})}),G&&e.jsx("p",{className:"text-xs text-muted-foreground",children:G.name})]}),e.jsxs(ee,{value:"generate",className:"space-y-2",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(L,{id:"agent-avatar-prompt-input",placeholder:"Prompt pentru generare avatar",value:h,onChange:i=>K(i.target.value)}),e.jsx(k,{id:"agent-avatar-generate-button",onClick:oe,disabled:J||!l.name,variant:"outline",children:J?e.jsx(p,{className:"h-4 w-4 animate-spin"}):e.jsx(se,{className:"h-4 w-4"})})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Generarea poate dura câteva secunde. Se va folosi numele agentului ca referință."})]})]})})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(y,{htmlFor:"description",children:"Descriere (Opțional)"}),e.jsx(j,{id:"agent-description-textarea",value:l.description||"",onChange:i=>c(s=>({...s,description:i.target.value})),placeholder:"Ex: Ajută la crearea și revizuirea contractelor"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(y,{htmlFor:"systemInstruction",children:"Instrucțiune Sistem"}),e.jsx(j,{id:"agent-system-instruction-textarea",value:l.systemInstruction||"",onChange:i=>c(s=>({...s,systemInstruction:i.target.value})),placeholder:"Ex: Ești un asistent AI specializat în documente legale...",rows:5})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(y,{htmlFor:"model",children:"Model AI"}),e.jsxs(te,{value:l.model||"gpt-4",onValueChange:i=>c(s=>({...s,model:i})),children:[e.jsx(W,{children:e.jsx(R,{placeholder:"Selectează Model"})}),e.jsxs(ce,{children:[e.jsx(q,{value:"gpt-4o",children:"GPT-4o (Recomandat)"}),e.jsx(q,{value:"gpt-4-turbo",children:"GPT-4 Turbo"}),e.jsx(q,{value:"gpt-4",children:"GPT-4"}),e.jsx(q,{value:"gpt-3.5-turbo",children:"GPT-3.5 Turbo"})]})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsxs(y,{htmlFor:"temperature",children:["Temperatură: ",(le=l.temperature)==null?void 0:le.toFixed(1)]}),e.jsx(u,{id:"agent-temperature-slider",min:0,max:1,step:.1,value:[l.temperature||.7],onValueChange:i=>c(s=>({...s,temperature:i[0]}))}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Controlați caracterul aleatoriu: valori mai mici pentru răspunsuri mai concentrate."})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(y,{children:"Etichete Personalitate (Opțional)"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:$.map(i=>{var s;return e.jsx(Y,{variant:(s=l.personalityTags)!=null&&s.includes(i)?"default":"secondary",onClick:()=>w(i),className:"cursor-pointer",children:i},i)})}),e.jsxs("div",{className:"flex gap-2 mt-2",children:[e.jsx(L,{placeholder:"Adaugă etichetă personalizată",value:_,onChange:i=>ie(i.target.value),onKeyDown:i=>{i.key==="Enter"&&(i.preventDefault(),O())}}),e.jsx(k,{onClick:O,variant:"outline",size:"sm",children:"Adaugă"})]}),e.jsx("div",{className:"flex flex-wrap gap-1 mt-1",children:(V=l.personalityTags)==null?void 0:V.map(i=>e.jsxs(Y,{variant:"outline",children:[i,e.jsx(Z,{className:"ml-1 h-3 w-3 cursor-pointer",onClick:()=>F(i)})]},i))})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(y,{htmlFor:"documents",children:"Documente Context (Opțional)"}),b&&M&&M.length>0&&e.jsxs("div",{className:"mt-2 space-y-2",id:"agent-documents-list",children:[e.jsx("h4",{className:"text-sm font-medium",children:"Documente Încărcate:"}),P&&e.jsx("p",{className:"text-sm text-muted-foreground",children:"Se încarcă documentele..."}),e.jsx("ul",{className:"list-disc pl-5 text-sm",children:M.map(i=>e.jsxs("li",{className:"flex items-center justify-between",children:[e.jsxs("span",{title:i.fileName,children:[i.fileName.length>40?`${i.fileName.substring(0,37)}...`:i.fileName," (",i.fileSize?(i.fileSize/1024).toFixed(1):"0"," KB)"]}),e.jsx(k,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>C(i.id),disabled:z.isPending,id:`agent-document-delete-${i.id}`,children:e.jsx(re,{className:"h-4 w-4 text-red-500"})})]},i.id))})]}),!b&&N.length>0&&e.jsxs("div",{className:"mt-2 space-y-2",id:"agent-staged-documents-list",children:[e.jsx("h4",{className:"text-sm font-medium",children:"Documente Pregătite:"}),e.jsx("ul",{className:"list-disc pl-5 text-sm",children:N.map((i,s)=>e.jsxs("li",{className:"flex items-center justify-between",children:[e.jsx("span",{title:i.name,children:i.name.length>40?`${i.name.substring(0,37)}...`:i.name}),e.jsx(k,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>f(s),id:`agent-staged-document-delete-${s}`,children:e.jsx(Z,{className:"h-4 w-4 text-red-500"})})]},s))})]}),e.jsxs("div",{className:"flex items-center gap-2 mt-2",children:[e.jsx(L,{id:"agent-document-upload-input",type:"file",multiple:!0,onChange:E,className:"hidden"}),e.jsx(k,{asChild:!0,variant:"outline",id:"agent-document-upload-button",children:e.jsxs(y,{htmlFor:"agent-document-upload-input",className:"cursor-pointer flex items-center gap-1",children:[e.jsx(ae,{className:"h-4 w-4"})," Încarcă Documente"]})})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Formate suportate pentru extragerea contextului: .txt, .pdf, .docx. Primii 10.000 de caractere din fiecare document vor fi utilizați."})]}),I&&e.jsxs("div",{className:"flex items-center space-x-2 border p-3 rounded-md bg-muted/20",children:[e.jsx(S,{id:"agent-share-checkbox",checked:!!l.isPublic,onCheckedChange:i=>c(s=>({...s,isPublic:i===!0}))}),e.jsxs("div",{className:"grid gap-1.5 leading-none",children:[e.jsxs(y,{htmlFor:"agent-share-checkbox",className:"text-sm font-medium leading-none flex items-center",children:["Partajează cu toți utilizatorii",l.isPublic&&e.jsx(Y,{variant:"outline",className:"ml-2 text-xs",children:"Public"})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Alți utilizatori vor putea vedea și folosi acest agent AI, dar nu îl vor putea modifica."})]})]})]})},Va=l=>{const{useLocation:c,useMutation:N,useQueryClient:E,useAiAgents:f,createAiAgent:b,updateAiAgent:M,deleteAiAgent:P,uploadAiAgentDocument:C,deleteAiAgentDocument:z,useAiAgentDocuments:$,aiAgentKeys:_,uploadAiAgentAvatar:ie,generateAiAgentAvatar:O,shareAiAgent:F,Card:w,CardHeader:G,CardTitle:U,CardDescription:oe,CardContent:J,Table:h,TableHeader:K,TableRow:I,TableHead:y,TableBody:L,TableCell:j,Dialog:k,DialogContent:te,DialogHeader:W,DialogTitle:R,DialogDescription:ce,DialogFooter:q,Button:u,AlertDialog:Y,AlertDialogAction:B,AlertDialogCancel:o,AlertDialogContent:A,AlertDialogDescription:ee,AlertDialogFooter:S,AlertDialogHeader:ae,AlertDialogTitle:se,Select:p,SelectContent:Z,SelectItem:re,SelectTrigger:le,SelectValue:V,Input:i,Label:s,Textarea:we,Checkbox:m,Badge:ve,Tabs:ue,TabsContent:fe,TabsList:Ae,TabsTrigger:ke,Loader2:xe,Trash2:Pe,Edit:Ee,Upload:$e,X:ze,Bot:T,MessageSquare:ne,AlertCircle:De,Share2:Ne,useToast:Me,AgentChatModal:Fe,Tooltip:Ie,TooltipContent:Te,TooltipProvider:Le,TooltipTrigger:ge,Slider:je,Alert:Ge,AlertDescription:n,AlertTitle:a,ProfileMenu:d,Avatar:v,AvatarImage:Q,AvatarFallback:X,agentService:Ke,toastService:Oe,uiComponents:H}=l,[be,ye]=r.useState(!1),[me,sa]=r.useState(!1),[Wa,oa]=r.useState(!1),[x,Se]=r.useState(null),[Ce,He]=r.useState({name:"",description:"",systemInstruction:"",temperature:.7,model:"gpt-4o",personalityTags:[]}),[ra,qe]=r.useState([]),[Be,ca]=r.useState(""),[Ra,ya]=r.useState(!1),[et,at]=r.useState(null),[Ue,Je]=r.useState(null),[Ve,da]=r.useState(""),[Ca,wa]=r.useState(!1),{toast:de}=Me(),_e=E(),[,tt]=c(),[Ye,st]=r.useState("all"),rt=r.useCallback(t=>{He(t)},[]),lt=r.useCallback(t=>{Se(t)},[]);r.useEffect(()=>{window.location.hash==="#create"&&ye(!0)},[]);const{data:Ze,isLoading:nt,isError:it,error:ha}=f(),ot=(x==null?void 0:x.id)??"",{data:ct,isLoading:dt,refetch:Aa}=$(ot);r.useEffect(()=>{me&&x&&Aa()},[me,x,Aa]);const pa=N({mutationFn:({agentId:t,file:g})=>C(t,g),onSuccess:(t,g)=>{_e.invalidateQueries({queryKey:["agentDocuments",g.agentId]}),de({title:"Document încărcat",description:`Documentul "${g.file.name}" a fost încărcat.`,variant:"default"})},onError:(t,g)=>{de({title:"Eroare Încărcare Document",description:`Nu s-a putut încărca documentul "${g.file.name}": ${t.message}`,variant:"destructive"})}}),la=N({mutationFn:({agentId:t,documentId:g})=>z(t,g),onSuccess:(t,g)=>{_e.invalidateQueries({queryKey:["agentDocuments",g.agentId]}),de({title:"Document șters",description:"Documentul a fost șters cu succes.",variant:"default"})},onError:t=>{de({title:"Eroare Ștergere Document",description:`Nu s-a putut șterge documentul: ${t.message}`,variant:"destructive"})}}),Xe=N({mutationFn:({id:t,agentData:g})=>M(t,g),onSuccess:t=>{_e.invalidateQueries({queryKey:_.lists()}),sa(!1),Se(null),de({title:"Agent actualizat",description:`Agentul "${t.name}" a fost actualizat cu succes.`,variant:"default"})},onError:t=>{de({title:"Eroare Actualizare Agent",description:`Nu s-a putut actualiza agentul: ${t.message}`,variant:"destructive"})}}),We=N({mutationFn:t=>P(t),onSuccess:()=>{_e.invalidateQueries({queryKey:_.lists()}),oa(!1),Se(null),de({title:"Agent șters",description:"Agentul a fost șters cu succes.",variant:"default"})},onError:t=>{de({title:"Eroare Ștergere Agent",description:`Nu s-a putut șterge agentul: ${t.message}`,variant:"destructive"})}}),Re=N({mutationFn:({id:t,isPublic:g})=>F(t,g),onSuccess:t=>{_e.invalidateQueries({queryKey:_.lists()}),de({title:t.isPublic?"Agent partajat":"Agent privat",description:t.isPublic?`Agentul "${t.name}" este acum disponibil pentru toți utilizatorii.`:`Agentul "${t.name}" este acum privat.`,variant:"default"})},onError:t=>{console.error("[Share] Error:",t),de({title:"Eroare",description:`Nu s-a putut schimba starea de partajare: ${t.message||"Eroare necunoscută"}`,variant:"destructive"})}}),ea=N({mutationFn:async t=>{const g={...t,description:t.description||null,temperature:t.temperature??.7,model:t.model||"gpt-4o",personalityTags:t.personalityTags||[]};return b(g)},onSuccess:t=>{const g=t.id;if(_e.invalidateQueries({queryKey:_.lists()}),ra.length>0&&g){const D=ra.map(pe=>pa.mutateAsync({agentId:g,file:pe}));Promise.allSettled(D).then(pe=>{const Qe=pe.filter(bt=>bt.status==="rejected");Qe.length>0&&(console.error("Some documents failed to upload:",Qe),de({title:"Eroare Încărcare Documente",description:`Nu s-au putut încărca ${Qe.length} documente.`,variant:"destructive"}))})}Ue&&g?ie(g,Ue).then(D=>{console.log("Avatar uploaded successfully:",D),_e.invalidateQueries({queryKey:_.detail(g)})}).catch(D=>{console.error("Failed to upload avatar:",D),de({title:"Eroare Încărcare Avatar",description:`Nu s-a putut încărca avatar-ul: ${D.message}`,variant:"destructive"})}):Ve&&g&&!Ue&&O(g,Ve).then(D=>{console.log("Avatar generated successfully:",D),_e.invalidateQueries({queryKey:_.detail(g)})}).catch(D=>{console.error("Failed to generate avatar:",D),de({title:"Eroare Generare Avatar",description:`Nu s-a putut genera avatar-ul: ${D.message}`,variant:"destructive"})}),He({name:"",description:"",systemInstruction:"",temperature:.7,model:"gpt-4o",personalityTags:[]}),qe([]),Je(null),da(""),ye(!1),de({title:"Agent creat",description:`Agentul "${t.name}" a fost creat cu succes.`,variant:"default"})},onError:t=>{de({title:"Eroare Creare Agent",description:`Nu s-a putut crea agentul: ${t.message}`,variant:"destructive"})}}),ht=r.useCallback(()=>{if(!Ce.name||!Ce.systemInstruction){de({title:"Eroare",description:"Numele agentului și instrucțiunea de sistem sunt obligatorii.",variant:"destructive"});return}ea.mutate(Ce)},[Ce,de,ea]),pt=r.useCallback(()=>{x&&Xe.mutate({id:x.id,agentData:x})},[x,Xe]),ut=r.useCallback(()=>{x&&We.mutate(x.id)},[x,We]),Ta=r.useCallback(t=>{if(t.target.files){const g=Array.from(t.target.files);me&&x?g.forEach(D=>{pa.mutate({agentId:x.id,file:D})}):qe(D=>[...D,...g]),t.target.value=""}},[me,x,pa]),Sa=r.useCallback(t=>{qe(g=>g.filter((D,pe)=>pe!==t))},[]),gt=r.useCallback(t=>{x&&la.mutate({agentId:x.id,documentId:t})},[x,la]),mt=r.useCallback(t=>{Se({...t}),qe([]),sa(!0)},[]),ft=r.useCallback(t=>{at(t),ya(!0)},[]),ka=r.useCallback(()=>{var t;if(Be&&!((t=Ce.personalityTags)!=null&&t.includes(Be))){const g=[...Ce.personalityTags||[],Be];me&&x?Se(D=>D?{...D,personalityTags:g}:null):He(D=>({...D,personalityTags:g})),ca("")}},[Be,Ce.personalityTags,me,x]),Ea=r.useCallback(t=>{me&&x?Se(g=>{var D;return g?{...g,personalityTags:((D=g.personalityTags)==null?void 0:D.filter(pe=>pe!==t))||[]}:null}):He(g=>{var D;return{...g,personalityTags:((D=g.personalityTags)==null?void 0:D.filter(pe=>pe!==t))||[]}})},[me,x]),Pa=r.useCallback(t=>{if(me&&x){const g=x.personalityTags||[],D=g.includes(t)?g.filter(pe=>pe!==t):[...g,t];Se(pe=>pe?{...pe,personalityTags:D}:null)}else{const g=Ce.personalityTags||[],D=g.includes(t)?g.filter(pe=>pe!==t):[...g,t];He(pe=>({...pe,personalityTags:D}))}},[me,x,Ce.personalityTags]),$a=r.useCallback(t=>{if(t.target.files&&t.target.files[0]){const g=t.target.files[0];Je(g),t.target.value=""}},[]),za=r.useCallback(async()=>{if(!x&&!Ce.name)return;wa(!0);const t=Ve||`A professional avatar for an AI agent named ${(x==null?void 0:x.name)||Ce.name}`;try{if(me&&x){const g=await O(x.id,t);Se(D=>D?{...D,avatarUrl:g.avatarUrl,avatarType:"generated",avatarPrompt:t}:null),de({title:"Avatar Generat",description:"Avatar-ul a fost generat cu succes.",variant:"default"})}}catch(g){de({title:"Eroare Generare Avatar",description:`Nu s-a putut genera avatar-ul: ${g.message}`,variant:"destructive"})}finally{wa(!1)}},[x,Ce.name,Ve,me,O,de]),vt=async()=>{if(!(!Ue||!x))try{const t=await ie(x.id,Ue);Se(g=>g?{...g,avatarUrl:t.avatarUrl,avatarType:"uploaded"}:null),Je(null),de({title:"Avatar Încărcat",description:"Avatar-ul a fost încărcat cu succes.",variant:"default"})}catch(t){de({title:"Eroare Încărcare Avatar",description:`Nu s-a putut încărca avatar-ul: ${t.message}`,variant:"destructive"})}};r.useEffect(()=>{Ue&&x&&me&&vt()},[Ue,x,me]);const Ia=r.useMemo(()=>{if(!Ze)return[];switch(Ye){case"own":return Ze.filter(t=>t.isOwner);case"public":return Ze.filter(t=>t.isPublic&&!t.isOwner);default:return Ze}},[Ze,Ye]),Nt=r.useCallback(t=>{Re.mutate({id:t.id,isPublic:!t.isPublic})},[Re]);if(it){const t=(ha==null?void 0:ha.message)||"Unknown error";return t.includes("Daily AI usage limit")?e.jsx("div",{className:"container mx-auto p-4 md:p-6 flex items-center justify-center h-[calc(100vh-200px)]",children:e.jsxs(Ge,{variant:"destructive",className:"max-w-lg",children:[e.jsx(De,{className:"h-4 w-4"}),e.jsx(a,{children:"Tovarășe! Ați Atins Norma Zilnică!"}),e.jsxs(n,{className:"flex flex-col gap-3 mt-2",children:[e.jsx("p",{children:"Entuziasmul în muncă este apreciat, dar resursele trebuie folosite judicios. Limita planului actual a fost atinsă. Te rog sa revii in 24 de ore sau sa optezi pentru un pachet superior."}),e.jsx("a",{href:"/billing",onClick:D=>{D.preventDefault(),tt("/billing")},className:"w-fit text-blue-600 underline hover:text-blue-800 font-medium",children:"Solicită Aprobare Resurse. Vezi Pachete"})]})]})}):e.jsxs("div",{className:"text-red-500",children:["Eroare la încărcarea agenților: ",t]})}return nt?e.jsxs("div",{className:"flex items-center justify-center h-[calc(100vh-200px)]",children:[e.jsx(xe,{className:"h-8 w-8 animate-spin text-primary"}),e.jsx("span",{className:"ml-2",children:"Se încarcă agenții..."})]}):e.jsx(Le,{children:e.jsxs("div",{className:"container mx-auto py-8",id:"agents-page-container","data-testid":"agents-page","data-component":"AgentsPage",children:[e.jsxs("div",{className:"flex justify-between items-center mb-6","data-testid":"page-header","data-component":"page-header",children:[e.jsx("div",{children:e.jsx("h1",{className:"text-3xl font-bold",id:"agents-header-title","data-testid":"page-title","data-component":"page-title",children:"Management Agenți AI"})}),e.jsx("div",{className:"flex items-center gap-4 ml-auto",children:e.jsx("div",{className:"hidden md:flex",id:"agents-profile-menu","data-testid":"profile-menu-container","data-component":"profile-menu",children:e.jsx(d,{})})})]}),e.jsx(k,{open:be,onOpenChange:ye,children:e.jsxs(te,{className:"sm:max-w-[600px]",id:"agent-create-dialog","data-testid":"create-agent-dialog","data-component":"create-dialog",children:[e.jsxs(W,{children:[e.jsx(R,{children:"Creează Agent Nou"}),e.jsx(ce,{children:"Configurați detaliile pentru noul agent AI."})]}),e.jsx("div",{className:"grid gap-4 py-4 max-h-[70vh] overflow-y-auto px-2",id:"agent-create-form","data-testid":"create-form-container","data-component":"form-container",children:e.jsx(fa,{agentData:Ce,setData:rt,documents:ra,setDocuments:qe,handleFileChange:Ta,removeFile:Sa,isEditDialogOpen:!1,isLoadingDocuments:!1,handleDeleteDocument:()=>{},deleteDocumentMutation:la,personalityOptions:ma,customTag:Be,setCustomTag:ca,handleAddTag:ka,handleRemoveTag:Ea,handleSelectTag:Pa,avatarFile:Ue,setAvatarFile:Je,handleAvatarChange:$a,handleGenerateAvatar:za,isGeneratingAvatar:Ca,avatarPrompt:Ve,setAvatarPrompt:da,Label:s,Input:i,Textarea:we,Button:u,Select:p,SelectTrigger:le,SelectValue:V,SelectContent:Z,SelectItem:re,Slider:je,Badge:ve,Tabs:ue,TabsList:Ae,TabsTrigger:ke,TabsContent:fe,Checkbox:m,Upload:$e,Bot:T,Loader2:xe,X:ze,Trash2:Pe})}),e.jsxs(q,{children:[e.jsx(u,{type:"button",variant:"secondary",onClick:()=>ye(!1),id:"agent-cancel-button","data-testid":"cancel-create-button","data-component":"cancel-button","data-action":"cancel-create",children:"Anulează"}),e.jsx(u,{type:"submit",onClick:ht,disabled:ea.isPending||!Ce.name||!Ce.systemInstruction,id:"agent-submit-button","data-testid":"submit-create-button","data-component":"submit-button","data-action":"submit-create","data-state":ea.isPending?"loading":"idle",children:ea.isPending?e.jsxs(e.Fragment,{children:[e.jsx(xe,{className:"mr-2 h-4 w-4 animate-spin"})," Se creează..."]}):"Creează Agent"})]})]})}),e.jsx(k,{open:me,onOpenChange:t=>{sa(t),t||Se(null)},children:e.jsxs(te,{className:"sm:max-w-[600px]",id:"agent-edit-dialog","data-testid":"edit-agent-dialog","data-component":"edit-dialog",children:[e.jsxs(W,{children:[e.jsxs(R,{children:["Modifică Agent: ",x==null?void 0:x.name]}),e.jsx(ce,{children:"Actualizați detaliile agentului AI existent."})]}),e.jsx("div",{className:"grid gap-4 py-4 max-h-[70vh] overflow-y-auto px-2",id:"agent-edit-form","data-testid":"edit-form-container","data-component":"form-container",children:x&&e.jsx(fa,{agentData:x,setData:lt,documents:ra,setDocuments:qe,handleFileChange:Ta,removeFile:Sa,isEditDialogOpen:!0,agentDocuments:ct,isLoadingDocuments:dt,handleDeleteDocument:gt,deleteDocumentMutation:la,personalityOptions:ma,customTag:Be,setCustomTag:ca,handleAddTag:ka,handleRemoveTag:Ea,handleSelectTag:Pa,avatarFile:Ue,setAvatarFile:Je,handleAvatarChange:$a,handleGenerateAvatar:za,isGeneratingAvatar:Ca,avatarPrompt:Ve,setAvatarPrompt:da,showSharingOption:!0,Label:s,Input:i,Textarea:we,Button:u,Select:p,SelectTrigger:le,SelectValue:V,SelectContent:Z,SelectItem:re,Slider:je,Badge:ve,Tabs:ue,TabsList:Ae,TabsTrigger:ke,TabsContent:fe,Checkbox:m,Upload:$e,Bot:T,Loader2:xe,X:ze,Trash2:Pe})}),e.jsxs(q,{children:[e.jsx(u,{type:"button",variant:"secondary",onClick:()=>{sa(!1),Se(null)},id:"agent-update-cancel-button","data-testid":"cancel-edit-button","data-component":"cancel-button","data-action":"cancel-edit",children:"Anulează"}),e.jsx(u,{type:"submit",onClick:pt,disabled:Xe.isPending||!(x!=null&&x.name)||!(x!=null&&x.systemInstruction),id:"agent-update-button","data-testid":"submit-edit-button","data-component":"submit-button","data-action":"submit-edit","data-state":Xe.isPending?"loading":"idle",children:Xe.isPending?e.jsxs(e.Fragment,{children:[e.jsx(xe,{className:"mr-2 h-4 w-4 animate-spin"})," Se salvează..."]}):"Salvează Modificările"})]})]})}),e.jsx(Y,{open:Wa,onOpenChange:oa,children:e.jsxs(A,{id:"agent-delete-dialog","data-testid":"delete-agent-dialog","data-component":"delete-dialog",children:[e.jsxs(ae,{children:[e.jsx(se,{children:"Confirmare Ștergere"}),e.jsxs(ee,{children:['Sunteți sigur că doriți să ștergeți agentul "',x==null?void 0:x.name,'"? Documentele asociate vor fi șterse din storage și baza de date.']})]}),e.jsxs(S,{children:[e.jsx(o,{onClick:()=>Se(null),id:"agent-delete-cancel-button","data-testid":"cancel-delete-button","data-component":"cancel-button","data-action":"cancel-delete",children:"Anulează"}),e.jsx(B,{onClick:ut,className:"bg-red-600 hover:bg-red-700",disabled:We.isPending,id:"agent-delete-confirm-button","data-testid":"confirm-delete-button","data-component":"delete-button","data-action":"confirm-delete","data-state":We.isPending?"loading":"idle",children:We.isPending?e.jsxs(e.Fragment,{children:[e.jsx(xe,{className:"mr-2 h-4 w-4 animate-spin"})," Se șterge..."]}):"Șterge"})]})]})}),e.jsx(Fe,{agent:et,isOpen:Ra,onClose:()=>ya(!1),uiComponents:H,agentService:Ke,toastService:Oe}),e.jsxs(w,{children:[e.jsxs(G,{className:"flex flex-col sm:flex-row items-start sm:items-center justify-between space-y-2 sm:space-y-0",children:[e.jsxs("div",{children:[e.jsx(U,{children:"Agenți Existenți"}),e.jsx(oe,{children:"Lista agenților AI configurați."})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(s,{htmlFor:"agent-filter-select",className:"text-sm",children:"Arată:"}),e.jsxs(p,{value:Ye,onValueChange:t=>st(t),children:[e.jsx(le,{className:"w-[140px]",children:e.jsx(V,{placeholder:"Toți agenții"})}),e.jsxs(Z,{children:[e.jsx(re,{value:"all",children:"Toți agenții"}),e.jsx(re,{value:"own",children:"Agenții mei"}),e.jsx(re,{value:"public",children:"Agenți publici"})]})]})]})]}),e.jsx(J,{children:e.jsxs(h,{id:"agents-table","data-testid":"agents-table","data-component":"agents-table",children:[e.jsx(K,{id:"agents-table-header","data-testid":"table-header","data-component":"table-header",children:e.jsxs(I,{children:[e.jsx(y,{children:"Nume"}),e.jsx(y,{children:"Model"}),e.jsx(y,{className:"hidden md:table-cell",children:"Descriere"}),e.jsx(y,{className:"hidden lg:table-cell",children:"Temperatură"}),e.jsx(y,{className:"hidden lg:table-cell",children:"Etichete"}),e.jsx(y,{className:"hidden md:table-cell",children:"Creat La"}),e.jsx(y,{className:"text-right",children:"Acțiuni"})]})}),e.jsx(L,{id:"agents-table-body","data-testid":"table-body","data-component":"table-body",children:Ia.length>0?Ia.map(t=>{var g,D,pe;return e.jsxs(I,{id:`agent-row-${t.id}`,"data-testid":`agent-row-${t.id}`,"data-component":"agent-row","data-agent-id":t.id,children:[e.jsx(j,{className:"font-medium",children:e.jsxs("div",{className:"flex items-center space-x-3",children:[e.jsx(v,{className:"h-10 w-10",children:t.avatarUrl?e.jsx(Q,{src:t.avatarUrl,alt:t.name}):e.jsx(X,{children:e.jsx(T,{className:"h-5 w-5"})})}),e.jsxs("div",{className:"flex flex-col",children:[e.jsx("span",{children:t.name}),t.isPublic&&e.jsx(ve,{variant:"outline",className:"mt-1 text-xs w-fit",children:"Public"})]})]})}),e.jsx(j,{children:t.model}),e.jsx(j,{className:"hidden md:table-cell max-w-xs truncate",title:t.description||"",children:t.description||"-"}),e.jsx(j,{className:"hidden lg:table-cell",children:(g=t.temperature)==null?void 0:g.toFixed(1)}),e.jsx(j,{className:"hidden lg:table-cell",children:e.jsxs("div",{className:"flex flex-wrap gap-1",children:[(D=t.personalityTags)==null?void 0:D.slice(0,3).map(Qe=>e.jsx(ve,{variant:"secondary",children:Qe},Qe)),t.personalityTags&&t.personalityTags.length>3&&e.jsxs(ve,{variant:"outline",children:["+",t.personalityTags.length-3]})]})}),e.jsx(j,{className:"hidden md:table-cell",children:new Date(t.createdAt).toLocaleDateString()}),e.jsx(j,{className:"text-right",children:e.jsxs("div",{className:"flex justify-end space-x-1",children:[e.jsxs(Ie,{children:[e.jsx(ge,{asChild:!0,children:e.jsx(u,{variant:"ghost",size:"icon",onClick:()=>ft(t),id:`agent-chat-button-${t.id}`,"data-testid":`chat-button-${t.id}`,"data-component":"chat-button","data-action":"open-chat","data-agent-id":t.id,children:e.jsx(ne,{className:"h-4 w-4"})})}),e.jsx(Te,{children:e.jsx("p",{children:"Chat"})})]}),t.isOwner&&e.jsxs(e.Fragment,{children:[e.jsxs(Ie,{children:[e.jsx(ge,{asChild:!0,children:e.jsx(u,{variant:"ghost",size:"icon",onClick:()=>Nt(t),disabled:Re.isPending,id:`agent-share-button-${t.id}`,"data-testid":`share-button-${t.id}`,"data-component":"share-button","data-action":"toggle-share","data-agent-id":t.id,"data-sharing-state":t.isPublic?"public":"private",className:t.isPublic?"bg-green-50 hover:bg-green-100 border border-green-200":"",title:t.isPublic?"Agent public (click to make private)":"Agent private (click to share)",children:Re.isPending&&((pe=Re.variables)==null?void 0:pe.id)===t.id?e.jsx(xe,{className:"h-4 w-4 animate-spin"}):t.isPublic?e.jsx(Ne,{className:"h-4 w-4 text-green-600"}):e.jsx(Ne,{className:"h-4 w-4 text-gray-400"})})}),e.jsx(Te,{children:t.isPublic?e.jsxs("p",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"inline-block w-2 h-2 bg-green-500 rounded-full"}),e.jsx("strong",{children:"PUBLIC"})," - Click to make private"]}):e.jsxs("p",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"inline-block w-2 h-2 bg-gray-500 rounded-full"}),e.jsx("strong",{children:"PRIVATE"})," - Click to share with all"]})})]}),e.jsxs(Ie,{children:[e.jsx(ge,{asChild:!0,children:e.jsx(u,{variant:"ghost",size:"icon",onClick:()=>mt(t),id:`agent-edit-button-${t.id}`,"data-testid":`edit-button-${t.id}`,"data-component":"edit-button","data-action":"edit-agent","data-agent-id":t.id,children:e.jsx(Ee,{className:"h-4 w-4"})})}),e.jsx(Te,{children:e.jsx("p",{children:"Modifică"})})]}),e.jsxs(Ie,{children:[e.jsx(ge,{asChild:!0,children:e.jsx(u,{variant:"ghost",size:"icon",onClick:()=>{Se(t),oa(!0)},id:`agent-delete-button-${t.id}`,"data-testid":`delete-button-${t.id}`,"data-component":"delete-button","data-action":"delete-agent","data-agent-id":t.id,children:e.jsx(Pe,{className:"h-4 w-4 text-red-500"})})}),e.jsx(Te,{children:e.jsx("p",{children:"Șterge"})})]})]})]})})]},t.id)}):e.jsx(I,{children:e.jsx(j,{colSpan:7,className:"text-center",children:Ye==="all"?"Niciun agent găsit.":Ye==="own"?"Nu aveți agenți personali.":"Nu există agenți publici disponibili."})})})]})})]})]})})},Qa=`
.compact-markdown-images img {
margin-top: 0.5em !important;
margin-bottom: 0.5em !important;
max-width: 100% !important;
height: auto !important;
object-fit: contain !important;
display: block !important;
border-radius: 4px;
}
.circular-avatar,
.circular-avatar > span,
.circular-avatar > span > img {
border-radius: 9999px !important;
overflow: hidden !important;
}
.circular-avatar {
border: 2px solid #f5f5f5 !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
}
.circular-avatar img {
object-fit: cover !important;
width: 100% !important;
height: 100% !important;
}
.agent-avatar-selector {
cursor: pointer;
transition: transform 0.2s ease;
}
.agent-avatar-selector:hover {
transform: translateY(-2px);
}
.agent-avatar-selected {
border: 2px solid #0070f3 !important;
box-shadow: 0 0 0 2px rgba(0, 112, 243, 0.2);
}
.manage-agents-link {
font-size: 12px;
color: #666;
display: flex;
align-items: center;
gap: 4px;
padding: 6px 10px;
border-radius: 16px;
background-color: #f5f5f5;
transition: all 0.2s ease;
cursor: pointer;
margin-left: 8px;
white-space: nowrap;
}
.manage-agents-link:hover {
background-color: #e5e5e5;
color: #333;
}
.history-indicator {
display: flex;
align-items: center;
font-size: 11px;
color: #666;
gap: 4px;
background-color: #f0f0f0;
padding: 2px 8px;
border-radius: 12px;
white-space: nowrap;
}
.history-indicator svg {
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { opacity: 0.6; }
50% { opacity: 1; }
100% { opacity: 0.6; }
}
`,Ha=()=>{if(typeof document<"u"&&!document.getElementById("agents-tab-styles")){const c=document.createElement("style");c.id="agents-tab-styles",c.textContent=Qa,document.head.appendChild(c)}},Ja=({documentId:l,documentTitle:c,handleSendMessage:N,getDocumentContent:E,createMessageId:f,useAiAgents:b,Textarea:M,Button:P,Avatar:C,AvatarFallback:z,AvatarImage:$,DropdownMenu:_,DropdownMenuContent:ie,DropdownMenuItem:O,DropdownMenuLabel:F,DropdownMenuSeparator:w,DropdownMenuTrigger:G,Loader2:U,Send:oe,Bot:J,User:h,Check:K,Settings:I,Trash:y,Download:L,MoreVertical:j,History:k,ReactMarkdown:te,clsx:W,debounce:R,useToast:ce,Link:q})=>{var Me,Fe,Ie,Te,Le,ge,je,Ge,n;r.useEffect(()=>{Ha()},[]);const[u,Y]=r.useState([]),[B,o]=r.useState(""),[A,ee]=r.useState(!1),[S,ae]=r.useState(null),se=r.useRef(null),p=r.useRef(null),Z=r.useRef(null),[re,le]=r.useState(!1),[V,i]=r.useState(!1),{data:s,isLoading:we}=b(),[m,ve]=r.useState(null),{toast:ue}=ce();r.useEffect(()=>{if(s!=null&&s.length&&!m){const a=s[0];ve(a.id)}},[s,m]);const fe=r.useCallback((a,d)=>d?`agent_chat_history_${a}_${d}_doc_${l||"none"}`:`agent_chat_history_${a}_doc_${l||"none"}`,[l]),Ae=r.useCallback(()=>{if(!(!m||u.length===0))try{const a=fe(m);localStorage.setItem(a,JSON.stringify(u)),le(!0),i(!0),setTimeout(()=>i(!1),2e3)}catch{}},[m,u,fe]),ke=r.useCallback(()=>{if(m)try{const a=fe(m),d=localStorage.getItem(a);if(d){const Q=JSON.parse(d).filter(X=>X&&typeof X.id=="string"&&typeof X.role=="string"&&typeof X.content=="string"&&typeof X.timestamp=="number");Ne(Q),le(!0)}else le(!1)}catch{m&&localStorage.removeItem(fe(m)),le(!1)}},[m,fe]),xe=r.useCallback(()=>{var a;if(m)try{const d=fe(m);localStorage.removeItem(d);const v=((a=s==null?void 0:s.find(X=>X.id===m))==null?void 0:a.name)||"Agent",Q={id:f(),role:"assistant",content:`Bună! Sunt ${v}. Cum te pot ajuta cu documentul "${c}"?`,timestamp:Date.now(),agentId:m};Q.id&&Q.role&&Q.content?Ne([Q]):Ne([]),le(!1),ue({title:"Istoric șters",description:"Conversația a fost ștearsă cu succes."})}catch{ue({title:"Eroare",description:"Nu s-a putut șterge conversația.",variant:"destructive"})}},[m,fe,s,c,ue,f]),Pe=r.useCallback(()=>{var a;if(!(!m||u.length===0))try{const d=((a=s==null?void 0:s.find(H=>H.id===m))==null?void 0:a.name)||"agent",v=`conversatie_${d.toLowerCase().replace(/\s+/g,"_")}_${new Date().toISOString().split("T")[0]}.json`,Q={agent:d,document:c,timestamp:new Date().toISOString(),messages:u.map(H=>{var be;return{role:H.role,content:H.content,timestamp:new Date(H.timestamp).toISOString(),from:H.role==="assistant"&&H.agentId?((be=s==null?void 0:s.find(ye=>ye.id===H.agentId))==null?void 0:be.name)||"assistant":H.role}})},X=new Blob([JSON.stringify(Q,null,2)],{type:"application/json"}),Ke=URL.createObjectURL(X),Oe=document.createElement("a");Oe.href=Ke,Oe.download=v,document.body.appendChild(Oe),Oe.click(),document.body.removeChild(Oe),URL.revokeObjectURL(Ke),ue({title:"Conversație exportată",description:"Conversația a fost exportată cu succes."})}catch{ue({title:"Eroare",description:"Nu s-a putut exporta conversația.",variant:"destructive"})}},[m,u,s,c,ue]),Ee=r.useCallback(R(()=>{requestAnimationFrame(()=>{if(p.current){const a=Z.current;a&&a.scrollHeight-a.scrollTop<=a.clientHeight+100&&p.current.scrollIntoView({behavior:"smooth",block:"end"})}})},100),[R]),$e=r.useCallback(()=>{requestAnimationFrame(()=>{p.current&&p.current.scrollIntoView({behavior:"auto",block:"end"})})},[]);r.useEffect(()=>{Ee()},[u,Ee]),r.useEffect(()=>{S!=null&&S.content&&Ee()},[S==null?void 0:S.content,Ee]),r.useEffect(()=>{if(u.length>0&&!A){if(u.filter(d=>!d||!d.id||!d.role).length>0){const d=u.filter(v=>v&&v.id&&v.role&&typeof v.content=="string");if(d.length!==u.length){Ne(d);return}}Ae()}},[u,A,Ae]),r.useEffect(()=>{m&&u.length===0&&ke()},[m,ke,u.length]),r.useEffect(()=>{var a;if(u.length===0&&m){const d=((a=s==null?void 0:s.find(Q=>Q.id===m))==null?void 0:a.name)||"Agent",v={id:f(),role:"assistant",content:`Bună! Sunt ${d}. Cum te pot ajuta cu documentul "${c}"?`,timestamp:Date.now(),agentId:m};v.id&&v.role&&v.content&&Ne([v])}},[m,s,c,u.length,f]);const ze=a=>{if(a===m)return;const d=m;ve(a);const v=s==null?void 0:s.find(Q=>Q.id===a);if(v)if(d&&u.length>0){const Q={id:f(),role:"assistant",content:`*${v.name} s-a alăturat conversației și va continua să răspundă.*`,timestamp:Date.now(),agentId:v.id};Q.id&&Q.role&&Q.content&&Ne(X=>[...X,Q])}else Ne([])},T=async()=>{if(!m){ue({title:"Atenție",description:"Vă rugăm să selectați un agent.",variant:"destructive"});return}if(!B.trim()||A)return;const a=B.trim();o(""),ee(!0);const d={id:f(),role:"user",content:a,timestamp:Date.now()};d.id&&d.role&&d.content&&(Ne(H=>[...H,d]),$e());const v={id:f(),role:"assistant",content:"",timestamp:Date.now(),agentId:m};ae(v),se.current=v;const Q=E(),X=u.length>1?u.slice(1).map(H=>{var ye;const be=H.role==="assistant"&&H.agentId?((ye=s==null?void 0:s.find(me=>me.id===H.agentId))==null?void 0:ye.name)||"AI":H.role==="user"?"User":"AI";return H.role==="assistant"&&H.content.includes("s-a alăturat conversației")?null:`${be}: ${H.content}`}).filter(Boolean).join(`
`):"",Ke={documentId:l,documentTitle:c,documentContent:Q,fields:[],chatHistory:X},Oe=X?`${X}
User: ${a}`:a;await N(Oe,Ke,m,H=>{ae(be=>{if(!be)return null;const ye={...be,content:be.content+H};return se.current=ye,ye})},H=>{let be="A apărut o eroare necunoscută.";if(H instanceof Error)be=`Scuze, eroare: ${H.message}`;else if(typeof H=="string")be=H;else if(H)try{be=JSON.stringify(H)}catch{}ae(ye=>{if(!ye)return null;const me={...ye,content:be};return se.current=me,me})},()=>{if(se.current&&se.current.content.trim()&&se.current.id&&se.current.role){const H=se.current;Ne(be=>[...be,H])}ae(null),se.current=null,ee(!1)})},ne=a=>{a.preventDefault(),T()},De=a=>`hsla(${a.split("").reduce((Q,X)=>Q+X.charCodeAt(0),0)%360}, 85%, 96%, 1)`,Ne=r.useCallback(a=>{const d=v=>v.filter(X=>!(!X||typeof X.id!="string"||typeof X.role!="string"||typeof X.content!="string"||typeof X.timestamp!="number"));if(typeof a=="function")Y(v=>{const Q=a(v);return d(Q)});else{const v=d(a);Y(v)}},[]);return e.jsxs("div",{className:"p-4 flex-grow overflow-hidden flex flex-col h-full",id:"agents-tab-interface","data-testid":"agents-tab","data-component":"AgentsTab","data-document-id":l,children:[e.jsx("div",{className:"mb-4 shrink-0",id:"agents-tab-agent-select-container","data-testid":"agent-selector-container","data-component":"agent-selector",children:e.jsxs("div",{className:"flex justify-between items-center",id:"agents-tab-agent-selector","data-testid":"agent-selector-bar","data-component":"selector-bar",children:[e.jsx("div",{className:"flex items-center",children:m&&(s==null?void 0:s.find(a=>a.id===m))&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(C,{className:W("h-12 w-12 circular-avatar agent-avatar-selector agent-avatar-selected"),title:((Me=s==null?void 0:s.find(a=>a.id===m))==null?void 0:Me.name)||"Agent","data-testid":"selected-agent-avatar","data-component":"agent-avatar","data-agent-id":m,"data-state":"selected",children:(Fe=s==null?void 0:s.find(a=>a.id===m))!=null&&Fe.avatarUrl?e.jsx($,{src:((Ie=s==null?void 0:s.find(a=>a.id===m))==null?void 0:Ie.avatarUrl)||"",alt:((Te=s==null?void 0:s.find(a=>a.id===m))==null?void 0:Te.name)||"Agent"}):e.jsx(z,{children:e.jsx(J,{size:24})})}),e.jsx("div",{className:"text-sm font-medium",children:((Le=s==null?void 0:s.find(a=>a.id===m))==null?void 0:Le.name)||"Agent"}),re&&e.jsxs("div",{className:"history-indicator ml-2",title:"Conversație salvată",children:[V&&e.jsx(K,{size:12}),e.jsx(k,{size:12})]})]})}),e.jsxs("div",{className:"flex items-center",children:[e.jsxs(_,{"data-testid":"chat-options-menu","data-component":"options-menu",children:[e.jsx(G,{asChild:!0,children:e.jsx(P,{variant:"ghost",size:"icon",className:"h-8 w-8 mr-2","data-testid":"options-menu-trigger","data-component":"menu-trigger",children:e.jsx(j,{size:16})})}),e.jsxs(ie,{align:"end",children:[e.jsx(F,{children:"Istoric conversație"}),e.jsx(w,{}),e.jsxs(O,{onClick:xe,"data-testid":"clear-conversation-item","data-component":"menu-item","data-action":"clear-conversation",children:[e.jsx(y,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Șterge conversația"})]}),e.jsxs(O,{onClick:Pe,"data-testid":"export-conversation-item","data-component":"menu-item","data-action":"export-conversation",children:[e.jsx(L,{className:"mr-2 h-4 w-4"}),e.jsx("span",{children:"Exportă conversația"})]})]})]}),!we&&(s==null?void 0:s.filter(a=>a.id!==m).map((a,d)=>e.jsx(C,{className:W("h-10 w-10 circular-avatar agent-avatar-selector","border-2 border-white","-ml-2 first:ml-0"),style:{zIndex:s.length-d},onClick:()=>ze(a.id),title:a.name,"data-testid":`agent-avatar-${a.id}`,"data-component":"agent-avatar","data-agent-id":a.id,"data-state":"available",children:a.avatarUrl?e.jsx($,{src:a.avatarUrl,alt:a.name}):e.jsx(z,{children:e.jsx(J,{size:20})})},a.id))),e.jsxs(q,{href:"/agents",className:"manage-agents-link","data-testid":"manage-agents-link","data-component":"management-link","