@katechat/ui 1.1.9 → 1.1.10

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/cjs/index.js CHANGED
@@ -448,7 +448,7 @@ $$${n}$$`):""}function Wi(e,t=!1){return e?t?[Wk.parse(e,{renderer:$r})]:(e=Zv(e
448
448
  </svg>
449
449
  <span class="action-btn-label">${ce.label}</span>
450
450
  </div>`:"";ot.innerHTML=he.replaceAll("<LANG>",Ne).replace("<EXECUTE_BTN>",nt).replace("<DOWNLOAD_TITLE>",z).replace("<COPY_TITLE>",X),Xe.appendChild(ot),ve.parentNode?.insertBefore(Xe,ve),Xe.appendChild(ve)}}),W.current.querySelectorAll("img").forEach(ve=>{if(!ve?.classList?.contains("message-image")){ve.classList.add("message-image");let ot=ve.src.split("/").pop()||"";ve.setAttribute("data-file-name",ot)}}),W.current.querySelectorAll("table").forEach(ve=>{if(!ve?.classList?.contains("message-table")){if(ve.classList.add("message-table"),!ve.tFoot){let Ne=document.createElement("tfoot");ve.appendChild(Ne);let Xe=document.createElement("tr");Xe.className="table-controls-row",Ne.appendChild(Xe);let ce=document.createElement("th");ce.classList.add("table-controls"),ce.colSpan=ve.querySelectorAll("th").length||1,Xe.appendChild(ce)}let ot=ve.querySelector("tfoot tr .table-controls");ot.innerHTML=Se.replace("<COPY_CSV_TITLE>",J).replace("<DOWNLOAD_CSV_TITLE>",re);let Ve=0;ve.querySelectorAll("th").forEach(Ne=>{Ne.classList.contains("table-controls")||(Ne.classList.add("table-sort-btn"),Ne.setAttribute("data-col-index",String(Ve++)))})}}))},Qi+10),[z,X,J,re,d]);(0,_e.useEffect)(()=>{if(!D&&W.current){let ve=new MutationObserver(pe);return ve.observe(W.current,{childList:!0,subtree:!0}),pe(),()=>ve.disconnect()}},[u,D,pe]);let Ce=()=>le(ve=>!ve),Pe=(0,_e.useMemo)(()=>s?s(t):null,[s,t]),Ue=(0,_e.useMemo)(()=>{let ve=o?o(t):null,ot=l?.find(Ve=>Ve.modelId===t?.modelId);return _e.default.createElement(_e.default.Fragment,null,_e.default.createElement(ct.Group,{align:"center",p:"0"},_e.default.createElement(ct.Group,{gap:"sm",wrap:"nowrap",p:"0"},_e.default.createElement(ct.Avatar,{color:"gray",radius:"xl",size:"md",src:De?t?.user?.avatarUrl:void 0},De?_e.default.createElement(Nn.IconUser,null):ot?_e.default.createElement(Za,{apiProvider:ot.apiProvider,provider:ot.provider}):_e.default.createElement(Nn.IconRobot,null)),_e.default.createElement(ct.Text,{size:"sm",fw:500,c:De?"blue":"teal"},Te),_e.default.createElement(ct.Text,{size:"sm",c:"dimmed"},Ee)),_e.default.createElement(ct.Group,{p:"0"},G&&_e.default.createElement(vi,{status:G}),U&&G!=="reasoning"&&_e.default.createElement(ct.Text,{size:"sm",c:"dimmed"},U))),_e.default.createElement(ct.Box,{className:["katechat-message-content",D?"streaming":""].join(" ")},_e.default.createElement(qi,{status:G,content:T,statusInfo:U,streaming:D}),R?R.map((Ve,Ne)=>_e.default.createElement("div",{key:Ne,dangerouslySetInnerHTML:{__html:Ve}})):_e.default.createElement("div",null,T),_e.default.createElement(ct.Box,{className:"katechat-message-footer"},_e.default.createElement(ts,{messageId:p,messageIndex:n}),Pe&&_e.default.createElement(ct.Tooltip,{label:$("Details"),position:"top",withArrow:!0},_e.default.createElement(ct.ActionIcon,{className:"edit-message-btn","data-message-id":p,size:"sm",variant:"subtle",color:"gray",disabled:a,onClick:Ce},Q?_e.default.createElement(Nn.IconInfoSquareFilled,null):_e.default.createElement(Nn.IconInfoSquare,null))),ve),_e.default.createElement(ct.Collapse,{in:Q},_e.default.createElement(ct.Box,{className:"katechat-message-content-details"},Pe))))},[u,Te,Ee,T,R,p,E,h,l,n,Y,Pe,Q,D,ie.language]),[ze,je]=_e.default.useState(0),[ft,ut]=_e.default.useState("idle"),[Lt,Nt]=_e.default.useState(!1);(0,_e.useEffect)(()=>{if(!M||M.length===0)return;let ve=M.findIndex(ot=>ot.streaming);ve>=0&&je(ve)},[M]);let sn=(0,_e.useMemo)(()=>!M||M.length===0?[]:M.map(ve=>_e.default.createElement(Ks,{key:ve.id,message:ve,parentIndex:n,index:ze,models:l,plugins:o?.(ve)})),[M,l,n,ie.language]),yt=(0,_e.useMemo)(()=>{if(!M||M.length===0)return null;let ve=M.length,ot=Xe=>{Xe.stopPropagation(),!Lt&&(Nt(!0),ut("exit-right"),setTimeout(()=>{je(ce=>(ce-1+ve)%ve),ut("enter-left"),setTimeout(()=>{ut("idle"),Nt(!1)},Qi)},Qi))},Ve=Xe=>{Xe.stopPropagation(),!Lt&&(Nt(!0),ut("exit-left"),setTimeout(()=>{je(ce=>(ce+1)%ve),ut("enter-right"),setTimeout(()=>{ut("idle"),Nt(!1)},Qi)},Qi))},Ne=sn[ze];return _e.default.createElement("div",{className:"katechat-message-carousel"},_e.default.createElement("div",{className:"message-carousel-header"},_e.default.createElement("div",{className:"message-carousel-controls"},ve>1&&_e.default.createElement(_e.default.Fragment,null,_e.default.createElement(ct.ActionIcon,{onClick:ot,"aria-label":"Previous",radius:"xl",variant:"light"},_e.default.createElement(Nn.IconChevronLeft,null)),_e.default.createElement(ct.ActionIcon,{onClick:Ve,"aria-label":"Next",radius:"xl",variant:"light"},_e.default.createElement(Nn.IconChevronRight,null))))),_e.default.createElement("div",{className:`carousel-message-content animation-${ft}`},Ne),ve>1&&_e.default.createElement(ct.Group,{className:"carousel-model-icons"},M.map((Xe,ce)=>{let nt=l?.find(Qe=>Qe.modelId===Xe.modelId),_t=ce===ze;return _e.default.createElement(ct.Tooltip,{key:Xe.id,label:nt?.name||$("AI"),position:"top"},_e.default.createElement(ct.Box,{key:Xe.id,c:_t?void 0:"dimmed",onClick:()=>je(ce)},nt?_e.default.createElement(Za,{apiProvider:nt.apiProvider,provider:nt.provider,size:20}):_e.default.createElement(Nn.IconRobot,{size:20})))})))},[sn,ie.language,ze,ft,Lt]);return yt?_e.default.createElement("div",{id:`message-${t.id}`,className:["katechat-message",`katechat-message__${u||""}`].join(" "),ref:W},_e.default.createElement("div",{className:"katechat-message-linked-toggle"},_e.default.createElement(ct.Switch,{checked:q,onChange:ve=>te(ve.currentTarget.checked),label:$(q?"Main":"Others"),size:"sm"})),_e.default.createElement("div",{className:["katechat-message-main",q?"":"hidden"].join(" ")},Ue),_e.default.createElement("div",{className:["katechat-message-linked",q?"hidden":""].join(" ")},yt)):_e.default.createElement("div",{id:`message-${t.id}`,className:["katechat-message",`katechat-message__${u||""}`].join(" "),ref:W},_e.default.createElement("div",{className:"katechat-message-main"},Ue))});$s.displayName="ChatMessage";var Ja=wt(require("react"),1),dC=require("@mantine/core");var c3=({html:e,text:t})=>Ja.default.createElement(dC.ScrollArea,{type:"hover",offsetScrollbars:!0,className:["katechat-message-content","katechat-message-preview"].join(" ")},t?Ja.default.createElement(Ja.default.Fragment,null,e?e.map((n,a)=>Ja.default.createElement("div",{key:a,dangerouslySetInnerHTML:{__html:n}})):Ja.default.createElement("div",null,t)):"...");var zt=wt(require("react"),1),sr=require("@mantine/core"),uC=require("@tabler/icons-react");var or=wt(require("react"),1),qt=require("@tabler/icons-react"),Za=({apiProvider:e,provider:t,size:n=24})=>{switch(e){case"OPEN_AI":return or.default.createElement(qt.IconBrandOpenai,{size:n});case"AWS_BEDROCK":switch(t?.toLowerCase()){case"amazon":return or.default.createElement(qt.IconBrandAws,{size:n});case"anthropic":return or.default.createElement(qt.IconAi,{size:n});case"mistral ai":return or.default.createElement(qt.IconBrandMedium,{size:n});case"meta":return or.default.createElement(qt.IconBrandMeta,{size:n});default:return or.default.createElement(qt.IconBrandAws,{size:n})}case"YANDEX_FM":return or.default.createElement(qt.IconBrandYandex,{size:n});case"GOOGLE_VERTEX_AI":return or.default.createElement(qt.IconBrandGoogle,{size:n});default:return or.default.createElement(qt.IconMessageChatbot,{size:n})}};var Ks=({message:e,parentIndex:t,index:n,plugins:a,models:o})=>{let s=(0,zt.useMemo)(()=>o?.find(l=>l.modelId===e.modelId),[o,e.modelId]);return zt.default.createElement(sr.Box,{key:e.id,"data-linked-message-id":e.id},zt.default.createElement(sr.Group,{align:"center",pt:"sm"},zt.default.createElement(sr.Avatar,{radius:"xl",size:"md"},s?zt.default.createElement(Za,{apiProvider:s.apiProvider,provider:s.provider}):zt.default.createElement(uC.IconRobot,null)),zt.default.createElement(sr.Group,{gap:"xs"},zt.default.createElement(sr.Text,{size:"sm",fw:500,c:"teal"},e.modelName),e.status&&zt.default.createElement(vi,{status:e.status}),e.statusInfo&&e.status!=="reasoning"&&zt.default.createElement(sr.Text,{size:"xs",c:"dimmed"},e.statusInfo))),zt.default.createElement("div",{className:"katechat-message-content"},zt.default.createElement(qi,{status:e.status,content:e.content,statusInfo:e.statusInfo,streaming:e.streaming||!1}),e.html?e.html.map((l,d)=>zt.default.createElement("div",{key:d,dangerouslySetInnerHTML:{__html:l}})):zt.default.createElement("div",null,e.content),zt.default.createElement("div",{className:"katechat-message-footer"},zt.default.createElement(ts,{messageId:e.id,messageIndex:t,linkedMessageIndex:n}),a)))};Ks.displayName="LinkedChatMessage";var xe=wt(require("react"),1),Ct=require("@mantine/core"),Xr=require("@tabler/icons-react"),ha=require("@mantine/notifications");var It=wt(require("react"),1),Nr=require("@mantine/core"),_C=require("@tabler/icons-react");var mC=require("react-i18next");var $i={dropzone:"_dropzone_16zca_1",dragging:"_dragging_16zca_8",disabled:"_disabled_16zca_12"};var pC=["image/jpeg","image/png","image/webp"],Xs=({onFilesAdd:e,disabled:t,uploadFormats:n=pC})=>{let[a,o]=(0,It.useState)(!1),s=(0,It.useRef)(null),l=(0,It.useRef)(null),{t:d}=(0,mC.useTranslation)();(0,It.useEffect)(()=>{let R=I=>{if(!t&&I.clipboardData&&I.clipboardData.items){let A=Array.from(I.clipboardData.items).map(D=>D.getAsFile()).filter(Vi);A.length>0&&(I.preventDefault(),I.stopPropagation(),e(A))}};return document.addEventListener("paste",R),()=>{document.removeEventListener("paste",R)}},[e,t]);let u=(0,It.useCallback)(R=>{R.preventDefault(),R.stopPropagation(),o(!0)},[]),p=(0,It.useCallback)(R=>{R.preventDefault(),R.stopPropagation(),o(!1)},[]),E=(0,It.useCallback)(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=(0,It.useCallback)(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]),T=()=>{t||l.current?.click()};return It.default.createElement(It.default.Fragment,null,It.default.createElement(Nr.Box,{ref:s,className:`drop-zone ${$i.dropzone} ${a?$i.dragging:""} ${t?$i.disabled:""}`,onDragOver:u,onDragLeave:p,onDrop:E,onClick:T},It.default.createElement(Nr.Group,{justify:"start",className:"drop-zone-control",gap:"xs"},It.default.createElement(Nr.Tooltip,{label:d("Click or drop an image/document here to upload"),position:"top"},It.default.createElement(Nr.ActionIcon,{variant:"default",size:"lg"},It.default.createElement(_C.IconFileUpload,{size:"24"}))),It.default.createElement(Nr.Box,{hiddenFrom:"xs",pe:"sm"},d("Upload File")),It.default.createElement("input",{ref:l,type:"file",multiple:!0,accept:n?.join(","),onChange:h,className:$i.fileInput,style:{display:"none"},disabled:t}))))};var Ki=wt(require("react"),1),gC=require("@mantine/core"),EC=require("@tabler/icons-react");var Qd={overlay:"_overlay_vjudp_1",content:"_content_vjudp_16"};var SC=require("react-i18next"),d3=({visible:e,message:t,onDragOver:n,onDragLeave:a,onDrop:o})=>{let{t:s}=(0,SC.useTranslation)();return e?Ki.default.createElement("div",{className:Qd.overlay,onDragOver:n,onDragLeave:a,onDrop:o},Ki.default.createElement("div",{className:Qd.content},Ki.default.createElement(EC.IconFileUpload,{size:48,color:"var(--mantine-color-blue-4)"}),Ki.default.createElement(gC.Text,{size:"lg",fw:500,c:"blue.4"},t||s("Drop files here to upload")))):null};var fC=require("react-i18next");var Xt={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 u3=(0,xe.forwardRef)(({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:T=0,onSendMessage:R,onStopRequest:I,onDocumentsUpload:A},D)=>{let[M,G]=(0,xe.useState)(""),[U,W]=(0,xe.useState)([]),[Y,q]=(0,xe.useState)(0),[te,Q]=(0,xe.useState)(!1),le=(0,xe.useRef)(null),{t:$}=(0,fC.useTranslation)();(0,xe.useImperativeHandle)(D,()=>({handleAddFiles:X=>he(X)})),(0,xe.useEffect)(()=>{le.current?.focus()},[e,t]),(0,xe.useEffect)(()=>{q(d?.length?d.length:0)},[e,d]);let ie=async()=>{if(!(!M?.trim()&&!U.length)){l(!0);try{G(""),W([]),await R(M,U)}catch(X){ha.notifications.show({title:"Error",message:X instanceof Error?X.message:$("Failed to send message"),color:"red"})}finally{l(!1)}}},Ee=(0,xe.useCallback)(X=>{let J=!M?.trim();if(X.key==="Enter"&&!X.shiftKey&&!X.altKey)X.preventDefault(),ie(),Q(!1);else if(X.key==="ArrowUp"&&(J||te)){let re=Math.max(0,Y-1);G(d[re]),q(re),Q(!0)}else if(X.key==="ArrowDown"&&(J||te)){let re=Math.min(d.length-1,Y+1);G(d[re]),q(re),Q(!0)}else Q(!1)},[ie,M,d,Y]),De=(0,xe.useCallback)(X=>{G(X.currentTarget.value)},[]),Te=(0,xe.useMemo)(()=>t||s||!M?.trim()&&!U.length,[M,U,s,t]),he=(0,xe.useCallback)(X=>{let J=X.filter(pe=>pe.size<h);J.length<X.length&&ha.notifications.show({title:$("Warning"),message:$("Some files are too large and were not added (max size: {{size}} MB)",{size:h/(1024*1024)}),color:"yellow"});let re=J.filter(pe=>pe.type?.startsWith("image/")),Se=J.filter(pe=>!pe.type?.startsWith("image/"));re.length&&T<=0&&(ha.notifications.show({title:$("Warning"),message:$("Image uploads are not allowed in this chat."),color:"yellow"}),re=[]),re.length+U.length>T&&(ha.notifications.show({title:$("Warning"),message:$("You can only add up to {{count}} images at a time",{count:T}),color:"yellow"}),re=re.slice(0,T-U.length)),re.length&&Promise.all(re.map(pe=>new Promise((Ce,Pe)=>{let Ue=new FileReader;Ue.onload=ze=>{if(ze.target?.result){let je=ze.target.result;Ce({fileName:pe.name,mimeType:pe.type,bytesBase64:je})}else Pe(new Error($("Failed to read file: {{fileName}}",{fileName:pe.name})))},Ue.onerror=ze=>{Pe(new Error($("Failed to read file: {{fileName}}, error: {{error}}",{fileName:pe.name,error:ze})))},Ue.readAsDataURL(pe)}))).then(pe=>{W(Ce=>[...Ce,...pe])}).catch(pe=>{ha.notifications.show({title:$("Error"),message:pe.message||$("Failed to read image files"),color:"red"})}),Se.length&&A?A(Se):Se.length&&ha.notifications.show({title:$("Warning"),message:$("Document upload is not available in this chat."),color:"orange"})},[U,A,T,h]),z=X=>J=>{J.stopPropagation(),W(re=>re.filter(Se=>Se.fileName!==X))};return xe.default.createElement("div",{className:[Xt.chatControlsContainer,n?Xt.promptMode:"",e?"":Xt.hidden].join(" ")},n?xe.default.createElement(Ct.Stack,{align:"center",justify:"center",gap:"md",mb:"lg"},xe.default.createElement(Ct.Text,{c:"dimmed",size:"lg",ta:"center",className:Xt.promptModeText},a||$("Start the conversation by sending a message"))):null,xe.default.createElement("div",{className:Xt.chatControls},u&&xe.default.createElement(Ct.Group,{align:"center",gap:"xs",className:Xt.headerRow},u),xe.default.createElement("div",{className:[Xt.chatInputContainer,U.length?Xt.columned:""].join(" ")},o&&xe.default.createElement("div",{className:Xt.documentsInput},xe.default.createElement(Ct.Group,{visibleFrom:"xs",gap:"xs"},xe.default.createElement(Xs,{onFilesAdd:he,uploadFormats:E}),p),U?.length>0&&xe.default.createElement("div",{className:Xt.imagesList},U.map(X=>xe.default.createElement("div",{key:X.fileName,className:Xt.previewImage},xe.default.createElement("img",{src:X.bytesBase64,alt:X.fileName}),xe.default.createElement(Ct.ActionIcon,{className:Xt.removeButton,color:"red.9",size:"xs",onClick:z(X.fileName)},xe.default.createElement(Xr.IconX,{size:16})))))),xe.default.createElement("div",{className:Xt.chatInputGroup},o&&xe.default.createElement(Ct.Menu,{shadow:"md",width:"content"},xe.default.createElement(Ct.Menu.Target,null,xe.default.createElement(Ct.ActionIcon,{size:"lg",variant:"subtle",hiddenFrom:"xs"},xe.default.createElement(Ct.Tooltip,{label:$("More..."),position:"right",withArrow:!0},xe.default.createElement(Xr.IconCirclePlus,{size:"24"})))),xe.default.createElement(Ct.Menu.Dropdown,null,xe.default.createElement(Xs,{onFilesAdd:he,uploadFormats:E}),p)),xe.default.createElement(Ct.Textarea,{ref:le,className:Xt.chatInput,placeholder:$("Type your message..."),value:M||"",autosize:!0,minRows:1,maxRows:7,onChange:De,onKeyDown:Ee,disabled:t}),I&&s?xe.default.createElement(Ct.Button,{onClick:I,disabled:t},xe.default.createElement(Xr.IconPlayerStopFilled,{size:24})," ",xe.default.createElement(Ct.Text,{visibleFrom:"md"},$("Stop"))):xe.default.createElement(Ct.Button,{onClick:ie,disabled:Te,className:I&&s?Xt.hidden:"",radius:"md"},xe.default.createElement(Xr.IconSend,{size:24})," ",xe.default.createElement(Ct.Text,{visibleFrom:"md",ml:"xs"},$("Send")))))))});var At=wt(require("react"),1),xC=require("@mantine/core"),js=require("@mantine/notifications");var DC=require("react-i18next");var Ut=wt(require("react"),1),Ht=require("@mantine/core"),AC=require("@mantine/hooks"),NC=require("@tabler/icons-react");var $d=wt(require("i18next"),1),CC=require("react-i18next"),RC=wt(require("i18next-browser-languagedetector"),1),IC=wt(Cc(),1);var hC={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 bC={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 TC={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 vC={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 Zs=["en","de","ru","zh"],Js="ui-language";function E3(e={}){return(0,IC.merge)({en:{translation:hC},de:{translation:bC},ru:{translation:TC},zh:{translation:vC}},e)}async function S3({lookupLocalStorage:e=Js,supportedLngs:t=Zs,fallbackLng:n="en",resources:a={}}={}){return $d.default.use(RC.default).use(CC.initReactI18next).init({resources:E3(a),fallbackLng:n,supportedLngs:t,interpolation:{escapeValue:!1},detection:{order:["localStorage","navigator","htmlTag"],lookupLocalStorage:e,caches:["localStorage"]}})}function Kd(e){return(typeof e=="string"?new Date(e):e).toLocaleDateString($d.default.language||"ru-RU",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}var yC=require("react-i18next"),Xd=({fileName:e,fileUrl:t,mimeType:n,createdAt:a,onOpenSource:o,sourceTitle:s,onClose:l})=>{let[d,{open:u,close:p}]=(0,AC.useDisclosure)(!1);(0,Ut.useEffect)(()=>{t&&u()},[t,u]);let E=(0,Ut.useCallback)(()=>{l(),p()},[l,p]),h=(0,Ut.useCallback)(()=>{o?.(),E()},[o,E]),{t:T}=(0,yC.useTranslation)();return Ut.default.createElement(Ht.Drawer,{size:"xl",opened:d,onClose:E,title:T("Image Preview")},t&&Ut.default.createElement(Ht.Stack,{gap:"md"},Ut.default.createElement(Ht.Image,{src:t,alt:e,fit:"contain",mah:"70vh"}),Ut.default.createElement(Ht.Group,{justify:"space-between"},Ut.default.createElement("div",null,Ut.default.createElement(Ht.Text,{size:"sm",fw:500},e),Ut.default.createElement(Ht.Text,{size:"xs",c:"dimmed"},a?Kd(a)+" \u2022":""," ",n)),o&&Ut.default.createElement(Ht.Group,{gap:"xs"},Ut.default.createElement(Ht.Tooltip,{label:T("Open image source")},Ut.default.createElement(Ht.ActionIcon,{variant:"light",onClick:h},Ut.default.createElement(NC.IconExternalLink,{size:16}))))),o&&Ut.default.createElement(Ht.Text,{size:"sm",c:"dimmed"},"From:"," ",Ut.default.createElement(Ht.Text,{span:!0,c:"blue",style:{cursor:"pointer"},onClick:h},s||T("source")))))};var OC=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
- `),Zd=At.default.memo(({messages:e,onMessageDeleted:t,onAddMessage:n,plugins:a=[],detailsPlugins:o=[],codePlugins:s,models:l=[]})=>{let{t:d}=(0,DC.useTranslation)(),u=(0,At.useRef)(null),[p,E]=(0,At.useState)(),[h,T]=(0,At.useState)(),[R,I]=(0,At.useState)(new Set),A=(0,At.useCallback)(Y=>I(q=>new Set(q).add(Y)),[]),D=(0,At.useCallback)(Y=>{I(q=>{let te=new Set(q);return te.delete(Y),te})},[]),M=()=>{E(void 0),T(void 0)},G=(0,At.useCallback)(Y=>{if(!Y.target)return;let q=["code-run-btn","code-copy-btn","code-download-btn","code-toggle-all","copy-message-btn","code-header","message-image","table-sort-btn","table-copy-csv-btn","table-download-csv-btn"],te=Y.target;for(let $ of q){let ie=te.closest(`.${$}`);if(ie){te=ie;break}}if(!te)return;let Q=te,le=$=>{let ie=$?.parentElement;ie.classList.contains("collapsed")?($.classList.remove("collapsed"),ie&&ie.classList.remove("collapsed")):($.classList.add("collapsed"),ie&&ie.classList.add("collapsed"))};if(Q.classList.contains("code-run-btn")||Q.classList.contains("code-download-btn")){let $=Q.dataset.lang,ie=Q.classList.contains("code-run-btn"),De=Q.closest(".code-header")?.parentElement?.querySelector(".code-data");if(De){let Te=decodeURIComponent(De.dataset.code||"").trim();if(!Te)return js.notifications.show({title:d("Error"),message:d("Code block is empty"),color:"red"});if(ie){if(!$)return js.notifications.show({title:d("Error"),message:d("Language is not specified for this code block"),color:"red"});let he=Q.closest('[id^="message-"]'),z=he?.id.replace("message-",""),X=z?e.find(je=>je.id===z):void 0,J=Q.closest("[data-linked-message-id]"),re=J?.dataset.linkedMessageId,Se=re?X?.linkedMessages?.find(je=>je.id===re):X,Ce=(J??he)?.querySelectorAll(".code-block"),Pe=Q.closest(".code-block"),Ue=Ce&&Pe?Array.from(Ce).indexOf(Pe):0,ze=Se?{messageId:Se.id,blockIndex:Ue,messageContent:Se.content}:void 0;s?.[$]?.execute(Te,$,ze)}else{let he=`code.${Fd($||"txt")}`,z=new Blob([Te],{type:"text/plain"}),X=URL.createObjectURL(z),J=document.createElement("a");J.href=X,J.download=he,J.click(),URL.revokeObjectURL(X)}}}else if(Q.classList.contains("code-copy-btn")){let $=Q.parentElement?.parentElement?.nextElementSibling?.querySelector(".code-data");if($){let De=decodeURIComponent($.dataset.code||"").trim();navigator.clipboard.writeText(De)}let ie=Q.querySelector(".copy-icon"),Ee=Q.querySelector(".check-icon");ie&&Ee&&(ie.style.display="none",Ee.style.display="block",setTimeout(()=>{ie.style.display="block",Ee.style.display="none"},2e3))}else if(Q.classList.contains("code-header"))le(Q);else if(Q.classList.contains("code-toggle-all"))u.current?.querySelectorAll(".code-header").forEach($=>{le($)});else if(Q.classList.contains("copy-message-btn")){if(Q.dataset.messageId){let $=Q.dataset.messageIndex,ie=Q.dataset.messageLinkedIndex,Ee=Q.dataset.messageId,De=$!=null?e[Number($)]:e.find(X=>X.id===Ee);ie!=null&&(De=De?.linkedMessages?.[Number(ie)]),Ud(De,"Message should exist to copy");let Te=(De.content||"").trim(),he=De.html||[];if(he.length&&he[0]){let X=new Blob([he.join("<br/>")],{type:"text/html"}),J=new Blob([Te],{type:"text/plain"});navigator.clipboard.write([new ClipboardItem({[X.type]:X,[J.type]:J})]).catch(re=>js.notifications.show({title:d("Error"),message:re.message||d("Failed to copy message"),color:"red"}))}else navigator.clipboard.writeText(Te);let z=Q.parentElement?.querySelector(".check-icon");z&&(Q.style.display="none",z.style.display="inline-block",setTimeout(()=>{Q.style.display="inline-block",z.style.display="none"},2e3))}}else if(Q.classList.contains("message-image")){let $=Q.dataset.fileName,ie=Q.src;E(ie),T($)}else if(Q.classList.contains("table-sort-btn")){let $=parseInt(Q.dataset.colIndex||"0"),ie=Q.closest("table");if(!ie)return;let Ee=ie.querySelector("tbody");if(!Ee)return;let Te=Q.dataset.sortDir==="asc"?"desc":"asc";ie.querySelectorAll("th.table-sort-btn").forEach(z=>{delete z.dataset.sortDir,z.classList.remove("sort-asc","sort-desc")}),Q.dataset.sortDir=Te,Q.classList.add(Te==="asc"?"sort-asc":"sort-desc");let he=Array.from(Ee.querySelectorAll("tr"));he.sort((z,X)=>{let J=z.querySelectorAll("td")[$]?.textContent||"",re=X.querySelectorAll("td")[$]?.textContent||"",Se=parseFloat(J),pe=parseFloat(re);return!isNaN(Se)&&!isNaN(pe)?Te==="asc"?Se-pe:pe-Se:Te==="asc"?J.localeCompare(re):re.localeCompare(J)}),he.forEach(z=>Ee.appendChild(z))}else if(Q.classList.contains("table-copy-csv-btn")){let $=Q.closest(".message-table");if(!$)return;navigator.clipboard.writeText(OC($));let ie=Q.querySelector(".copy-icon"),Ee=Q.querySelector(".check-icon");ie&&Ee&&(ie.style.display="none",Ee.style.display="block",setTimeout(()=>{ie.style.display="block",Ee.style.display="none"},2e3))}else if(Q.classList.contains("table-download-csv-btn")){let $=Q.closest(".message-table");if(!$)return;let ie=new Blob([OC($)],{type:"text/csv"}),Ee=URL.createObjectURL(ie),De=document.createElement("a");De.href=Ee,De.download="table.csv",De.click(),URL.revokeObjectURL(Ee)}},[e,s]),U=(0,At.useCallback)(Y=>At.default.createElement(At.default.Fragment,null,a.map((q,te)=>At.default.createElement(q,{key:te,message:Y,onAddMessage:n,onAction:A,onActionEnd:D,onMessageDeleted:t,disabled:R.has(Y.id)}))),[a,n,t,R,A,D]),W=(0,At.useCallback)(Y=>{let q=o.map(te=>te(Y)).filter(Vi);return q.length?q:null},[o]);return At.default.createElement(At.default.Fragment,null,At.default.createElement(xC.Stack,{gap:"sm",ref:u,onClick:G},e.map((Y,q)=>At.default.createElement($s,{key:Y.id,message:Y,index:q,disabled:R.has(Y.id),pluginsLoader:U,messageDetailsLoader:W,models:l,codePlugins:s}))),At.default.createElement(Xd,{fileName:h??"",fileUrl:p??"",onClose:M}))});var dt=wt(require("react"),1),tl=require("@mantine/core"),MC=require("@tabler/icons-react");var Xi=require("react");function el(e,t,n=0){let a=(0,Xi.useRef)(null),o=(0,Xi.useRef)(null);return(0,Xi.useEffect)(()=>{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}var yr=wt(require("react"),1),wC=require("@mantine/hooks"),Jd=(0,yr.createContext)(void 0),f3=({children:e})=>{let[t,n]=(0,wC.useLocalStorage)({key:"ui-theme",defaultValue:"light"});(0,yr.useEffect)(()=>{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(0,yr.useEffect)(()=>{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]),yr.default.createElement(Jd.Provider,{value:{colorScheme:t,setColorScheme:n,toggleColorScheme:a}},e)},h3=()=>{let e=(0,yr.useContext)(Jd);if(!e)throw new Error("useTheme must be used within a ThemeProvider");return e};var on=require("react");function b3(e){let[t,n]=(0,on.useState)([]),[a,o]=(0,on.useState)(!0),[s,l]=(0,on.useState)(null);(0,on.useEffect)(()=>{let I=new fa(e);return l(I),()=>{I.close()}},[e]);let d=(0,on.useCallback)(async()=>{if(s)try{let I=await s.getAllChats();n(I)}catch(I){console.error("Failed to load chats:",I)}finally{o(!1)}},[s]);(0,on.useEffect)(()=>{d()},[d]);let u=(0,on.useCallback)(async I=>{Vt.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=(0,on.useCallback)(async I=>{Vt.ok(s,"Database instance is not available"),await s.saveChat(I),await d()},[s,d]),E=(0,on.useCallback)(async I=>{Vt.ok(s,"Database instance is not available"),await s.deleteChat(I),await d()},[s,d]),h=(0,on.useCallback)(async(I,A)=>{let D=t.find(M=>M.id===I);D&&(Vt.ok(s,"Database instance is not available"),await s.saveChat({...D,title:A,updatedAt:new Date().toISOString()}),await d())},[t,s,d]),T=(0,on.useCallback)(async I=>{Vt.ok(s,"Database instance is not available"),await s.saveMessage(I)},[s]),R=(0,on.useCallback)(async I=>(Vt.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:T,getChatMessages:R}}var fn=require("react");function T3(e,t){let[n,a]=(0,fn.useState)([]),[o,s]=(0,fn.useState)(!0),[l,d]=(0,fn.useState)(null);(0,fn.useEffect)(()=>{let I=new fa(t);return d(I),()=>{I.close()}},[t]);let u=(0,fn.useCallback)(async()=>{if(!e){a([]),s(!1);return}try{Vt.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]);(0,fn.useEffect)(()=>{u()},[u]);let p=(0,fn.useCallback)(async I=>{if(!e)return;Vt.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=(0,fn.useCallback)(async I=>{Vt.ok(l,"Database instance is not available"),await l.saveMessage(I),a(A=>A.map(D=>D.id===I.id?I:D))},[l]),h=(0,fn.useCallback)(async I=>{Vt.ok(l,"Database instance is not available"),await l.deleteMessage(I),a(A=>A.filter(D=>D.id!==I))},[l]),T=(0,fn.useCallback)(async I=>{Vt.ok(l,"Database instance is not available"),await l.deleteMessages(I),a(A=>A.filter(D=>!I.includes(D.id)))},[l]),R=(0,fn.useCallback)(async()=>{if(!e)return;let I=n.map(A=>A.id);Vt.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:T,clearMessages:R,refreshMessages:u}}var jd=dt.default.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:T="chat"},R)=>{let[I,A]=(0,dt.useState)(!1),D=(0,dt.useRef)(null),M=(0,dt.useRef)(null),G=(0,dt.useCallback)(()=>{D.current?.scrollTo(0,D.current?.scrollHeight??0)},[D]);(0,dt.useImperativeHandle)(R,()=>({scrollToBottom:G}),[G]);let U=(0,dt.useCallback)(()=>{I||G()},[G,I]);(0,dt.useEffect)(()=>{if(h)U();else{let te=D.current;if(te){let{scrollTop:Q,scrollHeight:le,clientHeight:$}=te;le-Q-$<2||A(!0)}}},[e,U,h]);let W=(0,dt.useCallback)(te=>{let{scrollTop:Q,scrollHeight:le,clientHeight:$}=te.target;M.current&&clearTimeout(M.current),le-Q-$<2?A(!1):e?.length&&(u?M.current=setTimeout(()=>{A(!0)},100):A(!0))},[e?.length,u]),Y=(0,dt.useCallback)(()=>{A(!1),G()},[G]);(0,dt.useEffect)(()=>{p&&(A(!1),setTimeout(G,200))},[p,h]);let q=el(()=>o?.(),[o],200);return dt.default.createElement("div",{className:["katechat-messages-container",p?"container--load-completed":"",p&&e?.length===0?"container--empty":""].join(" ")},dt.default.createElement("div",{className:"katechat-messages-container-scroller",ref:D,onScroll:W},dt.default.createElement("div",{ref:q,id:`${T}-first-message`}),E&&dt.default.createElement(tl.Group,{justify:"center",align:"center",py:"xl"},dt.default.createElement(tl.Loader,null)),dt.default.createElement("div",{className:"katechat-messages-list"},e&&dt.default.createElement(Zd,{messages:e,onMessageDeleted:a,onAddMessage:n,models:t,plugins:s,detailsPlugins:l,codePlugins:d}))),dt.default.createElement("div",{className:["katechat-anchor-container",I?"container--visible":""].join(" ")},dt.default.createElement("div",{className:"katechat-anchor"},dt.default.createElement(MC.IconCircleChevronDown,{size:32,color:"teal",onClick:Y}))))});jd.displayName="ChatMessagesContainer";var ba=wt(require("react"),1),qn=require("@mantine/core"),LC=require("react-i18next"),v3=({isOpen:e,onClose:t,onConfirm:n,title:a,message:o,confirmLabel:s,cancelLabel:l,isLoading:d=!1})=>{let{t:u}=(0,LC.useTranslation)();return ba.default.createElement(qn.Modal,{opened:e,onClose:t,title:a||u("Confirm Deletion"),centered:!0},ba.default.createElement(qn.Stack,null,ba.default.createElement(qn.Text,{style:{wordBreak:"break-word"}},o||u("Are you sure you want to delete this item? This action cannot be undone.")),ba.default.createElement(qn.Group,{mt:"md",justify:"flex-end"},ba.default.createElement(qn.Button,{variant:"outline",onClick:t,disabled:d},l||u("Cancel")),ba.default.createElement(qn.Button,{color:"red",onClick:n,loading:d},s||u("Delete")))))};var Zr=wt(require("react"),1),Or=require("@mantine/core"),kC=require("@tabler/icons-react"),PC=require("react-i18next");var C3=({languages:e=Zs,size:t=20})=>{let{t:n,i18n:a}=(0,PC.useTranslation)(),o=s=>{a.changeLanguage(s),localStorage.setItem(Js,s)};return Zr.default.createElement(Or.Menu,{shadow:"md",width:150,position:"bottom-end"},Zr.default.createElement(Or.Menu.Target,null,Zr.default.createElement(Or.Tooltip,{label:n("language.label")},Zr.default.createElement(Or.ActionIcon,{variant:"subtle","aria-label":n("language.label")},Zr.default.createElement(kC.IconLanguage,{size:t})))),Zr.default.createElement(Or.Menu.Dropdown,null,e.map(s=>Zr.default.createElement(Or.Menu.Item,{key:s,onClick:()=>o(s),fw:a.language===s?700:400},n(`language.${s}`)))))};
451
+ `),Zd=At.default.memo(({messages:e,onMessageDeleted:t,onAddMessage:n,plugins:a=[],detailsPlugins:o=[],codePlugins:s,models:l=[]})=>{let{t:d}=(0,DC.useTranslation)(),u=(0,At.useRef)(null),[p,E]=(0,At.useState)(),[h,T]=(0,At.useState)(),[R,I]=(0,At.useState)(new Set),A=(0,At.useCallback)(Y=>I(q=>new Set(q).add(Y)),[]),D=(0,At.useCallback)(Y=>{I(q=>{let te=new Set(q);return te.delete(Y),te})},[]),M=()=>{E(void 0),T(void 0)},G=(0,At.useCallback)(Y=>{if(!Y.target)return;let q=["code-run-btn","code-copy-btn","code-download-btn","code-toggle-all","copy-message-btn","code-header","message-image","table-sort-btn","table-copy-csv-btn","table-download-csv-btn"],te=Y.target;for(let $ of q){let ie=te.closest(`.${$}`);if(ie){te=ie;break}}if(!te)return;let Q=te,le=$=>{let ie=$?.parentElement;ie.classList.contains("collapsed")?($.classList.remove("collapsed"),ie&&ie.classList.remove("collapsed")):($.classList.add("collapsed"),ie&&ie.classList.add("collapsed"))};if(Q.classList.contains("code-run-btn")||Q.classList.contains("code-download-btn")){let $=Q.dataset.lang,ie=Q.classList.contains("code-run-btn"),De=Q.closest(".code-header")?.parentElement?.querySelector(".code-data");if(De){let Te=decodeURIComponent(De.dataset.code||"").trim();if(!Te)return js.notifications.show({title:d("Error"),message:d("Code block is empty"),color:"red"});if(ie){if(!$)return js.notifications.show({title:d("Error"),message:d("Language is not specified for this code block"),color:"red"});let he=Q.closest('[id^="message-"]'),z=he?.id.replace("message-",""),X=z?e.find(je=>je.id===z):void 0,J=Q.closest("[data-linked-message-id]"),re=J?.dataset.linkedMessageId,Se=re?X?.linkedMessages?.find(je=>je.id===re):X,Ce=(J??he)?.querySelectorAll(".code-block"),Pe=Q.closest(".code-block"),Ue=Ce&&Pe?Array.from(Ce).indexOf(Pe):0,ze=Se?{messageId:Se.id,blockIndex:Ue,messageContent:Se.content}:void 0;s?.[$]?.execute(Te,$,ze)}else{let he=`code.${Fd($||"txt")}`,z=new Blob([Te],{type:"text/plain"}),X=URL.createObjectURL(z),J=document.createElement("a");J.href=X,J.download=he,J.click(),URL.revokeObjectURL(X)}}}else if(Q.classList.contains("code-copy-btn")){let $=Q.parentElement?.parentElement?.nextElementSibling?.querySelector(".code-data");if($){let De=decodeURIComponent($.dataset.code||"").trim();navigator.clipboard.writeText(De)}let ie=Q.querySelector(".copy-icon"),Ee=Q.querySelector(".check-icon");ie&&Ee&&(ie.style.display="none",Ee.style.display="block",setTimeout(()=>{ie.style.display="block",Ee.style.display="none"},2e3))}else if(Q.classList.contains("code-header"))le(Q);else if(Q.classList.contains("code-toggle-all"))u.current?.querySelectorAll(".code-header").forEach($=>{le($)});else if(Q.classList.contains("copy-message-btn")){if(Q.dataset.messageId){let $=Q.dataset.messageIndex,ie=Q.dataset.messageLinkedIndex,Ee=Q.dataset.messageId,De=$!=null?e[Number($)]:e.find(X=>X.id===Ee);ie!=null&&(De=De?.linkedMessages?.[Number(ie)]),Ud(De,"Message should exist to copy");let Te=(De.content||"").trim(),he=De.html||[];if(he.length&&he[0]){let X=new Blob([he.join("<br/>")],{type:"text/html"}),J=new Blob([Te],{type:"text/plain"});navigator.clipboard.write([new ClipboardItem({[X.type]:X,[J.type]:J})]).catch(re=>js.notifications.show({title:d("Error"),message:re.message||d("Failed to copy message"),color:"red"}))}else navigator.clipboard.writeText(Te);let z=Q.parentElement?.querySelector(".check-icon");z&&(Q.style.display="none",z.style.display="inline-block",setTimeout(()=>{Q.style.display="inline-block",z.style.display="none"},2e3))}}else if(Q.classList.contains("message-image")){let $=Q.dataset.fileName,ie=Q.src;E(ie),T($)}else if(Q.classList.contains("table-sort-btn")){let $=parseInt(Q.dataset.colIndex||"0"),ie=Q.closest("table");if(!ie)return;let Ee=ie.querySelector("tbody");if(!Ee)return;let Te=Q.dataset.sortDir==="asc"?"desc":"asc";ie.querySelectorAll("th.table-sort-btn").forEach(z=>{delete z.dataset.sortDir,z.classList.remove("sort-asc","sort-desc")}),Q.dataset.sortDir=Te,Q.classList.add(Te==="asc"?"sort-asc":"sort-desc");let he=Array.from(Ee.querySelectorAll("tr"));he.sort((z,X)=>{let J=z.querySelectorAll("td")[$]?.textContent||"",re=X.querySelectorAll("td")[$]?.textContent||"",Se=parseFloat(J),pe=parseFloat(re);return!isNaN(Se)&&!isNaN(pe)?Te==="asc"?Se-pe:pe-Se:Te==="asc"?J.localeCompare(re):re.localeCompare(J)}),he.forEach(z=>Ee.appendChild(z))}else if(Q.classList.contains("table-copy-csv-btn")){let $=Q.closest(".message-table");if(!$)return;navigator.clipboard.writeText(OC($));let ie=Q.querySelector(".copy-icon"),Ee=Q.querySelector(".check-icon");ie&&Ee&&(ie.style.display="none",Ee.style.display="block",setTimeout(()=>{ie.style.display="block",Ee.style.display="none"},2e3))}else if(Q.classList.contains("table-download-csv-btn")){let $=Q.closest(".message-table");if(!$)return;let ie=new Blob([OC($)],{type:"text/csv"}),Ee=URL.createObjectURL(ie),De=document.createElement("a");De.href=Ee,De.download="table.csv",De.click(),URL.revokeObjectURL(Ee)}},[e,s]),U=(0,At.useCallback)(Y=>At.default.createElement(At.default.Fragment,null,a.map((q,te)=>At.default.createElement(q,{key:te,message:Y,onAddMessage:n,onAction:A,onActionEnd:D,onMessageDeleted:t,disabled:R.has(Y.id)}))),[a,n,t,R,A,D]),W=(0,At.useCallback)(Y=>{let q=o.map(te=>te(Y)).filter(Vi);return q.length?q:null},[o]);return At.default.createElement(At.default.Fragment,null,At.default.createElement(xC.Stack,{gap:"sm",ref:u,onClick:G},e.map((Y,q)=>At.default.createElement($s,{key:Y.id,message:Y,index:q,disabled:R.has(Y.id),pluginsLoader:U,messageDetailsLoader:W,models:l,codePlugins:s}))),At.default.createElement(Xd,{fileName:h??"",fileUrl:p??"",onClose:M}))});var dt=wt(require("react"),1),tl=require("@mantine/core"),MC=require("@tabler/icons-react");var Xi=require("react");function el(e,t,n=0){let a=(0,Xi.useRef)(null),o=(0,Xi.useRef)(null);return(0,Xi.useEffect)(()=>{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}var yr=wt(require("react"),1),wC=require("@mantine/hooks"),Jd=(0,yr.createContext)(void 0),f3=({children:e})=>{let[t,n]=(0,wC.useLocalStorage)({key:"ui-theme",defaultValue:"light"});(0,yr.useEffect)(()=>{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(0,yr.useEffect)(()=>{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]),yr.default.createElement(Jd.Provider,{value:{colorScheme:t,setColorScheme:n,toggleColorScheme:a}},e)},h3=()=>{let e=(0,yr.useContext)(Jd);if(!e)throw new Error("useTheme must be used within a ThemeProvider");return e};var on=require("react");function b3(e){let[t,n]=(0,on.useState)([]),[a,o]=(0,on.useState)(!0),[s,l]=(0,on.useState)(null);(0,on.useEffect)(()=>{let I=new fa(e);return l(I),()=>{I.close()}},[e]);let d=(0,on.useCallback)(async()=>{if(s)try{let I=await s.getAllChats();n(I)}catch(I){console.error("Failed to load chats:",I)}finally{o(!1)}},[s]);(0,on.useEffect)(()=>{d()},[d]);let u=(0,on.useCallback)(async I=>{Vt.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=(0,on.useCallback)(async I=>{Vt.ok(s,"Database instance is not available"),await s.saveChat(I),await d()},[s,d]),E=(0,on.useCallback)(async I=>{Vt.ok(s,"Database instance is not available"),await s.deleteChat(I),await d()},[s,d]),h=(0,on.useCallback)(async(I,A)=>{let D=t.find(M=>M.id===I);D&&(Vt.ok(s,"Database instance is not available"),await s.saveChat({...D,title:A,updatedAt:new Date().toISOString()}),await d())},[t,s,d]),T=(0,on.useCallback)(async I=>{Vt.ok(s,"Database instance is not available"),await s.saveMessage(I)},[s]),R=(0,on.useCallback)(async I=>(Vt.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:T,getChatMessages:R}}var fn=require("react");function T3(e,t){let[n,a]=(0,fn.useState)([]),[o,s]=(0,fn.useState)(!0),[l,d]=(0,fn.useState)(null);(0,fn.useEffect)(()=>{let I=new fa(t);return d(I),()=>{I.close()}},[t]);let u=(0,fn.useCallback)(async()=>{if(!e){a([]),s(!1);return}try{Vt.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]);(0,fn.useEffect)(()=>{u()},[u]);let p=(0,fn.useCallback)(async I=>{if(!e)return;Vt.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=(0,fn.useCallback)(async I=>{Vt.ok(l,"Database instance is not available"),await l.saveMessage(I),a(A=>A.map(D=>D.id===I.id?I:D))},[l]),h=(0,fn.useCallback)(async I=>{Vt.ok(l,"Database instance is not available"),await l.deleteMessage(I),a(A=>A.filter(D=>D.id!==I))},[l]),T=(0,fn.useCallback)(async I=>{Vt.ok(l,"Database instance is not available"),await l.deleteMessages(I),a(A=>A.filter(D=>!I.includes(D.id)))},[l]),R=(0,fn.useCallback)(async()=>{if(!e)return;let I=n.map(A=>A.id);Vt.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:T,clearMessages:R,refreshMessages:u}}var jd=dt.default.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:T="chat"},R)=>{let[I,A]=(0,dt.useState)(!1),D=(0,dt.useRef)(null),M=(0,dt.useRef)(null),G=(0,dt.useCallback)(()=>{D.current?.scrollTo(0,D.current?.scrollHeight??0)},[D]);(0,dt.useImperativeHandle)(R,()=>({scrollToBottom:G}),[G]);let U=(0,dt.useCallback)(()=>{I||G()},[G,I]);(0,dt.useEffect)(()=>{if(h)U();else{let te=D.current;if(te){let{scrollTop:Q,scrollHeight:le,clientHeight:$}=te;le-Q-$<2||A(!0)}}},[e,U,h]);let W=(0,dt.useCallback)(te=>{let{scrollTop:Q,scrollHeight:le,clientHeight:$}=te.target;M.current&&clearTimeout(M.current),le-Q-$<2?A(!1):e?.length&&(u?M.current=setTimeout(()=>{A(!0)},100):A(!0))},[e?.length,u]),Y=(0,dt.useCallback)(()=>{A(!1),G()},[G]);(0,dt.useEffect)(()=>{p&&(A(!1),setTimeout(G,200))},[p,h]);let q=el(()=>o?.(),[o],200);return dt.default.createElement("div",{className:["katechat-messages-container",p?"container--load-completed":"",p&&e?.length===0?"container--empty":""].join(" ")},dt.default.createElement("div",{className:"katechat-messages-container-scroller",ref:D,onScroll:W},dt.default.createElement("div",{ref:q,id:`${T}-first-message`}),E&&dt.default.createElement(tl.Group,{justify:"center",align:"center",py:"xl"},dt.default.createElement(tl.Loader,null)),dt.default.createElement("div",{className:"katechat-messages-list"},e&&dt.default.createElement(Zd,{messages:e,onMessageDeleted:a,onAddMessage:n,models:t,plugins:s,detailsPlugins:l,codePlugins:d}))),dt.default.createElement("div",{className:["katechat-anchor-container",I?"container--visible":""].join(" ")},dt.default.createElement("div",{className:"katechat-anchor"},dt.default.createElement(MC.IconCircleChevronDown,{size:32,color:"teal",onClick:Y}))))});jd.displayName="ChatMessagesContainer";var ba=wt(require("react"),1),qn=require("@mantine/core"),LC=require("react-i18next"),v3=({isOpen:e,onClose:t,onConfirm:n,title:a,message:o,confirmLabel:s,cancelLabel:l,isLoading:d=!1})=>{let{t:u}=(0,LC.useTranslation)();return ba.default.createElement(qn.Modal,{opened:e,onClose:t,title:a||u("Confirm Deletion"),centered:!0},ba.default.createElement(qn.Stack,null,ba.default.createElement(qn.Text,{style:{wordBreak:"break-word"}},o||u("Are you sure you want to delete this item? This action cannot be undone.")),ba.default.createElement(qn.Group,{mt:"md",justify:"flex-end"},ba.default.createElement(qn.Button,{variant:"outline",onClick:t,disabled:d},l||u("Cancel")),ba.default.createElement(qn.Button,{color:"red",onClick:n,loading:d},s||u("Delete")))))};var Zr=wt(require("react"),1),Or=require("@mantine/core"),kC=require("@tabler/icons-react"),PC=require("react-i18next");var C3=({languages:e=Zs,size:t=20})=>{let{t:n,i18n:a}=(0,PC.useTranslation)(),o=s=>{a.changeLanguage(s),localStorage.setItem(Js,s)};return Zr.default.createElement(Or.Menu,{shadow:"md",width:150,position:"bottom-end"},Zr.default.createElement(Or.Menu.Target,null,Zr.default.createElement(Or.Tooltip,{label:n("language.label")},Zr.default.createElement(Or.ActionIcon,{variant:"subtle",radius:"xl","aria-label":n("language.label")},Zr.default.createElement(kC.IconLanguage,{size:t})))),Zr.default.createElement(Or.Menu.Dropdown,null,e.map(s=>Zr.default.createElement(Or.Menu.Item,{key:s,onClick:()=>o(s),fw:a.language===s?700:400},n(`language.${s}`)))))};
452
452
  /*! Bundled license information:
453
453
 
454
454
  lodash/lodash.js: