libre-webui 0.2.7 → 0.2.9
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/README.md +25 -16
- package/backend/dist/db.d.ts.map +1 -1
- package/backend/dist/db.js +15 -0
- package/backend/dist/db.js.map +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +15 -1
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/routes/plugins.d.ts.map +1 -1
- package/backend/dist/routes/plugins.js +122 -0
- package/backend/dist/routes/plugins.js.map +1 -1
- package/backend/dist/services/pluginCredentialsService.d.ts +46 -0
- package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -0
- package/backend/dist/services/pluginCredentialsService.js +175 -0
- package/backend/dist/services/pluginCredentialsService.js.map +1 -0
- package/backend/dist/services/pluginService.d.ts +7 -0
- package/backend/dist/services/pluginService.d.ts.map +1 -1
- package/backend/dist/services/pluginService.js +29 -19
- package/backend/dist/services/pluginService.js.map +1 -1
- package/frontend/dist/assets/index-C1Ba9uDt.js +25 -0
- package/frontend/dist/css/index-CdiWoduX.css +1 -0
- package/frontend/dist/index.html +4 -4
- package/frontend/dist/js/ArtifactContainer-BNTSGf96.js +23 -0
- package/frontend/dist/js/{ArtifactDemoPage-a78SI-li.js → ArtifactDemoPage-x98zuxsN.js} +1 -1
- package/frontend/dist/js/{ChatPage-B2zgVHii.js → ChatPage-BxamwHd3.js} +5 -5
- package/frontend/dist/js/ModelsPage-4CDKkZ0-.js +2 -0
- package/frontend/dist/js/PersonasPage-Df_20I2C.js +13 -0
- package/frontend/dist/js/UserManagementPage-CZc7OD7f.js +1 -0
- package/frontend/dist/js/{markdown-vendor-D-79K2xZ.js → markdown-vendor-DRtqGHm3.js} +1 -1
- package/frontend/dist/js/ui-vendor-BiDMn752.js +177 -0
- package/package.json +1 -1
- package/frontend/dist/assets/index-B7--cAul.js +0 -3
- package/frontend/dist/css/index-B1OjddR-.css +0 -1
- package/frontend/dist/js/ArtifactContainer-JjegrQBU.js +0 -23
- package/frontend/dist/js/ModelsPage-DT3HCDq0.js +0 -2
- package/frontend/dist/js/PersonasPage-CB_YxSs7.js +0 -13
- package/frontend/dist/js/UserManagementPage-DkARO8y3.js +0 -1
- package/frontend/dist/js/ui-vendor-VxSCY_bv.js +0 -177
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as k0,f as q0,m as u0,s as Cn,
|
|
1
|
+
import{o as k0,f as q0,m as u0,s as Cn,a as jn,c as Dn,v as Bn,S as In,j as d,M as En}from"./markdown-vendor-DRtqGHm3.js";import{R as Bt,r as R,c as Xt,b as Fn,a as qn,u as Rn}from"./router-vendor-B-t91v39.js";import{u as g0,c as K,O as On,t as Yt,a as pa,b as be,p as br,f as Ln,d as It,S as Pn,T as Hn,B as Ve,e as yr,g as J0,w as ge,h as wr}from"../assets/index-C1Ba9uDt.js";import{C as nt,H as fa,b as $n,e as z0,q as Gn,L as ga,i as va,a0 as Vn,V as Un,o as Et,a1 as Wn,t as xa,a2 as Xn,X as v0,s as Yn,d as kr,a3 as Z0,a4 as Kn,a5 as Jn,F as Zn,U as ba,J as ya,a6 as Qn,z as de,a7 as _n,N as es,B as ft,Z as Ft,k as ts,n as wa,a8 as ka,a9 as Sa,r as Ma,aa as Na,x as R0,ab as rs,c as as,I as ns}from"./ui-vendor-BiDMn752.js";import{A as ss}from"./ArtifactContainer-BNTSGf96.js";import"./react-vendor-N--QU9DW.js";import"./utils-vendor-DNzxLBGx.js";function is(r,e){const t=String(r);let a=t.indexOf(e),n=a,s=0,l=0;for(;a!==-1;)a===n?++s>l&&(l=s):s=1,n=a+e.length,a=t.indexOf(e,n);return l}function ls(){return{enter:{mathFlow:r,mathFlowFenceMeta:e,mathText:s},exit:{mathFlow:n,mathFlowFence:a,mathFlowFenceMeta:t,mathFlowValue:u,mathText:l,mathTextData:u}};function r(c){const p={type:"element",tagName:"code",properties:{className:["language-math","math-display"]},children:[]};this.enter({type:"math",meta:null,value:"",data:{hName:"pre",hChildren:[p]}},c)}function e(){this.buffer()}function t(){const c=this.resume(),p=this.stack[this.stack.length-1];k0(p.type==="math"),p.meta=c}function a(){this.data.mathFlowInside||(this.buffer(),this.data.mathFlowInside=!0)}function n(c){const p=this.resume().replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),f=this.stack[this.stack.length-1];k0(f.type==="math"),this.exit(c),f.value=p;const g=f.data.hChildren[0];k0(g.type==="element"),k0(g.tagName==="code"),g.children.push({type:"text",value:p}),this.data.mathFlowInside=void 0}function s(c){this.enter({type:"inlineMath",value:"",data:{hName:"code",hProperties:{className:["language-math","math-inline"]},hChildren:[]}},c),this.buffer()}function l(c){const p=this.resume(),f=this.stack[this.stack.length-1];k0(f.type==="inlineMath"),this.exit(c),f.value=p,f.data.hChildren.push({type:"text",value:p})}function u(c){this.config.enter.data.call(this,c),this.config.exit.data.call(this,c)}}function os(r){let e=(r||{}).singleDollarTextMath;return e==null&&(e=!0),a.peek=n,{unsafe:[{character:"\r",inConstruct:"mathFlowMeta"},{character:`
|
|
2
2
|
`,inConstruct:"mathFlowMeta"},{character:"$",after:e?void 0:"\\$",inConstruct:"phrasing"},{character:"$",inConstruct:"mathFlowMeta"},{atBreak:!0,character:"$",after:"\\$"}],handlers:{math:t,inlineMath:a}};function t(s,l,u,c){const p=s.value||"",f=u.createTracker(c),g="$".repeat(Math.max(is(p,"$")+1,2)),b=u.enter("mathFlow");let w=f.move(g);if(s.meta){const M=u.enter("mathFlowMeta");w+=f.move(u.safe(s.meta,{after:`
|
|
3
3
|
`,before:w,encode:["$"],...f.current()})),M()}return w+=f.move(`
|
|
4
4
|
`),p&&(w+=f.move(p+`
|
|
@@ -264,18 +264,18 @@ l0,-`+(t+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,
|
|
|
264
264
|
`,this.tokenRegex.lastIndex);return s===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=s+1,this.lex()}return new je(n,new ze(this,t,this.tokenRegex.lastIndex))}}class ll{constructor(e,t){e===void 0&&(e={}),t===void 0&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new q("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var t in e)e.hasOwnProperty(t)&&(e[t]==null?delete this.current[t]:this.current[t]=e[t])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,t,a){if(a===void 0&&(a=!1),a){for(var n=0;n<this.undefStack.length;n++)delete this.undefStack[n][e];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var s=this.undefStack[this.undefStack.length-1];s&&!s.hasOwnProperty(e)&&(s[e]=this.current[e])}t==null?delete this.current[e]:this.current[e]=t}}var ol=nn;m("\\noexpand",function(r){var e=r.popToken();return r.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});m("\\expandafter",function(r){var e=r.popToken();return r.expandOnce(!0),{tokens:[e],numArgs:0}});m("\\@firstoftwo",function(r){var e=r.consumeArgs(2);return{tokens:e[0],numArgs:0}});m("\\@secondoftwo",function(r){var e=r.consumeArgs(2);return{tokens:e[1],numArgs:0}});m("\\@ifnextchar",function(r){var e=r.consumeArgs(3);r.consumeSpaces();var t=r.future();return e[0].length===1&&e[0][0].text===t.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});m("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");m("\\TextOrMath",function(r){var e=r.consumeArgs(2);return r.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});var ea={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};m("\\char",function(r){var e=r.popToken(),t,a="";if(e.text==="'")t=8,e=r.popToken();else if(e.text==='"')t=16,e=r.popToken();else if(e.text==="`")if(e=r.popToken(),e.text[0]==="\\")a=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new q("\\char` missing argument");a=e.text.charCodeAt(0)}else t=10;if(t){if(a=ea[e.text],a==null||a>=t)throw new q("Invalid base-"+t+" digit "+e.text);for(var n;(n=ea[r.future().text])!=null&&n<t;)a*=t,a+=n,r.popToken()}return"\\@char{"+a+"}"});var hr=(r,e,t,a)=>{var n=r.consumeArg().tokens;if(n.length!==1)throw new q("\\newcommand's first argument must be a macro name");var s=n[0].text,l=r.isDefined(s);if(l&&!e)throw new q("\\newcommand{"+s+"} attempting to redefine "+(s+"; use \\renewcommand"));if(!l&&!t)throw new q("\\renewcommand{"+s+"} when command "+s+" does not yet exist; use \\newcommand");var u=0;if(n=r.consumeArg().tokens,n.length===1&&n[0].text==="["){for(var c="",p=r.expandNextToken();p.text!=="]"&&p.text!=="EOF";)c+=p.text,p=r.expandNextToken();if(!c.match(/^\s*[0-9]+\s*$/))throw new q("Invalid number of arguments: "+c);u=parseInt(c),n=r.consumeArg().tokens}return l&&a||r.macros.set(s,{tokens:n,numArgs:u}),""};m("\\newcommand",r=>hr(r,!1,!0,!1));m("\\renewcommand",r=>hr(r,!0,!1,!1));m("\\providecommand",r=>hr(r,!0,!0,!0));m("\\message",r=>{var e=r.consumeArgs(1)[0];return console.log(e.reverse().map(t=>t.text).join("")),""});m("\\errmessage",r=>{var e=r.consumeArgs(1)[0];return console.error(e.reverse().map(t=>t.text).join("")),""});m("\\show",r=>{var e=r.popToken(),t=e.text;return console.log(e,r.macros.get(t),t0[t],ne.math[t],ne.text[t]),""});m("\\bgroup","{");m("\\egroup","}");m("~","\\nobreakspace");m("\\lq","`");m("\\rq","'");m("\\aa","\\r a");m("\\AA","\\r A");m("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`©}");m("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");m("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}");m("ℬ","\\mathscr{B}");m("ℰ","\\mathscr{E}");m("ℱ","\\mathscr{F}");m("ℋ","\\mathscr{H}");m("ℐ","\\mathscr{I}");m("ℒ","\\mathscr{L}");m("ℳ","\\mathscr{M}");m("ℛ","\\mathscr{R}");m("ℭ","\\mathfrak{C}");m("ℌ","\\mathfrak{H}");m("ℨ","\\mathfrak{Z}");m("\\Bbbk","\\Bbb{k}");m("·","\\cdotp");m("\\llap","\\mathllap{\\textrm{#1}}");m("\\rlap","\\mathrlap{\\textrm{#1}}");m("\\clap","\\mathclap{\\textrm{#1}}");m("\\mathstrut","\\vphantom{(}");m("\\underbar","\\underline{\\text{#1}}");m("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');m("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}");m("\\ne","\\neq");m("≠","\\neq");m("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}");m("∉","\\notin");m("≘","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}");m("≙","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}");m("≚","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}");m("≛","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}");m("≝","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}");m("≞","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}");m("≟","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}");m("⟂","\\perp");m("‼","\\mathclose{!\\mkern-0.8mu!}");m("∌","\\notni");m("⌜","\\ulcorner");m("⌝","\\urcorner");m("⌞","\\llcorner");m("⌟","\\lrcorner");m("©","\\copyright");m("®","\\textregistered");m("️","\\textregistered");m("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');m("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');m("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');m("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');m("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");m("⋮","\\vdots");m("\\varGamma","\\mathit{\\Gamma}");m("\\varDelta","\\mathit{\\Delta}");m("\\varTheta","\\mathit{\\Theta}");m("\\varLambda","\\mathit{\\Lambda}");m("\\varXi","\\mathit{\\Xi}");m("\\varPi","\\mathit{\\Pi}");m("\\varSigma","\\mathit{\\Sigma}");m("\\varUpsilon","\\mathit{\\Upsilon}");m("\\varPhi","\\mathit{\\Phi}");m("\\varPsi","\\mathit{\\Psi}");m("\\varOmega","\\mathit{\\Omega}");m("\\substack","\\begin{subarray}{c}#1\\end{subarray}");m("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");m("\\boxed","\\fbox{$\\displaystyle{#1}$}");m("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");m("\\implies","\\DOTSB\\;\\Longrightarrow\\;");m("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");m("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");m("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");var ta={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};m("\\dots",function(r){var e="\\dotso",t=r.expandAfterFuture().text;return t in ta?e=ta[t]:(t.slice(0,4)==="\\not"||t in ne.math&&["bin","rel"].includes(ne.math[t].group))&&(e="\\dotsb"),e});var dr={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};m("\\dotso",function(r){var e=r.future().text;return e in dr?"\\ldots\\,":"\\ldots"});m("\\dotsc",function(r){var e=r.future().text;return e in dr&&e!==","?"\\ldots\\,":"\\ldots"});m("\\cdots",function(r){var e=r.future().text;return e in dr?"\\@cdots\\,":"\\@cdots"});m("\\dotsb","\\cdots");m("\\dotsm","\\cdots");m("\\dotsi","\\!\\cdots");m("\\dotsx","\\ldots\\,");m("\\DOTSI","\\relax");m("\\DOTSB","\\relax");m("\\DOTSX","\\relax");m("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");m("\\,","\\tmspace+{3mu}{.1667em}");m("\\thinspace","\\,");m("\\>","\\mskip{4mu}");m("\\:","\\tmspace+{4mu}{.2222em}");m("\\medspace","\\:");m("\\;","\\tmspace+{5mu}{.2777em}");m("\\thickspace","\\;");m("\\!","\\tmspace-{3mu}{.1667em}");m("\\negthinspace","\\!");m("\\negmedspace","\\tmspace-{4mu}{.2222em}");m("\\negthickspace","\\tmspace-{5mu}{.277em}");m("\\enspace","\\kern.5em ");m("\\enskip","\\hskip.5em\\relax");m("\\quad","\\hskip1em\\relax");m("\\qquad","\\hskip2em\\relax");m("\\tag","\\@ifstar\\tag@literal\\tag@paren");m("\\tag@paren","\\tag@literal{({#1})}");m("\\tag@literal",r=>{if(r.macros.get("\\df@tag"))throw new q("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});m("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");m("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");m("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");m("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");m("\\newline","\\\\\\relax");m("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var vn=O(Re["Main-Regular"][84][1]-.7*Re["Main-Regular"][65][1]);m("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+vn+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");m("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+vn+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");m("\\hspace","\\@ifstar\\@hspacer\\@hspace");m("\\@hspace","\\hskip #1\\relax");m("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");m("\\ordinarycolon",":");m("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");m("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');m("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');m("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');m("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');m("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');m("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');m("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');m("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');m("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');m("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');m("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');m("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');m("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');m("∷","\\dblcolon");m("∹","\\eqcolon");m("≔","\\coloneqq");m("≕","\\eqqcolon");m("⩴","\\Coloneqq");m("\\ratio","\\vcentcolon");m("\\coloncolon","\\dblcolon");m("\\colonequals","\\coloneqq");m("\\coloncolonequals","\\Coloneqq");m("\\equalscolon","\\eqqcolon");m("\\equalscoloncolon","\\Eqqcolon");m("\\colonminus","\\coloneq");m("\\coloncolonminus","\\Coloneq");m("\\minuscolon","\\eqcolon");m("\\minuscoloncolon","\\Eqcolon");m("\\coloncolonapprox","\\Colonapprox");m("\\coloncolonsim","\\Colonsim");m("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");m("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");m("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");m("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");m("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}");m("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");m("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");m("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");m("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");m("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");m("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");m("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");m("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");m("\\gvertneqq","\\html@mathml{\\@gvertneqq}{≩}");m("\\lvertneqq","\\html@mathml{\\@lvertneqq}{≨}");m("\\ngeqq","\\html@mathml{\\@ngeqq}{≱}");m("\\ngeqslant","\\html@mathml{\\@ngeqslant}{≱}");m("\\nleqq","\\html@mathml{\\@nleqq}{≰}");m("\\nleqslant","\\html@mathml{\\@nleqslant}{≰}");m("\\nshortmid","\\html@mathml{\\@nshortmid}{∤}");m("\\nshortparallel","\\html@mathml{\\@nshortparallel}{∦}");m("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{⊈}");m("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{⊉}");m("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{⊊}");m("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{⫋}");m("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{⊋}");m("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{⫌}");m("\\imath","\\html@mathml{\\@imath}{ı}");m("\\jmath","\\html@mathml{\\@jmath}{ȷ}");m("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}");m("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}");m("⟦","\\llbracket");m("⟧","\\rrbracket");m("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}");m("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}");m("⦃","\\lBrace");m("⦄","\\rBrace");m("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}");m("⦵","\\minuso");m("\\darr","\\downarrow");m("\\dArr","\\Downarrow");m("\\Darr","\\Downarrow");m("\\lang","\\langle");m("\\rang","\\rangle");m("\\uarr","\\uparrow");m("\\uArr","\\Uparrow");m("\\Uarr","\\Uparrow");m("\\N","\\mathbb{N}");m("\\R","\\mathbb{R}");m("\\Z","\\mathbb{Z}");m("\\alef","\\aleph");m("\\alefsym","\\aleph");m("\\Alpha","\\mathrm{A}");m("\\Beta","\\mathrm{B}");m("\\bull","\\bullet");m("\\Chi","\\mathrm{X}");m("\\clubs","\\clubsuit");m("\\cnums","\\mathbb{C}");m("\\Complex","\\mathbb{C}");m("\\Dagger","\\ddagger");m("\\diamonds","\\diamondsuit");m("\\empty","\\emptyset");m("\\Epsilon","\\mathrm{E}");m("\\Eta","\\mathrm{H}");m("\\exist","\\exists");m("\\harr","\\leftrightarrow");m("\\hArr","\\Leftrightarrow");m("\\Harr","\\Leftrightarrow");m("\\hearts","\\heartsuit");m("\\image","\\Im");m("\\infin","\\infty");m("\\Iota","\\mathrm{I}");m("\\isin","\\in");m("\\Kappa","\\mathrm{K}");m("\\larr","\\leftarrow");m("\\lArr","\\Leftarrow");m("\\Larr","\\Leftarrow");m("\\lrarr","\\leftrightarrow");m("\\lrArr","\\Leftrightarrow");m("\\Lrarr","\\Leftrightarrow");m("\\Mu","\\mathrm{M}");m("\\natnums","\\mathbb{N}");m("\\Nu","\\mathrm{N}");m("\\Omicron","\\mathrm{O}");m("\\plusmn","\\pm");m("\\rarr","\\rightarrow");m("\\rArr","\\Rightarrow");m("\\Rarr","\\Rightarrow");m("\\real","\\Re");m("\\reals","\\mathbb{R}");m("\\Reals","\\mathbb{R}");m("\\Rho","\\mathrm{P}");m("\\sdot","\\cdot");m("\\sect","\\S");m("\\spades","\\spadesuit");m("\\sub","\\subset");m("\\sube","\\subseteq");m("\\supe","\\supseteq");m("\\Tau","\\mathrm{T}");m("\\thetasym","\\vartheta");m("\\weierp","\\wp");m("\\Zeta","\\mathrm{Z}");m("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");m("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");m("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");m("\\bra","\\mathinner{\\langle{#1}|}");m("\\ket","\\mathinner{|{#1}\\rangle}");m("\\braket","\\mathinner{\\langle{#1}\\rangle}");m("\\Bra","\\left\\langle#1\\right|");m("\\Ket","\\left|#1\\right\\rangle");var xn=r=>e=>{var t=e.consumeArg().tokens,a=e.consumeArg().tokens,n=e.consumeArg().tokens,s=e.consumeArg().tokens,l=e.macros.get("|"),u=e.macros.get("\\|");e.macros.beginGroup();var c=g=>b=>{r&&(b.macros.set("|",l),n.length&&b.macros.set("\\|",u));var w=g;if(!g&&n.length){var M=b.future();M.text==="|"&&(b.popToken(),w=!0)}return{tokens:w?n:a,numArgs:0}};e.macros.set("|",c(!1)),n.length&&e.macros.set("\\|",c(!0));var p=e.consumeArg().tokens,f=e.expandTokens([...s,...p,...t]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}};m("\\bra@ket",xn(!1));m("\\bra@set",xn(!0));m("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");m("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");m("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");m("\\angln","{\\angl n}");m("\\blue","\\textcolor{##6495ed}{#1}");m("\\orange","\\textcolor{##ffa500}{#1}");m("\\pink","\\textcolor{##ff00af}{#1}");m("\\red","\\textcolor{##df0030}{#1}");m("\\green","\\textcolor{##28ae7b}{#1}");m("\\gray","\\textcolor{gray}{#1}");m("\\purple","\\textcolor{##9d38bd}{#1}");m("\\blueA","\\textcolor{##ccfaff}{#1}");m("\\blueB","\\textcolor{##80f6ff}{#1}");m("\\blueC","\\textcolor{##63d9ea}{#1}");m("\\blueD","\\textcolor{##11accd}{#1}");m("\\blueE","\\textcolor{##0c7f99}{#1}");m("\\tealA","\\textcolor{##94fff5}{#1}");m("\\tealB","\\textcolor{##26edd5}{#1}");m("\\tealC","\\textcolor{##01d1c1}{#1}");m("\\tealD","\\textcolor{##01a995}{#1}");m("\\tealE","\\textcolor{##208170}{#1}");m("\\greenA","\\textcolor{##b6ffb0}{#1}");m("\\greenB","\\textcolor{##8af281}{#1}");m("\\greenC","\\textcolor{##74cf70}{#1}");m("\\greenD","\\textcolor{##1fab54}{#1}");m("\\greenE","\\textcolor{##0d923f}{#1}");m("\\goldA","\\textcolor{##ffd0a9}{#1}");m("\\goldB","\\textcolor{##ffbb71}{#1}");m("\\goldC","\\textcolor{##ff9c39}{#1}");m("\\goldD","\\textcolor{##e07d10}{#1}");m("\\goldE","\\textcolor{##a75a05}{#1}");m("\\redA","\\textcolor{##fca9a9}{#1}");m("\\redB","\\textcolor{##ff8482}{#1}");m("\\redC","\\textcolor{##f9685d}{#1}");m("\\redD","\\textcolor{##e84d39}{#1}");m("\\redE","\\textcolor{##bc2612}{#1}");m("\\maroonA","\\textcolor{##ffbde0}{#1}");m("\\maroonB","\\textcolor{##ff92c6}{#1}");m("\\maroonC","\\textcolor{##ed5fa6}{#1}");m("\\maroonD","\\textcolor{##ca337c}{#1}");m("\\maroonE","\\textcolor{##9e034e}{#1}");m("\\purpleA","\\textcolor{##ddd7ff}{#1}");m("\\purpleB","\\textcolor{##c6b9fc}{#1}");m("\\purpleC","\\textcolor{##aa87ff}{#1}");m("\\purpleD","\\textcolor{##7854ab}{#1}");m("\\purpleE","\\textcolor{##543b78}{#1}");m("\\mintA","\\textcolor{##f5f9e8}{#1}");m("\\mintB","\\textcolor{##edf2df}{#1}");m("\\mintC","\\textcolor{##e0e5cc}{#1}");m("\\grayA","\\textcolor{##f6f7f7}{#1}");m("\\grayB","\\textcolor{##f0f1f2}{#1}");m("\\grayC","\\textcolor{##e3e5e6}{#1}");m("\\grayD","\\textcolor{##d6d8da}{#1}");m("\\grayE","\\textcolor{##babec2}{#1}");m("\\grayF","\\textcolor{##888d93}{#1}");m("\\grayG","\\textcolor{##626569}{#1}");m("\\grayH","\\textcolor{##3b3e40}{#1}");m("\\grayI","\\textcolor{##21242c}{#1}");m("\\kaBlue","\\textcolor{##314453}{#1}");m("\\kaGreen","\\textcolor{##71B307}{#1}");var bn={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class ul{constructor(e,t,a){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new ll(ol,t.macros),this.mode=a,this.stack=[]}feed(e){this.lexer=new _r(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var t,a,n;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;t=this.popToken(),{tokens:n,end:a}=this.consumeArg(["]"])}else({tokens:n,start:t,end:a}=this.consumeArg());return this.pushToken(new je("EOF",a.loc)),this.pushTokens(n),new je("",ze.range(t,a))}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var t=[],a=e&&e.length>0;a||this.consumeSpaces();var n=this.future(),s,l=0,u=0;do{if(s=this.popToken(),t.push(s),s.text==="{")++l;else if(s.text==="}"){if(--l,l===-1)throw new q("Extra }",s)}else if(s.text==="EOF")throw new q("Unexpected end of input in a macro argument, expected '"+(e&&a?e[u]:"}")+"'",s);if(e&&a)if((l===0||l===1&&e[u]==="{")&&s.text===e[u]){if(++u,u===e.length){t.splice(-u,u);break}}else u=0}while(l!==0||a);return n.text==="{"&&t[t.length-1].text==="}"&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:n,end:s}}consumeArgs(e,t){if(t){if(t.length!==e+1)throw new q("The length of delimiters doesn't match the number of args!");for(var a=t[0],n=0;n<a.length;n++){var s=this.popToken();if(a[n]!==s.text)throw new q("Use of the macro doesn't match its definition",s)}}for(var l=[],u=0;u<e;u++)l.push(this.consumeArg(t&&t[u+1]).tokens);return l}countExpansion(e){if(this.expansionCount+=e,this.expansionCount>this.settings.maxExpand)throw new q("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var t=this.popToken(),a=t.text,n=t.noexpand?null:this._getExpansion(a);if(n==null||e&&n.unexpandable){if(e&&n==null&&a[0]==="\\"&&!this.isDefined(a))throw new q("Undefined control sequence: "+a);return this.pushToken(t),!1}this.countExpansion(1);var s=n.tokens,l=this.consumeArgs(n.numArgs,n.delimiters);if(n.numArgs){s=s.slice();for(var u=s.length-1;u>=0;--u){var c=s[u];if(c.text==="#"){if(u===0)throw new q("Incomplete placeholder at end of macro body",c);if(c=s[--u],c.text==="#")s.splice(u+1,1);else if(/^[1-9]$/.test(c.text))s.splice(u,2,...l[+c.text-1]);else throw new q("Not a valid argument number",c)}}}return this.pushTokens(s),s.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new je(e)]):void 0}expandTokens(e){var t=[],a=this.stack.length;for(this.pushTokens(e);this.stack.length>a;)if(this.expandOnce(!0)===!1){var n=this.stack.pop();n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(n)}return this.countExpansion(t.length),t}expandMacroAsText(e){var t=this.expandMacro(e);return t&&t.map(a=>a.text).join("")}_getExpansion(e){var t=this.macros.get(e);if(t==null)return t;if(e.length===1){var a=this.lexer.catcodes[e];if(a!=null&&a!==13)return}var n=typeof t=="function"?t(this):t;if(typeof n=="string"){var s=0;if(n.indexOf("#")!==-1)for(var l=n.replace(/##/g,"");l.indexOf("#"+(s+1))!==-1;)++s;for(var u=new _r(n,this.settings),c=[],p=u.lex();p.text!=="EOF";)c.push(p),p=u.lex();c.reverse();var f={tokens:c,numArgs:s};return f}return n}isDefined(e){return this.macros.has(e)||t0.hasOwnProperty(e)||ne.math.hasOwnProperty(e)||ne.text.hasOwnProperty(e)||bn.hasOwnProperty(e)}isExpandable(e){var t=this.macros.get(e);return t!=null?typeof t=="string"||typeof t=="function"||!t.unexpandable:t0.hasOwnProperty(e)&&!t0[e].primitive}}var ra=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,W0=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9","ₐ":"a","ₑ":"e","ₕ":"h","ᵢ":"i","ⱼ":"j","ₖ":"k","ₗ":"l","ₘ":"m","ₙ":"n","ₒ":"o","ₚ":"p","ᵣ":"r","ₛ":"s","ₜ":"t","ᵤ":"u","ᵥ":"v","ₓ":"x","ᵦ":"β","ᵧ":"γ","ᵨ":"ρ","ᵩ":"ϕ","ᵪ":"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","¹":"1","²":"2","³":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9","ᴬ":"A","ᴮ":"B","ᴰ":"D","ᴱ":"E","ᴳ":"G","ᴴ":"H","ᴵ":"I","ᴶ":"J","ᴷ":"K","ᴸ":"L","ᴹ":"M","ᴺ":"N","ᴼ":"O","ᴾ":"P","ᴿ":"R","ᵀ":"T","ᵁ":"U","ⱽ":"V","ᵂ":"W","ᵃ":"a","ᵇ":"b","ᶜ":"c","ᵈ":"d","ᵉ":"e","ᶠ":"f","ᵍ":"g",ʰ:"h","ⁱ":"i",ʲ:"j","ᵏ":"k",ˡ:"l","ᵐ":"m",ⁿ:"n","ᵒ":"o","ᵖ":"p",ʳ:"r",ˢ:"s","ᵗ":"t","ᵘ":"u","ᵛ":"v",ʷ:"w",ˣ:"x",ʸ:"y","ᶻ":"z","ᵝ":"β","ᵞ":"γ","ᵟ":"δ","ᵠ":"ϕ","ᵡ":"χ","ᶿ":"θ"}),jt={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},aa={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};class ht{constructor(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new ul(e,t,this.mode),this.settings=t,this.leftrightDepth=0}expect(e,t){if(t===void 0&&(t=!0),this.fetch().text!==e)throw new q("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new je("}")),this.gullet.pushTokens(e);var a=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,a}parseExpression(e,t){for(var a=[];;){this.mode==="math"&&this.consumeSpaces();var n=this.fetch();if(ht.endOfExpression.indexOf(n.text)!==-1||t&&n.text===t||e&&t0[n.text]&&t0[n.text].infix)break;var s=this.parseAtom(t);if(s){if(s.type==="internal")continue}else break;a.push(s)}return this.mode==="text"&&this.formLigatures(a),this.handleInfixNodes(a)}handleInfixNodes(e){for(var t=-1,a,n=0;n<e.length;n++)if(e[n].type==="infix"){if(t!==-1)throw new q("only one infix operator per group",e[n].token);t=n,a=e[n].replaceWith}if(t!==-1&&a){var s,l,u=e.slice(0,t),c=e.slice(t+1);u.length===1&&u[0].type==="ordgroup"?s=u[0]:s={type:"ordgroup",mode:this.mode,body:u},c.length===1&&c[0].type==="ordgroup"?l=c[0]:l={type:"ordgroup",mode:this.mode,body:c};var p;return a==="\\\\abovefrac"?p=this.callFunction(a,[s,e[t],l],[]):p=this.callFunction(a,[s,l],[]),[p]}else return e}handleSupSubscript(e){var t=this.fetch(),a=t.text;this.consume(),this.consumeSpaces();var n;do{var s;n=this.parseGroup(e)}while(((s=n)==null?void 0:s.type)==="internal");if(!n)throw new q("Expected group after '"+a+"'",t);return n}formatUnsupportedCmd(e){for(var t=[],a=0;a<e.length;a++)t.push({type:"textord",mode:"text",text:e[a]});var n={type:"text",mode:this.mode,body:t},s={type:"color",mode:this.mode,color:this.settings.errorColor,body:[n]};return s}parseAtom(e){var t=this.parseGroup("atom",e);if(t?.type==="internal"||this.mode==="text")return t;for(var a,n;;){this.consumeSpaces();var s=this.fetch();if(s.text==="\\limits"||s.text==="\\nolimits"){if(t&&t.type==="op"){var l=s.text==="\\limits";t.limits=l,t.alwaysHandleSupSub=!0}else if(t&&t.type==="operatorname")t.alwaysHandleSupSub&&(t.limits=s.text==="\\limits");else throw new q("Limit controls must follow a math operator",s);this.consume()}else if(s.text==="^"){if(a)throw new q("Double superscript",s);a=this.handleSupSubscript("superscript")}else if(s.text==="_"){if(n)throw new q("Double subscript",s);n=this.handleSupSubscript("subscript")}else if(s.text==="'"){if(a)throw new q("Double superscript",s);var u={type:"textord",mode:this.mode,text:"\\prime"},c=[u];for(this.consume();this.fetch().text==="'";)c.push(u),this.consume();this.fetch().text==="^"&&c.push(this.handleSupSubscript("superscript")),a={type:"ordgroup",mode:this.mode,body:c}}else if(W0[s.text]){var p=ra.test(s.text),f=[];for(f.push(new je(W0[s.text])),this.consume();;){var g=this.fetch().text;if(!W0[g]||ra.test(g)!==p)break;f.unshift(new je(W0[g])),this.consume()}var b=this.subparse(f);p?n={type:"ordgroup",mode:"math",body:b}:a={type:"ordgroup",mode:"math",body:b}}else break}return a||n?{type:"supsub",mode:this.mode,base:t,sup:a,sub:n}:t}parseFunction(e,t){var a=this.fetch(),n=a.text,s=t0[n];if(!s)return null;if(this.consume(),t&&t!=="atom"&&!s.allowedInArgument)throw new q("Got function '"+n+"' with no arguments"+(t?" as "+t:""),a);if(this.mode==="text"&&!s.allowedInText)throw new q("Can't use function '"+n+"' in text mode",a);if(this.mode==="math"&&s.allowedInMath===!1)throw new q("Can't use function '"+n+"' in math mode",a);var{args:l,optArgs:u}=this.parseArguments(n,s);return this.callFunction(n,l,u,a,e)}callFunction(e,t,a,n,s){var l={funcName:e,parser:this,token:n,breakOnTokenText:s},u=t0[e];if(u&&u.handler)return u.handler(l,t,a);throw new q("No function handler for "+e)}parseArguments(e,t){var a=t.numArgs+t.numOptionalArgs;if(a===0)return{args:[],optArgs:[]};for(var n=[],s=[],l=0;l<a;l++){var u=t.argTypes&&t.argTypes[l],c=l<t.numOptionalArgs;(t.primitive&&u==null||t.type==="sqrt"&&l===1&&s[0]==null)&&(u="primitive");var p=this.parseGroupOfType("argument to '"+e+"'",u,c);if(c)s.push(p);else if(p!=null)n.push(p);else throw new q("Null argument, please report this as a bug")}return{args:n,optArgs:s}}parseGroupOfType(e,t,a){switch(t){case"color":return this.parseColorGroup(a);case"size":return this.parseSizeGroup(a);case"url":return this.parseUrlGroup(a);case"math":case"text":return this.parseArgumentGroup(a,t);case"hbox":{var n=this.parseArgumentGroup(a,"text");return n!=null?{type:"styling",mode:n.mode,body:[n],style:"text"}:null}case"raw":{var s=this.parseStringGroup("raw",a);return s!=null?{type:"raw",mode:"text",string:s.text}:null}case"primitive":{if(a)throw new q("A primitive argument cannot be optional");var l=this.parseGroup(e);if(l==null)throw new q("Expected group as "+e,this.fetch());return l}case"original":case null:case void 0:return this.parseArgumentGroup(a);default:throw new q("Unknown group type as "+e,this.fetch())}}consumeSpaces(){for(;this.fetch().text===" ";)this.consume()}parseStringGroup(e,t){var a=this.gullet.scanArgument(t);if(a==null)return null;for(var n="",s;(s=this.fetch()).text!=="EOF";)n+=s.text,this.consume();return this.consume(),a.text=n,a}parseRegexGroup(e,t){for(var a=this.fetch(),n=a,s="",l;(l=this.fetch()).text!=="EOF"&&e.test(s+l.text);)n=l,s+=n.text,this.consume();if(s==="")throw new q("Invalid "+t+": '"+a.text+"'",a);return a.range(n,s)}parseColorGroup(e){var t=this.parseStringGroup("color",e);if(t==null)return null;var a=/^(#[a-f0-9]{3,4}|#[a-f0-9]{6}|#[a-f0-9]{8}|[a-f0-9]{6}|[a-z]+)$/i.exec(t.text);if(!a)throw new q("Invalid color: '"+t.text+"'",t);var n=a[0];return/^[0-9a-f]{6}$/i.test(n)&&(n="#"+n),{type:"color-token",mode:this.mode,color:n}}parseSizeGroup(e){var t,a=!1;if(this.gullet.consumeSpaces(),!e&&this.gullet.future().text!=="{"?t=this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size"):t=this.parseStringGroup("size",e),!t)return null;!e&&t.text.length===0&&(t.text="0pt",a=!0);var n=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t.text);if(!n)throw new q("Invalid size: '"+t.text+"'",t);var s={number:+(n[1]+n[2]),unit:n[3]};if(!Aa(s))throw new q("Invalid unit: '"+s.unit+"'",t);return{type:"size",mode:this.mode,value:s,isBlank:a}}parseUrlGroup(e){this.gullet.lexer.setCatcode("%",13),this.gullet.lexer.setCatcode("~",12);var t=this.parseStringGroup("url",e);if(this.gullet.lexer.setCatcode("%",14),this.gullet.lexer.setCatcode("~",13),t==null)return null;var a=t.text.replace(/\\([#$%&~_^{}])/g,"$1");return{type:"url",mode:this.mode,url:a}}parseArgumentGroup(e,t){var a=this.gullet.scanArgument(e);if(a==null)return null;var n=this.mode;t&&this.switchMode(t),this.gullet.beginGroup();var s=this.parseExpression(!1,"EOF");this.expect("EOF"),this.gullet.endGroup();var l={type:"ordgroup",mode:this.mode,loc:a.loc,body:s};return t&&this.switchMode(n),l}parseGroup(e,t){var a=this.fetch(),n=a.text,s;if(n==="{"||n==="\\begingroup"){this.consume();var l=n==="{"?"}":"\\endgroup";this.gullet.beginGroup();var u=this.parseExpression(!1,l),c=this.fetch();this.expect(l),this.gullet.endGroup(),s={type:"ordgroup",mode:this.mode,loc:ze.range(a,c),body:u,semisimple:n==="\\begingroup"||void 0}}else if(s=this.parseFunction(t,e)||this.parseSymbol(),s==null&&n[0]==="\\"&&!bn.hasOwnProperty(n)){if(this.settings.throwOnError)throw new q("Undefined control sequence: "+n,a);s=this.formatUnsupportedCmd(n),this.consume()}return s}formLigatures(e){for(var t=e.length-1,a=0;a<t;++a){var n=e[a],s=n.text;s==="-"&&e[a+1].text==="-"&&(a+1<t&&e[a+2].text==="-"?(e.splice(a,3,{type:"textord",mode:"text",loc:ze.range(n,e[a+2]),text:"---"}),t-=2):(e.splice(a,2,{type:"textord",mode:"text",loc:ze.range(n,e[a+1]),text:"--"}),t-=1)),(s==="'"||s==="`")&&e[a+1].text===s&&(e.splice(a,2,{type:"textord",mode:"text",loc:ze.range(n,e[a+1]),text:s+s}),t-=1)}}parseSymbol(){var e=this.fetch(),t=e.text;if(/^\\verb[^a-zA-Z]/.test(t)){this.consume();var a=t.slice(5),n=a.charAt(0)==="*";if(n&&(a=a.slice(1)),a.length<2||a.charAt(0)!==a.slice(-1))throw new q(`\\verb assertion failed --
|
|
265
265
|
please report what input caused this bug`);return a=a.slice(1,-1),{type:"verb",mode:"text",body:a,star:n}}aa.hasOwnProperty(t[0])&&!ne[this.mode][t[0]]&&(this.settings.strict&&this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Accented Unicode text character "'+t[0]+'" used in math mode',e),t=aa[t[0]]+t.slice(1));var s=sl.exec(t);s&&(t=t.substring(0,s.index),t==="i"?t="ı":t==="j"&&(t="ȷ"));var l;if(ne[this.mode][t]){this.settings.strict&&this.mode==="math"&&Lt.indexOf(t)>=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var u=ne[this.mode][t].group,c=ze.range(e),p;if(Zs.hasOwnProperty(u)){var f=u;p={type:"atom",mode:this.mode,family:f,loc:c,text:t}}else p={type:u,mode:this.mode,loc:c,text:t};l=p}else if(t.charCodeAt(0)>=128)this.settings.strict&&(za(t.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'"'+(" ("+t.charCodeAt(0)+")"),e)),l={type:"textord",mode:"text",loc:ze.range(e),text:t};else return null;if(this.consume(),s)for(var g=0;g<s[0].length;g++){var b=s[0][g];if(!jt[b])throw new q("Unknown accent ' "+b+"'",e);var w=jt[b][this.mode]||jt[b].text;if(!w)throw new q("Accent "+b+" unsupported in "+this.mode+" mode",e);l={type:"accent",mode:this.mode,loc:ze.range(e),label:w,isStretchy:!1,isShifty:!0,base:l}}return l}}ht.endOfExpression=["}","\\endgroup","\\end","\\right","&"];var mr=function(e,t){if(!(typeof e=="string"||e instanceof String))throw new TypeError("KaTeX can only parse string typed expression");var a=new ht(e,t);delete a.gullet.macros.current["\\df@tag"];var n=a.parse();if(delete a.gullet.macros.current["\\current@color"],delete a.gullet.macros.current["\\color"],a.gullet.macros.get("\\df@tag")){if(!t.displayMode)throw new q("\\tag works only in display equations");n=[{type:"tag",mode:"text",body:n,tag:a.subparse([new je("\\df@tag")])}]}return n},yn=function(e,t,a){t.textContent="";var n=pr(e,a).toNode();t.appendChild(n)};typeof document<"u"&&document.compatMode!=="CSS1Compat"&&(typeof console<"u"&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."),yn=function(){throw new q("KaTeX doesn't work in quirks mode.")});var cl=function(e,t){var a=pr(e,t).toMarkup();return a},hl=function(e,t){var a=new Kt(t);return mr(e,a)},wn=function(e,t,a){if(a.throwOnError||!(e instanceof q))throw e;var n=S.makeSpan(["katex-error"],[new Ie(t)]);return n.setAttribute("title",e.toString()),n.setAttribute("style","color:"+a.errorColor),n},pr=function(e,t){var a=new Kt(t);try{var n=mr(e,a);return yi(n,e,a)}catch(s){return wn(s,e,a)}},dl=function(e,t){var a=new Kt(t);try{var n=mr(e,a);return wi(n,e,a)}catch(s){return wn(s,e,a)}},ml="0.16.27",pl={Span:D0,Anchor:Qt,SymbolNode:Ie,SvgNode:Xe,PathNode:a0,LineNode:Ot},na={version:ml,render:yn,renderToString:cl,ParseError:q,SETTINGS_SCHEMA:Y0,__parse:hl,__renderToDomTree:pr,__renderToHTMLTree:dl,__setFontMetrics:Gs,__defineSymbol:i,__defineFunction:P,__defineMacro:m,__domTree:pl};const fl={};function gl(r){const e=this,t=r||fl,a=e.data(),n=a.micromarkExtensions||(a.micromarkExtensions=[]),s=a.fromMarkdownExtensions||(a.fromMarkdownExtensions=[]),l=a.toMarkdownExtensions||(a.toMarkdownExtensions=[]);n.push(fs(t)),s.push(ls()),l.push(os(t))}const Dt={html:"http://www.w3.org/1999/xhtml",svg:"http://www.w3.org/2000/svg"};function vl(r,e){return kn(r,{})||{type:"root",children:[]}}function kn(r,e){const t=xl(r,e);return t&&e.afterTransform&&e.afterTransform(r,t),t}function xl(r,e){switch(r.nodeType){case 1:return kl(r,e);case 3:return yl(r);case 8:return wl(r);case 9:return sa(r,e);case 10:return bl();case 11:return sa(r,e);default:return}}function sa(r,e){return{type:"root",children:Sn(r,e)}}function bl(){return{type:"doctype"}}function yl(r){return{type:"text",value:r.nodeValue||""}}function wl(r){return{type:"comment",value:r.nodeValue||""}}function kl(r,e){const t=r.namespaceURI,a=t===Dt.svg?Cn:jn,n=t===Dt.html?r.tagName.toLowerCase():r.tagName,s=t===Dt.html&&n==="template"?r.content:r,l=r.getAttributeNames(),u={};let c=-1;for(;++c<l.length;)u[l[c]]=r.getAttribute(l[c])||"";return a(n,u,Sn(s,e))}function Sn(r,e){const t=r.childNodes,a=[];let n=-1;for(;++n<t.length;){const s=kn(t[n],e);s!==void 0&&a.push(s)}return a}new DOMParser;function Sl(r,e){const t=Ml(r);return vl(t)}function Ml(r){const e=document.createElement("template");return e.innerHTML=r,e.content}const ia=(function(r,e,t){const a=Dn(t);if(!r||!r.type||!r.children)throw new Error("Expected parent node");if(typeof e=="number"){if(e<0||e===Number.POSITIVE_INFINITY)throw new Error("Expected positive finite number as index")}else if(e=r.children.indexOf(e),e<0)throw new Error("Expected child node or index");for(;++e<r.children.length;)if(a(r.children[e],e,r))return r.children[e]}),h0=(function(r){if(r==null)return zl;if(typeof r=="string")return Tl(r);if(typeof r=="object")return Nl(r);if(typeof r=="function")return fr(r);throw new Error("Expected function, string, or array as `test`")});function Nl(r){const e=[];let t=-1;for(;++t<r.length;)e[t]=h0(r[t]);return fr(a);function a(...n){let s=-1;for(;++s<e.length;)if(e[s].apply(this,n))return!0;return!1}}function Tl(r){return fr(e);function e(t){return t.tagName===r}}function fr(r){return e;function e(t,a,n){return!!(Al(t)&&r.call(this,t,typeof a=="number"?a:void 0,n||void 0))}}function zl(r){return!!(r&&typeof r=="object"&&"type"in r&&r.type==="element"&&"tagName"in r&&typeof r.tagName=="string")}function Al(r){return r!==null&&typeof r=="object"&&"type"in r&&"tagName"in r}const la=/\n/g,oa=/[\t ]+/g,Ut=h0("br"),ua=h0(ql),Cl=h0("p"),ca=h0("tr"),jl=h0(["datalist","head","noembed","noframes","noscript","rp","script","style","template","title",Fl,Rl]),Mn=h0(["address","article","aside","blockquote","body","caption","center","dd","dialog","dir","dl","dt","div","figure","figcaption","footer","form,","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","legend","li","listing","main","menu","nav","ol","p","plaintext","pre","section","ul","xmp"]);function Dl(r,e){const t=e||{},a="children"in r?r.children:[],n=Mn(r),s=zn(r,{whitespace:t.whitespace||"normal"}),l=[];(r.type==="text"||r.type==="comment")&&l.push(...Tn(r,{breakBefore:!0,breakAfter:!0}));let u=-1;for(;++u<a.length;)l.push(...Nn(a[u],r,{whitespace:s,breakBefore:u?void 0:n,breakAfter:u<a.length-1?Ut(a[u+1]):n}));const c=[];let p;for(u=-1;++u<l.length;){const f=l[u];typeof f=="number"?p!==void 0&&f>p&&(p=f):f&&(p!==void 0&&p>-1&&c.push(`
|
|
266
266
|
`.repeat(p)||" "),p=-1,c.push(f))}return c.join("")}function Nn(r,e,t){return r.type==="element"?Bl(r,e,t):r.type==="text"?t.whitespace==="normal"?Tn(r,t):Il(r):[]}function Bl(r,e,t){const a=zn(r,t),n=r.children||[];let s=-1,l=[];if(jl(r))return l;let u,c;for(Ut(r)||ca(r)&&ia(e,r,ca)?c=`
|
|
267
|
-
`:Cl(r)?(u=2,c=2):Mn(r)&&(u=1,c=1);++s<n.length;)l=l.concat(Nn(n[s],r,{whitespace:a,breakBefore:s?void 0:u,breakAfter:s<n.length-1?Ut(n[s+1]):c}));return ua(r)&&ia(e,r,ua)&&l.push(" "),u&&l.unshift(u),c&&l.push(c),l}function Tn(r,e){const t=String(r.value),a=[],n=[];let s=0;for(;s<=t.length;){la.lastIndex=s;const c=la.exec(t),p=c&&"index"in c?c.index:t.length;a.push(El(t.slice(s,p).replace(/[\u061C\u200E\u200F\u202A-\u202E\u2066-\u2069]/g,""),s===0?e.breakBefore:!0,p===t.length?e.breakAfter:!0)),s=p+1}let l=-1,u;for(;++l<a.length;)a[l].charCodeAt(a[l].length-1)===8203||l<a.length-1&&a[l+1].charCodeAt(0)===8203?(n.push(a[l]),u=void 0):a[l]?(typeof u=="number"&&n.push(u),n.push(a[l]),u=0):(l===0||l===a.length-1)&&n.push(0);return n}function Il(r){return[String(r.value)]}function El(r,e,t){const a=[];let n=0,s;for(;n<r.length;){oa.lastIndex=n;const l=oa.exec(r);s=l?l.index:r.length,!n&&!s&&l&&!e&&a.push(""),n!==s&&a.push(r.slice(n,s)),n=l?s+l[0].length:s}return n!==s&&!t&&a.push(""),a.join(" ")}function zn(r,e){if(r.type==="element"){const t=r.properties||{};switch(r.tagName){case"listing":case"plaintext":case"xmp":return"pre";case"nobr":return"nowrap";case"pre":return t.wrap?"pre-wrap":"pre";case"td":case"th":return t.noWrap?"nowrap":e.whitespace;case"textarea":return"pre-wrap"}}return e.whitespace}function Fl(r){return!!(r.properties||{}).hidden}function ql(r){return r.tagName==="td"||r.tagName==="th"}function Rl(r){return r.tagName==="dialog"&&!(r.properties||{}).open}const Ol={},Ll=[];function Pl(r){const e=r||Ol;return function(t,a){Bn(t,"element",function(n,s){const l=Array.isArray(n.properties.className)?n.properties.className:Ll,u=l.includes("language-math"),c=l.includes("math-display"),p=l.includes("math-inline");let f=c;if(!u&&!c&&!p)return;let g=s[s.length-1],b=n;if(n.tagName==="code"&&u&&g&&g.type==="element"&&g.tagName==="pre"&&(b=g,g=s[s.length-2],f=!0),!g)return;const w=Dl(b,{whitespace:"pre"});let M;try{M=na.renderToString(w,{...e,displayMode:f,throwOnError:!0})}catch(D){const I=D,N=I.name.toLowerCase();a.message("Could not render math with KaTeX",{ancestors:[...s,n],cause:I,place:n.position,ruleId:N,source:"rehype-katex"});try{M=na.renderToString(w,{...e,displayMode:f,strict:"ignore",throwOnError:!1})}catch{M=[{type:"element",tagName:"span",properties:{className:["katex-error"],style:"color:"+(e.errorColor||"#cc0000"),title:String(D)},children:[{type:"text",value:w}]}]}}typeof M=="string"&&(M=Sl(M).children);const k=g.children.indexOf(b);return g.children.splice(k,1,...M),In})}}const Hl=r=>{const e=[];let t=r.replace(/```[\s\S]*?```|`[^`\n]+`/g,a=>(e.push(a),`__CODE_BLOCK_${e.length-1}__`));return t=t.replace(/\\\[([\s\S]*?)\\\]/g,(a,n)=>`$$${n}$$`),t=t.replace(/\\\(([\s\S]*?)\\\)/g,(a,n)=>`$${n}$`),e.forEach((a,n)=>{t=t.replace(`__CODE_BLOCK_${n}__`,a)}),t},$l=({content:r,className:e})=>{const{theme:t}=g0(),[a,n]=Bt.useState(null),s=Bt.useMemo(()=>Hl(r),[r]),l=async u=>{try{await navigator.clipboard.writeText(u),n(u),setTimeout(()=>n(null),2e3)}catch(c){console.error("Failed to copy text:",c)}};return d.jsx("div",{className:K("prose prose-sm max-w-none dark:prose-invert prose-gray","[&_.katex-display]:overflow-x-auto [&_.katex-display]:overflow-y-hidden [&_.katex-display]:py-2","[&_.katex]:text-inherit",e),children:d.jsx(En,{remarkPlugins:[gl],rehypePlugins:[Pl],components:{code({inline:u,className:c,children:p,...f}){const g=/language-(\w+)/.exec(c||""),b=String(p).replace(/\n$/,"");return!u&&g?d.jsxs("div",{className:"relative group my-4 overflow-hidden rounded-xl border border-gray-200 dark:border-dark-300 shadow-sm",children:[d.jsxs("div",{className:"flex items-center justify-between bg-gray-50 dark:bg-dark-100 px-4 py-3 border-b border-gray-200 dark:border-dark-300",children:[d.jsx("span",{className:"text-xs font-semibold text-gray-700 dark:text-dark-700 uppercase tracking-wide",children:g[1]}),d.jsx("button",{onClick:()=>l(b),className:"opacity-0 group-hover:opacity-100 transition-all duration-200 p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-dark-300 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-1",title:"Copy code",children:a===b?d.jsx(nt,{className:"h-4 w-4 text-success-600 dark:text-success-400"}):d.jsx(fa,{className:"h-4 w-4 text-gray-500 dark:text-dark-600"})})]}),d.jsx("div",{className:"overflow-x-auto",children:d.jsx(Hn,{language:g[1],isDark:t.mode==="dark",className:"!m-0 !rounded-none !border-none",children:b})})]}):d.jsx("code",{className:K("px-2 py-1 rounded-md bg-gray-100 dark:bg-dark-200 text-gray-800 dark:text-dark-800","font-mono text-sm border border-gray-200 dark:border-dark-300",c),...f,children:p})},pre({children:u,...c}){return d.jsx("pre",{...c,children:u})},p({children:u,...c}){return d.jsx("p",{className:"mb-4 last:mb-0 leading-relaxed",...c,children:u})},ul({children:u,...c}){return d.jsx("ul",{className:"list-disc list-inside mb-4 space-y-2 pl-4",...c,children:u})},ol({children:u,...c}){return d.jsx("ol",{className:"list-decimal list-inside mb-4 space-y-2 pl-4",...c,children:u})},li({children:u,...c}){return d.jsx("li",{className:"text-gray-700 dark:text-dark-700 leading-relaxed",...c,children:u})},blockquote({children:u,...c}){return d.jsx("blockquote",{className:"border-l-4 border-primary-400 dark:border-primary-500 bg-primary-25 dark:bg-primary-950/30 pl-4 py-3 my-4 rounded-r-lg italic text-gray-700 dark:text-dark-700",...c,children:u})},h1({children:u,...c}){return d.jsx("h1",{className:"text-2xl font-bold mb-4 mt-6 first:mt-0 text-gray-900 dark:text-dark-800 border-b border-gray-200 dark:border-dark-300 pb-2",...c,children:u})},h2({children:u,...c}){return d.jsx("h2",{className:"text-xl font-semibold mb-3 mt-6 first:mt-0 text-gray-900 dark:text-dark-800",...c,children:u})},h3({children:u,...c}){return d.jsx("h3",{className:"text-lg font-medium mb-3 mt-4 first:mt-0 text-gray-900 dark:text-dark-800",...c,children:u})}},children:s})})},Gl=({statistics:r,className:e=""})=>{const[t,a]=R.useState(!1),n=g=>{if(g==null)return"N/A";const b=g/1e6;return b<1e3?`${Math.round(b)}ms`:`${(b/1e3).toFixed(2)}s`},s=g=>g?`${g.toFixed(1)} t/s`:"N/A",l=r.prompt_eval_count||0,u=r.eval_count||0,c=l+u,p=n(r.total_duration),f=s(r.tokens_per_second);return d.jsxs("div",{className:`text-xs text-gray-500 dark:text-dark-500 mt-2 ${e}`,children:[d.jsxs("div",{className:"flex items-center gap-4 mb-1",children:[d.jsxs("span",{className:"flex items-center gap-1 text-gray-600 dark:text-dark-600",children:[d.jsx(Gn,{size:12,className:"text-primary-500"}),u," tokens"]}),d.jsx("span",{className:"text-gray-500 dark:text-dark-500",children:f}),d.jsx("span",{className:"text-gray-500 dark:text-dark-500",children:p}),r.model&&d.jsx("span",{className:"text-gray-400 dark:text-dark-400 bg-gray-100 dark:bg-dark-200 px-2 py-0.5 rounded-full truncate max-w-32 sm:max-w-48",title:r.model,children:r.model})]}),d.jsxs("button",{onClick:()=>a(!t),className:"flex items-center gap-1 text-gray-400 dark:text-dark-400 hover:text-gray-600 dark:hover:text-dark-600 transition-colors",children:[t?d.jsx(z0,{size:12}):d.jsx(Vn,{size:12}),d.jsx("span",{children:"Details"})]}),t&&d.jsxs("div",{className:"mt-2 p-3 bg-gray-50 dark:bg-dark-100 border border-gray-200 dark:border-dark-300 rounded-lg text-xs space-y-2",children:[d.jsxs("div",{className:"grid grid-cols-2 gap-x-4 gap-y-2",children:[d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Prompt tokens:"})," ",l]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Generated tokens:"})," ",u]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Total tokens:"})," ",c]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Speed:"})," ",f]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Prompt eval:"})," ",n(r.prompt_eval_duration)]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Generation:"})," ",n(r.eval_duration)]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Model load:"})," ",n(r.load_duration)]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Total time:"})," ",p]})]}),r.created_at&&d.jsxs("div",{className:"pt-2 border-t border-gray-200 dark:border-dark-300 text-gray-600 dark:text-dark-600",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Generated at:"})," ",new Date(r.created_at).toLocaleTimeString()]})]})]})};let S0=null,M0=null,X0=0;const Vl=300*1e3;async function Ul(){const r=Date.now();return S0!==null&&r-X0<Vl?S0:M0||(M0=(async()=>{try{const e=await Yt.getModels();return e.success&&e.data&&e.data.length>0?(S0=e.data,X0=r,e.data):(S0=[],X0=r,[])}catch{return S0=[],X0=r,[]}finally{M0=null}})(),M0)}const Wl=({text:r,className:e,size:t="sm"})=>{const{preferences:a}=g0(),[n,s]=R.useState(!1),[l,u]=R.useState(!1),[c,p]=R.useState(null),[f,g]=R.useState([]),[b,w]=R.useState(null),M=R.useRef(null);R.useEffect(()=>{let N=!0;return Ul().then(B=>{N&&(g(B),w(B.length>0))}),()=>{N=!1}},[]);const k=async()=>{if(!l){if(n&&M.current){M.current.pause(),M.current.currentTime=0,s(!1);return}u(!0),p(null);try{const N=a.ttsSettings,B=N?.model||f[0]?.model||"tts-1",L=N?.voice||f[0]?.config?.default_voice||"alloy",z=N?.speed||1,C=await Yt.generateBase64({model:B,input:r,voice:L,speed:z,response_format:"mp3"});if(!C.success||!C.data?.audio)throw new Error(C.message||"Failed to generate speech");const j=`data:${C.data.mimeType};base64,${C.data.audio}`,A=new Audio(j);M.current=A,A.onended=()=>{s(!1),M.current=null},A.onerror=()=>{p("Audio playback failed"),s(!1),M.current=null},await A.play(),s(!0)}catch(N){const B=N instanceof Error?N.message:"Failed to generate speech";p(B),console.error("TTS error:",N)}finally{u(!1)}}};if(R.useEffect(()=>()=>{M.current&&(M.current.pause(),M.current=null)},[]),b===!1||b===null)return null;const D={sm:"h-6 w-6 p-1",md:"h-8 w-8 p-1.5",lg:"h-10 w-10 p-2"},I={sm:"h-3.5 w-3.5",md:"h-4 w-4",lg:"h-5 w-5"};return d.jsx("button",{onClick:k,disabled:l||!r,title:c||(n?"Stop speaking":l?"Generating speech...":"Read aloud"),className:K("rounded-full transition-all duration-200","hover:bg-gray-100 dark:hover:bg-dark-200","focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-1","disabled:opacity-50 disabled:cursor-not-allowed",c?"text-red-500 dark:text-red-400":n?"text-primary-600 dark:text-primary-400 bg-primary-50 dark:bg-primary-900/20":"text-gray-500 dark:text-gray-400",D[t],e),children:l?d.jsx(ga,{className:K(I[t],"animate-spin")}):n?d.jsx(va,{className:I[t]}):c?d.jsx(Un,{className:I[t]}):d.jsx(Wn,{className:I[t]})})},Xl=[{regex:/```html\s*\n([\s\S]*?)\n```/gi,type:"html",getTitle:r=>Kl(r)||"HTML Document"},{regex:/```svg\s*\n([\s\S]*?)\n```/gi,type:"svg",getTitle:r=>"SVG Image"},{regex:/```(?:react|jsx)\s*\n([\s\S]*?)\n```/gi,type:"react",getTitle:r=>Jl(r)||"React Component"},{regex:/```json\s*\n([\s\S]*?)\n```/gi,type:"json",getTitle:r=>"JSON Data"},{regex:/```python\s*\n([\s\S]*?)\n```/gi,type:"code",language:"python",getTitle:r=>Zl(r)||"Python Code"},{regex:/```(?:javascript|js)\s*\n([\s\S]*?)\n```/gi,type:"code",language:"javascript",getTitle:r=>Ql(r)||"JavaScript Code"},{regex:/```css\s*\n([\s\S]*?)\n```/gi,type:"code",language:"css",getTitle:r=>"CSS Styles"},{regex:/```(\w+)\s*\n([\s\S]*?)\n```/gi,type:"code",getTitle:(r,e)=>`${e.toUpperCase()} Code`}],Yl=[{regex:/<artifact\s+type="([^"]+)"\s+title="([^"]+)"[^>]*>([\s\S]*?)<\/artifact>/gi,extract:r=>({type:r[1],title:r[2],content:r[3].trim()})},{regex:/<artifact\s+type="([^"]+)"[^>]*>([\s\S]*?)<\/artifact>/gi,extract:r=>({type:r[1],title:`${r[1].toUpperCase()} Artifact`,content:r[2].trim()})}];function ha(r){const e=document.createElement("div");return e.innerHTML=r,e.textContent||e.innerText||""}function Kl(r){const e=r.match(/<title[^>]*>(.*?)<\/title>/i);if(e)return ha(e[1]).trim();const t=r.match(/<h1[^>]*>(.*?)<\/h1>/i);return t?ha(t[1]).trim():null}function Jl(r){const e=r.match(/(?:function|const)\s+(\w+)/);if(e)return e[1];const t=r.match(/class\s+(\w+)/);return t?t[1]:null}function Zl(r){if(r.includes("def main("))return"Python Script";const e=r.match(/class\s+(\w+)/);if(e)return`${e[1]} Class`;const t=r.match(/def\s+(\w+)/);return t&&t[1]!=="__init__"?`${t[1]} Function`:null}function Ql(r){const e=r.match(/function\s+(\w+)/);if(e)return`${e[1]} Function`;const t=r.match(/(?:const|let)\s+(\w+)\s*=/);return t?t[1]:null}function da(r,e){if(e==="html")return/<[^>]+>/.test(r)&&r.trim().length>200;if(e==="svg")return/<svg[^>]*>/.test(r);if(e==="react")return/<[A-Z][^>]*>/.test(r)||/return\s*\(/.test(r);if(e==="json")try{return JSON.parse(r),r.trim().length>100}catch{return!1}if(e==="code"){const t=r.split(`
|
|
268
|
-
`).length,a=r.trim().length,n=/function|class|def |import |from |const |let |var |if |for |while |try |catch/.test(r);return(a>500||t>15)&&n}return!1}function ma(r){const e=[];let t=r;for(const a of Yl){let n;for(;(n=a.regex.exec(t))!==null;){const s=a.extract(n);if(da(s.content,s.type)){const l={id:`artifact-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,type:s.type,title:s.title,content:s.content,createdAt:Date.now(),updatedAt:Date.now()};e.push(l),t=t.replace(n[0],"")}}}for(const a of Xl){let n;for(a.regex.lastIndex=0;(n=a.regex.exec(t))!==null;){const s=n[1]||n[2],l=a.language||(n[1]&&n[2]?n[1]:void 0);if(da(s,a.type)){const u={id:`artifact-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,type:a.type,title:a.getTitle(s,l||"code"),content:s,language:l,createdAt:Date.now(),updatedAt:Date.now()};e.push(u),t=t.replace(n[0],"")}}}return{content:t.trim(),artifacts:e}}const Wt=({message:r,isStreaming:e=!1,className:t,isLastAssistantMessage:a=!1,onRegenerate:n})=>{const s=r.role==="user",l=r.role==="system",{preferences:u}=g0(),{user:c}=pa(),{setSystemMessage:p,getCurrentPersona:f}=be(),g=f(),[b,w]=R.useState(!1),[M,k]=R.useState(r.content),[D,I]=R.useState(null),[N,B]=R.useState(!1),[L,z]=R.useState(r.content),[C,j]=R.useState(!1),[A,T]=R.useState(r.artifacts||[]),[$,W]=R.useState(null),[G,Y]=R.useState(!1),[re,Q]=R.useState(!1),[ce,ye]=R.useState(!1),Z=R.useRef(null),ie=R.useRef(e),le=R.useRef(!1),we=async()=>{try{await navigator.clipboard.writeText(r.content),ye(!0),setTimeout(()=>ye(!1),2e3)}catch(te){console.error("Failed to copy message:",te)}};R.useEffect(()=>{if(!s&&!l&&r.content){const te=br(r.content);W(te.thinking);const ve=te.content;if(r.artifacts&&r.artifacts.length>0)z(ve),T(r.artifacts);else if(e)z(ve),T([]);else{const xe=ma(ve);z(xe.content),T(xe.artifacts)}}},[r.content,r.artifacts,s,l,e]),R.useEffect(()=>{if(!s&&!l&&r.content&&!e){const te=br(r.content);W(te.thinking);const ve=te.content;if(!r.artifacts||r.artifacts.length===0){const xe=ma(ve);z(xe.content),T(xe.artifacts)}}},[e,r.content,r.artifacts,s,l]),R.useEffect(()=>{const te=ie.current&&!e;return ie.current=e,te&&!le.current&&!s&&!l&&L&&u.ttsSettings?.enabled&&u.ttsSettings?.autoPlay&&(le.current=!0,(async()=>{Q(!0);try{const xe=await Yt.generateBase64({model:u.ttsSettings?.model||"tts-1",input:L,voice:u.ttsSettings?.voice||"alloy",speed:u.ttsSettings?.speed||1,response_format:"mp3"});if(xe.success&&xe.data?.audio){const dt=`data:${xe.data.mimeType};base64,${xe.data.audio}`,d0=new Audio(dt);Z.current=d0,d0.onended=()=>{Q(!1),Z.current=null},d0.onerror=()=>{Q(!1),Z.current=null},await d0.play()}}catch(xe){console.error("Auto-play TTS failed:",xe),Q(!1)}})()),()=>{Z.current&&(Z.current.pause(),Z.current=null)}},[e,s,l,L,u.ttsSettings]);const Ne=()=>l?"System":s?u.showUsername&&c?.username?c.username:"You":g?.name?g.name:r.model||"Assistant",i0=()=>{w(!0),k(r.content)},w0=async()=>{B(!0);try{p(M),w(!1),console.log("✅ System message updated:",M)}catch(te){console.error("Failed to save system message:",te)}finally{B(!1)}},Ze=()=>{w(!1),k(r.content)},I0=(te,ve=100)=>te.length<=ve?te:te.substring(0,ve)+"...",Qe=l&&r.content.length>100;return d.jsxs("div",{className:K("flex transition-colors group my-2",s?"justify-end":"justify-start",t),children:[d.jsxs("div",{className:K("flex gap-3 sm:gap-4",s?"flex-row-reverse max-w-[85%] sm:max-w-[75%]":l?"w-full":"max-w-[85%] sm:max-w-[75%]"),children:[!l&&d.jsx("div",{className:K("flex shrink-0 items-start justify-center rounded-full shadow-sm overflow-hidden mt-1",s?"h-8 w-8 bg-primary-600 ophelia:bg-[#9333ea] text-white":"h-8 w-8 bg-white dark:bg-dark-100 ophelia:bg-[#0a0a0a]"),children:s?c?.avatar?d.jsx("img",{src:c.avatar,alt:c.username,className:"w-full h-full object-cover"}):d.jsx(Et,{className:"h-4 w-4"}):g?.avatar?d.jsx("img",{src:g.avatar,alt:g.name||"Assistant",className:"w-full h-full object-cover"}):d.jsx("img",{src:"/logo-dark.png",alt:"Libre WebUI",className:"w-full h-full object-contain p-1"})}),d.jsxs("div",{className:K("flex-1 min-w-0 rounded-2xl sm:rounded-3xl p-4 sm:p-5",s?"bg-primary-600/90 dark:bg-primary-700/90 ophelia:bg-[#9333ea]/90 text-white":l?"bg-transparent p-2 py-3":"bg-white/95 dark:bg-dark-100/95 ophelia:bg-[#0a0a0a]/95 backdrop-blur-md shadow-sm border border-gray-200/50 dark:border-dark-300/50 ophelia:border-[#262626]/60"),children:[!l&&d.jsxs("div",{className:K("flex items-center gap-3 mb-2",s&&"flex-row-reverse"),children:[d.jsx("span",{className:K("text-sm font-semibold",s?"text-white/90":"text-gray-900 dark:text-dark-800 ophelia:text-[#fafafa]"),children:Ne()}),r.model&&!s&&g?.name&&d.jsx("span",{className:"text-xs text-gray-500 dark:text-dark-600 ophelia:text-[#737373] bg-gray-100 dark:bg-dark-200 ophelia:bg-[#121212] px-2 py-0.5 rounded-full truncate max-w-32 sm:max-w-48",title:r.model,children:r.model}),d.jsx("span",{className:K("text-xs",s?"text-white/60":"text-gray-400 dark:text-dark-500 ophelia:text-[#525252]"),children:On(r.timestamp)}),!s&&!l&&!e&&L&&d.jsx(Wl,{text:L,size:"sm",className:K("transition-opacity",re?"opacity-100 text-primary-600 dark:text-primary-400":"opacity-0 group-hover:opacity-100")}),!l&&!e&&d.jsx("button",{onClick:we,className:"p-1 rounded hover:bg-gray-100 dark:hover:bg-dark-200 ophelia:hover:bg-[rgba(147,51,234,0.2)] transition-opacity opacity-0 group-hover:opacity-100",title:ce?"Copied!":"Copy message",children:ce?d.jsx(nt,{className:"h-3.5 w-3.5 text-green-500 dark:text-green-400"}):d.jsx(fa,{className:"h-3.5 w-3.5 text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3]"})}),!s&&!l&&!e&&a&&n&&d.jsx("button",{onClick:n,className:"p-1 rounded hover:bg-gray-100 dark:hover:bg-dark-200 ophelia:hover:bg-[rgba(147,51,234,0.2)] transition-opacity opacity-0 group-hover:opacity-100",title:"Regenerate response",children:d.jsx(Xn,{className:"h-3.5 w-3.5 text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3]"})})]}),d.jsxs("div",{className:K(s?"text-white":"text-gray-700 dark:text-dark-700 ophelia:text-[#e5e5e5]"),children:[r.images&&r.images.length>0&&d.jsx("div",{className:"mb-3 grid grid-cols-2 sm:grid-cols-3 gap-2 max-w-lg",children:r.images.map((te,ve)=>d.jsx("div",{className:"aspect-square rounded-lg overflow-hidden bg-gray-100 dark:bg-gray-800 border border-gray-200 dark:border-gray-700",children:d.jsx("img",{src:te,alt:`Uploaded image ${ve+1}`,className:"w-full h-full object-cover cursor-pointer hover:opacity-90 transition-opacity",onClick:()=>I(te)})},ve))}),s?d.jsx("p",{className:"whitespace-pre-wrap leading-relaxed",children:r.content}):l?d.jsxs("div",{className:"bg-gray-50/30 dark:bg-dark-50/30 ophelia:bg-[rgba(5,5,5,0.8)] rounded-md p-2 border border-gray-100/50 dark:border-dark-200/50 ophelia:border-[rgba(26,26,26,0.5)] relative z-0",children:[d.jsxs("div",{className:"text-xs font-medium mb-1 text-gray-500 dark:text-gray-400 ophelia:text-[#737373] flex items-center justify-between",children:[d.jsxs("div",{className:"flex items-center gap-1",children:[d.jsx(xa,{className:"h-2.5 w-2.5 opacity-50"}),"System"]}),d.jsx("div",{className:"flex items-center gap-1",children:b?d.jsxs(d.Fragment,{children:[d.jsx("button",{onClick:w0,disabled:N,className:"p-1 hover:bg-gray-100 dark:hover:bg-dark-200 ophelia:hover:bg-[rgba(147,51,234,0.2)] rounded transition-colors disabled:opacity-50",title:"Save changes",children:d.jsx(Yn,{className:"h-3 w-3 text-green-600 dark:text-green-400 ophelia:text-[#a855f7]"})}),d.jsx("button",{onClick:Ze,disabled:N,className:"p-1 hover:bg-gray-100 dark:hover:bg-dark-200 ophelia:hover:bg-[rgba(239,68,68,0.15)] rounded transition-colors disabled:opacity-50",title:"Cancel editing",children:d.jsx(v0,{className:"h-3 w-3 text-red-600 dark:text-red-400 ophelia:text-[#f87171]"})})]}):d.jsx("button",{onClick:i0,className:"p-1 hover:bg-gray-100 dark:hover:bg-dark-200 ophelia:hover:bg-[rgba(147,51,234,0.2)] rounded transition-colors",title:"Edit system message",children:d.jsx(Kn,{className:"h-3 w-3 text-gray-600 dark:text-gray-400 ophelia:text-[#a3a3a3] ophelia:hover:text-[#c084fc]"})})})]}),b?d.jsx("textarea",{value:M,onChange:te=>k(te.target.value),className:"w-full min-h-[100px] p-3 text-sm text-gray-900 dark:text-gray-100 ophelia:text-[#fafafa] bg-gray-50 dark:bg-dark-50 ophelia:bg-[#0a0a0a] border border-gray-200 dark:border-dark-300 ophelia:border-[#262626] rounded-lg resize-none focus:outline-none focus:ring-2 focus:ring-primary-500 dark:focus:ring-primary-400 ophelia:focus:ring-[#a855f7] focus:border-transparent",placeholder:"Enter your system message...",disabled:N}):d.jsxs("div",{children:[d.jsx("p",{className:"whitespace-pre-wrap leading-relaxed text-xs text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3]",children:C?r.content:I0(r.content)}),Qe&&d.jsx("button",{onClick:()=>j(!C),className:"mt-1 flex items-center gap-1 text-xs text-gray-400 dark:text-gray-500 ophelia:text-[#737373] hover:text-primary-600 dark:hover:text-primary-400 ophelia:hover:text-[#c084fc] transition-colors",children:C?d.jsxs(d.Fragment,{children:[d.jsx(kr,{className:"h-3 w-3"}),"Show less"]}):d.jsxs(d.Fragment,{children:[d.jsx(z0,{className:"h-3 w-3"}),"Show more"]})})]})]}):d.jsxs("div",{className:"relative",children:[$&&d.jsxs("div",{className:"mb-3",children:[d.jsxs("button",{onClick:()=>Y(!G),className:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3] hover:text-primary-600 dark:hover:text-primary-400 ophelia:hover:text-[#c084fc] transition-colors",children:[d.jsx(Z0,{className:"h-4 w-4"}),d.jsx("span",{className:"font-medium",children:"Thinking"}),G?d.jsx(kr,{className:"h-4 w-4"}):d.jsx(z0,{className:"h-4 w-4"})]}),G&&d.jsx("div",{className:"mt-2 p-3 bg-gray-50 dark:bg-dark-100 ophelia:bg-[#0a0a0a] rounded-lg border border-gray-200 dark:border-dark-300 ophelia:border-[#1a1a1a]",children:d.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-300 ophelia:text-[#a3a3a3] whitespace-pre-wrap leading-relaxed",children:$})})]}),d.jsx($l,{content:L}),e&&d.jsx("div",{className:"inline-block w-2 h-5 bg-primary-500 animate-pulse ml-1 rounded-sm"})]}),!s&&!l&&A.length>0&&d.jsx("div",{className:"mt-4",children:d.jsx($n,{artifacts:A})}),!s&&!l&&r.statistics&&d.jsx("div",{className:"mt-3",children:d.jsx(Gl,{statistics:r.statistics})})]})]})]}),D&&Xt.createPortal(d.jsxs("div",{className:"fixed inset-0 z-[9999] flex items-center justify-center bg-black/80 backdrop-blur-sm",onClick:()=>I(null),children:[d.jsx("button",{className:"absolute top-6 right-6 p-3 bg-white/20 hover:bg-white/40 rounded-full text-white transition-all shadow-lg border border-white/30",onClick:te=>{te.stopPropagation(),I(null)},children:d.jsx(v0,{className:"h-7 w-7"})}),d.jsx("img",{src:D,alt:"Full size image",className:"max-w-[90vw] max-h-[90vh] object-contain rounded-lg shadow-2xl",onClick:te=>te.stopPropagation()})]}),document.body)]})},_l=({messages:r,isStreaming:e=!1,streamingMessage:t,streamingMessageId:a,isLastAssistantMessage:n=!1,onRegenerate:s,onSelectBranch:l,className:u})=>{if(r.length===1){const c=r[0],p=e&&a===c.id,f=p&&t?{...c,content:t}:c;return d.jsx(Wt,{message:f,isStreaming:p,isLastAssistantMessage:n,onRegenerate:s,className:u})}return d.jsxs("div",{className:K("relative py-1",u),children:[d.jsxs("div",{className:"flex items-center gap-1.5 px-4 pb-2 text-[10px] text-gray-400 dark:text-gray-500 ophelia:text-[#525252]",children:[d.jsx(Jn,{className:"h-3 w-3"}),d.jsxs("span",{children:[r.length," variants"]})]}),d.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3 px-4",children:r.map((c,p)=>{const f=c.isActive!==!1,g=e&&a===c.id,b=g&&t?{...c,content:t}:c;return d.jsxs("div",{className:K("relative rounded-lg overflow-hidden transition-all duration-200","border shadow-sm",f||g?"border-primary-300 dark:border-primary-600 ophelia:border-[#7c3aed] shadow-primary-100 dark:shadow-primary-900/20 ophelia:shadow-[#9333ea]/10":"border-gray-200 dark:border-dark-300 ophelia:border-[#262626] hover:border-gray-300 dark:hover:border-dark-400 ophelia:hover:border-[#3f3f46]",!f&&!g&&"cursor-pointer hover:shadow-md"),onClick:()=>!f&&!g&&l?.(c.id),children:[d.jsxs("div",{className:K("flex items-center justify-between px-2.5 py-1 text-[11px]",f||g?"bg-primary-50/80 dark:bg-primary-900/20 ophelia:bg-[#9333ea]/10 text-primary-600 dark:text-primary-400 ophelia:text-[#c084fc]":"bg-gray-50/80 dark:bg-dark-100/80 ophelia:bg-[#121212]/80 text-gray-500 dark:text-gray-500 ophelia:text-[#737373]"),children:[d.jsxs("div",{className:"flex items-center gap-1.5",children:[d.jsx("span",{className:"font-medium",children:p+1}),g&&d.jsx("span",{className:"text-[10px] opacity-70 animate-pulse",children:"generating..."})]}),f&&!g&&d.jsx(nt,{className:"h-3 w-3"}),!f&&!g&&d.jsx("span",{className:"text-[10px] opacity-50",children:"select"})]}),d.jsx("div",{className:K("bg-white dark:bg-dark-50 ophelia:bg-[#0a0a0a]",!f&&!g&&"opacity-80"),children:d.jsx(Wt,{message:b,isStreaming:g,isLastAssistantMessage:n&&(f||g),onRegenerate:f&&!e?s:void 0,className:"!bg-transparent !p-3 !text-sm"})})]},c.id)})})]})},e1=({messages:r,streamingMessage:e,streamingMessageId:t,isStreaming:a=!1,className:n,onRegenerate:s,onSelectBranch:l})=>{const u=R.useRef(null),c=R.useRef(),p=R.useRef(null),f=R.useRef(!1),[g,b]=R.useState(!1),w=R.useMemo(()=>{const B=[],L=new Set;console.log("[ChatMessages] Grouping messages:",r.map(C=>({id:C.id?.substring(0,8),role:C.role,parentId:C.parentId?.substring(0,8),branchIndex:C.branchIndex,isActive:C.isActive})));const z=[...r].sort((C,j)=>C.role==="system"&&j.role!=="system"?-1:j.role==="system"&&C.role!=="system"?1:C.parentId===j.parentId?(C.branchIndex||0)-(j.branchIndex||0):C.timestamp-j.timestamp);for(const C of z){if(L.has(C.id))continue;const j=C.parentId;if(j){const A=B.findIndex(T=>T.id===j);if(A>=0)B[A].messages.push(C);else{const T=r.find($=>$.id===j);T&&!L.has(j)?(B.push({id:j,messages:[T,C],messageIndex:B.length}),L.add(j)):B.push({id:C.id,messages:[C],messageIndex:B.length})}L.add(C.id)}else{const A=r.filter(T=>T.parentId===C.id);A.length>0?(B.push({id:C.id,messages:[C,...A],messageIndex:B.length}),L.add(C.id),A.forEach(T=>L.add(T.id))):(B.push({id:C.id,messages:[C],messageIndex:B.length}),L.add(C.id))}}return B.sort((C,j)=>{const A=C.messages[0],T=j.messages[0];return A.role==="system"&&T.role!=="system"?-1:T.role==="system"&&A.role!=="system"?1:A.timestamp-T.timestamp})},[r]),M=R.useCallback((B=!1)=>{f.current&&!B||u.current?.scrollIntoView({behavior:"smooth"})},[]),k=R.useCallback(()=>{const B=p.current;if(!B)return;const{scrollTop:L,scrollHeight:z,clientHeight:C}=B,A=z-L-C<100;f.current=!A,b(!A&&r.length>0)},[r.length]),D=R.useRef(r.length);if(R.useEffect(()=>{r.length>D.current&&!f.current&&M(),D.current=r.length},[r.length,M]),R.useEffect(()=>{a&&e&&!f.current&&requestAnimationFrame(()=>{const B=p.current;B&&(B.scrollTop=B.scrollHeight)})},[a,e]),R.useEffect(()=>{const B=c.current;return()=>{B&&clearTimeout(B)}},[]),r.length===0&&!a)return d.jsx("div",{className:K("flex-1 flex items-center justify-center p-4 sm:p-8",n),children:d.jsxs("div",{className:"text-center text-gray-500 dark:text-dark-600 max-w-md",children:[d.jsx("div",{className:"text-5xl sm:text-7xl mb-4 sm:mb-6 opacity-60",children:"💬"}),d.jsx("h3",{className:"text-lg sm:text-xl font-semibold mb-2 sm:mb-3 text-gray-700 dark:text-dark-700",children:"Start a conversation"}),d.jsx("p",{className:"text-sm leading-relaxed px-4",children:"Send a message to begin chatting with your AI assistant. Ask questions, get help with code, or have a natural conversation."})]})});let I=-1;for(let B=w.length-1;B>=0;B--)if(w[B].messages.some(L=>L.role==="assistant")){I=B;break}const N=()=>{f.current=!1,u.current?.scrollIntoView({behavior:"smooth"}),b(!1)};return d.jsxs("div",{ref:p,onScroll:k,className:K("relative flex-1 overflow-y-auto scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-gray-600","scrollbar-track-transparent hover:scrollbar-thumb-gray-400 dark:hover:scrollbar-thumb-gray-500","overscroll-behavior-y-contain","[-webkit-overflow-scrolling:touch]",n),style:{WebkitOverflowScrolling:"touch",overscrollBehaviorY:"contain",WebkitAppRegion:"no-drag"},children:[d.jsxs("div",{className:"max-w-5xl mx-auto px-3 sm:px-4 md:px-6 w-full min-w-0",children:[w.map((B,L)=>{const z=L===I,C=a&&B.messages.some(j=>j.id===t);if(B.messages.length===1){const j=B.messages[0],A=a&&j.id===t,T=A&&e?{...j,content:e}:j;return d.jsx(Wt,{message:T,isStreaming:A,isLastAssistantMessage:z,onRegenerate:z?s:void 0,className:L===0?"mt-3 sm:mt-4 md:mt-6":""},j.id)}return d.jsx(_l,{messages:B.messages,isStreaming:C,streamingMessage:e,streamingMessageId:t||void 0,isLastAssistantMessage:z,onRegenerate:z?s:void 0,onSelectBranch:l,className:L===0?"mt-3 sm:mt-4 md:mt-6":""},B.id)}),d.jsx("div",{ref:u,className:"h-3 sm:h-4 md:h-6"})]}),g&&d.jsxs("button",{onClick:N,className:K("absolute bottom-4 left-1/2 -translate-x-1/2 z-10","flex items-center justify-center gap-1.5","px-3 py-2 rounded-full","bg-white/95 dark:bg-dark-100/95 ophelia:bg-[#0a0a0a]/95","border border-gray-200/50 dark:border-dark-300/50 ophelia:border-[#262626]/60","shadow-lg backdrop-blur-sm","text-gray-600 dark:text-dark-600 ophelia:text-[#a3a3a3]","hover:bg-gray-50 dark:hover:bg-dark-200 ophelia:hover:bg-[#1a1a1a]","hover:text-gray-900 dark:hover:text-dark-800 ophelia:hover:text-[#fafafa]","transition-all duration-200","hover:shadow-xl hover:scale-105 active:scale-95"),title:"Scroll to bottom",children:[d.jsx(Zn,{className:"h-4 w-4"}),d.jsx("span",{className:"text-xs font-medium",children:"New messages"})]})]})};function t1(r){const e=(r.match(/```/g)||[]).length,t=e%2===1;let a=null;if(t){const n=r.lastIndexOf("```");if(n!==-1){const l=r.slice(n+3).match(/^(\w+)/);l&&(a=l[1])}}return{hasCodeBlocks:e>0,isInCodeBlock:t,language:a}}const gr=Bt.forwardRef(({value:r,onChange:e,className:t,placeholder:a,disabled:n,onKeyDown:s,...l},u)=>{const{hasCodeBlocks:c,isInCodeBlock:p,language:f}=R.useMemo(()=>t1(r),[r]);return d.jsxs("div",{className:"relative w-full",children:[d.jsx("textarea",{ref:u,value:r,onChange:e,onKeyDown:s,placeholder:a,disabled:n,className:K("w-full resize-none transition-all duration-200",p&&["font-mono text-[13px]","bg-gray-50 dark:bg-dark-100/50 ophelia:bg-[#0f0f0f]","rounded-lg"],t),...l}),c&&d.jsx("div",{className:"absolute right-0 top-0 pointer-events-none flex items-center gap-1",children:d.jsxs("div",{className:K("flex items-center gap-1 px-1.5 py-0.5 rounded-md text-[10px] font-medium","bg-gray-100 dark:bg-dark-200 ophelia:bg-[#1a1a1a]","text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3]","border border-gray-200/50 dark:border-dark-300/50 ophelia:border-[#262626]/50",p&&"animate-pulse"),children:[d.jsx(Qn,{className:"h-3 w-3"}),f&&d.jsx("span",{children:f}),!f&&p&&d.jsx("span",{children:"code"})]})})]})});gr.displayName="CodeAwareTextarea";const r1=({images:r,onImagesChange:e,maxImages:t=5,sessionId:a,onDocumentUploaded:n,disabled:s=!1,className:l})=>{const u=R.useRef(null),[c,p]=R.useState(!1),[f,g]=R.useState(!1),[b,w]=R.useState([]),M=async A=>{if(!(!A||s))for(let T=0;T<A.length;T++){const $=A[T];$.type.startsWith("image/")?await k($):$.type.includes("pdf")||$.type.includes("text")?await D($):de.error(`File type not supported: ${$.name}`)}},k=async A=>{if(t-r.length<=0){de.error(`Maximum ${t} images allowed`);return}if(A.size>10*1024*1024){de.error(`Image ${A.name} is too large (max 10MB)`);return}const $=new FileReader;$.onload=W=>{W.target?.result&&e([...r,W.target.result])},$.readAsDataURL(A)},D=async A=>{if(A.size>10*1024*1024){de.error("File size must be less than 10MB");return}g(!0);try{const T=await It.uploadDocument(A,a);if(T.success&&T.data){const $=T.data;w(W=>[...W,$]),n?.($),de.success(`Document "${A.name}" uploaded`)}else de.error(T.error||"Failed to upload document")}catch(T){console.error("Document upload error:",T),de.error("Failed to upload document")}finally{g(!1)}},I=A=>{A.preventDefault(),s||p(!0)},N=A=>{A.preventDefault(),p(!1)},B=A=>{A.preventDefault(),p(!1),s||M(A.dataTransfer.files)},L=A=>{const T=r.filter(($,W)=>W!==A);e(T)},z=async A=>{try{const T=await It.deleteDocument(A);T.success?(w($=>$.filter(W=>W.id!==A)),de.success("Document removed")):de.error(T.error||"Failed to remove document")}catch(T){console.error("Error removing document:",T),de.error("Failed to remove document")}},C=A=>{if(A===0)return"0 B";const T=1024,$=["B","KB","MB","GB"],W=Math.floor(Math.log(A)/Math.log(T));return parseFloat((A/Math.pow(T,W)).toFixed(1))+" "+$[W]},j=r.length>0||b.length>0;return d.jsxs("div",{className:K("space-y-3",l),children:[d.jsxs("div",{className:K("border-2 border-dashed rounded-xl p-6 transition-all duration-200 cursor-pointer","border-gray-300 dark:border-gray-600 ophelia:border-[#3f3f46]","hover:border-primary-400 dark:hover:border-primary-500 ophelia:hover:border-[#9333ea]",c&&"border-primary-500 dark:border-primary-400 ophelia:border-[#a855f7] bg-primary-50/50 dark:bg-primary-900/10 ophelia:bg-[#9333ea]/10",s&&"opacity-50 cursor-not-allowed"),onDragOver:I,onDragLeave:N,onDrop:B,onClick:()=>!s&&u.current?.click(),children:[d.jsx("input",{ref:u,type:"file",multiple:!0,accept:"image/*,.pdf,.txt",onChange:A=>{M(A.target.files),A.target.value=""},className:"hidden",disabled:s}),d.jsxs("div",{className:"flex flex-col items-center text-center",children:[f?d.jsx(ga,{className:"h-8 w-8 text-gray-400 dark:text-gray-500 ophelia:text-[#737373] mb-2 animate-spin"}):d.jsx(ba,{className:"h-8 w-8 text-gray-400 dark:text-gray-500 ophelia:text-[#737373] mb-2"}),d.jsxs("p",{className:"text-sm text-gray-700 dark:text-gray-300 ophelia:text-[#d4d4d4]",children:["Drop images here or"," ",d.jsx("span",{className:"text-primary-600 dark:text-primary-400 ophelia:text-[#a855f7] font-medium",children:"browse"})]}),d.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400 ophelia:text-[#737373] mt-1",children:"Supports: JPG, PNG, GIF, WebP (max 10MB each)"})]})]}),j&&d.jsxs("div",{className:"flex flex-wrap gap-2",children:[r.map((A,T)=>d.jsxs("div",{className:"relative group w-16 h-16 rounded-lg overflow-hidden bg-gray-100 dark:bg-gray-800 ophelia:bg-[#1a1a1a] border border-gray-200 dark:border-gray-700 ophelia:border-[#262626]",children:[d.jsx("img",{src:A,alt:`Upload ${T+1}`,className:"w-full h-full object-cover"}),d.jsx("button",{onClick:$=>{$.stopPropagation(),L(T)},className:"absolute top-0.5 right-0.5 p-0.5 rounded-full bg-black/60 hover:bg-black/80 text-white opacity-0 group-hover:opacity-100 transition-opacity",children:d.jsx(v0,{className:"h-3 w-3"})})]},`img-${T}`)),b.map(A=>d.jsxs("div",{className:"relative group flex items-center gap-2 px-3 py-2 rounded-lg bg-gray-100 dark:bg-gray-800 ophelia:bg-[#1a1a1a] border border-gray-200 dark:border-gray-700 ophelia:border-[#262626]",children:[A.fileType==="pdf"?d.jsx(ya,{className:"w-4 h-4 text-red-500 flex-shrink-0"}):d.jsx(_n,{className:"w-4 h-4 text-blue-500 flex-shrink-0"}),d.jsxs("div",{className:"min-w-0",children:[d.jsx("p",{className:"text-xs font-medium text-gray-900 dark:text-gray-100 ophelia:text-[#fafafa] truncate max-w-[100px]",children:A.filename}),d.jsx("p",{className:"text-[10px] text-gray-500 dark:text-gray-400 ophelia:text-[#737373]",children:C(A.size)})]}),d.jsx("button",{onClick:T=>{T.stopPropagation(),z(A.id)},className:"p-0.5 rounded-full hover:bg-gray-200 dark:hover:bg-gray-700 ophelia:hover:bg-[#262626] text-gray-500 hover:text-red-500 transition-colors",children:d.jsx(v0,{className:"h-3 w-3"})})]},A.id))]})]})},a1=({sessionId:r,className:e=""})=>{const[t,a]=R.useState([]);if(R.useEffect(()=>{if(!r)return;(async()=>{try{const u=await It.getDocuments(r);u.success&&u.data&&a(u.data)}catch(u){console.error("Failed to load documents:",u)}})()},[r]),!r||t.length===0)return null;const n=t.reduce((l,u)=>l+u.size,0),s=l=>{if(l===0)return"0 B";const u=1024,c=["B","KB","MB","GB"],p=Math.floor(Math.log(l)/Math.log(u));return parseFloat((l/Math.pow(u,p)).toFixed(1))+" "+c[p]};return d.jsxs("div",{className:`
|
|
267
|
+
`:Cl(r)?(u=2,c=2):Mn(r)&&(u=1,c=1);++s<n.length;)l=l.concat(Nn(n[s],r,{whitespace:a,breakBefore:s?void 0:u,breakAfter:s<n.length-1?Ut(n[s+1]):c}));return ua(r)&&ia(e,r,ua)&&l.push(" "),u&&l.unshift(u),c&&l.push(c),l}function Tn(r,e){const t=String(r.value),a=[],n=[];let s=0;for(;s<=t.length;){la.lastIndex=s;const c=la.exec(t),p=c&&"index"in c?c.index:t.length;a.push(El(t.slice(s,p).replace(/[\u061C\u200E\u200F\u202A-\u202E\u2066-\u2069]/g,""),s===0?e.breakBefore:!0,p===t.length?e.breakAfter:!0)),s=p+1}let l=-1,u;for(;++l<a.length;)a[l].charCodeAt(a[l].length-1)===8203||l<a.length-1&&a[l+1].charCodeAt(0)===8203?(n.push(a[l]),u=void 0):a[l]?(typeof u=="number"&&n.push(u),n.push(a[l]),u=0):(l===0||l===a.length-1)&&n.push(0);return n}function Il(r){return[String(r.value)]}function El(r,e,t){const a=[];let n=0,s;for(;n<r.length;){oa.lastIndex=n;const l=oa.exec(r);s=l?l.index:r.length,!n&&!s&&l&&!e&&a.push(""),n!==s&&a.push(r.slice(n,s)),n=l?s+l[0].length:s}return n!==s&&!t&&a.push(""),a.join(" ")}function zn(r,e){if(r.type==="element"){const t=r.properties||{};switch(r.tagName){case"listing":case"plaintext":case"xmp":return"pre";case"nobr":return"nowrap";case"pre":return t.wrap?"pre-wrap":"pre";case"td":case"th":return t.noWrap?"nowrap":e.whitespace;case"textarea":return"pre-wrap"}}return e.whitespace}function Fl(r){return!!(r.properties||{}).hidden}function ql(r){return r.tagName==="td"||r.tagName==="th"}function Rl(r){return r.tagName==="dialog"&&!(r.properties||{}).open}const Ol={},Ll=[];function Pl(r){const e=r||Ol;return function(t,a){Bn(t,"element",function(n,s){const l=Array.isArray(n.properties.className)?n.properties.className:Ll,u=l.includes("language-math"),c=l.includes("math-display"),p=l.includes("math-inline");let f=c;if(!u&&!c&&!p)return;let g=s[s.length-1],b=n;if(n.tagName==="code"&&u&&g&&g.type==="element"&&g.tagName==="pre"&&(b=g,g=s[s.length-2],f=!0),!g)return;const w=Dl(b,{whitespace:"pre"});let M;try{M=na.renderToString(w,{...e,displayMode:f,throwOnError:!0})}catch(D){const I=D,N=I.name.toLowerCase();a.message("Could not render math with KaTeX",{ancestors:[...s,n],cause:I,place:n.position,ruleId:N,source:"rehype-katex"});try{M=na.renderToString(w,{...e,displayMode:f,strict:"ignore",throwOnError:!1})}catch{M=[{type:"element",tagName:"span",properties:{className:["katex-error"],style:"color:"+(e.errorColor||"#cc0000"),title:String(D)},children:[{type:"text",value:w}]}]}}typeof M=="string"&&(M=Sl(M).children);const k=g.children.indexOf(b);return g.children.splice(k,1,...M),In})}}const Hl=r=>{const e=[];let t=r.replace(/```[\s\S]*?```|`[^`\n]+`/g,a=>(e.push(a),`__CODE_BLOCK_${e.length-1}__`));return t=t.replace(/\\\[([\s\S]*?)\\\]/g,(a,n)=>`$$${n}$$`),t=t.replace(/\\\(([\s\S]*?)\\\)/g,(a,n)=>`$${n}$`),e.forEach((a,n)=>{t=t.replace(`__CODE_BLOCK_${n}__`,a)}),t},$l=({content:r,className:e})=>{const{theme:t}=g0(),[a,n]=Bt.useState(null),s=Bt.useMemo(()=>Hl(r),[r]),l=async u=>{try{await navigator.clipboard.writeText(u),n(u),setTimeout(()=>n(null),2e3)}catch(c){console.error("Failed to copy text:",c)}};return d.jsx("div",{className:K("prose prose-sm max-w-none dark:prose-invert prose-gray","[&_.katex-display]:overflow-x-auto [&_.katex-display]:overflow-y-hidden [&_.katex-display]:py-2","[&_.katex]:text-inherit",e),children:d.jsx(En,{remarkPlugins:[gl],rehypePlugins:[Pl],components:{code({inline:u,className:c,children:p,...f}){const g=/language-(\w+)/.exec(c||""),b=String(p).replace(/\n$/,"");return!u&&g?d.jsxs("div",{className:"relative group my-4 overflow-hidden rounded-xl border border-gray-200 dark:border-dark-300 shadow-sm",children:[d.jsxs("div",{className:"flex items-center justify-between bg-gray-50 dark:bg-dark-100 px-4 py-3 border-b border-gray-200 dark:border-dark-300",children:[d.jsx("span",{className:"text-xs font-semibold text-gray-700 dark:text-dark-700 uppercase tracking-wide",children:g[1]}),d.jsx("button",{onClick:()=>l(b),className:"opacity-0 group-hover:opacity-100 transition-all duration-200 p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-dark-300 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-1",title:"Copy code",children:a===b?d.jsx(nt,{className:"h-4 w-4 text-success-600 dark:text-success-400"}):d.jsx(fa,{className:"h-4 w-4 text-gray-500 dark:text-dark-600"})})]}),d.jsx("div",{className:"overflow-x-auto",children:d.jsx(On,{language:g[1],isDark:t.mode==="dark",className:"!m-0 !rounded-none !border-none",children:b})})]}):d.jsx("code",{className:K("px-2 py-1 rounded-md bg-gray-100 dark:bg-dark-200 text-gray-800 dark:text-dark-800","font-mono text-sm border border-gray-200 dark:border-dark-300",c),...f,children:p})},pre({children:u,...c}){return d.jsx("pre",{...c,children:u})},p({children:u,...c}){return d.jsx("p",{className:"mb-4 last:mb-0 leading-relaxed",...c,children:u})},ul({children:u,...c}){return d.jsx("ul",{className:"list-disc list-inside mb-4 space-y-2 pl-4",...c,children:u})},ol({children:u,...c}){return d.jsx("ol",{className:"list-decimal list-inside mb-4 space-y-2 pl-4",...c,children:u})},li({children:u,...c}){return d.jsx("li",{className:"text-gray-700 dark:text-dark-700 leading-relaxed",...c,children:u})},blockquote({children:u,...c}){return d.jsx("blockquote",{className:"border-l-4 border-primary-400 dark:border-primary-500 ophelia:border-[#a855f7] bg-primary-25 dark:bg-primary-950/30 ophelia:bg-[rgba(168,85,247,0.1)] pl-4 py-3 my-4 rounded-r-lg italic text-gray-700 dark:text-dark-700 ophelia:text-[#d4d4d4]",...c,children:u})},h1({children:u,...c}){return d.jsx("h1",{className:"text-2xl font-bold mb-4 mt-6 first:mt-0 text-gray-900 dark:text-dark-800 border-b border-gray-200 dark:border-dark-300 pb-2",...c,children:u})},h2({children:u,...c}){return d.jsx("h2",{className:"text-xl font-semibold mb-3 mt-6 first:mt-0 text-gray-900 dark:text-dark-800",...c,children:u})},h3({children:u,...c}){return d.jsx("h3",{className:"text-lg font-medium mb-3 mt-4 first:mt-0 text-gray-900 dark:text-dark-800",...c,children:u})}},children:s})})},Gl=({statistics:r,className:e=""})=>{const[t,a]=R.useState(!1),n=g=>{if(g==null)return"N/A";const b=g/1e6;return b<1e3?`${Math.round(b)}ms`:`${(b/1e3).toFixed(2)}s`},s=g=>g?`${g.toFixed(1)} t/s`:"N/A",l=r.prompt_eval_count||0,u=r.eval_count||0,c=l+u,p=n(r.total_duration),f=s(r.tokens_per_second);return d.jsxs("div",{className:`text-xs text-gray-500 dark:text-dark-500 mt-2 ${e}`,children:[d.jsxs("div",{className:"flex items-center gap-4 mb-1",children:[d.jsxs("span",{className:"flex items-center gap-1 text-gray-600 dark:text-dark-600",children:[d.jsx($n,{size:12,className:"text-primary-500"}),u," tokens"]}),d.jsx("span",{className:"text-gray-500 dark:text-dark-500",children:f}),d.jsx("span",{className:"text-gray-500 dark:text-dark-500",children:p}),r.model&&d.jsx("span",{className:"text-gray-400 dark:text-dark-400 bg-gray-100 dark:bg-dark-200 px-2 py-0.5 rounded-full truncate max-w-32 sm:max-w-48",title:r.model,children:r.model})]}),d.jsxs("button",{onClick:()=>a(!t),className:"flex items-center gap-1 text-gray-400 dark:text-dark-400 hover:text-gray-600 dark:hover:text-dark-600 transition-colors",children:[t?d.jsx(z0,{size:12}):d.jsx(Gn,{size:12}),d.jsx("span",{children:"Details"})]}),t&&d.jsxs("div",{className:"mt-2 p-3 bg-gray-50 dark:bg-dark-100 border border-gray-200 dark:border-dark-300 rounded-lg text-xs space-y-2",children:[d.jsxs("div",{className:"grid grid-cols-2 gap-x-4 gap-y-2",children:[d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Prompt tokens:"})," ",l]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Generated tokens:"})," ",u]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Total tokens:"})," ",c]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Speed:"})," ",f]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Prompt eval:"})," ",n(r.prompt_eval_duration)]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Generation:"})," ",n(r.eval_duration)]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Model load:"})," ",n(r.load_duration)]}),d.jsxs("div",{className:"text-gray-700 dark:text-dark-700",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Total time:"})," ",p]})]}),r.created_at&&d.jsxs("div",{className:"pt-2 border-t border-gray-200 dark:border-dark-300 text-gray-600 dark:text-dark-600",children:[d.jsx("span",{className:"font-medium text-gray-800 dark:text-dark-800",children:"Generated at:"})," ",new Date(r.created_at).toLocaleTimeString()]})]})]})};let S0=null,M0=null,X0=0;const Vl=300*1e3;async function Ul(){const r=Date.now();return S0!==null&&r-X0<Vl?S0:M0||(M0=(async()=>{try{const e=await Yt.getModels();return e.success&&e.data&&e.data.length>0?(S0=e.data,X0=r,e.data):(S0=[],X0=r,[])}catch{return S0=[],X0=r,[]}finally{M0=null}})(),M0)}const Wl=({text:r,className:e,size:t="sm"})=>{const{preferences:a}=g0(),[n,s]=R.useState(!1),[l,u]=R.useState(!1),[c,p]=R.useState(null),[f,g]=R.useState([]),[b,w]=R.useState(null),M=R.useRef(null);R.useEffect(()=>{let N=!0;return Ul().then(B=>{N&&(g(B),w(B.length>0))}),()=>{N=!1}},[]);const k=async()=>{if(!l){if(n&&M.current){M.current.pause(),M.current.currentTime=0,s(!1);return}u(!0),p(null);try{const N=a.ttsSettings,B=N?.model||f[0]?.model||"tts-1",L=N?.voice||f[0]?.config?.default_voice||"alloy",z=N?.speed||1,C=await Yt.generateBase64({model:B,input:r,voice:L,speed:z,response_format:"mp3"});if(!C.success||!C.data?.audio)throw new Error(C.message||"Failed to generate speech");const j=`data:${C.data.mimeType};base64,${C.data.audio}`,A=new Audio(j);M.current=A,A.onended=()=>{s(!1),M.current=null},A.onerror=()=>{p("Audio playback failed"),s(!1),M.current=null},await A.play(),s(!0)}catch(N){const B=N instanceof Error?N.message:"Failed to generate speech";p(B),console.error("TTS error:",N)}finally{u(!1)}}};if(R.useEffect(()=>()=>{M.current&&(M.current.pause(),M.current=null)},[]),b===!1||b===null)return null;const D={sm:"h-6 w-6 p-1",md:"h-8 w-8 p-1.5",lg:"h-10 w-10 p-2"},I={sm:"h-3.5 w-3.5",md:"h-4 w-4",lg:"h-5 w-5"};return d.jsx("button",{onClick:k,disabled:l||!r,title:c||(n?"Stop speaking":l?"Generating speech...":"Read aloud"),className:K("rounded-full transition-all duration-200","hover:bg-gray-100 dark:hover:bg-dark-200","focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-1","disabled:opacity-50 disabled:cursor-not-allowed",c?"text-red-500 dark:text-red-400":n?"text-primary-600 dark:text-primary-400 bg-primary-50 dark:bg-primary-900/20":"text-gray-500 dark:text-gray-400",D[t],e),children:l?d.jsx(ga,{className:K(I[t],"animate-spin")}):n?d.jsx(va,{className:I[t]}):c?d.jsx(Vn,{className:I[t]}):d.jsx(Un,{className:I[t]})})},Xl=[{regex:/```html\s*\n([\s\S]*?)\n```/gi,type:"html",getTitle:r=>Kl(r)||"HTML Document"},{regex:/```svg\s*\n([\s\S]*?)\n```/gi,type:"svg",getTitle:r=>"SVG Image"},{regex:/```(?:react|jsx)\s*\n([\s\S]*?)\n```/gi,type:"react",getTitle:r=>Jl(r)||"React Component"},{regex:/```json\s*\n([\s\S]*?)\n```/gi,type:"json",getTitle:r=>"JSON Data"},{regex:/```python\s*\n([\s\S]*?)\n```/gi,type:"code",language:"python",getTitle:r=>Zl(r)||"Python Code"},{regex:/```(?:javascript|js)\s*\n([\s\S]*?)\n```/gi,type:"code",language:"javascript",getTitle:r=>Ql(r)||"JavaScript Code"},{regex:/```css\s*\n([\s\S]*?)\n```/gi,type:"code",language:"css",getTitle:r=>"CSS Styles"},{regex:/```(\w+)\s*\n([\s\S]*?)\n```/gi,type:"code",getTitle:(r,e)=>`${e.toUpperCase()} Code`}],Yl=[{regex:/<artifact\s+type="([^"]+)"\s+title="([^"]+)"[^>]*>([\s\S]*?)<\/artifact>/gi,extract:r=>({type:r[1],title:r[2],content:r[3].trim()})},{regex:/<artifact\s+type="([^"]+)"[^>]*>([\s\S]*?)<\/artifact>/gi,extract:r=>({type:r[1],title:`${r[1].toUpperCase()} Artifact`,content:r[2].trim()})}];function ha(r){const e=document.createElement("div");return e.innerHTML=r,e.textContent||e.innerText||""}function Kl(r){const e=r.match(/<title[^>]*>(.*?)<\/title>/i);if(e)return ha(e[1]).trim();const t=r.match(/<h1[^>]*>(.*?)<\/h1>/i);return t?ha(t[1]).trim():null}function Jl(r){const e=r.match(/(?:function|const)\s+(\w+)/);if(e)return e[1];const t=r.match(/class\s+(\w+)/);return t?t[1]:null}function Zl(r){if(r.includes("def main("))return"Python Script";const e=r.match(/class\s+(\w+)/);if(e)return`${e[1]} Class`;const t=r.match(/def\s+(\w+)/);return t&&t[1]!=="__init__"?`${t[1]} Function`:null}function Ql(r){const e=r.match(/function\s+(\w+)/);if(e)return`${e[1]} Function`;const t=r.match(/(?:const|let)\s+(\w+)\s*=/);return t?t[1]:null}function da(r,e){if(e==="html")return/<[^>]+>/.test(r)&&r.trim().length>200;if(e==="svg")return/<svg[^>]*>/.test(r);if(e==="react")return/<[A-Z][^>]*>/.test(r)||/return\s*\(/.test(r);if(e==="json")try{return JSON.parse(r),r.trim().length>100}catch{return!1}if(e==="code"){const t=r.split(`
|
|
268
|
+
`).length,a=r.trim().length,n=/function|class|def |import |from |const |let |var |if |for |while |try |catch/.test(r);return(a>500||t>15)&&n}return!1}function ma(r){const e=[];let t=r;for(const a of Yl){let n;for(;(n=a.regex.exec(t))!==null;){const s=a.extract(n);if(da(s.content,s.type)){const l={id:`artifact-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,type:s.type,title:s.title,content:s.content,createdAt:Date.now(),updatedAt:Date.now()};e.push(l),t=t.replace(n[0],"")}}}for(const a of Xl){let n;for(a.regex.lastIndex=0;(n=a.regex.exec(t))!==null;){const s=n[1]||n[2],l=a.language||(n[1]&&n[2]?n[1]:void 0);if(da(s,a.type)){const u={id:`artifact-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,type:a.type,title:a.getTitle(s,l||"code"),content:s,language:l,createdAt:Date.now(),updatedAt:Date.now()};e.push(u),t=t.replace(n[0],"")}}}return{content:t.trim(),artifacts:e}}const Wt=({message:r,isStreaming:e=!1,className:t,isLastAssistantMessage:a=!1,onRegenerate:n})=>{const s=r.role==="user",l=r.role==="system",{preferences:u}=g0(),{user:c}=pa(),{setSystemMessage:p,getCurrentPersona:f}=be(),g=f(),[b,w]=R.useState(!1),[M,k]=R.useState(r.content),[D,I]=R.useState(null),[N,B]=R.useState(!1),[L,z]=R.useState(r.content),[C,j]=R.useState(!1),[A,T]=R.useState(r.artifacts||[]),[$,W]=R.useState(null),[G,Y]=R.useState(!1),[re,Q]=R.useState(!1),[ce,ye]=R.useState(!1),Z=R.useRef(null),ie=R.useRef(e),le=R.useRef(!1),we=async()=>{try{await navigator.clipboard.writeText(r.content),ye(!0),setTimeout(()=>ye(!1),2e3)}catch(te){console.error("Failed to copy message:",te)}};R.useEffect(()=>{if(!s&&!l&&r.content){const te=br(r.content);W(te.thinking);const ve=te.content;if(r.artifacts&&r.artifacts.length>0)z(ve),T(r.artifacts);else if(e)z(ve),T([]);else{const xe=ma(ve);z(xe.content),T(xe.artifacts)}}},[r.content,r.artifacts,s,l,e]),R.useEffect(()=>{if(!s&&!l&&r.content&&!e){const te=br(r.content);W(te.thinking);const ve=te.content;if(!r.artifacts||r.artifacts.length===0){const xe=ma(ve);z(xe.content),T(xe.artifacts)}}},[e,r.content,r.artifacts,s,l]),R.useEffect(()=>{const te=ie.current&&!e;return ie.current=e,te&&!le.current&&!s&&!l&&L&&u.ttsSettings?.enabled&&u.ttsSettings?.autoPlay&&(le.current=!0,(async()=>{Q(!0);try{const xe=await Yt.generateBase64({model:u.ttsSettings?.model||"tts-1",input:L,voice:u.ttsSettings?.voice||"alloy",speed:u.ttsSettings?.speed||1,response_format:"mp3"});if(xe.success&&xe.data?.audio){const dt=`data:${xe.data.mimeType};base64,${xe.data.audio}`,d0=new Audio(dt);Z.current=d0,d0.onended=()=>{Q(!1),Z.current=null},d0.onerror=()=>{Q(!1),Z.current=null},await d0.play()}}catch(xe){console.error("Auto-play TTS failed:",xe),Q(!1)}})()),()=>{Z.current&&(Z.current.pause(),Z.current=null)}},[e,s,l,L,u.ttsSettings]);const Ne=()=>l?"System":s?u.showUsername&&c?.username?c.username:"You":g?.name?g.name:r.model||"Assistant",i0=()=>{w(!0),k(r.content)},w0=async()=>{B(!0);try{p(M),w(!1),console.log("✅ System message updated:",M)}catch(te){console.error("Failed to save system message:",te)}finally{B(!1)}},Ze=()=>{w(!1),k(r.content)},I0=(te,ve=100)=>te.length<=ve?te:te.substring(0,ve)+"...",Qe=l&&r.content.length>100;return d.jsxs("div",{className:K("flex transition-colors group my-2",s?"justify-end":"justify-start",t),children:[d.jsxs("div",{className:K("flex gap-3 sm:gap-4",s?"flex-row-reverse max-w-[85%] sm:max-w-[75%]":l?"w-full":"max-w-[85%] sm:max-w-[75%]"),children:[!l&&d.jsx("div",{className:K("flex shrink-0 items-start justify-center rounded-full shadow-sm overflow-hidden mt-1",s?"h-8 w-8 bg-primary-600 ophelia:bg-[#9333ea] text-white":"h-8 w-8 bg-white dark:bg-dark-100 ophelia:bg-[#0a0a0a]"),children:s?c?.avatar?d.jsx("img",{src:c.avatar,alt:c.username,className:"w-full h-full object-cover"}):d.jsx(Et,{className:"h-4 w-4"}):g?.avatar?d.jsx("img",{src:g.avatar,alt:g.name||"Assistant",className:"w-full h-full object-cover"}):d.jsx("img",{src:"/logo-dark.png",alt:"Libre WebUI",className:"w-full h-full object-contain p-1"})}),d.jsxs("div",{className:K("flex-1 min-w-0 rounded-2xl sm:rounded-3xl p-4 sm:p-5",s?"bg-primary-600/90 dark:bg-primary-700/90 ophelia:bg-[#9333ea]/90 text-white":l?"bg-transparent p-2 py-3":"bg-white/95 dark:bg-dark-100/95 ophelia:bg-[#0a0a0a]/95 backdrop-blur-md shadow-sm border border-gray-200/50 dark:border-dark-300/50 ophelia:border-[#262626]/60"),children:[!l&&d.jsxs("div",{className:K("flex items-center gap-3 mb-2",s&&"flex-row-reverse"),children:[d.jsx("span",{className:K("text-sm font-semibold",s?"text-white/90":"text-gray-900 dark:text-dark-800 ophelia:text-[#fafafa]"),children:Ne()}),r.model&&!s&&g?.name&&d.jsx("span",{className:"text-xs text-gray-500 dark:text-dark-600 ophelia:text-[#737373] bg-gray-100 dark:bg-dark-200 ophelia:bg-[#121212] px-2 py-0.5 rounded-full truncate max-w-32 sm:max-w-48",title:r.model,children:r.model}),d.jsx("span",{className:K("text-xs",s?"text-white/60":"text-gray-400 dark:text-dark-500 ophelia:text-[#525252]"),children:Ln(r.timestamp)}),!s&&!l&&!e&&L&&d.jsx(Wl,{text:L,size:"sm",className:K("transition-opacity",re?"opacity-100 text-primary-600 dark:text-primary-400":"opacity-0 group-hover:opacity-100")}),!l&&!e&&d.jsx("button",{onClick:we,className:"p-1 rounded hover:bg-gray-100 dark:hover:bg-dark-200 ophelia:hover:bg-[rgba(147,51,234,0.2)] transition-opacity opacity-0 group-hover:opacity-100",title:ce?"Copied!":"Copy message",children:ce?d.jsx(nt,{className:"h-3.5 w-3.5 text-green-500 dark:text-green-400"}):d.jsx(fa,{className:"h-3.5 w-3.5 text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3]"})}),!s&&!l&&!e&&a&&n&&d.jsx("button",{onClick:n,className:"p-1 rounded hover:bg-gray-100 dark:hover:bg-dark-200 ophelia:hover:bg-[rgba(147,51,234,0.2)] transition-opacity opacity-0 group-hover:opacity-100",title:"Regenerate response",children:d.jsx(Wn,{className:"h-3.5 w-3.5 text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3]"})})]}),d.jsxs("div",{className:K(s?"text-white":"text-gray-700 dark:text-dark-700 ophelia:text-[#e5e5e5]"),children:[r.images&&r.images.length>0&&d.jsx("div",{className:"mb-3 grid grid-cols-2 sm:grid-cols-3 gap-2 max-w-lg",children:r.images.map((te,ve)=>d.jsx("div",{className:"aspect-square rounded-lg overflow-hidden bg-gray-100 dark:bg-gray-800 border border-gray-200 dark:border-gray-700",children:d.jsx("img",{src:te,alt:`Uploaded image ${ve+1}`,className:"w-full h-full object-cover cursor-pointer hover:opacity-90 transition-opacity",onClick:()=>I(te)})},ve))}),s?d.jsx("p",{className:"whitespace-pre-wrap leading-relaxed",children:r.content}):l?d.jsxs("div",{className:"bg-gray-50/30 dark:bg-dark-50/30 ophelia:bg-[rgba(5,5,5,0.8)] rounded-md p-2 border border-gray-100/50 dark:border-dark-200/50 ophelia:border-[rgba(26,26,26,0.5)] relative z-0",children:[d.jsxs("div",{className:"text-xs font-medium mb-1 text-gray-500 dark:text-gray-400 ophelia:text-[#737373] flex items-center justify-between",children:[d.jsxs("div",{className:"flex items-center gap-1",children:[d.jsx(xa,{className:"h-2.5 w-2.5 opacity-50"}),"System"]}),d.jsx("div",{className:"flex items-center gap-1",children:b?d.jsxs(d.Fragment,{children:[d.jsx("button",{onClick:w0,disabled:N,className:"p-1 hover:bg-gray-100 dark:hover:bg-dark-200 ophelia:hover:bg-[rgba(147,51,234,0.2)] rounded transition-colors disabled:opacity-50",title:"Save changes",children:d.jsx(Xn,{className:"h-3 w-3 text-green-600 dark:text-green-400 ophelia:text-[#a855f7]"})}),d.jsx("button",{onClick:Ze,disabled:N,className:"p-1 hover:bg-gray-100 dark:hover:bg-dark-200 ophelia:hover:bg-[rgba(239,68,68,0.15)] rounded transition-colors disabled:opacity-50",title:"Cancel editing",children:d.jsx(v0,{className:"h-3 w-3 text-red-600 dark:text-red-400 ophelia:text-[#f87171]"})})]}):d.jsx("button",{onClick:i0,className:"p-1 hover:bg-gray-100 dark:hover:bg-dark-200 ophelia:hover:bg-[rgba(147,51,234,0.2)] rounded transition-colors",title:"Edit system message",children:d.jsx(Yn,{className:"h-3 w-3 text-gray-600 dark:text-gray-400 ophelia:text-[#a3a3a3] ophelia:hover:text-[#c084fc]"})})})]}),b?d.jsx("textarea",{value:M,onChange:te=>k(te.target.value),className:"w-full min-h-[100px] p-3 text-sm text-gray-900 dark:text-gray-100 ophelia:text-[#fafafa] bg-gray-50 dark:bg-dark-50 ophelia:bg-[#0a0a0a] border border-gray-200 dark:border-dark-300 ophelia:border-[#262626] rounded-lg resize-none focus:outline-none focus:ring-2 focus:ring-primary-500 dark:focus:ring-primary-400 ophelia:focus:ring-[#a855f7] focus:border-transparent",placeholder:"Enter your system message...",disabled:N}):d.jsxs("div",{children:[d.jsx("p",{className:"whitespace-pre-wrap leading-relaxed text-xs text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3]",children:C?r.content:I0(r.content)}),Qe&&d.jsx("button",{onClick:()=>j(!C),className:"mt-1 flex items-center gap-1 text-xs text-gray-400 dark:text-gray-500 ophelia:text-[#737373] hover:text-primary-600 dark:hover:text-primary-400 ophelia:hover:text-[#c084fc] transition-colors",children:C?d.jsxs(d.Fragment,{children:[d.jsx(kr,{className:"h-3 w-3"}),"Show less"]}):d.jsxs(d.Fragment,{children:[d.jsx(z0,{className:"h-3 w-3"}),"Show more"]})})]})]}):d.jsxs("div",{className:"relative",children:[$&&d.jsxs("div",{className:"mb-3",children:[d.jsxs("button",{onClick:()=>Y(!G),className:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3] hover:text-primary-600 dark:hover:text-primary-400 ophelia:hover:text-[#c084fc] transition-colors",children:[d.jsx(Z0,{className:"h-4 w-4"}),d.jsx("span",{className:"font-medium",children:"Thinking"}),G?d.jsx(kr,{className:"h-4 w-4"}):d.jsx(z0,{className:"h-4 w-4"})]}),G&&d.jsx("div",{className:"mt-2 p-3 bg-gray-50 dark:bg-dark-100 ophelia:bg-[#0a0a0a] rounded-lg border border-gray-200 dark:border-dark-300 ophelia:border-[#1a1a1a]",children:d.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-300 ophelia:text-[#a3a3a3] whitespace-pre-wrap leading-relaxed",children:$})})]}),d.jsx($l,{content:L}),e&&d.jsx("div",{className:"inline-block w-2 h-5 bg-primary-500 animate-pulse ml-1 rounded-sm"})]}),!s&&!l&&A.length>0&&d.jsx("div",{className:"mt-4",children:d.jsx(ss,{artifacts:A})}),!s&&!l&&r.statistics&&d.jsx("div",{className:"mt-3",children:d.jsx(Gl,{statistics:r.statistics})})]})]})]}),D&&Xt.createPortal(d.jsxs("div",{className:"fixed inset-0 z-[9999] flex items-center justify-center bg-black/80 backdrop-blur-sm",onClick:()=>I(null),children:[d.jsx("button",{className:"absolute top-6 right-6 p-3 bg-white/20 hover:bg-white/40 rounded-full text-white transition-all shadow-lg border border-white/30",onClick:te=>{te.stopPropagation(),I(null)},children:d.jsx(v0,{className:"h-7 w-7"})}),d.jsx("img",{src:D,alt:"Full size image",className:"max-w-[90vw] max-h-[90vh] object-contain rounded-lg shadow-2xl",onClick:te=>te.stopPropagation()})]}),document.body)]})},_l=({messages:r,isStreaming:e=!1,streamingMessage:t,streamingMessageId:a,isLastAssistantMessage:n=!1,onRegenerate:s,onSelectBranch:l,className:u})=>{if(r.length===1){const c=r[0],p=e&&a===c.id,f=p&&t?{...c,content:t}:c;return d.jsx(Wt,{message:f,isStreaming:p,isLastAssistantMessage:n,onRegenerate:s,className:u})}return d.jsxs("div",{className:K("relative py-1",u),children:[d.jsxs("div",{className:"flex items-center gap-1.5 px-4 pb-2 text-[10px] text-gray-400 dark:text-gray-500 ophelia:text-[#525252]",children:[d.jsx(Kn,{className:"h-3 w-3"}),d.jsxs("span",{children:[r.length," variants"]})]}),d.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3 px-4",children:r.map((c,p)=>{const f=c.isActive!==!1,g=e&&a===c.id,b=g&&t?{...c,content:t}:c;return d.jsxs("div",{className:K("relative rounded-lg overflow-hidden transition-all duration-200","border shadow-sm",f||g?"border-primary-300 dark:border-primary-600 ophelia:border-[#7c3aed] shadow-primary-100 dark:shadow-primary-900/20 ophelia:shadow-[#9333ea]/10":"border-gray-200 dark:border-dark-300 ophelia:border-[#262626] hover:border-gray-300 dark:hover:border-dark-400 ophelia:hover:border-[#3f3f46]",!f&&!g&&"cursor-pointer hover:shadow-md"),onClick:()=>!f&&!g&&l?.(c.id),children:[d.jsxs("div",{className:K("flex items-center justify-between px-2.5 py-1 text-[11px]",f||g?"bg-primary-50/80 dark:bg-primary-900/20 ophelia:bg-[#9333ea]/10 text-primary-600 dark:text-primary-400 ophelia:text-[#c084fc]":"bg-gray-50/80 dark:bg-dark-100/80 ophelia:bg-[#121212]/80 text-gray-500 dark:text-gray-500 ophelia:text-[#737373]"),children:[d.jsxs("div",{className:"flex items-center gap-1.5",children:[d.jsx("span",{className:"font-medium",children:p+1}),g&&d.jsx("span",{className:"text-[10px] opacity-70 animate-pulse",children:"generating..."})]}),f&&!g&&d.jsx(nt,{className:"h-3 w-3"}),!f&&!g&&d.jsx("span",{className:"text-[10px] opacity-50",children:"select"})]}),d.jsx("div",{className:K("bg-white dark:bg-dark-50 ophelia:bg-[#0a0a0a]",!f&&!g&&"opacity-80"),children:d.jsx(Wt,{message:b,isStreaming:g,isLastAssistantMessage:n&&(f||g),onRegenerate:f&&!e?s:void 0,className:"!bg-transparent !p-3 !text-sm"})})]},c.id)})})]})},e1=({messages:r,streamingMessage:e,streamingMessageId:t,isStreaming:a=!1,className:n,onRegenerate:s,onSelectBranch:l})=>{const u=R.useRef(null),c=R.useRef(),p=R.useRef(null),f=R.useRef(!1),[g,b]=R.useState(!1),w=R.useMemo(()=>{const B=[],L=new Set;console.log("[ChatMessages] Grouping messages:",r.map(C=>({id:C.id?.substring(0,8),role:C.role,parentId:C.parentId?.substring(0,8),branchIndex:C.branchIndex,isActive:C.isActive})));const z=[...r].sort((C,j)=>C.role==="system"&&j.role!=="system"?-1:j.role==="system"&&C.role!=="system"?1:C.parentId===j.parentId?(C.branchIndex||0)-(j.branchIndex||0):C.timestamp-j.timestamp);for(const C of z){if(L.has(C.id))continue;const j=C.parentId;if(j){const A=B.findIndex(T=>T.id===j);if(A>=0)B[A].messages.push(C);else{const T=r.find($=>$.id===j);T&&!L.has(j)?(B.push({id:j,messages:[T,C],messageIndex:B.length}),L.add(j)):B.push({id:C.id,messages:[C],messageIndex:B.length})}L.add(C.id)}else{const A=r.filter(T=>T.parentId===C.id);A.length>0?(B.push({id:C.id,messages:[C,...A],messageIndex:B.length}),L.add(C.id),A.forEach(T=>L.add(T.id))):(B.push({id:C.id,messages:[C],messageIndex:B.length}),L.add(C.id))}}return B.sort((C,j)=>{const A=C.messages[0],T=j.messages[0];return A.role==="system"&&T.role!=="system"?-1:T.role==="system"&&A.role!=="system"?1:A.timestamp-T.timestamp})},[r]),M=R.useCallback((B=!1)=>{f.current&&!B||u.current?.scrollIntoView({behavior:"smooth"})},[]),k=R.useCallback(()=>{const B=p.current;if(!B)return;const{scrollTop:L,scrollHeight:z,clientHeight:C}=B,A=z-L-C<100;f.current=!A,b(!A&&r.length>0)},[r.length]),D=R.useRef(r.length);if(R.useEffect(()=>{r.length>D.current&&!f.current&&M(),D.current=r.length},[r.length,M]),R.useEffect(()=>{a&&e&&!f.current&&requestAnimationFrame(()=>{const B=p.current;B&&(B.scrollTop=B.scrollHeight)})},[a,e]),R.useEffect(()=>{const B=c.current;return()=>{B&&clearTimeout(B)}},[]),r.length===0&&!a)return d.jsx("div",{className:K("flex-1 flex items-center justify-center p-4 sm:p-8",n),children:d.jsxs("div",{className:"text-center text-gray-500 dark:text-dark-600 max-w-md",children:[d.jsx("div",{className:"text-5xl sm:text-7xl mb-4 sm:mb-6 opacity-60",children:"💬"}),d.jsx("h3",{className:"text-lg sm:text-xl font-semibold mb-2 sm:mb-3 text-gray-700 dark:text-dark-700",children:"Start a conversation"}),d.jsx("p",{className:"text-sm leading-relaxed px-4",children:"Send a message to begin chatting with your AI assistant. Ask questions, get help with code, or have a natural conversation."})]})});let I=-1;for(let B=w.length-1;B>=0;B--)if(w[B].messages.some(L=>L.role==="assistant")){I=B;break}const N=()=>{f.current=!1,u.current?.scrollIntoView({behavior:"smooth"}),b(!1)};return d.jsxs("div",{ref:p,onScroll:k,className:K("relative flex-1 overflow-y-auto scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-gray-600","scrollbar-track-transparent hover:scrollbar-thumb-gray-400 dark:hover:scrollbar-thumb-gray-500","overscroll-behavior-y-contain","[-webkit-overflow-scrolling:touch]",n),style:{WebkitOverflowScrolling:"touch",overscrollBehaviorY:"contain",WebkitAppRegion:"no-drag"},children:[d.jsxs("div",{className:"max-w-5xl mx-auto px-3 sm:px-4 md:px-6 w-full min-w-0",children:[w.map((B,L)=>{const z=L===I,C=a&&B.messages.some(j=>j.id===t);if(B.messages.length===1){const j=B.messages[0],A=a&&j.id===t,T=A&&e?{...j,content:e}:j;return d.jsx(Wt,{message:T,isStreaming:A,isLastAssistantMessage:z,onRegenerate:z?s:void 0,className:L===0?"mt-3 sm:mt-4 md:mt-6":""},j.id)}return d.jsx(_l,{messages:B.messages,isStreaming:C,streamingMessage:e,streamingMessageId:t||void 0,isLastAssistantMessage:z,onRegenerate:z?s:void 0,onSelectBranch:l,className:L===0?"mt-3 sm:mt-4 md:mt-6":""},B.id)}),d.jsx("div",{ref:u,className:"h-3 sm:h-4 md:h-6"})]}),g&&d.jsxs("button",{onClick:N,className:K("absolute bottom-4 left-1/2 -translate-x-1/2 z-10","flex items-center justify-center gap-1.5","px-3 py-2 rounded-full","bg-white/95 dark:bg-dark-100/95 ophelia:bg-[#0a0a0a]/95","border border-gray-200/50 dark:border-dark-300/50 ophelia:border-[#262626]/60","shadow-lg backdrop-blur-sm","text-gray-600 dark:text-dark-600 ophelia:text-[#a3a3a3]","hover:bg-gray-50 dark:hover:bg-dark-200 ophelia:hover:bg-[#1a1a1a]","hover:text-gray-900 dark:hover:text-dark-800 ophelia:hover:text-[#fafafa]","transition-all duration-200","hover:shadow-xl hover:scale-105 active:scale-95"),title:"Scroll to bottom",children:[d.jsx(Jn,{className:"h-4 w-4"}),d.jsx("span",{className:"text-xs font-medium",children:"New messages"})]})]})};function t1(r){const e=(r.match(/```/g)||[]).length,t=e%2===1;let a=null;if(t){const n=r.lastIndexOf("```");if(n!==-1){const l=r.slice(n+3).match(/^(\w+)/);l&&(a=l[1])}}return{hasCodeBlocks:e>0,isInCodeBlock:t,language:a}}const gr=Bt.forwardRef(({value:r,onChange:e,className:t,placeholder:a,disabled:n,onKeyDown:s,...l},u)=>{const{hasCodeBlocks:c,isInCodeBlock:p,language:f}=R.useMemo(()=>t1(r),[r]);return d.jsxs("div",{className:"relative w-full",children:[d.jsx("textarea",{ref:u,value:r,onChange:e,onKeyDown:s,placeholder:a,disabled:n,className:K("w-full resize-none transition-all duration-200",p&&["font-mono text-[13px]","bg-gray-50 dark:bg-dark-100/50 ophelia:bg-[#0f0f0f]","rounded-lg"],t),...l}),c&&d.jsx("div",{className:"absolute right-0 top-0 pointer-events-none flex items-center gap-1",children:d.jsxs("div",{className:K("flex items-center gap-1 px-1.5 py-0.5 rounded-md text-[10px] font-medium","bg-gray-100 dark:bg-dark-200 ophelia:bg-[#1a1a1a]","text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3]","border border-gray-200/50 dark:border-dark-300/50 ophelia:border-[#262626]/50",p&&"animate-pulse"),children:[d.jsx(Zn,{className:"h-3 w-3"}),f&&d.jsx("span",{children:f}),!f&&p&&d.jsx("span",{children:"code"})]})})]})});gr.displayName="CodeAwareTextarea";const r1=({images:r,onImagesChange:e,maxImages:t=5,sessionId:a,onDocumentUploaded:n,disabled:s=!1,className:l})=>{const u=R.useRef(null),[c,p]=R.useState(!1),[f,g]=R.useState(!1),[b,w]=R.useState([]),M=async A=>{if(!(!A||s))for(let T=0;T<A.length;T++){const $=A[T];$.type.startsWith("image/")?await k($):$.type.includes("pdf")||$.type.includes("text")?await D($):de.error(`File type not supported: ${$.name}`)}},k=async A=>{if(t-r.length<=0){de.error(`Maximum ${t} images allowed`);return}if(A.size>10*1024*1024){de.error(`Image ${A.name} is too large (max 10MB)`);return}const $=new FileReader;$.onload=W=>{W.target?.result&&e([...r,W.target.result])},$.readAsDataURL(A)},D=async A=>{if(A.size>10*1024*1024){de.error("File size must be less than 10MB");return}g(!0);try{const T=await It.uploadDocument(A,a);if(T.success&&T.data){const $=T.data;w(W=>[...W,$]),n?.($),de.success(`Document "${A.name}" uploaded`)}else de.error(T.error||"Failed to upload document")}catch(T){console.error("Document upload error:",T),de.error("Failed to upload document")}finally{g(!1)}},I=A=>{A.preventDefault(),s||p(!0)},N=A=>{A.preventDefault(),p(!1)},B=A=>{A.preventDefault(),p(!1),s||M(A.dataTransfer.files)},L=A=>{const T=r.filter(($,W)=>W!==A);e(T)},z=async A=>{try{const T=await It.deleteDocument(A);T.success?(w($=>$.filter(W=>W.id!==A)),de.success("Document removed")):de.error(T.error||"Failed to remove document")}catch(T){console.error("Error removing document:",T),de.error("Failed to remove document")}},C=A=>{if(A===0)return"0 B";const T=1024,$=["B","KB","MB","GB"],W=Math.floor(Math.log(A)/Math.log(T));return parseFloat((A/Math.pow(T,W)).toFixed(1))+" "+$[W]},j=r.length>0||b.length>0;return d.jsxs("div",{className:K("space-y-3",l),children:[d.jsxs("div",{className:K("border-2 border-dashed rounded-xl p-6 transition-all duration-200 cursor-pointer","border-gray-300 dark:border-gray-600 ophelia:border-[#3f3f46]","hover:border-primary-400 dark:hover:border-primary-500 ophelia:hover:border-[#9333ea]",c&&"border-primary-500 dark:border-primary-400 ophelia:border-[#a855f7] bg-primary-50/50 dark:bg-primary-900/10 ophelia:bg-[#9333ea]/10",s&&"opacity-50 cursor-not-allowed"),onDragOver:I,onDragLeave:N,onDrop:B,onClick:()=>!s&&u.current?.click(),children:[d.jsx("input",{ref:u,type:"file",multiple:!0,accept:"image/*,.pdf,.txt",onChange:A=>{M(A.target.files),A.target.value=""},className:"hidden",disabled:s}),d.jsxs("div",{className:"flex flex-col items-center text-center",children:[f?d.jsx(ga,{className:"h-8 w-8 text-gray-400 dark:text-gray-500 ophelia:text-[#737373] mb-2 animate-spin"}):d.jsx(ba,{className:"h-8 w-8 text-gray-400 dark:text-gray-500 ophelia:text-[#737373] mb-2"}),d.jsxs("p",{className:"text-sm text-gray-700 dark:text-gray-300 ophelia:text-[#d4d4d4]",children:["Drop images here or"," ",d.jsx("span",{className:"text-primary-600 dark:text-primary-400 ophelia:text-[#a855f7] font-medium",children:"browse"})]}),d.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400 ophelia:text-[#737373] mt-1",children:"Supports: JPG, PNG, GIF, WebP (max 10MB each)"})]})]}),j&&d.jsxs("div",{className:"flex flex-wrap gap-2",children:[r.map((A,T)=>d.jsxs("div",{className:"relative group w-16 h-16 rounded-lg overflow-hidden bg-gray-100 dark:bg-gray-800 ophelia:bg-[#1a1a1a] border border-gray-200 dark:border-gray-700 ophelia:border-[#262626]",children:[d.jsx("img",{src:A,alt:`Upload ${T+1}`,className:"w-full h-full object-cover"}),d.jsx("button",{onClick:$=>{$.stopPropagation(),L(T)},className:"absolute top-0.5 right-0.5 p-0.5 rounded-full bg-black/60 hover:bg-black/80 text-white opacity-0 group-hover:opacity-100 transition-opacity",children:d.jsx(v0,{className:"h-3 w-3"})})]},`img-${T}`)),b.map(A=>d.jsxs("div",{className:"relative group flex items-center gap-2 px-3 py-2 rounded-lg bg-gray-100 dark:bg-gray-800 ophelia:bg-[#1a1a1a] border border-gray-200 dark:border-gray-700 ophelia:border-[#262626]",children:[A.fileType==="pdf"?d.jsx(ya,{className:"w-4 h-4 text-red-500 flex-shrink-0"}):d.jsx(Qn,{className:"w-4 h-4 text-blue-500 flex-shrink-0"}),d.jsxs("div",{className:"min-w-0",children:[d.jsx("p",{className:"text-xs font-medium text-gray-900 dark:text-gray-100 ophelia:text-[#fafafa] truncate max-w-[100px]",children:A.filename}),d.jsx("p",{className:"text-[10px] text-gray-500 dark:text-gray-400 ophelia:text-[#737373]",children:C(A.size)})]}),d.jsx("button",{onClick:T=>{T.stopPropagation(),z(A.id)},className:"p-0.5 rounded-full hover:bg-gray-200 dark:hover:bg-gray-700 ophelia:hover:bg-[#262626] text-gray-500 hover:text-red-500 transition-colors",children:d.jsx(v0,{className:"h-3 w-3"})})]},A.id))]})]})},a1=({sessionId:r,className:e=""})=>{const[t,a]=R.useState([]);if(R.useEffect(()=>{if(!r)return;(async()=>{try{const u=await It.getDocuments(r);u.success&&u.data&&a(u.data)}catch(u){console.error("Failed to load documents:",u)}})()},[r]),!r||t.length===0)return null;const n=t.reduce((l,u)=>l+u.size,0),s=l=>{if(l===0)return"0 B";const u=1024,c=["B","KB","MB","GB"],p=Math.floor(Math.log(l)/Math.log(u));return parseFloat((l/Math.pow(u,p)).toFixed(1))+" "+c[p]};return d.jsxs("div",{className:`
|
|
269
269
|
inline-flex items-center space-x-1 px-2 py-1
|
|
270
270
|
bg-blue-50 dark:bg-blue-900/20
|
|
271
271
|
border border-blue-200 dark:border-blue-800
|
|
272
272
|
rounded-md text-xs
|
|
273
273
|
${e}
|
|
274
|
-
`,title:`${t.length} document(s) available for context - Total: ${s(n)}`,children:[d.jsx(
|
|
274
|
+
`,title:`${t.length} document(s) available for context - Total: ${s(n)}`,children:[d.jsx(_n,{className:"w-3 h-3 text-blue-600 dark:text-blue-400"}),d.jsxs("span",{className:"text-blue-700 dark:text-blue-300 font-medium",children:[t.length," doc",t.length!==1?"s":""]})]})},p0=[{label:"None (Natural Language)",value:null,description:"Default natural language response"},{label:"JSON",value:"json",description:"Structured JSON format"},{label:"List",value:{type:"object",properties:{items:{type:"array",items:{type:"string"}}},required:["items"]},description:"Array of items"},{label:"Summary",value:{type:"object",properties:{title:{type:"string"},summary:{type:"string"},key_points:{type:"array",items:{type:"string"}}},required:["title","summary","key_points"]},description:"Document summary with key points"},{label:"Analysis",value:{type:"object",properties:{analysis:{type:"string"},pros:{type:"array",items:{type:"string"}},cons:{type:"array",items:{type:"string"}},recommendation:{type:"string"}},required:["analysis","pros","cons","recommendation"]},description:"Structured analysis with pros/cons"},{label:"Custom Schema",value:"custom",description:"Define your own JSON schema"}],n1=({format:r,onFormatChange:e,className:t})=>{const[a,n]=R.useState(!1),[s,l]=R.useState(""),u=()=>{if(r===null)return p0[0];if(r==="json")return p0[1];if(typeof r=="object"){const g=p0.find(b=>typeof b.value=="object"&&JSON.stringify(b.value)===JSON.stringify(r));return g||{label:"Custom",value:r,description:"Custom JSON schema"}}return p0[0]},c=g=>{const b=p0.find(w=>w.label===g);if(b){if(b.value==="custom"){n(!0);return}n(!1),e(b.value)}},p=()=>{try{const g=JSON.parse(s);e(g),n(!1)}catch(g){console.error("Invalid JSON schema:",g)}},f=()=>{const g=u();return!g.value||g.value==="json"?null:d.jsxs("div",{className:"mt-3 p-3 bg-gray-50 dark:bg-gray-800 rounded-md",children:[d.jsxs("div",{className:"flex items-center mb-2",children:[d.jsx(es,{className:"h-4 w-4 text-gray-500 mr-2"}),d.jsx("span",{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:"Schema Preview"})]}),d.jsx("pre",{className:"text-xs text-gray-700 dark:text-gray-300 overflow-x-auto",children:JSON.stringify(g.value,null,2)})]})};return d.jsxs("div",{className:K("space-y-3",t),children:[d.jsx("div",{className:"flex items-center justify-between",children:d.jsxs("div",{className:"flex items-center",children:[d.jsx(xa,{className:"h-4 w-4 text-gray-500 mr-2"}),d.jsx("span",{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:"Response Format"})]})}),d.jsx(Pn,{value:u().label,onChange:g=>c(g.target.value),options:p0.map(g=>({value:g.label,label:g.label}))}),d.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400",children:u().description}),a&&d.jsxs("div",{className:"space-y-3",children:[d.jsx(Hn,{value:s,onChange:g=>l(g.target.value),placeholder:`{
|
|
275
275
|
"type": "object",
|
|
276
276
|
"properties": {
|
|
277
277
|
"field1": { "type": "string" },
|
|
278
278
|
"field2": { "type": "number" }
|
|
279
279
|
},
|
|
280
280
|
"required": ["field1"]
|
|
281
|
-
}`,rows:8,className:"font-mono text-sm"}),d.jsxs("div",{className:"flex gap-2",children:[d.jsx(Ve,{onClick:p,size:"sm",disabled:!s.trim(),children:"Apply Schema"}),d.jsx(Ve,{onClick:()=>{n(!1),l("")},variant:"outline",size:"sm",children:"Cancel"})]})]}),f(),r&&d.jsxs("div",{className:"flex items-center text-xs text-green-600 dark:text-green-400",children:[d.jsx(ya,{className:"h-3 w-3 mr-1"}),"Structured output enabled"]})]})},at=({models:r,selectedModel:e,onModelChange:t,currentPersona:a,className:n,disabled:s=!1,compact:l=!1})=>{const[u,c]=R.useState(!1),[p,f]=R.useState(""),g=R.useRef(null),b=R.useRef(null),M=[{type:"personas",label:"Personas",icon:d.jsx(Et,{className:"h-4 w-4 text-purple-600 dark:text-purple-400 ophelia:text-[#a855f7]"}),models:r.filter(z=>z.isPersona),color:"purple"},{type:"ollama",label:"Ollama Models",icon:d.jsx(ft,{className:"h-4 w-4 text-green-600 dark:text-green-400 ophelia:text-[#a855f7]"}),models:r.filter(z=>!z.isPersona&&!z.isPlugin),color:"green"},{type:"plugins",label:"Plugin Models",icon:d.jsx(Ft,{className:"h-4 w-4 text-green-600 dark:text-green-400 ophelia:text-[#a855f7]"}),models:r.filter(z=>z.isPlugin),color:"green"}].filter(z=>z.models.length>0).map(z=>({...z,models:z.models.filter(C=>C.name.toLowerCase().includes(p.toLowerCase())||C.personaName&&C.personaName.toLowerCase().includes(p.toLowerCase())||C.pluginName&&C.pluginName.toLowerCase().includes(p.toLowerCase()))})).filter(z=>z.models.length>0),k=r.find(z=>z.name===e||e.startsWith("persona:")&&z.name===e);R.useEffect(()=>{const z=C=>{g.current&&!g.current.contains(C.target)&&(c(!1),f(""))};return document.addEventListener("mousedown",z),()=>document.removeEventListener("mousedown",z)},[]),R.useEffect(()=>{u&&b.current&&b.current.focus()},[u]);const D=z=>{t({target:{value:z}}),c(!1),f("")},I=z=>z.isPersona?d.jsx(Et,{className:"h-4 w-4 text-purple-600 dark:text-purple-400"}):z.isPlugin?d.jsx(Ft,{className:"h-4 w-4 text-green-600 dark:text-green-400 ophelia:text-[#a855f7]"}):d.jsx(ft,{className:"h-4 w-4 text-green-600 dark:text-green-400 ophelia:text-[#a855f7]"}),N=z=>z.isPersona?z.personaName||z.name:z.isPlugin?`${z.name}`:z.name,B=z=>z.isPersona?`via ${z.model}`:z.isPlugin?`via ${z.pluginName}`:null,L=()=>{if(!k)return l?d.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[d.jsx(ft,{className:"h-4 w-4"}),d.jsx("span",{className:"text-xs font-medium text-gray-400 dark:text-gray-500 truncate",children:"Select Model"})]}):"Select Model";if(l){const j=N(k);return d.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[I(k),d.jsx("span",{className:"text-xs font-medium text-gray-700 dark:text-gray-200 ophelia:text-[#e5e5e5] truncate",children:j})]})}const z=N(k),C=B(k);return d.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[I(k),d.jsxs("div",{className:"flex flex-col min-w-0",children:[d.jsx("span",{className:"text-sm font-medium truncate",children:z}),C&&d.jsx("span",{className:"text-xs text-gray-500 dark:text-gray-400 truncate",children:C})]}),k.isPersona&&a&&d.jsxs("div",{className:"flex items-center gap-1 ml-auto",children:[d.jsx(Z0,{className:"h-3 w-3 text-purple-600 dark:text-purple-400"}),a.embedding_model&&d.jsx(wa,{className:"h-3 w-3 text-purple-500 dark:text-purple-300"})]})]})};return d.jsxs("div",{className:K("relative",n),ref:g,children:[d.jsxs("button",{type:"button",onClick:()=>!s&&c(!u),disabled:s,className:K(l?"h-[44px] sm:h-[52px] px-3 flex items-center justify-between text-left w-full ":"w-full flex items-center justify-between gap-2 px-3 py-2 text-left ","bg-gray-50 dark:bg-dark-200 ophelia:bg-[#121212] border border-gray-200 dark:border-dark-300 ophelia:border-[#262626]","rounded-lg text-sm hover:bg-gray-100 dark:hover:bg-dark-100 ophelia:hover:bg-[#1a1a1a]","focus:outline-none focus:ring-2 focus:ring-primary-500/20 ophelia:focus:ring-[#9333ea]/20 focus:border-primary-500 ophelia:focus:border-[#9333ea]",s?"opacity-50 cursor-not-allowed":"cursor-pointer"),title:l?k?N(k):"Select Model":void 0,children:[L(),d.jsx(z0,{className:K(l?"h-3 w-3":"h-4 w-4","text-gray-400 flex-shrink-0",u&&"rotate-180")})]}),u&&Xt.createPortal(d.jsxs("div",{className:"fixed inset-0 z-[999999] flex items-start sm:items-center justify-center p-2 sm:p-4",children:[d.jsx("div",{className:"absolute inset-0 bg-black/50 backdrop-blur-sm",onClick:()=>c(!1)}),d.jsxs("div",{className:K("relative bg-white dark:bg-dark-100 ophelia:bg-[#0a0a0a] border border-gray-200 dark:border-dark-300 ophelia:border-[#1a1a1a] shadow-2xl","w-full max-w-sm sm:w-96 sm:max-w-[90vw]","mt-2 sm:mt-0 rounded-xl sm:rounded-xl","max-h-[85vh] sm:max-h-none flex flex-col"),onClick:z=>z.stopPropagation(),children:[d.jsx("div",{className:"p-3 sm:p-4 border-b border-gray-200 dark:border-dark-200 ophelia:border-[#1a1a1a] flex-shrink-0",children:d.jsx("input",{ref:b,type:"text",placeholder:"Search models...",value:p,onChange:z=>f(z.target.value),onClick:z=>z.stopPropagation(),onMouseDown:z=>z.stopPropagation(),className:K("w-full px-3 py-2.5 sm:py-2 text-sm bg-gray-50 dark:bg-dark-200 ophelia:bg-[#121212] ophelia:text-[#fafafa] ophelia:placeholder-[#737373]","border border-gray-200 dark:border-dark-300 ophelia:border-[#262626] rounded-lg","focus:outline-none focus:ring-2 focus:ring-primary-500/20 ophelia:focus:ring-[#9333ea]/20 focus:border-primary-500 ophelia:focus:border-[#9333ea]","touch-manipulation")})}),d.jsx("div",{className:"flex-1 overflow-y-auto scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-dark-400 max-h-80 sm:max-h-80",children:M.length>0?M.map(z=>d.jsxs("div",{children:[d.jsx("div",{className:"px-3 sm:px-3 py-2.5 sm:py-2 text-xs font-semibold text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3] bg-gray-100 dark:bg-dark-300 ophelia:bg-[#0a0a0a] border-b border-gray-200 dark:border-dark-400 ophelia:border-[#1a1a1a] sticky top-0",children:d.jsxs("div",{className:"flex items-center gap-2",children:[z.icon,z.label," (",z.models.length,")"]})}),z.models.map(C=>d.jsx("div",{onMouseDown:j=>{j.preventDefault(),D(C.name)},onTouchStart:j=>{j.preventDefault(),D(C.name)},className:K("px-3 sm:px-4 py-3.5 sm:py-3 cursor-pointer border-b border-gray-100 dark:border-dark-200 ophelia:border-[#1a1a1a] last:border-b-0","hover:bg-gray-50 dark:hover:bg-dark-200 ophelia:hover:bg-[#121212] active:bg-gray-100 dark:active:bg-dark-100 ophelia:active:bg-[#1a1a1a]","bg-white dark:bg-dark-100 ophelia:bg-[#0a0a0a] touch-manipulation","transition-colors duration-150 ease-in-out",(e===C.name||e.startsWith("persona:")&&C.name===e)&&"bg-primary-50 dark:bg-primary-900 ophelia:bg-[rgba(147,51,234,0.15)] border-l-4 border-primary-500 ophelia:border-l-[#9333ea]"),children:d.jsxs("div",{className:"flex items-center gap-3",children:[I(C),d.jsxs("div",{className:"flex-1 min-w-0",children:[d.jsx("div",{className:"text-sm font-medium text-gray-900 dark:text-gray-100 ophelia:text-[#fafafa] truncate",children:N(C)}),B(C)&&d.jsx("div",{className:"text-xs text-gray-500 dark:text-gray-400 ophelia:text-[#737373] truncate",children:B(C)})]}),(e===C.name||e.startsWith("persona:")&&C.name===e)&&d.jsx(nt,{className:"h-4 w-4 text-primary-600 dark:text-primary-400 ophelia:text-[#a855f7] flex-shrink-0"})]})},C.name))]},z.type)):d.jsxs("div",{className:"px-4 py-8 text-center text-gray-500 dark:text-gray-400 ophelia:text-[#737373] bg-white dark:bg-dark-100 ophelia:bg-[#0a0a0a]",children:[d.jsx(rs,{className:"h-8 w-8 mx-auto mb-2 text-gray-300 dark:text-gray-600 ophelia:text-[#525252]"}),d.jsx("p",{className:"text-sm",children:"No models found"})]})})]})]}),document.body),d.jsx("select",{value:e,onChange:t,className:"sr-only",tabIndex:-1,children:r.map(z=>d.jsx("option",{value:z.name,children:N(z)},z.name))})]})},s1=({onSendMessage:r,onStopGeneration:e,disabled:t=!1})=>{const[a,n]=R.useState(""),[s,l]=R.useState([]),[u,c]=R.useState(null),[p,f]=R.useState(!1),[g,b]=R.useState(null),{isGenerating:w,setBackgroundImage:M}=g0(),{currentSession:k,models:D}=be(),I=R.useRef(null),N=j=>{j.preventDefault(),!(!a.trim()||w)&&(r(a.trim(),s.length>0?s:void 0,u||void 0),n(""),l([]))},B=j=>{j.key==="Enter"&&!j.shiftKey&&(j.preventDefault(),N(j))},L=()=>{e()};R.useEffect(()=>{const j=I.current;j&&(j.style.height="auto",j.style.height=Math.min(j.scrollHeight,200)+"px")},[a]),R.useEffect(()=>{(async()=>{if(k?.personaId)try{const A=await yr.getPersona(k.personaId);if(A.success&&A.data)b(A.data);else{console.warn(`Persona ${k.personaId} not found, clearing reference`),b(null);const{setCurrentSession:T}=be.getState();T({...k,personaId:void 0})}}catch(A){if(console.error("Failed to load current persona:",A),b(null),k){const{setCurrentSession:T}=be.getState();T({...k,personaId:void 0})}}else b(null)})()},[k?.personaId]);const z=async j=>{const A=j.target.value;if(k)try{if(A.startsWith("persona:")){const T=A.replace("persona:",""),$=await yr.getPersona(T);if(!$.success||!$.data){R0.error("Failed to load persona details");return}const W=$.data,G=await J0.updateSession(k.id,{personaId:T,model:A});if(G.success&&G.data){const{sessions:Y}=be.getState(),re=Y.map(Q=>Q.id===k.id?G.data:Q);be.setState({sessions:re,currentSession:G.data}),W.background&&M(W.background),R0.success("Persona applied")}}else{const T=await J0.updateSession(k.id,{model:A,personaId:void 0});if(T.success&&T.data){const{sessions:$}=be.getState(),W=$.map(G=>G.id===k.id?T.data:G);be.setState({sessions:W,currentSession:T.data}),M(null),R0.success("Model updated")}}}catch(T){console.error("Failed to update session:",T),R0.error("Failed to update session")}},C=s.length>0||u!==null;return d.jsx("div",{className:"pointer-events-none",children:d.jsxs("div",{className:"max-w-5xl mx-auto px-3 sm:px-4 md:px-6 w-full pointer-events-auto",children:[p&&d.jsxs("div",{className:"mb-2 p-3 rounded-2xl bg-white/95 dark:bg-dark-100/95 ophelia:bg-[#0a0a0a]/95 backdrop-blur-md border border-gray-200/50 dark:border-dark-300/50 ophelia:border-[#262626]/50 shadow-lg",children:[d.jsx(r1,{images:s,onImagesChange:l,maxImages:5,sessionId:k?.id,disabled:t}),d.jsx(n1,{format:u,onFormatChange:c})]}),d.jsxs("div",{className:"py-2 sm:py-3",children:[d.jsx("form",{onSubmit:N,children:d.jsxs("div",{className:K("flex items-center gap-2 p-2 sm:p-3 rounded-2xl sm:rounded-3xl border transition-all duration-300 ease-out shadow-lg","bg-white/95 dark:bg-dark-100/95 ophelia:bg-[#0a0a0a]/95 backdrop-blur-md","border-gray-200/50 dark:border-dark-300/50 ophelia:border-[#262626]/60","hover:border-gray-300/70 dark:hover:border-dark-400/70 ophelia:hover:border-[#3f3f46]/80","focus-within:border-primary-400/70 dark:focus-within:border-primary-500/70 ophelia:focus-within:border-[#9333ea]/70","focus-within:shadow-xl"),children:[d.jsx(Ve,{type:"button",variant:"ghost",size:"sm",onClick:()=>f(!p),className:K("h-8 w-8 sm:h-9 sm:w-9 !p-0 rounded-full flex-shrink-0","hover:bg-gray-100 dark:hover:bg-dark-200/80 ophelia:hover:bg-[#1a1a1a]","transition-all duration-200 touch-manipulation","hover:scale-105 active:scale-95",C&&"text-primary-600 dark:text-primary-400 ophelia:text-[#a855f7]",p&&"bg-gray-100 dark:bg-dark-200/80 ophelia:bg-[#1a1a1a]"),title:"Attachments and advanced features",style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"0"},children:C?d.jsxs("div",{className:"relative flex items-center justify-center",children:[d.jsx(ka,{className:"h-4 w-4"}),d.jsx("div",{className:"absolute -top-0.5 -right-0.5 h-2 w-2 bg-primary-500 dark:bg-primary-400 ophelia:bg-[#a855f7] rounded-full ring-2 ring-white dark:ring-dark-50 ophelia:ring-[#0a0a0a]"})]}):p?d.jsx(Sa,{className:"h-4 w-4"}):d.jsx(Ma,{className:"h-4 w-4"})}),d.jsx("div",{className:"flex-1 min-w-0",children:d.jsx(gr,{ref:I,value:a,onChange:j=>n(j.target.value),onKeyDown:B,placeholder:"Send a message",disabled:t,className:"!border-0 !bg-transparent !shadow-none !p-0 !m-0 !rounded-none !focus:ring-0 !focus:border-0 !focus:shadow-none !focus:bg-transparent min-h-[32px] sm:min-h-[36px] max-h-[120px] resize-none scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-dark-400 focus:outline-none placeholder:text-gray-500 dark:placeholder:text-dark-500 text-base sm:text-sm leading-none touch-manipulation",rows:1,style:{boxShadow:"none !important",border:"none !important",outline:"none !important",padding:"0 !important",margin:"0 !important",lineHeight:"1.2 !important",verticalAlign:"middle"}})}),d.jsxs("div",{className:"flex items-center gap-1 sm:gap-2 flex-shrink-0",children:[k&&D.length>0&&d.jsx("div",{className:"hidden sm:block",children:d.jsx(at,{models:D,selectedModel:k.personaId?`persona:${k.personaId}`:k.model,onModelChange:z,currentPersona:g,className:"min-w-[160px] max-w-[240px] border-0 bg-gray-100/80 dark:bg-dark-100/80 ophelia:bg-[#1a1a1a]/80 rounded-xl text-sm hover:bg-gray-200/80 dark:hover:bg-dark-200/60 ophelia:hover:bg-[#262626]/80 transition-colors duration-200",compact:!0})}),w?d.jsx(Ve,{type:"button",variant:"ghost",size:"sm",onClick:L,className:K("h-8 w-8 sm:h-9 sm:w-9 p-0 rounded-full flex-shrink-0 flex items-center justify-center","bg-red-50 dark:bg-red-900/20 ophelia:bg-red-900/30","text-red-500 dark:text-red-400 ophelia:text-red-400","hover:bg-red-100 dark:hover:bg-red-900/30 ophelia:hover:bg-red-900/40","transition-all duration-200 touch-manipulation","hover:scale-105 active:scale-95"),title:"Stop generation",children:d.jsx(va,{className:"h-4 w-4"})}):d.jsx(Ve,{type:"submit",variant:"ghost",size:"sm",disabled:!a.trim()||t,className:K("h-8 w-8 sm:h-9 sm:w-9 p-0 rounded-full flex-shrink-0 flex items-center justify-center","text-gray-400 dark:text-dark-500 ophelia:text-[#525252]","disabled:opacity-40 disabled:hover:bg-transparent disabled:cursor-not-allowed","transition-all duration-200 touch-manipulation",a.trim()&&!t&&["bg-primary-500 dark:bg-primary-600 ophelia:bg-[#9333ea]","text-white dark:text-white ophelia:text-white","hover:bg-primary-600 dark:hover:bg-primary-500 ophelia:hover:bg-[#a855f7]","shadow-md hover:shadow-lg","hover:scale-105 active:scale-95"]),title:"Send message",children:d.jsx(Na,{className:"h-4 w-4"})})]})]})}),k&&D.length>0&&d.jsx("div",{className:"sm:hidden mt-3",children:d.jsx(at,{models:D,selectedModel:k.personaId?`persona:${k.personaId}`:k.model,onModelChange:z,currentPersona:g,className:"w-full rounded-xl bg-gray-100/80 dark:bg-dark-100/80 ophelia:bg-[#1a1a1a]/80 border-0 transition-colors duration-200",compact:!0})}),d.jsxs("div",{className:"mt-2 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-dark-600",children:[d.jsx(a1,{sessionId:k?.id}),d.jsxs("div",{className:"text-center",children:[d.jsx("a",{href:"https://librewebui.org",target:"_blank",rel:"noopener noreferrer",className:"libre-brand underline hover:text-primary-600 dark:hover:text-primary-400 transition-colors",style:{fontSize:"1.1em",lineHeight:1},children:"Libre WebUI"})," ",d.jsxs("span",{className:"text-xs text-gray-400 dark:text-gray-500",style:{fontSize:"0.55rem"},children:["v","0.2.7"]})," ",d.jsx("span",{className:"text-gray-300 dark:text-gray-600 opacity-50",children:"•"})," ",d.jsx("span",{className:"text-gray-400 dark:text-gray-500",style:{fontSize:"0.55rem"},children:"LLM can make mistakes - verify important information"}),C&&d.jsxs("span",{className:"ml-2 text-primary-600 dark:text-primary-400",children:["•"," ",s.length>0&&`${s.length} image${s.length>1?"s":""}`,s.length>0&&u&&" • ",u&&"Structured output"]})]})]})]})]})})},i1=({persona:r,onClear:e,className:t})=>{const[a,n]=R.useState(!1),s=R.useRef(null),[l,u]=R.useState({top:0,left:0});R.useEffect(()=>{if(a&&s.current){const f=s.current.getBoundingClientRect();u({top:f.bottom+8,left:f.left})}},[a]);const c=!!(r.memory_settings?.enabled||r.mutation_settings?.enabled),p=()=>r.avatar?r.avatar:`https://ui-avatars.com/api/?name=${encodeURIComponent(r.name)}&background=6366f1&color=fff&size=64`;return d.jsxs("div",{className:K("relative",t),children:[d.jsxs("button",{ref:s,onClick:()=>n(!a),className:K("flex items-center gap-2 px-3 py-1.5 rounded-full transition-all duration-200","bg-primary-50 dark:bg-primary-900/30 ophelia:bg-[#9333ea]/15","border border-primary-200 dark:border-primary-700/50 ophelia:border-[#7c3aed]/30","hover:bg-primary-100 dark:hover:bg-primary-900/40 ophelia:hover:bg-[#9333ea]/20","text-primary-700 dark:text-primary-300 ophelia:text-[#c084fc]"),children:[d.jsx("img",{src:p(),alt:r.name,className:"w-5 h-5 rounded-full object-cover"}),d.jsx("span",{className:"text-sm font-medium max-w-[120px] truncate",children:r.name}),c&&d.jsx(wa,{className:"h-3 w-3 text-purple-500 dark:text-purple-400"}),d.jsx(z0,{className:K("h-3.5 w-3.5 transition-transform duration-200",a&&"rotate-180")})]}),a&&Xt.createPortal(d.jsxs(d.Fragment,{children:[d.jsx("div",{className:"fixed inset-0 z-[9998]",onClick:()=>n(!1)}),d.jsx("div",{className:"fixed w-72 z-[9999]",style:{top:l.top,left:l.left},children:d.jsxs("div",{className:K("rounded-xl overflow-hidden shadow-xl","bg-white dark:bg-dark-100 ophelia:bg-[#0a0a0a]","border border-gray-200 dark:border-dark-300 ophelia:border-[#262626]"),children:[d.jsxs("div",{className:"relative h-16",children:[r.background?d.jsx("div",{className:"absolute inset-0 bg-cover bg-center",style:{backgroundImage:`url(${r.background})`}}):d.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-primary-400 via-primary-500 to-purple-600 dark:from-primary-600 dark:via-primary-700 dark:to-purple-800 ophelia:from-[#9333ea] ophelia:via-[#7c3aed] ophelia:to-[#6d28d9]"}),d.jsx("div",{className:"absolute inset-0 bg-black/10"}),e&&d.jsx("button",{onClick:f=>{f.stopPropagation(),e(),n(!1)},className:"absolute top-2 right-2 p-1 rounded-full bg-white/20 hover:bg-white/30 backdrop-blur-sm transition-colors",title:"Remove persona",children:d.jsx(v0,{className:"h-3.5 w-3.5 text-white"})}),c&&d.jsxs("div",{className:"absolute top-2 left-2 flex items-center gap-1 px-2 py-0.5 rounded-full bg-white/20 backdrop-blur-sm text-white text-[10px] font-medium",children:[d.jsx(Z0,{className:"h-3 w-3"}),"Enhanced"]})]}),d.jsx("div",{className:"relative px-4 -mt-6",children:d.jsx("img",{src:p(),alt:r.name,className:"w-12 h-12 rounded-lg object-cover ring-3 ring-white dark:ring-dark-100 ophelia:ring-[#0a0a0a] shadow-md"})}),d.jsxs("div",{className:"px-4 pt-2 pb-4",children:[d.jsx("h4",{className:"text-base font-semibold text-gray-900 dark:text-gray-100 ophelia:text-[#fafafa]",children:r.name}),d.jsxs("p",{className:"text-xs text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3] flex items-center gap-1 mt-0.5",children:[d.jsx(as,{className:"h-3 w-3"}),r.model]}),r.description&&d.jsx("p",{className:"text-xs text-gray-600 dark:text-gray-400 ophelia:text-[#a3a3a3] mt-2 line-clamp-2",children:r.description}),r.parameters.system_prompt&&d.jsxs("div",{className:"mt-3 p-2 rounded-lg bg-gray-50 dark:bg-dark-50 ophelia:bg-[#121212] border border-gray-100 dark:border-dark-200 ophelia:border-[#1a1a1a]",children:[d.jsxs("div",{className:"flex items-center gap-1 mb-1",children:[d.jsx(ns,{className:"h-2.5 w-2.5 text-gray-400"}),d.jsx("span",{className:"text-[9px] uppercase tracking-wider font-medium text-gray-400",children:"System"})]}),d.jsxs("p",{className:"text-[11px] text-gray-600 dark:text-gray-400 ophelia:text-[#a3a3a3] line-clamp-2 italic",children:["“",r.parameters.system_prompt,"”"]})]}),d.jsxs("div",{className:"flex flex-wrap gap-1 mt-3",children:[d.jsxs("span",{className:"inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[10px] font-medium bg-gray-100 dark:bg-dark-200 ophelia:bg-[#1a1a1a] text-gray-600 dark:text-gray-400 ophelia:text-[#a3a3a3]",children:[d.jsx(Ft,{className:"h-2.5 w-2.5"}),r.parameters.temperature?.toFixed(1)||"0.7"]}),d.jsxs("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-gray-100 dark:bg-dark-200 ophelia:bg-[#1a1a1a] text-gray-600 dark:text-gray-400 ophelia:text-[#a3a3a3]",children:["Top-P ",r.parameters.top_p?.toFixed(1)||"0.9"]}),r.memory_settings?.enabled&&d.jsxs("span",{className:"inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[10px] font-medium bg-purple-100 dark:bg-purple-900/30 ophelia:bg-[#9333ea]/20 text-purple-700 dark:text-purple-300 ophelia:text-[#c084fc]",children:[d.jsx(Z0,{className:"h-2.5 w-2.5"}),"Memory"]})]})]})]})})]}),document.body)]})},l1=({images:r,onImagesChange:e,maxImages:t=5,className:a})=>{const n=R.useRef(null),[s,l]=R.useState(!1),u=w=>{if(!w)return;const M=[],k=t-r.length;for(let D=0;D<Math.min(w.length,k);D++){const I=w[D];if(!I.type.startsWith("image/")){de.error(`File ${I.name} is not an image`);continue}if(I.size>10*1024*1024){de.error(`Image ${I.name} is too large (max 10MB)`);continue}const N=new FileReader;N.onload=B=>{B.target?.result&&(M.push(B.target.result),M.length===Math.min(w.length,k)&&e([...r,...M]))},N.readAsDataURL(I)}w.length>k&&de.error(`Only ${k} more images can be added`)},c=w=>{w.preventDefault(),l(!0)},p=w=>{w.preventDefault(),l(!1)},f=w=>{w.preventDefault(),l(!1),u(w.dataTransfer.files)},g=w=>{const M=r.filter((k,D)=>D!==w);e(M)},b=r.length<t;return d.jsxs("div",{className:K("space-y-3",a),children:[b&&d.jsxs("div",{className:K("border-2 border-dashed border-gray-300 dark:border-gray-600 rounded-lg p-4 transition-colors","hover:border-primary-400 dark:hover:border-primary-500",s&&"border-primary-500 bg-primary-50 dark:bg-primary-900/20"),onDragOver:c,onDragLeave:p,onDrop:f,children:[d.jsx("input",{ref:n,type:"file",multiple:!0,accept:"image/*",onChange:w=>u(w.target.files),className:"hidden"}),d.jsxs("div",{className:"flex flex-col items-center text-center",children:[d.jsx(ba,{className:"h-8 w-8 text-gray-400 dark:text-gray-500 mb-2"}),d.jsxs("p",{className:"text-sm text-gray-700 dark:text-gray-300 mb-2",children:["Drop images here or"," ",d.jsx("button",{onClick:()=>n.current?.click(),className:"text-primary-600 dark:text-primary-400 hover:underline font-medium",children:"browse"})]}),d.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400",children:"Supports: JPG, PNG, GIF, WebP (max 10MB each)"})]})]}),r.length>0&&d.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-3",children:r.map((w,M)=>d.jsxs("div",{className:"relative group aspect-square rounded-lg overflow-hidden bg-gray-100 dark:bg-gray-800 border border-gray-200 dark:border-gray-700",children:[d.jsx("img",{src:w,alt:`Upload ${M+1}`,className:"w-full h-full object-cover"}),d.jsx("div",{className:"absolute inset-0 bg-black bg-opacity-0 group-hover:bg-opacity-50 transition-all duration-200 flex items-center justify-center",children:d.jsx(Ve,{variant:"ghost",size:"sm",onClick:()=>g(M),className:"opacity-0 group-hover:opacity-100 transition-opacity bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 hover:bg-red-100 dark:hover:bg-red-900/20 hover:text-red-600 dark:hover:text-red-400 p-1 rounded-full",children:d.jsx(v0,{className:"h-4 w-4"})})})]},M))}),b&&r.length>0&&d.jsxs(Ve,{variant:"outline",size:"sm",onClick:()=>n.current?.click(),className:"w-full sm:w-auto",children:[d.jsx(ss,{className:"h-4 w-4 mr-2"}),"Add More Images (",r.length,"/",t,")"]})]})},o1=r=>{const[e,t]=R.useState(""),[a,n]=R.useState(null),[s,l]=R.useState(!1),{addMessage:u,updateMessage:c,updateMessageWithStatistics:p,updateSessionTitle:f,setGeneratingTitleForSession:g}=be(),{setIsGenerating:b,preferences:w}=g0(),M=R.useRef(null),k=R.useRef(null),D=R.useRef(""),I=R.useRef(0),N=R.useRef();R.useEffect(()=>()=>{ge.offMessage("user_message"),ge.offMessage("assistant_chunk"),ge.offMessage("assistant_complete"),ge.offMessage("error")},[r]),R.useEffect(()=>{if(!r){ge.offMessage("user_message"),ge.offMessage("assistant_chunk"),ge.offMessage("assistant_complete"),ge.offMessage("error");return}return ge.onMessage("user_message",()=>{}),ge.onMessage("assistant_chunk",A=>{const T=A,$=T.messageId||M.current;$&&(D.current=T.total,t(T.total),N.current&&clearTimeout(N.current),N.current=setTimeout(()=>{c(r,$,D.current),I.current=Date.now()},T.done?0:200))}),ge.onMessage("assistant_complete",A=>{const T=A;console.log("Hook: Received assistant_complete for session:",r,"messageId:",T.messageId,"with statistics:",!!T.statistics),l(!1),t(""),b(!1);const $=T.messageId||M.current;if(T&&$){const Q=D.current||T.content;p(r,$,Q,T.statistics)}const G=g0.getState().preferences.titleSettings,Y=be.getState().currentSession,re=k.current;console.log("Auto-title check:",{firstMessage:re,autoTitle:G?.autoTitle,taskModel:G?.taskModel,sessionTitle:Y?.title}),re&&G?.autoTitle&&G?.taskModel&&Y?.title==="New Chat"&&(console.log("Triggering auto-title generation..."),g(r),J0.generateTitle(r,G.taskModel,re).then(Q=>{console.log("Title generation response:",Q),Q.success&&Q.data?.title&&f(r,Q.data.title)}).catch(Q=>{console.error("Failed to generate title:",Q)}).finally(()=>{g(null)}),k.current=null),M.current=null,D.current="",N.current&&clearTimeout(N.current),I.current=0}),ge.onMessage("error",A=>{const T=A;if(l(!1),t(""),b(!1),M.current=null,T.code==="SESSION_NOT_FOUND"){console.warn("Session not found, redirecting to create new session..."),de.error("Session not found. Creating a new session..."),window.location.href="/";return}de.error(T.error)}),l(!1),t(""),M.current=null,()=>{N.current&&clearTimeout(N.current)}},[r,c,p,b,f,g]);const B=R.useCallback(async(j,A,T)=>{if(!(!r||!j.trim()))try{b(!0),l(!0),t(""),N.current&&clearTimeout(N.current),I.current=Date.now();const $=be.getState().currentSession;!$?.messages?.some(Y=>Y.role==="user")&&$?.title==="New Chat"&&(k.current=j.trim()),u(r,{role:"user",content:j.trim(),images:A});const G=wr();M.current=G,n(G),u(r,{role:"assistant",content:"",id:G}),ge.isConnected||await ge.connect(),ge.send({type:"chat_stream",data:{sessionId:r,content:j.trim(),images:A,format:T,options:w.generationOptions,assistantMessageId:G}})}catch($){console.error("Failed to send message:",$),l(!1),t(""),n(null),b(!1),M.current=null,de.error("Failed to send message")}},[r,u,b,w.generationOptions]),L=R.useCallback(()=>{l(!1),t(""),n(null),b(!1),M.current=null},[b]),z=R.useCallback(async()=>{const j=be.getState().currentSession;if(!j||!r)return;const A=j.messages;let T=-1,$=-1;for(let Y=A.length-1;Y>=0;Y--)if(A[Y].role==="assistant"){$=Y;break}if($>0){for(let Y=$-1;Y>=0;Y--)if(A[Y].role==="user"){T=Y;break}}if(T===-1||$===-1){de.error("No message to regenerate");return}const W=A[T],G=A[$];try{b(!0),l(!0),t(""),N.current&&clearTimeout(N.current),I.current=Date.now();const Y=wr();M.current=Y,n(Y),u(r,{role:"assistant",content:"",id:Y,parentId:G.parentId||G.id,branchIndex:G.siblingCount||1,isActive:!0}),ge.isConnected||await ge.connect(),ge.send({type:"chat_stream",data:{sessionId:r,content:W.content,images:W.images,options:w.generationOptions,assistantMessageId:Y,regenerate:!0,originalMessageId:G.id}})}catch(Y){console.error("Failed to regenerate message:",Y),l(!1),t(""),b(!1),M.current=null,de.error("Failed to regenerate message")}},[r,b,u,w.generationOptions]),C=R.useCallback(async j=>{const T=be.getState().currentSession;if(!T||!r)return;const $=T.messages.find(Y=>Y.id===j);if(!$){de.error("Message not found");return}if($.isActive!==!1)return;const W=$.parentId||$.id,G=$.branchIndex||0;try{const Y=await J0.switchMessageBranch(r,j,G);if(Y.success&&Y.data){const re=T.messages.map(ce=>ce.id===W||ce.parentId===W?{...ce,isActive:ce.id===j}:ce),Q={...T,messages:re,updatedAt:Date.now()};be.setState(ce=>({sessions:ce.sessions.map(ye=>ye.id===r?Q:ye),currentSession:Q})),de.success(`Switched to variant ${G+1}`)}else de.error(Y.error||"Failed to select branch")}catch(Y){console.error("Failed to select branch:",Y),de.error("Failed to select branch")}},[r]);return{sendMessage:B,stopGeneration:L,regenerateLastMessage:z,selectBranch:C,isStreaming:s,streamingMessage:e,streamingMessageId:a}},u1=r=>{const e=new Date().getHours(),t=r?`, ${r}`:"";return e>=5&&e<12?{greeting:`Good morning${t}`,timeSuffix:"today"}:e>=12&&e<17?{greeting:`Good afternoon${t}`,timeSuffix:"today"}:e>=17&&e<21?{greeting:`Good evening${t}`,timeSuffix:"tonight"}:{greeting:`Good night${t}`,timeSuffix:"tonight"}},v1=()=>{const{sessionId:r}=Fn(),e=qn(),t=Rn(),{currentSession:a,sessions:n,models:s,selectedModel:l,setSelectedModel:u,createSession:c,setCurrentSession:p,loadSessions:f,getCurrentPersona:g}=be(),{user:b}=pa(),{sendMessage:w,stopGeneration:M,regenerateLastMessage:k,selectBranch:D,isStreaming:I,streamingMessage:N,streamingMessageId:B}=o1(a?.id||""),L=g(),{greeting:z,timeSuffix:C}=R.useMemo(()=>u1(b?.username),[b?.username]),[j,A]=R.useState(""),[T,$]=R.useState([]),[W,G]=R.useState(!1),Y=R.useRef(null);R.useEffect(()=>{n.length===0&&f()},[f,n.length]),R.useEffect(()=>{(()=>{if(sessionStorage.getItem("forceWelcomeScreen")){sessionStorage.removeItem("forceWelcomeScreen");return}if(n.length!==0)if(r){const le=n.find(we=>we.id===r);le&&le.id!==a?.id?p(le):le||(console.warn(`Session ${r} not found for current user, redirecting...`),n.length>0?e(`/c/${n[0].id}`,{replace:!0}):e("/",{replace:!0}))}else!r&&n.length>0&&t.pathname==="/"&&e(`/c/${n[0].id}`,{replace:!0})})()},[r,n,p,e,a?.id,t.pathname]),R.useEffect(()=>{if(a?.id){const Z=sessionStorage.getItem("pendingMessage");if(Z){sessionStorage.removeItem("pendingMessage");try{const ie=JSON.parse(Z);setTimeout(()=>{w(ie.content,ie.images)},100)}catch(ie){console.error("Failed to parse pending message:",ie)}}}},[a?.id,w]),R.useEffect(()=>{const Z=Y.current;Z&&(Z.style.height="auto",Z.style.height=Math.min(Z.scrollHeight,200)+"px")},[j]);const re=async Z=>{if(Z.preventDefault(),!j.trim()||!l)return;const ie={content:j.trim(),images:T.length>0?T:void 0};sessionStorage.setItem("pendingMessage",JSON.stringify(ie)),A(""),$([]);const le=await c(l);le&&e(`/c/${le.id}`,{replace:!0})},Q=Z=>{Z.key==="Enter"&&!Z.shiftKey&&(Z.preventDefault(),re(Z))},ce=async Z=>{const ie=Z.target.value;u(ie)},ye=(Z,ie,le)=>{a&&w(Z,ie,le)};if(!a){const Z=T.length>0;return d.jsx("div",{className:"h-full flex-1 flex flex-col items-center justify-center p-4 sm:p-8",children:d.jsxs("div",{className:"w-full max-w-2xl mx-auto flex flex-col items-center justify-center",children:[d.jsx("h1",{className:"text-2xl sm:text-3xl font-medium text-gray-800 dark:text-gray-100 ophelia:text-[#fafafa] mb-2 text-center",style:{fontWeight:400},children:z}),d.jsxs("p",{className:"text-base sm:text-lg text-gray-500 dark:text-gray-400 ophelia:text-[#737373] mb-8 text-center",children:["What can I help with ",C,"?"]}),s.length>0?d.jsxs("div",{className:"w-full",children:[W&&d.jsx("div",{className:"mb-4 p-4 bg-gray-50 dark:bg-dark-100 ophelia:bg-[#121212] border border-gray-200 dark:border-dark-300 ophelia:border-[#262626] rounded-2xl",children:d.jsx(l1,{images:T,onImagesChange:$,maxImages:5})}),d.jsx("form",{onSubmit:re,children:d.jsxs("div",{className:K("flex items-center gap-2 p-2 sm:p-3 rounded-2xl sm:rounded-3xl border transition-all duration-200","bg-gray-50 dark:bg-dark-50 ophelia:bg-[#0a0a0a] border-gray-200 dark:border-dark-300 ophelia:border-[#262626]","hover:border-gray-300 dark:hover:border-dark-400 ophelia:hover:border-[#3f3f46]","focus-within:border-primary-400 dark:focus-within:border-primary-500 ophelia:focus-within:border-[#9333ea] focus-within:bg-white dark:focus-within:bg-dark-50 ophelia:focus-within:bg-[#0a0a0a]","shadow-sm hover:shadow-md focus-within:shadow-lg"),children:[d.jsx(Ve,{type:"button",variant:"ghost",size:"sm",onClick:()=>G(!W),className:K("h-8 w-8 sm:h-9 sm:w-9 !p-0 rounded-full flex-shrink-0","hover:bg-gray-200 dark:hover:bg-dark-200 ophelia:hover:bg-[#1a1a1a] transition-colors touch-manipulation",Z&&"text-primary-600 dark:text-primary-400 ophelia:text-[#a855f7]",W&&"bg-gray-200 dark:bg-dark-200 ophelia:bg-[#1a1a1a]"),title:"Attach images",style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"0"},children:Z?d.jsxs("div",{className:"relative flex items-center justify-center",children:[d.jsx(ka,{className:"h-4 w-4"}),d.jsx("div",{className:"absolute -top-0.5 -right-0.5 h-1.5 w-1.5 bg-primary-500 ophelia:bg-[#9333ea] rounded-full"})]}):W?d.jsx(Sa,{className:"h-4 w-4"}):d.jsx(Ma,{className:"h-4 w-4"})}),d.jsx("div",{className:"flex-1 min-w-0",children:d.jsx(gr,{ref:Y,value:j,onChange:ie=>A(ie.target.value),onKeyDown:Q,placeholder:"Message...",className:"!border-0 !bg-transparent !shadow-none !p-0 !m-0 !rounded-none !focus:ring-0 !focus:border-0 !focus:shadow-none !focus:bg-transparent min-h-[32px] sm:min-h-[36px] max-h-[120px] resize-none scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-dark-400 ophelia:scrollbar-thumb-[#3f3f46] focus:outline-none placeholder:text-gray-500 dark:placeholder:text-dark-500 ophelia:placeholder:text-[#737373] text-base sm:text-sm leading-none touch-manipulation",rows:1,style:{boxShadow:"none !important",border:"none !important",outline:"none !important",padding:"0 !important",margin:"0 !important",lineHeight:"1.2 !important",verticalAlign:"middle"}})}),d.jsx("div",{className:"hidden sm:block",children:d.jsx(at,{models:s,selectedModel:l,onModelChange:ce,className:"min-w-[140px] max-w-[200px] border-0 bg-gray-100 dark:bg-dark-100 ophelia:bg-[#121212] rounded-xl text-sm",compact:!0})}),d.jsx(Ve,{type:"submit",variant:"ghost",size:"sm",disabled:!j.trim()||!l,className:K("h-8 w-8 sm:h-9 sm:w-9 p-0 rounded-full flex-shrink-0 flex items-center justify-center","hover:bg-primary-100 dark:hover:bg-primary-900/30 ophelia:hover:bg-[rgba(147,51,234,0.2)] text-primary-600 dark:text-primary-400 ophelia:text-[#a855f7]","disabled:text-gray-400 dark:disabled:text-dark-500 ophelia:disabled:text-[#525252] disabled:hover:bg-transparent","transition-all duration-150 touch-manipulation",j.trim()&&l&&"hover:scale-105 active:scale-95"),title:"Send message",children:d.jsx(Na,{className:"h-4 w-4"})})]})}),d.jsx("div",{className:"sm:hidden mt-4",children:d.jsx(at,{models:s,selectedModel:l,onModelChange:ce,className:"w-full rounded-xl bg-gray-100 dark:bg-dark-100 ophelia:bg-[#121212] border-0",compact:!0})}),d.jsxs("div",{className:"mt-4 text-center",children:[d.jsx("a",{href:"https://librewebui.org",target:"_blank",rel:"noopener noreferrer",className:"libre-brand underline hover:text-primary-600 dark:hover:text-primary-400 ophelia:hover:text-[#a855f7] transition-colors text-gray-500 dark:text-gray-400 ophelia:text-[#737373]",style:{fontSize:"0.75rem",lineHeight:1},children:"Libre WebUI"})," ",d.jsxs("span",{className:"text-gray-400 dark:text-gray-500 ophelia:text-[#525252]",style:{fontSize:"0.55rem"},children:["v","0.2.7"]})," ",d.jsx("span",{className:"text-gray-300 dark:text-gray-600 ophelia:text-[#3f3f46] opacity-50",children:"•"})," ",d.jsx("span",{className:"text-xs text-gray-400 dark:text-gray-500 ophelia:text-[#525252]",children:"LLM can make mistakes - verify important information"})]})]}):d.jsx("div",{className:"w-full max-w-md",children:d.jsxs("div",{className:"p-6 bg-gray-50 dark:bg-dark-100 ophelia:bg-[#121212] border border-gray-200 dark:border-dark-300 ophelia:border-[#262626] rounded-xl",children:[d.jsx("p",{className:"text-sm text-gray-700 dark:text-dark-700 ophelia:text-[#a3a3a3] mb-4",children:"No models available. Make sure Ollama is running and has models installed."}),d.jsx("code",{className:"block text-xs bg-gray-100 dark:bg-dark-200 ophelia:bg-[#0a0a0a] p-3 rounded-lg font-mono text-gray-800 dark:text-dark-600 ophelia:text-[#737373]",children:"ollama pull llama3.2:3b"})]})})]})})}return d.jsxs("div",{className:"flex flex-col h-full relative",style:L?.background?{backgroundImage:`url(${L.background})`,backgroundSize:"cover",backgroundPosition:"center",backgroundRepeat:"no-repeat"}:void 0,children:[L?.background&&d.jsx("div",{className:"absolute inset-0 bg-white/80 dark:bg-black/80 backdrop-blur-sm"}),d.jsxs("div",{className:"flex flex-col h-full relative z-10",children:[L&&d.jsx("div",{className:"flex-shrink-0 px-4 py-2 border-b border-gray-100 dark:border-dark-200 ophelia:border-[#262626] bg-white/50 dark:bg-dark-100/50 ophelia:bg-[#0a0a0a]/50 backdrop-blur-sm",children:d.jsx(i1,{persona:L,onClear:()=>{if(a){const{sessions:Z}=be.getState(),ie={...a,model:L.model,personaId:void 0},le=Z.map(we=>we.id===a.id?ie:we);be.setState({sessions:le,currentSession:ie})}}})}),d.jsx(e1,{messages:a.messages,streamingMessage:N,streamingMessageId:B,isStreaming:I,onRegenerate:k,onSelectBranch:D,className:"flex-1"}),d.jsx(s1,{onSendMessage:ye,onStopGeneration:M,disabled:!a})]})]})};export{v1 as ChatPage,v1 as default};
|
|
281
|
+
}`,rows:8,className:"font-mono text-sm"}),d.jsxs("div",{className:"flex gap-2",children:[d.jsx(Ve,{onClick:p,size:"sm",disabled:!s.trim(),children:"Apply Schema"}),d.jsx(Ve,{onClick:()=>{n(!1),l("")},variant:"outline",size:"sm",children:"Cancel"})]})]}),f(),r&&d.jsxs("div",{className:"flex items-center text-xs text-green-600 dark:text-green-400",children:[d.jsx(ya,{className:"h-3 w-3 mr-1"}),"Structured output enabled"]})]})},at=({models:r,selectedModel:e,onModelChange:t,currentPersona:a,className:n,disabled:s=!1,compact:l=!1})=>{const[u,c]=R.useState(!1),[p,f]=R.useState(""),g=R.useRef(null),b=R.useRef(null),M=[{type:"personas",label:"Personas",icon:d.jsx(Et,{className:"h-4 w-4 text-purple-600 dark:text-purple-400 ophelia:text-[#a855f7]"}),models:r.filter(z=>z.isPersona),color:"purple"},{type:"ollama",label:"Ollama Models",icon:d.jsx(ft,{className:"h-4 w-4 text-green-600 dark:text-green-400 ophelia:text-[#a855f7]"}),models:r.filter(z=>!z.isPersona&&!z.isPlugin),color:"green"},{type:"plugins",label:"Plugin Models",icon:d.jsx(Ft,{className:"h-4 w-4 text-green-600 dark:text-green-400 ophelia:text-[#a855f7]"}),models:r.filter(z=>z.isPlugin),color:"green"}].filter(z=>z.models.length>0).map(z=>({...z,models:z.models.filter(C=>C.name.toLowerCase().includes(p.toLowerCase())||C.personaName&&C.personaName.toLowerCase().includes(p.toLowerCase())||C.pluginName&&C.pluginName.toLowerCase().includes(p.toLowerCase()))})).filter(z=>z.models.length>0),k=r.find(z=>z.name===e||e.startsWith("persona:")&&z.name===e);R.useEffect(()=>{const z=C=>{g.current&&!g.current.contains(C.target)&&(c(!1),f(""))};return document.addEventListener("mousedown",z),()=>document.removeEventListener("mousedown",z)},[]),R.useEffect(()=>{u&&b.current&&b.current.focus()},[u]);const D=z=>{t({target:{value:z}}),c(!1),f("")},I=z=>z.isPersona?d.jsx(Et,{className:"h-4 w-4 text-purple-600 dark:text-purple-400"}):z.isPlugin?d.jsx(Ft,{className:"h-4 w-4 text-green-600 dark:text-green-400 ophelia:text-[#a855f7]"}):d.jsx(ft,{className:"h-4 w-4 text-green-600 dark:text-green-400 ophelia:text-[#a855f7]"}),N=z=>z.isPersona?z.personaName||z.name:z.isPlugin?`${z.name}`:z.name,B=z=>z.isPersona?`via ${z.model}`:z.isPlugin?`via ${z.pluginName}`:null,L=()=>{if(!k)return l?d.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[d.jsx(ft,{className:"h-4 w-4"}),d.jsx("span",{className:"text-xs font-medium text-gray-400 dark:text-gray-500 truncate",children:"Select Model"})]}):"Select Model";if(l){const j=N(k);return d.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[I(k),d.jsx("span",{className:"text-xs font-medium text-gray-700 dark:text-gray-200 ophelia:text-[#e5e5e5] truncate",children:j})]})}const z=N(k),C=B(k);return d.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[I(k),d.jsxs("div",{className:"flex flex-col min-w-0",children:[d.jsx("span",{className:"text-sm font-medium truncate",children:z}),C&&d.jsx("span",{className:"text-xs text-gray-500 dark:text-gray-400 truncate",children:C})]}),k.isPersona&&a&&d.jsxs("div",{className:"flex items-center gap-1 ml-auto",children:[d.jsx(Z0,{className:"h-3 w-3 text-purple-600 dark:text-purple-400"}),a.embedding_model&&d.jsx(wa,{className:"h-3 w-3 text-purple-500 dark:text-purple-300"})]})]})};return d.jsxs("div",{className:K("relative",n),ref:g,children:[d.jsxs("button",{type:"button",onClick:()=>!s&&c(!u),disabled:s,className:K(l?"h-[44px] sm:h-[52px] px-3 flex items-center justify-between text-left w-full ":"w-full flex items-center justify-between gap-2 px-3 py-2 text-left ","bg-gray-50 dark:bg-dark-200 ophelia:bg-[#121212] border border-gray-200 dark:border-dark-300 ophelia:border-[#262626]","rounded-lg text-sm hover:bg-gray-100 dark:hover:bg-dark-100 ophelia:hover:bg-[#1a1a1a]","focus:outline-none focus:ring-2 focus:ring-primary-500/20 ophelia:focus:ring-[#9333ea]/20 focus:border-primary-500 ophelia:focus:border-[#9333ea]",s?"opacity-50 cursor-not-allowed":"cursor-pointer"),title:l?k?N(k):"Select Model":void 0,children:[L(),d.jsx(z0,{className:K(l?"h-3 w-3":"h-4 w-4","text-gray-400 flex-shrink-0",u&&"rotate-180")})]}),u&&Xt.createPortal(d.jsxs("div",{className:"fixed inset-0 z-[999999] flex items-start sm:items-center justify-center p-2 sm:p-4",children:[d.jsx("div",{className:"absolute inset-0 bg-black/50 backdrop-blur-sm",onClick:()=>c(!1)}),d.jsxs("div",{className:K("relative bg-white dark:bg-dark-100 ophelia:bg-[#0a0a0a] border border-gray-200 dark:border-dark-300 ophelia:border-[#1a1a1a] shadow-2xl","w-full max-w-sm sm:w-96 sm:max-w-[90vw]","mt-2 sm:mt-0 rounded-xl sm:rounded-xl","max-h-[85vh] sm:max-h-none flex flex-col"),onClick:z=>z.stopPropagation(),children:[d.jsx("div",{className:"p-3 sm:p-4 border-b border-gray-200 dark:border-dark-200 ophelia:border-[#1a1a1a] flex-shrink-0",children:d.jsx("input",{ref:b,type:"text",placeholder:"Search models...",value:p,onChange:z=>f(z.target.value),onClick:z=>z.stopPropagation(),onMouseDown:z=>z.stopPropagation(),className:K("w-full px-3 py-2.5 sm:py-2 text-sm bg-gray-50 dark:bg-dark-200 ophelia:bg-[#121212] ophelia:text-[#fafafa] ophelia:placeholder-[#737373]","border border-gray-200 dark:border-dark-300 ophelia:border-[#262626] rounded-lg","focus:outline-none focus:ring-2 focus:ring-primary-500/20 ophelia:focus:ring-[#9333ea]/20 focus:border-primary-500 ophelia:focus:border-[#9333ea]","touch-manipulation")})}),d.jsx("div",{className:"flex-1 overflow-y-auto scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-dark-400 max-h-80 sm:max-h-80",children:M.length>0?M.map(z=>d.jsxs("div",{children:[d.jsx("div",{className:"px-3 sm:px-3 py-2.5 sm:py-2 text-xs font-semibold text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3] bg-gray-100 dark:bg-dark-300 ophelia:bg-[#0a0a0a] border-b border-gray-200 dark:border-dark-400 ophelia:border-[#1a1a1a] sticky top-0",children:d.jsxs("div",{className:"flex items-center gap-2",children:[z.icon,z.label," (",z.models.length,")"]})}),z.models.map(C=>d.jsx("div",{onMouseDown:j=>{j.preventDefault(),D(C.name)},onTouchStart:j=>{j.preventDefault(),D(C.name)},className:K("px-3 sm:px-4 py-3.5 sm:py-3 cursor-pointer border-b border-gray-100 dark:border-dark-200 ophelia:border-[#1a1a1a] last:border-b-0","hover:bg-gray-50 dark:hover:bg-dark-200 ophelia:hover:bg-[#121212] active:bg-gray-100 dark:active:bg-dark-100 ophelia:active:bg-[#1a1a1a]","bg-white dark:bg-dark-100 ophelia:bg-[#0a0a0a] touch-manipulation","transition-colors duration-150 ease-in-out",(e===C.name||e.startsWith("persona:")&&C.name===e)&&"bg-primary-50 dark:bg-primary-900 ophelia:bg-[rgba(147,51,234,0.15)] border-l-4 border-primary-500 ophelia:border-l-[#9333ea]"),children:d.jsxs("div",{className:"flex items-center gap-3",children:[I(C),d.jsxs("div",{className:"flex-1 min-w-0",children:[d.jsx("div",{className:"text-sm font-medium text-gray-900 dark:text-gray-100 ophelia:text-[#fafafa] truncate",children:N(C)}),B(C)&&d.jsx("div",{className:"text-xs text-gray-500 dark:text-gray-400 ophelia:text-[#737373] truncate",children:B(C)})]}),(e===C.name||e.startsWith("persona:")&&C.name===e)&&d.jsx(nt,{className:"h-4 w-4 text-primary-600 dark:text-primary-400 ophelia:text-[#a855f7] flex-shrink-0"})]})},C.name))]},z.type)):d.jsxs("div",{className:"px-4 py-8 text-center text-gray-500 dark:text-gray-400 ophelia:text-[#737373] bg-white dark:bg-dark-100 ophelia:bg-[#0a0a0a]",children:[d.jsx(ts,{className:"h-8 w-8 mx-auto mb-2 text-gray-300 dark:text-gray-600 ophelia:text-[#525252]"}),d.jsx("p",{className:"text-sm",children:"No models found"})]})})]})]}),document.body),d.jsx("select",{value:e,onChange:t,className:"sr-only",tabIndex:-1,children:r.map(z=>d.jsx("option",{value:z.name,children:N(z)},z.name))})]})},s1=({onSendMessage:r,onStopGeneration:e,disabled:t=!1})=>{const[a,n]=R.useState(""),[s,l]=R.useState([]),[u,c]=R.useState(null),[p,f]=R.useState(!1),[g,b]=R.useState(null),{isGenerating:w,setBackgroundImage:M}=g0(),{currentSession:k,models:D}=be(),I=R.useRef(null),N=j=>{j.preventDefault(),!(!a.trim()||w)&&(r(a.trim(),s.length>0?s:void 0,u||void 0),n(""),l([]))},B=j=>{j.key==="Enter"&&!j.shiftKey&&(j.preventDefault(),N(j))},L=()=>{e()};R.useEffect(()=>{const j=I.current;j&&(j.style.height="auto",j.style.height=Math.min(j.scrollHeight,200)+"px")},[a]),R.useEffect(()=>{(async()=>{if(k?.personaId)try{const A=await yr.getPersona(k.personaId);if(A.success&&A.data)b(A.data);else{console.warn(`Persona ${k.personaId} not found, clearing reference`),b(null);const{setCurrentSession:T}=be.getState();T({...k,personaId:void 0})}}catch(A){if(console.error("Failed to load current persona:",A),b(null),k){const{setCurrentSession:T}=be.getState();T({...k,personaId:void 0})}}else b(null)})()},[k?.personaId]);const z=async j=>{const A=j.target.value;if(k)try{if(A.startsWith("persona:")){const T=A.replace("persona:",""),$=await yr.getPersona(T);if(!$.success||!$.data){R0.error("Failed to load persona details");return}const W=$.data,G=await J0.updateSession(k.id,{personaId:T,model:A});if(G.success&&G.data){const{sessions:Y}=be.getState(),re=Y.map(Q=>Q.id===k.id?G.data:Q);be.setState({sessions:re,currentSession:G.data}),W.background&&M(W.background),R0.success("Persona applied")}}else{const T=await J0.updateSession(k.id,{model:A,personaId:void 0});if(T.success&&T.data){const{sessions:$}=be.getState(),W=$.map(G=>G.id===k.id?T.data:G);be.setState({sessions:W,currentSession:T.data}),M(null),R0.success("Model updated")}}}catch(T){console.error("Failed to update session:",T),R0.error("Failed to update session")}},C=s.length>0||u!==null;return d.jsx("div",{className:"pointer-events-none",children:d.jsxs("div",{className:"max-w-5xl mx-auto px-3 sm:px-4 md:px-6 w-full pointer-events-auto",children:[p&&d.jsxs("div",{className:"mb-2 p-3 rounded-2xl bg-white/95 dark:bg-dark-100/95 ophelia:bg-[#0a0a0a]/95 backdrop-blur-md border border-gray-200/50 dark:border-dark-300/50 ophelia:border-[#262626]/50 shadow-lg",children:[d.jsx(r1,{images:s,onImagesChange:l,maxImages:5,sessionId:k?.id,disabled:t}),d.jsx(n1,{format:u,onFormatChange:c})]}),d.jsxs("div",{className:"py-2 sm:py-3",children:[d.jsx("form",{onSubmit:N,children:d.jsxs("div",{className:K("flex items-center gap-2 p-2 sm:p-3 rounded-2xl sm:rounded-3xl border transition-all duration-300 ease-out shadow-lg","bg-white/95 dark:bg-dark-100/95 ophelia:bg-[#0a0a0a]/95 backdrop-blur-md","border-gray-200/50 dark:border-dark-300/50 ophelia:border-[#262626]/60","hover:border-gray-300/70 dark:hover:border-dark-400/70 ophelia:hover:border-[#3f3f46]/80","focus-within:border-primary-400/70 dark:focus-within:border-primary-500/70 ophelia:focus-within:border-[#9333ea]/70","focus-within:shadow-xl"),children:[d.jsx(Ve,{type:"button",variant:"ghost",size:"sm",onClick:()=>f(!p),className:K("h-8 w-8 sm:h-9 sm:w-9 !p-0 rounded-full flex-shrink-0","hover:bg-gray-100 dark:hover:bg-dark-200/80 ophelia:hover:bg-[#1a1a1a]","transition-all duration-200 touch-manipulation","hover:scale-105 active:scale-95",C&&"text-primary-600 dark:text-primary-400 ophelia:text-[#a855f7]",p&&"bg-gray-100 dark:bg-dark-200/80 ophelia:bg-[#1a1a1a]"),title:"Attachments and advanced features",style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"0"},children:C?d.jsxs("div",{className:"relative flex items-center justify-center",children:[d.jsx(ka,{className:"h-4 w-4"}),d.jsx("div",{className:"absolute -top-0.5 -right-0.5 h-2 w-2 bg-primary-500 dark:bg-primary-400 ophelia:bg-[#a855f7] rounded-full ring-2 ring-white dark:ring-dark-50 ophelia:ring-[#0a0a0a]"})]}):p?d.jsx(Sa,{className:"h-4 w-4"}):d.jsx(Ma,{className:"h-4 w-4"})}),d.jsx("div",{className:"flex-1 min-w-0",children:d.jsx(gr,{ref:I,value:a,onChange:j=>n(j.target.value),onKeyDown:B,placeholder:"Send a message",disabled:t,className:"!border-0 !bg-transparent !shadow-none !p-0 !m-0 !rounded-none !focus:ring-0 !focus:border-0 !focus:shadow-none !focus:bg-transparent min-h-[32px] sm:min-h-[36px] max-h-[120px] resize-none scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-dark-400 focus:outline-none placeholder:text-gray-500 dark:placeholder:text-dark-500 text-base sm:text-sm leading-none touch-manipulation",rows:1,style:{boxShadow:"none !important",border:"none !important",outline:"none !important",padding:"0 !important",margin:"0 !important",lineHeight:"1.2 !important",verticalAlign:"middle"}})}),d.jsxs("div",{className:"flex items-center gap-1 sm:gap-2 flex-shrink-0",children:[k&&D.length>0&&d.jsx("div",{className:"hidden sm:block",children:d.jsx(at,{models:D,selectedModel:k.personaId?`persona:${k.personaId}`:k.model,onModelChange:z,currentPersona:g,className:"min-w-[160px] max-w-[240px] border-0 bg-gray-100/80 dark:bg-dark-100/80 ophelia:bg-[#1a1a1a]/80 rounded-xl text-sm hover:bg-gray-200/80 dark:hover:bg-dark-200/60 ophelia:hover:bg-[#262626]/80 transition-colors duration-200",compact:!0})}),w?d.jsx(Ve,{type:"button",variant:"ghost",size:"sm",onClick:L,className:K("h-8 w-8 sm:h-9 sm:w-9 p-0 rounded-full flex-shrink-0 flex items-center justify-center","bg-red-50 dark:bg-red-900/20 ophelia:bg-red-900/30","text-red-500 dark:text-red-400 ophelia:text-red-400","hover:bg-red-100 dark:hover:bg-red-900/30 ophelia:hover:bg-red-900/40","transition-all duration-200 touch-manipulation","hover:scale-105 active:scale-95"),title:"Stop generation",children:d.jsx(va,{className:"h-4 w-4"})}):d.jsx(Ve,{type:"submit",variant:"ghost",size:"sm",disabled:!a.trim()||t,className:K("h-8 w-8 sm:h-9 sm:w-9 p-0 rounded-full flex-shrink-0 flex items-center justify-center","text-gray-400 dark:text-dark-500 ophelia:text-[#525252]","disabled:opacity-40 disabled:hover:bg-transparent disabled:cursor-not-allowed","transition-all duration-200 touch-manipulation",a.trim()&&!t&&["bg-primary-500 dark:bg-primary-600 ophelia:bg-[#9333ea]","text-white dark:text-white ophelia:text-white","hover:bg-primary-600 dark:hover:bg-primary-500 ophelia:hover:bg-[#a855f7]","shadow-md hover:shadow-lg","hover:scale-105 active:scale-95"]),title:"Send message",children:d.jsx(Na,{className:"h-4 w-4"})})]})]})}),k&&D.length>0&&d.jsx("div",{className:"sm:hidden mt-3",children:d.jsx(at,{models:D,selectedModel:k.personaId?`persona:${k.personaId}`:k.model,onModelChange:z,currentPersona:g,className:"w-full rounded-xl bg-gray-100/80 dark:bg-dark-100/80 ophelia:bg-[#1a1a1a]/80 border-0 transition-colors duration-200",compact:!0})}),d.jsxs("div",{className:"mt-2 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-dark-600",children:[d.jsx(a1,{sessionId:k?.id}),d.jsxs("div",{className:"text-center",children:[d.jsx("a",{href:"https://librewebui.org",target:"_blank",rel:"noopener noreferrer",className:"libre-brand underline hover:text-primary-600 dark:hover:text-primary-400 transition-colors",style:{fontSize:"1.1em",lineHeight:1},children:"Libre WebUI"})," ",d.jsxs("span",{className:"text-xs text-gray-400 dark:text-gray-500",style:{fontSize:"0.55rem"},children:["v","0.2.9"]})," ",d.jsx("span",{className:"text-gray-300 dark:text-gray-600 opacity-50",children:"•"})," ",d.jsx("span",{className:"text-gray-400 dark:text-gray-500",style:{fontSize:"0.55rem"},children:"LLM can make mistakes - verify important information"}),C&&d.jsxs("span",{className:"ml-2 text-primary-600 dark:text-primary-400",children:["•"," ",s.length>0&&`${s.length} image${s.length>1?"s":""}`,s.length>0&&u&&" • ",u&&"Structured output"]})]})]})]})]})})},i1=({persona:r,onClear:e,className:t})=>{const[a,n]=R.useState(!1),s=R.useRef(null),[l,u]=R.useState({top:0,left:0});R.useEffect(()=>{if(a&&s.current){const f=s.current.getBoundingClientRect();u({top:f.bottom+8,left:f.left})}},[a]);const c=!!(r.memory_settings?.enabled||r.mutation_settings?.enabled),p=()=>r.avatar?r.avatar:`https://ui-avatars.com/api/?name=${encodeURIComponent(r.name)}&background=6366f1&color=fff&size=64`;return d.jsxs("div",{className:K("relative",t),children:[d.jsxs("button",{ref:s,onClick:()=>n(!a),className:K("flex items-center gap-2 px-3 py-1.5 rounded-full transition-all duration-200","bg-primary-50 dark:bg-primary-900/30 ophelia:bg-[#9333ea]/15","border border-primary-200 dark:border-primary-700/50 ophelia:border-[#7c3aed]/30","hover:bg-primary-100 dark:hover:bg-primary-900/40 ophelia:hover:bg-[#9333ea]/20","text-primary-700 dark:text-primary-300 ophelia:text-[#c084fc]"),children:[d.jsx("img",{src:p(),alt:r.name,className:"w-5 h-5 rounded-full object-cover"}),d.jsx("span",{className:"text-sm font-medium max-w-[120px] truncate",children:r.name}),c&&d.jsx(wa,{className:"h-3 w-3 text-purple-500 dark:text-purple-400"}),d.jsx(z0,{className:K("h-3.5 w-3.5 transition-transform duration-200",a&&"rotate-180")})]}),a&&Xt.createPortal(d.jsxs(d.Fragment,{children:[d.jsx("div",{className:"fixed inset-0 z-[9998]",onClick:()=>n(!1)}),d.jsx("div",{className:"fixed w-72 z-[9999]",style:{top:l.top,left:l.left},children:d.jsxs("div",{className:K("rounded-xl overflow-hidden shadow-xl","bg-white dark:bg-dark-100 ophelia:bg-[#0a0a0a]","border border-gray-200 dark:border-dark-300 ophelia:border-[#262626]"),children:[d.jsxs("div",{className:"relative h-16",children:[r.background?d.jsx("div",{className:"absolute inset-0 bg-cover bg-center",style:{backgroundImage:`url(${r.background})`}}):d.jsx("div",{className:"absolute inset-0 bg-gradient-to-br from-primary-400 via-primary-500 to-purple-600 dark:from-primary-600 dark:via-primary-700 dark:to-purple-800 ophelia:from-[#9333ea] ophelia:via-[#7c3aed] ophelia:to-[#6d28d9]"}),d.jsx("div",{className:"absolute inset-0 bg-black/10"}),e&&d.jsx("button",{onClick:f=>{f.stopPropagation(),e(),n(!1)},className:"absolute top-2 right-2 p-1 rounded-full bg-white/20 hover:bg-white/30 backdrop-blur-sm transition-colors",title:"Remove persona",children:d.jsx(v0,{className:"h-3.5 w-3.5 text-white"})}),c&&d.jsxs("div",{className:"absolute top-2 left-2 flex items-center gap-1 px-2 py-0.5 rounded-full bg-white/20 backdrop-blur-sm text-white text-[10px] font-medium",children:[d.jsx(Z0,{className:"h-3 w-3"}),"Enhanced"]})]}),d.jsx("div",{className:"relative px-4 -mt-6",children:d.jsx("img",{src:p(),alt:r.name,className:"w-12 h-12 rounded-lg object-cover ring-3 ring-white dark:ring-dark-100 ophelia:ring-[#0a0a0a] shadow-md"})}),d.jsxs("div",{className:"px-4 pt-2 pb-4",children:[d.jsx("h4",{className:"text-base font-semibold text-gray-900 dark:text-gray-100 ophelia:text-[#fafafa]",children:r.name}),d.jsxs("p",{className:"text-xs text-gray-500 dark:text-gray-400 ophelia:text-[#a3a3a3] flex items-center gap-1 mt-0.5",children:[d.jsx(rs,{className:"h-3 w-3"}),r.model]}),r.description&&d.jsx("p",{className:"text-xs text-gray-600 dark:text-gray-400 ophelia:text-[#a3a3a3] mt-2 line-clamp-2",children:r.description}),r.parameters.system_prompt&&d.jsxs("div",{className:"mt-3 p-2 rounded-lg bg-gray-50 dark:bg-dark-50 ophelia:bg-[#121212] border border-gray-100 dark:border-dark-200 ophelia:border-[#1a1a1a]",children:[d.jsxs("div",{className:"flex items-center gap-1 mb-1",children:[d.jsx(as,{className:"h-2.5 w-2.5 text-gray-400"}),d.jsx("span",{className:"text-[9px] uppercase tracking-wider font-medium text-gray-400",children:"System"})]}),d.jsxs("p",{className:"text-[11px] text-gray-600 dark:text-gray-400 ophelia:text-[#a3a3a3] line-clamp-2 italic",children:["“",r.parameters.system_prompt,"”"]})]}),d.jsxs("div",{className:"flex flex-wrap gap-1 mt-3",children:[d.jsxs("span",{className:"inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[10px] font-medium bg-gray-100 dark:bg-dark-200 ophelia:bg-[#1a1a1a] text-gray-600 dark:text-gray-400 ophelia:text-[#a3a3a3]",children:[d.jsx(Ft,{className:"h-2.5 w-2.5"}),r.parameters.temperature?.toFixed(1)||"0.7"]}),d.jsxs("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-gray-100 dark:bg-dark-200 ophelia:bg-[#1a1a1a] text-gray-600 dark:text-gray-400 ophelia:text-[#a3a3a3]",children:["Top-P ",r.parameters.top_p?.toFixed(1)||"0.9"]}),r.memory_settings?.enabled&&d.jsxs("span",{className:"inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[10px] font-medium bg-purple-100 dark:bg-purple-900/30 ophelia:bg-[#9333ea]/20 text-purple-700 dark:text-purple-300 ophelia:text-[#c084fc]",children:[d.jsx(Z0,{className:"h-2.5 w-2.5"}),"Memory"]})]})]})]})})]}),document.body)]})},l1=({images:r,onImagesChange:e,maxImages:t=5,className:a})=>{const n=R.useRef(null),[s,l]=R.useState(!1),u=w=>{if(!w)return;const M=[],k=t-r.length;for(let D=0;D<Math.min(w.length,k);D++){const I=w[D];if(!I.type.startsWith("image/")){de.error(`File ${I.name} is not an image`);continue}if(I.size>10*1024*1024){de.error(`Image ${I.name} is too large (max 10MB)`);continue}const N=new FileReader;N.onload=B=>{B.target?.result&&(M.push(B.target.result),M.length===Math.min(w.length,k)&&e([...r,...M]))},N.readAsDataURL(I)}w.length>k&&de.error(`Only ${k} more images can be added`)},c=w=>{w.preventDefault(),l(!0)},p=w=>{w.preventDefault(),l(!1)},f=w=>{w.preventDefault(),l(!1),u(w.dataTransfer.files)},g=w=>{const M=r.filter((k,D)=>D!==w);e(M)},b=r.length<t;return d.jsxs("div",{className:K("space-y-3",a),children:[b&&d.jsxs("div",{className:K("border-2 border-dashed border-gray-300 dark:border-gray-600 rounded-lg p-4 transition-colors","hover:border-primary-400 dark:hover:border-primary-500",s&&"border-primary-500 bg-primary-50 dark:bg-primary-900/20"),onDragOver:c,onDragLeave:p,onDrop:f,children:[d.jsx("input",{ref:n,type:"file",multiple:!0,accept:"image/*",onChange:w=>u(w.target.files),className:"hidden"}),d.jsxs("div",{className:"flex flex-col items-center text-center",children:[d.jsx(ba,{className:"h-8 w-8 text-gray-400 dark:text-gray-500 mb-2"}),d.jsxs("p",{className:"text-sm text-gray-700 dark:text-gray-300 mb-2",children:["Drop images here or"," ",d.jsx("button",{onClick:()=>n.current?.click(),className:"text-primary-600 dark:text-primary-400 hover:underline font-medium",children:"browse"})]}),d.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400",children:"Supports: JPG, PNG, GIF, WebP (max 10MB each)"})]})]}),r.length>0&&d.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-3",children:r.map((w,M)=>d.jsxs("div",{className:"relative group aspect-square rounded-lg overflow-hidden bg-gray-100 dark:bg-gray-800 border border-gray-200 dark:border-gray-700",children:[d.jsx("img",{src:w,alt:`Upload ${M+1}`,className:"w-full h-full object-cover"}),d.jsx("div",{className:"absolute inset-0 bg-black bg-opacity-0 group-hover:bg-opacity-50 transition-all duration-200 flex items-center justify-center",children:d.jsx(Ve,{variant:"ghost",size:"sm",onClick:()=>g(M),className:"opacity-0 group-hover:opacity-100 transition-opacity bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 hover:bg-red-100 dark:hover:bg-red-900/20 hover:text-red-600 dark:hover:text-red-400 p-1 rounded-full",children:d.jsx(v0,{className:"h-4 w-4"})})})]},M))}),b&&r.length>0&&d.jsxs(Ve,{variant:"outline",size:"sm",onClick:()=>n.current?.click(),className:"w-full sm:w-auto",children:[d.jsx(ns,{className:"h-4 w-4 mr-2"}),"Add More Images (",r.length,"/",t,")"]})]})},o1=r=>{const[e,t]=R.useState(""),[a,n]=R.useState(null),[s,l]=R.useState(!1),{addMessage:u,updateMessage:c,updateMessageWithStatistics:p,updateSessionTitle:f,setGeneratingTitleForSession:g}=be(),{setIsGenerating:b,preferences:w}=g0(),M=R.useRef(null),k=R.useRef(null),D=R.useRef(""),I=R.useRef(0),N=R.useRef();R.useEffect(()=>()=>{ge.offMessage("user_message"),ge.offMessage("assistant_chunk"),ge.offMessage("assistant_complete"),ge.offMessage("error")},[r]),R.useEffect(()=>{if(!r){ge.offMessage("user_message"),ge.offMessage("assistant_chunk"),ge.offMessage("assistant_complete"),ge.offMessage("error");return}return ge.onMessage("user_message",()=>{}),ge.onMessage("assistant_chunk",A=>{const T=A,$=T.messageId||M.current;$&&(D.current=T.total,t(T.total),N.current&&clearTimeout(N.current),N.current=setTimeout(()=>{c(r,$,D.current),I.current=Date.now()},T.done?0:200))}),ge.onMessage("assistant_complete",A=>{const T=A;console.log("Hook: Received assistant_complete for session:",r,"messageId:",T.messageId,"with statistics:",!!T.statistics),l(!1),t(""),b(!1);const $=T.messageId||M.current;if(T&&$){const Q=D.current||T.content;p(r,$,Q,T.statistics)}const G=g0.getState().preferences.titleSettings,Y=be.getState().currentSession,re=k.current;console.log("Auto-title check:",{firstMessage:re,autoTitle:G?.autoTitle,taskModel:G?.taskModel,sessionTitle:Y?.title}),re&&G?.autoTitle&&G?.taskModel&&Y?.title==="New Chat"&&(console.log("Triggering auto-title generation..."),g(r),J0.generateTitle(r,G.taskModel,re).then(Q=>{console.log("Title generation response:",Q),Q.success&&Q.data?.title&&f(r,Q.data.title)}).catch(Q=>{console.error("Failed to generate title:",Q)}).finally(()=>{g(null)}),k.current=null),M.current=null,D.current="",N.current&&clearTimeout(N.current),I.current=0}),ge.onMessage("error",A=>{const T=A;if(l(!1),t(""),b(!1),M.current=null,T.code==="SESSION_NOT_FOUND"){console.warn("Session not found, redirecting to create new session..."),de.error("Session not found. Creating a new session..."),window.location.href="/";return}de.error(T.error)}),l(!1),t(""),M.current=null,()=>{N.current&&clearTimeout(N.current)}},[r,c,p,b,f,g]);const B=R.useCallback(async(j,A,T)=>{if(!(!r||!j.trim()))try{b(!0),l(!0),t(""),N.current&&clearTimeout(N.current),I.current=Date.now();const $=be.getState().currentSession;!$?.messages?.some(Y=>Y.role==="user")&&$?.title==="New Chat"&&(k.current=j.trim()),u(r,{role:"user",content:j.trim(),images:A});const G=wr();M.current=G,n(G),u(r,{role:"assistant",content:"",id:G}),ge.isConnected||await ge.connect(),ge.send({type:"chat_stream",data:{sessionId:r,content:j.trim(),images:A,format:T,options:w.generationOptions,assistantMessageId:G}})}catch($){console.error("Failed to send message:",$),l(!1),t(""),n(null),b(!1),M.current=null,de.error("Failed to send message")}},[r,u,b,w.generationOptions]),L=R.useCallback(()=>{l(!1),t(""),n(null),b(!1),M.current=null},[b]),z=R.useCallback(async()=>{const j=be.getState().currentSession;if(!j||!r)return;const A=j.messages;let T=-1,$=-1;for(let Y=A.length-1;Y>=0;Y--)if(A[Y].role==="assistant"){$=Y;break}if($>0){for(let Y=$-1;Y>=0;Y--)if(A[Y].role==="user"){T=Y;break}}if(T===-1||$===-1){de.error("No message to regenerate");return}const W=A[T],G=A[$];try{b(!0),l(!0),t(""),N.current&&clearTimeout(N.current),I.current=Date.now();const Y=wr();M.current=Y,n(Y),u(r,{role:"assistant",content:"",id:Y,parentId:G.parentId||G.id,branchIndex:G.siblingCount||1,isActive:!0}),ge.isConnected||await ge.connect(),ge.send({type:"chat_stream",data:{sessionId:r,content:W.content,images:W.images,options:w.generationOptions,assistantMessageId:Y,regenerate:!0,originalMessageId:G.id}})}catch(Y){console.error("Failed to regenerate message:",Y),l(!1),t(""),b(!1),M.current=null,de.error("Failed to regenerate message")}},[r,b,u,w.generationOptions]),C=R.useCallback(async j=>{const T=be.getState().currentSession;if(!T||!r)return;const $=T.messages.find(Y=>Y.id===j);if(!$){de.error("Message not found");return}if($.isActive!==!1)return;const W=$.parentId||$.id,G=$.branchIndex||0;try{const Y=await J0.switchMessageBranch(r,j,G);if(Y.success&&Y.data){const re=T.messages.map(ce=>ce.id===W||ce.parentId===W?{...ce,isActive:ce.id===j}:ce),Q={...T,messages:re,updatedAt:Date.now()};be.setState(ce=>({sessions:ce.sessions.map(ye=>ye.id===r?Q:ye),currentSession:Q})),de.success(`Switched to variant ${G+1}`)}else de.error(Y.error||"Failed to select branch")}catch(Y){console.error("Failed to select branch:",Y),de.error("Failed to select branch")}},[r]);return{sendMessage:B,stopGeneration:L,regenerateLastMessage:z,selectBranch:C,isStreaming:s,streamingMessage:e,streamingMessageId:a}},u1=r=>{const e=new Date().getHours(),t=r?`, ${r}`:"";return e>=5&&e<12?{greeting:`Good morning${t}`,timeSuffix:"today"}:e>=12&&e<17?{greeting:`Good afternoon${t}`,timeSuffix:"today"}:e>=17&&e<21?{greeting:`Good evening${t}`,timeSuffix:"tonight"}:{greeting:`Good night${t}`,timeSuffix:"tonight"}},v1=()=>{const{sessionId:r}=Fn(),e=qn(),t=Rn(),{currentSession:a,sessions:n,models:s,selectedModel:l,setSelectedModel:u,createSession:c,setCurrentSession:p,loadSessions:f,getCurrentPersona:g}=be(),{user:b}=pa(),{sendMessage:w,stopGeneration:M,regenerateLastMessage:k,selectBranch:D,isStreaming:I,streamingMessage:N,streamingMessageId:B}=o1(a?.id||""),L=g(),{greeting:z,timeSuffix:C}=R.useMemo(()=>u1(b?.username),[b?.username]),[j,A]=R.useState(""),[T,$]=R.useState([]),[W,G]=R.useState(!1),Y=R.useRef(null);R.useEffect(()=>{n.length===0&&f()},[f,n.length]),R.useEffect(()=>{(()=>{if(sessionStorage.getItem("forceWelcomeScreen")){sessionStorage.removeItem("forceWelcomeScreen");return}if(n.length!==0)if(r){const le=n.find(we=>we.id===r);le&&le.id!==a?.id?p(le):le||(console.warn(`Session ${r} not found for current user, redirecting...`),n.length>0?e(`/c/${n[0].id}`,{replace:!0}):e("/",{replace:!0}))}else!r&&n.length>0&&t.pathname==="/"&&e(`/c/${n[0].id}`,{replace:!0})})()},[r,n,p,e,a?.id,t.pathname]),R.useEffect(()=>{if(a?.id){const Z=sessionStorage.getItem("pendingMessage");if(Z){sessionStorage.removeItem("pendingMessage");try{const ie=JSON.parse(Z);setTimeout(()=>{w(ie.content,ie.images)},100)}catch(ie){console.error("Failed to parse pending message:",ie)}}}},[a?.id,w]),R.useEffect(()=>{const Z=Y.current;Z&&(Z.style.height="auto",Z.style.height=Math.min(Z.scrollHeight,200)+"px")},[j]);const re=async Z=>{if(Z.preventDefault(),!j.trim()||!l)return;const ie={content:j.trim(),images:T.length>0?T:void 0};sessionStorage.setItem("pendingMessage",JSON.stringify(ie)),A(""),$([]);const le=await c(l);le&&e(`/c/${le.id}`,{replace:!0})},Q=Z=>{Z.key==="Enter"&&!Z.shiftKey&&(Z.preventDefault(),re(Z))},ce=async Z=>{const ie=Z.target.value;u(ie)},ye=(Z,ie,le)=>{a&&w(Z,ie,le)};if(!a){const Z=T.length>0;return d.jsx("div",{className:"h-full flex-1 flex flex-col items-center justify-center p-4 sm:p-8",children:d.jsxs("div",{className:"w-full max-w-2xl mx-auto flex flex-col items-center justify-center",children:[d.jsx("h1",{className:"text-2xl sm:text-3xl font-medium text-gray-800 dark:text-gray-100 ophelia:text-[#fafafa] mb-2 text-center",style:{fontWeight:400},children:z}),d.jsxs("p",{className:"text-base sm:text-lg text-gray-500 dark:text-gray-400 ophelia:text-[#737373] mb-8 text-center",children:["What can I help with ",C,"?"]}),s.length>0?d.jsxs("div",{className:"w-full",children:[W&&d.jsx("div",{className:"mb-4 p-4 bg-gray-50 dark:bg-dark-100 ophelia:bg-[#121212] border border-gray-200 dark:border-dark-300 ophelia:border-[#262626] rounded-2xl",children:d.jsx(l1,{images:T,onImagesChange:$,maxImages:5})}),d.jsx("form",{onSubmit:re,children:d.jsxs("div",{className:K("flex items-center gap-2 p-2 sm:p-3 rounded-2xl sm:rounded-3xl border transition-all duration-200","bg-gray-50 dark:bg-dark-50 ophelia:bg-[#0a0a0a] border-gray-200 dark:border-dark-300 ophelia:border-[#262626]","hover:border-gray-300 dark:hover:border-dark-400 ophelia:hover:border-[#3f3f46]","focus-within:border-primary-400 dark:focus-within:border-primary-500 ophelia:focus-within:border-[#9333ea] focus-within:bg-white dark:focus-within:bg-dark-50 ophelia:focus-within:bg-[#0a0a0a]","shadow-sm hover:shadow-md focus-within:shadow-lg"),children:[d.jsx(Ve,{type:"button",variant:"ghost",size:"sm",onClick:()=>G(!W),className:K("h-8 w-8 sm:h-9 sm:w-9 !p-0 rounded-full flex-shrink-0","hover:bg-gray-200 dark:hover:bg-dark-200 ophelia:hover:bg-[#1a1a1a] transition-colors touch-manipulation",Z&&"text-primary-600 dark:text-primary-400 ophelia:text-[#a855f7]",W&&"bg-gray-200 dark:bg-dark-200 ophelia:bg-[#1a1a1a]"),title:"Attach images",style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"0"},children:Z?d.jsxs("div",{className:"relative flex items-center justify-center",children:[d.jsx(ka,{className:"h-4 w-4"}),d.jsx("div",{className:"absolute -top-0.5 -right-0.5 h-1.5 w-1.5 bg-primary-500 ophelia:bg-[#9333ea] rounded-full"})]}):W?d.jsx(Sa,{className:"h-4 w-4"}):d.jsx(Ma,{className:"h-4 w-4"})}),d.jsx("div",{className:"flex-1 min-w-0",children:d.jsx(gr,{ref:Y,value:j,onChange:ie=>A(ie.target.value),onKeyDown:Q,placeholder:"Message...",className:"!border-0 !bg-transparent !shadow-none !p-0 !m-0 !rounded-none !focus:ring-0 !focus:border-0 !focus:shadow-none !focus:bg-transparent min-h-[32px] sm:min-h-[36px] max-h-[120px] resize-none scrollbar-thin scrollbar-thumb-gray-300 dark:scrollbar-thumb-dark-400 ophelia:scrollbar-thumb-[#3f3f46] focus:outline-none placeholder:text-gray-500 dark:placeholder:text-dark-500 ophelia:placeholder:text-[#737373] text-base sm:text-sm leading-none touch-manipulation",rows:1,style:{boxShadow:"none !important",border:"none !important",outline:"none !important",padding:"0 !important",margin:"0 !important",lineHeight:"1.2 !important",verticalAlign:"middle"}})}),d.jsx("div",{className:"hidden sm:block",children:d.jsx(at,{models:s,selectedModel:l,onModelChange:ce,className:"min-w-[140px] max-w-[200px] border-0 bg-gray-100 dark:bg-dark-100 ophelia:bg-[#121212] rounded-xl text-sm",compact:!0})}),d.jsx(Ve,{type:"submit",variant:"ghost",size:"sm",disabled:!j.trim()||!l,className:K("h-8 w-8 sm:h-9 sm:w-9 p-0 rounded-full flex-shrink-0 flex items-center justify-center","hover:bg-primary-100 dark:hover:bg-primary-900/30 ophelia:hover:bg-[rgba(147,51,234,0.2)] text-primary-600 dark:text-primary-400 ophelia:text-[#a855f7]","disabled:text-gray-400 dark:disabled:text-dark-500 ophelia:disabled:text-[#525252] disabled:hover:bg-transparent","transition-all duration-150 touch-manipulation",j.trim()&&l&&"hover:scale-105 active:scale-95"),title:"Send message",children:d.jsx(Na,{className:"h-4 w-4"})})]})}),d.jsx("div",{className:"sm:hidden mt-4",children:d.jsx(at,{models:s,selectedModel:l,onModelChange:ce,className:"w-full rounded-xl bg-gray-100 dark:bg-dark-100 ophelia:bg-[#121212] border-0",compact:!0})}),d.jsxs("div",{className:"mt-4 text-center",children:[d.jsx("a",{href:"https://librewebui.org",target:"_blank",rel:"noopener noreferrer",className:"libre-brand underline hover:text-primary-600 dark:hover:text-primary-400 ophelia:hover:text-[#a855f7] transition-colors text-gray-500 dark:text-gray-400 ophelia:text-[#737373]",style:{fontSize:"0.75rem",lineHeight:1},children:"Libre WebUI"})," ",d.jsxs("span",{className:"text-gray-400 dark:text-gray-500 ophelia:text-[#525252]",style:{fontSize:"0.55rem"},children:["v","0.2.9"]})," ",d.jsx("span",{className:"text-gray-300 dark:text-gray-600 ophelia:text-[#3f3f46] opacity-50",children:"•"})," ",d.jsx("span",{className:"text-xs text-gray-400 dark:text-gray-500 ophelia:text-[#525252]",children:"LLM can make mistakes - verify important information"})]})]}):d.jsx("div",{className:"w-full max-w-md",children:d.jsxs("div",{className:"p-6 bg-gray-50 dark:bg-dark-100 ophelia:bg-[#121212] border border-gray-200 dark:border-dark-300 ophelia:border-[#262626] rounded-xl",children:[d.jsx("p",{className:"text-sm text-gray-700 dark:text-dark-700 ophelia:text-[#a3a3a3] mb-4",children:"No models available. Make sure Ollama is running and has models installed."}),d.jsx("code",{className:"block text-xs bg-gray-100 dark:bg-dark-200 ophelia:bg-[#0a0a0a] p-3 rounded-lg font-mono text-gray-800 dark:text-dark-600 ophelia:text-[#737373]",children:"ollama pull llama3.2:3b"})]})})]})})}return d.jsxs("div",{className:"flex flex-col h-full relative",style:L?.background?{backgroundImage:`url(${L.background})`,backgroundSize:"cover",backgroundPosition:"center",backgroundRepeat:"no-repeat"}:void 0,children:[L?.background&&d.jsx("div",{className:"absolute inset-0 bg-white/80 dark:bg-black/80 backdrop-blur-sm"}),d.jsxs("div",{className:"flex flex-col h-full relative z-10",children:[L&&d.jsx("div",{className:"flex-shrink-0 px-4 py-2 border-b border-gray-100 dark:border-dark-200 ophelia:border-[#262626] bg-white/50 dark:bg-dark-100/50 ophelia:bg-[#0a0a0a]/50 backdrop-blur-sm",children:d.jsx(i1,{persona:L,onClear:()=>{if(a){const{sessions:Z}=be.getState(),ie={...a,model:L.model,personaId:void 0},le=Z.map(we=>we.id===a.id?ie:we);be.setState({sessions:le,currentSession:ie})}}})}),d.jsx(e1,{messages:a.messages,streamingMessage:N,streamingMessageId:B,isStreaming:I,onRegenerate:k,onSelectBranch:D,className:"flex-1"}),d.jsx(s1,{onSendMessage:ye,onStopGeneration:M,disabled:!a})]})]})};export{v1 as ChatPage,v1 as default};
|