@xpert-ai/chatkit-ui 0.0.18 → 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/assets/{abap-CHwuRnXq.js → abap-CabZ0vYL.js} +1 -1
- package/dist/app/assets/{abnf-2DfzhqtW.js → abnf-CPoubvVG.js} +1 -1
- package/dist/app/assets/{actionscript-DAgV32eO.js → actionscript-CL1BPQFv.js} +1 -1
- package/dist/app/assets/{ada-DT3cxlyx.js → ada-BOt55oS4.js} +1 -1
- package/dist/app/assets/{agda-CtLOupxH.js → agda-DKyUkxie.js} +1 -1
- package/dist/app/assets/{al-DEAhLEpb.js → al-Jnhqb7P-.js} +1 -1
- package/dist/app/assets/{antlr4-mH3vFjLU.js → antlr4-BeT3YbbK.js} +1 -1
- package/dist/app/assets/{apacheconf-XqH3RiJR.js → apacheconf-Ck_DRZXY.js} +1 -1
- package/dist/app/assets/{apex-ToiE8TUF.js → apex-CPjbO0O4.js} +1 -1
- package/dist/app/assets/{apl-wfi68f3P.js → apl-Ccs4_jOU.js} +1 -1
- package/dist/app/assets/{applescript-D76E4SJU.js → applescript-C6i7vo8F.js} +1 -1
- package/dist/app/assets/{aql-BMSyfgpD.js → aql-D3ZWY-VL.js} +1 -1
- package/dist/app/assets/{arduino-DJbNpx4-.js → arduino-xTj3TTXg.js} +1 -1
- package/dist/app/assets/{arff-yrwqaguZ.js → arff-BOuVccGR.js} +1 -1
- package/dist/app/assets/{asciidoc-CEQ5mqA1.js → asciidoc-BmShvnn0.js} +1 -1
- package/dist/app/assets/{asm6502-C-2c85ky.js → asm6502-6FWPK68i.js} +1 -1
- package/dist/app/assets/{asmatmel-CWq0tTKz.js → asmatmel-KLAd82QV.js} +1 -1
- package/dist/app/assets/{aspnet-Cx4ZWrOh.js → aspnet-vZiSZd1y.js} +1 -1
- package/dist/app/assets/{autohotkey-DWdNXtYW.js → autohotkey-tcBDP1b7.js} +1 -1
- package/dist/app/assets/{autoit-Dbc7dXyT.js → autoit-Bwt0tLM_.js} +1 -1
- package/dist/app/assets/{avisynth-MYFijYs8.js → avisynth-Bzz43Lfu.js} +1 -1
- package/dist/app/assets/{avro-idl-D-g9-Y0l.js → avro-idl-Bt9aSyrD.js} +1 -1
- package/dist/app/assets/{bash-8NbFWZiC.js → bash-BloO3C-T.js} +1 -1
- package/dist/app/assets/{basic-DSlnlwQJ.js → basic-B-OOkRrw.js} +1 -1
- package/dist/app/assets/{batch-B2Rcm8G9.js → batch-aOUu2msA.js} +1 -1
- package/dist/app/assets/{bbcode-DHCPPC4e.js → bbcode-C4D8vm8O.js} +1 -1
- package/dist/app/assets/{bicep-BZyRz9TP.js → bicep-BtBByAYv.js} +1 -1
- package/dist/app/assets/{birb-BakwD9zz.js → birb-BKXLouTf.js} +1 -1
- package/dist/app/assets/{bison-ieCPcVGR.js → bison-CniuHJJN.js} +1 -1
- package/dist/app/assets/{bnf-CGY-BBi3.js → bnf-CGcuZYv2.js} +1 -1
- package/dist/app/assets/{brainfuck-Cj81VtmH.js → brainfuck-C9dlh056.js} +1 -1
- package/dist/app/assets/{brightscript-BD0EgXHk.js → brightscript-nhHFw9_4.js} +1 -1
- package/dist/app/assets/{bro-CBy8pULp.js → bro-BTsReVOc.js} +1 -1
- package/dist/app/assets/{bsl-xro0lCDL.js → bsl-CmOTwcFR.js} +1 -1
- package/dist/app/assets/{c-9rxn2YQ4.js → c-Yjfq4oES.js} +1 -1
- package/dist/app/assets/{cfscript-Bkf3ayeM.js → cfscript-DGhYlgJ7.js} +1 -1
- package/dist/app/assets/{chaiscript-GDz4R2K8.js → chaiscript-CpP8bBSU.js} +1 -1
- package/dist/app/assets/{cil-CYn74Ewd.js → cil-CZ7j4pcz.js} +1 -1
- package/dist/app/assets/{clike-45tZ1mA6.js → clike-D581thF2.js} +1 -1
- package/dist/app/assets/{clojure-BWz4NMPO.js → clojure-AXVmar0o.js} +1 -1
- package/dist/app/assets/{cmake-xA13Uqwj.js → cmake-BozSSfax.js} +1 -1
- package/dist/app/assets/{cobol-j0iRbhJB.js → cobol-OciN9vwY.js} +1 -1
- package/dist/app/assets/{coffeescript-dl-THSsH.js → coffeescript-B9yMzVL5.js} +1 -1
- package/dist/app/assets/{concurnas-B6S-ADWj.js → concurnas-DeQIM64O.js} +1 -1
- package/dist/app/assets/{coq-PXls10l3.js → coq-CicPksao.js} +1 -1
- package/dist/app/assets/{core-DDPOAK1E.js → core-BIcqXTaK.js} +1 -1
- package/dist/app/assets/{cpp-BgzSW_NX.js → cpp-DKQF7403.js} +1 -1
- package/dist/app/assets/{crystal-BMmhu41o.js → crystal-Bcau7QFZ.js} +1 -1
- package/dist/app/assets/{csharp-B_WC3Vn_.js → csharp-BYghYpTl.js} +1 -1
- package/dist/app/assets/{cshtml-BqSNO3ox.js → cshtml-BIxIGrsH.js} +1 -1
- package/dist/app/assets/{csp-CrUI1cnG.js → csp-CzDOD-m1.js} +1 -1
- package/dist/app/assets/{css-ChHsquIc.js → css-CPRwU6oY.js} +1 -1
- package/dist/app/assets/{css-extras-bQ5HJzA4.js → css-extras-C28yWYxN.js} +1 -1
- package/dist/app/assets/{csv-t6AqRQB9.js → csv-D8IAZwKO.js} +1 -1
- package/dist/app/assets/{cypher-Cy7io1dY.js → cypher-0hMRBt8D.js} +1 -1
- package/dist/app/assets/{d-CwMdCAM_.js → d-B5PQgXXo.js} +1 -1
- package/dist/app/assets/{dart-BuartbIn.js → dart-CvCyf8me.js} +1 -1
- package/dist/app/assets/{dataweave-BnCsrMSg.js → dataweave-Izl0xtz9.js} +1 -1
- package/dist/app/assets/{dax-DaI-ew-T.js → dax-D-bGAkbS.js} +1 -1
- package/dist/app/assets/{dhall-6JyEA8LJ.js → dhall-DXIOSM5Q.js} +1 -1
- package/dist/app/assets/{diff-BAlFnOor.js → diff-BE-xKdIi.js} +1 -1
- package/dist/app/assets/{django-D9vYkGg3.js → django-DxEZdkeU.js} +1 -1
- package/dist/app/assets/{dns-zone-file-abVzPRWS.js → dns-zone-file-D406E4S7.js} +1 -1
- package/dist/app/assets/{docker-DoUnklwQ.js → docker-BZkb2U00.js} +1 -1
- package/dist/app/assets/{dot-DDnBlEa_.js → dot-BGJNVmx1.js} +1 -1
- package/dist/app/assets/{ebnf-BajOxGce.js → ebnf-_PEATas2.js} +1 -1
- package/dist/app/assets/{editorconfig-BIddix8n.js → editorconfig-C1UuLwJC.js} +1 -1
- package/dist/app/assets/{eiffel-BKXrTa6c.js → eiffel-PzXVtlzf.js} +1 -1
- package/dist/app/assets/{ejs-Og16WqX4.js → ejs-707c0691.js} +1 -1
- package/dist/app/assets/{elixir-CRUCJ3sb.js → elixir-Bd3zWMjP.js} +1 -1
- package/dist/app/assets/{elm-BWsXlhNE.js → elm-DvEDEOdK.js} +1 -1
- package/dist/app/assets/{erb-Cl2dmgV9.js → erb-B6lZT1P9.js} +1 -1
- package/dist/app/assets/{erlang-52x12hpz.js → erlang-BwhqRmQk.js} +1 -1
- package/dist/app/assets/{etlua-BvUA6TYU.js → etlua-Bkg93PrU.js} +1 -1
- package/dist/app/assets/{excel-formula-CUG5ejOC.js → excel-formula-BD0I0dyD.js} +1 -1
- package/dist/app/assets/{factor-C6rMQLDa.js → factor-CiQgOsxY.js} +1 -1
- package/dist/app/assets/{false-DV4ACTLB.js → false-DlJ-f_Rc.js} +1 -1
- package/dist/app/assets/{firestore-security-rules-BKZLjo1E.js → firestore-security-rules-CxrEhPSm.js} +1 -1
- package/dist/app/assets/{flow-qFNOvNgm.js → flow-DOjTBDi4.js} +1 -1
- package/dist/app/assets/{fortran-DqiezfWq.js → fortran-D6uA-pWI.js} +1 -1
- package/dist/app/assets/{fsharp-ClWdxDsu.js → fsharp-CFL1DcvT.js} +1 -1
- package/dist/app/assets/{ftl-B02Q359Y.js → ftl-DzWZwecM.js} +1 -1
- package/dist/app/assets/{gap-CI8z3sUw.js → gap-DatQeRFY.js} +1 -1
- package/dist/app/assets/{gcode-CS21WcHI.js → gcode-5FSxboIT.js} +1 -1
- package/dist/app/assets/{gdscript-C7R4f8Sc.js → gdscript-Dz-OC8bG.js} +1 -1
- package/dist/app/assets/{gedcom-zHMKYqZx.js → gedcom-BS0539Ys.js} +1 -1
- package/dist/app/assets/{gherkin-BcPGV1uj.js → gherkin-BJKrWYAT.js} +1 -1
- package/dist/app/assets/{git-EtetQy0I.js → git-DCjIevVw.js} +1 -1
- package/dist/app/assets/{glsl-BcKnrROs.js → glsl-toSXKJrw.js} +1 -1
- package/dist/app/assets/{gml-CrGZiEns.js → gml-DODsSWU7.js} +1 -1
- package/dist/app/assets/{gn-DHos-BEp.js → gn-CzmtMWMm.js} +1 -1
- package/dist/app/assets/{go-tSMJGh2m.js → go-BCQUEKVv.js} +1 -1
- package/dist/app/assets/{go-module-DmD_s_em.js → go-module-BbcV-9oG.js} +1 -1
- package/dist/app/assets/{graphql-Cv6KihzB.js → graphql-C_KxCYJO.js} +1 -1
- package/dist/app/assets/{groovy-CzqIFnlO.js → groovy-Cj97iKYK.js} +1 -1
- package/dist/app/assets/{haml-p67IB2SU.js → haml-tLXJGYDb.js} +1 -1
- package/dist/app/assets/{handlebars-CZv3-FpN.js → handlebars-DIdVe3xN.js} +1 -1
- package/dist/app/assets/{haskell-DAL_LfTS.js → haskell-DPqw5u4H.js} +1 -1
- package/dist/app/assets/{haxe-CTqmh5A2.js → haxe-AsnHNCIR.js} +1 -1
- package/dist/app/assets/{hcl-CVN94LS3.js → hcl-C6aoWR34.js} +1 -1
- package/dist/app/assets/{hlsl-Bn6ZMphU.js → hlsl-B2hhU30-.js} +1 -1
- package/dist/app/assets/{hoon-CE6akRDU.js → hoon-Bs-KhWO3.js} +1 -1
- package/dist/app/assets/{hpkp-C8KgIg74.js → hpkp-C-J4O-Mp.js} +1 -1
- package/dist/app/assets/{hsts-DosDc_Xd.js → hsts-BNFEkSnm.js} +1 -1
- package/dist/app/assets/{http-CdUJWc4k.js → http-D7UlQANy.js} +1 -1
- package/dist/app/assets/{ichigojam-BYu2pYZ_.js → ichigojam-B01TJ8BA.js} +1 -1
- package/dist/app/assets/{icon-C5iVR2I1.js → icon-Ca_ghvQd.js} +1 -1
- package/dist/app/assets/{icu-message-format-C7_n4NGR.js → icu-message-format-CkcsJ0ML.js} +1 -1
- package/dist/app/assets/{idris-BbHCmg9Y.js → idris-BApVxI9a.js} +1 -1
- package/dist/app/assets/{iecst-BXI2gfub.js → iecst-CXLR8sGn.js} +1 -1
- package/dist/app/assets/{ignore-DxilDdWj.js → ignore-7LzAeAFj.js} +1 -1
- package/dist/app/assets/{index-CxdiVFB3.js → index-BUg2yVDW.js} +99 -99
- package/dist/app/assets/{index-Ki_i49D-.css → index-om2E9pNd.css} +1 -1
- package/dist/app/assets/{inform7-D9rsIB2_.js → inform7-CtnRN-Iq.js} +1 -1
- package/dist/app/assets/{ini-CorbaNQ2.js → ini-Cjpl6yTL.js} +1 -1
- package/dist/app/assets/{io-DlaJAU3H.js → io-C6W_EboY.js} +1 -1
- package/dist/app/assets/{j-Df9KMPk_.js → j-BOBDun2W.js} +1 -1
- package/dist/app/assets/{java-BbPAAQzG.js → java-CNwVyXY2.js} +1 -1
- package/dist/app/assets/{javadoc-BBvxcZku.js → javadoc-DS6hxu7_.js} +1 -1
- package/dist/app/assets/{javadoclike-C-hXm4Na.js → javadoclike-J6YT11JS.js} +1 -1
- package/dist/app/assets/{javascript-D2UR82H9.js → javascript-IbEfuVSB.js} +1 -1
- package/dist/app/assets/{javastacktrace--Jk342eR.js → javastacktrace-DjxwGV26.js} +1 -1
- package/dist/app/assets/{jexl-Dp7mqOtA.js → jexl-TLHmHaQ5.js} +1 -1
- package/dist/app/assets/{jolie-CSWv4bc8.js → jolie-CLk71kur.js} +1 -1
- package/dist/app/assets/{jq-CRIxeObf.js → jq-DZKnIQZM.js} +1 -1
- package/dist/app/assets/{js-extras-D6Oxrs85.js → js-extras-CJab09ti.js} +1 -1
- package/dist/app/assets/{js-templates-CvddYygu.js → js-templates-CQGqrHhi.js} +1 -1
- package/dist/app/assets/{jsdoc-BdeT1xTG.js → jsdoc--ymvl4aq.js} +1 -1
- package/dist/app/assets/{json-CD5aTyqv.js → json-D9b-V85G.js} +1 -1
- package/dist/app/assets/{json5-CQD7S44p.js → json5-LgA47n7A.js} +1 -1
- package/dist/app/assets/{jsonp-BDhKO2OY.js → jsonp-Cvwp3f8M.js} +1 -1
- package/dist/app/assets/{jsstacktrace-lbAhFL2v.js → jsstacktrace-z8t2H6h6.js} +1 -1
- package/dist/app/assets/{jsx-DqiBSXn6.js → jsx-B71LrwNd.js} +1 -1
- package/dist/app/assets/{julia-yGL3eW7D.js → julia-DCATdxwO.js} +1 -1
- package/dist/app/assets/{keepalived-DHZu6IVW.js → keepalived-DVYYbgrL.js} +1 -1
- package/dist/app/assets/{keyman-DoP3-MPX.js → keyman-DLyOXnhf.js} +1 -1
- package/dist/app/assets/{kotlin-C38FMvib.js → kotlin-CYoDfyDA.js} +1 -1
- package/dist/app/assets/{kumir-DYUxd4M5.js → kumir-CPWiEvmL.js} +1 -1
- package/dist/app/assets/{kusto-CjBEwlq_.js → kusto-BkfRYk0W.js} +1 -1
- package/dist/app/assets/{latex-yk3k8b7j.js → latex-BEjZ0ppC.js} +1 -1
- package/dist/app/assets/{latte-Dng4v313.js → latte-DaZOqdGV.js} +1 -1
- package/dist/app/assets/{less-CmhWzUUH.js → less-BmKsj1gN.js} +1 -1
- package/dist/app/assets/{lilypond-DpO8jIok.js → lilypond-mmng28aJ.js} +1 -1
- package/dist/app/assets/{liquid-7KQu8yU-.js → liquid-BuuJO6_6.js} +1 -1
- package/dist/app/assets/{lisp-CkwfOFVq.js → lisp-DnffFM5N.js} +1 -1
- package/dist/app/assets/{livescript-K_eeePCa.js → livescript-BSsr00Wr.js} +1 -1
- package/dist/app/assets/{llvm-Chk2kOg9.js → llvm-37YjcHN5.js} +1 -1
- package/dist/app/assets/{log-XeloFBhC.js → log-D3l5N3To.js} +1 -1
- package/dist/app/assets/{lolcode-6kb_GfTw.js → lolcode-C0Q2M_6s.js} +1 -1
- package/dist/app/assets/{lua-DpHWoKu0.js → lua-DcLwN4Tg.js} +1 -1
- package/dist/app/assets/{magma-B1cwfm8a.js → magma-CK0Amip9.js} +1 -1
- package/dist/app/assets/{makefile-DnoX0HR-.js → makefile-CtpS-RoO.js} +1 -1
- package/dist/app/assets/{markdown-C5XigQJ0.js → markdown-BNK3F4ql.js} +1 -1
- package/dist/app/assets/{markup-SKmTYACD.js → markup-C9GIL65H.js} +1 -1
- package/dist/app/assets/{markup-templating-BDHc3isa.js → markup-templating-Du1J3ADP.js} +1 -1
- package/dist/app/assets/{matlab-DYse1JL8.js → matlab-DEM6O1Ul.js} +1 -1
- package/dist/app/assets/{maxscript-Dof7S23b.js → maxscript-DMvqa3gf.js} +1 -1
- package/dist/app/assets/{mel-DsVmbOxg.js → mel-C8DBIw1g.js} +1 -1
- package/dist/app/assets/{mermaid-CjPxe17r.js → mermaid-CVko6NSq.js} +1 -1
- package/dist/app/assets/{mizar-DLTTgd44.js → mizar-CwYm3_It.js} +1 -1
- package/dist/app/assets/{mongodb-J5tlFev8.js → mongodb-DRqGwjq6.js} +1 -1
- package/dist/app/assets/{monkey-QAy3552c.js → monkey-BxiKe6Nr.js} +1 -1
- package/dist/app/assets/{moonscript-D0xhYjmI.js → moonscript-CJyt1xoM.js} +1 -1
- package/dist/app/assets/{n1ql-vOxeW8Ks.js → n1ql-BBmjIGEU.js} +1 -1
- package/dist/app/assets/{n4js-Cr0sbX4v.js → n4js-ByKsJMJL.js} +1 -1
- package/dist/app/assets/{nand2tetris-hdl-CGUHioIg.js → nand2tetris-hdl-BTSXj71h.js} +1 -1
- package/dist/app/assets/{naniscript-BRNba_ij.js → naniscript-C4jykFVF.js} +1 -1
- package/dist/app/assets/{nasm-BEE3NtXA.js → nasm-DPA0eXtX.js} +1 -1
- package/dist/app/assets/{neon-BCWk85VJ.js → neon-upN4Ak64.js} +1 -1
- package/dist/app/assets/{nevod-DuaN4wbX.js → nevod-CdttHB8F.js} +1 -1
- package/dist/app/assets/{nginx-BE3tA_qC.js → nginx-DI1fsQ3j.js} +1 -1
- package/dist/app/assets/{nim-BTdmQ5Q3.js → nim-D7kc_mK9.js} +1 -1
- package/dist/app/assets/{nix-BGISRhR6.js → nix-BUG5ppr9.js} +1 -1
- package/dist/app/assets/{nsis-Cy7-xS7T.js → nsis-BnXhmmxO.js} +1 -1
- package/dist/app/assets/{objectivec-dDOKBhSQ.js → objectivec-Bu4dOfb9.js} +1 -1
- package/dist/app/assets/{ocaml-FY2_HJ8p.js → ocaml-aT7VVPiL.js} +1 -1
- package/dist/app/assets/{opencl-QvCSqYEz.js → opencl-BzyWcYkI.js} +1 -1
- package/dist/app/assets/{openqasm-DciDYaBI.js → openqasm-b2yFBJdq.js} +1 -1
- package/dist/app/assets/{oz-b_RN2Jum.js → oz-D46TtIuw.js} +1 -1
- package/dist/app/assets/{parigp-pi9tW-vJ.js → parigp-BAJyhdut.js} +1 -1
- package/dist/app/assets/{parser-BNyoGbdp.js → parser-B-ALvauC.js} +1 -1
- package/dist/app/assets/{pascal-CCbBRhEl.js → pascal-B0ap4FDW.js} +1 -1
- package/dist/app/assets/{pascaligo-DlAAMoJ9.js → pascaligo-ChOneu9-.js} +1 -1
- package/dist/app/assets/{pcaxis-doDt0DKg.js → pcaxis-DTAmxHgs.js} +1 -1
- package/dist/app/assets/{peoplecode-C6qORRLy.js → peoplecode-dQfUy8zn.js} +1 -1
- package/dist/app/assets/{perl-DYO72X5y.js → perl-CYk00e1Q.js} +1 -1
- package/dist/app/assets/{php-DYRzOllS.js → php-DvSqFnSN.js} +1 -1
- package/dist/app/assets/{php-extras-CVIKu6Nc.js → php-extras-BFjUbIU6.js} +1 -1
- package/dist/app/assets/{phpdoc-BGNfZMOM.js → phpdoc-Di7rKCNL.js} +1 -1
- package/dist/app/assets/{plsql-eC13ro-r.js → plsql-dX0-BKqD.js} +1 -1
- package/dist/app/assets/{powerquery-Cs0JgpuI.js → powerquery-3xq4KaAs.js} +1 -1
- package/dist/app/assets/{powershell-9KYeI4sx.js → powershell-BbXooszO.js} +1 -1
- package/dist/app/assets/{processing-HbGRdnnD.js → processing-GWbfNCzH.js} +1 -1
- package/dist/app/assets/{prolog-CI3jZdJK.js → prolog-Tb2TbunJ.js} +1 -1
- package/dist/app/assets/{promql-D0wREOFk.js → promql-QS8vHhL7.js} +1 -1
- package/dist/app/assets/{properties-DgwMsvo5.js → properties-BJ8AWlqX.js} +1 -1
- package/dist/app/assets/{protobuf-C1Z09MVB.js → protobuf-De-puAg3.js} +1 -1
- package/dist/app/assets/{psl-DpPBMaI5.js → psl-hZft3C8K.js} +1 -1
- package/dist/app/assets/{pug-DYaSYILA.js → pug-BcYHdk-i.js} +1 -1
- package/dist/app/assets/{puppet-DxCnT5Pj.js → puppet-BWbqDQJD.js} +1 -1
- package/dist/app/assets/{pure-CUYh7Ck6.js → pure-Bz2pjTxR.js} +1 -1
- package/dist/app/assets/{purebasic-DXQmX2ZG.js → purebasic-BlO48lYx.js} +1 -1
- package/dist/app/assets/{purescript-BVZzZ7nk.js → purescript-BxSMm2Br.js} +1 -1
- package/dist/app/assets/{q-BMx8_CVm.js → q-DDUTW9aK.js} +1 -1
- package/dist/app/assets/{qml-CmeGky21.js → qml-DisOV-LV.js} +1 -1
- package/dist/app/assets/{qore-CtP0c7NV.js → qore-FNRP4gBF.js} +1 -1
- package/dist/app/assets/{qsharp-BTgQDBC3.js → qsharp-DhtMV0oO.js} +1 -1
- package/dist/app/assets/{r-B5-O0rcA.js → r-CyiuHjNN.js} +1 -1
- package/dist/app/assets/{racket-CEX4pyKb.js → racket-DFgoSckH.js} +1 -1
- package/dist/app/assets/{reason-CqPEmBsx.js → reason-HhYbY7K3.js} +1 -1
- package/dist/app/assets/{regex-CQ8JW_Gc.js → regex-jU5TpvM-.js} +1 -1
- package/dist/app/assets/{rego-Dt4DHrNq.js → rego-BCjDPrQO.js} +1 -1
- package/dist/app/assets/{renpy-ByHKwRX9.js → renpy-BTSgQi2v.js} +1 -1
- package/dist/app/assets/{rest-BrStwFnU.js → rest-BLcZ4e-5.js} +1 -1
- package/dist/app/assets/{rip-B74P3wJy.js → rip-SltRJnuI.js} +1 -1
- package/dist/app/assets/{roboconf-DLUr9EJ1.js → roboconf-B-GZm2Oe.js} +1 -1
- package/dist/app/assets/{robotframework-BcuIX9tt.js → robotframework-BOt8S6cX.js} +1 -1
- package/dist/app/assets/{ruby-Bi4Wut0d.js → ruby-CVfYH0zM.js} +1 -1
- package/dist/app/assets/{rust-CYPSHdmA.js → rust-B6mEp4Sj.js} +1 -1
- package/dist/app/assets/{sas-CAUvO4l1.js → sas-DvEI8RJ0.js} +1 -1
- package/dist/app/assets/{sass-DzJLJBqu.js → sass-Cv25Jxqq.js} +1 -1
- package/dist/app/assets/{scala-CT_n8gZn.js → scala-CyqNr7Uv.js} +1 -1
- package/dist/app/assets/{scheme-xujlA_rp.js → scheme-ji0XoXLf.js} +1 -1
- package/dist/app/assets/{scss-D8ZDIDQI.js → scss-B7_0neO_.js} +1 -1
- package/dist/app/assets/{shell-session-CWbKJyhk.js → shell-session-CqZEoMQD.js} +1 -1
- package/dist/app/assets/{smali-Nxfv_vvZ.js → smali-DKSzZYkI.js} +1 -1
- package/dist/app/assets/{smalltalk-B--by9ZJ.js → smalltalk-BOA4piuq.js} +1 -1
- package/dist/app/assets/{smarty-uT4syL5U.js → smarty-Du99BSgN.js} +1 -1
- package/dist/app/assets/{sml-C6x2rWB8.js → sml-BJedIA4B.js} +1 -1
- package/dist/app/assets/{solidity-BOJu-utD.js → solidity-DidQwG5Z.js} +1 -1
- package/dist/app/assets/{solution-file-ygppTBQ1.js → solution-file-Bx0d9qN8.js} +1 -1
- package/dist/app/assets/{soy-Bavjfh30.js → soy-BBLv3Cfa.js} +1 -1
- package/dist/app/assets/{sparql-D6GMLoSp.js → sparql-Da5WZKbL.js} +1 -1
- package/dist/app/assets/{splunk-spl-BCqeA0zN.js → splunk-spl-DbJKl8So.js} +1 -1
- package/dist/app/assets/{sqf-DXFnoJLs.js → sqf-CYrx0jxf.js} +1 -1
- package/dist/app/assets/{sql-CDPg3pWi.js → sql-Gv-aOlOf.js} +1 -1
- package/dist/app/assets/{squirrel-BzsuTTxA.js → squirrel-FpIGPPw4.js} +1 -1
- package/dist/app/assets/{stan-BNSDRY4v.js → stan-Dq001Nrk.js} +1 -1
- package/dist/app/assets/{stylus-DylJUx_f.js → stylus-aatfgWwe.js} +1 -1
- package/dist/app/assets/{swift-CaIWTpgC.js → swift-pn7VW95d.js} +1 -1
- package/dist/app/assets/{systemd-DQnCn8nj.js → systemd-9capsVJ6.js} +1 -1
- package/dist/app/assets/{t4-cs-Cq_GwW_Q.js → t4-cs-CKXcczci.js} +1 -1
- package/dist/app/assets/{t4-templating-BISgTxam.js → t4-templating-1wTayb8u.js} +1 -1
- package/dist/app/assets/{t4-vb-N0GEvIeQ.js → t4-vb-B_O7wBow.js} +1 -1
- package/dist/app/assets/{tap-ce-I6CHh.js → tap-D-TV5_gQ.js} +1 -1
- package/dist/app/assets/{tcl-C06hBxKf.js → tcl-BaVob1Om.js} +1 -1
- package/dist/app/assets/{textile-Cd7PLrV2.js → textile-COMk-HmI.js} +1 -1
- package/dist/app/assets/{toml-DB0RMCXU.js → toml-D9NJpArC.js} +1 -1
- package/dist/app/assets/{tremor-CxlZCmcC.js → tremor-rCNHwdQL.js} +1 -1
- package/dist/app/assets/{tt2-BoO6vEQl.js → tt2-DTDvfOgc.js} +1 -1
- package/dist/app/assets/{turtle-TnULjnRa.js → turtle-D8pkqXh1.js} +1 -1
- package/dist/app/assets/{twig-C7sH-lah.js → twig-DxSF8gqH.js} +1 -1
- package/dist/app/assets/{typescript-zCOOstrs.js → typescript-Caebatmk.js} +1 -1
- package/dist/app/assets/{typoscript-yX2bGADB.js → typoscript-B3uk1kES.js} +1 -1
- package/dist/app/assets/{unrealscript-Cj-gCXJg.js → unrealscript-ZNoSG8ji.js} +1 -1
- package/dist/app/assets/{uorazor-TOQ_u0re.js → uorazor-LekoNNOo.js} +1 -1
- package/dist/app/assets/{uri-Pfk8EtIw.js → uri-B8YcIzOv.js} +1 -1
- package/dist/app/assets/{v-CLB2o_L5.js → v-6rOne2a0.js} +1 -1
- package/dist/app/assets/{vala-PFnq-zMH.js → vala-CjEJEdsP.js} +1 -1
- package/dist/app/assets/{vbnet-CeobNUlV.js → vbnet-DBPmBm7_.js} +1 -1
- package/dist/app/assets/{velocity-D_oz4NYY.js → velocity-DOooMwL8.js} +1 -1
- package/dist/app/assets/{verilog-Bhh7YyoC.js → verilog-Cq0ZocvP.js} +1 -1
- package/dist/app/assets/{vhdl-zKh6LXHA.js → vhdl-Dxs_xidb.js} +1 -1
- package/dist/app/assets/{vim-CL4YN93-.js → vim-BqsnXwB6.js} +1 -1
- package/dist/app/assets/{visual-basic-DNms8NyE.js → visual-basic-zAzjvaqP.js} +1 -1
- package/dist/app/assets/{warpscript-5Fq7EzBx.js → warpscript-D9hbfr6_.js} +1 -1
- package/dist/app/assets/{wasm-R6qJ-jJ8.js → wasm-C4TU9VDY.js} +1 -1
- package/dist/app/assets/{web-idl-Blrz26ym.js → web-idl-DD5JcddQ.js} +1 -1
- package/dist/app/assets/{wiki-OeXSqdoS.js → wiki-Des21yVK.js} +1 -1
- package/dist/app/assets/{wolfram-C-UD9Kta.js → wolfram-B7enpov1.js} +1 -1
- package/dist/app/assets/{wren-Dll3yBh8.js → wren-Rr8h-Ayu.js} +1 -1
- package/dist/app/assets/{xeora-DrxHOskN.js → xeora-EjcLXBhx.js} +1 -1
- package/dist/app/assets/{xml-doc-Bz3psZDa.js → xml-doc-uaTxx6-m.js} +1 -1
- package/dist/app/assets/{xojo-B-FqLlsk.js → xojo-CX6G8nhh.js} +1 -1
- package/dist/app/assets/{xquery-CQnqW2mz.js → xquery-DvPb3Uw9.js} +1 -1
- package/dist/app/assets/{yaml-jvENsAZR.js → yaml-D-l_Y2hx.js} +1 -1
- package/dist/app/assets/{yang-DKQbMmVK.js → yang-KBoIIT4_.js} +1 -1
- package/dist/app/assets/{zig-DslIE2kW.js → zig-_uNXp9cY.js} +1 -1
- package/dist/app/index.html +2 -2
- package/dist/index.cjs +324 -197
- package/dist/index.d.cts +24 -1
- package/dist/index.d.ts +24 -1
- package/dist/index.js +320 -197
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -43,6 +43,7 @@ __export(index_exports, {
|
|
|
43
43
|
CardHeader: () => CardHeader,
|
|
44
44
|
CardTitle: () => CardTitle,
|
|
45
45
|
Chat: () => Chat,
|
|
46
|
+
ChatkitAvatar: () => ChatkitAvatar,
|
|
46
47
|
Input: () => Input,
|
|
47
48
|
ParentMessengerProvider: () => ParentMessengerProvider,
|
|
48
49
|
ScrollArea: () => ScrollArea,
|
|
@@ -54,7 +55,10 @@ __export(index_exports, {
|
|
|
54
55
|
TabsTrigger: () => TabsTrigger,
|
|
55
56
|
ThemeProvider: () => ThemeProvider,
|
|
56
57
|
chatkitSupportedLocales: () => supportedLocales,
|
|
58
|
+
extractAssistantAvatar: () => extractAssistantAvatar,
|
|
59
|
+
getAvatarFallback: () => getAvatarFallback,
|
|
57
60
|
getChatkitLanguage: () => getLanguage,
|
|
61
|
+
normalizeChatkitAvatar: () => normalizeChatkitAvatar,
|
|
58
62
|
setChatkitLanguage: () => setLanguage,
|
|
59
63
|
useParentMessenger: () => useParentMessenger,
|
|
60
64
|
useTheme: () => useTheme
|
|
@@ -62,7 +66,7 @@ __export(index_exports, {
|
|
|
62
66
|
module.exports = __toCommonJS(index_exports);
|
|
63
67
|
|
|
64
68
|
// src/components/chat.tsx
|
|
65
|
-
var
|
|
69
|
+
var React20 = __toESM(require("react"), 1);
|
|
66
70
|
var import_lucide_react9 = require("lucide-react");
|
|
67
71
|
|
|
68
72
|
// src/lib/utils.ts
|
|
@@ -71,19 +75,14 @@ var import_tailwind_merge = require("tailwind-merge");
|
|
|
71
75
|
function cn(...inputs) {
|
|
72
76
|
return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
|
|
73
77
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
case "sharp":
|
|
83
|
-
return "rounded-none";
|
|
84
|
-
default:
|
|
85
|
-
return "rounded-full";
|
|
86
|
-
}
|
|
78
|
+
var THEME_RADIUS_PRESET_CLASS = {
|
|
79
|
+
pill: "rounded-full",
|
|
80
|
+
round: "rounded-xl",
|
|
81
|
+
soft: "rounded-lg",
|
|
82
|
+
sharp: "rounded-none"
|
|
83
|
+
};
|
|
84
|
+
function getRoundedClass(themeRadius, fallback = "rounded-full") {
|
|
85
|
+
return themeRadius ? THEME_RADIUS_PRESET_CLASS[themeRadius] : fallback;
|
|
87
86
|
}
|
|
88
87
|
function createMessageId() {
|
|
89
88
|
return globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
|
|
@@ -616,6 +615,10 @@ var en_US_default = {
|
|
|
616
615
|
errorToast: "An error occurred. Please try again.",
|
|
617
616
|
errorLabel: "Error:",
|
|
618
617
|
langGraphMessages: "LangGraph Messages..."
|
|
618
|
+
},
|
|
619
|
+
message: {
|
|
620
|
+
answer: "Answer",
|
|
621
|
+
reasoning: "Reasoning"
|
|
619
622
|
}
|
|
620
623
|
};
|
|
621
624
|
|
|
@@ -675,6 +678,10 @@ var zh_CN_default = {
|
|
|
675
678
|
errorToast: "\u53D1\u751F\u9519\u8BEF\uFF0C\u8BF7\u91CD\u8BD5\u3002",
|
|
676
679
|
errorLabel: "\u9519\u8BEF\uFF1A",
|
|
677
680
|
langGraphMessages: "LangGraph \u6D88\u606F..."
|
|
681
|
+
},
|
|
682
|
+
message: {
|
|
683
|
+
answer: "\u56DE\u7B54",
|
|
684
|
+
reasoning: "\u63A8\u7406"
|
|
678
685
|
}
|
|
679
686
|
};
|
|
680
687
|
|
|
@@ -2233,6 +2240,7 @@ function renderContent(content, messageId) {
|
|
|
2233
2240
|
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "space-y-3", children: content.map((item, index) => renderContentItem(item, index, messageId)) });
|
|
2234
2241
|
}
|
|
2235
2242
|
function AssistantMessage({ message, className, isStreaming = false }) {
|
|
2243
|
+
const { t } = useChatkitTranslation();
|
|
2236
2244
|
const content = message.content;
|
|
2237
2245
|
const hasContent = content != null && !(typeof content === "string" && content.trim() === "" || Array.isArray(message.content) && message.content.length === 0);
|
|
2238
2246
|
const hasReasoning = Array.isArray(message.reasoning) && message.reasoning.some((item) => item.text?.trim());
|
|
@@ -2248,8 +2256,8 @@ function AssistantMessage({ message, className, isStreaming = false }) {
|
|
|
2248
2256
|
className: "w-full",
|
|
2249
2257
|
children: [
|
|
2250
2258
|
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(TabsList, { className: "h-9", children: [
|
|
2251
|
-
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(TabsTrigger, { value: "answer", children: "
|
|
2252
|
-
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(TabsTrigger, { value: "reasoning", children: "
|
|
2259
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(TabsTrigger, { value: "answer", children: t("message.answer") }),
|
|
2260
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(TabsTrigger, { value: "reasoning", children: t("message.reasoning") })
|
|
2253
2261
|
] }),
|
|
2254
2262
|
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(TabsContent, { value: "answer", className: "space-y-3", children: answerNode }),
|
|
2255
2263
|
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(TabsContent, { value: "reasoning", className: "space-y-3", children: reasoningNode })
|
|
@@ -2365,8 +2373,136 @@ function StartScreen({ startScreen, onPromptClick, className }) {
|
|
|
2365
2373
|
] });
|
|
2366
2374
|
}
|
|
2367
2375
|
|
|
2368
|
-
// src/
|
|
2376
|
+
// src/components/ui/chatkit-avatar.tsx
|
|
2377
|
+
var React17 = require("react");
|
|
2378
|
+
|
|
2379
|
+
// src/components/ui/avatar.tsx
|
|
2369
2380
|
var React16 = __toESM(require("react"), 1);
|
|
2381
|
+
var AvatarPrimitive = __toESM(require("@radix-ui/react-avatar"), 1);
|
|
2382
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
2383
|
+
var Avatar = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
2384
|
+
AvatarPrimitive.Root,
|
|
2385
|
+
{
|
|
2386
|
+
ref,
|
|
2387
|
+
className: cn(
|
|
2388
|
+
"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
|
|
2389
|
+
className
|
|
2390
|
+
),
|
|
2391
|
+
...props
|
|
2392
|
+
}
|
|
2393
|
+
));
|
|
2394
|
+
Avatar.displayName = AvatarPrimitive.Root.displayName;
|
|
2395
|
+
var AvatarImage = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
2396
|
+
AvatarPrimitive.Image,
|
|
2397
|
+
{
|
|
2398
|
+
ref,
|
|
2399
|
+
className: cn("aspect-square h-full w-full", className),
|
|
2400
|
+
...props
|
|
2401
|
+
}
|
|
2402
|
+
));
|
|
2403
|
+
AvatarImage.displayName = AvatarPrimitive.Image.displayName;
|
|
2404
|
+
var AvatarFallback = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
2405
|
+
AvatarPrimitive.Fallback,
|
|
2406
|
+
{
|
|
2407
|
+
ref,
|
|
2408
|
+
className: cn(
|
|
2409
|
+
"flex h-full w-full items-center justify-center rounded-full bg-muted",
|
|
2410
|
+
className
|
|
2411
|
+
),
|
|
2412
|
+
...props
|
|
2413
|
+
}
|
|
2414
|
+
));
|
|
2415
|
+
AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
|
|
2416
|
+
|
|
2417
|
+
// src/components/ui/chatkit-avatar.tsx
|
|
2418
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
2419
|
+
function asRecord(value) {
|
|
2420
|
+
return value && typeof value === "object" ? value : null;
|
|
2421
|
+
}
|
|
2422
|
+
function getNonEmptyString(value) {
|
|
2423
|
+
if (typeof value !== "string") return void 0;
|
|
2424
|
+
const normalized = value.trim();
|
|
2425
|
+
return normalized || void 0;
|
|
2426
|
+
}
|
|
2427
|
+
function unicodeFromUnified(unified) {
|
|
2428
|
+
const normalized = getNonEmptyString(unified);
|
|
2429
|
+
if (!normalized) return void 0;
|
|
2430
|
+
try {
|
|
2431
|
+
return normalized.split("-").map((hex) => String.fromCodePoint(Number.parseInt(hex, 16))).join("");
|
|
2432
|
+
} catch {
|
|
2433
|
+
return void 0;
|
|
2434
|
+
}
|
|
2435
|
+
}
|
|
2436
|
+
function getEmojiCharacter(avatar) {
|
|
2437
|
+
return unicodeFromUnified(avatar?.emoji?.unified);
|
|
2438
|
+
}
|
|
2439
|
+
function getAvatarFallback(label) {
|
|
2440
|
+
return label.trim().charAt(0).toUpperCase() || "A";
|
|
2441
|
+
}
|
|
2442
|
+
function normalizeChatkitAvatar(rawAvatar) {
|
|
2443
|
+
if (typeof rawAvatar === "string") {
|
|
2444
|
+
const url = getNonEmptyString(rawAvatar);
|
|
2445
|
+
return url ? { url } : null;
|
|
2446
|
+
}
|
|
2447
|
+
const avatarRecord = asRecord(rawAvatar);
|
|
2448
|
+
if (!avatarRecord) return null;
|
|
2449
|
+
const emojiRecord = asRecord(avatarRecord.emoji);
|
|
2450
|
+
const avatar = {
|
|
2451
|
+
background: getNonEmptyString(avatarRecord.background),
|
|
2452
|
+
url: getNonEmptyString(avatarRecord.url),
|
|
2453
|
+
useNotoColor: Boolean(avatarRecord.useNotoColor)
|
|
2454
|
+
};
|
|
2455
|
+
if (emojiRecord) {
|
|
2456
|
+
avatar.emoji = {
|
|
2457
|
+
colons: getNonEmptyString(emojiRecord.colons),
|
|
2458
|
+
id: getNonEmptyString(emojiRecord.id),
|
|
2459
|
+
unified: getNonEmptyString(emojiRecord.unified)
|
|
2460
|
+
};
|
|
2461
|
+
}
|
|
2462
|
+
return avatar.url || avatar.background || avatar.emoji?.id || avatar.emoji?.unified ? avatar : null;
|
|
2463
|
+
}
|
|
2464
|
+
function extractAssistantAvatar(assistant) {
|
|
2465
|
+
const assistantRecord = asRecord(assistant);
|
|
2466
|
+
const metadata = asRecord(assistant.metadata);
|
|
2467
|
+
const rawAvatar = assistantRecord?.avatar ?? metadata?.avatar;
|
|
2468
|
+
const avatar = normalizeChatkitAvatar(rawAvatar);
|
|
2469
|
+
if (avatar) return avatar;
|
|
2470
|
+
const metadataAvatar = getNonEmptyString(metadata?.avatarUrl) ?? getNonEmptyString(metadata?.avatar_url);
|
|
2471
|
+
return metadataAvatar ? { url: metadataAvatar } : null;
|
|
2472
|
+
}
|
|
2473
|
+
function ChatkitAvatar({
|
|
2474
|
+
avatar,
|
|
2475
|
+
className,
|
|
2476
|
+
fallback,
|
|
2477
|
+
fallbackClassName,
|
|
2478
|
+
imageClassName,
|
|
2479
|
+
label,
|
|
2480
|
+
style,
|
|
2481
|
+
...props
|
|
2482
|
+
}) {
|
|
2483
|
+
const { theme } = useTheme();
|
|
2484
|
+
const emojiCharacter = getEmojiCharacter(avatar);
|
|
2485
|
+
const fallbackText = fallback || getAvatarFallback(label);
|
|
2486
|
+
const roundedClass = getRoundedClass(theme.radius);
|
|
2487
|
+
const emojiStyle = avatar?.useNotoColor ? { fontFamily: '"Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", sans-serif' } : void 0;
|
|
2488
|
+
const fallbackStyle = {
|
|
2489
|
+
...avatar?.background ? { background: avatar.background } : {}
|
|
2490
|
+
};
|
|
2491
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Avatar, { className: cn(roundedClass, className), style, ...props, children: [
|
|
2492
|
+
avatar?.url ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(AvatarImage, { className: imageClassName, src: avatar.url, alt: label }) : null,
|
|
2493
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2494
|
+
AvatarFallback,
|
|
2495
|
+
{
|
|
2496
|
+
className: cn(roundedClass, "text-sm font-medium text-foreground", fallbackClassName),
|
|
2497
|
+
style: fallbackStyle,
|
|
2498
|
+
children: emojiCharacter ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "text-[1.1em] leading-none", style: emojiStyle, children: emojiCharacter }) : fallbackText
|
|
2499
|
+
}
|
|
2500
|
+
)
|
|
2501
|
+
] });
|
|
2502
|
+
}
|
|
2503
|
+
|
|
2504
|
+
// src/hooks/useThreads.ts
|
|
2505
|
+
var React18 = __toESM(require("react"), 1);
|
|
2370
2506
|
var DEFAULT_LIMIT = 50;
|
|
2371
2507
|
var getThreadTitle = (threadRecord) => {
|
|
2372
2508
|
const title = threadRecord.title?.trim();
|
|
@@ -2404,16 +2540,16 @@ function useThreads(limit = DEFAULT_LIMIT) {
|
|
|
2404
2540
|
isReady,
|
|
2405
2541
|
isLoading: isStreamLoading
|
|
2406
2542
|
} = useStreamContext();
|
|
2407
|
-
const [threadRecords, setThreadRecords] =
|
|
2408
|
-
const [isLoading, setIsLoading] =
|
|
2409
|
-
const [error, setError] =
|
|
2410
|
-
const upsertThreadRecord =
|
|
2543
|
+
const [threadRecords, setThreadRecords] = React18.useState([]);
|
|
2544
|
+
const [isLoading, setIsLoading] = React18.useState(false);
|
|
2545
|
+
const [error, setError] = React18.useState(null);
|
|
2546
|
+
const upsertThreadRecord = React18.useCallback((threadRecord) => {
|
|
2411
2547
|
setThreadRecords((prev) => {
|
|
2412
2548
|
const next = prev.filter((item) => item.id !== threadRecord.id);
|
|
2413
2549
|
return sortThreadRecords([threadRecord, ...next]);
|
|
2414
2550
|
});
|
|
2415
2551
|
}, []);
|
|
2416
|
-
const refreshThreads =
|
|
2552
|
+
const refreshThreads = React18.useCallback(async () => {
|
|
2417
2553
|
setIsLoading(true);
|
|
2418
2554
|
setError(null);
|
|
2419
2555
|
try {
|
|
@@ -2429,7 +2565,7 @@ function useThreads(limit = DEFAULT_LIMIT) {
|
|
|
2429
2565
|
setIsLoading(false);
|
|
2430
2566
|
}
|
|
2431
2567
|
}, [client, limit, assistantId]);
|
|
2432
|
-
const createThread =
|
|
2568
|
+
const createThread = React18.useCallback(
|
|
2433
2569
|
async (input) => {
|
|
2434
2570
|
setError(null);
|
|
2435
2571
|
const payload = {};
|
|
@@ -2443,7 +2579,7 @@ function useThreads(limit = DEFAULT_LIMIT) {
|
|
|
2443
2579
|
},
|
|
2444
2580
|
[client, upsertThreadRecord]
|
|
2445
2581
|
);
|
|
2446
|
-
const updateThread =
|
|
2582
|
+
const updateThread = React18.useCallback(
|
|
2447
2583
|
async (recordId, payload) => {
|
|
2448
2584
|
setError(null);
|
|
2449
2585
|
const updated = await client.conversations.update(recordId, payload);
|
|
@@ -2452,7 +2588,7 @@ function useThreads(limit = DEFAULT_LIMIT) {
|
|
|
2452
2588
|
},
|
|
2453
2589
|
[client, upsertThreadRecord]
|
|
2454
2590
|
);
|
|
2455
|
-
const deleteThread =
|
|
2591
|
+
const deleteThread = React18.useCallback(
|
|
2456
2592
|
async (recordId) => {
|
|
2457
2593
|
setError(null);
|
|
2458
2594
|
await client.conversations.delete(recordId);
|
|
@@ -2460,11 +2596,11 @@ function useThreads(limit = DEFAULT_LIMIT) {
|
|
|
2460
2596
|
},
|
|
2461
2597
|
[client]
|
|
2462
2598
|
);
|
|
2463
|
-
|
|
2599
|
+
React18.useEffect(() => {
|
|
2464
2600
|
if (!isReady) return;
|
|
2465
2601
|
void refreshThreads();
|
|
2466
2602
|
}, [refreshThreads, isReady]);
|
|
2467
|
-
|
|
2603
|
+
React18.useEffect(() => {
|
|
2468
2604
|
if (!threadId || !isStreamLoading) return;
|
|
2469
2605
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
2470
2606
|
setThreadRecords((prev) => {
|
|
@@ -2484,7 +2620,7 @@ function useThreads(limit = DEFAULT_LIMIT) {
|
|
|
2484
2620
|
return changed ? sortThreadRecords(next) : prev;
|
|
2485
2621
|
});
|
|
2486
2622
|
}, [threadId, isStreamLoading]);
|
|
2487
|
-
|
|
2623
|
+
React18.useEffect(() => {
|
|
2488
2624
|
if (!isReady || !threadId || isStreamLoading) return;
|
|
2489
2625
|
let cancelled = false;
|
|
2490
2626
|
void client.conversations.search({ where: { threadId }, limit: 1 }).then((result) => {
|
|
@@ -2498,7 +2634,7 @@ function useThreads(limit = DEFAULT_LIMIT) {
|
|
|
2498
2634
|
cancelled = true;
|
|
2499
2635
|
};
|
|
2500
2636
|
}, [client, threadId, upsertThreadRecord, isReady, isStreamLoading]);
|
|
2501
|
-
const threads =
|
|
2637
|
+
const threads = React18.useMemo(
|
|
2502
2638
|
() => threadRecords.map((threadRecord) => toThreadItem(threadRecord)),
|
|
2503
2639
|
[threadRecords]
|
|
2504
2640
|
);
|
|
@@ -2515,10 +2651,10 @@ function useThreads(limit = DEFAULT_LIMIT) {
|
|
|
2515
2651
|
}
|
|
2516
2652
|
|
|
2517
2653
|
// src/components/thread/context-usage-indicator.tsx
|
|
2518
|
-
var
|
|
2654
|
+
var React19 = __toESM(require("react"), 1);
|
|
2519
2655
|
|
|
2520
2656
|
// src/components/ui/progress-circle.tsx
|
|
2521
|
-
var
|
|
2657
|
+
var import_jsx_runtime24 = (
|
|
2522
2658
|
// biome-ignore lint/a11y/useFocusableInteractive: false positive (progress + progressbar are not focusable interactives)
|
|
2523
2659
|
// biome-ignore lint/nursery/useAriaPropsSupportedByRole: biome rule at odds with mdn docs (presumed nursary bug with rule)
|
|
2524
2660
|
require("react/jsx-runtime")
|
|
@@ -2542,7 +2678,7 @@ var ProgressCircle = ({ value, className, ...restSvgProps }) => {
|
|
|
2542
2678
|
fill: "none",
|
|
2543
2679
|
strokeWidth
|
|
2544
2680
|
};
|
|
2545
|
-
return /* @__PURE__ */ (0,
|
|
2681
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
2546
2682
|
"svg",
|
|
2547
2683
|
{
|
|
2548
2684
|
role: "progressbar",
|
|
@@ -2553,8 +2689,8 @@ var ProgressCircle = ({ value, className, ...restSvgProps }) => {
|
|
|
2553
2689
|
"aria-valuemax": 100,
|
|
2554
2690
|
...restSvgProps,
|
|
2555
2691
|
children: [
|
|
2556
|
-
/* @__PURE__ */ (0,
|
|
2557
|
-
/* @__PURE__ */ (0,
|
|
2692
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("circle", { ...commonParams, className: "stroke-current/25" }),
|
|
2693
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
2558
2694
|
"circle",
|
|
2559
2695
|
{
|
|
2560
2696
|
...commonParams,
|
|
@@ -2572,7 +2708,7 @@ var ProgressCircle = ({ value, className, ...restSvgProps }) => {
|
|
|
2572
2708
|
};
|
|
2573
2709
|
|
|
2574
2710
|
// src/components/thread/context-usage-indicator.tsx
|
|
2575
|
-
var
|
|
2711
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
2576
2712
|
var kNumberFormatter = new Intl.NumberFormat("en-US", {
|
|
2577
2713
|
minimumFractionDigits: 0,
|
|
2578
2714
|
maximumFractionDigits: 1
|
|
@@ -2605,20 +2741,20 @@ function ContextUsageIndicator({
|
|
|
2605
2741
|
}) {
|
|
2606
2742
|
const { t } = useChatkitTranslation();
|
|
2607
2743
|
const stream = useStreamContext();
|
|
2608
|
-
const [maxContextSize, setMaxContextSize] =
|
|
2609
|
-
const [usedContextSize, setUsedContextSize] =
|
|
2610
|
-
const [assistantAgentKey, setAssistantAgentKey] =
|
|
2611
|
-
const latestRealtimeUsageRef =
|
|
2744
|
+
const [maxContextSize, setMaxContextSize] = React19.useState(null);
|
|
2745
|
+
const [usedContextSize, setUsedContextSize] = React19.useState(null);
|
|
2746
|
+
const [assistantAgentKey, setAssistantAgentKey] = React19.useState(null);
|
|
2747
|
+
const latestRealtimeUsageRef = React19.useRef({
|
|
2612
2748
|
threadId: null,
|
|
2613
2749
|
agentKey: null,
|
|
2614
2750
|
usedTokens: null
|
|
2615
2751
|
});
|
|
2616
|
-
const realtimeUsage =
|
|
2752
|
+
const realtimeUsage = React19.useMemo(
|
|
2617
2753
|
() => getThreadContextUsage(stream.contextUsageByAgentKey, assistantAgentKey),
|
|
2618
2754
|
[assistantAgentKey, stream.contextUsageByAgentKey]
|
|
2619
2755
|
);
|
|
2620
2756
|
const realtimeUsedContextSize = getThreadContextUsageTotalTokens(realtimeUsage);
|
|
2621
|
-
|
|
2757
|
+
React19.useEffect(() => {
|
|
2622
2758
|
if (!stream.client || !stream.assistantId) {
|
|
2623
2759
|
setMaxContextSize(null);
|
|
2624
2760
|
setAssistantAgentKey(null);
|
|
@@ -2638,18 +2774,18 @@ function ContextUsageIndicator({
|
|
|
2638
2774
|
cancelled = true;
|
|
2639
2775
|
};
|
|
2640
2776
|
}, [stream.client, stream.assistantId]);
|
|
2641
|
-
|
|
2777
|
+
React19.useEffect(() => {
|
|
2642
2778
|
latestRealtimeUsageRef.current = {
|
|
2643
2779
|
threadId: stream.threadId ?? null,
|
|
2644
2780
|
agentKey: assistantAgentKey,
|
|
2645
2781
|
usedTokens: realtimeUsedContextSize
|
|
2646
2782
|
};
|
|
2647
2783
|
}, [assistantAgentKey, realtimeUsedContextSize, stream.threadId]);
|
|
2648
|
-
|
|
2784
|
+
React19.useEffect(() => {
|
|
2649
2785
|
if (realtimeUsedContextSize == null) return;
|
|
2650
2786
|
setUsedContextSize(realtimeUsedContextSize);
|
|
2651
2787
|
}, [realtimeUsedContextSize]);
|
|
2652
|
-
|
|
2788
|
+
React19.useEffect(() => {
|
|
2653
2789
|
if (!stream.client) {
|
|
2654
2790
|
setUsedContextSize(null);
|
|
2655
2791
|
return;
|
|
@@ -2714,8 +2850,8 @@ function ContextUsageIndicator({
|
|
|
2714
2850
|
});
|
|
2715
2851
|
const usageLabelWithSuffix = usageLabel.endsWith(":") ? usageLabel : `${usageLabel}:`;
|
|
2716
2852
|
const progressClassName = percent >= 90 ? "text-destructive" : percent >= 75 ? "text-amber-500" : "text-primary dark:text-zinc-300";
|
|
2717
|
-
return /* @__PURE__ */ (0,
|
|
2718
|
-
/* @__PURE__ */ (0,
|
|
2853
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Tooltip, { children: [
|
|
2854
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
2719
2855
|
"button",
|
|
2720
2856
|
{
|
|
2721
2857
|
type: "button",
|
|
@@ -2724,19 +2860,19 @@ function ContextUsageIndicator({
|
|
|
2724
2860
|
className
|
|
2725
2861
|
),
|
|
2726
2862
|
"aria-label": `${usageLabelWithSuffix} ${usageFullLabel}. ${usageTokensLabel}`,
|
|
2727
|
-
children: /* @__PURE__ */ (0,
|
|
2863
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ProgressCircle, { value: percent, className: cn("size-3.5", progressClassName) })
|
|
2728
2864
|
}
|
|
2729
2865
|
) }),
|
|
2730
|
-
/* @__PURE__ */ (0,
|
|
2731
|
-
/* @__PURE__ */ (0,
|
|
2732
|
-
/* @__PURE__ */ (0,
|
|
2733
|
-
/* @__PURE__ */ (0,
|
|
2866
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(TooltipContent, { side: "top", sideOffset: 6, className: "space-y-0.5 px-3 py-2 text-center", children: [
|
|
2867
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "text-primary-foreground/70", children: usageLabelWithSuffix }),
|
|
2868
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "font-medium text-primary-foreground/80", children: usageFullLabel }),
|
|
2869
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "text-sm font-semibold", children: usageTokensLabel })
|
|
2734
2870
|
] })
|
|
2735
2871
|
] });
|
|
2736
2872
|
}
|
|
2737
2873
|
|
|
2738
2874
|
// src/components/chat.tsx
|
|
2739
|
-
var
|
|
2875
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
2740
2876
|
var import_meta2 = {};
|
|
2741
2877
|
var defaultApiUrl2 = import_meta2.env.VITE_XPERTAI_API_URL;
|
|
2742
2878
|
function formatMessageContent(content) {
|
|
@@ -2776,16 +2912,17 @@ function Chat({
|
|
|
2776
2912
|
const apiUrl = options?.api?.apiUrl || defaultApiUrl2;
|
|
2777
2913
|
const { setStream } = useStreamManager();
|
|
2778
2914
|
const stream = useStreamContext();
|
|
2779
|
-
const [isHistoryLoading, setIsHistoryLoading] =
|
|
2780
|
-
const [historyError, setHistoryError] =
|
|
2781
|
-
const [assistantName, setAssistantName] =
|
|
2915
|
+
const [isHistoryLoading, setIsHistoryLoading] = React20.useState(false);
|
|
2916
|
+
const [historyError, setHistoryError] = React20.useState(null);
|
|
2917
|
+
const [assistantName, setAssistantName] = React20.useState(null);
|
|
2918
|
+
const [assistantAvatar, setAssistantAvatar] = React20.useState(null);
|
|
2782
2919
|
const LOADING_DOTS_MIN_DURATION = 800;
|
|
2783
|
-
const [showLoadingDots, setShowLoadingDots] =
|
|
2784
|
-
const loadingStartTimeRef =
|
|
2785
|
-
|
|
2920
|
+
const [showLoadingDots, setShowLoadingDots] = React20.useState(false);
|
|
2921
|
+
const loadingStartTimeRef = React20.useRef(null);
|
|
2922
|
+
React20.useEffect(() => {
|
|
2786
2923
|
setStream(stream);
|
|
2787
2924
|
}, [setStream, stream]);
|
|
2788
|
-
|
|
2925
|
+
React20.useEffect(() => {
|
|
2789
2926
|
if (stream.isLoading) {
|
|
2790
2927
|
if (!loadingStartTimeRef.current) {
|
|
2791
2928
|
loadingStartTimeRef.current = Date.now();
|
|
@@ -2808,48 +2945,48 @@ function Chat({
|
|
|
2808
2945
|
}
|
|
2809
2946
|
}
|
|
2810
2947
|
}, [stream.isLoading]);
|
|
2811
|
-
const [draft, setDraft] =
|
|
2812
|
-
const [selectedTool, setSelectedTool] =
|
|
2813
|
-
const [attachments, setAttachments] =
|
|
2814
|
-
const [isAtBottom, setIsAtBottom] =
|
|
2815
|
-
const [hasUpdatesBelow, setHasUpdatesBelow] =
|
|
2948
|
+
const [draft, setDraft] = React20.useState("");
|
|
2949
|
+
const [selectedTool, setSelectedTool] = React20.useState(null);
|
|
2950
|
+
const [attachments, setAttachments] = React20.useState([]);
|
|
2951
|
+
const [isAtBottom, setIsAtBottom] = React20.useState(true);
|
|
2952
|
+
const [hasUpdatesBelow, setHasUpdatesBelow] = React20.useState(false);
|
|
2816
2953
|
const {
|
|
2817
2954
|
threads,
|
|
2818
2955
|
deleteThread,
|
|
2819
2956
|
refreshThreads,
|
|
2820
2957
|
isLoading: isThreadsLoading
|
|
2821
2958
|
} = useThreads();
|
|
2822
|
-
const viewportRef =
|
|
2823
|
-
const fileInputRef =
|
|
2824
|
-
const shouldAutoScrollRef =
|
|
2825
|
-
const forceFollowRef =
|
|
2826
|
-
const previousMessageCountRef =
|
|
2827
|
-
const previousScrollTopRef =
|
|
2828
|
-
const autoScrollFrameRef =
|
|
2829
|
-
const isPointerDownRef =
|
|
2830
|
-
const lastTouchYRef =
|
|
2959
|
+
const viewportRef = React20.useRef(null);
|
|
2960
|
+
const fileInputRef = React20.useRef(null);
|
|
2961
|
+
const shouldAutoScrollRef = React20.useRef(true);
|
|
2962
|
+
const forceFollowRef = React20.useRef(false);
|
|
2963
|
+
const previousMessageCountRef = React20.useRef(0);
|
|
2964
|
+
const previousScrollTopRef = React20.useRef(0);
|
|
2965
|
+
const autoScrollFrameRef = React20.useRef(null);
|
|
2966
|
+
const isPointerDownRef = React20.useRef(false);
|
|
2967
|
+
const lastTouchYRef = React20.useRef(null);
|
|
2831
2968
|
const resolvedTitle = title ?? t("chat.title");
|
|
2832
2969
|
const resolvedPlaceholder = placeholder ?? t("chat.placeholder");
|
|
2833
2970
|
const inputPlaceholder = selectedTool?.placeholderOverride ?? composer?.placeholder ?? resolvedPlaceholder;
|
|
2834
|
-
const messages =
|
|
2971
|
+
const messages = React20.useMemo(() => stream.messages ?? [], [stream.messages]);
|
|
2835
2972
|
const trimmedDraft = draft.trim();
|
|
2836
|
-
const cancelPendingAutoScroll =
|
|
2973
|
+
const cancelPendingAutoScroll = React20.useCallback(() => {
|
|
2837
2974
|
if (autoScrollFrameRef.current !== null) {
|
|
2838
2975
|
cancelAnimationFrame(autoScrollFrameRef.current);
|
|
2839
2976
|
autoScrollFrameRef.current = null;
|
|
2840
2977
|
}
|
|
2841
2978
|
}, []);
|
|
2842
|
-
const disableAutoFollow =
|
|
2979
|
+
const disableAutoFollow = React20.useCallback(() => {
|
|
2843
2980
|
forceFollowRef.current = false;
|
|
2844
2981
|
shouldAutoScrollRef.current = false;
|
|
2845
2982
|
cancelPendingAutoScroll();
|
|
2846
2983
|
}, [cancelPendingAutoScroll]);
|
|
2847
|
-
const enableAutoFollow =
|
|
2984
|
+
const enableAutoFollow = React20.useCallback(() => {
|
|
2848
2985
|
forceFollowRef.current = true;
|
|
2849
2986
|
shouldAutoScrollRef.current = true;
|
|
2850
2987
|
setHasUpdatesBelow(false);
|
|
2851
2988
|
}, []);
|
|
2852
|
-
const scrollToBottom =
|
|
2989
|
+
const scrollToBottom = React20.useCallback((smooth = false, force = false) => {
|
|
2853
2990
|
if (force) {
|
|
2854
2991
|
enableAutoFollow();
|
|
2855
2992
|
}
|
|
@@ -2868,7 +3005,7 @@ function Chat({
|
|
|
2868
3005
|
}
|
|
2869
3006
|
});
|
|
2870
3007
|
}, [cancelPendingAutoScroll, enableAutoFollow]);
|
|
2871
|
-
|
|
3008
|
+
React20.useEffect(() => {
|
|
2872
3009
|
const viewport = viewportRef.current;
|
|
2873
3010
|
if (!viewport) return;
|
|
2874
3011
|
previousScrollTopRef.current = viewport.scrollTop;
|
|
@@ -2939,14 +3076,14 @@ function Chat({
|
|
|
2939
3076
|
window.removeEventListener("pointercancel", stopPointerTracking);
|
|
2940
3077
|
};
|
|
2941
3078
|
}, [cancelPendingAutoScroll, disableAutoFollow]);
|
|
2942
|
-
|
|
3079
|
+
React20.useEffect(() => {
|
|
2943
3080
|
shouldAutoScrollRef.current = true;
|
|
2944
3081
|
forceFollowRef.current = false;
|
|
2945
3082
|
previousScrollTopRef.current = 0;
|
|
2946
3083
|
setIsAtBottom(true);
|
|
2947
3084
|
setHasUpdatesBelow(false);
|
|
2948
3085
|
}, [stream.threadId]);
|
|
2949
|
-
|
|
3086
|
+
React20.useEffect(() => {
|
|
2950
3087
|
const messageCountChanged = messages.length !== previousMessageCountRef.current;
|
|
2951
3088
|
previousMessageCountRef.current = messages.length;
|
|
2952
3089
|
if (!shouldAutoScrollRef.current) {
|
|
@@ -2965,19 +3102,32 @@ function Chat({
|
|
|
2965
3102
|
const showMissingConfig = !isClientSecretInitializing && missingConfig;
|
|
2966
3103
|
const hasUploadingFiles = attachments.some((a) => a.status === "uploading");
|
|
2967
3104
|
const isSendDisabled = !trimmedDraft || stream.isLoading || missingConfig || isHistoryLoading || hasUploadingFiles;
|
|
2968
|
-
|
|
3105
|
+
React20.useEffect(() => {
|
|
2969
3106
|
if (missingConfig) return;
|
|
2970
3107
|
void refreshThreads();
|
|
2971
3108
|
}, [missingConfig, refreshThreads]);
|
|
2972
|
-
|
|
2973
|
-
if (missingConfig || !stream.client || !stream.assistantId)
|
|
3109
|
+
React20.useEffect(() => {
|
|
3110
|
+
if (missingConfig || !stream.client || !stream.assistantId) {
|
|
3111
|
+
setAssistantName(null);
|
|
3112
|
+
setAssistantAvatar(null);
|
|
3113
|
+
return;
|
|
3114
|
+
}
|
|
3115
|
+
setAssistantName(null);
|
|
3116
|
+
setAssistantAvatar(null);
|
|
3117
|
+
let cancelled = false;
|
|
2974
3118
|
stream.client.assistants.get(stream.assistantId).then((assistant) => {
|
|
2975
|
-
if (assistant)
|
|
2976
|
-
|
|
2977
|
-
|
|
3119
|
+
if (cancelled || !assistant) return;
|
|
3120
|
+
const assistantTitle2 = typeof assistant.metadata?.title === "string" && assistant.metadata.title.trim() ? assistant.metadata.title : assistant.name;
|
|
3121
|
+
setAssistantName(assistantTitle2);
|
|
3122
|
+
setAssistantAvatar(extractAssistantAvatar(assistant));
|
|
2978
3123
|
}).catch((err) => {
|
|
3124
|
+
if (cancelled) return;
|
|
3125
|
+
setAssistantAvatar(null);
|
|
2979
3126
|
console.warn("[Chat] Failed to load assistant info:", err);
|
|
2980
3127
|
});
|
|
3128
|
+
return () => {
|
|
3129
|
+
cancelled = true;
|
|
3130
|
+
};
|
|
2981
3131
|
}, [missingConfig, stream.client, stream.assistantId]);
|
|
2982
3132
|
const uploadedFiles = attachments.filter((a) => a.status === "success" && a.storageFile).map((a) => ({
|
|
2983
3133
|
id: a.storageFile?.id,
|
|
@@ -3031,7 +3181,7 @@ function Chat({
|
|
|
3031
3181
|
const handleAttachmentClick = () => {
|
|
3032
3182
|
fileInputRef.current?.click();
|
|
3033
3183
|
};
|
|
3034
|
-
const uploadFile =
|
|
3184
|
+
const uploadFile = React20.useCallback(async (localId, file) => {
|
|
3035
3185
|
try {
|
|
3036
3186
|
const result = await stream.client.contexts.uploadFile(file);
|
|
3037
3187
|
setAttachments(
|
|
@@ -3051,7 +3201,7 @@ function Chat({
|
|
|
3051
3201
|
);
|
|
3052
3202
|
}
|
|
3053
3203
|
}, [stream.client]);
|
|
3054
|
-
const handleRetryUpload =
|
|
3204
|
+
const handleRetryUpload = React20.useCallback((localId) => {
|
|
3055
3205
|
const attachment = attachments.find((a) => a.localId === localId);
|
|
3056
3206
|
if (!attachment || attachment.status !== "error") return;
|
|
3057
3207
|
setAttachments(
|
|
@@ -3126,7 +3276,7 @@ function Chat({
|
|
|
3126
3276
|
);
|
|
3127
3277
|
scrollToBottom(true, true);
|
|
3128
3278
|
};
|
|
3129
|
-
const loadConversationMessages =
|
|
3279
|
+
const loadConversationMessages = React20.useCallback(
|
|
3130
3280
|
async (recordId) => {
|
|
3131
3281
|
if (missingConfig) {
|
|
3132
3282
|
setHistoryError(t("chat.missingConfigShort"));
|
|
@@ -3208,17 +3358,18 @@ function Chat({
|
|
|
3208
3358
|
}
|
|
3209
3359
|
};
|
|
3210
3360
|
const acceptMimes = composer?.attachments?.accept ? Object.entries(composer.attachments.accept).map(([mime, exts]) => [mime, ...exts.map((e) => `.${e}`)].join(",")).join(",") : void 0;
|
|
3211
|
-
const currentThread =
|
|
3361
|
+
const currentThread = React20.useMemo(
|
|
3212
3362
|
() => threads.find((item) => item.id === stream.threadId),
|
|
3213
3363
|
[threads, stream.threadId]
|
|
3214
3364
|
);
|
|
3215
3365
|
const errorMessage = stream.error instanceof Error ? stream.error.message : void 0;
|
|
3216
|
-
const threadErrorMessage =
|
|
3366
|
+
const threadErrorMessage = React20.useMemo(() => {
|
|
3217
3367
|
if (currentThread?.status !== "error") return void 0;
|
|
3218
3368
|
const message = currentThread.error?.trim();
|
|
3219
3369
|
return message || t("thread.errorToast");
|
|
3220
3370
|
}, [currentThread, t]);
|
|
3221
|
-
|
|
3371
|
+
const assistantTitle = assistantName || resolvedTitle;
|
|
3372
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
3222
3373
|
"div",
|
|
3223
3374
|
{
|
|
3224
3375
|
ref: viewportRef,
|
|
@@ -3227,16 +3378,26 @@ function Chat({
|
|
|
3227
3378
|
className
|
|
3228
3379
|
),
|
|
3229
3380
|
children: [
|
|
3230
|
-
/* @__PURE__ */ (0,
|
|
3231
|
-
/* @__PURE__ */ (0,
|
|
3232
|
-
/* @__PURE__ */ (0,
|
|
3233
|
-
|
|
3234
|
-
|
|
3235
|
-
|
|
3381
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex items-center justify-between border-b p-2 sticky top-0 z-10 bg-background", children: [
|
|
3382
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex items-center gap-3 overflow-hidden", children: [
|
|
3383
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "relative shrink-0", children: [
|
|
3384
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3385
|
+
ChatkitAvatar,
|
|
3386
|
+
{
|
|
3387
|
+
avatar: assistantAvatar,
|
|
3388
|
+
className: "h-9 w-9 border border-border/60",
|
|
3389
|
+
label: assistantTitle
|
|
3390
|
+
}
|
|
3391
|
+
),
|
|
3392
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "absolute bottom-0 right-0 h-2.5 w-2.5 rounded-full border-2 border-background bg-green-500" })
|
|
3393
|
+
] }),
|
|
3394
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "truncate", children: [
|
|
3395
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("h2", { className: "text-lg font-semibold truncate", title: assistantTitle, children: assistantTitle }),
|
|
3396
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-xs text-muted-foreground", children: t("chat.statusOnline") })
|
|
3236
3397
|
] })
|
|
3237
3398
|
] }),
|
|
3238
|
-
history?.enabled !== false && /* @__PURE__ */ (0,
|
|
3239
|
-
/* @__PURE__ */ (0,
|
|
3399
|
+
history?.enabled !== false && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex items-center gap-1", children: [
|
|
3400
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3240
3401
|
"button",
|
|
3241
3402
|
{
|
|
3242
3403
|
type: "button",
|
|
@@ -3249,10 +3410,10 @@ function Chat({
|
|
|
3249
3410
|
"disabled:opacity-50 disabled:cursor-not-allowed"
|
|
3250
3411
|
),
|
|
3251
3412
|
title: t("history.newThread"),
|
|
3252
|
-
children: /* @__PURE__ */ (0,
|
|
3413
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.Pencil, { size: 16 })
|
|
3253
3414
|
}
|
|
3254
3415
|
),
|
|
3255
|
-
/* @__PURE__ */ (0,
|
|
3416
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3256
3417
|
HistorySidebar,
|
|
3257
3418
|
{
|
|
3258
3419
|
threads,
|
|
@@ -3266,23 +3427,23 @@ function Chat({
|
|
|
3266
3427
|
)
|
|
3267
3428
|
] })
|
|
3268
3429
|
] }),
|
|
3269
|
-
/* @__PURE__ */ (0,
|
|
3270
|
-
errorMessage && /* @__PURE__ */ (0,
|
|
3271
|
-
historyError && /* @__PURE__ */ (0,
|
|
3272
|
-
showMissingConfig && /* @__PURE__ */ (0,
|
|
3273
|
-
isHistoryLoading && /* @__PURE__ */ (0,
|
|
3274
|
-
messages.length === 0 ? /* @__PURE__ */ (0,
|
|
3430
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex-1 p-4", children: [
|
|
3431
|
+
errorMessage && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "mb-4 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: errorMessage }),
|
|
3432
|
+
historyError && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: historyError }),
|
|
3433
|
+
showMissingConfig && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: t("chat.missingConfigDetail") }),
|
|
3434
|
+
isHistoryLoading && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "mb-4 rounded-lg border border-muted px-3 py-2 text-sm text-muted-foreground", children: t("chat.loadingThread") }),
|
|
3435
|
+
messages.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3275
3436
|
StartScreen,
|
|
3276
3437
|
{
|
|
3277
3438
|
startScreen,
|
|
3278
3439
|
onPromptClick: handlePromptClick
|
|
3279
3440
|
}
|
|
3280
|
-
) : /* @__PURE__ */ (0,
|
|
3441
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "space-y-4", children: [
|
|
3281
3442
|
messages.map((message, index) => {
|
|
3282
3443
|
const messageType = String(message.type);
|
|
3283
3444
|
const isAssistantMessage = messageType === "assistant" || messageType === "ai";
|
|
3284
3445
|
const messageContent = typeof message.content === "string" ? message.content : Array.isArray(message.content) ? message.content.map((part) => formatMessageContent(part)).join("") : formatMessageContent(message.content);
|
|
3285
|
-
return /* @__PURE__ */ (0,
|
|
3446
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3286
3447
|
"div",
|
|
3287
3448
|
{
|
|
3288
3449
|
className: cn(
|
|
@@ -3290,8 +3451,8 @@ function Chat({
|
|
|
3290
3451
|
message.type === "human" ? "justify-end" : "justify-start -ml-1"
|
|
3291
3452
|
// AI messages: slightly closer to left
|
|
3292
3453
|
),
|
|
3293
|
-
children: /* @__PURE__ */ (0,
|
|
3294
|
-
/* @__PURE__ */ (0,
|
|
3454
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex flex-col px-3 overflow-hidden", children: [
|
|
3455
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3295
3456
|
"div",
|
|
3296
3457
|
{
|
|
3297
3458
|
className: cn(
|
|
@@ -3299,7 +3460,7 @@ function Chat({
|
|
|
3299
3460
|
message.type === "human" ? "bg-primary text-primary-foreground px-4 py-2.5" : message.type === "system" ? "bg-muted text-muted-foreground text-xs px-4 py-2.5" : "py-1 text-chat-foreground"
|
|
3300
3461
|
// AI messages: use chat-specific foreground color
|
|
3301
3462
|
),
|
|
3302
|
-
children: isAssistantMessage ? /* @__PURE__ */ (0,
|
|
3463
|
+
children: isAssistantMessage ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3303
3464
|
AssistantMessage,
|
|
3304
3465
|
{
|
|
3305
3466
|
message: {
|
|
@@ -3308,30 +3469,30 @@ function Chat({
|
|
|
3308
3469
|
},
|
|
3309
3470
|
isStreaming: stream.isLoading && index === messages.length - 1
|
|
3310
3471
|
}
|
|
3311
|
-
) : /* @__PURE__ */ (0,
|
|
3312
|
-
message.type === "human" && message.attachments?.length > 0 && /* @__PURE__ */ (0,
|
|
3472
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
|
|
3473
|
+
message.type === "human" && message.attachments?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "flex flex-wrap gap-1.5 mb-2", children: message.attachments.map((file, fileIndex) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
3313
3474
|
"div",
|
|
3314
3475
|
{
|
|
3315
3476
|
className: "flex items-center gap-1.5 rounded-md bg-primary-foreground/20 px-2 py-1 text-xs",
|
|
3316
3477
|
children: [
|
|
3317
|
-
/* @__PURE__ */ (0,
|
|
3318
|
-
/* @__PURE__ */ (0,
|
|
3478
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.FileText, { size: 12 }),
|
|
3479
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "max-w-[100px] truncate", children: file.originalName })
|
|
3319
3480
|
]
|
|
3320
3481
|
},
|
|
3321
3482
|
fileIndex
|
|
3322
3483
|
)) }),
|
|
3323
|
-
Array.isArray(message.content) ? message.content.map((part, partIndex) => /* @__PURE__ */ (0,
|
|
3484
|
+
Array.isArray(message.content) ? message.content.map((part, partIndex) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3324
3485
|
"p",
|
|
3325
3486
|
{
|
|
3326
3487
|
className: "wrap-break-word text-sm leading-relaxed",
|
|
3327
3488
|
children: formatMessageContent(part)
|
|
3328
3489
|
},
|
|
3329
3490
|
`${part.type}-${partIndex}`
|
|
3330
|
-
)) : /* @__PURE__ */ (0,
|
|
3491
|
+
)) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "wrap-break-word text-sm leading-relaxed", children: formatMessageContent(message.content) })
|
|
3331
3492
|
] })
|
|
3332
3493
|
}
|
|
3333
3494
|
),
|
|
3334
|
-
/* @__PURE__ */ (0,
|
|
3495
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3335
3496
|
MessageActions,
|
|
3336
3497
|
{
|
|
3337
3498
|
content: messageContent,
|
|
@@ -3352,15 +3513,15 @@ function Chat({
|
|
|
3352
3513
|
const lastMsgContent = lastMessage?.content;
|
|
3353
3514
|
const hasSubstantialContent = isLastMessageFromAI && (typeof lastMsgContent === "string" && lastMsgContent.length > 10 || Array.isArray(lastMsgContent) && lastMsgContent.length > 0);
|
|
3354
3515
|
if (hasSubstantialContent) return null;
|
|
3355
|
-
return /* @__PURE__ */ (0,
|
|
3356
|
-
/* @__PURE__ */ (0,
|
|
3357
|
-
/* @__PURE__ */ (0,
|
|
3358
|
-
/* @__PURE__ */ (0,
|
|
3516
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "flex justify-start gap-3 -ml-2", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "max-w-full rounded-2xl py-2.5", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex gap-1.5", children: [
|
|
3517
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "h-2 w-2 animate-bounce rounded-full bg-muted-foreground/60 [animation-delay:-0.3s]" }),
|
|
3518
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "h-2 w-2 animate-bounce rounded-full bg-muted-foreground/60 [animation-delay:-0.15s]" }),
|
|
3519
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "h-2 w-2 animate-bounce rounded-full bg-muted-foreground/60" })
|
|
3359
3520
|
] }) }) });
|
|
3360
3521
|
})()
|
|
3361
3522
|
] })
|
|
3362
3523
|
] }),
|
|
3363
|
-
!isAtBottom && messages.length > 0 && /* @__PURE__ */ (0,
|
|
3524
|
+
!isAtBottom && messages.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "sticky bottom-20 z-20 flex justify-center px-4 pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3364
3525
|
Button,
|
|
3365
3526
|
{
|
|
3366
3527
|
type: "button",
|
|
@@ -3373,12 +3534,12 @@ function Chat({
|
|
|
3373
3534
|
onClick: () => scrollToBottom(true, true),
|
|
3374
3535
|
"aria-label": t("chat.scrollToBottom"),
|
|
3375
3536
|
title: t("chat.scrollToBottom"),
|
|
3376
|
-
children: /* @__PURE__ */ (0,
|
|
3537
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.ArrowDown, { size: 16 })
|
|
3377
3538
|
}
|
|
3378
3539
|
) }),
|
|
3379
|
-
/* @__PURE__ */ (0,
|
|
3380
|
-
threadErrorMessage && /* @__PURE__ */ (0,
|
|
3381
|
-
/* @__PURE__ */ (0,
|
|
3540
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "p-2 sticky bottom-0 z-10 bg-background", children: [
|
|
3541
|
+
threadErrorMessage && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "mb-3 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: threadErrorMessage }),
|
|
3542
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3382
3543
|
"input",
|
|
3383
3544
|
{
|
|
3384
3545
|
ref: fileInputRef,
|
|
@@ -3389,7 +3550,7 @@ function Chat({
|
|
|
3389
3550
|
className: "hidden"
|
|
3390
3551
|
}
|
|
3391
3552
|
),
|
|
3392
|
-
attachments.length > 0 && /* @__PURE__ */ (0,
|
|
3553
|
+
attachments.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "mb-3 flex flex-wrap gap-2", children: attachments.map((item) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
3393
3554
|
"div",
|
|
3394
3555
|
{
|
|
3395
3556
|
className: cn(
|
|
@@ -3397,24 +3558,24 @@ function Chat({
|
|
|
3397
3558
|
item.status === "error" ? "bg-destructive/10 border border-destructive/30" : "bg-muted"
|
|
3398
3559
|
),
|
|
3399
3560
|
children: [
|
|
3400
|
-
item.status === "uploading" && /* @__PURE__ */ (0,
|
|
3401
|
-
item.status === "success" && /* @__PURE__ */ (0,
|
|
3402
|
-
item.status === "error" && /* @__PURE__ */ (0,
|
|
3403
|
-
/* @__PURE__ */ (0,
|
|
3561
|
+
item.status === "uploading" && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.Loader2, { size: 14, className: "animate-spin text-muted-foreground" }),
|
|
3562
|
+
item.status === "success" && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.FileText, { size: 14, className: "text-muted-foreground" }),
|
|
3563
|
+
item.status === "error" && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.FileText, { size: 14, className: "text-destructive" }),
|
|
3564
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: cn(
|
|
3404
3565
|
"max-w-30 truncate",
|
|
3405
3566
|
item.status === "error" && "text-destructive"
|
|
3406
3567
|
), children: item.file.name }),
|
|
3407
|
-
item.status === "error" && /* @__PURE__ */ (0,
|
|
3568
|
+
item.status === "error" && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3408
3569
|
"button",
|
|
3409
3570
|
{
|
|
3410
3571
|
type: "button",
|
|
3411
3572
|
onClick: () => handleRetryUpload(item.localId),
|
|
3412
3573
|
className: "ml-1 rounded-full p-0.5 text-destructive hover:bg-destructive/20",
|
|
3413
3574
|
title: t("chat.retryUpload"),
|
|
3414
|
-
children: /* @__PURE__ */ (0,
|
|
3575
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.RefreshCw, { size: 12 })
|
|
3415
3576
|
}
|
|
3416
3577
|
),
|
|
3417
|
-
/* @__PURE__ */ (0,
|
|
3578
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3418
3579
|
"button",
|
|
3419
3580
|
{
|
|
3420
3581
|
type: "button",
|
|
@@ -3423,26 +3584,26 @@ function Chat({
|
|
|
3423
3584
|
"ml-1 rounded-full p-0.5",
|
|
3424
3585
|
item.status === "error" ? "text-destructive hover:bg-destructive/20" : "hover:bg-muted-foreground/20"
|
|
3425
3586
|
),
|
|
3426
|
-
children: /* @__PURE__ */ (0,
|
|
3587
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.X, { size: 12 })
|
|
3427
3588
|
}
|
|
3428
3589
|
)
|
|
3429
3590
|
]
|
|
3430
3591
|
},
|
|
3431
3592
|
item.localId
|
|
3432
3593
|
)) }),
|
|
3433
|
-
selectedTool && /* @__PURE__ */ (0,
|
|
3434
|
-
/* @__PURE__ */ (0,
|
|
3435
|
-
/* @__PURE__ */ (0,
|
|
3594
|
+
selectedTool && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "mb-2 flex items-center gap-2", children: [
|
|
3595
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary", children: selectedTool.shortLabel ?? selectedTool.label }),
|
|
3596
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3436
3597
|
"button",
|
|
3437
3598
|
{
|
|
3438
3599
|
type: "button",
|
|
3439
3600
|
onClick: () => setSelectedTool(null),
|
|
3440
3601
|
className: "rounded-full p-0.5 text-muted-foreground hover:bg-muted",
|
|
3441
|
-
children: /* @__PURE__ */ (0,
|
|
3602
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.X, { size: 12 })
|
|
3442
3603
|
}
|
|
3443
3604
|
)
|
|
3444
3605
|
] }),
|
|
3445
|
-
/* @__PURE__ */ (0,
|
|
3606
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("form", { className: "flex items-center", onSubmit: handleSubmit, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
3446
3607
|
"div",
|
|
3447
3608
|
{
|
|
3448
3609
|
className: cn(
|
|
@@ -3453,7 +3614,7 @@ function Chat({
|
|
|
3453
3614
|
"transition-shadow duration-200"
|
|
3454
3615
|
),
|
|
3455
3616
|
children: [
|
|
3456
|
-
/* @__PURE__ */ (0,
|
|
3617
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3457
3618
|
ComposerMenu,
|
|
3458
3619
|
{
|
|
3459
3620
|
composer,
|
|
@@ -3463,7 +3624,7 @@ function Chat({
|
|
|
3463
3624
|
disabled: stream.isLoading || missingConfig || isHistoryLoading
|
|
3464
3625
|
}
|
|
3465
3626
|
),
|
|
3466
|
-
/* @__PURE__ */ (0,
|
|
3627
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3467
3628
|
"input",
|
|
3468
3629
|
{
|
|
3469
3630
|
type: "text",
|
|
@@ -3479,7 +3640,7 @@ function Chat({
|
|
|
3479
3640
|
autoComplete: "off"
|
|
3480
3641
|
}
|
|
3481
3642
|
),
|
|
3482
|
-
/* @__PURE__ */ (0,
|
|
3643
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3483
3644
|
SendButton,
|
|
3484
3645
|
{
|
|
3485
3646
|
disabled: isSendDisabled,
|
|
@@ -3492,7 +3653,7 @@ function Chat({
|
|
|
3492
3653
|
]
|
|
3493
3654
|
}
|
|
3494
3655
|
) }),
|
|
3495
|
-
disclaimer?.text && /* @__PURE__ */ (0,
|
|
3656
|
+
disclaimer?.text && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3496
3657
|
"p",
|
|
3497
3658
|
{
|
|
3498
3659
|
className: cn(
|
|
@@ -3502,9 +3663,9 @@ function Chat({
|
|
|
3502
3663
|
children: disclaimer.text
|
|
3503
3664
|
}
|
|
3504
3665
|
),
|
|
3505
|
-
/* @__PURE__ */ (0,
|
|
3506
|
-
/* @__PURE__ */ (0,
|
|
3507
|
-
/* @__PURE__ */ (0,
|
|
3666
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "mt-2 flex items-center justify-center gap-2 text-xs text-muted-foreground", children: [
|
|
3667
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { children: t("chat.poweredBy") }),
|
|
3668
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ContextUsageIndicator, { className: "absolute right-4" })
|
|
3508
3669
|
] })
|
|
3509
3670
|
] })
|
|
3510
3671
|
]
|
|
@@ -3513,11 +3674,11 @@ function Chat({
|
|
|
3513
3674
|
}
|
|
3514
3675
|
|
|
3515
3676
|
// src/components/ui/input.tsx
|
|
3516
|
-
var
|
|
3517
|
-
var
|
|
3518
|
-
var Input =
|
|
3677
|
+
var React21 = __toESM(require("react"), 1);
|
|
3678
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
3679
|
+
var Input = React21.forwardRef(
|
|
3519
3680
|
({ className, type, ...props }, ref) => {
|
|
3520
|
-
return /* @__PURE__ */ (0,
|
|
3681
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
3521
3682
|
"input",
|
|
3522
3683
|
{
|
|
3523
3684
|
ref,
|
|
@@ -3533,49 +3694,11 @@ var Input = React19.forwardRef(
|
|
|
3533
3694
|
);
|
|
3534
3695
|
Input.displayName = "Input";
|
|
3535
3696
|
|
|
3536
|
-
// src/components/ui/avatar.tsx
|
|
3537
|
-
var React20 = __toESM(require("react"), 1);
|
|
3538
|
-
var AvatarPrimitive = __toESM(require("@radix-ui/react-avatar"), 1);
|
|
3539
|
-
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
3540
|
-
var Avatar = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3541
|
-
AvatarPrimitive.Root,
|
|
3542
|
-
{
|
|
3543
|
-
ref,
|
|
3544
|
-
className: cn(
|
|
3545
|
-
"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
|
|
3546
|
-
className
|
|
3547
|
-
),
|
|
3548
|
-
...props
|
|
3549
|
-
}
|
|
3550
|
-
));
|
|
3551
|
-
Avatar.displayName = AvatarPrimitive.Root.displayName;
|
|
3552
|
-
var AvatarImage = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3553
|
-
AvatarPrimitive.Image,
|
|
3554
|
-
{
|
|
3555
|
-
ref,
|
|
3556
|
-
className: cn("aspect-square h-full w-full", className),
|
|
3557
|
-
...props
|
|
3558
|
-
}
|
|
3559
|
-
));
|
|
3560
|
-
AvatarImage.displayName = AvatarPrimitive.Image.displayName;
|
|
3561
|
-
var AvatarFallback = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
3562
|
-
AvatarPrimitive.Fallback,
|
|
3563
|
-
{
|
|
3564
|
-
ref,
|
|
3565
|
-
className: cn(
|
|
3566
|
-
"flex h-full w-full items-center justify-center rounded-full bg-muted",
|
|
3567
|
-
className
|
|
3568
|
-
),
|
|
3569
|
-
...props
|
|
3570
|
-
}
|
|
3571
|
-
));
|
|
3572
|
-
AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
|
|
3573
|
-
|
|
3574
3697
|
// src/components/ui/separator.tsx
|
|
3575
|
-
var
|
|
3576
|
-
var
|
|
3577
|
-
var Separator =
|
|
3578
|
-
({ className, orientation = "horizontal", ...props }, ref) => /* @__PURE__ */ (0,
|
|
3698
|
+
var React22 = __toESM(require("react"), 1);
|
|
3699
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
3700
|
+
var Separator = React22.forwardRef(
|
|
3701
|
+
({ className, orientation = "horizontal", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
3579
3702
|
"div",
|
|
3580
3703
|
{
|
|
3581
3704
|
ref,
|
|
@@ -3606,6 +3729,7 @@ Separator.displayName = "Separator";
|
|
|
3606
3729
|
CardHeader,
|
|
3607
3730
|
CardTitle,
|
|
3608
3731
|
Chat,
|
|
3732
|
+
ChatkitAvatar,
|
|
3609
3733
|
Input,
|
|
3610
3734
|
ParentMessengerProvider,
|
|
3611
3735
|
ScrollArea,
|
|
@@ -3617,7 +3741,10 @@ Separator.displayName = "Separator";
|
|
|
3617
3741
|
TabsTrigger,
|
|
3618
3742
|
ThemeProvider,
|
|
3619
3743
|
chatkitSupportedLocales,
|
|
3744
|
+
extractAssistantAvatar,
|
|
3745
|
+
getAvatarFallback,
|
|
3620
3746
|
getChatkitLanguage,
|
|
3747
|
+
normalizeChatkitAvatar,
|
|
3621
3748
|
setChatkitLanguage,
|
|
3622
3749
|
useParentMessenger,
|
|
3623
3750
|
useTheme
|