n8n-editor-ui 1.119.1 → 1.120.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 (491) hide show
  1. package/dist/assets/{AddDataTableModal-78UiDOZ6.js → AddDataTableModal-CbPeeND7.js} +17 -17
  2. package/dist/assets/AddDataTableModal-legacy-TWGqOwvJ.js +165 -0
  3. package/dist/assets/AnimatedSpinner-legacy-a37yY0a9.js +35 -0
  4. package/dist/assets/AnnotationTagsDropdown.ee-legacy-m3_lZt5p.js +90 -0
  5. package/dist/assets/{AnnotationTagsDropdown.ee-B5SGfmxY.js → AnnotationTagsDropdown.ee-nr8ND2ZK.js} +2 -2
  6. package/dist/assets/{AuthView-CaCXt20h.js → AuthView-GQg0-dxd.js} +6 -6
  7. package/dist/assets/AuthView-legacy-BTkTpaqQ.js +170 -0
  8. package/dist/assets/{ChangePasswordView-sh87mWR6.js → ChangePasswordView-CMxYIEv7.js} +15 -15
  9. package/dist/assets/ChangePasswordView-legacy-UYMze_th.js +165 -0
  10. package/dist/assets/{ChatAgentsView-4SiYQ9YJ.js → ChatAgentsView-BF2UQldY.js} +22 -22
  11. package/dist/assets/ChatAgentsView-legacy-C-TEUCMJ.js +418 -0
  12. package/dist/assets/{ChatSidebar-C0XXqw3v.js → ChatSidebar-CwUIdqm5.js} +29 -24
  13. package/dist/assets/ChatSidebar-legacy-BcM0mdnb.js +485 -0
  14. package/dist/assets/{ChatView-BlkLzP1X.js → ChatView-CuoxXANC.js} +26 -26
  15. package/dist/assets/ChatView-legacy-DQzrDKVi.js +1192 -0
  16. package/dist/assets/CollectionParameter-legacy-BCZyr-W3.js +16 -0
  17. package/dist/assets/CollectionParameter-uOVc6KhF.js +58 -0
  18. package/dist/assets/{CommunityNodeUpdateInfo-Egv665vx.js → CommunityNodeUpdateInfo-BbQHVpK8.js} +8 -8
  19. package/dist/assets/CommunityNodeUpdateInfo-legacy-CffmFLEi.js +395 -0
  20. package/dist/assets/{CopyInput-DX-FL085.js → CopyInput-CiPK5ddq.js} +4 -4
  21. package/dist/assets/CopyInput-legacy-BbjpqRcT.js +141 -0
  22. package/dist/assets/{CredentialIcon-DS3l06t2.js → CredentialIcon-CwCVRpiA.js} +2 -2
  23. package/dist/assets/CredentialIcon-legacy-nJdgWX0p.js +110 -0
  24. package/dist/assets/{CredentialsView-C3SKDwtI.js → CredentialsView-Dq_bJCTX.js} +38 -38
  25. package/dist/assets/CredentialsView-legacy-CBU7oObS.js +562 -0
  26. package/dist/assets/{DataTableActions-lgRuMb9F.js → DataTableActions-1pCUiTrK.js} +9 -9
  27. package/dist/assets/DataTableActions-legacy-cggWdqxr.js +113 -0
  28. package/dist/assets/{DataTableDetailsView-CoWw-4gy.js → DataTableDetailsView-FZ996I2K.js} +23 -23
  29. package/dist/assets/DataTableDetailsView-legacy-T6s1xIYP.js +46280 -0
  30. package/dist/assets/{DataTableView-hUsgVnZS.js → DataTableView-0cgj7Yv8.js} +42 -35
  31. package/dist/assets/DataTableView-legacy-Bs1jkgGw.js +353 -0
  32. package/dist/assets/DemoFooter-CYGOF76r.js +70 -0
  33. package/dist/assets/DemoFooter-legacy-BDdJ7htI.js +39 -0
  34. package/dist/assets/{Draggable-DFf4aD-Y.js → Draggable-Cp3VJXN0.js} +1 -1
  35. package/dist/assets/Draggable-legacy-CyKi_Tb4.js +158 -0
  36. package/dist/assets/{EmptySharedSectionActionBox-BkPu0yI0.js → EmptySharedSectionActionBox-D83jdITF.js} +4 -4
  37. package/dist/assets/EmptySharedSectionActionBox-legacy-V1B39cgS.js +68 -0
  38. package/dist/assets/{EnterpriseEdition.ee-BoNEV-MB.js → EnterpriseEdition.ee-Dmuvy1Qj.js} +1 -1
  39. package/dist/assets/EnterpriseEdition.ee-legacy-D0gBfVDw.js +44 -0
  40. package/dist/assets/{EntityNotFound-Bs-aLs3W.js → EntityNotFound-BF7nteVf.js} +7 -7
  41. package/dist/assets/EntityNotFound-legacy-Bfl0-2gj.js +116 -0
  42. package/dist/assets/{EntityUnAuthorised-BwhGn6eD.js → EntityUnAuthorised-4No93VOO.js} +7 -7
  43. package/dist/assets/EntityUnAuthorised-legacy-DLIqjuJf.js +97 -0
  44. package/dist/assets/{ErrorView-Cvlb8nm0.js → ErrorView-GWT7FjjH.js} +9 -9
  45. package/dist/assets/ErrorView-legacy-CtfV-zYc.js +100 -0
  46. package/dist/assets/{EvaluationsRootView-DdOZORFr.js → EvaluationsRootView-C3RbV5Qf.js} +26 -26
  47. package/dist/assets/EvaluationsRootView-legacy-DNES1nzh.js +633 -0
  48. package/dist/assets/{EvaluationsView-DxiPOlGL.js → EvaluationsView-Da2okwlD.js} +20 -20
  49. package/dist/assets/EvaluationsView-legacy-DfePizpg.js +612 -0
  50. package/dist/assets/ExecutionsTime-legacy-CqDKZjaw.js +618 -0
  51. package/dist/assets/{ExecutionsTime-DwXL-TY4.js → ExecutionsTime-y_VFxk2z.js} +9 -9
  52. package/dist/assets/{ExecutionsView-B4XGhWmY.js → ExecutionsView-CHuoC0nO.js} +37 -37
  53. package/dist/assets/ExecutionsView-legacy-DD0RXem0.js +941 -0
  54. package/dist/assets/{ExternalSecretsProviderConnectionSwitch.ee-DCTg0mdX.js → ExternalSecretsProviderConnectionSwitch.ee-BQSSIasB.js} +4 -4
  55. package/dist/assets/ExternalSecretsProviderConnectionSwitch.ee-legacy-7UjbdgbG.js +269 -0
  56. package/dist/assets/FileSaver.min-legacy-BTN44Z38.js +100 -0
  57. package/dist/assets/{FixedCollectionParameter-DjdDaH5s.js → FixedCollectionParameter-BhQfNO8a.js} +48 -48
  58. package/dist/assets/FixedCollectionParameter-legacy-uiOfunC4.js +346 -0
  59. package/dist/assets/{ForgotMyPasswordView-KkAVBYit.js → ForgotMyPasswordView-V8EfVOR8.js} +15 -15
  60. package/dist/assets/ForgotMyPasswordView-legacy-BbZiFRc2.js +118 -0
  61. package/dist/assets/{InsightsChartAverageRuntime-D5Gh8Rz5.js → InsightsChartAverageRuntime-CfCpplsX.js} +8 -8
  62. package/dist/assets/InsightsChartAverageRuntime-legacy-C6yRYbdN.js +91 -0
  63. package/dist/assets/{InsightsChartFailed-D7PZ_ctV.js → InsightsChartFailed-DrX7-PQa.js} +7 -7
  64. package/dist/assets/InsightsChartFailed-legacy-BXNV41_X.js +82 -0
  65. package/dist/assets/{InsightsChartFailureRate-CpPU5Kwd.js → InsightsChartFailureRate-DGn_vu5L.js} +8 -8
  66. package/dist/assets/InsightsChartFailureRate-legacy-xpR-l77z.js +85 -0
  67. package/dist/assets/{InsightsChartTimeSaved-DYrv2t2N.js → InsightsChartTimeSaved-Fn70fEqD.js} +8 -8
  68. package/dist/assets/InsightsChartTimeSaved-legacy-DyXMw-Zj.js +99 -0
  69. package/dist/assets/{InsightsChartTotal-CNqL-Qn3.js → InsightsChartTotal-B0EltniK.js} +7 -7
  70. package/dist/assets/InsightsChartTotal-legacy-ny-Gn0NL.js +82 -0
  71. package/dist/assets/InsightsDashboard-legacy-bfD59wUo.js +562 -0
  72. package/dist/assets/{InsightsDashboard-CrJZtNDS.js → InsightsDashboard-vqQRDBrv.js} +36 -36
  73. package/dist/assets/{InsightsPaywall-DxgcxZ5z.js → InsightsPaywall-BKEVuxSt.js} +16 -16
  74. package/dist/assets/InsightsPaywall-legacy-By7YqflZ.js +83 -0
  75. package/dist/assets/{InsightsSummary-Bew3_p6D.js → InsightsSummary-DsQSWG2Q.js} +8 -8
  76. package/dist/assets/InsightsSummary-legacy-DK4uQ90J.js +225 -0
  77. package/dist/assets/{InsightsTableWorkflows-TAIASHgR.js → InsightsTableWorkflows-MahuiDFz.js} +16 -16
  78. package/dist/assets/InsightsTableWorkflows-legacy-By2jMj0_.js +269 -0
  79. package/dist/assets/{ItemsRenderer-BfXptelN.js → ItemsRenderer-CejxMtdi.js} +8 -8
  80. package/dist/assets/ItemsRenderer-legacy-Cv8U3BDP.js +1178 -0
  81. package/dist/assets/KeyboardShortcutTooltip-legacy-Bvz-OQ26.js +81 -0
  82. package/dist/assets/{KeyboardShortcutTooltip-y1pBqAge.js → KeyboardShortcutTooltip-qZ5YD2sD.js} +1 -1
  83. package/dist/assets/{LogsPanel-Uc0E6yn-.js → LogsPanel-DDYWCOb0.js} +28 -30
  84. package/dist/assets/LogsPanel-Dotn9lvR.js +57 -0
  85. package/dist/assets/LogsPanel-legacy-ByvltTa3.js +16 -0
  86. package/dist/assets/LogsPanel-legacy-CskB3POf.js +2951 -0
  87. package/dist/assets/{MainHeader-M-D-hY8c.js → MainHeader-B2hrGRGJ.js} +241 -65
  88. package/dist/assets/{MainHeader-Dz9UViYg.css → MainHeader-Csdi9iXJ.css} +177 -29
  89. package/dist/assets/MainHeader-legacy-B3RrmiZE.js +2193 -0
  90. package/dist/assets/{MainSidebar-Bf52gQzU.js → MainSidebar-BlYUNsoE.js} +26 -26
  91. package/dist/assets/MainSidebar-legacy-CNRw0zHi.js +1306 -0
  92. package/dist/assets/{MainSidebarUserArea-UHX8ACa4.js → MainSidebarUserArea-CX_QMKfH.js} +5 -5
  93. package/dist/assets/MainSidebarUserArea-legacy-0NdAGU8c.js +172 -0
  94. package/dist/assets/Modal-legacy-DoUf8p-N.js +265 -0
  95. package/dist/assets/{Modal-DwutFKNY.js → Modal-mampYWrf.js} +5 -5
  96. package/dist/assets/{ModalDrawer-B2sNzJVm.js → ModalDrawer-BJGlFvi2.js} +6 -6
  97. package/dist/assets/ModalDrawer-legacy-BXaxLKkg.js +308 -0
  98. package/dist/assets/{NDVEmptyState-DdpBamQ9.js → NDVEmptyState-C7QVArdv.js} +1 -1
  99. package/dist/assets/NDVEmptyState-legacy-DjsKEIfJ.js +19819 -0
  100. package/dist/assets/{NodeCreation-BRIx8Ei9.js → NodeCreation-CL1i8pHd.js} +46 -46
  101. package/dist/assets/NodeCreation-legacy-CaZ3pWYZ.js +273 -0
  102. package/dist/assets/{NodeCreator-DDG2GQ-C.js → NodeCreator-DEx3Dj6j.js} +31 -31
  103. package/dist/assets/NodeCreator-legacy-Dz9MkQtc.js +1670 -0
  104. package/dist/assets/{NodeDetailsView-4jVeGvDi.js → NodeDetailsView-WyL3mE7Y.js} +64 -64
  105. package/dist/assets/NodeDetailsView-legacy-CMUSzOjZ.js +1116 -0
  106. package/dist/assets/{NodeDetailsViewV2-MeaPvImX.js → NodeDetailsViewV2-Bc3aUBj3.js} +65 -65
  107. package/dist/assets/NodeDetailsViewV2-legacy-mj-LYRpv.js +1060 -0
  108. package/dist/assets/{NodeIcon-C-rkj6sB.js → NodeIcon-BYTrCZAx.js} +2 -2
  109. package/dist/assets/NodeIcon-legacy-BHX1t3Oi.js +127 -0
  110. package/dist/assets/{NodeSettings-gAtnSv8q.js → NodeSettings-CPhr6Uu2.js} +19 -19
  111. package/dist/assets/NodeSettings-legacy-BjwVqiPp.js +2811 -0
  112. package/dist/assets/{NodeView-jjqmiYDP.js → NodeView-CUs2uLnS.js} +69 -69
  113. package/dist/assets/NodeView-legacy-B7u8GgSk.js +2660 -0
  114. package/dist/assets/{SettingsProvisioningView-Dhfda99J.css → OAuthConsentView-CXZbBKS5.css} +74 -32
  115. package/dist/assets/OAuthConsentView-YjViDNW3.js +225 -0
  116. package/dist/assets/OAuthConsentView-legacy-CT4ApTLs.js +292 -0
  117. package/dist/assets/PageViewLayout-legacy-B1As2gDz.js +44 -0
  118. package/dist/assets/{ParameterInputList-kEoD9fc7.js → ParameterInputList-DTj_ngLA.js} +29 -29
  119. package/dist/assets/ParameterInputList-legacy-pcN7bYH4.js +38124 -0
  120. package/dist/assets/{PrebuiltAgentTemplatesView-Dd6IJD_W.js → PrebuiltAgentTemplatesView-BECOiYO1.js} +18 -18
  121. package/dist/assets/PrebuiltAgentTemplatesView-legacy-DYhUlIns.js +205 -0
  122. package/dist/assets/{ProjectBreadcrumb-scGlGqYf.js → ProjectBreadcrumb-ClcStQiI.js} +4 -4
  123. package/dist/assets/ProjectBreadcrumb-legacy-PE_pUf9P.js +140 -0
  124. package/dist/assets/{ProjectCardBadge-p4AY0ubu.js → ProjectCardBadge-CR1M799A.js} +5 -5
  125. package/dist/assets/ProjectCardBadge-legacy-DwhYlW-b.js +251 -0
  126. package/dist/assets/{ProjectHeader-BZeiGuD6.js → ProjectHeader-L2nKcFJq.js} +12 -11
  127. package/dist/assets/ProjectHeader-legacy-Dk15aN_m.js +710 -0
  128. package/dist/assets/{ProjectIcon-DqKjDNbR.js → ProjectIcon-CHk5fa0e.js} +1 -1
  129. package/dist/assets/ProjectIcon-legacy-PFbusJyz.js +109 -0
  130. package/dist/assets/{ProjectRoleView-ByzrSQP-.js → ProjectRoleView-BIInR1qk.js} +46 -31
  131. package/dist/assets/ProjectRoleView-legacy-BO9-6Zog.js +480 -0
  132. package/dist/assets/{ProjectRolesView-DclD8eEm.js → ProjectRolesView-D2-fIOtW.js} +24 -21
  133. package/dist/assets/ProjectRolesView-legacy-CWMn_I7U.js +321 -0
  134. package/dist/assets/{ProjectSettings-4wa93sE4.js → ProjectSettings-BlClYwF1.js} +27 -26
  135. package/dist/assets/ProjectSettings-legacy-BPsXj5XT.js +1070 -0
  136. package/dist/assets/{ProjectSharing-BVPUxo_M.js → ProjectSharing-CSeX6YY5.js} +5 -5
  137. package/dist/assets/ProjectSharing-legacy-xYY68ooo.js +307 -0
  138. package/dist/assets/{ProjectVariables-x9spBaqX.js → ProjectVariables-Bjzw7BIq.js} +34 -34
  139. package/dist/assets/ProjectVariables-legacy-DfW6sdX0.js +572 -0
  140. package/dist/assets/{PushConnectionTracker-ByNVqY0h.js → PushConnectionTracker-DFq8UG-S.js} +3 -3
  141. package/dist/assets/PushConnectionTracker-legacy-B0Q_Dv5f.js +65 -0
  142. package/dist/assets/{ResourcesListLayout-UXbxK1S7.js → ResourcesListLayout-Cf-VCtXT.js} +10 -10
  143. package/dist/assets/ResourcesListLayout-legacy-DYKabjb6.js +938 -0
  144. package/dist/assets/RunDataHtml-B1O-g3bi.js +7 -0
  145. package/dist/assets/{RunDataHtml-DdtrEw19.js → RunDataHtml-BNcvZDMJ.js} +1 -1
  146. package/dist/assets/RunDataHtml-legacy-DopSvQCJ.js +63 -0
  147. package/dist/assets/RunDataHtml-legacy-h0qPMlWv.js +16 -0
  148. package/dist/assets/{RunDataJson-CxLotBq-.js → RunDataJson-CtU-jO3b.js} +14 -17
  149. package/dist/assets/RunDataJson-legacy-CDVGwTtk.js +253 -0
  150. package/dist/assets/{RunDataJsonActions-qylVa2u8.js → RunDataJsonActions-DcS_v76R.js} +15 -15
  151. package/dist/assets/RunDataJsonActions-legacy-CamxDlZh.js +5126 -0
  152. package/dist/assets/RunDataParsedAiContent-BFEUw_Z8.js +25 -0
  153. package/dist/assets/{RunDataParsedAiContent-Cs80jq_q.js → RunDataParsedAiContent-BVsW98ij.js} +7 -7
  154. package/dist/assets/RunDataParsedAiContent-legacy-CQnMh9q4.js +16 -0
  155. package/dist/assets/RunDataParsedAiContent-legacy-y3M6jgoj.js +234 -0
  156. package/dist/assets/{RunDataSearch-BvoYWH8W.js → RunDataSearch-Dd6t4Vgs.js} +10 -10
  157. package/dist/assets/RunDataSearch-legacy-D2VmIo7g.js +194 -0
  158. package/dist/assets/{RunDataTable-d3eXUdSg.js → RunDataTable-CuP87FpN.js} +16 -16
  159. package/dist/assets/RunDataTable-legacy-ByZIy2Hl.js +724 -0
  160. package/dist/assets/{SamlOnboarding-CRtDDWqf.js → SamlOnboarding-R6iv6uwF.js} +15 -15
  161. package/dist/assets/SamlOnboarding-legacy-3hKQbF8_.js +92 -0
  162. package/dist/assets/{SaveButton-D1iDaopV.js → SaveButton-CtUWsjwd.js} +3 -3
  163. package/dist/assets/SaveButton-legacy-6GGcUStL.js +123 -0
  164. package/dist/assets/{SelectedItemsInfo-CSzniBOD.js → SelectedItemsInfo-CFCO70kL.js} +2 -2
  165. package/dist/assets/SelectedItemsInfo-legacy-u_4Aalns.js +95 -0
  166. package/dist/assets/{SettingsApiView-DqnHEaAj.js → SettingsApiView-Aw62JsK1.js} +20 -20
  167. package/dist/assets/SettingsApiView-legacy-C9zAm0u7.js +409 -0
  168. package/dist/assets/SettingsCommunityNodesView-legacy-BKyymFU0.js +443 -0
  169. package/dist/assets/{SettingsCommunityNodesView-C7JC1VAK.js → SettingsCommunityNodesView-usMNCBTP.js} +34 -34
  170. package/dist/assets/{SettingsExternalSecrets-CqTHs6zk.js → SettingsExternalSecrets-3H27kaGp.js} +18 -18
  171. package/dist/assets/SettingsExternalSecrets-legacy-CUMq_ivN.js +315 -0
  172. package/dist/assets/SettingsLdapView-legacy-D5vgdVWc.js +2246 -0
  173. package/dist/assets/{SettingsLdapView-zifHhZKy.js → SettingsLdapView-oVEYnCs1.js} +21 -21
  174. package/dist/assets/{SettingsLogStreamingView-CQwuqSl8.js → SettingsLogStreamingView-DBnackHm.js} +20 -20
  175. package/dist/assets/SettingsLogStreamingView-legacy-CQ8nq1FW.js +479 -0
  176. package/dist/assets/SettingsMCPView-BD9hb-oe.js +936 -0
  177. package/dist/assets/SettingsMCPView-BGXq9o_x.css +1248 -0
  178. package/dist/assets/SettingsMCPView-legacy-B8E45TNn.js +1111 -0
  179. package/dist/assets/{SettingsPersonalView-C1NF8zuk.js → SettingsPersonalView-Dw-9ZYmb.js} +16 -16
  180. package/dist/assets/SettingsPersonalView-legacy-BCa5pb35.js +484 -0
  181. package/dist/assets/SettingsProvisioningView-C4D0a4Kz.css +303 -0
  182. package/dist/assets/SettingsProvisioningView-DpAIsdfr.js +448 -0
  183. package/dist/assets/SettingsProvisioningView-legacy-7LiGCRgO.js +530 -0
  184. package/dist/assets/{SettingsSourceControl-CZryQCqT.js → SettingsSourceControl-DJj3DHHA.js} +20 -20
  185. package/dist/assets/SettingsSourceControl-legacy-BdmpiLob.js +580 -0
  186. package/dist/assets/{SettingsSso-CeeFO_Pv.js → SettingsSso-BeDmk3V-.js} +21 -21
  187. package/dist/assets/SettingsSso-legacy-BTbHZn2L.js +507 -0
  188. package/dist/assets/{SettingsUsageAndPlan-DMMd5WcZ.js → SettingsUsageAndPlan-FoM6V1Ld.js} +19 -19
  189. package/dist/assets/SettingsUsageAndPlan-legacy-m-cDuLWb.js +505 -0
  190. package/dist/assets/{SettingsUsersView-DWVyE4hY.js → SettingsUsersView-BwTyYPXj.js} +21 -21
  191. package/dist/assets/SettingsUsersView-legacy-D39e8lpD.js +931 -0
  192. package/dist/assets/{SettingsView-trF6L-tM.js → SettingsView-BfAuJHR3.js} +13 -12
  193. package/dist/assets/SettingsView-legacy-hgJAMD5w.js +346 -0
  194. package/dist/assets/{SetupTemplateFormStep-BsgzR5CN.js → SetupTemplateFormStep-5Dxz6mL3.js} +6 -6
  195. package/dist/assets/SetupTemplateFormStep-legacy-Br6RSFQH.js +548 -0
  196. package/dist/assets/{SetupView-Bx4ZLcja.js → SetupView-CvELBthc.js} +15 -15
  197. package/dist/assets/SetupView-legacy-yEyZVczN.js +126 -0
  198. package/dist/assets/{SetupWorkflowCredentialsButton-DR_aufFd.js → SetupWorkflowCredentialsButton-DAFrS1pq.js} +12 -12
  199. package/dist/assets/SetupWorkflowCredentialsButton-legacy-BkSWj18e.js +84 -0
  200. package/dist/assets/SetupWorkflowFromTemplateView-legacy-ByqlU9fc.js +376 -0
  201. package/dist/assets/{SetupWorkflowFromTemplateView-Ded77Ph-.js → SetupWorkflowFromTemplateView-uxGhfWLo.js} +21 -21
  202. package/dist/assets/SigninView-legacy-wkJIfoQV.js +441 -0
  203. package/dist/assets/{SigninView-DXPofyPm.js → SigninView-qzciwLod.js} +16 -16
  204. package/dist/assets/{SignoutView-B7H_dRJO.js → SignoutView-BAHDN7_D.js} +10 -10
  205. package/dist/assets/SignoutView-legacy-7HQWbMDt.js +56 -0
  206. package/dist/assets/{SignupView-BHWVvwh8.js → SignupView-ClulJHw1.js} +15 -15
  207. package/dist/assets/SignupView-legacy-2pnkjTn7.js +154 -0
  208. package/dist/assets/TagsDropdown-legacy-BtJ1Sjlj.js +285 -0
  209. package/dist/assets/{TagsDropdown-D6CYk5R8.js → TagsDropdown-sf5rCG4m.js} +4 -4
  210. package/dist/assets/{TemplateDetails-ezK9JOOl.js → TemplateDetails-DQtY0s_s.js} +7 -7
  211. package/dist/assets/TemplateDetails-legacy-BsMCyy8I.js +197 -0
  212. package/dist/assets/{TemplateList-DztR2yKa.js → TemplateList-DRC8FrQz.js} +5 -5
  213. package/dist/assets/TemplateList-legacy-D0LSlQK9.js +411 -0
  214. package/dist/assets/{TemplatesCollectionView-Bu_YRd84.js → TemplatesCollectionView-DONrZBME.js} +23 -23
  215. package/dist/assets/TemplatesCollectionView-legacy-HXEUNo_l.js +248 -0
  216. package/dist/assets/{TemplatesSearchView-C7zBEV2b.js → TemplatesSearchView-DDZuvKqM.js} +21 -21
  217. package/dist/assets/TemplatesSearchView-legacy-28acdtqn.js +1427 -0
  218. package/dist/assets/{TemplatesView-BnozPkTX.js → TemplatesView-BmiQGH35.js} +3 -3
  219. package/dist/assets/TemplatesView-legacy-B2w8licK.js +113 -0
  220. package/dist/assets/{TemplatesWorkflowView-BTyHc3MG.js → TemplatesWorkflowView-Cdwrydpt.js} +25 -25
  221. package/dist/assets/TemplatesWorkflowView-legacy-C_2wkoc1.js +220 -0
  222. package/dist/assets/{TestRunDetailView-B76TM9u8.js → TestRunDetailView-Dhq4tAJV.js} +18 -18
  223. package/dist/assets/TestRunDetailView-legacy-hQli5No4.js +500 -0
  224. package/dist/assets/TextWithHighlights-legacy-CVW5NpX4.js +108 -0
  225. package/dist/assets/{TimeAgo-Gv5h1Utx.js → TimeAgo-BFJOHR5_.js} +2 -2
  226. package/dist/assets/TimeAgo-legacy-OJCaC3xJ.js +200 -0
  227. package/dist/assets/{TriggerPanel-Dx9LpA4p.js → TriggerPanel-DtaNk_Mt.js} +80 -28
  228. package/dist/assets/{TriggerPanel-BQveVt6Q.css → TriggerPanel-jKx3Ut66.css} +31 -10
  229. package/dist/assets/TriggerPanel-legacy-DGckjcgd.js +1519 -0
  230. package/dist/assets/{VirtualSchema-CUUzo795.js → VirtualSchema-BPKNcaHe.js} +16 -16
  231. package/dist/assets/VirtualSchema-Ce9RryqL.js +43 -0
  232. package/dist/assets/VirtualSchema-legacy-BT94K3Qg.js +2655 -0
  233. package/dist/assets/VirtualSchema-legacy-DWrDvaPx.js +16 -0
  234. package/dist/assets/{VueMarkdown-CiR4a0gO.js → VueMarkdown-CF7KJfpC.js} +1 -1
  235. package/dist/assets/VueMarkdown-legacy-Dyo2dNbU.js +50 -0
  236. package/dist/assets/{WorkerView-D7h4pmTk.js → WorkerView-CUypvdcg.js} +39 -39
  237. package/dist/assets/WorkerView-legacy-DMYRM_Cm.js +636 -0
  238. package/dist/assets/{WorkflowActivator-k3HTYXbc.js → WorkflowActivator-DcgoNwmT.js} +8 -8
  239. package/dist/assets/WorkflowActivator-legacy-PoTuxdWE.js +473 -0
  240. package/dist/assets/{WorkflowExecutionsInfoAccordion-DL5cBkbK.js → WorkflowExecutionsInfoAccordion-C6OXDZEA.js} +7 -7
  241. package/dist/assets/WorkflowExecutionsInfoAccordion-legacy-B4TTZinW.js +226 -0
  242. package/dist/assets/{WorkflowExecutionsLandingPage-DlXz9Jry.js → WorkflowExecutionsLandingPage-D2pYB3tS.js} +21 -21
  243. package/dist/assets/WorkflowExecutionsLandingPage-legacy-DaS6jgLc.js +136 -0
  244. package/dist/assets/{WorkflowExecutionsPreview-DJWD2i74.js → WorkflowExecutionsPreview-B-EBo84g.js} +25 -25
  245. package/dist/assets/WorkflowExecutionsPreview-legacy-BZAG_FE2.js +745 -0
  246. package/dist/assets/{WorkflowExecutionsView-CK-2WqY7.js → WorkflowExecutionsView-DPiBL6kC.js} +38 -38
  247. package/dist/assets/WorkflowExecutionsView-legacy-C6eVhTue.js +880 -0
  248. package/dist/assets/{WorkflowHistory-Cb-ZoRBp.js → WorkflowHistory-ZHxuKv_S.js} +19 -19
  249. package/dist/assets/WorkflowHistory-legacy-D9EpXPrw.js +881 -0
  250. package/dist/assets/{WorkflowOnboardingView-CguOMlib.js → WorkflowOnboardingView-B7iQi_8k.js} +9 -9
  251. package/dist/assets/WorkflowOnboardingView-legacy-DGVGXrbp.js +95 -0
  252. package/dist/assets/WorkflowPreview-legacy-Ck8uteSS.js +249 -0
  253. package/dist/assets/{WorkflowPreview-DY79uYFw.js → WorkflowPreview-q32aqNwB.js} +5 -5
  254. package/dist/assets/{WorkflowTagsDropdown-CdEFZM1A.js → WorkflowTagsDropdown-DTUxLHbz.js} +2 -2
  255. package/dist/assets/WorkflowTagsDropdown-legacy-D6X-TzYC.js +90 -0
  256. package/dist/assets/{WorkflowsView-BnxQSw3m.js → WorkflowsView-CMeOv7jM.js} +98 -80
  257. package/dist/assets/{WorkflowsView-2XTsT7zB.css → WorkflowsView-M8ExG7Q2.css} +22 -19
  258. package/dist/assets/WorkflowsView-legacy-BpAAeN0R.js +3521 -0
  259. package/dist/assets/{_MapCache-Byd-DTfo.js → _MapCache-Dw6Llo22.js} +74 -11
  260. package/dist/assets/_MapCache-legacy-DcX1vy0l.js +11084 -0
  261. package/dist/assets/_plugin-vue_export-helper-legacy-DZMI5HPp.js +19 -0
  262. package/dist/assets/{apiKeys.store-CPsBJKkq.js → apiKeys.store-HKuBxy3l.js} +1 -1
  263. package/dist/assets/apiKeys.store-legacy-BLC1aaW1.js +76 -0
  264. package/dist/assets/{assistant.store-DvuxtpS4.js → assistant.store-BtplYeLr.js} +6 -6
  265. package/dist/assets/assistant.store-legacy-Dk3PMmMU.js +1313 -0
  266. package/dist/assets/{auth.eventBus-YsWbuB84.js → auth.eventBus-16zfbqGs.js} +1 -1
  267. package/dist/assets/auth.eventBus-legacy-HP2TbQxy.js +22 -0
  268. package/dist/assets/{banners.store-BQPwuqhn.js → banners.store-DikUBA5o.js} +3 -3
  269. package/dist/assets/banners.store-legacy-DUTxfINX.js +260 -0
  270. package/dist/assets/buttons.esm-legacy-BLrJSt1Z.js +419 -0
  271. package/dist/assets/chart-legacy-DbW-cf8m.js +12055 -0
  272. package/dist/assets/chartjs.utils-legacy-CKDO0Ba9.js +208 -0
  273. package/dist/assets/{chartjs.utils-Bf07Y-P-.js → chartjs.utils-om4DCCN2.js} +3 -3
  274. package/dist/assets/{chatPanel.store-fM-8PK9i.js → chatPanel.store-BZOiAoXE.js} +4 -4
  275. package/dist/assets/chatPanel.store-legacy-CQ6tsDjT.js +153 -0
  276. package/dist/assets/chunk-legacy-Re9CbdfL.js +59 -0
  277. package/dist/assets/{cloudPlan.store-DrraBpZJ.js → cloudPlan.store-DT2PFV79.js} +2 -2
  278. package/dist/assets/cloudPlan.store-legacy-BPgz6zU7.js +208 -0
  279. package/dist/assets/{col-DK_GtMhM.js → col-Da3-PCMn.js} +3 -3
  280. package/dist/assets/col-legacy-Bhm60Oe3.js +186 -0
  281. package/dist/assets/{constants-DvlTm3U4.js → constants-C5Tj3dXQ.js} +362 -356
  282. package/dist/assets/constants-legacy-CLA25gM9.js +61343 -0
  283. package/dist/assets/constants-legacy-D22nGw-a.js +26 -0
  284. package/dist/assets/{core-6lPsS9S5.js → core-CH2Kku_3.js} +1 -1
  285. package/dist/assets/core-legacy-BVoFM47F.js +1857 -0
  286. package/dist/assets/core-legacy-De470jmW.js +20 -0
  287. package/dist/assets/{dataTable.store-u9fGWest.js → dataTable.store-BC5cIRU-.js} +5 -3
  288. package/dist/assets/dataTable.store-legacy-BKpQb7Gy.js +202 -0
  289. package/dist/assets/{date-picker-CVSd-BRt.js → date-picker-D6cS76wx.js} +3 -3
  290. package/dist/assets/date-picker-legacy-pB1SshLs.js +4508 -0
  291. package/dist/assets/{dateFormatter-BD73Za8B.js → dateFormatter-DysKGI6w.js} +1 -1
  292. package/dist/assets/dateFormatter-legacy-Dl8dqhrg.js +53 -0
  293. package/dist/assets/dateformat-legacy-Xt1X-tys.js +161 -0
  294. package/dist/assets/{dialog-BMoy5MDa.js → dialog-Cgy1Sihv.js} +4 -4
  295. package/dist/assets/dialog-legacy-BrpTfsO5.js +518 -0
  296. package/dist/assets/{dist-CWw8iddm.js → dist-D33xoYUY.js} +1 -1
  297. package/dist/assets/dist-legacy-8f5owWm6.js +204 -0
  298. package/dist/assets/{empty-BuGRxzl4.js → empty-RTEMfF4N.js} +1 -1
  299. package/dist/assets/empty-legacy-DnVUoqbC.js +2409 -0
  300. package/dist/assets/en-legacy-Bgme8Vbm.js +98 -0
  301. package/dist/assets/en-legacy-BwVJMmMW.js +16 -0
  302. package/dist/assets/{es-BazDU8Wd.js → es-Cjns9o4Y.js} +1 -1
  303. package/dist/assets/es-legacy-8dRs2C3P.js +16006 -0
  304. package/dist/assets/{evaluation.constants-CIiAC2dT.js → evaluation.constants-BJTUNo2q.js} +3 -3
  305. package/dist/assets/evaluation.constants-legacy-7byaeleB.js +363 -0
  306. package/dist/assets/{executions.store-IU9p1s46.js → executions.store-D2xBmTFC.js} +1 -1
  307. package/dist/assets/executions.store-legacy-BzRopbKX.js +246 -0
  308. package/dist/assets/exports-legacy-RTRnyI4R.js +3103 -0
  309. package/dist/assets/{externalSecrets.ee.store-1z63wMHN.js → externalSecrets.ee.store-CbqCu_KF.js} +2 -2
  310. package/dist/assets/externalSecrets.ee.store-legacy-BP6gQv_P.js +145 -0
  311. package/dist/assets/{focusPanel.store-BJpwjMIG.js → focusPanel.store-CPU1uVq-.js} +4 -4
  312. package/dist/assets/focusPanel.store-legacy-BcpstEbJ.js +264 -0
  313. package/dist/assets/{folders.store-Db975T-w.js → folders.store-CmYx4Y_F.js} +2 -2
  314. package/dist/assets/folders.store-legacy-BAC47Qt0.js +267 -0
  315. package/dist/assets/{icon-DhADuA9N.js → icon-DmIKo5zZ.js} +1 -1
  316. package/dist/assets/icon-legacy-gLTnORTx.js +458 -0
  317. package/dist/assets/{index-C8erHZ_Y.css → index-4I6DPmNr.css} +1 -1
  318. package/dist/assets/{index-C25i7qsE.js → index-CSjecLC-.js} +189 -1627
  319. package/dist/assets/index-legacy-BeiTnujt.js +28424 -0
  320. package/dist/assets/insights.constants-legacy-D5Y8YhR_.js +64 -0
  321. package/dist/assets/{insights.store-DC_enAA-.js → insights.store-aHF8maKY.js} +4 -4
  322. package/dist/assets/insights.store-legacy-XeWToovL.js +89 -0
  323. package/dist/assets/{insights.utils-ClJRVRAK.js → insights.utils-ClwWcg-l.js} +8 -8
  324. package/dist/assets/insights.utils-legacy-DWaseOa4.js +96 -0
  325. package/dist/assets/{isEmpty-DrZRN4lR.js → isEmpty-Dg0afC99.js} +30 -31
  326. package/dist/assets/isEmpty-legacy-7ibnR7BO.js +43393 -0
  327. package/dist/assets/{languageModules-CNluY7w0.js → languageModules-BF7Ga1Pj.js} +1 -1
  328. package/dist/assets/languageModules-legacy-BaU1eOK3.js +7184 -0
  329. package/dist/assets/{logStreaming.store-CPvxjcQB.js → logStreaming.store-DFZnZ2Rt.js} +1 -1
  330. package/dist/assets/logStreaming.store-legacy-B_cbQPAW.js +209 -0
  331. package/dist/assets/mcp.constants-BCNosk1p.js +5 -0
  332. package/dist/assets/mcp.constants-legacy-CZfk8DW2.js +18 -0
  333. package/dist/assets/{mcp.store-YGfe2oZU.js → mcp.store-Bd62s_4P.js} +23 -3
  334. package/dist/assets/mcp.store-legacy-C00py4q_.js +125 -0
  335. package/dist/assets/{merge-CKEa8BM2.js → merge-Dnkh07HW.js} +1 -1
  336. package/dist/assets/merge-legacy-CcVOuFTi.js +1529 -0
  337. package/dist/assets/{nodeCreator.store-DHz0Nc1Y.js → nodeCreator.store-C1GkQ_2N.js} +8 -8
  338. package/dist/assets/nodeCreator.store-legacy-CjrGX9Lm.js +4758 -0
  339. package/dist/assets/{nodeIcon-ry_JIpAT.js → nodeIcon-ChI78z3o.js} +2 -2
  340. package/dist/assets/nodeIcon-legacy-DD6sIN5e.js +122 -0
  341. package/dist/assets/{nodeTransforms-PeZUYiCs.js → nodeTransforms-C7fmOXNl.js} +2 -2
  342. package/dist/assets/nodeTransforms-legacy-BI0GkY5n.js +86 -0
  343. package/dist/assets/npsSurvey.store-legacy-oZP0npqy.js +123 -0
  344. package/dist/assets/{npsSurvey.store-BTpA4Bdf.js → npsSurvey.store-ylMA9JZD.js} +2 -2
  345. package/dist/assets/{orderBy-CMVxNao4.js → orderBy-FDQLKrkD.js} +2 -2
  346. package/dist/assets/orderBy-legacy-BZrAOdi3.js +63 -0
  347. package/dist/assets/{overlay-B8MMvNgs.js → overlay-C02_kK8Y.js} +2 -2
  348. package/dist/assets/overlay-legacy-CfieUdAZ.js +218 -0
  349. package/dist/assets/{path-browserify-DsmB_HMK.js → path-browserify-CTmc1OxV.js} +1 -1
  350. package/dist/assets/path-browserify-legacy-DJbEMZcd.js +328 -0
  351. package/dist/assets/{personalizedTemplatesV3.store-C0D2WZuq.js → personalizedTemplatesV3.store-alXco4LN.js} +4 -4
  352. package/dist/assets/personalizedTemplatesV3.store-legacy-D4xPTzWQ.js +313 -0
  353. package/dist/assets/{pickBy-DWZbVA0W.js → pickBy-SlOaKcI1.js} +2 -2
  354. package/dist/assets/pickBy-legacy-5fAqUgO0.js +59 -0
  355. package/dist/assets/polyfills-legacy-07zJxDbQ.js +4836 -0
  356. package/dist/assets/preload-helper-legacy-CXRjoQ0T.js +73 -0
  357. package/dist/assets/{radio-5XOrKEP7.js → radio-BlnltmtN.js} +3 -3
  358. package/dist/assets/radio-legacy-CvqQyMRY.js +323 -0
  359. package/dist/assets/{readyToRunWorkflows.store-C23cIyhu.js → readyToRunWorkflows.store-BXoUeVNE.js} +5 -5
  360. package/dist/assets/readyToRunWorkflows.store-legacy-CLv3FVF5.js +2086 -0
  361. package/dist/assets/{readyToRunWorkflowsV2.store-BxZUJyXQ.js → readyToRunWorkflowsV2.store-BJAu2HwR.js} +7 -7
  362. package/dist/assets/readyToRunWorkflowsV2.store-legacy-CM_1ZlJR.js +549 -0
  363. package/dist/assets/retry-legacy-CkXCWkMV.js +48 -0
  364. package/dist/assets/{roles.store-Bk6Eo7y8.js → roles.store-DzShOYE2.js} +2 -2
  365. package/dist/assets/roles.store-legacy-BxleDMZw.js +67 -0
  366. package/dist/assets/{router-D4zIcC5W.js → router-B0aGwO7-.js} +93 -84
  367. package/dist/assets/router-legacy-BCUbS_pL.js +1705 -0
  368. package/dist/assets/{sanitize-html-BuXr7o4T.js → sanitize-html-Cfxibw1n.js} +2 -2
  369. package/dist/assets/sanitize-html-legacy-DfOUEbdf.js +9987 -0
  370. package/dist/assets/{schemaPreview.store-BVhugjbw.js → schemaPreview.store-DoyPeLof.js} +2 -2
  371. package/dist/assets/schemaPreview.store-legacy-CtBwiQEG.js +153 -0
  372. package/dist/assets/{semver-lN9oCZPq.js → semver-D1BuALCK.js} +2 -2
  373. package/dist/assets/semver-legacy-iZYhFDDU.js +1499 -0
  374. package/dist/assets/smartDecimal-legacy-BeOdMR2z.js +19 -0
  375. package/dist/assets/sortByProperty-legacy-CgPLoqtk.js +21 -0
  376. package/dist/assets/{sourceControl.eventBus-BkPwCZw_.js → sourceControl.eventBus-kAyFUXsG.js} +1 -1
  377. package/dist/assets/sourceControl.eventBus-legacy-oIGia_rL.js +17 -0
  378. package/dist/assets/{src-D6S9Khji.js → src-DsaRShTK.js} +648 -600
  379. package/dist/assets/src-legacy-6Jvz4Sen.js +64208 -0
  380. package/dist/assets/{sso.store-qzj82Xj4.js → sso.store-Cw8J8on5.js} +1 -1
  381. package/dist/assets/sso.store-legacy-Ci_mQS0X.js +185 -0
  382. package/dist/assets/{table-s-zqHExs.js → table-adhNf731.js} +3 -3
  383. package/dist/assets/table-legacy-DECH20yK.js +4957 -0
  384. package/dist/assets/{templateActions-BeIpzgaa.js → templateActions-B4t6RCi8.js} +4 -4
  385. package/dist/assets/templateActions-legacy-CqwW8d3O.js +134 -0
  386. package/dist/assets/{templateTransforms-Cgy40V1P.js → templateTransforms-Bu9cSoOY.js} +1 -1
  387. package/dist/assets/templateTransforms-legacy-DToYks9P.js +84 -0
  388. package/dist/assets/{templates.store-COjIpQaS.js → templates.store-Bt8tpLPx.js} +3 -3
  389. package/dist/assets/templates.store-legacy-CPyYqMqR.js +459 -0
  390. package/dist/assets/{truncate-DGRsht-H.js → truncate-7XypoloM.js} +1 -1
  391. package/dist/assets/truncate-legacy-D2_XDpGK.js +5763 -0
  392. package/dist/assets/{uniqBy-BUNHbbw3.js → uniqBy-DAOmWpEt.js} +1 -1
  393. package/dist/assets/uniqBy-legacy-8A5HU2la.js +52 -0
  394. package/dist/assets/{usage.store-EBmhHKPv.js → usage.store-Xl7x6DGx.js} +1 -1
  395. package/dist/assets/usage.store-legacy-CVF7gKOp.js +126 -0
  396. package/dist/assets/{useActions-CqdsN2GH.js → useActions-BeWbvBcf.js} +5 -5
  397. package/dist/assets/useActions-legacy-B8B-O_ET.js +330 -0
  398. package/dist/assets/{useAgent-BHJHCfap.js → useAgent-C1ldRVaA.js} +1 -1
  399. package/dist/assets/useAgent-legacy-BSTQ3a_e.js +28 -0
  400. package/dist/assets/{useBeforeUnload-BPhnlPrH.js → useBeforeUnload-Dk9osL_V.js} +3 -3
  401. package/dist/assets/useBeforeUnload-legacy-hCNmJWkt.js +69 -0
  402. package/dist/assets/{useBugReporting-oDEHgPM1.js → useBugReporting-B8EUAXTd.js} +9 -9
  403. package/dist/assets/useBugReporting-legacy-Dbui6uN6.js +383 -0
  404. package/dist/assets/{useCanvasMapping-DWlYBxgN.js → useCanvasMapping-CC7eJyt0.js} +21 -20
  405. package/dist/assets/useCanvasMapping-legacy-DRk52E6N.js +14180 -0
  406. package/dist/assets/{useCanvasOperations-CFsSFVcO.js → useCanvasOperations-Cxgmc_7x.js} +13 -13
  407. package/dist/assets/useCanvasOperations-legacy-DDhXmhZf.js +1992 -0
  408. package/dist/assets/{useChatCredentials-CMV_NA0l.js → useChatCredentials-DQJGjWzL.js} +24 -12
  409. package/dist/assets/useChatCredentials-legacy-BB0gXwkF.js +717 -0
  410. package/dist/assets/{useChatHubSidebarState-CM9tokIj.js → useChatHubSidebarState-DpLl3Oap.js} +14 -7
  411. package/dist/assets/useChatHubSidebarState-legacy-fa3EFauo.js +733 -0
  412. package/dist/assets/{useClipboard-fRnZpGbX.js → useClipboard-BkbYyMX3.js} +2 -2
  413. package/dist/assets/useClipboard-legacy-CF0IG1Mu.js +78 -0
  414. package/dist/assets/{useCommandBar-_c6cO-zw.js → useCommandBar-DOChPPYZ.js} +29 -25
  415. package/dist/assets/useCommandBar-legacy-Bx4lZuXv.js +2100 -0
  416. package/dist/assets/{useDebounce-BgcdaJ78.js → useDebounce-DFa0sFlC.js} +2 -2
  417. package/dist/assets/useDebounce-legacy-D-CoXkwk.js +326 -0
  418. package/dist/assets/{useExecutionData-Bk540rxU.js → useExecutionData-D1Hu-5sr.js} +1 -1
  419. package/dist/assets/useExecutionData-legacy-DmERlRFZ.js +42 -0
  420. package/dist/assets/useExecutionDebugging-legacy-DARRX5Rl.js +152 -0
  421. package/dist/assets/{useExecutionDebugging-BNrxsZTN.js → useExecutionDebugging-yG8CO6AO.js} +7 -7
  422. package/dist/assets/useExecutionHelpers-legacy-CQh3o0WC.js +120 -0
  423. package/dist/assets/{useExecutionHelpers-DrFWi6u7.js → useExecutionHelpers-sUZnNg8O.js} +5 -5
  424. package/dist/assets/{useExternalHooks-SxBXYVNW.js → useExternalHooks-DSSTcvme.js} +1 -1
  425. package/dist/assets/useExternalHooks-legacy-DAJrb39U.js +53 -0
  426. package/dist/assets/{useImportCurlCommand-obipPNWg.js → useImportCurlCommand-C8Mv1xEK.js} +11 -11
  427. package/dist/assets/useImportCurlCommand-legacy-Cs_C8ucb.js +8269 -0
  428. package/dist/assets/useIntersectionObserver-legacy-CQWXa295.js +69 -0
  429. package/dist/assets/{useKeybindings-DlmwtVDN.js → useKeybindings-BeP-kiF_.js} +4 -4
  430. package/dist/assets/useKeybindings-legacy-BP8xe8FX.js +118 -0
  431. package/dist/assets/{useLogsTreeExpand-gKLCILZL.js → useLogsTreeExpand-VaIZtJEy.js} +11 -11
  432. package/dist/assets/useLogsTreeExpand-legacy-9ArL6-As.js +1039 -0
  433. package/dist/assets/{useMcp-_gyuyL1x.js → useMcp-CXTbPxKj.js} +3 -7
  434. package/dist/assets/useMcp-legacy-Dx5gBZcF.js +46 -0
  435. package/dist/assets/{useMessage-Ceo97RRX.js → useMessage-hiDKbQYH.js} +5 -5
  436. package/dist/assets/useMessage-legacy-Cl537NB0.js +683 -0
  437. package/dist/assets/{usePageRedirectionHelper-C_ctyI4O.js → usePageRedirectionHelper-C8YGBi-F.js} +4 -4
  438. package/dist/assets/usePageRedirectionHelper-legacy-CeLk3K53.js +95 -0
  439. package/dist/assets/{usePinnedData-Csij2qN3.js → usePinnedData-BsuIBj2b.js} +5 -5
  440. package/dist/assets/usePinnedData-legacy-9ciMJD_m.js +283 -0
  441. package/dist/assets/{usePushConnection-XZibrqm8.js → usePushConnection-cXyYzGoP.js} +11 -11
  442. package/dist/assets/usePushConnection-legacy-D3xue9ej.js +763 -0
  443. package/dist/assets/{useRecentResources-FhIOba0w.js → useRecentResources-D1-21efA.js} +7 -7
  444. package/dist/assets/useRecentResources-legacy-CdJaBL9r.js +159 -0
  445. package/dist/assets/{useRunWorkflow-_-_hUnHE.js → useRunWorkflow-BLqckUNU.js} +9 -9
  446. package/dist/assets/useRunWorkflow-legacy-ClvXUChT.js +1136 -0
  447. package/dist/assets/{useTelemetry-EOV0Llso.js → useTelemetry-DedEakwK.js} +89 -54
  448. package/dist/assets/useTelemetry-legacy-Bu_8SoSm.js +31004 -0
  449. package/dist/assets/{useTelemetryContext-CSMUQPEW.js → useTelemetryContext-DX-4dy5E.js} +1 -1
  450. package/dist/assets/useTelemetryContext-legacy-DQvfjWrO.js +81 -0
  451. package/dist/assets/{useToast-BlMNYwds.js → useToast-LQk5sJH0.js} +6 -6
  452. package/dist/assets/useToast-legacy-CIRx5txg.js +610 -0
  453. package/dist/assets/{useWorkflowActivate-OfPMIBJ5.js → useWorkflowActivate-BSpG7MxI.js} +8 -8
  454. package/dist/assets/useWorkflowActivate-legacy-Btoe32cC.js +125 -0
  455. package/dist/assets/{useWorkflowSaving-CWyt929n.js → useWorkflowSaving-GL9jVODA.js} +10 -10
  456. package/dist/assets/useWorkflowSaving-legacy-8U0vS257.js +329 -0
  457. package/dist/assets/{useWorkflowsCache-BSXTJC8C.js → useWorkflowsCache-B4y-W-2Y.js} +1 -1
  458. package/dist/assets/useWorkflowsCache-legacy-Cpa2s1nv.js +217 -0
  459. package/dist/assets/{versions.store-Dx98n6R_.js → versions.store-Bon8LCsf.js} +3 -3
  460. package/dist/assets/versions.store-legacy-ZeK5FOAp.js +244 -0
  461. package/dist/assets/vue-json-pretty-BAtqAAV1.js +1130 -0
  462. package/dist/assets/vue-json-pretty-legacy-Dk5EQofb.js +1282 -0
  463. package/dist/assets/vue-legacy-Cj7LJTPA.js +4579 -0
  464. package/dist/assets/vue.runtime.esm-bundler-legacy-Bq05oSFs.js +8050 -0
  465. package/dist/assets/xml-legacy-Cyrxa7r6.js +1245 -0
  466. package/dist/index.html +107 -103
  467. package/dist/static/openChat.png +0 -0
  468. package/package.json +1 -1
  469. package/vite.config.mts +0 -2
  470. package/dist/assets/CollectionParameter-CizL_Xml.js +0 -58
  471. package/dist/assets/DemoFooter-D8E8sLCS.js +0 -71
  472. package/dist/assets/LogsPanel-sLas9qHQ.js +0 -58
  473. package/dist/assets/RunDataHtml-X9lzUZaX.js +0 -7
  474. package/dist/assets/RunDataParsedAiContent-DBP5JHe4.js +0 -25
  475. package/dist/assets/SettingsMCPView-BBO_ZyBU.css +0 -552
  476. package/dist/assets/SettingsMCPView-Chjl8-hw.js +0 -584
  477. package/dist/assets/SettingsProvisioningView-BFUB6c2Z.js +0 -252
  478. package/dist/assets/VirtualSchema-5T21Yyqx.js +0 -43
  479. package/dist/assets/vue-json-pretty-BltKoWq2.js +0 -681
  480. /package/dist/assets/{AnimatedSpinner-Dd4F9nQ8.js → AnimatedSpinner-4ie3BOLv.js} +0 -0
  481. /package/dist/assets/{PageViewLayout-Ccqeja5V.js → PageViewLayout-kj_BBPfv.js} +0 -0
  482. /package/dist/assets/{buttons.esm-Euf82NbC.js → buttons.esm-CT4flsfB.js} +0 -0
  483. /package/dist/assets/{chart-BI8B7UPV.js → chart-CE3HWIkr.js} +0 -0
  484. /package/dist/assets/{constants-CPQyU8WO.js → constants-9ReQTHaF.js} +0 -0
  485. /package/dist/assets/{core-CIkXL_1D.js → core-CzunNfUb.js} +0 -0
  486. /package/dist/assets/{insights.constants-NogjFJ3a.js → insights.constants-DK2g3nnD.js} +0 -0
  487. /package/dist/assets/{smartDecimal-5rgLDM96.js → smartDecimal-e9uPsnJa.js} +0 -0
  488. /package/dist/assets/{sortByProperty-0UtqPmvJ.js → sortByProperty-CUhVU03p.js} +0 -0
  489. /package/dist/assets/{useIntersectionObserver-BkAtQAzK.js → useIntersectionObserver-C8Bz3yon.js} +0 -0
  490. /package/dist/assets/{vue-LyXhKoPx.js → vue-RAk0R0Jn.js} +0 -0
  491. /package/dist/assets/{xml-F7krcG3E.js → xml-B_gYdkaU.js} +0 -0
@@ -0,0 +1,2951 @@
1
+ ;
2
+ (function () {
3
+ System.register(["./chunk-legacy-Re9CbdfL.js", "./vue.runtime.esm-bundler-legacy-Bq05oSFs.js", "./_MapCache-legacy-DcX1vy0l.js", "./src-legacy-6Jvz4Sen.js", "./_plugin-vue_export-helper-legacy-DZMI5HPp.js", "./truncate-legacy-D2_XDpGK.js", "./useMessage-legacy-Cl537NB0.js", "./useTelemetry-legacy-Bu_8SoSm.js", "./useToast-legacy-CIRx5txg.js", "./constants-legacy-CLA25gM9.js", "./assistant.store-legacy-Dk3PMmMU.js", "./useRunWorkflow-legacy-ClvXUChT.js", "./usePinnedData-legacy-9ciMJD_m.js", "./useClipboard-legacy-CF0IG1Mu.js", "./useCanvasOperations-legacy-DDhXmhZf.js", "./NodeIcon-legacy-BHX1t3Oi.js", "./KeyboardShortcutTooltip-legacy-Bvz-OQ26.js", "./isEmpty-legacy-7ibnR7BO.js", "./NDVEmptyState-legacy-DjsKEIfJ.js", "./useKeybindings-legacy-BP8xe8FX.js", "./VueMarkdown-legacy-Dyo2dNbU.js", "./xml-legacy-Cyrxa7r6.js", "./useLogsTreeExpand-legacy-9ArL6-As.js", "./core-legacy-De470jmW.js"], function (_export, _context) {
4
+ "use strict";
5
+
6
+ var __toESM, computed, createElementBlock, createCommentVNode, nextTick, unref, toRefs, guardReactiveProps, ref, onBeforeUnmount, createVNode, onScopeDispose, defineComponent, onUnmounted, toDisplayString, createBlock, toRef, mergeProps, onMounted, Fragment, normalizeClass, watch, renderSlot, withCtx, resolveDynamicComponent, openBlock, vModelText, withModifiers, renderList, createTextVNode, isRef, createSlots, withKeys, useTemplateRef, provide, resolveDirective, useAttrs, normalizeProps, createBaseVNode, withDirectives, normalizeStyle, inject, shallowRef, I18nT, useActiveElement, useI18n, useLocalStorage, useFileDialog, useTimestamp, N8nText_default, N8nButton_default, useProvideTooltipAppendTo, N8nIconButton_default, N8nLink_default, N8nActionDropdown_default, N8nTooltip_default, N8nRadioButtons_default, N8nResizeWrapper_default, require_markdown_it_link_attributes, N8nIcon_default, __plugin_vue_export_helper_default, useRouter, useRoute, useMessage, useSourceControlStore, isChatNode, v4_default, useUIStore, useRootStore, require_upperFirst, injectWorkflowState, useDocumentTitle, useCanvasStore, useNDVStore, waitingNodeTooltip, useWorkflowsStore, useNodeTypesStore, useTelemetry, useNodeHelpers, getScrollbarWidth, useToast, MODAL_CONFIRM, PopOutWindowKey, START_NODE_TYPE, VIEWS, PLACEHOLDER_EMPTY_WORKFLOW_ID, ndvEventBus, useRunWorkflow, usePinnedData, useClipboard, useLogsStore, LOCAL_STORAGE_PANEL_WIDTH, chatEventBus, useExperimentalNdvStore, LOGS_PANEL_STATE, LOCAL_STORAGE_OVERVIEW_PANEL_WIDTH, canvasEventBus, LOCAL_STORAGE_PANEL_HEIGHT, useCanvasOperations, LOG_DETAILS_PANEL_STATE, NodeIcon_default, KeyboardShortcutTooltip_default, RunData_default, RunDataItemCount_default, NDVEmptyState_default, useKeybindings, VueMarkdown_default, bash, javascript, typescript, python, xml, isPlaceholderLog, LogsViewConsumedTokenCountText_default, restoreChatHistory, getDepth, getTotalConsumedTokens, getSubtreeTotalConsumedTokens, LogsViewNodeName_default, findLogEntryRec, getInputKey, useLogsExecutionData, getEntryAtRelativeIndex, LogsOverviewRows_default, extractBotResponse, useLogsTreeExpand, findSelectedLogEntry, isSubNodeLog, processFiles, core_default, __vite_style__, localStorageNamespace, localStorageSessionIdKey, ChatSymbol, ChatOptionsSymbol, ChatSymbol$1, LogsPanelHeader_vue_vue_type_script_setup_true_lang_default, container$7, clickable, title$2, actions$1, LogsPanelHeader_vue_vue_type_style_index_0_lang_module_default, cssModules$9, LogsPanelHeader_default, import_upperFirst, LogsViewExecutionSummary_vue_vue_type_script_setup_true_lang_default, container$6, LogsViewExecutionSummary_vue_vue_type_style_index_0_lang_module_default, cssModules$8, LogsViewExecutionSummary_default, LogsOverviewPanel_vue_vue_type_script_setup_true_lang_default, container$5, clearButton, content$1, empty, emptyText, summary, switchViewButtons, LogsOverviewPanel_vue_vue_type_style_index_0_lang_module_default, cssModules$7, LogsOverviewPanel_default, _hoisted_1$12, closeThick_default, _hoisted_1$11, fileImage_default, _hoisted_1$10, fileMusic_default, _hoisted_1$9, fileText_default, _hoisted_1$8, fileVideo_default, _hoisted_1$7, openInNew_default, _hoisted_1$6, ChatFile_vue_vue_type_script_setup_true_lang_default, ChatFile_default, import_markdown_it_link_attributes, _hoisted_1$5, _hoisted_2$2, Message_vue_vue_type_script_setup_true_lang_default, Message_default, _hoisted_1$4, paperclip_default, _hoisted_1$3, send_default, _hoisted_1$2, _hoisted_2$1, _hoisted_3$1, _hoisted_4, _hoisted_5, _hoisted_6, _hoisted_7, Input_vue_vue_type_script_setup_true_lang_default, Input_default, MessageTyping_vue_vue_type_script_setup_true_lang_default, MessageTyping_default, _hoisted_1$1, _hoisted_2, _hoisted_3, MessagesList_vue_vue_type_script_setup_true_lang_default, MessagesList_default, MessageOptionTooltip_vue_vue_type_script_setup_true_lang_default, container$4, icon$2, MessageOptionTooltip_vue_vue_type_style_index_0_lang_module_default, cssModules$6, MessageOptionTooltip_default, MessageOptionAction_vue_vue_type_script_setup_true_lang_default, container$3, icon$1, MessageOptionAction_vue_vue_type_style_index_0_lang_module_default, cssModules$5, MessageOptionAction_default, _hoisted_1, ChatMessagesPanel_vue_vue_type_script_setup_true_lang_default, chat$1, chatHeader, chatTitle, session, sessionId, copyable, headerButton, newHeaderButton, chatBody, messages, messagesInput, messagesHistory, ChatMessagesPanel_vue_vue_type_style_index_0_lang_module_default, cssModules$4, ChatMessagesPanel_default, LogsViewRunData_vue_vue_type_script_setup_true_lang_default, component, title$1, LogsViewRunData_vue_vue_type_style_index_0_lang_module_default, cssModules$3, LogsViewRunData_default, MIN_IO_PANEL_WIDTH, LogDetailsPanel_vue_vue_type_script_setup_true_lang_default, container$2, header, actions, pressed, title, icon, executionSummary, content, outputPanel, inputResizer, collapsed, full, placeholder, LogDetailsPanel_vue_vue_type_style_index_0_lang_module_default, cssModules$2, LogDetailsPanel_default, LogsPanelActions_vue_vue_type_script_setup_true_lang_default, container$1, LogsPanelActions_vue_vue_type_style_index_0_lang_module_default, cssModules$1, LogsPanelActions_default, INITIAL_POPUP_HEIGHT, COLLAPSED_PANEL_HEIGHT, LogsViewKeyboardEventListener_vue_vue_type_script_setup_true_lang_default, LogsViewKeyboardEventListener_default, LogsPanel_vue_vue_type_script_setup_true_lang_default, popOutContent, resizeWrapper, poppedOut, container, chat, logsContainer, overviewResizer, logsOverview, logsDetails, LogsPanel_vue_vue_type_style_index_0_lang_module_default, cssModules, LogsPanel_default;
7
+ //#region ../@n8n/chat/src/utils/utils.ts
8
+
9
+ //#endregion
10
+ //#region src/features/execution/logs/composables/useChatMessaging.ts
11
+ function constructChatWebsocketUrl(url, executionId, sessionId$1, isPublic) {
12
+ const baseUrl = new URL(url).origin;
13
+ const wsProtocol = baseUrl.startsWith("https") ? "wss" : "ws";
14
+ return `${baseUrl.replace(/^https?/, wsProtocol)}/chat?sessionId=${sessionId$1}&executionId=${executionId}${isPublic ? "&isPublic=true" : ""}`;
15
+ }
16
+ function useChatMessaging({
17
+ chatTrigger,
18
+ sessionId: sessionId$1,
19
+ executionResultData,
20
+ onRunChatWorkflow,
21
+ ws,
22
+ onNewMessage
23
+ }) {
24
+ const locale = useI18n();
25
+ const {
26
+ showError
27
+ } = useToast();
28
+ const previousMessageIndex = ref(0);
29
+ const isLoading = ref(false);
30
+ const setLoadingState = loading => {
31
+ isLoading.value = loading;
32
+ };
33
+ /** Converts a file to binary data */
34
+ async function convertFileToBinaryData(file) {
35
+ const reader = new FileReader();
36
+ return await new Promise((resolve, reject) => {
37
+ reader.onload = () => {
38
+ resolve({
39
+ data: reader.result.split("base64,")?.[1] ?? "",
40
+ mimeType: file.type,
41
+ fileName: file.name,
42
+ fileSize: `${file.size} bytes`,
43
+ fileExtension: file.name.split(".").pop() ?? "",
44
+ fileType: file.type.split("/")[0]
45
+ });
46
+ };
47
+ reader.onerror = () => {
48
+ reject(/* @__PURE__ */new Error("Failed to convert file to binary data"));
49
+ };
50
+ reader.readAsDataURL(file);
51
+ });
52
+ }
53
+ /** Gets keyed files for the workflow input */
54
+ async function getKeyedFiles(files) {
55
+ const binaryData = {};
56
+ await Promise.all(files.map(async (file, index) => {
57
+ const data = await convertFileToBinaryData(file);
58
+ const key = `data${index}`;
59
+ binaryData[key] = data;
60
+ }));
61
+ return binaryData;
62
+ }
63
+ /** Extracts file metadata */
64
+ function extractFileMeta(file) {
65
+ return {
66
+ fileName: file.name,
67
+ fileSize: `${file.size} bytes`,
68
+ fileExtension: file.name.split(".").pop() ?? "",
69
+ fileType: file.type.split("/")[0],
70
+ mimeType: file.type
71
+ };
72
+ }
73
+ /** Starts workflow execution with the message */
74
+ async function startWorkflowWithMessage(message, files) {
75
+ const triggerNode = chatTrigger.value;
76
+ if (!triggerNode) {
77
+ showError(/* @__PURE__ */new Error("Chat Trigger Node could not be found!"), "Trigger Node not found");
78
+ return;
79
+ }
80
+ const inputPayload = {
81
+ json: {
82
+ sessionId: sessionId$1,
83
+ action: "sendMessage",
84
+ [getInputKey(triggerNode)]: message
85
+ }
86
+ };
87
+ if (files && files.length > 0) {
88
+ const filesMeta = files.map(file => extractFileMeta(file));
89
+ const binaryData = await getKeyedFiles(files);
90
+ inputPayload.json.files = filesMeta;
91
+ inputPayload.binary = binaryData;
92
+ }
93
+ const nodeData = {
94
+ startTime: Date.now(),
95
+ executionTime: 0,
96
+ executionIndex: 0,
97
+ executionStatus: "success",
98
+ data: {
99
+ main: [[inputPayload]]
100
+ },
101
+ source: [null]
102
+ };
103
+ isLoading.value = true;
104
+ const response = await onRunChatWorkflow({
105
+ triggerNode: triggerNode.name,
106
+ nodeData,
107
+ source: "RunData.ManualChatMessage",
108
+ message
109
+ });
110
+ isLoading.value = false;
111
+ ws.value = null;
112
+ if (!response?.executionId) return;
113
+ if (triggerNode.parameters.options?.responseMode === "responseNodes") return;
114
+ const chatMessage = executionResultData.value ? extractBotResponse(executionResultData.value, response.executionId, locale.baseText("chat.window.chat.response.empty")) : void 0;
115
+ if (chatMessage !== void 0) onNewMessage(chatMessage);
116
+ }
117
+ /** Sends a message to the chat */
118
+ async function sendMessage(message, files) {
119
+ previousMessageIndex.value = 0;
120
+ if (message.trim() === "" && (!files || files.length === 0)) {
121
+ showError(new Error(locale.baseText("chat.window.chat.provideMessage")), locale.baseText("chat.window.chat.emptyChatMessage"));
122
+ return;
123
+ }
124
+ const pinnedChatData = usePinnedData(chatTrigger.value);
125
+ if (pinnedChatData.hasData.value) {
126
+ if (!((await useMessage().confirm(locale.baseText("chat.window.chat.unpinAndExecute.description"), locale.baseText("chat.window.chat.unpinAndExecute.title"), {
127
+ confirmButtonText: locale.baseText("chat.window.chat.unpinAndExecute.confirm"),
128
+ cancelButtonText: locale.baseText("chat.window.chat.unpinAndExecute.cancel")
129
+ })) === "confirm")) return;
130
+ pinnedChatData.unsetData("unpin-and-send-chat-message-modal");
131
+ }
132
+ const newMessage = {
133
+ text: message,
134
+ sender: "user",
135
+ sessionId: sessionId$1,
136
+ id: v4_default(),
137
+ files
138
+ };
139
+ onNewMessage(newMessage);
140
+ if (ws.value?.readyState === WebSocket.OPEN && !isLoading.value) {
141
+ ws.value.send(JSON.stringify({
142
+ sessionId: sessionId$1,
143
+ action: "sendMessage",
144
+ chatInput: message,
145
+ files: await processFiles(files)
146
+ }));
147
+ isLoading.value = true;
148
+ } else await startWorkflowWithMessage(newMessage.text, files);
149
+ }
150
+ return {
151
+ previousMessageIndex,
152
+ isLoading: computed(() => isLoading.value),
153
+ setLoadingState,
154
+ sendMessage
155
+ };
156
+ }
157
+
158
+ //#endregion
159
+ //#region ../@n8n/chat/src/constants/localStorage.ts
160
+
161
+ function useChatState(isReadOnly) {
162
+ const locale = useI18n();
163
+ const workflowsStore = useWorkflowsStore();
164
+ const workflowState = injectWorkflowState();
165
+ const rootStore = useRootStore();
166
+ const logsStore = useLogsStore();
167
+ const router = useRouter();
168
+ const nodeHelpers = useNodeHelpers();
169
+ const {
170
+ runWorkflow
171
+ } = useRunWorkflow({
172
+ router
173
+ });
174
+ const ws = ref(null);
175
+ const messages$1 = computed(() => logsStore.chatSessionMessages);
176
+ const currentSessionId = computed(() => logsStore.chatSessionId);
177
+ const previousChatMessages = computed(() => workflowsStore.getPastChatMessages);
178
+ const chatTriggerNode = computed(() => workflowsStore.allNodes.find(isChatNode) ?? null);
179
+ const allowFileUploads = computed(() => chatTriggerNode.value?.parameters?.options?.allowFileUploads === true);
180
+ const allowedFilesMimeTypes = computed(() => chatTriggerNode.value?.parameters?.options?.allowedFilesMimeTypes?.toString() ?? "");
181
+ const respondNodesResponseMode = computed(() => chatTriggerNode.value?.parameters?.options?.responseMode === "responseNodes");
182
+ const {
183
+ sendMessage,
184
+ isLoading,
185
+ setLoadingState
186
+ } = useChatMessaging({
187
+ chatTrigger: chatTriggerNode,
188
+ sessionId: currentSessionId.value,
189
+ executionResultData: computed(() => workflowsStore.getWorkflowExecution?.data?.resultData),
190
+ onRunChatWorkflow,
191
+ onNewMessage: logsStore.addChatMessage,
192
+ ws
193
+ });
194
+ function createChatConfig(params) {
195
+ return {
196
+ chatConfig: {
197
+ messages: params.messages,
198
+ sendMessage: params.sendMessage,
199
+ initialMessages: ref([]),
200
+ currentSessionId: params.currentSessionId,
201
+ waitingForResponse: params.isLoading
202
+ },
203
+ chatOptions: {
204
+ i18n: {
205
+ en: {
206
+ title: "",
207
+ footer: "",
208
+ subtitle: "",
209
+ inputPlaceholder: params.locale.baseText("chat.window.chat.placeholder"),
210
+ getStarted: "",
211
+ closeButtonTooltip: ""
212
+ }
213
+ },
214
+ webhookUrl: "",
215
+ mode: "window",
216
+ showWindowCloseButton: true,
217
+ disabled: params.isDisabled,
218
+ allowFileUploads: params.allowFileUploads,
219
+ allowedFilesMimeTypes
220
+ }
221
+ };
222
+ }
223
+ const {
224
+ chatConfig,
225
+ chatOptions
226
+ } = createChatConfig({
227
+ messages: messages$1,
228
+ sendMessage,
229
+ currentSessionId,
230
+ isLoading,
231
+ isDisabled: computed(() => isReadOnly),
232
+ allowFileUploads,
233
+ locale
234
+ });
235
+ const restoredChatMessages = computed(() => restoreChatHistory(workflowsStore.workflowExecutionData, locale.baseText("chat.window.chat.response.empty")));
236
+ provide(ChatSymbol$1, chatConfig);
237
+ provide(ChatOptionsSymbol, chatOptions);
238
+ async function createExecutionPromise() {
239
+ return await new Promise(resolve => {
240
+ const resolveIfFinished = isRunning => {
241
+ if (!isRunning) {
242
+ unwatch();
243
+ resolve();
244
+ }
245
+ };
246
+ const unwatch = watch(() => workflowsStore.isWorkflowRunning, resolveIfFinished);
247
+ resolveIfFinished(workflowsStore.isWorkflowRunning);
248
+ });
249
+ }
250
+ async function onRunChatWorkflow(payload) {
251
+ const runWorkflowOptions = {
252
+ triggerNode: payload.triggerNode,
253
+ nodeData: payload.nodeData,
254
+ source: payload.source
255
+ };
256
+ if (workflowsStore.chatPartialExecutionDestinationNode) {
257
+ runWorkflowOptions.destinationNode = workflowsStore.chatPartialExecutionDestinationNode;
258
+ workflowsStore.chatPartialExecutionDestinationNode = null;
259
+ }
260
+ const response = await runWorkflow(runWorkflowOptions);
261
+ if (response) {
262
+ if (respondNodesResponseMode.value) {
263
+ const wsUrl = constructChatWebsocketUrl(rootStore.urlBaseEditor, response.executionId, currentSessionId.value, false);
264
+ ws.value = new WebSocket(wsUrl);
265
+ ws.value.onmessage = event => {
266
+ if (event.data === "n8n|heartbeat") {
267
+ ws.value?.send("n8n|heartbeat-ack");
268
+ return;
269
+ }
270
+ if (event.data === "n8n|continue") {
271
+ setLoadingState(true);
272
+ return;
273
+ }
274
+ setLoadingState(false);
275
+ const newMessage = {
276
+ text: event.data,
277
+ sender: "bot",
278
+ sessionId: currentSessionId.value,
279
+ id: v4_default()
280
+ };
281
+ logsStore.addChatMessage(newMessage);
282
+ if (logsStore.isOpen) chatEventBus.emit("focusInput");
283
+ };
284
+ ws.value.onclose = () => {
285
+ setLoadingState(false);
286
+ ws.value = null;
287
+ };
288
+ }
289
+ await createExecutionPromise();
290
+ workflowsStore.appendChatMessage(payload.message);
291
+ return response;
292
+ }
293
+ }
294
+ function refreshSession() {
295
+ workflowState.setWorkflowExecutionData(null);
296
+ nodeHelpers.updateNodesExecutionIssues();
297
+ logsStore.resetChatSessionId();
298
+ logsStore.resetMessages();
299
+ if (logsStore.isOpen) chatEventBus.emit("focusInput");
300
+ }
301
+ function displayExecution(executionId) {
302
+ const route = router.resolve({
303
+ name: VIEWS.EXECUTION_PREVIEW,
304
+ params: {
305
+ name: workflowsStore.workflowId,
306
+ executionId
307
+ }
308
+ });
309
+ window.open(route.href, "_blank");
310
+ }
311
+ watch(() => workflowsStore.workflowId, (_newWorkflowId, prevWorkflowId) => {
312
+ if (prevWorkflowId === "__EMPTY__") return;
313
+ refreshSession();
314
+ });
315
+ return {
316
+ currentSessionId: computed(() => logsStore.chatSessionId),
317
+ messages: computed(() => isReadOnly ? restoredChatMessages.value : logsStore.chatSessionMessages),
318
+ previousChatMessages,
319
+ sendMessage,
320
+ refreshSession,
321
+ displayExecution
322
+ };
323
+ }
324
+
325
+ //#endregion
326
+ //#region src/features/execution/logs/components/LogsPanelHeader.vue?vue&type=script&setup=true&lang.ts
327
+
328
+ //#endregion
329
+ //#region src/features/execution/logs/composables/useClearExecutionButtonVisible.ts
330
+ function useClearExecutionButtonVisible() {
331
+ const route = useRoute();
332
+ const sourceControlStore = useSourceControlStore();
333
+ const workflowsStore = useWorkflowsStore();
334
+ const workflowExecutionData = computed(() => workflowsStore.workflowExecutionData);
335
+ const isWorkflowRunning = computed(() => workflowsStore.isWorkflowRunning);
336
+ const isReadOnlyRoute = computed(() => !!route?.meta?.readOnlyCanvas);
337
+ const {
338
+ editableWorkflow
339
+ } = useCanvasOperations();
340
+ const nodeTypesStore = useNodeTypesStore();
341
+ const isReadOnlyEnvironment = computed(() => sourceControlStore.preferences.branchReadOnly);
342
+ const allTriggerNodesDisabled = computed(() => editableWorkflow.value.nodes.filter(node => node.type === "n8n-nodes-base.start" || nodeTypesStore.isTriggerNode(node.type)).every(node => node.disabled));
343
+ return computed(() => !isReadOnlyRoute.value && !isReadOnlyEnvironment.value && !isWorkflowRunning.value && !allTriggerNodesDisabled.value && !!workflowExecutionData.value);
344
+ }
345
+
346
+ //#endregion
347
+ //#region src/features/execution/logs/components/LogsOverviewPanel.vue?vue&type=script&setup=true&lang.ts
348
+
349
+ //#endregion
350
+ //#region ../@n8n/chat/src/composables/useChat.ts
351
+ function useChat() {
352
+ return inject(ChatSymbol);
353
+ }
354
+
355
+ //#endregion
356
+ //#region ../@n8n/chat/src/composables/useOptions.ts
357
+ function useOptions() {
358
+ return {
359
+ options: inject(ChatOptionsSymbol)
360
+ };
361
+ }
362
+
363
+ //#endregion
364
+ //#region ../@n8n/chat/src/composables/useI18n.ts
365
+ function useI18n$1() {
366
+ const {
367
+ options
368
+ } = useOptions();
369
+ const language = options?.defaultLanguage ?? "en";
370
+ function t(key) {
371
+ const val = options?.i18n?.[language]?.[key];
372
+ if (isRef(val)) return val.value;
373
+ return val ?? key;
374
+ }
375
+ function te(key) {
376
+ return !!options?.i18n?.[language]?.[key];
377
+ }
378
+ return {
379
+ t,
380
+ te
381
+ };
382
+ }
383
+
384
+ //#endregion
385
+ //#region ~icons/mdi/closeThick
386
+
387
+ function render$7(_ctx, _cache) {
388
+ return openBlock(), createElementBlock("svg", _hoisted_1$12, _cache[0] || (_cache[0] = [createBaseVNode("path", {
389
+ fill: "currentColor",
390
+ d: "M20 6.91L17.09 4L12 9.09L6.91 4L4 6.91L9.09 12L4 17.09L6.91 20L12 14.91L17.09 20L20 17.09L14.91 12z"
391
+ }, null, -1)]));
392
+ }
393
+ function render$6(_ctx, _cache) {
394
+ return openBlock(), createElementBlock("svg", _hoisted_1$11, _cache[0] || (_cache[0] = [createBaseVNode("path", {
395
+ fill: "currentColor",
396
+ d: "M13 9h5.5L13 3.5zM6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m0 18h12v-8l-4 4l-2-2zM8 9a2 2 0 0 0-2 2a2 2 0 0 0 2 2a2 2 0 0 0 2-2a2 2 0 0 0-2-2"
397
+ }, null, -1)]));
398
+ }
399
+ function render$5(_ctx, _cache) {
400
+ return openBlock(), createElementBlock("svg", _hoisted_1$10, _cache[0] || (_cache[0] = [createBaseVNode("path", {
401
+ fill: "currentColor",
402
+ d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8zm-1 11h-2v5a2 2 0 0 1-2 2a2 2 0 0 1-2-2a2 2 0 0 1 2-2c.4 0 .7.1 1 .3V11h3zm0-4V3.5L18.5 9z"
403
+ }, null, -1)]));
404
+ }
405
+ function render$4(_ctx, _cache) {
406
+ return openBlock(), createElementBlock("svg", _hoisted_1$9, _cache[0] || (_cache[0] = [createBaseVNode("path", {
407
+ fill: "currentColor",
408
+ d: "M13 9h5.5L13 3.5zM6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m9 16v-2H6v2zm3-4v-2H6v2z"
409
+ }, null, -1)]));
410
+ }
411
+ function render$3(_ctx, _cache) {
412
+ return openBlock(), createElementBlock("svg", _hoisted_1$8, _cache[0] || (_cache[0] = [createBaseVNode("path", {
413
+ fill: "currentColor",
414
+ d: "M13 9h5.5L13 3.5zM6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m11 17v-6l-3 2.2V13H7v6h7v-2.2z"
415
+ }, null, -1)]));
416
+ }
417
+ function render$2(_ctx, _cache) {
418
+ return openBlock(), createElementBlock("svg", _hoisted_1$7, _cache[0] || (_cache[0] = [createBaseVNode("path", {
419
+ fill: "currentColor",
420
+ d: "M14 3v2h3.59l-9.83 9.83l1.41 1.41L19 6.41V10h2V3m-2 16H5V5h7V3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7h-2z"
421
+ }, null, -1)]));
422
+ }
423
+ function render$1(_ctx, _cache) {
424
+ return openBlock(), createElementBlock("svg", _hoisted_1$4, _cache[0] || (_cache[0] = [createBaseVNode("path", {
425
+ fill: "currentColor",
426
+ d: "M16.5 6v11.5a4 4 0 0 1-4 4a4 4 0 0 1-4-4V5A2.5 2.5 0 0 1 11 2.5A2.5 2.5 0 0 1 13.5 5v10.5a1 1 0 0 1-1 1a1 1 0 0 1-1-1V6H10v9.5a2.5 2.5 0 0 0 2.5 2.5a2.5 2.5 0 0 0 2.5-2.5V5a4 4 0 0 0-4-4a4 4 0 0 0-4 4v12.5a5.5 5.5 0 0 0 5.5 5.5a5.5 5.5 0 0 0 5.5-5.5V6z"
427
+ }, null, -1)]));
428
+ }
429
+ function render(_ctx, _cache) {
430
+ return openBlock(), createElementBlock("svg", _hoisted_1$3, _cache[0] || (_cache[0] = [createBaseVNode("path", {
431
+ fill: "currentColor",
432
+ d: "m2 21l21-9L2 3v7l15 2l-15 2z"
433
+ }, null, -1)]));
434
+ }
435
+ //#endregion
436
+ //#region src/app/composables/useResizablePanel.ts
437
+ function useResizablePanel(localStorageKey, {
438
+ container: container$8,
439
+ defaultSize,
440
+ snap = true,
441
+ minSize = 0,
442
+ maxSize = size => size,
443
+ position = "left",
444
+ allowCollapse,
445
+ allowFullSize
446
+ }) {
447
+ const containerSize = ref(0);
448
+ const persistedSize = useLocalStorage(localStorageKey, -1, {
449
+ writeDefaults: false
450
+ });
451
+ const isResizing = ref(false);
452
+ const sizeOnResizeStart = ref();
453
+ const minSizeValue = computed(() => resolveSize(minSize, containerSize.value));
454
+ const maxSizeValue = computed(() => resolveSize(maxSize, containerSize.value));
455
+ const constrainedSize = computed(() => {
456
+ const sizeInPixels = persistedSize.value >= 0 && persistedSize.value <= 1 ? containerSize.value * persistedSize.value : -1;
457
+ if (isResizing.value && allowCollapse && sizeInPixels < 30) return 0;
458
+ if (isResizing.value && allowFullSize && sizeInPixels > containerSize.value - 30) return containerSize.value;
459
+ const defaultSizeValue = resolveSize(defaultSize, containerSize.value);
460
+ if (Number.isNaN(sizeInPixels) || !Number.isFinite(sizeInPixels) || sizeInPixels < 0) return defaultSizeValue;
461
+ return Math.max(minSizeValue.value, Math.min(snap && Math.abs(defaultSizeValue - sizeInPixels) < 30 ? defaultSizeValue : sizeInPixels, maxSizeValue.value));
462
+ });
463
+ function getSize(el) {
464
+ return position === "bottom" ? el.height : el.width;
465
+ }
466
+ function getOffsetSize(el) {
467
+ return position === "bottom" ? el.offsetHeight : el.offsetWidth;
468
+ }
469
+ function getValue(data) {
470
+ return position === "bottom" ? data.y : data.x;
471
+ }
472
+ function resolveSize(getter, containerSizeValue) {
473
+ return typeof getter === "number" ? getter : getter(containerSizeValue);
474
+ }
475
+ function onResize(data) {
476
+ const containerRect = unref(container$8)?.getBoundingClientRect();
477
+ const newSizeInPixels = Math.max(0, position === "bottom" ? (containerRect ? getSize(containerRect) : 0) - getValue(data) : getValue(data) - (containerRect ? getValue(containerRect) : 0));
478
+ isResizing.value = true;
479
+ persistedSize.value = newSizeInPixels / containerSize.value;
480
+ if (sizeOnResizeStart.value === void 0) sizeOnResizeStart.value = persistedSize.value;
481
+ }
482
+ function onResizeEnd() {
483
+ if (minSizeValue.value > 0 && constrainedSize.value <= 0 || maxSizeValue.value < containerSize.value && constrainedSize.value >= containerSize.value) persistedSize.value = sizeOnResizeStart.value;
484
+ sizeOnResizeStart.value = void 0;
485
+ isResizing.value = false;
486
+ }
487
+ watch(() => unref(container$8), (el, _, onCleanUp) => {
488
+ if (!el) return;
489
+ const observer = new ResizeObserver(() => {
490
+ containerSize.value = getOffsetSize(el);
491
+ });
492
+ observer.observe(el);
493
+ containerSize.value = getOffsetSize(el);
494
+ onCleanUp(() => observer.disconnect());
495
+ }, {
496
+ immediate: true
497
+ });
498
+ return {
499
+ isResizing: computed(() => isResizing.value),
500
+ isCollapsed: computed(() => isResizing.value && constrainedSize.value <= 0),
501
+ isFullSize: computed(() => isResizing.value && constrainedSize.value >= containerSize.value),
502
+ size: constrainedSize,
503
+ onResize,
504
+ onResizeEnd
505
+ };
506
+ }
507
+
508
+ //#endregion
509
+ //#region src/features/execution/logs/components/LogDetailsPanel.vue?vue&type=script&setup=true&lang.ts
510
+
511
+ //#endregion
512
+ //#region src/features/execution/logs/composables/useLogsSelection.ts
513
+ function useLogsSelection(execution, tree, flatLogEntries, toggleExpand) {
514
+ const telemetry = useTelemetry();
515
+ const manualLogEntrySelection = shallowRef({
516
+ type: "initial"
517
+ });
518
+ const nodeIdToSelect = shallowRef();
519
+ const isExecutionStopped = computed(() => execution.value?.stoppedAt !== void 0);
520
+ const selected = computed(() => findSelectedLogEntry(manualLogEntrySelection.value, tree.value, !isExecutionStopped.value));
521
+ const logsStore = useLogsStore();
522
+ const uiStore = useUIStore();
523
+ const canvasStore = useCanvasStore();
524
+ const workflowsStore = useWorkflowsStore();
525
+ function syncSelectionToCanvasIfEnabled(value) {
526
+ if (!logsStore.isLogSelectionSyncedWithCanvas) return;
527
+ canvasEventBus.emit("nodes:select", {
528
+ ids: [value.node.id],
529
+ panIntoView: true
530
+ });
531
+ }
532
+ function select(value) {
533
+ manualLogEntrySelection.value = value === void 0 ? {
534
+ type: "none"
535
+ } : {
536
+ type: "selected",
537
+ entry: value
538
+ };
539
+ if (value) {
540
+ syncSelectionToCanvasIfEnabled(value);
541
+ telemetry.track("User selected node in log view", {
542
+ node_type: value.node.type,
543
+ node_id: value.node.id,
544
+ execution_id: execution.value?.id,
545
+ workflow_id: execution.value?.workflowData.id,
546
+ subworkflow_depth: getDepth(value)
547
+ });
548
+ }
549
+ }
550
+ function selectPrev() {
551
+ const entries = flatLogEntries.value;
552
+ if (entries.length === 0) return;
553
+ const prevEntry = selected.value ? getEntryAtRelativeIndex(entries, selected.value.id, -1) ?? entries[0] : entries[entries.length - 1];
554
+ manualLogEntrySelection.value = {
555
+ type: "selected",
556
+ entry: prevEntry
557
+ };
558
+ syncSelectionToCanvasIfEnabled(prevEntry);
559
+ }
560
+ function selectNext() {
561
+ const entries = flatLogEntries.value;
562
+ if (entries.length === 0) return;
563
+ const nextEntry = selected.value ? getEntryAtRelativeIndex(entries, selected.value.id, 1) ?? entries[entries.length - 1] : entries[0];
564
+ manualLogEntrySelection.value = {
565
+ type: "selected",
566
+ entry: nextEntry
567
+ };
568
+ syncSelectionToCanvasIfEnabled(nextEntry);
569
+ }
570
+ watch(selected, sel => {
571
+ if (sel) logsStore.setSubNodeSelected(isSubNodeLog(sel));
572
+ }, {
573
+ immediate: true
574
+ });
575
+ watch([() => uiStore.lastSelectedNode, () => logsStore.isLogSelectionSyncedWithCanvas], ([selectedOnCanvas, shouldSync]) => {
576
+ const selectedNodeId = selectedOnCanvas ? workflowsStore.nodesByName[selectedOnCanvas]?.id : void 0;
577
+ nodeIdToSelect.value = shouldSync && !canvasStore.hasRangeSelection && selected.value?.node.id !== selectedNodeId ? selectedNodeId : void 0;
578
+ }, {
579
+ immediate: true
580
+ });
581
+ watch([tree, nodeIdToSelect], ([latestTree, id]) => {
582
+ if (id === void 0) return;
583
+ const entry = findLogEntryRec(e => e.node.id === id, latestTree);
584
+ if (!entry) return;
585
+ nodeIdToSelect.value = void 0;
586
+ manualLogEntrySelection.value = {
587
+ type: "selected",
588
+ entry
589
+ };
590
+ let parent = entry.parent;
591
+ while (parent !== void 0) {
592
+ toggleExpand(parent, true);
593
+ parent = parent.parent;
594
+ }
595
+ }, {
596
+ immediate: true
597
+ });
598
+ return {
599
+ selected,
600
+ select,
601
+ selectPrev,
602
+ selectNext
603
+ };
604
+ }
605
+
606
+ //#endregion
607
+ //#region src/features/execution/logs/composables/usePopOutWindow.ts
608
+ function isStyle(node) {
609
+ return node instanceof HTMLStyleElement || node instanceof HTMLLinkElement && node.rel === "stylesheet";
610
+ }
611
+ function syncStyleMutations(destination, mutations) {
612
+ const currentStyles = destination.document.head.querySelectorAll("style, link[rel=\"stylesheet\"]");
613
+ for (const mutation of mutations) {
614
+ for (const node of mutation.addedNodes) if (isStyle(node)) destination.document.head.appendChild(node.cloneNode(true));
615
+ for (const node of mutation.removedNodes) if (isStyle(node)) {
616
+ for (const found of currentStyles) if (found.isEqualNode(node)) found.remove();
617
+ }
618
+ }
619
+ }
620
+ function copyFavicon(source, target) {
621
+ const iconUrl = source.document.querySelector("link[rel=icon]")?.getAttribute("href");
622
+ if (iconUrl) {
623
+ const link = target.document.createElement("link");
624
+ link.setAttribute("rel", "icon");
625
+ link.setAttribute("href", iconUrl);
626
+ target.document.head.appendChild(link);
627
+ }
628
+ }
629
+ /**
630
+ * A composable that allows to pop out given content in child window
631
+ */
632
+ function usePopOutWindow({
633
+ title: title$3,
634
+ container: container$8,
635
+ content: content$2,
636
+ initialHeight,
637
+ initialWidth,
638
+ shouldPopOut,
639
+ onRequestClose
640
+ }) {
641
+ const popOutWindow = ref();
642
+ const isUnmounting = ref(false);
643
+ const canPopOut = computed(() => window.parent === window);
644
+ const isPoppedOut = computed(() => !!popOutWindow.value);
645
+ const tooltipContainer = computed(() => isPoppedOut.value ? content$2.value ?? void 0 : void 0);
646
+ const observer = new MutationObserver(mutations => {
647
+ if (popOutWindow.value) syncStyleMutations(popOutWindow.value, mutations);
648
+ });
649
+ const documentTitle = useDocumentTitle(popOutWindow);
650
+ observer.observe(document.head, {
651
+ childList: true,
652
+ subtree: true
653
+ });
654
+ provide(PopOutWindowKey, popOutWindow);
655
+ useProvideTooltipAppendTo(tooltipContainer);
656
+ async function showPopOut() {
657
+ if (!content$2.value) return;
658
+ if (!popOutWindow.value) {
659
+ const options = `popup=yes,width=${initialWidth},height=${initialHeight},left=100,top=100,toolbar=no,menubar=no,scrollbars=yes,resizable=yes`;
660
+ popOutWindow.value = window.open("", "_blank", options) ?? void 0;
661
+ }
662
+ if (!popOutWindow.value) return;
663
+ copyFavicon(window, popOutWindow.value);
664
+ for (const styleSheet of [...document.styleSheets]) try {
665
+ const cssRules = [...styleSheet.cssRules].map(rule => rule.cssText).join("");
666
+ const style = document.createElement("style");
667
+ style.textContent = cssRules;
668
+ popOutWindow.value.document.head.appendChild(style);
669
+ } catch (e) {
670
+ const link = document.createElement("link");
671
+ link.rel = "stylesheet";
672
+ link.type = styleSheet.type;
673
+ link.media = styleSheet.media;
674
+ link.href = styleSheet.href;
675
+ popOutWindow.value.document.head.appendChild(link);
676
+ }
677
+ popOutWindow.value.document.body.append(content$2.value);
678
+ popOutWindow.value.addEventListener("pagehide", () => !isUnmounting.value && onRequestClose());
679
+ }
680
+ function hidePopOut() {
681
+ popOutWindow.value?.close();
682
+ popOutWindow.value = void 0;
683
+ if (content$2.value) container$8.value?.appendChild(content$2.value);
684
+ }
685
+ watch(shouldPopOut, value => value ? requestAnimationFrame(showPopOut) : hidePopOut(), {
686
+ immediate: true
687
+ });
688
+ watch([title$3, popOutWindow], ([newTitle, win]) => {
689
+ if (win) documentTitle.set(newTitle);
690
+ }, {
691
+ immediate: true
692
+ });
693
+ onScopeDispose(() => {
694
+ observer.disconnect();
695
+ });
696
+ onBeforeUnmount(() => {
697
+ isUnmounting.value = true;
698
+ if (popOutWindow.value) {
699
+ popOutWindow.value.close();
700
+ onRequestClose();
701
+ }
702
+ });
703
+ return {
704
+ canPopOut,
705
+ isPoppedOut,
706
+ popOutWindow
707
+ };
708
+ }
709
+
710
+ //#endregion
711
+ //#region src/features/execution/logs/composables/useLogsPanelLayout.ts
712
+
713
+ function useLogsPanelLayout(workflowName, popOutContainer, popOutContent$1, container$8, logsContainer$1) {
714
+ const logsStore = useLogsStore();
715
+ const telemetry = useTelemetry();
716
+ const resizer = useResizablePanel(LOCAL_STORAGE_PANEL_HEIGHT, {
717
+ container: document.body,
718
+ position: "bottom",
719
+ snap: false,
720
+ defaultSize: size => size * .3,
721
+ minSize: 160,
722
+ maxSize: size => size * .75,
723
+ allowCollapse: true
724
+ });
725
+ const chatPanelResizer = useResizablePanel(LOCAL_STORAGE_PANEL_WIDTH, {
726
+ container: container$8,
727
+ defaultSize: size => Math.min(800, size * .3),
728
+ minSize: 240,
729
+ maxSize: size => size * .8
730
+ });
731
+ const overviewPanelResizer = useResizablePanel(LOCAL_STORAGE_OVERVIEW_PANEL_WIDTH, {
732
+ container: logsContainer$1,
733
+ defaultSize: size => Math.min(240, size * .2),
734
+ minSize: 80,
735
+ maxSize: 500,
736
+ allowFullSize: true
737
+ });
738
+ const isOpen = computed(() => logsStore.isOpen ? !resizer.isCollapsed.value : resizer.isResizing.value && resizer.size.value > 0);
739
+ const isCollapsingDetailsPanel = computed(() => overviewPanelResizer.isFullSize.value);
740
+ const popOutWindowTitle = computed(() => `Logs - ${workflowName.value}`);
741
+ const shouldPopOut = computed(() => logsStore.state === LOGS_PANEL_STATE.FLOATING);
742
+ const {
743
+ canPopOut,
744
+ isPoppedOut,
745
+ popOutWindow
746
+ } = usePopOutWindow({
747
+ title: popOutWindowTitle,
748
+ initialHeight: INITIAL_POPUP_HEIGHT,
749
+ initialWidth: window.document.body.offsetWidth * .8,
750
+ container: popOutContainer,
751
+ content: popOutContent$1,
752
+ shouldPopOut,
753
+ onRequestClose: () => {
754
+ if (!isOpen.value) return;
755
+ telemetry.track("User toggled log view", {
756
+ new_state: "attached"
757
+ });
758
+ logsStore.setPreferPoppedOut(false);
759
+ }
760
+ });
761
+ function handleToggleOpen(open) {
762
+ const wasOpen = logsStore.isOpen;
763
+ if (open === wasOpen) return;
764
+ logsStore.toggleOpen(open);
765
+ telemetry.track("User toggled log view", {
766
+ new_state: wasOpen ? "collapsed" : "attached"
767
+ });
768
+ }
769
+ function handlePopOut() {
770
+ telemetry.track("User toggled log view", {
771
+ new_state: "floating"
772
+ });
773
+ logsStore.toggleOpen(true);
774
+ logsStore.setPreferPoppedOut(true);
775
+ }
776
+ function handleResizeEnd() {
777
+ if (!logsStore.isOpen && !resizer.isCollapsed.value) handleToggleOpen(true);
778
+ if (resizer.isCollapsed.value) handleToggleOpen(false);
779
+ resizer.onResizeEnd();
780
+ }
781
+ watch([() => logsStore.state, resizer.size, isPoppedOut], ([state, height]) => {
782
+ const updatedHeight = state === LOGS_PANEL_STATE.FLOATING ? 0 : state === LOGS_PANEL_STATE.ATTACHED ? height : COLLAPSED_PANEL_HEIGHT;
783
+ if (state === LOGS_PANEL_STATE.FLOATING) popOutWindow?.value?.document.documentElement.style.setProperty("--logs-panel--height", "100vh");else document.documentElement.style.setProperty("--logs-panel--height", `${updatedHeight}px`);
784
+ logsStore.setHeight(updatedHeight);
785
+ }, {
786
+ immediate: true
787
+ });
788
+ onBeforeUnmount(() => logsStore.setHeight(0));
789
+ return {
790
+ height: resizer.size,
791
+ chatPanelWidth: chatPanelResizer.size,
792
+ overviewPanelWidth: overviewPanelResizer.size,
793
+ canPopOut,
794
+ isOpen,
795
+ isCollapsingDetailsPanel,
796
+ isPoppedOut,
797
+ isOverviewPanelFullWidth: overviewPanelResizer.isFullSize,
798
+ popOutWindow,
799
+ onToggleOpen: handleToggleOpen,
800
+ onPopOut: handlePopOut,
801
+ onResize: resizer.onResize,
802
+ onResizeEnd: handleResizeEnd,
803
+ onChatPanelResize: chatPanelResizer.onResize,
804
+ onChatPanelResizeEnd: chatPanelResizer.onResizeEnd,
805
+ onOverviewPanelResize: overviewPanelResizer.onResize,
806
+ onOverviewPanelResizeEnd: overviewPanelResizer.onResizeEnd
807
+ };
808
+ }
809
+
810
+ //#endregion
811
+ //#region src/features/execution/logs/components/LogsViewKeyboardEventListener.vue?vue&type=script&setup=true&lang.ts
812
+ return {
813
+ setters: [function (_chunkLegacy001Js) {
814
+ __toESM = _chunkLegacy001Js.o;
815
+ }, function (_vueRuntimeEsmBundlerLegacy003Js) {
816
+ computed = _vueRuntimeEsmBundlerLegacy003Js.C;
817
+ createElementBlock = _vueRuntimeEsmBundlerLegacy003Js.D;
818
+ createCommentVNode = _vueRuntimeEsmBundlerLegacy003Js.E;
819
+ nextTick = _vueRuntimeEsmBundlerLegacy003Js.G;
820
+ unref = _vueRuntimeEsmBundlerLegacy003Js.Gt;
821
+ toRefs = _vueRuntimeEsmBundlerLegacy003Js.Ht;
822
+ guardReactiveProps = _vueRuntimeEsmBundlerLegacy003Js.I;
823
+ ref = _vueRuntimeEsmBundlerLegacy003Js.It;
824
+ onBeforeUnmount = _vueRuntimeEsmBundlerLegacy003Js.J;
825
+ createVNode = _vueRuntimeEsmBundlerLegacy003Js.M;
826
+ onScopeDispose = _vueRuntimeEsmBundlerLegacy003Js.Nt;
827
+ defineComponent = _vueRuntimeEsmBundlerLegacy003Js.P;
828
+ onUnmounted = _vueRuntimeEsmBundlerLegacy003Js.Q;
829
+ toDisplayString = _vueRuntimeEsmBundlerLegacy003Js.Sn;
830
+ createBlock = _vueRuntimeEsmBundlerLegacy003Js.T;
831
+ toRef = _vueRuntimeEsmBundlerLegacy003Js.Vt;
832
+ mergeProps = _vueRuntimeEsmBundlerLegacy003Js.W;
833
+ onMounted = _vueRuntimeEsmBundlerLegacy003Js.Z;
834
+ Fragment = _vueRuntimeEsmBundlerLegacy003Js._;
835
+ normalizeClass = _vueRuntimeEsmBundlerLegacy003Js._n;
836
+ watch = _vueRuntimeEsmBundlerLegacy003Js._t;
837
+ renderSlot = _vueRuntimeEsmBundlerLegacy003Js.at;
838
+ withCtx = _vueRuntimeEsmBundlerLegacy003Js.bt;
839
+ resolveDynamicComponent = _vueRuntimeEsmBundlerLegacy003Js.ct;
840
+ openBlock = _vueRuntimeEsmBundlerLegacy003Js.et;
841
+ vModelText = _vueRuntimeEsmBundlerLegacy003Js.f;
842
+ withModifiers = _vueRuntimeEsmBundlerLegacy003Js.h;
843
+ renderList = _vueRuntimeEsmBundlerLegacy003Js.it;
844
+ createTextVNode = _vueRuntimeEsmBundlerLegacy003Js.j;
845
+ isRef = _vueRuntimeEsmBundlerLegacy003Js.jt;
846
+ createSlots = _vueRuntimeEsmBundlerLegacy003Js.k;
847
+ withKeys = _vueRuntimeEsmBundlerLegacy003Js.m;
848
+ useTemplateRef = _vueRuntimeEsmBundlerLegacy003Js.mt;
849
+ provide = _vueRuntimeEsmBundlerLegacy003Js.nt;
850
+ resolveDirective = _vueRuntimeEsmBundlerLegacy003Js.st;
851
+ useAttrs = _vueRuntimeEsmBundlerLegacy003Js.ut;
852
+ normalizeProps = _vueRuntimeEsmBundlerLegacy003Js.vn;
853
+ createBaseVNode = _vueRuntimeEsmBundlerLegacy003Js.w;
854
+ withDirectives = _vueRuntimeEsmBundlerLegacy003Js.xt;
855
+ normalizeStyle = _vueRuntimeEsmBundlerLegacy003Js.yn;
856
+ inject = _vueRuntimeEsmBundlerLegacy003Js.z;
857
+ shallowRef = _vueRuntimeEsmBundlerLegacy003Js.zt;
858
+ }, function (_MapCacheLegacy005Js) {
859
+ I18nT = _MapCacheLegacy005Js._t;
860
+ useActiveElement = _MapCacheLegacy005Js.b;
861
+ useI18n = _MapCacheLegacy005Js.gt;
862
+ useLocalStorage = _MapCacheLegacy005Js.j;
863
+ useFileDialog = _MapCacheLegacy005Js.k;
864
+ useTimestamp = _MapCacheLegacy005Js.z;
865
+ }, function (_srcLegacy007Js) {
866
+ N8nText_default = _srcLegacy007Js.In;
867
+ N8nButton_default = _srcLegacy007Js.Ln;
868
+ useProvideTooltipAppendTo = _srcLegacy007Js.Ot;
869
+ N8nIconButton_default = _srcLegacy007Js.Tt;
870
+ N8nLink_default = _srcLegacy007Js.mt;
871
+ N8nActionDropdown_default = _srcLegacy007Js.tt;
872
+ N8nTooltip_default = _srcLegacy007Js.vt;
873
+ N8nRadioButtons_default = _srcLegacy007Js.x;
874
+ N8nResizeWrapper_default = _srcLegacy007Js.y;
875
+ require_markdown_it_link_attributes = _srcLegacy007Js.yt;
876
+ N8nIcon_default = _srcLegacy007Js.zn;
877
+ }, function (_pluginVue_exportHelperLegacy00fJs) {
878
+ __plugin_vue_export_helper_default = _pluginVue_exportHelperLegacy00fJs.t;
879
+ }, function (_truncateLegacy00hJs) {
880
+ useRouter = _truncateLegacy00hJs.b;
881
+ useRoute = _truncateLegacy00hJs.y;
882
+ }, function (_useMessageLegacy00vJs) {
883
+ useMessage = _useMessageLegacy00vJs.t;
884
+ }, function (_useTelemetryLegacy00FJs) {
885
+ useSourceControlStore = _useTelemetryLegacy00FJs.Dn;
886
+ isChatNode = _useTelemetryLegacy00FJs.G;
887
+ v4_default = _useTelemetryLegacy00FJs.Io;
888
+ useUIStore = _useTelemetryLegacy00FJs.Ni;
889
+ useRootStore = _useTelemetryLegacy00FJs.Qs;
890
+ require_upperFirst = _useTelemetryLegacy00FJs.Rt;
891
+ injectWorkflowState = _useTelemetryLegacy00FJs.Sn;
892
+ useDocumentTitle = _useTelemetryLegacy00FJs.Tn;
893
+ useCanvasStore = _useTelemetryLegacy00FJs.Un;
894
+ useNDVStore = _useTelemetryLegacy00FJs.a;
895
+ waitingNodeTooltip = _useTelemetryLegacy00FJs.nt;
896
+ useWorkflowsStore = _useTelemetryLegacy00FJs.o;
897
+ useNodeTypesStore = _useTelemetryLegacy00FJs.rt;
898
+ useTelemetry = _useTelemetryLegacy00FJs.t;
899
+ useNodeHelpers = _useTelemetryLegacy00FJs.xn;
900
+ }, function (_useToastLegacy00HJs) {
901
+ getScrollbarWidth = _useToastLegacy00HJs.a;
902
+ useToast = _useToastLegacy00HJs.t;
903
+ }, function (_constantsLegacy00NJs) {
904
+ MODAL_CONFIRM = _constantsLegacy00NJs.No;
905
+ PopOutWindowKey = _constantsLegacy00NJs.Ts;
906
+ START_NODE_TYPE = _constantsLegacy00NJs.bn;
907
+ VIEWS = _constantsLegacy00NJs.mo;
908
+ PLACEHOLDER_EMPTY_WORKFLOW_ID = _constantsLegacy00NJs.s;
909
+ }, function (_assistantStoreLegacy00RJs) {
910
+ ndvEventBus = _assistantStoreLegacy00RJs.n;
911
+ }, function (_useRunWorkflowLegacy01fJs) {
912
+ useRunWorkflow = _useRunWorkflowLegacy01fJs.t;
913
+ }, function (_usePinnedDataLegacy01hJs) {
914
+ usePinnedData = _usePinnedDataLegacy01hJs.t;
915
+ }, function (_useClipboardLegacy01nJs) {
916
+ useClipboard = _useClipboardLegacy01nJs.t;
917
+ }, function (_useCanvasOperationsLegacy01pJs) {
918
+ useLogsStore = _useCanvasOperationsLegacy01pJs.a;
919
+ LOCAL_STORAGE_PANEL_WIDTH = _useCanvasOperationsLegacy01pJs.c;
920
+ chatEventBus = _useCanvasOperationsLegacy01pJs.d;
921
+ useExperimentalNdvStore = _useCanvasOperationsLegacy01pJs.i;
922
+ LOGS_PANEL_STATE = _useCanvasOperationsLegacy01pJs.l;
923
+ LOCAL_STORAGE_OVERVIEW_PANEL_WIDTH = _useCanvasOperationsLegacy01pJs.o;
924
+ canvasEventBus = _useCanvasOperationsLegacy01pJs.r;
925
+ LOCAL_STORAGE_PANEL_HEIGHT = _useCanvasOperationsLegacy01pJs.s;
926
+ useCanvasOperations = _useCanvasOperationsLegacy01pJs.t;
927
+ LOG_DETAILS_PANEL_STATE = _useCanvasOperationsLegacy01pJs.u;
928
+ }, function (_NodeIconLegacy01vJs) {
929
+ NodeIcon_default = _NodeIconLegacy01vJs.t;
930
+ }, function (_KeyboardShortcutTooltipLegacy01xJs) {
931
+ KeyboardShortcutTooltip_default = _KeyboardShortcutTooltipLegacy01xJs.t;
932
+ }, function (_isEmptyLegacy01TJs) {
933
+ RunData_default = _isEmptyLegacy01TJs.n;
934
+ RunDataItemCount_default = _isEmptyLegacy01TJs.r;
935
+ }, function (_NDVEmptyStateLegacy01VJs) {
936
+ NDVEmptyState_default = _NDVEmptyStateLegacy01VJs.t;
937
+ }, function (_useKeybindingsLegacy03tJs) {
938
+ useKeybindings = _useKeybindingsLegacy03tJs.t;
939
+ }, function (_VueMarkdownLegacy04LJs) {
940
+ VueMarkdown_default = _VueMarkdownLegacy04LJs.t;
941
+ }, function (_xmlLegacy04TJs) {
942
+ bash = _xmlLegacy04TJs.a;
943
+ javascript = _xmlLegacy04TJs.i;
944
+ typescript = _xmlLegacy04TJs.n;
945
+ python = _xmlLegacy04TJs.r;
946
+ xml = _xmlLegacy04TJs.t;
947
+ }, function (_useLogsTreeExpandLegacy06fJs) {
948
+ isPlaceholderLog = _useLogsTreeExpandLegacy06fJs._;
949
+ LogsViewConsumedTokenCountText_default = _useLogsTreeExpandLegacy06fJs.a;
950
+ restoreChatHistory = _useLogsTreeExpandLegacy06fJs.b;
951
+ getDepth = _useLogsTreeExpandLegacy06fJs.f;
952
+ getTotalConsumedTokens = _useLogsTreeExpandLegacy06fJs.g;
953
+ getSubtreeTotalConsumedTokens = _useLogsTreeExpandLegacy06fJs.h;
954
+ LogsViewNodeName_default = _useLogsTreeExpandLegacy06fJs.i;
955
+ findLogEntryRec = _useLogsTreeExpandLegacy06fJs.l;
956
+ getInputKey = _useLogsTreeExpandLegacy06fJs.m;
957
+ useLogsExecutionData = _useLogsTreeExpandLegacy06fJs.n;
958
+ getEntryAtRelativeIndex = _useLogsTreeExpandLegacy06fJs.p;
959
+ LogsOverviewRows_default = _useLogsTreeExpandLegacy06fJs.r;
960
+ extractBotResponse = _useLogsTreeExpandLegacy06fJs.s;
961
+ useLogsTreeExpand = _useLogsTreeExpandLegacy06fJs.t;
962
+ findSelectedLogEntry = _useLogsTreeExpandLegacy06fJs.u;
963
+ isSubNodeLog = _useLogsTreeExpandLegacy06fJs.v;
964
+ processFiles = _useLogsTreeExpandLegacy06fJs.y;
965
+ }, function (_coreLegacy06hJs) {
966
+ core_default = _coreLegacy06hJs.t;
967
+ }],
968
+ execute: function () {
969
+ __vite_style__ = document.createElement('style');
970
+ __vite_style__.textContent = "/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._container_1y331_123 {\n font-size: var(--font-size--2xs);\n text-align: left;\n padding-inline-start: var(--spacing--sm);\n padding-inline-end: var(--spacing--2xs);\n padding-block: var(--spacing--2xs);\n background-color: var(--color--foreground--tint-2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n line-height: var(--line-height--sm);\n}\n._container_1y331_123._clickable_1y331_135 {\n cursor: pointer;\n}\n._container_1y331_123:not(:last-child) {\n /** Panel open */\n border-bottom: var(--border);\n}\n._title_1y331_143 {\n flex-grow: 1;\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n._actions_1y331_151 {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n color: var(--color--text);\n max-width: 70%;\n /* Let button heights not affect the header height */\n margin-block: calc(-1 * var(--spacing--sm));\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._container_1sayb_123 {\n display: flex;\n align-items: center;\n}\n._container_1sayb_123 > * {\n padding-inline: var(--spacing--2xs);\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n._container_1sayb_123 > *:not(:last-child) {\n border-right: var(--border);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._container_svlfi_123 {\n flex-grow: 1;\n flex-shrink: 1;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n overflow: hidden;\n background-color: var(--color--foreground--tint-2);\n}\n._clearButton_svlfi_133 {\n border: none;\n color: var(--color--text--tint-1);\n gap: var(--spacing--5xs);\n}\n._content_svlfi_139 {\n position: relative;\n flex-grow: 1;\n overflow: auto;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n justify-content: stretch;\n padding-right: var(--spacing--5xs);\n}\n._content_svlfi_139._empty_svlfi_149 {\n align-items: center;\n justify-content: center;\n}\n._emptyText_svlfi_154 {\n max-width: 20em;\n text-align: center;\n}\n._summary_svlfi_159 {\n padding: var(--spacing--2xs);\n}\n._switchViewButtons_svlfi_163 {\n position: absolute;\n z-index: 10; /* higher than log entry rows background */\n right: 0;\n top: 0;\n margin: var(--spacing--4xs) var(--spacing--2xs);\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.3s cubic-bezier(0.19, 1, 0.22, 1);\n}\n._content_svlfi_139:hover ._switchViewButtons_svlfi_163 {\n visibility: visible;\n opacity: 1;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.chat-file[data-v-70b9370d] {\n display: flex;\n align-items: center;\n flex-wrap: nowrap;\n width: -moz-fit-content;\n width: fit-content;\n max-width: 15rem;\n padding: 0.5rem;\n border-radius: 0.25rem;\n gap: 0.25rem;\n font-size: 0.75rem;\n background: white;\n color: var(--chat--color-dark);\n border: 1px solid var(--chat--color-dark);\n cursor: pointer;\n}\n.chat-file-name-tooltip[data-v-70b9370d] {\n overflow: hidden;\n}\n.chat-file-name[data-v-70b9370d] {\n overflow: hidden;\n max-width: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin: 0;\n}\n.chat-file-delete[data-v-70b9370d],\n.chat-file-preview[data-v-70b9370d] {\n background: none;\n border: none;\n display: block;\n cursor: pointer;\n flex-shrink: 0;\n}\n.chat-file-delete[data-v-70b9370d] {\n position: relative;\n /* Increase hit area for better clickability */\n}\n.chat-file-delete[data-v-70b9370d]:hover {\n color: red;\n}\n.chat-file-delete[data-v-70b9370d]:before {\n content: \"\";\n position: absolute;\n top: -10px;\n right: -10px;\n bottom: -10px;\n left: -10px;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.chat-message {\n display: block;\n position: relative;\n max-width: -moz-fit-content;\n max-width: fit-content;\n font-size: var(--chat--message--font-size);\n padding: var(--chat--message--padding);\n border-radius: var(--chat--message--border-radius);\n scroll-margin: 3rem;\n}\n.chat-message .chat-message-actions {\n position: absolute;\n bottom: calc(100% - 0.5rem);\n left: 0;\n opacity: 0;\n transform: translateY(-0.25rem);\n display: flex;\n gap: 1rem;\n}\n.chat-message.chat-message-from-user .chat-message-actions {\n left: auto;\n right: 0;\n}\n.chat-message:hover .chat-message-actions {\n opacity: 1;\n}\n.chat-message p {\n line-height: var(--chat--message-line-height);\n word-wrap: break-word;\n}\n.chat-message + .chat-message {\n margin-top: var(--chat--message--margin-bottom);\n}\n.chat-message.chat-message-from-user + .chat-message.chat-message-from-bot, .chat-message.chat-message-from-bot + .chat-message.chat-message-from-user {\n margin-top: var(--chat--spacing);\n}\n.chat-message.chat-message-from-bot {\n color: var(--chat--message--bot--color);\n border-bottom-left-radius: 0;\n}\n.chat-message.chat-message-from-bot:not(.chat-message-transparent) {\n background-color: var(--chat--message--bot--background);\n border: var(--chat--message--bot--border);\n}\n.chat-message.chat-message-from-user {\n color: var(--chat--message--user--color);\n margin-left: auto;\n border-bottom-right-radius: 0;\n}\n.chat-message.chat-message-from-user:not(.chat-message-transparent) {\n background-color: var(--chat--message--user--background);\n border: var(--chat--message--user--border);\n}\n.chat-message > .chat-message-markdown {\n display: block;\n box-sizing: border-box;\n font-size: inherit;\n}\n.chat-message > .chat-message-markdown > *:first-child {\n margin-top: 0;\n}\n.chat-message > .chat-message-markdown > *:last-child {\n margin-bottom: 0;\n}\n.chat-message > .chat-message-markdown pre {\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n white-space: pre-wrap;\n box-sizing: border-box;\n padding: var(--chat--spacing);\n background: var(--chat--message--pre--background);\n border-radius: var(--chat--border-radius);\n}\n.chat-message .chat-message-files {\n display: flex;\n flex-wrap: wrap;\n gap: 0.25rem;\n padding-top: 0.5rem;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.chat-button {\n display: inline-flex;\n text-align: center;\n vertical-align: middle;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n color: var(--chat--button--color);\n background-color: var(--chat--button--background);\n border: 1px solid transparent;\n padding: var(--chat--button--padding);\n font-size: 1rem;\n line-height: 1.5;\n border-radius: var(--chat--button--border-radius);\n transition: color var(--chat--transition-duration) ease-in-out, background-color var(--chat--transition-duration) ease-in-out, border-color var(--chat--transition-duration) ease-in-out, box-shadow var(--chat--transition-duration) ease-in-out;\n cursor: pointer;\n}\n.chat-button:hover {\n color: var(--chat--button--hover--color);\n background-color: var(--chat--button--hover--background);\n text-decoration: none;\n}\n.chat-button:focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n.chat-button:disabled {\n opacity: 0.65;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.chat-get-started {\n padding-top: var(--chat--spacing);\n padding-bottom: var(--chat--spacing);\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.chat-powered-by {\n text-align: center;\n}\n.chat-powered-by a {\n color: var(--chat--color--primary);\n text-decoration: none;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.chat-get-started-footer {\n padding: var(--chat--spacing);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.chat-input[data-v-71b23fec] {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n flex-direction: column;\n position: relative;\n}\n.chat-input[data-v-71b23fec] * {\n box-sizing: border-box;\n}\n.chat-inputs[data-v-71b23fec] {\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: flex-end;\n}\n.chat-inputs textarea[data-v-71b23fec] {\n font-family: inherit;\n font-size: var(--chat--input--font-size);\n width: 100%;\n border: var(--chat--input--border, 0);\n border-radius: var(--chat--input--border-radius);\n padding: var(--chat--input--padding);\n min-height: var(--chat--textarea--height, 2.5rem);\n max-height: var(--chat--textarea--max-height);\n height: var(--chat--textarea--height, 2.5rem);\n resize: none;\n overflow-y: auto;\n background: var(--chat--input--background, white);\n color: var(--chat--input--text-color, initial);\n outline: none;\n line-height: var(--chat--input--line-height, 1.5);\n}\n.chat-inputs textarea[data-v-71b23fec]::-moz-placeholder {\n font-size: var(--chat--input--placeholder--font-size, var(--chat--input--font-size));\n}\n.chat-inputs textarea[data-v-71b23fec]::placeholder {\n font-size: var(--chat--input--placeholder--font-size, var(--chat--input--font-size));\n}\n.chat-inputs textarea[data-v-71b23fec]:focus, .chat-inputs textarea[data-v-71b23fec]:hover {\n border-color: var(--chat--input--border-active, 0);\n}\n.chat-inputs-controls[data-v-71b23fec] {\n display: flex;\n}\n.chat-input-send-button[data-v-71b23fec],\n.chat-input-file-button[data-v-71b23fec] {\n height: var(--chat--textarea--height);\n width: var(--chat--textarea--height);\n background: var(--chat--input--send--button--background, white);\n cursor: pointer;\n color: var(--chat--input--send--button--color, var(--chat--color--secondary));\n border: 0;\n font-size: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: color var(--chat--transition-duration) ease;\n}\n.chat-input-send-button svg[data-v-71b23fec],\n.chat-input-file-button svg[data-v-71b23fec] {\n min-width: -moz-fit-content;\n min-width: fit-content;\n}\n.chat-input-send-button[disabled][data-v-71b23fec],\n.chat-input-file-button[disabled][data-v-71b23fec] {\n cursor: no-drop;\n color: var(--chat--color-disabled);\n}\n.chat-input-send-button .chat-input-send-button[data-v-71b23fec]:hover, .chat-input-send-button .chat-input-send-button[data-v-71b23fec]:focus,\n.chat-input-file-button .chat-input-send-button[data-v-71b23fec]:hover,\n.chat-input-file-button .chat-input-send-button[data-v-71b23fec]:focus {\n background: var(--chat--input--send--button--background-hover, var(--chat--input--send--button--background));\n color: var(--chat--input--send--button--color-hover);\n}\n.chat-input-file-button[data-v-71b23fec] {\n background: var(--chat--input--file--button--background, white);\n color: var(--chat--input--file--button--color);\n}\n.chat-input-file-button[data-v-71b23fec]:hover {\n background: var(--chat--input--file--button--background-hover);\n color: var(--chat--input--file--button--color-hover);\n}\n.chat-files[data-v-71b23fec] {\n display: flex;\n overflow-x: hidden;\n overflow-y: auto;\n width: 100%;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 0.5rem;\n padding: var(--chat--files-spacing);\n}\n.chat-input-left-panel[data-v-71b23fec] {\n width: var(--chat--input--left--panel--width);\n margin-left: 0.4rem;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.chat-layout {\n width: 100%;\n height: 100%;\n display: flex;\n overflow-y: auto;\n flex-direction: column;\n font-family: var(--chat--font-family);\n}\n.chat-layout .chat-header {\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: 1em;\n height: var(--chat--header-height);\n padding: var(--chat--header--padding);\n background: var(--chat--header--background);\n color: var(--chat--header--color);\n border-top: var(--chat--header--border-top);\n border-bottom: var(--chat--header--border-bottom);\n border-left: var(--chat--header--border-left);\n border-right: var(--chat--header--border-right);\n}\n.chat-layout .chat-header h1 {\n font-size: var(--chat--heading--font-size);\n color: var(--chat--header--color);\n}\n.chat-layout .chat-header p {\n font-size: var(--chat--subtitle--font-size);\n line-height: var(--chat--subtitle--line-height);\n}\n.chat-layout .chat-body {\n background: var(--chat--body--background);\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n position: relative;\n min-height: 100px;\n}\n.chat-layout .chat-footer {\n border-top: 1px solid var(--chat--color-light-shade-100);\n background: var(--chat--footer--background);\n color: var(--chat--footer--color);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.chat-heading {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.chat-close-button {\n display: flex;\n border: none;\n background: none;\n cursor: pointer;\n}\n.chat-close-button:hover {\n color: var(--chat--close--button--color-hover, var(--chat--color--primary));\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.chat-window-wrapper {\n position: fixed;\n display: flex;\n flex-direction: column;\n bottom: var(--chat--window--bottom);\n right: var(--chat--window--right);\n z-index: var(--chat--window--z-index);\n max-width: calc(100% - var(--chat--window--right, var(--chat--spacing)) * 2);\n max-height: calc(100% - var(--chat--window--bottom, var(--chat--spacing)) * 2);\n}\n.chat-window-wrapper .chat-window {\n display: flex;\n width: var(--chat--window--width);\n height: var(--chat--window--height);\n max-width: 100%;\n max-height: 100%;\n border: var(--chat--window--border, 1px solid var(--chat--color-light-shade-100));\n border-radius: var(--chat--window--border-radius, var(--chat--border-radius));\n margin-bottom: var(--chat--window--margin-bottom, var(--chat--spacing));\n overflow: hidden;\n transform-origin: bottom right;\n}\n.chat-window-wrapper .chat-window .chat-layout {\n width: auto;\n height: auto;\n flex: 1;\n}\n.chat-window-wrapper .chat-window-toggle {\n flex: 0 0 auto;\n background: var(--chat--toggle--background);\n color: var(--chat--toggle--color);\n cursor: pointer;\n width: var(--chat--toggle--width);\n height: var(--chat--toggle--height);\n border-radius: var(--chat--toggle--border-radius, 50%);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: auto;\n transition: transform var(--chat--transition-duration) ease, background var(--chat--transition-duration) ease;\n}\n.chat-window-wrapper .chat-window-toggle:hover, .chat-window-wrapper .chat-window-toggle:focus {\n transform: scale(1.05);\n background: var(--chat--toggle--hover--background);\n}\n.chat-window-wrapper .chat-window-toggle:active {\n transform: scale(0.95);\n background: var(--chat--toggle--active--background);\n}\n.chat-window-transition-enter-active, .chat-window-transition-leave-active {\n transition: transform var(--chat--transition-duration) ease, opacity var(--chat--transition-duration) ease;\n}\n.chat-window-transition-enter-from, .chat-window-transition-leave-to {\n transform: scale(0);\n opacity: 0;\n}\n.chat-window-toggle-transition-enter-active, .chat-window-toggle-transition-leave-active {\n transition: opacity var(--chat--transition-duration) ease;\n}\n.chat-window-toggle-transition-enter-from, .chat-window-toggle-transition-leave-to {\n opacity: 0;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.chat-message-typing {\n max-width: 80px;\n}\n.chat-message-typing.chat-message-typing-animation-scaling .chat-message-typing-circle {\n animation: chat-message-typing-animation-scaling 800ms ease-in-out infinite;\n animation-delay: 3600ms;\n}\n.chat-message-typing.chat-message-typing-animation-bouncing .chat-message-typing-circle {\n animation: chat-message-typing-animation-bouncing 800ms ease-in-out infinite;\n animation-delay: 3600ms;\n}\n.chat-message-typing .chat-message-typing-body {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.chat-message-typing .chat-message-typing-circle {\n display: block;\n height: 10px;\n width: 10px;\n border-radius: 50%;\n background-color: var(--chat--color-typing);\n margin: 3px;\n}\n.chat-message-typing .chat-message-typing-circle:nth-child(1) {\n animation-delay: 0ms;\n}\n.chat-message-typing .chat-message-typing-circle:nth-child(2) {\n animation-delay: 333ms;\n}\n.chat-message-typing .chat-message-typing-circle:nth-child(3) {\n animation-delay: 666ms;\n}\n@keyframes chat-message-typing-animation-scaling {\n0% {\n transform: scale(1);\n}\n33% {\n transform: scale(1);\n}\n50% {\n transform: scale(1.4);\n}\n100% {\n transform: scale(1);\n}\n}\n@keyframes chat-message-typing-animation-bouncing {\n0% {\n transform: translateY(0);\n}\n33% {\n transform: translateY(0);\n}\n50% {\n transform: translateY(-10px);\n}\n100% {\n transform: translateY(0);\n}\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n.chat-messages-list {\n margin-top: auto;\n display: block;\n padding: var(--chat--messages-list--padding);\n}\n.empty-container {\n container-type: size;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.empty-container p {\n max-width: 16em;\n margin: 0;\n}\n.empty {\n text-align: center;\n color: var(--color--text);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--spacing--xs);\n padding-inline: var(--spacing--md);\n padding-bottom: var(--spacing--lg);\n overflow: hidden;\n}\n.emptyIcon {\n zoom: 2.5;\n color: var(--color-button-secondary-border);\n}\n@container (height < 150px) {\n.empty {\n flex-direction: row;\n text-align: left;\n}\n.emptyIcon {\n zoom: 1.5;\n}\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._container_1v2rk_123 {\n display: inline-flex;\n align-items: center;\n margin: 0 var(--spacing--4xs);\n}\n._icon_1v2rk_129 {\n color: var(--color--foreground--shade-1);\n cursor: help;\n}\n._icon_1v2rk_129:hover {\n color: var(--color--primary);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._container_14jp1_123 {\n display: inline-flex;\n align-items: center;\n margin: 0 var(--spacing--4xs);\n}\n._icon_14jp1_129 {\n color: var(--color--foreground--shade-1);\n cursor: pointer;\n}\n._icon_14jp1_129:hover {\n color: var(--color--primary);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._chat_1lcb4_123 {\n --chat--spacing: var(--spacing--xs);\n --chat--message--padding: var(--spacing--2xs);\n --chat--message--font-size: var(--font-size--2xs);\n --chat--input--font-size: var(--font-size--sm);\n --chat--input--placeholder--font-size: var(--font-size--xs);\n --chat--message--bot--background: transparent;\n --chat--message--user--background: var(--color--text--tint-2);\n --chat--message--bot--color: var(--color--text--shade-1);\n --chat--message--user--color: var(--color--text--shade-1);\n --chat--message--bot--border: none;\n --chat--message--user--border: none;\n --chat--message--user--border: none;\n --chat--input--padding: var(--spacing--xs);\n --chat--color-typing: var(--color--text--tint-1);\n --chat--textarea--max-height: calc(var(--logs-panel--height) * 0.3);\n --chat--message--pre--background: var(--color--foreground--tint-1);\n --chat--textarea--height: calc(\n \tvar(--chat--input--padding) * 2 + var(--chat--input--font-size) *\n \t\tvar(--chat--input--line-height)\n );\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background-color: var(--color--background--light-2);\n}\n._chatHeader_1lcb4_151 {\n font-size: var(--font-size--sm);\n font-weight: var(--font-weight--regular);\n line-height: 18px;\n text-align: left;\n border-bottom: 1px solid var(--color--foreground);\n padding: var(--chat--spacing);\n background-color: var(--color--foreground--tint-2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n._chatTitle_1lcb4_164 {\n font-weight: var(--font-weight--medium);\n}\n._session_1lcb4_168 {\n display: flex;\n align-items: center;\n gap: var(--spacing--2xs);\n color: var(--color--text);\n max-width: 70%;\n}\n._sessionId_1lcb4_176 {\n display: inline-block;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n._sessionId_1lcb4_176._copyable_1lcb4_182 {\n cursor: pointer;\n}\n._headerButton_1lcb4_186 {\n max-height: 1.1rem;\n border: none;\n}\n._newHeaderButton_1lcb4_191 {\n border: none;\n color: var(--color--text--tint-1);\n}\n._chatBody_1lcb4_196 {\n display: flex;\n height: 100%;\n overflow: auto;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n._messages_1lcb4_205 {\n border-radius: var(--radius);\n height: 100%;\n width: 100%;\n overflow: auto;\n padding-top: var(--spacing--lg);\n}\n._messages_1lcb4_205:not(:last-child) {\n margin-right: 1em;\n}\n._messagesInput_1lcb4_216 {\n --input--border-color: var(--border-color);\n --chat--input--border: none;\n --chat--input--border-radius: 0.5rem;\n --chat--input--send--button--background: transparent;\n --chat--input--send--button--color: var(--color--primary);\n --chat--input--file--button--background: transparent;\n --chat--input--file--button--color: var(--color--primary);\n --chat--input--border-active: var(--input--border-color--focus, var(--color--secondary));\n --chat--files-spacing: var(--spacing--2xs);\n --chat--input--background: transparent;\n --chat--input--file--button--color: var(--button--color--text--secondary);\n --chat--input--file--button--color-hover: var(--color--primary);\n padding: var(--spacing--5xs);\n margin: 0 var(--chat--spacing) var(--chat--spacing);\n flex-grow: 1;\n display: flex;\n background: var(--lm-chat--bot--color--background);\n border-radius: var(--chat--input--border-radius);\n transition: border-color 200ms ease-in-out;\n border: var(--input--border-color, var(--border-color)) var(--input--border-style, var(--border-style)) var(--input--border-width, var(--border-width));\n}\n[data-theme=dark] ._messagesInput_1lcb4_216 {\n --chat--input--text-color: var(--input--color--text, var(--color--text--shade-1));\n}\n@media (prefers-color-scheme: dark) {\n._messagesInput_1lcb4_216 {\n --chat--input--text-color: var(--input--color--text, var(--color--text--shade-1));\n}\n}\n._messagesInput_1lcb4_216:focus-within {\n --input--border-color: #4538a3;\n}\n._messagesHistory_1lcb4_250 {\n height: var(--chat--textarea--height);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._component_1mnpf_123 {\n --run-data--color--background: var(--color--background--light-2);\n}\n._title_1mnpf_127 {\n text-transform: uppercase;\n letter-spacing: 3px;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._container_w6lwl_123 {\n flex-grow: 1;\n flex-shrink: 1;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n overflow: hidden;\n}\n._header_w6lwl_132 {\n padding: var(--spacing--2xs);\n}\n._actions_w6lwl_136 {\n display: flex;\n align-items: center;\n gap: var(--spacing--2xs);\n padding-inline-end: var(--spacing--2xs);\n}\n._actions_w6lwl_136 ._pressed_w6lwl_142 {\n background-color: var(--button--outline-color--secondary--focus);\n}\n._title_w6lwl_146 {\n display: flex;\n align-items: center;\n flex-shrink: 1;\n}\n._icon_w6lwl_152 {\n margin-right: var(--spacing--2xs);\n}\n._executionSummary_w6lwl_156 {\n flex-shrink: 1;\n}\n._content_w6lwl_160 {\n flex-shrink: 1;\n flex-grow: 1;\n display: flex;\n align-items: stretch;\n overflow: hidden;\n}\n._outputPanel_w6lwl_168 {\n width: 0;\n flex-grow: 1;\n}\n._inputResizer_w6lwl_173 {\n overflow: hidden;\n flex-shrink: 0;\n}\n._inputResizer_w6lwl_173:not(:is(:last-child, ._collapsed_w6lwl_177, ._full_w6lwl_177)) {\n border-right: var(--border);\n}\n._placeholder_w6lwl_181 {\n flex-grow: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._container_yw9ej_123 {\n display: flex;\n}\n._container_yw9ej_123 button:hover {\n background-color: var(--color--background);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._popOutContent_17exv_123 {\n height: 100%;\n position: relative;\n overflow: hidden;\n}\n._resizeWrapper_17exv_129 {\n height: 100%;\n min-height: 0;\n flex-basis: 0;\n border-top: var(--border);\n background-color: var(--color--background--light-2);\n}\n._poppedOut_17exv_136 ._resizeWrapper_17exv_129 {\n border-top: none;\n}\n._container_17exv_140 {\n height: 100%;\n display: flex;\n flex-grow: 1;\n}\n._container_17exv_140 > *:not(:last-child) {\n border-right: var(--border);\n}\n._chat_17exv_149 {\n flex-shrink: 0;\n}\n._logsContainer_17exv_153 {\n width: 0;\n flex-grow: 1;\n display: flex;\n align-items: stretch;\n}\n._logsContainer_17exv_153 > *:not(:last-child) {\n border-right: var(--border);\n}\n._overviewResizer_17exv_163 {\n flex-grow: 0;\n flex-shrink: 0;\n}\n._overviewResizer_17exv_163:last-child {\n flex-grow: 1;\n}\n._logsOverview_17exv_171 {\n height: 100%;\n}\n._logsDetails_17exv_175 {\n width: 0;\n flex-grow: 1;\n}/*$vite$:1*/";
971
+ document.head.appendChild(__vite_style__);
972
+ localStorageNamespace = "n8n-chat";
973
+ localStorageSessionIdKey = `${localStorageNamespace}/sessionId`; //#endregion
974
+ //#region ../@n8n/chat/src/constants/symbols.ts
975
+ ChatSymbol = "Chat";
976
+ ChatOptionsSymbol = "ChatOptions"; //#endregion
977
+ //#region src/features/execution/logs/composables/useChatState.ts
978
+ ChatSymbol$1 = "Chat";
979
+ LogsPanelHeader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
980
+ __name: "LogsPanelHeader",
981
+ props: {
982
+ title: {},
983
+ isClickable: {
984
+ type: Boolean
985
+ }
986
+ },
987
+ emits: ["click"],
988
+ setup(__props, {
989
+ emit: __emit
990
+ }) {
991
+ const emit = __emit;
992
+ function handleClick() {
993
+ if (__props.isClickable) emit("click");
994
+ }
995
+ return (_ctx, _cache) => {
996
+ return openBlock(), createElementBlock("header", {
997
+ class: normalizeClass([_ctx.$style.container, {
998
+ [_ctx.$style.clickable]: _ctx.isClickable
999
+ }]),
1000
+ onClick: handleClick
1001
+ }, [createVNode(unref(N8nText_default), {
1002
+ class: normalizeClass(_ctx.$style.title),
1003
+ bold: true,
1004
+ size: "small"
1005
+ }, {
1006
+ default: withCtx(() => [renderSlot(_ctx.$slots, "title", {}, () => [createTextVNode(toDisplayString(_ctx.title), 1)])]),
1007
+ _: 3
1008
+ }, 8, ["class"]), createBaseVNode("div", {
1009
+ class: normalizeClass(_ctx.$style.actions)
1010
+ }, [renderSlot(_ctx.$slots, "actions")], 2)], 2);
1011
+ };
1012
+ }
1013
+ }); //#endregion
1014
+ //#region src/features/execution/logs/components/LogsPanelHeader.vue?vue&type=style&index=0&lang.module.scss
1015
+ container$7 = "_container_1y331_123";
1016
+ clickable = "_clickable_1y331_135";
1017
+ title$2 = "_title_1y331_143";
1018
+ actions$1 = "_actions_1y331_151";
1019
+ LogsPanelHeader_vue_vue_type_style_index_0_lang_module_default = {
1020
+ container: container$7,
1021
+ clickable,
1022
+ title: title$2,
1023
+ actions: actions$1
1024
+ }; //#endregion
1025
+ //#region src/features/execution/logs/components/LogsPanelHeader.vue
1026
+ cssModules$9 = {
1027
+ "$style": LogsPanelHeader_vue_vue_type_style_index_0_lang_module_default
1028
+ };
1029
+ LogsPanelHeader_default = /* @__PURE__ */__plugin_vue_export_helper_default(LogsPanelHeader_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$9]]); //#endregion
1030
+ //#region src/features/execution/logs/components/LogsViewExecutionSummary.vue?vue&type=script&setup=true&lang.ts
1031
+ import_upperFirst = /* @__PURE__ */__toESM(require_upperFirst());
1032
+ LogsViewExecutionSummary_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
1033
+ __name: "LogsViewExecutionSummary",
1034
+ props: {
1035
+ status: {},
1036
+ consumedTokens: {},
1037
+ startTime: {},
1038
+ timeTook: {}
1039
+ },
1040
+ setup(__props) {
1041
+ const locale = useI18n();
1042
+ const now = useTimestamp({
1043
+ interval: 1e3
1044
+ });
1045
+ const executionStatusText = computed(() => __props.status === "running" || __props.status === "waiting" ? locale.baseText("logs.overview.body.summaryText.for", {
1046
+ interpolate: {
1047
+ status: (0, import_upperFirst.default)(__props.status),
1048
+ time: locale.displayTimer(Math.floor((now.value - __props.startTime) / 1e3) * 1e3, true)
1049
+ }
1050
+ }) : __props.timeTook === void 0 ? (0, import_upperFirst.default)(__props.status) : locale.baseText("logs.overview.body.summaryText.in", {
1051
+ interpolate: {
1052
+ status: (0, import_upperFirst.default)(__props.status),
1053
+ time: locale.displayTimer(__props.timeTook, true)
1054
+ }
1055
+ }));
1056
+ return (_ctx, _cache) => {
1057
+ return openBlock(), createBlock(unref(N8nText_default), {
1058
+ tag: "div",
1059
+ color: "text-light",
1060
+ size: "small",
1061
+ class: normalizeClass(_ctx.$style.container)
1062
+ }, {
1063
+ default: withCtx(() => [createBaseVNode("span", null, toDisplayString(executionStatusText.value), 1), _ctx.consumedTokens.totalTokens > 0 ? (openBlock(), createBlock(LogsViewConsumedTokenCountText_default, {
1064
+ key: 0,
1065
+ "consumed-tokens": _ctx.consumedTokens
1066
+ }, null, 8, ["consumed-tokens"])) : createCommentVNode("", true)]),
1067
+ _: 1
1068
+ }, 8, ["class"]);
1069
+ };
1070
+ }
1071
+ }); //#endregion
1072
+ //#region src/features/execution/logs/components/LogsViewExecutionSummary.vue?vue&type=style&index=0&lang.module.scss
1073
+ container$6 = "_container_1sayb_123";
1074
+ LogsViewExecutionSummary_vue_vue_type_style_index_0_lang_module_default = {
1075
+ container: container$6
1076
+ }; //#endregion
1077
+ //#region src/features/execution/logs/components/LogsViewExecutionSummary.vue
1078
+ cssModules$8 = {
1079
+ "$style": LogsViewExecutionSummary_vue_vue_type_style_index_0_lang_module_default
1080
+ };
1081
+ LogsViewExecutionSummary_default = /* @__PURE__ */__plugin_vue_export_helper_default(LogsViewExecutionSummary_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$8]]);
1082
+ LogsOverviewPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
1083
+ __name: "LogsOverviewPanel",
1084
+ props: {
1085
+ isOpen: {
1086
+ type: Boolean
1087
+ },
1088
+ selected: {},
1089
+ isReadOnly: {
1090
+ type: Boolean
1091
+ },
1092
+ isCompact: {
1093
+ type: Boolean
1094
+ },
1095
+ execution: {},
1096
+ entries: {},
1097
+ flatLogEntries: {},
1098
+ latestNodeInfo: {},
1099
+ isHeaderClickable: {
1100
+ type: Boolean
1101
+ }
1102
+ },
1103
+ emits: ["clickHeader", "select", "clearExecutionData", "openNdv", "toggleExpanded"],
1104
+ setup(__props, {
1105
+ emit: __emit
1106
+ }) {
1107
+ const emit = __emit;
1108
+ const locale = useI18n();
1109
+ const isClearExecutionButtonVisible = useClearExecutionButtonVisible();
1110
+ const isEmpty = computed(() => __props.flatLogEntries.length === 0 || __props.execution === void 0);
1111
+ const switchViewOptions = computed(() => [{
1112
+ label: locale.baseText("logs.overview.header.switch.overview"),
1113
+ value: "overview"
1114
+ }, {
1115
+ label: locale.baseText("logs.overview.header.switch.details"),
1116
+ value: "details"
1117
+ }]);
1118
+ const hasStaticScrollbar = getScrollbarWidth() > 0;
1119
+ const consumedTokens = computed(() => getTotalConsumedTokens(...__props.entries.map(entry => getSubtreeTotalConsumedTokens(entry, false))));
1120
+ const timeTook = computed(() => __props.execution?.startedAt && __props.execution.stoppedAt ? +new Date(__props.execution.stoppedAt) - +new Date(__props.execution.startedAt) : void 0);
1121
+ const shouldShowTokenCountColumn = computed(() => consumedTokens.value.totalTokens > 0 || __props.entries.some(entry => getSubtreeTotalConsumedTokens(entry, true).totalTokens > 0));
1122
+ function handleSwitchView(value) {
1123
+ emit("select", value === "overview" ? void 0 : __props.flatLogEntries[0]);
1124
+ }
1125
+ return (_ctx, _cache) => {
1126
+ return openBlock(), createElementBlock("div", {
1127
+ class: normalizeClass([_ctx.$style.container, hasStaticScrollbar ? _ctx.$style.staticScrollBar : ""]),
1128
+ "data-test-id": "logs-overview"
1129
+ }, [createVNode(LogsPanelHeader_default, {
1130
+ title: unref(locale).baseText("logs.overview.header.title"),
1131
+ "data-test-id": "logs-overview-header",
1132
+ "is-clickable": _ctx.isHeaderClickable,
1133
+ onClick: _cache[1] || (_cache[1] = $event => emit("clickHeader"))
1134
+ }, {
1135
+ actions: withCtx(() => [unref(isClearExecutionButtonVisible) ? (openBlock(), createBlock(unref(N8nTooltip_default), {
1136
+ key: 0,
1137
+ content: unref(locale).baseText("logs.overview.header.actions.clearExecution.tooltip")
1138
+ }, {
1139
+ default: withCtx(() => [createVNode(unref(N8nButton_default), {
1140
+ size: "mini",
1141
+ type: "secondary",
1142
+ icon: "trash-2",
1143
+ "icon-size": "medium",
1144
+ "data-test-id": "clear-execution-data-button",
1145
+ class: normalizeClass(_ctx.$style.clearButton),
1146
+ onClick: _cache[0] || (_cache[0] = withModifiers($event => emit("clearExecutionData"), ["stop"]))
1147
+ }, {
1148
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("logs.overview.header.actions.clearExecution")), 1)]),
1149
+ _: 1
1150
+ }, 8, ["class"])]),
1151
+ _: 1
1152
+ }, 8, ["content"])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "actions")]),
1153
+ _: 3
1154
+ }, 8, ["title", "is-clickable"]), _ctx.isOpen ? (openBlock(), createElementBlock("div", {
1155
+ key: 0,
1156
+ class: normalizeClass([_ctx.$style.content, isEmpty.value ? _ctx.$style.empty : ""]),
1157
+ "data-test-id": "logs-overview-body"
1158
+ }, [isEmpty.value || _ctx.execution === void 0 ? (openBlock(), createBlock(unref(N8nText_default), {
1159
+ key: 0,
1160
+ tag: "p",
1161
+ size: "medium",
1162
+ color: "text-base",
1163
+ class: normalizeClass(_ctx.$style.emptyText),
1164
+ "data-test-id": "logs-overview-empty"
1165
+ }, {
1166
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("logs.overview.body.empty.message")), 1)]),
1167
+ _: 1
1168
+ }, 8, ["class"])) : (openBlock(), createElementBlock(Fragment, {
1169
+ key: 1
1170
+ }, [createVNode(LogsViewExecutionSummary_default, {
1171
+ "data-test-id": "logs-overview-status",
1172
+ class: normalizeClass(_ctx.$style.summary),
1173
+ status: _ctx.execution.status,
1174
+ "consumed-tokens": consumedTokens.value,
1175
+ "start-time": +new Date(_ctx.execution.startedAt),
1176
+ "time-took": timeTook.value
1177
+ }, null, 8, ["class", "status", "consumed-tokens", "start-time", "time-took"]), createVNode(LogsOverviewRows_default, {
1178
+ "is-read-only": _ctx.isReadOnly,
1179
+ selected: _ctx.selected,
1180
+ "is-compact": _ctx.isCompact,
1181
+ "should-show-token-count-column": shouldShowTokenCountColumn.value,
1182
+ "latest-node-info": _ctx.latestNodeInfo,
1183
+ "flat-log-entries": _ctx.flatLogEntries,
1184
+ "can-open-ndv": true,
1185
+ execution: _ctx.execution,
1186
+ onToggleExpanded: _cache[2] || (_cache[2] = $event => emit("toggleExpanded", $event)),
1187
+ onOpenNdv: _cache[3] || (_cache[3] = $event => emit("openNdv", $event)),
1188
+ onSelect: _cache[4] || (_cache[4] = $event => emit("select", $event))
1189
+ }, null, 8, ["is-read-only", "selected", "is-compact", "should-show-token-count-column", "latest-node-info", "flat-log-entries", "execution"]), createVNode(unref(N8nRadioButtons_default), {
1190
+ size: "small-medium",
1191
+ class: normalizeClass(_ctx.$style.switchViewButtons),
1192
+ "model-value": _ctx.selected ? "details" : "overview",
1193
+ options: switchViewOptions.value,
1194
+ "onUpdate:modelValue": handleSwitchView
1195
+ }, null, 8, ["class", "model-value", "options"])], 64))], 2)) : createCommentVNode("", true)], 2);
1196
+ };
1197
+ }
1198
+ }); //#endregion
1199
+ //#region src/features/execution/logs/components/LogsOverviewPanel.vue?vue&type=style&index=0&lang.module.scss
1200
+ container$5 = "_container_svlfi_123";
1201
+ clearButton = "_clearButton_svlfi_133";
1202
+ content$1 = "_content_svlfi_139";
1203
+ empty = "_empty_svlfi_149";
1204
+ emptyText = "_emptyText_svlfi_154";
1205
+ summary = "_summary_svlfi_159";
1206
+ switchViewButtons = "_switchViewButtons_svlfi_163";
1207
+ LogsOverviewPanel_vue_vue_type_style_index_0_lang_module_default = {
1208
+ container: container$5,
1209
+ clearButton,
1210
+ content: content$1,
1211
+ empty,
1212
+ emptyText,
1213
+ summary,
1214
+ switchViewButtons
1215
+ }; //#endregion
1216
+ //#region src/features/execution/logs/components/LogsOverviewPanel.vue
1217
+ cssModules$7 = {
1218
+ "$style": LogsOverviewPanel_vue_vue_type_style_index_0_lang_module_default
1219
+ };
1220
+ LogsOverviewPanel_default = /* @__PURE__ */__plugin_vue_export_helper_default(LogsOverviewPanel_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$7]]);
1221
+ _hoisted_1$12 = {
1222
+ viewBox: "0 0 24 24",
1223
+ width: "1.2em",
1224
+ height: "1.2em"
1225
+ };
1226
+ closeThick_default = {
1227
+ name: "mdi-closeThick",
1228
+ render: render$7
1229
+ }; //#endregion
1230
+ //#region ~icons/mdi/fileImage
1231
+ _hoisted_1$11 = {
1232
+ viewBox: "0 0 24 24",
1233
+ width: "1.2em",
1234
+ height: "1.2em"
1235
+ };
1236
+ fileImage_default = {
1237
+ name: "mdi-fileImage",
1238
+ render: render$6
1239
+ }; //#endregion
1240
+ //#region ~icons/mdi/fileMusic
1241
+ _hoisted_1$10 = {
1242
+ viewBox: "0 0 24 24",
1243
+ width: "1.2em",
1244
+ height: "1.2em"
1245
+ };
1246
+ fileMusic_default = {
1247
+ name: "mdi-fileMusic",
1248
+ render: render$5
1249
+ }; //#endregion
1250
+ //#region ~icons/mdi/fileText
1251
+ _hoisted_1$9 = {
1252
+ viewBox: "0 0 24 24",
1253
+ width: "1.2em",
1254
+ height: "1.2em"
1255
+ };
1256
+ fileText_default = {
1257
+ name: "mdi-fileText",
1258
+ render: render$4
1259
+ }; //#endregion
1260
+ //#region ~icons/mdi/fileVideo
1261
+ _hoisted_1$8 = {
1262
+ viewBox: "0 0 24 24",
1263
+ width: "1.2em",
1264
+ height: "1.2em"
1265
+ };
1266
+ fileVideo_default = {
1267
+ name: "mdi-fileVideo",
1268
+ render: render$3
1269
+ }; //#endregion
1270
+ //#region ~icons/mdi/openInNew
1271
+ _hoisted_1$7 = {
1272
+ viewBox: "0 0 24 24",
1273
+ width: "1.2em",
1274
+ height: "1.2em"
1275
+ };
1276
+ openInNew_default = {
1277
+ name: "mdi-openInNew",
1278
+ render: render$2
1279
+ }; //#endregion
1280
+ //#region ../@n8n/chat/src/components/ChatFile.vue?vue&type=script&setup=true&lang.ts
1281
+ _hoisted_1$6 = {
1282
+ class: "chat-file-name"
1283
+ };
1284
+ ChatFile_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
1285
+ __name: "ChatFile",
1286
+ props: {
1287
+ file: {},
1288
+ isRemovable: {
1289
+ type: Boolean
1290
+ },
1291
+ isPreviewable: {
1292
+ type: Boolean
1293
+ }
1294
+ },
1295
+ emits: ["remove"],
1296
+ setup(__props, {
1297
+ emit: __emit
1298
+ }) {
1299
+ const props = __props;
1300
+ const emit = __emit;
1301
+ const iconMapper = {
1302
+ document: fileText_default,
1303
+ audio: fileMusic_default,
1304
+ image: fileImage_default,
1305
+ video: fileVideo_default
1306
+ };
1307
+ const TypeIcon = computed(() => {
1308
+ return iconMapper[props.file?.type.split("/")[0]] || fileText_default;
1309
+ });
1310
+ function onClick() {
1311
+ if (props.isPreviewable) window.open(URL.createObjectURL(props.file));
1312
+ }
1313
+ function onDelete() {
1314
+ emit("remove", props.file);
1315
+ }
1316
+ return (_ctx, _cache) => {
1317
+ return openBlock(), createElementBlock("div", {
1318
+ class: "chat-file",
1319
+ onClick
1320
+ }, [createVNode(unref(TypeIcon)), createBaseVNode("p", _hoisted_1$6, toDisplayString(_ctx.file.name), 1), _ctx.isRemovable ? (openBlock(), createElementBlock("span", {
1321
+ key: 0,
1322
+ class: "chat-file-delete",
1323
+ onClick: withModifiers(onDelete, ["stop"])
1324
+ }, [createVNode(unref(closeThick_default))])) : _ctx.isPreviewable ? (openBlock(), createBlock(unref(openInNew_default), {
1325
+ key: 1,
1326
+ class: "chat-file-preview"
1327
+ })) : createCommentVNode("", true)]);
1328
+ };
1329
+ }
1330
+ }); //#endregion
1331
+ //#region ../@n8n/chat/src/components/ChatFile.vue
1332
+ ChatFile_default = /* @__PURE__ */__plugin_vue_export_helper_default(ChatFile_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-70b9370d"]]); //#endregion
1333
+ //#region ../@n8n/chat/src/components/Message.vue?vue&type=script&setup=true&lang.ts
1334
+ import_markdown_it_link_attributes = /* @__PURE__ */__toESM(require_markdown_it_link_attributes());
1335
+ _hoisted_1$5 = {
1336
+ key: 0,
1337
+ class: "chat-message-actions"
1338
+ };
1339
+ _hoisted_2$2 = {
1340
+ key: 2,
1341
+ class: "chat-message-files"
1342
+ };
1343
+ Message_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
1344
+ __name: "Message",
1345
+ props: {
1346
+ message: {}
1347
+ },
1348
+ setup(__props, {
1349
+ expose: __expose
1350
+ }) {
1351
+ const props = __props;
1352
+ core_default.registerLanguage("javascript", javascript);
1353
+ core_default.registerLanguage("typescript", typescript);
1354
+ core_default.registerLanguage("python", python);
1355
+ core_default.registerLanguage("xml", xml);
1356
+ core_default.registerLanguage("bash", bash);
1357
+ const {
1358
+ message
1359
+ } = toRefs(props);
1360
+ const {
1361
+ options
1362
+ } = useOptions();
1363
+ const messageContainer = ref(null);
1364
+ const fileSources = ref({});
1365
+ const messageText = computed(() => {
1366
+ return message.value.text || "&lt;Empty response&gt;";
1367
+ });
1368
+ const classes = computed(() => {
1369
+ return {
1370
+ "chat-message-from-user": message.value.sender === "user",
1371
+ "chat-message-from-bot": message.value.sender === "bot",
1372
+ "chat-message-transparent": message.value.transparent === true
1373
+ };
1374
+ });
1375
+ const linksNewTabPlugin = vueMarkdownItInstance => {
1376
+ vueMarkdownItInstance.use(import_markdown_it_link_attributes.default, {
1377
+ attrs: {
1378
+ target: "_blank",
1379
+ rel: "noopener"
1380
+ }
1381
+ });
1382
+ };
1383
+ const scrollToView = () => {
1384
+ if (messageContainer.value?.scrollIntoView) messageContainer.value.scrollIntoView({
1385
+ block: "start"
1386
+ });
1387
+ };
1388
+ const markdownOptions = {
1389
+ highlight(str, lang) {
1390
+ if (lang && core_default.getLanguage(lang)) try {
1391
+ return core_default.highlight(str, {
1392
+ language: lang
1393
+ }).value;
1394
+ } catch {}
1395
+ return "";
1396
+ }
1397
+ };
1398
+ const messageComponents = {
1399
+ ...(options?.messageComponents ?? {})
1400
+ };
1401
+ __expose({
1402
+ scrollToView
1403
+ });
1404
+ const readFileAsDataURL = async file => await new Promise((resolve, reject) => {
1405
+ const reader = new FileReader();
1406
+ reader.onload = () => resolve(reader.result);
1407
+ reader.onerror = reject;
1408
+ reader.readAsDataURL(file);
1409
+ });
1410
+ onMounted(async () => {
1411
+ if (message.value.files) for (const file of message.value.files) try {
1412
+ const dataURL = await readFileAsDataURL(file);
1413
+ fileSources.value[file.name] = dataURL;
1414
+ } catch (error) {
1415
+ console.error("Error reading file:", error);
1416
+ }
1417
+ });
1418
+ return (_ctx, _cache) => {
1419
+ return openBlock(), createElementBlock("div", {
1420
+ ref_key: "messageContainer",
1421
+ ref: messageContainer,
1422
+ class: normalizeClass(["chat-message", classes.value])
1423
+ }, [!!_ctx.$slots.beforeMessage ? (openBlock(), createElementBlock("div", _hoisted_1$5, [renderSlot(_ctx.$slots, "beforeMessage", normalizeProps(guardReactiveProps({
1424
+ message: unref(message)
1425
+ })))])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default", {}, () => [unref(message).type === "component" && messageComponents[unref(message).key] ? (openBlock(), createBlock(resolveDynamicComponent(messageComponents[unref(message).key]), normalizeProps(mergeProps({
1426
+ key: 0
1427
+ }, unref(message).arguments)), null, 16)) : (openBlock(), createBlock(unref(VueMarkdown_default), {
1428
+ key: 1,
1429
+ class: "chat-message-markdown",
1430
+ source: messageText.value,
1431
+ options: markdownOptions,
1432
+ plugins: [linksNewTabPlugin]
1433
+ }, null, 8, ["source", "plugins"])), (unref(message).files ?? []).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(message).files ?? [], file => {
1434
+ return openBlock(), createElementBlock("div", {
1435
+ key: file.name,
1436
+ class: "chat-message-file"
1437
+ }, [createVNode(ChatFile_default, {
1438
+ file,
1439
+ "is-removable": false,
1440
+ "is-previewable": true
1441
+ }, null, 8, ["file"])]);
1442
+ }), 128))])) : createCommentVNode("", true)])], 2);
1443
+ };
1444
+ }
1445
+ }); //#endregion
1446
+ //#region ../@n8n/chat/src/components/Message.vue
1447
+ Message_default = Message_vue_vue_type_script_setup_true_lang_default; //#endregion
1448
+ //#region ~icons/mdi/paperclip
1449
+ _hoisted_1$4 = {
1450
+ viewBox: "0 0 24 24",
1451
+ width: "1.2em",
1452
+ height: "1.2em"
1453
+ };
1454
+ paperclip_default = {
1455
+ name: "mdi-paperclip",
1456
+ render: render$1
1457
+ }; //#endregion
1458
+ //#region ~icons/mdi/send
1459
+ _hoisted_1$3 = {
1460
+ viewBox: "0 0 24 24",
1461
+ width: "1.2em",
1462
+ height: "1.2em"
1463
+ };
1464
+ send_default = {
1465
+ name: "mdi-send",
1466
+ render
1467
+ }; //#endregion
1468
+ //#region ../@n8n/chat/src/components/Input.vue?vue&type=script&setup=true&lang.ts
1469
+ _hoisted_1$2 = {
1470
+ class: "chat-inputs"
1471
+ };
1472
+ _hoisted_2$1 = {
1473
+ key: 0,
1474
+ class: "chat-input-left-panel"
1475
+ };
1476
+ _hoisted_3$1 = ["disabled", "placeholder"];
1477
+ _hoisted_4 = {
1478
+ class: "chat-inputs-controls"
1479
+ };
1480
+ _hoisted_5 = ["disabled"];
1481
+ _hoisted_6 = ["disabled"];
1482
+ _hoisted_7 = {
1483
+ key: 0,
1484
+ class: "chat-files"
1485
+ };
1486
+ Input_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
1487
+ __name: "Input",
1488
+ props: {
1489
+ placeholder: {
1490
+ default: "inputPlaceholder"
1491
+ }
1492
+ },
1493
+ emits: ["arrowKeyDown", "escapeKeyDown"],
1494
+ setup(__props, {
1495
+ emit: __emit
1496
+ }) {
1497
+ const props = __props;
1498
+ const {
1499
+ t
1500
+ } = useI18n$1();
1501
+ const emit = __emit;
1502
+ const {
1503
+ options
1504
+ } = useOptions();
1505
+ const chatStore = useChat();
1506
+ const {
1507
+ waitingForResponse
1508
+ } = chatStore;
1509
+ const files = ref(null);
1510
+ const chatTextArea = ref(null);
1511
+ const input = ref("");
1512
+ const isSubmitting = ref(false);
1513
+ const resizeObserver = ref(null);
1514
+ const waitingForChatResponse = ref(false);
1515
+ const isSubmitDisabled = computed(() => {
1516
+ if (waitingForChatResponse.value) return false;
1517
+ return input.value === "" || unref(waitingForResponse) || options.disabled?.value === true;
1518
+ });
1519
+ const isInputDisabled = computed(() => options.disabled?.value === true);
1520
+ const isFileUploadDisabled = computed(() => isFileUploadAllowed.value && unref(waitingForResponse) && !options.disabled?.value);
1521
+ const isFileUploadAllowed = computed(() => unref(options.allowFileUploads) === true);
1522
+ const allowedFileTypes = computed(() => unref(options.allowedFilesMimeTypes));
1523
+ const styleVars = computed(() => {
1524
+ const controlsCount = isFileUploadAllowed.value ? 2 : 1;
1525
+ return {
1526
+ "--controls-count": controlsCount
1527
+ };
1528
+ });
1529
+ const {
1530
+ open: openFileDialog,
1531
+ reset: resetFileDialog,
1532
+ onChange
1533
+ } = useFileDialog({
1534
+ multiple: true,
1535
+ reset: false
1536
+ });
1537
+ onChange(newFiles => {
1538
+ if (!newFiles) return;
1539
+ const newFilesDT = new DataTransfer();
1540
+ if (files.value) for (let i = 0; i < files.value.length; i++) newFilesDT.items.add(files.value[i]);
1541
+ for (let i = 0; i < newFiles.length; i++) newFilesDT.items.add(newFiles[i]);
1542
+ files.value = newFilesDT.files;
1543
+ });
1544
+ onMounted(() => {
1545
+ chatEventBus.on("focusInput", focusChatInput);
1546
+ chatEventBus.on("blurInput", blurChatInput);
1547
+ chatEventBus.on("setInputValue", setInputValue);
1548
+ if (chatTextArea.value) {
1549
+ resizeObserver.value = new ResizeObserver(entries => {
1550
+ for (const entry of entries) if (entry.target === chatTextArea.value) adjustTextAreaHeight();
1551
+ });
1552
+ resizeObserver.value.observe(chatTextArea.value);
1553
+ }
1554
+ });
1555
+ onUnmounted(() => {
1556
+ chatEventBus.off("focusInput", focusChatInput);
1557
+ chatEventBus.off("blurInput", blurChatInput);
1558
+ chatEventBus.off("setInputValue", setInputValue);
1559
+ if (resizeObserver.value) {
1560
+ resizeObserver.value.disconnect();
1561
+ resizeObserver.value = null;
1562
+ }
1563
+ });
1564
+ function blurChatInput() {
1565
+ if (chatTextArea.value) chatTextArea.value.blur();
1566
+ }
1567
+ function focusChatInput() {
1568
+ if (chatTextArea.value) chatTextArea.value.focus();
1569
+ }
1570
+ function setInputValue(value) {
1571
+ input.value = value;
1572
+ focusChatInput();
1573
+ }
1574
+ function attachFiles() {
1575
+ if (files.value) {
1576
+ const filesToAttach = Array.from(files.value);
1577
+ resetFileDialog();
1578
+ files.value = null;
1579
+ return filesToAttach;
1580
+ }
1581
+ return [];
1582
+ }
1583
+ function setupWebsocketConnection(executionId) {
1584
+ if (options.webhookUrl && chatStore.currentSessionId.value) try {
1585
+ const wsUrl = constructChatWebsocketUrl(options.webhookUrl, executionId, chatStore.currentSessionId.value, true);
1586
+ chatStore.ws = new WebSocket(wsUrl);
1587
+ chatStore.ws.onmessage = e => {
1588
+ if (e.data === "n8n|heartbeat") {
1589
+ chatStore.ws?.send("n8n|heartbeat-ack");
1590
+ return;
1591
+ }
1592
+ if (e.data === "n8n|continue") {
1593
+ waitingForChatResponse.value = false;
1594
+ chatStore.waitingForResponse.value = true;
1595
+ return;
1596
+ }
1597
+ const newMessage = {
1598
+ id: v4_default(),
1599
+ text: e.data,
1600
+ sender: "bot"
1601
+ };
1602
+ chatStore.messages.value.push(newMessage);
1603
+ waitingForChatResponse.value = true;
1604
+ chatStore.waitingForResponse.value = false;
1605
+ };
1606
+ chatStore.ws.onclose = () => {
1607
+ chatStore.ws = null;
1608
+ waitingForChatResponse.value = false;
1609
+ chatStore.waitingForResponse.value = false;
1610
+ };
1611
+ } catch (error) {
1612
+ console.error("Error setting up websocket connection", error);
1613
+ }
1614
+ }
1615
+ async function processFiles$1(data) {
1616
+ if (!data || data.length === 0) return [];
1617
+ const filePromises = data.map(async file => {
1618
+ return new Promise((resolve, reject) => {
1619
+ const reader = new FileReader();
1620
+ reader.onload = () => resolve({
1621
+ name: file.name,
1622
+ type: file.type,
1623
+ data: reader.result
1624
+ });
1625
+ reader.onerror = () => reject(/* @__PURE__ */new Error(`Error reading file: ${reader.error?.message ?? "Unknown error"}`));
1626
+ reader.readAsDataURL(file);
1627
+ });
1628
+ });
1629
+ return await Promise.all(filePromises);
1630
+ }
1631
+ async function respondToChatNode(ws, messageText) {
1632
+ const sentMessage = {
1633
+ id: v4_default(),
1634
+ text: messageText,
1635
+ sender: "user",
1636
+ files: files.value ? attachFiles() : void 0
1637
+ };
1638
+ chatStore.messages.value.push(sentMessage);
1639
+ ws.send(JSON.stringify({
1640
+ sessionId: chatStore.currentSessionId.value,
1641
+ action: "sendMessage",
1642
+ chatInput: messageText,
1643
+ files: await processFiles$1(sentMessage.files)
1644
+ }));
1645
+ chatStore.waitingForResponse.value = true;
1646
+ waitingForChatResponse.value = false;
1647
+ }
1648
+ async function onSubmit(event) {
1649
+ event.preventDefault();
1650
+ if (isSubmitDisabled.value) return;
1651
+ const messageText = input.value;
1652
+ input.value = "";
1653
+ isSubmitting.value = true;
1654
+ if (chatStore.ws && waitingForChatResponse.value) {
1655
+ await respondToChatNode(chatStore.ws, messageText);
1656
+ return;
1657
+ }
1658
+ const response = await chatStore.sendMessage(messageText, attachFiles());
1659
+ if (response?.executionId) setupWebsocketConnection(response.executionId);
1660
+ isSubmitting.value = false;
1661
+ }
1662
+ async function onSubmitKeydown(event) {
1663
+ if (event.shiftKey || event.isComposing) return;
1664
+ await onSubmit(event);
1665
+ adjustTextAreaHeight();
1666
+ }
1667
+ function onFileRemove(file) {
1668
+ if (!files.value) return;
1669
+ const dt = new DataTransfer();
1670
+ for (let i = 0; i < files.value.length; i++) {
1671
+ const currentFile = files.value[i];
1672
+ if (file.name !== currentFile.name) dt.items.add(currentFile);
1673
+ }
1674
+ resetFileDialog();
1675
+ files.value = dt.files;
1676
+ }
1677
+ function onKeyDown(event) {
1678
+ if (event.key === "ArrowUp" || event.key === "ArrowDown") {
1679
+ event.preventDefault();
1680
+ emit("arrowKeyDown", {
1681
+ key: event.key,
1682
+ currentInputValue: input.value
1683
+ });
1684
+ } else if (event.key === "Escape") {
1685
+ event.preventDefault();
1686
+ emit("escapeKeyDown", {
1687
+ currentInputValue: input.value
1688
+ });
1689
+ }
1690
+ }
1691
+ function onOpenFileDialog() {
1692
+ if (isFileUploadDisabled.value) return;
1693
+ openFileDialog({
1694
+ accept: unref(allowedFileTypes)
1695
+ });
1696
+ }
1697
+ function adjustTextAreaHeight() {
1698
+ const textarea = chatTextArea.value;
1699
+ if (!textarea) return;
1700
+ textarea.style.height = "var(--chat--textarea--height)";
1701
+ const newHeight = Math.min(textarea.scrollHeight, 480);
1702
+ textarea.style.height = `${newHeight}px`;
1703
+ }
1704
+ return (_ctx, _cache) => {
1705
+ return openBlock(), createElementBlock("div", {
1706
+ class: "chat-input",
1707
+ style: normalizeStyle(styleVars.value),
1708
+ onKeydown: withModifiers(onKeyDown, ["stop"])
1709
+ }, [createBaseVNode("div", _hoisted_1$2, [_ctx.$slots.leftPanel ? (openBlock(), createElementBlock("div", _hoisted_2$1, [renderSlot(_ctx.$slots, "leftPanel", {}, void 0, true)])) : createCommentVNode("", true), withDirectives(createBaseVNode("textarea", {
1710
+ ref_key: "chatTextArea",
1711
+ ref: chatTextArea,
1712
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => input.value = $event),
1713
+ "data-test-id": "chat-input",
1714
+ disabled: isInputDisabled.value,
1715
+ placeholder: unref(t)(props.placeholder),
1716
+ onKeydown: withKeys(onSubmitKeydown, ["enter"]),
1717
+ onInput: adjustTextAreaHeight,
1718
+ onMousedown: adjustTextAreaHeight,
1719
+ onFocus: adjustTextAreaHeight
1720
+ }, null, 40, _hoisted_3$1), [[vModelText, input.value]]), createBaseVNode("div", _hoisted_4, [isFileUploadAllowed.value ? (openBlock(), createElementBlock("button", {
1721
+ key: 0,
1722
+ disabled: isFileUploadDisabled.value,
1723
+ class: "chat-input-file-button",
1724
+ "data-test-id": "chat-attach-file-button",
1725
+ onClick: onOpenFileDialog
1726
+ }, [createVNode(unref(paperclip_default), {
1727
+ height: "24",
1728
+ width: "24"
1729
+ })], 8, _hoisted_5)) : createCommentVNode("", true), createBaseVNode("button", {
1730
+ disabled: isSubmitDisabled.value,
1731
+ class: "chat-input-send-button",
1732
+ onClick: onSubmit
1733
+ }, [createVNode(unref(send_default), {
1734
+ height: "24",
1735
+ width: "24"
1736
+ })], 8, _hoisted_6)])]), files.value?.length && (!isSubmitting.value || waitingForChatResponse.value) ? (openBlock(), createElementBlock("div", _hoisted_7, [(openBlock(true), createElementBlock(Fragment, null, renderList(files.value, file => {
1737
+ return openBlock(), createBlock(ChatFile_default, {
1738
+ key: file.name,
1739
+ file,
1740
+ "is-removable": true,
1741
+ "is-previewable": true,
1742
+ onRemove: onFileRemove
1743
+ }, null, 8, ["file"]);
1744
+ }), 128))])) : createCommentVNode("", true)], 36);
1745
+ };
1746
+ }
1747
+ }); //#endregion
1748
+ //#region ../@n8n/chat/src/components/Input.vue
1749
+ Input_default = /* @__PURE__ */__plugin_vue_export_helper_default(Input_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-71b23fec"]]); //#endregion
1750
+ //#region ../@n8n/chat/src/components/MessageTyping.vue?vue&type=script&setup=true&lang.ts
1751
+ MessageTyping_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
1752
+ __name: "MessageTyping",
1753
+ props: {
1754
+ animation: {
1755
+ default: "bouncing"
1756
+ }
1757
+ },
1758
+ setup(__props) {
1759
+ const props = __props;
1760
+ const message = {
1761
+ id: "typing",
1762
+ text: "",
1763
+ sender: "bot"
1764
+ };
1765
+ const messageContainer = ref();
1766
+ const classes = computed(() => {
1767
+ return {
1768
+ "chat-message-typing": true,
1769
+ [`chat-message-typing-animation-${props.animation}`]: true
1770
+ };
1771
+ });
1772
+ onMounted(() => {
1773
+ messageContainer.value?.scrollToView();
1774
+ });
1775
+ return (_ctx, _cache) => {
1776
+ return openBlock(), createBlock(unref(Message_default), {
1777
+ ref_key: "messageContainer",
1778
+ ref: messageContainer,
1779
+ class: normalizeClass(classes.value),
1780
+ message,
1781
+ "data-test-id": "chat-message-typing"
1782
+ }, {
1783
+ default: withCtx(() => _cache[0] || (_cache[0] = [createBaseVNode("div", {
1784
+ class: "chat-message-typing-body"
1785
+ }, [createBaseVNode("span", {
1786
+ class: "chat-message-typing-circle"
1787
+ }), createBaseVNode("span", {
1788
+ class: "chat-message-typing-circle"
1789
+ }), createBaseVNode("span", {
1790
+ class: "chat-message-typing-circle"
1791
+ })], -1)])),
1792
+ _: 1
1793
+ }, 8, ["class"]);
1794
+ };
1795
+ }
1796
+ }); //#endregion
1797
+ //#region ../@n8n/chat/src/components/MessageTyping.vue
1798
+ MessageTyping_default = MessageTyping_vue_vue_type_script_setup_true_lang_default; //#endregion
1799
+ //#region ../@n8n/chat/src/components/MessagesList.vue?vue&type=script&setup=true&lang.ts
1800
+ _hoisted_1$1 = {
1801
+ key: 0,
1802
+ class: "empty-container"
1803
+ };
1804
+ _hoisted_2 = {
1805
+ class: "empty",
1806
+ "data-test-id": "chat-messages-empty"
1807
+ };
1808
+ _hoisted_3 = {
1809
+ key: 1,
1810
+ class: "chat-messages-list"
1811
+ };
1812
+ MessagesList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
1813
+ __name: "MessagesList",
1814
+ props: {
1815
+ messages: {},
1816
+ emptyText: {}
1817
+ },
1818
+ setup(__props) {
1819
+ const chatStore = useChat();
1820
+ const messageComponents = ref([]);
1821
+ const {
1822
+ initialMessages,
1823
+ waitingForResponse
1824
+ } = chatStore;
1825
+ watch(() => messageComponents.value.length, () => {
1826
+ const lastMessageComponent = messageComponents.value[messageComponents.value.length - 1];
1827
+ if (lastMessageComponent) lastMessageComponent.scrollToView();
1828
+ });
1829
+ return (_ctx, _cache) => {
1830
+ return _ctx.emptyText && unref(initialMessages).length === 0 && _ctx.messages.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_1$1, [createBaseVNode("div", _hoisted_2, [createVNode(unref(N8nIcon_default), {
1831
+ icon: "message-circle",
1832
+ size: "large",
1833
+ class: "emptyIcon"
1834
+ }), createVNode(unref(N8nText_default), {
1835
+ tag: "p",
1836
+ size: "medium",
1837
+ color: "text-base"
1838
+ }, {
1839
+ default: withCtx(() => [createTextVNode(toDisplayString(_ctx.emptyText), 1)]),
1840
+ _: 1
1841
+ })])])) : (openBlock(), createElementBlock("div", _hoisted_3, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(initialMessages), initialMessage => {
1842
+ return openBlock(), createBlock(Message_default, {
1843
+ key: initialMessage.id,
1844
+ message: initialMessage
1845
+ }, null, 8, ["message"]);
1846
+ }), 128)), (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.messages, message => {
1847
+ return openBlock(), createBlock(Message_default, {
1848
+ key: message.id,
1849
+ ref_for: true,
1850
+ ref_key: "messageComponents",
1851
+ ref: messageComponents,
1852
+ message
1853
+ }, {
1854
+ beforeMessage: withCtx(({
1855
+ message: message$1
1856
+ }) => [renderSlot(_ctx.$slots, "beforeMessage", mergeProps({
1857
+ ref_for: true
1858
+ }, {
1859
+ message: message$1
1860
+ }))]),
1861
+ _: 2
1862
+ }, 1032, ["message"]);
1863
+ }), 128)), unref(waitingForResponse) ? (openBlock(), createBlock(MessageTyping_default, {
1864
+ key: 0
1865
+ })) : createCommentVNode("", true)]));
1866
+ };
1867
+ }
1868
+ }); //#endregion
1869
+ //#region ../@n8n/chat/src/components/MessagesList.vue
1870
+ MessagesList_default = MessagesList_vue_vue_type_script_setup_true_lang_default; //#endregion
1871
+ //#region src/features/execution/logs/components/MessageOptionTooltip.vue?vue&type=script&setup=true&lang.ts
1872
+ MessageOptionTooltip_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
1873
+ __name: "MessageOptionTooltip",
1874
+ props: {
1875
+ placement: {
1876
+ type: String,
1877
+ default: "top"
1878
+ }
1879
+ },
1880
+ setup(__props) {
1881
+ return (_ctx, _cache) => {
1882
+ return openBlock(), createElementBlock("div", {
1883
+ class: normalizeClass(_ctx.$style.container)
1884
+ }, [createVNode(unref(N8nTooltip_default), {
1885
+ placement: __props.placement
1886
+ }, {
1887
+ content: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
1888
+ default: withCtx(() => [createBaseVNode("span", {
1889
+ class: normalizeClass(_ctx.$style.icon)
1890
+ }, [createVNode(unref(N8nIcon_default), {
1891
+ icon: "info",
1892
+ size: "xsmall"
1893
+ })], 2)]),
1894
+ _: 3
1895
+ }, 8, ["placement"])], 2);
1896
+ };
1897
+ }
1898
+ }); //#endregion
1899
+ //#region src/features/execution/logs/components/MessageOptionTooltip.vue?vue&type=style&index=0&lang.module.scss
1900
+ container$4 = "_container_1v2rk_123";
1901
+ icon$2 = "_icon_1v2rk_129";
1902
+ MessageOptionTooltip_vue_vue_type_style_index_0_lang_module_default = {
1903
+ container: container$4,
1904
+ icon: icon$2
1905
+ }; //#endregion
1906
+ //#region src/features/execution/logs/components/MessageOptionTooltip.vue
1907
+ cssModules$6 = {
1908
+ "$style": MessageOptionTooltip_vue_vue_type_style_index_0_lang_module_default
1909
+ };
1910
+ MessageOptionTooltip_default = /* @__PURE__ */__plugin_vue_export_helper_default(MessageOptionTooltip_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$6]]); //#endregion
1911
+ //#region src/features/execution/logs/components/MessageOptionAction.vue?vue&type=script&setup=true&lang.ts
1912
+ MessageOptionAction_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
1913
+ __name: "MessageOptionAction",
1914
+ props: {
1915
+ label: {},
1916
+ icon: {},
1917
+ placement: {}
1918
+ },
1919
+ setup(__props) {
1920
+ const attrs = useAttrs();
1921
+ const onClick = () => {
1922
+ attrs.onClick?.();
1923
+ };
1924
+ return (_ctx, _cache) => {
1925
+ return openBlock(), createElementBlock("div", {
1926
+ class: normalizeClass(_ctx.$style.container)
1927
+ }, [createVNode(unref(N8nTooltip_default), {
1928
+ placement: _ctx.placement
1929
+ }, {
1930
+ content: withCtx(() => [createTextVNode(toDisplayString(_ctx.label), 1)]),
1931
+ default: withCtx(() => [createVNode(unref(N8nIcon_default), {
1932
+ class: normalizeClass(_ctx.$style.icon),
1933
+ icon: _ctx.icon,
1934
+ size: "xsmall",
1935
+ onClick
1936
+ }, null, 8, ["class", "icon"])]),
1937
+ _: 1
1938
+ }, 8, ["placement"])], 2);
1939
+ };
1940
+ }
1941
+ }); //#endregion
1942
+ //#region src/features/execution/logs/components/MessageOptionAction.vue?vue&type=style&index=0&lang.module.scss
1943
+ container$3 = "_container_14jp1_123";
1944
+ icon$1 = "_icon_14jp1_129";
1945
+ MessageOptionAction_vue_vue_type_style_index_0_lang_module_default = {
1946
+ container: container$3,
1947
+ icon: icon$1
1948
+ }; //#endregion
1949
+ //#region src/features/execution/logs/components/MessageOptionAction.vue
1950
+ cssModules$5 = {
1951
+ "$style": MessageOptionAction_vue_vue_type_style_index_0_lang_module_default
1952
+ };
1953
+ MessageOptionAction_default = /* @__PURE__ */__plugin_vue_export_helper_default(MessageOptionAction_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$5]]); //#endregion
1954
+ //#region src/features/execution/logs/components/ChatMessagesPanel.vue?vue&type=script&setup=true&lang.ts
1955
+ _hoisted_1 = ["onClick"];
1956
+ ChatMessagesPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
1957
+ __name: "ChatMessagesPanel",
1958
+ props: {
1959
+ pastChatMessages: {},
1960
+ messages: {},
1961
+ sessionId: {},
1962
+ showCloseButton: {
1963
+ type: Boolean
1964
+ },
1965
+ isOpen: {
1966
+ type: Boolean,
1967
+ default: true
1968
+ },
1969
+ isReadOnly: {
1970
+ type: Boolean,
1971
+ default: false
1972
+ },
1973
+ isHeaderClickable: {
1974
+ type: Boolean
1975
+ }
1976
+ },
1977
+ emits: ["displayExecution", "sendMessage", "refreshSession", "close", "clickHeader"],
1978
+ setup(__props, {
1979
+ emit: __emit
1980
+ }) {
1981
+ const props = __props;
1982
+ const emit = __emit;
1983
+ const clipboard = useClipboard();
1984
+ const locale = useI18n();
1985
+ const toast = useToast();
1986
+ const previousMessageIndex = ref(-1);
1987
+ const currentInputBuffer = ref("");
1988
+ const sessionIdText = computed(() => locale.baseText("chat.window.session.id", {
1989
+ interpolate: {
1990
+ id: `${props.sessionId.slice(0, 5)}...`
1991
+ }
1992
+ }));
1993
+ const inputPlaceholder = computed(() => {
1994
+ if (props.messages.length > 0) return locale.baseText("chat.window.chat.placeholder");
1995
+ return locale.baseText("chat.window.chat.placeholderPristine");
1996
+ });
1997
+ /** Checks if message is a text message */
1998
+ function isTextMessage(message) {
1999
+ return message.type === "text" || !message.type;
2000
+ }
2001
+ /** Reposts the message */
2002
+ function repostMessage(message) {
2003
+ sendMessage(message.text);
2004
+ }
2005
+ /** Sets the message in input for reuse */
2006
+ function reuseMessage(message) {
2007
+ chatEventBus.emit("setInputValue", message.text);
2008
+ }
2009
+ function sendMessage(message) {
2010
+ previousMessageIndex.value = -1;
2011
+ currentInputBuffer.value = "";
2012
+ emit("sendMessage", message);
2013
+ }
2014
+ function onRefreshSession() {
2015
+ emit("refreshSession");
2016
+ }
2017
+ function onArrowKeyDown({
2018
+ currentInputValue,
2019
+ key
2020
+ }) {
2021
+ const pastMessages = props.pastChatMessages;
2022
+ if (pastMessages.length === 0) return;
2023
+ if (currentInputValue.length === 0 && previousMessageIndex.value !== -1) {
2024
+ previousMessageIndex.value = -1;
2025
+ currentInputBuffer.value = "";
2026
+ }
2027
+ if (previousMessageIndex.value === -1 && currentInputValue.length > 0) currentInputBuffer.value = currentInputValue;
2028
+ if (key === "ArrowUp") {
2029
+ chatEventBus.emit("blurInput");
2030
+ if (previousMessageIndex.value === -1) previousMessageIndex.value = pastMessages.length - 1;else if (previousMessageIndex.value > 0) previousMessageIndex.value--;
2031
+ const selectedMessage = pastMessages[previousMessageIndex.value];
2032
+ chatEventBus.emit("setInputValue", selectedMessage);
2033
+ chatEventBus.emit("focusInput");
2034
+ } else if (key === "ArrowDown") {
2035
+ if (previousMessageIndex.value === -1) return;
2036
+ chatEventBus.emit("blurInput");
2037
+ if (previousMessageIndex.value < pastMessages.length - 1) {
2038
+ previousMessageIndex.value++;
2039
+ const selectedMessage = pastMessages[previousMessageIndex.value];
2040
+ chatEventBus.emit("setInputValue", selectedMessage);
2041
+ } else {
2042
+ previousMessageIndex.value = -1;
2043
+ chatEventBus.emit("setInputValue", currentInputBuffer.value);
2044
+ currentInputBuffer.value = "";
2045
+ }
2046
+ chatEventBus.emit("focusInput");
2047
+ }
2048
+ }
2049
+ function onEscapeKey() {
2050
+ if (previousMessageIndex.value === -1) return;
2051
+ previousMessageIndex.value = -1;
2052
+ chatEventBus.emit("setInputValue", currentInputBuffer.value);
2053
+ currentInputBuffer.value = "";
2054
+ }
2055
+ async function copySessionId() {
2056
+ await clipboard.copy(props.sessionId);
2057
+ toast.showMessage({
2058
+ title: locale.baseText("generic.copiedToClipboard"),
2059
+ message: "",
2060
+ type: "success"
2061
+ });
2062
+ }
2063
+ return (_ctx, _cache) => {
2064
+ return openBlock(), createElementBlock("div", {
2065
+ class: normalizeClass([_ctx.$style.chat, "ignore-key-press-canvas"]),
2066
+ "data-test-id": "workflow-lm-chat-dialog",
2067
+ tabindex: "0"
2068
+ }, [createVNode(LogsPanelHeader_default, {
2069
+ "data-test-id": "chat-header",
2070
+ title: unref(locale).baseText("chat.window.title"),
2071
+ "is-clickable": _ctx.isHeaderClickable,
2072
+ onClick: _cache[0] || (_cache[0] = $event => emit("clickHeader"))
2073
+ }, {
2074
+ actions: withCtx(() => [unref(clipboard).isSupported && !_ctx.isReadOnly ? (openBlock(), createBlock(unref(N8nTooltip_default), {
2075
+ key: 0
2076
+ }, {
2077
+ content: withCtx(() => [createTextVNode(toDisplayString(_ctx.sessionId) + " ", 1), _cache[3] || (_cache[3] = createBaseVNode("br", null, null, -1)), createTextVNode(" " + toDisplayString(unref(locale).baseText("chat.window.session.id.copy")), 1)]),
2078
+ default: withCtx(() => [createVNode(unref(N8nButton_default), {
2079
+ "data-test-id": "chat-session-id",
2080
+ type: "secondary",
2081
+ size: "mini",
2082
+ class: normalizeClass(_ctx.$style.newHeaderButton),
2083
+ onClick: withModifiers(copySessionId, ["stop"])
2084
+ }, {
2085
+ default: withCtx(() => [createTextVNode(toDisplayString(sessionIdText.value), 1)]),
2086
+ _: 1
2087
+ }, 8, ["class"])]),
2088
+ _: 1
2089
+ })) : createCommentVNode("", true), _ctx.messages.length > 0 && !_ctx.isReadOnly ? (openBlock(), createBlock(unref(N8nTooltip_default), {
2090
+ key: 1,
2091
+ content: unref(locale).baseText("chat.window.session.resetSession")
2092
+ }, {
2093
+ default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
2094
+ class: normalizeClass(_ctx.$style.newHeaderButton),
2095
+ "data-test-id": "refresh-session-button",
2096
+ outline: "",
2097
+ type: "secondary",
2098
+ size: "small",
2099
+ "icon-size": "medium",
2100
+ icon: "undo-2",
2101
+ title: unref(locale).baseText("chat.window.session.reset"),
2102
+ onClick: withModifiers(onRefreshSession, ["stop"])
2103
+ }, null, 8, ["class", "title"])]),
2104
+ _: 1
2105
+ }, 8, ["content"])) : createCommentVNode("", true)]),
2106
+ _: 1
2107
+ }, 8, ["title", "is-clickable"]), _ctx.isOpen ? (openBlock(), createElementBlock("main", {
2108
+ key: 0,
2109
+ class: normalizeClass(_ctx.$style.chatBody),
2110
+ "data-test-id": "canvas-chat-body"
2111
+ }, [createVNode(MessagesList_default, {
2112
+ messages: _ctx.messages,
2113
+ class: normalizeClass(_ctx.$style.messages),
2114
+ "empty-text": unref(locale).baseText("chat.window.chat.emptyChatMessage.v2")
2115
+ }, {
2116
+ beforeMessage: withCtx(({
2117
+ message
2118
+ }) => [!_ctx.isReadOnly && message.sender === "bot" && !message.id.includes("preload") ? (openBlock(), createBlock(MessageOptionTooltip_default, {
2119
+ key: 0,
2120
+ placement: "right",
2121
+ "data-test-id": "execution-id-tooltip"
2122
+ }, {
2123
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("chat.window.chat.chatMessageOptions.executionId")) + ": ", 1), createBaseVNode("a", {
2124
+ href: "#",
2125
+ onClick: $event => emit("displayExecution", message.id)
2126
+ }, toDisplayString(message.id), 9, _hoisted_1)]),
2127
+ _: 2
2128
+ }, 1024)) : createCommentVNode("", true), !_ctx.isReadOnly && isTextMessage(message) && message.sender === "user" ? (openBlock(), createBlock(MessageOptionAction_default, {
2129
+ key: 1,
2130
+ "data-test-id": "repost-message-button",
2131
+ icon: "redo-2",
2132
+ label: unref(locale).baseText("chat.window.chat.chatMessageOptions.repostMessage"),
2133
+ placement: "left",
2134
+ onClickOnce: $event => repostMessage(message)
2135
+ }, null, 8, ["label", "onClickOnce"])) : createCommentVNode("", true), !_ctx.isReadOnly && isTextMessage(message) && message.sender === "user" ? (openBlock(), createBlock(MessageOptionAction_default, {
2136
+ key: 2,
2137
+ "data-test-id": "reuse-message-button",
2138
+ icon: "files",
2139
+ label: unref(locale).baseText("chat.window.chat.chatMessageOptions.reuseMessage"),
2140
+ placement: "left",
2141
+ onClick: $event => reuseMessage(message)
2142
+ }, null, 8, ["label", "onClick"])) : createCommentVNode("", true)]),
2143
+ _: 1
2144
+ }, 8, ["messages", "class", "empty-text"])], 2)) : createCommentVNode("", true), _ctx.isOpen ? (openBlock(), createElementBlock("div", {
2145
+ key: 1,
2146
+ class: normalizeClass(_ctx.$style.messagesInput)
2147
+ }, [createVNode(Input_default, {
2148
+ "data-test-id": "lm-chat-inputs",
2149
+ placeholder: inputPlaceholder.value,
2150
+ onArrowKeyDown,
2151
+ onEscapeKeyDown: onEscapeKey
2152
+ }, createSlots({
2153
+ _: 2
2154
+ }, [_ctx.pastChatMessages.length > 0 ? {
2155
+ name: "leftPanel",
2156
+ fn: withCtx(() => [createBaseVNode("div", {
2157
+ class: normalizeClass(_ctx.$style.messagesHistory)
2158
+ }, [createVNode(unref(N8nButton_default), {
2159
+ title: "Navigate to previous message",
2160
+ icon: "chevron-up",
2161
+ type: "tertiary",
2162
+ text: "",
2163
+ size: "mini",
2164
+ disabled: previousMessageIndex.value === 0,
2165
+ onClick: _cache[1] || (_cache[1] = $event => onArrowKeyDown({
2166
+ currentInputValue: "",
2167
+ key: "ArrowUp"
2168
+ }))
2169
+ }, null, 8, ["disabled"]), createVNode(unref(N8nButton_default), {
2170
+ title: "Navigate to next message",
2171
+ icon: "chevron-down",
2172
+ type: "tertiary",
2173
+ text: "",
2174
+ size: "mini",
2175
+ disabled: previousMessageIndex.value === -1,
2176
+ onClick: _cache[2] || (_cache[2] = $event => onArrowKeyDown({
2177
+ currentInputValue: "",
2178
+ key: "ArrowDown"
2179
+ }))
2180
+ }, null, 8, ["disabled"])], 2)]),
2181
+ key: "0"
2182
+ } : void 0]), 1032, ["placeholder"])], 2)) : createCommentVNode("", true)], 2);
2183
+ };
2184
+ }
2185
+ }); //#endregion
2186
+ //#region src/features/execution/logs/components/ChatMessagesPanel.vue?vue&type=style&index=0&lang.module.scss
2187
+ chat$1 = "_chat_1lcb4_123";
2188
+ chatHeader = "_chatHeader_1lcb4_151";
2189
+ chatTitle = "_chatTitle_1lcb4_164";
2190
+ session = "_session_1lcb4_168";
2191
+ sessionId = "_sessionId_1lcb4_176";
2192
+ copyable = "_copyable_1lcb4_182";
2193
+ headerButton = "_headerButton_1lcb4_186";
2194
+ newHeaderButton = "_newHeaderButton_1lcb4_191";
2195
+ chatBody = "_chatBody_1lcb4_196";
2196
+ messages = "_messages_1lcb4_205";
2197
+ messagesInput = "_messagesInput_1lcb4_216";
2198
+ messagesHistory = "_messagesHistory_1lcb4_250";
2199
+ ChatMessagesPanel_vue_vue_type_style_index_0_lang_module_default = {
2200
+ chat: chat$1,
2201
+ chatHeader,
2202
+ chatTitle,
2203
+ session,
2204
+ sessionId,
2205
+ copyable,
2206
+ headerButton,
2207
+ newHeaderButton,
2208
+ chatBody,
2209
+ messages,
2210
+ messagesInput,
2211
+ messagesHistory
2212
+ }; //#endregion
2213
+ //#region src/features/execution/logs/components/ChatMessagesPanel.vue
2214
+ cssModules$4 = {
2215
+ "$style": ChatMessagesPanel_vue_vue_type_style_index_0_lang_module_default
2216
+ };
2217
+ ChatMessagesPanel_default = /* @__PURE__ */__plugin_vue_export_helper_default(ChatMessagesPanel_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$4]]); //#endregion
2218
+ //#region src/features/execution/logs/components/LogsViewRunData.vue?vue&type=script&setup=true&lang.ts
2219
+ LogsViewRunData_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
2220
+ __name: "LogsViewRunData",
2221
+ props: {
2222
+ title: {},
2223
+ paneType: {},
2224
+ logEntry: {},
2225
+ collapsingTableColumnName: {},
2226
+ searchShortcut: {}
2227
+ },
2228
+ emits: ["collapsingTableColumnChanged"],
2229
+ setup(__props, {
2230
+ emit: __emit
2231
+ }) {
2232
+ const emit = __emit;
2233
+ const locale = useI18n();
2234
+ const ndvStore = useNDVStore();
2235
+ const popOutWindow = inject(PopOutWindowKey, ref());
2236
+ const displayMode = ref(__props.paneType === "input" ? "schema" : "table");
2237
+ const isMultipleInput = computed(() => __props.paneType === "input" && (__props.logEntry.runData?.source.length ?? 0) > 1);
2238
+ const runDataProps = computed(() => {
2239
+ if (isSubNodeLog(__props.logEntry) || __props.paneType === "output") return {
2240
+ node: __props.logEntry.node,
2241
+ runIndex: __props.logEntry.runIndex
2242
+ };
2243
+ const source = __props.logEntry.runData?.source[0];
2244
+ const node = source && __props.logEntry.workflow.getNode(source.previousNode);
2245
+ if (!source || !node) return;
2246
+ return {
2247
+ node: {
2248
+ ...node,
2249
+ disabled: false
2250
+ },
2251
+ runIndex: source.previousNodeRun ?? 0,
2252
+ overrideOutputs: [source.previousNodeOutput ?? 0]
2253
+ };
2254
+ });
2255
+ const isExecuting = computed(() => __props.paneType === "output" && (__props.logEntry.runData?.executionStatus === "running" || __props.logEntry.runData?.executionStatus === "waiting"));
2256
+ function handleClickOpenNdv() {
2257
+ ndvStore.setActiveNodeName(__props.logEntry.node.name, "logs_view");
2258
+ }
2259
+ function handleChangeDisplayMode(value) {
2260
+ displayMode.value = value;
2261
+ }
2262
+ return (_ctx, _cache) => {
2263
+ const _directive_n8n_html = resolveDirective("n8n-html");
2264
+ return runDataProps.value ? (openBlock(), createBlock(RunData_default, mergeProps({
2265
+ key: 0
2266
+ }, runDataProps.value, {
2267
+ key: `run-data${unref(popOutWindow) ? "-pop-out" : ""}`,
2268
+ class: _ctx.$style.component,
2269
+ "workflow-object": _ctx.logEntry.workflow,
2270
+ "workflow-execution": _ctx.logEntry.execution,
2271
+ "too-much-data-title": unref(locale).baseText("ndv.output.tooMuchData.title"),
2272
+ "no-data-in-branch-message": unref(locale).baseText("ndv.output.noOutputDataInBranch"),
2273
+ "executing-message": unref(locale).baseText("ndv.output.executing"),
2274
+ "pane-type": _ctx.paneType,
2275
+ "disable-run-index-selection": true,
2276
+ compact: true,
2277
+ "show-actions-on-hover": true,
2278
+ "disable-pin": true,
2279
+ "disable-edit": true,
2280
+ "disable-hover-highlight": true,
2281
+ "disable-settings-hint": true,
2282
+ "display-mode": displayMode.value,
2283
+ "disable-ai-content": !unref(isSubNodeLog)(_ctx.logEntry),
2284
+ "is-executing": isExecuting.value,
2285
+ "table-header-bg-color": "light",
2286
+ "collapsing-table-column-name": _ctx.collapsingTableColumnName,
2287
+ "search-shortcut": _ctx.searchShortcut,
2288
+ onDisplayModeChange: handleChangeDisplayMode,
2289
+ onCollapsingTableColumnChanged: _cache[0] || (_cache[0] = $event => emit("collapsingTableColumnChanged", $event))
2290
+ }), createSlots({
2291
+ header: withCtx(() => [createVNode(unref(N8nText_default), {
2292
+ class: normalizeClass(_ctx.$style.title),
2293
+ bold: true,
2294
+ color: "text-light",
2295
+ size: "small"
2296
+ }, {
2297
+ default: withCtx(() => [createTextVNode(toDisplayString(_ctx.title), 1)]),
2298
+ _: 1
2299
+ }, 8, ["class"])]),
2300
+ "header-end": withCtx(itemCountProps => [createVNode(RunDataItemCount_default, mergeProps(itemCountProps, {
2301
+ search: displayMode.value === "schema" ? "" : itemCountProps.search
2302
+ }), null, 16, ["search"])]),
2303
+ "no-output-data": withCtx(() => [createVNode(NDVEmptyState_default, {
2304
+ title: unref(locale).baseText("ndv.output.noOutputData.title")
2305
+ }, null, 8, ["title"])]),
2306
+ "node-waiting": withCtx(() => [createVNode(NDVEmptyState_default, {
2307
+ title: unref(locale).baseText("ndv.output.waitNodeWaiting.title"),
2308
+ wide: ""
2309
+ }, {
2310
+ default: withCtx(() => [withDirectives(createBaseVNode("span", null, null, 512), [[_directive_n8n_html, unref(waitingNodeTooltip)(_ctx.logEntry.node, _ctx.logEntry.workflow)]])]),
2311
+ _: 1
2312
+ }, 8, ["title"])]),
2313
+ _: 2
2314
+ }, [isMultipleInput.value ? {
2315
+ name: "content",
2316
+ fn: withCtx(() => []),
2317
+ key: "0"
2318
+ } : void 0, isMultipleInput.value ? {
2319
+ name: "callout-message",
2320
+ fn: withCtx(() => [createVNode(unref(I18nT), {
2321
+ keypath: "logs.details.body.multipleInputs",
2322
+ scope: "global"
2323
+ }, {
2324
+ button: withCtx(() => [createVNode(unref(N8nLink_default), {
2325
+ size: "small",
2326
+ onClick: handleClickOpenNdv
2327
+ }, {
2328
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("logs.details.body.multipleInputs.openingTheNode")), 1)]),
2329
+ _: 1
2330
+ })]),
2331
+ _: 1
2332
+ })]),
2333
+ key: "1"
2334
+ } : void 0]), 1040, ["class", "workflow-object", "workflow-execution", "too-much-data-title", "no-data-in-branch-message", "executing-message", "pane-type", "display-mode", "disable-ai-content", "is-executing", "collapsing-table-column-name", "search-shortcut"])) : createCommentVNode("", true);
2335
+ };
2336
+ }
2337
+ }); //#endregion
2338
+ //#region src/features/execution/logs/components/LogsViewRunData.vue?vue&type=style&index=0&lang.module.scss
2339
+ component = "_component_1mnpf_123";
2340
+ title$1 = "_title_1mnpf_127";
2341
+ LogsViewRunData_vue_vue_type_style_index_0_lang_module_default = {
2342
+ component,
2343
+ title: title$1
2344
+ }; //#endregion
2345
+ //#region src/features/execution/logs/components/LogsViewRunData.vue
2346
+ cssModules$3 = {
2347
+ "$style": LogsViewRunData_vue_vue_type_style_index_0_lang_module_default
2348
+ };
2349
+ LogsViewRunData_default = /* @__PURE__ */__plugin_vue_export_helper_default(LogsViewRunData_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$3]]);
2350
+ MIN_IO_PANEL_WIDTH = 200;
2351
+ LogDetailsPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
2352
+ __name: "LogDetailsPanel",
2353
+ props: {
2354
+ isOpen: {
2355
+ type: Boolean
2356
+ },
2357
+ logEntry: {},
2358
+ window: {},
2359
+ latestInfo: {},
2360
+ panels: {},
2361
+ collapsingInputTableColumnName: {},
2362
+ collapsingOutputTableColumnName: {},
2363
+ isHeaderClickable: {
2364
+ type: Boolean
2365
+ }
2366
+ },
2367
+ emits: ["clickHeader", "toggleInputOpen", "toggleOutputOpen", "collapsingInputTableColumnChanged", "collapsingOutputTableColumnChanged"],
2368
+ setup(__props, {
2369
+ emit: __emit
2370
+ }) {
2371
+ const emit = __emit;
2372
+ const locale = useI18n();
2373
+ const nodeTypeStore = useNodeTypesStore();
2374
+ const ndvStore = useNDVStore();
2375
+ const experimentalNdvStore = useExperimentalNdvStore();
2376
+ const type = computed(() => nodeTypeStore.getNodeType(__props.logEntry.node.type));
2377
+ const consumedTokens = computed(() => getSubtreeTotalConsumedTokens(__props.logEntry, false));
2378
+ const isTriggerNode = computed(() => type.value?.group.includes("trigger"));
2379
+ const container$8 = useTemplateRef("container");
2380
+ const resizer = useResizablePanel("N8N_LOGS_INPUT_PANEL_WIDTH", {
2381
+ container: container$8,
2382
+ defaultSize: size => size / 2,
2383
+ minSize: MIN_IO_PANEL_WIDTH,
2384
+ maxSize: size => size - MIN_IO_PANEL_WIDTH,
2385
+ allowCollapse: true,
2386
+ allowFullSize: true
2387
+ });
2388
+ const shouldResize = computed(() => __props.panels === LOG_DETAILS_PANEL_STATE.BOTH);
2389
+ const searchShortcutPriorityPanel = computed(() => ndvStore.isNDVOpen || experimentalNdvStore.isMapperOpen ? void 0 : __props.panels === LOG_DETAILS_PANEL_STATE.INPUT ? "input" : "output");
2390
+ function handleResizeEnd() {
2391
+ if (resizer.isCollapsed.value) emit("toggleInputOpen", false);
2392
+ if (resizer.isFullSize.value) emit("toggleOutputOpen", false);
2393
+ resizer.onResizeEnd();
2394
+ }
2395
+ return (_ctx, _cache) => {
2396
+ return openBlock(), createElementBlock("div", {
2397
+ ref_key: "container",
2398
+ ref: container$8,
2399
+ class: normalizeClass(_ctx.$style.container),
2400
+ "data-test-id": "log-details"
2401
+ }, [createVNode(LogsPanelHeader_default, {
2402
+ "data-test-id": "log-details-header",
2403
+ class: normalizeClass(_ctx.$style.header),
2404
+ "is-clickable": _ctx.isHeaderClickable,
2405
+ onClick: _cache[2] || (_cache[2] = $event => emit("clickHeader"))
2406
+ }, {
2407
+ title: withCtx(() => [createBaseVNode("div", {
2408
+ class: normalizeClass(_ctx.$style.title)
2409
+ }, [createVNode(NodeIcon_default, {
2410
+ "node-type": type.value,
2411
+ size: 16,
2412
+ class: normalizeClass(_ctx.$style.icon)
2413
+ }, null, 8, ["node-type", "class"]), createVNode(LogsViewNodeName_default, {
2414
+ name: _ctx.latestInfo?.name ?? _ctx.logEntry.node.name,
2415
+ "is-deleted": _ctx.latestInfo?.deleted ?? false
2416
+ }, null, 8, ["name", "is-deleted"]), _ctx.isOpen && _ctx.logEntry.runData !== void 0 ? (openBlock(), createBlock(LogsViewExecutionSummary_default, {
2417
+ key: 0,
2418
+ class: normalizeClass(_ctx.$style.executionSummary),
2419
+ status: _ctx.logEntry.runData.executionStatus ?? "unknown",
2420
+ "consumed-tokens": consumedTokens.value,
2421
+ "start-time": _ctx.logEntry.runData.startTime,
2422
+ "time-took": _ctx.logEntry.runData.executionTime
2423
+ }, null, 8, ["class", "status", "consumed-tokens", "start-time", "time-took"])) : createCommentVNode("", true)], 2)]),
2424
+ actions: withCtx(() => [_ctx.isOpen && !isTriggerNode.value && !unref(isPlaceholderLog)(_ctx.logEntry) ? (openBlock(), createElementBlock("div", {
2425
+ key: 0,
2426
+ class: normalizeClass(_ctx.$style.actions)
2427
+ }, [createVNode(KeyboardShortcutTooltip_default, {
2428
+ label: unref(locale).baseText("generic.shortcutHint"),
2429
+ shortcut: {
2430
+ keys: ["i"]
2431
+ }
2432
+ }, {
2433
+ default: withCtx(() => [createVNode(unref(N8nButton_default), {
2434
+ size: "mini",
2435
+ type: "secondary",
2436
+ class: normalizeClass(_ctx.panels === unref(LOG_DETAILS_PANEL_STATE).OUTPUT ? "" : _ctx.$style.pressed),
2437
+ onClick: _cache[0] || (_cache[0] = withModifiers($event => emit("toggleInputOpen"), ["stop"]))
2438
+ }, {
2439
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("logs.details.header.actions.input")), 1)]),
2440
+ _: 1
2441
+ }, 8, ["class"])]),
2442
+ _: 1
2443
+ }, 8, ["label"]), createVNode(KeyboardShortcutTooltip_default, {
2444
+ label: unref(locale).baseText("generic.shortcutHint"),
2445
+ shortcut: {
2446
+ keys: ["o"]
2447
+ }
2448
+ }, {
2449
+ default: withCtx(() => [createVNode(unref(N8nButton_default), {
2450
+ size: "mini",
2451
+ type: "secondary",
2452
+ class: normalizeClass(_ctx.panels === unref(LOG_DETAILS_PANEL_STATE).INPUT ? "" : _ctx.$style.pressed),
2453
+ onClick: _cache[1] || (_cache[1] = withModifiers($event => emit("toggleOutputOpen"), ["stop"]))
2454
+ }, {
2455
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("logs.details.header.actions.output")), 1)]),
2456
+ _: 1
2457
+ }, 8, ["class"])]),
2458
+ _: 1
2459
+ }, 8, ["label"])], 2)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "actions")]),
2460
+ _: 3
2461
+ }, 8, ["class", "is-clickable"]), _ctx.isOpen ? (openBlock(), createElementBlock("div", {
2462
+ key: 0,
2463
+ class: normalizeClass(_ctx.$style.content),
2464
+ "data-test-id": "logs-details-body"
2465
+ }, [unref(isPlaceholderLog)(_ctx.logEntry) ? (openBlock(), createElementBlock("div", {
2466
+ key: 0,
2467
+ class: normalizeClass(_ctx.$style.placeholder)
2468
+ }, [createVNode(unref(N8nText_default), {
2469
+ color: "text-base"
2470
+ }, {
2471
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("ndv.output.runNodeHint")), 1)]),
2472
+ _: 1
2473
+ })], 2)) : (openBlock(), createElementBlock(Fragment, {
2474
+ key: 1
2475
+ }, [!isTriggerNode.value && _ctx.panels !== unref(LOG_DETAILS_PANEL_STATE).OUTPUT ? (openBlock(), createBlock(unref(N8nResizeWrapper_default), {
2476
+ key: 0,
2477
+ class: normalizeClass({
2478
+ [_ctx.$style.inputResizer]: true,
2479
+ [_ctx.$style.collapsed]: unref(resizer).isCollapsed.value,
2480
+ [_ctx.$style.full]: unref(resizer).isFullSize.value
2481
+ }),
2482
+ width: unref(resizer).size.value,
2483
+ style: normalizeStyle(shouldResize.value ? {
2484
+ width: `${unref(resizer).size.value ?? 0}px`
2485
+ } : void 0),
2486
+ "supported-directions": ["right"],
2487
+ "is-resizing-enabled": shouldResize.value,
2488
+ window: _ctx.window,
2489
+ onResize: unref(resizer).onResize,
2490
+ onResizeend: handleResizeEnd
2491
+ }, {
2492
+ default: withCtx(() => [createVNode(LogsViewRunData_default, {
2493
+ "data-test-id": "log-details-input",
2494
+ "pane-type": "input",
2495
+ title: unref(locale).baseText("logs.details.header.actions.input"),
2496
+ "log-entry": _ctx.logEntry,
2497
+ "collapsing-table-column-name": _ctx.collapsingInputTableColumnName,
2498
+ "search-shortcut": searchShortcutPriorityPanel.value === "input" ? "ctrl+f" : void 0,
2499
+ onCollapsingTableColumnChanged: _cache[3] || (_cache[3] = $event => emit("collapsingInputTableColumnChanged", $event))
2500
+ }, null, 8, ["title", "log-entry", "collapsing-table-column-name", "search-shortcut"])]),
2501
+ _: 1
2502
+ }, 8, ["class", "width", "style", "is-resizing-enabled", "window", "onResize"])) : createCommentVNode("", true), isTriggerNode.value || _ctx.panels !== unref(LOG_DETAILS_PANEL_STATE).INPUT ? (openBlock(), createBlock(LogsViewRunData_default, {
2503
+ key: 1,
2504
+ "data-test-id": "log-details-output",
2505
+ "pane-type": "output",
2506
+ class: normalizeClass(_ctx.$style.outputPanel),
2507
+ title: unref(locale).baseText("logs.details.header.actions.output"),
2508
+ "log-entry": _ctx.logEntry,
2509
+ "collapsing-table-column-name": _ctx.collapsingOutputTableColumnName,
2510
+ "search-shortcut": searchShortcutPriorityPanel.value === "output" ? "ctrl+f" : void 0,
2511
+ onCollapsingTableColumnChanged: _cache[4] || (_cache[4] = $event => emit("collapsingOutputTableColumnChanged", $event))
2512
+ }, null, 8, ["class", "title", "log-entry", "collapsing-table-column-name", "search-shortcut"])) : createCommentVNode("", true)], 64))], 2)) : createCommentVNode("", true)], 2);
2513
+ };
2514
+ }
2515
+ }); //#endregion
2516
+ //#region src/features/execution/logs/components/LogDetailsPanel.vue?vue&type=style&index=0&lang.module.scss
2517
+ container$2 = "_container_w6lwl_123";
2518
+ header = "_header_w6lwl_132";
2519
+ actions = "_actions_w6lwl_136";
2520
+ pressed = "_pressed_w6lwl_142";
2521
+ title = "_title_w6lwl_146";
2522
+ icon = "_icon_w6lwl_152";
2523
+ executionSummary = "_executionSummary_w6lwl_156";
2524
+ content = "_content_w6lwl_160";
2525
+ outputPanel = "_outputPanel_w6lwl_168";
2526
+ inputResizer = "_inputResizer_w6lwl_173";
2527
+ collapsed = "_collapsed_w6lwl_177";
2528
+ full = "_full_w6lwl_177";
2529
+ placeholder = "_placeholder_w6lwl_181";
2530
+ LogDetailsPanel_vue_vue_type_style_index_0_lang_module_default = {
2531
+ container: container$2,
2532
+ header,
2533
+ actions,
2534
+ pressed,
2535
+ title,
2536
+ icon,
2537
+ executionSummary,
2538
+ content,
2539
+ outputPanel,
2540
+ inputResizer,
2541
+ collapsed,
2542
+ full,
2543
+ placeholder
2544
+ }; //#endregion
2545
+ //#region src/features/execution/logs/components/LogDetailsPanel.vue
2546
+ cssModules$2 = {
2547
+ "$style": LogDetailsPanel_vue_vue_type_style_index_0_lang_module_default
2548
+ };
2549
+ LogDetailsPanel_default = /* @__PURE__ */__plugin_vue_export_helper_default(LogDetailsPanel_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$2]]); //#endregion
2550
+ //#region src/features/execution/logs/components/LogsPanelActions.vue?vue&type=script&setup=true&lang.ts
2551
+ LogsPanelActions_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
2552
+ __name: "LogsPanelActions",
2553
+ props: {
2554
+ isOpen: {
2555
+ type: Boolean
2556
+ },
2557
+ isSyncSelectionEnabled: {
2558
+ type: Boolean
2559
+ },
2560
+ showToggleButton: {
2561
+ type: Boolean
2562
+ },
2563
+ showPopOutButton: {
2564
+ type: Boolean
2565
+ }
2566
+ },
2567
+ emits: ["popOut", "toggleOpen", "toggleSyncSelection"],
2568
+ setup(__props, {
2569
+ emit: __emit
2570
+ }) {
2571
+ const emit = __emit;
2572
+ const locales = useI18n();
2573
+ const popOutButtonText = computed(() => locales.baseText("runData.panel.actions.popOut"));
2574
+ const toggleButtonText = computed(() => locales.baseText(__props.isOpen ? "runData.panel.actions.collapse" : "runData.panel.actions.open"));
2575
+ const menuItems = computed(() => [{
2576
+ id: "toggleSyncSelection",
2577
+ label: locales.baseText("runData.panel.actions.sync"),
2578
+ checked: __props.isSyncSelectionEnabled
2579
+ }, ...(__props.showPopOutButton ? [{
2580
+ id: "popOut",
2581
+ label: popOutButtonText.value
2582
+ }] : [])]);
2583
+ function handleSelectMenuItem(selected) {
2584
+ switch (selected) {
2585
+ case "popOut":
2586
+ emit(selected);
2587
+ return;
2588
+ case "toggleSyncSelection":
2589
+ emit(selected);
2590
+ return;
2591
+ }
2592
+ }
2593
+ return (_ctx, _cache) => {
2594
+ return openBlock(), createElementBlock("div", {
2595
+ class: normalizeClass(_ctx.$style.container)
2596
+ }, [!_ctx.isOpen && _ctx.showPopOutButton ? (openBlock(), createBlock(unref(N8nTooltip_default), {
2597
+ key: 0,
2598
+ content: popOutButtonText.value
2599
+ }, {
2600
+ default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
2601
+ icon: "pop-out",
2602
+ type: "tertiary",
2603
+ text: "",
2604
+ size: "small",
2605
+ "icon-size": "medium",
2606
+ "aria-label": popOutButtonText.value,
2607
+ onClick: _cache[0] || (_cache[0] = withModifiers($event => emit("popOut"), ["stop"]))
2608
+ }, null, 8, ["aria-label"])]),
2609
+ _: 1
2610
+ }, 8, ["content"])) : createCommentVNode("", true), _ctx.isOpen ? (openBlock(), createBlock(unref(N8nActionDropdown_default), {
2611
+ key: 1,
2612
+ "icon-size": "small",
2613
+ "activator-icon": "ellipsis",
2614
+ "activator-size": "small",
2615
+ items: menuItems.value,
2616
+ teleported: false,
2617
+ onSelect: handleSelectMenuItem,
2618
+ onClick: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"]))
2619
+ }, null, 8, ["items"])) : createCommentVNode("", true), _ctx.showToggleButton ? (openBlock(), createBlock(KeyboardShortcutTooltip_default, {
2620
+ key: `tooltip-${_ctx.isOpen}`,
2621
+ label: unref(locales).baseText("generic.shortcutHint"),
2622
+ shortcut: {
2623
+ keys: ["l"]
2624
+ }
2625
+ }, {
2626
+ default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
2627
+ type: "tertiary",
2628
+ text: "",
2629
+ size: "small",
2630
+ "icon-size": "medium",
2631
+ icon: _ctx.isOpen ? "chevron-down" : "chevron-up",
2632
+ "aria-label": toggleButtonText.value,
2633
+ onClick: _cache[2] || (_cache[2] = withModifiers($event => emit("toggleOpen"), ["stop"]))
2634
+ }, null, 8, ["icon", "aria-label"])]),
2635
+ _: 1
2636
+ }, 8, ["label"])) : createCommentVNode("", true)], 2);
2637
+ };
2638
+ }
2639
+ }); //#endregion
2640
+ //#region src/features/execution/logs/components/LogsPanelActions.vue?vue&type=style&index=0&lang.module.scss
2641
+ container$1 = "_container_yw9ej_123";
2642
+ LogsPanelActions_vue_vue_type_style_index_0_lang_module_default = {
2643
+ container: container$1
2644
+ }; //#endregion
2645
+ //#region src/features/execution/logs/components/LogsPanelActions.vue
2646
+ cssModules$1 = {
2647
+ "$style": LogsPanelActions_vue_vue_type_style_index_0_lang_module_default
2648
+ };
2649
+ LogsPanelActions_default = /* @__PURE__ */__plugin_vue_export_helper_default(LogsPanelActions_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$1]]);
2650
+ INITIAL_POPUP_HEIGHT = 400;
2651
+ COLLAPSED_PANEL_HEIGHT = 32;
2652
+ LogsViewKeyboardEventListener_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
2653
+ __name: "LogsViewKeyboardEventListener",
2654
+ props: {
2655
+ keyMap: {},
2656
+ container: {}
2657
+ },
2658
+ setup(__props) {
2659
+ const popOutWindow = inject(PopOutWindowKey, ref());
2660
+ const activeElement = useActiveElement({
2661
+ window: popOutWindow?.value
2662
+ });
2663
+ const isBlurred = computed(() => {
2664
+ if (popOutWindow?.value) return popOutWindow.value.document.activeElement === null;
2665
+ return !activeElement.value || !__props.container || !__props.container.contains(activeElement.value) && __props.container !== activeElement.value;
2666
+ });
2667
+ useKeybindings(toRef(() => __props.keyMap), {
2668
+ disabled: isBlurred
2669
+ });
2670
+ return (_ctx, _cache) => {
2671
+ return openBlock(), createElementBlock("div");
2672
+ };
2673
+ }
2674
+ }); //#endregion
2675
+ //#region src/features/execution/logs/components/LogsViewKeyboardEventListener.vue
2676
+ LogsViewKeyboardEventListener_default = LogsViewKeyboardEventListener_vue_vue_type_script_setup_true_lang_default; //#endregion
2677
+ //#region src/features/execution/logs/components/LogsPanel.vue?vue&type=script&setup=true&lang.ts
2678
+ LogsPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
2679
+ __name: "LogsPanel",
2680
+ props: {
2681
+ isReadOnly: {
2682
+ type: Boolean,
2683
+ default: false
2684
+ }
2685
+ },
2686
+ setup(__props) {
2687
+ const props = __props;
2688
+ const container$8 = useTemplateRef("container");
2689
+ const logsContainer$1 = useTemplateRef("logsContainer");
2690
+ const popOutContainer = useTemplateRef("popOutContainer");
2691
+ const popOutContent$1 = useTemplateRef("popOutContent");
2692
+ const logsStore = useLogsStore();
2693
+ const ndvStore = useNDVStore();
2694
+ const workflowsStore = useWorkflowsStore();
2695
+ const {
2696
+ height,
2697
+ chatPanelWidth,
2698
+ overviewPanelWidth,
2699
+ canPopOut,
2700
+ isOpen,
2701
+ isPoppedOut,
2702
+ isCollapsingDetailsPanel,
2703
+ isOverviewPanelFullWidth,
2704
+ popOutWindow,
2705
+ onResize,
2706
+ onResizeEnd,
2707
+ onToggleOpen,
2708
+ onPopOut,
2709
+ onChatPanelResize,
2710
+ onChatPanelResizeEnd,
2711
+ onOverviewPanelResize,
2712
+ onOverviewPanelResizeEnd
2713
+ } = useLogsPanelLayout(computed(() => workflowsStore.workflow.name), popOutContainer, popOutContent$1, container$8, logsContainer$1);
2714
+ const {
2715
+ currentSessionId,
2716
+ messages: messages$1,
2717
+ previousChatMessages,
2718
+ sendMessage,
2719
+ refreshSession,
2720
+ displayExecution
2721
+ } = useChatState(props.isReadOnly);
2722
+ const {
2723
+ entries,
2724
+ execution,
2725
+ hasChat,
2726
+ latestNodeNameById,
2727
+ resetExecutionData,
2728
+ loadSubExecution
2729
+ } = useLogsExecutionData({
2730
+ isEnabled: isOpen
2731
+ });
2732
+ const {
2733
+ flatLogEntries,
2734
+ toggleExpanded
2735
+ } = useLogsTreeExpand(entries, loadSubExecution);
2736
+ const {
2737
+ selected,
2738
+ select,
2739
+ selectNext,
2740
+ selectPrev
2741
+ } = useLogsSelection(execution, entries, flatLogEntries, toggleExpanded);
2742
+ const inputTableColumnCollapsing = ref();
2743
+ const outputTableColumnCollapsing = ref();
2744
+ const isLogDetailsOpen = computed(() => isOpen.value && selected.value !== void 0);
2745
+ const isLogDetailsVisuallyOpen = computed(() => isLogDetailsOpen.value && !isCollapsingDetailsPanel.value);
2746
+ const logsPanelActionsProps = computed(() => ({
2747
+ isOpen: isOpen.value,
2748
+ isSyncSelectionEnabled: logsStore.isLogSelectionSyncedWithCanvas,
2749
+ showToggleButton: !isPoppedOut.value,
2750
+ showPopOutButton: canPopOut.value && !isPoppedOut.value,
2751
+ onPopOut,
2752
+ onToggleOpen,
2753
+ onToggleSyncSelection: logsStore.toggleLogSelectionSync
2754
+ }));
2755
+ const inputCollapsingColumnName = computed(() => inputTableColumnCollapsing.value?.nodeName === selected.value?.node.name ? inputTableColumnCollapsing.value?.columnName ?? null : null);
2756
+ const outputCollapsingColumnName = computed(() => outputTableColumnCollapsing.value?.nodeName === selected.value?.node.name ? outputTableColumnCollapsing.value?.columnName ?? null : null);
2757
+ const keyMap = computed(() => ({
2758
+ j: selectNext,
2759
+ k: selectPrev,
2760
+ Escape: () => select(void 0),
2761
+ ArrowDown: selectNext,
2762
+ ArrowUp: selectPrev,
2763
+ Space: () => selected.value && toggleExpanded(selected.value),
2764
+ Enter: () => selected.value && handleOpenNdv(selected.value),
2765
+ ...(isPoppedOut.value ? {
2766
+ i: () => logsStore.toggleInputOpen(),
2767
+ o: () => logsStore.toggleOutputOpen()
2768
+ } : {})
2769
+ }));
2770
+ function handleResizeOverviewPanelEnd() {
2771
+ if (isOverviewPanelFullWidth.value) select(void 0);
2772
+ onOverviewPanelResizeEnd();
2773
+ }
2774
+ function handleOpenNdv(treeNode) {
2775
+ ndvStore.setActiveNodeName(treeNode.node.name, "logs_view");
2776
+ nextTick(() => {
2777
+ const source = treeNode.runData?.source[0];
2778
+ const inputBranch = source?.previousNodeOutput ?? 0;
2779
+ ndvEventBus.emit("updateInputNodeName", source?.previousNode);
2780
+ ndvEventBus.emit("setInputBranchIndex", inputBranch);
2781
+ ndvStore.setOutputRunIndex(treeNode.runIndex);
2782
+ });
2783
+ }
2784
+ function handleChangeInputTableColumnCollapsing(columnName) {
2785
+ inputTableColumnCollapsing.value = columnName && selected.value ? {
2786
+ nodeName: selected.value.node.name,
2787
+ columnName
2788
+ } : void 0;
2789
+ }
2790
+ function handleChangeOutputTableColumnCollapsing(columnName) {
2791
+ outputTableColumnCollapsing.value = columnName && selected.value ? {
2792
+ nodeName: selected.value.node.name,
2793
+ columnName
2794
+ } : void 0;
2795
+ }
2796
+ return (_ctx, _cache) => {
2797
+ return openBlock(), createElementBlock("div", {
2798
+ ref_key: "popOutContainer",
2799
+ ref: popOutContainer,
2800
+ "data-test-id": "logs-panel"
2801
+ }, [(openBlock(), createBlock(LogsViewKeyboardEventListener_default, {
2802
+ key: String(!!unref(popOutWindow)),
2803
+ "key-map": keyMap.value,
2804
+ container: unref(container$8)
2805
+ }, null, 8, ["key-map", "container"])), createBaseVNode("div", {
2806
+ ref_key: "popOutContent",
2807
+ ref: popOutContent$1,
2808
+ class: normalizeClass([_ctx.$style.popOutContent, unref(isPoppedOut) ? _ctx.$style.poppedOut : ""])
2809
+ }, [createVNode(unref(N8nResizeWrapper_default), {
2810
+ height: unref(isPoppedOut) ? void 0 : unref(height),
2811
+ "supported-directions": ["top"],
2812
+ "is-resizing-enabled": !unref(isPoppedOut),
2813
+ class: normalizeClass(_ctx.$style.resizeWrapper),
2814
+ style: normalizeStyle({
2815
+ height: unref(isOpen) && !unref(isPoppedOut) ? `${unref(height)}px` : "auto"
2816
+ }),
2817
+ onResize: unref(onResize),
2818
+ onResizeend: unref(onResizeEnd)
2819
+ }, {
2820
+ default: withCtx(() => [createBaseVNode("div", {
2821
+ ref_key: "container",
2822
+ ref: container$8,
2823
+ class: normalizeClass(_ctx.$style.container),
2824
+ tabindex: "-1"
2825
+ }, [unref(hasChat) && (!props.isReadOnly || unref(messages$1).length > 0) ? (openBlock(), createBlock(unref(N8nResizeWrapper_default), {
2826
+ key: 0,
2827
+ "supported-directions": ["right"],
2828
+ "is-resizing-enabled": unref(isOpen),
2829
+ width: unref(chatPanelWidth),
2830
+ style: normalizeStyle({
2831
+ width: `${unref(chatPanelWidth)}px`
2832
+ }),
2833
+ class: normalizeClass(_ctx.$style.chat),
2834
+ window: unref(popOutWindow),
2835
+ onResize: unref(onChatPanelResize),
2836
+ onResizeend: unref(onChatPanelResizeEnd)
2837
+ }, {
2838
+ default: withCtx(() => [(openBlock(), createBlock(ChatMessagesPanel_default, {
2839
+ key: `canvas-chat-${unref(currentSessionId)}${unref(isPoppedOut) ? "-pop-out" : ""}`,
2840
+ "data-test-id": "canvas-chat",
2841
+ "is-open": unref(isOpen),
2842
+ "is-read-only": _ctx.isReadOnly,
2843
+ messages: unref(messages$1),
2844
+ "session-id": unref(currentSessionId),
2845
+ "past-chat-messages": unref(previousChatMessages),
2846
+ "show-close-button": false,
2847
+ "is-new-logs-enabled": true,
2848
+ "is-header-clickable": !unref(isPoppedOut),
2849
+ onClose: unref(onToggleOpen),
2850
+ onRefreshSession: unref(refreshSession),
2851
+ onDisplayExecution: unref(displayExecution),
2852
+ onSendMessage: unref(sendMessage),
2853
+ onClickHeader: unref(onToggleOpen)
2854
+ }, null, 8, ["is-open", "is-read-only", "messages", "session-id", "past-chat-messages", "is-header-clickable", "onClose", "onRefreshSession", "onDisplayExecution", "onSendMessage", "onClickHeader"]))]),
2855
+ _: 1
2856
+ }, 8, ["is-resizing-enabled", "width", "style", "class", "window", "onResize", "onResizeend"])) : createCommentVNode("", true), createBaseVNode("div", {
2857
+ ref_key: "logsContainer",
2858
+ ref: logsContainer$1,
2859
+ class: normalizeClass(_ctx.$style.logsContainer)
2860
+ }, [createVNode(unref(N8nResizeWrapper_default), {
2861
+ class: normalizeClass(_ctx.$style.overviewResizer),
2862
+ width: unref(overviewPanelWidth),
2863
+ style: normalizeStyle({
2864
+ width: isLogDetailsVisuallyOpen.value ? `${unref(overviewPanelWidth)}px` : ""
2865
+ }),
2866
+ "supported-directions": ["right"],
2867
+ "is-resizing-enabled": isLogDetailsOpen.value,
2868
+ window: unref(popOutWindow),
2869
+ onResize: unref(onOverviewPanelResize),
2870
+ onResizeend: handleResizeOverviewPanelEnd
2871
+ }, {
2872
+ default: withCtx(() => [createVNode(LogsOverviewPanel_default, {
2873
+ class: normalizeClass(_ctx.$style.logsOverview),
2874
+ "is-open": unref(isOpen),
2875
+ "is-read-only": _ctx.isReadOnly,
2876
+ "is-compact": isLogDetailsVisuallyOpen.value,
2877
+ selected: unref(selected),
2878
+ execution: unref(execution),
2879
+ entries: unref(entries),
2880
+ "latest-node-info": unref(latestNodeNameById),
2881
+ "flat-log-entries": unref(flatLogEntries),
2882
+ "is-header-clickable": !unref(isPoppedOut),
2883
+ onClickHeader: unref(onToggleOpen),
2884
+ onSelect: unref(select),
2885
+ onClearExecutionData: unref(resetExecutionData),
2886
+ onToggleExpanded: unref(toggleExpanded),
2887
+ onOpenNdv: handleOpenNdv
2888
+ }, {
2889
+ actions: withCtx(() => [!isLogDetailsVisuallyOpen.value ? (openBlock(), createBlock(LogsPanelActions_default, normalizeProps(mergeProps({
2890
+ key: 0
2891
+ }, logsPanelActionsProps.value)), null, 16)) : createCommentVNode("", true)]),
2892
+ _: 1
2893
+ }, 8, ["class", "is-open", "is-read-only", "is-compact", "selected", "execution", "entries", "latest-node-info", "flat-log-entries", "is-header-clickable", "onClickHeader", "onSelect", "onClearExecutionData", "onToggleExpanded"])]),
2894
+ _: 1
2895
+ }, 8, ["class", "width", "style", "is-resizing-enabled", "window", "onResize"]), isLogDetailsVisuallyOpen.value && unref(selected) ? (openBlock(), createBlock(LogDetailsPanel_default, {
2896
+ key: 0,
2897
+ class: normalizeClass(_ctx.$style.logDetails),
2898
+ "is-open": unref(isOpen),
2899
+ "log-entry": unref(selected),
2900
+ window: unref(popOutWindow),
2901
+ "latest-info": unref(latestNodeNameById)[unref(selected).node.id],
2902
+ panels: unref(logsStore).detailsState,
2903
+ "collapsing-input-table-column-name": inputCollapsingColumnName.value,
2904
+ "collapsing-output-table-column-name": outputCollapsingColumnName.value,
2905
+ "is-header-clickable": !unref(isPoppedOut),
2906
+ onClickHeader: unref(onToggleOpen),
2907
+ onToggleInputOpen: unref(logsStore).toggleInputOpen,
2908
+ onToggleOutputOpen: unref(logsStore).toggleOutputOpen,
2909
+ onCollapsingInputTableColumnChanged: handleChangeInputTableColumnCollapsing,
2910
+ onCollapsingOutputTableColumnChanged: handleChangeOutputTableColumnCollapsing
2911
+ }, {
2912
+ actions: withCtx(() => [isLogDetailsVisuallyOpen.value ? (openBlock(), createBlock(LogsPanelActions_default, normalizeProps(mergeProps({
2913
+ key: 0
2914
+ }, logsPanelActionsProps.value)), null, 16)) : createCommentVNode("", true)]),
2915
+ _: 1
2916
+ }, 8, ["class", "is-open", "log-entry", "window", "latest-info", "panels", "collapsing-input-table-column-name", "collapsing-output-table-column-name", "is-header-clickable", "onClickHeader", "onToggleInputOpen", "onToggleOutputOpen"])) : createCommentVNode("", true)], 2)], 2)]),
2917
+ _: 1
2918
+ }, 8, ["height", "is-resizing-enabled", "class", "style", "onResize", "onResizeend"])], 2)], 512);
2919
+ };
2920
+ }
2921
+ }); //#endregion
2922
+ //#region src/features/execution/logs/components/LogsPanel.vue?vue&type=style&index=0&lang.module.scss
2923
+ popOutContent = "_popOutContent_17exv_123";
2924
+ resizeWrapper = "_resizeWrapper_17exv_129";
2925
+ poppedOut = "_poppedOut_17exv_136";
2926
+ container = "_container_17exv_140";
2927
+ chat = "_chat_17exv_149";
2928
+ logsContainer = "_logsContainer_17exv_153";
2929
+ overviewResizer = "_overviewResizer_17exv_163";
2930
+ logsOverview = "_logsOverview_17exv_171";
2931
+ logsDetails = "_logsDetails_17exv_175";
2932
+ LogsPanel_vue_vue_type_style_index_0_lang_module_default = {
2933
+ popOutContent,
2934
+ resizeWrapper,
2935
+ poppedOut,
2936
+ container,
2937
+ chat,
2938
+ logsContainer,
2939
+ overviewResizer,
2940
+ logsOverview,
2941
+ logsDetails
2942
+ }; //#endregion
2943
+ //#region src/features/execution/logs/components/LogsPanel.vue
2944
+ cssModules = {
2945
+ "$style": LogsPanel_vue_vue_type_style_index_0_lang_module_default
2946
+ };
2947
+ _export("t", LogsPanel_default = /* @__PURE__ */__plugin_vue_export_helper_default(LogsPanel_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules]])); //#endregion
2948
+ }
2949
+ };
2950
+ });
2951
+ })();