@xpert-ai/chatkit-ui 0.0.18 → 0.0.20

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.
Files changed (284) hide show
  1. package/dist/app/assets/{abap-CHwuRnXq.js → abap-CabZ0vYL.js} +1 -1
  2. package/dist/app/assets/{abnf-2DfzhqtW.js → abnf-CPoubvVG.js} +1 -1
  3. package/dist/app/assets/{actionscript-DAgV32eO.js → actionscript-CL1BPQFv.js} +1 -1
  4. package/dist/app/assets/{ada-DT3cxlyx.js → ada-BOt55oS4.js} +1 -1
  5. package/dist/app/assets/{agda-CtLOupxH.js → agda-DKyUkxie.js} +1 -1
  6. package/dist/app/assets/{al-DEAhLEpb.js → al-Jnhqb7P-.js} +1 -1
  7. package/dist/app/assets/{antlr4-mH3vFjLU.js → antlr4-BeT3YbbK.js} +1 -1
  8. package/dist/app/assets/{apacheconf-XqH3RiJR.js → apacheconf-Ck_DRZXY.js} +1 -1
  9. package/dist/app/assets/{apex-ToiE8TUF.js → apex-CPjbO0O4.js} +1 -1
  10. package/dist/app/assets/{apl-wfi68f3P.js → apl-Ccs4_jOU.js} +1 -1
  11. package/dist/app/assets/{applescript-D76E4SJU.js → applescript-C6i7vo8F.js} +1 -1
  12. package/dist/app/assets/{aql-BMSyfgpD.js → aql-D3ZWY-VL.js} +1 -1
  13. package/dist/app/assets/{arduino-DJbNpx4-.js → arduino-xTj3TTXg.js} +1 -1
  14. package/dist/app/assets/{arff-yrwqaguZ.js → arff-BOuVccGR.js} +1 -1
  15. package/dist/app/assets/{asciidoc-CEQ5mqA1.js → asciidoc-BmShvnn0.js} +1 -1
  16. package/dist/app/assets/{asm6502-C-2c85ky.js → asm6502-6FWPK68i.js} +1 -1
  17. package/dist/app/assets/{asmatmel-CWq0tTKz.js → asmatmel-KLAd82QV.js} +1 -1
  18. package/dist/app/assets/{aspnet-Cx4ZWrOh.js → aspnet-vZiSZd1y.js} +1 -1
  19. package/dist/app/assets/{autohotkey-DWdNXtYW.js → autohotkey-tcBDP1b7.js} +1 -1
  20. package/dist/app/assets/{autoit-Dbc7dXyT.js → autoit-Bwt0tLM_.js} +1 -1
  21. package/dist/app/assets/{avisynth-MYFijYs8.js → avisynth-Bzz43Lfu.js} +1 -1
  22. package/dist/app/assets/{avro-idl-D-g9-Y0l.js → avro-idl-Bt9aSyrD.js} +1 -1
  23. package/dist/app/assets/{bash-8NbFWZiC.js → bash-BloO3C-T.js} +1 -1
  24. package/dist/app/assets/{basic-DSlnlwQJ.js → basic-B-OOkRrw.js} +1 -1
  25. package/dist/app/assets/{batch-B2Rcm8G9.js → batch-aOUu2msA.js} +1 -1
  26. package/dist/app/assets/{bbcode-DHCPPC4e.js → bbcode-C4D8vm8O.js} +1 -1
  27. package/dist/app/assets/{bicep-BZyRz9TP.js → bicep-BtBByAYv.js} +1 -1
  28. package/dist/app/assets/{birb-BakwD9zz.js → birb-BKXLouTf.js} +1 -1
  29. package/dist/app/assets/{bison-ieCPcVGR.js → bison-CniuHJJN.js} +1 -1
  30. package/dist/app/assets/{bnf-CGY-BBi3.js → bnf-CGcuZYv2.js} +1 -1
  31. package/dist/app/assets/{brainfuck-Cj81VtmH.js → brainfuck-C9dlh056.js} +1 -1
  32. package/dist/app/assets/{brightscript-BD0EgXHk.js → brightscript-nhHFw9_4.js} +1 -1
  33. package/dist/app/assets/{bro-CBy8pULp.js → bro-BTsReVOc.js} +1 -1
  34. package/dist/app/assets/{bsl-xro0lCDL.js → bsl-CmOTwcFR.js} +1 -1
  35. package/dist/app/assets/{c-9rxn2YQ4.js → c-Yjfq4oES.js} +1 -1
  36. package/dist/app/assets/{cfscript-Bkf3ayeM.js → cfscript-DGhYlgJ7.js} +1 -1
  37. package/dist/app/assets/{chaiscript-GDz4R2K8.js → chaiscript-CpP8bBSU.js} +1 -1
  38. package/dist/app/assets/{cil-CYn74Ewd.js → cil-CZ7j4pcz.js} +1 -1
  39. package/dist/app/assets/{clike-45tZ1mA6.js → clike-D581thF2.js} +1 -1
  40. package/dist/app/assets/{clojure-BWz4NMPO.js → clojure-AXVmar0o.js} +1 -1
  41. package/dist/app/assets/{cmake-xA13Uqwj.js → cmake-BozSSfax.js} +1 -1
  42. package/dist/app/assets/{cobol-j0iRbhJB.js → cobol-OciN9vwY.js} +1 -1
  43. package/dist/app/assets/{coffeescript-dl-THSsH.js → coffeescript-B9yMzVL5.js} +1 -1
  44. package/dist/app/assets/{concurnas-B6S-ADWj.js → concurnas-DeQIM64O.js} +1 -1
  45. package/dist/app/assets/{coq-PXls10l3.js → coq-CicPksao.js} +1 -1
  46. package/dist/app/assets/{core-DDPOAK1E.js → core-BIcqXTaK.js} +1 -1
  47. package/dist/app/assets/{cpp-BgzSW_NX.js → cpp-DKQF7403.js} +1 -1
  48. package/dist/app/assets/{crystal-BMmhu41o.js → crystal-Bcau7QFZ.js} +1 -1
  49. package/dist/app/assets/{csharp-B_WC3Vn_.js → csharp-BYghYpTl.js} +1 -1
  50. package/dist/app/assets/{cshtml-BqSNO3ox.js → cshtml-BIxIGrsH.js} +1 -1
  51. package/dist/app/assets/{csp-CrUI1cnG.js → csp-CzDOD-m1.js} +1 -1
  52. package/dist/app/assets/{css-ChHsquIc.js → css-CPRwU6oY.js} +1 -1
  53. package/dist/app/assets/{css-extras-bQ5HJzA4.js → css-extras-C28yWYxN.js} +1 -1
  54. package/dist/app/assets/{csv-t6AqRQB9.js → csv-D8IAZwKO.js} +1 -1
  55. package/dist/app/assets/{cypher-Cy7io1dY.js → cypher-0hMRBt8D.js} +1 -1
  56. package/dist/app/assets/{d-CwMdCAM_.js → d-B5PQgXXo.js} +1 -1
  57. package/dist/app/assets/{dart-BuartbIn.js → dart-CvCyf8me.js} +1 -1
  58. package/dist/app/assets/{dataweave-BnCsrMSg.js → dataweave-Izl0xtz9.js} +1 -1
  59. package/dist/app/assets/{dax-DaI-ew-T.js → dax-D-bGAkbS.js} +1 -1
  60. package/dist/app/assets/{dhall-6JyEA8LJ.js → dhall-DXIOSM5Q.js} +1 -1
  61. package/dist/app/assets/{diff-BAlFnOor.js → diff-BE-xKdIi.js} +1 -1
  62. package/dist/app/assets/{django-D9vYkGg3.js → django-DxEZdkeU.js} +1 -1
  63. package/dist/app/assets/{dns-zone-file-abVzPRWS.js → dns-zone-file-D406E4S7.js} +1 -1
  64. package/dist/app/assets/{docker-DoUnklwQ.js → docker-BZkb2U00.js} +1 -1
  65. package/dist/app/assets/{dot-DDnBlEa_.js → dot-BGJNVmx1.js} +1 -1
  66. package/dist/app/assets/{ebnf-BajOxGce.js → ebnf-_PEATas2.js} +1 -1
  67. package/dist/app/assets/{editorconfig-BIddix8n.js → editorconfig-C1UuLwJC.js} +1 -1
  68. package/dist/app/assets/{eiffel-BKXrTa6c.js → eiffel-PzXVtlzf.js} +1 -1
  69. package/dist/app/assets/{ejs-Og16WqX4.js → ejs-707c0691.js} +1 -1
  70. package/dist/app/assets/{elixir-CRUCJ3sb.js → elixir-Bd3zWMjP.js} +1 -1
  71. package/dist/app/assets/{elm-BWsXlhNE.js → elm-DvEDEOdK.js} +1 -1
  72. package/dist/app/assets/{erb-Cl2dmgV9.js → erb-B6lZT1P9.js} +1 -1
  73. package/dist/app/assets/{erlang-52x12hpz.js → erlang-BwhqRmQk.js} +1 -1
  74. package/dist/app/assets/{etlua-BvUA6TYU.js → etlua-Bkg93PrU.js} +1 -1
  75. package/dist/app/assets/{excel-formula-CUG5ejOC.js → excel-formula-BD0I0dyD.js} +1 -1
  76. package/dist/app/assets/{factor-C6rMQLDa.js → factor-CiQgOsxY.js} +1 -1
  77. package/dist/app/assets/{false-DV4ACTLB.js → false-DlJ-f_Rc.js} +1 -1
  78. package/dist/app/assets/{firestore-security-rules-BKZLjo1E.js → firestore-security-rules-CxrEhPSm.js} +1 -1
  79. package/dist/app/assets/{flow-qFNOvNgm.js → flow-DOjTBDi4.js} +1 -1
  80. package/dist/app/assets/{fortran-DqiezfWq.js → fortran-D6uA-pWI.js} +1 -1
  81. package/dist/app/assets/{fsharp-ClWdxDsu.js → fsharp-CFL1DcvT.js} +1 -1
  82. package/dist/app/assets/{ftl-B02Q359Y.js → ftl-DzWZwecM.js} +1 -1
  83. package/dist/app/assets/{gap-CI8z3sUw.js → gap-DatQeRFY.js} +1 -1
  84. package/dist/app/assets/{gcode-CS21WcHI.js → gcode-5FSxboIT.js} +1 -1
  85. package/dist/app/assets/{gdscript-C7R4f8Sc.js → gdscript-Dz-OC8bG.js} +1 -1
  86. package/dist/app/assets/{gedcom-zHMKYqZx.js → gedcom-BS0539Ys.js} +1 -1
  87. package/dist/app/assets/{gherkin-BcPGV1uj.js → gherkin-BJKrWYAT.js} +1 -1
  88. package/dist/app/assets/{git-EtetQy0I.js → git-DCjIevVw.js} +1 -1
  89. package/dist/app/assets/{glsl-BcKnrROs.js → glsl-toSXKJrw.js} +1 -1
  90. package/dist/app/assets/{gml-CrGZiEns.js → gml-DODsSWU7.js} +1 -1
  91. package/dist/app/assets/{gn-DHos-BEp.js → gn-CzmtMWMm.js} +1 -1
  92. package/dist/app/assets/{go-tSMJGh2m.js → go-BCQUEKVv.js} +1 -1
  93. package/dist/app/assets/{go-module-DmD_s_em.js → go-module-BbcV-9oG.js} +1 -1
  94. package/dist/app/assets/{graphql-Cv6KihzB.js → graphql-C_KxCYJO.js} +1 -1
  95. package/dist/app/assets/{groovy-CzqIFnlO.js → groovy-Cj97iKYK.js} +1 -1
  96. package/dist/app/assets/{haml-p67IB2SU.js → haml-tLXJGYDb.js} +1 -1
  97. package/dist/app/assets/{handlebars-CZv3-FpN.js → handlebars-DIdVe3xN.js} +1 -1
  98. package/dist/app/assets/{haskell-DAL_LfTS.js → haskell-DPqw5u4H.js} +1 -1
  99. package/dist/app/assets/{haxe-CTqmh5A2.js → haxe-AsnHNCIR.js} +1 -1
  100. package/dist/app/assets/{hcl-CVN94LS3.js → hcl-C6aoWR34.js} +1 -1
  101. package/dist/app/assets/{hlsl-Bn6ZMphU.js → hlsl-B2hhU30-.js} +1 -1
  102. package/dist/app/assets/{hoon-CE6akRDU.js → hoon-Bs-KhWO3.js} +1 -1
  103. package/dist/app/assets/{hpkp-C8KgIg74.js → hpkp-C-J4O-Mp.js} +1 -1
  104. package/dist/app/assets/{hsts-DosDc_Xd.js → hsts-BNFEkSnm.js} +1 -1
  105. package/dist/app/assets/{http-CdUJWc4k.js → http-D7UlQANy.js} +1 -1
  106. package/dist/app/assets/{ichigojam-BYu2pYZ_.js → ichigojam-B01TJ8BA.js} +1 -1
  107. package/dist/app/assets/{icon-C5iVR2I1.js → icon-Ca_ghvQd.js} +1 -1
  108. package/dist/app/assets/{icu-message-format-C7_n4NGR.js → icu-message-format-CkcsJ0ML.js} +1 -1
  109. package/dist/app/assets/{idris-BbHCmg9Y.js → idris-BApVxI9a.js} +1 -1
  110. package/dist/app/assets/{iecst-BXI2gfub.js → iecst-CXLR8sGn.js} +1 -1
  111. package/dist/app/assets/{ignore-DxilDdWj.js → ignore-7LzAeAFj.js} +1 -1
  112. package/dist/app/assets/{index-CxdiVFB3.js → index-BUg2yVDW.js} +99 -99
  113. package/dist/app/assets/{index-Ki_i49D-.css → index-om2E9pNd.css} +1 -1
  114. package/dist/app/assets/{inform7-D9rsIB2_.js → inform7-CtnRN-Iq.js} +1 -1
  115. package/dist/app/assets/{ini-CorbaNQ2.js → ini-Cjpl6yTL.js} +1 -1
  116. package/dist/app/assets/{io-DlaJAU3H.js → io-C6W_EboY.js} +1 -1
  117. package/dist/app/assets/{j-Df9KMPk_.js → j-BOBDun2W.js} +1 -1
  118. package/dist/app/assets/{java-BbPAAQzG.js → java-CNwVyXY2.js} +1 -1
  119. package/dist/app/assets/{javadoc-BBvxcZku.js → javadoc-DS6hxu7_.js} +1 -1
  120. package/dist/app/assets/{javadoclike-C-hXm4Na.js → javadoclike-J6YT11JS.js} +1 -1
  121. package/dist/app/assets/{javascript-D2UR82H9.js → javascript-IbEfuVSB.js} +1 -1
  122. package/dist/app/assets/{javastacktrace--Jk342eR.js → javastacktrace-DjxwGV26.js} +1 -1
  123. package/dist/app/assets/{jexl-Dp7mqOtA.js → jexl-TLHmHaQ5.js} +1 -1
  124. package/dist/app/assets/{jolie-CSWv4bc8.js → jolie-CLk71kur.js} +1 -1
  125. package/dist/app/assets/{jq-CRIxeObf.js → jq-DZKnIQZM.js} +1 -1
  126. package/dist/app/assets/{js-extras-D6Oxrs85.js → js-extras-CJab09ti.js} +1 -1
  127. package/dist/app/assets/{js-templates-CvddYygu.js → js-templates-CQGqrHhi.js} +1 -1
  128. package/dist/app/assets/{jsdoc-BdeT1xTG.js → jsdoc--ymvl4aq.js} +1 -1
  129. package/dist/app/assets/{json-CD5aTyqv.js → json-D9b-V85G.js} +1 -1
  130. package/dist/app/assets/{json5-CQD7S44p.js → json5-LgA47n7A.js} +1 -1
  131. package/dist/app/assets/{jsonp-BDhKO2OY.js → jsonp-Cvwp3f8M.js} +1 -1
  132. package/dist/app/assets/{jsstacktrace-lbAhFL2v.js → jsstacktrace-z8t2H6h6.js} +1 -1
  133. package/dist/app/assets/{jsx-DqiBSXn6.js → jsx-B71LrwNd.js} +1 -1
  134. package/dist/app/assets/{julia-yGL3eW7D.js → julia-DCATdxwO.js} +1 -1
  135. package/dist/app/assets/{keepalived-DHZu6IVW.js → keepalived-DVYYbgrL.js} +1 -1
  136. package/dist/app/assets/{keyman-DoP3-MPX.js → keyman-DLyOXnhf.js} +1 -1
  137. package/dist/app/assets/{kotlin-C38FMvib.js → kotlin-CYoDfyDA.js} +1 -1
  138. package/dist/app/assets/{kumir-DYUxd4M5.js → kumir-CPWiEvmL.js} +1 -1
  139. package/dist/app/assets/{kusto-CjBEwlq_.js → kusto-BkfRYk0W.js} +1 -1
  140. package/dist/app/assets/{latex-yk3k8b7j.js → latex-BEjZ0ppC.js} +1 -1
  141. package/dist/app/assets/{latte-Dng4v313.js → latte-DaZOqdGV.js} +1 -1
  142. package/dist/app/assets/{less-CmhWzUUH.js → less-BmKsj1gN.js} +1 -1
  143. package/dist/app/assets/{lilypond-DpO8jIok.js → lilypond-mmng28aJ.js} +1 -1
  144. package/dist/app/assets/{liquid-7KQu8yU-.js → liquid-BuuJO6_6.js} +1 -1
  145. package/dist/app/assets/{lisp-CkwfOFVq.js → lisp-DnffFM5N.js} +1 -1
  146. package/dist/app/assets/{livescript-K_eeePCa.js → livescript-BSsr00Wr.js} +1 -1
  147. package/dist/app/assets/{llvm-Chk2kOg9.js → llvm-37YjcHN5.js} +1 -1
  148. package/dist/app/assets/{log-XeloFBhC.js → log-D3l5N3To.js} +1 -1
  149. package/dist/app/assets/{lolcode-6kb_GfTw.js → lolcode-C0Q2M_6s.js} +1 -1
  150. package/dist/app/assets/{lua-DpHWoKu0.js → lua-DcLwN4Tg.js} +1 -1
  151. package/dist/app/assets/{magma-B1cwfm8a.js → magma-CK0Amip9.js} +1 -1
  152. package/dist/app/assets/{makefile-DnoX0HR-.js → makefile-CtpS-RoO.js} +1 -1
  153. package/dist/app/assets/{markdown-C5XigQJ0.js → markdown-BNK3F4ql.js} +1 -1
  154. package/dist/app/assets/{markup-SKmTYACD.js → markup-C9GIL65H.js} +1 -1
  155. package/dist/app/assets/{markup-templating-BDHc3isa.js → markup-templating-Du1J3ADP.js} +1 -1
  156. package/dist/app/assets/{matlab-DYse1JL8.js → matlab-DEM6O1Ul.js} +1 -1
  157. package/dist/app/assets/{maxscript-Dof7S23b.js → maxscript-DMvqa3gf.js} +1 -1
  158. package/dist/app/assets/{mel-DsVmbOxg.js → mel-C8DBIw1g.js} +1 -1
  159. package/dist/app/assets/{mermaid-CjPxe17r.js → mermaid-CVko6NSq.js} +1 -1
  160. package/dist/app/assets/{mizar-DLTTgd44.js → mizar-CwYm3_It.js} +1 -1
  161. package/dist/app/assets/{mongodb-J5tlFev8.js → mongodb-DRqGwjq6.js} +1 -1
  162. package/dist/app/assets/{monkey-QAy3552c.js → monkey-BxiKe6Nr.js} +1 -1
  163. package/dist/app/assets/{moonscript-D0xhYjmI.js → moonscript-CJyt1xoM.js} +1 -1
  164. package/dist/app/assets/{n1ql-vOxeW8Ks.js → n1ql-BBmjIGEU.js} +1 -1
  165. package/dist/app/assets/{n4js-Cr0sbX4v.js → n4js-ByKsJMJL.js} +1 -1
  166. package/dist/app/assets/{nand2tetris-hdl-CGUHioIg.js → nand2tetris-hdl-BTSXj71h.js} +1 -1
  167. package/dist/app/assets/{naniscript-BRNba_ij.js → naniscript-C4jykFVF.js} +1 -1
  168. package/dist/app/assets/{nasm-BEE3NtXA.js → nasm-DPA0eXtX.js} +1 -1
  169. package/dist/app/assets/{neon-BCWk85VJ.js → neon-upN4Ak64.js} +1 -1
  170. package/dist/app/assets/{nevod-DuaN4wbX.js → nevod-CdttHB8F.js} +1 -1
  171. package/dist/app/assets/{nginx-BE3tA_qC.js → nginx-DI1fsQ3j.js} +1 -1
  172. package/dist/app/assets/{nim-BTdmQ5Q3.js → nim-D7kc_mK9.js} +1 -1
  173. package/dist/app/assets/{nix-BGISRhR6.js → nix-BUG5ppr9.js} +1 -1
  174. package/dist/app/assets/{nsis-Cy7-xS7T.js → nsis-BnXhmmxO.js} +1 -1
  175. package/dist/app/assets/{objectivec-dDOKBhSQ.js → objectivec-Bu4dOfb9.js} +1 -1
  176. package/dist/app/assets/{ocaml-FY2_HJ8p.js → ocaml-aT7VVPiL.js} +1 -1
  177. package/dist/app/assets/{opencl-QvCSqYEz.js → opencl-BzyWcYkI.js} +1 -1
  178. package/dist/app/assets/{openqasm-DciDYaBI.js → openqasm-b2yFBJdq.js} +1 -1
  179. package/dist/app/assets/{oz-b_RN2Jum.js → oz-D46TtIuw.js} +1 -1
  180. package/dist/app/assets/{parigp-pi9tW-vJ.js → parigp-BAJyhdut.js} +1 -1
  181. package/dist/app/assets/{parser-BNyoGbdp.js → parser-B-ALvauC.js} +1 -1
  182. package/dist/app/assets/{pascal-CCbBRhEl.js → pascal-B0ap4FDW.js} +1 -1
  183. package/dist/app/assets/{pascaligo-DlAAMoJ9.js → pascaligo-ChOneu9-.js} +1 -1
  184. package/dist/app/assets/{pcaxis-doDt0DKg.js → pcaxis-DTAmxHgs.js} +1 -1
  185. package/dist/app/assets/{peoplecode-C6qORRLy.js → peoplecode-dQfUy8zn.js} +1 -1
  186. package/dist/app/assets/{perl-DYO72X5y.js → perl-CYk00e1Q.js} +1 -1
  187. package/dist/app/assets/{php-DYRzOllS.js → php-DvSqFnSN.js} +1 -1
  188. package/dist/app/assets/{php-extras-CVIKu6Nc.js → php-extras-BFjUbIU6.js} +1 -1
  189. package/dist/app/assets/{phpdoc-BGNfZMOM.js → phpdoc-Di7rKCNL.js} +1 -1
  190. package/dist/app/assets/{plsql-eC13ro-r.js → plsql-dX0-BKqD.js} +1 -1
  191. package/dist/app/assets/{powerquery-Cs0JgpuI.js → powerquery-3xq4KaAs.js} +1 -1
  192. package/dist/app/assets/{powershell-9KYeI4sx.js → powershell-BbXooszO.js} +1 -1
  193. package/dist/app/assets/{processing-HbGRdnnD.js → processing-GWbfNCzH.js} +1 -1
  194. package/dist/app/assets/{prolog-CI3jZdJK.js → prolog-Tb2TbunJ.js} +1 -1
  195. package/dist/app/assets/{promql-D0wREOFk.js → promql-QS8vHhL7.js} +1 -1
  196. package/dist/app/assets/{properties-DgwMsvo5.js → properties-BJ8AWlqX.js} +1 -1
  197. package/dist/app/assets/{protobuf-C1Z09MVB.js → protobuf-De-puAg3.js} +1 -1
  198. package/dist/app/assets/{psl-DpPBMaI5.js → psl-hZft3C8K.js} +1 -1
  199. package/dist/app/assets/{pug-DYaSYILA.js → pug-BcYHdk-i.js} +1 -1
  200. package/dist/app/assets/{puppet-DxCnT5Pj.js → puppet-BWbqDQJD.js} +1 -1
  201. package/dist/app/assets/{pure-CUYh7Ck6.js → pure-Bz2pjTxR.js} +1 -1
  202. package/dist/app/assets/{purebasic-DXQmX2ZG.js → purebasic-BlO48lYx.js} +1 -1
  203. package/dist/app/assets/{purescript-BVZzZ7nk.js → purescript-BxSMm2Br.js} +1 -1
  204. package/dist/app/assets/{q-BMx8_CVm.js → q-DDUTW9aK.js} +1 -1
  205. package/dist/app/assets/{qml-CmeGky21.js → qml-DisOV-LV.js} +1 -1
  206. package/dist/app/assets/{qore-CtP0c7NV.js → qore-FNRP4gBF.js} +1 -1
  207. package/dist/app/assets/{qsharp-BTgQDBC3.js → qsharp-DhtMV0oO.js} +1 -1
  208. package/dist/app/assets/{r-B5-O0rcA.js → r-CyiuHjNN.js} +1 -1
  209. package/dist/app/assets/{racket-CEX4pyKb.js → racket-DFgoSckH.js} +1 -1
  210. package/dist/app/assets/{reason-CqPEmBsx.js → reason-HhYbY7K3.js} +1 -1
  211. package/dist/app/assets/{regex-CQ8JW_Gc.js → regex-jU5TpvM-.js} +1 -1
  212. package/dist/app/assets/{rego-Dt4DHrNq.js → rego-BCjDPrQO.js} +1 -1
  213. package/dist/app/assets/{renpy-ByHKwRX9.js → renpy-BTSgQi2v.js} +1 -1
  214. package/dist/app/assets/{rest-BrStwFnU.js → rest-BLcZ4e-5.js} +1 -1
  215. package/dist/app/assets/{rip-B74P3wJy.js → rip-SltRJnuI.js} +1 -1
  216. package/dist/app/assets/{roboconf-DLUr9EJ1.js → roboconf-B-GZm2Oe.js} +1 -1
  217. package/dist/app/assets/{robotframework-BcuIX9tt.js → robotframework-BOt8S6cX.js} +1 -1
  218. package/dist/app/assets/{ruby-Bi4Wut0d.js → ruby-CVfYH0zM.js} +1 -1
  219. package/dist/app/assets/{rust-CYPSHdmA.js → rust-B6mEp4Sj.js} +1 -1
  220. package/dist/app/assets/{sas-CAUvO4l1.js → sas-DvEI8RJ0.js} +1 -1
  221. package/dist/app/assets/{sass-DzJLJBqu.js → sass-Cv25Jxqq.js} +1 -1
  222. package/dist/app/assets/{scala-CT_n8gZn.js → scala-CyqNr7Uv.js} +1 -1
  223. package/dist/app/assets/{scheme-xujlA_rp.js → scheme-ji0XoXLf.js} +1 -1
  224. package/dist/app/assets/{scss-D8ZDIDQI.js → scss-B7_0neO_.js} +1 -1
  225. package/dist/app/assets/{shell-session-CWbKJyhk.js → shell-session-CqZEoMQD.js} +1 -1
  226. package/dist/app/assets/{smali-Nxfv_vvZ.js → smali-DKSzZYkI.js} +1 -1
  227. package/dist/app/assets/{smalltalk-B--by9ZJ.js → smalltalk-BOA4piuq.js} +1 -1
  228. package/dist/app/assets/{smarty-uT4syL5U.js → smarty-Du99BSgN.js} +1 -1
  229. package/dist/app/assets/{sml-C6x2rWB8.js → sml-BJedIA4B.js} +1 -1
  230. package/dist/app/assets/{solidity-BOJu-utD.js → solidity-DidQwG5Z.js} +1 -1
  231. package/dist/app/assets/{solution-file-ygppTBQ1.js → solution-file-Bx0d9qN8.js} +1 -1
  232. package/dist/app/assets/{soy-Bavjfh30.js → soy-BBLv3Cfa.js} +1 -1
  233. package/dist/app/assets/{sparql-D6GMLoSp.js → sparql-Da5WZKbL.js} +1 -1
  234. package/dist/app/assets/{splunk-spl-BCqeA0zN.js → splunk-spl-DbJKl8So.js} +1 -1
  235. package/dist/app/assets/{sqf-DXFnoJLs.js → sqf-CYrx0jxf.js} +1 -1
  236. package/dist/app/assets/{sql-CDPg3pWi.js → sql-Gv-aOlOf.js} +1 -1
  237. package/dist/app/assets/{squirrel-BzsuTTxA.js → squirrel-FpIGPPw4.js} +1 -1
  238. package/dist/app/assets/{stan-BNSDRY4v.js → stan-Dq001Nrk.js} +1 -1
  239. package/dist/app/assets/{stylus-DylJUx_f.js → stylus-aatfgWwe.js} +1 -1
  240. package/dist/app/assets/{swift-CaIWTpgC.js → swift-pn7VW95d.js} +1 -1
  241. package/dist/app/assets/{systemd-DQnCn8nj.js → systemd-9capsVJ6.js} +1 -1
  242. package/dist/app/assets/{t4-cs-Cq_GwW_Q.js → t4-cs-CKXcczci.js} +1 -1
  243. package/dist/app/assets/{t4-templating-BISgTxam.js → t4-templating-1wTayb8u.js} +1 -1
  244. package/dist/app/assets/{t4-vb-N0GEvIeQ.js → t4-vb-B_O7wBow.js} +1 -1
  245. package/dist/app/assets/{tap-ce-I6CHh.js → tap-D-TV5_gQ.js} +1 -1
  246. package/dist/app/assets/{tcl-C06hBxKf.js → tcl-BaVob1Om.js} +1 -1
  247. package/dist/app/assets/{textile-Cd7PLrV2.js → textile-COMk-HmI.js} +1 -1
  248. package/dist/app/assets/{toml-DB0RMCXU.js → toml-D9NJpArC.js} +1 -1
  249. package/dist/app/assets/{tremor-CxlZCmcC.js → tremor-rCNHwdQL.js} +1 -1
  250. package/dist/app/assets/{tt2-BoO6vEQl.js → tt2-DTDvfOgc.js} +1 -1
  251. package/dist/app/assets/{turtle-TnULjnRa.js → turtle-D8pkqXh1.js} +1 -1
  252. package/dist/app/assets/{twig-C7sH-lah.js → twig-DxSF8gqH.js} +1 -1
  253. package/dist/app/assets/{typescript-zCOOstrs.js → typescript-Caebatmk.js} +1 -1
  254. package/dist/app/assets/{typoscript-yX2bGADB.js → typoscript-B3uk1kES.js} +1 -1
  255. package/dist/app/assets/{unrealscript-Cj-gCXJg.js → unrealscript-ZNoSG8ji.js} +1 -1
  256. package/dist/app/assets/{uorazor-TOQ_u0re.js → uorazor-LekoNNOo.js} +1 -1
  257. package/dist/app/assets/{uri-Pfk8EtIw.js → uri-B8YcIzOv.js} +1 -1
  258. package/dist/app/assets/{v-CLB2o_L5.js → v-6rOne2a0.js} +1 -1
  259. package/dist/app/assets/{vala-PFnq-zMH.js → vala-CjEJEdsP.js} +1 -1
  260. package/dist/app/assets/{vbnet-CeobNUlV.js → vbnet-DBPmBm7_.js} +1 -1
  261. package/dist/app/assets/{velocity-D_oz4NYY.js → velocity-DOooMwL8.js} +1 -1
  262. package/dist/app/assets/{verilog-Bhh7YyoC.js → verilog-Cq0ZocvP.js} +1 -1
  263. package/dist/app/assets/{vhdl-zKh6LXHA.js → vhdl-Dxs_xidb.js} +1 -1
  264. package/dist/app/assets/{vim-CL4YN93-.js → vim-BqsnXwB6.js} +1 -1
  265. package/dist/app/assets/{visual-basic-DNms8NyE.js → visual-basic-zAzjvaqP.js} +1 -1
  266. package/dist/app/assets/{warpscript-5Fq7EzBx.js → warpscript-D9hbfr6_.js} +1 -1
  267. package/dist/app/assets/{wasm-R6qJ-jJ8.js → wasm-C4TU9VDY.js} +1 -1
  268. package/dist/app/assets/{web-idl-Blrz26ym.js → web-idl-DD5JcddQ.js} +1 -1
  269. package/dist/app/assets/{wiki-OeXSqdoS.js → wiki-Des21yVK.js} +1 -1
  270. package/dist/app/assets/{wolfram-C-UD9Kta.js → wolfram-B7enpov1.js} +1 -1
  271. package/dist/app/assets/{wren-Dll3yBh8.js → wren-Rr8h-Ayu.js} +1 -1
  272. package/dist/app/assets/{xeora-DrxHOskN.js → xeora-EjcLXBhx.js} +1 -1
  273. package/dist/app/assets/{xml-doc-Bz3psZDa.js → xml-doc-uaTxx6-m.js} +1 -1
  274. package/dist/app/assets/{xojo-B-FqLlsk.js → xojo-CX6G8nhh.js} +1 -1
  275. package/dist/app/assets/{xquery-CQnqW2mz.js → xquery-DvPb3Uw9.js} +1 -1
  276. package/dist/app/assets/{yaml-jvENsAZR.js → yaml-D-l_Y2hx.js} +1 -1
  277. package/dist/app/assets/{yang-DKQbMmVK.js → yang-KBoIIT4_.js} +1 -1
  278. package/dist/app/assets/{zig-DslIE2kW.js → zig-_uNXp9cY.js} +1 -1
  279. package/dist/app/index.html +2 -2
  280. package/dist/index.cjs +324 -197
  281. package/dist/index.d.cts +24 -1
  282. package/dist/index.d.ts +24 -1
  283. package/dist/index.js +320 -197
  284. 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 React18 = __toESM(require("react"), 1);
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
- function getRoundedClass(themeRadius) {
75
- switch (themeRadius) {
76
- case "pill":
77
- return "rounded-full";
78
- case "round":
79
- return "rounded-xl";
80
- case "soft":
81
- return "rounded-lg";
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: "Answer" }),
2252
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(TabsTrigger, { value: "reasoning", children: "Reasoning" })
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/hooks/useThreads.ts
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] = React16.useState([]);
2408
- const [isLoading, setIsLoading] = React16.useState(false);
2409
- const [error, setError] = React16.useState(null);
2410
- const upsertThreadRecord = React16.useCallback((threadRecord) => {
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 = React16.useCallback(async () => {
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 = React16.useCallback(
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 = React16.useCallback(
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 = React16.useCallback(
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
- React16.useEffect(() => {
2599
+ React18.useEffect(() => {
2464
2600
  if (!isReady) return;
2465
2601
  void refreshThreads();
2466
2602
  }, [refreshThreads, isReady]);
2467
- React16.useEffect(() => {
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
- React16.useEffect(() => {
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 = React16.useMemo(
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 React17 = __toESM(require("react"), 1);
2654
+ var React19 = __toESM(require("react"), 1);
2519
2655
 
2520
2656
  // src/components/ui/progress-circle.tsx
2521
- var import_jsx_runtime22 = (
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, import_jsx_runtime22.jsxs)(
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, import_jsx_runtime22.jsx)("circle", { ...commonParams, className: "stroke-current/25" }),
2557
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
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 import_jsx_runtime23 = require("react/jsx-runtime");
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] = React17.useState(null);
2609
- const [usedContextSize, setUsedContextSize] = React17.useState(null);
2610
- const [assistantAgentKey, setAssistantAgentKey] = React17.useState(null);
2611
- const latestRealtimeUsageRef = React17.useRef({
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 = React17.useMemo(
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
- React17.useEffect(() => {
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
- React17.useEffect(() => {
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
- React17.useEffect(() => {
2784
+ React19.useEffect(() => {
2649
2785
  if (realtimeUsedContextSize == null) return;
2650
2786
  setUsedContextSize(realtimeUsedContextSize);
2651
2787
  }, [realtimeUsedContextSize]);
2652
- React17.useEffect(() => {
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, import_jsx_runtime23.jsxs)(Tooltip, { children: [
2718
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
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, import_jsx_runtime23.jsx)(ProgressCircle, { value: percent, className: cn("size-3.5", progressClassName) })
2863
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ProgressCircle, { value: percent, className: cn("size-3.5", progressClassName) })
2728
2864
  }
2729
2865
  ) }),
2730
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(TooltipContent, { side: "top", sideOffset: 6, className: "space-y-0.5 px-3 py-2 text-center", children: [
2731
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "text-primary-foreground/70", children: usageLabelWithSuffix }),
2732
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "font-medium text-primary-foreground/80", children: usageFullLabel }),
2733
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "text-sm font-semibold", children: usageTokensLabel })
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 import_jsx_runtime24 = require("react/jsx-runtime");
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] = React18.useState(false);
2780
- const [historyError, setHistoryError] = React18.useState(null);
2781
- const [assistantName, setAssistantName] = React18.useState(null);
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] = React18.useState(false);
2784
- const loadingStartTimeRef = React18.useRef(null);
2785
- React18.useEffect(() => {
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
- React18.useEffect(() => {
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] = React18.useState("");
2812
- const [selectedTool, setSelectedTool] = React18.useState(null);
2813
- const [attachments, setAttachments] = React18.useState([]);
2814
- const [isAtBottom, setIsAtBottom] = React18.useState(true);
2815
- const [hasUpdatesBelow, setHasUpdatesBelow] = React18.useState(false);
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 = React18.useRef(null);
2823
- const fileInputRef = React18.useRef(null);
2824
- const shouldAutoScrollRef = React18.useRef(true);
2825
- const forceFollowRef = React18.useRef(false);
2826
- const previousMessageCountRef = React18.useRef(0);
2827
- const previousScrollTopRef = React18.useRef(0);
2828
- const autoScrollFrameRef = React18.useRef(null);
2829
- const isPointerDownRef = React18.useRef(false);
2830
- const lastTouchYRef = React18.useRef(null);
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 = React18.useMemo(() => stream.messages ?? [], [stream.messages]);
2971
+ const messages = React20.useMemo(() => stream.messages ?? [], [stream.messages]);
2835
2972
  const trimmedDraft = draft.trim();
2836
- const cancelPendingAutoScroll = React18.useCallback(() => {
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 = React18.useCallback(() => {
2979
+ const disableAutoFollow = React20.useCallback(() => {
2843
2980
  forceFollowRef.current = false;
2844
2981
  shouldAutoScrollRef.current = false;
2845
2982
  cancelPendingAutoScroll();
2846
2983
  }, [cancelPendingAutoScroll]);
2847
- const enableAutoFollow = React18.useCallback(() => {
2984
+ const enableAutoFollow = React20.useCallback(() => {
2848
2985
  forceFollowRef.current = true;
2849
2986
  shouldAutoScrollRef.current = true;
2850
2987
  setHasUpdatesBelow(false);
2851
2988
  }, []);
2852
- const scrollToBottom = React18.useCallback((smooth = false, force = false) => {
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
- React18.useEffect(() => {
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
- React18.useEffect(() => {
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
- React18.useEffect(() => {
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
- React18.useEffect(() => {
3105
+ React20.useEffect(() => {
2969
3106
  if (missingConfig) return;
2970
3107
  void refreshThreads();
2971
3108
  }, [missingConfig, refreshThreads]);
2972
- React18.useEffect(() => {
2973
- if (missingConfig || !stream.client || !stream.assistantId) return;
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
- setAssistantName(assistant.metadata?.title || assistant.name);
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 = React18.useCallback(async (localId, file) => {
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 = React18.useCallback((localId) => {
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 = React18.useCallback(
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 = React18.useMemo(
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 = React18.useMemo(() => {
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
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
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, import_jsx_runtime24.jsxs)("div", { className: "flex items-center justify-between border-b px-4 py-2 sticky top-0 z-10 bg-background", children: [
3231
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-3", children: [
3232
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "h-2 w-2 rounded-full bg-green-500" }),
3233
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { children: [
3234
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h2", { className: "text-lg font-semibold", children: assistantName || resolvedTitle }),
3235
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-xs text-muted-foreground", children: t("chat.statusOnline") })
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, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-1", children: [
3239
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsx)(import_lucide_react9.Pencil, { size: 16 })
3413
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.Pencil, { size: 16 })
3253
3414
  }
3254
3415
  ),
3255
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsxs)("div", { className: "flex-1 p-4", children: [
3270
- errorMessage && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "mb-4 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: errorMessage }),
3271
- historyError && /* @__PURE__ */ (0, import_jsx_runtime24.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 }),
3272
- showMissingConfig && /* @__PURE__ */ (0, import_jsx_runtime24.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") }),
3273
- isHistoryLoading && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "mb-4 rounded-lg border border-muted px-3 py-2 text-sm text-muted-foreground", children: t("chat.loadingThread") }),
3274
- messages.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsxs)("div", { className: "space-y-4", children: [
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, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsxs)("div", { className: "flex flex-col px-3 overflow-hidden", children: [
3294
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [
3312
- message.type === "human" && message.attachments?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex flex-wrap gap-1.5 mb-2", children: message.attachments.map((file, fileIndex) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
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, import_jsx_runtime24.jsx)(import_lucide_react9.FileText, { size: 12 }),
3318
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "max-w-[100px] truncate", children: file.originalName })
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, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsx)("span", { className: "wrap-break-word text-sm leading-relaxed", children: formatMessageContent(message.content) })
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, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsx)("div", { className: "flex justify-start gap-3 -ml-2", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "max-w-full rounded-2xl py-2.5", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex gap-1.5", children: [
3356
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "h-2 w-2 animate-bounce rounded-full bg-muted-foreground/60 [animation-delay:-0.3s]" }),
3357
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "h-2 w-2 animate-bounce rounded-full bg-muted-foreground/60 [animation-delay:-0.15s]" }),
3358
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "h-2 w-2 animate-bounce rounded-full bg-muted-foreground/60" })
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, import_jsx_runtime24.jsx)("div", { className: "sticky bottom-20 z-20 flex justify-center px-4 pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsx)(import_lucide_react9.ArrowDown, { size: 16 })
3537
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.ArrowDown, { size: 16 })
3377
3538
  }
3378
3539
  ) }),
3379
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "p-2 sticky bottom-0 z-10 bg-background", children: [
3380
- threadErrorMessage && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "mb-3 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: threadErrorMessage }),
3381
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsx)("div", { className: "mb-3 flex flex-wrap gap-2", children: attachments.map((item) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
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, import_jsx_runtime24.jsx)(import_lucide_react9.Loader2, { size: 14, className: "animate-spin text-muted-foreground" }),
3401
- item.status === "success" && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react9.FileText, { size: 14, className: "text-muted-foreground" }),
3402
- item.status === "error" && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react9.FileText, { size: 14, className: "text-destructive" }),
3403
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: cn(
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, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsx)(import_lucide_react9.RefreshCw, { size: 12 })
3575
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.RefreshCw, { size: 12 })
3415
3576
  }
3416
3577
  ),
3417
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsx)(import_lucide_react9.X, { size: 12 })
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, import_jsx_runtime24.jsxs)("div", { className: "mb-2 flex items-center gap-2", children: [
3434
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary", children: selectedTool.shortLabel ?? selectedTool.label }),
3435
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsx)(import_lucide_react9.X, { size: 12 })
3602
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react9.X, { size: 12 })
3442
3603
  }
3443
3604
  )
3444
3605
  ] }),
3445
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("form", { className: "flex items-center", onSubmit: handleSubmit, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
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, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsx)(
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, import_jsx_runtime24.jsxs)("div", { className: "mt-2 flex items-center justify-center gap-2 text-xs text-muted-foreground", children: [
3506
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: t("chat.poweredBy") }),
3507
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ContextUsageIndicator, { className: "absolute right-4" })
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 React19 = __toESM(require("react"), 1);
3517
- var import_jsx_runtime25 = require("react/jsx-runtime");
3518
- var Input = React19.forwardRef(
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, import_jsx_runtime25.jsx)(
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 React21 = __toESM(require("react"), 1);
3576
- var import_jsx_runtime27 = require("react/jsx-runtime");
3577
- var Separator = React21.forwardRef(
3578
- ({ className, orientation = "horizontal", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
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