n8n-editor-ui 2.3.1 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/data/node-popularity.json +1920 -1916
  2. package/dist/assets/{AddDataTableModal-DnW0v2OC.js → AddDataTableModal-Y13E7Akf.js} +18 -22
  3. package/dist/assets/{AgentEditorModal-CnYw6elM.css → AgentEditorModal-9v5_7c4M.css} +11 -7
  4. package/dist/assets/{AgentEditorModal-Djnq_0FY.js → AgentEditorModal-BrMkCIu5.js} +34 -38
  5. package/dist/assets/{Alert-KBN7v2aB.js → Alert-C0sX2MmC.js} +9 -9
  6. package/dist/assets/AnimatedSpinner-B25lpnvb.js +15 -0
  7. package/dist/assets/{AnnotationTagsDropdown.ee-QStDN6Th.js → AnnotationTagsDropdown.ee-D52VzZRF.js} +6 -6
  8. package/dist/assets/{MainHeader-D7esq2FA.js → AppHeader-BMRzlZ88.js} +359 -529
  9. package/dist/assets/{MainHeader-CSaAWCWj.css → AppHeader-CiEVBSe4.css} +42 -160
  10. package/dist/assets/{MainSidebar-BehIhk7J.js → AppSidebar-B88OkpG6.js} +107 -84
  11. package/dist/assets/{MainSidebar-CEsQ8o1Y.css → AppSidebar-qYnACKTG.css} +13 -4
  12. package/dist/assets/{AuthView-8nC1kvaA.js → AuthView-B28bjxIF.js} +12 -12
  13. package/dist/assets/{SettingsView-6sirGv9l.css → BottomMenu-CYgiV90C.css} +57 -37
  14. package/dist/assets/{BottomMenu-B-HQRX4l.js → BottomMenu-CfzAqh6J.js} +70 -168
  15. package/dist/assets/{useCanvasMapping-Cl6iFzZx.js → CanvasRunWorkflowButton-CLV9eJ9R.js} +268 -262
  16. package/dist/assets/{useCanvasMapping-CyDAqgNV.css → CanvasRunWorkflowButton-D_Rqnskj.css} +203 -203
  17. package/dist/assets/{ChangePasswordView-B4U_r0Av.js → ChangePasswordView-CXDHJS_U.js} +14 -19
  18. package/dist/assets/ChatAgentAvatar-BqR7_kd_.js +67 -0
  19. package/dist/assets/{ChatAgentAvatar-B68ZZ295.css → ChatAgentAvatar-D94COYC_.css} +10 -13
  20. package/dist/assets/{ChatFile-Dtf_b24Y.js → ChatFile-DGN9Z6P_.js} +17 -17
  21. package/dist/assets/{ChatLayout-CxM-3LAt.css → ChatLayout-C5Cltxb6.css} +1 -8
  22. package/dist/assets/{ChatLayout-BfWVFhWE.js → ChatLayout-IMyTW2P2.js} +11 -15
  23. package/dist/assets/{ChatPersonalAgentsView-DTF6JtUh.js → ChatPersonalAgentsView-PT_0eEaD.js} +19 -25
  24. package/dist/assets/{ChatSidebar-DU5x3UPL.js → ChatSidebar-CG-7B_hY.js} +56 -72
  25. package/dist/assets/{ChatSidebar-DcNxY7Pt.css → ChatSidebar-D-hWKn7w.css} +126 -0
  26. package/dist/assets/{ChatView-D8ScSRRr.js → ChatView-DaUB9Ecc.js} +113 -113
  27. package/dist/assets/{ChatView-DrZ9gYjI.css → ChatView-DjGNW1KJ.css} +58 -50
  28. package/dist/assets/{ChatWorkflowAgentsView-Kiqxl5Dz.js → ChatWorkflowAgentsView-Dv-lY297.js} +19 -25
  29. package/dist/assets/CollectionParameter-CEz9OjV2.js +42 -0
  30. package/dist/assets/{CommunityNodeUpdateInfo-DsR3DdTu.js → CommunityNodeUpdateInfo-CauvhKGq.js} +13 -13
  31. package/dist/assets/{CopyInput-DJ2yTciL.js → CopyInput-B4eaHdxj.js} +15 -15
  32. package/dist/assets/{CredentialIcon-DJybkA4h.js → CredentialIcon-BtjftPax.js} +6 -6
  33. package/dist/assets/{CredentialPicker-Bao3p-41.js → CredentialPicker-BFTsdquZ.js} +8 -8
  34. package/dist/assets/{CredentialSelectorModal-DaRU1zXR.js → CredentialSelectorModal-y04x0moO.js} +22 -27
  35. package/dist/assets/{CredentialsView-wSH7BheV.js → CredentialsView-CbhjEdy6.js} +46 -52
  36. package/dist/assets/{DataTableActions-BMf3BHPM.js → DataTableActions-V_mGpWNk.js} +6 -6
  37. package/dist/assets/{DataTableDetailsView-CSIqpXLA.js → DataTableDetailsView-BaCljaXy.js} +27 -31
  38. package/dist/assets/{DataTableView-Blgv7Ln8.js → DataTableView-DtSSvuD-.js} +31 -37
  39. package/dist/assets/DemoFooter-2XBpYf-9.js +53 -0
  40. package/dist/assets/{Draggable-DQjeTEFr.js → Draggable-uo-iesAL.js} +5 -5
  41. package/dist/assets/{EmptySharedSectionActionBox-CogY0uW5.js → EmptySharedSectionActionBox-BoSKCX6d.js} +5 -5
  42. package/dist/assets/{EnterpriseEdition.ee-CFcDsU4a.js → EnterpriseEdition.ee-CyI_U9yB.js} +2 -2
  43. package/dist/assets/{EntityNotFound-DmFtFwaH.js → EntityNotFound-qBJJDr9S.js} +9 -13
  44. package/dist/assets/{EntityUnAuthorised-CoFxjgq9.js → EntityUnAuthorised-Ci980jH0.js} +8 -12
  45. package/dist/assets/{ErrorView-fGVmNs6l.js → ErrorView-D33JJAX4.js} +13 -17
  46. package/dist/assets/{EvaluationsRootView-CnsgFQrF.js → EvaluationsRootView-B2SD_0sA.js} +34 -37
  47. package/dist/assets/{EvaluationsView-V0hiFoAc.js → EvaluationsView-D9anu-so.js} +28 -34
  48. package/dist/assets/{ExecutionsTime-SXIffRZe.js → ExecutionsTime-Co23FVKL.js} +16 -15
  49. package/dist/assets/{ExecutionsView-1YV6qmab.js → ExecutionsView-BYR0BCB9.js} +62 -66
  50. package/dist/assets/{ExternalSecretsProviderConnectionSwitch.ee-CwhFUTJx.js → ExternalSecretsProviderConnectionSwitch.ee-DaF1WXYB.js} +18 -17
  51. package/dist/assets/FixedCollectionParameter-COuGvpZ8.css +642 -0
  52. package/dist/assets/FixedCollectionParameter-DDwNWqZ8.js +1571 -0
  53. package/dist/assets/FolderBreadcrumbs-CqjobwTB.js +187 -0
  54. package/dist/assets/{SaveButton-Dc01Y2MA.css → FolderBreadcrumbs-eBFopiOp.css} +7 -14
  55. package/dist/assets/{ForgotMyPasswordView-Bgtqx-Pb.js → ForgotMyPasswordView-CcxGYqHh.js} +14 -19
  56. package/dist/assets/{InsightsChartAverageRuntime-gpxjFP2f.js → InsightsChartAverageRuntime-69U4sUmH.js} +10 -11
  57. package/dist/assets/{InsightsChartFailed-DBcygly6.js → InsightsChartFailed-Ct64T5GJ.js} +8 -9
  58. package/dist/assets/{InsightsChartFailureRate-CY3HP65L.js → InsightsChartFailureRate-BOdV-Q3d.js} +9 -11
  59. package/dist/assets/{InsightsChartTimeSaved-DAfnPiRJ.js → InsightsChartTimeSaved-B83s59mL.js} +9 -11
  60. package/dist/assets/{InsightsChartTotal-CLtcCYXo.js → InsightsChartTotal-1A5vqW4E.js} +7 -9
  61. package/dist/assets/{InsightsDashboard-D3vC4R1n.js → InsightsDashboard-BgxhoT5G.js} +37 -39
  62. package/dist/assets/{InsightsPaywall-0gL3KDRU.js → InsightsPaywall-DlLnPCl2.js} +15 -19
  63. package/dist/assets/{InsightsSummary-CnIu-BEq.js → InsightsSummary-BB8IwI5i.js} +11 -11
  64. package/dist/assets/{InsightsTableWorkflows-BIKybxql.js → InsightsTableWorkflows-Dnldlw-H.js} +22 -25
  65. package/dist/assets/{KeyboardShortcutTooltip-Bg_9TS__.js → KeyboardShortcutTooltip-Dwz4Hv8g.js} +6 -6
  66. package/dist/assets/LogsPanel-C9bshHRi.js +40 -0
  67. package/dist/assets/{LogsPanel-CeaPnpLp.js → LogsPanel-CfaRZWyh.js} +100 -100
  68. package/dist/assets/{MCPConnectWorkflowsModal-Td3mGUN9.js → MCPConnectWorkflowsModal-DgeHxB8D.js} +36 -42
  69. package/dist/assets/{MigrationRuleDetail-ChDD18D8.js → MigrationRuleDetail-CtWwVzUC.js} +23 -27
  70. package/dist/assets/{MigrationRules-Bx-faTM3.js → MigrationRules-Om8sz8NC.js} +21 -25
  71. package/dist/assets/{Modal-DbNRq20p.js → Modal-DDyUIg-j.js} +27 -26
  72. package/dist/assets/{ModelByIdSelectorModal-Zys7oCrF.js → ModelByIdSelectorModal-DOo5k-Da.js} +18 -23
  73. package/dist/assets/{NDVEmptyState-DLSJV_-K.js → NDVEmptyState-CJWa4Aka.js} +15 -12
  74. package/dist/assets/{NodeCreation-D-51ue5r.js → NodeCreation-ClTqHJhs.js} +30 -53
  75. package/dist/assets/{ItemsRenderer-DkobJF9f.css → NodeCreator-039HRrqJ.css} +1525 -6
  76. package/dist/assets/{NodeCreator-DNZlk7YI.js → NodeCreator-BHs8o7J3.js} +978 -88
  77. package/dist/assets/{NodeDetailsView-Bx2kED62.js → NodeDetailsView-Cr9dlkiW.js} +72 -87
  78. package/dist/assets/{NodeDetailsViewV2-Cs-DNkN8.js → NodeDetailsViewV2-D_UwwehT.js} +69 -86
  79. package/dist/assets/{NodeIcon-BbsF7HzQ.js → NodeIcon-CXamMxe5.js} +10 -10
  80. package/dist/assets/{NodeIcon-BDxr0f30.css → NodeIcon-zqTc5h-V.css} +1 -1
  81. package/dist/assets/{NodeSettings-CihRSGnT.js → NodeSettings-DiMGfIPh.js} +73 -73
  82. package/dist/assets/{NodeView-C6e9qYIb.js → NodeView-CqK4OOpZ.js} +171 -149
  83. package/dist/assets/{NodeView-AuBajxDh.css → NodeView-Xwcu11Wh.css} +11 -11
  84. package/dist/assets/{OAuthConsentView-DgEpMzqe.js → OAuthConsentView-D4rD7kPg.js} +14 -18
  85. package/dist/assets/{ParameterInputList-C1BdtAjc.css → ParameterInputList-BUZ33Aem.css} +717 -208
  86. package/dist/assets/{ParameterInputList-BdolYdHT.js → ParameterInputList-DlsnXTOE.js} +1864 -1039
  87. package/dist/assets/{ProjectBreadcrumb-C78U49qA.js → ProjectBreadcrumb-D9hS-MYJ.js} +8 -8
  88. package/dist/assets/{ProjectCardBadge-BJrdwkUy.js → ProjectCardBadge-BE0KUpWh.js} +10 -10
  89. package/dist/assets/{ProjectHeader-BWd_Jpki.js → ProjectHeader-C_C9sbjt.js} +14 -14
  90. package/dist/assets/{ProjectIcon-CNEqHlzp.js → ProjectIcon-gwTM9uPG.js} +8 -8
  91. package/dist/assets/{ProjectRoleView-DgDH-CAz.js → ProjectRoleView-Bf4zP3qm.js} +19 -23
  92. package/dist/assets/{ProjectRolesView-lS6Xs6d0.js → ProjectRolesView-DhAgSeyy.js} +18 -22
  93. package/dist/assets/{ProjectSettings-BBjtsGXK.js → ProjectSettings-C687D50w.js} +31 -34
  94. package/dist/assets/{ProjectSharing-BEcymROT.js → ProjectSharing-C8e9oK7q.js} +16 -16
  95. package/dist/assets/{ProjectVariables-BYbTctFU.js → ProjectVariables-Bjvk3j7l.js} +40 -46
  96. package/dist/assets/{ProviderSettingsModal-COAKwlLh.js → ProviderSettingsModal-D7PL4Ovf.js} +20 -26
  97. package/dist/assets/{PushConnectionTracker-CY-LPI6v.js → PushConnectionTracker-BLfijnvC.js} +4 -4
  98. package/dist/assets/{ResolversView-CxbdIBE2.js → ResolversView-wd5fu-tV.js} +20 -24
  99. package/dist/assets/{ResourceFiltersDropdown-BlSZzGLj.js → ResourceFiltersDropdown-B9N5y-vt.js} +12 -12
  100. package/dist/assets/{ResourcesListLayout-DLAMdJD5.css → ResourcesListLayout-BhnhvHiw.css} +140 -0
  101. package/dist/assets/{ResourcesListLayout-Ej5Hcdb7.js → ResourcesListLayout-O9_3CxcA.js} +32 -23
  102. package/dist/assets/{RunData-CSkVEMJc.js → RunData-BhqFCEeO.js} +20367 -28266
  103. package/dist/assets/{RunData-CGWkR8tE.css → RunData-xpRgLK8S.css} +2 -2
  104. package/dist/assets/{RunDataHtml-CS6G8R8Z.js → RunDataHtml-BMxc-zRm.js} +5 -5
  105. package/dist/assets/RunDataHtml-wQh8fACG.js +5 -0
  106. package/dist/assets/{RunDataJson-BoMj9Y4H.js → RunDataJson-DXh-JzHh.js} +31 -31
  107. package/dist/assets/{RunDataJsonActions-BYw5OJyd.js → RunDataJsonActions-jMhBcnZ4.js} +19 -23
  108. package/dist/assets/{RunDataParsedAiContent-Cci_idnL.js → RunDataParsedAiContent-BbTgNtPy.js} +15 -16
  109. package/dist/assets/RunDataParsedAiContent-CcCTmhG0.js +15 -0
  110. package/dist/assets/{RunDataSearch-Cl17NZ8f.js → RunDataSearch-BVW7uE4N.js} +10 -14
  111. package/dist/assets/{RunDataTable-ldjWmEyj.js → RunDataTable-DUJIxl0f.js} +32 -36
  112. package/dist/assets/{SamlOnboarding-B4udEOGL.js → SamlOnboarding-CxYoa2cp.js} +14 -19
  113. package/dist/assets/{SelectedItemsInfo-0qmaX5TI.js → SelectedItemsInfo-CKmcAObD.js} +5 -5
  114. package/dist/assets/{SettingsApiView-DWWkTI8H.js → SettingsApiView-D3gPC7wS.js} +24 -27
  115. package/dist/assets/{SettingsChatHubView-DdY-v1Oz.js → SettingsChatHubView-Dyl6agLq.js} +18 -24
  116. package/dist/assets/{SettingsCommunityNodesView-Bh_N6Npj.js → SettingsCommunityNodesView-esGDUBkV.js} +38 -42
  117. package/dist/assets/{SettingsExternalSecrets-D1ahXEoY.js → SettingsExternalSecrets-BRP-TFnF.js} +18 -22
  118. package/dist/assets/{SettingsLdapView-BDKazZKJ.js → SettingsLdapView-BiLAMZMp.js} +22 -26
  119. package/dist/assets/{SettingsLogStreamingView-Rq7vLTVL.js → SettingsLogStreamingView-ByUHLila.js} +21 -24
  120. package/dist/assets/{SettingsMCPView-DKx7RcRB.js → SettingsMCPView-ByBI3gAH.js} +42 -46
  121. package/dist/assets/{SettingsPersonalView-5d6_p-hw.js → SettingsPersonalView-PuPbUFF4.js} +15 -19
  122. package/dist/assets/SettingsSidebar-DWKnhzbu.js +58 -0
  123. package/dist/assets/{useCommandBar-eK4Fv9lH.css → SettingsSidebar-hr5ASDKX.css} +22 -24
  124. package/dist/assets/{SettingsSourceControl-CTzXIqE3.js → SettingsSourceControl-e3k-B-T-.js} +19 -23
  125. package/dist/assets/{SettingsSso-CUrz-7l8.js → SettingsSso-ELd6d7Cd.js} +26 -29
  126. package/dist/assets/{SettingsUsageAndPlan-R9q7LfRv.js → SettingsUsageAndPlan-DTbcjDth.js} +20 -23
  127. package/dist/assets/{SettingsUsersView-DcmC9oO-.js → SettingsUsersView-CLdVPGwv.js} +50 -28
  128. package/dist/assets/{SetupTemplateFormStep-C0bRvmcc.js → SetupTemplateFormStep-CRd1UZx9.js} +15 -15
  129. package/dist/assets/{SetupView-Bpj6SVkS.js → SetupView-BWvvVJ_i.js} +14 -19
  130. package/dist/assets/{SetupWorkflowCredentialsButton-CZpFSpx5.js → SetupWorkflowCredentialsButton-Dh4fkO6K.js} +21 -20
  131. package/dist/assets/{SetupWorkflowFromTemplateView-DhK63ZNL.js → SetupWorkflowFromTemplateView-C5i9N-Xc.js} +21 -25
  132. package/dist/assets/{SeverityTag-4JkejesH.js → SeverityTag-CO2h99Dy.js} +6 -6
  133. package/dist/assets/{SigninView-D3PBF8fA.js → SigninView-BU__AvOm.js} +16 -20
  134. package/dist/assets/{SignoutView-DZcfsILm.js → SignoutView-BOMbF2VO.js} +10 -10
  135. package/dist/assets/{SignupView-D2QARHWC.js → SignupView-Cqs9OeBV.js} +27 -27
  136. package/dist/assets/{SkeletonAgentCard-BhJ27v2W.js → SkeletonAgentCard-BKWUxHb9.js} +12 -12
  137. package/dist/assets/{PageViewLayout-Cn6FD0Wt.css → SlideTransition-Bv5Vx35L.css} +6 -17
  138. package/dist/assets/SlideTransition-CWSKQ4XI.js +11 -0
  139. package/dist/assets/{TagsDropdown-8x1FnXzA.js → TagsDropdown-DGbottaK.js} +9 -9
  140. package/dist/assets/{TemplateCard-DxKAmiWm.js → TemplateCard-XTHKCDKs.js} +9 -9
  141. package/dist/assets/{TemplateDetails-bBAnDzfL.js → TemplateDetails-DSp01RKG.js} +20 -20
  142. package/dist/assets/{TemplateList-DxQ3fBxn.js → TemplateList-rOlAyX39.js} +44 -44
  143. package/dist/assets/{TemplatesCollectionView-DCJk2jwq.js → TemplatesCollectionView-BVfAAgHo.js} +22 -26
  144. package/dist/assets/{TemplatesSearchView-Bh8wuhTx.js → TemplatesSearchView-BRZPm62G.js} +49 -53
  145. package/dist/assets/{TemplatesView-w-y6NvIc.js → TemplatesView-B2WxZgCT.js} +6 -6
  146. package/dist/assets/{TemplatesWorkflowView-eo3ddDao.js → TemplatesWorkflowView-HRwmMyaL.js} +23 -27
  147. package/dist/assets/{TestRunDetailView-DGEhYj5_.js → TestRunDetailView-D5RXX1zN.js} +20 -25
  148. package/dist/assets/{TextWithHighlights-DjzuDrgO.js → TextWithHighlights-CH5Zsswa.js} +2 -2
  149. package/dist/assets/{TimeAgo-0Rdm0Kiq.js → TimeAgo-i_jQQBzo.js} +4 -4
  150. package/dist/assets/{ToolsSelectorModal-SnNw9Jip.js → ToolsSelectorModal-Cr50cu-v.js} +20 -24
  151. package/dist/assets/{TriggerPanel-ChJuzrpN.js → TriggerPanel-DsPiGMWb.js} +51 -51
  152. package/dist/assets/{VirtualSchema-wgdUJECR.js → VirtualSchema-DUQ68BrH.js} +60 -61
  153. package/dist/assets/{VirtualSchema-CwutU4vj.css → VirtualSchema-pdpcVEq9.css} +1 -1
  154. package/dist/assets/VirtualSchema-vD1WN6xC.js +28 -0
  155. package/dist/assets/{VueMarkdown-BRiaIhX9.js → VueMarkdown-D0Ufjusy.js} +3 -3
  156. package/dist/assets/{WorkerView-DPgZMV-u.js → WorkerView-tKUhJ5Dl.js} +38 -43
  157. package/dist/assets/{WorkflowExecutionsInfoAccordion-tLNnztlE.js → WorkflowExecutionsInfoAccordion-hO-vNiAf.js} +7 -7
  158. package/dist/assets/{WorkflowExecutionsLandingPage-DzSdsRSM.js → WorkflowExecutionsLandingPage-DzrSOo1F.js} +14 -18
  159. package/dist/assets/{WorkflowExecutionsPreview-DcRbTjpx.js → WorkflowExecutionsPreview-CizWQG9x.js} +44 -47
  160. package/dist/assets/{WorkflowExecutionsView-BvQhNwyi.js → WorkflowExecutionsView-DJ27bPYq.js} +60 -62
  161. package/dist/assets/{WorkflowHistory-C7k0u5n4.js → WorkflowHistory-CD8N5qTi.js} +198 -197
  162. package/dist/assets/{WorkflowHistory-BBHdNsOb.css → WorkflowHistory-dUpsKg3Z.css} +42 -75
  163. package/dist/assets/{WorkflowLocation-DU_oqOxw.js → WorkflowLocation-ChaEWxVS.js} +18 -18
  164. package/dist/assets/{WorkflowOnboardingView-DsT28Lna.js → WorkflowOnboardingView-COBDyXiZ.js} +10 -10
  165. package/dist/assets/{WorkflowPreview-Cv_yCx4J.js → WorkflowPreview-pbJ_UfWP.js} +9 -9
  166. package/dist/assets/{WorkflowTagsDropdown-BHpackqb.js → WorkflowTagsDropdown-C0g5t367.js} +6 -6
  167. package/dist/assets/{WorkflowsView-C-PD10oe.css → WorkflowsView-0_qNZeIx.css} +32 -42
  168. package/dist/assets/{WorkflowsView-CA_-v3jL.js → WorkflowsView-mroD5hze.js} +128 -239
  169. package/dist/assets/{_MapCache-ficiegRb.js → _MapCache-DkLivSSb.js} +46 -38
  170. package/dist/assets/{_baseOrderBy-UJkFlXQy.js → _baseOrderBy-DvuuRU7J.js} +8 -13
  171. package/dist/assets/{_initCloneObject-C3audwCb.js → _initCloneObject-DiO9tORE.js} +2 -2
  172. package/dist/assets/{aiTemplatesStarterCollection.store-BuNUUCwa.js → aiTemplatesStarterCollection.store-DUkMK-jk.js} +6 -6
  173. package/dist/assets/{apiKeys.store-DpzwcWGM.js → apiKeys.store-C0NHEBJ6.js} +4 -4
  174. package/dist/assets/{assistant.store-CiyiixCh.js → assistant.store-2i2uoZtV.js} +8 -8
  175. package/dist/assets/{auth.eventBus-B77G38R7.js → auth.eventBus-Ce2KL2L4.js} +1 -1
  176. package/dist/assets/{banners.store-D47aZI1r.js → banners.store-CxccIpTM.js} +7 -7
  177. package/dist/assets/{buttons.esm-CT4flsfB.js → buttons.esm-DHCtg4os.js} +0 -5
  178. package/dist/assets/canvas.utils-Dv0fD5Il.js +138 -0
  179. package/dist/assets/{chart-CE3HWIkr.js → chart-BpBZvUkM.js} +0 -6
  180. package/dist/assets/{chartjs.utils-CeXvwL6J.js → chartjs.utils-B8F_iMP1.js} +5 -5
  181. package/dist/assets/{chat.store-D1BqW7ao.js → chat.store-Crdaw-Cp.js} +34 -29
  182. package/dist/assets/{chatPanel.store-ChAzL_xE.js → chatPanel.store-oWfjNSnl.js} +6 -6
  183. package/dist/assets/{chunk-6z4oVpB-.js → chunk-r2Y0G7H8.js} +3 -2
  184. package/dist/assets/{col-Cd5kWzv_.js → col-gWKpvp-j.js} +2 -2
  185. package/dist/assets/collaboration.store-BbSwTk_d.js +287 -0
  186. package/dist/assets/{constants-DLTaaipl.js → constants-Bgby4me8.js} +12 -3
  187. package/dist/assets/{constants-DRIItkNt.js → constants-D48cSFnx.js} +921 -931
  188. package/dist/assets/core-CKLPLCBJ.js +4 -0
  189. package/dist/assets/{core-6W4wWNc1.js → core-DDiavqSm.js} +1 -1
  190. package/dist/assets/{dataTable.store-CkhtfeY0.js → dataTable.store-_wAVMcbO.js} +4 -4
  191. package/dist/assets/{date-picker-DsgFTiIp.js → date-picker-CutzRF4i.js} +13 -4
  192. package/dist/assets/{dateFormatter-DDfPHI9I.js → dateFormatter-BiQ9pMrA.js} +4 -4
  193. package/dist/assets/{dateformat-CM9k0--B.js → dateformat-BeHi9sF4.js} +2 -1
  194. package/dist/assets/{dialog-O4ZP7Mjj.js → dialog-D6bnhGrj.js} +4 -4
  195. package/dist/assets/{dist-DP_8je0B.js → dist-C4hPgTYg.js} +3 -3
  196. package/dist/assets/empty-nq5-pHAR.js +895 -0
  197. package/dist/assets/en-C4tPMX0d.js +2 -0
  198. package/dist/assets/{en-CF30SCh2.js → en-PrU4QUr7.js} +10 -2
  199. package/dist/assets/{es-DlTgUi2w.js → es-347rbIb-.js} +2 -2
  200. package/dist/assets/{evaluation.constants-DbxnAcTc.js → evaluation.constants-CSD02Lo1.js} +12 -15
  201. package/dist/assets/{executions.store-a5l7sYPn.js → executions.store-SHgwsnWe.js} +4 -4
  202. package/dist/assets/{exports-hpMZaOPT.js → exports-DwuuoPh-.js} +1 -3
  203. package/dist/assets/{externalSecrets.ee.store-HP2ldANj.js → externalSecrets.ee.store-Zyuqq2w2.js} +4 -4
  204. package/dist/assets/{folders.store-j6Xz9xvI.js → folders.store-D8rP_Hdz.js} +4 -4
  205. package/dist/assets/{index-B2rFJ2JV.js → index-BYX1_H81.js} +4327 -1865
  206. package/dist/assets/{index-U6fZiFvz.css → index-BhFfa3xu.css} +3083 -2437
  207. package/dist/assets/{insights.constants-C8GITe6H.js → insights.constants-98xWnZQu.js} +3 -3
  208. package/dist/assets/{insights.store-EBGeDNzp.js → insights.store-BtoZsG-U.js} +7 -7
  209. package/dist/assets/{insights.utils-B7OXsqrQ.js → insights.utils-B0txVt0Q.js} +6 -6
  210. package/dist/assets/{languageModules-D_uyjb6R.js → languageModules-DyQaii5v.js} +1 -1
  211. package/dist/assets/{logStreaming.store-C8IxWNZB.js → logStreaming.store-7BkB5s2r.js} +3 -3
  212. package/dist/assets/{mcp.store-BLq1CDNz.js → mcp.store-G7xff9jI.js} +4 -4
  213. package/dist/assets/{merge-k8vSyyXH.js → merge-B0-p153C.js} +2 -2
  214. package/dist/assets/{nodeCreator.store-DTc1zzIQ.js → nodeCreator.store-Dl91ajnd.js} +1932 -2216
  215. package/dist/assets/{nodeIcon-BWuZ9Qxh.js → nodeIcon-CUi9_d-e.js} +3 -3
  216. package/dist/assets/{nodeTransforms-A9ckRbW1.js → nodeTransforms-D71MPFbn.js} +2 -2
  217. package/dist/assets/{orderBy-BCjtsqzS.js → orderBy-zIIUzfE0.js} +3 -3
  218. package/dist/assets/{personalizedTemplatesV3.store-DBi4yorm.js → personalizedTemplatesV3.store-CwD8voN0.js} +4 -4
  219. package/dist/assets/{pickBy-1X5wiyPT.js → pickBy-BpQ_nS0j.js} +3 -3
  220. package/dist/assets/pushConnection.store-DEMBEciq.js +496 -0
  221. package/dist/assets/{radio-BeejvdFG.js → radio-I_Y35sEo.js} +2 -2
  222. package/dist/assets/{readyToRun.store-DfU30_Nq.js → readyToRun.store-D7MVH-Yc.js} +17 -8
  223. package/dist/assets/{readyToRunWorkflows.store-DgUOIs41.js → readyToRunWorkflows.store-CTCJvvBk.js} +6 -6
  224. package/dist/assets/{roles.store-W8yXuo53.js → roles.store-eBIJuaNR.js} +4 -4
  225. package/dist/assets/{router-RpMr830s.js → router-zEaOc-tq.js} +316 -304
  226. package/dist/assets/{sanitize-html-fRP2gWb9.js → sanitize-html-DeDnsMgc.js} +17 -18
  227. package/dist/assets/{semver-mGRAx708.js → semver-Bz8_abNa.js} +6 -8
  228. package/dist/assets/{sourceControl.eventBus-Bry8gLG7.js → sourceControl.eventBus-l-XuMGfW.js} +1 -1
  229. package/dist/assets/{sqlite3-worker1-bundler-friendly-BOYmhhGN.js → sqlite3-worker1-bundler-friendly-BvaOkVlV.js} +9 -2
  230. package/dist/assets/{src-CMoPZtHv.css → src-CUiJtOrW.css} +5070 -4059
  231. package/dist/assets/{src-XLGanEOK.js → src-DpZSuyLC.js} +5805 -2547
  232. package/dist/assets/{sso.store-B7JPsojt.js → sso.store-9EWHvrSy.js} +3 -3
  233. package/dist/assets/{table-Dl2CV3mu.js → table-C3aerURh.js} +5 -5
  234. package/dist/assets/{templateActions-CjSRb54_.js → templateActions-qowBM3Zz.js} +5 -5
  235. package/dist/assets/{templateTransforms-Cr1Vxjyo.js → templateTransforms-CU4zdmOp.js} +1 -1
  236. package/dist/assets/{truncate-B1HVeveJ.js → truncate-BrM_9cme.js} +5 -5
  237. package/dist/assets/{typescript.worker-CYqLvLHh.js → typescript.worker-DZR6qltN.js} +224 -176
  238. package/dist/assets/{usage.store-7DVTEzLA.js → usage.store-BDZxETBd.js} +3 -3
  239. package/dist/assets/{useActions-BVMLDnB7.js → useActions-BItklJWS.js} +5 -5
  240. package/dist/assets/useBugReporting-Bi1700UJ.js +130 -0
  241. package/dist/assets/useCalloutHelpers-DSFmB8y4.js +80 -0
  242. package/dist/assets/{useCanvasOperations-DmDkQZsZ.js → useCanvasOperations-DVIzBTSq.js} +36 -32
  243. package/dist/assets/{useClipboard-DAKz3pSk.js → useClipboard-CTTDlv6b.js} +3 -3
  244. package/dist/assets/{useCredentialResolvers-Bib-mabw.js → useCredentialResolvers-0jZuH4WO.js} +5 -5
  245. package/dist/assets/useCustomAgent-CjjqdMoN.js +630 -0
  246. package/dist/assets/{useCustomAgent-tUoLIUar.css → useCustomAgent-D8Sw5vcC.css} +32 -9
  247. package/dist/assets/{useDebounce-Bnb8W2LR.js → useDebounce-C4ttil9E.js} +12 -12
  248. package/dist/assets/{useExecutionData-DWNDlbxK.js → useExecutionData-BLsmVbDx.js} +2 -2
  249. package/dist/assets/{useExecutionDebugging-C3LhPoKB.js → useExecutionDebugging-unzyZJSo.js} +7 -7
  250. package/dist/assets/{useExecutionHelpers-ZH8Lpu7H.js → useExecutionHelpers-VADBx6Yx.js} +5 -5
  251. package/dist/assets/useGlobalEntityCreation-5MrJOTFc.js +192 -0
  252. package/dist/assets/{useImportCurlCommand-UjbNISl9.js → useImportCurlCommand-I3o_giV2.js} +41 -37
  253. package/dist/assets/{useIntersectionObserver-DXKoRNFj.js → useIntersectionObserver-CGg561I6.js} +1 -1
  254. package/dist/assets/{useKeybindings-DDEBPDlo.js → useKeybindings-CKjI_jnI.js} +5 -5
  255. package/dist/assets/{useLogsTreeExpand-DBG-3__y.js → useLogsTreeExpand-BfExNgUz.js} +41 -41
  256. package/dist/assets/{useMcp-zjwReQ-Q.js → useMcp-BL9EJIG9.js} +2 -2
  257. package/dist/assets/{usePageRedirectionHelper-w7WYnki8.js → usePageRedirectionHelper--cm71zDE.js} +3 -3
  258. package/dist/assets/{usePinnedData-FgnIiWSJ.js → usePinnedData-D1DKG6vB.js} +6 -6
  259. package/dist/assets/{usePushConnection-DL83_AN-.js → usePushConnection-DbVAGHmZ.js} +12 -16
  260. package/dist/assets/{useRunWorkflow-DfbxLgl-.js → useRunWorkflow-CBEpMo-i.js} +106 -486
  261. package/dist/assets/{useSettingsItems-CNv2tIdk.js → useSettingsItems-DDLH7vvJ.js} +5 -5
  262. package/dist/assets/{useTelemetryContext-B3sCbxNK.js → useTelemetryContext-s869bjx6.js} +4 -4
  263. package/dist/assets/{useWorkflowsCache-BG2C8qik.js → useWorkflowsCache-Cwc7AaSS.js} +2 -2
  264. package/dist/assets/{userRoleProvisioning.store-6aoaalkv.js → userRoleProvisioning.store-r3gAhXvj.js} +3 -3
  265. package/dist/assets/{builder.store-D6GyopzN.js → users.store-Dh2O3NbU.js} +22801 -23949
  266. package/dist/assets/utils-5SA0VwN3.js +133 -0
  267. package/dist/assets/{versions.store-a3DCEQMP.js → versions.store-BIW6cbdc.js} +4 -4
  268. package/dist/assets/{vue-Dg_43WEg.js → vue-atn33zIp.js} +255 -213
  269. package/dist/assets/{vue-json-pretty-DGKuDe33.js → vue-json-pretty-CTqCbq0T.js} +1 -1
  270. package/dist/assets/{vue.runtime.esm-bundler-tP5dCd7J.js → vue.runtime.esm-bundler-XtMkEjzB.js} +703 -538
  271. package/dist/assets/{worker-CIvWfg3a.js → worker-BnP12nj7.js} +10 -3
  272. package/dist/index.html +116 -120
  273. package/package.json +1 -1
  274. package/tsconfig.json +1 -1
  275. package/dist/assets/AnimatedSpinner-wiGFgffA.js +0 -15
  276. package/dist/assets/BottomMenu-CRVyIu-B.css +0 -474
  277. package/dist/assets/ChatAgentAvatar-DAg-f4vg.js +0 -67
  278. package/dist/assets/CollectionParameter-Y2KojQS6.js +0 -50
  279. package/dist/assets/DemoFooter-CySiu1O2.js +0 -63
  280. package/dist/assets/FixedCollectionParameter-B__avC2s.js +0 -494
  281. package/dist/assets/FixedCollectionParameter-DT3ELzS9.css +0 -202
  282. package/dist/assets/ItemsRenderer-B8E9eO9o.js +0 -922
  283. package/dist/assets/LogsPanel-Cei4fiyW.js +0 -50
  284. package/dist/assets/NodeCreator-OSIpRI6S.css +0 -1649
  285. package/dist/assets/PageViewLayout-BHSzOio1.js +0 -12
  286. package/dist/assets/PrebuiltAgentTemplatesView-C274fvLb.js +0 -152
  287. package/dist/assets/PrebuiltAgentTemplatesView-jF7HvWnL.css +0 -166
  288. package/dist/assets/RunDataHtml-CX8Hqg6s.js +0 -7
  289. package/dist/assets/RunDataParsedAiContent-C3de0i2J.js +0 -24
  290. package/dist/assets/SaveButton-DGuEjyOq.js +0 -89
  291. package/dist/assets/SettingsView-Clf40hKH.js +0 -88
  292. package/dist/assets/VirtualSchema-zUWStOer.js +0 -34
  293. package/dist/assets/WorkflowActivationErrorMessage-v37Lr_Ej.js +0 -17
  294. package/dist/assets/WorkflowActivator-BGcCOUCH.css +0 -391
  295. package/dist/assets/WorkflowActivator-DW5QJWKR.js +0 -362
  296. package/dist/assets/core-BbiIkN91.js +0 -4
  297. package/dist/assets/empty-DUjwPfU3.js +0 -2125
  298. package/dist/assets/en-DyO2pPiC.js +0 -2
  299. package/dist/assets/path-browserify-CJwRhuT8.js +0 -328
  300. package/dist/assets/schemaPreview.store-ngPsbwff.js +0 -113
  301. package/dist/assets/uniqBy-BInks7VO.js +0 -10
  302. package/dist/assets/useBeforeUnload-BNDKBmDK.js +0 -40
  303. package/dist/assets/useCommandBar-Ddao4vJv.js +0 -2425
  304. package/dist/assets/useCustomAgent-DA57piBT.js +0 -471
  305. package/dist/assets/useRecentResources-D-zHnbqB.js +0 -118
  306. package/dist/assets/useWorkflowActivate-Ct_BovMQ.js +0 -152
  307. package/dist/assets/utils-C2GPI2gK.js +0 -54
  308. /package/dist/assets/{CalendarDate-zWqgZMlk.js → CalendarDate-CogIFc4_.js} +0 -0
  309. /package/dist/assets/{_plugin-vue_export-helper-BwBpWJRZ.js → _plugin-vue_export-helper-fRq25RGE.js} +0 -0
  310. /package/dist/assets/{fileUtils-D_SiS8no.js → fileUtils-C-Bxka0b.js} +0 -0
  311. /package/dist/assets/{mcp.constants-DQPD3Ntp.js → mcp.constants-Djm5lWYR.js} +0 -0
  312. /package/dist/assets/{preload-helper-CR0ecmWK.js → preload-helper-D8n1yiy9.js} +0 -0
  313. /package/dist/assets/{retry-dP46utx2.js → retry-BLsJRFf0.js} +0 -0
  314. /package/dist/assets/{smartDecimal-DK6-_VSq.js → smartDecimal-D3Shg2YQ.js} +0 -0
  315. /package/dist/assets/{sortByProperty-CV1aCzkS.js → sortByProperty-Dip6DXbv.js} +0 -0
  316. /package/dist/assets/{sqlite3-opfs-async-proxy-vVtmDGHX.js → sqlite3-opfs-async-proxy-BrtqH9Si.js} +0 -0
  317. /package/dist/assets/{xml-B6veOr9z.js → xml-Cf0o4TxQ.js} +0 -0
@@ -1,64 +1,53 @@
1
- import { o as __toESM } from "./chunk-6z4oVpB-.js";
2
- import { $t as hasOwn, C as computed, Cn as toDisplayString, D as createElementBlock, E as createCommentVNode, G as nextTick, Gt as unref, It as ref, J as onBeforeUnmount, L as h, M as createVNode, P as defineComponent, T as createBlock, Z as onMounted, _ as Fragment, _t as watch, at as renderSlot, bn as normalizeStyle, bt as withCtx, c as useCssModule, en as hyphenate, et as openBlock, it as renderList, j as createTextVNode, mt as useTemplateRef, ot as resolveComponent, p as vShow, q as onBeforeMount, tn as init_shared_esm_bundler, vn as normalizeClass, w as createBaseVNode, xt as withDirectives } from "./vue.runtime.esm-bundler-tP5dCd7J.js";
3
- import { M as useLocalStorage, _t as useI18n, vt as I18nT, w as useDocumentVisibility } from "./_MapCache-ficiegRb.js";
4
- import { Sn as N8nButton_default, T as N8nRadioButtons_default, b as SuggestedActions_default, c as N8nInlineTextEdit_default, h as N8nUserStack_default, ht as N8nTooltip_default, lt as N8nBadge_default, ot as N8nActionDropdown_default, wn as N8nIcon_default, x as N8nTag_default, xt as N8nIconButton_default } from "./src-XLGanEOK.js";
5
- import "./en-CF30SCh2.js";
6
- import { t as __vitePreload } from "./preload-helper-CR0ecmWK.js";
7
- import { t as __plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BwBpWJRZ.js";
8
- import { T as createEventBus, v as useRoute, y as useRouter } from "./truncate-B1HVeveJ.js";
9
- import { $i as nodeViewEventBus, A as telemetry, Dr as useUsersStore, Ec as STORES, Ft as useEvaluationStore, M as useNDVStore, N as useWorkflowsStore, Nt as useNodeTypesStore, O as useTelemetry, Qn as ProjectTypes, Rn as useWorkflowHelpers, S as getBannerRowHeight, Vn as useTagsStore, Xn as useProjectsStore, Yn as useDocumentTitle, Zn as useSourceControlStore, _ as require_FileSaver_min, _a as PROJECT_MOVE_RESOURCE_MODAL, gs as useSettingsStore, h as useNpsSurveyStore, hi as getActivatableTriggerNodes, li as ResourceType, m as useMessage, n as useWorkflowSaving, oa as useUIStore, v as useToast, vr as hasPermission } from "./builder.store-D6GyopzN.js";
10
- import "./empty-DUjwPfU3.js";
11
- import "./sanitize-html-fRP2gWb9.js";
12
- import "./CalendarDate-zWqgZMlk.js";
13
- import "./path-browserify-CJwRhuT8.js";
14
- import { Ac as TIME, Ao as getResourcePermissions, Bo as VIEWS, Cs as WORKFLOW_PUBLISH_MODAL_KEY, Gc as WORKFLOW_MENU_ACTIONS, Ps as LOCAL_STORAGE_HIDE_GITHUB_STAR_BUTTON, Sc as EnterpriseEditionFeature, Ss as WORKFLOW_HISTORY_VERSION_UNPUBLISH, Ts as WORKFLOW_SHARE_MODAL_KEY, _s as WORKFLOW_DESCRIPTION_MODAL_KEY, a as IS_DRAFT_PUBLISH_ENABLED, as as MODAL_CONFIRM, es as IMPORT_WORKFLOW_URL_MODAL_KEY, fr as TIME_SAVED_NODE_TYPE, g as EVALUATIONS_DOCS_URL, gs as WORKFLOW_ACTIVE_MODAL_KEY, h as ERROR_WORKFLOW_DOCS_URL, o as MAX_WORKFLOW_NAME_LENGTH, qo as DUPLICATE_MODAL_KEY, sr as STICKY_NODE_TYPE, v as N8N_MAIN_GITHUB_REPO_URL, w as TIME_SAVED_DOCS_URL, ws as WORKFLOW_SETTINGS_MODAL_KEY, zo as MAIN_HEADER_TABS } from "./constants-DRIItkNt.js";
15
- import "./merge-k8vSyyXH.js";
16
- import { k as defineStore, r as useRootStore } from "./_baseOrderBy-UJkFlXQy.js";
17
- import "./dateformat-CM9k0--B.js";
18
- import { n as require_debounce, t as useDebounce } from "./useDebounce-Bnb8W2LR.js";
19
- import "./assistant.store-CiyiixCh.js";
20
- import "./retry-dP46utx2.js";
21
- import { t as useExecutionsStore } from "./executions.store-a5l7sYPn.js";
22
- import { i as usePushConnectionStore } from "./useRunWorkflow-DfbxLgl-.js";
23
- import "./usePinnedData-FgnIiWSJ.js";
24
- import "./nodeCreator.store-DTc1zzIQ.js";
25
- import "./nodeIcon-BWuZ9Qxh.js";
26
- import "./useCanvasOperations-DmDkQZsZ.js";
27
- import { t as useFoldersStore } from "./folders.store-j6Xz9xvI.js";
28
- import "./NodeIcon-BbsF7HzQ.js";
29
- import "./KeyboardShortcutTooltip-Bg_9TS__.js";
30
- import "./versions.store-a3DCEQMP.js";
31
- import { t as usePageRedirectionHelper } from "./usePageRedirectionHelper-w7WYnki8.js";
32
- import { t as useBannersStore } from "./banners.store-D47aZI1r.js";
33
- import "./dataTable.store-CkhtfeY0.js";
34
- import "./ProjectIcon-CNEqHlzp.js";
35
- import "./schemaPreview.store-ngPsbwff.js";
36
- import { t as EnterpriseEdition_ee_default } from "./EnterpriseEdition.ee-CFcDsU4a.js";
37
- import { t as TimeAgo_default } from "./TimeAgo-0Rdm0Kiq.js";
38
- import "./roles.store-W8yXuo53.js";
39
- import { t as SaveButton_default } from "./SaveButton-DGuEjyOq.js";
40
- import { t as router_default } from "./router-RpMr830s.js";
41
- import "./TagsDropdown-8x1FnXzA.js";
42
- import { t as WorkflowTagsDropdown_default } from "./WorkflowTagsDropdown-BHpackqb.js";
43
- import "./sso.store-B7JPsojt.js";
44
- import "./insights.store-EBGeDNzp.js";
45
- import "./insights.constants-C8GITe6H.js";
46
- import "./insights.utils-B7OXsqrQ.js";
47
- import { a as MCP_DOCS_PAGE_URL, s as MCP_SETTINGS_VIEW } from "./mcp.constants-DQPD3Ntp.js";
48
- import "./constants-DLTaaipl.js";
49
- import "./useRecentResources-D-zHnbqB.js";
50
- import { t as useMcp } from "./useMcp-zjwReQ-Q.js";
51
- import { t as useWorkflowActivate } from "./useWorkflowActivate-Ct_BovMQ.js";
52
- import "./WorkflowActivationErrorMessage-v37Lr_Ej.js";
53
- import { i as getLastPublishedVersion, r as generateVersionName } from "./utils-C2GPI2gK.js";
54
- import "./ProjectBreadcrumb-C78U49qA.js";
55
- import { n as FolderBreadcrumbs_default, t as WorkflowActivator_default } from "./WorkflowActivator-DW5QJWKR.js";
56
- import { t as PushConnectionTracker_default } from "./PushConnectionTracker-CY-LPI6v.js";
57
- import { t as useWorkflowSettingsCache } from "./useWorkflowsCache-BG2C8qik.js";
58
- import { t as useBeforeUnload } from "./useBeforeUnload-BNDKBmDK.js";
59
- import { t as usePushConnection } from "./usePushConnection-DL83_AN-.js";
60
- import "./aiTemplatesStarterCollection.store-BuNUUCwa.js";
61
- import "./readyToRun.store-DfU30_Nq.js";
1
+ import { o as __toESM } from "./chunk-r2Y0G7H8.js";
2
+ import { $t as hasOwn, C as computed, Cn as toDisplayString, D as createElementBlock, E as createCommentVNode, G as nextTick, Gt as unref, It as ref, J as onBeforeUnmount, L as h, M as createVNode, P as defineComponent, T as createBlock, Z as onMounted, _ as Fragment, _t as watch, at as renderSlot, bn as normalizeStyle, bt as withCtx, c as useCssModule, en as hyphenate, et as openBlock, it as renderList, j as createTextVNode, mt as useTemplateRef, ot as resolveComponent, p as vShow, q as onBeforeMount, tn as init_shared_esm_bundler, vn as normalizeClass, w as createBaseVNode, xt as withDirectives } from "./vue.runtime.esm-bundler-XtMkEjzB.js";
3
+ import { M as useLocalStorage, _t as useI18n, w as useDocumentVisibility } from "./_MapCache-DkLivSSb.js";
4
+ import { E as N8nRadioButtons_default, Ot as N8nIconButton_default, S as N8nTag_default, St as N8nTooltip_default, ft as N8nActionDropdown_default, g as N8nUserStack_default, ht as N8nBadge_default, jn as N8nIcon_default, kn as N8nButton_default, l as N8nInlineTextEdit_default, x as SuggestedActions_default } from "./src-DpZSuyLC.js";
5
+ import { t as __vitePreload } from "./preload-helper-D8n1yiy9.js";
6
+ import { t as __plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-fRq25RGE.js";
7
+ import { T as createEventBus, v as useRoute, y as useRouter } from "./truncate-BrM_9cme.js";
8
+ import { Bt as ProjectTypes, C as useNodeTypesStore, Dt as useTagsStore, Ft as useNDVStore, Mt as useTelemetry, Pt as telemetry, T as useEvaluationStore, an as useDocumentTitle, bc as getBannerRowHeight, br as useToast, fi as ResourceType, gr as useMessage, hr as useSourceControlStore, ls as useSettingsStore, na as nodeViewEventBus, on as useWorkflowSaving, r as useUIStore, rr as hasPermission, s as useWorkflowsStore, sn as useWorkflowAutosaveStore, t as useUsersStore, va as PROJECT_MOVE_RESOURCE_MODAL, vi as getActivatableTriggerNodes, wt as useWorkflowHelpers, yr as require_FileSaver_min, zt as useProjectsStore } from "./users.store-Dh2O3NbU.js";
9
+ import "./sanitize-html-DeDnsMgc.js";
10
+ import "./empty-nq5-pHAR.js";
11
+ import { $o as IMPORT_WORKFLOW_URL_MODAL_KEY, Cs as WORKFLOW_SHARE_MODAL_KEY, Ko as DUPLICATE_MODAL_KEY, Ms as LOCAL_STORAGE_HIDE_GITHUB_STAR_BUTTON, Ro as MAIN_HEADER_TABS, Ss as WORKFLOW_SETTINGS_MODAL_KEY, Wc as WORKFLOW_MENU_ACTIONS, bc as EnterpriseEditionFeature, bs as WORKFLOW_HISTORY_VERSION_UNPUBLISH, fr as TIME_SAVED_NODE_TYPE, g as EVALUATIONS_DOCS_URL, h as ERROR_WORKFLOW_DOCS_URL, hs as WORKFLOW_DESCRIPTION_MODAL_KEY, is as MODAL_CONFIRM, ko as getResourcePermissions, ms as WORKFLOW_ACTIVE_MODAL_KEY, o as MAX_WORKFLOW_NAME_LENGTH, sr as STICKY_NODE_TYPE, t as AutoSaveState, v as N8N_MAIN_GITHUB_REPO_URL, w as TIME_SAVED_DOCS_URL, wc as LOADING_ANIMATION_MIN_DURATION, xs as WORKFLOW_PUBLISH_MODAL_KEY, zo as VIEWS } from "./constants-D48cSFnx.js";
12
+ import "./merge-B0-p153C.js";
13
+ import { r as useRootStore } from "./_baseOrderBy-DvuuRU7J.js";
14
+ import { t as useBannersStore } from "./banners.store-CxccIpTM.js";
15
+ import "./dateformat-BeHi9sF4.js";
16
+ import { n as require_debounce, t as useDebounce } from "./useDebounce-C4ttil9E.js";
17
+ import "./versions.store-BIW6cbdc.js";
18
+ import "./dataTable.store-_wAVMcbO.js";
19
+ import { t as useExecutionsStore } from "./executions.store-SHgwsnWe.js";
20
+ import "./assistant.store-2i2uoZtV.js";
21
+ import "./usePinnedData-D1DKG6vB.js";
22
+ import "./nodeCreator.store-Dl91ajnd.js";
23
+ import "./canvas.utils-Dv0fD5Il.js";
24
+ import "./nodeIcon-CUi9_d-e.js";
25
+ import { r as canvasEventBus } from "./useCanvasOperations-DVIzBTSq.js";
26
+ import { t as useFoldersStore } from "./folders.store-D8rP_Hdz.js";
27
+ import "./ProjectIcon-gwTM9uPG.js";
28
+ import "./pushConnection.store-DEMBEciq.js";
29
+ import "./NodeIcon-CXamMxe5.js";
30
+ import "./useRunWorkflow-CBEpMo-i.js";
31
+ import { t as useCollaborationStore } from "./collaboration.store-BbSwTk_d.js";
32
+ import { t as TimeAgo_default } from "./TimeAgo-i_jQQBzo.js";
33
+ import "./roles.store-eBIJuaNR.js";
34
+ import { t as router_default } from "./router-zEaOc-tq.js";
35
+ import "./TagsDropdown-DGbottaK.js";
36
+ import { t as WorkflowTagsDropdown_default } from "./WorkflowTagsDropdown-C0g5t367.js";
37
+ import "./sso.store-9EWHvrSy.js";
38
+ import "./insights.store-BtoZsG-U.js";
39
+ import "./insights.constants-98xWnZQu.js";
40
+ import "./insights.utils-B0txVt0Q.js";
41
+ import { a as MCP_DOCS_PAGE_URL, s as MCP_SETTINGS_VIEW } from "./mcp.constants-Djm5lWYR.js";
42
+ import { t as useMcp } from "./useMcp-BL9EJIG9.js";
43
+ import { a as useWorkflowActivate, i as getLastPublishedVersion, r as generateVersionName } from "./utils-5SA0VwN3.js";
44
+ import "./ProjectBreadcrumb-D9hS-MYJ.js";
45
+ import { t as FolderBreadcrumbs_default } from "./FolderBreadcrumbs-CqjobwTB.js";
46
+ import { t as PushConnectionTracker_default } from "./PushConnectionTracker-BLfijnvC.js";
47
+ import { t as useWorkflowSettingsCache } from "./useWorkflowsCache-Cwc7AaSS.js";
48
+ import { t as usePushConnection } from "./usePushConnection-DbVAGHmZ.js";
49
+ import "./aiTemplatesStarterCollection.store-DUkMK-jk.js";
50
+ import "./readyToRun.store-D7MVH-Yc.js";
62
51
  var TabBar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
63
52
  __name: "TabBar",
64
53
  props: {
@@ -72,15 +61,15 @@ var TabBar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
72
61
  emit("update:modelValue", tab, event);
73
62
  }
74
63
  return (_ctx, _cache) => {
75
- return _ctx.items ? (openBlock(), createElementBlock("div", {
64
+ return __props.items ? (openBlock(), createElementBlock("div", {
76
65
  key: 0,
77
66
  class: normalizeClass({
78
67
  [_ctx.$style.container]: true,
79
68
  ["tab-bar-container"]: true
80
69
  })
81
70
  }, [createVNode(unref(N8nRadioButtons_default), {
82
- "model-value": _ctx.modelValue,
83
- options: _ctx.items,
71
+ "model-value": __props.modelValue,
72
+ options: __props.items,
84
73
  "onUpdate:modelValue": onUpdateModelValue
85
74
  }, null, 8, ["model-value", "options"])], 2)) : createCommentVNode("", true);
86
75
  };
@@ -417,8 +406,8 @@ var IntersectionObserved_default = /* @__PURE__ */ defineComponent({
417
406
  };
418
407
  }
419
408
  });
420
- var import_debounce = /* @__PURE__ */ __toESM(require_debounce());
421
- var _hoisted_1$2 = { class: "tags" };
409
+ var import_debounce = /* @__PURE__ */ __toESM(require_debounce(), 1);
410
+ var _hoisted_1$3 = { class: "tags" };
422
411
  var _hoisted_2$2 = ["onClick"];
423
412
  var TagsContainer_default = /* @__PURE__ */ __plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
424
413
  __name: "TagsContainer",
@@ -500,11 +489,11 @@ var TagsContainer_default = /* @__PURE__ */ __plugin_vue_export_helper_default(/
500
489
  threshold: 1,
501
490
  class: "tags-container",
502
491
  style: normalizeStyle(style.value),
503
- enabled: _ctx.responsive,
492
+ enabled: __props.responsive,
504
493
  "event-bus": unref(intersectionEventBus),
505
494
  onObserved
506
495
  }, {
507
- default: withCtx(() => [createBaseVNode("span", _hoisted_1$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(tags.value, (tag) => {
496
+ default: withCtx(() => [createBaseVNode("span", _hoisted_1$3, [(openBlock(true), createElementBlock(Fragment, null, renderList(tags.value, (tag) => {
508
497
  return openBlock(), createElementBlock("span", {
509
498
  key: tag.id,
510
499
  class: normalizeClass({ clickable: !tag.hidden }),
@@ -519,13 +508,13 @@ var TagsContainer_default = /* @__PURE__ */ __plugin_vue_export_helper_default(/
519
508
  key: 1,
520
509
  class: normalizeClass({ hideTag: tag.hidden }),
521
510
  "data-id": tag.id,
522
- enabled: _ctx.responsive,
511
+ enabled: __props.responsive,
523
512
  "event-bus": unref(intersectionEventBus)
524
513
  }, {
525
514
  default: withCtx(() => [createVNode(unref(N8nTag_default), {
526
515
  title: tag.name,
527
516
  text: tag.name,
528
- clickable: _ctx.clickable
517
+ clickable: __props.clickable
529
518
  }, null, 8, [
530
519
  "title",
531
520
  "text",
@@ -566,11 +555,11 @@ var WorkflowTagsContainer_default = /* @__PURE__ */ defineComponent({
566
555
  }
567
556
  return (_ctx, _cache) => {
568
557
  return openBlock(), createBlock(TagsContainer_default, {
569
- "tag-ids": _ctx.tagIds,
558
+ "tag-ids": __props.tagIds,
570
559
  "tags-by-id": tagsById.value,
571
- limit: _ctx.limit,
572
- clickable: _ctx.clickable,
573
- responsive: _ctx.responsive,
560
+ limit: __props.limit,
561
+ clickable: __props.clickable,
562
+ responsive: __props.responsive,
574
563
  onClick
575
564
  }, null, 8, [
576
565
  "tag-ids",
@@ -582,149 +571,6 @@ var WorkflowTagsContainer_default = /* @__PURE__ */ defineComponent({
582
571
  };
583
572
  }
584
573
  });
585
- var HEARTBEAT_INTERVAL = 5 * TIME.MINUTE;
586
- const useCollaborationStore = defineStore(STORES.COLLABORATION, () => {
587
- const pushStore = usePushConnectionStore();
588
- const workflowsStore = useWorkflowsStore();
589
- const usersStore = useUsersStore();
590
- const uiStore = useUIStore();
591
- const { addBeforeUnloadEventBindings, removeBeforeUnloadEventBindings, addBeforeUnloadHandler } = useBeforeUnload({ route: useRoute() });
592
- const unloadTimeout = ref(null);
593
- addBeforeUnloadHandler(() => {
594
- notifyWorkflowClosed();
595
- if (uiStore.stateIsDirty) unloadTimeout.value = setTimeout(() => notifyWorkflowOpened, 5 * TIME.SECOND);
596
- });
597
- const collaborators = ref([]);
598
- const heartbeatTimer = ref(null);
599
- const startHeartbeat = () => {
600
- stopHeartbeat();
601
- heartbeatTimer.value = window.setInterval(notifyWorkflowOpened, HEARTBEAT_INTERVAL);
602
- };
603
- const stopHeartbeat = () => {
604
- if (heartbeatTimer.value !== null) {
605
- clearInterval(heartbeatTimer.value);
606
- heartbeatTimer.value = null;
607
- }
608
- };
609
- const pushStoreEventListenerRemovalFn = ref(null);
610
- function initialize() {
611
- if (pushStoreEventListenerRemovalFn.value) return;
612
- pushStoreEventListenerRemovalFn.value = pushStore.addEventListener((event) => {
613
- if (event.type === "collaboratorsChanged" && event.data.workflowId === workflowsStore.workflowId) collaborators.value = event.data.collaborators;
614
- });
615
- addBeforeUnloadEventBindings();
616
- notifyWorkflowOpened();
617
- startHeartbeat();
618
- }
619
- function terminate() {
620
- if (typeof pushStoreEventListenerRemovalFn.value === "function") {
621
- pushStoreEventListenerRemovalFn.value();
622
- pushStoreEventListenerRemovalFn.value = null;
623
- }
624
- notifyWorkflowClosed();
625
- stopHeartbeat();
626
- pushStore.clearQueue();
627
- removeBeforeUnloadEventBindings();
628
- if (unloadTimeout.value) clearTimeout(unloadTimeout.value);
629
- }
630
- function notifyWorkflowOpened() {
631
- if (!workflowsStore.isWorkflowSaved[workflowsStore.workflowId]) return;
632
- pushStore.send({
633
- type: "workflowOpened",
634
- workflowId: workflowsStore.workflowId
635
- });
636
- }
637
- function notifyWorkflowClosed() {
638
- if (!workflowsStore.isWorkflowSaved[workflowsStore.workflowId]) return;
639
- pushStore.send({
640
- type: "workflowClosed",
641
- workflowId: workflowsStore.workflowId
642
- });
643
- collaborators.value = collaborators.value.filter(({ user }) => user.id !== usersStore.currentUserId);
644
- }
645
- return {
646
- collaborators,
647
- initialize,
648
- terminate,
649
- startHeartbeat,
650
- stopHeartbeat
651
- };
652
- });
653
- var CollaborationPane_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
654
- __name: "CollaborationPane",
655
- setup(__props) {
656
- const collaborationStore = useCollaborationStore();
657
- const usersStore = useUsersStore();
658
- watch(useDocumentVisibility(), (visibilityState) => {
659
- if (visibilityState === "hidden") collaborationStore.stopHeartbeat();
660
- else collaborationStore.startHeartbeat();
661
- });
662
- const showUserStack = computed(() => collaborationStore.collaborators.length > 1);
663
- const collaboratorsSorted = computed(() => {
664
- const users = collaborationStore.collaborators.map(({ user }) => user);
665
- const index = users.findIndex((user) => user.id === usersStore.currentUser?.id);
666
- if (index < 1) return { defaultGroup: users };
667
- const [currentUser] = users.splice(index, 1);
668
- return { defaultGroup: [currentUser, ...users] };
669
- });
670
- const currentUserEmail = computed(() => usersStore.currentUser?.email);
671
- onMounted(() => {
672
- collaborationStore.initialize();
673
- });
674
- onBeforeUnmount(() => {
675
- collaborationStore.terminate();
676
- });
677
- return (_ctx, _cache) => {
678
- return showUserStack.value ? (openBlock(), createElementBlock("div", {
679
- key: 0,
680
- class: normalizeClass(`collaboration-pane-container ${_ctx.$style.container}`),
681
- "data-test-id": "collaboration-pane"
682
- }, [createVNode(unref(N8nUserStack_default), {
683
- users: collaboratorsSorted.value,
684
- "current-user-email": currentUserEmail.value
685
- }, null, 8, ["users", "current-user-email"])], 2)) : createCommentVNode("", true);
686
- };
687
- }
688
- });
689
- var CollaborationPane_vue_vue_type_style_index_0_lang_module_default = { container: "_container_dsr9f_123" };
690
- var CollaborationPane_default = /* @__PURE__ */ __plugin_vue_export_helper_default(CollaborationPane_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": CollaborationPane_vue_vue_type_style_index_0_lang_module_default }]]);
691
- var _hoisted_1$1 = { key: 0 };
692
- var _hoisted_2$1 = { key: 1 };
693
- var WorkflowHistoryButton_default = /* @__PURE__ */ defineComponent({
694
- __name: "WorkflowHistoryButton",
695
- props: {
696
- workflowId: {},
697
- isNewWorkflow: { type: Boolean }
698
- },
699
- setup(__props) {
700
- const locale = useI18n();
701
- const props = __props;
702
- const workflowHistoryRoute = computed(() => ({
703
- name: VIEWS.WORKFLOW_HISTORY,
704
- params: { workflowId: props.workflowId }
705
- }));
706
- return (_ctx, _cache) => {
707
- const _component_RouterLink = resolveComponent("RouterLink");
708
- return _ctx.workflowId ? (openBlock(), createBlock(unref(N8nTooltip_default), {
709
- key: 0,
710
- placement: "bottom"
711
- }, {
712
- content: withCtx(() => [_ctx.isNewWorkflow ? (openBlock(), createElementBlock("span", _hoisted_1$1, toDisplayString(unref(locale).baseText("workflowHistory.button.tooltip.empty")), 1)) : (openBlock(), createElementBlock("span", _hoisted_2$1, toDisplayString(unref(locale).baseText("workflowHistory.button.tooltip")), 1))]),
713
- default: withCtx(() => [createVNode(_component_RouterLink, { to: workflowHistoryRoute.value }, {
714
- default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
715
- disabled: _ctx.isNewWorkflow,
716
- "data-test-id": "workflow-history-button",
717
- type: "highlight",
718
- icon: "history",
719
- size: "medium"
720
- }, null, 8, ["disabled"])]),
721
- _: 1
722
- }, 8, ["to"])]),
723
- _: 1
724
- })) : createCommentVNode("", true);
725
- };
726
- }
727
- });
728
574
  var INVALID_CHARS_REGEX = /[<>:"/\\|?*\u0000-\u001F\u007F-\u009F]/g;
729
575
  var ZERO_WIDTH_CHARS_REGEX = /[\u200B-\u200D\u2060\uFEFF]/g;
730
576
  var UNICODE_SPACES_REGEX = /[\u00A0\u2000-\u200A]/g;
@@ -763,7 +609,7 @@ var sanitizeFilename = (filename, maxLength = MAX_FILENAME_LENGTH) => {
763
609
  if (baseName.length > maxLength) baseName = baseName.slice(0, maxLength);
764
610
  return baseName;
765
611
  };
766
- var import_FileSaver_min = /* @__PURE__ */ __toESM(require_FileSaver_min());
612
+ var import_FileSaver_min = /* @__PURE__ */ __toESM(require_FileSaver_min(), 1);
767
613
  const getWorkflowId = (propId, routeName) => {
768
614
  return propId ?? (typeof routeName === "string" ? routeName : void 0);
769
615
  };
@@ -780,10 +626,8 @@ var ActionsDropdownMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE
780
626
  currentFolder: {},
781
627
  meta: {}
782
628
  },
783
- emits: ["workflow:saved"],
784
- setup(__props, { expose: __expose, emit: __emit }) {
629
+ setup(__props, { expose: __expose }) {
785
630
  const props = __props;
786
- const emit = __emit;
787
631
  const importFileRef = ref();
788
632
  const toast = useToast();
789
633
  const locale = useI18n();
@@ -973,7 +817,7 @@ var ActionsDropdownMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE
973
817
  break;
974
818
  case WORKFLOW_MENU_ACTIONS.DOWNLOAD: {
975
819
  const workflowData = await workflowHelpers.getWorkflowDataToSave();
976
- const { tags,...data } = workflowData;
820
+ const { tags, ...data } = workflowData;
977
821
  const exportData = {
978
822
  ...data,
979
823
  meta: {
@@ -981,7 +825,7 @@ var ActionsDropdownMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE
981
825
  instanceId: rootStore.instanceId
982
826
  },
983
827
  tags: (tags ?? []).map((tagId) => {
984
- const { usageCount,...tag } = tagsStore.tagsById[tagId];
828
+ const { usageCount, ...tag } = tagsStore.tagsById[tagId];
985
829
  return tag;
986
830
  })
987
831
  };
@@ -1000,7 +844,6 @@ var ActionsDropdownMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE
1000
844
  break;
1001
845
  case WORKFLOW_MENU_ACTIONS.PUSH:
1002
846
  try {
1003
- emit("workflow:saved");
1004
847
  router_default.push({ query: {
1005
848
  ...route.query,
1006
849
  sourceControl: "push"
@@ -1090,153 +933,97 @@ var ActionsDropdownMenu_vue_vue_type_style_index_0_lang_module_default = {
1090
933
  hiddenInput: "_hiddenInput_ntqfl_132"
1091
934
  };
1092
935
  var ActionsDropdownMenu_default = /* @__PURE__ */ __plugin_vue_export_helper_default(ActionsDropdownMenu_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": ActionsDropdownMenu_vue_vue_type_style_index_0_lang_module_default }]]);
1093
- var WorkflowHeaderActions_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
1094
- __name: "WorkflowHeaderActions",
936
+ var _hoisted_1$2 = { key: 0 };
937
+ var _hoisted_2$1 = { key: 1 };
938
+ var WorkflowHistoryButton_default = /* @__PURE__ */ defineComponent({
939
+ __name: "WorkflowHistoryButton",
1095
940
  props: {
1096
- readOnly: { type: Boolean },
1097
- id: {},
1098
- tags: {},
1099
- name: {},
1100
- meta: {},
1101
- active: { type: Boolean },
1102
- currentFolder: {},
1103
- isArchived: { type: Boolean },
1104
- isNewWorkflow: { type: Boolean },
1105
- workflowPermissions: {}
941
+ workflowId: {},
942
+ isNewWorkflow: { type: Boolean }
1106
943
  },
1107
- emits: ["workflow:deactivated", "workflow:saved"],
1108
- setup(__props, { expose: __expose, emit: __emit }) {
1109
- const i18n = useI18n();
1110
- const uiStore = useUIStore();
1111
- const telemetry$1 = useTelemetry();
1112
- const usersStore = useUsersStore();
1113
- const route = useRoute();
1114
- const pageRedirectionHelper = usePageRedirectionHelper();
1115
- const $style = useCssModule();
944
+ setup(__props) {
945
+ const locale = useI18n();
1116
946
  const props = __props;
1117
- const emit = __emit;
1118
- const isWorkflowSaving = computed(() => {
1119
- return uiStore.isActionActive.workflowSaving;
947
+ const uiStore = useUIStore();
948
+ const isWorkflowSaving = ref(false);
949
+ const { debounce: debounce$1 } = useDebounce();
950
+ const debouncedRemoveSaveIndicator = debounce$1(() => {
951
+ isWorkflowSaving.value = false;
952
+ }, {
953
+ debounceTime: LOADING_ANIMATION_MIN_DURATION,
954
+ trailing: true
1120
955
  });
1121
- const actionsMenuRef = useTemplateRef("actionsMenu");
1122
- const importFileRef = computed(() => actionsMenuRef.value?.importFileRef);
1123
- const onWorkflowActiveToggle = async (value) => {
1124
- if (!value.active) emit("workflow:deactivated");
1125
- };
1126
- function onShareButtonClick() {
1127
- uiStore.openModalWithData({
1128
- name: WORKFLOW_SHARE_MODAL_KEY,
1129
- data: { id: props.id }
1130
- });
1131
- telemetry$1.track("User opened sharing modal", {
1132
- workflow_id: props.id,
1133
- user_id_sharer: usersStore.currentUser?.id,
1134
- sub_view: route.name === VIEWS.WORKFLOWS ? "Workflows listing" : "Workflow editor"
1135
- });
1136
- }
1137
- function goToUpgrade() {
1138
- pageRedirectionHelper.goToUpgrade("workflow_sharing", "upgrade-workflow-sharing");
1139
- }
1140
- __expose({ importFileRef });
956
+ watch(() => uiStore.isActionActive.workflowSaving, (value) => {
957
+ if (value) isWorkflowSaving.value = true;
958
+ else debouncedRemoveSaveIndicator();
959
+ });
960
+ const workflowHistoryRoute = computed(() => ({
961
+ name: VIEWS.WORKFLOW_HISTORY,
962
+ params: { workflowId: props.workflowId }
963
+ }));
1141
964
  return (_ctx, _cache) => {
1142
- return openBlock(), createElementBlock("div", { class: normalizeClass(unref($style).container) }, [
1143
- createBaseVNode("span", { class: normalizeClass([unref($style).activator, unref($style).group]) }, [createVNode(WorkflowActivator_default, {
1144
- "is-archived": _ctx.isArchived,
1145
- "workflow-active": _ctx.active,
1146
- "workflow-id": _ctx.id,
1147
- "workflow-permissions": _ctx.workflowPermissions,
1148
- "onUpdate:workflowActive": onWorkflowActiveToggle
1149
- }, null, 8, [
1150
- "is-archived",
1151
- "workflow-active",
1152
- "workflow-id",
1153
- "workflow-permissions"
1154
- ])], 2),
1155
- createVNode(EnterpriseEdition_ee_default, { features: [unref(EnterpriseEditionFeature).Sharing] }, {
1156
- fallback: withCtx(() => [createVNode(unref(N8nTooltip_default), null, {
1157
- content: withCtx(() => [createVNode(unref(I18nT), {
1158
- keypath: unref(uiStore).contextBasedTranslationKeys.workflows.sharing.unavailable.description.tooltip,
1159
- tag: "span",
1160
- scope: "global"
1161
- }, {
1162
- action: withCtx(() => [createBaseVNode("a", { onClick: goToUpgrade }, toDisplayString(unref(i18n).baseText(unref(uiStore).contextBasedTranslationKeys.workflows.sharing.unavailable.button)), 1)]),
1163
- _: 1
1164
- }, 8, ["keypath"])]),
1165
- default: withCtx(() => [createVNode(unref(N8nButton_default), {
1166
- type: "secondary",
1167
- class: normalizeClass(["mr-2xs", unref($style).disabledShareButton])
1168
- }, {
1169
- default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("workflowDetails.share")), 1)]),
1170
- _: 1
1171
- }, 8, ["class"])]),
1172
- _: 1
1173
- })]),
1174
- default: withCtx(() => [createBaseVNode("div", { class: normalizeClass(unref($style).group) }, [!_ctx.isNewWorkflow ? (openBlock(), createBlock(CollaborationPane_default, { key: 0 })) : createCommentVNode("", true), createVNode(unref(N8nButton_default), {
1175
- type: "secondary",
1176
- "data-test-id": "workflow-share-button",
1177
- onClick: onShareButtonClick
1178
- }, {
1179
- default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("workflowDetails.share")), 1)]),
1180
- _: 1
1181
- })], 2)]),
965
+ const _component_RouterLink = resolveComponent("RouterLink");
966
+ return __props.workflowId ? (openBlock(), createBlock(unref(N8nTooltip_default), {
967
+ key: 0,
968
+ placement: "bottom",
969
+ "show-after": 300
970
+ }, {
971
+ content: withCtx(() => [__props.isNewWorkflow ? (openBlock(), createElementBlock("span", _hoisted_1$2, toDisplayString(unref(locale).baseText("workflowHistory.button.tooltip.empty")), 1)) : (openBlock(), createElementBlock("span", _hoisted_2$1, toDisplayString(unref(locale).baseText("workflowHistory.button.tooltip")), 1))]),
972
+ default: withCtx(() => [createVNode(_component_RouterLink, { to: workflowHistoryRoute.value }, {
973
+ default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
974
+ disabled: __props.isNewWorkflow,
975
+ loading: isWorkflowSaving.value,
976
+ "data-test-id": "workflow-history-button",
977
+ type: "highlight",
978
+ icon: "history",
979
+ size: "medium"
980
+ }, null, 8, ["disabled", "loading"])]),
1182
981
  _: 1
1183
- }, 8, ["features"]),
1184
- createBaseVNode("div", { class: normalizeClass(unref($style).group) }, [
1185
- createVNode(SaveButton_default, {
1186
- type: "primary",
1187
- saved: !unref(uiStore).stateIsDirty && !_ctx.isNewWorkflow,
1188
- disabled: isWorkflowSaving.value || _ctx.readOnly || _ctx.isArchived || !_ctx.isNewWorkflow && !_ctx.workflowPermissions.update,
1189
- "is-saving": isWorkflowSaving.value,
1190
- "with-shortcut": !_ctx.readOnly && !_ctx.isArchived && _ctx.workflowPermissions.update,
1191
- "shortcut-tooltip": unref(i18n).baseText("saveWorkflowButton.hint"),
1192
- "data-test-id": "workflow-save-button",
1193
- onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("workflow:saved"))
1194
- }, null, 8, [
1195
- "saved",
1196
- "disabled",
1197
- "is-saving",
1198
- "with-shortcut",
1199
- "shortcut-tooltip"
1200
- ]),
1201
- createVNode(WorkflowHistoryButton_default, {
1202
- "workflow-id": props.id,
1203
- "is-new-workflow": _ctx.isNewWorkflow
1204
- }, null, 8, ["workflow-id", "is-new-workflow"]),
1205
- createVNode(ActionsDropdownMenu_default, {
1206
- id: _ctx.id,
1207
- ref: "actionsMenu",
1208
- "workflow-permissions": _ctx.workflowPermissions,
1209
- "is-new-workflow": _ctx.isNewWorkflow,
1210
- "read-only": _ctx.readOnly,
1211
- "is-archived": _ctx.isArchived,
1212
- name: _ctx.name,
1213
- tags: _ctx.tags,
1214
- "current-folder": _ctx.currentFolder,
1215
- meta: _ctx.meta,
1216
- "onWorkflow:saved": _cache[1] || (_cache[1] = ($event) => _ctx.$emit("workflow:saved"))
1217
- }, null, 8, [
1218
- "id",
1219
- "workflow-permissions",
1220
- "is-new-workflow",
1221
- "read-only",
1222
- "is-archived",
1223
- "name",
1224
- "tags",
1225
- "current-folder",
1226
- "meta"
1227
- ])
1228
- ], 2)
1229
- ], 2);
982
+ }, 8, ["to"])]),
983
+ _: 1
984
+ })) : createCommentVNode("", true);
1230
985
  };
1231
986
  }
1232
987
  });
1233
- var WorkflowHeaderActions_vue_vue_type_style_index_0_lang_module_default = {
1234
- container: "_container_uqc1z_123",
1235
- activator: "_activator_uqc1z_127",
1236
- group: "_group_uqc1z_138",
1237
- disabledShareButton: "_disabledShareButton_uqc1z_143"
1238
- };
1239
- var WorkflowHeaderActions_default = /* @__PURE__ */ __plugin_vue_export_helper_default(WorkflowHeaderActions_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": WorkflowHeaderActions_vue_vue_type_style_index_0_lang_module_default }]]);
988
+ var CollaborationPane_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
989
+ __name: "CollaborationPane",
990
+ setup(__props) {
991
+ const collaborationStore = useCollaborationStore();
992
+ const usersStore = useUsersStore();
993
+ watch(useDocumentVisibility(), (visibilityState) => {
994
+ if (visibilityState === "hidden") collaborationStore.stopHeartbeat();
995
+ else collaborationStore.startHeartbeat();
996
+ });
997
+ const showUserStack = computed(() => collaborationStore.collaborators.length > 1);
998
+ const collaboratorsSorted = computed(() => {
999
+ const users = collaborationStore.collaborators.map(({ user }) => user);
1000
+ const index = users.findIndex((user) => user.id === usersStore.currentUser?.id);
1001
+ if (index < 1) return { defaultGroup: users };
1002
+ const [currentUser] = users.splice(index, 1);
1003
+ return { defaultGroup: [currentUser, ...users] };
1004
+ });
1005
+ const currentUserEmail = computed(() => usersStore.currentUser?.email);
1006
+ onMounted(() => {
1007
+ collaborationStore.initialize();
1008
+ });
1009
+ onBeforeUnmount(() => {
1010
+ collaborationStore.terminate();
1011
+ });
1012
+ return (_ctx, _cache) => {
1013
+ return showUserStack.value ? (openBlock(), createElementBlock("div", {
1014
+ key: 0,
1015
+ class: normalizeClass(`collaboration-pane-container ${_ctx.$style.container}`),
1016
+ "data-test-id": "collaboration-pane"
1017
+ }, [createVNode(unref(N8nUserStack_default), {
1018
+ users: collaboratorsSorted.value,
1019
+ "current-user-email": currentUserEmail.value
1020
+ }, null, 8, ["users", "current-user-email"])], 2)) : createCommentVNode("", true);
1021
+ };
1022
+ }
1023
+ });
1024
+ var CollaborationPane_vue_vue_type_style_index_0_lang_module_default = { container: "_container_dsr9f_123" };
1025
+ var CollaborationPane_default = /* @__PURE__ */ __plugin_vue_export_helper_default(CollaborationPane_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": CollaborationPane_vue_vue_type_style_index_0_lang_module_default }]]);
1026
+ var _hoisted_1$1 = { "data-test-id": "workflow-active-version-indicator" };
1240
1027
  var WorkflowHeaderDraftPublishActions_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
1241
1028
  __name: "WorkflowHeaderDraftPublishActions",
1242
1029
  props: {
@@ -1250,60 +1037,144 @@ var WorkflowHeaderDraftPublishActions_vue_vue_type_script_setup_true_lang_defaul
1250
1037
  isNewWorkflow: { type: Boolean },
1251
1038
  workflowPermissions: {}
1252
1039
  },
1253
- emits: ["workflow:saved"],
1254
1040
  setup(__props, { expose: __expose }) {
1255
1041
  const props = __props;
1256
1042
  const actionsMenuRef = useTemplateRef("actionsMenu");
1257
- const locale = useI18n();
1043
+ const readOnlyForPublish = computed(() => {
1044
+ if (props.isNewWorkflow) return props.readOnly;
1045
+ return props.readOnly || props.isArchived || !props.workflowPermissions.update || !props.workflowPermissions.publish;
1046
+ });
1047
+ const shouldHidePublishButton = computed(() => {
1048
+ return props.readOnly || props.isArchived || !props.workflowPermissions.update;
1049
+ });
1258
1050
  const uiStore = useUIStore();
1259
1051
  const workflowsStore = useWorkflowsStore();
1260
1052
  const i18n = useI18n();
1261
- const { saveCurrentWorkflow } = useWorkflowSaving({ router: useRouter() });
1053
+ const router = useRouter();
1054
+ const autosaveStore = useWorkflowAutosaveStore();
1055
+ const { saveCurrentWorkflow, cancelAutoSave } = useWorkflowSaving({ router });
1262
1056
  const autoSaveForPublish = ref(false);
1263
- const isWorkflowSaving = computed(() => {
1264
- return uiStore.isActionActive.workflowSaving && !autoSaveForPublish.value;
1265
- });
1266
1057
  const importFileRef = computed(() => actionsMenuRef.value?.importFileRef);
1267
- const onPublishButtonClick = async () => {
1268
- if (uiStore.stateIsDirty || props.isNewWorkflow) {
1058
+ const foundTriggers = computed(() => getActivatableTriggerNodes(workflowsStore.workflowTriggerNodes));
1059
+ const containsTrigger = computed(() => {
1060
+ return foundTriggers.value.length > 0;
1061
+ });
1062
+ const workflowPublishState = computed(() => {
1063
+ const hasBeenPublished = !!workflowsStore.workflow.activeVersion;
1064
+ const hasChanges = workflowsStore.workflow.versionId !== workflowsStore.workflow.activeVersion?.versionId || uiStore.stateIsDirty;
1065
+ if (!hasBeenPublished) return containsTrigger.value && !workflowsStore.nodesIssuesExist ? "not-published-eligible" : "not-published-not-eligible";
1066
+ if (!containsTrigger.value) return "published-invalid-trigger";
1067
+ if (workflowsStore.nodesIssuesExist) return "published-node-issues";
1068
+ return hasChanges ? "published-with-changes" : "published-no-changes";
1069
+ });
1070
+ const saveBeforePublish = async () => {
1071
+ let saved = false;
1072
+ if (autosaveStore.autoSaveState === AutoSaveState.InProgress && autosaveStore.pendingAutoSave) {
1073
+ autoSaveForPublish.value = true;
1074
+ try {
1075
+ await autosaveStore.pendingAutoSave;
1076
+ saved = true;
1077
+ } catch {} finally {
1078
+ autoSaveForPublish.value = false;
1079
+ }
1080
+ } else if (autosaveStore.autoSaveState === AutoSaveState.Scheduled) cancelAutoSave();
1081
+ if (!saved || uiStore.stateIsDirty || props.isNewWorkflow) {
1269
1082
  autoSaveForPublish.value = true;
1270
- const saved = await saveCurrentWorkflow({}, true);
1083
+ saved = await saveCurrentWorkflow({}, true);
1271
1084
  autoSaveForPublish.value = false;
1272
- if (!saved) return;
1085
+ }
1086
+ return saved;
1087
+ };
1088
+ const onPublishButtonClick = async () => {
1089
+ if (uiStore.stateIsDirty || props.isNewWorkflow) {
1090
+ if (!await saveBeforePublish()) return;
1273
1091
  }
1274
1092
  uiStore.openModalWithData({
1275
1093
  name: WORKFLOW_PUBLISH_MODAL_KEY,
1276
1094
  data: {}
1277
1095
  });
1278
1096
  };
1279
- const foundTriggers = computed(() => getActivatableTriggerNodes(workflowsStore.workflowTriggerNodes));
1280
- const containsTrigger = computed(() => {
1281
- return foundTriggers.value.length > 0;
1282
- });
1283
- const isWorkflowSaved = computed(() => {
1284
- return !uiStore.stateIsDirty && !props.isNewWorkflow;
1285
- });
1286
- const publishButtonEnabled = computed(() => {
1287
- if (!props.workflowPermissions.publish) return false;
1288
- if (!containsTrigger.value) return false;
1289
- if (workflowsStore.nodesIssuesExist) return false;
1290
- return workflowsStore.workflow.versionId && workflowsStore.workflow.versionId !== workflowsStore.workflow.activeVersion?.versionId || uiStore.stateIsDirty;
1291
- });
1292
- const publishTooltipText = computed(() => {
1293
- if (!props.workflowPermissions.publish) return i18n.baseText("workflows.publish.permissionDenied");
1294
- const wfHasAnyChanges = workflowsStore.workflow.versionId !== workflowsStore.workflow.activeVersion?.versionId;
1295
- if (!containsTrigger.value) return i18n.baseText("workflows.publishModal.noTriggerMessage");
1296
- if (workflowsStore.nodesIssuesExist) return i18n.baseText("workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.title", {
1297
- interpolate: { count: workflowsStore.nodesWithIssues.length },
1298
- adjustToNumber: workflowsStore.nodesWithIssues.length
1299
- });
1300
- if (!wfHasAnyChanges && !uiStore.stateIsDirty) return i18n.baseText("workflows.publishModal.noChanges");
1301
- return "";
1097
+ const publishButtonConfig = computed(() => {
1098
+ if (!props.workflowPermissions.publish) return {
1099
+ text: i18n.baseText("workflows.publish"),
1100
+ enabled: false,
1101
+ showIndicator: false,
1102
+ indicatorClass: "",
1103
+ tooltip: i18n.baseText("workflows.publish.permissionDenied"),
1104
+ showVersionInfo: false
1105
+ };
1106
+ if (props.isNewWorkflow) return {
1107
+ text: i18n.baseText("workflows.publish"),
1108
+ enabled: containsTrigger.value && !workflowsStore.nodesIssuesExist,
1109
+ showIndicator: false,
1110
+ indicatorClass: "",
1111
+ tooltip: !containsTrigger.value ? i18n.baseText("workflows.publishModal.noTriggerMessage") : workflowsStore.nodesIssuesExist ? i18n.baseText("workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.title", {
1112
+ interpolate: { count: workflowsStore.nodesWithIssues.length },
1113
+ adjustToNumber: workflowsStore.nodesWithIssues.length
1114
+ }) : "",
1115
+ showVersionInfo: false
1116
+ };
1117
+ return {
1118
+ "not-published-not-eligible": {
1119
+ text: i18n.baseText("workflows.publish"),
1120
+ enabled: false,
1121
+ showIndicator: false,
1122
+ indicatorClass: "",
1123
+ tooltip: !containsTrigger.value ? i18n.baseText("workflows.publishModal.noTriggerMessage") : i18n.baseText("workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.title", {
1124
+ interpolate: { count: workflowsStore.nodesWithIssues.length },
1125
+ adjustToNumber: workflowsStore.nodesWithIssues.length
1126
+ }),
1127
+ showVersionInfo: false
1128
+ },
1129
+ "not-published-eligible": {
1130
+ text: i18n.baseText("workflows.publish"),
1131
+ enabled: true,
1132
+ showIndicator: false,
1133
+ indicatorClass: "",
1134
+ tooltip: "",
1135
+ showVersionInfo: false
1136
+ },
1137
+ "published-no-changes": {
1138
+ text: i18n.baseText("generic.published"),
1139
+ enabled: false,
1140
+ showIndicator: true,
1141
+ indicatorClass: "published",
1142
+ tooltip: "",
1143
+ showVersionInfo: true
1144
+ },
1145
+ "published-with-changes": {
1146
+ text: i18n.baseText("workflows.publish"),
1147
+ enabled: true,
1148
+ showIndicator: true,
1149
+ indicatorClass: "changes",
1150
+ tooltip: i18n.baseText("workflows.publishModal.changes"),
1151
+ showVersionInfo: false
1152
+ },
1153
+ "published-node-issues": {
1154
+ text: i18n.baseText("workflows.publish"),
1155
+ enabled: false,
1156
+ showIndicator: true,
1157
+ indicatorClass: "error",
1158
+ tooltip: i18n.baseText("workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.title", {
1159
+ interpolate: { count: workflowsStore.nodesWithIssues.length },
1160
+ adjustToNumber: workflowsStore.nodesWithIssues.length
1161
+ }),
1162
+ showVersionInfo: true
1163
+ },
1164
+ "published-invalid-trigger": {
1165
+ text: i18n.baseText("workflows.publish"),
1166
+ enabled: false,
1167
+ showIndicator: true,
1168
+ indicatorClass: "changes",
1169
+ tooltip: i18n.baseText("workflows.publishModal.noTriggerMessage"),
1170
+ showVersionInfo: true
1171
+ }
1172
+ }[workflowPublishState.value];
1302
1173
  });
1303
1174
  const activeVersion = computed(() => workflowsStore.workflow.activeVersion);
1304
1175
  const activeVersionName = computed(() => {
1305
1176
  if (!activeVersion.value) return "";
1306
- return activeVersion.value.name || generateVersionName(activeVersion.value.versionId);
1177
+ return activeVersion.value.name ?? generateVersionName(activeVersion.value.versionId);
1307
1178
  });
1308
1179
  const latestPublishDate = computed(() => {
1309
1180
  return getLastPublishedVersion(activeVersion.value?.workflowPublishHistory ?? [])?.createdAt;
@@ -1317,78 +1188,58 @@ var WorkflowHeaderDraftPublishActions_vue_vue_type_script_setup_true_lang_defaul
1317
1188
  __expose({ importFileRef });
1318
1189
  return (_ctx, _cache) => {
1319
1190
  return openBlock(), createElementBlock("div", { class: normalizeClass(_ctx.$style.container) }, [
1320
- !_ctx.isNewWorkflow ? (openBlock(), createBlock(CollaborationPane_default, { key: 0 })) : createCommentVNode("", true),
1321
- activeVersion.value ? (openBlock(), createElementBlock("div", {
1191
+ !__props.isNewWorkflow ? (openBlock(), createBlock(CollaborationPane_default, { key: 0 })) : createCommentVNode("", true),
1192
+ !shouldHidePublishButton.value ? (openBlock(), createElementBlock("div", {
1322
1193
  key: 1,
1323
- class: normalizeClass(_ctx.$style.activeVersionIndicator),
1324
- "data-test-id": "workflow-active-version-indicator"
1325
- }, [createVNode(unref(N8nTooltip_default), null, {
1326
- content: withCtx(() => [
1327
- createTextVNode(toDisplayString(activeVersionName.value), 1),
1328
- _cache[2] || (_cache[2] = createBaseVNode("br", null, null, -1)),
1194
+ class: normalizeClass(_ctx.$style.publishButtonWrapper)
1195
+ }, [createVNode(unref(N8nTooltip_default), {
1196
+ disabled: workflowPublishState.value === "not-published-eligible" && props.workflowPermissions.publish,
1197
+ "show-after": 300
1198
+ }, {
1199
+ content: withCtx(() => [createBaseVNode("div", null, [publishButtonConfig.value.tooltip ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createTextVNode(toDisplayString(publishButtonConfig.value.tooltip) + " ", 1), _cache[0] || (_cache[0] = createBaseVNode("br", null, null, -1))], 64)) : createCommentVNode("", true), activeVersion.value && publishButtonConfig.value.showVersionInfo ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
1200
+ createBaseVNode("span", _hoisted_1$1, toDisplayString(activeVersionName.value), 1),
1201
+ _cache[1] || (_cache[1] = createBaseVNode("br", null, null, -1)),
1329
1202
  createTextVNode(toDisplayString(unref(i18n).baseText("workflowHistory.item.active")) + " ", 1),
1330
1203
  latestPublishDate.value ? (openBlock(), createBlock(TimeAgo_default, {
1331
1204
  key: 0,
1332
1205
  date: latestPublishDate.value
1333
1206
  }, null, 8, ["date"])) : createCommentVNode("", true)
1334
- ]),
1335
- default: withCtx(() => [createVNode(unref(N8nIcon_default), {
1336
- icon: "circle-check",
1337
- color: "success",
1338
- size: "xlarge",
1339
- class: normalizeClass(_ctx.$style.icon)
1340
- }, null, 8, ["class"])]),
1341
- _: 1
1342
- })], 2)) : createCommentVNode("", true),
1343
- !_ctx.isArchived && (_ctx.workflowPermissions.update || _ctx.workflowPermissions.publish) ? (openBlock(), createElementBlock("div", {
1344
- key: 2,
1345
- class: normalizeClass(_ctx.$style.publishButtonWrapper)
1346
- }, [createVNode(unref(N8nTooltip_default), { disabled: !publishTooltipText.value }, {
1347
- content: withCtx(() => [createTextVNode(toDisplayString(publishTooltipText.value), 1)]),
1207
+ ], 64)) : createCommentVNode("", true)])]),
1348
1208
  default: withCtx(() => [createVNode(unref(N8nButton_default), {
1349
1209
  loading: autoSaveForPublish.value,
1350
- disabled: !publishButtonEnabled.value || isWorkflowSaving.value,
1210
+ disabled: !publishButtonConfig.value.enabled || readOnlyForPublish.value,
1351
1211
  type: "secondary",
1352
1212
  "data-test-id": "workflow-open-publish-modal-button",
1353
1213
  onClick: onPublishButtonClick
1354
1214
  }, {
1355
- default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("workflows.publish")), 1)]),
1215
+ default: withCtx(() => [createBaseVNode("div", { class: normalizeClass([_ctx.$style.flex]) }, [publishButtonConfig.value.showIndicator ? (openBlock(), createElementBlock("span", {
1216
+ key: 0,
1217
+ class: normalizeClass({
1218
+ [_ctx.$style.indicatorDot]: true,
1219
+ [_ctx.$style.indicatorPublished]: publishButtonConfig.value.indicatorClass === "published",
1220
+ [_ctx.$style.indicatorChanges]: publishButtonConfig.value.indicatorClass === "changes",
1221
+ [_ctx.$style.indicatorIssues]: publishButtonConfig.value.indicatorClass === "error"
1222
+ })
1223
+ }, null, 2)) : createCommentVNode("", true), createBaseVNode("span", { class: normalizeClass([workflowPublishState.value === "published-no-changes" && _ctx.$style.indicatorPublishedText]) }, toDisplayString(publishButtonConfig.value.text), 3)], 2)]),
1356
1224
  _: 1
1357
1225
  }, 8, ["loading", "disabled"])]),
1358
1226
  _: 1
1359
1227
  }, 8, ["disabled"])], 2)) : createCommentVNode("", true),
1360
- createVNode(SaveButton_default, {
1361
- type: "primary",
1362
- saved: isWorkflowSaved.value,
1363
- disabled: isWorkflowSaving.value || _ctx.readOnly || _ctx.isArchived || !_ctx.isNewWorkflow && !_ctx.workflowPermissions.update,
1364
- "is-saving": isWorkflowSaving.value,
1365
- "with-shortcut": !_ctx.readOnly && !_ctx.isArchived && _ctx.workflowPermissions.update,
1366
- "shortcut-tooltip": unref(i18n).baseText("saveWorkflowButton.hint"),
1367
- "data-test-id": "workflow-save-button",
1368
- onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("workflow:saved"))
1369
- }, null, 8, [
1370
- "saved",
1371
- "disabled",
1372
- "is-saving",
1373
- "with-shortcut",
1374
- "shortcut-tooltip"
1375
- ]),
1376
1228
  createVNode(WorkflowHistoryButton_default, {
1377
1229
  "workflow-id": props.id,
1378
- "is-new-workflow": _ctx.isNewWorkflow
1230
+ "is-new-workflow": __props.isNewWorkflow
1379
1231
  }, null, 8, ["workflow-id", "is-new-workflow"]),
1380
1232
  createVNode(ActionsDropdownMenu_default, {
1381
- id: _ctx.id,
1233
+ id: __props.id,
1382
1234
  ref: "actionsMenu",
1383
- "workflow-permissions": _ctx.workflowPermissions,
1384
- "is-new-workflow": _ctx.isNewWorkflow,
1385
- "read-only": _ctx.readOnly,
1386
- "is-archived": _ctx.isArchived,
1387
- name: _ctx.name,
1388
- tags: _ctx.tags,
1389
- "current-folder": _ctx.currentFolder,
1390
- meta: _ctx.meta,
1391
- "onWorkflow:saved": _cache[1] || (_cache[1] = ($event) => _ctx.$emit("workflow:saved"))
1235
+ "workflow-permissions": __props.workflowPermissions,
1236
+ "is-new-workflow": __props.isNewWorkflow,
1237
+ "read-only": props.readOnly,
1238
+ "is-archived": __props.isArchived,
1239
+ name: __props.name,
1240
+ tags: __props.tags,
1241
+ "current-folder": __props.currentFolder,
1242
+ meta: __props.meta
1392
1243
  }, null, 8, [
1393
1244
  "id",
1394
1245
  "workflow-permissions",
@@ -1405,10 +1256,16 @@ var WorkflowHeaderDraftPublishActions_vue_vue_type_script_setup_true_lang_defaul
1405
1256
  }
1406
1257
  });
1407
1258
  var WorkflowHeaderDraftPublishActions_vue_vue_type_style_index_0_lang_module_default = {
1408
- container: "_container_p6bf9_123",
1409
- activeVersionIndicator: "_activeVersionIndicator_p6bf9_127",
1410
- icon: "_icon_p6bf9_131",
1411
- publishButtonWrapper: "_publishButtonWrapper_p6bf9_135"
1259
+ container: "_container_1kudh_123",
1260
+ activeVersionIndicator: "_activeVersionIndicator_1kudh_127",
1261
+ icon: "_icon_1kudh_131",
1262
+ publishButtonWrapper: "_publishButtonWrapper_1kudh_135",
1263
+ indicatorDot: "_indicatorDot_1kudh_140",
1264
+ indicatorPublished: "_indicatorPublished_1kudh_148",
1265
+ indicatorPublishedText: "_indicatorPublishedText_1kudh_152",
1266
+ indicatorChanges: "_indicatorChanges_1kudh_156",
1267
+ indicatorIssues: "_indicatorIssues_1kudh_160",
1268
+ flex: "_flex_1kudh_164"
1412
1269
  };
1413
1270
  var WorkflowHeaderDraftPublishActions_default = /* @__PURE__ */ __plugin_vue_export_helper_default(WorkflowHeaderDraftPublishActions_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": WorkflowHeaderDraftPublishActions_vue_vue_type_style_index_0_lang_module_default }]]);
1414
1271
  var _hoisted_1 = {
@@ -1430,8 +1287,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1430
1287
  isArchived: { type: Boolean },
1431
1288
  description: {}
1432
1289
  },
1433
- emits: ["workflow:deactivated"],
1434
- setup(__props, { emit: __emit }) {
1290
+ setup(__props) {
1435
1291
  const WORKFLOW_NAME_BP_TO_WIDTH = {
1436
1292
  XS: 150,
1437
1293
  SM: 200,
@@ -1440,14 +1296,13 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1440
1296
  XL: 1e3
1441
1297
  };
1442
1298
  const props = __props;
1443
- const emit = __emit;
1444
1299
  const $style = useCssModule();
1445
1300
  const settingsStore = useSettingsStore();
1446
1301
  const uiStore = useUIStore();
1447
1302
  const workflowsStore = useWorkflowsStore();
1448
1303
  const projectsStore = useProjectsStore();
1304
+ const collaborationStore = useCollaborationStore();
1449
1305
  const foldersStore = useFoldersStore();
1450
- const npsSurveyStore = useNpsSurveyStore();
1451
1306
  const i18n = useI18n();
1452
1307
  const router = useRouter();
1453
1308
  const route = useRoute();
@@ -1470,10 +1325,11 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1470
1325
  const isNewWorkflow = computed(() => {
1471
1326
  return !workflowsStore.isWorkflowSaved[props.id];
1472
1327
  });
1473
- const isWorkflowSaving = computed(() => {
1474
- return uiStore.isActionActive.workflowSaving;
1475
- });
1476
1328
  const workflowPermissions = computed(() => getResourcePermissions(props.scopes).workflow);
1329
+ const readOnlyActions = computed(() => {
1330
+ if (isNewWorkflow.value) return props.readOnly;
1331
+ return props.readOnly || props.isArchived || !workflowPermissions.value.update;
1332
+ });
1477
1333
  const workflowTagIds = computed(() => {
1478
1334
  return (props.tags ?? []).map((tag) => typeof tag === "string" ? tag : tag.id);
1479
1335
  });
@@ -1491,26 +1347,8 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1491
1347
  isTagsEditEnabled.value = false;
1492
1348
  renameInput.value?.forceCancel();
1493
1349
  });
1494
- async function onSaveButtonClick() {
1495
- if (isWorkflowSaving.value) return;
1496
- const id = getWorkflowId(props.id, route.params.name);
1497
- const name = props.name;
1498
- const tags = props.tags;
1499
- const wasNewWorkflow = !workflowsStore.isWorkflowSaved[props.id];
1500
- if (await workflowSaving.saveCurrentWorkflow({
1501
- id,
1502
- name,
1503
- tags
1504
- })) {
1505
- showCreateWorkflowSuccessToast(id, wasNewWorkflow);
1506
- await npsSurveyStore.fetchPromptsData();
1507
- if (route.name === VIEWS.EXECUTION_DEBUG) await router.replace({
1508
- name: VIEWS.WORKFLOW,
1509
- params: { name: props.id }
1510
- });
1511
- }
1512
- }
1513
1350
  function onTagsEditEnable() {
1351
+ if (readOnlyActions.value) return;
1514
1352
  appliedTagIds.value = props.tags ?? [];
1515
1353
  isTagsEditEnabled.value = true;
1516
1354
  setTimeout(() => {
@@ -1526,6 +1364,11 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1526
1364
  return;
1527
1365
  }
1528
1366
  if (tagsSaving.value) return;
1367
+ if (readOnlyActions.value) {
1368
+ isTagsEditEnabled.value = false;
1369
+ return;
1370
+ }
1371
+ collaborationStore.requestWriteAccess();
1529
1372
  tagsSaving.value = true;
1530
1373
  const saved = await workflowSaving.saveCurrentWorkflow({ tags });
1531
1374
  telemetry$1.track("User edited workflow tags", {
@@ -1581,7 +1424,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1581
1424
  toast.showError(error, locale.baseText("generic.archiveWorkflowError"));
1582
1425
  return;
1583
1426
  }
1584
- uiStore.stateIsDirty = false;
1427
+ uiStore.markStateClean();
1585
1428
  toast.showMessage({
1586
1429
  title: locale.baseText("mainSidebar.showMessage.handleArchive.title", { interpolate: { workflowName: props.name } }),
1587
1430
  type: "success"
@@ -1614,7 +1457,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1614
1457
  toast.showError(error, locale.baseText("generic.deleteWorkflowError"));
1615
1458
  return;
1616
1459
  }
1617
- uiStore.stateIsDirty = false;
1460
+ uiStore.markStateClean();
1618
1461
  documentTitle.reset();
1619
1462
  toast.showMessage({
1620
1463
  title: locale.baseText("mainSidebar.showMessage.handleSelect1.title", { interpolate: { workflowName: props.name } }),
@@ -1670,6 +1513,9 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1670
1513
  const handleImportWorkflowFromFile = () => {
1671
1514
  if (workflowHeaderActionsRef.value?.importFileRef) workflowHeaderActionsRef.value.importFileRef.click();
1672
1515
  };
1516
+ const handleWorkflowSaved = (data) => {
1517
+ if (data.isFirstSave) showCreateWorkflowSuccessToast(props.id, true);
1518
+ };
1673
1519
  onMounted(() => {
1674
1520
  nodeViewEventBus.on("importWorkflowFromFile", handleImportWorkflowFromFile);
1675
1521
  nodeViewEventBus.on("archiveWorkflow", handleArchiveWorkflow);
@@ -1677,6 +1523,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1677
1523
  nodeViewEventBus.on("deleteWorkflow", handleDeleteWorkflow);
1678
1524
  nodeViewEventBus.on("renameWorkflow", onNameToggle);
1679
1525
  nodeViewEventBus.on("addTag", onTagsEditEnable);
1526
+ canvasEventBus.on("saved:workflow", handleWorkflowSaved);
1680
1527
  });
1681
1528
  onBeforeUnmount(() => {
1682
1529
  nodeViewEventBus.off("importWorkflowFromFile", handleImportWorkflowFromFile);
@@ -1685,6 +1532,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1685
1532
  nodeViewEventBus.off("deleteWorkflow", handleDeleteWorkflow);
1686
1533
  nodeViewEventBus.off("renameWorkflow", onNameToggle);
1687
1534
  nodeViewEventBus.off("addTag", onTagsEditEnable);
1535
+ canvasEventBus.off("saved:workflow", handleWorkflowSaved);
1688
1536
  });
1689
1537
  return (_ctx, _cache) => {
1690
1538
  return openBlock(), createElementBlock("div", { class: normalizeClass(unref($style).container) }, [
@@ -1706,15 +1554,15 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1706
1554
  }, "/", 2)) : createCommentVNode("", true), (openBlock(), createBlock(unref(N8nInlineTextEdit_default), {
1707
1555
  ref_key: "renameInput",
1708
1556
  ref: renameInput,
1709
- key: _ctx.id,
1557
+ key: __props.id,
1710
1558
  placeholder: "Workflow name",
1711
1559
  "data-test-id": "workflow-name-input",
1712
1560
  class: "name",
1713
- "model-value": _ctx.name,
1561
+ "model-value": __props.name,
1714
1562
  "max-length": unref(128),
1715
1563
  "max-width": WORKFLOW_NAME_BP_TO_WIDTH[bp],
1716
- "read-only": _ctx.readOnly || _ctx.isArchived || !isNewWorkflow.value && !workflowPermissions.value.update,
1717
- disabled: _ctx.readOnly || _ctx.isArchived || !isNewWorkflow.value && !workflowPermissions.value.update,
1564
+ "read-only": readOnlyActions.value,
1565
+ disabled: readOnlyActions.value,
1718
1566
  "onUpdate:modelValue": onNameSubmit
1719
1567
  }, null, 8, [
1720
1568
  "model-value",
@@ -1727,7 +1575,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1727
1575
  }, 1032, ["current-folder"])]),
1728
1576
  _: 1
1729
1577
  }),
1730
- createBaseVNode("span", _hoisted_1, [unref(settingsStore).areTagsEnabled ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [isTagsEditEnabled.value && !(_ctx.readOnly || _ctx.isArchived) && (isNewWorkflow.value || workflowPermissions.value.update) ? (openBlock(), createBlock(WorkflowTagsDropdown_default, {
1578
+ createBaseVNode("span", _hoisted_1, [unref(settingsStore).areTagsEnabled ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [isTagsEditEnabled.value && !readOnlyActions.value ? (openBlock(), createBlock(WorkflowTagsDropdown_default, {
1731
1579
  key: 0,
1732
1580
  ref: "dropdown",
1733
1581
  modelValue: appliedTagIds.value,
@@ -1742,18 +1590,18 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1742
1590
  "modelValue",
1743
1591
  "event-bus",
1744
1592
  "placeholder"
1745
- ])) : (_ctx.tags ?? []).length === 0 && !(_ctx.readOnly || _ctx.isArchived) && (isNewWorkflow.value || workflowPermissions.value.update) ? (openBlock(), createElementBlock("div", _hoisted_2, [createBaseVNode("span", {
1593
+ ])) : (__props.tags ?? []).length === 0 && !readOnlyActions.value ? (openBlock(), createElementBlock("div", _hoisted_2, [createBaseVNode("span", {
1746
1594
  class: "add-tag clickable",
1747
1595
  "data-test-id": "new-tag-link",
1748
1596
  onClick: onTagsEditEnable
1749
1597
  }, " + " + toDisplayString(unref(i18n).baseText("workflowDetails.addTag")), 1)])) : (openBlock(), createBlock(WorkflowTagsContainer_default, {
1750
- key: _ctx.id,
1598
+ key: __props.id,
1751
1599
  "tag-ids": workflowTagIds.value,
1752
1600
  clickable: true,
1753
1601
  responsive: true,
1754
1602
  "data-test-id": "workflow-tags",
1755
1603
  onClick: onTagsEditEnable
1756
- }, null, 8, ["tag-ids"]))], 64)) : createCommentVNode("", true), createBaseVNode("span", { class: normalizeClass(unref($style)["header-controls"]) }, [_ctx.isArchived ? (openBlock(), createBlock(unref(N8nBadge_default), {
1604
+ }, null, 8, ["tag-ids"]))], 64)) : createCommentVNode("", true), createBaseVNode("span", { class: normalizeClass(unref($style)["header-controls"]) }, [__props.isArchived ? (openBlock(), createBlock(unref(N8nBadge_default), {
1757
1605
  key: 0,
1758
1606
  class: "ml-3xs",
1759
1607
  theme: "tertiary",
@@ -1767,18 +1615,16 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1767
1615
  default: withCtx(() => [!isNewWorkflow.value ? (openBlock(), createBlock(WorkflowProductionChecklist_default, {
1768
1616
  key: 0,
1769
1617
  workflow: unref(workflowsStore).workflow
1770
- }, null, 8, ["workflow"])) : createCommentVNode("", true), unref(true) ? (openBlock(), createBlock(WorkflowHeaderDraftPublishActions_default, {
1771
- key: 1,
1772
- id: _ctx.id,
1618
+ }, null, 8, ["workflow"])) : createCommentVNode("", true), createVNode(WorkflowHeaderDraftPublishActions_default, {
1619
+ id: __props.id,
1773
1620
  ref: "workflowHeaderActions",
1774
- tags: _ctx.tags,
1775
- name: _ctx.name,
1776
- meta: _ctx.meta,
1777
- "read-only": _ctx.readOnly,
1778
- "is-archived": _ctx.isArchived,
1621
+ tags: __props.tags,
1622
+ name: __props.name,
1623
+ meta: __props.meta,
1624
+ "read-only": props.readOnly,
1625
+ "is-archived": __props.isArchived,
1779
1626
  "is-new-workflow": isNewWorkflow.value,
1780
- "workflow-permissions": workflowPermissions.value,
1781
- "onWorkflow:saved": onSaveButtonClick
1627
+ "workflow-permissions": workflowPermissions.value
1782
1628
  }, null, 8, [
1783
1629
  "id",
1784
1630
  "tags",
@@ -1788,33 +1634,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1788
1634
  "is-archived",
1789
1635
  "is-new-workflow",
1790
1636
  "workflow-permissions"
1791
- ])) : (openBlock(), createBlock(WorkflowHeaderActions_default, {
1792
- key: 2,
1793
- id: _ctx.id,
1794
- ref: "workflowHeaderActions",
1795
- name: _ctx.name,
1796
- tags: _ctx.tags,
1797
- "current-folder": _ctx.currentFolder,
1798
- meta: _ctx.meta,
1799
- "read-only": _ctx.readOnly,
1800
- "is-archived": _ctx.isArchived,
1801
- active: _ctx.active,
1802
- "is-new-workflow": isNewWorkflow.value,
1803
- "workflow-permissions": workflowPermissions.value,
1804
- "onWorkflow:saved": onSaveButtonClick,
1805
- "onWorkflow:deactivated": _cache[1] || (_cache[1] = ($event) => emit("workflow:deactivated"))
1806
- }, null, 8, [
1807
- "id",
1808
- "name",
1809
- "tags",
1810
- "current-folder",
1811
- "meta",
1812
- "read-only",
1813
- "is-archived",
1814
- "active",
1815
- "is-new-workflow",
1816
- "workflow-permissions"
1817
- ]))]),
1637
+ ])]),
1818
1638
  _: 1
1819
1639
  })
1820
1640
  ], 2);
@@ -1829,7 +1649,7 @@ var WorkflowDetails_vue_vue_type_style_index_1_lang_module_default = {
1829
1649
  closeNodeViewDiscovery,
1830
1650
  "header-controls": "_header-controls_7bao3_145"
1831
1651
  };
1832
- var WorkflowDetails_default = /* @__PURE__ */ __plugin_vue_export_helper_default(WorkflowDetails_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": WorkflowDetails_vue_vue_type_style_index_1_lang_module_default }], ["__scopeId", "data-v-22fed76c"]]);
1652
+ var WorkflowDetails_default = /* @__PURE__ */ __plugin_vue_export_helper_default(WorkflowDetails_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": WorkflowDetails_vue_vue_type_style_index_1_lang_module_default }], ["__scopeId", "data-v-d5e5e93f"]]);
1833
1653
  init_shared_esm_bundler();
1834
1654
  var vue_github_button_default = defineComponent({
1835
1655
  name: "github-button",
@@ -1867,7 +1687,7 @@ var vue_github_button_default = defineComponent({
1867
1687
  const _this = this;
1868
1688
  __vitePreload(() => import(
1869
1689
  /* webpackMode: "eager" */
1870
- "./buttons.esm-CT4flsfB.js"
1690
+ "./buttons.esm-DHCtg4os.js"
1871
1691
  ), []).then(function(module) {
1872
1692
  if (_this.$el.lastChild !== _) return;
1873
1693
  module.render(_.appendChild(_this.$refs._), function(el) {
@@ -1893,6 +1713,7 @@ var MainHeader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
1893
1713
  const ndvStore = useNDVStore();
1894
1714
  const uiStore = useUIStore();
1895
1715
  const sourceControlStore = useSourceControlStore();
1716
+ const collaborationStore = useCollaborationStore();
1896
1717
  const workflowsStore = useWorkflowsStore();
1897
1718
  const executionsStore = useExecutionsStore();
1898
1719
  const settingsStore = useSettingsStore();
@@ -1933,7 +1754,7 @@ var MainHeader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
1933
1754
  const workflow = computed(() => workflowsStore.workflow);
1934
1755
  const workflowId = computed(() => String(route.params.name || workflowsStore.workflowId));
1935
1756
  const onWorkflowPage = computed(() => !!(route.meta.nodeView || route.meta.keepWorkflowAlive));
1936
- const readOnly = computed(() => sourceControlStore.preferences.branchReadOnly);
1757
+ const readOnly = computed(() => sourceControlStore.preferences.branchReadOnly || collaborationStore.shouldBeReadOnly);
1937
1758
  const isEnterprise = computed(() => settingsStore.isQueueModeEnabled && settingsStore.isWorkerViewAvailable);
1938
1759
  const isTelemetryEnabled = computed(() => {
1939
1760
  return settingsStore.isTelemetryEnabled;
@@ -2019,7 +1840,8 @@ var MainHeader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
2019
1840
  const { href } = router.resolve(routeToNavigateTo);
2020
1841
  window.open(href, "_blank");
2021
1842
  } else if (route.name !== routeToNavigateTo.name) {
2022
- if (route.name === VIEWS.NEW_WORKFLOW) uiStore.stateIsDirty = dirtyState.value;
1843
+ if (route.name === VIEWS.NEW_WORKFLOW) if (dirtyState.value) uiStore.markStateDirty();
1844
+ else uiStore.markStateClean();
2023
1845
  activeHeaderTab.value = MAIN_HEADER_TABS.WORKFLOW;
2024
1846
  await router.push(routeToNavigateTo);
2025
1847
  }
@@ -2147,4 +1969,12 @@ var MainHeader_vue_vue_type_style_index_0_lang_module_default = {
2147
1969
  "github-button-container": "_github-button-container_4ekmy_173"
2148
1970
  };
2149
1971
  var MainHeader_default = /* @__PURE__ */ __plugin_vue_export_helper_default(MainHeader_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": MainHeader_vue_vue_type_style_index_0_lang_module_default }]]);
2150
- export { MainHeader_default as default };
1972
+ var AppHeader_default = /* @__PURE__ */ defineComponent({
1973
+ __name: "AppHeader",
1974
+ setup(__props) {
1975
+ return (_ctx, _cache) => {
1976
+ return openBlock(), createBlock(MainHeader_default);
1977
+ };
1978
+ }
1979
+ });
1980
+ export { AppHeader_default as default };