@xpert-ai/chatkit-ui 0.0.17 → 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.
Files changed (284) hide show
  1. package/dist/app/assets/{abap-Bwwc_1gv.js → abap-CabZ0vYL.js} +1 -1
  2. package/dist/app/assets/{abnf-B2dNcP9G.js → abnf-CPoubvVG.js} +1 -1
  3. package/dist/app/assets/{actionscript-CXHQ00sX.js → actionscript-CL1BPQFv.js} +1 -1
  4. package/dist/app/assets/{ada-CqG-JVlv.js → ada-BOt55oS4.js} +1 -1
  5. package/dist/app/assets/{agda-B17H_65R.js → agda-DKyUkxie.js} +1 -1
  6. package/dist/app/assets/{al-DZ1np1rt.js → al-Jnhqb7P-.js} +1 -1
  7. package/dist/app/assets/{antlr4-C8q5KPBn.js → antlr4-BeT3YbbK.js} +1 -1
  8. package/dist/app/assets/{apacheconf-ChkcfFbQ.js → apacheconf-Ck_DRZXY.js} +1 -1
  9. package/dist/app/assets/{apex-BH4E_dsM.js → apex-CPjbO0O4.js} +1 -1
  10. package/dist/app/assets/{apl-CrQcdvRs.js → apl-Ccs4_jOU.js} +1 -1
  11. package/dist/app/assets/{applescript-cM7xSTOK.js → applescript-C6i7vo8F.js} +1 -1
  12. package/dist/app/assets/{aql-CUr96LHI.js → aql-D3ZWY-VL.js} +1 -1
  13. package/dist/app/assets/{arduino-Cxfmugkq.js → arduino-xTj3TTXg.js} +1 -1
  14. package/dist/app/assets/{arff-BUd5n8om.js → arff-BOuVccGR.js} +1 -1
  15. package/dist/app/assets/{asciidoc-DXG-Il5x.js → asciidoc-BmShvnn0.js} +1 -1
  16. package/dist/app/assets/{asm6502-CGctLvPd.js → asm6502-6FWPK68i.js} +1 -1
  17. package/dist/app/assets/{asmatmel-D079kq0M.js → asmatmel-KLAd82QV.js} +1 -1
  18. package/dist/app/assets/{aspnet-8ExSjxvo.js → aspnet-vZiSZd1y.js} +1 -1
  19. package/dist/app/assets/{autohotkey-Dl4oXtIk.js → autohotkey-tcBDP1b7.js} +1 -1
  20. package/dist/app/assets/{autoit-C3CwtOjR.js → autoit-Bwt0tLM_.js} +1 -1
  21. package/dist/app/assets/{avisynth-Bx99tLxs.js → avisynth-Bzz43Lfu.js} +1 -1
  22. package/dist/app/assets/{avro-idl-C31XGLPW.js → avro-idl-Bt9aSyrD.js} +1 -1
  23. package/dist/app/assets/{bash-Bbt-WPbn.js → bash-BloO3C-T.js} +1 -1
  24. package/dist/app/assets/{basic-C61Emcak.js → basic-B-OOkRrw.js} +1 -1
  25. package/dist/app/assets/{batch-Djn-x2uB.js → batch-aOUu2msA.js} +1 -1
  26. package/dist/app/assets/{bbcode-CNJrjhuJ.js → bbcode-C4D8vm8O.js} +1 -1
  27. package/dist/app/assets/{bicep-CI5LT2Ae.js → bicep-BtBByAYv.js} +1 -1
  28. package/dist/app/assets/{birb-DbXUGjzd.js → birb-BKXLouTf.js} +1 -1
  29. package/dist/app/assets/{bison-DrTn1ufs.js → bison-CniuHJJN.js} +1 -1
  30. package/dist/app/assets/{bnf-IYAsThC7.js → bnf-CGcuZYv2.js} +1 -1
  31. package/dist/app/assets/{brainfuck-BP2_pLcy.js → brainfuck-C9dlh056.js} +1 -1
  32. package/dist/app/assets/{brightscript-DAQk2Wd6.js → brightscript-nhHFw9_4.js} +1 -1
  33. package/dist/app/assets/{bro-DLuKh1Ny.js → bro-BTsReVOc.js} +1 -1
  34. package/dist/app/assets/{bsl-kl73aWRB.js → bsl-CmOTwcFR.js} +1 -1
  35. package/dist/app/assets/{c-CIhTtviR.js → c-Yjfq4oES.js} +1 -1
  36. package/dist/app/assets/{cfscript-CbFVl9I3.js → cfscript-DGhYlgJ7.js} +1 -1
  37. package/dist/app/assets/{chaiscript-D-0nW1Dm.js → chaiscript-CpP8bBSU.js} +1 -1
  38. package/dist/app/assets/{cil-BDy_lgSO.js → cil-CZ7j4pcz.js} +1 -1
  39. package/dist/app/assets/{clike-CpJMZ32o.js → clike-D581thF2.js} +1 -1
  40. package/dist/app/assets/{clojure-DGR-MOcf.js → clojure-AXVmar0o.js} +1 -1
  41. package/dist/app/assets/{cmake-DN0Hfx1z.js → cmake-BozSSfax.js} +1 -1
  42. package/dist/app/assets/{cobol-CizJYTKX.js → cobol-OciN9vwY.js} +1 -1
  43. package/dist/app/assets/{coffeescript-R-3uLIaS.js → coffeescript-B9yMzVL5.js} +1 -1
  44. package/dist/app/assets/{concurnas-CQkxgZj4.js → concurnas-DeQIM64O.js} +1 -1
  45. package/dist/app/assets/{coq-DQgbmzEf.js → coq-CicPksao.js} +1 -1
  46. package/dist/app/assets/{core-DycsgPCm.js → core-BIcqXTaK.js} +1 -1
  47. package/dist/app/assets/{cpp-CWEafQ-5.js → cpp-DKQF7403.js} +1 -1
  48. package/dist/app/assets/{crystal-B99VfLZA.js → crystal-Bcau7QFZ.js} +1 -1
  49. package/dist/app/assets/{csharp-BpTiSprW.js → csharp-BYghYpTl.js} +1 -1
  50. package/dist/app/assets/{cshtml-Vijio5v4.js → cshtml-BIxIGrsH.js} +1 -1
  51. package/dist/app/assets/{csp-tvYUeGBl.js → csp-CzDOD-m1.js} +1 -1
  52. package/dist/app/assets/{css-DKouri6h.js → css-CPRwU6oY.js} +1 -1
  53. package/dist/app/assets/{css-extras-CBuI96HF.js → css-extras-C28yWYxN.js} +1 -1
  54. package/dist/app/assets/{csv-CwTWJ9fy.js → csv-D8IAZwKO.js} +1 -1
  55. package/dist/app/assets/{cypher-D88tClXE.js → cypher-0hMRBt8D.js} +1 -1
  56. package/dist/app/assets/{d-BWG0iTE-.js → d-B5PQgXXo.js} +1 -1
  57. package/dist/app/assets/{dart-CuUeEfkB.js → dart-CvCyf8me.js} +1 -1
  58. package/dist/app/assets/{dataweave-Y5qfzSJO.js → dataweave-Izl0xtz9.js} +1 -1
  59. package/dist/app/assets/{dax-z1vJoJqt.js → dax-D-bGAkbS.js} +1 -1
  60. package/dist/app/assets/{dhall-fDEBchRN.js → dhall-DXIOSM5Q.js} +1 -1
  61. package/dist/app/assets/{diff-DWMZ6ihZ.js → diff-BE-xKdIi.js} +1 -1
  62. package/dist/app/assets/{django-DCaIOARB.js → django-DxEZdkeU.js} +1 -1
  63. package/dist/app/assets/{dns-zone-file-BDhluMwF.js → dns-zone-file-D406E4S7.js} +1 -1
  64. package/dist/app/assets/{docker-ADTABOD7.js → docker-BZkb2U00.js} +1 -1
  65. package/dist/app/assets/{dot-dm0hRI_d.js → dot-BGJNVmx1.js} +1 -1
  66. package/dist/app/assets/{ebnf-qFQ8NGRa.js → ebnf-_PEATas2.js} +1 -1
  67. package/dist/app/assets/{editorconfig-M1PNmDB7.js → editorconfig-C1UuLwJC.js} +1 -1
  68. package/dist/app/assets/{eiffel-Bk5GVHNc.js → eiffel-PzXVtlzf.js} +1 -1
  69. package/dist/app/assets/{ejs-BXbi7DMO.js → ejs-707c0691.js} +1 -1
  70. package/dist/app/assets/{elixir-nt7_rP4L.js → elixir-Bd3zWMjP.js} +1 -1
  71. package/dist/app/assets/{elm-CDcRzvrq.js → elm-DvEDEOdK.js} +1 -1
  72. package/dist/app/assets/{erb-D3tcO__0.js → erb-B6lZT1P9.js} +1 -1
  73. package/dist/app/assets/{erlang-B4u--80w.js → erlang-BwhqRmQk.js} +1 -1
  74. package/dist/app/assets/{etlua-BnbSsaIV.js → etlua-Bkg93PrU.js} +1 -1
  75. package/dist/app/assets/{excel-formula-DLztFxwy.js → excel-formula-BD0I0dyD.js} +1 -1
  76. package/dist/app/assets/{factor-k_q8DU3n.js → factor-CiQgOsxY.js} +1 -1
  77. package/dist/app/assets/{false-EqgS-Tkv.js → false-DlJ-f_Rc.js} +1 -1
  78. package/dist/app/assets/{firestore-security-rules-BNeM0zmk.js → firestore-security-rules-CxrEhPSm.js} +1 -1
  79. package/dist/app/assets/{flow-C6rIqrD4.js → flow-DOjTBDi4.js} +1 -1
  80. package/dist/app/assets/{fortran-CtcKyblB.js → fortran-D6uA-pWI.js} +1 -1
  81. package/dist/app/assets/{fsharp-DvC6evnC.js → fsharp-CFL1DcvT.js} +1 -1
  82. package/dist/app/assets/{ftl-B_JlxDIr.js → ftl-DzWZwecM.js} +1 -1
  83. package/dist/app/assets/{gap-gLflRQGF.js → gap-DatQeRFY.js} +1 -1
  84. package/dist/app/assets/{gcode-CnfAyvEE.js → gcode-5FSxboIT.js} +1 -1
  85. package/dist/app/assets/{gdscript-EKerpVNS.js → gdscript-Dz-OC8bG.js} +1 -1
  86. package/dist/app/assets/{gedcom-Ad0m6Zc2.js → gedcom-BS0539Ys.js} +1 -1
  87. package/dist/app/assets/{gherkin-uCNN1ATX.js → gherkin-BJKrWYAT.js} +1 -1
  88. package/dist/app/assets/{git-Bjayw6ss.js → git-DCjIevVw.js} +1 -1
  89. package/dist/app/assets/{glsl-bHhLBW8P.js → glsl-toSXKJrw.js} +1 -1
  90. package/dist/app/assets/{gml-BQNjMX9m.js → gml-DODsSWU7.js} +1 -1
  91. package/dist/app/assets/{gn-AZpH8rMM.js → gn-CzmtMWMm.js} +1 -1
  92. package/dist/app/assets/{go-B04a4gPD.js → go-BCQUEKVv.js} +1 -1
  93. package/dist/app/assets/{go-module-B-KN1Mlr.js → go-module-BbcV-9oG.js} +1 -1
  94. package/dist/app/assets/{graphql-DHjSGdnz.js → graphql-C_KxCYJO.js} +1 -1
  95. package/dist/app/assets/{groovy-DEug64iA.js → groovy-Cj97iKYK.js} +1 -1
  96. package/dist/app/assets/{haml-Bz8MK1Hn.js → haml-tLXJGYDb.js} +1 -1
  97. package/dist/app/assets/{handlebars-r_hDn-yj.js → handlebars-DIdVe3xN.js} +1 -1
  98. package/dist/app/assets/{haskell-DhRqgzP_.js → haskell-DPqw5u4H.js} +1 -1
  99. package/dist/app/assets/{haxe-DQFQxvE_.js → haxe-AsnHNCIR.js} +1 -1
  100. package/dist/app/assets/{hcl-BKp5VAPU.js → hcl-C6aoWR34.js} +1 -1
  101. package/dist/app/assets/{hlsl-CghIWoQj.js → hlsl-B2hhU30-.js} +1 -1
  102. package/dist/app/assets/{hoon-Dm-fnZxk.js → hoon-Bs-KhWO3.js} +1 -1
  103. package/dist/app/assets/{hpkp-lkuwmSbZ.js → hpkp-C-J4O-Mp.js} +1 -1
  104. package/dist/app/assets/{hsts-Wd4KhVht.js → hsts-BNFEkSnm.js} +1 -1
  105. package/dist/app/assets/{http-CmfhFPEg.js → http-D7UlQANy.js} +1 -1
  106. package/dist/app/assets/{ichigojam-Dc2L55jh.js → ichigojam-B01TJ8BA.js} +1 -1
  107. package/dist/app/assets/{icon-DdCxyxIH.js → icon-Ca_ghvQd.js} +1 -1
  108. package/dist/app/assets/{icu-message-format-BQYI0sFj.js → icu-message-format-CkcsJ0ML.js} +1 -1
  109. package/dist/app/assets/{idris-C5tNclWm.js → idris-BApVxI9a.js} +1 -1
  110. package/dist/app/assets/{iecst-BKVUYIbF.js → iecst-CXLR8sGn.js} +1 -1
  111. package/dist/app/assets/{ignore-CfwJhNgR.js → ignore-7LzAeAFj.js} +1 -1
  112. package/dist/app/assets/{index-3k-bKyOc.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-Cdcod1ei.js → inform7-CtnRN-Iq.js} +1 -1
  115. package/dist/app/assets/{ini-C2cDeXd9.js → ini-Cjpl6yTL.js} +1 -1
  116. package/dist/app/assets/{io-DuXAvwXa.js → io-C6W_EboY.js} +1 -1
  117. package/dist/app/assets/{j-BYVASY6X.js → j-BOBDun2W.js} +1 -1
  118. package/dist/app/assets/{java-4VrDHvxX.js → java-CNwVyXY2.js} +1 -1
  119. package/dist/app/assets/{javadoc-CuF60fip.js → javadoc-DS6hxu7_.js} +1 -1
  120. package/dist/app/assets/{javadoclike-C44_Y4pE.js → javadoclike-J6YT11JS.js} +1 -1
  121. package/dist/app/assets/{javascript-DWYY3Hmb.js → javascript-IbEfuVSB.js} +1 -1
  122. package/dist/app/assets/{javastacktrace-C1VDqTgi.js → javastacktrace-DjxwGV26.js} +1 -1
  123. package/dist/app/assets/{jexl-DeQ9RUDn.js → jexl-TLHmHaQ5.js} +1 -1
  124. package/dist/app/assets/{jolie-BRudN8eg.js → jolie-CLk71kur.js} +1 -1
  125. package/dist/app/assets/{jq-CtXc1LOh.js → jq-DZKnIQZM.js} +1 -1
  126. package/dist/app/assets/{js-extras-CvvdpdSS.js → js-extras-CJab09ti.js} +1 -1
  127. package/dist/app/assets/{js-templates-M2G0Wqhr.js → js-templates-CQGqrHhi.js} +1 -1
  128. package/dist/app/assets/{jsdoc-Bu2t9JLm.js → jsdoc--ymvl4aq.js} +1 -1
  129. package/dist/app/assets/{json-Cq-mABJ1.js → json-D9b-V85G.js} +1 -1
  130. package/dist/app/assets/{json5-4HqEH5T5.js → json5-LgA47n7A.js} +1 -1
  131. package/dist/app/assets/{jsonp-BEtlh398.js → jsonp-Cvwp3f8M.js} +1 -1
  132. package/dist/app/assets/{jsstacktrace-Dx0Y7B74.js → jsstacktrace-z8t2H6h6.js} +1 -1
  133. package/dist/app/assets/{jsx-DsbRpy7E.js → jsx-B71LrwNd.js} +1 -1
  134. package/dist/app/assets/{julia-DcsLQWYM.js → julia-DCATdxwO.js} +1 -1
  135. package/dist/app/assets/{keepalived-Dv8pDJFo.js → keepalived-DVYYbgrL.js} +1 -1
  136. package/dist/app/assets/{keyman-Ci2jdsqC.js → keyman-DLyOXnhf.js} +1 -1
  137. package/dist/app/assets/{kotlin-SayKmA5u.js → kotlin-CYoDfyDA.js} +1 -1
  138. package/dist/app/assets/{kumir-DMWOjK8x.js → kumir-CPWiEvmL.js} +1 -1
  139. package/dist/app/assets/{kusto-aI0GRJrT.js → kusto-BkfRYk0W.js} +1 -1
  140. package/dist/app/assets/{latex-DTp_-VF9.js → latex-BEjZ0ppC.js} +1 -1
  141. package/dist/app/assets/{latte-LZMPGx1E.js → latte-DaZOqdGV.js} +1 -1
  142. package/dist/app/assets/{less-gB0H6bSD.js → less-BmKsj1gN.js} +1 -1
  143. package/dist/app/assets/{lilypond-F37QUedl.js → lilypond-mmng28aJ.js} +1 -1
  144. package/dist/app/assets/{liquid-D--Wm3ha.js → liquid-BuuJO6_6.js} +1 -1
  145. package/dist/app/assets/{lisp-DIM2rPYE.js → lisp-DnffFM5N.js} +1 -1
  146. package/dist/app/assets/{livescript-BXTz0GVS.js → livescript-BSsr00Wr.js} +1 -1
  147. package/dist/app/assets/{llvm-ao5q-dod.js → llvm-37YjcHN5.js} +1 -1
  148. package/dist/app/assets/{log-DSdp1PUj.js → log-D3l5N3To.js} +1 -1
  149. package/dist/app/assets/{lolcode-DTgLBwjE.js → lolcode-C0Q2M_6s.js} +1 -1
  150. package/dist/app/assets/{lua-D1IySTDW.js → lua-DcLwN4Tg.js} +1 -1
  151. package/dist/app/assets/{magma-By0NJTpR.js → magma-CK0Amip9.js} +1 -1
  152. package/dist/app/assets/{makefile-CGoRDnpf.js → makefile-CtpS-RoO.js} +1 -1
  153. package/dist/app/assets/{markdown-D1L-HQf5.js → markdown-BNK3F4ql.js} +1 -1
  154. package/dist/app/assets/{markup-raYrASfk.js → markup-C9GIL65H.js} +1 -1
  155. package/dist/app/assets/{markup-templating-CssRUGmY.js → markup-templating-Du1J3ADP.js} +1 -1
  156. package/dist/app/assets/{matlab-Bkpr6UVS.js → matlab-DEM6O1Ul.js} +1 -1
  157. package/dist/app/assets/{maxscript-BqOK2v7p.js → maxscript-DMvqa3gf.js} +1 -1
  158. package/dist/app/assets/{mel-CH03lWHq.js → mel-C8DBIw1g.js} +1 -1
  159. package/dist/app/assets/{mermaid-BN5SfVaW.js → mermaid-CVko6NSq.js} +1 -1
  160. package/dist/app/assets/{mizar-B5EFFzYR.js → mizar-CwYm3_It.js} +1 -1
  161. package/dist/app/assets/{mongodb-6kvQytJm.js → mongodb-DRqGwjq6.js} +1 -1
  162. package/dist/app/assets/{monkey-CrULcDcp.js → monkey-BxiKe6Nr.js} +1 -1
  163. package/dist/app/assets/{moonscript-BUk4hr1Y.js → moonscript-CJyt1xoM.js} +1 -1
  164. package/dist/app/assets/{n1ql-BD0zH2HW.js → n1ql-BBmjIGEU.js} +1 -1
  165. package/dist/app/assets/{n4js-BmHkGn_8.js → n4js-ByKsJMJL.js} +1 -1
  166. package/dist/app/assets/{nand2tetris-hdl-B8Jd5FCr.js → nand2tetris-hdl-BTSXj71h.js} +1 -1
  167. package/dist/app/assets/{naniscript-B6Iuqu44.js → naniscript-C4jykFVF.js} +1 -1
  168. package/dist/app/assets/{nasm-CenqrlGz.js → nasm-DPA0eXtX.js} +1 -1
  169. package/dist/app/assets/{neon-BlyFo4oH.js → neon-upN4Ak64.js} +1 -1
  170. package/dist/app/assets/{nevod-FI2_D4MV.js → nevod-CdttHB8F.js} +1 -1
  171. package/dist/app/assets/{nginx-vOnlcjjK.js → nginx-DI1fsQ3j.js} +1 -1
  172. package/dist/app/assets/{nim-BTBcND8I.js → nim-D7kc_mK9.js} +1 -1
  173. package/dist/app/assets/{nix-CxWC3x_A.js → nix-BUG5ppr9.js} +1 -1
  174. package/dist/app/assets/{nsis-DWRIAzZl.js → nsis-BnXhmmxO.js} +1 -1
  175. package/dist/app/assets/{objectivec-DnNYqiEV.js → objectivec-Bu4dOfb9.js} +1 -1
  176. package/dist/app/assets/{ocaml-MWcE4wPG.js → ocaml-aT7VVPiL.js} +1 -1
  177. package/dist/app/assets/{opencl-CEoyfv1f.js → opencl-BzyWcYkI.js} +1 -1
  178. package/dist/app/assets/{openqasm-B9J2Sj4l.js → openqasm-b2yFBJdq.js} +1 -1
  179. package/dist/app/assets/{oz-Q6fkizOZ.js → oz-D46TtIuw.js} +1 -1
  180. package/dist/app/assets/{parigp-qViHuHAI.js → parigp-BAJyhdut.js} +1 -1
  181. package/dist/app/assets/{parser-D1TDrUDK.js → parser-B-ALvauC.js} +1 -1
  182. package/dist/app/assets/{pascal-C_GcAzVz.js → pascal-B0ap4FDW.js} +1 -1
  183. package/dist/app/assets/{pascaligo-BGECHz22.js → pascaligo-ChOneu9-.js} +1 -1
  184. package/dist/app/assets/{pcaxis-5_0lQ0o8.js → pcaxis-DTAmxHgs.js} +1 -1
  185. package/dist/app/assets/{peoplecode-C-_cyguZ.js → peoplecode-dQfUy8zn.js} +1 -1
  186. package/dist/app/assets/{perl-Bhu_9hey.js → perl-CYk00e1Q.js} +1 -1
  187. package/dist/app/assets/{php-CUhDCFAS.js → php-DvSqFnSN.js} +1 -1
  188. package/dist/app/assets/{php-extras-DSKZN6SK.js → php-extras-BFjUbIU6.js} +1 -1
  189. package/dist/app/assets/{phpdoc-C1FLn7tF.js → phpdoc-Di7rKCNL.js} +1 -1
  190. package/dist/app/assets/{plsql-DMfpGYGl.js → plsql-dX0-BKqD.js} +1 -1
  191. package/dist/app/assets/{powerquery-BRhf1hs3.js → powerquery-3xq4KaAs.js} +1 -1
  192. package/dist/app/assets/{powershell-CRaHW94B.js → powershell-BbXooszO.js} +1 -1
  193. package/dist/app/assets/{processing-I8nRKQlO.js → processing-GWbfNCzH.js} +1 -1
  194. package/dist/app/assets/{prolog-FrUePJiK.js → prolog-Tb2TbunJ.js} +1 -1
  195. package/dist/app/assets/{promql-BvAq16Ge.js → promql-QS8vHhL7.js} +1 -1
  196. package/dist/app/assets/{properties-DbxGMSRW.js → properties-BJ8AWlqX.js} +1 -1
  197. package/dist/app/assets/{protobuf-DrIGvjWL.js → protobuf-De-puAg3.js} +1 -1
  198. package/dist/app/assets/{psl-0HKrjoj1.js → psl-hZft3C8K.js} +1 -1
  199. package/dist/app/assets/{pug-CxH9bsi7.js → pug-BcYHdk-i.js} +1 -1
  200. package/dist/app/assets/{puppet-DHgc1gZg.js → puppet-BWbqDQJD.js} +1 -1
  201. package/dist/app/assets/{pure-B0kLfpMx.js → pure-Bz2pjTxR.js} +1 -1
  202. package/dist/app/assets/{purebasic-Ca1sSC6z.js → purebasic-BlO48lYx.js} +1 -1
  203. package/dist/app/assets/{purescript-BQK7br_N.js → purescript-BxSMm2Br.js} +1 -1
  204. package/dist/app/assets/{q-DwDhLegJ.js → q-DDUTW9aK.js} +1 -1
  205. package/dist/app/assets/{qml-CtbldBP6.js → qml-DisOV-LV.js} +1 -1
  206. package/dist/app/assets/{qore-D3LZb6ma.js → qore-FNRP4gBF.js} +1 -1
  207. package/dist/app/assets/{qsharp-CiLCdqjv.js → qsharp-DhtMV0oO.js} +1 -1
  208. package/dist/app/assets/{r-Dilam18q.js → r-CyiuHjNN.js} +1 -1
  209. package/dist/app/assets/{racket-BBckdZP5.js → racket-DFgoSckH.js} +1 -1
  210. package/dist/app/assets/{reason-C20wa4Ng.js → reason-HhYbY7K3.js} +1 -1
  211. package/dist/app/assets/{regex-COQGBYpa.js → regex-jU5TpvM-.js} +1 -1
  212. package/dist/app/assets/{rego-pKEk3RLD.js → rego-BCjDPrQO.js} +1 -1
  213. package/dist/app/assets/{renpy-CDmk4rPI.js → renpy-BTSgQi2v.js} +1 -1
  214. package/dist/app/assets/{rest-Dl5zGTqN.js → rest-BLcZ4e-5.js} +1 -1
  215. package/dist/app/assets/{rip-Dn6GOHWS.js → rip-SltRJnuI.js} +1 -1
  216. package/dist/app/assets/{roboconf-BBJnM0BC.js → roboconf-B-GZm2Oe.js} +1 -1
  217. package/dist/app/assets/{robotframework-B3glKH4d.js → robotframework-BOt8S6cX.js} +1 -1
  218. package/dist/app/assets/{ruby-BQGh_6Rr.js → ruby-CVfYH0zM.js} +1 -1
  219. package/dist/app/assets/{rust-QlUGh2de.js → rust-B6mEp4Sj.js} +1 -1
  220. package/dist/app/assets/{sas-BDC68F8y.js → sas-DvEI8RJ0.js} +1 -1
  221. package/dist/app/assets/{sass-DieDF6XQ.js → sass-Cv25Jxqq.js} +1 -1
  222. package/dist/app/assets/{scala-D3MUhHYj.js → scala-CyqNr7Uv.js} +1 -1
  223. package/dist/app/assets/{scheme-BGgE-kqm.js → scheme-ji0XoXLf.js} +1 -1
  224. package/dist/app/assets/{scss--_H8DdDE.js → scss-B7_0neO_.js} +1 -1
  225. package/dist/app/assets/{shell-session-LGnbrToj.js → shell-session-CqZEoMQD.js} +1 -1
  226. package/dist/app/assets/{smali-CBlokkez.js → smali-DKSzZYkI.js} +1 -1
  227. package/dist/app/assets/{smalltalk-BbGkP-W2.js → smalltalk-BOA4piuq.js} +1 -1
  228. package/dist/app/assets/{smarty-HZnEokqM.js → smarty-Du99BSgN.js} +1 -1
  229. package/dist/app/assets/{sml-D3kN5fHv.js → sml-BJedIA4B.js} +1 -1
  230. package/dist/app/assets/{solidity-COzqk2SX.js → solidity-DidQwG5Z.js} +1 -1
  231. package/dist/app/assets/{solution-file-B_WMCfok.js → solution-file-Bx0d9qN8.js} +1 -1
  232. package/dist/app/assets/{soy-BnjJHZA_.js → soy-BBLv3Cfa.js} +1 -1
  233. package/dist/app/assets/{sparql-B5TBM1ys.js → sparql-Da5WZKbL.js} +1 -1
  234. package/dist/app/assets/{splunk-spl-B2w0z96G.js → splunk-spl-DbJKl8So.js} +1 -1
  235. package/dist/app/assets/{sqf-XPpbNZWG.js → sqf-CYrx0jxf.js} +1 -1
  236. package/dist/app/assets/{sql-BdoHQUvu.js → sql-Gv-aOlOf.js} +1 -1
  237. package/dist/app/assets/{squirrel-C7PSbqa8.js → squirrel-FpIGPPw4.js} +1 -1
  238. package/dist/app/assets/{stan-j2SrNXay.js → stan-Dq001Nrk.js} +1 -1
  239. package/dist/app/assets/{stylus-B4ESB7LK.js → stylus-aatfgWwe.js} +1 -1
  240. package/dist/app/assets/{swift-0REuIxse.js → swift-pn7VW95d.js} +1 -1
  241. package/dist/app/assets/{systemd-C-jON-S5.js → systemd-9capsVJ6.js} +1 -1
  242. package/dist/app/assets/{t4-cs-73fI4ZnY.js → t4-cs-CKXcczci.js} +1 -1
  243. package/dist/app/assets/{t4-templating-B7K5zZjl.js → t4-templating-1wTayb8u.js} +1 -1
  244. package/dist/app/assets/{t4-vb-nmeCn59t.js → t4-vb-B_O7wBow.js} +1 -1
  245. package/dist/app/assets/{tap-CC3qoO-h.js → tap-D-TV5_gQ.js} +1 -1
  246. package/dist/app/assets/{tcl-CXW6dWdJ.js → tcl-BaVob1Om.js} +1 -1
  247. package/dist/app/assets/{textile-CcZgymJI.js → textile-COMk-HmI.js} +1 -1
  248. package/dist/app/assets/{toml-Bt-KwXSX.js → toml-D9NJpArC.js} +1 -1
  249. package/dist/app/assets/{tremor-CfkeSZOn.js → tremor-rCNHwdQL.js} +1 -1
  250. package/dist/app/assets/{tt2-VjO-nd3t.js → tt2-DTDvfOgc.js} +1 -1
  251. package/dist/app/assets/{turtle-C7lex_1P.js → turtle-D8pkqXh1.js} +1 -1
  252. package/dist/app/assets/{twig-ydMCwYBK.js → twig-DxSF8gqH.js} +1 -1
  253. package/dist/app/assets/{typescript-BgbE9enz.js → typescript-Caebatmk.js} +1 -1
  254. package/dist/app/assets/{typoscript-mPjPihGb.js → typoscript-B3uk1kES.js} +1 -1
  255. package/dist/app/assets/{unrealscript-B1h3FIp7.js → unrealscript-ZNoSG8ji.js} +1 -1
  256. package/dist/app/assets/{uorazor-BixEY3TF.js → uorazor-LekoNNOo.js} +1 -1
  257. package/dist/app/assets/{uri-a9CNoVTl.js → uri-B8YcIzOv.js} +1 -1
  258. package/dist/app/assets/{v-Bun8Oo4V.js → v-6rOne2a0.js} +1 -1
  259. package/dist/app/assets/{vala-Yh7IL00A.js → vala-CjEJEdsP.js} +1 -1
  260. package/dist/app/assets/{vbnet-D1bws4TN.js → vbnet-DBPmBm7_.js} +1 -1
  261. package/dist/app/assets/{velocity-BTBe_YdS.js → velocity-DOooMwL8.js} +1 -1
  262. package/dist/app/assets/{verilog-CZb0BmwQ.js → verilog-Cq0ZocvP.js} +1 -1
  263. package/dist/app/assets/{vhdl-GveK8MNv.js → vhdl-Dxs_xidb.js} +1 -1
  264. package/dist/app/assets/{vim-BFnGQW9p.js → vim-BqsnXwB6.js} +1 -1
  265. package/dist/app/assets/{visual-basic-C6IoFdCy.js → visual-basic-zAzjvaqP.js} +1 -1
  266. package/dist/app/assets/{warpscript-BhRK7JpJ.js → warpscript-D9hbfr6_.js} +1 -1
  267. package/dist/app/assets/{wasm-BPlRsQZE.js → wasm-C4TU9VDY.js} +1 -1
  268. package/dist/app/assets/{web-idl-DsR59OqK.js → web-idl-DD5JcddQ.js} +1 -1
  269. package/dist/app/assets/{wiki-CqKbsRaB.js → wiki-Des21yVK.js} +1 -1
  270. package/dist/app/assets/{wolfram-DBwl_BKC.js → wolfram-B7enpov1.js} +1 -1
  271. package/dist/app/assets/{wren-BiiMWCe5.js → wren-Rr8h-Ayu.js} +1 -1
  272. package/dist/app/assets/{xeora-BAHjHPpy.js → xeora-EjcLXBhx.js} +1 -1
  273. package/dist/app/assets/{xml-doc-C7XMC-Tu.js → xml-doc-uaTxx6-m.js} +1 -1
  274. package/dist/app/assets/{xojo-B8_jJVJy.js → xojo-CX6G8nhh.js} +1 -1
  275. package/dist/app/assets/{xquery-C4b31bTA.js → xquery-DvPb3Uw9.js} +1 -1
  276. package/dist/app/assets/{yaml-BZKzmGBJ.js → yaml-D-l_Y2hx.js} +1 -1
  277. package/dist/app/assets/{yang-Bbsnlksx.js → yang-KBoIIT4_.js} +1 -1
  278. package/dist/app/assets/{zig-BnOm7PBz.js → zig-_uNXp9cY.js} +1 -1
  279. package/dist/app/index.html +2 -2
  280. package/dist/index.cjs +391 -224
  281. package/dist/index.d.cts +24 -1
  282. package/dist/index.d.ts +24 -1
  283. package/dist/index.js +387 -224
  284. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/components/chat.tsx
2
- import * as React18 from "react";
2
+ import * as React20 from "react";
3
3
  import { ArrowDown, FileText as FileText2, Loader2 as Loader22, Pencil as Pencil3, RefreshCw as RefreshCw2, X as X2 } from "lucide-react";
4
4
 
5
5
  // src/lib/utils.ts
@@ -8,19 +8,14 @@ import { twMerge } from "tailwind-merge";
8
8
  function cn(...inputs) {
9
9
  return twMerge(clsx(inputs));
10
10
  }
11
- function getRoundedClass(themeRadius) {
12
- switch (themeRadius) {
13
- case "pill":
14
- return "rounded-full";
15
- case "round":
16
- return "rounded-xl";
17
- case "soft":
18
- return "rounded-lg";
19
- case "sharp":
20
- return "rounded-none";
21
- default:
22
- return "rounded-full";
23
- }
11
+ var THEME_RADIUS_PRESET_CLASS = {
12
+ pill: "rounded-full",
13
+ round: "rounded-xl",
14
+ soft: "rounded-lg",
15
+ sharp: "rounded-none"
16
+ };
17
+ function getRoundedClass(themeRadius, fallback = "rounded-full") {
18
+ return themeRadius ? THEME_RADIUS_PRESET_CLASS[themeRadius] : fallback;
24
19
  }
25
20
  function createMessageId() {
26
21
  return globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
@@ -52,25 +47,6 @@ import {
52
47
  import "@langchain/core/messages/tool";
53
48
  import { ChatMessageEventTypeEnum, ChatMessageTypeEnum } from "@xpert-ai/chatkit-types";
54
49
 
55
- // src/hooks/useParentMessenger.tsx
56
- import { useContext, useEffect as useEffect2, useRef as useRef2 } from "react";
57
-
58
- // src/providers/ParentMessenger.tsx
59
- import { createContext, useCallback, useEffect, useMemo, useRef } from "react";
60
- import { STATE_VARIABLE_HUMAN as STATE_VARIABLE_HUMAN2 } from "@xpert-ai/chatkit-types";
61
-
62
- // src/hooks/useStream.ts
63
- var streamRef = { current: null };
64
- function useStreamManager() {
65
- return {
66
- streamRef,
67
- stream: streamRef.current,
68
- setStream: (stream) => {
69
- streamRef.current = stream;
70
- }
71
- };
72
- }
73
-
74
50
  // src/lib/request-options.ts
75
51
  import {
76
52
  STATE_VARIABLE_HUMAN
@@ -82,16 +58,53 @@ function resolveHumanStateValue(value) {
82
58
  const human = value?.[STATE_VARIABLE_HUMAN];
83
59
  return isRecord(human) ? human : {};
84
60
  }
61
+ function splitEnvCarrier(value) {
62
+ if (!isRecord(value)) {
63
+ return { value: {}, env: {} };
64
+ }
65
+ const { env, ...rest } = value;
66
+ return {
67
+ value: rest,
68
+ env: isRecord(env) ? env : {}
69
+ };
70
+ }
71
+ function mergeRequestOptions(input) {
72
+ const defaultContext = splitEnvCarrier(input.defaults?.context);
73
+ const explicitContext = splitEnvCarrier(input.context);
74
+ const defaultConfig = isRecord(input.defaults?.config) ? input.defaults?.config : {};
75
+ const explicitConfig = isRecord(input.config) ? input.config : {};
76
+ const mergedEnv = {
77
+ ...defaultContext.env,
78
+ ...explicitContext.env
79
+ };
80
+ const mergedContextBase = {
81
+ ...defaultContext.value,
82
+ ...explicitContext.value
83
+ };
84
+ const mergedConfig = {
85
+ ...defaultConfig,
86
+ ...explicitConfig
87
+ };
88
+ const hasEnv = Object.keys(mergedEnv).length > 0;
89
+ const mergedContext = hasEnv ? { ...mergedContextBase, env: mergedEnv } : mergedContextBase;
90
+ const hasContext = Object.keys(mergedContextBase).length > 0 || hasEnv;
91
+ const hasConfig = Object.keys(mergedConfig).length > 0;
92
+ return {
93
+ ...hasContext ? { context: mergedContext } : {},
94
+ ...hasConfig ? { config: mergedConfig } : {}
95
+ };
96
+ }
85
97
  function buildInjectedRequestOptions(input) {
86
98
  const defaultState = input.defaults?.state;
87
99
  const explicitState = input.state;
88
- const defaultContext = input.defaults?.context;
89
- const explicitContext = input.context;
90
- const mergedContext = {
91
- ...defaultContext ?? {},
92
- ...explicitContext ?? {}
93
- };
94
- const hasContext = Object.keys(mergedContext).length > 0;
100
+ const normalizedRequest = mergeRequestOptions({
101
+ defaults: {
102
+ context: input.defaults?.context,
103
+ config: input.defaults?.config
104
+ },
105
+ context: input.context,
106
+ config: input.config
107
+ });
95
108
  const mergedState = {
96
109
  ...defaultState ?? {},
97
110
  ...explicitState ?? {}
@@ -107,7 +120,27 @@ function buildInjectedRequestOptions(input) {
107
120
  const hasState = Object.keys(mergedState).length > 0;
108
121
  return {
109
122
  ...hasState ? { state: mergedState } : {},
110
- ...hasContext ? { context: mergedContext } : {}
123
+ ...normalizedRequest.context ? { context: normalizedRequest.context } : {},
124
+ ...normalizedRequest.config ? { config: normalizedRequest.config } : {}
125
+ };
126
+ }
127
+
128
+ // src/hooks/useParentMessenger.tsx
129
+ import { useContext, useEffect as useEffect2, useRef as useRef2 } from "react";
130
+
131
+ // src/providers/ParentMessenger.tsx
132
+ import { createContext, useCallback, useEffect, useMemo, useRef } from "react";
133
+ import { STATE_VARIABLE_HUMAN as STATE_VARIABLE_HUMAN2 } from "@xpert-ai/chatkit-types";
134
+
135
+ // src/hooks/useStream.ts
136
+ var streamRef = { current: null };
137
+ function useStreamManager() {
138
+ return {
139
+ streamRef,
140
+ stream: streamRef.current,
141
+ setStream: (stream) => {
142
+ streamRef.current = stream;
143
+ }
111
144
  };
112
145
  }
113
146
 
@@ -205,6 +238,7 @@ function ParentMessengerProvider({
205
238
  {
206
239
  newThread: params.newThread,
207
240
  ...requestOptions.context ? { context: requestOptions.context } : {},
241
+ ...requestOptions.config ? { config: requestOptions.config } : {},
208
242
  optimisticValues: (prev) => {
209
243
  const prevMessages = prev?.messages ?? [];
210
244
  return { ...prev, messages: [...prevMessages, newMessage] };
@@ -536,6 +570,10 @@ var en_US_default = {
536
570
  errorToast: "An error occurred. Please try again.",
537
571
  errorLabel: "Error:",
538
572
  langGraphMessages: "LangGraph Messages..."
573
+ },
574
+ message: {
575
+ answer: "Answer",
576
+ reasoning: "Reasoning"
539
577
  }
540
578
  };
541
579
 
@@ -595,6 +633,10 @@ var zh_CN_default = {
595
633
  errorToast: "\u53D1\u751F\u9519\u8BEF\uFF0C\u8BF7\u91CD\u8BD5\u3002",
596
634
  errorLabel: "\u9519\u8BEF\uFF1A",
597
635
  langGraphMessages: "LangGraph \u6D88\u606F..."
636
+ },
637
+ message: {
638
+ answer: "\u56DE\u7B54",
639
+ reasoning: "\u63A8\u7406"
598
640
  }
599
641
  };
600
642
 
@@ -2157,6 +2199,7 @@ function renderContent(content, messageId) {
2157
2199
  return /* @__PURE__ */ jsx19("div", { className: "space-y-3", children: content.map((item, index) => renderContentItem(item, index, messageId)) });
2158
2200
  }
2159
2201
  function AssistantMessage({ message, className, isStreaming = false }) {
2202
+ const { t } = useChatkitTranslation();
2160
2203
  const content = message.content;
2161
2204
  const hasContent = content != null && !(typeof content === "string" && content.trim() === "" || Array.isArray(message.content) && message.content.length === 0);
2162
2205
  const hasReasoning = Array.isArray(message.reasoning) && message.reasoning.some((item) => item.text?.trim());
@@ -2172,8 +2215,8 @@ function AssistantMessage({ message, className, isStreaming = false }) {
2172
2215
  className: "w-full",
2173
2216
  children: [
2174
2217
  /* @__PURE__ */ jsxs8(TabsList, { className: "h-9", children: [
2175
- /* @__PURE__ */ jsx19(TabsTrigger, { value: "answer", children: "Answer" }),
2176
- /* @__PURE__ */ jsx19(TabsTrigger, { value: "reasoning", children: "Reasoning" })
2218
+ /* @__PURE__ */ jsx19(TabsTrigger, { value: "answer", children: t("message.answer") }),
2219
+ /* @__PURE__ */ jsx19(TabsTrigger, { value: "reasoning", children: t("message.reasoning") })
2177
2220
  ] }),
2178
2221
  /* @__PURE__ */ jsx19(TabsContent, { value: "answer", className: "space-y-3", children: answerNode }),
2179
2222
  /* @__PURE__ */ jsx19(TabsContent, { value: "reasoning", className: "space-y-3", children: reasoningNode })
@@ -2299,8 +2342,136 @@ function StartScreen({ startScreen, onPromptClick, className }) {
2299
2342
  ] });
2300
2343
  }
2301
2344
 
2302
- // src/hooks/useThreads.ts
2345
+ // src/components/ui/chatkit-avatar.tsx
2346
+ import "react";
2347
+
2348
+ // src/components/ui/avatar.tsx
2303
2349
  import * as React16 from "react";
2350
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
2351
+ import { jsx as jsx22 } from "react/jsx-runtime";
2352
+ var Avatar = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx22(
2353
+ AvatarPrimitive.Root,
2354
+ {
2355
+ ref,
2356
+ className: cn(
2357
+ "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
2358
+ className
2359
+ ),
2360
+ ...props
2361
+ }
2362
+ ));
2363
+ Avatar.displayName = AvatarPrimitive.Root.displayName;
2364
+ var AvatarImage = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx22(
2365
+ AvatarPrimitive.Image,
2366
+ {
2367
+ ref,
2368
+ className: cn("aspect-square h-full w-full", className),
2369
+ ...props
2370
+ }
2371
+ ));
2372
+ AvatarImage.displayName = AvatarPrimitive.Image.displayName;
2373
+ var AvatarFallback = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx22(
2374
+ AvatarPrimitive.Fallback,
2375
+ {
2376
+ ref,
2377
+ className: cn(
2378
+ "flex h-full w-full items-center justify-center rounded-full bg-muted",
2379
+ className
2380
+ ),
2381
+ ...props
2382
+ }
2383
+ ));
2384
+ AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
2385
+
2386
+ // src/components/ui/chatkit-avatar.tsx
2387
+ import { jsx as jsx23, jsxs as jsxs11 } from "react/jsx-runtime";
2388
+ function asRecord(value) {
2389
+ return value && typeof value === "object" ? value : null;
2390
+ }
2391
+ function getNonEmptyString(value) {
2392
+ if (typeof value !== "string") return void 0;
2393
+ const normalized = value.trim();
2394
+ return normalized || void 0;
2395
+ }
2396
+ function unicodeFromUnified(unified) {
2397
+ const normalized = getNonEmptyString(unified);
2398
+ if (!normalized) return void 0;
2399
+ try {
2400
+ return normalized.split("-").map((hex) => String.fromCodePoint(Number.parseInt(hex, 16))).join("");
2401
+ } catch {
2402
+ return void 0;
2403
+ }
2404
+ }
2405
+ function getEmojiCharacter(avatar) {
2406
+ return unicodeFromUnified(avatar?.emoji?.unified);
2407
+ }
2408
+ function getAvatarFallback(label) {
2409
+ return label.trim().charAt(0).toUpperCase() || "A";
2410
+ }
2411
+ function normalizeChatkitAvatar(rawAvatar) {
2412
+ if (typeof rawAvatar === "string") {
2413
+ const url = getNonEmptyString(rawAvatar);
2414
+ return url ? { url } : null;
2415
+ }
2416
+ const avatarRecord = asRecord(rawAvatar);
2417
+ if (!avatarRecord) return null;
2418
+ const emojiRecord = asRecord(avatarRecord.emoji);
2419
+ const avatar = {
2420
+ background: getNonEmptyString(avatarRecord.background),
2421
+ url: getNonEmptyString(avatarRecord.url),
2422
+ useNotoColor: Boolean(avatarRecord.useNotoColor)
2423
+ };
2424
+ if (emojiRecord) {
2425
+ avatar.emoji = {
2426
+ colons: getNonEmptyString(emojiRecord.colons),
2427
+ id: getNonEmptyString(emojiRecord.id),
2428
+ unified: getNonEmptyString(emojiRecord.unified)
2429
+ };
2430
+ }
2431
+ return avatar.url || avatar.background || avatar.emoji?.id || avatar.emoji?.unified ? avatar : null;
2432
+ }
2433
+ function extractAssistantAvatar(assistant) {
2434
+ const assistantRecord = asRecord(assistant);
2435
+ const metadata = asRecord(assistant.metadata);
2436
+ const rawAvatar = assistantRecord?.avatar ?? metadata?.avatar;
2437
+ const avatar = normalizeChatkitAvatar(rawAvatar);
2438
+ if (avatar) return avatar;
2439
+ const metadataAvatar = getNonEmptyString(metadata?.avatarUrl) ?? getNonEmptyString(metadata?.avatar_url);
2440
+ return metadataAvatar ? { url: metadataAvatar } : null;
2441
+ }
2442
+ function ChatkitAvatar({
2443
+ avatar,
2444
+ className,
2445
+ fallback,
2446
+ fallbackClassName,
2447
+ imageClassName,
2448
+ label,
2449
+ style,
2450
+ ...props
2451
+ }) {
2452
+ const { theme } = useTheme();
2453
+ const emojiCharacter = getEmojiCharacter(avatar);
2454
+ const fallbackText = fallback || getAvatarFallback(label);
2455
+ const roundedClass = getRoundedClass(theme.radius);
2456
+ const emojiStyle = avatar?.useNotoColor ? { fontFamily: '"Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", sans-serif' } : void 0;
2457
+ const fallbackStyle = {
2458
+ ...avatar?.background ? { background: avatar.background } : {}
2459
+ };
2460
+ return /* @__PURE__ */ jsxs11(Avatar, { className: cn(roundedClass, className), style, ...props, children: [
2461
+ avatar?.url ? /* @__PURE__ */ jsx23(AvatarImage, { className: imageClassName, src: avatar.url, alt: label }) : null,
2462
+ /* @__PURE__ */ jsx23(
2463
+ AvatarFallback,
2464
+ {
2465
+ className: cn(roundedClass, "text-sm font-medium text-foreground", fallbackClassName),
2466
+ style: fallbackStyle,
2467
+ children: emojiCharacter ? /* @__PURE__ */ jsx23("span", { className: "text-[1.1em] leading-none", style: emojiStyle, children: emojiCharacter }) : fallbackText
2468
+ }
2469
+ )
2470
+ ] });
2471
+ }
2472
+
2473
+ // src/hooks/useThreads.ts
2474
+ import * as React18 from "react";
2304
2475
  var DEFAULT_LIMIT = 50;
2305
2476
  var getThreadTitle = (threadRecord) => {
2306
2477
  const title = threadRecord.title?.trim();
@@ -2338,16 +2509,16 @@ function useThreads(limit = DEFAULT_LIMIT) {
2338
2509
  isReady,
2339
2510
  isLoading: isStreamLoading
2340
2511
  } = useStreamContext();
2341
- const [threadRecords, setThreadRecords] = React16.useState([]);
2342
- const [isLoading, setIsLoading] = React16.useState(false);
2343
- const [error, setError] = React16.useState(null);
2344
- const upsertThreadRecord = React16.useCallback((threadRecord) => {
2512
+ const [threadRecords, setThreadRecords] = React18.useState([]);
2513
+ const [isLoading, setIsLoading] = React18.useState(false);
2514
+ const [error, setError] = React18.useState(null);
2515
+ const upsertThreadRecord = React18.useCallback((threadRecord) => {
2345
2516
  setThreadRecords((prev) => {
2346
2517
  const next = prev.filter((item) => item.id !== threadRecord.id);
2347
2518
  return sortThreadRecords([threadRecord, ...next]);
2348
2519
  });
2349
2520
  }, []);
2350
- const refreshThreads = React16.useCallback(async () => {
2521
+ const refreshThreads = React18.useCallback(async () => {
2351
2522
  setIsLoading(true);
2352
2523
  setError(null);
2353
2524
  try {
@@ -2363,7 +2534,7 @@ function useThreads(limit = DEFAULT_LIMIT) {
2363
2534
  setIsLoading(false);
2364
2535
  }
2365
2536
  }, [client, limit, assistantId]);
2366
- const createThread = React16.useCallback(
2537
+ const createThread = React18.useCallback(
2367
2538
  async (input) => {
2368
2539
  setError(null);
2369
2540
  const payload = {};
@@ -2377,7 +2548,7 @@ function useThreads(limit = DEFAULT_LIMIT) {
2377
2548
  },
2378
2549
  [client, upsertThreadRecord]
2379
2550
  );
2380
- const updateThread = React16.useCallback(
2551
+ const updateThread = React18.useCallback(
2381
2552
  async (recordId, payload) => {
2382
2553
  setError(null);
2383
2554
  const updated = await client.conversations.update(recordId, payload);
@@ -2386,7 +2557,7 @@ function useThreads(limit = DEFAULT_LIMIT) {
2386
2557
  },
2387
2558
  [client, upsertThreadRecord]
2388
2559
  );
2389
- const deleteThread = React16.useCallback(
2560
+ const deleteThread = React18.useCallback(
2390
2561
  async (recordId) => {
2391
2562
  setError(null);
2392
2563
  await client.conversations.delete(recordId);
@@ -2394,11 +2565,11 @@ function useThreads(limit = DEFAULT_LIMIT) {
2394
2565
  },
2395
2566
  [client]
2396
2567
  );
2397
- React16.useEffect(() => {
2568
+ React18.useEffect(() => {
2398
2569
  if (!isReady) return;
2399
2570
  void refreshThreads();
2400
2571
  }, [refreshThreads, isReady]);
2401
- React16.useEffect(() => {
2572
+ React18.useEffect(() => {
2402
2573
  if (!threadId || !isStreamLoading) return;
2403
2574
  const now = (/* @__PURE__ */ new Date()).toISOString();
2404
2575
  setThreadRecords((prev) => {
@@ -2418,7 +2589,7 @@ function useThreads(limit = DEFAULT_LIMIT) {
2418
2589
  return changed ? sortThreadRecords(next) : prev;
2419
2590
  });
2420
2591
  }, [threadId, isStreamLoading]);
2421
- React16.useEffect(() => {
2592
+ React18.useEffect(() => {
2422
2593
  if (!isReady || !threadId || isStreamLoading) return;
2423
2594
  let cancelled = false;
2424
2595
  void client.conversations.search({ where: { threadId }, limit: 1 }).then((result) => {
@@ -2432,7 +2603,7 @@ function useThreads(limit = DEFAULT_LIMIT) {
2432
2603
  cancelled = true;
2433
2604
  };
2434
2605
  }, [client, threadId, upsertThreadRecord, isReady, isStreamLoading]);
2435
- const threads = React16.useMemo(
2606
+ const threads = React18.useMemo(
2436
2607
  () => threadRecords.map((threadRecord) => toThreadItem(threadRecord)),
2437
2608
  [threadRecords]
2438
2609
  );
@@ -2449,10 +2620,10 @@ function useThreads(limit = DEFAULT_LIMIT) {
2449
2620
  }
2450
2621
 
2451
2622
  // src/components/thread/context-usage-indicator.tsx
2452
- import * as React17 from "react";
2623
+ import * as React19 from "react";
2453
2624
 
2454
2625
  // src/components/ui/progress-circle.tsx
2455
- import { jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
2626
+ import { jsx as jsx24, jsxs as jsxs12 } from "react/jsx-runtime";
2456
2627
  function clamp(input, a, b) {
2457
2628
  return Math.max(Math.min(input, Math.max(a, b)), Math.min(a, b));
2458
2629
  }
@@ -2475,7 +2646,7 @@ var ProgressCircle = ({ value, className, ...restSvgProps }) => {
2475
2646
  return (
2476
2647
  // biome-ignore lint/a11y/useFocusableInteractive: false positive (progress + progressbar are not focusable interactives)
2477
2648
  // biome-ignore lint/nursery/useAriaPropsSupportedByRole: biome rule at odds with mdn docs (presumed nursary bug with rule)
2478
- /* @__PURE__ */ jsxs11(
2649
+ /* @__PURE__ */ jsxs12(
2479
2650
  "svg",
2480
2651
  {
2481
2652
  role: "progressbar",
@@ -2486,8 +2657,8 @@ var ProgressCircle = ({ value, className, ...restSvgProps }) => {
2486
2657
  "aria-valuemax": 100,
2487
2658
  ...restSvgProps,
2488
2659
  children: [
2489
- /* @__PURE__ */ jsx22("circle", { ...commonParams, className: "stroke-current/25" }),
2490
- /* @__PURE__ */ jsx22(
2660
+ /* @__PURE__ */ jsx24("circle", { ...commonParams, className: "stroke-current/25" }),
2661
+ /* @__PURE__ */ jsx24(
2491
2662
  "circle",
2492
2663
  {
2493
2664
  ...commonParams,
@@ -2506,7 +2677,7 @@ var ProgressCircle = ({ value, className, ...restSvgProps }) => {
2506
2677
  };
2507
2678
 
2508
2679
  // src/components/thread/context-usage-indicator.tsx
2509
- import { jsx as jsx23, jsxs as jsxs12 } from "react/jsx-runtime";
2680
+ import { jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
2510
2681
  var kNumberFormatter = new Intl.NumberFormat("en-US", {
2511
2682
  minimumFractionDigits: 0,
2512
2683
  maximumFractionDigits: 1
@@ -2539,20 +2710,20 @@ function ContextUsageIndicator({
2539
2710
  }) {
2540
2711
  const { t } = useChatkitTranslation();
2541
2712
  const stream = useStreamContext();
2542
- const [maxContextSize, setMaxContextSize] = React17.useState(null);
2543
- const [usedContextSize, setUsedContextSize] = React17.useState(null);
2544
- const [assistantAgentKey, setAssistantAgentKey] = React17.useState(null);
2545
- const latestRealtimeUsageRef = React17.useRef({
2713
+ const [maxContextSize, setMaxContextSize] = React19.useState(null);
2714
+ const [usedContextSize, setUsedContextSize] = React19.useState(null);
2715
+ const [assistantAgentKey, setAssistantAgentKey] = React19.useState(null);
2716
+ const latestRealtimeUsageRef = React19.useRef({
2546
2717
  threadId: null,
2547
2718
  agentKey: null,
2548
2719
  usedTokens: null
2549
2720
  });
2550
- const realtimeUsage = React17.useMemo(
2721
+ const realtimeUsage = React19.useMemo(
2551
2722
  () => getThreadContextUsage(stream.contextUsageByAgentKey, assistantAgentKey),
2552
2723
  [assistantAgentKey, stream.contextUsageByAgentKey]
2553
2724
  );
2554
2725
  const realtimeUsedContextSize = getThreadContextUsageTotalTokens(realtimeUsage);
2555
- React17.useEffect(() => {
2726
+ React19.useEffect(() => {
2556
2727
  if (!stream.client || !stream.assistantId) {
2557
2728
  setMaxContextSize(null);
2558
2729
  setAssistantAgentKey(null);
@@ -2572,18 +2743,18 @@ function ContextUsageIndicator({
2572
2743
  cancelled = true;
2573
2744
  };
2574
2745
  }, [stream.client, stream.assistantId]);
2575
- React17.useEffect(() => {
2746
+ React19.useEffect(() => {
2576
2747
  latestRealtimeUsageRef.current = {
2577
2748
  threadId: stream.threadId ?? null,
2578
2749
  agentKey: assistantAgentKey,
2579
2750
  usedTokens: realtimeUsedContextSize
2580
2751
  };
2581
2752
  }, [assistantAgentKey, realtimeUsedContextSize, stream.threadId]);
2582
- React17.useEffect(() => {
2753
+ React19.useEffect(() => {
2583
2754
  if (realtimeUsedContextSize == null) return;
2584
2755
  setUsedContextSize(realtimeUsedContextSize);
2585
2756
  }, [realtimeUsedContextSize]);
2586
- React17.useEffect(() => {
2757
+ React19.useEffect(() => {
2587
2758
  if (!stream.client) {
2588
2759
  setUsedContextSize(null);
2589
2760
  return;
@@ -2648,8 +2819,8 @@ function ContextUsageIndicator({
2648
2819
  });
2649
2820
  const usageLabelWithSuffix = usageLabel.endsWith(":") ? usageLabel : `${usageLabel}:`;
2650
2821
  const progressClassName = percent >= 90 ? "text-destructive" : percent >= 75 ? "text-amber-500" : "text-primary dark:text-zinc-300";
2651
- return /* @__PURE__ */ jsxs12(Tooltip, { children: [
2652
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx23(
2822
+ return /* @__PURE__ */ jsxs13(Tooltip, { children: [
2823
+ /* @__PURE__ */ jsx25(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx25(
2653
2824
  "button",
2654
2825
  {
2655
2826
  type: "button",
@@ -2658,19 +2829,19 @@ function ContextUsageIndicator({
2658
2829
  className
2659
2830
  ),
2660
2831
  "aria-label": `${usageLabelWithSuffix} ${usageFullLabel}. ${usageTokensLabel}`,
2661
- children: /* @__PURE__ */ jsx23(ProgressCircle, { value: percent, className: cn("size-3.5", progressClassName) })
2832
+ children: /* @__PURE__ */ jsx25(ProgressCircle, { value: percent, className: cn("size-3.5", progressClassName) })
2662
2833
  }
2663
2834
  ) }),
2664
- /* @__PURE__ */ jsxs12(TooltipContent, { side: "top", sideOffset: 6, className: "space-y-0.5 px-3 py-2 text-center", children: [
2665
- /* @__PURE__ */ jsx23("div", { className: "text-primary-foreground/70", children: usageLabelWithSuffix }),
2666
- /* @__PURE__ */ jsx23("div", { className: "font-medium text-primary-foreground/80", children: usageFullLabel }),
2667
- /* @__PURE__ */ jsx23("div", { className: "text-sm font-semibold", children: usageTokensLabel })
2835
+ /* @__PURE__ */ jsxs13(TooltipContent, { side: "top", sideOffset: 6, className: "space-y-0.5 px-3 py-2 text-center", children: [
2836
+ /* @__PURE__ */ jsx25("div", { className: "text-primary-foreground/70", children: usageLabelWithSuffix }),
2837
+ /* @__PURE__ */ jsx25("div", { className: "font-medium text-primary-foreground/80", children: usageFullLabel }),
2838
+ /* @__PURE__ */ jsx25("div", { className: "text-sm font-semibold", children: usageTokensLabel })
2668
2839
  ] })
2669
2840
  ] });
2670
2841
  }
2671
2842
 
2672
2843
  // src/components/chat.tsx
2673
- import { Fragment as Fragment3, jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
2844
+ import { Fragment as Fragment3, jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
2674
2845
  var defaultApiUrl2 = import.meta.env.VITE_XPERTAI_API_URL;
2675
2846
  function formatMessageContent(content) {
2676
2847
  if (typeof content === "string") {
@@ -2709,16 +2880,17 @@ function Chat({
2709
2880
  const apiUrl = options?.api?.apiUrl || defaultApiUrl2;
2710
2881
  const { setStream } = useStreamManager();
2711
2882
  const stream = useStreamContext();
2712
- const [isHistoryLoading, setIsHistoryLoading] = React18.useState(false);
2713
- const [historyError, setHistoryError] = React18.useState(null);
2714
- const [assistantName, setAssistantName] = React18.useState(null);
2883
+ const [isHistoryLoading, setIsHistoryLoading] = React20.useState(false);
2884
+ const [historyError, setHistoryError] = React20.useState(null);
2885
+ const [assistantName, setAssistantName] = React20.useState(null);
2886
+ const [assistantAvatar, setAssistantAvatar] = React20.useState(null);
2715
2887
  const LOADING_DOTS_MIN_DURATION = 800;
2716
- const [showLoadingDots, setShowLoadingDots] = React18.useState(false);
2717
- const loadingStartTimeRef = React18.useRef(null);
2718
- React18.useEffect(() => {
2888
+ const [showLoadingDots, setShowLoadingDots] = React20.useState(false);
2889
+ const loadingStartTimeRef = React20.useRef(null);
2890
+ React20.useEffect(() => {
2719
2891
  setStream(stream);
2720
2892
  }, [setStream, stream]);
2721
- React18.useEffect(() => {
2893
+ React20.useEffect(() => {
2722
2894
  if (stream.isLoading) {
2723
2895
  if (!loadingStartTimeRef.current) {
2724
2896
  loadingStartTimeRef.current = Date.now();
@@ -2741,48 +2913,48 @@ function Chat({
2741
2913
  }
2742
2914
  }
2743
2915
  }, [stream.isLoading]);
2744
- const [draft, setDraft] = React18.useState("");
2745
- const [selectedTool, setSelectedTool] = React18.useState(null);
2746
- const [attachments, setAttachments] = React18.useState([]);
2747
- const [isAtBottom, setIsAtBottom] = React18.useState(true);
2748
- const [hasUpdatesBelow, setHasUpdatesBelow] = React18.useState(false);
2916
+ const [draft, setDraft] = React20.useState("");
2917
+ const [selectedTool, setSelectedTool] = React20.useState(null);
2918
+ const [attachments, setAttachments] = React20.useState([]);
2919
+ const [isAtBottom, setIsAtBottom] = React20.useState(true);
2920
+ const [hasUpdatesBelow, setHasUpdatesBelow] = React20.useState(false);
2749
2921
  const {
2750
2922
  threads,
2751
2923
  deleteThread,
2752
2924
  refreshThreads,
2753
2925
  isLoading: isThreadsLoading
2754
2926
  } = useThreads();
2755
- const viewportRef = React18.useRef(null);
2756
- const fileInputRef = React18.useRef(null);
2757
- const shouldAutoScrollRef = React18.useRef(true);
2758
- const forceFollowRef = React18.useRef(false);
2759
- const previousMessageCountRef = React18.useRef(0);
2760
- const previousScrollTopRef = React18.useRef(0);
2761
- const autoScrollFrameRef = React18.useRef(null);
2762
- const isPointerDownRef = React18.useRef(false);
2763
- const lastTouchYRef = React18.useRef(null);
2927
+ const viewportRef = React20.useRef(null);
2928
+ const fileInputRef = React20.useRef(null);
2929
+ const shouldAutoScrollRef = React20.useRef(true);
2930
+ const forceFollowRef = React20.useRef(false);
2931
+ const previousMessageCountRef = React20.useRef(0);
2932
+ const previousScrollTopRef = React20.useRef(0);
2933
+ const autoScrollFrameRef = React20.useRef(null);
2934
+ const isPointerDownRef = React20.useRef(false);
2935
+ const lastTouchYRef = React20.useRef(null);
2764
2936
  const resolvedTitle = title ?? t("chat.title");
2765
2937
  const resolvedPlaceholder = placeholder ?? t("chat.placeholder");
2766
2938
  const inputPlaceholder = selectedTool?.placeholderOverride ?? composer?.placeholder ?? resolvedPlaceholder;
2767
- const messages = React18.useMemo(() => stream.messages ?? [], [stream.messages]);
2939
+ const messages = React20.useMemo(() => stream.messages ?? [], [stream.messages]);
2768
2940
  const trimmedDraft = draft.trim();
2769
- const cancelPendingAutoScroll = React18.useCallback(() => {
2941
+ const cancelPendingAutoScroll = React20.useCallback(() => {
2770
2942
  if (autoScrollFrameRef.current !== null) {
2771
2943
  cancelAnimationFrame(autoScrollFrameRef.current);
2772
2944
  autoScrollFrameRef.current = null;
2773
2945
  }
2774
2946
  }, []);
2775
- const disableAutoFollow = React18.useCallback(() => {
2947
+ const disableAutoFollow = React20.useCallback(() => {
2776
2948
  forceFollowRef.current = false;
2777
2949
  shouldAutoScrollRef.current = false;
2778
2950
  cancelPendingAutoScroll();
2779
2951
  }, [cancelPendingAutoScroll]);
2780
- const enableAutoFollow = React18.useCallback(() => {
2952
+ const enableAutoFollow = React20.useCallback(() => {
2781
2953
  forceFollowRef.current = true;
2782
2954
  shouldAutoScrollRef.current = true;
2783
2955
  setHasUpdatesBelow(false);
2784
2956
  }, []);
2785
- const scrollToBottom = React18.useCallback((smooth = false, force = false) => {
2957
+ const scrollToBottom = React20.useCallback((smooth = false, force = false) => {
2786
2958
  if (force) {
2787
2959
  enableAutoFollow();
2788
2960
  }
@@ -2801,7 +2973,7 @@ function Chat({
2801
2973
  }
2802
2974
  });
2803
2975
  }, [cancelPendingAutoScroll, enableAutoFollow]);
2804
- React18.useEffect(() => {
2976
+ React20.useEffect(() => {
2805
2977
  const viewport = viewportRef.current;
2806
2978
  if (!viewport) return;
2807
2979
  previousScrollTopRef.current = viewport.scrollTop;
@@ -2872,14 +3044,14 @@ function Chat({
2872
3044
  window.removeEventListener("pointercancel", stopPointerTracking);
2873
3045
  };
2874
3046
  }, [cancelPendingAutoScroll, disableAutoFollow]);
2875
- React18.useEffect(() => {
3047
+ React20.useEffect(() => {
2876
3048
  shouldAutoScrollRef.current = true;
2877
3049
  forceFollowRef.current = false;
2878
3050
  previousScrollTopRef.current = 0;
2879
3051
  setIsAtBottom(true);
2880
3052
  setHasUpdatesBelow(false);
2881
3053
  }, [stream.threadId]);
2882
- React18.useEffect(() => {
3054
+ React20.useEffect(() => {
2883
3055
  const messageCountChanged = messages.length !== previousMessageCountRef.current;
2884
3056
  previousMessageCountRef.current = messages.length;
2885
3057
  if (!shouldAutoScrollRef.current) {
@@ -2898,19 +3070,32 @@ function Chat({
2898
3070
  const showMissingConfig = !isClientSecretInitializing && missingConfig;
2899
3071
  const hasUploadingFiles = attachments.some((a) => a.status === "uploading");
2900
3072
  const isSendDisabled = !trimmedDraft || stream.isLoading || missingConfig || isHistoryLoading || hasUploadingFiles;
2901
- React18.useEffect(() => {
3073
+ React20.useEffect(() => {
2902
3074
  if (missingConfig) return;
2903
3075
  void refreshThreads();
2904
3076
  }, [missingConfig, refreshThreads]);
2905
- React18.useEffect(() => {
2906
- if (missingConfig || !stream.client || !stream.assistantId) return;
3077
+ React20.useEffect(() => {
3078
+ if (missingConfig || !stream.client || !stream.assistantId) {
3079
+ setAssistantName(null);
3080
+ setAssistantAvatar(null);
3081
+ return;
3082
+ }
3083
+ setAssistantName(null);
3084
+ setAssistantAvatar(null);
3085
+ let cancelled = false;
2907
3086
  stream.client.assistants.get(stream.assistantId).then((assistant) => {
2908
- if (assistant) {
2909
- setAssistantName(assistant.metadata?.title || assistant.name);
2910
- }
3087
+ if (cancelled || !assistant) return;
3088
+ const assistantTitle2 = typeof assistant.metadata?.title === "string" && assistant.metadata.title.trim() ? assistant.metadata.title : assistant.name;
3089
+ setAssistantName(assistantTitle2);
3090
+ setAssistantAvatar(extractAssistantAvatar(assistant));
2911
3091
  }).catch((err) => {
3092
+ if (cancelled) return;
3093
+ setAssistantAvatar(null);
2912
3094
  console.warn("[Chat] Failed to load assistant info:", err);
2913
3095
  });
3096
+ return () => {
3097
+ cancelled = true;
3098
+ };
2914
3099
  }, [missingConfig, stream.client, stream.assistantId]);
2915
3100
  const uploadedFiles = attachments.filter((a) => a.status === "success" && a.storageFile).map((a) => ({
2916
3101
  id: a.storageFile?.id,
@@ -2948,6 +3133,7 @@ function Chat({
2948
3133
  },
2949
3134
  {
2950
3135
  ...requestOptions.context ? { context: requestOptions.context } : {},
3136
+ ...requestOptions.config ? { config: requestOptions.config } : {},
2951
3137
  optimisticValues: (prev) => {
2952
3138
  const prevMessages = prev?.messages ?? [];
2953
3139
  return { ...prev, messages: [...prevMessages, newMessage] };
@@ -2963,7 +3149,7 @@ function Chat({
2963
3149
  const handleAttachmentClick = () => {
2964
3150
  fileInputRef.current?.click();
2965
3151
  };
2966
- const uploadFile = React18.useCallback(async (localId, file) => {
3152
+ const uploadFile = React20.useCallback(async (localId, file) => {
2967
3153
  try {
2968
3154
  const result = await stream.client.contexts.uploadFile(file);
2969
3155
  setAttachments(
@@ -2983,7 +3169,7 @@ function Chat({
2983
3169
  );
2984
3170
  }
2985
3171
  }, [stream.client]);
2986
- const handleRetryUpload = React18.useCallback((localId) => {
3172
+ const handleRetryUpload = React20.useCallback((localId) => {
2987
3173
  const attachment = attachments.find((a) => a.localId === localId);
2988
3174
  if (!attachment || attachment.status !== "error") return;
2989
3175
  setAttachments(
@@ -3058,7 +3244,7 @@ function Chat({
3058
3244
  );
3059
3245
  scrollToBottom(true, true);
3060
3246
  };
3061
- const loadConversationMessages = React18.useCallback(
3247
+ const loadConversationMessages = React20.useCallback(
3062
3248
  async (recordId) => {
3063
3249
  if (missingConfig) {
3064
3250
  setHistoryError(t("chat.missingConfigShort"));
@@ -3140,17 +3326,18 @@ function Chat({
3140
3326
  }
3141
3327
  };
3142
3328
  const acceptMimes = composer?.attachments?.accept ? Object.entries(composer.attachments.accept).map(([mime, exts]) => [mime, ...exts.map((e) => `.${e}`)].join(",")).join(",") : void 0;
3143
- const currentThread = React18.useMemo(
3329
+ const currentThread = React20.useMemo(
3144
3330
  () => threads.find((item) => item.id === stream.threadId),
3145
3331
  [threads, stream.threadId]
3146
3332
  );
3147
3333
  const errorMessage = stream.error instanceof Error ? stream.error.message : void 0;
3148
- const threadErrorMessage = React18.useMemo(() => {
3334
+ const threadErrorMessage = React20.useMemo(() => {
3149
3335
  if (currentThread?.status !== "error") return void 0;
3150
3336
  const message = currentThread.error?.trim();
3151
3337
  return message || t("thread.errorToast");
3152
3338
  }, [currentThread, t]);
3153
- return /* @__PURE__ */ jsxs13(
3339
+ const assistantTitle = assistantName || resolvedTitle;
3340
+ return /* @__PURE__ */ jsxs14(
3154
3341
  "div",
3155
3342
  {
3156
3343
  ref: viewportRef,
@@ -3159,16 +3346,26 @@ function Chat({
3159
3346
  className
3160
3347
  ),
3161
3348
  children: [
3162
- /* @__PURE__ */ jsxs13("div", { className: "flex items-center justify-between border-b px-4 py-2 sticky top-0 z-10 bg-background", children: [
3163
- /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-3", children: [
3164
- /* @__PURE__ */ jsx24("div", { className: "h-2 w-2 rounded-full bg-green-500" }),
3165
- /* @__PURE__ */ jsxs13("div", { children: [
3166
- /* @__PURE__ */ jsx24("h2", { className: "text-lg font-semibold", children: assistantName || resolvedTitle }),
3167
- /* @__PURE__ */ jsx24("p", { className: "text-xs text-muted-foreground", children: t("chat.statusOnline") })
3349
+ /* @__PURE__ */ jsxs14("div", { className: "flex items-center justify-between border-b p-2 sticky top-0 z-10 bg-background", children: [
3350
+ /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-3 overflow-hidden", children: [
3351
+ /* @__PURE__ */ jsxs14("div", { className: "relative shrink-0", children: [
3352
+ /* @__PURE__ */ jsx26(
3353
+ ChatkitAvatar,
3354
+ {
3355
+ avatar: assistantAvatar,
3356
+ className: "h-9 w-9 border border-border/60",
3357
+ label: assistantTitle
3358
+ }
3359
+ ),
3360
+ /* @__PURE__ */ jsx26("span", { className: "absolute bottom-0 right-0 h-2.5 w-2.5 rounded-full border-2 border-background bg-green-500" })
3361
+ ] }),
3362
+ /* @__PURE__ */ jsxs14("div", { className: "truncate", children: [
3363
+ /* @__PURE__ */ jsx26("h2", { className: "text-lg font-semibold truncate", title: assistantTitle, children: assistantTitle }),
3364
+ /* @__PURE__ */ jsx26("p", { className: "text-xs text-muted-foreground", children: t("chat.statusOnline") })
3168
3365
  ] })
3169
3366
  ] }),
3170
- history?.enabled !== false && /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-1", children: [
3171
- /* @__PURE__ */ jsx24(
3367
+ history?.enabled !== false && /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-1", children: [
3368
+ /* @__PURE__ */ jsx26(
3172
3369
  "button",
3173
3370
  {
3174
3371
  type: "button",
@@ -3181,10 +3378,10 @@ function Chat({
3181
3378
  "disabled:opacity-50 disabled:cursor-not-allowed"
3182
3379
  ),
3183
3380
  title: t("history.newThread"),
3184
- children: /* @__PURE__ */ jsx24(Pencil3, { size: 16 })
3381
+ children: /* @__PURE__ */ jsx26(Pencil3, { size: 16 })
3185
3382
  }
3186
3383
  ),
3187
- /* @__PURE__ */ jsx24(
3384
+ /* @__PURE__ */ jsx26(
3188
3385
  HistorySidebar,
3189
3386
  {
3190
3387
  threads,
@@ -3198,23 +3395,23 @@ function Chat({
3198
3395
  )
3199
3396
  ] })
3200
3397
  ] }),
3201
- /* @__PURE__ */ jsxs13("div", { className: "flex-1 p-4", children: [
3202
- errorMessage && /* @__PURE__ */ jsx24("div", { className: "mb-4 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: errorMessage }),
3203
- historyError && /* @__PURE__ */ jsx24("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: historyError }),
3204
- showMissingConfig && /* @__PURE__ */ jsx24("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") }),
3205
- isHistoryLoading && /* @__PURE__ */ jsx24("div", { className: "mb-4 rounded-lg border border-muted px-3 py-2 text-sm text-muted-foreground", children: t("chat.loadingThread") }),
3206
- messages.length === 0 ? /* @__PURE__ */ jsx24(
3398
+ /* @__PURE__ */ jsxs14("div", { className: "flex-1 p-4", children: [
3399
+ errorMessage && /* @__PURE__ */ jsx26("div", { className: "mb-4 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: errorMessage }),
3400
+ historyError && /* @__PURE__ */ jsx26("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: historyError }),
3401
+ showMissingConfig && /* @__PURE__ */ jsx26("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") }),
3402
+ isHistoryLoading && /* @__PURE__ */ jsx26("div", { className: "mb-4 rounded-lg border border-muted px-3 py-2 text-sm text-muted-foreground", children: t("chat.loadingThread") }),
3403
+ messages.length === 0 ? /* @__PURE__ */ jsx26(
3207
3404
  StartScreen,
3208
3405
  {
3209
3406
  startScreen,
3210
3407
  onPromptClick: handlePromptClick
3211
3408
  }
3212
- ) : /* @__PURE__ */ jsxs13("div", { className: "space-y-4", children: [
3409
+ ) : /* @__PURE__ */ jsxs14("div", { className: "space-y-4", children: [
3213
3410
  messages.map((message, index) => {
3214
3411
  const messageType = String(message.type);
3215
3412
  const isAssistantMessage = messageType === "assistant" || messageType === "ai";
3216
3413
  const messageContent = typeof message.content === "string" ? message.content : Array.isArray(message.content) ? message.content.map((part) => formatMessageContent(part)).join("") : formatMessageContent(message.content);
3217
- return /* @__PURE__ */ jsx24(
3414
+ return /* @__PURE__ */ jsx26(
3218
3415
  "div",
3219
3416
  {
3220
3417
  className: cn(
@@ -3222,8 +3419,8 @@ function Chat({
3222
3419
  message.type === "human" ? "justify-end" : "justify-start -ml-1"
3223
3420
  // AI messages: slightly closer to left
3224
3421
  ),
3225
- children: /* @__PURE__ */ jsxs13("div", { className: "flex flex-col px-3 overflow-hidden", children: [
3226
- /* @__PURE__ */ jsx24(
3422
+ children: /* @__PURE__ */ jsxs14("div", { className: "flex flex-col px-3 overflow-hidden", children: [
3423
+ /* @__PURE__ */ jsx26(
3227
3424
  "div",
3228
3425
  {
3229
3426
  className: cn(
@@ -3231,7 +3428,7 @@ function Chat({
3231
3428
  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"
3232
3429
  // AI messages: use chat-specific foreground color
3233
3430
  ),
3234
- children: isAssistantMessage ? /* @__PURE__ */ jsx24(
3431
+ children: isAssistantMessage ? /* @__PURE__ */ jsx26(
3235
3432
  AssistantMessage,
3236
3433
  {
3237
3434
  message: {
@@ -3240,30 +3437,30 @@ function Chat({
3240
3437
  },
3241
3438
  isStreaming: stream.isLoading && index === messages.length - 1
3242
3439
  }
3243
- ) : /* @__PURE__ */ jsxs13(Fragment3, { children: [
3244
- message.type === "human" && message.attachments?.length > 0 && /* @__PURE__ */ jsx24("div", { className: "flex flex-wrap gap-1.5 mb-2", children: message.attachments.map((file, fileIndex) => /* @__PURE__ */ jsxs13(
3440
+ ) : /* @__PURE__ */ jsxs14(Fragment3, { children: [
3441
+ message.type === "human" && message.attachments?.length > 0 && /* @__PURE__ */ jsx26("div", { className: "flex flex-wrap gap-1.5 mb-2", children: message.attachments.map((file, fileIndex) => /* @__PURE__ */ jsxs14(
3245
3442
  "div",
3246
3443
  {
3247
3444
  className: "flex items-center gap-1.5 rounded-md bg-primary-foreground/20 px-2 py-1 text-xs",
3248
3445
  children: [
3249
- /* @__PURE__ */ jsx24(FileText2, { size: 12 }),
3250
- /* @__PURE__ */ jsx24("span", { className: "max-w-[100px] truncate", children: file.originalName })
3446
+ /* @__PURE__ */ jsx26(FileText2, { size: 12 }),
3447
+ /* @__PURE__ */ jsx26("span", { className: "max-w-[100px] truncate", children: file.originalName })
3251
3448
  ]
3252
3449
  },
3253
3450
  fileIndex
3254
3451
  )) }),
3255
- Array.isArray(message.content) ? message.content.map((part, partIndex) => /* @__PURE__ */ jsx24(
3452
+ Array.isArray(message.content) ? message.content.map((part, partIndex) => /* @__PURE__ */ jsx26(
3256
3453
  "p",
3257
3454
  {
3258
3455
  className: "wrap-break-word text-sm leading-relaxed",
3259
3456
  children: formatMessageContent(part)
3260
3457
  },
3261
3458
  `${part.type}-${partIndex}`
3262
- )) : /* @__PURE__ */ jsx24("span", { className: "wrap-break-word text-sm leading-relaxed", children: formatMessageContent(message.content) })
3459
+ )) : /* @__PURE__ */ jsx26("span", { className: "wrap-break-word text-sm leading-relaxed", children: formatMessageContent(message.content) })
3263
3460
  ] })
3264
3461
  }
3265
3462
  ),
3266
- /* @__PURE__ */ jsx24(
3463
+ /* @__PURE__ */ jsx26(
3267
3464
  MessageActions,
3268
3465
  {
3269
3466
  content: messageContent,
@@ -3284,15 +3481,15 @@ function Chat({
3284
3481
  const lastMsgContent = lastMessage?.content;
3285
3482
  const hasSubstantialContent = isLastMessageFromAI && (typeof lastMsgContent === "string" && lastMsgContent.length > 10 || Array.isArray(lastMsgContent) && lastMsgContent.length > 0);
3286
3483
  if (hasSubstantialContent) return null;
3287
- return /* @__PURE__ */ jsx24("div", { className: "flex justify-start gap-3 -ml-2", children: /* @__PURE__ */ jsx24("div", { className: "max-w-full rounded-2xl py-2.5", children: /* @__PURE__ */ jsxs13("div", { className: "flex gap-1.5", children: [
3288
- /* @__PURE__ */ jsx24("div", { className: "h-2 w-2 animate-bounce rounded-full bg-muted-foreground/60 [animation-delay:-0.3s]" }),
3289
- /* @__PURE__ */ jsx24("div", { className: "h-2 w-2 animate-bounce rounded-full bg-muted-foreground/60 [animation-delay:-0.15s]" }),
3290
- /* @__PURE__ */ jsx24("div", { className: "h-2 w-2 animate-bounce rounded-full bg-muted-foreground/60" })
3484
+ return /* @__PURE__ */ jsx26("div", { className: "flex justify-start gap-3 -ml-2", children: /* @__PURE__ */ jsx26("div", { className: "max-w-full rounded-2xl py-2.5", children: /* @__PURE__ */ jsxs14("div", { className: "flex gap-1.5", children: [
3485
+ /* @__PURE__ */ jsx26("div", { className: "h-2 w-2 animate-bounce rounded-full bg-muted-foreground/60 [animation-delay:-0.3s]" }),
3486
+ /* @__PURE__ */ jsx26("div", { className: "h-2 w-2 animate-bounce rounded-full bg-muted-foreground/60 [animation-delay:-0.15s]" }),
3487
+ /* @__PURE__ */ jsx26("div", { className: "h-2 w-2 animate-bounce rounded-full bg-muted-foreground/60" })
3291
3488
  ] }) }) });
3292
3489
  })()
3293
3490
  ] })
3294
3491
  ] }),
3295
- !isAtBottom && messages.length > 0 && /* @__PURE__ */ jsx24("div", { className: "sticky bottom-20 z-20 flex justify-center px-4 pointer-events-none", children: /* @__PURE__ */ jsx24(
3492
+ !isAtBottom && messages.length > 0 && /* @__PURE__ */ jsx26("div", { className: "sticky bottom-20 z-20 flex justify-center px-4 pointer-events-none", children: /* @__PURE__ */ jsx26(
3296
3493
  Button,
3297
3494
  {
3298
3495
  type: "button",
@@ -3305,12 +3502,12 @@ function Chat({
3305
3502
  onClick: () => scrollToBottom(true, true),
3306
3503
  "aria-label": t("chat.scrollToBottom"),
3307
3504
  title: t("chat.scrollToBottom"),
3308
- children: /* @__PURE__ */ jsx24(ArrowDown, { size: 16 })
3505
+ children: /* @__PURE__ */ jsx26(ArrowDown, { size: 16 })
3309
3506
  }
3310
3507
  ) }),
3311
- /* @__PURE__ */ jsxs13("div", { className: "p-2 sticky bottom-0 z-10 bg-background", children: [
3312
- threadErrorMessage && /* @__PURE__ */ jsx24("div", { className: "mb-3 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: threadErrorMessage }),
3313
- /* @__PURE__ */ jsx24(
3508
+ /* @__PURE__ */ jsxs14("div", { className: "p-2 sticky bottom-0 z-10 bg-background", children: [
3509
+ threadErrorMessage && /* @__PURE__ */ jsx26("div", { className: "mb-3 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: threadErrorMessage }),
3510
+ /* @__PURE__ */ jsx26(
3314
3511
  "input",
3315
3512
  {
3316
3513
  ref: fileInputRef,
@@ -3321,7 +3518,7 @@ function Chat({
3321
3518
  className: "hidden"
3322
3519
  }
3323
3520
  ),
3324
- attachments.length > 0 && /* @__PURE__ */ jsx24("div", { className: "mb-3 flex flex-wrap gap-2", children: attachments.map((item) => /* @__PURE__ */ jsxs13(
3521
+ attachments.length > 0 && /* @__PURE__ */ jsx26("div", { className: "mb-3 flex flex-wrap gap-2", children: attachments.map((item) => /* @__PURE__ */ jsxs14(
3325
3522
  "div",
3326
3523
  {
3327
3524
  className: cn(
@@ -3329,24 +3526,24 @@ function Chat({
3329
3526
  item.status === "error" ? "bg-destructive/10 border border-destructive/30" : "bg-muted"
3330
3527
  ),
3331
3528
  children: [
3332
- item.status === "uploading" && /* @__PURE__ */ jsx24(Loader22, { size: 14, className: "animate-spin text-muted-foreground" }),
3333
- item.status === "success" && /* @__PURE__ */ jsx24(FileText2, { size: 14, className: "text-muted-foreground" }),
3334
- item.status === "error" && /* @__PURE__ */ jsx24(FileText2, { size: 14, className: "text-destructive" }),
3335
- /* @__PURE__ */ jsx24("span", { className: cn(
3529
+ item.status === "uploading" && /* @__PURE__ */ jsx26(Loader22, { size: 14, className: "animate-spin text-muted-foreground" }),
3530
+ item.status === "success" && /* @__PURE__ */ jsx26(FileText2, { size: 14, className: "text-muted-foreground" }),
3531
+ item.status === "error" && /* @__PURE__ */ jsx26(FileText2, { size: 14, className: "text-destructive" }),
3532
+ /* @__PURE__ */ jsx26("span", { className: cn(
3336
3533
  "max-w-30 truncate",
3337
3534
  item.status === "error" && "text-destructive"
3338
3535
  ), children: item.file.name }),
3339
- item.status === "error" && /* @__PURE__ */ jsx24(
3536
+ item.status === "error" && /* @__PURE__ */ jsx26(
3340
3537
  "button",
3341
3538
  {
3342
3539
  type: "button",
3343
3540
  onClick: () => handleRetryUpload(item.localId),
3344
3541
  className: "ml-1 rounded-full p-0.5 text-destructive hover:bg-destructive/20",
3345
3542
  title: t("chat.retryUpload"),
3346
- children: /* @__PURE__ */ jsx24(RefreshCw2, { size: 12 })
3543
+ children: /* @__PURE__ */ jsx26(RefreshCw2, { size: 12 })
3347
3544
  }
3348
3545
  ),
3349
- /* @__PURE__ */ jsx24(
3546
+ /* @__PURE__ */ jsx26(
3350
3547
  "button",
3351
3548
  {
3352
3549
  type: "button",
@@ -3355,26 +3552,26 @@ function Chat({
3355
3552
  "ml-1 rounded-full p-0.5",
3356
3553
  item.status === "error" ? "text-destructive hover:bg-destructive/20" : "hover:bg-muted-foreground/20"
3357
3554
  ),
3358
- children: /* @__PURE__ */ jsx24(X2, { size: 12 })
3555
+ children: /* @__PURE__ */ jsx26(X2, { size: 12 })
3359
3556
  }
3360
3557
  )
3361
3558
  ]
3362
3559
  },
3363
3560
  item.localId
3364
3561
  )) }),
3365
- selectedTool && /* @__PURE__ */ jsxs13("div", { className: "mb-2 flex items-center gap-2", children: [
3366
- /* @__PURE__ */ jsx24("span", { className: "rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary", children: selectedTool.shortLabel ?? selectedTool.label }),
3367
- /* @__PURE__ */ jsx24(
3562
+ selectedTool && /* @__PURE__ */ jsxs14("div", { className: "mb-2 flex items-center gap-2", children: [
3563
+ /* @__PURE__ */ jsx26("span", { className: "rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary", children: selectedTool.shortLabel ?? selectedTool.label }),
3564
+ /* @__PURE__ */ jsx26(
3368
3565
  "button",
3369
3566
  {
3370
3567
  type: "button",
3371
3568
  onClick: () => setSelectedTool(null),
3372
3569
  className: "rounded-full p-0.5 text-muted-foreground hover:bg-muted",
3373
- children: /* @__PURE__ */ jsx24(X2, { size: 12 })
3570
+ children: /* @__PURE__ */ jsx26(X2, { size: 12 })
3374
3571
  }
3375
3572
  )
3376
3573
  ] }),
3377
- /* @__PURE__ */ jsx24("form", { className: "flex items-center", onSubmit: handleSubmit, children: /* @__PURE__ */ jsxs13(
3574
+ /* @__PURE__ */ jsx26("form", { className: "flex items-center", onSubmit: handleSubmit, children: /* @__PURE__ */ jsxs14(
3378
3575
  "div",
3379
3576
  {
3380
3577
  className: cn(
@@ -3385,7 +3582,7 @@ function Chat({
3385
3582
  "transition-shadow duration-200"
3386
3583
  ),
3387
3584
  children: [
3388
- /* @__PURE__ */ jsx24(
3585
+ /* @__PURE__ */ jsx26(
3389
3586
  ComposerMenu,
3390
3587
  {
3391
3588
  composer,
@@ -3395,7 +3592,7 @@ function Chat({
3395
3592
  disabled: stream.isLoading || missingConfig || isHistoryLoading
3396
3593
  }
3397
3594
  ),
3398
- /* @__PURE__ */ jsx24(
3595
+ /* @__PURE__ */ jsx26(
3399
3596
  "input",
3400
3597
  {
3401
3598
  type: "text",
@@ -3411,7 +3608,7 @@ function Chat({
3411
3608
  autoComplete: "off"
3412
3609
  }
3413
3610
  ),
3414
- /* @__PURE__ */ jsx24(
3611
+ /* @__PURE__ */ jsx26(
3415
3612
  SendButton,
3416
3613
  {
3417
3614
  disabled: isSendDisabled,
@@ -3424,7 +3621,7 @@ function Chat({
3424
3621
  ]
3425
3622
  }
3426
3623
  ) }),
3427
- disclaimer?.text && /* @__PURE__ */ jsx24(
3624
+ disclaimer?.text && /* @__PURE__ */ jsx26(
3428
3625
  "p",
3429
3626
  {
3430
3627
  className: cn(
@@ -3434,9 +3631,9 @@ function Chat({
3434
3631
  children: disclaimer.text
3435
3632
  }
3436
3633
  ),
3437
- /* @__PURE__ */ jsxs13("div", { className: "mt-2 flex items-center justify-center gap-2 text-xs text-muted-foreground", children: [
3438
- /* @__PURE__ */ jsx24("span", { children: t("chat.poweredBy") }),
3439
- /* @__PURE__ */ jsx24(ContextUsageIndicator, { className: "absolute right-4" })
3634
+ /* @__PURE__ */ jsxs14("div", { className: "mt-2 flex items-center justify-center gap-2 text-xs text-muted-foreground", children: [
3635
+ /* @__PURE__ */ jsx26("span", { children: t("chat.poweredBy") }),
3636
+ /* @__PURE__ */ jsx26(ContextUsageIndicator, { className: "absolute right-4" })
3440
3637
  ] })
3441
3638
  ] })
3442
3639
  ]
@@ -3445,11 +3642,11 @@ function Chat({
3445
3642
  }
3446
3643
 
3447
3644
  // src/components/ui/input.tsx
3448
- import * as React19 from "react";
3449
- import { jsx as jsx25 } from "react/jsx-runtime";
3450
- var Input = React19.forwardRef(
3645
+ import * as React21 from "react";
3646
+ import { jsx as jsx27 } from "react/jsx-runtime";
3647
+ var Input = React21.forwardRef(
3451
3648
  ({ className, type, ...props }, ref) => {
3452
- return /* @__PURE__ */ jsx25(
3649
+ return /* @__PURE__ */ jsx27(
3453
3650
  "input",
3454
3651
  {
3455
3652
  ref,
@@ -3465,49 +3662,11 @@ var Input = React19.forwardRef(
3465
3662
  );
3466
3663
  Input.displayName = "Input";
3467
3664
 
3468
- // src/components/ui/avatar.tsx
3469
- import * as React20 from "react";
3470
- import * as AvatarPrimitive from "@radix-ui/react-avatar";
3471
- import { jsx as jsx26 } from "react/jsx-runtime";
3472
- var Avatar = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
3473
- AvatarPrimitive.Root,
3474
- {
3475
- ref,
3476
- className: cn(
3477
- "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
3478
- className
3479
- ),
3480
- ...props
3481
- }
3482
- ));
3483
- Avatar.displayName = AvatarPrimitive.Root.displayName;
3484
- var AvatarImage = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
3485
- AvatarPrimitive.Image,
3486
- {
3487
- ref,
3488
- className: cn("aspect-square h-full w-full", className),
3489
- ...props
3490
- }
3491
- ));
3492
- AvatarImage.displayName = AvatarPrimitive.Image.displayName;
3493
- var AvatarFallback = React20.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
3494
- AvatarPrimitive.Fallback,
3495
- {
3496
- ref,
3497
- className: cn(
3498
- "flex h-full w-full items-center justify-center rounded-full bg-muted",
3499
- className
3500
- ),
3501
- ...props
3502
- }
3503
- ));
3504
- AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
3505
-
3506
3665
  // src/components/ui/separator.tsx
3507
- import * as React21 from "react";
3508
- import { jsx as jsx27 } from "react/jsx-runtime";
3509
- var Separator = React21.forwardRef(
3510
- ({ className, orientation = "horizontal", ...props }, ref) => /* @__PURE__ */ jsx27(
3666
+ import * as React22 from "react";
3667
+ import { jsx as jsx28 } from "react/jsx-runtime";
3668
+ var Separator = React22.forwardRef(
3669
+ ({ className, orientation = "horizontal", ...props }, ref) => /* @__PURE__ */ jsx28(
3511
3670
  "div",
3512
3671
  {
3513
3672
  ref,
@@ -3537,6 +3696,7 @@ export {
3537
3696
  CardHeader,
3538
3697
  CardTitle,
3539
3698
  Chat,
3699
+ ChatkitAvatar,
3540
3700
  Input,
3541
3701
  ParentMessengerProvider,
3542
3702
  ScrollArea,
@@ -3548,7 +3708,10 @@ export {
3548
3708
  TabsTrigger,
3549
3709
  ThemeProvider,
3550
3710
  supportedLocales as chatkitSupportedLocales,
3711
+ extractAssistantAvatar,
3712
+ getAvatarFallback,
3551
3713
  getLanguage as getChatkitLanguage,
3714
+ normalizeChatkitAvatar,
3552
3715
  setLanguage as setChatkitLanguage,
3553
3716
  useParentMessenger,
3554
3717
  useTheme