@xpert-ai/chatkit-ui 0.0.15 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/assets/{abap-BWs0QYPi.js → abap-BoIjZmaZ.js} +1 -1
- package/dist/app/assets/{abnf-D836Ekee.js → abnf-dSbn3xkN.js} +1 -1
- package/dist/app/assets/{actionscript-DwxVdnYd.js → actionscript-ChuNDFqb.js} +1 -1
- package/dist/app/assets/{ada-DuqPZP7y.js → ada-Dvd3C277.js} +1 -1
- package/dist/app/assets/{agda--lKV47zi.js → agda-0xfHec_W.js} +1 -1
- package/dist/app/assets/{al-DmWukAFp.js → al-Coze2G4P.js} +1 -1
- package/dist/app/assets/{antlr4-Cui9A7Z6.js → antlr4-DAeOwqy-.js} +1 -1
- package/dist/app/assets/{apacheconf-p7Nhi2d3.js → apacheconf-C37ePIkJ.js} +1 -1
- package/dist/app/assets/{apex-wwNmkUuv.js → apex-DH8r9Bnu.js} +1 -1
- package/dist/app/assets/{apl-CQGwfDry.js → apl-G86Tst_e.js} +1 -1
- package/dist/app/assets/{applescript-CxRglPCi.js → applescript-D7AnwBsW.js} +1 -1
- package/dist/app/assets/{aql-DzrzGLDh.js → aql-CEIMa69e.js} +1 -1
- package/dist/app/assets/{arduino-Bl4m690J.js → arduino-C4__FgG7.js} +1 -1
- package/dist/app/assets/{arff-Bi4yNRUp.js → arff-DucTCOwY.js} +1 -1
- package/dist/app/assets/{asciidoc-CPTTRBXf.js → asciidoc-b6l_xRT-.js} +1 -1
- package/dist/app/assets/{asm6502-CBolQ2s3.js → asm6502-B2aeOPaQ.js} +1 -1
- package/dist/app/assets/{asmatmel-DwyOAW8C.js → asmatmel-DWoi6J9F.js} +1 -1
- package/dist/app/assets/{aspnet-K1n3IryN.js → aspnet-CWRG9aUZ.js} +1 -1
- package/dist/app/assets/{autohotkey-DKr5NeGL.js → autohotkey-B0_8QbTJ.js} +1 -1
- package/dist/app/assets/{autoit-BmaRQ3eS.js → autoit-CHJRnMaa.js} +1 -1
- package/dist/app/assets/{avisynth-B5jllq4s.js → avisynth-nYVaucuS.js} +1 -1
- package/dist/app/assets/{avro-idl-D79eqXPk.js → avro-idl-5HEY8nyQ.js} +1 -1
- package/dist/app/assets/{bash-DWI44uVu.js → bash-CbjNmFNe.js} +1 -1
- package/dist/app/assets/{basic-DX5tJRab.js → basic-Bk4MU9TY.js} +1 -1
- package/dist/app/assets/{batch-BZon0dQf.js → batch-BVR1Z-Ze.js} +1 -1
- package/dist/app/assets/{bbcode-CCzrmpJu.js → bbcode-BXZzCVWs.js} +1 -1
- package/dist/app/assets/{bicep-BhU89M6Z.js → bicep-C7--NbzV.js} +1 -1
- package/dist/app/assets/{birb-CpbVfpC3.js → birb-BoaEfruo.js} +1 -1
- package/dist/app/assets/{bison-C7eKJdUK.js → bison-46XaAAX9.js} +1 -1
- package/dist/app/assets/{bnf-C41JeurH.js → bnf-iXMbAgBJ.js} +1 -1
- package/dist/app/assets/{brainfuck-DL3BN1lC.js → brainfuck-Jzxh49W2.js} +1 -1
- package/dist/app/assets/{brightscript-C1ciaxot.js → brightscript-BadaxwXh.js} +1 -1
- package/dist/app/assets/{bro-DeUBCRiY.js → bro-CR7xdyd-.js} +1 -1
- package/dist/app/assets/{bsl-BVdoLWrt.js → bsl-9EeFiwxQ.js} +1 -1
- package/dist/app/assets/{c-D-NlgPSm.js → c-DQ7liO6a.js} +1 -1
- package/dist/app/assets/{cfscript-CI77gY57.js → cfscript-SALoq7FX.js} +1 -1
- package/dist/app/assets/{chaiscript-D92IIXjK.js → chaiscript-CNEL74a4.js} +1 -1
- package/dist/app/assets/{cil-Vi00szx4.js → cil-C2ZEDTDB.js} +1 -1
- package/dist/app/assets/{clike-K_AYaoxN.js → clike-DsD21Evf.js} +1 -1
- package/dist/app/assets/{clojure-IjprIaXK.js → clojure-CZHHyOHz.js} +1 -1
- package/dist/app/assets/{cmake-CiZsn6Cd.js → cmake-CTchcqYX.js} +1 -1
- package/dist/app/assets/{cobol-BsMCYJOB.js → cobol-BiftCL-L.js} +1 -1
- package/dist/app/assets/{coffeescript-Tn0NVIMO.js → coffeescript-DijTcNNW.js} +1 -1
- package/dist/app/assets/{concurnas-Qkduv-yR.js → concurnas-ard6ErmL.js} +1 -1
- package/dist/app/assets/{coq-CkiZ3gEL.js → coq-i9-qHej_.js} +1 -1
- package/dist/app/assets/{core-BIe9U2bi.js → core-aj5JZjcO.js} +1 -1
- package/dist/app/assets/{cpp-DUkuUOiy.js → cpp-BT7nVZr2.js} +1 -1
- package/dist/app/assets/{crystal-DzDaEh84.js → crystal-_iZ0Q5Jk.js} +1 -1
- package/dist/app/assets/{csharp-Ds4tzl1h.js → csharp-CTQVhFeP.js} +1 -1
- package/dist/app/assets/{cshtml-XSfeicox.js → cshtml-DVHl3YlJ.js} +1 -1
- package/dist/app/assets/{csp-BnuytBc2.js → csp-Jhq_JW1m.js} +1 -1
- package/dist/app/assets/{css-uvHkMV3H.js → css-Cokpob_V.js} +1 -1
- package/dist/app/assets/{css-extras-BYbzAK7f.js → css-extras-BZG-mKgU.js} +1 -1
- package/dist/app/assets/{csv-ZTBDHIMG.js → csv-DJ6MtS6f.js} +1 -1
- package/dist/app/assets/{cypher-8jmGfbdR.js → cypher-DLIBipvO.js} +1 -1
- package/dist/app/assets/{d-DFbflmjx.js → d-vgJqU9a6.js} +1 -1
- package/dist/app/assets/{dart-xe2OJ0zL.js → dart-mEK1vzDL.js} +1 -1
- package/dist/app/assets/{dataweave-cyUIz_PL.js → dataweave-Dgcq8Rdn.js} +1 -1
- package/dist/app/assets/{dax-BnxULnvb.js → dax-C7NOquac.js} +1 -1
- package/dist/app/assets/{dhall-DkVQZ3C3.js → dhall-DQcztP06.js} +1 -1
- package/dist/app/assets/{diff-u2elSjyY.js → diff-CIWhtMw0.js} +1 -1
- package/dist/app/assets/{django-DWfaa1BH.js → django-B28DWuEq.js} +1 -1
- package/dist/app/assets/{dns-zone-file-BxxD9YiY.js → dns-zone-file-C0LYWClw.js} +1 -1
- package/dist/app/assets/{docker-agJ_fYVN.js → docker-XC07_dge.js} +1 -1
- package/dist/app/assets/{dot-DfK48nzU.js → dot-B-cLSr2L.js} +1 -1
- package/dist/app/assets/{ebnf-D2_uN5ZR.js → ebnf-LdHuV98Q.js} +1 -1
- package/dist/app/assets/{editorconfig-Bkm8bu86.js → editorconfig-6qFF56uJ.js} +1 -1
- package/dist/app/assets/{eiffel-KNdMI65Y.js → eiffel-BBlop-Ob.js} +1 -1
- package/dist/app/assets/{ejs-CscaSYIN.js → ejs-Cpb8mc_5.js} +1 -1
- package/dist/app/assets/{elixir-BNlWI1r7.js → elixir-BCH_jx6L.js} +1 -1
- package/dist/app/assets/{elm-CNwbF3_9.js → elm-BYitJ5N8.js} +1 -1
- package/dist/app/assets/{erb-DtFL1xmZ.js → erb-BM71CWBM.js} +1 -1
- package/dist/app/assets/{erlang-C0jBeitv.js → erlang-C3MAiPYK.js} +1 -1
- package/dist/app/assets/{etlua-B_FYDHoo.js → etlua-B59J9deP.js} +1 -1
- package/dist/app/assets/{excel-formula-Ddk-Nf9I.js → excel-formula-DL0sVnhe.js} +1 -1
- package/dist/app/assets/{factor-CmwX-7Jh.js → factor-C0qd9-Ik.js} +1 -1
- package/dist/app/assets/{false-DyBWE4qx.js → false-CJfgqy4_.js} +1 -1
- package/dist/app/assets/{firestore-security-rules-BnA9yQQx.js → firestore-security-rules-DwecoR3J.js} +1 -1
- package/dist/app/assets/{flow-DN7IgZst.js → flow-CDbqIUbL.js} +1 -1
- package/dist/app/assets/{fortran-CWBI75l9.js → fortran-hpiaS8_6.js} +1 -1
- package/dist/app/assets/{fsharp-Be4_1ptQ.js → fsharp-DbRhkxgi.js} +1 -1
- package/dist/app/assets/{ftl-CGRdQf4s.js → ftl-1DykyJWZ.js} +1 -1
- package/dist/app/assets/{gap-BKioDcPC.js → gap-DoGlEwd3.js} +1 -1
- package/dist/app/assets/{gcode-Dn2cLzkC.js → gcode-D-Px2cE_.js} +1 -1
- package/dist/app/assets/{gdscript-CJOS-gjk.js → gdscript-BrNoOncy.js} +1 -1
- package/dist/app/assets/{gedcom-CplceX5G.js → gedcom-B_NdfrML.js} +1 -1
- package/dist/app/assets/{gherkin-DMSysr5I.js → gherkin-CqgRkfNX.js} +1 -1
- package/dist/app/assets/{git-CPW7sXGf.js → git-CvFmzhfv.js} +1 -1
- package/dist/app/assets/{glsl-k-facHOT.js → glsl-CLucsEPA.js} +1 -1
- package/dist/app/assets/{gml-CV--3uCc.js → gml-BlpkejAp.js} +1 -1
- package/dist/app/assets/{gn-jkosEbNS.js → gn-BhXi_GxX.js} +1 -1
- package/dist/app/assets/{go-BNQLRlmA.js → go-2dcH9sSS.js} +1 -1
- package/dist/app/assets/{go-module-DbWOj2H0.js → go-module-DzMt3K71.js} +1 -1
- package/dist/app/assets/{graphql-usPW3Fl7.js → graphql-dsIFYpYZ.js} +1 -1
- package/dist/app/assets/{groovy-MKE1O2R9.js → groovy-DgzpjP_D.js} +1 -1
- package/dist/app/assets/{haml-_mDStvsq.js → haml-DT74cpdh.js} +1 -1
- package/dist/app/assets/{handlebars-CIl8TmZq.js → handlebars-Dz1-cyuE.js} +1 -1
- package/dist/app/assets/{haskell-Cm4BzUdQ.js → haskell-BtvH26fL.js} +1 -1
- package/dist/app/assets/{haxe-COKxOzXV.js → haxe-CJ2gszbA.js} +1 -1
- package/dist/app/assets/{hcl-DUZa-9cr.js → hcl-BNZH9Ib9.js} +1 -1
- package/dist/app/assets/{hlsl-Dxo1rrBG.js → hlsl-CSuHbA9t.js} +1 -1
- package/dist/app/assets/{hoon-DZk8Paai.js → hoon-BeJF0lUF.js} +1 -1
- package/dist/app/assets/{hpkp-Bf9ZU2kJ.js → hpkp-Biss6dVt.js} +1 -1
- package/dist/app/assets/{hsts-CMX9dH_c.js → hsts-CLEmT2zf.js} +1 -1
- package/dist/app/assets/{http-BdPDUUlX.js → http-CTrWhEI8.js} +1 -1
- package/dist/app/assets/{ichigojam-DZWqQfTk.js → ichigojam-CM00i9P4.js} +1 -1
- package/dist/app/assets/{icon-CSC5VGP_.js → icon-DEnOKKOC.js} +1 -1
- package/dist/app/assets/{icu-message-format-CtRFWyFe.js → icu-message-format-3z4ane6q.js} +1 -1
- package/dist/app/assets/{idris-D2LDs3co.js → idris-CkNPAoKr.js} +1 -1
- package/dist/app/assets/{iecst-kpaa10GT.js → iecst-3D5UGiz6.js} +1 -1
- package/dist/app/assets/{ignore-B6TeQ2cq.js → ignore-BrbB_BSD.js} +1 -1
- package/dist/app/assets/index-BTGdEmOx.css +1 -0
- package/dist/app/assets/index-DAVw-s04.js +439 -0
- package/dist/app/assets/{inform7-B2DiX5z0.js → inform7-XNwha8I1.js} +1 -1
- package/dist/app/assets/{ini-CJgz2CJx.js → ini-DLlwf2gT.js} +1 -1
- package/dist/app/assets/{io-C4PjllHD.js → io-D2RYUqys.js} +1 -1
- package/dist/app/assets/{j-BKSoIQwQ.js → j-BasAkJbf.js} +1 -1
- package/dist/app/assets/{java-CHbVZ6UP.js → java-6c1Mm3IN.js} +1 -1
- package/dist/app/assets/{javadoc-CPqAjHoM.js → javadoc-CRaAlfqw.js} +1 -1
- package/dist/app/assets/{javadoclike-Bs-8xh3H.js → javadoclike-9bpcWOkY.js} +1 -1
- package/dist/app/assets/{javascript-BT_NpjyP.js → javascript-DZUmzoI7.js} +1 -1
- package/dist/app/assets/{javastacktrace-Drjxr-oB.js → javastacktrace-g-dS0tWu.js} +1 -1
- package/dist/app/assets/{jexl-BxjDgVx9.js → jexl-BrjlwC5s.js} +1 -1
- package/dist/app/assets/{jolie-BqMpKk0G.js → jolie-CXt8utu9.js} +1 -1
- package/dist/app/assets/{jq-BHUHr0op.js → jq-Bcnqodq2.js} +1 -1
- package/dist/app/assets/{js-extras-D4wvqur3.js → js-extras-_DMxxy53.js} +1 -1
- package/dist/app/assets/{js-templates-Yv-O3_U6.js → js-templates-B1Xy1qPf.js} +1 -1
- package/dist/app/assets/{jsdoc-OgQO3nf9.js → jsdoc-CRLso8tn.js} +1 -1
- package/dist/app/assets/{json-DVZtz_Zz.js → json-DGdFBZaG.js} +1 -1
- package/dist/app/assets/{json5--f2Givq3.js → json5-DHfIgdC6.js} +1 -1
- package/dist/app/assets/{jsonp-DVGUcHMz.js → jsonp-DQjCVsy3.js} +1 -1
- package/dist/app/assets/{jsstacktrace-D-yoMr1R.js → jsstacktrace-DdpnKq-S.js} +1 -1
- package/dist/app/assets/{jsx-C05X4U8h.js → jsx-DGHeNivK.js} +1 -1
- package/dist/app/assets/{julia-DgnoOAdD.js → julia-C4_8nu13.js} +1 -1
- package/dist/app/assets/{keepalived-JD08MytA.js → keepalived-CgBr_LcP.js} +1 -1
- package/dist/app/assets/{keyman-azrDuGNy.js → keyman-DLsdmPzg.js} +1 -1
- package/dist/app/assets/{kotlin-Bq9qLl8S.js → kotlin-BIyZ_mVz.js} +1 -1
- package/dist/app/assets/{kumir-BaIa8IWz.js → kumir-DxZ90Jrj.js} +1 -1
- package/dist/app/assets/{kusto-DQhcCWAA.js → kusto-DXX_XYlb.js} +1 -1
- package/dist/app/assets/{latex-qLbFVwxL.js → latex-Chy4MZga.js} +1 -1
- package/dist/app/assets/{latte-BIpeH7ye.js → latte-CwOr4WSZ.js} +1 -1
- package/dist/app/assets/{less-DCAm2XKc.js → less-NIIuxYev.js} +1 -1
- package/dist/app/assets/{lilypond-URqh-pba.js → lilypond-I8E_e9s3.js} +1 -1
- package/dist/app/assets/{liquid-BdNjEMRj.js → liquid-CC9-AlJL.js} +1 -1
- package/dist/app/assets/{lisp-DdMDpbFO.js → lisp-DU3ynTRL.js} +1 -1
- package/dist/app/assets/{livescript-YUBYodrC.js → livescript-mede3eXX.js} +1 -1
- package/dist/app/assets/{llvm-BdNAFhzC.js → llvm-ChOZipf9.js} +1 -1
- package/dist/app/assets/{log-BdA3w0be.js → log-BlgfBYo8.js} +1 -1
- package/dist/app/assets/{lolcode-BqnlYMBu.js → lolcode-Dxp_wkNH.js} +1 -1
- package/dist/app/assets/{lua-Z_Qxo3dR.js → lua-De71Dk_o.js} +1 -1
- package/dist/app/assets/{magma-rsT2u-lT.js → magma-Xk9asSNm.js} +1 -1
- package/dist/app/assets/{makefile-CrrMmdVS.js → makefile-D8AvVIZr.js} +1 -1
- package/dist/app/assets/{markdown-B5hh6ods.js → markdown-f2l7WvCf.js} +1 -1
- package/dist/app/assets/{markup-templating-CbtO_SGF.js → markup-templating-DGy3xLOw.js} +1 -1
- package/dist/app/assets/{markup-BiaBQ4Go.js → markup-twhd9bJ7.js} +1 -1
- package/dist/app/assets/{matlab-BXD-ZhVV.js → matlab-BnnzNP6N.js} +1 -1
- package/dist/app/assets/{maxscript-NZobaPB9.js → maxscript-wegT0Hte.js} +1 -1
- package/dist/app/assets/{mel-BsjN8CzC.js → mel-BeWBIIM8.js} +1 -1
- package/dist/app/assets/{mermaid-B5UiXAS_.js → mermaid-BTAS88aZ.js} +1 -1
- package/dist/app/assets/{mizar-CuUsPtTq.js → mizar-DwJSTZ3i.js} +1 -1
- package/dist/app/assets/{mongodb-D3GB0bU8.js → mongodb-CXGzXJVg.js} +1 -1
- package/dist/app/assets/{monkey-CK-Syk83.js → monkey-CDzLAr7y.js} +1 -1
- package/dist/app/assets/{moonscript-CxgNQMDf.js → moonscript-CMoyqNP7.js} +1 -1
- package/dist/app/assets/{n1ql-B0gvukgr.js → n1ql-xaPxaJST.js} +1 -1
- package/dist/app/assets/{n4js-CSiVWG8j.js → n4js-BZ6fn5FD.js} +1 -1
- package/dist/app/assets/{nand2tetris-hdl-BvvEGqNK.js → nand2tetris-hdl-DAx6t1t9.js} +1 -1
- package/dist/app/assets/{naniscript-45A_ER_d.js → naniscript-DF84GuME.js} +1 -1
- package/dist/app/assets/{nasm-CyYsQrbV.js → nasm-B7uV0gGJ.js} +1 -1
- package/dist/app/assets/{neon-BiKXlKLm.js → neon-CKj_SNMo.js} +1 -1
- package/dist/app/assets/{nevod-8Kv8aVJh.js → nevod-Dhy_1bov.js} +1 -1
- package/dist/app/assets/{nginx-Cqo-dGUO.js → nginx-p1M3Geay.js} +1 -1
- package/dist/app/assets/{nim-Cy_EjBaO.js → nim-CU39HumB.js} +1 -1
- package/dist/app/assets/{nix-BmTy7l9S.js → nix-CwpMGFgf.js} +1 -1
- package/dist/app/assets/{nsis-XTneXqGR.js → nsis-eoDJFK6h.js} +1 -1
- package/dist/app/assets/{objectivec-Dmg9RHOg.js → objectivec-C3g9_fbX.js} +1 -1
- package/dist/app/assets/{ocaml-CWRJM2tE.js → ocaml-CSHSpeFg.js} +1 -1
- package/dist/app/assets/{opencl-D8_U7ZHs.js → opencl-BdyiZtQ0.js} +1 -1
- package/dist/app/assets/{openqasm--Tw4PlEa.js → openqasm-je8WlDNj.js} +1 -1
- package/dist/app/assets/{oz-D-aUSxpN.js → oz-CUz9q9Cx.js} +1 -1
- package/dist/app/assets/{parigp-MtrGmHWf.js → parigp-BlcFmUeN.js} +1 -1
- package/dist/app/assets/{parser-h_-AW9-T.js → parser-BEb8_JfW.js} +1 -1
- package/dist/app/assets/{pascal-DAMDGrIq.js → pascal-CXud7dwk.js} +1 -1
- package/dist/app/assets/{pascaligo-TT68AZ0R.js → pascaligo-D8TqU7tP.js} +1 -1
- package/dist/app/assets/{pcaxis-BZabfhMp.js → pcaxis-Rc2xz6nY.js} +1 -1
- package/dist/app/assets/{peoplecode-8Z4ArX58.js → peoplecode-vcggeuWN.js} +1 -1
- package/dist/app/assets/{perl-Tf2L_iWK.js → perl-UKwRKGyT.js} +1 -1
- package/dist/app/assets/{php-Citv4wvI.js → php-AVlR1HxF.js} +1 -1
- package/dist/app/assets/{php-extras-CXdnzF7N.js → php-extras-9vU0n0hg.js} +1 -1
- package/dist/app/assets/{phpdoc-D6tsAiH4.js → phpdoc-DdNIP5Cz.js} +1 -1
- package/dist/app/assets/{plsql-DJtQNxFM.js → plsql-CHF_uFPR.js} +1 -1
- package/dist/app/assets/{powerquery-CP9sQCLl.js → powerquery-DYaLrf7D.js} +1 -1
- package/dist/app/assets/{powershell-CKCDLWVv.js → powershell-C_A95Q2Z.js} +1 -1
- package/dist/app/assets/{processing-D4muvaDA.js → processing-D2A_N_ov.js} +1 -1
- package/dist/app/assets/{prolog-DqCpmAF7.js → prolog-uXSXcG5C.js} +1 -1
- package/dist/app/assets/{promql-DNdbBZJb.js → promql-BphtLzBj.js} +1 -1
- package/dist/app/assets/{properties-DQUwwb8x.js → properties-By8wzMLh.js} +1 -1
- package/dist/app/assets/{protobuf-BNe-4-Ln.js → protobuf-Br036i_2.js} +1 -1
- package/dist/app/assets/{psl-DHT7D5Zu.js → psl-BqC5a1i2.js} +1 -1
- package/dist/app/assets/{pug-BYrNe-ek.js → pug-CIlbkPhR.js} +1 -1
- package/dist/app/assets/{puppet-IzXU2QnL.js → puppet-BPgrPqLm.js} +1 -1
- package/dist/app/assets/{pure-C8utNRFH.js → pure-B8Dte7PK.js} +1 -1
- package/dist/app/assets/{purebasic-BLFLiyfl.js → purebasic-BLQdSyOI.js} +1 -1
- package/dist/app/assets/{purescript-CGkGiDmC.js → purescript-Cqa3iDCo.js} +1 -1
- package/dist/app/assets/{q-Ch-_c3XY.js → q-BGRU5tMs.js} +1 -1
- package/dist/app/assets/{qml-BCtzfHKg.js → qml-4wkr_e8q.js} +1 -1
- package/dist/app/assets/{qore-6XNyhUtr.js → qore-Dn8DPaxX.js} +1 -1
- package/dist/app/assets/{qsharp-KFIiBs-v.js → qsharp-DuHfkgke.js} +1 -1
- package/dist/app/assets/{r-VHCTkPpx.js → r-JNvVUTzQ.js} +1 -1
- package/dist/app/assets/{racket-1qTUuxaw.js → racket-CuuQfryI.js} +1 -1
- package/dist/app/assets/{reason-c3DD7ovu.js → reason-BkulNhIX.js} +1 -1
- package/dist/app/assets/{regex-CKlhWzhL.js → regex-BK250LBm.js} +1 -1
- package/dist/app/assets/{rego-B6Roc-f_.js → rego-DD4jfVrz.js} +1 -1
- package/dist/app/assets/{renpy-B8vDLdIS.js → renpy-Up6DOU68.js} +1 -1
- package/dist/app/assets/{rest-CbuvO7de.js → rest-JgcjFndH.js} +1 -1
- package/dist/app/assets/{rip-sVuuKWbv.js → rip-Bw1N4gpB.js} +1 -1
- package/dist/app/assets/{roboconf-BidW62eI.js → roboconf-BSia62DO.js} +1 -1
- package/dist/app/assets/{robotframework-Cd11Dy3l.js → robotframework-CD3SIrcT.js} +1 -1
- package/dist/app/assets/{ruby-BMwY3KVp.js → ruby-DjzxjDrP.js} +1 -1
- package/dist/app/assets/{rust-DglFfUim.js → rust-CenxkUdd.js} +1 -1
- package/dist/app/assets/{sas-BCWGGNZo.js → sas-CkhHqzKO.js} +1 -1
- package/dist/app/assets/{sass-Chbcrpqb.js → sass-Bj5RvbQb.js} +1 -1
- package/dist/app/assets/{scala-ClwErATt.js → scala-CD7YOhd_.js} +1 -1
- package/dist/app/assets/{scheme-mqaymmTS.js → scheme-C7ztqGcC.js} +1 -1
- package/dist/app/assets/{scss-BBhxumOr.js → scss-jngc2vM4.js} +1 -1
- package/dist/app/assets/{shell-session-CuI4Rdf4.js → shell-session-Cf8TkgCb.js} +1 -1
- package/dist/app/assets/{smali-BoavhNXE.js → smali-BWjG_F2J.js} +1 -1
- package/dist/app/assets/{smalltalk-WiUFOepn.js → smalltalk-B7bFUWh2.js} +1 -1
- package/dist/app/assets/{smarty-BP4mWIwR.js → smarty-BtDh_Lbq.js} +1 -1
- package/dist/app/assets/{sml-AFqGvMHc.js → sml-baFYvc0l.js} +1 -1
- package/dist/app/assets/{solidity-D5h9njh8.js → solidity-BHUtyotx.js} +1 -1
- package/dist/app/assets/{solution-file-BLK1IrUz.js → solution-file-B2B1VEoF.js} +1 -1
- package/dist/app/assets/{soy-Cf8u5dko.js → soy-D07-kKcL.js} +1 -1
- package/dist/app/assets/{sparql-C9KxnH23.js → sparql-Bq1nby44.js} +1 -1
- package/dist/app/assets/{splunk-spl-BxUXtsOD.js → splunk-spl-7OB4FDIj.js} +1 -1
- package/dist/app/assets/{sqf-qlV7g48i.js → sqf-Y8kPyUGy.js} +1 -1
- package/dist/app/assets/{sql-C-p1pos9.js → sql-cchOGBTS.js} +1 -1
- package/dist/app/assets/{squirrel-PX1Grtap.js → squirrel-B5XNpE09.js} +1 -1
- package/dist/app/assets/{stan-zV2a82m3.js → stan-BbdO1pjw.js} +1 -1
- package/dist/app/assets/{stylus-BrnUo9zO.js → stylus-CEx2rDQb.js} +1 -1
- package/dist/app/assets/{swift-Byy18r0p.js → swift-E_SJ1p-z.js} +1 -1
- package/dist/app/assets/{systemd-BtqJkXRf.js → systemd-Bp6JJhYd.js} +1 -1
- package/dist/app/assets/{t4-cs-C5jp0bkn.js → t4-cs-B6VxfevA.js} +1 -1
- package/dist/app/assets/{t4-templating-Bmu7FZgm.js → t4-templating-BFVCMjcF.js} +1 -1
- package/dist/app/assets/{t4-vb-CczRCjMn.js → t4-vb-Cw44ZeAl.js} +1 -1
- package/dist/app/assets/{tap-DUhOrRiK.js → tap-BeeNW0Dn.js} +1 -1
- package/dist/app/assets/{tcl-BGDNQuGV.js → tcl-Dr9LwAok.js} +1 -1
- package/dist/app/assets/{textile-BGym3KVm.js → textile-DxUzeEfH.js} +1 -1
- package/dist/app/assets/{toml-h2DQ44P0.js → toml-DW-fj9Ve.js} +1 -1
- package/dist/app/assets/{tremor-CwHv-OnP.js → tremor-CSPNAvxf.js} +1 -1
- package/dist/app/assets/{tt2-qgYZXJPR.js → tt2-5hZ0qseS.js} +1 -1
- package/dist/app/assets/{turtle-Czr_CW8r.js → turtle-D78spzhr.js} +1 -1
- package/dist/app/assets/{twig-Bq_oAHcm.js → twig-DSTGGsFD.js} +1 -1
- package/dist/app/assets/{typescript-mXKzIg0y.js → typescript-DeKf5Yx2.js} +1 -1
- package/dist/app/assets/{typoscript-CLdCbPty.js → typoscript-mYWtQCKO.js} +1 -1
- package/dist/app/assets/{unrealscript-CdYUVWsh.js → unrealscript-DEhfFJlC.js} +1 -1
- package/dist/app/assets/{uorazor-DxNXLQYo.js → uorazor-0uC9DIjB.js} +1 -1
- package/dist/app/assets/{uri-DYk5U2Tx.js → uri-Df_kC31y.js} +1 -1
- package/dist/app/assets/{v-ZpnMXAp_.js → v-LL1hUydo.js} +1 -1
- package/dist/app/assets/{vala-hVJU5BfN.js → vala-D02QI2Px.js} +1 -1
- package/dist/app/assets/{vbnet-CmY51d5G.js → vbnet-CR3y5qLg.js} +1 -1
- package/dist/app/assets/{velocity-CsvRt2hb.js → velocity-HNtJrOJ1.js} +1 -1
- package/dist/app/assets/{verilog-CPo8f42m.js → verilog-BLgKa5W4.js} +1 -1
- package/dist/app/assets/{vhdl-WKsKMPi0.js → vhdl-CNY_UEqB.js} +1 -1
- package/dist/app/assets/{vim-BgsS8AXO.js → vim-BZUpIPYO.js} +1 -1
- package/dist/app/assets/{visual-basic-CufJPq0T.js → visual-basic-DQ5SAQUu.js} +1 -1
- package/dist/app/assets/{warpscript-BMGdLyX8.js → warpscript-C8sl0AcI.js} +1 -1
- package/dist/app/assets/{wasm-BwoGQtY0.js → wasm-CtcB8nnU.js} +1 -1
- package/dist/app/assets/{web-idl-CQh6nLUF.js → web-idl-CVztrMTV.js} +1 -1
- package/dist/app/assets/{wiki-BBUQmhnv.js → wiki-gaSWHzkK.js} +1 -1
- package/dist/app/assets/{wolfram-TAz_4SnR.js → wolfram-Bep9vU4v.js} +1 -1
- package/dist/app/assets/{wren-CVPXcwur.js → wren-C21a2Yjt.js} +1 -1
- package/dist/app/assets/{xeora-DFQOGccv.js → xeora-Dp4LrTkO.js} +1 -1
- package/dist/app/assets/{xml-doc-DU62FPEw.js → xml-doc-Doj5uv_S.js} +1 -1
- package/dist/app/assets/{xojo-CRo0kja2.js → xojo-DG95hxHV.js} +1 -1
- package/dist/app/assets/{xquery-lrNjl9FO.js → xquery-BF4ZgZA4.js} +1 -1
- package/dist/app/assets/{yaml-PqToDf_Q.js → yaml-BKgY30GP.js} +1 -1
- package/dist/app/assets/{yang-BQDTSngB.js → yang-1nC5puJT.js} +1 -1
- package/dist/app/assets/{zig-D_9EoT5C.js → zig-CYQ8mjbV.js} +1 -1
- package/dist/app/index.html +2 -2
- package/dist/index.cjs +326 -60
- package/dist/index.css +0 -36
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +332 -62
- package/package.json +3 -3
- package/dist/app/assets/index-C9w4yW8p.js +0 -438
- package/dist/app/assets/index-DcB156i0.css +0 -1
package/dist/index.cjs
CHANGED
|
@@ -89,6 +89,15 @@ function createMessageId() {
|
|
|
89
89
|
return globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
// src/lib/scroll.ts
|
|
93
|
+
var BOTTOM_FOLLOW_THRESHOLD_PX = 48;
|
|
94
|
+
function getDistanceFromBottom(element) {
|
|
95
|
+
return Math.max(0, element.scrollHeight - element.clientHeight - element.scrollTop);
|
|
96
|
+
}
|
|
97
|
+
function isNearBottom(element, threshold = BOTTOM_FOLLOW_THRESHOLD_PX) {
|
|
98
|
+
return getDistanceFromBottom(element) <= threshold;
|
|
99
|
+
}
|
|
100
|
+
|
|
92
101
|
// src/providers/Stream.tsx
|
|
93
102
|
var import_react3 = require("react");
|
|
94
103
|
var import_nuqs = require("nuqs");
|
|
@@ -327,11 +336,41 @@ function useParentMessenger({ onSetOptions } = {}) {
|
|
|
327
336
|
return messenger;
|
|
328
337
|
}
|
|
329
338
|
|
|
339
|
+
// src/lib/thread-context-usage.ts
|
|
340
|
+
function normalizeContextUsageNumber(value) {
|
|
341
|
+
if (typeof value === "number" && Number.isFinite(value) && value >= 0) {
|
|
342
|
+
return Math.floor(value);
|
|
343
|
+
}
|
|
344
|
+
if (typeof value === "string") {
|
|
345
|
+
const parsed = Number.parseFloat(value);
|
|
346
|
+
if (Number.isFinite(parsed) && parsed >= 0) {
|
|
347
|
+
return Math.floor(parsed);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
function getThreadContextUsage(state, agentKey) {
|
|
353
|
+
if (!agentKey) return null;
|
|
354
|
+
return state[agentKey] ?? null;
|
|
355
|
+
}
|
|
356
|
+
function getThreadContextUsageTotalTokens(event) {
|
|
357
|
+
return normalizeContextUsageNumber(event?.usage?.totalTokens);
|
|
358
|
+
}
|
|
359
|
+
function resolveUsedContextSize(options) {
|
|
360
|
+
const realtimeUsedTokens = getThreadContextUsageTotalTokens(
|
|
361
|
+
options.realtimeUsage
|
|
362
|
+
);
|
|
363
|
+
if (realtimeUsedTokens != null) {
|
|
364
|
+
return realtimeUsedTokens;
|
|
365
|
+
}
|
|
366
|
+
return normalizeContextUsageNumber(options.fallbackUsedTokens) ?? 0;
|
|
367
|
+
}
|
|
368
|
+
|
|
330
369
|
// src/providers/Stream.tsx
|
|
331
370
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
332
371
|
var import_meta = {};
|
|
333
372
|
var StreamContext = (0, import_react3.createContext)(void 0);
|
|
334
|
-
var defaultApiUrl = import_meta.env.VITE_XPERTAI_API_URL ?? "https://api.
|
|
373
|
+
var defaultApiUrl = import_meta.env.VITE_XPERTAI_API_URL ?? "https://api.xpertai.cn/api/ai";
|
|
335
374
|
var useStreamContext = () => {
|
|
336
375
|
const context = (0, import_react3.useContext)(StreamContext);
|
|
337
376
|
if (!context) {
|
|
@@ -451,6 +490,7 @@ var en_US_default = {
|
|
|
451
490
|
loadingThread: "Loading thread...",
|
|
452
491
|
stop: "Stop",
|
|
453
492
|
send: "Send message",
|
|
493
|
+
scrollToBottom: "Scroll to bottom",
|
|
454
494
|
retryUpload: "Retry upload",
|
|
455
495
|
poweredBy: "Powered by Xpert AI",
|
|
456
496
|
errors: {
|
|
@@ -509,6 +549,7 @@ var zh_CN_default = {
|
|
|
509
549
|
loadingThread: "\u6B63\u5728\u52A0\u8F7D\u7EBF\u7A0B...",
|
|
510
550
|
stop: "\u505C\u6B62",
|
|
511
551
|
send: "\u53D1\u9001\u6D88\u606F",
|
|
552
|
+
scrollToBottom: "\u56DE\u5230\u5E95\u90E8",
|
|
512
553
|
retryUpload: "\u91CD\u65B0\u4E0A\u4F20",
|
|
513
554
|
poweredBy: "\u7531 Xpert AI \u9A71\u52A8",
|
|
514
555
|
errors: {
|
|
@@ -1607,6 +1648,12 @@ TooltipIconButton.displayName = "TooltipIconButton";
|
|
|
1607
1648
|
// src/components/thread/markdown-text.tsx
|
|
1608
1649
|
var import_katex_min = require("katex/dist/katex.min.css");
|
|
1609
1650
|
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
1651
|
+
var getTextContent = (children) => import_react6.Children.toArray(children).map((child) => {
|
|
1652
|
+
if (typeof child === "string" || typeof child === "number") {
|
|
1653
|
+
return String(child);
|
|
1654
|
+
}
|
|
1655
|
+
return "";
|
|
1656
|
+
}).join("");
|
|
1610
1657
|
var useCopyToClipboard = ({
|
|
1611
1658
|
copiedDuration = 3e3
|
|
1612
1659
|
} = {}) => {
|
|
@@ -1643,7 +1690,7 @@ var CodeHeader = ({ language, code }) => {
|
|
|
1643
1690
|
] });
|
|
1644
1691
|
};
|
|
1645
1692
|
var defaultComponents = {
|
|
1646
|
-
h1: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1693
|
+
h1: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1647
1694
|
"h1",
|
|
1648
1695
|
{
|
|
1649
1696
|
className: cn(
|
|
@@ -1653,7 +1700,7 @@ var defaultComponents = {
|
|
|
1653
1700
|
...props
|
|
1654
1701
|
}
|
|
1655
1702
|
),
|
|
1656
|
-
h2: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1703
|
+
h2: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1657
1704
|
"h2",
|
|
1658
1705
|
{
|
|
1659
1706
|
className: cn(
|
|
@@ -1663,7 +1710,7 @@ var defaultComponents = {
|
|
|
1663
1710
|
...props
|
|
1664
1711
|
}
|
|
1665
1712
|
),
|
|
1666
|
-
h3: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1713
|
+
h3: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1667
1714
|
"h3",
|
|
1668
1715
|
{
|
|
1669
1716
|
className: cn(
|
|
@@ -1673,7 +1720,7 @@ var defaultComponents = {
|
|
|
1673
1720
|
...props
|
|
1674
1721
|
}
|
|
1675
1722
|
),
|
|
1676
|
-
h4: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1723
|
+
h4: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1677
1724
|
"h4",
|
|
1678
1725
|
{
|
|
1679
1726
|
className: cn(
|
|
@@ -1683,7 +1730,7 @@ var defaultComponents = {
|
|
|
1683
1730
|
...props
|
|
1684
1731
|
}
|
|
1685
1732
|
),
|
|
1686
|
-
h5: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1733
|
+
h5: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1687
1734
|
"h5",
|
|
1688
1735
|
{
|
|
1689
1736
|
className: cn(
|
|
@@ -1693,21 +1740,21 @@ var defaultComponents = {
|
|
|
1693
1740
|
...props
|
|
1694
1741
|
}
|
|
1695
1742
|
),
|
|
1696
|
-
h6: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1743
|
+
h6: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1697
1744
|
"h6",
|
|
1698
1745
|
{
|
|
1699
1746
|
className: cn("my-4 font-semibold first:mt-0 last:mb-0", className),
|
|
1700
1747
|
...props
|
|
1701
1748
|
}
|
|
1702
1749
|
),
|
|
1703
|
-
p: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1750
|
+
p: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1704
1751
|
"p",
|
|
1705
1752
|
{
|
|
1706
1753
|
className: cn("mt-5 mb-5 leading-7 first:mt-0 last:mb-0", className),
|
|
1707
1754
|
...props
|
|
1708
1755
|
}
|
|
1709
1756
|
),
|
|
1710
|
-
a: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1757
|
+
a: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1711
1758
|
"a",
|
|
1712
1759
|
{
|
|
1713
1760
|
className: cn(
|
|
@@ -1719,35 +1766,46 @@ var defaultComponents = {
|
|
|
1719
1766
|
...props
|
|
1720
1767
|
}
|
|
1721
1768
|
),
|
|
1722
|
-
blockquote: ({
|
|
1769
|
+
blockquote: ({
|
|
1770
|
+
className,
|
|
1771
|
+
node: _node,
|
|
1772
|
+
...props
|
|
1773
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1723
1774
|
"blockquote",
|
|
1724
1775
|
{
|
|
1725
|
-
className: cn(
|
|
1776
|
+
className: cn(
|
|
1777
|
+
"border-l-4 border-border pl-6 italic text-muted-foreground",
|
|
1778
|
+
className
|
|
1779
|
+
),
|
|
1726
1780
|
...props
|
|
1727
1781
|
}
|
|
1728
1782
|
),
|
|
1729
|
-
ul: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1783
|
+
ul: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1730
1784
|
"ul",
|
|
1731
1785
|
{
|
|
1732
1786
|
className: cn("my-5 list-outside list-disc pl-6 [&>li]:mt-2", className),
|
|
1733
1787
|
...props
|
|
1734
1788
|
}
|
|
1735
1789
|
),
|
|
1736
|
-
ol: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1790
|
+
ol: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1737
1791
|
"ol",
|
|
1738
1792
|
{
|
|
1739
1793
|
className: cn("my-5 list-outside list-decimal pl-8 [&>li]:mt-2", className),
|
|
1740
1794
|
...props
|
|
1741
1795
|
}
|
|
1742
1796
|
),
|
|
1743
|
-
hr: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1797
|
+
hr: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1744
1798
|
"hr",
|
|
1745
1799
|
{
|
|
1746
1800
|
className: cn("my-5 border-b", className),
|
|
1747
1801
|
...props
|
|
1748
1802
|
}
|
|
1749
1803
|
),
|
|
1750
|
-
table: ({
|
|
1804
|
+
table: ({
|
|
1805
|
+
className,
|
|
1806
|
+
node: _node,
|
|
1807
|
+
...props
|
|
1808
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1751
1809
|
"table",
|
|
1752
1810
|
{
|
|
1753
1811
|
className: cn(
|
|
@@ -1757,48 +1815,48 @@ var defaultComponents = {
|
|
|
1757
1815
|
...props
|
|
1758
1816
|
}
|
|
1759
1817
|
),
|
|
1760
|
-
th: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1818
|
+
th: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1761
1819
|
"th",
|
|
1762
1820
|
{
|
|
1763
1821
|
className: cn(
|
|
1764
|
-
"bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [&[align=center]]:text-center [&[align=right]]:text-right",
|
|
1822
|
+
"bg-muted border-border border-y border-l px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg last:border-r [&[align=center]]:text-center [&[align=right]]:text-right",
|
|
1765
1823
|
className
|
|
1766
1824
|
),
|
|
1767
1825
|
...props
|
|
1768
1826
|
}
|
|
1769
1827
|
),
|
|
1770
|
-
td: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1828
|
+
td: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1771
1829
|
"td",
|
|
1772
1830
|
{
|
|
1773
1831
|
className: cn(
|
|
1774
|
-
"border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right",
|
|
1832
|
+
"border-border border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right",
|
|
1775
1833
|
className
|
|
1776
1834
|
),
|
|
1777
1835
|
...props
|
|
1778
1836
|
}
|
|
1779
1837
|
),
|
|
1780
|
-
tr: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1838
|
+
tr: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1781
1839
|
"tr",
|
|
1782
1840
|
{
|
|
1783
1841
|
className: cn(
|
|
1784
|
-
"m-0
|
|
1842
|
+
"m-0 p-0 even:bg-muted/50 [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg",
|
|
1785
1843
|
className
|
|
1786
1844
|
),
|
|
1787
1845
|
...props
|
|
1788
1846
|
}
|
|
1789
1847
|
),
|
|
1790
|
-
sup: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1848
|
+
sup: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1791
1849
|
"sup",
|
|
1792
1850
|
{
|
|
1793
1851
|
className: cn("[&>a]:text-xs [&>a]:no-underline", className),
|
|
1794
1852
|
...props
|
|
1795
1853
|
}
|
|
1796
1854
|
),
|
|
1797
|
-
pre: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1798
|
-
"
|
|
1855
|
+
pre: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1856
|
+
"div",
|
|
1799
1857
|
{
|
|
1800
1858
|
className: cn(
|
|
1801
|
-
"max-w-4xl overflow-x-auto rounded-lg text-sm bg-black text-white dark:bg-zinc-800
|
|
1859
|
+
"max-w-4xl overflow-x-auto rounded-lg text-sm bg-black text-white dark:bg-zinc-800",
|
|
1802
1860
|
className
|
|
1803
1861
|
),
|
|
1804
1862
|
...props
|
|
@@ -1807,18 +1865,21 @@ var defaultComponents = {
|
|
|
1807
1865
|
code: ({
|
|
1808
1866
|
className,
|
|
1809
1867
|
children,
|
|
1868
|
+
node: _node,
|
|
1810
1869
|
...props
|
|
1811
1870
|
}) => {
|
|
1812
1871
|
const match = /language-(\w+)/.exec(className || "");
|
|
1872
|
+
const code = getTextContent(children);
|
|
1873
|
+
const isBlockCode = code.includes("\n");
|
|
1813
1874
|
if (match) {
|
|
1814
1875
|
const language = match[1];
|
|
1815
|
-
const
|
|
1876
|
+
const normalizedCode = code.replace(/\n$/, "");
|
|
1816
1877
|
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
|
|
1817
1878
|
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1818
1879
|
CodeHeader,
|
|
1819
1880
|
{
|
|
1820
1881
|
language,
|
|
1821
|
-
code
|
|
1882
|
+
code: normalizedCode
|
|
1822
1883
|
}
|
|
1823
1884
|
),
|
|
1824
1885
|
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
@@ -1826,15 +1887,31 @@ var defaultComponents = {
|
|
|
1826
1887
|
{
|
|
1827
1888
|
language,
|
|
1828
1889
|
className,
|
|
1829
|
-
children:
|
|
1890
|
+
children: normalizedCode
|
|
1830
1891
|
}
|
|
1831
1892
|
)
|
|
1832
1893
|
] });
|
|
1833
1894
|
}
|
|
1895
|
+
if (isBlockCode) {
|
|
1896
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1897
|
+
"code",
|
|
1898
|
+
{
|
|
1899
|
+
className: cn(
|
|
1900
|
+
"block min-w-full whitespace-pre px-4 py-4 font-mono text-inherit",
|
|
1901
|
+
className
|
|
1902
|
+
),
|
|
1903
|
+
...props,
|
|
1904
|
+
children: code.replace(/\n$/, "")
|
|
1905
|
+
}
|
|
1906
|
+
);
|
|
1907
|
+
}
|
|
1834
1908
|
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1835
1909
|
"code",
|
|
1836
1910
|
{
|
|
1837
|
-
className: cn(
|
|
1911
|
+
className: cn(
|
|
1912
|
+
"bg-muted rounded px-1.5 py-0.5 font-mono text-[0.9em] font-semibold",
|
|
1913
|
+
className
|
|
1914
|
+
),
|
|
1838
1915
|
...props,
|
|
1839
1916
|
children
|
|
1840
1917
|
}
|
|
@@ -1954,6 +2031,8 @@ function MemoryBlock({ content }) {
|
|
|
1954
2031
|
function ComponentBlock({ content }) {
|
|
1955
2032
|
const [isExpanded, setIsExpanded] = React13.useState(false);
|
|
1956
2033
|
const contentRef = React13.useRef(null);
|
|
2034
|
+
const shouldAutoScrollRef = React13.useRef(true);
|
|
2035
|
+
const previousScrollTopRef = React13.useRef(0);
|
|
1957
2036
|
const data = content.data ?? {};
|
|
1958
2037
|
const category = data.category ?? "Component";
|
|
1959
2038
|
const title = data.tool && category === "Tool" ? data.tool : data.title ?? data.type ?? "Component";
|
|
@@ -1967,10 +2046,36 @@ function ComponentBlock({ content }) {
|
|
|
1967
2046
|
if (status === "running" && output !== null) setIsExpanded(true);
|
|
1968
2047
|
}, [status, output]);
|
|
1969
2048
|
React13.useEffect(() => {
|
|
1970
|
-
|
|
1971
|
-
|
|
2049
|
+
const element = contentRef.current;
|
|
2050
|
+
if (!element) return;
|
|
2051
|
+
previousScrollTopRef.current = element.scrollTop;
|
|
2052
|
+
const updateAutoScrollState = () => {
|
|
2053
|
+
const nextScrollTop = element.scrollTop;
|
|
2054
|
+
const isScrollingUp = nextScrollTop < previousScrollTopRef.current - 1;
|
|
2055
|
+
previousScrollTopRef.current = nextScrollTop;
|
|
2056
|
+
if (isScrollingUp) {
|
|
2057
|
+
shouldAutoScrollRef.current = false;
|
|
2058
|
+
return;
|
|
2059
|
+
}
|
|
2060
|
+
shouldAutoScrollRef.current = isNearBottom(element);
|
|
2061
|
+
};
|
|
2062
|
+
updateAutoScrollState();
|
|
2063
|
+
element.addEventListener("scroll", updateAutoScrollState, { passive: true });
|
|
2064
|
+
return () => {
|
|
2065
|
+
element.removeEventListener("scroll", updateAutoScrollState);
|
|
2066
|
+
};
|
|
2067
|
+
}, [isExpanded]);
|
|
2068
|
+
React13.useEffect(() => {
|
|
2069
|
+
if (status !== "running") {
|
|
2070
|
+
shouldAutoScrollRef.current = true;
|
|
2071
|
+
return;
|
|
1972
2072
|
}
|
|
1973
|
-
|
|
2073
|
+
const element = contentRef.current;
|
|
2074
|
+
if (!element || !shouldAutoScrollRef.current) {
|
|
2075
|
+
return;
|
|
2076
|
+
}
|
|
2077
|
+
element.scrollTop = element.scrollHeight;
|
|
2078
|
+
}, [isExpanded, output, status]);
|
|
1974
2079
|
const config = status ? statusConfig[status] : null;
|
|
1975
2080
|
const StatusIcon = config?.icon;
|
|
1976
2081
|
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(Card, { children: [
|
|
@@ -2391,18 +2496,6 @@ var kNumberFormatter = new Intl.NumberFormat("en-US", {
|
|
|
2391
2496
|
minimumFractionDigits: 0,
|
|
2392
2497
|
maximumFractionDigits: 1
|
|
2393
2498
|
});
|
|
2394
|
-
function normalizeContextSize(value) {
|
|
2395
|
-
if (typeof value === "number" && Number.isFinite(value) && value >= 0) {
|
|
2396
|
-
return Math.floor(value);
|
|
2397
|
-
}
|
|
2398
|
-
if (typeof value === "string") {
|
|
2399
|
-
const parsed = Number.parseInt(value, 10);
|
|
2400
|
-
if (Number.isFinite(parsed) && parsed >= 0) {
|
|
2401
|
-
return parsed;
|
|
2402
|
-
}
|
|
2403
|
-
}
|
|
2404
|
-
return null;
|
|
2405
|
-
}
|
|
2406
2499
|
function normalizeAgentKey(value) {
|
|
2407
2500
|
if (typeof value !== "string") {
|
|
2408
2501
|
return null;
|
|
@@ -2411,7 +2504,7 @@ function normalizeAgentKey(value) {
|
|
|
2411
2504
|
return normalized ? normalized : null;
|
|
2412
2505
|
}
|
|
2413
2506
|
function resolveAssistantContextSize(assistant) {
|
|
2414
|
-
return
|
|
2507
|
+
return normalizeContextUsageNumber(assistant.metadata?.context_size) ?? normalizeContextUsageNumber(assistant.config?.configurable?.context_size);
|
|
2415
2508
|
}
|
|
2416
2509
|
function resolveAssistantAgentKey(assistant) {
|
|
2417
2510
|
return normalizeAgentKey(assistant.metadata?.agent_key) ?? normalizeAgentKey(assistant.config?.configurable?.agentKey);
|
|
@@ -2434,6 +2527,16 @@ function ContextUsageIndicator({
|
|
|
2434
2527
|
const [maxContextSize, setMaxContextSize] = React17.useState(null);
|
|
2435
2528
|
const [usedContextSize, setUsedContextSize] = React17.useState(null);
|
|
2436
2529
|
const [assistantAgentKey, setAssistantAgentKey] = React17.useState(null);
|
|
2530
|
+
const latestRealtimeUsageRef = React17.useRef({
|
|
2531
|
+
threadId: null,
|
|
2532
|
+
agentKey: null,
|
|
2533
|
+
usedTokens: null
|
|
2534
|
+
});
|
|
2535
|
+
const realtimeUsage = React17.useMemo(
|
|
2536
|
+
() => getThreadContextUsage(stream.contextUsageByAgentKey, assistantAgentKey),
|
|
2537
|
+
[assistantAgentKey, stream.contextUsageByAgentKey]
|
|
2538
|
+
);
|
|
2539
|
+
const realtimeUsedContextSize = getThreadContextUsageTotalTokens(realtimeUsage);
|
|
2437
2540
|
React17.useEffect(() => {
|
|
2438
2541
|
if (!stream.client || !stream.assistantId) {
|
|
2439
2542
|
setMaxContextSize(null);
|
|
@@ -2454,6 +2557,17 @@ function ContextUsageIndicator({
|
|
|
2454
2557
|
cancelled = true;
|
|
2455
2558
|
};
|
|
2456
2559
|
}, [stream.client, stream.assistantId]);
|
|
2560
|
+
React17.useEffect(() => {
|
|
2561
|
+
latestRealtimeUsageRef.current = {
|
|
2562
|
+
threadId: stream.threadId ?? null,
|
|
2563
|
+
agentKey: assistantAgentKey,
|
|
2564
|
+
usedTokens: realtimeUsedContextSize
|
|
2565
|
+
};
|
|
2566
|
+
}, [assistantAgentKey, realtimeUsedContextSize, stream.threadId]);
|
|
2567
|
+
React17.useEffect(() => {
|
|
2568
|
+
if (realtimeUsedContextSize == null) return;
|
|
2569
|
+
setUsedContextSize(realtimeUsedContextSize);
|
|
2570
|
+
}, [realtimeUsedContextSize]);
|
|
2457
2571
|
React17.useEffect(() => {
|
|
2458
2572
|
if (!stream.client) {
|
|
2459
2573
|
setUsedContextSize(null);
|
|
@@ -2463,14 +2577,25 @@ function ContextUsageIndicator({
|
|
|
2463
2577
|
setUsedContextSize(0);
|
|
2464
2578
|
return;
|
|
2465
2579
|
}
|
|
2580
|
+
if (realtimeUsedContextSize != null) return;
|
|
2466
2581
|
if (stream.isLoading) return;
|
|
2467
2582
|
let cancelled = false;
|
|
2583
|
+
const requestThreadId = stream.threadId;
|
|
2584
|
+
const requestAgentKey = assistantAgentKey;
|
|
2468
2585
|
stream.client.threads.getContextUsage(
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
).then((result) =>
|
|
2586
|
+
requestThreadId,
|
|
2587
|
+
requestAgentKey ? { agentKey: requestAgentKey } : void 0
|
|
2588
|
+
).then((result) => normalizeContextUsageNumber(result?.usage?.context_tokens)).then((result) => {
|
|
2472
2589
|
if (cancelled) return;
|
|
2473
|
-
|
|
2590
|
+
const latestRealtimeUsage = latestRealtimeUsageRef.current;
|
|
2591
|
+
if (latestRealtimeUsage.usedTokens != null && latestRealtimeUsage.threadId === requestThreadId && latestRealtimeUsage.agentKey === requestAgentKey) {
|
|
2592
|
+
return;
|
|
2593
|
+
}
|
|
2594
|
+
setUsedContextSize(
|
|
2595
|
+
resolveUsedContextSize({
|
|
2596
|
+
fallbackUsedTokens: result
|
|
2597
|
+
})
|
|
2598
|
+
);
|
|
2474
2599
|
}).catch((err) => {
|
|
2475
2600
|
if (cancelled) return;
|
|
2476
2601
|
console.warn("[Chat] Failed to load thread context usage:", err);
|
|
@@ -2478,7 +2603,15 @@ function ContextUsageIndicator({
|
|
|
2478
2603
|
return () => {
|
|
2479
2604
|
cancelled = true;
|
|
2480
2605
|
};
|
|
2481
|
-
}, [
|
|
2606
|
+
}, [
|
|
2607
|
+
assistantAgentKey,
|
|
2608
|
+
realtimeUsedContextSize,
|
|
2609
|
+
stream.apiKey,
|
|
2610
|
+
stream.apiUrl,
|
|
2611
|
+
stream.client,
|
|
2612
|
+
stream.threadId,
|
|
2613
|
+
stream.isLoading
|
|
2614
|
+
]);
|
|
2482
2615
|
if (typeof maxContextSize !== "number" || !Number.isFinite(maxContextSize) || maxContextSize <= 0) {
|
|
2483
2616
|
return null;
|
|
2484
2617
|
}
|
|
@@ -2597,6 +2730,8 @@ function Chat({
|
|
|
2597
2730
|
const [draft, setDraft] = React18.useState("");
|
|
2598
2731
|
const [selectedTool, setSelectedTool] = React18.useState(null);
|
|
2599
2732
|
const [attachments, setAttachments] = React18.useState([]);
|
|
2733
|
+
const [isAtBottom, setIsAtBottom] = React18.useState(true);
|
|
2734
|
+
const [hasUpdatesBelow, setHasUpdatesBelow] = React18.useState(false);
|
|
2600
2735
|
const {
|
|
2601
2736
|
threads,
|
|
2602
2737
|
deleteThread,
|
|
@@ -2605,27 +2740,141 @@ function Chat({
|
|
|
2605
2740
|
} = useThreads();
|
|
2606
2741
|
const viewportRef = React18.useRef(null);
|
|
2607
2742
|
const fileInputRef = React18.useRef(null);
|
|
2743
|
+
const shouldAutoScrollRef = React18.useRef(true);
|
|
2744
|
+
const forceFollowRef = React18.useRef(false);
|
|
2745
|
+
const previousMessageCountRef = React18.useRef(0);
|
|
2746
|
+
const previousScrollTopRef = React18.useRef(0);
|
|
2747
|
+
const autoScrollFrameRef = React18.useRef(null);
|
|
2748
|
+
const isPointerDownRef = React18.useRef(false);
|
|
2749
|
+
const lastTouchYRef = React18.useRef(null);
|
|
2608
2750
|
const resolvedTitle = title ?? t("chat.title");
|
|
2609
2751
|
const resolvedPlaceholder = placeholder ?? t("chat.placeholder");
|
|
2610
2752
|
const inputPlaceholder = selectedTool?.placeholderOverride ?? composer?.placeholder ?? resolvedPlaceholder;
|
|
2611
|
-
const messages = stream.messages ?? [];
|
|
2753
|
+
const messages = React18.useMemo(() => stream.messages ?? [], [stream.messages]);
|
|
2612
2754
|
const trimmedDraft = draft.trim();
|
|
2613
|
-
const
|
|
2614
|
-
|
|
2755
|
+
const cancelPendingAutoScroll = React18.useCallback(() => {
|
|
2756
|
+
if (autoScrollFrameRef.current !== null) {
|
|
2757
|
+
cancelAnimationFrame(autoScrollFrameRef.current);
|
|
2758
|
+
autoScrollFrameRef.current = null;
|
|
2759
|
+
}
|
|
2760
|
+
}, []);
|
|
2761
|
+
const disableAutoFollow = React18.useCallback(() => {
|
|
2762
|
+
forceFollowRef.current = false;
|
|
2763
|
+
shouldAutoScrollRef.current = false;
|
|
2764
|
+
cancelPendingAutoScroll();
|
|
2765
|
+
}, [cancelPendingAutoScroll]);
|
|
2766
|
+
const enableAutoFollow = React18.useCallback(() => {
|
|
2767
|
+
forceFollowRef.current = true;
|
|
2768
|
+
shouldAutoScrollRef.current = true;
|
|
2769
|
+
setHasUpdatesBelow(false);
|
|
2770
|
+
}, []);
|
|
2771
|
+
const scrollToBottom = React18.useCallback((smooth = false, force = false) => {
|
|
2772
|
+
if (force) {
|
|
2773
|
+
enableAutoFollow();
|
|
2774
|
+
}
|
|
2775
|
+
cancelPendingAutoScroll();
|
|
2776
|
+
autoScrollFrameRef.current = requestAnimationFrame(() => {
|
|
2777
|
+
autoScrollFrameRef.current = null;
|
|
2615
2778
|
const viewport = viewportRef.current;
|
|
2616
2779
|
if (viewport) {
|
|
2780
|
+
if (!force && !shouldAutoScrollRef.current) {
|
|
2781
|
+
return;
|
|
2782
|
+
}
|
|
2617
2783
|
viewport.scrollTo({
|
|
2618
2784
|
top: viewport.scrollHeight,
|
|
2619
2785
|
behavior: smooth ? "smooth" : "instant"
|
|
2620
2786
|
});
|
|
2621
2787
|
}
|
|
2622
2788
|
});
|
|
2623
|
-
}, []);
|
|
2789
|
+
}, [cancelPendingAutoScroll, enableAutoFollow]);
|
|
2790
|
+
React18.useEffect(() => {
|
|
2791
|
+
const viewport = viewportRef.current;
|
|
2792
|
+
if (!viewport) return;
|
|
2793
|
+
previousScrollTopRef.current = viewport.scrollTop;
|
|
2794
|
+
const stopPointerTracking = () => {
|
|
2795
|
+
isPointerDownRef.current = false;
|
|
2796
|
+
};
|
|
2797
|
+
const updateAutoScrollState = () => {
|
|
2798
|
+
const nextScrollTop = viewport.scrollTop;
|
|
2799
|
+
const isScrollingUp = nextScrollTop < previousScrollTopRef.current - 1;
|
|
2800
|
+
previousScrollTopRef.current = nextScrollTop;
|
|
2801
|
+
const nearBottom = isNearBottom(viewport);
|
|
2802
|
+
setIsAtBottom(nearBottom);
|
|
2803
|
+
if (nearBottom) {
|
|
2804
|
+
shouldAutoScrollRef.current = true;
|
|
2805
|
+
setHasUpdatesBelow(false);
|
|
2806
|
+
return;
|
|
2807
|
+
}
|
|
2808
|
+
if (forceFollowRef.current) {
|
|
2809
|
+
shouldAutoScrollRef.current = true;
|
|
2810
|
+
return;
|
|
2811
|
+
}
|
|
2812
|
+
if (isPointerDownRef.current && isScrollingUp) {
|
|
2813
|
+
disableAutoFollow();
|
|
2814
|
+
return;
|
|
2815
|
+
}
|
|
2816
|
+
shouldAutoScrollRef.current = false;
|
|
2817
|
+
};
|
|
2818
|
+
const handleWheel = (event) => {
|
|
2819
|
+
if (event.deltaY < 0) {
|
|
2820
|
+
disableAutoFollow();
|
|
2821
|
+
}
|
|
2822
|
+
};
|
|
2823
|
+
const handlePointerDown = () => {
|
|
2824
|
+
isPointerDownRef.current = true;
|
|
2825
|
+
};
|
|
2826
|
+
const handleTouchStart = (event) => {
|
|
2827
|
+
lastTouchYRef.current = event.touches[0]?.clientY ?? null;
|
|
2828
|
+
};
|
|
2829
|
+
const handleTouchMove = (event) => {
|
|
2830
|
+
const nextTouchY = event.touches[0]?.clientY;
|
|
2831
|
+
if (typeof nextTouchY !== "number") return;
|
|
2832
|
+
if (lastTouchYRef.current !== null && nextTouchY > lastTouchYRef.current + 1) {
|
|
2833
|
+
disableAutoFollow();
|
|
2834
|
+
}
|
|
2835
|
+
lastTouchYRef.current = nextTouchY;
|
|
2836
|
+
};
|
|
2837
|
+
const handleTouchEnd = () => {
|
|
2838
|
+
lastTouchYRef.current = null;
|
|
2839
|
+
};
|
|
2840
|
+
updateAutoScrollState();
|
|
2841
|
+
viewport.addEventListener("wheel", handleWheel, { passive: true });
|
|
2842
|
+
viewport.addEventListener("pointerdown", handlePointerDown, { passive: true });
|
|
2843
|
+
viewport.addEventListener("scroll", updateAutoScrollState, { passive: true });
|
|
2844
|
+
viewport.addEventListener("touchstart", handleTouchStart, { passive: true });
|
|
2845
|
+
viewport.addEventListener("touchmove", handleTouchMove, { passive: true });
|
|
2846
|
+
viewport.addEventListener("touchend", handleTouchEnd, { passive: true });
|
|
2847
|
+
window.addEventListener("pointerup", stopPointerTracking, { passive: true });
|
|
2848
|
+
window.addEventListener("pointercancel", stopPointerTracking, { passive: true });
|
|
2849
|
+
return () => {
|
|
2850
|
+
cancelPendingAutoScroll();
|
|
2851
|
+
viewport.removeEventListener("wheel", handleWheel);
|
|
2852
|
+
viewport.removeEventListener("pointerdown", handlePointerDown);
|
|
2853
|
+
viewport.removeEventListener("scroll", updateAutoScrollState);
|
|
2854
|
+
viewport.removeEventListener("touchstart", handleTouchStart);
|
|
2855
|
+
viewport.removeEventListener("touchmove", handleTouchMove);
|
|
2856
|
+
viewport.removeEventListener("touchend", handleTouchEnd);
|
|
2857
|
+
window.removeEventListener("pointerup", stopPointerTracking);
|
|
2858
|
+
window.removeEventListener("pointercancel", stopPointerTracking);
|
|
2859
|
+
};
|
|
2860
|
+
}, [cancelPendingAutoScroll, disableAutoFollow]);
|
|
2624
2861
|
React18.useEffect(() => {
|
|
2625
|
-
|
|
2626
|
-
|
|
2862
|
+
shouldAutoScrollRef.current = true;
|
|
2863
|
+
forceFollowRef.current = false;
|
|
2864
|
+
previousScrollTopRef.current = 0;
|
|
2865
|
+
setIsAtBottom(true);
|
|
2866
|
+
setHasUpdatesBelow(false);
|
|
2867
|
+
}, [stream.threadId]);
|
|
2627
2868
|
React18.useEffect(() => {
|
|
2628
|
-
|
|
2869
|
+
const messageCountChanged = messages.length !== previousMessageCountRef.current;
|
|
2870
|
+
previousMessageCountRef.current = messages.length;
|
|
2871
|
+
if (!shouldAutoScrollRef.current) {
|
|
2872
|
+
if (messageCountChanged || stream.isLoading) {
|
|
2873
|
+
setHasUpdatesBelow(true);
|
|
2874
|
+
}
|
|
2875
|
+
return;
|
|
2876
|
+
}
|
|
2877
|
+
if (messageCountChanged || stream.isLoading) {
|
|
2629
2878
|
scrollToBottom();
|
|
2630
2879
|
}
|
|
2631
2880
|
}, [stream.isLoading, messages, scrollToBottom]);
|
|
@@ -2683,7 +2932,7 @@ function Chat({
|
|
|
2683
2932
|
}
|
|
2684
2933
|
}
|
|
2685
2934
|
);
|
|
2686
|
-
scrollToBottom(true);
|
|
2935
|
+
scrollToBottom(true, true);
|
|
2687
2936
|
if (selectedTool && !selectedTool.pinned) {
|
|
2688
2937
|
setSelectedTool(null);
|
|
2689
2938
|
}
|
|
@@ -2785,7 +3034,7 @@ function Chat({
|
|
|
2785
3034
|
}
|
|
2786
3035
|
}
|
|
2787
3036
|
);
|
|
2788
|
-
scrollToBottom(true);
|
|
3037
|
+
scrollToBottom(true, true);
|
|
2789
3038
|
};
|
|
2790
3039
|
const loadConversationMessages = React18.useCallback(
|
|
2791
3040
|
async (recordId) => {
|
|
@@ -2865,6 +3114,7 @@ function Chat({
|
|
|
2865
3114
|
}
|
|
2866
3115
|
}
|
|
2867
3116
|
);
|
|
3117
|
+
scrollToBottom(true, true);
|
|
2868
3118
|
}
|
|
2869
3119
|
};
|
|
2870
3120
|
const acceptMimes = composer?.attachments?.accept ? Object.entries(composer.attachments.accept).map(([mime, exts]) => [mime, ...exts.map((e) => `.${e}`)].join(",")).join(",") : void 0;
|
|
@@ -2883,7 +3133,7 @@ function Chat({
|
|
|
2883
3133
|
{
|
|
2884
3134
|
ref: viewportRef,
|
|
2885
3135
|
className: cn(
|
|
2886
|
-
"flex h-full w-full flex-col flex-1 overflow-y-auto bg-background shadow-sm",
|
|
3136
|
+
"relative flex h-full w-full flex-col flex-1 overflow-y-auto bg-background shadow-sm",
|
|
2887
3137
|
className
|
|
2888
3138
|
),
|
|
2889
3139
|
children: [
|
|
@@ -3020,6 +3270,22 @@ function Chat({
|
|
|
3020
3270
|
})()
|
|
3021
3271
|
] })
|
|
3022
3272
|
] }),
|
|
3273
|
+
!isAtBottom && messages.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "sticky bottom-20 z-20 flex justify-center px-4 pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
3274
|
+
Button,
|
|
3275
|
+
{
|
|
3276
|
+
type: "button",
|
|
3277
|
+
size: "icon-sm",
|
|
3278
|
+
variant: hasUpdatesBelow ? "default" : "outline",
|
|
3279
|
+
className: cn(
|
|
3280
|
+
"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)]",
|
|
3281
|
+
hasUpdatesBelow && "animate-bounce"
|
|
3282
|
+
),
|
|
3283
|
+
onClick: () => scrollToBottom(true, true),
|
|
3284
|
+
"aria-label": t("chat.scrollToBottom"),
|
|
3285
|
+
title: t("chat.scrollToBottom"),
|
|
3286
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react9.ArrowDown, { size: 16 })
|
|
3287
|
+
}
|
|
3288
|
+
) }),
|
|
3023
3289
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "p-2 sticky bottom-0 z-10 bg-background", children: [
|
|
3024
3290
|
threadErrorMessage && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "mb-3 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: threadErrorMessage }),
|
|
3025
3291
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|