@8wave/ai-elements 0.69.0 → 0.70.0
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/README.md +30 -5
- package/dist/_chunks/{PkStreamingMarkdown-C0BpOvli.js → PkStreamingMarkdown-CCD_gifi.js} +2 -2
- package/dist/_chunks/{PkStreamingMarkdown-C0BpOvli.js.map → PkStreamingMarkdown-CCD_gifi.js.map} +1 -1
- package/dist/_chunks/{PkToolShowArtifact-DzNIkKvZ.js → PkToolShowArtifact-BZ9-wuXH.js} +12 -11
- package/dist/_chunks/PkToolShowArtifact-BZ9-wuXH.js.map +1 -0
- package/dist/_chunks/{PkToolShowCalendarEvent-Dolb7MTf.js → PkToolShowCalendarEvent-BFHzjM9E.js} +2 -2
- package/dist/_chunks/{PkToolShowCalendarEvent-Dolb7MTf.js.map → PkToolShowCalendarEvent-BFHzjM9E.js.map} +1 -1
- package/dist/_chunks/{PkToolShowComparison-BWwQPM6d.js → PkToolShowComparison-D-cY7yXE.js} +1 -1
- package/dist/_chunks/{PkToolShowComparison-BWwQPM6d.js.map → PkToolShowComparison-D-cY7yXE.js.map} +1 -1
- package/dist/_chunks/PkToolShowContactForm-B5Zuup-c.js +2 -0
- package/dist/_chunks/PkToolShowContactForm-izy_eJOv.js +1102 -0
- package/dist/_chunks/PkToolShowContactForm-izy_eJOv.js.map +1 -0
- package/dist/_chunks/{PkToolShowEmail-BrBJY7Op.js → PkToolShowEmail-BhGdH4Ig.js} +1 -1
- package/dist/_chunks/{PkToolShowEmail-BrBJY7Op.js.map → PkToolShowEmail-BhGdH4Ig.js.map} +1 -1
- package/dist/_chunks/{PkToolShowImageGallery-dnCkJaK8.js → PkToolShowImageGallery-CiN2M02m.js} +3 -3
- package/dist/_chunks/{PkToolShowImageGallery-dnCkJaK8.js.map → PkToolShowImageGallery-CiN2M02m.js.map} +1 -1
- package/dist/_chunks/PkToolShowLocation-CbaF2oBf.js +2 -0
- package/dist/_chunks/PkToolShowLocation-gQtxMrSM.js +4996 -0
- package/dist/_chunks/PkToolShowLocation-gQtxMrSM.js.map +1 -0
- package/dist/_chunks/{PkToolShowMessage-D0hwYIlo.js → PkToolShowMessage-5Luc042T.js} +1 -1
- package/dist/_chunks/{PkToolShowMessage-D0hwYIlo.js.map → PkToolShowMessage-5Luc042T.js.map} +1 -1
- package/dist/_chunks/PkToolShowMultipleChoice-DgfLPaKE.js +2 -0
- package/dist/_chunks/PkToolShowMultipleChoice-WBsP83PW.js +44 -0
- package/dist/_chunks/PkToolShowMultipleChoice-WBsP83PW.js.map +1 -0
- package/dist/_chunks/{PkToolShowProductList-C-t2Q6vG.js → PkToolShowProductList-BSLTdM8w.js} +2 -2
- package/dist/_chunks/{PkToolShowProductList-C-t2Q6vG.js.map → PkToolShowProductList-BSLTdM8w.js.map} +1 -1
- package/dist/_chunks/{PkToolShowQrCode-pX-2NQ0q.js → PkToolShowQrCode-DLSOtaV9.js} +1 -1
- package/dist/_chunks/{PkToolShowQrCode-pX-2NQ0q.js.map → PkToolShowQrCode-DLSOtaV9.js.map} +1 -1
- package/dist/_chunks/PkToolShowSources-BZyYFWu6.js +490 -0
- package/dist/_chunks/PkToolShowSources-BZyYFWu6.js.map +1 -0
- package/dist/_chunks/PkToolShowSources-C0Edf43F.js +2 -0
- package/dist/_chunks/PkToolShowSuggestedReply-CMIWzymE.js +2 -0
- package/dist/_chunks/PkToolShowSuggestedReply-PyXHjIMg.js +40 -0
- package/dist/_chunks/PkToolShowSuggestedReply-PyXHjIMg.js.map +1 -0
- package/dist/_chunks/{PkToolShowWeather-BlxQ4-di.js → PkToolShowWeather-BmB6I1CQ.js} +1 -1
- package/dist/_chunks/{PkToolShowWeather-BlxQ4-di.js.map → PkToolShowWeather-BmB6I1CQ.js.map} +1 -1
- package/dist/_chunks/{PkToolShowWebPages-CflGTyAq.js → PkToolShowWebPages-BQEuy2SB.js} +3 -3
- package/dist/_chunks/{PkToolShowWebPages-CflGTyAq.js.map → PkToolShowWebPages-BQEuy2SB.js.map} +1 -1
- package/dist/_chunks/{PkUrl-BiCK2gUF.js → PkUrl-DbCzf0TH.js} +5 -8
- package/dist/_chunks/{PkUrl-BiCK2gUF.js.map → PkUrl-DbCzf0TH.js.map} +1 -1
- package/dist/_chunks/{VvCheckbox.es-BB__5AQf.js → VvCheckbox.es-xoDP7xfG.js} +1 -1
- package/dist/_chunks/{VvCheckbox.es-BB__5AQf.js.map → VvCheckbox.es-xoDP7xfG.js.map} +1 -1
- package/dist/_chunks/{VvCheckboxGroup.es-B8vNssFt.js → VvCheckboxGroup.es-CqmkSf32.js} +1 -1
- package/dist/_chunks/{VvCheckboxGroup.es-B8vNssFt.js.map → VvCheckboxGroup.es-CqmkSf32.js.map} +1 -1
- package/dist/_chunks/{VvCombobox.es-B3EXD0qk.js → VvCombobox.es-8c5A9J7u.js} +1 -1
- package/dist/_chunks/{VvCombobox.es-B3EXD0qk.js.map → VvCombobox.es-8c5A9J7u.js.map} +1 -1
- package/dist/_chunks/{VvInputText.es-Dz2nJhHg.js → VvInputText.es-C3DasKVI.js} +1 -1
- package/dist/_chunks/{VvInputText.es-Dz2nJhHg.js.map → VvInputText.es-C3DasKVI.js.map} +1 -1
- package/dist/_chunks/{VvRadio.es-CBNUR8-A.js → VvRadio.es-DWCbGLSw.js} +1 -1
- package/dist/_chunks/{VvRadio.es-CBNUR8-A.js.map → VvRadio.es-DWCbGLSw.js.map} +1 -1
- package/dist/_chunks/{VvRadioGroup.es-C3cxLQie.js → VvRadioGroup.es-DeZPOSLg.js} +1 -1
- package/dist/_chunks/{VvRadioGroup.es-C3cxLQie.js.map → VvRadioGroup.es-DeZPOSLg.js.map} +1 -1
- package/dist/_chunks/{VvSelect.es-DhnVYyFM.js → VvSelect.es-Cbdxv0hL.js} +1 -1
- package/dist/_chunks/{VvSelect.es-DhnVYyFM.js.map → VvSelect.es-Cbdxv0hL.js.map} +1 -1
- package/dist/_chunks/{VvTextarea.es-CqwOOwHn.js → VvTextarea.es-G6PqQj_w.js} +1 -1
- package/dist/_chunks/{VvTextarea.es-CqwOOwHn.js.map → VvTextarea.es-G6PqQj_w.js.map} +1 -1
- package/dist/_chunks/_plugin-vue_export-helper-C6kC663S.js +8 -0
- package/dist/_chunks/marker-icon-2x-B5zK5Qr3.js +7 -0
- package/dist/_chunks/marker-icon-2x-B5zK5Qr3.js.map +1 -0
- package/dist/_chunks/marker-icon-C9YVKiza.js +7 -0
- package/dist/_chunks/marker-icon-C9YVKiza.js.map +1 -0
- package/dist/_chunks/marker-shadow-C69K8Z1K.js +7 -0
- package/dist/_chunks/marker-shadow-C69K8Z1K.js.map +1 -0
- package/dist/_chunks/schemas-BzxsvNFR.js +3117 -0
- package/dist/_chunks/schemas-BzxsvNFR.js.map +1 -0
- package/dist/_chunks/{src-BRYn66N3.js → src-B7wQQMx2.js} +1 -1
- package/dist/_chunks/{src-BRYn66N3.js.map → src-B7wQQMx2.js.map} +1 -1
- package/dist/_chunks/{useLightbox-RmU8z981.js → useLightbox-krdR1Z0n.js} +2 -2
- package/dist/_chunks/{useLightbox-RmU8z981.js.map → useLightbox-krdR1Z0n.js.map} +1 -1
- package/dist/ai-elements.es.js +7433 -12095
- package/dist/ai-elements.es.js.map +1 -1
- package/dist-vue/PkChatbot.js +1 -1
- package/dist-vue/PkChatbotError.js +1 -1
- package/dist-vue/PkChatbotFeedbackForm.js +1 -1
- package/dist-vue/PkChatbotFilePreview.js +1 -1
- package/dist-vue/PkChatbotInput.js +1 -1
- package/dist-vue/PkChatbotMessages.js +1 -1
- package/dist-vue/PkChatbotViewChat.js +1 -1
- package/dist-vue/PkChatbotViewConversations.js +1 -1
- package/dist-vue/PkChatbotViewProfile.js +1 -1
- package/dist-vue/_chunks/Media-COOsOMMv.js +120 -0
- package/dist-vue/_chunks/Media-COOsOMMv.js.map +1 -0
- package/dist-vue/_chunks/{PkChatbot-Cy7p5UI_.js → PkChatbot-h7EIb9Y5.js} +61 -60
- package/dist-vue/_chunks/{PkChatbot-Cy7p5UI_.js.map → PkChatbot-h7EIb9Y5.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotError-DOkNTDsc.js → PkChatbotError-CBQaRNse.js} +1 -1
- package/dist-vue/_chunks/{PkChatbotError-DOkNTDsc.js.map → PkChatbotError-CBQaRNse.js.map} +1 -1
- package/dist-vue/_chunks/PkChatbotFeedbackForm-C5QLJeUc.js +91 -0
- package/dist-vue/_chunks/PkChatbotFeedbackForm-C5QLJeUc.js.map +1 -0
- package/dist-vue/_chunks/{PkChatbotFilePreview-zHYZ0F7j.js → PkChatbotFilePreview-0ow1cjom.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotFilePreview-zHYZ0F7j.js.map → PkChatbotFilePreview-0ow1cjom.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotInput-CXydKByS.js → PkChatbotInput-DjUU_5_9.js} +3 -3
- package/dist-vue/_chunks/{PkChatbotInput-CXydKByS.js.map → PkChatbotInput-DjUU_5_9.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotMessages-C7-ZtU0-.js → PkChatbotMessages-DJngZXIX.js} +130 -121
- package/dist-vue/_chunks/PkChatbotMessages-DJngZXIX.js.map +1 -0
- package/dist-vue/_chunks/PkChatbotViewChat-LdHOe19w.js +246 -0
- package/dist-vue/_chunks/PkChatbotViewChat-LdHOe19w.js.map +1 -0
- package/dist-vue/_chunks/{PkChatbotViewConversations-Ct0TbDrg.js → PkChatbotViewConversations-BAU8tPTf.js} +4 -4
- package/dist-vue/_chunks/{PkChatbotViewConversations-Ct0TbDrg.js.map → PkChatbotViewConversations-BAU8tPTf.js.map} +1 -1
- package/dist-vue/_chunks/{PkChatbotViewProfile-BhdCxVSX.js → PkChatbotViewProfile-B_TpBkAf.js} +2 -2
- package/dist-vue/_chunks/{PkChatbotViewProfile-BhdCxVSX.js.map → PkChatbotViewProfile-B_TpBkAf.js.map} +1 -1
- package/dist-vue/_chunks/{PkRelativeTime-Bzh37jv5.js → PkRelativeTime-ivIkVQRR.js} +1 -1
- package/dist-vue/_chunks/{PkRelativeTime-Bzh37jv5.js.map → PkRelativeTime-ivIkVQRR.js.map} +1 -1
- package/dist-vue/_chunks/{PkStreamingMarkdown-C-XHB63C.js → PkStreamingMarkdown-CGEZEVZF.js} +2 -2
- package/dist-vue/_chunks/{PkStreamingMarkdown-C-XHB63C.js.map → PkStreamingMarkdown-CGEZEVZF.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowArtifact-pTS7wzhw.js → PkToolShowArtifact-D1PnI-E1.js} +14 -13
- package/dist-vue/_chunks/PkToolShowArtifact-D1PnI-E1.js.map +1 -0
- package/dist-vue/_chunks/{PkToolShowCalendarEvent-DQ--fzwb.js → PkToolShowCalendarEvent-HiRf_hSv.js} +3 -3
- package/dist-vue/_chunks/{PkToolShowCalendarEvent-DQ--fzwb.js.map → PkToolShowCalendarEvent-HiRf_hSv.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowComparison-CzRUrjbP.js → PkToolShowComparison-Bll3lc1g.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowComparison-CzRUrjbP.js.map → PkToolShowComparison-Bll3lc1g.js.map} +1 -1
- package/dist-vue/_chunks/PkToolShowContactForm-DQDXyNco.js +130 -0
- package/dist-vue/_chunks/PkToolShowContactForm-DQDXyNco.js.map +1 -0
- package/dist-vue/_chunks/{PkToolShowEmail-htn0ivwY.js → PkToolShowEmail-DzYBtaIE.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowEmail-htn0ivwY.js.map → PkToolShowEmail-DzYBtaIE.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowImageGallery-CpU183SC.js → PkToolShowImageGallery-BQtLChsM.js} +4 -4
- package/dist-vue/_chunks/{PkToolShowImageGallery-CpU183SC.js.map → PkToolShowImageGallery-BQtLChsM.js.map} +1 -1
- package/dist-vue/_chunks/PkToolShowLocation-CaG0Txb6.js +148 -0
- package/dist-vue/_chunks/PkToolShowLocation-CaG0Txb6.js.map +1 -0
- package/dist-vue/_chunks/{PkToolShowMessage-DtGDm3pq.js → PkToolShowMessage-C4os87fJ.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowMessage-DtGDm3pq.js.map → PkToolShowMessage-C4os87fJ.js.map} +1 -1
- package/dist-vue/_chunks/PkToolShowMultipleChoice-DB5ZvvhS.js +45 -0
- package/dist-vue/_chunks/PkToolShowMultipleChoice-DB5ZvvhS.js.map +1 -0
- package/dist-vue/_chunks/{PkToolShowProductList-BlkUdbtV.js → PkToolShowProductList-BR14mmfl.js} +3 -3
- package/dist-vue/_chunks/{PkToolShowProductList-BlkUdbtV.js.map → PkToolShowProductList-BR14mmfl.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowQrCode-BUyhM_MN.js → PkToolShowQrCode-CTfDrItd.js} +2 -2
- package/dist-vue/_chunks/{PkToolShowQrCode-BUyhM_MN.js.map → PkToolShowQrCode-CTfDrItd.js.map} +1 -1
- package/dist-vue/_chunks/PkToolShowSources-B_UfP0QT.js +377 -0
- package/dist-vue/_chunks/PkToolShowSources-B_UfP0QT.js.map +1 -0
- package/dist-vue/_chunks/PkToolShowSuggestedReply-BVa6p4DJ.js +40 -0
- package/dist-vue/_chunks/PkToolShowSuggestedReply-BVa6p4DJ.js.map +1 -0
- package/dist-vue/_chunks/{PkToolShowWeather-iAV7Hn_J.js → PkToolShowWeather-D3MyAnH4.js} +1 -1
- package/dist-vue/_chunks/{PkToolShowWeather-iAV7Hn_J.js.map → PkToolShowWeather-D3MyAnH4.js.map} +1 -1
- package/dist-vue/_chunks/{PkToolShowWebPages-BQp9A4vb.js → PkToolShowWebPages-0pwK7psA.js} +4 -4
- package/dist-vue/_chunks/{PkToolShowWebPages-BQp9A4vb.js.map → PkToolShowWebPages-0pwK7psA.js.map} +1 -1
- package/dist-vue/_chunks/{PkUrl-C9annqfF.js → PkUrl-tuHTaGCy.js} +1 -1
- package/dist-vue/_chunks/{PkUrl-C9annqfF.js.map → PkUrl-tuHTaGCy.js.map} +1 -1
- package/dist-vue/_chunks/{ZodError-B3AvmUCJ.js → ZodError-DkVfTODd.js} +1 -1
- package/dist-vue/_chunks/{ZodError-B3AvmUCJ.js.map → ZodError-DkVfTODd.js.map} +1 -1
- package/dist-vue/_chunks/{apl-Bkqrrr3v.js → apl-j-tvtpTP.js} +1 -1
- package/dist-vue/_chunks/{apl-Bkqrrr3v.js.map → apl-j-tvtpTP.js.map} +1 -1
- package/dist-vue/_chunks/{asciiarmor-DMBg7NdB.js → asciiarmor-JNKKTtQt.js} +1 -1
- package/dist-vue/_chunks/{asciiarmor-DMBg7NdB.js.map → asciiarmor-JNKKTtQt.js.map} +1 -1
- package/dist-vue/_chunks/{asn1-WRfjxqL1.js → asn1-DBQ_amwa.js} +1 -1
- package/dist-vue/_chunks/{asn1-WRfjxqL1.js.map → asn1-DBQ_amwa.js.map} +1 -1
- package/dist-vue/_chunks/{asterisk-DYv-EHWB.js → asterisk-Di3iYNR-.js} +1 -1
- package/dist-vue/_chunks/{asterisk-DYv-EHWB.js.map → asterisk-Di3iYNR-.js.map} +1 -1
- package/dist-vue/_chunks/{brainfuck-hzOnKOH7.js → brainfuck-D8mwwQut.js} +1 -1
- package/dist-vue/_chunks/{brainfuck-hzOnKOH7.js.map → brainfuck-D8mwwQut.js.map} +1 -1
- package/dist-vue/_chunks/{clike-r66wHNGT.js → clike-I6ihTsJ5.js} +1 -1
- package/dist-vue/_chunks/{clike-r66wHNGT.js.map → clike-I6ihTsJ5.js.map} +1 -1
- package/dist-vue/_chunks/{clojure-BDb_WsAm.js → clojure-CGENQS-R.js} +1 -1
- package/dist-vue/_chunks/{clojure-BDb_WsAm.js.map → clojure-CGENQS-R.js.map} +1 -1
- package/dist-vue/_chunks/{cmake-Curqstum.js → cmake-D2jqXHLk.js} +1 -1
- package/dist-vue/_chunks/{cmake-Curqstum.js.map → cmake-D2jqXHLk.js.map} +1 -1
- package/dist-vue/_chunks/{cobol-BAx4MdII.js → cobol-Db3IHNru.js} +1 -1
- package/dist-vue/_chunks/{cobol-BAx4MdII.js.map → cobol-Db3IHNru.js.map} +1 -1
- package/dist-vue/_chunks/{coffeescript-jbcF4nR3.js → coffeescript-B4Rd3RcP.js} +1 -1
- package/dist-vue/_chunks/{coffeescript-jbcF4nR3.js.map → coffeescript-B4Rd3RcP.js.map} +1 -1
- package/dist-vue/_chunks/{commonlisp-BXKJxcTF.js → commonlisp-B-ehiawF.js} +1 -1
- package/dist-vue/_chunks/{commonlisp-BXKJxcTF.js.map → commonlisp-B-ehiawF.js.map} +1 -1
- package/dist-vue/_chunks/createChatbotApiClient-C520OTrB.js +521 -0
- package/dist-vue/_chunks/createChatbotApiClient-C520OTrB.js.map +1 -0
- package/dist-vue/_chunks/{crystal-Dq4io9oq.js → crystal-Bj2fwY3J.js} +1 -1
- package/dist-vue/_chunks/{crystal-Dq4io9oq.js.map → crystal-Bj2fwY3J.js.map} +1 -1
- package/dist-vue/_chunks/{css-Bd9Y1kSi.js → css-CDqbdUZS.js} +1 -1
- package/dist-vue/_chunks/{css-Bd9Y1kSi.js.map → css-CDqbdUZS.js.map} +1 -1
- package/dist-vue/_chunks/{cypher-D14rILSd.js → cypher-BPgl78lW.js} +1 -1
- package/dist-vue/_chunks/{cypher-D14rILSd.js.map → cypher-BPgl78lW.js.map} +1 -1
- package/dist-vue/_chunks/{d-B-E6YUkN.js → d-_9PAw1JO.js} +1 -1
- package/dist-vue/_chunks/{d-B-E6YUkN.js.map → d-_9PAw1JO.js.map} +1 -1
- package/dist-vue/_chunks/{diff-BPPcQvHC.js → diff-C_qwk3ek.js} +1 -1
- package/dist-vue/_chunks/{diff-BPPcQvHC.js.map → diff-C_qwk3ek.js.map} +1 -1
- package/dist-vue/_chunks/{dist-CJYiwDlx.js → dist-2RCoY9yL.js} +2 -2
- package/dist-vue/_chunks/{dist-CJYiwDlx.js.map → dist-2RCoY9yL.js.map} +1 -1
- package/dist-vue/_chunks/{dist-DEe8jwtO.js → dist-B504iqq4.js} +3 -3
- package/dist-vue/_chunks/{dist-DEe8jwtO.js.map → dist-B504iqq4.js.map} +1 -1
- package/dist-vue/_chunks/{dist-BHuX2VvC.js → dist-BbACD7ZF.js} +3 -3
- package/dist-vue/_chunks/{dist-BHuX2VvC.js.map → dist-BbACD7ZF.js.map} +1 -1
- package/dist-vue/_chunks/{dist-Bh5Q6aSI2.js → dist-BfWfkbOA.js} +2 -2
- package/dist-vue/_chunks/dist-BfWfkbOA.js.map +1 -0
- package/dist-vue/_chunks/{dist-Qq_6SbFF.js → dist-BnR5Kl9J.js} +3 -3
- package/dist-vue/_chunks/{dist-Qq_6SbFF.js.map → dist-BnR5Kl9J.js.map} +1 -1
- package/dist-vue/_chunks/{dist-KPI2eL8F.js → dist-Bx_jrcne.js} +2 -2
- package/dist-vue/_chunks/{dist-KPI2eL8F.js.map → dist-Bx_jrcne.js.map} +1 -1
- package/dist-vue/_chunks/{dist-CAXUIcdd.js → dist-C4DKJxXu.js} +4 -4
- package/dist-vue/_chunks/{dist-CAXUIcdd.js.map → dist-C4DKJxXu.js.map} +1 -1
- package/dist-vue/_chunks/{dist-CAZOa5qs2.js → dist-C9oRomIQ.js} +3 -3
- package/dist-vue/_chunks/dist-C9oRomIQ.js.map +1 -0
- package/dist-vue/_chunks/{dist-DfEAZDKB.js → dist-COvC03Xx.js} +3 -3
- package/dist-vue/_chunks/{dist-DfEAZDKB.js.map → dist-COvC03Xx.js.map} +1 -1
- package/dist-vue/_chunks/{dist-D-VT7gvP.js → dist-CwB_dFae.js} +3 -3
- package/dist-vue/_chunks/{dist-D-VT7gvP.js.map → dist-CwB_dFae.js.map} +1 -1
- package/dist-vue/_chunks/{dist-BaIe783A.js → dist-Cz8slHpf.js} +2 -2
- package/dist-vue/_chunks/{dist-BaIe783A.js.map → dist-Cz8slHpf.js.map} +1 -1
- package/dist-vue/_chunks/{dist-DV82RztV.js → dist-D-G-983p.js} +3 -3
- package/dist-vue/_chunks/{dist-DV82RztV.js.map → dist-D-G-983p.js.map} +1 -1
- package/dist-vue/_chunks/{dist-BNLIqE7O.js → dist-DGsr6BFK.js} +2 -2
- package/dist-vue/_chunks/{dist-BNLIqE7O.js.map → dist-DGsr6BFK.js.map} +1 -1
- package/dist-vue/_chunks/{dist-DMP9Xsk0.js → dist-DJFxbNlz.js} +2 -2
- package/dist-vue/_chunks/{dist-DMP9Xsk0.js.map → dist-DJFxbNlz.js.map} +1 -1
- package/dist-vue/_chunks/{dist-bUGhZmKp.js → dist-DKeYnhzh.js} +5 -5
- package/dist-vue/_chunks/{dist-bUGhZmKp.js.map → dist-DKeYnhzh.js.map} +1 -1
- package/dist-vue/_chunks/{dist--mE2E_mM.js → dist-DL84m6GA.js} +1 -1
- package/dist-vue/_chunks/{dist--mE2E_mM.js.map → dist-DL84m6GA.js.map} +1 -1
- package/dist-vue/_chunks/{dist-QbFF3eM_.js → dist-DS-IY-lt.js} +4 -4
- package/dist-vue/_chunks/{dist-QbFF3eM_.js.map → dist-DS-IY-lt.js.map} +1 -1
- package/dist-vue/_chunks/{dist-s_XUA-aw.js → dist-DZloX6N0.js} +3 -3
- package/dist-vue/_chunks/{dist-s_XUA-aw.js.map → dist-DZloX6N0.js.map} +1 -1
- package/dist-vue/_chunks/{dist-jVwgEJDw.js → dist-DapfuoOT.js} +3 -3
- package/dist-vue/_chunks/{dist-jVwgEJDw.js.map → dist-DapfuoOT.js.map} +1 -1
- package/dist-vue/_chunks/{dist-BWXfA4NS.js → dist-DmUxIVrQ.js} +5 -5
- package/dist-vue/_chunks/{dist-BWXfA4NS.js.map → dist-DmUxIVrQ.js.map} +1 -1
- package/dist-vue/_chunks/{dist-BQRG0D3Y.js → dist-LX3EryGA.js} +2 -2
- package/dist-vue/_chunks/{dist-BQRG0D3Y.js.map → dist-LX3EryGA.js.map} +1 -1
- package/dist-vue/_chunks/{dist-afJW4ohP2.js → dist-Z_cFz9nA.js} +2 -2
- package/dist-vue/_chunks/dist-Z_cFz9nA.js.map +1 -0
- package/dist-vue/_chunks/{dist-DVM_p-M1.js → dist-mJVylhvZ.js} +4 -4
- package/dist-vue/_chunks/{dist-DVM_p-M1.js.map → dist-mJVylhvZ.js.map} +1 -1
- package/dist-vue/_chunks/{dockerfile-CGxYmrOo.js → dockerfile-nMSg2tXY.js} +2 -2
- package/dist-vue/_chunks/{dockerfile-CGxYmrOo.js.map → dockerfile-nMSg2tXY.js.map} +1 -1
- package/dist-vue/_chunks/{dtd-ztbg9nev.js → dtd-BhtRjlzo.js} +1 -1
- package/dist-vue/_chunks/{dtd-ztbg9nev.js.map → dtd-BhtRjlzo.js.map} +1 -1
- package/dist-vue/_chunks/{dylan-Do2p-AA-.js → dylan-DyLL0Sxl.js} +1 -1
- package/dist-vue/_chunks/{dylan-Do2p-AA-.js.map → dylan-DyLL0Sxl.js.map} +1 -1
- package/dist-vue/_chunks/{ebnf-ChJPn51D.js → ebnf-DcBh-k1T.js} +1 -1
- package/dist-vue/_chunks/{ebnf-ChJPn51D.js.map → ebnf-DcBh-k1T.js.map} +1 -1
- package/dist-vue/_chunks/{ecl-ztl4D9j5.js → ecl-C-A1gGx7.js} +1 -1
- package/dist-vue/_chunks/{ecl-ztl4D9j5.js.map → ecl-C-A1gGx7.js.map} +1 -1
- package/dist-vue/_chunks/{eiffel-BYAAf3D8.js → eiffel-DwgfvIBI.js} +1 -1
- package/dist-vue/_chunks/{eiffel-BYAAf3D8.js.map → eiffel-DwgfvIBI.js.map} +1 -1
- package/dist-vue/_chunks/{elm-DFquGUxW.js → elm-RPF69bOV.js} +1 -1
- package/dist-vue/_chunks/{elm-DFquGUxW.js.map → elm-RPF69bOV.js.map} +1 -1
- package/dist-vue/_chunks/{erlang-BIndT8-8.js → erlang-BvNh96Ir.js} +1 -1
- package/dist-vue/_chunks/{erlang-BIndT8-8.js.map → erlang-BvNh96Ir.js.map} +1 -1
- package/dist-vue/_chunks/{factor-DqGzyyvS.js → factor-B_mOIxzF.js} +2 -2
- package/dist-vue/_chunks/{factor-DqGzyyvS.js.map → factor-B_mOIxzF.js.map} +1 -1
- package/dist-vue/_chunks/{fcl-MTt_AC1b.js → fcl-C9ulsEA4.js} +1 -1
- package/dist-vue/_chunks/{fcl-MTt_AC1b.js.map → fcl-C9ulsEA4.js.map} +1 -1
- package/dist-vue/_chunks/{forth-BPoSoJYE.js → forth-CFaZGhGS.js} +1 -1
- package/dist-vue/_chunks/{forth-BPoSoJYE.js.map → forth-CFaZGhGS.js.map} +1 -1
- package/dist-vue/_chunks/{fortran-BmHZEBN4.js → fortran-Cjm6fEBu.js} +1 -1
- package/dist-vue/_chunks/{fortran-BmHZEBN4.js.map → fortran-Cjm6fEBu.js.map} +1 -1
- package/dist-vue/_chunks/{gas-7ZHFSr9Y.js → gas-C3adNyJH.js} +1 -1
- package/dist-vue/_chunks/{gas-7ZHFSr9Y.js.map → gas-C3adNyJH.js.map} +1 -1
- package/dist-vue/_chunks/{gherkin-DiGPpFIT.js → gherkin-DFFRCqQB.js} +1 -1
- package/dist-vue/_chunks/{gherkin-DiGPpFIT.js.map → gherkin-DFFRCqQB.js.map} +1 -1
- package/dist-vue/_chunks/{groovy-DdKIH6vq.js → groovy-BHcqGGgZ.js} +1 -1
- package/dist-vue/_chunks/{groovy-DdKIH6vq.js.map → groovy-BHcqGGgZ.js.map} +1 -1
- package/dist-vue/_chunks/{haskell-DAISwZqR.js → haskell-BB45MUCR.js} +1 -1
- package/dist-vue/_chunks/{haskell-DAISwZqR.js.map → haskell-BB45MUCR.js.map} +1 -1
- package/dist-vue/_chunks/{haxe-CcCnoX02.js → haxe-QBohTRDI.js} +1 -1
- package/dist-vue/_chunks/{haxe-CcCnoX02.js.map → haxe-QBohTRDI.js.map} +1 -1
- package/dist-vue/_chunks/{http-Dy51A1Ji.js → http-HqJENFoz.js} +1 -1
- package/dist-vue/_chunks/{http-Dy51A1Ji.js.map → http-HqJENFoz.js.map} +1 -1
- package/dist-vue/_chunks/{idl-Cf5JG3Ez.js → idl-DZZwNvlw.js} +1 -1
- package/dist-vue/_chunks/{idl-Cf5JG3Ez.js.map → idl-DZZwNvlw.js.map} +1 -1
- package/dist-vue/_chunks/index.es-CikrfdXD.js +950 -0
- package/dist-vue/_chunks/index.es-CikrfdXD.js.map +1 -0
- package/dist-vue/_chunks/{javascript-CzLVX0gM.js → javascript-C85sLH7Y.js} +1 -1
- package/dist-vue/_chunks/{javascript-CzLVX0gM.js.map → javascript-C85sLH7Y.js.map} +1 -1
- package/dist-vue/_chunks/{julia-B2PXBujh.js → julia-ChIE7-ml.js} +1 -1
- package/dist-vue/_chunks/{julia-B2PXBujh.js.map → julia-ChIE7-ml.js.map} +1 -1
- package/dist-vue/_chunks/{livescript-2I87cCXG.js → livescript-BCs3u_kv.js} +1 -1
- package/dist-vue/_chunks/{livescript-2I87cCXG.js.map → livescript-BCs3u_kv.js.map} +1 -1
- package/dist-vue/_chunks/{lua-C3mMI1er.js → lua-DzZVFmfH.js} +1 -1
- package/dist-vue/_chunks/{lua-C3mMI1er.js.map → lua-DzZVFmfH.js.map} +1 -1
- package/dist-vue/_chunks/{mathematica-fQn4Bu4o.js → mathematica-Zz2lXOfW.js} +1 -1
- package/dist-vue/_chunks/{mathematica-fQn4Bu4o.js.map → mathematica-Zz2lXOfW.js.map} +1 -1
- package/dist-vue/_chunks/{mbox-DKAPFpEV.js → mbox-CuPDY4hp.js} +1 -1
- package/dist-vue/_chunks/{mbox-DKAPFpEV.js.map → mbox-CuPDY4hp.js.map} +1 -1
- package/dist-vue/_chunks/{mirc-BjO0qN2s.js → mirc-DwrsqNtD.js} +1 -1
- package/dist-vue/_chunks/{mirc-BjO0qN2s.js.map → mirc-DwrsqNtD.js.map} +1 -1
- package/dist-vue/_chunks/{mllike-BlZyj79n.js → mllike-76cVByXA.js} +1 -1
- package/dist-vue/_chunks/{mllike-BlZyj79n.js.map → mllike-76cVByXA.js.map} +1 -1
- package/dist-vue/_chunks/{modelica-QjIv2_JC.js → modelica-kytS8Bwg.js} +1 -1
- package/dist-vue/_chunks/{modelica-QjIv2_JC.js.map → modelica-kytS8Bwg.js.map} +1 -1
- package/dist-vue/_chunks/{mscgen-LfC5dXDe.js → mscgen-CoPuHfjN.js} +1 -1
- package/dist-vue/_chunks/{mscgen-LfC5dXDe.js.map → mscgen-CoPuHfjN.js.map} +1 -1
- package/dist-vue/_chunks/{mumps-Dv1DAXnR.js → mumps-B2uz6FeJ.js} +1 -1
- package/dist-vue/_chunks/{mumps-Dv1DAXnR.js.map → mumps-B2uz6FeJ.js.map} +1 -1
- package/dist-vue/_chunks/{nginx-3DgpfXl3.js → nginx-BSBpB1IU.js} +1 -1
- package/dist-vue/_chunks/{nginx-3DgpfXl3.js.map → nginx-BSBpB1IU.js.map} +1 -1
- package/dist-vue/_chunks/{nsis-K3Sov04-.js → nsis-R5ELJwT9.js} +2 -2
- package/dist-vue/_chunks/{nsis-K3Sov04-.js.map → nsis-R5ELJwT9.js.map} +1 -1
- package/dist-vue/_chunks/{ntriples-BEnyXf7m.js → ntriples-CAwEARBj.js} +1 -1
- package/dist-vue/_chunks/{ntriples-BEnyXf7m.js.map → ntriples-CAwEARBj.js.map} +1 -1
- package/dist-vue/_chunks/{octave-CyLDdHqN.js → octave-Ufq41PR2.js} +1 -1
- package/dist-vue/_chunks/{octave-CyLDdHqN.js.map → octave-Ufq41PR2.js.map} +1 -1
- package/dist-vue/_chunks/{oz-D5CDtCy5.js → oz-gzP8z3Q6.js} +1 -1
- package/dist-vue/_chunks/{oz-D5CDtCy5.js.map → oz-gzP8z3Q6.js.map} +1 -1
- package/dist-vue/_chunks/{pascal-BSLSyZrm.js → pascal-Ccg4lI6j.js} +1 -1
- package/dist-vue/_chunks/{pascal-BSLSyZrm.js.map → pascal-Ccg4lI6j.js.map} +1 -1
- package/dist-vue/_chunks/{perl-DBW5T0Wn.js → perl-64iNbjRD.js} +1 -1
- package/dist-vue/_chunks/{perl-DBW5T0Wn.js.map → perl-64iNbjRD.js.map} +1 -1
- package/dist-vue/_chunks/{pig-C5Bshhgj.js → pig-CsJsXnem.js} +1 -1
- package/dist-vue/_chunks/{pig-C5Bshhgj.js.map → pig-CsJsXnem.js.map} +1 -1
- package/dist-vue/_chunks/{powershell-BEB8cXp1.js → powershell-CPnsuu0v.js} +1 -1
- package/dist-vue/_chunks/{powershell-BEB8cXp1.js.map → powershell-CPnsuu0v.js.map} +1 -1
- package/dist-vue/_chunks/{properties-Dywxo8ET.js → properties-CEGInQuZ.js} +1 -1
- package/dist-vue/_chunks/{properties-Dywxo8ET.js.map → properties-CEGInQuZ.js.map} +1 -1
- package/dist-vue/_chunks/{protobuf-236BAJ7w.js → protobuf-BGU8l-K6.js} +1 -1
- package/dist-vue/_chunks/{protobuf-236BAJ7w.js.map → protobuf-BGU8l-K6.js.map} +1 -1
- package/dist-vue/_chunks/{pug-cbZddqK7.js → pug-DMZOuiBR.js} +2 -2
- package/dist-vue/_chunks/{pug-cbZddqK7.js.map → pug-DMZOuiBR.js.map} +1 -1
- package/dist-vue/_chunks/{puppet-C2NL98jI.js → puppet-CT38RAOR.js} +1 -1
- package/dist-vue/_chunks/{puppet-C2NL98jI.js.map → puppet-CT38RAOR.js.map} +1 -1
- package/dist-vue/_chunks/{python-CwQbjwek.js → python-BmpRibCQ.js} +1 -1
- package/dist-vue/_chunks/{python-CwQbjwek.js.map → python-BmpRibCQ.js.map} +1 -1
- package/dist-vue/_chunks/{q-BSTDwNDO.js → q-CtSYDlyO.js} +1 -1
- package/dist-vue/_chunks/{q-BSTDwNDO.js.map → q-CtSYDlyO.js.map} +1 -1
- package/dist-vue/_chunks/{r-DFZgsfAZ.js → r-oVGiwSoK.js} +1 -1
- package/dist-vue/_chunks/{r-DFZgsfAZ.js.map → r-oVGiwSoK.js.map} +1 -1
- package/dist-vue/_chunks/{rpm-C0LbsDPX.js → rpm-B5gOa5-q.js} +1 -1
- package/dist-vue/_chunks/{rpm-C0LbsDPX.js.map → rpm-B5gOa5-q.js.map} +1 -1
- package/dist-vue/_chunks/{ruby-Bier99ao.js → ruby-34fuN336.js} +1 -1
- package/dist-vue/_chunks/{ruby-Bier99ao.js.map → ruby-34fuN336.js.map} +1 -1
- package/dist-vue/_chunks/{sas-VrUpo2iQ.js → sas-BlnUKWuD.js} +1 -1
- package/dist-vue/_chunks/{sas-VrUpo2iQ.js.map → sas-BlnUKWuD.js.map} +1 -1
- package/dist-vue/_chunks/{scheme-D6LSF3th.js → scheme-Ba-z_mxe.js} +1 -1
- package/dist-vue/_chunks/{scheme-D6LSF3th.js.map → scheme-Ba-z_mxe.js.map} +1 -1
- package/dist-vue/_chunks/{shell-Pil6sZYj.js → shell-B-EgOeQy.js} +1 -1
- package/dist-vue/_chunks/{shell-Pil6sZYj.js.map → shell-B-EgOeQy.js.map} +1 -1
- package/dist-vue/_chunks/{sieve-BP6vUMh6.js → sieve-DsG7bfYX.js} +1 -1
- package/dist-vue/_chunks/{sieve-BP6vUMh6.js.map → sieve-DsG7bfYX.js.map} +1 -1
- package/dist-vue/_chunks/{simple-mode-BG7WQO3g.js → simple-mode-wQYx-pPa.js} +1 -1
- package/dist-vue/_chunks/{simple-mode-BG7WQO3g.js.map → simple-mode-wQYx-pPa.js.map} +1 -1
- package/dist-vue/_chunks/{smalltalk-BnTD_-u6.js → smalltalk-ChZvyDpP.js} +1 -1
- package/dist-vue/_chunks/{smalltalk-BnTD_-u6.js.map → smalltalk-ChZvyDpP.js.map} +1 -1
- package/dist-vue/_chunks/{solr-VuxI6OR2.js → solr-Dqcv2AYp.js} +1 -1
- package/dist-vue/_chunks/{solr-VuxI6OR2.js.map → solr-Dqcv2AYp.js.map} +1 -1
- package/dist-vue/_chunks/{sparql-7LilzgeP.js → sparql-DqMXm2dv.js} +1 -1
- package/dist-vue/_chunks/{sparql-7LilzgeP.js.map → sparql-DqMXm2dv.js.map} +1 -1
- package/dist-vue/_chunks/{spreadsheet-CMp1pfGY.js → spreadsheet-DZEh4bps.js} +1 -1
- package/dist-vue/_chunks/{spreadsheet-CMp1pfGY.js.map → spreadsheet-DZEh4bps.js.map} +1 -1
- package/dist-vue/_chunks/{sql-7pX-pbPB.js → sql-MyS5CFp1.js} +1 -1
- package/dist-vue/_chunks/{sql-7pX-pbPB.js.map → sql-MyS5CFp1.js.map} +1 -1
- package/dist-vue/_chunks/{src-DjRNH9vV.js → src-BteqqLGW.js} +1 -1
- package/dist-vue/_chunks/{src-DjRNH9vV.js.map → src-BteqqLGW.js.map} +1 -1
- package/dist-vue/_chunks/{stex-Bb7D4YTq.js → stex-CuUykOIw.js} +1 -1
- package/dist-vue/_chunks/{stex-Bb7D4YTq.js.map → stex-CuUykOIw.js.map} +1 -1
- package/dist-vue/_chunks/{stylus-DtQ7d5hI.js → stylus-BIh9GBXG.js} +1 -1
- package/dist-vue/_chunks/{stylus-DtQ7d5hI.js.map → stylus-BIh9GBXG.js.map} +1 -1
- package/dist-vue/_chunks/{swift-BUw5YtkI.js → swift-En1d22e-.js} +1 -1
- package/dist-vue/_chunks/{swift-BUw5YtkI.js.map → swift-En1d22e-.js.map} +1 -1
- package/dist-vue/_chunks/{tcl-DXJDyEhN.js → tcl-CA3XR2Sh.js} +1 -1
- package/dist-vue/_chunks/{tcl-DXJDyEhN.js.map → tcl-CA3XR2Sh.js.map} +1 -1
- package/dist-vue/_chunks/{textile-CFJlGF4J.js → textile-CKe5SU6F.js} +1 -1
- package/dist-vue/_chunks/{textile-CFJlGF4J.js.map → textile-CKe5SU6F.js.map} +1 -1
- package/dist-vue/_chunks/{tiddlywiki-BcfgI-U0.js → tiddlywiki-UOzNZSPW.js} +1 -1
- package/dist-vue/_chunks/{tiddlywiki-BcfgI-U0.js.map → tiddlywiki-UOzNZSPW.js.map} +1 -1
- package/dist-vue/_chunks/{tiki-Ck3ovlwE.js → tiki-CTiuYP9v.js} +1 -1
- package/dist-vue/_chunks/{tiki-Ck3ovlwE.js.map → tiki-CTiuYP9v.js.map} +1 -1
- package/dist-vue/_chunks/{toml-Cj82erLE.js → toml-DDNufn3M.js} +1 -1
- package/dist-vue/_chunks/{toml-Cj82erLE.js.map → toml-DDNufn3M.js.map} +1 -1
- package/dist-vue/_chunks/{troff-CizaXfug.js → troff-DW8Y_3S4.js} +1 -1
- package/dist-vue/_chunks/{troff-CizaXfug.js.map → troff-DW8Y_3S4.js.map} +1 -1
- package/dist-vue/_chunks/{ttcn-mPO-QsiQ.js → ttcn-C-DIoNCg.js} +1 -1
- package/dist-vue/_chunks/{ttcn-mPO-QsiQ.js.map → ttcn-C-DIoNCg.js.map} +1 -1
- package/dist-vue/_chunks/{ttcn-cfg-c_AW8b7V.js → ttcn-cfg-B4ziRnM-.js} +1 -1
- package/dist-vue/_chunks/{ttcn-cfg-c_AW8b7V.js.map → ttcn-cfg-B4ziRnM-.js.map} +1 -1
- package/dist-vue/_chunks/{turtle-BF5AsFbP.js → turtle-CARqpYpc.js} +1 -1
- package/dist-vue/_chunks/{turtle-BF5AsFbP.js.map → turtle-CARqpYpc.js.map} +1 -1
- package/dist-vue/_chunks/{useChatbotStore-ys9uGP5v.js → useChatbotStore-C9xj40sY.js} +24 -24
- package/dist-vue/_chunks/{useChatbotStore-ys9uGP5v.js.map → useChatbotStore-C9xj40sY.js.map} +1 -1
- package/dist-vue/_chunks/{useLightbox-CRpWDdlN.js → useLightbox-CsBDIq4B.js} +2 -2
- package/dist-vue/_chunks/{useLightbox-CRpWDdlN.js.map → useLightbox-CsBDIq4B.js.map} +1 -1
- package/dist-vue/_chunks/useSafeLocalStorage-C1GCM7nD.js +15 -0
- package/dist-vue/_chunks/useSafeLocalStorage-C1GCM7nD.js.map +1 -0
- package/dist-vue/_chunks/{utils-DBd_X5-V.js → utils-D1pBqT-n.js} +2 -2
- package/dist-vue/_chunks/{utils-DBd_X5-V.js.map → utils-D1pBqT-n.js.map} +1 -1
- package/dist-vue/_chunks/{vb-CeqEYgxc.js → vb-jy9Yl8VS.js} +1 -1
- package/dist-vue/_chunks/{vb-CeqEYgxc.js.map → vb-jy9Yl8VS.js.map} +1 -1
- package/dist-vue/_chunks/{vbscript-Dy7to0l6.js → vbscript-srk6lbz5.js} +1 -1
- package/dist-vue/_chunks/{vbscript-Dy7to0l6.js.map → vbscript-srk6lbz5.js.map} +1 -1
- package/dist-vue/_chunks/{velocity-CKubdsu-.js → velocity-DYmMYLwp.js} +1 -1
- package/dist-vue/_chunks/{velocity-CKubdsu-.js.map → velocity-DYmMYLwp.js.map} +1 -1
- package/dist-vue/_chunks/{verilog-BhlfpzOZ.js → verilog-UsIZeNkB.js} +1 -1
- package/dist-vue/_chunks/{verilog-BhlfpzOZ.js.map → verilog-UsIZeNkB.js.map} +1 -1
- package/dist-vue/_chunks/{vhdl-8WXkWtGM.js → vhdl-DNCP7Bn1.js} +1 -1
- package/dist-vue/_chunks/{vhdl-8WXkWtGM.js.map → vhdl-DNCP7Bn1.js.map} +1 -1
- package/dist-vue/_chunks/{webidl-Jc36v0Y0.js → webidl-DOqqk_0y.js} +1 -1
- package/dist-vue/_chunks/{webidl-Jc36v0Y0.js.map → webidl-DOqqk_0y.js.map} +1 -1
- package/dist-vue/_chunks/{xquery-H0oz85f3.js → xquery-DJDJrmLG.js} +1 -1
- package/dist-vue/_chunks/{xquery-H0oz85f3.js.map → xquery-DJDJrmLG.js.map} +1 -1
- package/dist-vue/_chunks/{yacas-BdW11VL8.js → yacas-BSgkPzcj.js} +1 -1
- package/dist-vue/_chunks/{yacas-BdW11VL8.js.map → yacas-BSgkPzcj.js.map} +1 -1
- package/dist-vue/_chunks/{z80-GK9AbKDL.js → z80-C0-Mg9L3.js} +1 -1
- package/dist-vue/_chunks/{z80-GK9AbKDL.js.map → z80-C0-Mg9L3.js.map} +1 -1
- package/dist-vue/api.js +1 -1
- package/dist-vue/apps/web-component/src/composables/useChatbotAuth.d.ts +2 -1
- package/dist-vue/composables.js +92 -80
- package/dist-vue/composables.js.map +1 -1
- package/dist-vue/index.js +874 -857
- package/dist-vue/index.js.map +1 -1
- package/dist-vue/locales.js +1 -0
- package/dist-vue/packages/ability/src/types.d.ts +3 -1
- package/dist-vue/packages/components/src/chat/PkChatbotMessages.d.ts +10 -3
- package/dist-vue/packages/components/src/chat/PkCopyBlock.d.ts +4 -2
- package/dist-vue/packages/components/src/chat/PkMessageParts.d.ts +5 -1
- package/dist-vue/packages/components/src/chat/PkToolShowLocation.d.ts +5 -0
- package/dist-vue/packages/components/src/index.d.ts +2 -1
- package/dist-vue/packages/composable/src/chatbot/api/createChatbotApiClient.d.ts +5 -0
- package/dist-vue/packages/composable/src/index.d.ts +1 -0
- package/dist-vue/packages/composable/src/useSafeLocalStorage.d.ts +7 -0
- package/dist-vue/packages/models/src/schema/AgentEndpoint.d.ts +108 -0
- package/dist-vue/packages/models/src/schema/AgentEndpointLog.d.ts +48 -0
- package/dist-vue/packages/models/src/schema/index.d.ts +2 -0
- package/dist-vue/style.css +1 -1
- package/package.json +3 -2
- package/dist/_chunks/PkToolShowArtifact-DzNIkKvZ.js.map +0 -1
- package/dist/_chunks/PkToolShowLocation-BsBiA4jV.js +0 -134
- package/dist/_chunks/PkToolShowLocation-BsBiA4jV.js.map +0 -1
- package/dist/_chunks/vue-leaflet.es-BT-uRmMx.js +0 -1738
- package/dist/_chunks/vue-leaflet.es-BT-uRmMx.js.map +0 -1
- package/dist-vue/_chunks/PkChatbotFeedbackForm-Dl1pWKbb.js +0 -1035
- package/dist-vue/_chunks/PkChatbotFeedbackForm-Dl1pWKbb.js.map +0 -1
- package/dist-vue/_chunks/PkChatbotMessages-C7-ZtU0-.js.map +0 -1
- package/dist-vue/_chunks/PkChatbotViewChat-EWotdJkz.js +0 -792
- package/dist-vue/_chunks/PkChatbotViewChat-EWotdJkz.js.map +0 -1
- package/dist-vue/_chunks/PkToolShowArtifact-pTS7wzhw.js.map +0 -1
- package/dist-vue/_chunks/PkToolShowLocation-DSZvW68g.js +0 -135
- package/dist-vue/_chunks/PkToolShowLocation-DSZvW68g.js.map +0 -1
- package/dist-vue/_chunks/createChatbotApiClient-BJL1_AVi.js +0 -630
- package/dist-vue/_chunks/createChatbotApiClient-BJL1_AVi.js.map +0 -1
- package/dist-vue/_chunks/dist-Bh5Q6aSI2.js.map +0 -1
- package/dist-vue/_chunks/dist-CAZOa5qs2.js.map +0 -1
- package/dist-vue/_chunks/dist-afJW4ohP2.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PkChatbot-Cy7p5UI_.js","names":[],"sources":["../../../../packages/components/src/chat/PkChatbot.vue","../../../../packages/components/src/chat/PkChatbot.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, toRef, watch, watchEffect, useSlots } from 'vue'\n import { storeToRefs } from 'pinia'\n import { useI18n } from 'vue-i18n'\n import type {\n AgentInterface,\n AgentModel,\n AgentFileUpload,\n AgentGatewayOptions,\n ChatMessageActions,\n RevisedAnswer,\n UIChatMessage,\n AgentTools,\n } from 'models'\n import { useChatbotStore } from 'composables'\n import PkAvatar from './PkAvatar.vue'\n import PkChatbotViewChat from './PkChatbotViewChat.vue'\n import PkChatbotViewConversations from './PkChatbotViewConversations.vue'\n import PkChatbotViewProfile from './PkChatbotViewProfile.vue'\n import PkStreamingMarkdown from './PkStreamingMarkdown.vue'\n import { resolveContrastColor } from './utils'\n import { useLocalizedString } from '../composables/useLocalizedString'\n\n // Captured in script setup to avoid TS7022 circular inference in template\n const slots = useSlots()\n\n const { t: $t } = useI18n({\n useScope: 'global',\n })\n\n const props = defineProps<{\n baseUrl: string\n basePath?: string\n agentId: string\n agentType?: 'reasoning' | 'chat'\n userId?: string\n name?: string\n model?: string\n agentModel?: AgentModel\n agentTools?: AgentTools\n agentInterface?: AgentInterface\n actions?: ChatMessageActions[]\n revisedAnswers?: RevisedAnswer[]\n headers?: Record<string, string>\n systemTheme?: 'light' | 'dark'\n agentFileUpload?: AgentFileUpload\n fallbackModels?: string[]\n gatewayOptions?: Partial<AgentGatewayOptions>\n }>()\n const emit = defineEmits<{\n 'message-update': [message: UIChatMessage]\n 'show-info': [message: UIChatMessage]\n revise: [message: UIChatMessage]\n error: [error: { type: string; title: string; status: number }]\n }>()\n\n const chatId = defineModel<string | undefined>('chatId', {\n type: String,\n default: undefined,\n })\n\n const store = useChatbotStore(props.agentId)\n\n const { messages, chat, localChatId, activeView, chatError } =\n storeToRefs(store)\n\n // Ref to store.agentId for watchers (avoids duplicate-key with agentId prop)\n const storeAgentId = toRef(store, 'agentId')\n\n const { startNewChat, stopGeneration, regenerate, navigate } = store\n\n // Sync props → store reactively\n watchEffect(() => {\n store.baseUrl = props.baseUrl\n store.basePath = props.basePath\n store.name = props.name\n store.agentType = props.agentType\n store.userId = props.userId\n store.agentInterface = props.agentInterface\n store.agentModel = props.agentModel\n store.agentTools = props.agentTools\n store.headers = props.headers\n store.revisedAnswers = props.revisedAnswers\n store.model = props.model\n store.actionsInput = props.actions\n store.agentFileUpload = props.agentFileUpload\n store.fallbackModels = props.fallbackModels\n store.gatewayOptions = props.gatewayOptions\n })\n\n // Sync chatId v-model ↔ store (bidirectional)\n // Parent → store: if the parent provides an external chatId, push it into\n // the store so the Chat instance picks it up.\n watch(\n () => chatId.value,\n (id) => {\n if (id && id !== store.localChatId) {\n store.localChatId = id\n }\n },\n { immediate: true },\n )\n // Store → parent: keep the v-model in sync whenever the store changes\n // the chatId internally (e.g. startNewChat).\n watch(localChatId, (id) => {\n chatId.value = id\n })\n\n // Emit structured errors from chat to the parent component\n watch(chatError, (error) => {\n if (!error) {\n return\n }\n try {\n const parsedError = JSON.parse(error.message) as {\n type: string\n title: string\n status: number\n }\n emit('error', parsedError)\n } catch {\n // ignore non-JSON errors\n }\n })\n\n // ui\n const isReasoningAgent = computed(() => props.agentType === 'reasoning')\n const useColorsForAgentHeader = computed(\n () => props.agentInterface?.useColorsForAgentHeader,\n )\n const themeClass = computed(() => {\n let theme = props.agentInterface?.theme\n if (!theme || theme === 'auto') {\n theme = props.systemTheme\n }\n if (!theme) {\n return ['theme']\n }\n return ['theme', `theme--${theme}`]\n })\n const mainColor = computed(() => props.agentInterface?.mainColor)\n const contrastColor = computed(() =>\n resolveContrastColor(props.agentInterface?.textColor, mainColor.value),\n )\n const footerMessage = useLocalizedString(\n () => props.agentInterface?.footerMessage,\n )\n const title = computed(() => {\n if (activeView.value === 'conversations') {\n return $t('label.conversations')\n }\n if (activeView.value === 'profile') {\n return $t('label.profile')\n }\n return props.name\n })\n\n // state\n const isReady = computed(() => chat.value.status === 'ready')\n const activeMessage = computed(() => {\n return messages.value?.[messages.value.length - 1]\n })\n\n // expose\n defineExpose({\n startNewChat,\n regenerate,\n stopGeneration,\n })\n\n // load chat, conversations and feedbacks on agent or chat change\n watch(\n [storeAgentId, localChatId],\n async ([newAgentId, newChatId]) => {\n await store.initialize(newAgentId, newChatId)\n },\n {\n immediate: true,\n },\n )\n // update initial message\n watch(\n () => props.agentInterface?.initialMessage,\n () => {\n if (\n chat.value.messages.length === 1 &&\n chat.value.messages[0].role === 'assistant'\n ) {\n chat.value.messages = []\n }\n },\n { deep: true },\n )\n // load conversations when navigating to conversations view\n watch(activeView, (newView) => {\n if (newView === 'conversations') {\n store.loadConversations(storeAgentId.value)\n }\n })\n // emit message updates for up-to-date context in parent components\n watch(\n activeMessage,\n (message) => {\n if (message) {\n emit('message-update', message)\n }\n },\n {\n deep: true,\n immediate: true,\n },\n )\n</script>\n\n<template>\n <div class=\"pk-chatbot\" :class=\"themeClass\">\n <!-- #region title -->\n <div\n class=\"pk-chatbot__header\"\n :style=\"\n useColorsForAgentHeader\n ? {\n backgroundColor: mainColor,\n }\n : undefined\n \">\n <div class=\"pk-chatbot__header-start\">\n <template v-if=\"activeView !== 'chat'\">\n <VvButton\n v-bind=\"{\n modifiers: useColorsForAgentHeader\n ? `action-quiet-${contrastColor}`\n : 'action-quiet',\n icon: 'ri:arrow-left-s-line',\n title: $t('action.goBack'),\n }\"\n @click=\"navigate('chat')\" />\n <VvIcon\n name=\"ri:history-line\"\n class=\"pk-chatbot__nav-icon\"\n :style=\"\n useColorsForAgentHeader\n ? {\n color: contrastColor,\n }\n : undefined\n \" />\n </template>\n <PkAvatar\n v-else\n modifiers=\"surface ring shrink-0\"\n class=\"pk-chatbot__avatar\"\n :name\n :img-src=\"agentInterface?.logo\" />\n <strong\n class=\"pk-chatbot__title\"\n :title=\"title\"\n :style=\"\n useColorsForAgentHeader\n ? {\n color: contrastColor,\n }\n : undefined\n \">\n {{ title }}\n </strong>\n </div>\n <VvButtonGroup class=\"pk-chatbot__header-end\" modifiers=\"compact\">\n <slot\n name=\"header-actions\"\n v-bind=\"{\n mainColor,\n useColorsForAgentHeader,\n contrastColor,\n startNewChat,\n stopGeneration,\n }\" />\n <VvDropdown\n v-bind=\"{\n placement: 'bottom-end',\n modifiers: 'menu',\n flip: true,\n offset: 3,\n }\">\n <VvButton\n v-bind=\"{\n modifiers: useColorsForAgentHeader\n ? `action-quiet-${contrastColor}`\n : 'action-quiet',\n icon: 'ri:more-2-fill',\n disabled: !isReady,\n title: $t('action.moreActions'),\n }\" />\n <template #items>\n <VvDropdownAction @click=\"startNewChat()\">\n <VvIcon name=\"ri:edit-box-line\" />\n {{ $t('action.startNewChat') }}\n </VvDropdownAction>\n <VvDropdownAction\n v-if=\"!isReasoningAgent\"\n @click=\"navigate('conversations')\">\n <VvIcon name=\"ri:history-line\" />\n {{ $t('action.viewRecentChats') }}\n </VvDropdownAction>\n </template>\n </VvDropdown>\n <slot\n name=\"actions\"\n v-bind=\"{\n mainColor,\n useColorsForAgentHeader,\n contrastColor,\n startNewChat,\n stopGeneration,\n }\" />\n </VvButtonGroup>\n </div>\n <!-- #endregion -->\n\n <div v-if=\"isReasoningAgent\">\n <div class=\"pk-chatbot__warning-body\">\n <VvAlert modifiers=\"callout\">\n <div class=\"pk-chatbot__warning-header\">\n <VvIcon\n name=\"ri:alert-line\"\n class=\"pk-chatbot__warning-icon\" />\n <strong class=\"pk-chatbot__warning-title\">\n {{ $t('message.warning') }}\n </strong>\n </div>\n <p class=\"pk-chatbot__warning-text\">\n {{ $t('message.reasoningAgent') }}\n </p>\n </VvAlert>\n </div>\n </div>\n\n <!-- #region views -->\n <PkChatbotViewChat\n v-if=\"activeView === 'chat'\"\n :agent-id\n @show-info=\"emit('show-info', $event)\"\n @revise=\"emit('revise', $event)\">\n <template\n v-for=\"slotName in Object.keys(slots)\"\n #[slotName]=\"slotData\"\n ><slot :name=\"slotName\" v-bind=\"slotData\"\n /></template>\n </PkChatbotViewChat>\n <PkChatbotViewConversations\n v-else-if=\"activeView === 'conversations'\"\n :agent-id>\n <template\n v-for=\"slotName in Object.keys(slots)\"\n #[slotName]=\"slotData\"\n ><slot :name=\"slotName\" v-bind=\"slotData\"\n /></template>\n </PkChatbotViewConversations>\n <PkChatbotViewProfile v-else :agent-id>\n <template\n v-for=\"slotName in Object.keys(slots)\"\n #[slotName]=\"slotData\"\n ><slot :name=\"slotName\" v-bind=\"slotData\"\n /></template>\n </PkChatbotViewProfile>\n <!-- #endregion -->\n\n <!-- #region footer -->\n <div v-if=\"footerMessage\" class=\"pk-chatbot__footer\">\n <PkStreamingMarkdown :markdown=\"footerMessage\" class=\"wysiwyg\" />\n </div>\n <!-- #endregion -->\n </div>\n</template>\n\n<style lang=\"scss\">\n .pk-chatbot {\n display: flex;\n flex-direction: column;\n position: relative;\n height: 100%;\n background-color: var(--color-surface);\n\n &__header {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex;\n justify-content: space-between;\n gap: var(--spacing-14);\n background-color: var(--color-surface-1);\n padding: var(--spacing-14);\n border-bottom: 1px solid var(--color-surface-4);\n }\n\n &__header-start {\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n min-width: 0;\n }\n\n &__nav-icon {\n font-size: var(--text-18);\n }\n\n &__avatar {\n width: var(--spacing-24);\n height: var(--spacing-24);\n }\n\n &__title {\n font-size: var(--text-16);\n font-weight: 700;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__header-end {\n flex-shrink: 0;\n }\n\n &__warning-body {\n padding: var(--spacing-md);\n border-bottom: 1px solid var(--color-surface-4);\n }\n\n &__warning-header {\n display: flex;\n align-items: center;\n gap: var(--spacing-4);\n margin-bottom: var(--spacing-4);\n }\n\n &__warning-icon {\n width: var(--spacing-16);\n height: var(--spacing-16);\n }\n\n &__warning-title {\n font-weight: 600;\n font-size: var(--text-14);\n }\n\n &__warning-text {\n font-size: var(--text-12);\n color: var(--color-word-3);\n }\n\n &__footer {\n padding: var(--spacing-md);\n border-top: 1px solid var(--color-surface-4);\n text-align: center;\n font-size: var(--text-12);\n color: var(--color-word-2);\n }\n }\n</style>\n","<script setup lang=\"ts\">\n import { computed, toRef, watch, watchEffect, useSlots } from 'vue'\n import { storeToRefs } from 'pinia'\n import { useI18n } from 'vue-i18n'\n import type {\n AgentInterface,\n AgentModel,\n AgentFileUpload,\n AgentGatewayOptions,\n ChatMessageActions,\n RevisedAnswer,\n UIChatMessage,\n AgentTools,\n } from 'models'\n import { useChatbotStore } from 'composables'\n import PkAvatar from './PkAvatar.vue'\n import PkChatbotViewChat from './PkChatbotViewChat.vue'\n import PkChatbotViewConversations from './PkChatbotViewConversations.vue'\n import PkChatbotViewProfile from './PkChatbotViewProfile.vue'\n import PkStreamingMarkdown from './PkStreamingMarkdown.vue'\n import { resolveContrastColor } from './utils'\n import { useLocalizedString } from '../composables/useLocalizedString'\n\n // Captured in script setup to avoid TS7022 circular inference in template\n const slots = useSlots()\n\n const { t: $t } = useI18n({\n useScope: 'global',\n })\n\n const props = defineProps<{\n baseUrl: string\n basePath?: string\n agentId: string\n agentType?: 'reasoning' | 'chat'\n userId?: string\n name?: string\n model?: string\n agentModel?: AgentModel\n agentTools?: AgentTools\n agentInterface?: AgentInterface\n actions?: ChatMessageActions[]\n revisedAnswers?: RevisedAnswer[]\n headers?: Record<string, string>\n systemTheme?: 'light' | 'dark'\n agentFileUpload?: AgentFileUpload\n fallbackModels?: string[]\n gatewayOptions?: Partial<AgentGatewayOptions>\n }>()\n const emit = defineEmits<{\n 'message-update': [message: UIChatMessage]\n 'show-info': [message: UIChatMessage]\n revise: [message: UIChatMessage]\n error: [error: { type: string; title: string; status: number }]\n }>()\n\n const chatId = defineModel<string | undefined>('chatId', {\n type: String,\n default: undefined,\n })\n\n const store = useChatbotStore(props.agentId)\n\n const { messages, chat, localChatId, activeView, chatError } =\n storeToRefs(store)\n\n // Ref to store.agentId for watchers (avoids duplicate-key with agentId prop)\n const storeAgentId = toRef(store, 'agentId')\n\n const { startNewChat, stopGeneration, regenerate, navigate } = store\n\n // Sync props → store reactively\n watchEffect(() => {\n store.baseUrl = props.baseUrl\n store.basePath = props.basePath\n store.name = props.name\n store.agentType = props.agentType\n store.userId = props.userId\n store.agentInterface = props.agentInterface\n store.agentModel = props.agentModel\n store.agentTools = props.agentTools\n store.headers = props.headers\n store.revisedAnswers = props.revisedAnswers\n store.model = props.model\n store.actionsInput = props.actions\n store.agentFileUpload = props.agentFileUpload\n store.fallbackModels = props.fallbackModels\n store.gatewayOptions = props.gatewayOptions\n })\n\n // Sync chatId v-model ↔ store (bidirectional)\n // Parent → store: if the parent provides an external chatId, push it into\n // the store so the Chat instance picks it up.\n watch(\n () => chatId.value,\n (id) => {\n if (id && id !== store.localChatId) {\n store.localChatId = id\n }\n },\n { immediate: true },\n )\n // Store → parent: keep the v-model in sync whenever the store changes\n // the chatId internally (e.g. startNewChat).\n watch(localChatId, (id) => {\n chatId.value = id\n })\n\n // Emit structured errors from chat to the parent component\n watch(chatError, (error) => {\n if (!error) {\n return\n }\n try {\n const parsedError = JSON.parse(error.message) as {\n type: string\n title: string\n status: number\n }\n emit('error', parsedError)\n } catch {\n // ignore non-JSON errors\n }\n })\n\n // ui\n const isReasoningAgent = computed(() => props.agentType === 'reasoning')\n const useColorsForAgentHeader = computed(\n () => props.agentInterface?.useColorsForAgentHeader,\n )\n const themeClass = computed(() => {\n let theme = props.agentInterface?.theme\n if (!theme || theme === 'auto') {\n theme = props.systemTheme\n }\n if (!theme) {\n return ['theme']\n }\n return ['theme', `theme--${theme}`]\n })\n const mainColor = computed(() => props.agentInterface?.mainColor)\n const contrastColor = computed(() =>\n resolveContrastColor(props.agentInterface?.textColor, mainColor.value),\n )\n const footerMessage = useLocalizedString(\n () => props.agentInterface?.footerMessage,\n )\n const title = computed(() => {\n if (activeView.value === 'conversations') {\n return $t('label.conversations')\n }\n if (activeView.value === 'profile') {\n return $t('label.profile')\n }\n return props.name\n })\n\n // state\n const isReady = computed(() => chat.value.status === 'ready')\n const activeMessage = computed(() => {\n return messages.value?.[messages.value.length - 1]\n })\n\n // expose\n defineExpose({\n startNewChat,\n regenerate,\n stopGeneration,\n })\n\n // load chat, conversations and feedbacks on agent or chat change\n watch(\n [storeAgentId, localChatId],\n async ([newAgentId, newChatId]) => {\n await store.initialize(newAgentId, newChatId)\n },\n {\n immediate: true,\n },\n )\n // update initial message\n watch(\n () => props.agentInterface?.initialMessage,\n () => {\n if (\n chat.value.messages.length === 1 &&\n chat.value.messages[0].role === 'assistant'\n ) {\n chat.value.messages = []\n }\n },\n { deep: true },\n )\n // load conversations when navigating to conversations view\n watch(activeView, (newView) => {\n if (newView === 'conversations') {\n store.loadConversations(storeAgentId.value)\n }\n })\n // emit message updates for up-to-date context in parent components\n watch(\n activeMessage,\n (message) => {\n if (message) {\n emit('message-update', message)\n }\n },\n {\n deep: true,\n immediate: true,\n },\n )\n</script>\n\n<template>\n <div class=\"pk-chatbot\" :class=\"themeClass\">\n <!-- #region title -->\n <div\n class=\"pk-chatbot__header\"\n :style=\"\n useColorsForAgentHeader\n ? {\n backgroundColor: mainColor,\n }\n : undefined\n \">\n <div class=\"pk-chatbot__header-start\">\n <template v-if=\"activeView !== 'chat'\">\n <VvButton\n v-bind=\"{\n modifiers: useColorsForAgentHeader\n ? `action-quiet-${contrastColor}`\n : 'action-quiet',\n icon: 'ri:arrow-left-s-line',\n title: $t('action.goBack'),\n }\"\n @click=\"navigate('chat')\" />\n <VvIcon\n name=\"ri:history-line\"\n class=\"pk-chatbot__nav-icon\"\n :style=\"\n useColorsForAgentHeader\n ? {\n color: contrastColor,\n }\n : undefined\n \" />\n </template>\n <PkAvatar\n v-else\n modifiers=\"surface ring shrink-0\"\n class=\"pk-chatbot__avatar\"\n :name\n :img-src=\"agentInterface?.logo\" />\n <strong\n class=\"pk-chatbot__title\"\n :title=\"title\"\n :style=\"\n useColorsForAgentHeader\n ? {\n color: contrastColor,\n }\n : undefined\n \">\n {{ title }}\n </strong>\n </div>\n <VvButtonGroup class=\"pk-chatbot__header-end\" modifiers=\"compact\">\n <slot\n name=\"header-actions\"\n v-bind=\"{\n mainColor,\n useColorsForAgentHeader,\n contrastColor,\n startNewChat,\n stopGeneration,\n }\" />\n <VvDropdown\n v-bind=\"{\n placement: 'bottom-end',\n modifiers: 'menu',\n flip: true,\n offset: 3,\n }\">\n <VvButton\n v-bind=\"{\n modifiers: useColorsForAgentHeader\n ? `action-quiet-${contrastColor}`\n : 'action-quiet',\n icon: 'ri:more-2-fill',\n disabled: !isReady,\n title: $t('action.moreActions'),\n }\" />\n <template #items>\n <VvDropdownAction @click=\"startNewChat()\">\n <VvIcon name=\"ri:edit-box-line\" />\n {{ $t('action.startNewChat') }}\n </VvDropdownAction>\n <VvDropdownAction\n v-if=\"!isReasoningAgent\"\n @click=\"navigate('conversations')\">\n <VvIcon name=\"ri:history-line\" />\n {{ $t('action.viewRecentChats') }}\n </VvDropdownAction>\n </template>\n </VvDropdown>\n <slot\n name=\"actions\"\n v-bind=\"{\n mainColor,\n useColorsForAgentHeader,\n contrastColor,\n startNewChat,\n stopGeneration,\n }\" />\n </VvButtonGroup>\n </div>\n <!-- #endregion -->\n\n <div v-if=\"isReasoningAgent\">\n <div class=\"pk-chatbot__warning-body\">\n <VvAlert modifiers=\"callout\">\n <div class=\"pk-chatbot__warning-header\">\n <VvIcon\n name=\"ri:alert-line\"\n class=\"pk-chatbot__warning-icon\" />\n <strong class=\"pk-chatbot__warning-title\">\n {{ $t('message.warning') }}\n </strong>\n </div>\n <p class=\"pk-chatbot__warning-text\">\n {{ $t('message.reasoningAgent') }}\n </p>\n </VvAlert>\n </div>\n </div>\n\n <!-- #region views -->\n <PkChatbotViewChat\n v-if=\"activeView === 'chat'\"\n :agent-id\n @show-info=\"emit('show-info', $event)\"\n @revise=\"emit('revise', $event)\">\n <template\n v-for=\"slotName in Object.keys(slots)\"\n #[slotName]=\"slotData\"\n ><slot :name=\"slotName\" v-bind=\"slotData\"\n /></template>\n </PkChatbotViewChat>\n <PkChatbotViewConversations\n v-else-if=\"activeView === 'conversations'\"\n :agent-id>\n <template\n v-for=\"slotName in Object.keys(slots)\"\n #[slotName]=\"slotData\"\n ><slot :name=\"slotName\" v-bind=\"slotData\"\n /></template>\n </PkChatbotViewConversations>\n <PkChatbotViewProfile v-else :agent-id>\n <template\n v-for=\"slotName in Object.keys(slots)\"\n #[slotName]=\"slotData\"\n ><slot :name=\"slotName\" v-bind=\"slotData\"\n /></template>\n </PkChatbotViewProfile>\n <!-- #endregion -->\n\n <!-- #region footer -->\n <div v-if=\"footerMessage\" class=\"pk-chatbot__footer\">\n <PkStreamingMarkdown :markdown=\"footerMessage\" class=\"wysiwyg\" />\n </div>\n <!-- #endregion -->\n </div>\n</template>\n\n<style lang=\"scss\">\n .pk-chatbot {\n display: flex;\n flex-direction: column;\n position: relative;\n height: 100%;\n background-color: var(--color-surface);\n\n &__header {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex;\n justify-content: space-between;\n gap: var(--spacing-14);\n background-color: var(--color-surface-1);\n padding: var(--spacing-14);\n border-bottom: 1px solid var(--color-surface-4);\n }\n\n &__header-start {\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n min-width: 0;\n }\n\n &__nav-icon {\n font-size: var(--text-18);\n }\n\n &__avatar {\n width: var(--spacing-24);\n height: var(--spacing-24);\n }\n\n &__title {\n font-size: var(--text-16);\n font-weight: 700;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__header-end {\n flex-shrink: 0;\n }\n\n &__warning-body {\n padding: var(--spacing-md);\n border-bottom: 1px solid var(--color-surface-4);\n }\n\n &__warning-header {\n display: flex;\n align-items: center;\n gap: var(--spacing-4);\n margin-bottom: var(--spacing-4);\n }\n\n &__warning-icon {\n width: var(--spacing-16);\n height: var(--spacing-16);\n }\n\n &__warning-title {\n font-weight: 600;\n font-size: var(--text-14);\n }\n\n &__warning-text {\n font-size: var(--text-12);\n color: var(--color-word-3);\n }\n\n &__footer {\n padding: var(--spacing-md);\n border-top: 1px solid var(--color-surface-4);\n text-align: center;\n font-size: var(--text-12);\n color: var(--color-word-2);\n }\n }\n</style>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PkChatbot-h7EIb9Y5.js","names":[],"sources":["../../../../packages/components/src/chat/PkChatbot.vue","../../../../packages/components/src/chat/PkChatbot.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, toRef, watch, watchEffect, useSlots } from 'vue'\n import { storeToRefs } from 'pinia'\n import { useI18n } from 'vue-i18n'\n import type {\n AgentInterface,\n AgentModel,\n AgentFileUpload,\n AgentGatewayOptions,\n ChatMessageActions,\n RevisedAnswer,\n UIChatMessage,\n AgentTools,\n } from 'models'\n import { useChatbotStore } from 'composables'\n import PkAvatar from './PkAvatar.vue'\n import PkChatbotViewChat from './PkChatbotViewChat.vue'\n import PkChatbotViewConversations from './PkChatbotViewConversations.vue'\n import PkChatbotViewProfile from './PkChatbotViewProfile.vue'\n import PkStreamingMarkdown from './PkStreamingMarkdown.vue'\n import { resolveContrastColor } from './utils'\n import { useLocalizedString } from '../composables/useLocalizedString'\n\n // Captured in script setup to avoid TS7022 circular inference in template\n const slots = useSlots()\n\n const { t: $t } = useI18n({\n useScope: 'global',\n })\n\n const props = defineProps<{\n baseUrl: string\n basePath?: string\n agentId: string\n agentType?: 'reasoning' | 'chat'\n userId?: string\n name?: string\n model?: string\n agentModel?: AgentModel\n agentTools?: AgentTools\n agentInterface?: AgentInterface\n actions?: ChatMessageActions[]\n revisedAnswers?: RevisedAnswer[]\n headers?: Record<string, string>\n systemTheme?: 'light' | 'dark'\n agentFileUpload?: AgentFileUpload\n fallbackModels?: string[]\n gatewayOptions?: Partial<AgentGatewayOptions>\n }>()\n const emit = defineEmits<{\n 'message-update': [message: UIChatMessage]\n 'show-info': [message: UIChatMessage]\n revise: [message: UIChatMessage]\n error: [error: { type: string; title: string; status: number }]\n }>()\n\n const chatId = defineModel<string | undefined>('chatId', {\n type: String,\n default: undefined,\n })\n\n const store = useChatbotStore(props.agentId)\n\n const { messages, chat, localChatId, activeView, chatError } =\n storeToRefs(store)\n\n // Ref to store.agentId for watchers (avoids duplicate-key with agentId prop)\n const storeAgentId = toRef(store, 'agentId')\n\n const { startNewChat, stopGeneration, regenerate, navigate } = store\n\n // Sync props → store reactively\n watchEffect(() => {\n store.baseUrl = props.baseUrl\n store.basePath = props.basePath\n store.name = props.name\n store.agentType = props.agentType\n store.userId = props.userId\n store.agentInterface = props.agentInterface\n store.agentModel = props.agentModel\n store.agentTools = props.agentTools\n store.headers = props.headers\n store.revisedAnswers = props.revisedAnswers\n store.model = props.model\n store.actionsInput = props.actions\n store.agentFileUpload = props.agentFileUpload\n store.fallbackModels = props.fallbackModels\n store.gatewayOptions = props.gatewayOptions\n })\n\n // Sync chatId v-model ↔ store (bidirectional)\n // Parent → store: if the parent provides an external chatId, push it into\n // the store so the Chat instance picks it up.\n watch(\n () => chatId.value,\n (id) => {\n if (id && id !== store.localChatId) {\n store.localChatId = id\n }\n },\n { immediate: true },\n )\n // Store → parent: keep the v-model in sync whenever the store changes\n // the chatId internally (e.g. startNewChat).\n watch(localChatId, (id) => {\n chatId.value = id\n })\n\n // Emit structured errors from chat to the parent component\n watch(chatError, (error) => {\n if (!error) {\n return\n }\n try {\n const parsedError = JSON.parse(error.message) as {\n type: string\n title: string\n status: number\n }\n emit('error', parsedError)\n } catch {\n // ignore non-JSON errors\n }\n })\n\n // ui\n const isReasoningAgent = computed(() => props.agentType === 'reasoning')\n const useColorsForAgentHeader = computed(\n () => props.agentInterface?.useColorsForAgentHeader,\n )\n const themeClass = computed(() => {\n let theme = props.agentInterface?.theme\n if (!theme || theme === 'auto') {\n theme = props.systemTheme\n }\n if (!theme) {\n return ['theme']\n }\n return ['theme', `theme--${theme}`]\n })\n const mainColor = computed(() => props.agentInterface?.mainColor)\n const contrastColor = computed(() =>\n resolveContrastColor(props.agentInterface?.textColor, mainColor.value),\n )\n const footerMessage = useLocalizedString(\n () => props.agentInterface?.footerMessage,\n )\n const title = computed(() => {\n if (activeView.value === 'conversations') {\n return $t('label.conversations')\n }\n if (activeView.value === 'profile') {\n return $t('label.profile')\n }\n return props.name\n })\n\n // state\n const isReady = computed(() => chat.value.status === 'ready')\n const activeMessage = computed(() => {\n return messages.value?.[messages.value.length - 1]\n })\n\n // expose\n defineExpose({\n startNewChat,\n regenerate,\n stopGeneration,\n })\n\n // load chat, conversations and feedbacks on agent or chat change\n watch(\n [storeAgentId, localChatId],\n async ([newAgentId, newChatId]) => {\n await store.initialize(newAgentId, newChatId)\n },\n {\n immediate: true,\n },\n )\n // update initial message\n watch(\n () => props.agentInterface?.initialMessage,\n () => {\n if (\n chat.value.messages.length === 1 &&\n chat.value.messages[0].role === 'assistant'\n ) {\n chat.value.messages = []\n }\n },\n { deep: true },\n )\n // load conversations when navigating to conversations view\n watch(activeView, (newView) => {\n if (newView === 'conversations') {\n store.loadConversations(storeAgentId.value)\n }\n })\n // emit message updates for up-to-date context in parent components\n watch(\n activeMessage,\n (message) => {\n if (message) {\n emit('message-update', message)\n }\n },\n {\n deep: true,\n immediate: true,\n },\n )\n</script>\n\n<template>\n <div class=\"pk-chatbot\" :class=\"themeClass\">\n <!-- #region title -->\n <div\n class=\"pk-chatbot__header\"\n :style=\"\n useColorsForAgentHeader\n ? {\n backgroundColor: mainColor,\n }\n : undefined\n \">\n <div class=\"pk-chatbot__header-start\">\n <template v-if=\"activeView !== 'chat'\">\n <VvButton\n v-bind=\"{\n modifiers: useColorsForAgentHeader\n ? `action-quiet-${contrastColor}`\n : 'action-quiet',\n icon: 'ri:arrow-left-s-line',\n title: $t('action.goBack'),\n }\"\n @click=\"navigate('chat')\" />\n <VvIcon\n name=\"ri:history-line\"\n class=\"pk-chatbot__nav-icon\"\n :style=\"\n useColorsForAgentHeader\n ? {\n color: contrastColor,\n }\n : undefined\n \" />\n </template>\n <PkAvatar\n v-else\n modifiers=\"surface ring shrink-0\"\n class=\"pk-chatbot__avatar\"\n :name\n :img-src=\"agentInterface?.logo\" />\n <strong\n class=\"pk-chatbot__title\"\n :title=\"title\"\n :style=\"\n useColorsForAgentHeader\n ? {\n color: contrastColor,\n }\n : undefined\n \">\n {{ title }}\n </strong>\n </div>\n <VvButtonGroup class=\"pk-chatbot__header-end\" modifiers=\"compact\">\n <slot\n name=\"header-actions\"\n v-bind=\"{\n mainColor,\n useColorsForAgentHeader,\n contrastColor,\n startNewChat,\n stopGeneration,\n }\" />\n <VvDropdown\n v-bind=\"{\n placement: 'bottom-end',\n modifiers: 'menu',\n flip: true,\n offset: 3,\n }\">\n <VvButton\n v-bind=\"{\n modifiers: useColorsForAgentHeader\n ? `action-quiet-${contrastColor}`\n : 'action-quiet',\n icon: 'ri:more-2-fill',\n disabled: !isReady,\n title: $t('action.moreActions'),\n }\" />\n <template #items>\n <VvDropdownAction @click=\"startNewChat()\">\n <VvIcon name=\"ri:edit-box-line\" />\n {{ $t('action.startNewChat') }}\n </VvDropdownAction>\n <VvDropdownAction\n v-if=\"!isReasoningAgent\"\n @click=\"navigate('conversations')\">\n <VvIcon name=\"ri:history-line\" />\n {{ $t('action.viewRecentChats') }}\n </VvDropdownAction>\n </template>\n </VvDropdown>\n <slot\n name=\"actions\"\n v-bind=\"{\n mainColor,\n useColorsForAgentHeader,\n contrastColor,\n startNewChat,\n stopGeneration,\n }\" />\n </VvButtonGroup>\n </div>\n <!-- #endregion -->\n\n <div v-if=\"isReasoningAgent\">\n <div class=\"pk-chatbot__warning-body\">\n <VvAlert modifiers=\"callout\">\n <div class=\"pk-chatbot__warning-header\">\n <VvIcon\n name=\"ri:alert-line\"\n class=\"pk-chatbot__warning-icon\" />\n <strong class=\"pk-chatbot__warning-title\">\n {{ $t('message.warning') }}\n </strong>\n </div>\n <p class=\"pk-chatbot__warning-text\">\n {{ $t('message.reasoningAgent') }}\n </p>\n </VvAlert>\n </div>\n </div>\n\n <!-- #region views -->\n <PkChatbotViewChat\n v-if=\"activeView === 'chat'\"\n :agent-id\n @show-info=\"emit('show-info', $event)\"\n @revise=\"emit('revise', $event)\">\n <template\n v-for=\"slotName in Object.keys(slots)\"\n #[slotName]=\"slotData\"\n ><slot :name=\"slotName\" v-bind=\"slotData\"\n /></template>\n </PkChatbotViewChat>\n <PkChatbotViewConversations\n v-else-if=\"activeView === 'conversations'\"\n :agent-id>\n <template\n v-for=\"slotName in Object.keys(slots)\"\n #[slotName]=\"slotData\"\n ><slot :name=\"slotName\" v-bind=\"slotData\"\n /></template>\n </PkChatbotViewConversations>\n <PkChatbotViewProfile v-else :agent-id>\n <template\n v-for=\"slotName in Object.keys(slots)\"\n #[slotName]=\"slotData\"\n ><slot :name=\"slotName\" v-bind=\"slotData\"\n /></template>\n </PkChatbotViewProfile>\n <!-- #endregion -->\n\n <!-- #region footer -->\n <div v-if=\"footerMessage\" class=\"pk-chatbot__footer\">\n <PkStreamingMarkdown :markdown=\"footerMessage\" class=\"wysiwyg\" />\n </div>\n <!-- #endregion -->\n </div>\n</template>\n\n<style lang=\"scss\">\n .pk-chatbot {\n display: flex;\n flex-direction: column;\n position: relative;\n height: 100%;\n background-color: var(--color-surface);\n\n &__header {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex;\n justify-content: space-between;\n gap: var(--spacing-14);\n background-color: var(--color-surface-1);\n padding: var(--spacing-14);\n border-bottom: 1px solid var(--color-surface-4);\n }\n\n &__header-start {\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n min-width: 0;\n }\n\n &__nav-icon {\n font-size: var(--text-18);\n }\n\n &__avatar {\n width: var(--spacing-24);\n height: var(--spacing-24);\n }\n\n &__title {\n font-size: var(--text-16);\n font-weight: 700;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__header-end {\n flex-shrink: 0;\n }\n\n &__warning-body {\n padding: var(--spacing-md);\n border-bottom: 1px solid var(--color-surface-4);\n }\n\n &__warning-header {\n display: flex;\n align-items: center;\n gap: var(--spacing-4);\n margin-bottom: var(--spacing-4);\n }\n\n &__warning-icon {\n width: var(--spacing-16);\n height: var(--spacing-16);\n }\n\n &__warning-title {\n font-weight: 600;\n font-size: var(--text-14);\n }\n\n &__warning-text {\n font-size: var(--text-12);\n color: var(--color-word-3);\n }\n\n &__footer {\n padding: var(--spacing-md);\n border-top: 1px solid var(--color-surface-4);\n text-align: center;\n font-size: var(--text-12);\n color: var(--color-word-2);\n }\n }\n</style>\n","<script setup lang=\"ts\">\n import { computed, toRef, watch, watchEffect, useSlots } from 'vue'\n import { storeToRefs } from 'pinia'\n import { useI18n } from 'vue-i18n'\n import type {\n AgentInterface,\n AgentModel,\n AgentFileUpload,\n AgentGatewayOptions,\n ChatMessageActions,\n RevisedAnswer,\n UIChatMessage,\n AgentTools,\n } from 'models'\n import { useChatbotStore } from 'composables'\n import PkAvatar from './PkAvatar.vue'\n import PkChatbotViewChat from './PkChatbotViewChat.vue'\n import PkChatbotViewConversations from './PkChatbotViewConversations.vue'\n import PkChatbotViewProfile from './PkChatbotViewProfile.vue'\n import PkStreamingMarkdown from './PkStreamingMarkdown.vue'\n import { resolveContrastColor } from './utils'\n import { useLocalizedString } from '../composables/useLocalizedString'\n\n // Captured in script setup to avoid TS7022 circular inference in template\n const slots = useSlots()\n\n const { t: $t } = useI18n({\n useScope: 'global',\n })\n\n const props = defineProps<{\n baseUrl: string\n basePath?: string\n agentId: string\n agentType?: 'reasoning' | 'chat'\n userId?: string\n name?: string\n model?: string\n agentModel?: AgentModel\n agentTools?: AgentTools\n agentInterface?: AgentInterface\n actions?: ChatMessageActions[]\n revisedAnswers?: RevisedAnswer[]\n headers?: Record<string, string>\n systemTheme?: 'light' | 'dark'\n agentFileUpload?: AgentFileUpload\n fallbackModels?: string[]\n gatewayOptions?: Partial<AgentGatewayOptions>\n }>()\n const emit = defineEmits<{\n 'message-update': [message: UIChatMessage]\n 'show-info': [message: UIChatMessage]\n revise: [message: UIChatMessage]\n error: [error: { type: string; title: string; status: number }]\n }>()\n\n const chatId = defineModel<string | undefined>('chatId', {\n type: String,\n default: undefined,\n })\n\n const store = useChatbotStore(props.agentId)\n\n const { messages, chat, localChatId, activeView, chatError } =\n storeToRefs(store)\n\n // Ref to store.agentId for watchers (avoids duplicate-key with agentId prop)\n const storeAgentId = toRef(store, 'agentId')\n\n const { startNewChat, stopGeneration, regenerate, navigate } = store\n\n // Sync props → store reactively\n watchEffect(() => {\n store.baseUrl = props.baseUrl\n store.basePath = props.basePath\n store.name = props.name\n store.agentType = props.agentType\n store.userId = props.userId\n store.agentInterface = props.agentInterface\n store.agentModel = props.agentModel\n store.agentTools = props.agentTools\n store.headers = props.headers\n store.revisedAnswers = props.revisedAnswers\n store.model = props.model\n store.actionsInput = props.actions\n store.agentFileUpload = props.agentFileUpload\n store.fallbackModels = props.fallbackModels\n store.gatewayOptions = props.gatewayOptions\n })\n\n // Sync chatId v-model ↔ store (bidirectional)\n // Parent → store: if the parent provides an external chatId, push it into\n // the store so the Chat instance picks it up.\n watch(\n () => chatId.value,\n (id) => {\n if (id && id !== store.localChatId) {\n store.localChatId = id\n }\n },\n { immediate: true },\n )\n // Store → parent: keep the v-model in sync whenever the store changes\n // the chatId internally (e.g. startNewChat).\n watch(localChatId, (id) => {\n chatId.value = id\n })\n\n // Emit structured errors from chat to the parent component\n watch(chatError, (error) => {\n if (!error) {\n return\n }\n try {\n const parsedError = JSON.parse(error.message) as {\n type: string\n title: string\n status: number\n }\n emit('error', parsedError)\n } catch {\n // ignore non-JSON errors\n }\n })\n\n // ui\n const isReasoningAgent = computed(() => props.agentType === 'reasoning')\n const useColorsForAgentHeader = computed(\n () => props.agentInterface?.useColorsForAgentHeader,\n )\n const themeClass = computed(() => {\n let theme = props.agentInterface?.theme\n if (!theme || theme === 'auto') {\n theme = props.systemTheme\n }\n if (!theme) {\n return ['theme']\n }\n return ['theme', `theme--${theme}`]\n })\n const mainColor = computed(() => props.agentInterface?.mainColor)\n const contrastColor = computed(() =>\n resolveContrastColor(props.agentInterface?.textColor, mainColor.value),\n )\n const footerMessage = useLocalizedString(\n () => props.agentInterface?.footerMessage,\n )\n const title = computed(() => {\n if (activeView.value === 'conversations') {\n return $t('label.conversations')\n }\n if (activeView.value === 'profile') {\n return $t('label.profile')\n }\n return props.name\n })\n\n // state\n const isReady = computed(() => chat.value.status === 'ready')\n const activeMessage = computed(() => {\n return messages.value?.[messages.value.length - 1]\n })\n\n // expose\n defineExpose({\n startNewChat,\n regenerate,\n stopGeneration,\n })\n\n // load chat, conversations and feedbacks on agent or chat change\n watch(\n [storeAgentId, localChatId],\n async ([newAgentId, newChatId]) => {\n await store.initialize(newAgentId, newChatId)\n },\n {\n immediate: true,\n },\n )\n // update initial message\n watch(\n () => props.agentInterface?.initialMessage,\n () => {\n if (\n chat.value.messages.length === 1 &&\n chat.value.messages[0].role === 'assistant'\n ) {\n chat.value.messages = []\n }\n },\n { deep: true },\n )\n // load conversations when navigating to conversations view\n watch(activeView, (newView) => {\n if (newView === 'conversations') {\n store.loadConversations(storeAgentId.value)\n }\n })\n // emit message updates for up-to-date context in parent components\n watch(\n activeMessage,\n (message) => {\n if (message) {\n emit('message-update', message)\n }\n },\n {\n deep: true,\n immediate: true,\n },\n )\n</script>\n\n<template>\n <div class=\"pk-chatbot\" :class=\"themeClass\">\n <!-- #region title -->\n <div\n class=\"pk-chatbot__header\"\n :style=\"\n useColorsForAgentHeader\n ? {\n backgroundColor: mainColor,\n }\n : undefined\n \">\n <div class=\"pk-chatbot__header-start\">\n <template v-if=\"activeView !== 'chat'\">\n <VvButton\n v-bind=\"{\n modifiers: useColorsForAgentHeader\n ? `action-quiet-${contrastColor}`\n : 'action-quiet',\n icon: 'ri:arrow-left-s-line',\n title: $t('action.goBack'),\n }\"\n @click=\"navigate('chat')\" />\n <VvIcon\n name=\"ri:history-line\"\n class=\"pk-chatbot__nav-icon\"\n :style=\"\n useColorsForAgentHeader\n ? {\n color: contrastColor,\n }\n : undefined\n \" />\n </template>\n <PkAvatar\n v-else\n modifiers=\"surface ring shrink-0\"\n class=\"pk-chatbot__avatar\"\n :name\n :img-src=\"agentInterface?.logo\" />\n <strong\n class=\"pk-chatbot__title\"\n :title=\"title\"\n :style=\"\n useColorsForAgentHeader\n ? {\n color: contrastColor,\n }\n : undefined\n \">\n {{ title }}\n </strong>\n </div>\n <VvButtonGroup class=\"pk-chatbot__header-end\" modifiers=\"compact\">\n <slot\n name=\"header-actions\"\n v-bind=\"{\n mainColor,\n useColorsForAgentHeader,\n contrastColor,\n startNewChat,\n stopGeneration,\n }\" />\n <VvDropdown\n v-bind=\"{\n placement: 'bottom-end',\n modifiers: 'menu',\n flip: true,\n offset: 3,\n }\">\n <VvButton\n v-bind=\"{\n modifiers: useColorsForAgentHeader\n ? `action-quiet-${contrastColor}`\n : 'action-quiet',\n icon: 'ri:more-2-fill',\n disabled: !isReady,\n title: $t('action.moreActions'),\n }\" />\n <template #items>\n <VvDropdownAction @click=\"startNewChat()\">\n <VvIcon name=\"ri:edit-box-line\" />\n {{ $t('action.startNewChat') }}\n </VvDropdownAction>\n <VvDropdownAction\n v-if=\"!isReasoningAgent\"\n @click=\"navigate('conversations')\">\n <VvIcon name=\"ri:history-line\" />\n {{ $t('action.viewRecentChats') }}\n </VvDropdownAction>\n </template>\n </VvDropdown>\n <slot\n name=\"actions\"\n v-bind=\"{\n mainColor,\n useColorsForAgentHeader,\n contrastColor,\n startNewChat,\n stopGeneration,\n }\" />\n </VvButtonGroup>\n </div>\n <!-- #endregion -->\n\n <div v-if=\"isReasoningAgent\">\n <div class=\"pk-chatbot__warning-body\">\n <VvAlert modifiers=\"callout\">\n <div class=\"pk-chatbot__warning-header\">\n <VvIcon\n name=\"ri:alert-line\"\n class=\"pk-chatbot__warning-icon\" />\n <strong class=\"pk-chatbot__warning-title\">\n {{ $t('message.warning') }}\n </strong>\n </div>\n <p class=\"pk-chatbot__warning-text\">\n {{ $t('message.reasoningAgent') }}\n </p>\n </VvAlert>\n </div>\n </div>\n\n <!-- #region views -->\n <PkChatbotViewChat\n v-if=\"activeView === 'chat'\"\n :agent-id\n @show-info=\"emit('show-info', $event)\"\n @revise=\"emit('revise', $event)\">\n <template\n v-for=\"slotName in Object.keys(slots)\"\n #[slotName]=\"slotData\"\n ><slot :name=\"slotName\" v-bind=\"slotData\"\n /></template>\n </PkChatbotViewChat>\n <PkChatbotViewConversations\n v-else-if=\"activeView === 'conversations'\"\n :agent-id>\n <template\n v-for=\"slotName in Object.keys(slots)\"\n #[slotName]=\"slotData\"\n ><slot :name=\"slotName\" v-bind=\"slotData\"\n /></template>\n </PkChatbotViewConversations>\n <PkChatbotViewProfile v-else :agent-id>\n <template\n v-for=\"slotName in Object.keys(slots)\"\n #[slotName]=\"slotData\"\n ><slot :name=\"slotName\" v-bind=\"slotData\"\n /></template>\n </PkChatbotViewProfile>\n <!-- #endregion -->\n\n <!-- #region footer -->\n <div v-if=\"footerMessage\" class=\"pk-chatbot__footer\">\n <PkStreamingMarkdown :markdown=\"footerMessage\" class=\"wysiwyg\" />\n </div>\n <!-- #endregion -->\n </div>\n</template>\n\n<style lang=\"scss\">\n .pk-chatbot {\n display: flex;\n flex-direction: column;\n position: relative;\n height: 100%;\n background-color: var(--color-surface);\n\n &__header {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex;\n justify-content: space-between;\n gap: var(--spacing-14);\n background-color: var(--color-surface-1);\n padding: var(--spacing-14);\n border-bottom: 1px solid var(--color-surface-4);\n }\n\n &__header-start {\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n min-width: 0;\n }\n\n &__nav-icon {\n font-size: var(--text-18);\n }\n\n &__avatar {\n width: var(--spacing-24);\n height: var(--spacing-24);\n }\n\n &__title {\n font-size: var(--text-16);\n font-weight: 700;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__header-end {\n flex-shrink: 0;\n }\n\n &__warning-body {\n padding: var(--spacing-md);\n border-bottom: 1px solid var(--color-surface-4);\n }\n\n &__warning-header {\n display: flex;\n align-items: center;\n gap: var(--spacing-4);\n margin-bottom: var(--spacing-4);\n }\n\n &__warning-icon {\n width: var(--spacing-16);\n height: var(--spacing-16);\n }\n\n &__warning-title {\n font-weight: 600;\n font-size: var(--text-14);\n }\n\n &__warning-text {\n font-size: var(--text-12);\n color: var(--color-word-3);\n }\n\n &__footer {\n padding: var(--spacing-md);\n border-top: 1px solid var(--color-surface-4);\n text-align: center;\n font-size: var(--text-12);\n color: var(--color-word-2);\n }\n }\n</style>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PkChatbotError-DOkNTDsc.js","names":["$emit"],"sources":["../../../../packages/components/src/composables/useChatbotError.ts","../../../../packages/components/src/chat/PkChatbotError.vue","../../../../packages/components/src/chat/PkChatbotError.vue"],"sourcesContent":["import { computed, toValue, type MaybeRefOrGetter } from 'vue'\n\ntype ErrorCode =\n | 'context_length_exceeded'\n | 'entity-not-found'\n | 'rate-limit-exceeded'\n | 'origin-not-allowed'\n | 'credit-exhausted'\n | 'conversation-blocked'\n | 'bad request'\n | 'internal-server-error'\n\nfunction matchesCode(error: Error | undefined, code: ErrorCode): boolean {\n return error?.message?.toLowerCase().includes(code) ?? false\n}\n\nexport function useChatbotError(error: MaybeRefOrGetter<Error | undefined>) {\n const isContextWindowError = computed(() =>\n matchesCode(toValue(error), 'context_length_exceeded'),\n )\n const isNotFoundError = computed(() =>\n matchesCode(toValue(error), 'entity-not-found'),\n )\n const isRateLimitError = computed(() =>\n matchesCode(toValue(error), 'rate-limit-exceeded'),\n )\n const isOriginNotAllowedError = computed(() =>\n matchesCode(toValue(error), 'origin-not-allowed'),\n )\n const isCreditExhaustedError = computed(() =>\n matchesCode(toValue(error), 'credit-exhausted'),\n )\n const isConversationBlockedError = computed(() =>\n matchesCode(toValue(error), 'conversation-blocked'),\n )\n const isBadRequestError = computed(() =>\n matchesCode(toValue(error), 'bad request'),\n )\n const isInternalServerError = computed(() =>\n matchesCode(toValue(error), 'internal-server-error'),\n )\n\n /** Errors that trigger an automatic retry countdown */\n const isRefreshableError = computed(\n () =>\n !isContextWindowError.value &&\n !isNotFoundError.value &&\n !isOriginNotAllowedError.value &&\n !isCreditExhaustedError.value &&\n !isConversationBlockedError.value &&\n !isBadRequestError.value &&\n !isInternalServerError.value,\n )\n\n return {\n isContextWindowError,\n isNotFoundError,\n isRateLimitError,\n isOriginNotAllowedError,\n isCreditExhaustedError,\n isConversationBlockedError,\n isBadRequestError,\n isInternalServerError,\n isRefreshableError,\n }\n}\n","<script lang=\"ts\" setup>\n import { computed, onBeforeUnmount, ref, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { useChatbotError } from '../composables/useChatbotError'\n\n const props = defineProps<{\n error?: Error\n }>()\n\n const emit = defineEmits<{\n (e: 'retry'): void\n (e: 'reset'): void\n }>()\n\n const { t: $t } = useI18n({\n useScope: 'global',\n })\n\n const {\n isContextWindowError,\n isNotFoundError,\n isRateLimitError,\n isOriginNotAllowedError,\n isCreditExhaustedError,\n isConversationBlockedError,\n isBadRequestError,\n isInternalServerError,\n isRefreshableError,\n } = useChatbotError(() => props.error)\n\n const errorMessage = computed(() => {\n if (isContextWindowError.value) {\n return $t('message.chatErrorContextWindow')\n }\n if (isNotFoundError.value) {\n return $t('message.chatErrorNotFound')\n }\n if (isRateLimitError.value) {\n return $t('message.chatErrorRateLimit', {\n seconds: retryCountdown.value,\n })\n }\n if (isOriginNotAllowedError.value) {\n return $t('message.chatErrorOriginNotAllowed')\n }\n if (isCreditExhaustedError.value) {\n return $t('message.chatErrorCreditExhausted')\n }\n if (isConversationBlockedError.value) {\n return $t('message.chatErrorConversationBlocked')\n }\n if (isBadRequestError.value) {\n return $t('message.chatErrorBadRequest')\n }\n if (isInternalServerError.value) {\n return $t('message.chatErrorInternalServer')\n }\n return $t('message.chatErrorGeneric', { seconds: retryCountdown.value })\n })\n\n const retryCountdown = ref<number>(0)\n const retryTimer = ref<ReturnType<typeof setTimeout>>()\n\n watch(\n () => props.error,\n (error) => {\n if (retryTimer.value) {\n clearTimeout(retryTimer.value)\n }\n\n if (error && isRefreshableError.value) {\n retryCountdown.value = 10\n const tick = () => {\n retryCountdown.value--\n if (retryCountdown.value <= 0) {\n emit('retry')\n return\n }\n retryTimer.value = setTimeout(tick, 1000)\n }\n retryTimer.value = setTimeout(tick, 1000)\n } else {\n retryCountdown.value = 0\n }\n },\n { immediate: true },\n )\n\n onBeforeUnmount(() => {\n if (retryTimer.value) {\n clearTimeout(retryTimer.value)\n }\n })\n</script>\n\n<template>\n <div class=\"flex\">\n <VvAlert\n :modifiers=\"isRefreshableError ? 'warning' : 'danger'\"\n class=\"rounded-lg\">\n <div\n class=\"flex gap-sm items-center\"\n :class=\"\n isRefreshableError\n ? 'text-warning-darken-4'\n : 'text-danger-darken-2'\n \">\n <VvIcon\n :name=\"\n isRefreshableError\n ? 'ri:alert-line'\n : 'ri:error-warning-line'\n \"\n class=\"text-48\" />\n {{ errorMessage }}\n </div>\n <template #footer>\n <VvButton\n v-if=\"isRefreshableError\"\n icon=\"ri:reset-right-line\"\n modifiers=\"action\"\n class=\"text-12\"\n :label=\"$t('action.retryNow')\"\n @click=\"$emit('retry')\" />\n <VvButton\n v-else-if=\"\n !isOriginNotAllowedError && !isCreditExhaustedError\n \"\n icon=\"reload\"\n modifiers=\"action\"\n :label=\"$t('label.newChat')\"\n @click=\"$emit('reset')\" />\n </template>\n </VvAlert>\n </div>\n</template>\n","<script lang=\"ts\" setup>\n import { computed, onBeforeUnmount, ref, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { useChatbotError } from '../composables/useChatbotError'\n\n const props = defineProps<{\n error?: Error\n }>()\n\n const emit = defineEmits<{\n (e: 'retry'): void\n (e: 'reset'): void\n }>()\n\n const { t: $t } = useI18n({\n useScope: 'global',\n })\n\n const {\n isContextWindowError,\n isNotFoundError,\n isRateLimitError,\n isOriginNotAllowedError,\n isCreditExhaustedError,\n isConversationBlockedError,\n isBadRequestError,\n isInternalServerError,\n isRefreshableError,\n } = useChatbotError(() => props.error)\n\n const errorMessage = computed(() => {\n if (isContextWindowError.value) {\n return $t('message.chatErrorContextWindow')\n }\n if (isNotFoundError.value) {\n return $t('message.chatErrorNotFound')\n }\n if (isRateLimitError.value) {\n return $t('message.chatErrorRateLimit', {\n seconds: retryCountdown.value,\n })\n }\n if (isOriginNotAllowedError.value) {\n return $t('message.chatErrorOriginNotAllowed')\n }\n if (isCreditExhaustedError.value) {\n return $t('message.chatErrorCreditExhausted')\n }\n if (isConversationBlockedError.value) {\n return $t('message.chatErrorConversationBlocked')\n }\n if (isBadRequestError.value) {\n return $t('message.chatErrorBadRequest')\n }\n if (isInternalServerError.value) {\n return $t('message.chatErrorInternalServer')\n }\n return $t('message.chatErrorGeneric', { seconds: retryCountdown.value })\n })\n\n const retryCountdown = ref<number>(0)\n const retryTimer = ref<ReturnType<typeof setTimeout>>()\n\n watch(\n () => props.error,\n (error) => {\n if (retryTimer.value) {\n clearTimeout(retryTimer.value)\n }\n\n if (error && isRefreshableError.value) {\n retryCountdown.value = 10\n const tick = () => {\n retryCountdown.value--\n if (retryCountdown.value <= 0) {\n emit('retry')\n return\n }\n retryTimer.value = setTimeout(tick, 1000)\n }\n retryTimer.value = setTimeout(tick, 1000)\n } else {\n retryCountdown.value = 0\n }\n },\n { immediate: true },\n )\n\n onBeforeUnmount(() => {\n if (retryTimer.value) {\n clearTimeout(retryTimer.value)\n }\n })\n</script>\n\n<template>\n <div class=\"flex\">\n <VvAlert\n :modifiers=\"isRefreshableError ? 'warning' : 'danger'\"\n class=\"rounded-lg\">\n <div\n class=\"flex gap-sm items-center\"\n :class=\"\n isRefreshableError\n ? 'text-warning-darken-4'\n : 'text-danger-darken-2'\n \">\n <VvIcon\n :name=\"\n isRefreshableError\n ? 'ri:alert-line'\n : 'ri:error-warning-line'\n \"\n class=\"text-48\" />\n {{ errorMessage }}\n </div>\n <template #footer>\n <VvButton\n v-if=\"isRefreshableError\"\n icon=\"ri:reset-right-line\"\n modifiers=\"action\"\n class=\"text-12\"\n :label=\"$t('action.retryNow')\"\n @click=\"$emit('retry')\" />\n <VvButton\n v-else-if=\"\n !isOriginNotAllowedError && !isCreditExhaustedError\n \"\n icon=\"reload\"\n modifiers=\"action\"\n :label=\"$t('label.newChat')\"\n @click=\"$emit('reset')\" />\n </template>\n </VvAlert>\n </div>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PkChatbotError-CBQaRNse.js","names":["$emit"],"sources":["../../../../packages/components/src/composables/useChatbotError.ts","../../../../packages/components/src/chat/PkChatbotError.vue","../../../../packages/components/src/chat/PkChatbotError.vue"],"sourcesContent":["import { computed, toValue, type MaybeRefOrGetter } from 'vue'\n\ntype ErrorCode =\n | 'context_length_exceeded'\n | 'entity-not-found'\n | 'rate-limit-exceeded'\n | 'origin-not-allowed'\n | 'credit-exhausted'\n | 'conversation-blocked'\n | 'bad request'\n | 'internal-server-error'\n\nfunction matchesCode(error: Error | undefined, code: ErrorCode): boolean {\n return error?.message?.toLowerCase().includes(code) ?? false\n}\n\nexport function useChatbotError(error: MaybeRefOrGetter<Error | undefined>) {\n const isContextWindowError = computed(() =>\n matchesCode(toValue(error), 'context_length_exceeded'),\n )\n const isNotFoundError = computed(() =>\n matchesCode(toValue(error), 'entity-not-found'),\n )\n const isRateLimitError = computed(() =>\n matchesCode(toValue(error), 'rate-limit-exceeded'),\n )\n const isOriginNotAllowedError = computed(() =>\n matchesCode(toValue(error), 'origin-not-allowed'),\n )\n const isCreditExhaustedError = computed(() =>\n matchesCode(toValue(error), 'credit-exhausted'),\n )\n const isConversationBlockedError = computed(() =>\n matchesCode(toValue(error), 'conversation-blocked'),\n )\n const isBadRequestError = computed(() =>\n matchesCode(toValue(error), 'bad request'),\n )\n const isInternalServerError = computed(() =>\n matchesCode(toValue(error), 'internal-server-error'),\n )\n\n /** Errors that trigger an automatic retry countdown */\n const isRefreshableError = computed(\n () =>\n !isContextWindowError.value &&\n !isNotFoundError.value &&\n !isOriginNotAllowedError.value &&\n !isCreditExhaustedError.value &&\n !isConversationBlockedError.value &&\n !isBadRequestError.value &&\n !isInternalServerError.value,\n )\n\n return {\n isContextWindowError,\n isNotFoundError,\n isRateLimitError,\n isOriginNotAllowedError,\n isCreditExhaustedError,\n isConversationBlockedError,\n isBadRequestError,\n isInternalServerError,\n isRefreshableError,\n }\n}\n","<script lang=\"ts\" setup>\n import { computed, onBeforeUnmount, ref, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { useChatbotError } from '../composables/useChatbotError'\n\n const props = defineProps<{\n error?: Error\n }>()\n\n const emit = defineEmits<{\n (e: 'retry'): void\n (e: 'reset'): void\n }>()\n\n const { t: $t } = useI18n({\n useScope: 'global',\n })\n\n const {\n isContextWindowError,\n isNotFoundError,\n isRateLimitError,\n isOriginNotAllowedError,\n isCreditExhaustedError,\n isConversationBlockedError,\n isBadRequestError,\n isInternalServerError,\n isRefreshableError,\n } = useChatbotError(() => props.error)\n\n const errorMessage = computed(() => {\n if (isContextWindowError.value) {\n return $t('message.chatErrorContextWindow')\n }\n if (isNotFoundError.value) {\n return $t('message.chatErrorNotFound')\n }\n if (isRateLimitError.value) {\n return $t('message.chatErrorRateLimit', {\n seconds: retryCountdown.value,\n })\n }\n if (isOriginNotAllowedError.value) {\n return $t('message.chatErrorOriginNotAllowed')\n }\n if (isCreditExhaustedError.value) {\n return $t('message.chatErrorCreditExhausted')\n }\n if (isConversationBlockedError.value) {\n return $t('message.chatErrorConversationBlocked')\n }\n if (isBadRequestError.value) {\n return $t('message.chatErrorBadRequest')\n }\n if (isInternalServerError.value) {\n return $t('message.chatErrorInternalServer')\n }\n return $t('message.chatErrorGeneric', { seconds: retryCountdown.value })\n })\n\n const retryCountdown = ref<number>(0)\n const retryTimer = ref<ReturnType<typeof setTimeout>>()\n\n watch(\n () => props.error,\n (error) => {\n if (retryTimer.value) {\n clearTimeout(retryTimer.value)\n }\n\n if (error && isRefreshableError.value) {\n retryCountdown.value = 10\n const tick = () => {\n retryCountdown.value--\n if (retryCountdown.value <= 0) {\n emit('retry')\n return\n }\n retryTimer.value = setTimeout(tick, 1000)\n }\n retryTimer.value = setTimeout(tick, 1000)\n } else {\n retryCountdown.value = 0\n }\n },\n { immediate: true },\n )\n\n onBeforeUnmount(() => {\n if (retryTimer.value) {\n clearTimeout(retryTimer.value)\n }\n })\n</script>\n\n<template>\n <div class=\"flex\">\n <VvAlert\n :modifiers=\"isRefreshableError ? 'warning' : 'danger'\"\n class=\"rounded-lg\">\n <div\n class=\"flex gap-sm items-center\"\n :class=\"\n isRefreshableError\n ? 'text-warning-darken-4'\n : 'text-danger-darken-2'\n \">\n <VvIcon\n :name=\"\n isRefreshableError\n ? 'ri:alert-line'\n : 'ri:error-warning-line'\n \"\n class=\"text-48\" />\n {{ errorMessage }}\n </div>\n <template #footer>\n <VvButton\n v-if=\"isRefreshableError\"\n icon=\"ri:reset-right-line\"\n modifiers=\"action\"\n class=\"text-12\"\n :label=\"$t('action.retryNow')\"\n @click=\"$emit('retry')\" />\n <VvButton\n v-else-if=\"\n !isOriginNotAllowedError && !isCreditExhaustedError\n \"\n icon=\"reload\"\n modifiers=\"action\"\n :label=\"$t('label.newChat')\"\n @click=\"$emit('reset')\" />\n </template>\n </VvAlert>\n </div>\n</template>\n","<script lang=\"ts\" setup>\n import { computed, onBeforeUnmount, ref, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { useChatbotError } from '../composables/useChatbotError'\n\n const props = defineProps<{\n error?: Error\n }>()\n\n const emit = defineEmits<{\n (e: 'retry'): void\n (e: 'reset'): void\n }>()\n\n const { t: $t } = useI18n({\n useScope: 'global',\n })\n\n const {\n isContextWindowError,\n isNotFoundError,\n isRateLimitError,\n isOriginNotAllowedError,\n isCreditExhaustedError,\n isConversationBlockedError,\n isBadRequestError,\n isInternalServerError,\n isRefreshableError,\n } = useChatbotError(() => props.error)\n\n const errorMessage = computed(() => {\n if (isContextWindowError.value) {\n return $t('message.chatErrorContextWindow')\n }\n if (isNotFoundError.value) {\n return $t('message.chatErrorNotFound')\n }\n if (isRateLimitError.value) {\n return $t('message.chatErrorRateLimit', {\n seconds: retryCountdown.value,\n })\n }\n if (isOriginNotAllowedError.value) {\n return $t('message.chatErrorOriginNotAllowed')\n }\n if (isCreditExhaustedError.value) {\n return $t('message.chatErrorCreditExhausted')\n }\n if (isConversationBlockedError.value) {\n return $t('message.chatErrorConversationBlocked')\n }\n if (isBadRequestError.value) {\n return $t('message.chatErrorBadRequest')\n }\n if (isInternalServerError.value) {\n return $t('message.chatErrorInternalServer')\n }\n return $t('message.chatErrorGeneric', { seconds: retryCountdown.value })\n })\n\n const retryCountdown = ref<number>(0)\n const retryTimer = ref<ReturnType<typeof setTimeout>>()\n\n watch(\n () => props.error,\n (error) => {\n if (retryTimer.value) {\n clearTimeout(retryTimer.value)\n }\n\n if (error && isRefreshableError.value) {\n retryCountdown.value = 10\n const tick = () => {\n retryCountdown.value--\n if (retryCountdown.value <= 0) {\n emit('retry')\n return\n }\n retryTimer.value = setTimeout(tick, 1000)\n }\n retryTimer.value = setTimeout(tick, 1000)\n } else {\n retryCountdown.value = 0\n }\n },\n { immediate: true },\n )\n\n onBeforeUnmount(() => {\n if (retryTimer.value) {\n clearTimeout(retryTimer.value)\n }\n })\n</script>\n\n<template>\n <div class=\"flex\">\n <VvAlert\n :modifiers=\"isRefreshableError ? 'warning' : 'danger'\"\n class=\"rounded-lg\">\n <div\n class=\"flex gap-sm items-center\"\n :class=\"\n isRefreshableError\n ? 'text-warning-darken-4'\n : 'text-danger-darken-2'\n \">\n <VvIcon\n :name=\"\n isRefreshableError\n ? 'ri:alert-line'\n : 'ri:error-warning-line'\n \"\n class=\"text-48\" />\n {{ errorMessage }}\n </div>\n <template #footer>\n <VvButton\n v-if=\"isRefreshableError\"\n icon=\"ri:reset-right-line\"\n modifiers=\"action\"\n class=\"text-12\"\n :label=\"$t('action.retryNow')\"\n @click=\"$emit('retry')\" />\n <VvButton\n v-else-if=\"\n !isOriginNotAllowedError && !isCreditExhaustedError\n \"\n icon=\"reload\"\n modifiers=\"action\"\n :label=\"$t('label.newChat')\"\n @click=\"$emit('reset')\" />\n </template>\n </VvAlert>\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { m as e, v as t } from "./schemas-sa2dDEGb.js";
|
|
2
|
+
import { t as n } from "./index.es-CikrfdXD.js";
|
|
3
|
+
import { Transition as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createVNode as c, defineComponent as l, isRef as u, openBlock as d, toDisplayString as f, unref as p, withCtx as m, withModifiers as h } from "vue";
|
|
4
|
+
import { VvAlert as g, VvButton as _, VvButtonGroup as v, VvIcon as y } from "@volverjs/ui-vue/components";
|
|
5
|
+
import { useI18n as b } from "vue-i18n";
|
|
6
|
+
//#region ../../packages/components/src/chat/PkChatbotFeedbackForm.vue?vue&type=script&setup=true&lang.ts
|
|
7
|
+
var x = { class: "border border-surface-3 rounded-xl w-full overflow-hidden" }, S = { class: "px-sm py-6 bg-surface-1 text-12 border-b border-surface-3 text-word-3 flex items-center gap-8 min-h-40" }, C = { class: "font-bold" }, w = {
|
|
8
|
+
key: 0,
|
|
9
|
+
class: "p-sm"
|
|
10
|
+
}, T = { class: "flex justify-end" }, E = {
|
|
11
|
+
key: 1,
|
|
12
|
+
class: "p-sm"
|
|
13
|
+
}, D = { class: "flex items-center gap-sm" }, O = { class: "font-semibold block text-success" }, k = { class: "text-word-3" }, A = /* @__PURE__ */ l({
|
|
14
|
+
__name: "PkChatbotFeedbackForm",
|
|
15
|
+
props: {
|
|
16
|
+
submitted: { type: Boolean },
|
|
17
|
+
loading: { type: Boolean },
|
|
18
|
+
error: {}
|
|
19
|
+
},
|
|
20
|
+
emits: ["submit", "close"],
|
|
21
|
+
setup(l, { emit: A }) {
|
|
22
|
+
let { t: j } = b({ useScope: "global" }), M = A, { VvForm: N, VvFormField: P, formData: F } = n(e({ comment: t().min(1).default("") }), { lazyLoad: !0 }), I = (e) => {
|
|
23
|
+
M("submit", e.comment);
|
|
24
|
+
};
|
|
25
|
+
return (e, t) => {
|
|
26
|
+
let n = y, b = _, A = g, M = v;
|
|
27
|
+
return d(), o("div", x, [s("div", S, [
|
|
28
|
+
c(n, {
|
|
29
|
+
name: "ri:feedback-line",
|
|
30
|
+
class: "text-16"
|
|
31
|
+
}),
|
|
32
|
+
s("strong", C, f(p(j)("action.feedback")), 1),
|
|
33
|
+
c(b, {
|
|
34
|
+
icon: "ri:close-line",
|
|
35
|
+
modifiers: "action-quiet-small",
|
|
36
|
+
title: p(j)("action.close"),
|
|
37
|
+
class: "ml-auto",
|
|
38
|
+
onClick: t[0] ||= h((t) => e.$emit("close"), ["stop"])
|
|
39
|
+
}, null, 8, ["title"])
|
|
40
|
+
]), c(r, { mode: "out-in" }, {
|
|
41
|
+
default: m(() => [l.submitted ? (d(), o("div", E, [s("div", D, [c(n, {
|
|
42
|
+
name: "ri:checkbox-circle-line",
|
|
43
|
+
class: "text-24 text-success"
|
|
44
|
+
}), s("div", null, [s("strong", O, f(p(j)("message.feedbackSubmittedTitle")), 1), s("p", k, f(p(j)("message.feedbackSubmittedMessage")), 1)])])])) : (d(), o("div", w, [l.error ? (d(), i(A, {
|
|
45
|
+
key: 0,
|
|
46
|
+
modifiers: "danger",
|
|
47
|
+
class: "mb-sm",
|
|
48
|
+
label: l.error
|
|
49
|
+
}, null, 8, ["label"])) : a("", !0), c(p(N), {
|
|
50
|
+
modelValue: p(F),
|
|
51
|
+
"onUpdate:modelValue": t[2] ||= (e) => u(F) ? F.value = e : null,
|
|
52
|
+
onSubmit: I
|
|
53
|
+
}, {
|
|
54
|
+
default: m(() => [c(p(P), {
|
|
55
|
+
name: "comment",
|
|
56
|
+
type: "textarea",
|
|
57
|
+
rows: "3",
|
|
58
|
+
label: p(j)("label.comment"),
|
|
59
|
+
placeholder: p(j)("placeholder.comment"),
|
|
60
|
+
modifiers: "compact no-label",
|
|
61
|
+
class: "mb-sm"
|
|
62
|
+
}, null, 8, ["label", "placeholder"]), s("div", T, [c(M, null, {
|
|
63
|
+
default: m(() => [c(b, {
|
|
64
|
+
type: "button",
|
|
65
|
+
modifiers: "secondary",
|
|
66
|
+
label: p(j)("action.close"),
|
|
67
|
+
onClick: t[1] ||= (t) => e.$emit("close")
|
|
68
|
+
}, null, 8, ["label"]), c(b, {
|
|
69
|
+
type: "submit",
|
|
70
|
+
modifiers: "primary",
|
|
71
|
+
loading: l.loading,
|
|
72
|
+
disabled: l.loading,
|
|
73
|
+
label: p(j)("action.submit")
|
|
74
|
+
}, null, 8, [
|
|
75
|
+
"loading",
|
|
76
|
+
"disabled",
|
|
77
|
+
"label"
|
|
78
|
+
])]),
|
|
79
|
+
_: 1
|
|
80
|
+
})])]),
|
|
81
|
+
_: 1
|
|
82
|
+
}, 8, ["modelValue"])]))]),
|
|
83
|
+
_: 1
|
|
84
|
+
})]);
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
//#endregion
|
|
89
|
+
export { A as t };
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=PkChatbotFeedbackForm-C5QLJeUc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PkChatbotFeedbackForm-C5QLJeUc.js","names":["$emit"],"sources":["../../../../packages/components/src/chat/PkChatbotFeedbackForm.vue","../../../../packages/components/src/chat/PkChatbotFeedbackForm.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { useI18n } from 'vue-i18n'\n import { useForm } from '@volverjs/form-vue'\n import * as z from 'zod'\n\n const { t: $t } = useI18n({ useScope: 'global' })\n\n defineProps<{\n submitted?: boolean\n loading?: boolean\n error?: string\n }>()\n\n const emit = defineEmits<{\n submit: [comment: string]\n close: []\n }>()\n\n const FeedbackFormSchema = z.object({\n comment: z.string().min(1).default(''),\n })\n\n const { VvForm, VvFormField, formData } = useForm(FeedbackFormSchema, {\n lazyLoad: true,\n })\n\n const onSubmit = (data: { comment: string }) => {\n emit('submit', data.comment)\n }\n</script>\n\n<template>\n <div class=\"border border-surface-3 rounded-xl w-full overflow-hidden\">\n <div\n class=\"px-sm py-6 bg-surface-1 text-12 border-b border-surface-3 text-word-3 flex items-center gap-8 min-h-40\">\n <VvIcon name=\"ri:feedback-line\" class=\"text-16\" />\n <strong class=\"font-bold\">{{ $t('action.feedback') }}</strong>\n <VvButton\n icon=\"ri:close-line\"\n modifiers=\"action-quiet-small\"\n :title=\"$t('action.close')\"\n class=\"ml-auto\"\n @click.stop=\"$emit('close')\" />\n </div>\n <Transition mode=\"out-in\">\n <div v-if=\"!submitted\" class=\"p-sm\">\n <VvAlert\n v-if=\"error\"\n modifiers=\"danger\"\n class=\"mb-sm\"\n :label=\"error\" />\n <VvForm v-model=\"formData\" @submit=\"onSubmit\">\n <VvFormField\n name=\"comment\"\n type=\"textarea\"\n rows=\"3\"\n :label=\"$t('label.comment')\"\n :placeholder=\"$t('placeholder.comment')\"\n modifiers=\"compact no-label\"\n class=\"mb-sm\" />\n <div class=\"flex justify-end\">\n <VvButtonGroup>\n <VvButton\n type=\"button\"\n modifiers=\"secondary\"\n :label=\"$t('action.close')\"\n @click=\"$emit('close')\" />\n <VvButton\n type=\"submit\"\n modifiers=\"primary\"\n :loading\n :disabled=\"loading\"\n :label=\"$t('action.submit')\" />\n </VvButtonGroup>\n </div>\n </VvForm>\n </div>\n <div v-else class=\"p-sm\">\n <div class=\"flex items-center gap-sm\">\n <VvIcon\n name=\"ri:checkbox-circle-line\"\n class=\"text-24 text-success\" />\n <div>\n <strong class=\"font-semibold block text-success\">\n {{ $t('message.feedbackSubmittedTitle') }}\n </strong>\n <p class=\"text-word-3\">\n {{ $t('message.feedbackSubmittedMessage') }}\n </p>\n </div>\n </div>\n </div>\n </Transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\n import { useI18n } from 'vue-i18n'\n import { useForm } from '@volverjs/form-vue'\n import * as z from 'zod'\n\n const { t: $t } = useI18n({ useScope: 'global' })\n\n defineProps<{\n submitted?: boolean\n loading?: boolean\n error?: string\n }>()\n\n const emit = defineEmits<{\n submit: [comment: string]\n close: []\n }>()\n\n const FeedbackFormSchema = z.object({\n comment: z.string().min(1).default(''),\n })\n\n const { VvForm, VvFormField, formData } = useForm(FeedbackFormSchema, {\n lazyLoad: true,\n })\n\n const onSubmit = (data: { comment: string }) => {\n emit('submit', data.comment)\n }\n</script>\n\n<template>\n <div class=\"border border-surface-3 rounded-xl w-full overflow-hidden\">\n <div\n class=\"px-sm py-6 bg-surface-1 text-12 border-b border-surface-3 text-word-3 flex items-center gap-8 min-h-40\">\n <VvIcon name=\"ri:feedback-line\" class=\"text-16\" />\n <strong class=\"font-bold\">{{ $t('action.feedback') }}</strong>\n <VvButton\n icon=\"ri:close-line\"\n modifiers=\"action-quiet-small\"\n :title=\"$t('action.close')\"\n class=\"ml-auto\"\n @click.stop=\"$emit('close')\" />\n </div>\n <Transition mode=\"out-in\">\n <div v-if=\"!submitted\" class=\"p-sm\">\n <VvAlert\n v-if=\"error\"\n modifiers=\"danger\"\n class=\"mb-sm\"\n :label=\"error\" />\n <VvForm v-model=\"formData\" @submit=\"onSubmit\">\n <VvFormField\n name=\"comment\"\n type=\"textarea\"\n rows=\"3\"\n :label=\"$t('label.comment')\"\n :placeholder=\"$t('placeholder.comment')\"\n modifiers=\"compact no-label\"\n class=\"mb-sm\" />\n <div class=\"flex justify-end\">\n <VvButtonGroup>\n <VvButton\n type=\"button\"\n modifiers=\"secondary\"\n :label=\"$t('action.close')\"\n @click=\"$emit('close')\" />\n <VvButton\n type=\"submit\"\n modifiers=\"primary\"\n :loading\n :disabled=\"loading\"\n :label=\"$t('action.submit')\" />\n </VvButtonGroup>\n </div>\n </VvForm>\n </div>\n <div v-else class=\"p-sm\">\n <div class=\"flex items-center gap-sm\">\n <VvIcon\n name=\"ri:checkbox-circle-line\"\n class=\"text-24 text-success\" />\n <div>\n <strong class=\"font-semibold block text-success\">\n {{ $t('message.feedbackSubmittedTitle') }}\n </strong>\n <p class=\"text-word-3\">\n {{ $t('message.feedbackSubmittedMessage') }}\n </p>\n </div>\n </div>\n </div>\n </Transition>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAKI,IAAM,EAAE,GAAG,MAAO,EAAQ,EAAE,UAAU,UAAU,CAAA,EAQ1C,IAAO,GASP,EAAE,WAAQ,gBAAa,gBAAa,EAJf,EAAS,EAChC,SAAS,GAAU,CAAC,IAAI,EAAE,CAAC,QAAQ,GAAG,EACzC,CAAA,EAEqE,EAClE,UAAU,IACb,CAAA,EAEK,KAAY,MAA8B;AAC5C,KAAK,UAAU,EAAK,QAAO;;;;eAK/B,EA6DM,OA7DN,GA6DM,CA5DF,EAUM,OAVN,GAUM;IARF,EAAkD,GAAA;KAA1C,MAAK;KAAmB,OAAM;;IACtC,EAA8D,UAA9D,GAA8D,EAAjC,EAAA,EAAE,CAAA,kBAAA,CAAA,EAAA,EAAA;IAC/B,EAKmC,GAAA;KAJ/B,MAAK;KACL,WAAU;KACT,OAAO,EAAA,EAAE,CAAA,eAAA;KACV,OAAM;KACL,SAAK,AAAA,EAAA,OAAA,GAAA,MAAOA,EAAAA,MAAK,QAAA,EAAA,CAAA,OAAA,CAAA;;OAE1B,EAgDa,GAAA,EAhDD,MAAK,UAAQ,EAAA;qBAgCf,CA/BM,EAAA,kBAgCZ,EAcM,OAdN,GAcM,CAbF,EAYM,OAZN,GAYM,CAXF,EAEmC,GAAA;KAD/B,MAAK;KACL,OAAM;QACV,EAOM,OAAA,MAAA,CANF,EAES,UAFT,GAES,EADF,EAAA,EAAE,CAAA,iCAAA,CAAA,EAAA,EAAA,EAET,EAEI,KAFJ,GAEI,EADG,EAAA,EAAE,CAAA,mCAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KA1CT,GAAA,EAAZ,EA+BM,OA/BN,GA+BM,CA7BQ,EAAA,SAAA,GAAA,EADV,EAIqB,GAAA;;KAFjB,WAAU;KACV,OAAM;KACL,OAAO,EAAA;yCACZ,EAwBS,EAAA,EAAA,EAAA;iBAxBQ,EAAA,EAAQ;qDAAA,QAAA,IAAA;KAAW;;sBAQZ,CAPpB,EAOoB,EAAA,EAAA,EAAA;MANhB,MAAK;MACL,MAAK;MACL,MAAK;MACJ,OAAO,EAAA,EAAE,CAAA,gBAAA;MACT,aAAa,EAAA,EAAE,CAAA,sBAAA;MAChB,WAAU;MACV,OAAM;4CACV,EAcM,OAdN,GAcM,CAbF,EAYgB,GAAA,MAAA;uBAPkB,CAJ9B,EAI8B,GAAA;OAH1B,MAAK;OACL,WAAU;OACT,OAAO,EAAA,EAAE,CAAA,eAAA;OACT,SAAK,AAAA,EAAA,QAAA,MAAEA,EAAAA,MAAK,QAAA;8BACjB,EAKmC,GAAA;OAJ/B,MAAK;OACL,WAAU;OACT,SAAA,EAAA;OACA,UAAU,EAAA;OACV,OAAO,EAAA,EAAE,CAAA,gBAAA;;;;;;;;;6BAeT,CAAA"}
|
package/dist-vue/_chunks/{PkChatbotFilePreview-zHYZ0F7j.js → PkChatbotFilePreview-0ow1cjom.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as e, t } from "./useLightbox-
|
|
1
|
+
import { n as e, t } from "./useLightbox-CsBDIq4B.js";
|
|
2
2
|
import { computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createVNode as s, defineComponent as c, onMounted as l, openBlock as u, ref as d, toDisplayString as f, unref as p } from "vue";
|
|
3
3
|
import { VvIcon as m } from "@volverjs/ui-vue/components";
|
|
4
4
|
//#region ../../packages/components/src/chat/PkChatbotFilePreview.vue?vue&type=script&setup=true&lang.ts
|
|
@@ -82,4 +82,4 @@ var h = { class: "pk-chatbot-file-preview" }, g = [
|
|
|
82
82
|
//#endregion
|
|
83
83
|
export { x as t };
|
|
84
84
|
|
|
85
|
-
//# sourceMappingURL=PkChatbotFilePreview-
|
|
85
|
+
//# sourceMappingURL=PkChatbotFilePreview-0ow1cjom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PkChatbotFilePreview-zHYZ0F7j.js","names":["$t","$emit"],"sources":["../../../../packages/components/src/chat/PkChatbotFilePreview.vue","../../../../packages/components/src/chat/PkChatbotFilePreview.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { computed, ref, onMounted } from 'vue'\n import { useLightbox, useImageSizes } from '../composables/useLightbox'\n\n const props = defineProps<{\n mediaType: string\n url: string\n filename?: string\n loading?: boolean\n error?: string\n removable?: boolean\n }>()\n\n defineEmits<{\n remove: []\n }>()\n\n const isImage = computed(() => props.mediaType.startsWith('image/'))\n\n const galleryRef = ref<HTMLElement>()\n const { preload, getSize } = useImageSizes()\n const { init } = useLightbox({ gallery: galleryRef, loop: false })\n\n onMounted(async () => {\n if (!isImage.value) {\n return\n }\n preload([{ url: props.url }])\n await init()\n })\n</script>\n\n<template>\n <div class=\"pk-chatbot-file-preview\">\n <div v-if=\"isImage\" ref=\"galleryRef\">\n <a\n :href=\"url\"\n :data-pswp-src=\"url\"\n :data-pswp-width=\"getSize(url).width\"\n :data-pswp-height=\"getSize(url).height\"\n :data-pswp-caption=\"filename ?? ''\"\n class=\"pk-chatbot-file-preview__thumb-link\">\n <img\n :src=\"url\"\n :alt=\"filename\"\n class=\"pk-chatbot-file-preview__thumb\" />\n </a>\n </div>\n <a\n v-else\n :href=\"url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"pk-chatbot-file-preview__icon-link\">\n <VvIcon name=\"ri:file-line\" class=\"pk-chatbot-file-preview__icon\" />\n </a>\n <span v-if=\"filename\" class=\"pk-chatbot-file-preview__name\">{{\n filename\n }}</span>\n <VvIcon\n v-if=\"loading\"\n name=\"line-md:loading-loop\"\n class=\"pk-chatbot-file-preview__loading\" />\n <VvIcon\n v-else-if=\"error\"\n name=\"ri:error-warning-line\"\n :title=\"error\"\n class=\"pk-chatbot-file-preview__error\" />\n <button\n v-if=\"removable && !loading\"\n type=\"button\"\n class=\"pk-chatbot-file-preview__remove\"\n :title=\"$t('action.remove')\"\n @click=\"$emit('remove')\">\n <VvIcon name=\"ri:close-line\" />\n </button>\n </div>\n</template>\n\n<style lang=\"scss\">\n .pk-chatbot-file-preview {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-4);\n max-width: 160px;\n padding: var(--spacing-4) var(--spacing-xs);\n background-color: var(--color-surface-1);\n border: 1px solid var(--color-surface-3);\n border-radius: var(--rounded-md);\n font-size: var(--text-12);\n color: var(--color-word-2);\n\n &__thumb-link {\n display: flex;\n flex-shrink: 0;\n cursor: pointer;\n }\n\n &__thumb {\n width: var(--spacing-20);\n height: var(--spacing-20);\n object-fit: cover;\n border-radius: var(--rounded-sm);\n flex-shrink: 0;\n }\n\n &__icon-link {\n display: flex;\n flex-shrink: 0;\n color: inherit;\n text-decoration: none;\n }\n\n &__icon {\n width: var(--spacing-16);\n height: var(--spacing-16);\n flex-shrink: 0;\n color: var(--color-word-3);\n }\n\n &__name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__loading,\n &__error {\n width: var(--spacing-14);\n height: var(--spacing-14);\n flex-shrink: 0;\n }\n\n &__error {\n color: var(--color-danger);\n }\n\n &__remove {\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n color: var(--color-word-4);\n flex-shrink: 0;\n display: flex;\n align-items: center;\n line-height: 1;\n\n &:hover {\n color: var(--color-word-1);\n }\n }\n }\n</style>\n","<script lang=\"ts\" setup>\n import { computed, ref, onMounted } from 'vue'\n import { useLightbox, useImageSizes } from '../composables/useLightbox'\n\n const props = defineProps<{\n mediaType: string\n url: string\n filename?: string\n loading?: boolean\n error?: string\n removable?: boolean\n }>()\n\n defineEmits<{\n remove: []\n }>()\n\n const isImage = computed(() => props.mediaType.startsWith('image/'))\n\n const galleryRef = ref<HTMLElement>()\n const { preload, getSize } = useImageSizes()\n const { init } = useLightbox({ gallery: galleryRef, loop: false })\n\n onMounted(async () => {\n if (!isImage.value) {\n return\n }\n preload([{ url: props.url }])\n await init()\n })\n</script>\n\n<template>\n <div class=\"pk-chatbot-file-preview\">\n <div v-if=\"isImage\" ref=\"galleryRef\">\n <a\n :href=\"url\"\n :data-pswp-src=\"url\"\n :data-pswp-width=\"getSize(url).width\"\n :data-pswp-height=\"getSize(url).height\"\n :data-pswp-caption=\"filename ?? ''\"\n class=\"pk-chatbot-file-preview__thumb-link\">\n <img\n :src=\"url\"\n :alt=\"filename\"\n class=\"pk-chatbot-file-preview__thumb\" />\n </a>\n </div>\n <a\n v-else\n :href=\"url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"pk-chatbot-file-preview__icon-link\">\n <VvIcon name=\"ri:file-line\" class=\"pk-chatbot-file-preview__icon\" />\n </a>\n <span v-if=\"filename\" class=\"pk-chatbot-file-preview__name\">{{\n filename\n }}</span>\n <VvIcon\n v-if=\"loading\"\n name=\"line-md:loading-loop\"\n class=\"pk-chatbot-file-preview__loading\" />\n <VvIcon\n v-else-if=\"error\"\n name=\"ri:error-warning-line\"\n :title=\"error\"\n class=\"pk-chatbot-file-preview__error\" />\n <button\n v-if=\"removable && !loading\"\n type=\"button\"\n class=\"pk-chatbot-file-preview__remove\"\n :title=\"$t('action.remove')\"\n @click=\"$emit('remove')\">\n <VvIcon name=\"ri:close-line\" />\n </button>\n </div>\n</template>\n\n<style lang=\"scss\">\n .pk-chatbot-file-preview {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-4);\n max-width: 160px;\n padding: var(--spacing-4) var(--spacing-xs);\n background-color: var(--color-surface-1);\n border: 1px solid var(--color-surface-3);\n border-radius: var(--rounded-md);\n font-size: var(--text-12);\n color: var(--color-word-2);\n\n &__thumb-link {\n display: flex;\n flex-shrink: 0;\n cursor: pointer;\n }\n\n &__thumb {\n width: var(--spacing-20);\n height: var(--spacing-20);\n object-fit: cover;\n border-radius: var(--rounded-sm);\n flex-shrink: 0;\n }\n\n &__icon-link {\n display: flex;\n flex-shrink: 0;\n color: inherit;\n text-decoration: none;\n }\n\n &__icon {\n width: var(--spacing-16);\n height: var(--spacing-16);\n flex-shrink: 0;\n color: var(--color-word-3);\n }\n\n &__name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__loading,\n &__error {\n width: var(--spacing-14);\n height: var(--spacing-14);\n flex-shrink: 0;\n }\n\n &__error {\n color: var(--color-danger);\n }\n\n &__remove {\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n color: var(--color-word-4);\n flex-shrink: 0;\n display: flex;\n align-items: center;\n line-height: 1;\n\n &:hover {\n color: var(--color-word-1);\n }\n }\n }\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAII,IAAM,IAAQ,GAaR,IAAU,QAAe,EAAM,UAAU,WAAW,SAAS,CAAA,EAE7D,IAAa,GAAiB,EAC9B,EAAE,YAAS,eAAY,GAAc,EACrC,EAAE,YAAS,EAAY;GAAE,SAAS;GAAY,MAAM;GAAO,CAAA;SAEjE,EAAU,YAAY;AACb,KAAQ,UAGb,EAAQ,CAAC,EAAE,KAAK,EAAM,KAAK,CAAC,CAAA,EAC5B,MAAM,GAAK;IACd;;eAID,EA2CM,OA3CN,GA2CM;IA1CS,EAAA,SAAA,GAAA,EAAX,EAaM,OAAA;;cAbkB;KAAJ,KAAI;QACpB,EAWI,KAAA;KAVC,MAAM,EAAA;KACN,iBAAe,EAAA;KACf,mBAAiB,EAAA,EAAO,CAAC,EAAA,IAAG,CAAE;KAC9B,oBAAkB,EAAA,EAAO,CAAC,EAAA,IAAG,CAAE;KAC/B,qBAAmB,EAAA,YAAQ;KAC5B,OAAM;QACN,EAG6C,OAAA;KAFxC,KAAK,EAAA;KACL,KAAK,EAAA;KACN,OAAM;2CAGlB,EAOI,KAAA;;KALC,MAAM,EAAA;KACP,QAAO;KACP,KAAI;KACJ,OAAM;QACN,EAAoE,GAAA;KAA5D,MAAK;KAAe,OAAM;;IAE1B,EAAA,YAAA,GAAA,EAAZ,EAES,QAFT,GAES,EADL,EAAA,SAAQ,EAAA,EAAA,IAAA,EAAA,IAAA,GAAA;IAGF,EAAA,WAAA,GAAA,EADV,EAG+C,GAAA;;KAD3C,MAAK;KACL,OAAM;UAEK,EAAA,SAAA,GAAA,EADf,EAI6C,GAAA;;KAFzC,MAAK;KACJ,OAAO,EAAA;KACR,OAAM;;IAEA,EAAA,aAAS,CAAK,EAAA,WAAA,GAAA,EADxB,EAOS,UAAA;;KALL,MAAK;KACL,OAAM;KACL,OAAOA,EAAAA,GAAE,gBAAA;KACT,SAAK,AAAA,EAAA,QAAA,MAAEC,EAAAA,MAAK,SAAA;QACb,EAA+B,GAAA,EAAvB,MAAK,iBAAe,CAAA,CAAA,EAAA,GAAA,EAAA,IAAA,EAAA,IAAA,GAAA"}
|
|
1
|
+
{"version":3,"file":"PkChatbotFilePreview-0ow1cjom.js","names":["$t","$emit"],"sources":["../../../../packages/components/src/chat/PkChatbotFilePreview.vue","../../../../packages/components/src/chat/PkChatbotFilePreview.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { computed, ref, onMounted } from 'vue'\n import { useLightbox, useImageSizes } from '../composables/useLightbox'\n\n const props = defineProps<{\n mediaType: string\n url: string\n filename?: string\n loading?: boolean\n error?: string\n removable?: boolean\n }>()\n\n defineEmits<{\n remove: []\n }>()\n\n const isImage = computed(() => props.mediaType.startsWith('image/'))\n\n const galleryRef = ref<HTMLElement>()\n const { preload, getSize } = useImageSizes()\n const { init } = useLightbox({ gallery: galleryRef, loop: false })\n\n onMounted(async () => {\n if (!isImage.value) {\n return\n }\n preload([{ url: props.url }])\n await init()\n })\n</script>\n\n<template>\n <div class=\"pk-chatbot-file-preview\">\n <div v-if=\"isImage\" ref=\"galleryRef\">\n <a\n :href=\"url\"\n :data-pswp-src=\"url\"\n :data-pswp-width=\"getSize(url).width\"\n :data-pswp-height=\"getSize(url).height\"\n :data-pswp-caption=\"filename ?? ''\"\n class=\"pk-chatbot-file-preview__thumb-link\">\n <img\n :src=\"url\"\n :alt=\"filename\"\n class=\"pk-chatbot-file-preview__thumb\" />\n </a>\n </div>\n <a\n v-else\n :href=\"url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"pk-chatbot-file-preview__icon-link\">\n <VvIcon name=\"ri:file-line\" class=\"pk-chatbot-file-preview__icon\" />\n </a>\n <span v-if=\"filename\" class=\"pk-chatbot-file-preview__name\">{{\n filename\n }}</span>\n <VvIcon\n v-if=\"loading\"\n name=\"line-md:loading-loop\"\n class=\"pk-chatbot-file-preview__loading\" />\n <VvIcon\n v-else-if=\"error\"\n name=\"ri:error-warning-line\"\n :title=\"error\"\n class=\"pk-chatbot-file-preview__error\" />\n <button\n v-if=\"removable && !loading\"\n type=\"button\"\n class=\"pk-chatbot-file-preview__remove\"\n :title=\"$t('action.remove')\"\n @click=\"$emit('remove')\">\n <VvIcon name=\"ri:close-line\" />\n </button>\n </div>\n</template>\n\n<style lang=\"scss\">\n .pk-chatbot-file-preview {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-4);\n max-width: 160px;\n padding: var(--spacing-4) var(--spacing-xs);\n background-color: var(--color-surface-1);\n border: 1px solid var(--color-surface-3);\n border-radius: var(--rounded-md);\n font-size: var(--text-12);\n color: var(--color-word-2);\n\n &__thumb-link {\n display: flex;\n flex-shrink: 0;\n cursor: pointer;\n }\n\n &__thumb {\n width: var(--spacing-20);\n height: var(--spacing-20);\n object-fit: cover;\n border-radius: var(--rounded-sm);\n flex-shrink: 0;\n }\n\n &__icon-link {\n display: flex;\n flex-shrink: 0;\n color: inherit;\n text-decoration: none;\n }\n\n &__icon {\n width: var(--spacing-16);\n height: var(--spacing-16);\n flex-shrink: 0;\n color: var(--color-word-3);\n }\n\n &__name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__loading,\n &__error {\n width: var(--spacing-14);\n height: var(--spacing-14);\n flex-shrink: 0;\n }\n\n &__error {\n color: var(--color-danger);\n }\n\n &__remove {\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n color: var(--color-word-4);\n flex-shrink: 0;\n display: flex;\n align-items: center;\n line-height: 1;\n\n &:hover {\n color: var(--color-word-1);\n }\n }\n }\n</style>\n","<script lang=\"ts\" setup>\n import { computed, ref, onMounted } from 'vue'\n import { useLightbox, useImageSizes } from '../composables/useLightbox'\n\n const props = defineProps<{\n mediaType: string\n url: string\n filename?: string\n loading?: boolean\n error?: string\n removable?: boolean\n }>()\n\n defineEmits<{\n remove: []\n }>()\n\n const isImage = computed(() => props.mediaType.startsWith('image/'))\n\n const galleryRef = ref<HTMLElement>()\n const { preload, getSize } = useImageSizes()\n const { init } = useLightbox({ gallery: galleryRef, loop: false })\n\n onMounted(async () => {\n if (!isImage.value) {\n return\n }\n preload([{ url: props.url }])\n await init()\n })\n</script>\n\n<template>\n <div class=\"pk-chatbot-file-preview\">\n <div v-if=\"isImage\" ref=\"galleryRef\">\n <a\n :href=\"url\"\n :data-pswp-src=\"url\"\n :data-pswp-width=\"getSize(url).width\"\n :data-pswp-height=\"getSize(url).height\"\n :data-pswp-caption=\"filename ?? ''\"\n class=\"pk-chatbot-file-preview__thumb-link\">\n <img\n :src=\"url\"\n :alt=\"filename\"\n class=\"pk-chatbot-file-preview__thumb\" />\n </a>\n </div>\n <a\n v-else\n :href=\"url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"pk-chatbot-file-preview__icon-link\">\n <VvIcon name=\"ri:file-line\" class=\"pk-chatbot-file-preview__icon\" />\n </a>\n <span v-if=\"filename\" class=\"pk-chatbot-file-preview__name\">{{\n filename\n }}</span>\n <VvIcon\n v-if=\"loading\"\n name=\"line-md:loading-loop\"\n class=\"pk-chatbot-file-preview__loading\" />\n <VvIcon\n v-else-if=\"error\"\n name=\"ri:error-warning-line\"\n :title=\"error\"\n class=\"pk-chatbot-file-preview__error\" />\n <button\n v-if=\"removable && !loading\"\n type=\"button\"\n class=\"pk-chatbot-file-preview__remove\"\n :title=\"$t('action.remove')\"\n @click=\"$emit('remove')\">\n <VvIcon name=\"ri:close-line\" />\n </button>\n </div>\n</template>\n\n<style lang=\"scss\">\n .pk-chatbot-file-preview {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-4);\n max-width: 160px;\n padding: var(--spacing-4) var(--spacing-xs);\n background-color: var(--color-surface-1);\n border: 1px solid var(--color-surface-3);\n border-radius: var(--rounded-md);\n font-size: var(--text-12);\n color: var(--color-word-2);\n\n &__thumb-link {\n display: flex;\n flex-shrink: 0;\n cursor: pointer;\n }\n\n &__thumb {\n width: var(--spacing-20);\n height: var(--spacing-20);\n object-fit: cover;\n border-radius: var(--rounded-sm);\n flex-shrink: 0;\n }\n\n &__icon-link {\n display: flex;\n flex-shrink: 0;\n color: inherit;\n text-decoration: none;\n }\n\n &__icon {\n width: var(--spacing-16);\n height: var(--spacing-16);\n flex-shrink: 0;\n color: var(--color-word-3);\n }\n\n &__name {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__loading,\n &__error {\n width: var(--spacing-14);\n height: var(--spacing-14);\n flex-shrink: 0;\n }\n\n &__error {\n color: var(--color-danger);\n }\n\n &__remove {\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n color: var(--color-word-4);\n flex-shrink: 0;\n display: flex;\n align-items: center;\n line-height: 1;\n\n &:hover {\n color: var(--color-word-1);\n }\n }\n }\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAII,IAAM,IAAQ,GAaR,IAAU,QAAe,EAAM,UAAU,WAAW,SAAS,CAAA,EAE7D,IAAa,GAAiB,EAC9B,EAAE,YAAS,eAAY,GAAc,EACrC,EAAE,YAAS,EAAY;GAAE,SAAS;GAAY,MAAM;GAAO,CAAA;SAEjE,EAAU,YAAY;AACb,KAAQ,UAGb,EAAQ,CAAC,EAAE,KAAK,EAAM,KAAK,CAAC,CAAA,EAC5B,MAAM,GAAK;IACd;;eAID,EA2CM,OA3CN,GA2CM;IA1CS,EAAA,SAAA,GAAA,EAAX,EAaM,OAAA;;cAbkB;KAAJ,KAAI;QACpB,EAWI,KAAA;KAVC,MAAM,EAAA;KACN,iBAAe,EAAA;KACf,mBAAiB,EAAA,EAAO,CAAC,EAAA,IAAG,CAAE;KAC9B,oBAAkB,EAAA,EAAO,CAAC,EAAA,IAAG,CAAE;KAC/B,qBAAmB,EAAA,YAAQ;KAC5B,OAAM;QACN,EAG6C,OAAA;KAFxC,KAAK,EAAA;KACL,KAAK,EAAA;KACN,OAAM;2CAGlB,EAOI,KAAA;;KALC,MAAM,EAAA;KACP,QAAO;KACP,KAAI;KACJ,OAAM;QACN,EAAoE,GAAA;KAA5D,MAAK;KAAe,OAAM;;IAE1B,EAAA,YAAA,GAAA,EAAZ,EAES,QAFT,GAES,EADL,EAAA,SAAQ,EAAA,EAAA,IAAA,EAAA,IAAA,GAAA;IAGF,EAAA,WAAA,GAAA,EADV,EAG+C,GAAA;;KAD3C,MAAK;KACL,OAAM;UAEK,EAAA,SAAA,GAAA,EADf,EAI6C,GAAA;;KAFzC,MAAK;KACJ,OAAO,EAAA;KACR,OAAM;;IAEA,EAAA,aAAS,CAAK,EAAA,WAAA,GAAA,EADxB,EAOS,UAAA;;KALL,MAAK;KACL,OAAM;KACL,OAAOA,EAAAA,GAAE,gBAAA;KACT,SAAK,AAAA,EAAA,QAAA,MAAEC,EAAAA,MAAK,SAAA;QACb,EAA+B,GAAA,EAAvB,MAAK,iBAAe,CAAA,CAAA,EAAA,GAAA,EAAA,IAAA,EAAA,IAAA,GAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as e } from "./PkStreamingMarkdown-
|
|
2
|
-
import { t } from "./PkChatbotFilePreview-
|
|
1
|
+
import { t as e } from "./PkStreamingMarkdown-CGEZEVZF.js";
|
|
2
|
+
import { t } from "./PkChatbotFilePreview-0ow1cjom.js";
|
|
3
3
|
import { Fragment as n, computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createTextVNode as c, createVNode as l, defineComponent as u, mergeModels as d, mergeProps as f, nextTick as p, normalizeClass as ee, normalizeProps as te, onBeforeUnmount as m, onMounted as h, openBlock as g, ref as _, renderList as ne, renderSlot as re, toDisplayString as v, unref as y, useModel as b, useTemplateRef as x, vModelText as ie, withCtx as S, withDirectives as ae, withKeys as oe, withModifiers as C } from "vue";
|
|
4
4
|
import { VvButton as se, VvDropdown as ce, VvDropdownAction as le, VvIcon as ue } from "@volverjs/ui-vue/components";
|
|
5
5
|
import { useDropZone as de } from "@vueuse/core";
|
|
@@ -302,4 +302,4 @@ var O = D, fe = { class: "pk-chatbot-input" }, pe = {
|
|
|
302
302
|
//#endregion
|
|
303
303
|
export { L as t };
|
|
304
304
|
|
|
305
|
-
//# sourceMappingURL=PkChatbotInput-
|
|
305
|
+
//# sourceMappingURL=PkChatbotInput-DjUU_5_9.js.map
|