@katechat/ui 1.1.22 → 1.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -447,7 +447,7 @@ $$${n}$$`):""}function xs(e,t=!1){return e?t?[$k.parse(e,{renderer:kr})]:(e=Xk(e
447
447
  <path d="M6 4v16a1 1 0 0 0 1.524 .852l13 -8a1 1 0 0 0 0 -1.704l-13 -8a1 1 0 0 0 -1.524 .852z" />
448
448
  </svg>
449
449
  <span class="action-btn-label">${Te.label}</span>
450
- </div>`:"";mt.innerHTML=Se.replaceAll("<LANG>",et).replace("<EXECUTE_BTN>",St).replace("<DOWNLOAD_TITLE>",Ce).replace("<COPY_TITLE>",z),We.appendChild(mt),ve.parentNode?.insertBefore(We,ve),We.appendChild(ve)}}),G.current.querySelectorAll("img").forEach(ve=>{if(!ve?.classList?.contains("message-image")){ve.classList.add("message-image");let mt=ve.src.split("/").pop()||"";ve.setAttribute("data-file-name",mt)}}),G.current.querySelectorAll("table").forEach(ve=>{if(!ve?.classList?.contains("message-table")){if(ve.classList.add("message-table"),!ve.tFoot){let et=document.createElement("tfoot");ve.appendChild(et);let We=document.createElement("tr");We.className="table-controls-row",et.appendChild(We);let Te=document.createElement("th");Te.classList.add("table-controls"),Te.colSpan=ve.querySelectorAll("th").length||1,We.appendChild(Te)}let mt=ve.querySelector("tfoot tr .table-controls");mt.innerHTML=re.replace("<COPY_CSV_TITLE>",Q).replace("<DOWNLOAD_CSV_TITLE>",J);let je=0;ve.querySelectorAll("th").forEach(et=>{et.classList.contains("table-controls")||(et.classList.add("table-sort-btn"),et.setAttribute("data-col-index",String(je++)))})}}))},Di+10),[Ce,z,Q,J,u]);$C(()=>{if(!k&&G.current){let ve=new MutationObserver(de);return ve.observe(G.current,{childList:!0,subtree:!0}),de(),()=>ve.disconnect()}},[p,k,de]);let me=pr(()=>l?l(t):null,[l,t]),be=pr(()=>{let ve=s?s(t,{isLast:a}):null,mt=d?.find(je=>je.modelId===t?.modelId);return xe.createElement(xe.Fragment,null,xe.createElement(Ms,{align:"center",p:"0"},xe.createElement(Ms,{gap:"sm",wrap:"nowrap",p:"0"},xe.createElement(C3,{color:"gray",radius:"xl",size:"md",src:le?t?.user?.avatarUrl:void 0},le?xe.createElement(N3,null):mt?xe.createElement(wi,{apiProvider:mt.apiProvider,provider:mt.provider}):xe.createElement(KC,null)),xe.createElement(Pd,{size:"sm",fw:500,c:le?"blue":"teal"},ye),xe.createElement(Pd,{size:"sm",c:"dimmed"},oe)),xe.createElement(Ms,{p:"0"},Y&&xe.createElement(Bo,{status:Y}),W&&Y!=="reasoning"&&xe.createElement(Pd,{size:"sm",c:"dimmed"},W))),xe.createElement(Ls,{className:["katechat-message-content",k?"streaming":""].join(" ")},xe.createElement(xi,{status:Y,content:R,statusInfo:W,streaming:k}),I?I.map((je,et)=>xe.createElement("div",{key:et,dangerouslySetInnerHTML:{__html:je}})):xe.createElement("div",null,R),xe.createElement(Ls,{className:"katechat-message-footer"},xe.createElement(Fo,{messageId:E,messageIndex:n}),me&&xe.createElement(ws,{messageId:E,messageIndex:n}),ve),me&&xe.createElement(Ls,{className:"katechat-message-content-details"},me)))},[p,ye,oe,R,I,E,h,C,d,n,q,me,k,ae.language]),[Ye,we]=xe.useState(0),[Ue,lt]=xe.useState("idle"),[qe,Je]=xe.useState(!1);$C(()=>{if(!F||F.length===0)return;let ve=F.findIndex(mt=>mt.streaming);ve>=0&&we(ve)},[F]);let Bt=pr(()=>!F||F.length===0?[]:F.map(ve=>xe.createElement(Fd,{key:ve.id,message:ve,parentIndex:n,index:Ye,models:d,plugins:s?.(ve),messageDetailsLoader:l})),[F,d,n,ae.language]),yt=pr(()=>{if(!F||F.length===0)return null;let ve=F.length,mt=We=>{We.stopPropagation(),!qe&&(Je(!0),lt("exit-right"),setTimeout(()=>{we(Te=>(Te-1+ve)%ve),lt("enter-left"),setTimeout(()=>{lt("idle"),Je(!1)},Di)},Di))},je=We=>{We.stopPropagation(),!qe&&(Je(!0),lt("exit-left"),setTimeout(()=>{we(Te=>(Te+1)%ve),lt("enter-right"),setTimeout(()=>{lt("idle"),Je(!1)},Di)},Di))},et=Bt[Ye];return xe.createElement("div",{className:"katechat-message-carousel"},xe.createElement("div",{className:"message-carousel-header"},xe.createElement("div",{className:"message-carousel-controls"},ve>1&&xe.createElement(xe.Fragment,null,xe.createElement(XC,{onClick:mt,"aria-label":"Previous",radius:"xl",variant:"light"},xe.createElement(I3,null)),xe.createElement(XC,{onClick:je,"aria-label":"Next",radius:"xl",variant:"light"},xe.createElement(A3,null))))),xe.createElement("div",{className:`carousel-message-content animation-${Ue}`},et),ve>1&&xe.createElement(Ms,{className:"carousel-model-icons"},F.map((We,Te)=>{let St=d?.find(wt=>wt.modelId===We.modelId),he=Te===Ye;return xe.createElement(R3,{key:We.id,label:St?.name||ie("AI"),position:"top"},xe.createElement(Ls,{key:We.id,c:he?void 0:"dimmed",onClick:()=>we(Te)},St?xe.createElement(wi,{apiProvider:St.apiProvider,provider:St.provider,size:20}):xe.createElement(KC,{size:20})))})))},[Bt,ae.language,Ye,Ue,qe]);return yt?xe.createElement("div",{id:`message-${t.id}`,"data-message-id":t.id,className:["katechat-message",`katechat-message__${p||""}`].join(" "),ref:G},xe.createElement("div",{className:"katechat-message-linked-toggle"},xe.createElement(v3,{checked:Z,onChange:ve=>V(ve.currentTarget.checked),label:ie(Z?"Main":"Others"),size:"sm"})),xe.createElement("div",{className:["katechat-message-main",Z?"":"hidden"].join(" ")},be),xe.createElement("div",{className:["katechat-message-linked",Z?"hidden":""].join(" ")},yt)):xe.createElement("div",{id:`message-${t.id}`,"data-message-id":t.id,className:["katechat-message",`katechat-message__${p||""}`].join(" "),ref:G},xe.createElement("div",{className:"katechat-message-main"},be))});Bd.displayName="ChatMessage";import Mi from"react";import{ScrollArea as O3}from"@mantine/core";var NU=({html:e,text:t})=>Mi.createElement(O3,{type:"hover",offsetScrollbars:!0,className:["katechat-message-content","katechat-message-preview"].join(" ")},t?Mi.createElement(Mi.Fragment,null,e?e.map((n,a)=>Mi.createElement("div",{key:a,dangerouslySetInnerHTML:{__html:n}})):Mi.createElement("div",null,t)):"...");import Pt,{useMemo as jC}from"react";import{Text as ev,Group as tv,Avatar as B3,Box as nv}from"@mantine/core";import{IconRobot as F3}from"@tabler/icons-react";import gr from"react";import{IconBrandOpenai as x3,IconBrandAws as JC,IconBrandYandex as D3,IconMessageChatbot as w3,IconAi as M3,IconBrandMeta as L3,IconBrandMedium as k3,IconBrandGoogle as P3}from"@tabler/icons-react";var wi=({apiProvider:e,provider:t,size:n=24})=>{switch(e){case"OPEN_AI":return gr.createElement(x3,{size:n});case"AWS_BEDROCK":switch(t?.toLowerCase()){case"amazon":return gr.createElement(JC,{size:n});case"anthropic":return gr.createElement(M3,{size:n});case"mistral ai":return gr.createElement(k3,{size:n});case"meta":return gr.createElement(L3,{size:n});default:return gr.createElement(JC,{size:n})}case"YANDEX_AI":return gr.createElement(D3,{size:n});case"GOOGLE_VERTEX_AI":return gr.createElement(P3,{size:n});default:return gr.createElement(w3,{size:n})}};var Fd=({message:e,parentIndex:t,index:n,plugins:a,models:o,messageDetailsLoader:s})=>{let l=jC(()=>o?.find(u=>u.modelId===e.modelId),[o,e.modelId]),d=jC(()=>s?.(e)||null,[s,e]);return Pt.createElement(nv,{key:e.id,"data-linked-message-id":e.id},Pt.createElement(tv,{align:"center",pt:"sm"},Pt.createElement(B3,{radius:"xl",size:"md"},l?Pt.createElement(wi,{apiProvider:l.apiProvider,provider:l.provider}):Pt.createElement(F3,null)),Pt.createElement(tv,{gap:"xs"},Pt.createElement(ev,{size:"sm",fw:500,c:"teal"},e.modelName),e.status&&Pt.createElement(Bo,{status:e.status}),e.statusInfo&&e.status!=="reasoning"&&Pt.createElement(ev,{size:"xs",c:"dimmed"},e.statusInfo))),Pt.createElement("div",{className:"katechat-message-content"},Pt.createElement(xi,{status:e.status,content:e.content,statusInfo:e.statusInfo,streaming:e.streaming||!1}),e.html?e.html.map((u,p)=>Pt.createElement("div",{key:p,dangerouslySetInnerHTML:{__html:u}})):Pt.createElement("div",null,e.content),Pt.createElement("div",{className:"katechat-message-footer"},Pt.createElement(Fo,{messageId:e.id,messageIndex:t,linkedMessageIndex:n}),d&&Pt.createElement(ws,{messageId:e.id,messageIndex:n,linkedMessageIndex:n}),a),d&&Pt.createElement(nv,{className:"katechat-message-content-details"},d)))};Fd.displayName="LinkedChatMessage";import it,{forwardRef as K3,useCallback as Yd,useEffect as iv,useImperativeHandle as Z3,useMemo as J3,useRef as j3,useState as Bs}from"react";import{Text as zd,Textarea as eP,Button as ov,Group as sv,ActionIcon as lv,Stack as tP,Tooltip as nP,Menu as Hd}from"@mantine/core";import{IconCirclePlus as rP,IconPlayerStopFilled as aP,IconSend as iP,IconX as oP}from"@tabler/icons-react";import{notifications as La}from"@mantine/notifications";import Er,{useState as U3,useCallback as ks,useRef as rv,useEffect as G3}from"react";import{Group as Y3,Tooltip as z3,Box as av,ActionIcon as H3}from"@mantine/core";import{IconFileUpload as W3}from"@tabler/icons-react";import{useTranslation as V3}from"react-i18next";var Li={dropzone:"_dropzone_16zca_1",dragging:"_dragging_16zca_8",disabled:"_disabled_16zca_12"};var q3=["image/jpeg","image/png","image/webp"],Ud=({onFilesAdd:e,disabled:t,uploadFormats:n=q3})=>{let[a,o]=U3(!1),s=rv(null),l=rv(null),{t:d}=V3();G3(()=>{let R=I=>{if(!t&&I.clipboardData&&I.clipboardData.items){let A=Array.from(I.clipboardData.items).map(D=>D.getAsFile()).filter(yi);A.length>0&&(I.preventDefault(),I.stopPropagation(),e(A))}};return document.addEventListener("paste",R),()=>{document.removeEventListener("paste",R)}},[e,t]);let u=ks(R=>{R.preventDefault(),R.stopPropagation(),o(!0)},[]),p=ks(R=>{R.preventDefault(),R.stopPropagation(),o(!1)},[]),E=ks(R=>{if(R.preventDefault(),R.stopPropagation(),o(!1),t)return;let I=R.dataTransfer.files&&R.dataTransfer.files.length>0?Array.from(R.dataTransfer.files).filter(A=>A.size>0):[];e(I)},[e]),h=ks(R=>{if(R.target.files&&R.target.files.length>0){let I=Array.from(R.target.files).filter(A=>A.size>0);I.length&&e(I),l.current&&(l.current.value="")}},[e]),C=()=>{t||l.current?.click()};return Er.createElement(Er.Fragment,null,Er.createElement(av,{ref:s,className:`drop-zone ${Li.dropzone} ${a?Li.dragging:""} ${t?Li.disabled:""}`,onDragOver:u,onDragLeave:p,onDrop:E,onClick:C},Er.createElement(Y3,{justify:"start",className:"drop-zone-control",gap:"xs"},Er.createElement(z3,{label:d("Click or drop an image/document here to upload"),position:"top"},Er.createElement(H3,{variant:"default",size:"lg"},Er.createElement(W3,{size:"24"}))),Er.createElement(av,{hiddenFrom:"xs",pe:"sm"},d("Upload File")),Er.createElement("input",{ref:l,type:"file",multiple:!0,accept:n?.join(","),onChange:h,className:Li.fileInput,style:{display:"none"},disabled:t}))))};import Ps from"react";import{Text as Q3}from"@mantine/core";import{IconFileUpload as $3}from"@tabler/icons-react";var Gd={overlay:"_overlay_vjudp_1",content:"_content_vjudp_16"};import{useTranslation as X3}from"react-i18next";var f9=({visible:e,message:t,onDragOver:n,onDragLeave:a,onDrop:o})=>{let{t:s}=X3();return e?Ps.createElement("div",{className:Gd.overlay,onDragOver:n,onDragLeave:a,onDrop:o},Ps.createElement("div",{className:Gd.content},Ps.createElement($3,{size:48,color:"var(--mantine-color-blue-4)"}),Ps.createElement(Q3,{size:"lg",fw:500,c:"blue.4"},t||s("Drop files here to upload")))):null};import{useTranslation as sP}from"react-i18next";var zt={chatControlsContainer:"_chatControlsContainer_sg9gr_1",chatInputContainer:"_chatInputContainer_sg9gr_4",chatInputGroup:"_chatInputGroup_sg9gr_7",chatInput:"_chatInput_sg9gr_4",hidden:"_hidden_sg9gr_22",promptMode:"_promptMode_sg9gr_34",promptModeText:"_promptModeText_sg9gr_41",promptFadeInUp:"_promptFadeInUp_sg9gr_1",promptShimmer:"_promptShimmer_sg9gr_1",headerRow:"_headerRow_sg9gr_71",documentsInput:"_documentsInput_sg9gr_89",columned:"_columned_sg9gr_95",imagesList:"_imagesList_sg9gr_103",previewImage:"_previewImage_sg9gr_108",removeButton:"_removeButton_sg9gr_120"};var P9=K3(({loadCompleted:e=!1,disabled:t=!1,promptMode:n=!1,promptText:a,uploadAllowed:o=!0,streaming:s,setSending:l,previousMessages:d=[],header:u,inputPlugins:p,uploadFormats:E,maxUploadFileSize:h=64*1024*1024,maxImagesCount:C=0,onSendMessage:R,onStopRequest:I,onDocumentsUpload:A},D)=>{let[k,F]=Bs([]),[Y,W]=Bs(""),[G,q]=Bs(0),[Z,V]=Bs(!1),ie=j3(null),{t:ae}=sP();Z3(D,()=>({handleAddFiles:Q=>Ce(Q)})),iv(()=>{ie.current?.focus()},[e,t]),iv(()=>{q(d?.length?d.length:0)},[e,d]);let oe=async()=>{if(!(!Y?.trim()&&!k.length)){l(!0);try{W(""),F([]),await R(Y,k)}catch(Q){La.show({title:"Error",message:Q instanceof Error?Q.message:ae("Failed to send message"),color:"red"})}finally{l(!1)}}},le=Yd(Q=>{let J=!Y?.trim();if(Q.key==="Enter"&&!Q.shiftKey&&!Q.altKey)Q.preventDefault(),oe(),V(!1);else if(Q.key==="ArrowUp"&&(J||Z)){let re=Math.max(0,G-1);W(d[re]),q(re),V(!0)}else if(Q.key==="ArrowDown"&&(J||Z)){let re=Math.min(d.length-1,G+1);W(d[re]),q(re),V(!0)}else V(!1)},[oe,Y,d,G,Z]),ye=Yd(Q=>{W(Q.currentTarget.value)},[]),Se=J3(()=>t||s||!Y?.trim()&&!k.length,[Y,k,s,t]),Ce=Yd(Q=>{let J=Q.filter(me=>me.size<h);J.length<Q.length&&La.show({title:ae("Warning"),message:ae("Some files are too large and were not added (max size: {{size}} MB)",{size:h/(1024*1024)}),color:"yellow"});let re=J.filter(me=>me.type?.startsWith("image/")),de=J.filter(me=>!me.type?.startsWith("image/"));re.length&&C<=0&&(La.show({title:ae("Warning"),message:ae("Image uploads are not allowed in this chat."),color:"yellow"}),re=[]),re.length+k.length>C&&(La.show({title:ae("Warning"),message:ae("You can only add up to {{count}} images at a time",{count:C}),color:"yellow"}),re=re.slice(0,C-k.length)),re.length&&Promise.all(re.map(me=>new Promise((be,Ye)=>{let we=new FileReader;we.onload=Ue=>{if(Ue.target?.result){let lt=Ue.target.result,qe=new Image;qe.src=lt,qe.onload=()=>be({fileName:me.name,mimeType:me.type,bytesBase64:lt,width:qe.width,height:qe.height}),qe.onerror=Je=>Ye(Je)}else Ye(new Error(ae("Failed to read file: {{fileName}}",{fileName:me.name})))},we.onerror=Ue=>{Ye(new Error(ae("Failed to read file: {{fileName}}, error: {{error}}",{fileName:me.name,error:Ue})))},we.readAsDataURL(me)}))).then(me=>{F(be=>[...be,...me])}).catch(me=>{La.show({title:ae("Error"),message:me.message||ae("Failed to read image files"),color:"red"})}),de.length&&A?A(de):de.length&&La.show({title:ae("Warning"),message:ae("Document upload is not available in this chat."),color:"orange"})},[k,A,C,h]),z=Q=>J=>{J.stopPropagation(),F(re=>re.filter(de=>de.fileName!==Q))};return it.createElement("div",{className:[zt.chatControlsContainer,n?zt.promptMode:"",e?"":zt.hidden].join(" ")},n?it.createElement(tP,{align:"center",justify:"center",gap:"md",mb:"lg"},it.createElement(zd,{c:"dimmed",size:"lg",ta:"center",className:zt.promptModeText},a||ae("Start the conversation by sending a message"))):null,it.createElement("div",{className:zt.chatControls},u&&it.createElement(sv,{align:"center",gap:"xs",className:zt.headerRow},u),it.createElement("div",{className:[zt.chatInputContainer,k.length?zt.columned:""].join(" ")},o&&it.createElement("div",{className:zt.documentsInput},it.createElement(sv,{visibleFrom:"xs",gap:"xs"},it.createElement(Ud,{onFilesAdd:Ce,uploadFormats:E}),p),k?.length>0&&it.createElement("div",{className:zt.imagesList},k.map((Q,J)=>it.createElement("div",{key:Q.fileName,className:zt.previewImage},it.createElement("img",{src:Q.bytesBase64,alt:Q.fileName}),it.createElement(lv,{className:zt.removeButton,color:"red.9",size:"xs",onClick:z(Q.fileName)},it.createElement(oP,{size:16})))))),it.createElement("div",{className:zt.chatInputGroup},o&&it.createElement(Hd,{shadow:"md",width:"content"},it.createElement(Hd.Target,null,it.createElement(lv,{size:"lg",variant:"subtle",hiddenFrom:"xs"},it.createElement(nP,{label:ae("More..."),position:"right",withArrow:!0},it.createElement(rP,{size:"24"})))),it.createElement(Hd.Dropdown,null,it.createElement(Ud,{onFilesAdd:Ce,uploadFormats:E}),p)),it.createElement(eP,{ref:ie,className:zt.chatInput,placeholder:ae("Type your message..."),value:Y||"",autosize:!0,minRows:1,maxRows:7,onChange:ye,onKeyDown:le,disabled:t}),I&&s?it.createElement(ov,{onClick:I,disabled:t},it.createElement(aP,{size:24})," ",it.createElement(zd,{visibleFrom:"md"},ae("Stop"))):it.createElement(ov,{onClick:oe,disabled:Se,className:I&&s?zt.hidden:"",radius:"md"},it.createElement(iP,{size:24})," ",it.createElement(zd,{visibleFrom:"md",ml:"xs"},ae("Send")))))))});import Sr,{useCallback as ki,useRef as RP,useState as qd}from"react";import{Stack as IP}from"@mantine/core";import{notifications as Qd}from"@mantine/notifications";import{useTranslation as AP}from"react-i18next";import En,{useEffect as gP,useCallback as Ev}from"react";import{Image as EP,Text as Fs,Group as Sv,Stack as SP,ActionIcon as fP,Tooltip as hP,Drawer as bP}from"@mantine/core";import{useDisclosure as TP}from"@mantine/hooks";import{IconExternalLink as CP}from"@tabler/icons-react";var pv=uc(mc(),1);import mv from"i18next";import{initReactI18next as _P}from"react-i18next";import mP from"i18next-browser-languagedetector";var cv={AI:"AI","Are you sure you want to delete this item? This action cannot be undone.":"Are you sure you want to delete this item? This action cannot be undone.",Cancel:"Cancel",Cancelled:"Cancelled","Click or drop an image/document here to upload":"Click or drop an image/document here to upload","Code block is empty":"Code block is empty","Code Interpreter":"Code Interpreter",Completed:"Completed","Confirm Deletion":"Confirm Deletion",Copy:"Copy","Copy CSV":"Copy CSV","Copy message":"Copy message",Delete:"Delete",Details:"Details","Document upload is not available in this chat.":"Document upload is not available in this chat.",Download:"Download","Download CSV":"Download CSV","Drop files here to upload":"Drop files here to upload",Error:"Error","Failed to copy message":"Failed to copy message","Failed to read file: {{fileName}}":"Failed to read file: {{fileName}}","Failed to read file: {{fileName}}, error: {{error}}":"Failed to read file: {{fileName}}, error: {{error}}","Failed to read image files":"Failed to read image files","Failed to send message":"Failed to send message","Image Preview":"Image Preview","Image uploads are not allowed in this chat.":"Image uploads are not allowed in this chat.","In Progress":"In Progress",language:{de:"Deutsch",en:"English",label:"Language",ru:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439",zh:"\u4E2D\u6587"},"Language is not specified for this code block":"Language is not specified for this code block",Main:"Main","More...":"More...","Open image source":"Open image source",Others:"Others","RAG Search":"RAG Search",Reasoning:"Reasoning",Send:"Send","Some files are too large and were not added (max size: {{size}} MB)":"Some files are too large and were not added (max size: {{size}} MB)",source:"source","Start the conversation by sending a message":"Start the conversation by sending a message",Started:"Started",Stop:"Stop","Tool Call":"Tool Call","Tool Call Completed":"Tool Call Completed","Type your message...":"Type your message...","Upload File":"Upload File",Warning:"Warning","Web Search":"Web Search",You:"You","You can only add up to {{count}} images at a time":"You can only add up to {{count}} images at a time"};var dv={AI:"KI","Are you sure you want to delete this item? This action cannot be undone.":"M\xF6chten Sie dieses Element wirklich l\xF6schen? Diese Aktion kann nicht r\xFCckg\xE4ngig gemacht werden.",Cancel:"Abbrechen",Cancelled:"Abgebrochen","Click or drop an image/document here to upload":"Klicken oder Bild/Dokument hierher ziehen zum Hochladen","Code block is empty":"Codeblock ist leer","Code Interpreter":"Code-Interpreter",Completed:"Abgeschlossen","Confirm Deletion":"L\xF6schen best\xE4tigen",Copy:"Kopieren","Copy CSV":"CSV kopieren","Copy message":"Nachricht kopieren",Delete:"L\xF6schen",Details:"Details","Document upload is not available in this chat.":"Dokumenten-Upload ist in diesem Chat nicht verf\xFCgbar.",Download:"Herunterladen","Download CSV":"CSV herunterladen","Drop files here to upload":"Dateien zum Hochladen hier ablegen",Error:"Fehler","Failed to copy message":"Nachricht konnte nicht kopiert werden","Failed to read file: {{fileName}}":"Datei konnte nicht gelesen werden: {{fileName}}","Failed to read file: {{fileName}}, error: {{error}}":"Datei konnte nicht gelesen werden: {{fileName}}, Fehler: {{error}}","Failed to read image files":"Bilddateien konnten nicht gelesen werden","Failed to send message":"Nachricht konnte nicht gesendet werden","Image Preview":"Bildvorschau","Image uploads are not allowed in this chat.":"Bild-Uploads sind in diesem Chat nicht erlaubt.","In Progress":"In Bearbeitung",language:{de:"Deutsch",en:"English",label:"Sprache",ru:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439",zh:"\u4E2D\u6587"},"Language is not specified for this code block":"F\xFCr diesen Codeblock ist keine Sprache angegeben",Main:"Haupt","More...":"Mehr...","Open image source":"Bildquelle \xF6ffnen",Others:"Andere","RAG Search":"RAG-Suche",Reasoning:"Argumentation",Send:"Senden","Some files are too large and were not added (max size: {{size}} MB)":"Einige Dateien sind zu gro\xDF und wurden nicht hinzugef\xFCgt (max. Gr\xF6\xDFe: {{size}} MB)",source:"Quelle","Start the conversation by sending a message":"Beginnen Sie das Gespr\xE4ch, indem Sie eine Nachricht senden",Started:"Gestartet",Stop:"Stopp","Tool Call":"Tool-Aufruf","Tool Call Completed":"Tool-Aufruf abgeschlossen","Type your message...":"Nachricht eingeben...","Upload File":"Datei hochladen",Warning:"Warnung","Web Search":"Websuche",You:"Sie","You can only add up to {{count}} images at a time":"Sie k\xF6nnen nur bis zu {{count}} Bilder gleichzeitig hinzuf\xFCgen"};var uv={AI:"\u0418\u0418","Are you sure you want to delete this item? This action cannot be undone.":"\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u044D\u0442\u043E\u0442 \u044D\u043B\u0435\u043C\u0435\u043D\u0442? \u042D\u0442\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043D\u0435\u043B\u044C\u0437\u044F \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C.",Cancel:"\u041E\u0442\u043C\u0435\u043D\u0430",Cancelled:"\u041E\u0442\u043C\u0435\u043D\u0435\u043D\u043E","Click or drop an image/document here to upload":"\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435/\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442 \u0441\u044E\u0434\u0430 \u0434\u043B\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438","Code block is empty":"\u0411\u043B\u043E\u043A \u043A\u043E\u0434\u0430 \u043F\u0443\u0441\u0442","Code Interpreter":"\u0418\u043D\u0442\u0435\u0440\u043F\u0440\u0435\u0442\u0430\u0442\u043E\u0440 \u043A\u043E\u0434\u0430",Completed:"\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E","Confirm Deletion":"\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435",Copy:"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C","Copy CSV":"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C CSV","Copy message":"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435",Delete:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C",Details:"\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438","Document upload is not available in this chat.":"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0432 \u044D\u0442\u043E\u043C \u0447\u0430\u0442\u0435.",Download:"\u0421\u043A\u0430\u0447\u0430\u0442\u044C","Download CSV":"\u0421\u043A\u0430\u0447\u0430\u0442\u044C CSV","Drop files here to upload":"\u041F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B \u0441\u044E\u0434\u0430 \u0434\u043B\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438",Error:"\u041E\u0448\u0438\u0431\u043A\u0430","Failed to copy message":"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435","Failed to read file: {{fileName}}":"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044C \u0444\u0430\u0439\u043B: {{fileName}}","Failed to read file: {{fileName}}, error: {{error}}":"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044C \u0444\u0430\u0439\u043B: {{fileName}}, \u043E\u0448\u0438\u0431\u043A\u0430: {{error}}","Failed to read image files":"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044C \u0444\u0430\u0439\u043B\u044B \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439","Failed to send message":"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435","Image Preview":"\u041F\u0440\u0435\u0434\u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F","Image uploads are not allowed in this chat.":"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439 \u0432 \u044D\u0442\u043E\u043C \u0447\u0430\u0442\u0435 \u0437\u0430\u043F\u0440\u0435\u0449\u0435\u043D\u0430.","In Progress":"\u0412 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0435",language:{de:"Deutsch",en:"English",label:"\u042F\u0437\u044B\u043A",ru:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439",zh:"\u4E2D\u6587"},"Language is not specified for this code block":"\u042F\u0437\u044B\u043A \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0431\u043B\u043E\u043A\u0430 \u043A\u043E\u0434\u0430",Main:"\u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439","More...":"\u0415\u0449\u0451...","Open image source":"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F",Others:"\u0414\u0440\u0443\u0433\u0438\u0435","RAG Search":"RAG-\u043F\u043E\u0438\u0441\u043A",Reasoning:"\u0420\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435",Send:"\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C","Some files are too large and were not added (max size: {{size}} MB)":"\u041D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0444\u0430\u0439\u043B\u044B \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u0438\u0435 \u0438 \u043D\u0435 \u0431\u044B\u043B\u0438 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B (\u043C\u0430\u043A\u0441. \u0440\u0430\u0437\u043C\u0435\u0440: {{size}} \u041C\u0411)",source:"\u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A","Start the conversation by sending a message":"\u041D\u0430\u0447\u043D\u0438\u0442\u0435 \u0434\u0438\u0430\u043B\u043E\u0433, \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0432 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435",Started:"\u041D\u0430\u0447\u0430\u0442\u043E",Stop:"\u0421\u0442\u043E\u043F","Tool Call":"\u0412\u044B\u0437\u043E\u0432 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0430","Tool Call Completed":"\u0412\u044B\u0437\u043E\u0432 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043D","Type your message...":"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435...","Upload File":"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0444\u0430\u0439\u043B",Warning:"\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435","Web Search":"\u0412\u0435\u0431-\u043F\u043E\u0438\u0441\u043A",You:"\u0412\u044B","You can only add up to {{count}} images at a time":"\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u0435 \u0431\u043E\u043B\u0435\u0435 {{count}} \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439 \u0437\u0430 \u0440\u0430\u0437"};var _v={AI:"AI","Are you sure you want to delete this item? This action cannot be undone.":"\u60A8\u786E\u5B9A\u8981\u5220\u9664\u6B64\u9879\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u6D88\u3002",Cancel:"\u53D6\u6D88",Cancelled:"\u5DF2\u53D6\u6D88","Click or drop an image/document here to upload":"\u70B9\u51FB\u6216\u62D6\u653E\u56FE\u7247/\u6587\u6863\u5230\u6B64\u5904\u4E0A\u4F20","Code block is empty":"\u4EE3\u7801\u5757\u4E3A\u7A7A","Code Interpreter":"\u4EE3\u7801\u89E3\u91CA\u5668",Completed:"\u5DF2\u5B8C\u6210","Confirm Deletion":"\u786E\u8BA4\u5220\u9664",Copy:"\u590D\u5236","Copy CSV":"\u590D\u5236 CSV","Copy message":"\u590D\u5236\u6D88\u606F",Delete:"\u5220\u9664",Details:"\u8BE6\u60C5","Document upload is not available in this chat.":"\u6B64\u804A\u5929\u4E0D\u652F\u6301\u6587\u6863\u4E0A\u4F20\u3002",Download:"\u4E0B\u8F7D","Download CSV":"\u4E0B\u8F7D CSV","Drop files here to upload":"\u5C06\u6587\u4EF6\u62D6\u653E\u5230\u6B64\u5904\u4E0A\u4F20",Error:"\u9519\u8BEF","Failed to copy message":"\u590D\u5236\u6D88\u606F\u5931\u8D25","Failed to read file: {{fileName}}":"\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25\uFF1A{{fileName}}","Failed to read file: {{fileName}}, error: {{error}}":"\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25\uFF1A{{fileName}}\uFF0C\u9519\u8BEF\uFF1A{{error}}","Failed to read image files":"\u8BFB\u53D6\u56FE\u7247\u6587\u4EF6\u5931\u8D25","Failed to send message":"\u53D1\u9001\u6D88\u606F\u5931\u8D25","Image Preview":"\u56FE\u7247\u9884\u89C8","Image uploads are not allowed in this chat.":"\u6B64\u804A\u5929\u4E0D\u5141\u8BB8\u4E0A\u4F20\u56FE\u7247\u3002","In Progress":"\u8FDB\u884C\u4E2D",language:{de:"Deutsch",en:"English",label:"\u8BED\u8A00",ru:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439",zh:"\u4E2D\u6587"},"Language is not specified for this code block":"\u6B64\u4EE3\u7801\u5757\u672A\u6307\u5B9A\u8BED\u8A00",Main:"\u4E3B\u8981","More...":"\u66F4\u591A...","Open image source":"\u6253\u5F00\u56FE\u7247\u6765\u6E90",Others:"\u5176\u4ED6","RAG Search":"RAG \u641C\u7D22",Reasoning:"\u63A8\u7406",Send:"\u53D1\u9001","Some files are too large and were not added (max size: {{size}} MB)":"\u90E8\u5206\u6587\u4EF6\u8FC7\u5927\uFF0C\u672A\u88AB\u6DFB\u52A0\uFF08\u6700\u5927\uFF1A{{size}} MB\uFF09",source:"\u6765\u6E90","Start the conversation by sending a message":"\u53D1\u9001\u6D88\u606F\u5F00\u59CB\u5BF9\u8BDD",Started:"\u5DF2\u5F00\u59CB",Stop:"\u505C\u6B62","Tool Call":"\u5DE5\u5177\u8C03\u7528","Tool Call Completed":"\u5DE5\u5177\u8C03\u7528\u5B8C\u6210","Type your message...":"\u8F93\u5165\u6D88\u606F...","Upload File":"\u4E0A\u4F20\u6587\u4EF6",Warning:"\u8B66\u544A","Web Search":"\u7F51\u7EDC\u641C\u7D22",You:"\u4F60","You can only add up to {{count}} images at a time":"\u4E00\u6B21\u6700\u591A\u53EA\u80FD\u6DFB\u52A0 {{count}} \u5F20\u56FE\u7247"};var Wd=["en","de","ru","zh"],Vd="ui-language";function pP(e={}){return(0,pv.merge)({en:{translation:cv},de:{translation:dv},ru:{translation:uv},zh:{translation:_v}},e)}async function J9({lookupLocalStorage:e=Vd,supportedLngs:t=Wd,fallbackLng:n="en",resources:a={}}={}){return mv.use(mP).use(_P).init({resources:pP(a),fallbackLng:n,supportedLngs:t,interpolation:{escapeValue:!1},detection:{order:["localStorage","navigator","htmlTag"],lookupLocalStorage:e,caches:["localStorage"]}})}function gv(e){return(typeof e=="string"?new Date(e):e).toLocaleDateString(mv.language||"ru-RU",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}import{useTranslation as vP}from"react-i18next";var fv=({fileName:e,fileUrl:t,mimeType:n,createdAt:a,onOpenSource:o,sourceTitle:s,onClose:l})=>{let[d,{open:u,close:p}]=TP(!1);gP(()=>{t&&u()},[t,u]);let E=Ev(()=>{l(),p()},[l,p]),h=Ev(()=>{o?.(),E()},[o,E]),{t:C}=vP();return En.createElement(bP,{size:"xl",opened:d,onClose:E,title:C("Image Preview")},t&&En.createElement(SP,{gap:"md"},En.createElement(EP,{src:t,alt:e,fit:"contain",mah:"70vh"}),En.createElement(Sv,{justify:"space-between"},En.createElement("div",null,En.createElement(Fs,{size:"sm",fw:500},e),En.createElement(Fs,{size:"xs",c:"dimmed"},a?gv(a)+" \u2022":""," ",n)),o&&En.createElement(Sv,{gap:"xs"},En.createElement(hP,{label:C("Open image source")},En.createElement(fP,{variant:"light",onClick:h},En.createElement(CP,{size:16}))))),o&&En.createElement(Fs,{size:"sm",c:"dimmed"},"From:"," ",En.createElement(Fs,{span:!0,c:"blue",style:{cursor:"pointer"},onClick:h},s||C("source")))))};var hv=e=>[...Array.from(e.tHead?.querySelectorAll("tr")??[]),...Array.from(e.tBodies[0]?.querySelectorAll("tr")??[])].map(n=>Array.from(n.querySelectorAll("th, td")).map(a=>`"${(a.textContent||"").replace(/"/g,'""')}"`).join(",")).join(`
450
+ </div>`:"";mt.innerHTML=Se.replaceAll("<LANG>",et).replace("<EXECUTE_BTN>",St).replace("<DOWNLOAD_TITLE>",Ce).replace("<COPY_TITLE>",z),We.appendChild(mt),ve.parentNode?.insertBefore(We,ve),We.appendChild(ve)}}),G.current.querySelectorAll("img").forEach(ve=>{if(!ve?.classList?.contains("message-image")){ve.classList.add("message-image");let mt=ve.src.split("/").pop()||"";ve.setAttribute("data-file-name",mt)}}),G.current.querySelectorAll("table").forEach(ve=>{if(!ve?.classList?.contains("message-table")){if(ve.classList.add("message-table"),!ve.tFoot){let et=document.createElement("tfoot");ve.appendChild(et);let We=document.createElement("tr");We.className="table-controls-row",et.appendChild(We);let Te=document.createElement("th");Te.classList.add("table-controls"),Te.colSpan=ve.querySelectorAll("th").length||1,We.appendChild(Te)}let mt=ve.querySelector("tfoot tr .table-controls");mt.innerHTML=re.replace("<COPY_CSV_TITLE>",Q).replace("<DOWNLOAD_CSV_TITLE>",J);let je=0;ve.querySelectorAll("th").forEach(et=>{et.classList.contains("table-controls")||(et.classList.add("table-sort-btn"),et.setAttribute("data-col-index",String(je++)))})}}))},Di+10),[Ce,z,Q,J,u]);$C(()=>{if(!k&&G.current){let ve=new MutationObserver(de);return ve.observe(G.current,{childList:!0,subtree:!0}),de(),()=>ve.disconnect()}},[p,k,de]);let me=pr(()=>l?l(t):null,[l,t]),be=pr(()=>{let ve=s?s(t,{isLast:a}):null,mt=d?.find(je=>je.modelId===t?.modelId);return xe.createElement(xe.Fragment,null,xe.createElement(Ms,{align:"center",p:"0"},xe.createElement(Ms,{gap:"sm",wrap:"nowrap",p:"0"},xe.createElement(C3,{color:"gray",radius:"xl",size:"md",src:le?t?.user?.avatarUrl:void 0},le?xe.createElement(N3,null):mt?xe.createElement(wi,{apiProvider:mt.apiProvider,provider:mt.provider}):xe.createElement(KC,null)),xe.createElement(Pd,{size:"sm",fw:500,c:le?"blue":"teal"},ye),xe.createElement(Pd,{size:"sm",c:"dimmed"},oe)),xe.createElement(Ms,{p:"0"},Y&&xe.createElement(Bo,{status:Y}),W&&Y!=="reasoning"&&xe.createElement(Pd,{size:"sm",c:"dimmed"},W))),xe.createElement(Ls,{className:["katechat-message-content",k?"streaming":""].join(" ")},xe.createElement(xi,{status:Y,content:R,statusInfo:W,streaming:k}),I?I.map((je,et)=>xe.createElement("div",{key:et,dangerouslySetInnerHTML:{__html:je}})):xe.createElement("div",null,R),xe.createElement(Ls,{className:"katechat-message-footer"},xe.createElement(Fo,{messageId:E,messageIndex:n}),me&&xe.createElement(ws,{messageId:E,messageIndex:n}),ve),me&&xe.createElement(Ls,{className:"katechat-message-content-details"},me)))},[p,ye,oe,R,I,E,h,C,d,n,q,me,k,ae.language]),[Ye,we]=xe.useState(0),[Ue,lt]=xe.useState("idle"),[qe,Je]=xe.useState(!1);$C(()=>{if(!F||F.length===0)return;let ve=F.findIndex(mt=>mt.streaming);ve>=0&&we(ve)},[F]);let Bt=pr(()=>!F||F.length===0?[]:F.map(ve=>xe.createElement(Fd,{key:ve.id,message:ve,parentIndex:n,index:Ye,models:d,plugins:s?.(ve),messageDetailsLoader:l})),[F,d,n,ae.language]),yt=pr(()=>{if(!F||F.length===0)return null;let ve=F.length,mt=We=>{We.stopPropagation(),!qe&&(Je(!0),lt("exit-right"),setTimeout(()=>{we(Te=>(Te-1+ve)%ve),lt("enter-left"),setTimeout(()=>{lt("idle"),Je(!1)},Di)},Di))},je=We=>{We.stopPropagation(),!qe&&(Je(!0),lt("exit-left"),setTimeout(()=>{we(Te=>(Te+1)%ve),lt("enter-right"),setTimeout(()=>{lt("idle"),Je(!1)},Di)},Di))},et=Bt[Ye];return xe.createElement("div",{className:"katechat-message-carousel"},xe.createElement("div",{className:"message-carousel-header"},xe.createElement("div",{className:"message-carousel-controls"},ve>1&&xe.createElement(xe.Fragment,null,xe.createElement(XC,{onClick:mt,"aria-label":"Previous",radius:"xl",variant:"light"},xe.createElement(I3,null)),xe.createElement(XC,{onClick:je,"aria-label":"Next",radius:"xl",variant:"light"},xe.createElement(A3,null))))),xe.createElement("div",{className:`carousel-message-content animation-${Ue}`},et),ve>1&&xe.createElement(Ms,{className:"carousel-model-icons"},F.map((We,Te)=>{let St=d?.find(wt=>wt.modelId===We.modelId),he=Te===Ye;return xe.createElement(R3,{key:We.id,label:St?.name||ie("AI"),position:"top"},xe.createElement(Ls,{key:We.id,c:he?void 0:"dimmed",onClick:()=>we(Te)},St?xe.createElement(wi,{apiProvider:St.apiProvider,provider:St.provider,size:20}):xe.createElement(KC,{size:20})))})))},[Bt,ae.language,Ye,Ue,qe]);return yt?xe.createElement("div",{id:`message-${t.id}`,"data-message-id":t.id,className:["katechat-message",`katechat-message__${p||""}`].join(" "),ref:G},xe.createElement("div",{className:"katechat-message-linked-toggle"},xe.createElement(v3,{checked:Z,onChange:ve=>V(ve.currentTarget.checked),label:ie(Z?"Main":"Others"),size:"sm"})),xe.createElement("div",{className:["katechat-message-main",Z?"":"hidden"].join(" ")},be),xe.createElement("div",{className:["katechat-message-linked",Z?"hidden":""].join(" ")},yt)):xe.createElement("div",{id:`message-${t.id}`,"data-message-id":t.id,className:["katechat-message",`katechat-message__${p||""}`].join(" "),ref:G},xe.createElement("div",{className:"katechat-message-main"},be))});Bd.displayName="ChatMessage";import Mi from"react";import{ScrollArea as O3}from"@mantine/core";var NU=({html:e,text:t})=>Mi.createElement(O3,{type:"hover",offsetScrollbars:!0,className:["katechat-message-content","katechat-message-preview"].join(" ")},t?Mi.createElement(Mi.Fragment,null,e?e.map((n,a)=>Mi.createElement("div",{key:a,dangerouslySetInnerHTML:{__html:n}})):Mi.createElement("div",null,t)):"...");import Pt,{useMemo as jC}from"react";import{Text as ev,Group as tv,Avatar as B3,Box as nv}from"@mantine/core";import{IconRobot as F3}from"@tabler/icons-react";import gr from"react";import{IconBrandOpenai as x3,IconBrandAws as JC,IconBrandYandex as D3,IconMessageChatbot as w3,IconAi as M3,IconBrandMeta as L3,IconBrandMedium as k3,IconBrandGoogle as P3}from"@tabler/icons-react";var wi=({apiProvider:e,provider:t,size:n=24})=>{switch(e){case"OPEN_AI":return gr.createElement(x3,{size:n});case"AWS_BEDROCK":switch(t?.toLowerCase()){case"amazon":return gr.createElement(JC,{size:n});case"anthropic":return gr.createElement(M3,{size:n});case"mistral ai":return gr.createElement(k3,{size:n});case"meta":return gr.createElement(L3,{size:n});default:return gr.createElement(JC,{size:n})}case"YANDEX_AI":return gr.createElement(D3,{size:n});case"GOOGLE_VERTEX_AI":return gr.createElement(P3,{size:n});default:return gr.createElement(w3,{size:n})}};var Fd=({message:e,parentIndex:t,index:n,plugins:a,models:o,messageDetailsLoader:s})=>{let l=jC(()=>o?.find(u=>u.modelId===e.modelId),[o,e.modelId]),d=jC(()=>s?.(e)||null,[s,e]);return Pt.createElement(nv,{key:e.id,"data-linked-message-id":e.id},Pt.createElement(tv,{align:"center",pt:"sm"},Pt.createElement(B3,{radius:"xl",size:"md"},l?Pt.createElement(wi,{apiProvider:l.apiProvider,provider:l.provider}):Pt.createElement(F3,null)),Pt.createElement(tv,{gap:"xs"},Pt.createElement(ev,{size:"sm",fw:500,c:"teal"},e.modelName),e.status&&Pt.createElement(Bo,{status:e.status}),e.statusInfo&&e.status!=="reasoning"&&Pt.createElement(ev,{size:"xs",c:"dimmed"},e.statusInfo))),Pt.createElement("div",{className:"katechat-message-content"},Pt.createElement(xi,{status:e.status,content:e.content,statusInfo:e.statusInfo,streaming:e.streaming||!1}),e.html?e.html.map((u,p)=>Pt.createElement("div",{key:p,dangerouslySetInnerHTML:{__html:u}})):Pt.createElement("div",null,e.content),Pt.createElement("div",{className:"katechat-message-footer"},Pt.createElement(Fo,{messageId:e.id,messageIndex:t,linkedMessageIndex:n}),d&&Pt.createElement(ws,{messageId:e.id,messageIndex:n,linkedMessageIndex:n}),a),d&&Pt.createElement(nv,{className:"katechat-message-content-details"},d)))};Fd.displayName="LinkedChatMessage";import it,{forwardRef as K3,useCallback as Yd,useEffect as iv,useImperativeHandle as Z3,useMemo as J3,useRef as j3,useState as Bs}from"react";import{Text as zd,Textarea as eP,Button as ov,Group as sv,ActionIcon as lv,Stack as tP,Tooltip as nP,Menu as Hd}from"@mantine/core";import{IconCirclePlus as rP,IconPlayerStopFilled as aP,IconSend as iP,IconX as oP}from"@tabler/icons-react";import{notifications as La}from"@mantine/notifications";import Er,{useState as U3,useCallback as ks,useRef as rv,useEffect as G3}from"react";import{Group as Y3,Tooltip as z3,Box as av,ActionIcon as H3}from"@mantine/core";import{IconFileUpload as W3}from"@tabler/icons-react";import{useTranslation as V3}from"react-i18next";var Li={dropzone:"_dropzone_16zca_1",dragging:"_dragging_16zca_8",disabled:"_disabled_16zca_12"};var q3=["image/jpeg","image/png","image/webp"],Ud=({onFilesAdd:e,disabled:t,uploadFormats:n=q3})=>{let[a,o]=U3(!1),s=rv(null),l=rv(null),{t:d}=V3();G3(()=>{let R=I=>{if(!t&&I.clipboardData&&I.clipboardData.items){let A=Array.from(I.clipboardData.items).map(D=>D.getAsFile()).filter(yi);A.length>0&&(I.preventDefault(),I.stopPropagation(),e(A))}};return document.addEventListener("paste",R),()=>{document.removeEventListener("paste",R)}},[e,t]);let u=ks(R=>{R.preventDefault(),R.stopPropagation(),o(!0)},[]),p=ks(R=>{R.preventDefault(),R.stopPropagation(),o(!1)},[]),E=ks(R=>{if(R.preventDefault(),R.stopPropagation(),o(!1),t)return;let I=R.dataTransfer.files&&R.dataTransfer.files.length>0?Array.from(R.dataTransfer.files).filter(A=>A.size>0):[];e(I)},[e]),h=ks(R=>{if(R.target.files&&R.target.files.length>0){let I=Array.from(R.target.files).filter(A=>A.size>0);I.length&&e(I),l.current&&(l.current.value="")}},[e]),C=()=>{t||l.current?.click()};return Er.createElement(Er.Fragment,null,Er.createElement(av,{ref:s,className:`drop-zone ${Li.dropzone} ${a?Li.dragging:""} ${t?Li.disabled:""}`,onDragOver:u,onDragLeave:p,onDrop:E,onClick:C},Er.createElement(Y3,{justify:"start",className:"drop-zone-control",gap:"xs"},Er.createElement(z3,{label:d("Click or drop an image/document here to upload"),position:"top"},Er.createElement(H3,{variant:"default",size:"lg"},Er.createElement(W3,{size:"24"}))),Er.createElement(av,{hiddenFrom:"xs",pe:"sm"},d("Upload File")),Er.createElement("input",{ref:l,type:"file",multiple:!0,accept:n?n.join(","):void 0,onChange:h,className:Li.fileInput,style:{display:"none"},disabled:t}))))};import Ps from"react";import{Text as Q3}from"@mantine/core";import{IconFileUpload as $3}from"@tabler/icons-react";var Gd={overlay:"_overlay_vjudp_1",content:"_content_vjudp_16"};import{useTranslation as X3}from"react-i18next";var f9=({visible:e,message:t,onDragOver:n,onDragLeave:a,onDrop:o})=>{let{t:s}=X3();return e?Ps.createElement("div",{className:Gd.overlay,onDragOver:n,onDragLeave:a,onDrop:o},Ps.createElement("div",{className:Gd.content},Ps.createElement($3,{size:48,color:"var(--mantine-color-blue-4)"}),Ps.createElement(Q3,{size:"lg",fw:500,c:"blue.4"},t||s("Drop files here to upload")))):null};import{useTranslation as sP}from"react-i18next";var zt={chatControlsContainer:"_chatControlsContainer_sg9gr_1",chatInputContainer:"_chatInputContainer_sg9gr_4",chatInputGroup:"_chatInputGroup_sg9gr_7",chatInput:"_chatInput_sg9gr_4",hidden:"_hidden_sg9gr_22",promptMode:"_promptMode_sg9gr_34",promptModeText:"_promptModeText_sg9gr_41",promptFadeInUp:"_promptFadeInUp_sg9gr_1",promptShimmer:"_promptShimmer_sg9gr_1",headerRow:"_headerRow_sg9gr_71",documentsInput:"_documentsInput_sg9gr_89",columned:"_columned_sg9gr_95",imagesList:"_imagesList_sg9gr_103",previewImage:"_previewImage_sg9gr_108",removeButton:"_removeButton_sg9gr_120"};var P9=K3(({loadCompleted:e=!1,disabled:t=!1,promptMode:n=!1,promptText:a,uploadAllowed:o=!0,streaming:s,setSending:l,previousMessages:d=[],header:u,inputPlugins:p,uploadFormats:E,maxUploadFileSize:h=64*1024*1024,maxImagesCount:C=0,onSendMessage:R,onStopRequest:I,onDocumentsUpload:A},D)=>{let[k,F]=Bs([]),[Y,W]=Bs(""),[G,q]=Bs(0),[Z,V]=Bs(!1),ie=j3(null),{t:ae}=sP();Z3(D,()=>({handleAddFiles:Q=>Ce(Q)})),iv(()=>{ie.current?.focus()},[e,t]),iv(()=>{q(d?.length?d.length:0)},[e,d]);let oe=async()=>{if(!(!Y?.trim()&&!k.length)){l(!0);try{W(""),F([]),await R(Y,k)}catch(Q){La.show({title:"Error",message:Q instanceof Error?Q.message:ae("Failed to send message"),color:"red"})}finally{l(!1)}}},le=Yd(Q=>{let J=!Y?.trim();if(Q.key==="Enter"&&!Q.shiftKey&&!Q.altKey)Q.preventDefault(),oe(),V(!1);else if(Q.key==="ArrowUp"&&(J||Z)){let re=Math.max(0,G-1);W(d[re]),q(re),V(!0)}else if(Q.key==="ArrowDown"&&(J||Z)){let re=Math.min(d.length-1,G+1);W(d[re]),q(re),V(!0)}else V(!1)},[oe,Y,d,G,Z]),ye=Yd(Q=>{W(Q.currentTarget.value)},[]),Se=J3(()=>t||s||!Y?.trim()&&!k.length,[Y,k,s,t]),Ce=Yd(Q=>{let J=Q.filter(me=>me.size<h);J.length<Q.length&&La.show({title:ae("Warning"),message:ae("Some files are too large and were not added (max size: {{size}} MB)",{size:h/(1024*1024)}),color:"yellow"});let re=J.filter(me=>me.type?.startsWith("image/")),de=J.filter(me=>!me.type?.startsWith("image/"));re.length&&C<=0&&(La.show({title:ae("Warning"),message:ae("Image uploads are not allowed in this chat."),color:"yellow"}),re=[]),re.length+k.length>C&&(La.show({title:ae("Warning"),message:ae("You can only add up to {{count}} images at a time",{count:C}),color:"yellow"}),re=re.slice(0,C-k.length)),re.length&&Promise.all(re.map(me=>new Promise((be,Ye)=>{let we=new FileReader;we.onload=Ue=>{if(Ue.target?.result){let lt=Ue.target.result,qe=new Image;qe.src=lt,qe.onload=()=>be({fileName:me.name,mimeType:me.type,bytesBase64:lt,width:qe.width,height:qe.height}),qe.onerror=Je=>Ye(Je)}else Ye(new Error(ae("Failed to read file: {{fileName}}",{fileName:me.name})))},we.onerror=Ue=>{Ye(new Error(ae("Failed to read file: {{fileName}}, error: {{error}}",{fileName:me.name,error:Ue})))},we.readAsDataURL(me)}))).then(me=>{F(be=>[...be,...me])}).catch(me=>{La.show({title:ae("Error"),message:me.message||ae("Failed to read image files"),color:"red"})}),de.length&&A?A(de):de.length&&La.show({title:ae("Warning"),message:ae("Document upload is not available in this chat."),color:"orange"})},[k,A,C,h]),z=Q=>J=>{J.stopPropagation(),F(re=>re.filter(de=>de.fileName!==Q))};return it.createElement("div",{className:[zt.chatControlsContainer,n?zt.promptMode:"",e?"":zt.hidden].join(" ")},n?it.createElement(tP,{align:"center",justify:"center",gap:"md",mb:"lg"},it.createElement(zd,{c:"dimmed",size:"lg",ta:"center",className:zt.promptModeText},a||ae("Start the conversation by sending a message"))):null,it.createElement("div",{className:zt.chatControls},u&&it.createElement(sv,{align:"center",gap:"xs",className:zt.headerRow},u),it.createElement("div",{className:[zt.chatInputContainer,k.length?zt.columned:""].join(" ")},o&&it.createElement("div",{className:zt.documentsInput},it.createElement(sv,{visibleFrom:"xs",gap:"xs"},it.createElement(Ud,{onFilesAdd:Ce,uploadFormats:E}),p),k?.length>0&&it.createElement("div",{className:zt.imagesList},k.map((Q,J)=>it.createElement("div",{key:Q.fileName,className:zt.previewImage},it.createElement("img",{src:Q.bytesBase64,alt:Q.fileName}),it.createElement(lv,{className:zt.removeButton,color:"red.9",size:"xs",onClick:z(Q.fileName)},it.createElement(oP,{size:16})))))),it.createElement("div",{className:zt.chatInputGroup},o&&it.createElement(Hd,{shadow:"md",width:"content"},it.createElement(Hd.Target,null,it.createElement(lv,{size:"lg",variant:"subtle",hiddenFrom:"xs"},it.createElement(nP,{label:ae("More..."),position:"right",withArrow:!0},it.createElement(rP,{size:"24"})))),it.createElement(Hd.Dropdown,null,it.createElement(Ud,{onFilesAdd:Ce,uploadFormats:E}),p)),it.createElement(eP,{ref:ie,className:zt.chatInput,placeholder:ae("Type your message..."),value:Y||"",autosize:!0,minRows:1,maxRows:7,onChange:ye,onKeyDown:le,disabled:t}),I&&s?it.createElement(ov,{onClick:I,disabled:t},it.createElement(aP,{size:24})," ",it.createElement(zd,{visibleFrom:"md"},ae("Stop"))):it.createElement(ov,{onClick:oe,disabled:Se,className:I&&s?zt.hidden:"",radius:"md"},it.createElement(iP,{size:24})," ",it.createElement(zd,{visibleFrom:"md",ml:"xs"},ae("Send")))))))});import Sr,{useCallback as ki,useRef as RP,useState as qd}from"react";import{Stack as IP}from"@mantine/core";import{notifications as Qd}from"@mantine/notifications";import{useTranslation as AP}from"react-i18next";import En,{useEffect as gP,useCallback as Ev}from"react";import{Image as EP,Text as Fs,Group as Sv,Stack as SP,ActionIcon as fP,Tooltip as hP,Drawer as bP}from"@mantine/core";import{useDisclosure as TP}from"@mantine/hooks";import{IconExternalLink as CP}from"@tabler/icons-react";var pv=uc(mc(),1);import mv from"i18next";import{initReactI18next as _P}from"react-i18next";import mP from"i18next-browser-languagedetector";var cv={AI:"AI","Are you sure you want to delete this item? This action cannot be undone.":"Are you sure you want to delete this item? This action cannot be undone.",Cancel:"Cancel",Cancelled:"Cancelled","Click or drop an image/document here to upload":"Click or drop an image/document here to upload","Code block is empty":"Code block is empty","Code Interpreter":"Code Interpreter",Completed:"Completed","Confirm Deletion":"Confirm Deletion",Copy:"Copy","Copy CSV":"Copy CSV","Copy message":"Copy message",Delete:"Delete",Details:"Details","Document upload is not available in this chat.":"Document upload is not available in this chat.",Download:"Download","Download CSV":"Download CSV","Drop files here to upload":"Drop files here to upload",Error:"Error","Failed to copy message":"Failed to copy message","Failed to read file: {{fileName}}":"Failed to read file: {{fileName}}","Failed to read file: {{fileName}}, error: {{error}}":"Failed to read file: {{fileName}}, error: {{error}}","Failed to read image files":"Failed to read image files","Failed to send message":"Failed to send message","Image Preview":"Image Preview","Image uploads are not allowed in this chat.":"Image uploads are not allowed in this chat.","In Progress":"In Progress",language:{de:"Deutsch",en:"English",label:"Language",ru:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439",zh:"\u4E2D\u6587"},"Language is not specified for this code block":"Language is not specified for this code block",Main:"Main","More...":"More...","Open image source":"Open image source",Others:"Others","RAG Search":"RAG Search",Reasoning:"Reasoning",Send:"Send","Some files are too large and were not added (max size: {{size}} MB)":"Some files are too large and were not added (max size: {{size}} MB)",source:"source","Start the conversation by sending a message":"Start the conversation by sending a message",Started:"Started",Stop:"Stop","Tool Call":"Tool Call","Tool Call Completed":"Tool Call Completed","Type your message...":"Type your message...","Upload File":"Upload File",Warning:"Warning","Web Search":"Web Search",You:"You","You can only add up to {{count}} images at a time":"You can only add up to {{count}} images at a time"};var dv={AI:"KI","Are you sure you want to delete this item? This action cannot be undone.":"M\xF6chten Sie dieses Element wirklich l\xF6schen? Diese Aktion kann nicht r\xFCckg\xE4ngig gemacht werden.",Cancel:"Abbrechen",Cancelled:"Abgebrochen","Click or drop an image/document here to upload":"Klicken oder Bild/Dokument hierher ziehen zum Hochladen","Code block is empty":"Codeblock ist leer","Code Interpreter":"Code-Interpreter",Completed:"Abgeschlossen","Confirm Deletion":"L\xF6schen best\xE4tigen",Copy:"Kopieren","Copy CSV":"CSV kopieren","Copy message":"Nachricht kopieren",Delete:"L\xF6schen",Details:"Details","Document upload is not available in this chat.":"Dokumenten-Upload ist in diesem Chat nicht verf\xFCgbar.",Download:"Herunterladen","Download CSV":"CSV herunterladen","Drop files here to upload":"Dateien zum Hochladen hier ablegen",Error:"Fehler","Failed to copy message":"Nachricht konnte nicht kopiert werden","Failed to read file: {{fileName}}":"Datei konnte nicht gelesen werden: {{fileName}}","Failed to read file: {{fileName}}, error: {{error}}":"Datei konnte nicht gelesen werden: {{fileName}}, Fehler: {{error}}","Failed to read image files":"Bilddateien konnten nicht gelesen werden","Failed to send message":"Nachricht konnte nicht gesendet werden","Image Preview":"Bildvorschau","Image uploads are not allowed in this chat.":"Bild-Uploads sind in diesem Chat nicht erlaubt.","In Progress":"In Bearbeitung",language:{de:"Deutsch",en:"English",label:"Sprache",ru:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439",zh:"\u4E2D\u6587"},"Language is not specified for this code block":"F\xFCr diesen Codeblock ist keine Sprache angegeben",Main:"Haupt","More...":"Mehr...","Open image source":"Bildquelle \xF6ffnen",Others:"Andere","RAG Search":"RAG-Suche",Reasoning:"Argumentation",Send:"Senden","Some files are too large and were not added (max size: {{size}} MB)":"Einige Dateien sind zu gro\xDF und wurden nicht hinzugef\xFCgt (max. Gr\xF6\xDFe: {{size}} MB)",source:"Quelle","Start the conversation by sending a message":"Beginnen Sie das Gespr\xE4ch, indem Sie eine Nachricht senden",Started:"Gestartet",Stop:"Stopp","Tool Call":"Tool-Aufruf","Tool Call Completed":"Tool-Aufruf abgeschlossen","Type your message...":"Nachricht eingeben...","Upload File":"Datei hochladen",Warning:"Warnung","Web Search":"Websuche",You:"Sie","You can only add up to {{count}} images at a time":"Sie k\xF6nnen nur bis zu {{count}} Bilder gleichzeitig hinzuf\xFCgen"};var uv={AI:"\u0418\u0418","Are you sure you want to delete this item? This action cannot be undone.":"\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u044D\u0442\u043E\u0442 \u044D\u043B\u0435\u043C\u0435\u043D\u0442? \u042D\u0442\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043D\u0435\u043B\u044C\u0437\u044F \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C.",Cancel:"\u041E\u0442\u043C\u0435\u043D\u0430",Cancelled:"\u041E\u0442\u043C\u0435\u043D\u0435\u043D\u043E","Click or drop an image/document here to upload":"\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435/\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442 \u0441\u044E\u0434\u0430 \u0434\u043B\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438","Code block is empty":"\u0411\u043B\u043E\u043A \u043A\u043E\u0434\u0430 \u043F\u0443\u0441\u0442","Code Interpreter":"\u0418\u043D\u0442\u0435\u0440\u043F\u0440\u0435\u0442\u0430\u0442\u043E\u0440 \u043A\u043E\u0434\u0430",Completed:"\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E","Confirm Deletion":"\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435",Copy:"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C","Copy CSV":"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C CSV","Copy message":"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435",Delete:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C",Details:"\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438","Document upload is not available in this chat.":"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0432 \u044D\u0442\u043E\u043C \u0447\u0430\u0442\u0435.",Download:"\u0421\u043A\u0430\u0447\u0430\u0442\u044C","Download CSV":"\u0421\u043A\u0430\u0447\u0430\u0442\u044C CSV","Drop files here to upload":"\u041F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B \u0441\u044E\u0434\u0430 \u0434\u043B\u044F \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438",Error:"\u041E\u0448\u0438\u0431\u043A\u0430","Failed to copy message":"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435","Failed to read file: {{fileName}}":"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044C \u0444\u0430\u0439\u043B: {{fileName}}","Failed to read file: {{fileName}}, error: {{error}}":"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044C \u0444\u0430\u0439\u043B: {{fileName}}, \u043E\u0448\u0438\u0431\u043A\u0430: {{error}}","Failed to read image files":"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044C \u0444\u0430\u0439\u043B\u044B \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439","Failed to send message":"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435","Image Preview":"\u041F\u0440\u0435\u0434\u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F","Image uploads are not allowed in this chat.":"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439 \u0432 \u044D\u0442\u043E\u043C \u0447\u0430\u0442\u0435 \u0437\u0430\u043F\u0440\u0435\u0449\u0435\u043D\u0430.","In Progress":"\u0412 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0435",language:{de:"Deutsch",en:"English",label:"\u042F\u0437\u044B\u043A",ru:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439",zh:"\u4E2D\u6587"},"Language is not specified for this code block":"\u042F\u0437\u044B\u043A \u043D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0431\u043B\u043E\u043A\u0430 \u043A\u043E\u0434\u0430",Main:"\u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439","More...":"\u0415\u0449\u0451...","Open image source":"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F",Others:"\u0414\u0440\u0443\u0433\u0438\u0435","RAG Search":"RAG-\u043F\u043E\u0438\u0441\u043A",Reasoning:"\u0420\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435",Send:"\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C","Some files are too large and were not added (max size: {{size}} MB)":"\u041D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0444\u0430\u0439\u043B\u044B \u0441\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u0438\u0435 \u0438 \u043D\u0435 \u0431\u044B\u043B\u0438 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B (\u043C\u0430\u043A\u0441. \u0440\u0430\u0437\u043C\u0435\u0440: {{size}} \u041C\u0411)",source:"\u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A","Start the conversation by sending a message":"\u041D\u0430\u0447\u043D\u0438\u0442\u0435 \u0434\u0438\u0430\u043B\u043E\u0433, \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0432 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435",Started:"\u041D\u0430\u0447\u0430\u0442\u043E",Stop:"\u0421\u0442\u043E\u043F","Tool Call":"\u0412\u044B\u0437\u043E\u0432 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0430","Tool Call Completed":"\u0412\u044B\u0437\u043E\u0432 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043D","Type your message...":"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435...","Upload File":"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0444\u0430\u0439\u043B",Warning:"\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435","Web Search":"\u0412\u0435\u0431-\u043F\u043E\u0438\u0441\u043A",You:"\u0412\u044B","You can only add up to {{count}} images at a time":"\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u0435 \u0431\u043E\u043B\u0435\u0435 {{count}} \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439 \u0437\u0430 \u0440\u0430\u0437"};var _v={AI:"AI","Are you sure you want to delete this item? This action cannot be undone.":"\u60A8\u786E\u5B9A\u8981\u5220\u9664\u6B64\u9879\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u6D88\u3002",Cancel:"\u53D6\u6D88",Cancelled:"\u5DF2\u53D6\u6D88","Click or drop an image/document here to upload":"\u70B9\u51FB\u6216\u62D6\u653E\u56FE\u7247/\u6587\u6863\u5230\u6B64\u5904\u4E0A\u4F20","Code block is empty":"\u4EE3\u7801\u5757\u4E3A\u7A7A","Code Interpreter":"\u4EE3\u7801\u89E3\u91CA\u5668",Completed:"\u5DF2\u5B8C\u6210","Confirm Deletion":"\u786E\u8BA4\u5220\u9664",Copy:"\u590D\u5236","Copy CSV":"\u590D\u5236 CSV","Copy message":"\u590D\u5236\u6D88\u606F",Delete:"\u5220\u9664",Details:"\u8BE6\u60C5","Document upload is not available in this chat.":"\u6B64\u804A\u5929\u4E0D\u652F\u6301\u6587\u6863\u4E0A\u4F20\u3002",Download:"\u4E0B\u8F7D","Download CSV":"\u4E0B\u8F7D CSV","Drop files here to upload":"\u5C06\u6587\u4EF6\u62D6\u653E\u5230\u6B64\u5904\u4E0A\u4F20",Error:"\u9519\u8BEF","Failed to copy message":"\u590D\u5236\u6D88\u606F\u5931\u8D25","Failed to read file: {{fileName}}":"\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25\uFF1A{{fileName}}","Failed to read file: {{fileName}}, error: {{error}}":"\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25\uFF1A{{fileName}}\uFF0C\u9519\u8BEF\uFF1A{{error}}","Failed to read image files":"\u8BFB\u53D6\u56FE\u7247\u6587\u4EF6\u5931\u8D25","Failed to send message":"\u53D1\u9001\u6D88\u606F\u5931\u8D25","Image Preview":"\u56FE\u7247\u9884\u89C8","Image uploads are not allowed in this chat.":"\u6B64\u804A\u5929\u4E0D\u5141\u8BB8\u4E0A\u4F20\u56FE\u7247\u3002","In Progress":"\u8FDB\u884C\u4E2D",language:{de:"Deutsch",en:"English",label:"\u8BED\u8A00",ru:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439",zh:"\u4E2D\u6587"},"Language is not specified for this code block":"\u6B64\u4EE3\u7801\u5757\u672A\u6307\u5B9A\u8BED\u8A00",Main:"\u4E3B\u8981","More...":"\u66F4\u591A...","Open image source":"\u6253\u5F00\u56FE\u7247\u6765\u6E90",Others:"\u5176\u4ED6","RAG Search":"RAG \u641C\u7D22",Reasoning:"\u63A8\u7406",Send:"\u53D1\u9001","Some files are too large and were not added (max size: {{size}} MB)":"\u90E8\u5206\u6587\u4EF6\u8FC7\u5927\uFF0C\u672A\u88AB\u6DFB\u52A0\uFF08\u6700\u5927\uFF1A{{size}} MB\uFF09",source:"\u6765\u6E90","Start the conversation by sending a message":"\u53D1\u9001\u6D88\u606F\u5F00\u59CB\u5BF9\u8BDD",Started:"\u5DF2\u5F00\u59CB",Stop:"\u505C\u6B62","Tool Call":"\u5DE5\u5177\u8C03\u7528","Tool Call Completed":"\u5DE5\u5177\u8C03\u7528\u5B8C\u6210","Type your message...":"\u8F93\u5165\u6D88\u606F...","Upload File":"\u4E0A\u4F20\u6587\u4EF6",Warning:"\u8B66\u544A","Web Search":"\u7F51\u7EDC\u641C\u7D22",You:"\u4F60","You can only add up to {{count}} images at a time":"\u4E00\u6B21\u6700\u591A\u53EA\u80FD\u6DFB\u52A0 {{count}} \u5F20\u56FE\u7247"};var Wd=["en","de","ru","zh"],Vd="ui-language";function pP(e={}){return(0,pv.merge)({en:{translation:cv},de:{translation:dv},ru:{translation:uv},zh:{translation:_v}},e)}async function J9({lookupLocalStorage:e=Vd,supportedLngs:t=Wd,fallbackLng:n="en",resources:a={}}={}){return mv.use(mP).use(_P).init({resources:pP(a),fallbackLng:n,supportedLngs:t,interpolation:{escapeValue:!1},detection:{order:["localStorage","navigator","htmlTag"],lookupLocalStorage:e,caches:["localStorage"]}})}function gv(e){return(typeof e=="string"?new Date(e):e).toLocaleDateString(mv.language||"ru-RU",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}import{useTranslation as vP}from"react-i18next";var fv=({fileName:e,fileUrl:t,mimeType:n,createdAt:a,onOpenSource:o,sourceTitle:s,onClose:l})=>{let[d,{open:u,close:p}]=TP(!1);gP(()=>{t&&u()},[t,u]);let E=Ev(()=>{l(),p()},[l,p]),h=Ev(()=>{o?.(),E()},[o,E]),{t:C}=vP();return En.createElement(bP,{size:"xl",opened:d,onClose:E,title:C("Image Preview")},t&&En.createElement(SP,{gap:"md"},En.createElement(EP,{src:t,alt:e,fit:"contain",mah:"70vh"}),En.createElement(Sv,{justify:"space-between"},En.createElement("div",null,En.createElement(Fs,{size:"sm",fw:500},e),En.createElement(Fs,{size:"xs",c:"dimmed"},a?gv(a)+" \u2022":""," ",n)),o&&En.createElement(Sv,{gap:"xs"},En.createElement(hP,{label:C("Open image source")},En.createElement(fP,{variant:"light",onClick:h},En.createElement(CP,{size:16}))))),o&&En.createElement(Fs,{size:"sm",c:"dimmed"},"From:"," ",En.createElement(Fs,{span:!0,c:"blue",style:{cursor:"pointer"},onClick:h},s||C("source")))))};var hv=e=>[...Array.from(e.tHead?.querySelectorAll("tr")??[]),...Array.from(e.tBodies[0]?.querySelectorAll("tr")??[])].map(n=>Array.from(n.querySelectorAll("th, td")).map(a=>`"${(a.textContent||"").replace(/"/g,'""')}"`).join(",")).join(`
451
451
  `),bv=Sr.memo(({messages:e=[],onMessageDeleted:t,onAddMessage:n,plugins:a=[],detailsPlugins:o=[],codePlugins:s,models:l=[]})=>{let{t:d}=AP(),u=RP(null),[p,E]=qd(),[h,C]=qd(),[R,I]=qd(new Set),A=ki(G=>I(q=>new Set(q).add(G)),[]),D=ki(G=>{I(q=>{let Z=new Set(q);return Z.delete(G),Z})},[]),k=()=>{E(void 0),C(void 0)},F=ki(G=>{if(!G.target)return;let q=["code-run-btn","code-copy-btn","code-download-btn","code-toggle-all","copy-message-btn","message-details-btn","code-header","message-image","table-sort-btn","table-copy-csv-btn","table-download-csv-btn"],Z=G.target;for(let oe of q){let le=Z.closest(`.${oe}`);if(le){Z=le;break}}if(!Z)return;let V=Z,ie=oe=>{let le=oe?.parentElement;le.classList.contains("collapsed")?(oe.classList.remove("collapsed"),le&&le.classList.remove("collapsed")):(oe.classList.add("collapsed"),le&&le.classList.add("collapsed"))},ae=oe=>{let le=(oe?.parentElement?.parentElement).querySelector(".katechat-message-content-details");le&&(le.classList.toggle("expanded"),oe.classList.toggle("expanded"))};if(V.classList.contains("code-run-btn")||V.classList.contains("code-download-btn")){let oe=V.dataset.lang,le=V.classList.contains("code-run-btn"),Se=V.closest(".code-header")?.parentElement?.querySelector(".code-data");if(Se){let Ce=decodeURIComponent(Se.dataset.code||"").trim();if(!Ce)return Qd.show({title:d("Error"),message:d("Code block is empty"),color:"red"});if(le){if(!oe)return Qd.show({title:d("Error"),message:d("Language is not specified for this code block"),color:"red"});let z=V.closest('[id^="message-"]'),Q=z?.id.replace("message-",""),J=Q?e.find(qe=>qe.id===Q):void 0,re=V.closest("[data-linked-message-id]"),de=re?.dataset.linkedMessageId,me=de?J?.linkedMessages?.find(qe=>qe.id===de):J,Ye=(re??z)?.querySelectorAll(".code-block"),we=V.closest(".code-block"),Ue=Ye&&we?Array.from(Ye).indexOf(we):0,lt=me?{messageId:me.id,blockIndex:Ue,messageContent:me.content}:void 0;s?.[oe]?.execute(Ce,oe,lt)}else{let z=`code.${UC(oe||"txt")}`,Q=new Blob([Ce],{type:"text/plain"}),J=URL.createObjectURL(Q),re=document.createElement("a");re.href=J,re.download=z,re.click(),URL.revokeObjectURL(J)}}}else if(V.classList.contains("code-copy-btn")){let oe=V.parentElement?.parentElement?.nextElementSibling?.querySelector(".code-data");if(oe){let Se=decodeURIComponent(oe.dataset.code||"").trim();navigator.clipboard.writeText(Se)}let le=V.querySelector(".copy-icon"),ye=V.querySelector(".check-icon");le&&ye&&(le.style.display="none",ye.style.display="block",setTimeout(()=>{le.style.display="block",ye.style.display="none"},2e3))}else if(V.classList.contains("code-header"))ie(V);else if(V.classList.contains("code-toggle-all"))u.current?.querySelectorAll(".code-header").forEach(oe=>{ie(oe)});else if(V.classList.contains("message-details-btn"))ae(V);else if(V.classList.contains("copy-message-btn")){if(V.dataset.messageId){let oe=V.dataset.messageIndex,le=V.dataset.messageLinkedIndex,ye=V.dataset.messageId,Se=oe!=null?e[Number(oe)]:e.find(J=>J.id===ye);le!=null&&(Se=Se?.linkedMessages?.[Number(le)]),yd(Se,"Message should exist to copy");let Ce=(Se.content||"").trim(),z=Se.html||[];if(z.length&&z[0]){let J=new Blob([z.join("<br/>")],{type:"text/html"}),re=new Blob([Ce],{type:"text/plain"});navigator.clipboard.write([new ClipboardItem({[J.type]:J,[re.type]:re})]).catch(de=>Qd.show({title:d("Error"),message:de.message||d("Failed to copy message"),color:"red"}))}else navigator.clipboard.writeText(Ce);let Q=V.parentElement?.querySelector(".check-icon");Q&&(V.style.display="none",Q.style.display="inline-block",setTimeout(()=>{V.style.display="inline-block",Q.style.display="none"},2e3))}}else if(V.classList.contains("message-image")){let oe=V.dataset.fileName,le=V.src;E(le),C(oe)}else if(V.classList.contains("table-sort-btn")){let oe=parseInt(V.dataset.colIndex||"0"),le=V.closest("table");if(!le)return;let ye=le.querySelector("tbody");if(!ye)return;let Ce=V.dataset.sortDir==="asc"?"desc":"asc";le.querySelectorAll("th.table-sort-btn").forEach(Q=>{delete Q.dataset.sortDir,Q.classList.remove("sort-asc","sort-desc")}),V.dataset.sortDir=Ce,V.classList.add(Ce==="asc"?"sort-asc":"sort-desc");let z=Array.from(ye.querySelectorAll("tr"));z.sort((Q,J)=>{let re=Q.querySelectorAll("td")[oe]?.textContent||"",de=J.querySelectorAll("td")[oe]?.textContent||"",me=parseFloat(re),be=parseFloat(de);return!isNaN(me)&&!isNaN(be)?Ce==="asc"?me-be:be-me:Ce==="asc"?re.localeCompare(de):de.localeCompare(re)}),z.forEach(Q=>ye.appendChild(Q))}else if(V.classList.contains("table-copy-csv-btn")){let oe=V.closest(".message-table");if(!oe)return;navigator.clipboard.writeText(hv(oe));let le=V.querySelector(".copy-icon"),ye=V.querySelector(".check-icon");le&&ye&&(le.style.display="none",ye.style.display="block",setTimeout(()=>{le.style.display="block",ye.style.display="none"},2e3))}else if(V.classList.contains("table-download-csv-btn")){let oe=V.closest(".message-table");if(!oe)return;let le=new Blob([hv(oe)],{type:"text/csv"}),ye=URL.createObjectURL(le),Se=document.createElement("a");Se.href=ye,Se.download="table.csv",Se.click(),URL.revokeObjectURL(ye)}},[e,s]),Y=ki((G,{isLast:q=!1}={})=>Sr.createElement(Sr.Fragment,null,a.map((Z,V)=>Sr.createElement(Z,{key:V,message:G,isLast:q,messagesCount:e.length,onAddMessage:n,onAction:A,onActionEnd:D,onMessageDeleted:t,disabled:R.has(G.id)}))),[a,e.length,n,t,R,A,D]),W=ki(G=>{let q=o.map(Z=>Z(G)).filter(yi);return q.length?q:null},[o]);return Sr.createElement(Sr.Fragment,null,Sr.createElement(IP,{gap:"0",ref:u,onClick:F},e.map((G,q)=>Sr.createElement(Bd,{key:G.id,message:G,index:q,isLast:q===e.length-1,disabled:R.has(G.id),pluginsLoader:Y,messageDetailsLoader:W,models:l,codePlugins:s}))),Sr.createElement(fv,{fileName:h??"",fileUrl:p??"",onClose:k}))});import kn,{useCallback as Us,useEffect as Av,useImperativeHandle as wP,useRef as Nv,useState as MP}from"react";import{Group as LP,Loader as kP}from"@mantine/core";import{IconCircleChevronDown as PP}from"@tabler/icons-react";import{useEffect as NP,useRef as Tv}from"react";function $d(e,t,n=0){let a=Tv(null),o=Tv(null);return NP(()=>{a.current?.disconnect();let s=setTimeout(()=>{a.current=new IntersectionObserver(l=>{l[0].isIntersecting&&e()}),o.current&&a.current.observe(o.current)},n);return()=>{clearTimeout(s),a.current?.disconnect()}},[t,e]),o}import yP,{createContext as OP,useContext as xP,useEffect as Cv}from"react";import{useLocalStorage as DP}from"@mantine/hooks";var vv=OP(void 0),C8=({children:e})=>{let[t,n]=DP({key:"ui-theme",defaultValue:"light"});Cv(()=>{if(t==="auto"){let o=window.matchMedia("(prefers-color-scheme: dark)").matches;document.documentElement.dataset.mantine=o?"dark":"light"}else document.documentElement.dataset.mantine=t},[t]);let a=()=>{let o=t==="dark"?"light":"dark";n(o),document.documentElement.dataset.mantine=o};return Cv(()=>{if(t==="auto"){let o=window.matchMedia("(prefers-color-scheme: dark)"),s=l=>{document.documentElement.dataset.mantine=l.matches?"dark":"light"};return o.addEventListener("change",s),()=>o.removeEventListener("change",s)}},[t]),yP.createElement(vv.Provider,{value:{colorScheme:t,setColorScheme:n,toggleColorScheme:a}},e)},v8=()=>{let e=xP(vv);if(!e)throw new Error("useTheme must be used within a ThemeProvider");return e};import{useState as Xd,useEffect as Rv,useCallback as ra}from"react";function O8(e){let[t,n]=Xd([]),[a,o]=Xd(!0),[s,l]=Xd(null);Rv(()=>{let I=new wa(e);return l(I),()=>{I.close()}},[e]);let d=ra(async()=>{if(s)try{let I=await s.getAllChats();n(I)}catch(I){console.error("Failed to load chats:",I)}finally{o(!1)}},[s]);Rv(()=>{d()},[d]);let u=ra(async I=>{Yt.ok(s,"Database instance is not available");let A={id:`chat-${Date.now()}`,title:"New Chat",createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};return s&&(await s.saveChat(A),await d()),A},[s,d]),p=ra(async I=>{Yt.ok(s,"Database instance is not available"),await s.saveChat(I),await d()},[s,d]),E=ra(async I=>{Yt.ok(s,"Database instance is not available"),await s.deleteChat(I),await d()},[s,d]),h=ra(async(I,A)=>{let D=t.find(k=>k.id===I);D&&(Yt.ok(s,"Database instance is not available"),await s.saveChat({...D,title:A,updatedAt:new Date().toISOString()}),await d())},[t,s,d]),C=ra(async I=>{Yt.ok(s,"Database instance is not available"),await s.saveMessage(I)},[s]),R=ra(async I=>(Yt.ok(s,"Database instance is not available"),s.getMessagesByChatId(I)),[s]);return{chats:t,loading:a,createChat:u,updateChat:p,deleteChat:E,updateChatTitle:h,refreshChats:d,saveMessage:C,getChatMessages:R}}import{useState as Kd,useEffect as Iv,useCallback as ka}from"react";function k8(e,t){let[n,a]=Kd([]),[o,s]=Kd(!0),[l,d]=Kd(null);Iv(()=>{let I=new wa(t);return d(I),()=>{I.close()}},[t]);let u=ka(async()=>{if(!e){a([]),s(!1);return}try{Yt.ok(l,"Database instance is not available");let I=await l.getMessagesByChatId(e);a(I)}catch(I){console.error("Failed to load messages:",I)}finally{s(!1)}},[e,l]);Iv(()=>{u()},[u]);let p=ka(async I=>{if(!e)return;Yt.ok(l,"Database instance is not available"),await l.saveMessage(I),a(D=>[...D,I]);let A=await l.getChat(e);A&&await l.saveChat({...A,updatedAt:new Date().toISOString()})},[e,l]),E=ka(async I=>{Yt.ok(l,"Database instance is not available"),await l.saveMessage(I),a(A=>A.map(D=>D.id===I.id?I:D))},[l]),h=ka(async I=>{Yt.ok(l,"Database instance is not available"),await l.deleteMessage(I),a(A=>A.filter(D=>D.id!==I))},[l]),C=ka(async I=>{Yt.ok(l,"Database instance is not available"),await l.deleteMessages(I),a(A=>A.filter(D=>!I.includes(D.id)))},[l]),R=ka(async()=>{if(!e)return;let I=n.map(A=>A.id);Yt.ok(l,"Database instance is not available"),await l.deleteMessages(I),a([])},[e,n,l]);return{messages:n,loading:o,addMessage:p,updateMessage:E,deleteMessage:h,deleteMessages:C,clearMessages:R,refreshMessages:u}}var yv=kn.forwardRef(({messages:e,models:t=[],addChatMessage:n,removeMessages:a,loadMoreMessages:o,plugins:s,detailsPlugins:l,codePlugins:d,streaming:u=!1,loadCompleted:p=!0,loading:E=!1,autoScroll:h=!0,id:C="chat"},R)=>{let[I,A]=MP(!1),D=Nv(null),k=Nv(null),F=Us(()=>{D.current?.scrollTo(0,D.current?.scrollHeight??0)},[D]);wP(R,()=>({scrollToBottom:F}),[F]);let Y=Us(()=>{I||F()},[F,I]);Av(()=>{if(h)Y();else{let Z=D.current;if(Z){let{scrollTop:V,scrollHeight:ie,clientHeight:ae}=Z;ie-V-ae<2||A(!0)}}},[e,Y,h]);let W=Us(Z=>{let{scrollTop:V,scrollHeight:ie,clientHeight:ae}=Z.target;k.current&&clearTimeout(k.current),ie-V-ae<2?A(!1):e?.length&&(u?k.current=setTimeout(()=>{A(!0)},100):A(!0))},[e?.length,u]),G=Us(()=>{A(!1),F()},[F]);Av(()=>{p&&(A(!1),setTimeout(F,200))},[p,h]);let q=$d(()=>o?.(),[o],200);return kn.createElement("div",{className:["katechat-messages-container",p?"container--load-completed":"",p&&e?.length===0?"container--empty":""].join(" ")},kn.createElement("div",{className:"katechat-messages-container-scroller",ref:D,onScroll:W},kn.createElement("div",{ref:q,id:`${C}-first-message`}),E&&kn.createElement(LP,{justify:"center",align:"center",py:"xl"},kn.createElement(kP,null)),kn.createElement("div",{className:"katechat-messages-list"},e&&kn.createElement(bv,{messages:e,onMessageDeleted:a,onAddMessage:n,models:t,plugins:s,detailsPlugins:l,codePlugins:d}))),kn.createElement("div",{className:["katechat-anchor-container",I?"container--visible":""].join(" ")},kn.createElement("div",{className:"katechat-anchor"},kn.createElement(PP,{size:32,color:"teal",onClick:G}))))});yv.displayName="ChatMessagesContainer";import Pa from"react";import{Modal as BP,Button as Ov,Group as FP,Text as UP,Stack as GP}from"@mantine/core";import{useTranslation as YP}from"react-i18next";var sG=({isOpen:e,onClose:t,onConfirm:n,title:a,message:o,confirmLabel:s,cancelLabel:l,isLoading:d=!1})=>{let{t:u}=YP();return Pa.createElement(BP,{opened:e,onClose:t,title:a||u("Confirm Deletion"),centered:!0},Pa.createElement(GP,null,Pa.createElement(UP,{style:{wordBreak:"break-word"}},o||u("Are you sure you want to delete this item? This action cannot be undone.")),Pa.createElement(FP,{mt:"md",justify:"flex-end"},Pa.createElement(Ov,{variant:"outline",onClick:t,disabled:d},l||u("Cancel")),Pa.createElement(Ov,{color:"red",onClick:n,loading:d},s||u("Delete")))))};import aa from"react";import{Menu as Gs,ActionIcon as zP,Tooltip as HP}from"@mantine/core";import{IconLanguage as WP}from"@tabler/icons-react";import{useTranslation as VP}from"react-i18next";var hG=({languages:e=Wd,size:t=20})=>{let{t:n,i18n:a}=VP(),o=s=>{a.changeLanguage(s),localStorage.setItem(Vd,s)};return aa.createElement(Gs,{shadow:"md",width:150,position:"bottom-end"},aa.createElement(Gs.Target,null,aa.createElement(HP,{label:n("language.label")},aa.createElement(zP,{variant:"subtle",radius:"xl","aria-label":n("language.label")},aa.createElement(WP,{size:t})))),aa.createElement(Gs.Dropdown,null,e.map(s=>aa.createElement(Gs.Item,{key:s,onClick:()=>o(s),fw:a.language===s?700:400},n(`language.${s}`)))))};export{Wd as BASE_SUPPORTED_LANGUAGES,wa as ChatDatabase,y1 as ChatFileType,P9 as ChatInput,Bd as ChatMessage,NU as ChatMessagePreview,yv as ChatMessagesContainer,bv as ChatMessagesList,N1 as CustomModelProtocol,sG as DeleteConfirmationModal,f9 as DropFilesOverlay,Ud as FileDropzone,q3 as IMAGE_UPLOAD_FORMATS,fv as ImagePopup,Vd as LANGUAGE_STORAGE_KEY,hG as LanguageSelector,Fd as LinkedChatMessage,_c as MessageRole,Bo as MessageStatus,I1 as MessageType,A1 as ModelType,wi as ProviderIcon,si as ResponseStatus,vv as ThemeContext,C8 as ThemeProvider,Yt as assert,Pr as escapeHtml,gv as formatDate,TF as formatFileSize,vF as formatTokensLimit,LF as getCSSVariableColor,UC as getProgrammingLanguageExt,J9 as initI18n,Xk as normalizeMatJax,hF as parseChatMessages,xs as parseMarkdown,wF as sortItemsBySections,O8 as useDatabaseChats,k8 as useDatabaseMessages,$d as useIntersectionObserver,v8 as useTheme};
452
452
  /*! Bundled license information:
453
453