n8n-editor-ui 1.117.3 → 1.118.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/dist/assets/{AddDataTableModal-D5F3B2r4.js → AddDataTableModal-i8GQtKYX.js} +14 -14
  2. package/dist/assets/{AnnotationTagsDropdown.ee-BC8a01rp.js → AnnotationTagsDropdown.ee-DV_Mobmt.js} +3 -3
  3. package/dist/assets/{AuthView-DrMcu08v.js → AuthView-BucJoBVs.js} +6 -6
  4. package/dist/assets/{Canvas-CNvrcRSO.css → Canvas-Bn6gWZ4a.css} +10 -149
  5. package/dist/assets/{Canvas-1CC6KrQC.js → Canvas-Td0SIV0U.js} +27 -29
  6. package/dist/assets/{ChangePasswordView-CW15NcGH.js → ChangePasswordView-mVWAZ3kL.js} +12 -12
  7. package/dist/assets/{ChatSidebar-B2Ta5I4Z.js → ChatSidebar-CXnF23Sm.js} +20 -19
  8. package/dist/assets/{ChatView-BBnPeZLY.js → ChatView-BOWzOn2x.js} +382 -320
  9. package/dist/assets/{ChatView-Bevy5QGn.css → ChatView-tcBlz_g5.css} +176 -159
  10. package/dist/assets/CollectionParameter-Dr2sbWu0.js +58 -0
  11. package/dist/assets/{CommunityNodeUpdateInfo-CPJqlJhq.js → CommunityNodeUpdateInfo-Bk-rYnfU.js} +9 -9
  12. package/dist/assets/{CopyInput-Cwilt729.js → CopyInput-DQBVF_BG.js} +4 -4
  13. package/dist/assets/{CredentialIcon-3qNhRpjE.js → CredentialIcon-BmzfYSyO.js} +2 -2
  14. package/dist/assets/{CredentialsView-CuDtpm7g.js → CredentialsView-VSMpVIfN.js} +34 -34
  15. package/dist/assets/{DataTableActions-D1r8nYWw.js → DataTableActions-CLoVJ5kV.js} +7 -7
  16. package/dist/assets/{DataTableDetailsView-BAvjG9Sl.js → DataTableDetailsView-B8wQLLu_.js} +20 -20
  17. package/dist/assets/{DataTableView-vekoLyXc.js → DataTableView-D2eeWDUi.js} +31 -31
  18. package/dist/assets/DemoFooter-CWdsp2am.js +71 -0
  19. package/dist/assets/{Draggable-CkbgujMO.js → Draggable-BSa80qci.js} +1 -1
  20. package/dist/assets/{EmptySharedSectionActionBox-_gLtN8Od.js → EmptySharedSectionActionBox-32M48kPX.js} +4 -4
  21. package/dist/assets/{EnterpriseEdition.ee-CzoWraCB.js → EnterpriseEdition.ee-B_ZSY4rl.js} +1 -1
  22. package/dist/assets/{EntityNotFound-DrJ68Lqz.js → EntityNotFound-CKlXW1IL.js} +4 -4
  23. package/dist/assets/{EntityUnAuthorised-D_y6iEn6.js → EntityUnAuthorised-DB0HgLOM.js} +4 -4
  24. package/dist/assets/{ErrorView-sqHG4cvT.js → ErrorView-DAsa-PS_.js} +6 -6
  25. package/dist/assets/{EvaluationsRootView-BqbUy5rW.js → EvaluationsRootView-CcJipqTv.js} +23 -23
  26. package/dist/assets/{EvaluationsView-DNdgFkNs.js → EvaluationsView-Dr4m1cGH.js} +17 -17
  27. package/dist/assets/{ExecutionsTime-CJF2y_Mq.js → ExecutionsTime-DQ0lKlTn.js} +9 -9
  28. package/dist/assets/{ExecutionsView-C2jI6-H5.js → ExecutionsView-D4k3uqTy.js} +35 -35
  29. package/dist/assets/{ExternalSecretsProviderConnectionSwitch.ee-Bf_7nIAD.js → ExternalSecretsProviderConnectionSwitch.ee-ps4K4bOK.js} +4 -4
  30. package/dist/assets/{FixedCollectionParameter-DhxxT9l5.css → FixedCollectionParameter-BkEju_IA.css} +18 -18
  31. package/dist/assets/{FixedCollectionParameter-r4NEGQpu.js → FixedCollectionParameter-C8Nz7bot.js} +50 -49
  32. package/dist/assets/{ForgotMyPasswordView-ct2WJAh5.js → ForgotMyPasswordView-B9XpVVQb.js} +12 -12
  33. package/dist/assets/{InsightsChartAverageRuntime-CXzgnKsT.js → InsightsChartAverageRuntime-B9_qwMgO.js} +11 -9
  34. package/dist/assets/{InsightsChartFailed-BEfI2q3j.js → InsightsChartFailed-D8rDUthj.js} +10 -8
  35. package/dist/assets/{InsightsChartFailureRate-8hM7KF7W.js → InsightsChartFailureRate-D7MEDAWL.js} +11 -9
  36. package/dist/assets/{InsightsChartTimeSaved-CTwHgk_9.js → InsightsChartTimeSaved-BjEX9cpj.js} +11 -9
  37. package/dist/assets/{InsightsChartTotal-Gpt1PbtN.js → InsightsChartTotal-f6iwgPv4.js} +10 -8
  38. package/dist/assets/{InsightsDashboard-DtYvNa8r.css → InsightsDashboard-CXRybzGm.css} +43 -14
  39. package/dist/assets/InsightsDashboard-DgPTPhXD.js +474 -0
  40. package/dist/assets/{InsightsPaywall-D-vzB-Rj.js → InsightsPaywall-C_Osp3Xn.js} +13 -13
  41. package/dist/assets/{InsightsSummary-BwL8KTCw.js → InsightsSummary-CAapTcha.js} +12 -11
  42. package/dist/assets/{InsightsTableWorkflows-vK_3zH-v.js → InsightsTableWorkflows-BY4sevh1.js} +13 -13
  43. package/dist/assets/{ItemsRenderer-BmYB1_dZ.js → ItemsRenderer-CTbNG2s3.js} +8 -8
  44. package/dist/assets/{KeyboardShortcutTooltip-CqWoJrGF.js → KeyboardShortcutTooltip-CXKgjDIT.js} +1 -1
  45. package/dist/assets/{LogsPanel-Cc1FOhYu.js → LogsPanel-BSFP3TRR.js} +21 -21
  46. package/dist/assets/LogsPanel-mv855bJ4.js +58 -0
  47. package/dist/assets/{MainHeader-BONRMH-N.js → MainHeader-Dwzc_Fak.js} +49 -48
  48. package/dist/assets/{MainSidebar-DozJE7kh.css → MainSidebar-BqoiqeXY.css} +1 -1
  49. package/dist/assets/{MainSidebar-CR7IKmug.js → MainSidebar-fP7bVKd-.js} +39 -41
  50. package/dist/assets/{MainSidebarUserArea-D-l3ZiZx.js → MainSidebarUserArea-DZmO7pT1.js} +5 -5
  51. package/dist/assets/{Modal-BQle6uj0.js → Modal-B8k7lYVM.js} +5 -5
  52. package/dist/assets/{ModalDrawer-DywKbYtl.js → ModalDrawer-K2QDXW8H.js} +6 -6
  53. package/dist/assets/{NDVEmptyState-zQlRuQ5F.js → NDVEmptyState-CFiiknri.js} +1 -1
  54. package/dist/assets/{NodeCreation-U4zaqRJk.js → NodeCreation-Bbr4mTby.js} +45 -44
  55. package/dist/assets/{NodeCreator-BD80LK7t.js → NodeCreator-CE-6q5bn.js} +28 -28
  56. package/dist/assets/{NodeDetailsView-Dk-UxPSa.js → NodeDetailsView-CTnk_X5i.js} +65 -64
  57. package/dist/assets/{NodeDetailsViewV2-Cl0_JPkA.js → NodeDetailsViewV2-REUcA-GA.js} +66 -65
  58. package/dist/assets/{NodeIcon-BBzZc2Cr.js → NodeIcon-Bbl9Jpsi.js} +2 -2
  59. package/dist/assets/{NodeSettings-CbSfTD_z.css → NodeSettings-B50suDD9.css} +37 -37
  60. package/dist/assets/{NodeSettings-Ra6VUnnH.js → NodeSettings-BKd6Pbpi.js} +21 -21
  61. package/dist/assets/{NodeView-C7uJGuPu.js → NodeView-BjGTiM1O.js} +73 -69
  62. package/dist/assets/{ParameterInputList-BCZYU8UQ.js → ParameterInputList-CtoyrDjR.js} +51 -1418
  63. package/dist/assets/{ParameterInputList-Brizqu8u.css → ParameterInputList-aGPYvt18.css} +23 -23
  64. package/dist/assets/{PrebuiltAgentTemplatesView-CDWunVmJ.js → PrebuiltAgentTemplatesView-C6IbTjn9.js} +15 -15
  65. package/dist/assets/{ProjectBreadcrumb-Dk0MStHJ.js → ProjectBreadcrumb-CmmsF90D.js} +4 -4
  66. package/dist/assets/{ProjectCardBadge-CqzNY93B.js → ProjectCardBadge-SSY0HK9w.js} +5 -5
  67. package/dist/assets/{ProjectHeader-CG55_KbA.js → ProjectHeader-BRHPT2Gf.js} +11 -13
  68. package/dist/assets/{ProjectIcon-B42VbGbe.js → ProjectIcon-Doey-RQc.js} +1 -1
  69. package/dist/assets/{ProjectRoleView-C4_5qeMc.js → ProjectRoleView-Dz82Hr5N.js} +13 -13
  70. package/dist/assets/{ProjectRolesView-DRcdZSoA.js → ProjectRolesView-JblQF33a.js} +16 -16
  71. package/dist/assets/{ProjectSettings-BWCU1qGD.js → ProjectSettings-1ZQGH61x.js} +24 -24
  72. package/dist/assets/{ProjectSharing-Dl4jUkk_.js → ProjectSharing-CRwSdefc.js} +18 -12
  73. package/dist/assets/{ProjectSharing-BbWB7xaB.css → ProjectSharing-DsD3YT5P.css} +9 -6
  74. package/dist/assets/{ProjectVariables-BVvA1ujW.js → ProjectVariables-BKV1_OBU.js} +33 -33
  75. package/dist/assets/{PushConnectionTracker-BxhnBMZB.js → PushConnectionTracker-V3T3vpnB.js} +3 -3
  76. package/dist/assets/{ResourcesListLayout-CupVq0jM.js → ResourcesListLayout-BYno1UYD.js} +10 -10
  77. package/dist/assets/{RunDataHtml-DCZENNJ3.js → RunDataHtml-DCb1Egc3.js} +1 -1
  78. package/dist/assets/{RunDataJson-CdK8UEnE.js → RunDataJson-7ml4EtqQ.js} +14 -14
  79. package/dist/assets/{RunDataJsonActions-CjizHipx.js → RunDataJsonActions-D534H82r.js} +12 -12
  80. package/dist/assets/RunDataParsedAiContent-D30b0eQs.js +25 -0
  81. package/dist/assets/{RunDataParsedAiContent-CTB_6dDi.js → RunDataParsedAiContent-FqLolSOE.js} +8 -8
  82. package/dist/assets/{RunDataSearch-NFoi_FS4.js → RunDataSearch-DYsCHxYY.js} +7 -7
  83. package/dist/assets/{RunDataTable-rS7wZj5-.js → RunDataTable-D5O-BPg9.js} +14 -14
  84. package/dist/assets/{SamlOnboarding-Av5Lq_UA.js → SamlOnboarding-EExl-EAp.js} +12 -12
  85. package/dist/assets/{SaveButton-B2VDX1qM.js → SaveButton-C2Gkwcd6.js} +6 -5
  86. package/dist/assets/{SelectedItemsInfo-B-IcUSLK.js → SelectedItemsInfo-BO9w2ntq.js} +2 -2
  87. package/dist/assets/{SettingsApiView-B5gRvI6f.js → SettingsApiView-DHCr1LrA.js} +17 -17
  88. package/dist/assets/{SettingsCommunityNodesView-DTf1tvf4.js → SettingsCommunityNodesView-3swLF8oI.js} +33 -32
  89. package/dist/assets/{SettingsExternalSecrets-BcRu8zB1.js → SettingsExternalSecrets-Czm8izQh.js} +15 -15
  90. package/dist/assets/{SettingsLdapView-n-rft8wb.js → SettingsLdapView-DOse-1bN.js} +18 -18
  91. package/dist/assets/{SettingsLogStreamingView-Dh49Z2VY.js → SettingsLogStreamingView-BVSln3cm.js} +17 -17
  92. package/dist/assets/{SettingsMCPView-1r8HDmM4.js → SettingsMCPView-B9w3XrA9.js} +35 -35
  93. package/dist/assets/{SettingsPersonalView-C_bsCiUL.js → SettingsPersonalView-DWGs5wge.js} +13 -13
  94. package/dist/assets/{SettingsProvisioningView-Co8ofsgr.js → SettingsProvisioningView-Bd7_e49M.js} +10 -10
  95. package/dist/assets/{SettingsSourceControl-o6a0QHua.js → SettingsSourceControl-BmJrrMbt.js} +17 -17
  96. package/dist/assets/{SettingsSso-Q5PlMyZy.js → SettingsSso-LCXnYtLn.js} +18 -18
  97. package/dist/assets/{SettingsUsageAndPlan-BFTvxC33.js → SettingsUsageAndPlan-BcyB9_cH.js} +16 -16
  98. package/dist/assets/{SettingsUsersView-CAEUA7_x.js → SettingsUsersView-8_Y7zQMz.js} +18 -18
  99. package/dist/assets/{SettingsView-BULLUO6z.js → SettingsView-BdM6C-Pa.js} +8 -8
  100. package/dist/assets/{SetupTemplateFormStep-BxemMdS7.js → SetupTemplateFormStep-vegHZ86T.js} +6 -6
  101. package/dist/assets/{SetupView-CSXxmB9c.js → SetupView-DXmGJi1C.js} +12 -12
  102. package/dist/assets/{SetupWorkflowCredentialsButton-m7C62K5B.js → SetupWorkflowCredentialsButton-Gbq-mJNZ.js} +9 -9
  103. package/dist/assets/{SetupWorkflowFromTemplateView-D_IyW6Jo.js → SetupWorkflowFromTemplateView-B77sQQ6O.js} +18 -18
  104. package/dist/assets/{SigninView-BBeSCUS2.js → SigninView-Di3btl9A.js} +13 -13
  105. package/dist/assets/{SignoutView-C2zIR9h2.js → SignoutView-WKs5gvAj.js} +9 -9
  106. package/dist/assets/{SignupView-B1hO3Ltc.js → SignupView-BM4OXX-x.js} +12 -12
  107. package/dist/assets/{TagsDropdown-DSgoFT2G.js → TagsDropdown-B9w42ULo.js} +5 -5
  108. package/dist/assets/{TemplateDetails-BSXglTJa.js → TemplateDetails-DNyPiFTw.js} +7 -7
  109. package/dist/assets/{TemplateList-BwTtpSSb.js → TemplateList-C7Gtb7cW.js} +5 -5
  110. package/dist/assets/{TemplatesCollectionView-B5HqCB6R.js → TemplatesCollectionView-DdMjHvDQ.js} +20 -20
  111. package/dist/assets/{TemplatesSearchView-DRGUJiuP.js → TemplatesSearchView-BtUlSZXh.js} +18 -18
  112. package/dist/assets/{TemplatesView-C4pWMD2B.js → TemplatesView-FCDPW2Yq.js} +3 -3
  113. package/dist/assets/{TemplatesWorkflowView-2gzuWjGc.js → TemplatesWorkflowView-B8_w-yL7.js} +22 -22
  114. package/dist/assets/{TestRunDetailView-YgiY5E8a.js → TestRunDetailView-CEE1M2hn.js} +15 -15
  115. package/dist/assets/{TimeAgo-DEyMdv_4.js → TimeAgo-FvYQex-v.js} +2 -2
  116. package/dist/assets/{TriggerPanel-BRJZvqDX.css → TriggerPanel-D5WejHyJ.css} +4 -4
  117. package/dist/assets/{TriggerPanel-DR_W1VE3.js → TriggerPanel-DqHc-mXl.js} +18 -18
  118. package/dist/assets/{VariablesUsageBadge-UipGis8s.js → VariablesUsageBadge-CEu0Fi7I.js} +4 -4
  119. package/dist/assets/{VariablesView-9GVQBACv.js → VariablesView-CnlNqt-I.js} +25 -25
  120. package/dist/assets/VirtualSchema-BXzJEXJR.js +43 -0
  121. package/dist/assets/{VirtualSchema-BiBmF-FA.js → VirtualSchema-CC3sIZuJ.js} +74 -49
  122. package/dist/assets/{VirtualSchema-DSZB6gKx.css → VirtualSchema-CSh2c6Ec.css} +42 -46
  123. package/dist/assets/{VueMarkdown-DZ67GryI.js → VueMarkdown-70GnkI0W.js} +1 -1
  124. package/dist/assets/{WorkerView-Dythc06_.js → WorkerView-a-85mW7s.js} +38 -37
  125. package/dist/assets/{WorkflowActivator-BZoZGx12.js → WorkflowActivator-FQDQyW1o.js} +8 -8
  126. package/dist/assets/{WorkflowExecutionsInfoAccordion-C-J9oVar.js → WorkflowExecutionsInfoAccordion-JHl30LoQ.js} +7 -7
  127. package/dist/assets/{WorkflowExecutionsLandingPage-Dcpspd_e.js → WorkflowExecutionsLandingPage-CcJ9U18X.js} +18 -18
  128. package/dist/assets/{WorkflowExecutionsPreview-CONJH5mF.js → WorkflowExecutionsPreview-BYWh0GBH.js} +22 -22
  129. package/dist/assets/{WorkflowExecutionsView-BBBgWVzt.js → WorkflowExecutionsView-FCkyyfKq.js} +34 -34
  130. package/dist/assets/{WorkflowHistory-C6bp-ZMb.js → WorkflowHistory-BDm1H5BL.js} +16 -16
  131. package/dist/assets/{WorkflowOnboardingView-BmRX_2z1.js → WorkflowOnboardingView-BZP0l2UH.js} +8 -8
  132. package/dist/assets/{WorkflowPreview-Dt_apdcn.js → WorkflowPreview-CQzIuWsu.js} +5 -5
  133. package/dist/assets/{WorkflowTagsDropdown-BoWhJUGQ.js → WorkflowTagsDropdown-C4m2b8q6.js} +3 -3
  134. package/dist/assets/{WorkflowsView-BMLRlWW1.js → WorkflowsView-CUeNwQmg.js} +49 -49
  135. package/dist/assets/{_MapCache-CaP4mhI9.js → _MapCache-BGBKpT5S.js} +7 -2
  136. package/dist/assets/{apiKeys.store-B-gq_pnY.js → apiKeys.store-CHTKph22.js} +1 -1
  137. package/dist/assets/{assistant.store-CRW9xRe7.js → assistant.store-D6Fihh2i.js} +8 -6
  138. package/dist/assets/{auth.eventBus-C4nOf_EB.js → auth.eventBus-CUpasXbj.js} +1 -1
  139. package/dist/assets/{chartjs.utils-CQGs2abL.js → chartjs.utils-DrHDj0Lr.js} +3 -3
  140. package/dist/assets/{chatPanel.store-kodFX1JM.js → chatPanel.store-Dt9ypdvG.js} +4 -4
  141. package/dist/assets/{cloudPlan.store-DVjbdiNL.js → cloudPlan.store-x1IpiElw.js} +2 -2
  142. package/dist/assets/{col-JPNUrDqS.js → col-b1w4xo57.js} +3 -3
  143. package/dist/assets/{constants-yBDcqULv.js → constants-B1JYxPAR.js} +510 -515
  144. package/dist/assets/{constants-BlMVf5I9.js → constants-DlQs6Cav.js} +2 -1
  145. package/dist/assets/{core-QrkR8HgP.js → core-CGHB7oTc.js} +1 -1
  146. package/dist/assets/{dataTable.store-CqCrYCu5.js → dataTable.store-Bgg7dsRy.js} +2 -2
  147. package/dist/assets/{date-picker-CSlIkiDj.js → date-picker-YLC0sjSf.js} +3 -3
  148. package/dist/assets/{dateFormatter-DFjVBgCR.js → dateFormatter-jkly8a5N.js} +1 -1
  149. package/dist/assets/{dialog-TBTmQpdI.js → dialog-B1U4ND70.js} +4 -4
  150. package/dist/assets/{dist-DQo7s2CD.js → dist-BCqe3G7U.js} +1 -1
  151. package/dist/assets/{es-C9hyaXz6.js → es-BO7MlKL2.js} +1 -1
  152. package/dist/assets/{evaluation.constants-XN1P-VOH.js → evaluation.constants-BLT71nuf.js} +3 -3
  153. package/dist/assets/{executions.store-CQlrw6PV.js → executions.store-DmR1JjSC.js} +1 -1
  154. package/dist/assets/{externalSecrets.ee.store-BMH2q7Z9.js → externalSecrets.ee.store-px6HohWF.js} +2 -2
  155. package/dist/assets/{focusPanel.store-CSnLUdy8.js → focusPanel.store-Pqc2v-Ms.js} +4 -4
  156. package/dist/assets/{folders.store-BcQ6Wp6V.js → folders.store-x8KuYpUo.js} +2 -2
  157. package/dist/assets/{icon-bktrs2EQ.js → icon-C8yfF1LY.js} +1 -1
  158. package/dist/assets/{index-DBqLX3BO.js → index-C4u3WVDF.js} +126 -106
  159. package/dist/assets/{index-DmWYvsgC.css → index-D9KM9gTZ.css} +24 -0
  160. package/dist/assets/{insights.constants-BkI0n967.js → insights.constants-DK2g3nnD.js} +1 -11
  161. package/dist/assets/{insights.store-RACppv9v.js → insights.store-LOsCbJQU.js} +5 -5
  162. package/dist/assets/{insights.utils-BwI_ySXw.js → insights.utils-7zZgNSKk.js} +12 -3
  163. package/dist/assets/{isEmpty-Bi_tkWnE.css → isEmpty-B-mcFJ04.css} +2 -2
  164. package/dist/assets/{isEmpty-B9M4671m.js → isEmpty-CRyMT0C3.js} +186 -83
  165. package/dist/assets/{languageModules-ByRkY5Ff.js → languageModules-B8UNBljm.js} +1 -1
  166. package/dist/assets/{logStreaming.store-B7UWuvIf.js → logStreaming.store-DUt3HvR4.js} +1 -1
  167. package/dist/assets/{mcp.store-BysD0rVp.js → mcp.store-Cwt_hzwD.js} +2 -2
  168. package/dist/assets/{merge-BONzxfgw.js → merge-Db6rb1_m.js} +1 -1
  169. package/dist/assets/{nodeCreator.store-dfEe2Vlw.js → nodeCreator.store-DDUlc1Wi.js} +8 -8
  170. package/dist/assets/{nodeIcon-iL6AFnZi.js → nodeIcon-CyGsA5TL.js} +1 -1
  171. package/dist/assets/{nodeTransforms-BvfzWeb1.js → nodeTransforms-CJd0FLm1.js} +2 -2
  172. package/dist/assets/{npsSurvey.store-B7_iNEDS.js → npsSurvey.store-DTTUiGq9.js} +2 -2
  173. package/dist/assets/{orderBy-DnR31tty.js → orderBy-CanHuORU.js} +2 -2
  174. package/dist/assets/{overlay-Dp9PTQlx.js → overlay-DeoWJ8oB.js} +2 -2
  175. package/dist/assets/{personalizedTemplatesV3.store-1DMQ5zuk.js → personalizedTemplatesV3.store-CJ9Bfy5u.js} +4 -4
  176. package/dist/assets/{pickBy-Du5IQGBK.js → pickBy-DoRblpyg.js} +3 -3
  177. package/dist/assets/{radio-CdRx7dMg.js → radio-j4rSUoao.js} +3 -3
  178. package/dist/assets/{readyToRunWorkflows.store-CeAHy3Gw.js → readyToRunWorkflows.store-CjgkGuJy.js} +5 -5
  179. package/dist/assets/{readyToRunWorkflowsV2.store-DzpZNZaD.js → readyToRunWorkflowsV2.store-6CMdkLg0.js} +8 -8
  180. package/dist/assets/retry-sDkwzrPY.js +23 -0
  181. package/dist/assets/{roles.store-NBXjdv6j.js → roles.store-D2mgfxDv.js} +2 -2
  182. package/dist/assets/{router-DbcXSRC3.js → router-Ebv1qMhT.js} +83 -82
  183. package/dist/assets/{schemaPreview.store-H_WmE5oY.js → schemaPreview.store-BdP1Rtj4.js} +2 -2
  184. package/dist/assets/{semver-DsJndgBW.js → semver-C8_oAvi8.js} +1 -1
  185. package/dist/assets/sourceControl.eventBus-B10rpVhp.js +3 -0
  186. package/dist/assets/{src-B3UiHJ-Q.css → src-C5a_PFvg.css} +322 -14
  187. package/dist/assets/{src-DEMmv7aL.js → src-Cl0xZtCE.js} +6713 -821
  188. package/dist/assets/{sso.store-DrkAY9s8.js → sso.store-BSJgAn6v.js} +1 -1
  189. package/dist/assets/{table-DwbSg1lE.js → table-B9oFv7WW.js} +3 -3
  190. package/dist/assets/{templateActions-jovoofZV.js → templateActions-CAMtj2SG.js} +4 -4
  191. package/dist/assets/{templateTransforms-0i4sTnCn.js → templateTransforms-ClSZtrME.js} +1 -1
  192. package/dist/assets/{templates.store-CPIqYFhQ.js → templates.store-pF0jvUy0.js} +3 -3
  193. package/dist/assets/{truncate-Zm7rqMgr.js → truncate-Dc79aML5.js} +1 -1
  194. package/dist/assets/{uniqBy-aD1YpiVl.js → uniqBy-C2OAfwKy.js} +1 -1
  195. package/dist/assets/{usage.store-j2Tik6Qj.js → usage.store-DXgdlM1s.js} +1 -1
  196. package/dist/assets/{useActions-BPH1iZ0J.js → useActions-CYE2yaOW.js} +5 -5
  197. package/dist/assets/{useBeforeUnload-DF2JzJ4n.js → useBeforeUnload-BDgq2LXA.js} +3 -3
  198. package/dist/assets/{useBugReporting-BQ-oFo-Y.js → useBugReporting-C4eU8DLn.js} +9 -9
  199. package/dist/assets/{useCanvasOperations-CUB22LeC.js → useCanvasOperations-BxV5Dc21.js} +14 -13
  200. package/dist/assets/{useChatHubSidebarState-CVPEM_x0.js → useChatHubSidebarState-CTFhoZRQ.js} +27 -42
  201. package/dist/assets/{useClipboard-Bo6m_x4c.js → useClipboard-BPg-srt1.js} +2 -2
  202. package/dist/assets/{useCommandBar-CLrOlXWt.js → useCommandBar-CLraT-A2.js} +22 -22
  203. package/dist/assets/{useDebounce-BDOVCaxX.js → useDebounce-BRhQZVIC.js} +2 -2
  204. package/dist/assets/{useExecutionData-BIXnhI3s.js → useExecutionData-B4rCxtFJ.js} +1 -1
  205. package/dist/assets/{useExecutionDebugging-BOKa05bM.js → useExecutionDebugging-B-lTq5hU.js} +7 -7
  206. package/dist/assets/{useExecutionHelpers-BGFecxse.js → useExecutionHelpers-5AFgT_t7.js} +5 -5
  207. package/dist/assets/{useExternalHooks-zp0_PYje.js → useExternalHooks-ChElZw8W.js} +1 -1
  208. package/dist/assets/{useImportCurlCommand-ysDdbl5s.js → useImportCurlCommand-BW8wZKLy.js} +20 -11
  209. package/dist/assets/{useKeybindings-Ba9jeoZl.js → useKeybindings-fJZrJyDB.js} +4 -4
  210. package/dist/assets/{useLogsTreeExpand-CC65Qq1H.js → useLogsTreeExpand-DbXAJb89.js} +12 -11
  211. package/dist/assets/{useMcp-B8mELqLq.js → useMcp-ClSG_eXg.js} +3 -3
  212. package/dist/assets/{useMessage-B0Giqa4b.js → useMessage-CVZHrsoz.js} +5 -5
  213. package/dist/assets/{usePageRedirectionHelper-UBkr_KXQ.js → usePageRedirectionHelper-Cn-LYQLi.js} +4 -4
  214. package/dist/assets/{usePinnedData-CyQ835zq.js → usePinnedData-_-i0LUdd.js} +5 -5
  215. package/dist/assets/{useProjectPages-BJaX16QB.js → useProjectPages-DrIHs-hv.js} +2 -2
  216. package/dist/assets/{usePushConnection-B7EE2Y9F.js → usePushConnection-BHaxo8fR.js} +11 -11
  217. package/dist/assets/{useRecentResources-B0Rk_0y2.js → useRecentResources-D_WnXWIZ.js} +7 -7
  218. package/dist/assets/{useRunWorkflow-CnkYuXK_.js → useRunWorkflow-D5rKvgfC.js} +10 -31
  219. package/dist/assets/{useTelemetry-DMMCGp2b.js → useTelemetry-BxbCYDca.js} +53 -22
  220. package/dist/assets/{useTelemetryContext-2dWn5z4h.js → useTelemetryContext-55FklHQh.js} +1 -1
  221. package/dist/assets/{useToast-C1ZpPbXg.js → useToast-CKD06lpn.js} +6 -6
  222. package/dist/assets/{useWorkflowActivate-gtG2am_X.js → useWorkflowActivate-B2RbrKj9.js} +8 -8
  223. package/dist/assets/{useWorkflowSaving-C4dZ5T6Z.js → useWorkflowSaving-DOwP3C1n.js} +9 -9
  224. package/dist/assets/{useWorkflowsCache-DtVpUl61.js → useWorkflowsCache-4ARgZCpO.js} +1 -1
  225. package/dist/assets/{versions.store-BiGAlubj.js → versions.store-DyddKRXT.js} +3 -3
  226. package/dist/assets/{vue-json-pretty-BlSK1oxV.js → vue-json-pretty-DiH9ZFoW.js} +1 -1
  227. package/dist/index.html +110 -108
  228. package/package.json +1 -1
  229. package/dist/assets/CollectionParameter-zOzPpEMN.js +0 -57
  230. package/dist/assets/DemoFooter-CflhcYrP.js +0 -70
  231. package/dist/assets/InsightsDashboard-C4pwDFR4.js +0 -348
  232. package/dist/assets/LogsPanel-BlMvYhqI.js +0 -57
  233. package/dist/assets/RunDataParsedAiContent-CkeoDu7L.js +0 -25
  234. package/dist/assets/VirtualSchema-CpEZ8uay.js +0 -42
  235. /package/dist/assets/{AnimatedSpinner-vlvkUC5d.js → AnimatedSpinner-DRB4A7Dx.js} +0 -0
  236. /package/dist/assets/{FileSaver.min-D8bnhVIu.js → FileSaver.min-CR_3Le5x.js} +0 -0
  237. /package/dist/assets/{PageViewLayout-CKhCcgRz.js → PageViewLayout-CCwb27rd.js} +0 -0
  238. /package/dist/assets/{RunDataHtml-BJNWCJaI.js → RunDataHtml-DOQ0pkg3.js} +0 -0
  239. /package/dist/assets/{TextWithHighlights-4Fm26J2a.js → TextWithHighlights-B8mQwCVK.js} +0 -0
  240. /package/dist/assets/{buttons.esm-jQ2As9fr.js → buttons.esm-CnepylvE.js} +0 -0
  241. /package/dist/assets/{chart-C2tFerhP.js → chart-inxSB4fp.js} +0 -0
  242. /package/dist/assets/{core-DfWDGJ3H.js → core-BfCr8skN.js} +0 -0
  243. /package/dist/assets/{exports-9spWG404.js → exports-RJH1xso1.js} +0 -0
  244. /package/dist/assets/{smartDecimal-Bi50OE4b.js → smartDecimal-BitNC0jz.js} +0 -0
  245. /package/dist/assets/{sortByProperty-qz-1s69w.js → sortByProperty-CUhVU03p.js} +0 -0
  246. /package/dist/assets/{vue-GniKVX87.js → vue-B27A1Apg.js} +0 -0
  247. /package/dist/assets/{xml-BZFrCZxf.js → xml-CcxXd9zY.js} +0 -0
@@ -1,132 +1,32 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/es-C9hyaXz6.js","assets/core-DfWDGJ3H.js","assets/chunk-6z4oVpB-.js","assets/languageModules-ByRkY5Ff.js","assets/xml-BZFrCZxf.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/es-BO7MlKL2.js","assets/core-BfCr8skN.js","assets/chunk-6z4oVpB-.js","assets/languageModules-B8UNBljm.js","assets/xml-CcxXd9zY.js"])))=>i.map(i=>d[i]);
2
2
  import { o as __toESM } from "./chunk-6z4oVpB-.js";
3
3
  import { C as computed, D as createElementBlock, E as createCommentVNode, G as nextTick, Gt as unref, It as ref, M as createVNode, P as defineComponent, Sn as toDisplayString, T as createBlock, Z as onMounted, _ as Fragment, _n as normalizeClass, _t as watch, bt as withCtx, et as openBlock, h as withModifiers, it as renderList, j as createTextVNode, mt as useTemplateRef, q as onBeforeMount, w as createBaseVNode, yn as normalizeStyle } from "./vue.runtime.esm-bundler-DDuXT-9r.js";
4
- import { I as useSpeechRecognition, L as useSpeechSynthesis, M as useMediaQuery, P as useScroll, gt as useI18n, j as useLocalStorage } from "./_MapCache-CaP4mhI9.js";
5
- import { An as N8nHeading_default, Fn as N8nIcon_default, G as N8nOption_default, M as Logo_default, Mn as N8nText_default, Nn as N8nButton_default, O as N8nNavigationDropdown_default, W as N8nSelect_default, _t as N8nInput_default, bt as N8nIconButton_default, ft as N8nTooltip_default, pt as require_markdown_it_link_attributes, r as N8nScrollArea_default } from "./src-DEMmv7aL.js";
4
+ import { I as useSpeechRecognition, L as useSpeechSynthesis, M as useMediaQuery, P as useScroll, g as onClickOutside, gt as useI18n, j as useLocalStorage } from "./_MapCache-BGBKpT5S.js";
5
+ import { Ct as N8nIconButton_default, Fn as N8nText_default, G as N8nOption_default, In as N8nButton_default, Nn as N8nHeading_default, Rn as N8nIcon_default, W as N8nSelect_default, bt as N8nInput_default, gt as require_markdown_it_link_attributes, ht as N8nTooltip_default, i as N8nScrollArea_default, k as N8nNavigationDropdown_default } from "./src-Cl0xZtCE.js";
6
6
  import "./en-BYTsM8fR.js";
7
7
  import { t as __vitePreload } from "./preload-helper-CR0ecmWK.js";
8
8
  import { t as __plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BwBpWJRZ.js";
9
- import { b as useRouter, x as createEventBus, y as useRoute } from "./truncate-Zm7rqMgr.js";
10
- import "./icon-bktrs2EQ.js";
11
- import "./overlay-Dp9PTQlx.js";
9
+ import { b as useRouter, x as createEventBus, y as useRoute } from "./truncate-Dc79aML5.js";
10
+ import "./icon-C8yfF1LY.js";
11
+ import "./overlay-DeoWJ8oB.js";
12
12
  import "./empty-BuGRxzl4.js";
13
- import "./dialog-TBTmQpdI.js";
14
- import { Ht as useCredentialsStore, Li as useUIStore, ir as useUsersStore, kn as useDocumentTitle, yc as v4_default, zo as useSettingsStore } from "./useTelemetry-DMMCGp2b.js";
15
- import { t as useToast } from "./useToast-C1ZpPbXg.js";
13
+ import "./dialog-B1U4ND70.js";
14
+ import { Ht as useCredentialsStore, Li as useUIStore, ir as useUsersStore, kn as useDocumentTitle, yc as v4_default } from "./useTelemetry-BxbCYDca.js";
15
+ import { t as useToast } from "./useToast-CKD06lpn.js";
16
16
  import "./sanitize-html-BuXr7o4T.js";
17
17
  import "./path-browserify-DsmB_HMK.js";
18
- import { $a as PROVIDER_CREDENTIAL_TYPE_MAP, Co as nullType, Fn as LOCAL_STORAGE_CHAT_HUB_CREDENTIALS, In as LOCAL_STORAGE_CHAT_HUB_SELECTED_MODEL, To as stringType, eo as chatHubConversationModelSchema, to as chatHubProviderSchema, wo as recordType } from "./constants-yBDcqULv.js";
19
- import "./merge-BONzxfgw.js";
18
+ import { Go as LOCAL_STORAGE_CHAT_HUB_CREDENTIALS, Ko as LOCAL_STORAGE_CHAT_HUB_SELECTED_MODEL, Lr as nullType, Rr as recordType, cr as PROVIDER_CREDENTIAL_TYPE_MAP, lr as chatHubConversationModelSchema, ur as chatHubProviderSchema, zr as stringType } from "./constants-B1JYxPAR.js";
19
+ import "./merge-Db6rb1_m.js";
20
20
  import "./dateformat-D7TIhVd4.js";
21
- import "./useDebounce-BDOVCaxX.js";
22
- import "./useExternalHooks-zp0_PYje.js";
23
- import { t as useClipboard } from "./useClipboard-Bo6m_x4c.js";
24
- import { t as Modal_default } from "./Modal-BQle6uj0.js";
25
- import { t as CredentialIcon_default } from "./CredentialIcon-3qNhRpjE.js";
26
- import { a as providerDisplayNames, i as MOBILE_MEDIA_QUERY, r as CHAT_VIEW, t as CHAT_CONVERSATION_VIEW } from "./constants-BlMVf5I9.js";
27
- import { t as VueMarkdown_default } from "./VueMarkdown-DZ67GryI.js";
28
- import { n as useChatStore, r as findOneFromModelsResponse, t as useChatHubSidebarState } from "./useChatHubSidebarState-CVPEM_x0.js";
29
- var CredentialSelectorModal_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
30
- __name: "CredentialSelectorModal",
31
- props: {
32
- provider: {},
33
- initialValue: {}
34
- },
35
- emits: ["select", "createNew"],
36
- setup(__props, { emit: __emit }) {
37
- const props = __props;
38
- const emit = __emit;
39
- const credentialsStore = useCredentialsStore();
40
- const modalBus = ref(createEventBus());
41
- const selectedCredentialId = ref(props.initialValue);
42
- const availableCredentials = computed(() => {
43
- return credentialsStore.getCredentialsByType(PROVIDER_CREDENTIAL_TYPE_MAP[props.provider]);
44
- });
45
- function onCredentialSelect(credentialId) {
46
- selectedCredentialId.value = credentialId;
47
- }
48
- function onConfirm() {
49
- if (selectedCredentialId.value) {
50
- emit("select", props.provider, selectedCredentialId.value);
51
- modalBus.value.emit("close");
52
- }
53
- }
54
- function onCreateNew() {
55
- emit("createNew", props.provider);
56
- modalBus.value.emit("close");
57
- }
58
- function onCancel() {
59
- modalBus.value.emit("close");
60
- }
61
- return (_ctx, _cache) => {
62
- return openBlock(), createBlock(Modal_default, {
63
- name: "chatCredentialSelector",
64
- "event-bus": modalBus.value,
65
- width: "50%",
66
- center: true,
67
- "max-width": "460px",
68
- "min-height": "250px"
69
- }, {
70
- header: withCtx(() => [createBaseVNode("div", { class: normalizeClass(_ctx.$style.header) }, [createVNode(CredentialIcon_default, {
71
- "credential-type-name": unref(PROVIDER_CREDENTIAL_TYPE_MAP)[_ctx.provider],
72
- size: 24,
73
- class: normalizeClass(_ctx.$style.icon)
74
- }, null, 8, ["credential-type-name", "class"]), createBaseVNode("h2", { class: normalizeClass(_ctx.$style.title) }, "Select " + toDisplayString(unref(providerDisplayNames)[_ctx.provider]) + " Credential", 3)], 2)]),
75
- content: withCtx(() => [createBaseVNode("div", { class: normalizeClass(_ctx.$style.content) }, [createVNode(unref(N8nText_default), {
76
- size: "small",
77
- color: "text-base"
78
- }, {
79
- default: withCtx(() => _cache[0] || (_cache[0] = [createTextVNode(" Choose an existing credential or create a new one ")])),
80
- _: 1
81
- }), createVNode(unref(N8nSelect_default), {
82
- "model-value": selectedCredentialId.value,
83
- size: "large",
84
- placeholder: "Select credential...",
85
- "onUpdate:modelValue": onCredentialSelect
86
- }, {
87
- default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(availableCredentials.value, (credential) => {
88
- return openBlock(), createBlock(unref(N8nOption_default), {
89
- key: credential.id,
90
- value: credential.id,
91
- label: credential.name
92
- }, null, 8, ["value", "label"]);
93
- }), 128))]),
94
- _: 1
95
- }, 8, ["model-value"])], 2)]),
96
- footer: withCtx(() => [createBaseVNode("div", { class: normalizeClass(_ctx.$style.footer) }, [createVNode(unref(N8nButton_default), {
97
- type: "secondary",
98
- onClick: onCreateNew
99
- }, {
100
- default: withCtx(() => _cache[1] || (_cache[1] = [createTextVNode(" Create New ")])),
101
- _: 1
102
- }), createBaseVNode("div", { class: normalizeClass(_ctx.$style.footerRight) }, [createVNode(unref(N8nButton_default), {
103
- type: "tertiary",
104
- onClick: onCancel
105
- }, {
106
- default: withCtx(() => _cache[2] || (_cache[2] = [createTextVNode(" Cancel ")])),
107
- _: 1
108
- }), createVNode(unref(N8nButton_default), {
109
- type: "primary",
110
- disabled: !selectedCredentialId.value,
111
- onClick: onConfirm
112
- }, {
113
- default: withCtx(() => _cache[3] || (_cache[3] = [createTextVNode(" Select ")])),
114
- _: 1
115
- }, 8, ["disabled"])], 2)], 2)]),
116
- _: 1
117
- }, 8, ["event-bus"]);
118
- };
119
- }
120
- });
121
- var CredentialSelectorModal_vue_vue_type_style_index_0_lang_module_default = {
122
- title: "_title_1hes0_123",
123
- content: "_content_1hes0_129",
124
- footer: "_footer_1hes0_136",
125
- footerRight: "_footerRight_1hes0_143",
126
- header: "_header_1hes0_148",
127
- icon: "_icon_1hes0_154"
128
- };
129
- var CredentialSelectorModal_default = /* @__PURE__ */ __plugin_vue_export_helper_default(CredentialSelectorModal_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": CredentialSelectorModal_vue_vue_type_style_index_0_lang_module_default }]]);
21
+ import "./useDebounce-BRhQZVIC.js";
22
+ import "./useExternalHooks-ChElZw8W.js";
23
+ import "./retry-sDkwzrPY.js";
24
+ import { t as useClipboard } from "./useClipboard-BPg-srt1.js";
25
+ import { t as Modal_default } from "./Modal-B8k7lYVM.js";
26
+ import { t as CredentialIcon_default } from "./CredentialIcon-BmzfYSyO.js";
27
+ import { a as providerDisplayNames, i as MOBILE_MEDIA_QUERY, r as CHAT_VIEW, t as CHAT_CONVERSATION_VIEW } from "./constants-DlQs6Cav.js";
28
+ import { n as useChatStore, r as findOneFromModelsResponse, t as useChatHubSidebarState } from "./useChatHubSidebarState-CTFhoZRQ.js";
29
+ import { t as VueMarkdown_default } from "./VueMarkdown-70GnkI0W.js";
130
30
  var ModelSelector_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
131
31
  __name: "ModelSelector",
132
32
  props: {
@@ -135,55 +35,66 @@ var ModelSelector_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
135
35
  credentialsName: {}
136
36
  },
137
37
  emits: ["change", "configure"],
138
- setup(__props, { emit: __emit }) {
38
+ setup(__props, { expose: __expose, emit: __emit }) {
139
39
  const props = __props;
140
40
  const emit = __emit;
141
- const menu = computed(() => chatHubProviderSchema.options.map((provider) => {
41
+ const dropdownRef = useTemplateRef("dropdownRef");
42
+ const menu = computed(() => chatHubProviderSchema.options.filter((provider) => provider !== "n8n").map((provider) => {
142
43
  const models = props.models?.[provider].models ?? [];
143
44
  const error = props.models?.[provider].error;
144
- const modelOptions = models.length > 0 ? models.map((model) => ({
145
- id: `${provider}::${model.name}`,
146
- title: model.name,
147
- disabled: false
148
- })) : error ? [{
45
+ const modelOptions = models.length > 0 ? models.map((model) => {
46
+ return {
47
+ id: `${provider}::${model.provider === "n8n" ? model.workflowId : model.model}`,
48
+ title: model.name,
49
+ disabled: false
50
+ };
51
+ }) : error ? [{
149
52
  id: `${provider}::error`,
53
+ value: null,
150
54
  disabled: true,
151
55
  title: error
152
56
  }] : [];
57
+ const submenu = modelOptions.concat([...provider !== "n8n" && modelOptions.length > 0 ? [{
58
+ isDivider: true,
59
+ id: "divider"
60
+ }] : []]);
61
+ if (provider !== "n8n") submenu.push({
62
+ id: `${provider}::configure`,
63
+ icon: "settings",
64
+ title: "Configure credentials...",
65
+ disabled: false
66
+ });
153
67
  return {
154
68
  id: provider,
69
+ hidden: true,
155
70
  title: providerDisplayNames[provider],
156
- submenu: modelOptions.concat([...modelOptions.length > 0 ? [{
157
- isDivider: true,
158
- id: "divider"
159
- }] : [], {
160
- id: `${provider}::configure`,
161
- icon: "settings",
162
- title: "Configure credentials...",
163
- disabled: false
164
- }])
71
+ submenu
165
72
  };
166
73
  }));
167
74
  const selectedLabel = computed(() => {
168
75
  if (!props.selectedModel) return "Select model";
169
- return props.selectedModel.model;
76
+ return props.selectedModel.name;
170
77
  });
171
78
  function onSelect(id) {
172
- const [provider, model] = id.split("::");
79
+ const [provider, identifier] = id.split("::");
173
80
  const parsedProvider = chatHubProviderSchema.safeParse(provider).data;
174
81
  if (!parsedProvider) return;
175
- if (model === "configure") {
82
+ if (identifier === "configure" && parsedProvider !== "n8n") {
176
83
  emit("configure", parsedProvider);
177
84
  return;
178
85
  }
179
- emit("change", {
180
- provider: parsedProvider,
181
- model,
182
- workflowId: null
183
- });
86
+ const model = parsedProvider === "n8n" ? null : identifier;
87
+ const workflowId = parsedProvider === "n8n" ? identifier : null;
88
+ const selected$1 = props.models?.[parsedProvider].models.find((m) => m.provider === "n8n" ? m.workflowId === workflowId : m.model === model);
89
+ if (!selected$1) return;
90
+ emit("change", selected$1);
184
91
  }
92
+ onClickOutside(computed(() => dropdownRef.value?.$el), () => dropdownRef.value?.close());
93
+ __expose({ open: () => dropdownRef.value?.open() });
185
94
  return (_ctx, _cache) => {
186
95
  return openBlock(), createBlock(unref(N8nNavigationDropdown_default), {
96
+ ref_key: "dropdownRef",
97
+ ref: dropdownRef,
187
98
  menu: menu.value,
188
99
  onSelect
189
100
  }, {
@@ -199,7 +110,7 @@ var ModelSelector_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
199
110
  text: ""
200
111
  }, {
201
112
  default: withCtx(() => [
202
- _ctx.selectedModel ? (openBlock(), createBlock(CredentialIcon_default, {
113
+ _ctx.selectedModel && _ctx.selectedModel.provider in unref(PROVIDER_CREDENTIAL_TYPE_MAP) ? (openBlock(), createBlock(CredentialIcon_default, {
203
114
  key: 0,
204
115
  "credential-type-name": unref(PROVIDER_CREDENTIAL_TYPE_MAP)[_ctx.selectedModel.provider],
205
116
  size: _ctx.credentialsName ? 20 : 16,
@@ -244,30 +155,20 @@ var ChatConversationHeader_vue_vue_type_script_setup_true_lang_default = /* @__P
244
155
  },
245
156
  emits: [
246
157
  "selectModel",
247
- "selectCredentials",
158
+ "setCredentials",
248
159
  "renameConversation"
249
160
  ],
250
- setup(__props, { emit: __emit }) {
161
+ setup(__props, { expose: __expose, emit: __emit }) {
251
162
  const emit = __emit;
252
163
  const sidebar = useChatHubSidebarState();
253
164
  const chatStore = useChatStore();
254
- const uiStore = useUIStore();
255
165
  const credentialsStore = useCredentialsStore();
256
166
  const router = useRouter();
257
- const credentialSelectorProvider = ref(null);
167
+ const modelSelectorRef = useTemplateRef("modelSelectorRef");
258
168
  const credentialsName = computed(() => __props.selectedModel ? credentialsStore.getCredentialById(__props.credentials[__props.selectedModel.provider] ?? "")?.name : void 0);
259
169
  function onModelChange(selection) {
260
170
  emit("selectModel", selection);
261
171
  }
262
- function onConfigure(provider) {
263
- const credentialType = PROVIDER_CREDENTIAL_TYPE_MAP[provider];
264
- if (credentialsStore.getCredentialsByType(credentialType).length === 0) {
265
- uiStore.openNewCredential(credentialType);
266
- return;
267
- }
268
- credentialSelectorProvider.value = provider;
269
- uiStore.openModal("chatCredentialSelector");
270
- }
271
172
  function onNewChat() {
272
173
  sidebar.toggleOpen(false);
273
174
  router.push({
@@ -275,12 +176,7 @@ var ChatConversationHeader_vue_vue_type_script_setup_true_lang_default = /* @__P
275
176
  force: true
276
177
  });
277
178
  }
278
- function onCredentialSelected(provider, credentialsId) {
279
- emit("selectCredentials", provider, credentialsId);
280
- }
281
- function onCreateNewCredential(provider) {
282
- uiStore.openNewCredential(PROVIDER_CREDENTIAL_TYPE_MAP[provider]);
283
- }
179
+ __expose({ openModelSelector: () => modelSelectorRef.value?.open() });
284
180
  return (_ctx, _cache) => {
285
181
  return openBlock(), createElementBlock("div", { class: normalizeClass(_ctx.$style.component) }, [
286
182
  !unref(sidebar).isStatic.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
@@ -302,23 +198,18 @@ var ChatConversationHeader_vue_vue_type_script_setup_true_lang_default = /* @__P
302
198
  onClick: onNewChat
303
199
  }, null, 8, ["class"])) : createCommentVNode("", true),
304
200
  createVNode(ModelSelector_default, {
201
+ ref_key: "modelSelectorRef",
202
+ ref: modelSelectorRef,
305
203
  models: unref(chatStore).models ?? null,
306
204
  "selected-model": _ctx.selectedModel,
307
205
  "credentials-name": credentialsName.value,
308
206
  onChange: onModelChange,
309
- onConfigure
207
+ onConfigure: _cache[1] || (_cache[1] = ($event) => emit("setCredentials", $event))
310
208
  }, null, 8, [
311
209
  "models",
312
210
  "selected-model",
313
211
  "credentials-name"
314
- ]),
315
- credentialSelectorProvider.value ? (openBlock(), createBlock(CredentialSelectorModal_default, {
316
- key: credentialSelectorProvider.value,
317
- provider: credentialSelectorProvider.value,
318
- "initial-value": _ctx.credentials[credentialSelectorProvider.value] ?? null,
319
- onSelect: onCredentialSelected,
320
- onCreateNew: onCreateNewCredential
321
- }, null, 8, ["provider", "initial-value"])) : createCommentVNode("", true)
212
+ ])
322
213
  ], 2);
323
214
  };
324
215
  }
@@ -495,7 +386,7 @@ function useChatHubMarkdownOptions() {
495
386
  try {
496
387
  asyncImport = {
497
388
  status: "inProgress",
498
- promise: Promise.all([__vitePreload(() => import("./es-C9hyaXz6.js"), __vite__mapDeps([0,1,2])), __vitePreload(() => import("./languageModules-ByRkY5Ff.js"), __vite__mapDeps([3,4]))])
389
+ promise: Promise.all([__vitePreload(() => import("./es-BO7MlKL2.js"), __vite__mapDeps([0,1,2])), __vitePreload(() => import("./languageModules-B8UNBljm.js"), __vite__mapDeps([3,4]))])
499
390
  };
500
391
  const [hljs, languages] = await asyncImport.promise;
501
392
  asyncImport = { status: "done" };
@@ -541,7 +432,7 @@ var ChatMessage_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
541
432
  volume: 1
542
433
  });
543
434
  const credentialTypeName = computed(() => {
544
- if (__props.message.type !== "ai" || !__props.message.provider) return null;
435
+ if (__props.message.type !== "ai" || !__props.message.provider || __props.message.provider === "n8n") return null;
545
436
  return PROVIDER_CREDENTIAL_TYPE_MAP[__props.message.provider] ?? null;
546
437
  });
547
438
  async function handleCopy() {
@@ -559,7 +450,7 @@ var ChatMessage_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
559
450
  emit("cancelEdit");
560
451
  }
561
452
  function handleConfirmEdit() {
562
- if (__props.message.type === "ai" || !editedText.value.trim()) return;
453
+ if (!editedText.value.trim()) return;
563
454
  emit("update", {
564
455
  ...__props.message,
565
456
  content: editedText.value
@@ -707,11 +598,16 @@ var ChatMessage_default = /* @__PURE__ */ __plugin_vue_export_helper_default(Cha
707
598
  var ChatPrompt_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
708
599
  __name: "ChatPrompt",
709
600
  props: {
710
- placeholder: {},
711
- disabled: { type: Boolean },
712
- isResponding: { type: Boolean }
601
+ isResponding: { type: Boolean },
602
+ selectedModel: {},
603
+ isMissingCredentials: { type: Boolean }
713
604
  },
714
- emits: ["submit", "stop"],
605
+ emits: [
606
+ "submit",
607
+ "stop",
608
+ "selectModel",
609
+ "setCredentials"
610
+ ],
715
611
  setup(__props, { expose: __expose, emit: __emit }) {
716
612
  const emit = __emit;
717
613
  const inputRef = useTemplateRef("inputRef");
@@ -722,9 +618,13 @@ var ChatPrompt_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
722
618
  interimResults: true,
723
619
  lang: navigator.language
724
620
  });
725
- function onAttach() {}
621
+ const placeholder = computed(() => {
622
+ if (!__props.selectedModel) return "Select a model";
623
+ return `Message ${__props.selectedModel.name}`;
624
+ });
726
625
  function onMic() {
727
- speechInput.isListening.value ? speechInput.stop() : speechInput.start();
626
+ if (speechInput.isListening.value) speechInput.stop();
627
+ else speechInput.start();
728
628
  }
729
629
  function onStop() {
730
630
  emit("stop");
@@ -767,42 +667,62 @@ var ChatPrompt_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
767
667
  return openBlock(), createElementBlock("form", {
768
668
  class: normalizeClass(_ctx.$style.prompt),
769
669
  onSubmit: withModifiers(handleSubmitForm, ["prevent"])
770
- }, [createBaseVNode("div", { class: normalizeClass(_ctx.$style.inputWrap) }, [createVNode(unref(N8nInput_default), {
771
- ref_key: "inputRef",
772
- ref: inputRef,
773
- modelValue: message$1.value,
774
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => message$1.value = $event),
775
- class: normalizeClass(_ctx.$style.input),
776
- type: "textarea",
777
- placeholder: _ctx.placeholder,
778
- autocomplete: "off",
779
- autosize: {
780
- minRows: 1,
781
- maxRows: 6
782
- },
783
- autofocus: "",
784
- onKeydown: handleKeydownTextarea
785
- }, null, 8, [
786
- "modelValue",
787
- "class",
788
- "placeholder"
789
- ]), createBaseVNode("div", { class: normalizeClass(_ctx.$style.actions) }, [
790
- createVNode(unref(N8nIconButton_default), {
791
- "native-type": "button",
792
- type: "secondary",
793
- title: "Attach",
794
- disabled: _ctx.disabled,
795
- icon: "paperclip",
796
- "icon-size": "large",
797
- text: "",
798
- onClick: onAttach
799
- }, null, 8, ["disabled"]),
800
- unref(speechInput).isSupported ? (openBlock(), createBlock(unref(N8nIconButton_default), {
670
+ }, [createBaseVNode("div", { class: normalizeClass(_ctx.$style.inputWrap) }, [
671
+ !_ctx.selectedModel ? (openBlock(), createBlock(unref(N8nText_default), {
672
+ key: 0,
673
+ class: normalizeClass(_ctx.$style.callout)
674
+ }, {
675
+ default: withCtx(() => [
676
+ _cache[3] || (_cache[3] = createTextVNode(" Please ")),
677
+ createBaseVNode("a", {
678
+ href: "",
679
+ onClick: _cache[0] || (_cache[0] = withModifiers(($event) => emit("selectModel"), ["prevent"]))
680
+ }, "select a model"),
681
+ _cache[4] || (_cache[4] = createTextVNode(" to start a conversation "))
682
+ ]),
683
+ _: 1
684
+ }, 8, ["class"])) : _ctx.isMissingCredentials ? (openBlock(), createBlock(unref(N8nText_default), {
685
+ key: 1,
686
+ class: normalizeClass(_ctx.$style.callout)
687
+ }, {
688
+ default: withCtx(() => [
689
+ _cache[5] || (_cache[5] = createTextVNode(" Please ")),
690
+ createBaseVNode("a", {
691
+ href: "",
692
+ onClick: _cache[1] || (_cache[1] = withModifiers(($event) => emit("setCredentials", _ctx.selectedModel.provider), ["prevent"]))
693
+ }, " set credentials "),
694
+ createTextVNode(" for " + toDisplayString(unref(providerDisplayNames)[_ctx.selectedModel.provider]) + " to start a conversation ", 1)
695
+ ]),
696
+ _: 1
697
+ }, 8, ["class"])) : createCommentVNode("", true),
698
+ createVNode(unref(N8nInput_default), {
699
+ ref_key: "inputRef",
700
+ ref: inputRef,
701
+ modelValue: message$1.value,
702
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => message$1.value = $event),
703
+ class: normalizeClass(_ctx.$style.input),
704
+ type: "textarea",
705
+ placeholder: placeholder.value,
706
+ autocomplete: "off",
707
+ autosize: {
708
+ minRows: 1,
709
+ maxRows: 6
710
+ },
711
+ autofocus: "",
712
+ disabled: _ctx.isMissingCredentials || !_ctx.selectedModel,
713
+ onKeydown: handleKeydownTextarea
714
+ }, null, 8, [
715
+ "modelValue",
716
+ "class",
717
+ "placeholder",
718
+ "disabled"
719
+ ]),
720
+ createBaseVNode("div", { class: normalizeClass(_ctx.$style.actions) }, [unref(speechInput).isSupported ? (openBlock(), createBlock(unref(N8nIconButton_default), {
801
721
  key: 0,
802
722
  "native-type": "button",
803
723
  title: unref(speechInput).isListening.value ? "Stop recording" : "Voice input",
804
724
  type: "secondary",
805
- disabled: _ctx.disabled,
725
+ disabled: _ctx.isMissingCredentials || !_ctx.selectedModel || _ctx.isResponding,
806
726
  icon: unref(speechInput).isListening.value ? "square" : "mic",
807
727
  class: normalizeClass({ [_ctx.$style.recording]: unref(speechInput).isListening.value }),
808
728
  "icon-size": "large",
@@ -812,11 +732,10 @@ var ChatPrompt_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
812
732
  "disabled",
813
733
  "icon",
814
734
  "class"
815
- ])) : createCommentVNode("", true),
816
- !_ctx.isResponding ? (openBlock(), createBlock(unref(N8nIconButton_default), {
735
+ ])) : createCommentVNode("", true), !_ctx.isResponding ? (openBlock(), createBlock(unref(N8nIconButton_default), {
817
736
  key: 1,
818
737
  "native-type": "submit",
819
- disabled: _ctx.disabled || !message$1.value.trim(),
738
+ disabled: _ctx.isMissingCredentials || !_ctx.selectedModel || !message$1.value.trim(),
820
739
  title: "Send",
821
740
  icon: "arrow-up",
822
741
  "icon-size": "large"
@@ -827,18 +746,19 @@ var ChatPrompt_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
827
746
  icon: "square",
828
747
  "icon-size": "large",
829
748
  onClick: onStop
830
- }))
831
- ], 2)], 2)], 34);
749
+ }))], 2)
750
+ ], 2)], 34);
832
751
  };
833
752
  }
834
753
  });
835
754
  var ChatPrompt_vue_vue_type_style_index_0_lang_module_default = {
836
- prompt: "_prompt_16ldr_123",
837
- inputWrap: "_inputWrap_16ldr_128",
838
- input: "_input_16ldr_128",
839
- actions: "_actions_16ldr_146",
840
- recording: "_recording_16ldr_159",
841
- chatHubPromptRecordingPulse: "_chatHubPromptRecordingPulse_16ldr_1"
755
+ prompt: "_prompt_l0yq4_123",
756
+ inputWrap: "_inputWrap_l0yq4_128",
757
+ callout: "_callout_l0yq4_136",
758
+ input: "_input_l0yq4_128",
759
+ actions: "_actions_l0yq4_164",
760
+ recording: "_recording_l0yq4_177",
761
+ chatHubPromptRecordingPulse: "_chatHubPromptRecordingPulse_l0yq4_1"
842
762
  };
843
763
  var ChatPrompt_default = /* @__PURE__ */ __plugin_vue_export_helper_default(ChatPrompt_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": ChatPrompt_vue_vue_type_style_index_0_lang_module_default }]]);
844
764
  var ChatStarter_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
@@ -846,21 +766,16 @@ var ChatStarter_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
846
766
  props: { isMobileDevice: { type: Boolean } },
847
767
  setup(__props) {
848
768
  const userStore = useUsersStore();
849
- const settingsStore = useSettingsStore();
850
769
  const greetings = computed(() => `Hello, ${userStore.currentUser?.firstName ?? userStore.currentUser?.fullName ?? "User"}!`);
851
770
  return (_ctx, _cache) => {
852
- return openBlock(), createElementBlock("div", { class: normalizeClass([_ctx.$style.starter, { [_ctx.$style.isMobileDevice]: _ctx.isMobileDevice }]) }, [createVNode(Logo_default, {
853
- size: "large",
854
- collapsed: "",
855
- "release-channel": unref(settingsStore).settings.releaseChannel
856
- }, null, 8, ["release-channel"]), createBaseVNode("div", { class: normalizeClass(_ctx.$style.header) }, [createVNode(unref(N8nHeading_default), {
771
+ return openBlock(), createElementBlock("div", { class: normalizeClass([_ctx.$style.starter, { [_ctx.$style.isMobileDevice]: _ctx.isMobileDevice }]) }, [createVNode(unref(N8nHeading_default), {
857
772
  tag: "h2",
858
773
  bold: "",
859
774
  size: "xlarge"
860
775
  }, {
861
776
  default: withCtx(() => [createTextVNode(toDisplayString(greetings.value), 1)]),
862
777
  _: 1
863
- })], 2)], 2);
778
+ })], 2);
864
779
  };
865
780
  }
866
781
  });
@@ -872,6 +787,107 @@ var ChatStarter_vue_vue_type_style_index_0_lang_module_default = {
872
787
  };
873
788
  var ChatStarter_default = /* @__PURE__ */ __plugin_vue_export_helper_default(ChatStarter_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": ChatStarter_vue_vue_type_style_index_0_lang_module_default }]]);
874
789
  const credentialsMapSchema = recordType(chatHubProviderSchema, stringType().or(nullType()));
790
+ var CredentialSelectorModal_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
791
+ __name: "CredentialSelectorModal",
792
+ props: {
793
+ provider: {},
794
+ initialValue: {}
795
+ },
796
+ emits: ["select", "createNew"],
797
+ setup(__props, { emit: __emit }) {
798
+ const props = __props;
799
+ const emit = __emit;
800
+ const credentialsStore = useCredentialsStore();
801
+ const modalBus = ref(createEventBus());
802
+ const selectedCredentialId = ref(props.initialValue);
803
+ const availableCredentials = computed(() => {
804
+ return credentialsStore.getCredentialsByType(PROVIDER_CREDENTIAL_TYPE_MAP[props.provider]);
805
+ });
806
+ function onCredentialSelect(credentialId) {
807
+ selectedCredentialId.value = credentialId;
808
+ }
809
+ function onConfirm() {
810
+ if (selectedCredentialId.value) {
811
+ emit("select", props.provider, selectedCredentialId.value);
812
+ modalBus.value.emit("close");
813
+ }
814
+ }
815
+ function onCreateNew() {
816
+ emit("createNew", props.provider);
817
+ modalBus.value.emit("close");
818
+ }
819
+ function onCancel() {
820
+ modalBus.value.emit("close");
821
+ }
822
+ return (_ctx, _cache) => {
823
+ return openBlock(), createBlock(Modal_default, {
824
+ name: "chatCredentialSelector",
825
+ "event-bus": modalBus.value,
826
+ width: "50%",
827
+ center: true,
828
+ "max-width": "460px",
829
+ "min-height": "250px"
830
+ }, {
831
+ header: withCtx(() => [createBaseVNode("div", { class: normalizeClass(_ctx.$style.header) }, [createVNode(CredentialIcon_default, {
832
+ "credential-type-name": unref(PROVIDER_CREDENTIAL_TYPE_MAP)[_ctx.provider],
833
+ size: 24,
834
+ class: normalizeClass(_ctx.$style.icon)
835
+ }, null, 8, ["credential-type-name", "class"]), createBaseVNode("h2", { class: normalizeClass(_ctx.$style.title) }, "Select " + toDisplayString(unref(providerDisplayNames)[_ctx.provider]) + " Credential", 3)], 2)]),
836
+ content: withCtx(() => [createBaseVNode("div", { class: normalizeClass(_ctx.$style.content) }, [createVNode(unref(N8nText_default), {
837
+ size: "small",
838
+ color: "text-base"
839
+ }, {
840
+ default: withCtx(() => _cache[0] || (_cache[0] = [createTextVNode(" Choose an existing credential or create a new one ")])),
841
+ _: 1
842
+ }), createVNode(unref(N8nSelect_default), {
843
+ "model-value": selectedCredentialId.value,
844
+ size: "large",
845
+ placeholder: "Select credential...",
846
+ "onUpdate:modelValue": onCredentialSelect
847
+ }, {
848
+ default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(availableCredentials.value, (credential) => {
849
+ return openBlock(), createBlock(unref(N8nOption_default), {
850
+ key: credential.id,
851
+ value: credential.id,
852
+ label: credential.name
853
+ }, null, 8, ["value", "label"]);
854
+ }), 128))]),
855
+ _: 1
856
+ }, 8, ["model-value"])], 2)]),
857
+ footer: withCtx(() => [createBaseVNode("div", { class: normalizeClass(_ctx.$style.footer) }, [createVNode(unref(N8nButton_default), {
858
+ type: "secondary",
859
+ onClick: onCreateNew
860
+ }, {
861
+ default: withCtx(() => _cache[1] || (_cache[1] = [createTextVNode(" Create New ")])),
862
+ _: 1
863
+ }), createBaseVNode("div", { class: normalizeClass(_ctx.$style.footerRight) }, [createVNode(unref(N8nButton_default), {
864
+ type: "tertiary",
865
+ onClick: onCancel
866
+ }, {
867
+ default: withCtx(() => _cache[2] || (_cache[2] = [createTextVNode(" Cancel ")])),
868
+ _: 1
869
+ }), createVNode(unref(N8nButton_default), {
870
+ type: "primary",
871
+ disabled: !selectedCredentialId.value,
872
+ onClick: onConfirm
873
+ }, {
874
+ default: withCtx(() => _cache[3] || (_cache[3] = [createTextVNode(" Select ")])),
875
+ _: 1
876
+ }, 8, ["disabled"])], 2)], 2)]),
877
+ _: 1
878
+ }, 8, ["event-bus"]);
879
+ };
880
+ }
881
+ });
882
+ var CredentialSelectorModal_vue_vue_type_style_index_0_lang_module_default = {
883
+ title: "_title_1hes0_123",
884
+ content: "_content_1hes0_129",
885
+ footer: "_footer_1hes0_136",
886
+ footerRight: "_footerRight_1hes0_143",
887
+ header: "_header_1hes0_148",
888
+ icon: "_icon_1hes0_154"
889
+ };
890
+ var CredentialSelectorModal_default = /* @__PURE__ */ __plugin_vue_export_helper_default(CredentialSelectorModal_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": CredentialSelectorModal_vue_vue_type_style_index_0_lang_module_default }]]);
875
891
  var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
876
892
  __name: "ChatView",
877
893
  setup(__props) {
@@ -883,6 +899,8 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
883
899
  const toast = useToast();
884
900
  const isMobileDevice$1 = useMediaQuery(MOBILE_MEDIA_QUERY);
885
901
  const documentTitle = useDocumentTitle();
902
+ const uiStore = useUIStore();
903
+ const headerRef = useTemplateRef("headerRef");
886
904
  const inputRef = useTemplateRef("inputRef");
887
905
  const sessionId = computed(() => typeof route.params.id === "string" ? route.params.id : v4_default());
888
906
  const isNewSession = computed(() => sessionId.value !== route.params.id);
@@ -923,6 +941,7 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
923
941
  }
924
942
  });
925
943
  const autoSelectCredentials = computed(() => Object.fromEntries(chatHubProviderSchema.options.map((provider) => {
944
+ if (provider === "n8n") return [provider, null];
926
945
  return [provider, credentialsStore.getCredentialsByType(PROVIDER_CREDENTIAL_TYPE_MAP[provider]).toSorted((a, b) => +new Date(b.createdAt) - +new Date(a.createdAt))[0]?.id ?? null];
927
946
  })));
928
947
  const mergedCredentials = computed(() => ({
@@ -931,12 +950,24 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
931
950
  }));
932
951
  const chatMessages = computed(() => chatStore.getActiveMessages(sessionId.value));
933
952
  const isNewChat$1 = computed(() => route.name === CHAT_VIEW);
934
- const inputPlaceholder = computed(() => {
935
- if (!selectedModel.value) return "Select a model";
936
- return `Message ${selectedModel.value.model}`;
953
+ const credentialsId = computed(() => selectedModel.value ? mergedCredentials.value[selectedModel.value.provider] : void 0);
954
+ const modelRequiresCredentials = computed(() => {
955
+ if (!selectedModel.value) return false;
956
+ return selectedModel.value?.provider !== "n8n";
957
+ });
958
+ const isMissingSelectedCredential = computed(() => {
959
+ if (!selectedModel.value) return false;
960
+ if (!modelRequiresCredentials.value) return false;
961
+ return !credentialsId.value;
937
962
  });
938
963
  const editingMessageId = ref();
939
964
  const didSubmitInCurrentSession = ref(false);
965
+ const initialization = ref({
966
+ credentialsFetched: false,
967
+ modelsFetched: false
968
+ });
969
+ const credentialSelectorProvider = ref(null);
970
+ const isInitialized = computed(() => initialization.value.credentialsFetched && initialization.value.modelsFetched);
940
971
  function scrollToBottom(smooth) {
941
972
  scrollContainerRef.value?.scrollTo({
942
973
  top: scrollableRef.value?.scrollHeight,
@@ -961,6 +992,7 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
961
992
  watch(mergedCredentials, async (credentials) => {
962
993
  const models = await chatStore.fetchChatModels(credentials);
963
994
  if (selectedModel.value === null) selectedModel.value = findOneFromModelsResponse(models) ?? null;
995
+ initialization.value.modelsFetched = true;
964
996
  }, { immediate: true });
965
997
  watch([sessionId, isNewSession], async ([id, isNew]) => {
966
998
  didSubmitInCurrentSession.value = false;
@@ -977,15 +1009,17 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
977
1009
  }, { immediate: true });
978
1010
  onMounted(async () => {
979
1011
  await Promise.all([credentialsStore.fetchCredentialTypes(false), credentialsStore.fetchAllCredentials()]);
1012
+ initialization.value.credentialsFetched = true;
980
1013
  });
981
1014
  function onSubmit(message$1) {
982
- if (!message$1.trim() || chatStore.isResponding) return;
983
- const credentialsId = selectedModel.value ? mergedCredentials.value[selectedModel.value.provider] : void 0;
1015
+ if (!message$1.trim() || chatStore.isResponding || !selectedModel.value || isMissingSelectedCredential.value) return;
984
1016
  didSubmitInCurrentSession.value = true;
985
- chatStore.sendMessage(sessionId.value, message$1, selectedModel.value, selectedModel.value && credentialsId ? { [PROVIDER_CREDENTIAL_TYPE_MAP[selectedModel.value.provider]]: {
986
- id: credentialsId,
1017
+ const credentials = {};
1018
+ if (selectedModel.value.provider !== "n8n" && credentialsId.value) Object.assign(credentials, { [PROVIDER_CREDENTIAL_TYPE_MAP[selectedModel.value.provider]]: {
1019
+ id: credentialsId.value,
987
1020
  name: ""
988
- } } : null);
1021
+ } });
1022
+ chatStore.sendMessage(sessionId.value, message$1, selectedModel.value, credentials);
989
1023
  inputRef.value?.setText("");
990
1024
  if (isNewSession.value) router.push({
991
1025
  name: CHAT_CONVERSATION_VIEW,
@@ -1002,111 +1036,139 @@ var ChatView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
1002
1036
  editingMessageId.value = void 0;
1003
1037
  }
1004
1038
  function handleEditMessage(message$1) {
1005
- if (chatStore.isResponding || message$1.type !== "human" || !selectedModel.value) return;
1006
- const credentialsId = mergedCredentials.value[selectedModel.value.provider];
1007
- if (!credentialsId) return;
1008
- const mesasgeToEdit = message$1.revisionOfMessageId ?? message$1.id;
1009
- chatStore.editMessage(sessionId.value, mesasgeToEdit, message$1.content, selectedModel.value, { [PROVIDER_CREDENTIAL_TYPE_MAP[selectedModel.value.provider]]: {
1010
- id: credentialsId,
1039
+ if (chatStore.isResponding || !["human", "ai"].includes(message$1.type) || !selectedModel.value || !credentialsId.value) return;
1040
+ const messageToEdit = message$1.revisionOfMessageId ?? message$1.id;
1041
+ chatStore.editMessage(sessionId.value, messageToEdit, message$1.content, selectedModel.value, selectedModel.value.provider === "n8n" ? {} : { [PROVIDER_CREDENTIAL_TYPE_MAP[selectedModel.value.provider]]: {
1042
+ id: credentialsId.value,
1011
1043
  name: ""
1012
1044
  } });
1013
1045
  editingMessageId.value = void 0;
1014
1046
  }
1015
1047
  function handleRegenerateMessage(message$1) {
1016
- if (chatStore.isResponding || message$1.type !== "ai" || !selectedModel.value) return;
1017
- const credentialsId = mergedCredentials.value[selectedModel.value.provider];
1018
- if (!credentialsId) return;
1048
+ if (chatStore.isResponding || message$1.type !== "ai" || !selectedModel.value || !credentialsId.value) return;
1019
1049
  const messageToRetry = message$1.retryOfMessageId ?? message$1.id;
1020
- chatStore.regenerateMessage(sessionId.value, messageToRetry, selectedModel.value, { [PROVIDER_CREDENTIAL_TYPE_MAP[selectedModel.value.provider]]: {
1021
- id: credentialsId,
1050
+ chatStore.regenerateMessage(sessionId.value, messageToRetry, selectedModel.value, selectedModel.value.provider === "n8n" ? {} : { [PROVIDER_CREDENTIAL_TYPE_MAP[selectedModel.value.provider]]: {
1051
+ id: credentialsId.value,
1022
1052
  name: ""
1023
1053
  } });
1024
1054
  }
1025
1055
  function handleSelectModel(selection) {
1026
1056
  selectedModel.value = selection;
1027
1057
  }
1028
- function handleSelectCredentials(provider, credentialsId) {
1058
+ function handleSelectCredentials(provider, id) {
1029
1059
  selectedCredentials.value = {
1030
1060
  ...selectedCredentials.value,
1031
- [provider]: credentialsId
1061
+ [provider]: id
1032
1062
  };
1033
1063
  }
1034
1064
  function handleSwitchAlternative(messageId) {
1035
1065
  chatStore.switchAlternative(sessionId.value, messageId);
1036
1066
  }
1067
+ function handleConfigureCredentials(provider) {
1068
+ const credentialType = PROVIDER_CREDENTIAL_TYPE_MAP[provider];
1069
+ if (credentialsStore.getCredentialsByType(credentialType).length === 0) {
1070
+ uiStore.openNewCredential(credentialType);
1071
+ return;
1072
+ }
1073
+ credentialSelectorProvider.value = provider;
1074
+ uiStore.openModal("chatCredentialSelector");
1075
+ }
1076
+ function handleConfigureModel() {
1077
+ headerRef.value?.openModelSelector();
1078
+ }
1079
+ function handleCreateNewCredential(provider) {
1080
+ uiStore.openNewCredential(PROVIDER_CREDENTIAL_TYPE_MAP[provider]);
1081
+ }
1037
1082
  return (_ctx, _cache) => {
1038
1083
  return openBlock(), createElementBlock("div", { class: normalizeClass([_ctx.$style.component, {
1039
1084
  [_ctx.$style.isNewChat]: isNewChat$1.value,
1040
1085
  [_ctx.$style.isMobileDevice]: unref(isMobileDevice$1)
1041
- }]) }, [createVNode(ChatConversationHeader_default, {
1042
- "selected-model": unref(selectedModel),
1043
- credentials: mergedCredentials.value,
1044
- onSelectModel: handleSelectModel,
1045
- onSelectCredentials: handleSelectCredentials
1046
- }, null, 8, ["selected-model", "credentials"]), createVNode(unref(N8nScrollArea_default), {
1047
- type: "scroll",
1048
- "enable-vertical-scroll": true,
1049
- "enable-horizontal-scroll": false,
1050
- "as-child": "",
1051
- class: normalizeClass(_ctx.$style.scrollArea)
1052
- }, {
1053
- default: withCtx(() => [createBaseVNode("div", {
1054
- class: normalizeClass(_ctx.$style.scrollable),
1055
- ref: "scrollable"
1056
- }, [isNewChat$1.value ? (openBlock(), createBlock(ChatStarter_default, {
1086
+ }]) }, [
1087
+ isInitialized.value ? (openBlock(), createBlock(ChatConversationHeader_default, {
1057
1088
  key: 0,
1058
- class: normalizeClass(_ctx.$style.starter),
1059
- "is-mobile-device": unref(isMobileDevice$1)
1060
- }, null, 8, ["class", "is-mobile-device"])) : (openBlock(), createElementBlock("div", {
1061
- key: 1,
1062
- role: "log",
1063
- "aria-live": "polite",
1064
- class: normalizeClass(_ctx.$style.messageList)
1065
- }, [(openBlock(true), createElementBlock(Fragment, null, renderList(chatMessages.value, (message$1, index) => {
1066
- return openBlock(), createBlock(ChatMessage_default, {
1067
- key: message$1.id,
1068
- message: message$1,
1069
- compact: unref(isMobileDevice$1),
1070
- "is-editing": editingMessageId.value === message$1.id,
1071
- "is-streaming": unref(chatStore).streamingMessageId === message$1.id,
1072
- "min-height": didSubmitInCurrentSession.value && message$1.type === "ai" && index === chatMessages.value.length - 1 && scrollContainerRef.value ? scrollContainerRef.value.offsetHeight - 30 - 200 : void 0,
1073
- onStartEdit: ($event) => handleStartEditMessage(message$1.id),
1074
- onCancelEdit: handleCancelEditMessage,
1075
- onRegenerate: handleRegenerateMessage,
1076
- onUpdate: handleEditMessage,
1077
- onSwitchAlternative: handleSwitchAlternative
1089
+ ref_key: "headerRef",
1090
+ ref: headerRef,
1091
+ "selected-model": unref(selectedModel),
1092
+ credentials: mergedCredentials.value,
1093
+ onSelectModel: handleSelectModel,
1094
+ onSetCredentials: handleConfigureCredentials
1095
+ }, null, 8, ["selected-model", "credentials"])) : createCommentVNode("", true),
1096
+ credentialSelectorProvider.value && credentialSelectorProvider.value !== "n8n" ? (openBlock(), createBlock(CredentialSelectorModal_default, {
1097
+ key: credentialSelectorProvider.value,
1098
+ provider: credentialSelectorProvider.value,
1099
+ "initial-value": mergedCredentials.value[credentialSelectorProvider.value] ?? null,
1100
+ onSelect: handleSelectCredentials,
1101
+ onCreateNew: handleCreateNewCredential
1102
+ }, null, 8, ["provider", "initial-value"])) : createCommentVNode("", true),
1103
+ isInitialized.value ? (openBlock(), createBlock(unref(N8nScrollArea_default), {
1104
+ key: 2,
1105
+ type: "scroll",
1106
+ "enable-vertical-scroll": true,
1107
+ "enable-horizontal-scroll": false,
1108
+ "as-child": "",
1109
+ class: normalizeClass(_ctx.$style.scrollArea)
1110
+ }, {
1111
+ default: withCtx(() => [createBaseVNode("div", {
1112
+ class: normalizeClass(_ctx.$style.scrollable),
1113
+ ref: "scrollable"
1114
+ }, [isNewChat$1.value ? (openBlock(), createBlock(ChatStarter_default, {
1115
+ key: 0,
1116
+ class: normalizeClass(_ctx.$style.starter),
1117
+ "is-mobile-device": unref(isMobileDevice$1)
1118
+ }, null, 8, ["class", "is-mobile-device"])) : (openBlock(), createElementBlock("div", {
1119
+ key: 1,
1120
+ role: "log",
1121
+ "aria-live": "polite",
1122
+ class: normalizeClass(_ctx.$style.messageList)
1123
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(chatMessages.value, (message$1, index) => {
1124
+ return openBlock(), createBlock(ChatMessage_default, {
1125
+ key: message$1.id,
1126
+ message: message$1,
1127
+ compact: unref(isMobileDevice$1),
1128
+ "is-editing": editingMessageId.value === message$1.id,
1129
+ "is-streaming": unref(chatStore).streamingMessageId === message$1.id,
1130
+ "min-height": didSubmitInCurrentSession.value && message$1.type === "ai" && index === chatMessages.value.length - 1 && scrollContainerRef.value ? scrollContainerRef.value.offsetHeight - 30 - 200 : void 0,
1131
+ onStartEdit: ($event) => handleStartEditMessage(message$1.id),
1132
+ onCancelEdit: handleCancelEditMessage,
1133
+ onRegenerate: handleRegenerateMessage,
1134
+ onUpdate: handleEditMessage,
1135
+ onSwitchAlternative: handleSwitchAlternative
1136
+ }, null, 8, [
1137
+ "message",
1138
+ "compact",
1139
+ "is-editing",
1140
+ "is-streaming",
1141
+ "min-height",
1142
+ "onStartEdit"
1143
+ ]);
1144
+ }), 128))], 2)), createBaseVNode("div", { class: normalizeClass(_ctx.$style.promptContainer) }, [!unref(arrivedState).bottom && !isNewChat$1.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
1145
+ key: 0,
1146
+ type: "secondary",
1147
+ icon: "arrow-down",
1148
+ class: normalizeClass(_ctx.$style.scrollToBottomButton),
1149
+ title: "Scroll to bottom",
1150
+ onClick: _cache[0] || (_cache[0] = ($event) => scrollToBottom(true))
1151
+ }, null, 8, ["class"])) : createCommentVNode("", true), isInitialized.value ? (openBlock(), createBlock(ChatPrompt_default, {
1152
+ key: 1,
1153
+ ref_key: "inputRef",
1154
+ ref: inputRef,
1155
+ class: normalizeClass(_ctx.$style.prompt),
1156
+ "is-responding": unref(chatStore).isResponding,
1157
+ "selected-model": unref(selectedModel),
1158
+ "is-missing-credentials": isMissingSelectedCredential.value,
1159
+ onSubmit,
1160
+ onStop,
1161
+ onSelectModel: handleConfigureModel,
1162
+ onSetCredentials: handleConfigureCredentials
1078
1163
  }, null, 8, [
1079
- "message",
1080
- "compact",
1081
- "is-editing",
1082
- "is-streaming",
1083
- "min-height",
1084
- "onStartEdit"
1085
- ]);
1086
- }), 128))], 2)), createBaseVNode("div", { class: normalizeClass(_ctx.$style.promptContainer) }, [!unref(arrivedState).bottom && !isNewChat$1.value ? (openBlock(), createBlock(unref(N8nIconButton_default), {
1087
- key: 0,
1088
- type: "secondary",
1089
- icon: "arrow-down",
1090
- class: normalizeClass(_ctx.$style.scrollToBottomButton),
1091
- title: "Scroll to bottom",
1092
- onClick: _cache[0] || (_cache[0] = ($event) => scrollToBottom(true))
1093
- }, null, 8, ["class"])) : createCommentVNode("", true), createVNode(ChatPrompt_default, {
1094
- ref_key: "inputRef",
1095
- ref: inputRef,
1096
- class: normalizeClass(_ctx.$style.prompt),
1097
- placeholder: inputPlaceholder.value,
1098
- "is-responding": unref(chatStore).isResponding,
1099
- disabled: unref(chatStore).isResponding,
1100
- onSubmit,
1101
- onStop
1102
- }, null, 8, [
1103
- "class",
1104
- "placeholder",
1105
- "is-responding",
1106
- "disabled"
1107
- ])], 2)], 2)]),
1108
- _: 1
1109
- }, 8, ["class"])], 2);
1164
+ "class",
1165
+ "is-responding",
1166
+ "selected-model",
1167
+ "is-missing-credentials"
1168
+ ])) : createCommentVNode("", true)], 2)], 2)]),
1169
+ _: 1
1170
+ }, 8, ["class"])) : createCommentVNode("", true)
1171
+ ], 2);
1110
1172
  };
1111
1173
  }
1112
1174
  });