@xpert-ai/chatkit-ui 0.5.9 → 0.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/dist/app/assets/{_baseUniq-BLpvr8Li.js → _baseUniq-BGtBWDHF.js} +1 -1
  2. package/dist/app/assets/{abap-DuWq8-Fa.js → abap-CRoFwrxO.js} +1 -1
  3. package/dist/app/assets/{abnf-BHjR3bmX.js → abnf-CNjS2eos.js} +1 -1
  4. package/dist/app/assets/{actionscript-DJxrYQDx.js → actionscript-B8mr3NzG.js} +1 -1
  5. package/dist/app/assets/{ada-CbL6tAKZ.js → ada-BFLo8FUI.js} +1 -1
  6. package/dist/app/assets/{agda-Ck6x7eDV.js → agda-3OzBs9Hc.js} +1 -1
  7. package/dist/app/assets/{al-DdXfEkta.js → al-D20XP4lJ.js} +1 -1
  8. package/dist/app/assets/{antlr4-upUqmaYh.js → antlr4-CAk9QE2f.js} +1 -1
  9. package/dist/app/assets/{apacheconf-CupXJx2-.js → apacheconf-DVy5BZVN.js} +1 -1
  10. package/dist/app/assets/{apex-0YDHPbgn.js → apex-BOwqYrLv.js} +1 -1
  11. package/dist/app/assets/{apl-RmSfPwym.js → apl-BKNJFilC.js} +1 -1
  12. package/dist/app/assets/{applescript-COai1tTm.js → applescript-BBrUU_PL.js} +1 -1
  13. package/dist/app/assets/{aql-CbZi1-r0.js → aql-D6uGUCXn.js} +1 -1
  14. package/dist/app/assets/{arc-DIn4pjjH.js → arc-CrwfbbB_.js} +1 -1
  15. package/dist/app/assets/{architectureDiagram-Q4EWVU46-Dmhp32t-.js → architectureDiagram-Q4EWVU46-ChKCVNgI.js} +1 -1
  16. package/dist/app/assets/{arduino-CQPi4w3l.js → arduino-D6bzhWX_.js} +1 -1
  17. package/dist/app/assets/{arff-CeuE6lSG.js → arff-D92IxpM3.js} +1 -1
  18. package/dist/app/assets/{asciidoc-DCNYoRln.js → asciidoc-DfsvV2P7.js} +1 -1
  19. package/dist/app/assets/{asm6502-Pd3JHkRr.js → asm6502-_F1FAt_4.js} +1 -1
  20. package/dist/app/assets/{asmatmel-Cc5XZnaJ.js → asmatmel-Cbtqac6c.js} +1 -1
  21. package/dist/app/assets/{aspnet-C533BcWB.js → aspnet-BW0Um7vX.js} +1 -1
  22. package/dist/app/assets/{autohotkey-DKsSzBeu.js → autohotkey-BN09uJNY.js} +1 -1
  23. package/dist/app/assets/{autoit-BBqFqs2I.js → autoit-CsiD8aKJ.js} +1 -1
  24. package/dist/app/assets/{avisynth-BQhu1vn5.js → avisynth-CjQfGoLi.js} +1 -1
  25. package/dist/app/assets/{avro-idl-CLl66iQZ.js → avro-idl-BZ5kGhBz.js} +1 -1
  26. package/dist/app/assets/{bash-D-02JHh4.js → bash-DJKkM7QN.js} +1 -1
  27. package/dist/app/assets/{basic-D0Z8Jj8l.js → basic-Bfxph2ze.js} +1 -1
  28. package/dist/app/assets/{batch-B6HFRBhp.js → batch-Bg0kGp_U.js} +1 -1
  29. package/dist/app/assets/{bbcode-CE7knYbs.js → bbcode-BCAqMttV.js} +1 -1
  30. package/dist/app/assets/{bicep--WgDi_5T.js → bicep-D59fWffG.js} +1 -1
  31. package/dist/app/assets/{birb-CRszBx8p.js → birb-o5jcDsHe.js} +1 -1
  32. package/dist/app/assets/{bison-2yOIavxu.js → bison-yB-JpgNW.js} +1 -1
  33. package/dist/app/assets/{blockDiagram-DXYQGD6D-CdfVTYe6.js → blockDiagram-DXYQGD6D-Bbcf1g82.js} +1 -1
  34. package/dist/app/assets/{bnf-Dg8yqReW.js → bnf-MvjnxGLj.js} +1 -1
  35. package/dist/app/assets/{brainfuck-CMcDLgle.js → brainfuck-Di4LuxXz.js} +1 -1
  36. package/dist/app/assets/{brightscript-Cqzcw5aY.js → brightscript-CoKUdu4Z.js} +1 -1
  37. package/dist/app/assets/{bro-CCYADGfA.js → bro-Dtuf-rOu.js} +1 -1
  38. package/dist/app/assets/{bsl-BazS2rLi.js → bsl-Dphub1md.js} +1 -1
  39. package/dist/app/assets/{c-CzdIRBJL.js → c-CouCMjhn.js} +1 -1
  40. package/dist/app/assets/{c4Diagram-AHTNJAMY-CzWbdT2z.js → c4Diagram-AHTNJAMY-B71AnYEv.js} +1 -1
  41. package/dist/app/assets/{cfscript-BfocvIBZ.js → cfscript-WEBTQyyh.js} +1 -1
  42. package/dist/app/assets/{chaiscript-DEeofdbI.js → chaiscript-ChKY8J66.js} +1 -1
  43. package/dist/app/assets/channel-cWYrdn2X.js +1 -0
  44. package/dist/app/assets/{chunk-4BX2VUAB-DXvcZJRe.js → chunk-4BX2VUAB-CrS4RXRQ.js} +1 -1
  45. package/dist/app/assets/{chunk-4TB4RGXK-Cvk3MhhJ.js → chunk-4TB4RGXK-DK5YEmle.js} +1 -1
  46. package/dist/app/assets/{chunk-55IACEB6-Om7ibAwr.js → chunk-55IACEB6-Bo7tPBvq.js} +1 -1
  47. package/dist/app/assets/{chunk-EDXVE4YY-DbAgli9I.js → chunk-EDXVE4YY-S8p2mxbS.js} +1 -1
  48. package/dist/app/assets/{chunk-FMBD7UC4-DObpaYUO.js → chunk-FMBD7UC4-BmeEs0Fl.js} +1 -1
  49. package/dist/app/assets/{chunk-OYMX7WX6-rGMgjhKm.js → chunk-OYMX7WX6-CVOe3eKO.js} +1 -1
  50. package/dist/app/assets/{chunk-QZHKN3VN-BtHCPSxj.js → chunk-QZHKN3VN-D8KyAP_6.js} +1 -1
  51. package/dist/app/assets/{chunk-YZCP3GAM-CDkTBaPo.js → chunk-YZCP3GAM-BCxkcMfg.js} +1 -1
  52. package/dist/app/assets/{cil-BNlTLivw.js → cil-B50znBsv.js} +1 -1
  53. package/dist/app/assets/classDiagram-6PBFFD2Q-B_cL4ol2.js +1 -0
  54. package/dist/app/assets/classDiagram-v2-HSJHXN6E-B_cL4ol2.js +1 -0
  55. package/dist/app/assets/{clike-BBIPxwPb.js → clike-BDx2IDni.js} +1 -1
  56. package/dist/app/assets/{clojure-SjJCVW3l.js → clojure-DwvfHL53.js} +1 -1
  57. package/dist/app/assets/clone-DqC7wLFm.js +1 -0
  58. package/dist/app/assets/{cmake-DKXTFLeQ.js → cmake-CR0A7aZm.js} +1 -1
  59. package/dist/app/assets/{cobol-DDV2T8Ov.js → cobol-CyPvCTIP.js} +1 -1
  60. package/dist/app/assets/{coffeescript-DLlO3-WB.js → coffeescript-BWdDr59V.js} +1 -1
  61. package/dist/app/assets/{concurnas-Zk22sd4q.js → concurnas-DOsrzlEd.js} +1 -1
  62. package/dist/app/assets/{coq-CB49fGLj.js → coq-DufSYl-_.js} +1 -1
  63. package/dist/app/assets/{core-GilJv2TY.js → core-CCxBh-db.js} +1 -1
  64. package/dist/app/assets/{cose-bilkent-S5V4N54A-dCcXah1N.js → cose-bilkent-S5V4N54A-CVetMxrj.js} +1 -1
  65. package/dist/app/assets/{cpp-_nLYhTeO.js → cpp-DlRzYOQ3.js} +1 -1
  66. package/dist/app/assets/{crystal-0uF3fCBY.js → crystal-C6liNBfM.js} +1 -1
  67. package/dist/app/assets/{csharp-9a018lXK.js → csharp-BJQ_L68V.js} +1 -1
  68. package/dist/app/assets/{cshtml-DeRWrMgA.js → cshtml-CIHuGJB1.js} +1 -1
  69. package/dist/app/assets/{csp-C1JPZRc6.js → csp-DClFC8n5.js} +1 -1
  70. package/dist/app/assets/{css-CtlaCojl.js → css-BIHXWlvb.js} +1 -1
  71. package/dist/app/assets/{css-extras-_r0fSC4K.js → css-extras-DW9n0pYv.js} +1 -1
  72. package/dist/app/assets/{csv-DEVHAMet.js → csv-BCDO1ezZ.js} +1 -1
  73. package/dist/app/assets/{cypher-OQlwpa7A.js → cypher-C02ZuRq6.js} +1 -1
  74. package/dist/app/assets/{d-CBefACWo.js → d-C_m1NZFO.js} +1 -1
  75. package/dist/app/assets/{dagre-KV5264BT-BbcR5yFp.js → dagre-KV5264BT-CNZ7oGpU.js} +1 -1
  76. package/dist/app/assets/{dart-DnZNI7st.js → dart-BzfpaRRB.js} +1 -1
  77. package/dist/app/assets/{dataweave-C0KQEfm3.js → dataweave-BZwfufNx.js} +1 -1
  78. package/dist/app/assets/{dax-C85xkJS9.js → dax-BL-K1OK0.js} +1 -1
  79. package/dist/app/assets/{dhall-Dr7lP2CR.js → dhall-kRlu5-Ah.js} +1 -1
  80. package/dist/app/assets/{diagram-5BDNPKRD-CAF6Irol.js → diagram-5BDNPKRD-Dou4ReAX.js} +1 -1
  81. package/dist/app/assets/{diagram-G4DWMVQ6-BjM_224a.js → diagram-G4DWMVQ6-DrTF8uMu.js} +1 -1
  82. package/dist/app/assets/{diagram-MMDJMWI5-DLUB15w5.js → diagram-MMDJMWI5-Duy5amDa.js} +1 -1
  83. package/dist/app/assets/{diagram-TYMM5635-DBbpw92w.js → diagram-TYMM5635-BbR1qfVD.js} +1 -1
  84. package/dist/app/assets/{diff-BMBQT17e.js → diff-B4AimFb8.js} +1 -1
  85. package/dist/app/assets/{django-ciXFTeWU.js → django-CHuXCByJ.js} +1 -1
  86. package/dist/app/assets/{dns-zone-file-DC-B5K-Z.js → dns-zone-file-DFO0-Wh5.js} +1 -1
  87. package/dist/app/assets/{docker-A8DlJ91e.js → docker-DeblFuGF.js} +1 -1
  88. package/dist/app/assets/{dot-DC8VHvNV.js → dot-DsmxGkhr.js} +1 -1
  89. package/dist/app/assets/{ebnf-92ogoCIr.js → ebnf-CbgMYLgT.js} +1 -1
  90. package/dist/app/assets/{editorconfig-D-VWzvau.js → editorconfig-DFLqU5tO.js} +1 -1
  91. package/dist/app/assets/{eiffel-BQlPy2tR.js → eiffel-BwLrgMir.js} +1 -1
  92. package/dist/app/assets/{ejs-hYRRXYEf.js → ejs-C_qs3M41.js} +1 -1
  93. package/dist/app/assets/{elixir-BQaOfAKO.js → elixir-DrAUe9cA.js} +1 -1
  94. package/dist/app/assets/{elm-CMZDaOsd.js → elm-NL3cn8Zq.js} +1 -1
  95. package/dist/app/assets/{erDiagram-SMLLAGMA-D7RIpy8K.js → erDiagram-SMLLAGMA-BfCXo53J.js} +1 -1
  96. package/dist/app/assets/{erb-BhUx9oZj.js → erb-B3ZYOAhJ.js} +1 -1
  97. package/dist/app/assets/{erlang-BEE4gQmE.js → erlang-DHaDiNC1.js} +1 -1
  98. package/dist/app/assets/{etlua-Do5lhS9I.js → etlua-cjNwXVDj.js} +1 -1
  99. package/dist/app/assets/{excel-formula-CmwpMtyy.js → excel-formula-K59v6qG0.js} +1 -1
  100. package/dist/app/assets/{factor-B2pJs6O3.js → factor-CaxnvHX-.js} +1 -1
  101. package/dist/app/assets/{false-DvjmZdOv.js → false-C3dAj0rb.js} +1 -1
  102. package/dist/app/assets/{firestore-security-rules-CFb_h360.js → firestore-security-rules-BWiaIy5P.js} +1 -1
  103. package/dist/app/assets/{flow-D0Mztv7X.js → flow-DtC7lyt9.js} +1 -1
  104. package/dist/app/assets/{flowDiagram-DWJPFMVM-Bs64njF4.js → flowDiagram-DWJPFMVM-C-qKitVO.js} +1 -1
  105. package/dist/app/assets/{fortran-1pOElj0a.js → fortran-DR0Ai6wv.js} +1 -1
  106. package/dist/app/assets/{fsharp-B6O1vScF.js → fsharp-CQ4gmr0N.js} +1 -1
  107. package/dist/app/assets/{ftl-BC1JMSb3.js → ftl-Ckk-2edF.js} +1 -1
  108. package/dist/app/assets/{ganttDiagram-T4ZO3ILL-BaqYXbd5.js → ganttDiagram-T4ZO3ILL-CVsnCO44.js} +1 -1
  109. package/dist/app/assets/{gap-DHN_hna1.js → gap-BKZovOdF.js} +1 -1
  110. package/dist/app/assets/{gcode-CYOpCOHU.js → gcode-DEwkGIHO.js} +1 -1
  111. package/dist/app/assets/{gdscript-C_fDjtde.js → gdscript-BHZKxFHM.js} +1 -1
  112. package/dist/app/assets/{gedcom-BVEMpxDC.js → gedcom-5qXzfSVG.js} +1 -1
  113. package/dist/app/assets/{gherkin-CbpN6mFf.js → gherkin-JPPL0NwC.js} +1 -1
  114. package/dist/app/assets/{git-Bf1dI9II.js → git-BHHbjeSj.js} +1 -1
  115. package/dist/app/assets/{gitGraphDiagram-UUTBAWPF-BdL4HwfB.js → gitGraphDiagram-UUTBAWPF-BAMZ7idy.js} +1 -1
  116. package/dist/app/assets/{glsl-DHfVVpll.js → glsl-ojT9GGcQ.js} +1 -1
  117. package/dist/app/assets/{gml-CKW0I1sM.js → gml-Byrz4K18.js} +1 -1
  118. package/dist/app/assets/{gn-BolaXeCK.js → gn-BXN298zz.js} +1 -1
  119. package/dist/app/assets/{go-CvNTUNQj.js → go-QMar_vXY.js} +1 -1
  120. package/dist/app/assets/{go-module-DHNsqTFu.js → go-module-DhttF-9u.js} +1 -1
  121. package/dist/app/assets/{graph-w3lwjjfd.js → graph-B32jd8nV.js} +1 -1
  122. package/dist/app/assets/{graphql-CqMPX6Uj.js → graphql-D52K_SsX.js} +1 -1
  123. package/dist/app/assets/{groovy-ric2FEOh.js → groovy-CqJveqOx.js} +1 -1
  124. package/dist/app/assets/{haml-Cxb5CUqP.js → haml-CoLWO1nd.js} +1 -1
  125. package/dist/app/assets/{handlebars-Cn3du5zM.js → handlebars-BfmAmLER.js} +1 -1
  126. package/dist/app/assets/{haskell-C6_pQzAW.js → haskell-jItCYvPU.js} +1 -1
  127. package/dist/app/assets/{haxe-ByVxVzJ9.js → haxe-4SLJ2_08.js} +1 -1
  128. package/dist/app/assets/{hcl-B54wt0UB.js → hcl-BMmyrQ8c.js} +1 -1
  129. package/dist/app/assets/{hlsl-zd81HZk_.js → hlsl-SJDMNXGq.js} +1 -1
  130. package/dist/app/assets/{hoon-CIsFAweE.js → hoon-D6moOZKy.js} +1 -1
  131. package/dist/app/assets/{hpkp-BjSjLyAt.js → hpkp-sCVuwPlN.js} +1 -1
  132. package/dist/app/assets/{hsts-DYV6IErn.js → hsts-bAMpwV9D.js} +1 -1
  133. package/dist/app/assets/{http-vOpsxP66.js → http-Dx1p06BK.js} +1 -1
  134. package/dist/app/assets/{ichigojam-0LTExBpZ.js → ichigojam-CVXOu9yk.js} +1 -1
  135. package/dist/app/assets/{icon-B-Gp4jiE.js → icon-D6wxStB0.js} +1 -1
  136. package/dist/app/assets/{icu-message-format-jiNYPlT8.js → icu-message-format-D6yLIfrn.js} +1 -1
  137. package/dist/app/assets/{idris-ZMBybD9e.js → idris-DpAtc3fL.js} +1 -1
  138. package/dist/app/assets/{iecst-B3wVu7MT.js → iecst-B29ujpoO.js} +1 -1
  139. package/dist/app/assets/{ignore-DCDIFGnd.js → ignore-CVq0aJkW.js} +1 -1
  140. package/dist/app/assets/{index-Bc4smTvC.js → index-BBJxrAP8.js} +139 -139
  141. package/dist/app/assets/index-D-hjfkvG.css +1 -0
  142. package/dist/app/assets/{infoDiagram-42DDH7IO-Bbh4hemk.js → infoDiagram-42DDH7IO-BG7H21DU.js} +1 -1
  143. package/dist/app/assets/{inform7-BI05xVNw.js → inform7-B1F0WxwD.js} +1 -1
  144. package/dist/app/assets/{ini-vxj4aj2b.js → ini-CIpuuB9_.js} +1 -1
  145. package/dist/app/assets/{io-Dv10BjOU.js → io-3w1UICu0.js} +1 -1
  146. package/dist/app/assets/{ishikawaDiagram-UXIWVN3A-BuEYSyJU.js → ishikawaDiagram-UXIWVN3A-j8lnD8_c.js} +1 -1
  147. package/dist/app/assets/{j-BW8yPUOH.js → j-D3-2sGJz.js} +1 -1
  148. package/dist/app/assets/{java-BkBlxlrY.js → java-BlX-H2cK.js} +1 -1
  149. package/dist/app/assets/{javadoc-Cx6tkfWS.js → javadoc-J2TruS4-.js} +1 -1
  150. package/dist/app/assets/{javadoclike-BBfuCCPL.js → javadoclike-bfC-JoEq.js} +1 -1
  151. package/dist/app/assets/{javascript-CAUiQeA4.js → javascript-BP7WO6B4.js} +1 -1
  152. package/dist/app/assets/{javastacktrace-DVKSc9mr.js → javastacktrace-BTUlM0LC.js} +1 -1
  153. package/dist/app/assets/{jexl-Ctv9A-4Y.js → jexl-Cxa4h-16.js} +1 -1
  154. package/dist/app/assets/{jolie-8oLOtI3_.js → jolie-BbbvEhKj.js} +1 -1
  155. package/dist/app/assets/{journeyDiagram-VCZTEJTY-DUm9Kxjg.js → journeyDiagram-VCZTEJTY-BwTniXNV.js} +1 -1
  156. package/dist/app/assets/{jq-C5TPho8v.js → jq-DArJYKLU.js} +1 -1
  157. package/dist/app/assets/{js-extras-CvvS7hCP.js → js-extras-BvRL3Jvq.js} +1 -1
  158. package/dist/app/assets/{js-templates-D1ItFqxK.js → js-templates-Dk5OdIFK.js} +1 -1
  159. package/dist/app/assets/{jsdoc-D0lTE-nD.js → jsdoc-DngF7jir.js} +1 -1
  160. package/dist/app/assets/{json-Bj6Xy1YF.js → json-ClAvu2RW.js} +1 -1
  161. package/dist/app/assets/{json5-CvDs8NVg.js → json5-BmFfbQQU.js} +1 -1
  162. package/dist/app/assets/{jsonp-BFor_KVf.js → jsonp-BgadffEo.js} +1 -1
  163. package/dist/app/assets/{jsstacktrace-DaDHvFwg.js → jsstacktrace-Dd8S1Q81.js} +1 -1
  164. package/dist/app/assets/{jsx-9z5hmKsA.js → jsx-Dz0neUh1.js} +1 -1
  165. package/dist/app/assets/{julia-DwK7_L2k.js → julia-BHGMeW5t.js} +1 -1
  166. package/dist/app/assets/{kanban-definition-6JOO6SKY-B4PLi6a2.js → kanban-definition-6JOO6SKY-CMc5-Ea3.js} +1 -1
  167. package/dist/app/assets/{keepalived-QQAuR044.js → keepalived-1yyGwudH.js} +1 -1
  168. package/dist/app/assets/{keyman-WSDbwfnX.js → keyman-D96kZ3Ti.js} +1 -1
  169. package/dist/app/assets/{kotlin-CGASEpWD.js → kotlin-DU--_X0J.js} +1 -1
  170. package/dist/app/assets/{kumir-Doyw9YhD.js → kumir-0MOuOYYf.js} +1 -1
  171. package/dist/app/assets/{kusto-xM5aYCkT.js → kusto-C-XA0mwb.js} +1 -1
  172. package/dist/app/assets/{latex-7t6762ct.js → latex-DwJ10yrt.js} +1 -1
  173. package/dist/app/assets/{latte-CYYMtaGq.js → latte-D_Yyq_nM.js} +1 -1
  174. package/dist/app/assets/{layout-Cq9HzFXC.js → layout-DQt8UNZi.js} +1 -1
  175. package/dist/app/assets/{less-B-rkr2Db.js → less-CsUu5jL1.js} +1 -1
  176. package/dist/app/assets/{lilypond-BJWXSiTf.js → lilypond-CIbhxqtF.js} +1 -1
  177. package/dist/app/assets/{linear-DRDsgNmW.js → linear-D8DMmUY3.js} +1 -1
  178. package/dist/app/assets/{liquid--20_a0Si.js → liquid-BaXz-DcY.js} +1 -1
  179. package/dist/app/assets/{lisp-B_0ZteJz.js → lisp-DQs2fOve.js} +1 -1
  180. package/dist/app/assets/{livescript-1Jx0SETD.js → livescript-BebY4jFA.js} +1 -1
  181. package/dist/app/assets/{llvm-B9HfHMKf.js → llvm-tvuSKoRQ.js} +1 -1
  182. package/dist/app/assets/{log-CRWfAu0Z.js → log-euixYp8a.js} +1 -1
  183. package/dist/app/assets/{lolcode-DMRD9BNM.js → lolcode-CwPkrI86.js} +1 -1
  184. package/dist/app/assets/{lua-D-hyZPBj.js → lua-CNvDsE6g.js} +1 -1
  185. package/dist/app/assets/{magma-CIgc0Q1n.js → magma-CdK12PLr.js} +1 -1
  186. package/dist/app/assets/{makefile-CBunZoPa.js → makefile-fq5UhIbM.js} +1 -1
  187. package/dist/app/assets/{markdown-DvJvDbDy.js → markdown-Ajq2JGa1.js} +1 -1
  188. package/dist/app/assets/{markup-D3VPet1J.js → markup-CfbpoVuv.js} +1 -1
  189. package/dist/app/assets/{markup-templating-D7DvUP7P.js → markup-templating-ClpbWH3E.js} +1 -1
  190. package/dist/app/assets/{matlab-CjKtwgDT.js → matlab-DUQtIrQ-.js} +1 -1
  191. package/dist/app/assets/{maxscript-CvzRNTSR.js → maxscript-BQSIPoaa.js} +1 -1
  192. package/dist/app/assets/{mel-DVwlWwS1.js → mel-C8tXgXmS.js} +1 -1
  193. package/dist/app/assets/{mermaid-mTOAb9I1.js → mermaid-BMSiReCn.js} +1 -1
  194. package/dist/app/assets/{min-6n2-iCAm.js → min-DgHJ7Nf4.js} +1 -1
  195. package/dist/app/assets/{mindmap-definition-QFDTVHPH-eTB4aUJ6.js → mindmap-definition-QFDTVHPH-70NBPICA.js} +1 -1
  196. package/dist/app/assets/{mizar-D1v4Nv22.js → mizar-FFvziKde.js} +1 -1
  197. package/dist/app/assets/{mongodb-B6xPI5vi.js → mongodb-D1mzpRCd.js} +1 -1
  198. package/dist/app/assets/{monkey-8ZQGq2j6.js → monkey-dBKcwUTm.js} +1 -1
  199. package/dist/app/assets/{moonscript-qkDyELmz.js → moonscript-Bba8hj2N.js} +1 -1
  200. package/dist/app/assets/{n1ql-7qzjjhYg.js → n1ql-BKv6f_ZJ.js} +1 -1
  201. package/dist/app/assets/{n4js--0WDRpBj.js → n4js-De4nJHcC.js} +1 -1
  202. package/dist/app/assets/{nand2tetris-hdl-zYT29X94.js → nand2tetris-hdl-d6Im94up.js} +1 -1
  203. package/dist/app/assets/{naniscript-BEKVFrJA.js → naniscript-7I_PYFtb.js} +1 -1
  204. package/dist/app/assets/{nasm-BxgE8BWF.js → nasm-DtbQ_6JV.js} +1 -1
  205. package/dist/app/assets/{neon-CRmkHhWg.js → neon-7JcECa8A.js} +1 -1
  206. package/dist/app/assets/{nevod-DqOKiweO.js → nevod-BarubR7h.js} +1 -1
  207. package/dist/app/assets/{nginx-BepDunyM.js → nginx-C-Nvt6BK.js} +1 -1
  208. package/dist/app/assets/{nim-DOYwB93n.js → nim-LP-7gM1Q.js} +1 -1
  209. package/dist/app/assets/{nix-OcEzpwWS.js → nix-Msza7-r9.js} +1 -1
  210. package/dist/app/assets/{nsis-WQEGbgSb.js → nsis-N1c5jrgc.js} +1 -1
  211. package/dist/app/assets/{objectivec-B8PulHhQ.js → objectivec-qIn11zhm.js} +1 -1
  212. package/dist/app/assets/{ocaml-DrKpTrGd.js → ocaml-CM1-jZNQ.js} +1 -1
  213. package/dist/app/assets/{opencl-DJD4I4Az.js → opencl-aZRowywV.js} +1 -1
  214. package/dist/app/assets/{openqasm-BzLNaS1E.js → openqasm-DXQkGk7v.js} +1 -1
  215. package/dist/app/assets/{oz-CddQDW4N.js → oz-IpByQjyt.js} +1 -1
  216. package/dist/app/assets/{parigp-DL9Pul5Z.js → parigp-i2cpgz90.js} +1 -1
  217. package/dist/app/assets/{parser-BaeyVs6E.js → parser-DUe4fyHY.js} +1 -1
  218. package/dist/app/assets/{pascal-DZwRqOCW.js → pascal-CCbi6In9.js} +1 -1
  219. package/dist/app/assets/{pascaligo-CglPcMbu.js → pascaligo-cYiy-tQf.js} +1 -1
  220. package/dist/app/assets/{pcaxis-m1flL1nx.js → pcaxis-DUe2I8NZ.js} +1 -1
  221. package/dist/app/assets/{peoplecode-BPZXOWEd.js → peoplecode-y-WYZDRM.js} +1 -1
  222. package/dist/app/assets/{perl-DEj9sd22.js → perl-uC0qqGFo.js} +1 -1
  223. package/dist/app/assets/{php-ChAzX5Xy.js → php-Djwg1gg7.js} +1 -1
  224. package/dist/app/assets/{php-extras-BEC2cMHJ.js → php-extras-BXM2sgwu.js} +1 -1
  225. package/dist/app/assets/{phpdoc-Efem6iWX.js → phpdoc-SxUKXPYZ.js} +1 -1
  226. package/dist/app/assets/{pieDiagram-DEJITSTG-I2O3vbig.js → pieDiagram-DEJITSTG-CQfl-KLS.js} +1 -1
  227. package/dist/app/assets/{plsql-Bgiemx8O.js → plsql-C3HfRTv-.js} +1 -1
  228. package/dist/app/assets/{powerquery-DoH4a5fD.js → powerquery-a89Fj1Qs.js} +1 -1
  229. package/dist/app/assets/{powershell-CXwYZoB9.js → powershell-dX-2_G9H.js} +1 -1
  230. package/dist/app/assets/{processing-BG-k24bE.js → processing-BjXVOyvk.js} +1 -1
  231. package/dist/app/assets/{prolog-BQk3s9Cz.js → prolog-B9kdH-bl.js} +1 -1
  232. package/dist/app/assets/{promql-Cn8XzgOs.js → promql-B3BDR8es.js} +1 -1
  233. package/dist/app/assets/{properties-BzFCc7p8.js → properties-CMjA6hD5.js} +1 -1
  234. package/dist/app/assets/{protobuf-DsVZomkz.js → protobuf-DVGs9Q8Q.js} +1 -1
  235. package/dist/app/assets/{psl-BL1By2Di.js → psl-BzbEAN9s.js} +1 -1
  236. package/dist/app/assets/{pug-CJXPw-_y.js → pug-fdeIkQLg.js} +1 -1
  237. package/dist/app/assets/{puppet-BgLD34yT.js → puppet-JnrsXSZY.js} +1 -1
  238. package/dist/app/assets/{pure-D5KRS3X3.js → pure-Bsjul00Q.js} +1 -1
  239. package/dist/app/assets/{purebasic-BO_zjFwL.js → purebasic-C_mf0qxg.js} +1 -1
  240. package/dist/app/assets/{purescript-Ddc7moMi.js → purescript-P7l76DgD.js} +1 -1
  241. package/dist/app/assets/{q-CsHjuzhk.js → q-D98RUW_e.js} +1 -1
  242. package/dist/app/assets/{qml-YbRFzx0z.js → qml-CBe5bVTm.js} +1 -1
  243. package/dist/app/assets/{qore-BFgUYB1S.js → qore-CrvWCYtL.js} +1 -1
  244. package/dist/app/assets/{qsharp-DRh0td2A.js → qsharp-4BBfTlhh.js} +1 -1
  245. package/dist/app/assets/{quadrantDiagram-34T5L4WZ-sLTzbhk2.js → quadrantDiagram-34T5L4WZ-_JtlPbxc.js} +1 -1
  246. package/dist/app/assets/{r-5gqFGwLd.js → r-C-wPXw3M.js} +1 -1
  247. package/dist/app/assets/{racket-BgmD87H8.js → racket-BDc8Z2eV.js} +1 -1
  248. package/dist/app/assets/{reason-D_tR9ps8.js → reason-DBeyHA3q.js} +1 -1
  249. package/dist/app/assets/{regex-hcOGgwnQ.js → regex-yDzON3WO.js} +1 -1
  250. package/dist/app/assets/{rego-C0pl_3VC.js → rego-CWdKhPRV.js} +1 -1
  251. package/dist/app/assets/{renpy-lT_4OszV.js → renpy-COnBNW6q.js} +1 -1
  252. package/dist/app/assets/{requirementDiagram-MS252O5E-CEJ8Rcnr.js → requirementDiagram-MS252O5E-C3gIi5N5.js} +1 -1
  253. package/dist/app/assets/{rest-BBI-g8mr.js → rest-D7ADMqxp.js} +1 -1
  254. package/dist/app/assets/{rip-C3KbnjS_.js → rip-BXziA95H.js} +1 -1
  255. package/dist/app/assets/{roboconf-CoZ--fPi.js → roboconf-wb822TWS.js} +1 -1
  256. package/dist/app/assets/{robotframework-DY6-Pswb.js → robotframework-BRitqS4Z.js} +1 -1
  257. package/dist/app/assets/{ruby-Bs6f5Nvi.js → ruby-SERs2agE.js} +1 -1
  258. package/dist/app/assets/{rust-D0f4oPW4.js → rust-CPnTKWoF.js} +1 -1
  259. package/dist/app/assets/{sankeyDiagram-XADWPNL6-Dx6TM5mU.js → sankeyDiagram-XADWPNL6-C8zexvre.js} +1 -1
  260. package/dist/app/assets/{sas-RrsOkHla.js → sas-F8wqa-VH.js} +1 -1
  261. package/dist/app/assets/{sass-D3DRkshk.js → sass-sFRMpF9E.js} +1 -1
  262. package/dist/app/assets/{scala-2yub5Noi.js → scala-BjAq73X3.js} +1 -1
  263. package/dist/app/assets/{scheme-DUUET_XL.js → scheme-Dy5snFBD.js} +1 -1
  264. package/dist/app/assets/{scss-mXwcbbk-.js → scss-8PCqIjM6.js} +1 -1
  265. package/dist/app/assets/{sequenceDiagram-FGHM5R23-9GU2p9Ma.js → sequenceDiagram-FGHM5R23-DbNGiTO2.js} +1 -1
  266. package/dist/app/assets/{shell-session-DoXxry6a.js → shell-session-DEdTVxFD.js} +1 -1
  267. package/dist/app/assets/{smali-BM6j_ZPX.js → smali-Bxae2KQR.js} +1 -1
  268. package/dist/app/assets/{smalltalk-Bcd172Pc.js → smalltalk-CwOKqcjX.js} +1 -1
  269. package/dist/app/assets/{smarty-oKqEpnDS.js → smarty-kF-PSUnG.js} +1 -1
  270. package/dist/app/assets/{sml-B1upkj4b.js → sml-bomnQbFX.js} +1 -1
  271. package/dist/app/assets/{solidity-xeq40f3P.js → solidity-BAjbZMZL.js} +1 -1
  272. package/dist/app/assets/{solution-file-DRFXyDTT.js → solution-file-MmJiJ8_n.js} +1 -1
  273. package/dist/app/assets/{soy-OSBkuqMW.js → soy-DU--y6x4.js} +1 -1
  274. package/dist/app/assets/{sparql-D3k_wEdU.js → sparql-mmPoHR5x.js} +1 -1
  275. package/dist/app/assets/{splunk-spl-FKET7kp7.js → splunk-spl-hgCUw5aN.js} +1 -1
  276. package/dist/app/assets/{sqf-BSn0GDGB.js → sqf-BiiIGVoY.js} +1 -1
  277. package/dist/app/assets/{sql-D6mgKQB5.js → sql-nlDwSZBD.js} +1 -1
  278. package/dist/app/assets/{squirrel-DFu-guJ8.js → squirrel-Bqi6dvci.js} +1 -1
  279. package/dist/app/assets/{stan-CDr-fjyl.js → stan-2W_Pcetu.js} +1 -1
  280. package/dist/app/assets/{stateDiagram-FHFEXIEX-z2DiLwCm.js → stateDiagram-FHFEXIEX-pa0JGYLy.js} +1 -1
  281. package/dist/app/assets/stateDiagram-v2-QKLJ7IA2-FdxILnkg.js +1 -0
  282. package/dist/app/assets/{stylus-BFOCUvnx.js → stylus-zCZUGlqV.js} +1 -1
  283. package/dist/app/assets/{swift-uHqpQZ6J.js → swift-5sLu9EpD.js} +1 -1
  284. package/dist/app/assets/{systemd-CYQNlgLz.js → systemd-DgaHeexU.js} +1 -1
  285. package/dist/app/assets/{t4-cs-usG5jkwF.js → t4-cs-YCeMlSug.js} +1 -1
  286. package/dist/app/assets/{t4-templating-D4wDOtGr.js → t4-templating-DPzKGTo4.js} +1 -1
  287. package/dist/app/assets/{t4-vb-C1p1TL0w.js → t4-vb-BPPPhEQB.js} +1 -1
  288. package/dist/app/assets/{tap-DFMBztgQ.js → tap-Dgrqyvk-.js} +1 -1
  289. package/dist/app/assets/{tcl-BCt4zqi_.js → tcl-DHz3w70b.js} +1 -1
  290. package/dist/app/assets/{textile-Bloj03Mi.js → textile-Cr314Blk.js} +1 -1
  291. package/dist/app/assets/{timeline-definition-GMOUNBTQ-d06kVX17.js → timeline-definition-GMOUNBTQ-BLY5sqEL.js} +1 -1
  292. package/dist/app/assets/{toml-BhS4WNxa.js → toml-Bnu9rfnB.js} +1 -1
  293. package/dist/app/assets/{tremor-DviIbCpH.js → tremor-ChXFGibI.js} +1 -1
  294. package/dist/app/assets/{tt2-DE0j1lmS.js → tt2-BzVUtdxI.js} +1 -1
  295. package/dist/app/assets/{turtle-BxCayuSl.js → turtle-letBf_Bx.js} +1 -1
  296. package/dist/app/assets/{twig-DtCkUjxy.js → twig-Ni2rEZw9.js} +1 -1
  297. package/dist/app/assets/{typescript-3pYqwxJ2.js → typescript-BQofdwc1.js} +1 -1
  298. package/dist/app/assets/{typoscript-Dy8ykcri.js → typoscript-cQilTApE.js} +1 -1
  299. package/dist/app/assets/{unrealscript-C4Peef6q.js → unrealscript-CtH2g6It.js} +1 -1
  300. package/dist/app/assets/{uorazor-91g1sfeu.js → uorazor-CjvsWB8K.js} +1 -1
  301. package/dist/app/assets/{uri-DDMRMgIp.js → uri-Cs9bSTwl.js} +1 -1
  302. package/dist/app/assets/{v-2gwj9f62.js → v-Bqvis8I2.js} +1 -1
  303. package/dist/app/assets/{vala-CUiPsFoo.js → vala-BpW8rpIS.js} +1 -1
  304. package/dist/app/assets/{vbnet-Zsyt2tdN.js → vbnet-DdVGFj9N.js} +1 -1
  305. package/dist/app/assets/{velocity-CSkxzAQi.js → velocity-CHDcdQy7.js} +1 -1
  306. package/dist/app/assets/{vennDiagram-DHZGUBPP-eRSD5RJQ.js → vennDiagram-DHZGUBPP-n6Dq2r90.js} +1 -1
  307. package/dist/app/assets/{verilog-BtHxNyJ7.js → verilog-t2rEJU_-.js} +1 -1
  308. package/dist/app/assets/{vhdl-C0vU6j5h.js → vhdl-Bkv11jjq.js} +1 -1
  309. package/dist/app/assets/{vim-dvVtnnHy.js → vim-C6YVoqqV.js} +1 -1
  310. package/dist/app/assets/{visual-basic-B-m3tLsh.js → visual-basic-ozbiLbAI.js} +1 -1
  311. package/dist/app/assets/{wardley-RL74JXVD-BgTJCIjC.js → wardley-RL74JXVD-cDbpgcV_.js} +1 -1
  312. package/dist/app/assets/{wardleyDiagram-NUSXRM2D-B19yXjvI.js → wardleyDiagram-NUSXRM2D-C1uThccd.js} +1 -1
  313. package/dist/app/assets/{warpscript-1YJK0eIR.js → warpscript-BNO_EbH2.js} +1 -1
  314. package/dist/app/assets/{wasm-B18nYup5.js → wasm-Bghcf_Ud.js} +1 -1
  315. package/dist/app/assets/{web-idl-DaaOjvPO.js → web-idl-C-d3Xdl1.js} +1 -1
  316. package/dist/app/assets/{wiki-6hqpglgh.js → wiki-DI1mP-2c.js} +1 -1
  317. package/dist/app/assets/{wolfram-uGnnCOiH.js → wolfram-Sj_QoNQm.js} +1 -1
  318. package/dist/app/assets/{wren-BVgxyvFh.js → wren-Bc7J_SNZ.js} +1 -1
  319. package/dist/app/assets/{xeora-BIlCKODO.js → xeora-C6DbAKbN.js} +1 -1
  320. package/dist/app/assets/{xml-doc-COhD3a_e.js → xml-doc-CllF2qWw.js} +1 -1
  321. package/dist/app/assets/{xojo-CffC0OLi.js → xojo-BmwcGxAI.js} +1 -1
  322. package/dist/app/assets/{xquery-BysER8W6.js → xquery-WkzJyf76.js} +1 -1
  323. package/dist/app/assets/{xychartDiagram-5P7HB3ND-Ba1Vo7v6.js → xychartDiagram-5P7HB3ND-BWMpw-9z.js} +1 -1
  324. package/dist/app/assets/{yaml-BjlUOXdf.js → yaml-DaCV1ugn.js} +1 -1
  325. package/dist/app/assets/{yang-CE61CGXZ.js → yang-BxwNjc1X.js} +1 -1
  326. package/dist/app/assets/{zig-BwDJZvRM.js → zig-B-ArCifh.js} +1 -1
  327. package/dist/app/index.html +2 -2
  328. package/dist/index.cjs +708 -506
  329. package/dist/index.js +739 -535
  330. package/package.json +3 -3
  331. package/dist/app/assets/channel-C-xwEqfR.js +0 -1
  332. package/dist/app/assets/classDiagram-6PBFFD2Q-DZxfIDiK.js +0 -1
  333. package/dist/app/assets/classDiagram-v2-HSJHXN6E-DZxfIDiK.js +0 -1
  334. package/dist/app/assets/clone-nOTgxCHT.js +0 -1
  335. package/dist/app/assets/index-BAb1mpfo.css +0 -1
  336. package/dist/app/assets/stateDiagram-v2-QKLJ7IA2-CHMZFZDU.js +0 -1
package/dist/index.js CHANGED
@@ -2555,13 +2555,15 @@ var useStreamContext = () => {
2555
2555
  };
2556
2556
 
2557
2557
  // src/components/composer/ComposerMenu.tsx
2558
- import * as React12 from "react";
2558
+ import * as React13 from "react";
2559
2559
  import {
2560
+ ArrowLeft,
2560
2561
  Bot,
2561
2562
  ChevronRight,
2562
2563
  FileText,
2563
2564
  Globe,
2564
2565
  Images,
2566
+ Info,
2565
2567
  Lightbulb,
2566
2568
  ListChecks,
2567
2569
  Paperclip,
@@ -4708,25 +4710,100 @@ var Input = React8.forwardRef(
4708
4710
  );
4709
4711
  Input.displayName = "Input";
4710
4712
 
4713
+ // src/components/ui/tooltip.tsx
4714
+ import "react";
4715
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
4716
+ import { jsx as jsx11, jsxs as jsxs3 } from "react/jsx-runtime";
4717
+ function TooltipProvider({
4718
+ delayDuration = 0,
4719
+ ...props
4720
+ }) {
4721
+ return /* @__PURE__ */ jsx11(
4722
+ TooltipPrimitive.Provider,
4723
+ {
4724
+ "data-slot": "tooltip-provider",
4725
+ delayDuration,
4726
+ ...props
4727
+ }
4728
+ );
4729
+ }
4730
+ function Tooltip({
4731
+ ...props
4732
+ }) {
4733
+ return /* @__PURE__ */ jsx11(TooltipProvider, { children: /* @__PURE__ */ jsx11(
4734
+ TooltipPrimitive.Root,
4735
+ {
4736
+ "data-slot": "tooltip",
4737
+ ...props
4738
+ }
4739
+ ) });
4740
+ }
4741
+ function TooltipTrigger({
4742
+ ...props
4743
+ }) {
4744
+ return /* @__PURE__ */ jsx11(
4745
+ TooltipPrimitive.Trigger,
4746
+ {
4747
+ "data-slot": "tooltip-trigger",
4748
+ ...props
4749
+ }
4750
+ );
4751
+ }
4752
+ function TooltipContent({
4753
+ className,
4754
+ sideOffset = 0,
4755
+ hideArrow = false,
4756
+ children,
4757
+ ...props
4758
+ }) {
4759
+ return /* @__PURE__ */ jsx11(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs3(
4760
+ TooltipPrimitive.Content,
4761
+ {
4762
+ "data-slot": "tooltip-content",
4763
+ sideOffset,
4764
+ className: cn(
4765
+ "bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md px-3 py-1.5 text-xs text-balance",
4766
+ className
4767
+ ),
4768
+ ...props,
4769
+ children: [
4770
+ children,
4771
+ !hideArrow ? /* @__PURE__ */ jsx11(TooltipPrimitive.Arrow, { className: "bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" }) : null
4772
+ ]
4773
+ }
4774
+ ) });
4775
+ }
4776
+
4777
+ // src/components/composer/ConnectorMenuPanel.tsx
4778
+ import * as React12 from "react";
4779
+ import {
4780
+ ArrowUpRight,
4781
+ Cable,
4782
+ Check,
4783
+ Link2,
4784
+ Loader2,
4785
+ Search
4786
+ } from "lucide-react";
4787
+
4711
4788
  // src/components/ui/scroll-area.tsx
4712
- import * as React9 from "react";
4789
+ import * as React10 from "react";
4713
4790
  import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
4714
- import { jsx as jsx11, jsxs as jsxs3 } from "react/jsx-runtime";
4715
- var ScrollArea = React9.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs3(
4791
+ import { jsx as jsx12, jsxs as jsxs4 } from "react/jsx-runtime";
4792
+ var ScrollArea = React10.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs4(
4716
4793
  ScrollAreaPrimitive.Root,
4717
4794
  {
4718
4795
  ref,
4719
4796
  className: cn("relative min-w-0 overflow-hidden", className),
4720
4797
  ...props,
4721
4798
  children: [
4722
- /* @__PURE__ */ jsx11(ScrollAreaPrimitive.Viewport, { className: "h-full w-full min-w-0 max-w-full rounded-[inherit] [&>div]:!block [&>div]:!w-full", children }),
4723
- /* @__PURE__ */ jsx11(ScrollBar, {}),
4724
- /* @__PURE__ */ jsx11(ScrollAreaPrimitive.Corner, {})
4799
+ /* @__PURE__ */ jsx12(ScrollAreaPrimitive.Viewport, { className: "h-full w-full min-w-0 max-w-full rounded-[inherit] [&>div]:!block [&>div]:!w-full", children }),
4800
+ /* @__PURE__ */ jsx12(ScrollBar, {}),
4801
+ /* @__PURE__ */ jsx12(ScrollAreaPrimitive.Corner, {})
4725
4802
  ]
4726
4803
  }
4727
4804
  ));
4728
4805
  ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
4729
- var ScrollBar = React9.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsx11(
4806
+ var ScrollBar = React10.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ jsx12(
4730
4807
  ScrollAreaPrimitive.ScrollAreaScrollbar,
4731
4808
  {
4732
4809
  ref,
@@ -4738,27 +4815,16 @@ var ScrollBar = React9.forwardRef(({ className, orientation = "vertical", ...pro
4738
4815
  className
4739
4816
  ),
4740
4817
  ...props,
4741
- children: /* @__PURE__ */ jsx11(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
4818
+ children: /* @__PURE__ */ jsx12(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
4742
4819
  }
4743
4820
  ));
4744
4821
  ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
4745
4822
 
4746
- // src/components/composer/ConnectorMenuPanel.tsx
4747
- import * as React11 from "react";
4748
- import {
4749
- ArrowUpRight,
4750
- Cable,
4751
- Check,
4752
- Link2,
4753
- Loader2,
4754
- Search
4755
- } from "lucide-react";
4756
-
4757
4823
  // src/components/ui/separator.tsx
4758
- import * as React10 from "react";
4759
- import { jsx as jsx12 } from "react/jsx-runtime";
4760
- var Separator = React10.forwardRef(
4761
- ({ className, orientation = "horizontal", ...props }, ref) => /* @__PURE__ */ jsx12(
4824
+ import * as React11 from "react";
4825
+ import { jsx as jsx13 } from "react/jsx-runtime";
4826
+ var Separator = React11.forwardRef(
4827
+ ({ className, orientation = "horizontal", ...props }, ref) => /* @__PURE__ */ jsx13(
4762
4828
  "div",
4763
4829
  {
4764
4830
  ref,
@@ -4776,7 +4842,7 @@ var Separator = React10.forwardRef(
4776
4842
  Separator.displayName = "Separator";
4777
4843
 
4778
4844
  // src/components/composer/ConnectorMenuPanel.tsx
4779
- import { jsx as jsx13, jsxs as jsxs4 } from "react/jsx-runtime";
4845
+ import { jsx as jsx14, jsxs as jsxs5 } from "react/jsx-runtime";
4780
4846
  function resolveConnectorManagementUrl(apiUrl, scope) {
4781
4847
  const base2 = apiUrl?.trim() || window.location.href;
4782
4848
  const path = scope.type === "project" ? `/project/${encodeURIComponent(scope.projectId)}/config` : `/xpert/w/${encodeURIComponent(scope.workspaceId)}/connectors`;
@@ -4808,7 +4874,7 @@ function ConnectorIcon({
4808
4874
  label
4809
4875
  }) {
4810
4876
  if (option.icon?.type === "image" && typeof option.icon.value === "string") {
4811
- return /* @__PURE__ */ jsx13(
4877
+ return /* @__PURE__ */ jsx14(
4812
4878
  "img",
4813
4879
  {
4814
4880
  src: option.icon.value,
@@ -4817,13 +4883,13 @@ function ConnectorIcon({
4817
4883
  }
4818
4884
  );
4819
4885
  }
4820
- return /* @__PURE__ */ jsx13(
4886
+ return /* @__PURE__ */ jsx14(
4821
4887
  "span",
4822
4888
  {
4823
4889
  "aria-hidden": "true",
4824
4890
  title: label,
4825
4891
  className: "flex size-7 items-center justify-center rounded-md bg-muted text-muted-foreground",
4826
- children: /* @__PURE__ */ jsx13(Cable, { className: "size-4" })
4892
+ children: /* @__PURE__ */ jsx14(Cable, { className: "size-4" })
4827
4893
  }
4828
4894
  );
4829
4895
  }
@@ -4839,22 +4905,22 @@ function ConnectorMenuPanel({
4839
4905
  apiUrl
4840
4906
  }) {
4841
4907
  const { t, i18n: i18n2 } = useChatkitTranslation();
4842
- const [query, setQuery] = React11.useState("");
4843
- const [scope, setScope] = React11.useState(null);
4844
- const [options, setOptions] = React11.useState([]);
4845
- const [loading, setLoading] = React11.useState(false);
4846
- const [error, setError] = React11.useState(null);
4847
- const [connectingBindingId, setConnectingBindingId] = React11.useState(null);
4908
+ const [query, setQuery] = React12.useState("");
4909
+ const [scope, setScope] = React12.useState(null);
4910
+ const [options, setOptions] = React12.useState([]);
4911
+ const [loading, setLoading] = React12.useState(false);
4912
+ const [error, setError] = React12.useState(null);
4913
+ const [connectingBindingId, setConnectingBindingId] = React12.useState(null);
4848
4914
  const loadErrorMessage = t("composer.connectors.loadError");
4849
4915
  const accessDeniedMessage = t("composer.connectors.accessDenied");
4850
4916
  const scopeUnavailableMessage = t("composer.connectors.scopeUnavailable");
4851
- const pollAbortRef = React11.useRef(null);
4852
- const popupRef = React11.useRef(null);
4853
- const selectedBindingIdSet = React11.useMemo(
4917
+ const pollAbortRef = React12.useRef(null);
4918
+ const popupRef = React12.useRef(null);
4919
+ const selectedBindingIdSet = React12.useMemo(
4854
4920
  () => new Set(selectedBindingIds),
4855
4921
  [selectedBindingIds]
4856
4922
  );
4857
- const loadConnectors = React11.useCallback(
4923
+ const loadConnectors = React12.useCallback(
4858
4924
  async (signal) => {
4859
4925
  if (!client || !xpertId) return;
4860
4926
  const response = await client.connectors.runtimeOptions(xpertId, {
@@ -4866,7 +4932,7 @@ function ConnectorMenuPanel({
4866
4932
  },
4867
4933
  [client, projectId, xpertId]
4868
4934
  );
4869
- React11.useEffect(() => {
4935
+ React12.useEffect(() => {
4870
4936
  if (!client || !xpertId) {
4871
4937
  setScope(null);
4872
4938
  setOptions([]);
@@ -4889,7 +4955,7 @@ function ConnectorMenuPanel({
4889
4955
  });
4890
4956
  return () => controller.abort();
4891
4957
  }, [accessDeniedMessage, client, loadConnectors, loadErrorMessage, xpertId]);
4892
- React11.useEffect(
4958
+ React12.useEffect(
4893
4959
  () => () => {
4894
4960
  pollAbortRef.current?.abort();
4895
4961
  if (popupRef.current && !popupRef.current.closed) {
@@ -4900,7 +4966,7 @@ function ConnectorMenuPanel({
4900
4966
  );
4901
4967
  const manageUrl = scope ? resolveConnectorManagementUrl(apiUrl, scope) : null;
4902
4968
  const normalizedQuery = query.trim().toLocaleLowerCase();
4903
- const filteredOptions = React11.useMemo(
4969
+ const filteredOptions = React12.useMemo(
4904
4970
  () => options.filter((option) => {
4905
4971
  if (!normalizedQuery) return true;
4906
4972
  const searchable = `${localizeText(
@@ -4911,7 +4977,7 @@ function ConnectorMenuPanel({
4911
4977
  }),
4912
4978
  [i18n2.language, normalizedQuery, options]
4913
4979
  );
4914
- const refresh = React11.useCallback(async () => {
4980
+ const refresh = React12.useCallback(async () => {
4915
4981
  setLoading(true);
4916
4982
  try {
4917
4983
  await loadConnectors();
@@ -4920,7 +4986,7 @@ function ConnectorMenuPanel({
4920
4986
  setLoading(false);
4921
4987
  }
4922
4988
  }, [loadConnectors]);
4923
- const pollAuthorization = React11.useCallback(
4989
+ const pollAuthorization = React12.useCallback(
4924
4990
  async (bindingId, initial, popup, signal) => {
4925
4991
  if (!client) return;
4926
4992
  let status = initial;
@@ -4957,7 +5023,7 @@ function ConnectorMenuPanel({
4957
5023
  },
4958
5024
  [client, onSelectionChange, refresh, selectedBindingIds, xpertId]
4959
5025
  );
4960
- const openManageConnectors = React11.useCallback(() => {
5026
+ const openManageConnectors = React12.useCallback(() => {
4961
5027
  if (!manageUrl) {
4962
5028
  setError(scopeUnavailableMessage);
4963
5029
  return;
@@ -4969,7 +5035,7 @@ function ConnectorMenuPanel({
4969
5035
  }
4970
5036
  popup.opener = null;
4971
5037
  }, [manageUrl, scopeUnavailableMessage, t]);
4972
- const connectPersonalBinding = React11.useCallback(
5038
+ const connectPersonalBinding = React12.useCallback(
4973
5039
  async (option) => {
4974
5040
  if (!client) return;
4975
5041
  if (option.profile) {
@@ -5055,7 +5121,7 @@ function ConnectorMenuPanel({
5055
5121
  xpertId
5056
5122
  ]
5057
5123
  );
5058
- const handleOptionClick = React11.useCallback(
5124
+ const handleOptionClick = React12.useCallback(
5059
5125
  (option) => {
5060
5126
  if (!isConnectorUsable(option)) {
5061
5127
  if (option.authorizationMode === "personal") {
@@ -5076,15 +5142,15 @@ function ConnectorMenuPanel({
5076
5142
  selectedBindingIds
5077
5143
  ]
5078
5144
  );
5079
- return /* @__PURE__ */ jsxs4(
5145
+ return /* @__PURE__ */ jsxs5(
5080
5146
  "div",
5081
5147
  {
5082
5148
  "data-slot": "composer-connector-panel",
5083
5149
  className: "flex w-full min-w-0 max-w-full flex-col",
5084
5150
  children: [
5085
- /* @__PURE__ */ jsx13("div", { className: "p-3 pb-2", children: /* @__PURE__ */ jsxs4("div", { className: "relative", children: [
5086
- /* @__PURE__ */ jsx13(Search, { className: "pointer-events-none absolute left-3 top-1/2 size-5 -translate-y-1/2 text-muted-foreground" }),
5087
- /* @__PURE__ */ jsx13(
5151
+ /* @__PURE__ */ jsx14("div", { className: "p-3 pb-2", children: /* @__PURE__ */ jsxs5("div", { className: "relative", children: [
5152
+ /* @__PURE__ */ jsx14(Search, { className: "pointer-events-none absolute left-3 top-1/2 size-5 -translate-y-1/2 text-muted-foreground" }),
5153
+ /* @__PURE__ */ jsx14(
5088
5154
  Input,
5089
5155
  {
5090
5156
  value: query,
@@ -5094,15 +5160,15 @@ function ConnectorMenuPanel({
5094
5160
  }
5095
5161
  )
5096
5162
  ] }) }),
5097
- /* @__PURE__ */ jsx13(ScrollArea, { className: "max-h-72 min-h-0 px-3", children: /* @__PURE__ */ jsx13("div", { "data-slot": "composer-connector-list", className: "space-y-1 pb-2", children: loading ? /* @__PURE__ */ jsxs4(ConnectorMessage, { children: [
5098
- /* @__PURE__ */ jsx13(Loader2, { className: "mr-2 inline size-4 animate-spin" }),
5163
+ /* @__PURE__ */ jsx14(ScrollArea, { className: "max-h-72 min-h-0 px-3", children: /* @__PURE__ */ jsx14("div", { "data-slot": "composer-connector-list", className: "space-y-1 pb-2", children: loading ? /* @__PURE__ */ jsxs5(ConnectorMessage, { children: [
5164
+ /* @__PURE__ */ jsx14(Loader2, { className: "mr-2 inline size-4 animate-spin" }),
5099
5165
  t("composer.connectors.loading")
5100
- ] }) : !xpertId ? /* @__PURE__ */ jsx13(ConnectorMessage, { children: scopeUnavailableMessage }) : filteredOptions.length === 0 ? /* @__PURE__ */ jsx13(ConnectorMessage, { children: t("composer.connectors.empty") }) : filteredOptions.map((option) => {
5166
+ ] }) : !xpertId ? /* @__PURE__ */ jsx14(ConnectorMessage, { children: scopeUnavailableMessage }) : filteredOptions.length === 0 ? /* @__PURE__ */ jsx14(ConnectorMessage, { children: t("composer.connectors.empty") }) : filteredOptions.map((option) => {
5101
5167
  const label = localizeText(option.label, i18n2.language);
5102
5168
  const selected = selectedBindingIdSet.has(option.bindingId);
5103
5169
  const usable = isConnectorUsable(option);
5104
5170
  const connecting = connectingBindingId === option.bindingId;
5105
- return /* @__PURE__ */ jsxs4(
5171
+ return /* @__PURE__ */ jsxs5(
5106
5172
  "button",
5107
5173
  {
5108
5174
  type: "button",
@@ -5114,13 +5180,13 @@ function ConnectorMenuPanel({
5114
5180
  ),
5115
5181
  onClick: () => handleOptionClick(option),
5116
5182
  children: [
5117
- /* @__PURE__ */ jsx13(ConnectorIcon, { option, label }),
5118
- /* @__PURE__ */ jsxs4("span", { className: "min-w-0 flex-1", children: [
5119
- /* @__PURE__ */ jsx13("span", { className: "block truncate text-base", children: label || option.provider }),
5120
- /* @__PURE__ */ jsx13("span", { className: "block truncate text-xs text-muted-foreground", children: option.authorizationMode === "personal" ? t("composer.connectors.personal") : scope?.type === "workspace" ? t("composer.connectors.workspaceShared") : t("composer.connectors.shared") })
5183
+ /* @__PURE__ */ jsx14(ConnectorIcon, { option, label }),
5184
+ /* @__PURE__ */ jsxs5("span", { className: "min-w-0 flex-1", children: [
5185
+ /* @__PURE__ */ jsx14("span", { className: "block truncate text-base", children: label || option.provider }),
5186
+ /* @__PURE__ */ jsx14("span", { className: "block truncate text-xs text-muted-foreground", children: option.authorizationMode === "personal" ? t("composer.connectors.personal") : scope?.type === "workspace" ? t("composer.connectors.workspaceShared") : t("composer.connectors.shared") })
5121
5187
  ] }),
5122
- /* @__PURE__ */ jsxs4("span", { className: "inline-flex shrink-0 items-center gap-1.5 text-sm text-muted-foreground", children: [
5123
- connecting ? /* @__PURE__ */ jsx13(Loader2, { className: "size-4 animate-spin" }) : selected ? /* @__PURE__ */ jsx13(Check, { className: "size-4 text-primary" }) : usable ? /* @__PURE__ */ jsx13("span", { className: "size-4 rounded-full border border-current" }) : /* @__PURE__ */ jsx13(Link2, { className: "size-4" }),
5188
+ /* @__PURE__ */ jsxs5("span", { className: "inline-flex shrink-0 items-center gap-1.5 text-sm text-muted-foreground", children: [
5189
+ connecting ? /* @__PURE__ */ jsx14(Loader2, { className: "size-4 animate-spin" }) : selected ? /* @__PURE__ */ jsx14(Check, { className: "size-4 text-primary" }) : usable ? /* @__PURE__ */ jsx14("span", { className: "size-4 rounded-full border border-current" }) : /* @__PURE__ */ jsx14(Link2, { className: "size-4" }),
5124
5190
  connecting ? t("composer.connectors.connecting") : selected ? t("composer.connectors.selected") : usable ? t("composer.connectors.select") : option.authorizationMode === "personal" ? t("composer.connectors.connect") : t("composer.connectors.unavailable")
5125
5191
  ] })
5126
5192
  ]
@@ -5128,9 +5194,9 @@ function ConnectorMenuPanel({
5128
5194
  option.bindingId
5129
5195
  );
5130
5196
  }) }) }),
5131
- error ? /* @__PURE__ */ jsx13("div", { role: "alert", className: "px-4 py-2 text-sm text-destructive", children: error }) : null,
5132
- /* @__PURE__ */ jsx13(Separator, {}),
5133
- /* @__PURE__ */ jsxs4(
5197
+ error ? /* @__PURE__ */ jsx14("div", { role: "alert", className: "px-4 py-2 text-sm text-destructive", children: error }) : null,
5198
+ /* @__PURE__ */ jsx14(Separator, {}),
5199
+ /* @__PURE__ */ jsxs5(
5134
5200
  "button",
5135
5201
  {
5136
5202
  type: "button",
@@ -5138,7 +5204,7 @@ function ConnectorMenuPanel({
5138
5204
  disabled: !scope,
5139
5205
  onClick: openManageConnectors,
5140
5206
  children: [
5141
- /* @__PURE__ */ jsx13(ArrowUpRight, { className: "size-5" }),
5207
+ /* @__PURE__ */ jsx14(ArrowUpRight, { className: "size-5" }),
5142
5208
  t("composer.connectors.manage")
5143
5209
  ]
5144
5210
  }
@@ -5151,27 +5217,29 @@ function isAccessDenied(error) {
5151
5217
  return error instanceof Error && "status" in error && (error.status === 401 || error.status === 403);
5152
5218
  }
5153
5219
  function ConnectorMessage({ children }) {
5154
- return /* @__PURE__ */ jsx13("div", { className: "flex min-h-40 items-center justify-center px-4 text-center text-sm text-muted-foreground", children });
5220
+ return /* @__PURE__ */ jsx14("div", { className: "flex min-h-40 items-center justify-center px-4 text-center text-sm text-muted-foreground", children });
5155
5221
  }
5156
5222
 
5157
5223
  // src/components/composer/ComposerMenu.tsx
5158
- import { jsx as jsx14, jsxs as jsxs5 } from "react/jsx-runtime";
5224
+ import { Fragment, jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
5225
+ var COMPOSER_MENU_EXPANDED_WIDTH_REM = 33;
5226
+ var COMPOSER_MENU_COLLISION_PADDING = 12;
5159
5227
  function getIconComponent(icon) {
5160
5228
  const iconMap = {
5161
- plus: /* @__PURE__ */ jsx14(Plus, { size: 16 }),
5162
- document: /* @__PURE__ */ jsx14(FileText, { size: 16 }),
5163
- write: /* @__PURE__ */ jsx14(Pencil, { size: 16 }),
5164
- sparkle: /* @__PURE__ */ jsx14(Sparkles, { size: 16 }),
5165
- lightbulb: /* @__PURE__ */ jsx14(Lightbulb, { size: 16 }),
5166
- "settings-slider": /* @__PURE__ */ jsx14(SlidersHorizontal, { size: 16 }),
5167
- search: /* @__PURE__ */ jsx14(Search2, { size: 16 }),
5168
- globe: /* @__PURE__ */ jsx14(Globe, { size: 16 }),
5169
- images: /* @__PURE__ */ jsx14(Images, { size: 16 })
5229
+ plus: /* @__PURE__ */ jsx15(Plus, { size: 16 }),
5230
+ document: /* @__PURE__ */ jsx15(FileText, { size: 16 }),
5231
+ write: /* @__PURE__ */ jsx15(Pencil, { size: 16 }),
5232
+ sparkle: /* @__PURE__ */ jsx15(Sparkles, { size: 16 }),
5233
+ lightbulb: /* @__PURE__ */ jsx15(Lightbulb, { size: 16 }),
5234
+ "settings-slider": /* @__PURE__ */ jsx15(SlidersHorizontal, { size: 16 }),
5235
+ search: /* @__PURE__ */ jsx15(Search2, { size: 16 }),
5236
+ globe: /* @__PURE__ */ jsx15(Globe, { size: 16 }),
5237
+ images: /* @__PURE__ */ jsx15(Images, { size: 16 })
5170
5238
  };
5171
5239
  return iconMap[icon] || iconMap.sparkle;
5172
5240
  }
5173
5241
  function Toggle({ checked }) {
5174
- return /* @__PURE__ */ jsx14(
5242
+ return /* @__PURE__ */ jsx15(
5175
5243
  "span",
5176
5244
  {
5177
5245
  "aria-hidden": "true",
@@ -5179,7 +5247,7 @@ function Toggle({ checked }) {
5179
5247
  "relative inline-flex h-6 w-10 shrink-0 items-center rounded-full transition-colors",
5180
5248
  checked ? "bg-primary" : "bg-muted-foreground/20"
5181
5249
  ),
5182
- children: /* @__PURE__ */ jsx14(
5250
+ children: /* @__PURE__ */ jsx15(
5183
5251
  "span",
5184
5252
  {
5185
5253
  className: cn(
@@ -5215,13 +5283,14 @@ function ComposerMenu({
5215
5283
  }) {
5216
5284
  const { t } = useChatkitTranslation();
5217
5285
  const { theme } = useTheme();
5218
- const [open, setOpen] = React12.useState(false);
5219
- const [activePanel, setActivePanel] = React12.useState(
5286
+ const [open, setOpen] = React13.useState(false);
5287
+ const [activePanel, setActivePanel] = React13.useState(
5220
5288
  null
5221
5289
  );
5222
- const [query, setQuery] = React12.useState("");
5223
- const [collisionBoundary, setCollisionBoundary] = React12.useState();
5224
- const triggerRef = React12.useRef(null);
5290
+ const [query, setQuery] = React13.useState("");
5291
+ const [collisionBoundary, setCollisionBoundary] = React13.useState();
5292
+ const [canExpandSecondaryPanel, setCanExpandSecondaryPanel] = React13.useState(false);
5293
+ const triggerRef = React13.useRef(null);
5225
5294
  const roundedClass = getRoundedClass(theme.radius);
5226
5295
  const panelRoundedClass = getPanelRoundedClass(theme.radius);
5227
5296
  const menuItemRoundedClass = getMenuItemRoundedClass(theme.radius);
@@ -5247,8 +5316,148 @@ function ComposerMenu({
5247
5316
  setActivePanel(panel);
5248
5317
  setQuery("");
5249
5318
  };
5319
+ React13.useLayoutEffect(() => {
5320
+ if (!open || !collisionBoundary) {
5321
+ setCanExpandSecondaryPanel(false);
5322
+ return;
5323
+ }
5324
+ const updateLayout = () => {
5325
+ const trigger = triggerRef.current;
5326
+ if (!trigger) {
5327
+ setCanExpandSecondaryPanel(false);
5328
+ return;
5329
+ }
5330
+ const boundaryRect = collisionBoundary.getBoundingClientRect();
5331
+ const triggerRect = trigger.getBoundingClientRect();
5332
+ const rootFontSize = Number.parseFloat(
5333
+ window.getComputedStyle(document.documentElement).fontSize
5334
+ );
5335
+ const remInPixels = Number.isFinite(rootFontSize) ? rootFontSize : 16;
5336
+ const menuLeft = Math.max(
5337
+ triggerRect.left,
5338
+ boundaryRect.left + COMPOSER_MENU_COLLISION_PADDING
5339
+ );
5340
+ const availableWidth = boundaryRect.right - COMPOSER_MENU_COLLISION_PADDING - menuLeft;
5341
+ const requiredWidth = COMPOSER_MENU_EXPANDED_WIDTH_REM * remInPixels;
5342
+ setCanExpandSecondaryPanel(availableWidth >= requiredWidth);
5343
+ };
5344
+ updateLayout();
5345
+ window.addEventListener("resize", updateLayout);
5346
+ const resizeObserver = typeof ResizeObserver === "function" ? new ResizeObserver(updateLayout) : null;
5347
+ resizeObserver?.observe(collisionBoundary);
5348
+ if (triggerRef.current) {
5349
+ resizeObserver?.observe(triggerRef.current);
5350
+ }
5351
+ return () => {
5352
+ window.removeEventListener("resize", updateLayout);
5353
+ resizeObserver?.disconnect();
5354
+ };
5355
+ }, [collisionBoundary, open]);
5356
+ const returnToPrimaryPanel = () => {
5357
+ setActivePanel(null);
5358
+ setQuery("");
5359
+ };
5360
+ const activePanelLabel = activePanel === "targets" ? t("composer.workbuddy.targets") : activePanel === "experts" ? t("composer.workbuddy.experts") : activePanel === "skills" ? t("composer.capabilities.skills") : activePanel === "connectors" ? t("composer.workbuddy.connectors") : null;
5250
5361
  const normalizedQuery = query.trim().toLocaleLowerCase();
5251
5362
  const matchesQuery2 = (label, description) => !normalizedQuery || `${label} ${description ?? ""}`.toLocaleLowerCase().includes(normalizedQuery);
5363
+ const renderDetailPills = (label, values) => {
5364
+ if (!values?.length) return null;
5365
+ return /* @__PURE__ */ jsxs6("div", { className: "space-y-1", children: [
5366
+ /* @__PURE__ */ jsx15("div", { className: "text-[11px] font-medium uppercase text-muted-foreground", children: label }),
5367
+ /* @__PURE__ */ jsxs6("div", { className: "flex flex-wrap gap-1", children: [
5368
+ values.slice(0, 6).map((value) => /* @__PURE__ */ jsx15(
5369
+ "span",
5370
+ {
5371
+ className: "max-w-full truncate rounded-md bg-muted px-1.5 py-0.5 text-[11px] text-foreground",
5372
+ children: value
5373
+ },
5374
+ value
5375
+ )),
5376
+ values.length > 6 ? /* @__PURE__ */ jsxs6("span", { className: "rounded-md bg-muted px-1.5 py-0.5 text-[11px] text-muted-foreground", children: [
5377
+ "+",
5378
+ values.length - 6
5379
+ ] }) : null
5380
+ ] })
5381
+ ] });
5382
+ };
5383
+ const renderSubAgentDetailCard = (subAgent) => {
5384
+ const agentKind = subAgent.type === "xpert" ? t("composer.capabilities.xpertAgent") : t("composer.capabilities.agent");
5385
+ return /* @__PURE__ */ jsxs6(
5386
+ "div",
5387
+ {
5388
+ "data-slot": "runtime-sub-agent-detail-card",
5389
+ className: cn(
5390
+ "pointer-events-none w-80 space-y-3 border border-border bg-popover p-3 text-popover-foreground shadow-lg",
5391
+ panelRoundedClass
5392
+ ),
5393
+ children: [
5394
+ /* @__PURE__ */ jsxs6("div", { className: "flex items-start gap-3", children: [
5395
+ /* @__PURE__ */ jsx15(
5396
+ ChatkitAvatar,
5397
+ {
5398
+ avatar: normalizeChatkitAvatar(subAgent.avatar),
5399
+ label: subAgent.label,
5400
+ className: "h-9 w-9 shrink-0",
5401
+ fallbackClassName: "text-xs"
5402
+ }
5403
+ ),
5404
+ /* @__PURE__ */ jsxs6("div", { className: "min-w-0 flex-1", children: [
5405
+ /* @__PURE__ */ jsx15("div", { className: "truncate text-sm font-medium", children: subAgent.label }),
5406
+ /* @__PURE__ */ jsx15("div", { className: "truncate text-xs text-muted-foreground", children: subAgent.name ?? agentKind })
5407
+ ] })
5408
+ ] }),
5409
+ subAgent.description ? /* @__PURE__ */ jsx15("div", { className: "line-clamp-4 text-xs leading-5 text-muted-foreground", children: subAgent.description }) : null,
5410
+ /* @__PURE__ */ jsxs6("div", { className: "grid grid-cols-2 gap-2 text-xs", children: [
5411
+ /* @__PURE__ */ jsxs6("div", { className: "rounded-md bg-muted px-2 py-1", children: [
5412
+ /* @__PURE__ */ jsx15("span", { className: "block text-[11px] text-muted-foreground", children: t("composer.capabilities.type") }),
5413
+ /* @__PURE__ */ jsx15("span", { className: "font-medium", children: agentKind })
5414
+ ] }),
5415
+ subAgent.agentKey || subAgent.xpertId ? /* @__PURE__ */ jsxs6("div", { className: "rounded-md bg-muted px-2 py-1", children: [
5416
+ /* @__PURE__ */ jsx15("span", { className: "block text-[11px] text-muted-foreground", children: t("composer.capabilities.identifier") }),
5417
+ /* @__PURE__ */ jsx15("span", { className: "block truncate font-mono text-[11px]", children: subAgent.agentKey ?? subAgent.xpertId })
5418
+ ] }) : null
5419
+ ] }),
5420
+ renderDetailPills(
5421
+ t("composer.capabilities.tools"),
5422
+ subAgent.toolNames
5423
+ ),
5424
+ renderDetailPills(
5425
+ t("composer.capabilities.toolsets"),
5426
+ subAgent.toolsetNames
5427
+ ),
5428
+ renderDetailPills(
5429
+ t("composer.capabilities.knowledge"),
5430
+ subAgent.knowledgebaseNames
5431
+ )
5432
+ ]
5433
+ }
5434
+ );
5435
+ };
5436
+ const renderSubAgentInfoButton = (subAgent) => /* @__PURE__ */ jsxs6(Tooltip, { children: [
5437
+ /* @__PURE__ */ jsx15(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx15(
5438
+ "button",
5439
+ {
5440
+ type: "button",
5441
+ "aria-label": t("composer.capabilities.agentDetails"),
5442
+ "data-slot": "runtime-sub-agent-info-trigger",
5443
+ className: "mt-0.5 flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground",
5444
+ onClick: (event) => event.stopPropagation(),
5445
+ onPointerDown: (event) => event.stopPropagation(),
5446
+ children: /* @__PURE__ */ jsx15(Info, { size: 14 })
5447
+ }
5448
+ ) }),
5449
+ /* @__PURE__ */ jsx15(
5450
+ TooltipContent,
5451
+ {
5452
+ side: "top",
5453
+ align: "center",
5454
+ sideOffset: 8,
5455
+ hideArrow: true,
5456
+ className: "bg-transparent p-0 text-popover-foreground shadow-none",
5457
+ children: renderSubAgentDetailCard(subAgent)
5458
+ }
5459
+ )
5460
+ ] });
5252
5461
  const renderCapabilityPanel = (panel) => {
5253
5462
  const isSkills = panel === "skills";
5254
5463
  const filteredSkills = isSkills ? skills.filter((skill) => matchesQuery2(skill.label, skill.description)) : [];
@@ -5259,7 +5468,7 @@ function ComposerMenu({
5259
5468
  skill.id
5260
5469
  ) : false;
5261
5470
  const skillDescription = skill.description ?? skill.repositoryName;
5262
- return /* @__PURE__ */ jsxs5(
5471
+ return /* @__PURE__ */ jsxs6(
5263
5472
  DropdownMenuCheckboxItem,
5264
5473
  {
5265
5474
  checked: selected,
@@ -5272,14 +5481,14 @@ function ComposerMenu({
5272
5481
  selected && "bg-muted"
5273
5482
  ),
5274
5483
  children: [
5275
- /* @__PURE__ */ jsx14(
5484
+ /* @__PURE__ */ jsx15(
5276
5485
  "span",
5277
5486
  {
5278
5487
  className: cn(
5279
5488
  "flex size-7 shrink-0 items-center justify-center text-muted-foreground",
5280
5489
  skillDescription && "mt-0.5"
5281
5490
  ),
5282
- children: /* @__PURE__ */ jsx14(
5491
+ children: /* @__PURE__ */ jsx15(
5283
5492
  RuntimeCapabilityIcon,
5284
5493
  {
5285
5494
  option: {
@@ -5294,9 +5503,9 @@ function ComposerMenu({
5294
5503
  )
5295
5504
  }
5296
5505
  ),
5297
- /* @__PURE__ */ jsxs5("span", { className: "min-w-0 flex-1 text-left", children: [
5298
- /* @__PURE__ */ jsx14("span", { className: "block truncate", children: skill.label }),
5299
- skillDescription && /* @__PURE__ */ jsx14("span", { className: "block truncate text-xs text-muted-foreground", children: skillDescription })
5506
+ /* @__PURE__ */ jsxs6("span", { className: "min-w-0 flex-1 text-left", children: [
5507
+ /* @__PURE__ */ jsx15("span", { className: "block truncate", children: skill.label }),
5508
+ skillDescription && /* @__PURE__ */ jsx15("span", { className: "block truncate text-xs text-muted-foreground", children: skillDescription })
5300
5509
  ] })
5301
5510
  ]
5302
5511
  },
@@ -5322,7 +5531,7 @@ function ComposerMenu({
5322
5531
  "subAgent",
5323
5532
  subAgent.nodeKey
5324
5533
  ) : false;
5325
- return /* @__PURE__ */ jsxs5(
5534
+ return /* @__PURE__ */ jsxs6(
5326
5535
  DropdownMenuCheckboxItem,
5327
5536
  {
5328
5537
  checked: selected,
@@ -5338,7 +5547,7 @@ function ComposerMenu({
5338
5547
  selected && "bg-muted"
5339
5548
  ),
5340
5549
  children: [
5341
- /* @__PURE__ */ jsx14("span", { className: "mt-0.5 flex size-7 shrink-0 items-center justify-center text-muted-foreground", children: /* @__PURE__ */ jsx14(
5550
+ /* @__PURE__ */ jsx15("span", { className: "mt-0.5 flex size-7 shrink-0 items-center justify-center text-muted-foreground", children: /* @__PURE__ */ jsx15(
5342
5551
  RuntimeCapabilityIcon,
5343
5552
  {
5344
5553
  option: {
@@ -5351,16 +5560,17 @@ function ComposerMenu({
5351
5560
  variant: "list"
5352
5561
  }
5353
5562
  ) }),
5354
- /* @__PURE__ */ jsxs5("span", { className: "min-w-0 flex-1 text-left", children: [
5355
- /* @__PURE__ */ jsx14("span", { className: "block truncate", children: subAgent.label }),
5356
- (subAgent.description || subAgent.name) && /* @__PURE__ */ jsx14("span", { className: "block truncate text-xs text-muted-foreground", children: subAgent.description ?? subAgent.name })
5357
- ] })
5563
+ /* @__PURE__ */ jsxs6("span", { className: "min-w-0 flex-1 text-left", children: [
5564
+ /* @__PURE__ */ jsx15("span", { className: "block truncate", children: subAgent.label }),
5565
+ (subAgent.description || subAgent.name) && /* @__PURE__ */ jsx15("span", { className: "block truncate text-xs text-muted-foreground", children: subAgent.description ?? subAgent.name })
5566
+ ] }),
5567
+ renderSubAgentInfoButton(subAgent)
5358
5568
  ]
5359
5569
  },
5360
5570
  subAgent.nodeKey
5361
5571
  );
5362
5572
  });
5363
- const toolRows = isSkills ? tools.filter((tool) => matchesQuery2(tool.label, tool.shortLabel)).map((tool) => /* @__PURE__ */ jsxs5(
5573
+ const toolRows = isSkills ? tools.filter((tool) => matchesQuery2(tool.label, tool.shortLabel)).map((tool) => /* @__PURE__ */ jsxs6(
5364
5574
  "button",
5365
5575
  {
5366
5576
  type: "button",
@@ -5373,14 +5583,14 @@ function ComposerMenu({
5373
5583
  setOpen(false);
5374
5584
  },
5375
5585
  children: [
5376
- /* @__PURE__ */ jsx14("span", { className: "flex size-7 shrink-0 items-center justify-center text-muted-foreground", children: getIconComponent(tool.icon) }),
5377
- /* @__PURE__ */ jsx14("span", { className: "truncate", children: tool.label })
5586
+ /* @__PURE__ */ jsx15("span", { className: "flex size-7 shrink-0 items-center justify-center text-muted-foreground", children: getIconComponent(tool.icon) }),
5587
+ /* @__PURE__ */ jsx15("span", { className: "truncate", children: tool.label })
5378
5588
  ]
5379
5589
  },
5380
5590
  tool.id
5381
5591
  )) : [];
5382
- return /* @__PURE__ */ jsxs5(SecondaryPanel, { panelRoundedClass, children: [
5383
- /* @__PURE__ */ jsx14(
5592
+ return /* @__PURE__ */ jsxs6(Fragment, { children: [
5593
+ /* @__PURE__ */ jsx15(
5384
5594
  PanelSearch,
5385
5595
  {
5386
5596
  value: query,
@@ -5390,29 +5600,109 @@ function ComposerMenu({
5390
5600
  )
5391
5601
  }
5392
5602
  ),
5393
- /* @__PURE__ */ jsx14(ScrollArea, { className: "h-72 px-2 pb-2", children: /* @__PURE__ */ jsxs5("div", { "data-slot": "composer-capability-list", className: "space-y-1", children: [
5394
- isSkills && expertSkills.length > 0 ? /* @__PURE__ */ jsx14(SkillGroup, { label: t("composer.workbuddy.expertSkills"), children: expertSkills.map(renderSkillRow) }) : null,
5395
- isSkills ? Array.from(projectSkillGroups.entries()).map(
5396
- ([projectLabel, projectSkills]) => /* @__PURE__ */ jsx14(
5397
- SkillGroup,
5398
- {
5399
- label: t("composer.workbuddy.projectSkills", {
5400
- project: projectLabel
5401
- }),
5402
- children: projectSkills.map(renderSkillRow)
5403
- },
5404
- projectLabel
5405
- )
5406
- ) : capabilityRows,
5407
- toolRows,
5408
- (isSkills ? filteredSkills.length : capabilityRows.length) === 0 && toolRows.length === 0 ? /* @__PURE__ */ jsx14("div", { className: "flex min-h-32 items-center justify-center px-4 text-center text-sm text-muted-foreground", children: t(
5409
- isSkills ? "composer.workbuddy.emptySkills" : "composer.workbuddy.emptyExperts"
5410
- ) }) : null
5411
- ] }) })
5603
+ /* @__PURE__ */ jsx15(
5604
+ "div",
5605
+ {
5606
+ "data-slot": "composer-capability-scroll",
5607
+ className: "max-h-72 overflow-y-auto overscroll-contain px-2 pb-2",
5608
+ children: /* @__PURE__ */ jsxs6("div", { "data-slot": "composer-capability-list", className: "space-y-1", children: [
5609
+ isSkills && expertSkills.length > 0 ? /* @__PURE__ */ jsx15(SkillGroup, { label: t("composer.workbuddy.expertSkills"), children: expertSkills.map(renderSkillRow) }) : null,
5610
+ isSkills ? Array.from(projectSkillGroups.entries()).map(
5611
+ ([projectLabel, projectSkills]) => /* @__PURE__ */ jsx15(
5612
+ SkillGroup,
5613
+ {
5614
+ label: t("composer.workbuddy.projectSkills", {
5615
+ project: projectLabel
5616
+ }),
5617
+ children: projectSkills.map(renderSkillRow)
5618
+ },
5619
+ projectLabel
5620
+ )
5621
+ ) : capabilityRows,
5622
+ toolRows,
5623
+ (isSkills ? filteredSkills.length : capabilityRows.length) === 0 && toolRows.length === 0 ? /* @__PURE__ */ jsx15("div", { className: "flex min-h-32 items-center justify-center px-4 text-center text-sm text-muted-foreground", children: t(
5624
+ isSkills ? "composer.workbuddy.emptySkills" : "composer.workbuddy.emptyExperts"
5625
+ ) }) : null
5626
+ ] })
5627
+ }
5628
+ )
5412
5629
  ] });
5413
5630
  };
5414
- return /* @__PURE__ */ jsxs5(DropdownMenu, { open, onOpenChange: handleOpenChange, modal: false, children: [
5415
- /* @__PURE__ */ jsx14(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx14(
5631
+ const primaryPanel = /* @__PURE__ */ jsxs6(
5632
+ "div",
5633
+ {
5634
+ "data-slot": "composer-primary-panel",
5635
+ className: cn(
5636
+ "w-64 max-w-full shrink-0 overflow-hidden bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10",
5637
+ panelRoundedClass
5638
+ ),
5639
+ children: [
5640
+ /* @__PURE__ */ jsxs6(
5641
+ DropdownMenuItem,
5642
+ {
5643
+ disabled: !attachmentsEnabled,
5644
+ onSelect: onAttachmentClick,
5645
+ className: cn("gap-3 p-1.5 font-normal", menuItemRoundedClass),
5646
+ children: [
5647
+ /* @__PURE__ */ jsx15(Paperclip, { className: "size-5" }),
5648
+ /* @__PURE__ */ jsx15("span", { className: "flex-1 text-base", children: t("composer.addAttachment") }),
5649
+ /* @__PURE__ */ jsx15(ChevronRight, { className: "size-4" })
5650
+ ]
5651
+ }
5652
+ ),
5653
+ /* @__PURE__ */ jsx15(DropdownMenuSeparator, { className: "my-2" }),
5654
+ /* @__PURE__ */ jsx15(
5655
+ PrimaryPanelItem,
5656
+ {
5657
+ icon: /* @__PURE__ */ jsx15(Target, {}),
5658
+ label: t("composer.workbuddy.targets"),
5659
+ active: activePanel === "targets",
5660
+ onSelect: () => choosePanel("targets"),
5661
+ className: menuItemRoundedClass
5662
+ }
5663
+ ),
5664
+ /* @__PURE__ */ jsx15(
5665
+ PrimaryPanelItem,
5666
+ {
5667
+ icon: /* @__PURE__ */ jsx15(Bot, {}),
5668
+ label: t("composer.workbuddy.experts"),
5669
+ count: selectedSubAgentCount,
5670
+ active: activePanel === "experts",
5671
+ onSelect: () => choosePanel("experts"),
5672
+ className: menuItemRoundedClass
5673
+ }
5674
+ ),
5675
+ /* @__PURE__ */ jsx15(
5676
+ PrimaryPanelItem,
5677
+ {
5678
+ icon: /* @__PURE__ */ jsx15(WandSparkles, {}),
5679
+ label: t("composer.capabilities.skills"),
5680
+ count: selectedSkillCount,
5681
+ active: activePanel === "skills",
5682
+ onSelect: () => choosePanel("skills"),
5683
+ className: menuItemRoundedClass
5684
+ }
5685
+ ),
5686
+ /* @__PURE__ */ jsx15(
5687
+ PrimaryPanelItem,
5688
+ {
5689
+ icon: /* @__PURE__ */ jsx15(Plug2, {}),
5690
+ label: t("composer.workbuddy.connectors"),
5691
+ count: selectedConnectorBindingIds?.length ?? 0,
5692
+ active: activePanel === "connectors",
5693
+ disabled: !connectorsEnabled,
5694
+ onSelect: () => choosePanel("connectors"),
5695
+ className: menuItemRoundedClass
5696
+ }
5697
+ )
5698
+ ]
5699
+ }
5700
+ );
5701
+ const secondaryPanelExpandsRight = Boolean(
5702
+ activePanel && activePanelLabel && canExpandSecondaryPanel
5703
+ );
5704
+ return /* @__PURE__ */ jsxs6(DropdownMenu, { open, onOpenChange: handleOpenChange, modal: false, children: [
5705
+ /* @__PURE__ */ jsx15(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx15(
5416
5706
  Button,
5417
5707
  {
5418
5708
  ref: triggerRef,
@@ -5426,7 +5716,7 @@ function ComposerMenu({
5426
5716
  "size-9 shrink-0 transition-[background-color,border-radius] duration-300 hover:bg-muted",
5427
5717
  open ? "rounded-full bg-muted" : roundedClass
5428
5718
  ),
5429
- children: /* @__PURE__ */ jsx14(
5719
+ children: /* @__PURE__ */ jsx15(
5430
5720
  Plus,
5431
5721
  {
5432
5722
  className: cn(
@@ -5437,173 +5727,116 @@ function ComposerMenu({
5437
5727
  )
5438
5728
  }
5439
5729
  ) }),
5440
- /* @__PURE__ */ jsx14(
5730
+ /* @__PURE__ */ jsx15(
5441
5731
  DropdownMenuContent,
5442
5732
  {
5443
5733
  align: "start",
5444
5734
  side: "top",
5445
5735
  sideOffset: 8,
5446
5736
  collisionBoundary,
5447
- collisionPadding: 12,
5737
+ collisionPadding: COMPOSER_MENU_COLLISION_PADDING,
5738
+ "data-layout": canExpandSecondaryPanel ? "wide" : "narrow",
5448
5739
  className: cn(
5449
- "bg-transparent shadow-none ring-0",
5450
- activePanel ? "w-[37rem] max-w-(--radix-dropdown-menu-content-available-width) overflow-visible p-1" : "w-[16.5rem] overflow-visible p-1"
5740
+ "max-w-(--radix-dropdown-menu-content-available-width) bg-transparent p-1 shadow-none ring-0",
5741
+ secondaryPanelExpandsRight ? "w-[33rem] overflow-visible" : "w-[16.5rem] overflow-hidden"
5451
5742
  ),
5452
- children: /* @__PURE__ */ jsxs5(
5743
+ children: /* @__PURE__ */ jsxs6(
5453
5744
  "div",
5454
5745
  {
5746
+ "data-slot": "composer-menu-layout",
5455
5747
  className: cn(
5456
- "items-end gap-2",
5457
- activePanel ? "flex w-full min-w-0" : "flex"
5748
+ "flex items-end",
5749
+ secondaryPanelExpandsRight && "w-full min-w-0 gap-2"
5458
5750
  ),
5459
5751
  children: [
5460
- /* @__PURE__ */ jsxs5(
5461
- "div",
5462
- {
5463
- "data-slot": "composer-primary-panel",
5464
- className: cn(
5465
- "w-64 max-w-full shrink-0 overflow-hidden bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10",
5466
- panelRoundedClass
5467
- ),
5468
- children: [
5469
- /* @__PURE__ */ jsxs5(
5470
- DropdownMenuItem,
5471
- {
5472
- disabled: !attachmentsEnabled,
5473
- onSelect: onAttachmentClick,
5474
- className: cn("gap-3 p-1.5 font-normal", menuItemRoundedClass),
5475
- children: [
5476
- /* @__PURE__ */ jsx14(Paperclip, { className: "size-5" }),
5477
- /* @__PURE__ */ jsx14("span", { className: "flex-1 text-base", children: t("composer.addAttachment") }),
5478
- /* @__PURE__ */ jsx14(ChevronRight, { className: "size-4" })
5479
- ]
5480
- }
5481
- ),
5482
- /* @__PURE__ */ jsx14(DropdownMenuSeparator, { className: "my-2" }),
5483
- /* @__PURE__ */ jsx14(
5484
- PrimaryPanelItem,
5485
- {
5486
- icon: /* @__PURE__ */ jsx14(Target, {}),
5487
- label: t("composer.workbuddy.targets"),
5488
- active: activePanel === "targets",
5489
- onSelect: () => choosePanel("targets"),
5490
- className: menuItemRoundedClass
5491
- }
5492
- ),
5493
- /* @__PURE__ */ jsx14(
5494
- PrimaryPanelItem,
5495
- {
5496
- icon: /* @__PURE__ */ jsx14(Bot, {}),
5497
- label: t("composer.workbuddy.experts"),
5498
- count: selectedSubAgentCount,
5499
- active: activePanel === "experts",
5500
- onSelect: () => choosePanel("experts"),
5501
- className: menuItemRoundedClass
5502
- }
5503
- ),
5504
- /* @__PURE__ */ jsx14(
5505
- PrimaryPanelItem,
5506
- {
5507
- icon: /* @__PURE__ */ jsx14(WandSparkles, {}),
5508
- label: t("composer.capabilities.skills"),
5509
- count: selectedSkillCount,
5510
- active: activePanel === "skills",
5511
- onSelect: () => choosePanel("skills"),
5512
- className: menuItemRoundedClass
5513
- }
5514
- ),
5515
- /* @__PURE__ */ jsx14(
5516
- PrimaryPanelItem,
5517
- {
5518
- icon: /* @__PURE__ */ jsx14(Plug2, {}),
5519
- label: t("composer.workbuddy.connectors"),
5520
- count: selectedConnectorBindingIds?.length ?? 0,
5521
- active: activePanel === "connectors",
5522
- disabled: !connectorsEnabled,
5523
- onSelect: () => choosePanel("connectors"),
5524
- className: menuItemRoundedClass
5525
- }
5526
- )
5527
- ]
5528
- }
5529
- ),
5530
- activePanel === "targets" ? /* @__PURE__ */ jsx14(SecondaryPanel, { panelRoundedClass, children: /* @__PURE__ */ jsxs5("div", { className: "space-y-1 p-1", children: [
5531
- /* @__PURE__ */ jsxs5(
5532
- DropdownMenuItem,
5752
+ secondaryPanelExpandsRight ? primaryPanel : null,
5753
+ activePanel && activePanelLabel ? /* @__PURE__ */ jsxs6(SecondaryPanel, { panelRoundedClass, children: [
5754
+ !secondaryPanelExpandsRight ? /* @__PURE__ */ jsx15(
5755
+ PanelHeader,
5533
5756
  {
5534
- role: "switch",
5535
- "aria-checked": goalPanelOpen,
5536
- disabled: !goalCommandAvailable,
5537
- onSelect: (event) => {
5538
- event.preventDefault();
5539
- onGoalPanelOpenChange?.(!goalPanelOpen);
5540
- },
5541
- className: cn(
5542
- "gap-3 p-1.5",
5543
- menuItemRoundedClass,
5544
- goalPanelOpen && "bg-muted"
5545
- ),
5546
- children: [
5547
- /* @__PURE__ */ jsx14(Target, { className: "size-5" }),
5548
- /* @__PURE__ */ jsx14("span", { className: "min-w-0 flex-1 text-base", children: t("chat.goal.label") }),
5549
- /* @__PURE__ */ jsx14(Toggle, { checked: goalPanelOpen })
5550
- ]
5757
+ label: activePanelLabel,
5758
+ onBack: returnToPrimaryPanel,
5759
+ className: menuItemRoundedClass
5551
5760
  }
5552
- ),
5553
- /* @__PURE__ */ jsxs5(
5554
- DropdownMenuItem,
5761
+ ) : null,
5762
+ activePanel === "targets" ? /* @__PURE__ */ jsxs6("div", { className: "space-y-1 p-1", children: [
5763
+ /* @__PURE__ */ jsxs6(
5764
+ DropdownMenuItem,
5765
+ {
5766
+ role: "switch",
5767
+ "aria-checked": goalPanelOpen,
5768
+ disabled: !goalCommandAvailable,
5769
+ onSelect: (event) => {
5770
+ event.preventDefault();
5771
+ onGoalPanelOpenChange?.(!goalPanelOpen);
5772
+ },
5773
+ className: cn(
5774
+ "gap-3 p-1.5",
5775
+ menuItemRoundedClass,
5776
+ goalPanelOpen && "bg-muted"
5777
+ ),
5778
+ children: [
5779
+ /* @__PURE__ */ jsx15(Target, { className: "size-5" }),
5780
+ /* @__PURE__ */ jsx15("span", { className: "min-w-0 flex-1 text-base", children: t("chat.goal.label") }),
5781
+ /* @__PURE__ */ jsx15(Toggle, { checked: goalPanelOpen })
5782
+ ]
5783
+ }
5784
+ ),
5785
+ /* @__PURE__ */ jsxs6(
5786
+ DropdownMenuItem,
5787
+ {
5788
+ role: "switch",
5789
+ "aria-checked": planModeEnabled,
5790
+ onSelect: (event) => {
5791
+ event.preventDefault();
5792
+ onPlanModeChange?.(!planModeEnabled);
5793
+ },
5794
+ className: cn(
5795
+ "gap-3 p-1.5",
5796
+ menuItemRoundedClass,
5797
+ planModeEnabled && "bg-muted"
5798
+ ),
5799
+ children: [
5800
+ /* @__PURE__ */ jsx15(ListChecks, { className: "size-5" }),
5801
+ /* @__PURE__ */ jsx15("span", { className: "min-w-0 flex-1 text-base", children: t("composer.planMode") }),
5802
+ /* @__PURE__ */ jsx15(Toggle, { checked: planModeEnabled })
5803
+ ]
5804
+ }
5805
+ )
5806
+ ] }) : activePanel === "experts" || activePanel === "skills" ? renderCapabilityPanel(activePanel) : /* @__PURE__ */ jsx15(
5807
+ ConnectorMenuPanel,
5555
5808
  {
5556
- role: "switch",
5557
- "aria-checked": planModeEnabled,
5558
- onSelect: (event) => {
5559
- event.preventDefault();
5560
- onPlanModeChange?.(!planModeEnabled);
5561
- },
5562
- className: cn(
5563
- "gap-3 p-1.5",
5564
- menuItemRoundedClass,
5565
- planModeEnabled && "bg-muted"
5566
- ),
5567
- children: [
5568
- /* @__PURE__ */ jsx14(ListChecks, { className: "size-5" }),
5569
- /* @__PURE__ */ jsx14("span", { className: "min-w-0 flex-1 text-base", children: t("composer.planMode") }),
5570
- /* @__PURE__ */ jsx14(Toggle, { checked: planModeEnabled })
5571
- ]
5809
+ client: connectorClient ?? null,
5810
+ xpertId: connectorXpertId,
5811
+ projectId: connectorProjectId,
5812
+ selectedBindingIds: selectedConnectorBindingIds,
5813
+ onSelectionChange: onConnectorSelectionChange,
5814
+ apiUrl
5572
5815
  }
5573
5816
  )
5574
- ] }) }) : activePanel === "experts" || activePanel === "skills" ? renderCapabilityPanel(activePanel) : activePanel === "connectors" ? /* @__PURE__ */ jsx14(SecondaryPanel, { panelRoundedClass, children: /* @__PURE__ */ jsx14(
5575
- ConnectorMenuPanel,
5576
- {
5577
- client: connectorClient ?? null,
5578
- xpertId: connectorXpertId,
5579
- projectId: connectorProjectId,
5580
- selectedBindingIds: selectedConnectorBindingIds,
5581
- onSelectionChange: onConnectorSelectionChange,
5582
- apiUrl
5583
- }
5584
- ) }) : null
5817
+ ] }) : primaryPanel
5585
5818
  ]
5586
5819
  }
5587
5820
  )
5588
5821
  }
5589
5822
  ),
5590
- planModeEnabled ? /* @__PURE__ */ jsx14(
5823
+ planModeEnabled ? /* @__PURE__ */ jsx15(
5591
5824
  ActiveIndicator,
5592
5825
  {
5593
5826
  label: t("composer.planModeActive"),
5594
5827
  ariaLabel: t("composer.disablePlanMode"),
5595
- icon: /* @__PURE__ */ jsx14(ListChecks, {}),
5828
+ icon: /* @__PURE__ */ jsx15(ListChecks, {}),
5596
5829
  roundedClass,
5597
5830
  disabled,
5598
5831
  onClick: () => onPlanModeChange?.(false)
5599
5832
  }
5600
5833
  ) : null,
5601
- goalCommandAvailable && goalPanelOpen ? /* @__PURE__ */ jsx14(
5834
+ goalCommandAvailable && goalPanelOpen ? /* @__PURE__ */ jsx15(
5602
5835
  ActiveIndicator,
5603
5836
  {
5604
5837
  label: t("chat.goal.label"),
5605
5838
  ariaLabel: t("chat.goal.hide"),
5606
- icon: /* @__PURE__ */ jsx14(Target, {}),
5839
+ icon: /* @__PURE__ */ jsx15(Target, {}),
5607
5840
  roundedClass,
5608
5841
  disabled,
5609
5842
  onClick: () => onGoalPanelOpenChange?.(false)
@@ -5611,6 +5844,29 @@ function ComposerMenu({
5611
5844
  ) : null
5612
5845
  ] });
5613
5846
  }
5847
+ function PanelHeader({
5848
+ label,
5849
+ onBack,
5850
+ className
5851
+ }) {
5852
+ return /* @__PURE__ */ jsxs6(Fragment, { children: [
5853
+ /* @__PURE__ */ jsxs6(
5854
+ DropdownMenuItem,
5855
+ {
5856
+ onSelect: (event) => {
5857
+ event.preventDefault();
5858
+ onBack();
5859
+ },
5860
+ className: cn("gap-3 p-1.5 font-normal", className),
5861
+ children: [
5862
+ /* @__PURE__ */ jsx15(ArrowLeft, { className: "size-5" }),
5863
+ /* @__PURE__ */ jsx15("span", { className: "min-w-0 flex-1 text-base", children: label })
5864
+ ]
5865
+ }
5866
+ ),
5867
+ /* @__PURE__ */ jsx15(DropdownMenuSeparator, { className: "my-0" })
5868
+ ] });
5869
+ }
5614
5870
  function PrimaryPanelItem({
5615
5871
  icon,
5616
5872
  label,
@@ -5620,7 +5876,7 @@ function PrimaryPanelItem({
5620
5876
  onSelect,
5621
5877
  className
5622
5878
  }) {
5623
- return /* @__PURE__ */ jsxs5(
5879
+ return /* @__PURE__ */ jsxs6(
5624
5880
  DropdownMenuItem,
5625
5881
  {
5626
5882
  disabled,
@@ -5630,10 +5886,10 @@ function PrimaryPanelItem({
5630
5886
  },
5631
5887
  className: cn("gap-3 p-1.5 font-normal", className, active && "bg-muted"),
5632
5888
  children: [
5633
- React12.cloneElement(icon, { className: "size-5" }),
5634
- /* @__PURE__ */ jsx14("span", { className: "min-w-0 flex-1 text-base", children: label }),
5635
- count > 0 ? /* @__PURE__ */ jsx14("span", { className: "rounded-full bg-primary/10 px-1.5 py-0.5 text-xs font-normal text-primary", children: count }) : null,
5636
- /* @__PURE__ */ jsx14(ChevronRight, { className: "size-4" })
5889
+ React13.cloneElement(icon, { className: "size-5" }),
5890
+ /* @__PURE__ */ jsx15("span", { className: "min-w-0 flex-1 text-base", children: label }),
5891
+ count > 0 ? /* @__PURE__ */ jsx15("span", { className: "rounded-full bg-primary/10 px-1.5 py-0.5 text-xs font-normal text-primary", children: count }) : null,
5892
+ /* @__PURE__ */ jsx15(ChevronRight, { className: "size-4" })
5637
5893
  ]
5638
5894
  }
5639
5895
  );
@@ -5642,20 +5898,20 @@ function SecondaryPanel({
5642
5898
  panelRoundedClass,
5643
5899
  children
5644
5900
  }) {
5645
- return /* @__PURE__ */ jsx14(
5901
+ return /* @__PURE__ */ jsx15(
5646
5902
  "div",
5647
5903
  {
5648
5904
  "data-slot": "composer-secondary-panel",
5649
5905
  className: cn(
5650
- "min-w-0 max-w-full flex-1 overflow-hidden bg-popover text-popover-foreground shadow-lg ring-1 ring-foreground/10",
5906
+ "w-64 min-w-0 max-w-full overflow-hidden bg-popover text-popover-foreground shadow-lg ring-1 ring-foreground/10",
5651
5907
  panelRoundedClass
5652
5908
  ),
5653
- children: /* @__PURE__ */ jsx14(
5909
+ children: /* @__PURE__ */ jsx15(
5654
5910
  "div",
5655
5911
  {
5656
5912
  "data-slot": "composer-secondary-scroll",
5657
- className: "w-full min-w-0 overflow-x-auto overflow-y-hidden overscroll-x-contain",
5658
- children: /* @__PURE__ */ jsx14("div", { className: "w-full min-w-80", children })
5913
+ className: "w-full min-w-0 overflow-x-hidden",
5914
+ children: /* @__PURE__ */ jsx15("div", { className: "w-full min-w-0", children })
5659
5915
  }
5660
5916
  )
5661
5917
  }
@@ -5666,9 +5922,9 @@ function PanelSearch({
5666
5922
  onChange,
5667
5923
  placeholder
5668
5924
  }) {
5669
- return /* @__PURE__ */ jsxs5("div", { className: "relative p-2", children: [
5670
- /* @__PURE__ */ jsx14(Search2, { className: "pointer-events-none absolute left-5 top-1/2 size-5 -translate-y-1/2 text-muted-foreground" }),
5671
- /* @__PURE__ */ jsx14(
5925
+ return /* @__PURE__ */ jsx15("div", { "data-slot": "composer-panel-search", className: "px-2 pt-1 pb-2", children: /* @__PURE__ */ jsxs6("div", { className: "relative", children: [
5926
+ /* @__PURE__ */ jsx15(Search2, { className: "pointer-events-none absolute left-3 top-1/2 size-5 -translate-y-1/2 text-muted-foreground" }),
5927
+ /* @__PURE__ */ jsx15(
5672
5928
  Input,
5673
5929
  {
5674
5930
  autoFocus: true,
@@ -5678,14 +5934,14 @@ function PanelSearch({
5678
5934
  className: "h-8 border-0 bg-muted pl-10 text-base shadow-none focus-visible:ring-1"
5679
5935
  }
5680
5936
  )
5681
- ] });
5937
+ ] }) });
5682
5938
  }
5683
5939
  function SkillGroup({
5684
5940
  label,
5685
5941
  children
5686
5942
  }) {
5687
- return /* @__PURE__ */ jsxs5("section", { "data-slot": "composer-skill-group", className: "space-y-1", children: [
5688
- /* @__PURE__ */ jsx14("div", { className: "px-1.5 pt-1 text-xs font-normal text-muted-foreground", children: label }),
5943
+ return /* @__PURE__ */ jsxs6("section", { "data-slot": "composer-skill-group", className: "space-y-1", children: [
5944
+ /* @__PURE__ */ jsx15("div", { className: "px-1.5 pt-1 text-xs font-normal text-muted-foreground", children: label }),
5689
5945
  children
5690
5946
  ] });
5691
5947
  }
@@ -5697,7 +5953,7 @@ function ActiveIndicator({
5697
5953
  disabled,
5698
5954
  onClick
5699
5955
  }) {
5700
- return /* @__PURE__ */ jsxs5(
5956
+ return /* @__PURE__ */ jsxs6(
5701
5957
  "button",
5702
5958
  {
5703
5959
  type: "button",
@@ -5709,28 +5965,28 @@ function ActiveIndicator({
5709
5965
  roundedClass
5710
5966
  ),
5711
5967
  children: [
5712
- React12.cloneElement(icon, { className: "mr-1.5 size-3.5" }),
5713
- /* @__PURE__ */ jsx14("span", { children: label }),
5714
- /* @__PURE__ */ jsx14(X, { className: "ml-0 h-3.5 w-0 shrink-0 overflow-hidden opacity-0 transition-[width,margin,opacity] duration-200 group-hover/indicator:ml-1 group-hover/indicator:w-3.5 group-hover/indicator:opacity-100 group-focus-visible/indicator:ml-1 group-focus-visible/indicator:w-3.5 group-focus-visible/indicator:opacity-100" })
5968
+ React13.cloneElement(icon, { className: "mr-1.5 size-3.5" }),
5969
+ /* @__PURE__ */ jsx15("span", { children: label }),
5970
+ /* @__PURE__ */ jsx15(X, { className: "ml-0 h-3.5 w-0 shrink-0 overflow-hidden opacity-0 transition-[width,margin,opacity] duration-200 group-hover/indicator:ml-1 group-hover/indicator:w-3.5 group-hover/indicator:opacity-100 group-focus-visible/indicator:ml-1 group-focus-visible/indicator:w-3.5 group-focus-visible/indicator:opacity-100" })
5715
5971
  ]
5716
5972
  }
5717
5973
  );
5718
5974
  }
5719
5975
 
5720
5976
  // src/components/composer/ModelPicker.tsx
5721
- import * as React13 from "react";
5977
+ import * as React14 from "react";
5722
5978
  import { Bot as Bot2, ChevronDown, SlidersHorizontal as SlidersHorizontal2 } from "lucide-react";
5723
- import { jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
5979
+ import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
5724
5980
  function ModelProviderAvatar({
5725
5981
  avatar,
5726
5982
  className,
5727
5983
  imageClassName,
5728
5984
  iconClassName
5729
5985
  }) {
5730
- const [failedUrl, setFailedUrl] = React13.useState(null);
5986
+ const [failedUrl, setFailedUrl] = React14.useState(null);
5731
5987
  const avatarUrl = avatar?.url;
5732
5988
  const showImage = Boolean(avatarUrl && failedUrl !== avatarUrl);
5733
- return /* @__PURE__ */ jsx15(
5989
+ return /* @__PURE__ */ jsx16(
5734
5990
  "span",
5735
5991
  {
5736
5992
  "aria-hidden": "true",
@@ -5740,7 +5996,7 @@ function ModelProviderAvatar({
5740
5996
  className
5741
5997
  ),
5742
5998
  style: avatar?.background ? { backgroundColor: avatar.background } : void 0,
5743
- children: showImage ? /* @__PURE__ */ jsx15(
5999
+ children: showImage ? /* @__PURE__ */ jsx16(
5744
6000
  "img",
5745
6001
  {
5746
6002
  "data-slot": "model-provider-avatar-image",
@@ -5749,7 +6005,7 @@ function ModelProviderAvatar({
5749
6005
  className: cn("size-full object-contain p-1", imageClassName),
5750
6006
  onError: () => setFailedUrl(avatarUrl ?? null)
5751
6007
  }
5752
- ) : /* @__PURE__ */ jsx15(Bot2, { "aria-hidden": "true", className: cn("size-3.5", iconClassName) })
6008
+ ) : /* @__PURE__ */ jsx16(Bot2, { "aria-hidden": "true", className: cn("size-3.5", iconClassName) })
5753
6009
  }
5754
6010
  );
5755
6011
  }
@@ -5765,8 +6021,8 @@ function ModelPicker({
5765
6021
  const selectedModel = enabledModels.find(
5766
6022
  (model) => model.id === selectedModelId
5767
6023
  );
5768
- return /* @__PURE__ */ jsxs6(DropdownMenu, { children: [
5769
- /* @__PURE__ */ jsx15(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs6(
6024
+ return /* @__PURE__ */ jsxs7(DropdownMenu, { children: [
6025
+ /* @__PURE__ */ jsx16(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs7(
5770
6026
  "button",
5771
6027
  {
5772
6028
  type: "button",
@@ -5780,7 +6036,7 @@ function ModelPicker({
5780
6036
  "disabled:pointer-events-none disabled:opacity-50"
5781
6037
  ),
5782
6038
  children: [
5783
- /* @__PURE__ */ jsx15(
6039
+ /* @__PURE__ */ jsx16(
5784
6040
  ModelProviderAvatar,
5785
6041
  {
5786
6042
  avatar: selectedModel?.avatar,
@@ -5789,8 +6045,8 @@ function ModelPicker({
5789
6045
  iconClassName: "size-3"
5790
6046
  }
5791
6047
  ),
5792
- /* @__PURE__ */ jsx15("span", { className: "truncate", children: selectedModel?.label ?? copy.label }),
5793
- /* @__PURE__ */ jsx15(
6048
+ /* @__PURE__ */ jsx16("span", { className: "truncate", children: selectedModel?.label ?? copy.label }),
6049
+ /* @__PURE__ */ jsx16(
5794
6050
  ChevronDown,
5795
6051
  {
5796
6052
  "aria-hidden": "true",
@@ -5800,7 +6056,7 @@ function ModelPicker({
5800
6056
  ]
5801
6057
  }
5802
6058
  ) }),
5803
- /* @__PURE__ */ jsxs6(
6059
+ /* @__PURE__ */ jsxs7(
5804
6060
  DropdownMenuContent,
5805
6061
  {
5806
6062
  align: "end",
@@ -5809,8 +6065,8 @@ function ModelPicker({
5809
6065
  collisionPadding: 12,
5810
6066
  className: "w-80 max-w-[calc(100vw-1.5rem)] overflow-hidden rounded-xl p-0",
5811
6067
  children: [
5812
- /* @__PURE__ */ jsxs6("div", { className: "flex items-start gap-3 px-3 py-3", children: [
5813
- /* @__PURE__ */ jsx15(
6068
+ /* @__PURE__ */ jsxs7("div", { className: "flex items-start gap-3 px-3 py-3", children: [
6069
+ /* @__PURE__ */ jsx16(
5814
6070
  ModelProviderAvatar,
5815
6071
  {
5816
6072
  avatar: selectedModel?.avatar,
@@ -5818,34 +6074,34 @@ function ModelPicker({
5818
6074
  iconClassName: "size-4"
5819
6075
  }
5820
6076
  ),
5821
- /* @__PURE__ */ jsxs6("span", { className: "min-w-0 flex-1", children: [
5822
- /* @__PURE__ */ jsx15("span", { className: "block text-sm font-semibold text-popover-foreground", children: copy.title }),
5823
- /* @__PURE__ */ jsx15("span", { className: "mt-0.5 block text-xs leading-4 text-muted-foreground", children: copy.description })
6077
+ /* @__PURE__ */ jsxs7("span", { className: "min-w-0 flex-1", children: [
6078
+ /* @__PURE__ */ jsx16("span", { className: "block text-sm font-semibold text-popover-foreground", children: copy.title }),
6079
+ /* @__PURE__ */ jsx16("span", { className: "mt-0.5 block text-xs leading-4 text-muted-foreground", children: copy.description })
5824
6080
  ] })
5825
6081
  ] }),
5826
- /* @__PURE__ */ jsx15(DropdownMenuSeparator, { className: "mx-0 my-0" }),
5827
- /* @__PURE__ */ jsx15(DropdownMenuLabel, { className: "px-3 pt-2.5 pb-1 text-[11px] font-semibold tracking-wide uppercase", children: copy.availableModels }),
5828
- /* @__PURE__ */ jsx15(
6082
+ /* @__PURE__ */ jsx16(DropdownMenuSeparator, { className: "mx-0 my-0" }),
6083
+ /* @__PURE__ */ jsx16(DropdownMenuLabel, { className: "px-3 pt-2.5 pb-1 text-[11px] font-semibold tracking-wide uppercase", children: copy.availableModels }),
6084
+ /* @__PURE__ */ jsx16(
5829
6085
  DropdownMenuRadioGroup,
5830
6086
  {
5831
6087
  value: selectedModel?.id ?? "",
5832
6088
  onValueChange: onSelect,
5833
6089
  className: "space-y-0.5 px-1.5 pb-1.5",
5834
- children: models.map((model) => /* @__PURE__ */ jsxs6(
6090
+ children: models.map((model) => /* @__PURE__ */ jsxs7(
5835
6091
  DropdownMenuRadioItem,
5836
6092
  {
5837
6093
  value: model.id,
5838
6094
  disabled: model.disabled,
5839
6095
  className: "min-h-12 cursor-pointer items-center gap-2.5 rounded-lg px-2 py-2 pr-9 data-disabled:cursor-not-allowed",
5840
6096
  children: [
5841
- /* @__PURE__ */ jsx15(ModelProviderAvatar, { avatar: model.avatar, className: "size-7" }),
5842
- /* @__PURE__ */ jsxs6("span", { className: "min-w-0 flex-1", children: [
5843
- /* @__PURE__ */ jsxs6("span", { className: "flex min-w-0 items-center gap-1.5", children: [
5844
- /* @__PURE__ */ jsx15("span", { className: "truncate font-medium text-popover-foreground", children: model.label }),
5845
- model.default ? /* @__PURE__ */ jsx15("span", { className: "shrink-0 rounded-full bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary", children: copy.defaultBadge }) : null,
5846
- model.disabled ? /* @__PURE__ */ jsx15("span", { className: "shrink-0 rounded-full bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground", children: copy.unavailableBadge }) : null
6097
+ /* @__PURE__ */ jsx16(ModelProviderAvatar, { avatar: model.avatar, className: "size-7" }),
6098
+ /* @__PURE__ */ jsxs7("span", { className: "min-w-0 flex-1", children: [
6099
+ /* @__PURE__ */ jsxs7("span", { className: "flex min-w-0 items-center gap-1.5", children: [
6100
+ /* @__PURE__ */ jsx16("span", { className: "truncate font-medium text-popover-foreground", children: model.label }),
6101
+ model.default ? /* @__PURE__ */ jsx16("span", { className: "shrink-0 rounded-full bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary", children: copy.defaultBadge }) : null,
6102
+ model.disabled ? /* @__PURE__ */ jsx16("span", { className: "shrink-0 rounded-full bg-muted px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground", children: copy.unavailableBadge }) : null
5847
6103
  ] }),
5848
- model.description ? /* @__PURE__ */ jsx15("span", { className: "mt-0.5 block truncate text-xs text-muted-foreground", children: model.description }) : null
6104
+ model.description ? /* @__PURE__ */ jsx16("span", { className: "mt-0.5 block truncate text-xs text-muted-foreground", children: model.description }) : null
5849
6105
  ] })
5850
6106
  ]
5851
6107
  },
@@ -5853,26 +6109,26 @@ function ModelPicker({
5853
6109
  ))
5854
6110
  }
5855
6111
  ),
5856
- /* @__PURE__ */ jsx15(DropdownMenuSeparator, { className: "mx-0 my-0" }),
5857
- /* @__PURE__ */ jsxs6(
6112
+ /* @__PURE__ */ jsx16(DropdownMenuSeparator, { className: "mx-0 my-0" }),
6113
+ /* @__PURE__ */ jsxs7(
5858
6114
  "div",
5859
6115
  {
5860
6116
  "data-slot": "model-picker-future-controls",
5861
6117
  className: "flex items-center gap-2.5 bg-muted/30 px-3 py-2.5",
5862
6118
  "aria-disabled": "true",
5863
6119
  children: [
5864
- /* @__PURE__ */ jsx15(
6120
+ /* @__PURE__ */ jsx16(
5865
6121
  SlidersHorizontal2,
5866
6122
  {
5867
6123
  "aria-hidden": "true",
5868
6124
  className: "size-4 shrink-0 text-muted-foreground"
5869
6125
  }
5870
6126
  ),
5871
- /* @__PURE__ */ jsxs6("span", { className: "min-w-0 flex-1", children: [
5872
- /* @__PURE__ */ jsx15("span", { className: "block text-xs font-medium text-popover-foreground", children: copy.futureTitle }),
5873
- /* @__PURE__ */ jsx15("span", { className: "block truncate text-[11px] text-muted-foreground", children: copy.futureDescription })
6127
+ /* @__PURE__ */ jsxs7("span", { className: "min-w-0 flex-1", children: [
6128
+ /* @__PURE__ */ jsx16("span", { className: "block text-xs font-medium text-popover-foreground", children: copy.futureTitle }),
6129
+ /* @__PURE__ */ jsx16("span", { className: "block truncate text-[11px] text-muted-foreground", children: copy.futureDescription })
5874
6130
  ] }),
5875
- /* @__PURE__ */ jsx15("span", { className: "shrink-0 rounded-full border border-border px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground", children: copy.futureBadge })
6131
+ /* @__PURE__ */ jsx16("span", { className: "shrink-0 rounded-full border border-border px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground", children: copy.futureBadge })
5876
6132
  ]
5877
6133
  }
5878
6134
  )
@@ -5883,9 +6139,9 @@ function ModelPicker({
5883
6139
  }
5884
6140
 
5885
6141
  // src/components/composer/WorkspaceFileMentionPalette.tsx
5886
- import * as React14 from "react";
6142
+ import * as React15 from "react";
5887
6143
  import { FileText as FileText2, Loader2 as Loader22 } from "lucide-react";
5888
- import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
6144
+ import { jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
5889
6145
  var WORKSPACE_FILE_LIST_DEPTH = 12;
5890
6146
  function getWorkspaceFilePath(file) {
5891
6147
  return file.fullPath?.trim() || file.filePath.trim();
@@ -5897,7 +6153,7 @@ function flattenWorkspaceFiles(files) {
5897
6153
  return [...isDirectory ? [] : [file], ...flattenWorkspaceFiles(children)];
5898
6154
  });
5899
6155
  }
5900
- var WorkspaceFileMentionPalette = React14.forwardRef(function WorkspaceFileMentionPalette2({
6156
+ var WorkspaceFileMentionPalette = React15.forwardRef(function WorkspaceFileMentionPalette2({
5901
6157
  client,
5902
6158
  assistantId,
5903
6159
  projectId,
@@ -5907,14 +6163,14 @@ var WorkspaceFileMentionPalette = React14.forwardRef(function WorkspaceFileMenti
5907
6163
  className
5908
6164
  }, ref) {
5909
6165
  const { t } = useChatkitTranslation();
5910
- const [files, setFiles] = React14.useState([]);
5911
- const [loading, setLoading] = React14.useState(false);
5912
- const [error, setError] = React14.useState(null);
5913
- const [activeIndex, setActiveIndex] = React14.useState(0);
5914
- const activeIndexRef = React14.useRef(0);
5915
- const optionRefs = React14.useRef([]);
6166
+ const [files, setFiles] = React15.useState([]);
6167
+ const [loading, setLoading] = React15.useState(false);
6168
+ const [error, setError] = React15.useState(null);
6169
+ const [activeIndex, setActiveIndex] = React15.useState(0);
6170
+ const activeIndexRef = React15.useRef(0);
6171
+ const optionRefs = React15.useRef([]);
5916
6172
  const loadErrorMessage = t("composer.fileMentions.loadError");
5917
- React14.useEffect(() => {
6173
+ React15.useEffect(() => {
5918
6174
  if (!client || !projectId && !assistantId) {
5919
6175
  setFiles([]);
5920
6176
  setLoading(false);
@@ -5946,7 +6202,7 @@ var WorkspaceFileMentionPalette = React14.forwardRef(function WorkspaceFileMenti
5946
6202
  return () => controller.abort();
5947
6203
  }, [assistantId, client, loadErrorMessage, projectId]);
5948
6204
  const normalizedQuery = query.trim().toLocaleLowerCase();
5949
- const visibleFiles = React14.useMemo(
6205
+ const visibleFiles = React15.useMemo(
5950
6206
  () => files.filter((file) => {
5951
6207
  const filePath = getWorkspaceFilePath(file);
5952
6208
  if (selectedFilePaths.has(filePath)) return false;
@@ -5955,17 +6211,17 @@ var WorkspaceFileMentionPalette = React14.forwardRef(function WorkspaceFileMenti
5955
6211
  }),
5956
6212
  [files, normalizedQuery, selectedFilePaths]
5957
6213
  );
5958
- React14.useLayoutEffect(() => {
6214
+ React15.useLayoutEffect(() => {
5959
6215
  setActiveIndex((current) => {
5960
6216
  const nextIndex = visibleFiles.length === 0 ? 0 : Math.min(current, visibleFiles.length - 1);
5961
6217
  activeIndexRef.current = nextIndex;
5962
6218
  return nextIndex;
5963
6219
  });
5964
6220
  }, [visibleFiles.length]);
5965
- React14.useEffect(() => {
6221
+ React15.useEffect(() => {
5966
6222
  optionRefs.current[activeIndex]?.scrollIntoView?.({ block: "nearest" });
5967
6223
  }, [activeIndex]);
5968
- React14.useImperativeHandle(
6224
+ React15.useImperativeHandle(
5969
6225
  ref,
5970
6226
  () => ({
5971
6227
  moveActive: (direction) => {
@@ -5984,7 +6240,7 @@ var WorkspaceFileMentionPalette = React14.forwardRef(function WorkspaceFileMenti
5984
6240
  [onSelect, visibleFiles]
5985
6241
  );
5986
6242
  const unavailable = !client || !projectId && !assistantId;
5987
- return /* @__PURE__ */ jsxs7(
6243
+ return /* @__PURE__ */ jsxs8(
5988
6244
  "div",
5989
6245
  {
5990
6246
  "data-slot": "workspace-file-mention-palette",
@@ -5993,20 +6249,20 @@ var WorkspaceFileMentionPalette = React14.forwardRef(function WorkspaceFileMenti
5993
6249
  className
5994
6250
  ),
5995
6251
  children: [
5996
- /* @__PURE__ */ jsxs7("div", { className: "border-b border-border px-3 py-2 text-xs font-medium text-muted-foreground", children: [
6252
+ /* @__PURE__ */ jsxs8("div", { className: "border-b border-border px-3 py-2 text-xs font-medium text-muted-foreground", children: [
5997
6253
  t("composer.fileMentions.title"),
5998
- query ? /* @__PURE__ */ jsxs7("span", { className: "ml-1 text-foreground", children: [
6254
+ query ? /* @__PURE__ */ jsxs8("span", { className: "ml-1 text-foreground", children: [
5999
6255
  "@",
6000
6256
  query
6001
6257
  ] }) : null
6002
6258
  ] }),
6003
- /* @__PURE__ */ jsx16("div", { className: "max-h-56 overflow-y-auto p-1", children: unavailable ? /* @__PURE__ */ jsx16(PaletteMessage, { children: t("composer.fileMentions.unavailable") }) : loading ? /* @__PURE__ */ jsxs7(PaletteMessage, { children: [
6004
- /* @__PURE__ */ jsx16(Loader22, { className: "size-4 animate-spin" }),
6259
+ /* @__PURE__ */ jsx17("div", { className: "max-h-56 overflow-y-auto p-1", children: unavailable ? /* @__PURE__ */ jsx17(PaletteMessage, { children: t("composer.fileMentions.unavailable") }) : loading ? /* @__PURE__ */ jsxs8(PaletteMessage, { children: [
6260
+ /* @__PURE__ */ jsx17(Loader22, { className: "size-4 animate-spin" }),
6005
6261
  t("composer.fileMentions.loading")
6006
- ] }) : error ? /* @__PURE__ */ jsx16(PaletteMessage, { role: "alert", children: error }) : visibleFiles.length === 0 ? /* @__PURE__ */ jsx16(PaletteMessage, { children: t("composer.fileMentions.empty") }) : visibleFiles.map((file, index) => {
6262
+ ] }) : error ? /* @__PURE__ */ jsx17(PaletteMessage, { role: "alert", children: error }) : visibleFiles.length === 0 ? /* @__PURE__ */ jsx17(PaletteMessage, { children: t("composer.fileMentions.empty") }) : visibleFiles.map((file, index) => {
6007
6263
  const filePath = getWorkspaceFilePath(file);
6008
6264
  const label = file.filePath || filePath;
6009
- return /* @__PURE__ */ jsxs7(
6265
+ return /* @__PURE__ */ jsxs8(
6010
6266
  "button",
6011
6267
  {
6012
6268
  ref: (node) => {
@@ -6027,10 +6283,10 @@ var WorkspaceFileMentionPalette = React14.forwardRef(function WorkspaceFileMenti
6027
6283
  index === activeIndex && "bg-muted"
6028
6284
  ),
6029
6285
  children: [
6030
- /* @__PURE__ */ jsx16("span", { className: "flex size-8 shrink-0 items-center justify-center rounded-md bg-background text-muted-foreground", children: /* @__PURE__ */ jsx16(FileText2, { className: "size-4" }) }),
6031
- /* @__PURE__ */ jsxs7("span", { className: "min-w-0 flex-1", children: [
6032
- /* @__PURE__ */ jsx16("span", { className: "block truncate font-medium", children: label }),
6033
- filePath || file.mimeType ? /* @__PURE__ */ jsx16("span", { className: "block truncate text-xs text-muted-foreground", children: filePath || file.mimeType }) : null
6286
+ /* @__PURE__ */ jsx17("span", { className: "flex size-8 shrink-0 items-center justify-center rounded-md bg-background text-muted-foreground", children: /* @__PURE__ */ jsx17(FileText2, { className: "size-4" }) }),
6287
+ /* @__PURE__ */ jsxs8("span", { className: "min-w-0 flex-1", children: [
6288
+ /* @__PURE__ */ jsx17("span", { className: "block truncate font-medium", children: label }),
6289
+ filePath || file.mimeType ? /* @__PURE__ */ jsx17("span", { className: "block truncate text-xs text-muted-foreground", children: filePath || file.mimeType }) : null
6034
6290
  ] })
6035
6291
  ]
6036
6292
  },
@@ -6045,7 +6301,7 @@ function PaletteMessage({
6045
6301
  children,
6046
6302
  role
6047
6303
  }) {
6048
- return /* @__PURE__ */ jsx16(
6304
+ return /* @__PURE__ */ jsx17(
6049
6305
  "div",
6050
6306
  {
6051
6307
  role,
@@ -6056,7 +6312,7 @@ function PaletteMessage({
6056
6312
  }
6057
6313
 
6058
6314
  // src/components/composer/ProjectSelector.tsx
6059
- import * as React16 from "react";
6315
+ import * as React17 from "react";
6060
6316
  import {
6061
6317
  Check as Check2,
6062
6318
  ChevronDown as ChevronDown2,
@@ -6070,16 +6326,16 @@ import {
6070
6326
  // src/components/ui/popover.tsx
6071
6327
  import "react";
6072
6328
  import * as PopoverPrimitive from "@radix-ui/react-popover";
6073
- import { jsx as jsx17 } from "react/jsx-runtime";
6329
+ import { jsx as jsx18 } from "react/jsx-runtime";
6074
6330
  function Popover({
6075
6331
  ...props
6076
6332
  }) {
6077
- return /* @__PURE__ */ jsx17(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
6333
+ return /* @__PURE__ */ jsx18(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
6078
6334
  }
6079
6335
  function PopoverTrigger({
6080
6336
  ...props
6081
6337
  }) {
6082
- return /* @__PURE__ */ jsx17(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
6338
+ return /* @__PURE__ */ jsx18(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
6083
6339
  }
6084
6340
  function PopoverContent({
6085
6341
  className,
@@ -6087,7 +6343,7 @@ function PopoverContent({
6087
6343
  sideOffset = 4,
6088
6344
  ...props
6089
6345
  }) {
6090
- return /* @__PURE__ */ jsx17(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx17(
6346
+ return /* @__PURE__ */ jsx18(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx18(
6091
6347
  PopoverPrimitive.Content,
6092
6348
  {
6093
6349
  "data-slot": "popover-content",
@@ -6103,7 +6359,7 @@ function PopoverContent({
6103
6359
  }
6104
6360
 
6105
6361
  // src/components/composer/ProjectSelector.tsx
6106
- import { Fragment, jsx as jsx18, jsxs as jsxs8 } from "react/jsx-runtime";
6362
+ import { Fragment as Fragment2, jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
6107
6363
  var PROJECT_PAGE_SIZE = 100;
6108
6364
  async function listAllAvailableProjects(projectsClient, xpertId, signal) {
6109
6365
  const projects = [];
@@ -6137,20 +6393,20 @@ function ProjectSelector({
6137
6393
  }) {
6138
6394
  const { t } = useChatkitTranslation();
6139
6395
  const { theme } = useTheme();
6140
- const [open, setOpen] = React16.useState(false);
6141
- const [query, setQuery] = React16.useState("");
6142
- const [createMode, setCreateMode] = React16.useState(false);
6143
- const [newProjectName, setNewProjectName] = React16.useState("");
6144
- const [projects, setProjects] = React16.useState([]);
6145
- const [loadFailed, setLoadFailed] = React16.useState(false);
6146
- const [loadedFor, setLoadedFor] = React16.useState(null);
6396
+ const [open, setOpen] = React17.useState(false);
6397
+ const [query, setQuery] = React17.useState("");
6398
+ const [createMode, setCreateMode] = React17.useState(false);
6399
+ const [newProjectName, setNewProjectName] = React17.useState("");
6400
+ const [projects, setProjects] = React17.useState([]);
6401
+ const [loadFailed, setLoadFailed] = React17.useState(false);
6402
+ const [loadedFor, setLoadedFor] = React17.useState(null);
6147
6403
  const panelRoundedClass = getPanelRoundedClass(theme.radius);
6148
6404
  const menuItemRoundedClass = getMenuItemRoundedClass(theme.radius);
6149
6405
  const lockedProjectLabel = label?.trim();
6150
- React16.useEffect(() => {
6406
+ React17.useEffect(() => {
6151
6407
  if (disabled) setOpen(false);
6152
6408
  }, [disabled]);
6153
- React16.useEffect(() => {
6409
+ React17.useEffect(() => {
6154
6410
  if (locked) {
6155
6411
  setProjects([]);
6156
6412
  setLoadFailed(false);
@@ -6190,12 +6446,12 @@ function ProjectSelector({
6190
6446
  });
6191
6447
  return () => controller.abort();
6192
6448
  }, [client, locked, xpertId]);
6193
- const activeProject = React16.useMemo(
6449
+ const activeProject = React17.useMemo(
6194
6450
  () => projects.find((project) => project.id === activeProjectId) ?? null,
6195
6451
  [activeProjectId, projects]
6196
6452
  );
6197
6453
  const normalizedQuery = query.trim().toLocaleLowerCase();
6198
- const filteredProjects = React16.useMemo(
6454
+ const filteredProjects = React17.useMemo(
6199
6455
  () => projects.filter((project) => {
6200
6456
  if (!normalizedQuery) return true;
6201
6457
  return project.name.toLocaleLowerCase().includes(normalizedQuery);
@@ -6205,24 +6461,24 @@ function ProjectSelector({
6205
6461
  const hasAvailableProjects = locked ? Boolean(activeProjectId) : loadedFor?.client === client && loadedFor.xpertId === xpertId && !loadFailed && projects.length > 0;
6206
6462
  const projectRailAvailable = hasAvailableProjects || Boolean(onProjectCreate);
6207
6463
  const isLoadingProjects = !locked && Boolean(client && xpertId) && loadedFor === null && !loadFailed;
6208
- React16.useEffect(() => {
6464
+ React17.useEffect(() => {
6209
6465
  onAvailabilityChange?.(projectRailAvailable);
6210
6466
  }, [onAvailabilityChange, projectRailAvailable]);
6211
6467
  if (locked && activeProjectId) {
6212
- return /* @__PURE__ */ jsx18(
6468
+ return /* @__PURE__ */ jsx19(
6213
6469
  "div",
6214
6470
  {
6215
6471
  "data-slot": "composer-project-rail",
6216
6472
  className: "flex h-10 min-w-0 items-center px-1",
6217
- children: /* @__PURE__ */ jsxs8(
6473
+ children: /* @__PURE__ */ jsxs9(
6218
6474
  "div",
6219
6475
  {
6220
6476
  "data-slot": "composer-project-locked",
6221
6477
  className: "inline-flex h-5 max-w-full items-center gap-1.5 rounded-sm px-2 text-sm text-muted-foreground",
6222
6478
  title: lockedProjectLabel || activeProjectId,
6223
6479
  children: [
6224
- /* @__PURE__ */ jsx18(FolderLock, { className: "size-3.5 shrink-0" }),
6225
- /* @__PURE__ */ jsx18("span", { className: "truncate", children: lockedProjectLabel || activeProjectId })
6480
+ /* @__PURE__ */ jsx19(FolderLock, { className: "size-3.5 shrink-0" }),
6481
+ /* @__PURE__ */ jsx19("span", { className: "truncate", children: lockedProjectLabel || activeProjectId })
6226
6482
  ]
6227
6483
  }
6228
6484
  )
@@ -6230,12 +6486,12 @@ function ProjectSelector({
6230
6486
  );
6231
6487
  }
6232
6488
  if (!projectRailAvailable) return null;
6233
- return /* @__PURE__ */ jsx18(
6489
+ return /* @__PURE__ */ jsx19(
6234
6490
  "div",
6235
6491
  {
6236
6492
  "data-slot": "composer-project-rail",
6237
6493
  className: "flex h-10 min-w-0 items-center px-1",
6238
- children: /* @__PURE__ */ jsxs8(
6494
+ children: /* @__PURE__ */ jsxs9(
6239
6495
  Popover,
6240
6496
  {
6241
6497
  open,
@@ -6248,7 +6504,7 @@ function ProjectSelector({
6248
6504
  }
6249
6505
  },
6250
6506
  children: [
6251
- /* @__PURE__ */ jsx18(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs8(
6507
+ /* @__PURE__ */ jsx19(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs9(
6252
6508
  "button",
6253
6509
  {
6254
6510
  type: "button",
@@ -6256,13 +6512,13 @@ function ProjectSelector({
6256
6512
  className: "inline-flex h-5 max-w-full items-center gap-1.5 rounded-sm px-2 text-sm text-muted-foreground outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
6257
6513
  "aria-label": t("composer.projects.select"),
6258
6514
  children: [
6259
- /* @__PURE__ */ jsx18(Folder, { className: "size-3.5 shrink-0" }),
6260
- /* @__PURE__ */ jsx18("span", { className: "truncate", children: activeProject?.name ?? t("composer.projects.select") }),
6261
- /* @__PURE__ */ jsx18(ChevronDown2, { className: "size-3.5 shrink-0" })
6515
+ /* @__PURE__ */ jsx19(Folder, { className: "size-3.5 shrink-0" }),
6516
+ /* @__PURE__ */ jsx19("span", { className: "truncate", children: activeProject?.name ?? t("composer.projects.select") }),
6517
+ /* @__PURE__ */ jsx19(ChevronDown2, { className: "size-3.5 shrink-0" })
6262
6518
  ]
6263
6519
  }
6264
6520
  ) }),
6265
- /* @__PURE__ */ jsx18(
6521
+ /* @__PURE__ */ jsx19(
6266
6522
  PopoverContent,
6267
6523
  {
6268
6524
  side: "top",
@@ -6270,15 +6526,15 @@ function ProjectSelector({
6270
6526
  sideOffset: 8,
6271
6527
  collisionPadding: 8,
6272
6528
  className: cn(
6273
- "w-64 max-w-[calc(100vw-1rem)] overflow-hidden border-0 bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10",
6529
+ "flex max-h-(--radix-popover-content-available-height) w-64 max-w-[calc(100vw-1rem)] overflow-hidden border-0 bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10",
6274
6530
  panelRoundedClass
6275
6531
  ),
6276
- children: /* @__PURE__ */ jsx18(
6532
+ children: /* @__PURE__ */ jsx19(
6277
6533
  "div",
6278
6534
  {
6279
6535
  "data-slot": "composer-project-command",
6280
- className: "flex size-full flex-col overflow-hidden",
6281
- children: createMode ? /* @__PURE__ */ jsxs8(
6536
+ className: "flex min-h-0 w-full flex-col overflow-hidden",
6537
+ children: createMode ? /* @__PURE__ */ jsxs9(
6282
6538
  "form",
6283
6539
  {
6284
6540
  "data-slot": "composer-project-create-form",
@@ -6291,7 +6547,7 @@ function ProjectSelector({
6291
6547
  setOpen(false);
6292
6548
  },
6293
6549
  children: [
6294
- /* @__PURE__ */ jsx18(
6550
+ /* @__PURE__ */ jsx19(
6295
6551
  Input,
6296
6552
  {
6297
6553
  autoFocus: true,
@@ -6306,8 +6562,8 @@ function ProjectSelector({
6306
6562
  )
6307
6563
  }
6308
6564
  ),
6309
- /* @__PURE__ */ jsxs8("div", { className: "flex justify-end gap-2", children: [
6310
- /* @__PURE__ */ jsx18(
6565
+ /* @__PURE__ */ jsxs9("div", { className: "flex justify-end gap-2", children: [
6566
+ /* @__PURE__ */ jsx19(
6311
6567
  "button",
6312
6568
  {
6313
6569
  type: "button",
@@ -6319,7 +6575,7 @@ function ProjectSelector({
6319
6575
  children: t("composer.projects.cancel")
6320
6576
  }
6321
6577
  ),
6322
- /* @__PURE__ */ jsx18(
6578
+ /* @__PURE__ */ jsx19(
6323
6579
  "button",
6324
6580
  {
6325
6581
  type: "submit",
@@ -6331,15 +6587,15 @@ function ProjectSelector({
6331
6587
  ] })
6332
6588
  ]
6333
6589
  }
6334
- ) : /* @__PURE__ */ jsxs8(Fragment, { children: [
6335
- /* @__PURE__ */ jsxs8(
6590
+ ) : /* @__PURE__ */ jsxs9(Fragment2, { children: [
6591
+ /* @__PURE__ */ jsxs9(
6336
6592
  "div",
6337
6593
  {
6338
6594
  "data-slot": "composer-project-search",
6339
- className: "relative mb-2",
6595
+ className: "relative mb-2 shrink-0",
6340
6596
  children: [
6341
- /* @__PURE__ */ jsx18(Search3, { className: "pointer-events-none absolute left-3 top-1/2 z-10 size-4 -translate-y-1/2 text-muted-foreground" }),
6342
- /* @__PURE__ */ jsx18(
6597
+ /* @__PURE__ */ jsx19(Search3, { className: "pointer-events-none absolute left-3 top-1/2 z-10 size-4 -translate-y-1/2 text-muted-foreground" }),
6598
+ /* @__PURE__ */ jsx19(
6343
6599
  Input,
6344
6600
  {
6345
6601
  autoFocus: true,
@@ -6355,70 +6611,77 @@ function ProjectSelector({
6355
6611
  ]
6356
6612
  }
6357
6613
  ),
6358
- /* @__PURE__ */ jsx18(ScrollArea, { className: "max-h-75", children: /* @__PURE__ */ jsxs8(
6614
+ /* @__PURE__ */ jsx19(
6359
6615
  "div",
6360
6616
  {
6361
- "data-slot": "composer-project-list",
6362
- className: "flex flex-col",
6363
- children: [
6364
- activeProjectId && !normalizedQuery ? /* @__PURE__ */ jsxs8(
6365
- "button",
6366
- {
6367
- type: "button",
6368
- "data-slot": "composer-project-clear",
6369
- className: cn(
6370
- "relative flex w-full cursor-default select-none items-center gap-3 px-1.5 py-1.5 text-left text-base outline-none hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground",
6371
- menuItemRoundedClass
6372
- ),
6373
- onClick: () => {
6374
- if (disabled) return;
6375
- onProjectChange?.(null);
6376
- setOpen(false);
6377
- },
6378
- children: [
6379
- /* @__PURE__ */ jsx18(FolderX, { className: "size-5 shrink-0 text-muted-foreground" }),
6380
- /* @__PURE__ */ jsx18("span", { className: "min-w-0 flex-1 truncate font-normal", children: t("composer.projects.none") })
6381
- ]
6382
- }
6383
- ) : null,
6384
- isLoadingProjects ? /* @__PURE__ */ jsx18(ProjectMessage, { children: t("composer.projects.loading") }) : loadFailed ? /* @__PURE__ */ jsx18(ProjectMessage, { children: t("composer.projects.loadError") }) : filteredProjects.length === 0 ? /* @__PURE__ */ jsx18(ProjectMessage, { children: t("composer.projects.empty") }) : filteredProjects.map((project) => /* @__PURE__ */ jsxs8(
6385
- "button",
6386
- {
6387
- type: "button",
6388
- "data-slot": "composer-project-item",
6389
- className: cn(
6390
- "relative flex w-full cursor-default select-none items-center gap-3 px-1.5 py-1.5 text-left text-base outline-none hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground",
6391
- menuItemRoundedClass,
6392
- project.id === activeProjectId && "bg-accent text-accent-foreground"
6393
- ),
6394
- onClick: () => {
6395
- if (disabled) return;
6396
- if (project.id !== activeProjectId) {
6397
- onProjectChange?.(project.id);
6617
+ "data-slot": "composer-project-scroll-region",
6618
+ className: "min-h-0 flex-1 max-h-75 overflow-y-auto overscroll-contain",
6619
+ children: /* @__PURE__ */ jsxs9(
6620
+ "div",
6621
+ {
6622
+ "data-slot": "composer-project-list",
6623
+ className: "flex flex-col",
6624
+ children: [
6625
+ activeProjectId && !normalizedQuery ? /* @__PURE__ */ jsxs9(
6626
+ "button",
6627
+ {
6628
+ type: "button",
6629
+ "data-slot": "composer-project-clear",
6630
+ className: cn(
6631
+ "relative flex w-full cursor-default select-none items-center gap-3 px-1.5 py-1.5 text-left text-base outline-none hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground",
6632
+ menuItemRoundedClass
6633
+ ),
6634
+ onClick: () => {
6635
+ if (disabled) return;
6636
+ onProjectChange?.(null);
6637
+ setOpen(false);
6638
+ },
6639
+ children: [
6640
+ /* @__PURE__ */ jsx19(FolderX, { className: "size-5 shrink-0 text-muted-foreground" }),
6641
+ /* @__PURE__ */ jsx19("span", { className: "min-w-0 flex-1 truncate font-normal", children: t("composer.projects.none") })
6642
+ ]
6398
6643
  }
6399
- setOpen(false);
6400
- },
6401
- children: [
6402
- /* @__PURE__ */ jsx18(Folder, { className: "size-5 shrink-0 text-muted-foreground" }),
6403
- /* @__PURE__ */ jsx18("span", { className: "min-w-0 flex-1 truncate font-normal", children: project.name }),
6404
- project.id === activeProjectId ? /* @__PURE__ */ jsx18(Check2, { className: "size-4 shrink-0" }) : null
6405
- ]
6406
- },
6407
- project.id
6408
- ))
6409
- ]
6644
+ ) : null,
6645
+ isLoadingProjects ? /* @__PURE__ */ jsx19(ProjectMessage, { children: t("composer.projects.loading") }) : loadFailed ? /* @__PURE__ */ jsx19(ProjectMessage, { children: t("composer.projects.loadError") }) : filteredProjects.length === 0 ? /* @__PURE__ */ jsx19(ProjectMessage, { children: t("composer.projects.empty") }) : filteredProjects.map((project) => /* @__PURE__ */ jsxs9(
6646
+ "button",
6647
+ {
6648
+ type: "button",
6649
+ "data-slot": "composer-project-item",
6650
+ className: cn(
6651
+ "relative flex w-full cursor-default select-none items-center gap-3 px-1.5 py-1.5 text-left text-base outline-none hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground",
6652
+ menuItemRoundedClass,
6653
+ project.id === activeProjectId && "bg-accent text-accent-foreground"
6654
+ ),
6655
+ onClick: () => {
6656
+ if (disabled) return;
6657
+ if (project.id !== activeProjectId) {
6658
+ onProjectChange?.(project.id);
6659
+ }
6660
+ setOpen(false);
6661
+ },
6662
+ children: [
6663
+ /* @__PURE__ */ jsx19(Folder, { className: "size-5 shrink-0 text-muted-foreground" }),
6664
+ /* @__PURE__ */ jsx19("span", { className: "min-w-0 flex-1 truncate font-normal", children: project.name }),
6665
+ project.id === activeProjectId ? /* @__PURE__ */ jsx19(Check2, { className: "size-4 shrink-0" }) : null
6666
+ ]
6667
+ },
6668
+ project.id
6669
+ ))
6670
+ ]
6671
+ }
6672
+ )
6410
6673
  }
6411
- ) }),
6412
- onProjectCreate ? /* @__PURE__ */ jsxs8(
6674
+ ),
6675
+ onProjectCreate ? /* @__PURE__ */ jsxs9(
6413
6676
  "button",
6414
6677
  {
6415
6678
  type: "button",
6416
6679
  "data-slot": "composer-project-create",
6417
- className: "mt-1 flex w-full items-center gap-3 border-t border-border px-1.5 py-1.5 text-left text-sm font-normal outline-none hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground",
6680
+ className: "mt-1 flex w-full shrink-0 items-center gap-3 border-t border-border px-1.5 py-1.5 text-left text-sm font-normal outline-none hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground",
6418
6681
  onClick: () => setCreateMode(true),
6419
6682
  children: [
6420
- /* @__PURE__ */ jsx18(Plus2, { className: "size-4 shrink-0" }),
6421
- /* @__PURE__ */ jsx18("span", { children: t("composer.projects.new") })
6683
+ /* @__PURE__ */ jsx19(Plus2, { className: "size-4 shrink-0" }),
6684
+ /* @__PURE__ */ jsx19("span", { children: t("composer.projects.new") })
6422
6685
  ]
6423
6686
  }
6424
6687
  ) : null
@@ -6434,77 +6697,11 @@ function ProjectSelector({
6434
6697
  );
6435
6698
  }
6436
6699
  function ProjectMessage({ children }) {
6437
- return /* @__PURE__ */ jsx18("div", { className: "flex min-h-24 items-center justify-center px-4 text-center text-sm text-muted-foreground", children });
6700
+ return /* @__PURE__ */ jsx19("div", { className: "flex min-h-24 items-center justify-center px-4 text-center text-sm text-muted-foreground", children });
6438
6701
  }
6439
6702
 
6440
6703
  // src/components/composer/SendButton.tsx
6441
6704
  import { ArrowUp, Square } from "lucide-react";
6442
-
6443
- // src/components/ui/tooltip.tsx
6444
- import "react";
6445
- import * as TooltipPrimitive from "@radix-ui/react-tooltip";
6446
- import { jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
6447
- function TooltipProvider({
6448
- delayDuration = 0,
6449
- ...props
6450
- }) {
6451
- return /* @__PURE__ */ jsx19(
6452
- TooltipPrimitive.Provider,
6453
- {
6454
- "data-slot": "tooltip-provider",
6455
- delayDuration,
6456
- ...props
6457
- }
6458
- );
6459
- }
6460
- function Tooltip({
6461
- ...props
6462
- }) {
6463
- return /* @__PURE__ */ jsx19(TooltipProvider, { children: /* @__PURE__ */ jsx19(
6464
- TooltipPrimitive.Root,
6465
- {
6466
- "data-slot": "tooltip",
6467
- ...props
6468
- }
6469
- ) });
6470
- }
6471
- function TooltipTrigger({
6472
- ...props
6473
- }) {
6474
- return /* @__PURE__ */ jsx19(
6475
- TooltipPrimitive.Trigger,
6476
- {
6477
- "data-slot": "tooltip-trigger",
6478
- ...props
6479
- }
6480
- );
6481
- }
6482
- function TooltipContent({
6483
- className,
6484
- sideOffset = 0,
6485
- hideArrow = false,
6486
- children,
6487
- ...props
6488
- }) {
6489
- return /* @__PURE__ */ jsx19(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs9(
6490
- TooltipPrimitive.Content,
6491
- {
6492
- "data-slot": "tooltip-content",
6493
- sideOffset,
6494
- className: cn(
6495
- "bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md px-3 py-1.5 text-xs text-balance",
6496
- className
6497
- ),
6498
- ...props,
6499
- children: [
6500
- children,
6501
- !hideArrow ? /* @__PURE__ */ jsx19(TooltipPrimitive.Arrow, { className: "bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" }) : null
6502
- ]
6503
- }
6504
- ) });
6505
- }
6506
-
6507
- // src/components/composer/SendButton.tsx
6508
6705
  import { jsx as jsx20, jsxs as jsxs10 } from "react/jsx-runtime";
6509
6706
  function SendButton({
6510
6707
  disabled = false,
@@ -7037,7 +7234,7 @@ import * as React21 from "react";
7037
7234
  import {
7038
7235
  CornerDownLeft,
7039
7236
  Ellipsis,
7040
- Info,
7237
+ Info as Info2,
7041
7238
  PencilLine,
7042
7239
  Trash2 as Trash22
7043
7240
  } from "lucide-react";
@@ -7228,7 +7425,7 @@ function PendingFollowUps({
7228
7425
  ] })
7229
7426
  ] }),
7230
7427
  /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-1.5 text-[10px] leading-4 text-muted-foreground", children: [
7231
- /* @__PURE__ */ jsx24(Info, { className: "h-3 w-3 shrink-0" }),
7428
+ /* @__PURE__ */ jsx24(Info2, { className: "h-3 w-3 shrink-0" }),
7232
7429
  /* @__PURE__ */ jsx24("span", { className: "truncate", children: item.mode === "queue" ? canSendItemNow ? t("chat.followUps.manualQueueHint") : t("chat.followUps.queueHint") : t("chat.followUps.steerHint") })
7233
7430
  ] })
7234
7431
  ] })
@@ -8458,7 +8655,7 @@ import {
8458
8655
  ChevronLeft as ChevronLeft2,
8459
8656
  ChevronRight as ChevronRight5,
8460
8657
  CornerDownLeft as CornerDownLeft3,
8461
- Info as Info2
8658
+ Info as Info3
8462
8659
  } from "lucide-react";
8463
8660
  import { jsx as jsx29, jsxs as jsxs19 } from "react/jsx-runtime";
8464
8661
  var emptyQuestions = [];
@@ -8955,7 +9152,7 @@ function RequestUserInputPanel({
8955
9152
  "aria-label": t("composer.requestUserInput.optionInfo", {
8956
9153
  label: parsedLabel.label
8957
9154
  }),
8958
- children: /* @__PURE__ */ jsx29(Info2, { className: "h-3.5 w-3.5" })
9155
+ children: /* @__PURE__ */ jsx29(Info3, { className: "h-3.5 w-3.5" })
8959
9156
  }
8960
9157
  ) }),
8961
9158
  /* @__PURE__ */ jsx29(
@@ -9301,7 +9498,7 @@ function useConversationSummaryEvent({
9301
9498
  // src/components/chat/attachments.tsx
9302
9499
  import * as React28 from "react";
9303
9500
  import { FileText as FileText3, Loader2 as Loader24, RefreshCw as RefreshCw2, X as X5 } from "lucide-react";
9304
- import { Fragment as Fragment3, jsx as jsx30, jsxs as jsxs20 } from "react/jsx-runtime";
9501
+ import { Fragment as Fragment4, jsx as jsx30, jsxs as jsxs20 } from "react/jsx-runtime";
9305
9502
  var ACTIVE_PARSE_STATUSES = /* @__PURE__ */ new Set([
9306
9503
  "uploaded",
9307
9504
  "scanning",
@@ -9611,7 +9808,7 @@ var ChatAttachments = React28.forwardRef(function ChatAttachments2({
9611
9808
  }
9612
9809
  );
9613
9810
  }
9614
- return /* @__PURE__ */ jsxs20(Fragment3, { children: [
9811
+ return /* @__PURE__ */ jsxs20(Fragment4, { children: [
9615
9812
  /* @__PURE__ */ jsx30(
9616
9813
  "input",
9617
9814
  {
@@ -11468,7 +11665,7 @@ var TooltipIconButton = forwardRef11(({ children, tooltip, side = "bottom", clas
11468
11665
  TooltipIconButton.displayName = "TooltipIconButton";
11469
11666
 
11470
11667
  // src/components/thread/mermaid-block.tsx
11471
- import { Fragment as Fragment4, jsx as jsx38, jsxs as jsxs23 } from "react/jsx-runtime";
11668
+ import { Fragment as Fragment5, jsx as jsx38, jsxs as jsxs23 } from "react/jsx-runtime";
11472
11669
  var HEX_COLOR_PATTERN = /^#([\da-f]{3,8})$/i;
11473
11670
  var MERMAID_DIRECTIVE_PATTERN = /%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi;
11474
11671
  var MERMAID_FRONTMATTER_PATTERN = /^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s;
@@ -11840,7 +12037,7 @@ function MermaidBlock({ code }) {
11840
12037
  }, [clearCopyResetTimeout, code, isCopied]);
11841
12038
  const hasRenderedDiagram = svgMarkup !== null && !renderError;
11842
12039
  const statusMessage = isRendering ? t("markdown.mermaid.rendering") : t("markdown.mermaid.failed");
11843
- return /* @__PURE__ */ jsxs23(Fragment4, { children: [
12040
+ return /* @__PURE__ */ jsxs23(Fragment5, { children: [
11844
12041
  /* @__PURE__ */ jsx38(
11845
12042
  Tabs,
11846
12043
  {
@@ -11958,7 +12155,7 @@ function MermaidBlock({ code }) {
11958
12155
 
11959
12156
  // src/components/thread/markdown-text.tsx
11960
12157
  import "katex/dist/katex.min.css";
11961
- import { Fragment as Fragment5, jsx as jsx39, jsxs as jsxs24 } from "react/jsx-runtime";
12158
+ import { Fragment as Fragment6, jsx as jsx39, jsxs as jsxs24 } from "react/jsx-runtime";
11962
12159
  var markdownTableMinWidth = "max(7rem, calc(8rem * var(--density-spacing, 1)))";
11963
12160
  var markdownTableCellPaddingInline = "calc(var(--density-padding, 1rem) * 1.25)";
11964
12161
  var markdownTableCellPaddingBlock = "max(0.5rem, calc(var(--density-padding, 1rem) * 0.75))";
@@ -12446,7 +12643,7 @@ var defaultComponents = {
12446
12643
  ...stripMarkdownNode(props)
12447
12644
  }
12448
12645
  ),
12449
- pre: ({ className, children }) => Children.toArray(children).length === 1 && (isMermaidBlockChild(Children.toArray(children)[0]) || isMermaidCodeElement(Children.toArray(children)[0])) ? /* @__PURE__ */ jsx39(Fragment5, { children }) : /* @__PURE__ */ jsx39(
12646
+ pre: ({ className, children }) => Children.toArray(children).length === 1 && (isMermaidBlockChild(Children.toArray(children)[0]) || isMermaidCodeElement(Children.toArray(children)[0])) ? /* @__PURE__ */ jsx39(Fragment6, { children }) : /* @__PURE__ */ jsx39(
12450
12647
  "div",
12451
12648
  {
12452
12649
  className: cn(
@@ -12471,7 +12668,7 @@ var defaultComponents = {
12471
12668
  if (language === "mermaid") {
12472
12669
  return /* @__PURE__ */ jsx39(MermaidBlock, { code: normalizedCode });
12473
12670
  }
12474
- return /* @__PURE__ */ jsxs24(Fragment5, { children: [
12671
+ return /* @__PURE__ */ jsxs24(Fragment6, { children: [
12475
12672
  /* @__PURE__ */ jsx39(CodeHeader, { language, code: normalizedCode }),
12476
12673
  /* @__PURE__ */ jsx39(SyntaxHighlighter, { language, className, children: normalizedCode })
12477
12674
  ] });
@@ -12523,13 +12720,13 @@ import {
12523
12720
  ChevronRight as ChevronRight6,
12524
12721
  Clock3,
12525
12722
  GitBranch,
12526
- Info as Info3,
12723
+ Info as Info4,
12527
12724
  Loader2 as Loader26,
12528
12725
  MessageSquareText,
12529
12726
  Wrench,
12530
12727
  XCircle
12531
12728
  } from "lucide-react";
12532
- import { Fragment as Fragment6, jsx as jsx40, jsxs as jsxs25 } from "react/jsx-runtime";
12729
+ import { Fragment as Fragment7, jsx as jsx40, jsxs as jsxs25 } from "react/jsx-runtime";
12533
12730
  function safeJson2(value) {
12534
12731
  try {
12535
12732
  return JSON.stringify(value, null, 2);
@@ -12613,7 +12810,7 @@ function MiddlewareEventRow({ content }) {
12613
12810
  }
12614
12811
  ),
12615
12812
  /* @__PURE__ */ jsx40("span", { className: "min-w-0 truncate font-medium", children: label }),
12616
- detail ? /* @__PURE__ */ jsxs25(Fragment6, { children: [
12813
+ detail ? /* @__PURE__ */ jsxs25(Fragment7, { children: [
12617
12814
  /* @__PURE__ */ jsx40("span", { className: "text-muted-foreground/50", children: "\xB7" }),
12618
12815
  /* @__PURE__ */ jsx40("span", { className: "min-w-0 truncate", children: detail })
12619
12816
  ] }) : null
@@ -12730,7 +12927,7 @@ function AgentEventRow({ content }) {
12730
12927
  isError ? "bg-destructive/10 text-destructive" : "bg-muted/40 text-muted-foreground"
12731
12928
  ),
12732
12929
  children: [
12733
- /* @__PURE__ */ jsx40(Info3, { className: "mt-0.5 h-3.5 w-3.5 shrink-0" }),
12930
+ /* @__PURE__ */ jsx40(Info4, { className: "mt-0.5 h-3.5 w-3.5 shrink-0" }),
12734
12931
  /* @__PURE__ */ jsxs25("div", { className: "min-w-0 flex-1", children: [
12735
12932
  /* @__PURE__ */ jsx40("div", { className: "truncate font-medium", children: label }),
12736
12933
  detail ? /* @__PURE__ */ jsx40("div", { className: "wrap-break-word", children: detail }) : null,
@@ -12807,7 +13004,7 @@ function AgentRunGroup({
12807
13004
  )
12808
13005
  } : null,
12809
13006
  counts.events > 0 ? {
12810
- icon: Info3,
13007
+ icon: Info4,
12811
13008
  count: counts.events,
12812
13009
  label: t(
12813
13010
  `message.agentRun.counts.events.${counts.events === 1 ? "one" : "other"}`,
@@ -13928,7 +14125,7 @@ function ToolOutputAttachments({
13928
14125
  }
13929
14126
 
13930
14127
  // src/components/thread/messages/tool-component-group.tsx
13931
- import { Fragment as Fragment7, jsx as jsx46, jsxs as jsxs31 } from "react/jsx-runtime";
14128
+ import { Fragment as Fragment8, jsx as jsx46, jsxs as jsxs31 } from "react/jsx-runtime";
13932
14129
  var toolStatusConfig = {
13933
14130
  success: {
13934
14131
  iconClass: "border-green-500 text-green-700",
@@ -14570,7 +14767,7 @@ function ToolCallDetails({ content }) {
14570
14767
  return /* @__PURE__ */ jsxs31("div", { className: "ml-6 mt-1 max-h-60 overflow-auto rounded-md bg-muted/30 px-3 py-2 text-xs text-muted-foreground", children: [
14571
14768
  hasInput && /* @__PURE__ */ jsxs31("div", { className: "space-y-1", children: [
14572
14769
  /* @__PURE__ */ jsxs31("div", { className: "flex min-w-0 items-baseline gap-1 text-[11px] font-medium text-muted-foreground", children: [
14573
- toolName ? /* @__PURE__ */ jsxs31(Fragment7, { children: [
14770
+ toolName ? /* @__PURE__ */ jsxs31(Fragment8, { children: [
14574
14771
  /* @__PURE__ */ jsx46("span", { className: "min-w-0 break-all font-mono text-foreground/80", children: toolName }),
14575
14772
  /* @__PURE__ */ jsx46("span", { "aria-hidden": "true", children: "\xB7" })
14576
14773
  ] }) : null,
@@ -15466,7 +15663,7 @@ function clickDownload(uri, filename) {
15466
15663
  }
15467
15664
 
15468
15665
  // src/components/thread/messages/mcp-app.tsx
15469
- import { Fragment as Fragment8, jsx as jsx49, jsxs as jsxs33 } from "react/jsx-runtime";
15666
+ import { Fragment as Fragment9, jsx as jsx49, jsxs as jsxs33 } from "react/jsx-runtime";
15470
15667
  var EMPTY_INPUT_SCHEMA = {
15471
15668
  type: "object",
15472
15669
  properties: {}
@@ -16827,7 +17024,7 @@ function McpAppMessage({
16827
17024
  if (isTornDown) {
16828
17025
  return null;
16829
17026
  }
16830
- return /* @__PURE__ */ jsxs33(Fragment8, { children: [
17027
+ return /* @__PURE__ */ jsxs33(Fragment9, { children: [
16831
17028
  displayMode === "fullscreen" ? /* @__PURE__ */ jsx49(
16832
17029
  "div",
16833
17030
  {
@@ -21118,7 +21315,7 @@ function formatElapsed(value) {
21118
21315
  }
21119
21316
 
21120
21317
  // src/components/chat.tsx
21121
- import { Fragment as Fragment11, jsx as jsx65, jsxs as jsxs46 } from "react/jsx-runtime";
21318
+ import { Fragment as Fragment12, jsx as jsx65, jsxs as jsxs46 } from "react/jsx-runtime";
21122
21319
  var defaultApiUrl2 = import.meta.env.VITE_XPERTAI_API_URL;
21123
21320
  var COMPOSER_INPUT_MAX_HEIGHT = 128;
21124
21321
  var LONG_TEXT_REFERENCE_THRESHOLD = 5e3;
@@ -23695,7 +23892,7 @@ function Chat({
23695
23892
  ) }) }),
23696
23893
  /* @__PURE__ */ jsx65(TooltipContent, { side: "bottom", children: t("settings.open") })
23697
23894
  ] }),
23698
- history?.enabled !== false && /* @__PURE__ */ jsxs46(Fragment11, { children: [
23895
+ history?.enabled !== false && /* @__PURE__ */ jsxs46(Fragment12, { children: [
23699
23896
  /* @__PURE__ */ jsxs46(Tooltip, { children: [
23700
23897
  /* @__PURE__ */ jsx65(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx65("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx65(
23701
23898
  "button",
@@ -23879,7 +24076,7 @@ function Chat({
23879
24076
  pet: effectivePet,
23880
24077
  mcpApps: options?.mcpApps
23881
24078
  }
23882
- ) : /* @__PURE__ */ jsxs46(Fragment11, { children: [
24079
+ ) : /* @__PURE__ */ jsxs46(Fragment12, { children: [
23883
24080
  message.type === "human" && humanRuntimeCapabilityOptions.length > 0 && /* @__PURE__ */ jsx65(
23884
24081
  HumanRuntimeCapabilityChips,
23885
24082
  {
@@ -23965,22 +24162,6 @@ function Chat({
23965
24162
  ]
23966
24163
  }
23967
24164
  ),
23968
- !isAtBottom && messages.length > 0 && /* @__PURE__ */ jsx65("div", { className: "sticky bottom-20 z-20 flex justify-center px-4 pointer-events-none", children: /* @__PURE__ */ jsx65(
23969
- Button,
23970
- {
23971
- type: "button",
23972
- size: "icon-sm",
23973
- variant: hasUpdatesBelow ? "default" : "outline",
23974
- className: cn(
23975
- "pointer-events-auto rounded-full shadow-md dark:border-white/20 dark:ring-1 dark:ring-white/15 dark:shadow-[0_0_0_1px_rgba(255,255,255,0.06),0_10px_30px_rgba(0,0,0,0.45)]",
23976
- hasUpdatesBelow && "animate-bounce"
23977
- ),
23978
- onClick: () => scrollToBottom(true, true),
23979
- "aria-label": t("chat.scrollToBottom"),
23980
- title: t("chat.scrollToBottom"),
23981
- children: /* @__PURE__ */ jsx65(ArrowDown2, { size: 16 })
23982
- }
23983
- ) }),
23984
24165
  quoteSelection && /* @__PURE__ */ jsxs46(
23985
24166
  "div",
23986
24167
  {
@@ -24043,6 +24224,29 @@ function Chat({
24043
24224
  ),
24044
24225
  style: chatColumnStyle,
24045
24226
  children: [
24227
+ !isAtBottom && messages.length > 0 && /* @__PURE__ */ jsx65(
24228
+ "div",
24229
+ {
24230
+ "data-slot": "scroll-to-bottom",
24231
+ className: "pointer-events-none absolute left-1/2 top-0 z-20 flex -translate-x-1/2 -translate-y-full justify-center",
24232
+ children: /* @__PURE__ */ jsx65(
24233
+ Button,
24234
+ {
24235
+ type: "button",
24236
+ size: "icon-sm",
24237
+ variant: hasUpdatesBelow ? "default" : "outline",
24238
+ className: cn(
24239
+ "pointer-events-auto rounded-full shadow-md dark:border-white/20 dark:ring-1 dark:ring-white/15 dark:shadow-[0_0_0_1px_rgba(255,255,255,0.06),0_10px_30px_rgba(0,0,0,0.45)]",
24240
+ hasUpdatesBelow && "animate-bounce"
24241
+ ),
24242
+ onClick: () => scrollToBottom(true, true),
24243
+ "aria-label": t("chat.scrollToBottom"),
24244
+ title: t("chat.scrollToBottom"),
24245
+ children: /* @__PURE__ */ jsx65(ArrowDown2, { size: 16 })
24246
+ }
24247
+ )
24248
+ }
24249
+ ),
24046
24250
  threadErrorMessage && /* @__PURE__ */ jsx65("div", { className: "mb-3 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive overflow-auto", children: threadErrorMessage }),
24047
24251
  /* @__PURE__ */ jsx65(
24048
24252
  ChatAttachments,