n8n-editor-ui 2.3.3 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/data/node-popularity.json +1920 -1916
  2. package/dist/assets/{AddDataTableModal-BYsEOjtf.js → AddDataTableModal-BWxuL_U1.js} +18 -21
  3. package/dist/assets/{AgentEditorModal-CnYw6elM.css → AgentEditorModal-9v5_7c4M.css} +11 -7
  4. package/dist/assets/{AgentEditorModal-CdUKcN7b.js → AgentEditorModal-ClIVB6be.js} +34 -37
  5. package/dist/assets/{Alert-BSiQ7W4W.js → Alert-C0sX2MmC.js} +9 -9
  6. package/dist/assets/AnimatedSpinner-B25lpnvb.js +15 -0
  7. package/dist/assets/{AnnotationTagsDropdown.ee-CPHqM0oA.js → AnnotationTagsDropdown.ee-bqrzcFvD.js} +6 -6
  8. package/dist/assets/{MainHeader-KNrtVK1m.js → AppHeader-Bk2_Gkdr.js} +359 -528
  9. package/dist/assets/{MainHeader-CSaAWCWj.css → AppHeader-CiEVBSe4.css} +42 -160
  10. package/dist/assets/{MainSidebar-BvZcZjNQ.js → AppSidebar-DVQtWhNG.js} +107 -83
  11. package/dist/assets/{MainSidebar-CEsQ8o1Y.css → AppSidebar-qYnACKTG.css} +13 -4
  12. package/dist/assets/{AuthView-DBipI9XX.js → AuthView-B70yKQIj.js} +12 -12
  13. package/dist/assets/{SettingsView-6sirGv9l.css → BottomMenu-CYgiV90C.css} +57 -37
  14. package/dist/assets/{BottomMenu-n6wDMblT.js → BottomMenu-Zsty8SFw.js} +70 -168
  15. package/dist/assets/{useCanvasMapping-BLB5IFnL.js → CanvasRunWorkflowButton-D05EeNT9.js} +268 -262
  16. package/dist/assets/{useCanvasMapping-CyDAqgNV.css → CanvasRunWorkflowButton-D_Rqnskj.css} +203 -203
  17. package/dist/assets/{ChangePasswordView-N8tRCxXS.js → ChangePasswordView-B5SZMMPu.js} +14 -18
  18. package/dist/assets/{ChatAgentAvatar-B68ZZ295.css → ChatAgentAvatar-D94COYC_.css} +10 -13
  19. package/dist/assets/ChatAgentAvatar-lJduQjSM.js +67 -0
  20. package/dist/assets/{ChatFile-B6hcldJk.js → ChatFile-DGN9Z6P_.js} +17 -17
  21. package/dist/assets/{ChatLayout-ZIIWLYox.js → ChatLayout-B3HCEtmF.js} +11 -15
  22. package/dist/assets/{ChatLayout-CxM-3LAt.css → ChatLayout-C5Cltxb6.css} +1 -8
  23. package/dist/assets/{ChatPersonalAgentsView-CHjVJlH9.js → ChatPersonalAgentsView-CfuU16Wx.js} +19 -24
  24. package/dist/assets/{ChatSidebar-DcNxY7Pt.css → ChatSidebar-D-hWKn7w.css} +126 -0
  25. package/dist/assets/{ChatSidebar-D1wzPLte.js → ChatSidebar-DxXP8jvn.js} +56 -71
  26. package/dist/assets/{ChatView-CEdaGOiq.js → ChatView-DGO5M0-j.js} +113 -112
  27. package/dist/assets/{ChatView-DrZ9gYjI.css → ChatView-DjGNW1KJ.css} +58 -50
  28. package/dist/assets/{ChatWorkflowAgentsView-DDoSKFjL.js → ChatWorkflowAgentsView-BDUzYR0a.js} +19 -24
  29. package/dist/assets/CollectionParameter-CX0d0ppe.js +42 -0
  30. package/dist/assets/{CommunityNodeUpdateInfo-D_fpxg7T.js → CommunityNodeUpdateInfo-BzF3To7U.js} +13 -13
  31. package/dist/assets/{CopyInput-CkRSExvb.js → CopyInput-B3eGtGOr.js} +15 -15
  32. package/dist/assets/{CredentialIcon-CsmA8n5q.js → CredentialIcon-Co-DgDkv.js} +6 -6
  33. package/dist/assets/{CredentialPicker-Dc9_fQqB.js → CredentialPicker-xUgsLzd_.js} +8 -8
  34. package/dist/assets/{CredentialSelectorModal-CrHTSX3D.js → CredentialSelectorModal-te4cxLHY.js} +22 -26
  35. package/dist/assets/{CredentialsView-BHjKX7p7.js → CredentialsView-CSMNv5Qi.js} +46 -51
  36. package/dist/assets/{DataTableActions-Baa_gpFk.js → DataTableActions-BkI1G_w4.js} +6 -6
  37. package/dist/assets/{DataTableDetailsView-Csre5EoG.js → DataTableDetailsView-D5XYBEVr.js} +27 -30
  38. package/dist/assets/{DataTableView-DvZt7cVh.js → DataTableView-U-FAWXix.js} +31 -36
  39. package/dist/assets/DemoFooter-uIyuy9UT.js +53 -0
  40. package/dist/assets/{Draggable-wlu-YKYh.js → Draggable-0gyx_CsY.js} +5 -5
  41. package/dist/assets/{EmptySharedSectionActionBox-BoAVktyy.js → EmptySharedSectionActionBox-DtGMtVsp.js} +5 -5
  42. package/dist/assets/{EnterpriseEdition.ee-CvUo0Y3B.js → EnterpriseEdition.ee-UhVkBS4f.js} +2 -2
  43. package/dist/assets/{EntityNotFound-Dk9s3CwF.js → EntityNotFound-qBJJDr9S.js} +9 -12
  44. package/dist/assets/{EntityUnAuthorised-h6YriaK9.js → EntityUnAuthorised-Ci980jH0.js} +8 -11
  45. package/dist/assets/{ErrorView-BGXVjv22.js → ErrorView-CPQg7TDd.js} +13 -16
  46. package/dist/assets/{EvaluationsRootView-CEJYrCEy.js → EvaluationsRootView-CzP9JGh2.js} +34 -36
  47. package/dist/assets/{EvaluationsView-DmaEZ7wK.js → EvaluationsView-ikx3LyQf.js} +28 -33
  48. package/dist/assets/{ExecutionsTime-K-nIEY55.js → ExecutionsTime-D5RuLFMY.js} +16 -15
  49. package/dist/assets/{ExecutionsView-BC4uwKPS.js → ExecutionsView-cMwfmY4W.js} +62 -65
  50. package/dist/assets/{ExternalSecretsProviderConnectionSwitch.ee-DYabADwO.js → ExternalSecretsProviderConnectionSwitch.ee-BglbvOQG.js} +18 -17
  51. package/dist/assets/FixedCollectionParameter-COuGvpZ8.css +642 -0
  52. package/dist/assets/FixedCollectionParameter-rO9blroR.js +1571 -0
  53. package/dist/assets/FolderBreadcrumbs-DegmC04u.js +187 -0
  54. package/dist/assets/{SaveButton-Dc01Y2MA.css → FolderBreadcrumbs-eBFopiOp.css} +7 -14
  55. package/dist/assets/{ForgotMyPasswordView-BxFjt7yf.js → ForgotMyPasswordView-CKDZcZP9.js} +14 -18
  56. package/dist/assets/{InsightsChartAverageRuntime-mcy8IMaN.js → InsightsChartAverageRuntime-69U4sUmH.js} +10 -11
  57. package/dist/assets/{InsightsChartFailed-iXvqlU_7.js → InsightsChartFailed-Ct64T5GJ.js} +8 -9
  58. package/dist/assets/{InsightsChartFailureRate-DzWy07B4.js → InsightsChartFailureRate-BOdV-Q3d.js} +9 -11
  59. package/dist/assets/{InsightsChartTimeSaved-Db1u-o2U.js → InsightsChartTimeSaved-B83s59mL.js} +9 -11
  60. package/dist/assets/{InsightsChartTotal-Bge4JSj-.js → InsightsChartTotal-1A5vqW4E.js} +7 -9
  61. package/dist/assets/{InsightsDashboard-BgxCUZWd.js → InsightsDashboard-Dpwy8q6a.js} +37 -38
  62. package/dist/assets/{InsightsPaywall-DJIAsFUW.js → InsightsPaywall-iaN7Yt1s.js} +15 -18
  63. package/dist/assets/{InsightsSummary-uZyetR3b.js → InsightsSummary-UGkz-k9w.js} +11 -11
  64. package/dist/assets/{InsightsTableWorkflows-9h4pU1WK.js → InsightsTableWorkflows-AP6ddx9D.js} +22 -24
  65. package/dist/assets/{KeyboardShortcutTooltip-Bpb4SkjE.js → KeyboardShortcutTooltip-Dwz4Hv8g.js} +6 -6
  66. package/dist/assets/LogsPanel-Cz9qV0gc.js +40 -0
  67. package/dist/assets/{LogsPanel-BG48JZqa.js → LogsPanel-DuiKN1Na.js} +100 -100
  68. package/dist/assets/{MCPConnectWorkflowsModal-CWg0xros.js → MCPConnectWorkflowsModal-CrhdbX54.js} +36 -41
  69. package/dist/assets/{MigrationRuleDetail-Dj4iZ8em.js → MigrationRuleDetail-BXj7ghDO.js} +23 -26
  70. package/dist/assets/{MigrationRules-CMk4HuMV.js → MigrationRules-CWeHH-jb.js} +21 -24
  71. package/dist/assets/{Modal-BNJXVsfA.js → Modal-CLJXjbTN.js} +27 -26
  72. package/dist/assets/{ModelByIdSelectorModal-BwhmTdU4.js → ModelByIdSelectorModal-_Q2e43WD.js} +18 -22
  73. package/dist/assets/{NDVEmptyState-D9V46oIb.js → NDVEmptyState-CJWa4Aka.js} +15 -12
  74. package/dist/assets/{NodeCreation-DiAqT9SN.js → NodeCreation-BKxsZGAf.js} +30 -52
  75. package/dist/assets/{ItemsRenderer-DkobJF9f.css → NodeCreator-039HRrqJ.css} +1525 -6
  76. package/dist/assets/{NodeCreator-Bjt6BI9v.js → NodeCreator-CRhdWp9N.js} +978 -87
  77. package/dist/assets/{NodeDetailsView-Ct9i-rTh.js → NodeDetailsView-Cm52jG-U.js} +72 -86
  78. package/dist/assets/{NodeDetailsViewV2-Dh4gzwFe.js → NodeDetailsViewV2-CqGBXjHp.js} +69 -85
  79. package/dist/assets/{NodeIcon-t97i3ntx.js → NodeIcon-SaoWBT_U.js} +10 -10
  80. package/dist/assets/{NodeIcon-BDxr0f30.css → NodeIcon-zqTc5h-V.css} +1 -1
  81. package/dist/assets/{NodeSettings-Cz9vhjW-.js → NodeSettings-BWWEo77y.js} +73 -73
  82. package/dist/assets/{NodeView-AuBajxDh.css → NodeView-Xwcu11Wh.css} +11 -11
  83. package/dist/assets/{NodeView-3Y-9RowK.js → NodeView-xEYRJxA0.js} +171 -148
  84. package/dist/assets/{OAuthConsentView-Bg5-jLUL.js → OAuthConsentView-D6mfPIJI.js} +14 -17
  85. package/dist/assets/{ParameterInputList-C1BdtAjc.css → ParameterInputList-BUZ33Aem.css} +717 -208
  86. package/dist/assets/{ParameterInputList-D3pQ9DPD.js → ParameterInputList-Cb2_SQfz.js} +1864 -1039
  87. package/dist/assets/{ProjectBreadcrumb-CwG4u83J.js → ProjectBreadcrumb-2BEX5IDD.js} +8 -8
  88. package/dist/assets/{ProjectCardBadge-DEF5xaop.js → ProjectCardBadge-CTVSam44.js} +10 -10
  89. package/dist/assets/{ProjectHeader-Ftxgilbl.js → ProjectHeader-BagblRFt.js} +14 -14
  90. package/dist/assets/{ProjectIcon-CBV14vRK.js → ProjectIcon-gwTM9uPG.js} +8 -8
  91. package/dist/assets/{ProjectRoleView-DxR_UDnr.js → ProjectRoleView-B5mhpgJj.js} +19 -22
  92. package/dist/assets/{ProjectRolesView-D5UGjI0u.js → ProjectRolesView-CO-fdyVV.js} +18 -21
  93. package/dist/assets/{ProjectSettings-DjmRzWiu.js → ProjectSettings-CpdJ0QXS.js} +31 -33
  94. package/dist/assets/{ProjectSharing-CXtVcK-7.js → ProjectSharing-CgRKQQe4.js} +16 -16
  95. package/dist/assets/{ProjectVariables-xB0qVBxe.js → ProjectVariables-B7LU3SGS.js} +40 -45
  96. package/dist/assets/{ProviderSettingsModal-BqKcWfeR.js → ProviderSettingsModal-RmJC0Qwe.js} +20 -25
  97. package/dist/assets/{PushConnectionTracker-Cwk4a7eu.js → PushConnectionTracker-v1yU_xFk.js} +4 -4
  98. package/dist/assets/{ResolversView-CnNl-Auj.js → ResolversView-OeI_dYci.js} +20 -23
  99. package/dist/assets/{ResourceFiltersDropdown-CRkQSQvs.js → ResourceFiltersDropdown-bH--4wBS.js} +12 -12
  100. package/dist/assets/{ResourcesListLayout-DLAMdJD5.css → ResourcesListLayout-BhnhvHiw.css} +140 -0
  101. package/dist/assets/{ResourcesListLayout-CreZ1Su6.js → ResourcesListLayout-CS0nUJNt.js} +32 -23
  102. package/dist/assets/{RunData-Ti8dstr8.js → RunData-B_Vlvf1V.js} +20367 -28266
  103. package/dist/assets/{RunData-CGWkR8tE.css → RunData-xpRgLK8S.css} +2 -2
  104. package/dist/assets/{RunDataHtml-S_j2pLRX.js → RunDataHtml-BMxc-zRm.js} +5 -5
  105. package/dist/assets/RunDataHtml-wQh8fACG.js +5 -0
  106. package/dist/assets/{RunDataJson-C9RYDf3k.js → RunDataJson-D23jdsWY.js} +31 -31
  107. package/dist/assets/{RunDataJsonActions-CVkDV_4I.js → RunDataJsonActions-DFa7pezf.js} +19 -22
  108. package/dist/assets/{RunDataParsedAiContent-B6PgQw1V.js → RunDataParsedAiContent-BCprT0E8.js} +15 -16
  109. package/dist/assets/RunDataParsedAiContent-o_QkeE0L.js +15 -0
  110. package/dist/assets/{RunDataSearch-DHw36qjO.js → RunDataSearch-BU2qi4nP.js} +10 -13
  111. package/dist/assets/{RunDataTable-Co9VAMrg.js → RunDataTable-BDrFzGfU.js} +32 -35
  112. package/dist/assets/{SamlOnboarding-CpWUC0gl.js → SamlOnboarding-DPYTM0tb.js} +14 -18
  113. package/dist/assets/{SelectedItemsInfo-wq6nTjan.js → SelectedItemsInfo-CKmcAObD.js} +5 -5
  114. package/dist/assets/{SettingsApiView-eiQOdjgq.js → SettingsApiView-BowYRtTk.js} +24 -26
  115. package/dist/assets/{SettingsChatHubView-D4WEo9L3.js → SettingsChatHubView-CObWHU09.js} +18 -23
  116. package/dist/assets/{SettingsCommunityNodesView-C0AaNOEN.js → SettingsCommunityNodesView-wk9JxXqL.js} +38 -41
  117. package/dist/assets/{SettingsExternalSecrets-y47selKn.js → SettingsExternalSecrets-C41eND_Y.js} +18 -21
  118. package/dist/assets/{SettingsLdapView-YMVYMnzw.js → SettingsLdapView-D1L1iyvE.js} +22 -25
  119. package/dist/assets/{SettingsLogStreamingView-BSzLdWpE.js → SettingsLogStreamingView-BqlK3i3Z.js} +21 -23
  120. package/dist/assets/{SettingsMCPView-BU0f3ymz.js → SettingsMCPView-CoTmbtV_.js} +42 -45
  121. package/dist/assets/{SettingsPersonalView-BAfYDXor.js → SettingsPersonalView-BMGG66o5.js} +15 -18
  122. package/dist/assets/SettingsSidebar-RZssT7t8.js +58 -0
  123. package/dist/assets/{useCommandBar-eK4Fv9lH.css → SettingsSidebar-hr5ASDKX.css} +22 -24
  124. package/dist/assets/{SettingsSourceControl-DiTdqVc2.js → SettingsSourceControl-C_XOb728.js} +19 -22
  125. package/dist/assets/{SettingsSso-D9mWYb6m.js → SettingsSso-DkvVZOSA.js} +26 -28
  126. package/dist/assets/{SettingsUsageAndPlan-Bhhz0N_R.js → SettingsUsageAndPlan-Cnxx5J_k.js} +20 -22
  127. package/dist/assets/{SettingsUsersView-Cyv_ZTSa.js → SettingsUsersView-DRFHlEG_.js} +50 -27
  128. package/dist/assets/{SetupTemplateFormStep-B-OXuIEU.js → SetupTemplateFormStep-DTl-SQ5_.js} +15 -15
  129. package/dist/assets/{SetupView-BvYO_h_-.js → SetupView-BfCKw7tL.js} +14 -18
  130. package/dist/assets/{SetupWorkflowCredentialsButton-29sPlZ15.js → SetupWorkflowCredentialsButton-BDNBEpgH.js} +21 -19
  131. package/dist/assets/{SetupWorkflowFromTemplateView-wGZJlu_v.js → SetupWorkflowFromTemplateView-zNitmbxd.js} +21 -24
  132. package/dist/assets/{SeverityTag-DiRdnrHj.js → SeverityTag-R-mbBDWg.js} +6 -6
  133. package/dist/assets/{SigninView-CZmSlJU4.js → SigninView-CspSfYWl.js} +16 -19
  134. package/dist/assets/{SignoutView-BUsJauew.js → SignoutView-CbmvjLhS.js} +10 -10
  135. package/dist/assets/{SignupView-CBmZdEUa.js → SignupView-D088WMnK.js} +27 -26
  136. package/dist/assets/{SkeletonAgentCard-felAhV_j.js → SkeletonAgentCard-DNUy88vs.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-B3TllM9L.js → TagsDropdown-998vpfi2.js} +9 -9
  140. package/dist/assets/{TemplateCard-SxL2lAcu.js → TemplateCard-OCtSSObW.js} +9 -9
  141. package/dist/assets/{TemplateDetails-joifuvuq.js → TemplateDetails-CExTaNmN.js} +20 -20
  142. package/dist/assets/{TemplateList-Cr8NzldM.js → TemplateList-CYVIQLBo.js} +44 -44
  143. package/dist/assets/{TemplatesCollectionView-KlTGNZvL.js → TemplatesCollectionView-J4-MsKaR.js} +22 -25
  144. package/dist/assets/{TemplatesSearchView-R9w7J_qa.js → TemplatesSearchView-FeOl_F9u.js} +49 -52
  145. package/dist/assets/{TemplatesView-Cva7ybP0.js → TemplatesView-B2WxZgCT.js} +6 -6
  146. package/dist/assets/{TemplatesWorkflowView-cZBhTHOi.js → TemplatesWorkflowView-pgmIBnml.js} +23 -26
  147. package/dist/assets/{TestRunDetailView-C1Pcw196.js → TestRunDetailView-We9DOF3E.js} +20 -24
  148. package/dist/assets/{TextWithHighlights-CgDEugGZ.js → TextWithHighlights-CH5Zsswa.js} +2 -2
  149. package/dist/assets/{TimeAgo-D971QnHO.js → TimeAgo-DbbBIULe.js} +4 -4
  150. package/dist/assets/{ToolsSelectorModal-D4oxUUCF.js → ToolsSelectorModal-D0fzbH8I.js} +20 -23
  151. package/dist/assets/{TriggerPanel-BkdktrEp.js → TriggerPanel-B3wcn8yr.js} +51 -51
  152. package/dist/assets/VirtualSchema-C4mYgt95.js +28 -0
  153. package/dist/assets/{VirtualSchema-Brq3RG-a.js → VirtualSchema-DTit75Ni.js} +60 -61
  154. package/dist/assets/{VirtualSchema-CwutU4vj.css → VirtualSchema-pdpcVEq9.css} +1 -1
  155. package/dist/assets/{VueMarkdown-BlVr51fL.js → VueMarkdown-D0Ufjusy.js} +3 -3
  156. package/dist/assets/{WorkerView-CT6vkOh0.js → WorkerView-BaJG1lYK.js} +38 -42
  157. package/dist/assets/{WorkflowExecutionsInfoAccordion-DSc_InaM.js → WorkflowExecutionsInfoAccordion-BAgAw-VZ.js} +7 -7
  158. package/dist/assets/{WorkflowExecutionsLandingPage-CuGCweH0.js → WorkflowExecutionsLandingPage-B5M2M_XO.js} +14 -17
  159. package/dist/assets/{WorkflowExecutionsPreview-DWGuXXJq.js → WorkflowExecutionsPreview-CGtRdwNt.js} +44 -46
  160. package/dist/assets/{WorkflowExecutionsView-B4v9ie53.js → WorkflowExecutionsView-R_7zX3VU.js} +60 -61
  161. package/dist/assets/{WorkflowHistory-BLC1cUoO.js → WorkflowHistory-BS71EB0y.js} +198 -196
  162. package/dist/assets/{WorkflowHistory-BBHdNsOb.css → WorkflowHistory-dUpsKg3Z.css} +42 -75
  163. package/dist/assets/{WorkflowLocation-X2ZVBc96.js → WorkflowLocation-CTPWi5M9.js} +18 -18
  164. package/dist/assets/{WorkflowOnboardingView-CmVI0XDf.js → WorkflowOnboardingView-BroupQUz.js} +10 -10
  165. package/dist/assets/{WorkflowPreview-CZAcz1Na.js → WorkflowPreview-DLbWDX-7.js} +9 -9
  166. package/dist/assets/{WorkflowTagsDropdown-DlKqZzjZ.js → WorkflowTagsDropdown-DMBpcKR1.js} +6 -6
  167. package/dist/assets/{WorkflowsView-C-PD10oe.css → WorkflowsView-0_qNZeIx.css} +32 -42
  168. package/dist/assets/{WorkflowsView-BDhK0stx.js → WorkflowsView-Bdslfqgx.js} +128 -238
  169. package/dist/assets/{_MapCache-ficiegRb.js → _MapCache-DkLivSSb.js} +46 -38
  170. package/dist/assets/{_baseOrderBy-DwurmLcj.js → _baseOrderBy-Cy5MGJv_.js} +8 -13
  171. package/dist/assets/{_initCloneObject-DPuE6hiH.js → _initCloneObject-DiO9tORE.js} +2 -2
  172. package/dist/assets/{aiTemplatesStarterCollection.store-B-exu89T.js → aiTemplatesStarterCollection.store-C5UvSRtb.js} +6 -6
  173. package/dist/assets/{apiKeys.store-DW3qN7-W.js → apiKeys.store-tF_8Mh4s.js} +4 -4
  174. package/dist/assets/{assistant.store-BWyMPD4R.js → assistant.store-BsyT2BFh.js} +8 -8
  175. package/dist/assets/{auth.eventBus-BQKtqsAd.js → auth.eventBus-Ce2KL2L4.js} +1 -1
  176. package/dist/assets/{banners.store-NV1mJdSo.js → banners.store-De4swlHn.js} +7 -7
  177. package/dist/assets/{buttons.esm-Euf82NbC.js → buttons.esm-DHCtg4os.js} +0 -5
  178. package/dist/assets/canvas.utils-6yT3qDz5.js +138 -0
  179. package/dist/assets/{chart-BI8B7UPV.js → chart-BpBZvUkM.js} +0 -6
  180. package/dist/assets/{chartjs.utils-CZqhhNLn.js → chartjs.utils-B8F_iMP1.js} +5 -5
  181. package/dist/assets/{chat.store-CIFGQpTZ.js → chat.store-DIrG4eKT.js} +34 -29
  182. package/dist/assets/{chatPanel.store-gj4bbTwF.js → chatPanel.store-XTtvoDW8.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-DuCY-6U-.js +287 -0
  186. package/dist/assets/{constants-vjryKFt3.js → constants-Bgby4me8.js} +12 -3
  187. package/dist/assets/{constants-B5yiZflE.js → constants-CRdXn3zB.js} +290 -301
  188. package/dist/assets/core-CKLPLCBJ.js +4 -0
  189. package/dist/assets/{core-BMwklDiH.js → core-DDiavqSm.js} +1 -1
  190. package/dist/assets/{dataTable.store-CigyhC-U.js → dataTable.store-DepEpEQf.js} +4 -4
  191. package/dist/assets/{date-picker-BjmPe_fb.js → date-picker-CutzRF4i.js} +13 -4
  192. package/dist/assets/{dateFormatter-DjYPheeb.js → dateFormatter-BiQ9pMrA.js} +4 -4
  193. package/dist/assets/{dateformat-BlfbK1ki.js → dateformat-BeHi9sF4.js} +2 -1
  194. package/dist/assets/{dialog-CFy8vuwh.js → dialog-ZxkAulrV.js} +4 -4
  195. package/dist/assets/{dist-BQ7E1jLN.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-C2DNxuAa.js → es-347rbIb-.js} +2 -2
  200. package/dist/assets/{evaluation.constants-CaU1Jek8.js → evaluation.constants-COHKT500.js} +12 -15
  201. package/dist/assets/{executions.store-BjQUzT_w.js → executions.store-D1BMCixf.js} +4 -4
  202. package/dist/assets/{exports-C5ncBo9h.js → exports-DwuuoPh-.js} +1 -3
  203. package/dist/assets/{externalSecrets.ee.store-DS-4lnXS.js → externalSecrets.ee.store-CClIdWWb.js} +4 -4
  204. package/dist/assets/{folders.store-BqKf5TBS.js → folders.store-DHmLGEYl.js} +4 -4
  205. package/dist/assets/{index-U6fZiFvz.css → index-BhFfa3xu.css} +3083 -2437
  206. package/dist/assets/{index-BFqYZQt_.js → index-CZ0ShzXs.js} +4327 -1864
  207. package/dist/assets/{insights.constants-D63-x9pu.js → insights.constants-98xWnZQu.js} +3 -3
  208. package/dist/assets/{insights.store-BwsFg9pQ.js → insights.store-B6MSLVpS.js} +7 -7
  209. package/dist/assets/{insights.utils-CWK5jWpE.js → insights.utils-B0txVt0Q.js} +6 -6
  210. package/dist/assets/{languageModules-DDJUl1h8.js → languageModules-DyQaii5v.js} +1 -1
  211. package/dist/assets/{logStreaming.store-BxM1T1ZK.js → logStreaming.store-3rdm0k17.js} +3 -3
  212. package/dist/assets/{mcp.store-ChjN6nuV.js → mcp.store--DVpfZPc.js} +4 -4
  213. package/dist/assets/{merge-DjI8TA-7.js → merge-B0-p153C.js} +2 -2
  214. package/dist/assets/{nodeCreator.store-CXJtK_5o.js → nodeCreator.store-BL_XgPCV.js} +1932 -2216
  215. package/dist/assets/{nodeIcon-CIlNGIQ6.js → nodeIcon-G45tSifH.js} +3 -3
  216. package/dist/assets/{nodeTransforms-yL73Ok-c.js → nodeTransforms-CjgwHZte.js} +2 -2
  217. package/dist/assets/{orderBy-DLgDRKnZ.js → orderBy-CI4ht8Wh.js} +3 -3
  218. package/dist/assets/{personalizedTemplatesV3.store-Bs_2J_OQ.js → personalizedTemplatesV3.store-EQdiv-tM.js} +4 -4
  219. package/dist/assets/{pickBy-DYW-ATsL.js → pickBy-CS854Y6u.js} +3 -3
  220. package/dist/assets/pushConnection.store-Rp8-mZo7.js +496 -0
  221. package/dist/assets/{radio-BeejvdFG.js → radio-I_Y35sEo.js} +2 -2
  222. package/dist/assets/{readyToRun.store-DX00OlhN.js → readyToRun.store-i9gaUDlh.js} +17 -8
  223. package/dist/assets/{readyToRunWorkflows.store-CR7Yn6At.js → readyToRunWorkflows.store-gcTSDf1M.js} +6 -6
  224. package/dist/assets/{roles.store-DeGSYcWL.js → roles.store-ByEYbWMb.js} +4 -4
  225. package/dist/assets/{router-CFnjpqoZ.js → router-CmCiJkA0.js} +316 -304
  226. package/dist/assets/{sanitize-html-BkT1y0bJ.js → sanitize-html-DeDnsMgc.js} +17 -17
  227. package/dist/assets/{semver-CjLBiqOi.js → semver-DkHAUe3T.js} +6 -8
  228. package/dist/assets/{sourceControl.eventBus-BlFJV1yj.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-BiuB4CZc.js → src-DpZSuyLC.js} +5805 -2547
  232. package/dist/assets/{sso.store-CgVzmGCn.js → sso.store-B0NxuXiJ.js} +3 -3
  233. package/dist/assets/{table-fp187Rky.js → table-C3aerURh.js} +5 -5
  234. package/dist/assets/{templateActions-Dn6PNjyj.js → templateActions-BGHev3SN.js} +5 -5
  235. package/dist/assets/{templateTransforms-BtbIlupE.js → templateTransforms-B0n1tACx.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-DI2Rilu6.js → usage.store-3GYv6IW-.js} +3 -3
  239. package/dist/assets/{useActions-B3Tgqfk-.js → useActions-Buaifc4L.js} +5 -5
  240. package/dist/assets/useBugReporting-D6SXeO6B.js +130 -0
  241. package/dist/assets/useCalloutHelpers-Cwtyxtsm.js +80 -0
  242. package/dist/assets/{useCanvasOperations-BttAaAbZ.js → useCanvasOperations-DY9_Vcrs.js} +36 -32
  243. package/dist/assets/{useClipboard-CurFa2Dj.js → useClipboard-B8OKhRbY.js} +3 -3
  244. package/dist/assets/{useCredentialResolvers-CJPbKnJV.js → useCredentialResolvers-CCUEZ5V2.js} +5 -5
  245. package/dist/assets/{useCustomAgent-tUoLIUar.css → useCustomAgent-D8Sw5vcC.css} +32 -9
  246. package/dist/assets/useCustomAgent-h_FKujBQ.js +630 -0
  247. package/dist/assets/{useDebounce-BjcMkTu4.js → useDebounce-C4ttil9E.js} +12 -12
  248. package/dist/assets/{useExecutionData-B5c3pMYr.js → useExecutionData-CAzGOYWw.js} +2 -2
  249. package/dist/assets/{useExecutionDebugging-BAm9HytR.js → useExecutionDebugging-DQI5yARq.js} +7 -7
  250. package/dist/assets/{useExecutionHelpers-ClAdmv-B.js → useExecutionHelpers-DWZYR0dg.js} +5 -5
  251. package/dist/assets/useGlobalEntityCreation-BwX8UUSv.js +192 -0
  252. package/dist/assets/{useImportCurlCommand-L4oAG6dd.js → useImportCurlCommand-DRS2-Amm.js} +41 -36
  253. package/dist/assets/{useIntersectionObserver-Bb8gFEHX.js → useIntersectionObserver-CGg561I6.js} +1 -1
  254. package/dist/assets/{useKeybindings-30WRTvmG.js → useKeybindings-MR6cNtmK.js} +5 -5
  255. package/dist/assets/{useLogsTreeExpand-6_x7FouR.js → useLogsTreeExpand-CvDEwlbf.js} +41 -41
  256. package/dist/assets/{useMcp-T0ZvziGl.js → useMcp-BIeH6n02.js} +2 -2
  257. package/dist/assets/{usePageRedirectionHelper-BJH0h6XA.js → usePageRedirectionHelper-DPAtaAXY.js} +3 -3
  258. package/dist/assets/{usePinnedData-B88__knO.js → usePinnedData-BFTyeyJG.js} +6 -6
  259. package/dist/assets/{usePushConnection-O_Sg_NLA.js → usePushConnection-CcijHMYv.js} +12 -16
  260. package/dist/assets/{useRunWorkflow-BK9B9ALV.js → useRunWorkflow-wOjZEWNr.js} +106 -486
  261. package/dist/assets/{useSettingsItems-aqm5JSTf.js → useSettingsItems-CaNtH9v0.js} +5 -5
  262. package/dist/assets/{useTelemetryContext-DoX4HWmg.js → useTelemetryContext-CE5phjaX.js} +4 -4
  263. package/dist/assets/{useWorkflowsCache-CsbESieM.js → useWorkflowsCache-BBhvuqqB.js} +2 -2
  264. package/dist/assets/{userRoleProvisioning.store-CK7bojX8.js → userRoleProvisioning.store-COPddaUL.js} +3 -3
  265. package/dist/assets/{builder.store-CgMqPgnW.js → users.store-KBMG-745.js} +22801 -23949
  266. package/dist/assets/utils-BCX2a8sC.js +133 -0
  267. package/dist/assets/{versions.store-CzvzmERa.js → versions.store-BnGZ_WOG.js} +4 -4
  268. package/dist/assets/{vue-Dd77OcSb.js → vue-atn33zIp.js} +255 -213
  269. package/dist/assets/{vue-json-pretty-DF-vJpHf.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 -119
  273. package/package.json +1 -1
  274. package/tsconfig.json +1 -1
  275. package/dist/assets/AnimatedSpinner-DBPcagVq.js +0 -15
  276. package/dist/assets/BottomMenu-CRVyIu-B.css +0 -474
  277. package/dist/assets/ChatAgentAvatar-DoN0Vr4x.js +0 -67
  278. package/dist/assets/CollectionParameter-ByVUPeYR.js +0 -49
  279. package/dist/assets/DemoFooter-u1dOP76h.js +0 -62
  280. package/dist/assets/FixedCollectionParameter-CkTQ2epJ.js +0 -493
  281. package/dist/assets/FixedCollectionParameter-DT3ELzS9.css +0 -202
  282. package/dist/assets/ItemsRenderer-z7cKER1f.js +0 -922
  283. package/dist/assets/LogsPanel-B9QiohHK.js +0 -49
  284. package/dist/assets/NodeCreator-OSIpRI6S.css +0 -1649
  285. package/dist/assets/PageViewLayout-XiCAnPXE.js +0 -12
  286. package/dist/assets/PrebuiltAgentTemplatesView-B7uXEamJ.js +0 -151
  287. package/dist/assets/PrebuiltAgentTemplatesView-jF7HvWnL.css +0 -166
  288. package/dist/assets/RunDataHtml-CMYh4fix.js +0 -6
  289. package/dist/assets/RunDataParsedAiContent-DI_kumKV.js +0 -23
  290. package/dist/assets/SaveButton-DFMQz4OO.js +0 -89
  291. package/dist/assets/SettingsView-Ccz6LsAi.js +0 -87
  292. package/dist/assets/VirtualSchema-BOm-odEw.js +0 -33
  293. package/dist/assets/WorkflowActivationErrorMessage-CkxW6ZtU.js +0 -17
  294. package/dist/assets/WorkflowActivator-BGcCOUCH.css +0 -391
  295. package/dist/assets/WorkflowActivator-CisdBXpp.js +0 -362
  296. package/dist/assets/core-DeR-PV8K.js +0 -4
  297. package/dist/assets/empty-BUjCyq3U.js +0 -2450
  298. package/dist/assets/en-DyO2pPiC.js +0 -2
  299. package/dist/assets/schemaPreview.store-Bs_OZUsM.js +0 -113
  300. package/dist/assets/uniqBy-6k_SZ3dM.js +0 -10
  301. package/dist/assets/useBeforeUnload-dAltrwFm.js +0 -40
  302. package/dist/assets/useCommandBar-CXSPJjOq.js +0 -2425
  303. package/dist/assets/useCustomAgent-CSvOuB6K.js +0 -471
  304. package/dist/assets/useRecentResources-Dy5vqIyg.js +0 -118
  305. package/dist/assets/useWorkflowActivate-i3WAlo0M.js +0 -152
  306. package/dist/assets/utils-CnShVJFh.js +0 -54
  307. /package/dist/assets/{CalendarDate-zWqgZMlk.js → CalendarDate-CogIFc4_.js} +0 -0
  308. /package/dist/assets/{_plugin-vue_export-helper-BwBpWJRZ.js → _plugin-vue_export-helper-fRq25RGE.js} +0 -0
  309. /package/dist/assets/{fileUtils-Bt1vr1SC.js → fileUtils-C-Bxka0b.js} +0 -0
  310. /package/dist/assets/{mcp.constants-1HQX33wO.js → mcp.constants-Djm5lWYR.js} +0 -0
  311. /package/dist/assets/{preload-helper-CR0ecmWK.js → preload-helper-D8n1yiy9.js} +0 -0
  312. /package/dist/assets/{retry-B-tGcWte.js → retry-BLsJRFf0.js} +0 -0
  313. /package/dist/assets/{smartDecimal-gA9wGEba.js → smartDecimal-D3Shg2YQ.js} +0 -0
  314. /package/dist/assets/{sortByProperty-C6sPingU.js → sortByProperty-Dip6DXbv.js} +0 -0
  315. /package/dist/assets/{sqlite3-opfs-async-proxy-vVtmDGHX.js → sqlite3-opfs-async-proxy-BrtqH9Si.js} +0 -0
  316. /package/dist/assets/{xml-DDfXMqo8.js → xml-Cf0o4TxQ.js} +0 -0
@@ -1,63 +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-BiuB4CZc.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-CgMqPgnW.js";
10
- import "./empty-BUjCyq3U.js";
11
- import "./sanitize-html-BkT1y0bJ.js";
12
- import "./CalendarDate-zWqgZMlk.js";
13
- 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-B5yiZflE.js";
14
- import "./merge-DjI8TA-7.js";
15
- import { k as defineStore, r as useRootStore } from "./_baseOrderBy-DwurmLcj.js";
16
- import "./dateformat-BlfbK1ki.js";
17
- import { n as require_debounce, t as useDebounce } from "./useDebounce-BjcMkTu4.js";
18
- import "./assistant.store-BWyMPD4R.js";
19
- import "./retry-B-tGcWte.js";
20
- import { t as useExecutionsStore } from "./executions.store-BjQUzT_w.js";
21
- import { i as usePushConnectionStore } from "./useRunWorkflow-BK9B9ALV.js";
22
- import "./usePinnedData-B88__knO.js";
23
- import "./nodeCreator.store-CXJtK_5o.js";
24
- import "./nodeIcon-CIlNGIQ6.js";
25
- import "./useCanvasOperations-BttAaAbZ.js";
26
- import { t as useFoldersStore } from "./folders.store-BqKf5TBS.js";
27
- import "./NodeIcon-t97i3ntx.js";
28
- import "./KeyboardShortcutTooltip-Bpb4SkjE.js";
29
- import "./versions.store-CzvzmERa.js";
30
- import { t as usePageRedirectionHelper } from "./usePageRedirectionHelper-BJH0h6XA.js";
31
- import { t as useBannersStore } from "./banners.store-NV1mJdSo.js";
32
- import "./dataTable.store-CigyhC-U.js";
33
- import "./ProjectIcon-CBV14vRK.js";
34
- import "./schemaPreview.store-Bs_OZUsM.js";
35
- import { t as EnterpriseEdition_ee_default } from "./EnterpriseEdition.ee-CvUo0Y3B.js";
36
- import { t as TimeAgo_default } from "./TimeAgo-D971QnHO.js";
37
- import "./roles.store-DeGSYcWL.js";
38
- import { t as SaveButton_default } from "./SaveButton-DFMQz4OO.js";
39
- import { t as router_default } from "./router-CFnjpqoZ.js";
40
- import "./TagsDropdown-B3TllM9L.js";
41
- import { t as WorkflowTagsDropdown_default } from "./WorkflowTagsDropdown-DlKqZzjZ.js";
42
- import "./sso.store-CgVzmGCn.js";
43
- import "./insights.store-BwsFg9pQ.js";
44
- import "./insights.constants-D63-x9pu.js";
45
- import "./insights.utils-CWK5jWpE.js";
46
- import { a as MCP_DOCS_PAGE_URL, s as MCP_SETTINGS_VIEW } from "./mcp.constants-1HQX33wO.js";
47
- import "./constants-vjryKFt3.js";
48
- import "./useRecentResources-Dy5vqIyg.js";
49
- import { t as useMcp } from "./useMcp-T0ZvziGl.js";
50
- import { t as useWorkflowActivate } from "./useWorkflowActivate-i3WAlo0M.js";
51
- import "./WorkflowActivationErrorMessage-CkxW6ZtU.js";
52
- import { i as getLastPublishedVersion, r as generateVersionName } from "./utils-CnShVJFh.js";
53
- import "./ProjectBreadcrumb-CwG4u83J.js";
54
- import { n as FolderBreadcrumbs_default, t as WorkflowActivator_default } from "./WorkflowActivator-CisdBXpp.js";
55
- import { t as PushConnectionTracker_default } from "./PushConnectionTracker-Cwk4a7eu.js";
56
- import { t as useWorkflowSettingsCache } from "./useWorkflowsCache-CsbESieM.js";
57
- import { t as useBeforeUnload } from "./useBeforeUnload-dAltrwFm.js";
58
- import { t as usePushConnection } from "./usePushConnection-O_Sg_NLA.js";
59
- import "./aiTemplatesStarterCollection.store-B-exu89T.js";
60
- import "./readyToRun.store-DX00OlhN.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-KBMG-745.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-CRdXn3zB.js";
12
+ import "./merge-B0-p153C.js";
13
+ import { r as useRootStore } from "./_baseOrderBy-Cy5MGJv_.js";
14
+ import { t as useBannersStore } from "./banners.store-De4swlHn.js";
15
+ import "./dateformat-BeHi9sF4.js";
16
+ import { n as require_debounce, t as useDebounce } from "./useDebounce-C4ttil9E.js";
17
+ import "./versions.store-BnGZ_WOG.js";
18
+ import "./dataTable.store-DepEpEQf.js";
19
+ import { t as useExecutionsStore } from "./executions.store-D1BMCixf.js";
20
+ import "./assistant.store-BsyT2BFh.js";
21
+ import "./usePinnedData-BFTyeyJG.js";
22
+ import "./nodeCreator.store-BL_XgPCV.js";
23
+ import "./canvas.utils-6yT3qDz5.js";
24
+ import "./nodeIcon-G45tSifH.js";
25
+ import { r as canvasEventBus } from "./useCanvasOperations-DY9_Vcrs.js";
26
+ import { t as useFoldersStore } from "./folders.store-DHmLGEYl.js";
27
+ import "./ProjectIcon-gwTM9uPG.js";
28
+ import "./pushConnection.store-Rp8-mZo7.js";
29
+ import "./NodeIcon-SaoWBT_U.js";
30
+ import "./useRunWorkflow-wOjZEWNr.js";
31
+ import { t as useCollaborationStore } from "./collaboration.store-DuCY-6U-.js";
32
+ import { t as TimeAgo_default } from "./TimeAgo-DbbBIULe.js";
33
+ import "./roles.store-ByEYbWMb.js";
34
+ import { t as router_default } from "./router-CmCiJkA0.js";
35
+ import "./TagsDropdown-998vpfi2.js";
36
+ import { t as WorkflowTagsDropdown_default } from "./WorkflowTagsDropdown-DMBpcKR1.js";
37
+ import "./sso.store-B0NxuXiJ.js";
38
+ import "./insights.store-B6MSLVpS.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-BIeH6n02.js";
43
+ import { a as useWorkflowActivate, i as getLastPublishedVersion, r as generateVersionName } from "./utils-BCX2a8sC.js";
44
+ import "./ProjectBreadcrumb-2BEX5IDD.js";
45
+ import { t as FolderBreadcrumbs_default } from "./FolderBreadcrumbs-DegmC04u.js";
46
+ import { t as PushConnectionTracker_default } from "./PushConnectionTracker-v1yU_xFk.js";
47
+ import { t as useWorkflowSettingsCache } from "./useWorkflowsCache-BBhvuqqB.js";
48
+ import { t as usePushConnection } from "./usePushConnection-CcijHMYv.js";
49
+ import "./aiTemplatesStarterCollection.store-C5UvSRtb.js";
50
+ import "./readyToRun.store-i9gaUDlh.js";
61
51
  var TabBar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
62
52
  __name: "TabBar",
63
53
  props: {
@@ -71,15 +61,15 @@ var TabBar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
71
61
  emit("update:modelValue", tab, event);
72
62
  }
73
63
  return (_ctx, _cache) => {
74
- return _ctx.items ? (openBlock(), createElementBlock("div", {
64
+ return __props.items ? (openBlock(), createElementBlock("div", {
75
65
  key: 0,
76
66
  class: normalizeClass({
77
67
  [_ctx.$style.container]: true,
78
68
  ["tab-bar-container"]: true
79
69
  })
80
70
  }, [createVNode(unref(N8nRadioButtons_default), {
81
- "model-value": _ctx.modelValue,
82
- options: _ctx.items,
71
+ "model-value": __props.modelValue,
72
+ options: __props.items,
83
73
  "onUpdate:modelValue": onUpdateModelValue
84
74
  }, null, 8, ["model-value", "options"])], 2)) : createCommentVNode("", true);
85
75
  };
@@ -416,8 +406,8 @@ var IntersectionObserved_default = /* @__PURE__ */ defineComponent({
416
406
  };
417
407
  }
418
408
  });
419
- var import_debounce = /* @__PURE__ */ __toESM(require_debounce());
420
- var _hoisted_1$2 = { class: "tags" };
409
+ var import_debounce = /* @__PURE__ */ __toESM(require_debounce(), 1);
410
+ var _hoisted_1$3 = { class: "tags" };
421
411
  var _hoisted_2$2 = ["onClick"];
422
412
  var TagsContainer_default = /* @__PURE__ */ __plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
423
413
  __name: "TagsContainer",
@@ -499,11 +489,11 @@ var TagsContainer_default = /* @__PURE__ */ __plugin_vue_export_helper_default(/
499
489
  threshold: 1,
500
490
  class: "tags-container",
501
491
  style: normalizeStyle(style.value),
502
- enabled: _ctx.responsive,
492
+ enabled: __props.responsive,
503
493
  "event-bus": unref(intersectionEventBus),
504
494
  onObserved
505
495
  }, {
506
- 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) => {
507
497
  return openBlock(), createElementBlock("span", {
508
498
  key: tag.id,
509
499
  class: normalizeClass({ clickable: !tag.hidden }),
@@ -518,13 +508,13 @@ var TagsContainer_default = /* @__PURE__ */ __plugin_vue_export_helper_default(/
518
508
  key: 1,
519
509
  class: normalizeClass({ hideTag: tag.hidden }),
520
510
  "data-id": tag.id,
521
- enabled: _ctx.responsive,
511
+ enabled: __props.responsive,
522
512
  "event-bus": unref(intersectionEventBus)
523
513
  }, {
524
514
  default: withCtx(() => [createVNode(unref(N8nTag_default), {
525
515
  title: tag.name,
526
516
  text: tag.name,
527
- clickable: _ctx.clickable
517
+ clickable: __props.clickable
528
518
  }, null, 8, [
529
519
  "title",
530
520
  "text",
@@ -565,11 +555,11 @@ var WorkflowTagsContainer_default = /* @__PURE__ */ defineComponent({
565
555
  }
566
556
  return (_ctx, _cache) => {
567
557
  return openBlock(), createBlock(TagsContainer_default, {
568
- "tag-ids": _ctx.tagIds,
558
+ "tag-ids": __props.tagIds,
569
559
  "tags-by-id": tagsById.value,
570
- limit: _ctx.limit,
571
- clickable: _ctx.clickable,
572
- responsive: _ctx.responsive,
560
+ limit: __props.limit,
561
+ clickable: __props.clickable,
562
+ responsive: __props.responsive,
573
563
  onClick
574
564
  }, null, 8, [
575
565
  "tag-ids",
@@ -581,149 +571,6 @@ var WorkflowTagsContainer_default = /* @__PURE__ */ defineComponent({
581
571
  };
582
572
  }
583
573
  });
584
- var HEARTBEAT_INTERVAL = 5 * TIME.MINUTE;
585
- const useCollaborationStore = defineStore(STORES.COLLABORATION, () => {
586
- const pushStore = usePushConnectionStore();
587
- const workflowsStore = useWorkflowsStore();
588
- const usersStore = useUsersStore();
589
- const uiStore = useUIStore();
590
- const { addBeforeUnloadEventBindings, removeBeforeUnloadEventBindings, addBeforeUnloadHandler } = useBeforeUnload({ route: useRoute() });
591
- const unloadTimeout = ref(null);
592
- addBeforeUnloadHandler(() => {
593
- notifyWorkflowClosed();
594
- if (uiStore.stateIsDirty) unloadTimeout.value = setTimeout(() => notifyWorkflowOpened, 5 * TIME.SECOND);
595
- });
596
- const collaborators = ref([]);
597
- const heartbeatTimer = ref(null);
598
- const startHeartbeat = () => {
599
- stopHeartbeat();
600
- heartbeatTimer.value = window.setInterval(notifyWorkflowOpened, HEARTBEAT_INTERVAL);
601
- };
602
- const stopHeartbeat = () => {
603
- if (heartbeatTimer.value !== null) {
604
- clearInterval(heartbeatTimer.value);
605
- heartbeatTimer.value = null;
606
- }
607
- };
608
- const pushStoreEventListenerRemovalFn = ref(null);
609
- function initialize() {
610
- if (pushStoreEventListenerRemovalFn.value) return;
611
- pushStoreEventListenerRemovalFn.value = pushStore.addEventListener((event) => {
612
- if (event.type === "collaboratorsChanged" && event.data.workflowId === workflowsStore.workflowId) collaborators.value = event.data.collaborators;
613
- });
614
- addBeforeUnloadEventBindings();
615
- notifyWorkflowOpened();
616
- startHeartbeat();
617
- }
618
- function terminate() {
619
- if (typeof pushStoreEventListenerRemovalFn.value === "function") {
620
- pushStoreEventListenerRemovalFn.value();
621
- pushStoreEventListenerRemovalFn.value = null;
622
- }
623
- notifyWorkflowClosed();
624
- stopHeartbeat();
625
- pushStore.clearQueue();
626
- removeBeforeUnloadEventBindings();
627
- if (unloadTimeout.value) clearTimeout(unloadTimeout.value);
628
- }
629
- function notifyWorkflowOpened() {
630
- if (!workflowsStore.isWorkflowSaved[workflowsStore.workflowId]) return;
631
- pushStore.send({
632
- type: "workflowOpened",
633
- workflowId: workflowsStore.workflowId
634
- });
635
- }
636
- function notifyWorkflowClosed() {
637
- if (!workflowsStore.isWorkflowSaved[workflowsStore.workflowId]) return;
638
- pushStore.send({
639
- type: "workflowClosed",
640
- workflowId: workflowsStore.workflowId
641
- });
642
- collaborators.value = collaborators.value.filter(({ user }) => user.id !== usersStore.currentUserId);
643
- }
644
- return {
645
- collaborators,
646
- initialize,
647
- terminate,
648
- startHeartbeat,
649
- stopHeartbeat
650
- };
651
- });
652
- var CollaborationPane_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
653
- __name: "CollaborationPane",
654
- setup(__props) {
655
- const collaborationStore = useCollaborationStore();
656
- const usersStore = useUsersStore();
657
- watch(useDocumentVisibility(), (visibilityState) => {
658
- if (visibilityState === "hidden") collaborationStore.stopHeartbeat();
659
- else collaborationStore.startHeartbeat();
660
- });
661
- const showUserStack = computed(() => collaborationStore.collaborators.length > 1);
662
- const collaboratorsSorted = computed(() => {
663
- const users = collaborationStore.collaborators.map(({ user }) => user);
664
- const index = users.findIndex((user) => user.id === usersStore.currentUser?.id);
665
- if (index < 1) return { defaultGroup: users };
666
- const [currentUser] = users.splice(index, 1);
667
- return { defaultGroup: [currentUser, ...users] };
668
- });
669
- const currentUserEmail = computed(() => usersStore.currentUser?.email);
670
- onMounted(() => {
671
- collaborationStore.initialize();
672
- });
673
- onBeforeUnmount(() => {
674
- collaborationStore.terminate();
675
- });
676
- return (_ctx, _cache) => {
677
- return showUserStack.value ? (openBlock(), createElementBlock("div", {
678
- key: 0,
679
- class: normalizeClass(`collaboration-pane-container ${_ctx.$style.container}`),
680
- "data-test-id": "collaboration-pane"
681
- }, [createVNode(unref(N8nUserStack_default), {
682
- users: collaboratorsSorted.value,
683
- "current-user-email": currentUserEmail.value
684
- }, null, 8, ["users", "current-user-email"])], 2)) : createCommentVNode("", true);
685
- };
686
- }
687
- });
688
- var CollaborationPane_vue_vue_type_style_index_0_lang_module_default = { container: "_container_dsr9f_123" };
689
- 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 }]]);
690
- var _hoisted_1$1 = { key: 0 };
691
- var _hoisted_2$1 = { key: 1 };
692
- var WorkflowHistoryButton_default = /* @__PURE__ */ defineComponent({
693
- __name: "WorkflowHistoryButton",
694
- props: {
695
- workflowId: {},
696
- isNewWorkflow: { type: Boolean }
697
- },
698
- setup(__props) {
699
- const locale = useI18n();
700
- const props = __props;
701
- const workflowHistoryRoute = computed(() => ({
702
- name: VIEWS.WORKFLOW_HISTORY,
703
- params: { workflowId: props.workflowId }
704
- }));
705
- return (_ctx, _cache) => {
706
- const _component_RouterLink = resolveComponent("RouterLink");
707
- return _ctx.workflowId ? (openBlock(), createBlock(unref(N8nTooltip_default), {
708
- key: 0,
709
- placement: "bottom"
710
- }, {
711
- 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))]),
712
- default: withCtx(() => [createVNode(_component_RouterLink, { to: workflowHistoryRoute.value }, {
713
- default: withCtx(() => [createVNode(unref(N8nIconButton_default), {
714
- disabled: _ctx.isNewWorkflow,
715
- "data-test-id": "workflow-history-button",
716
- type: "highlight",
717
- icon: "history",
718
- size: "medium"
719
- }, null, 8, ["disabled"])]),
720
- _: 1
721
- }, 8, ["to"])]),
722
- _: 1
723
- })) : createCommentVNode("", true);
724
- };
725
- }
726
- });
727
574
  var INVALID_CHARS_REGEX = /[<>:"/\\|?*\u0000-\u001F\u007F-\u009F]/g;
728
575
  var ZERO_WIDTH_CHARS_REGEX = /[\u200B-\u200D\u2060\uFEFF]/g;
729
576
  var UNICODE_SPACES_REGEX = /[\u00A0\u2000-\u200A]/g;
@@ -762,7 +609,7 @@ var sanitizeFilename = (filename, maxLength = MAX_FILENAME_LENGTH) => {
762
609
  if (baseName.length > maxLength) baseName = baseName.slice(0, maxLength);
763
610
  return baseName;
764
611
  };
765
- var import_FileSaver_min = /* @__PURE__ */ __toESM(require_FileSaver_min());
612
+ var import_FileSaver_min = /* @__PURE__ */ __toESM(require_FileSaver_min(), 1);
766
613
  const getWorkflowId = (propId, routeName) => {
767
614
  return propId ?? (typeof routeName === "string" ? routeName : void 0);
768
615
  };
@@ -779,10 +626,8 @@ var ActionsDropdownMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE
779
626
  currentFolder: {},
780
627
  meta: {}
781
628
  },
782
- emits: ["workflow:saved"],
783
- setup(__props, { expose: __expose, emit: __emit }) {
629
+ setup(__props, { expose: __expose }) {
784
630
  const props = __props;
785
- const emit = __emit;
786
631
  const importFileRef = ref();
787
632
  const toast = useToast();
788
633
  const locale = useI18n();
@@ -972,7 +817,7 @@ var ActionsDropdownMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE
972
817
  break;
973
818
  case WORKFLOW_MENU_ACTIONS.DOWNLOAD: {
974
819
  const workflowData = await workflowHelpers.getWorkflowDataToSave();
975
- const { tags,...data } = workflowData;
820
+ const { tags, ...data } = workflowData;
976
821
  const exportData = {
977
822
  ...data,
978
823
  meta: {
@@ -980,7 +825,7 @@ var ActionsDropdownMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE
980
825
  instanceId: rootStore.instanceId
981
826
  },
982
827
  tags: (tags ?? []).map((tagId) => {
983
- const { usageCount,...tag } = tagsStore.tagsById[tagId];
828
+ const { usageCount, ...tag } = tagsStore.tagsById[tagId];
984
829
  return tag;
985
830
  })
986
831
  };
@@ -999,7 +844,6 @@ var ActionsDropdownMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE
999
844
  break;
1000
845
  case WORKFLOW_MENU_ACTIONS.PUSH:
1001
846
  try {
1002
- emit("workflow:saved");
1003
847
  router_default.push({ query: {
1004
848
  ...route.query,
1005
849
  sourceControl: "push"
@@ -1089,153 +933,97 @@ var ActionsDropdownMenu_vue_vue_type_style_index_0_lang_module_default = {
1089
933
  hiddenInput: "_hiddenInput_ntqfl_132"
1090
934
  };
1091
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 }]]);
1092
- var WorkflowHeaderActions_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
1093
- __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",
1094
940
  props: {
1095
- readOnly: { type: Boolean },
1096
- id: {},
1097
- tags: {},
1098
- name: {},
1099
- meta: {},
1100
- active: { type: Boolean },
1101
- currentFolder: {},
1102
- isArchived: { type: Boolean },
1103
- isNewWorkflow: { type: Boolean },
1104
- workflowPermissions: {}
941
+ workflowId: {},
942
+ isNewWorkflow: { type: Boolean }
1105
943
  },
1106
- emits: ["workflow:deactivated", "workflow:saved"],
1107
- setup(__props, { expose: __expose, emit: __emit }) {
1108
- const i18n = useI18n();
1109
- const uiStore = useUIStore();
1110
- const telemetry$1 = useTelemetry();
1111
- const usersStore = useUsersStore();
1112
- const route = useRoute();
1113
- const pageRedirectionHelper = usePageRedirectionHelper();
1114
- const $style = useCssModule();
944
+ setup(__props) {
945
+ const locale = useI18n();
1115
946
  const props = __props;
1116
- const emit = __emit;
1117
- const isWorkflowSaving = computed(() => {
1118
- 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
1119
955
  });
1120
- const actionsMenuRef = useTemplateRef("actionsMenu");
1121
- const importFileRef = computed(() => actionsMenuRef.value?.importFileRef);
1122
- const onWorkflowActiveToggle = async (value) => {
1123
- if (!value.active) emit("workflow:deactivated");
1124
- };
1125
- function onShareButtonClick() {
1126
- uiStore.openModalWithData({
1127
- name: WORKFLOW_SHARE_MODAL_KEY,
1128
- data: { id: props.id }
1129
- });
1130
- telemetry$1.track("User opened sharing modal", {
1131
- workflow_id: props.id,
1132
- user_id_sharer: usersStore.currentUser?.id,
1133
- sub_view: route.name === VIEWS.WORKFLOWS ? "Workflows listing" : "Workflow editor"
1134
- });
1135
- }
1136
- function goToUpgrade() {
1137
- pageRedirectionHelper.goToUpgrade("workflow_sharing", "upgrade-workflow-sharing");
1138
- }
1139
- __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
+ }));
1140
964
  return (_ctx, _cache) => {
1141
- return openBlock(), createElementBlock("div", { class: normalizeClass(unref($style).container) }, [
1142
- createBaseVNode("span", { class: normalizeClass([unref($style).activator, unref($style).group]) }, [createVNode(WorkflowActivator_default, {
1143
- "is-archived": _ctx.isArchived,
1144
- "workflow-active": _ctx.active,
1145
- "workflow-id": _ctx.id,
1146
- "workflow-permissions": _ctx.workflowPermissions,
1147
- "onUpdate:workflowActive": onWorkflowActiveToggle
1148
- }, null, 8, [
1149
- "is-archived",
1150
- "workflow-active",
1151
- "workflow-id",
1152
- "workflow-permissions"
1153
- ])], 2),
1154
- createVNode(EnterpriseEdition_ee_default, { features: [unref(EnterpriseEditionFeature).Sharing] }, {
1155
- fallback: withCtx(() => [createVNode(unref(N8nTooltip_default), null, {
1156
- content: withCtx(() => [createVNode(unref(I18nT), {
1157
- keypath: unref(uiStore).contextBasedTranslationKeys.workflows.sharing.unavailable.description.tooltip,
1158
- tag: "span",
1159
- scope: "global"
1160
- }, {
1161
- action: withCtx(() => [createBaseVNode("a", { onClick: goToUpgrade }, toDisplayString(unref(i18n).baseText(unref(uiStore).contextBasedTranslationKeys.workflows.sharing.unavailable.button)), 1)]),
1162
- _: 1
1163
- }, 8, ["keypath"])]),
1164
- default: withCtx(() => [createVNode(unref(N8nButton_default), {
1165
- type: "secondary",
1166
- class: normalizeClass(["mr-2xs", unref($style).disabledShareButton])
1167
- }, {
1168
- default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("workflowDetails.share")), 1)]),
1169
- _: 1
1170
- }, 8, ["class"])]),
1171
- _: 1
1172
- })]),
1173
- default: withCtx(() => [createBaseVNode("div", { class: normalizeClass(unref($style).group) }, [!_ctx.isNewWorkflow ? (openBlock(), createBlock(CollaborationPane_default, { key: 0 })) : createCommentVNode("", true), createVNode(unref(N8nButton_default), {
1174
- type: "secondary",
1175
- "data-test-id": "workflow-share-button",
1176
- onClick: onShareButtonClick
1177
- }, {
1178
- default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("workflowDetails.share")), 1)]),
1179
- _: 1
1180
- })], 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"])]),
1181
981
  _: 1
1182
- }, 8, ["features"]),
1183
- createBaseVNode("div", { class: normalizeClass(unref($style).group) }, [
1184
- createVNode(SaveButton_default, {
1185
- type: "primary",
1186
- saved: !unref(uiStore).stateIsDirty && !_ctx.isNewWorkflow,
1187
- disabled: isWorkflowSaving.value || _ctx.readOnly || _ctx.isArchived || !_ctx.isNewWorkflow && !_ctx.workflowPermissions.update,
1188
- "is-saving": isWorkflowSaving.value,
1189
- "with-shortcut": !_ctx.readOnly && !_ctx.isArchived && _ctx.workflowPermissions.update,
1190
- "shortcut-tooltip": unref(i18n).baseText("saveWorkflowButton.hint"),
1191
- "data-test-id": "workflow-save-button",
1192
- onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("workflow:saved"))
1193
- }, null, 8, [
1194
- "saved",
1195
- "disabled",
1196
- "is-saving",
1197
- "with-shortcut",
1198
- "shortcut-tooltip"
1199
- ]),
1200
- createVNode(WorkflowHistoryButton_default, {
1201
- "workflow-id": props.id,
1202
- "is-new-workflow": _ctx.isNewWorkflow
1203
- }, null, 8, ["workflow-id", "is-new-workflow"]),
1204
- createVNode(ActionsDropdownMenu_default, {
1205
- id: _ctx.id,
1206
- ref: "actionsMenu",
1207
- "workflow-permissions": _ctx.workflowPermissions,
1208
- "is-new-workflow": _ctx.isNewWorkflow,
1209
- "read-only": _ctx.readOnly,
1210
- "is-archived": _ctx.isArchived,
1211
- name: _ctx.name,
1212
- tags: _ctx.tags,
1213
- "current-folder": _ctx.currentFolder,
1214
- meta: _ctx.meta,
1215
- "onWorkflow:saved": _cache[1] || (_cache[1] = ($event) => _ctx.$emit("workflow:saved"))
1216
- }, null, 8, [
1217
- "id",
1218
- "workflow-permissions",
1219
- "is-new-workflow",
1220
- "read-only",
1221
- "is-archived",
1222
- "name",
1223
- "tags",
1224
- "current-folder",
1225
- "meta"
1226
- ])
1227
- ], 2)
1228
- ], 2);
982
+ }, 8, ["to"])]),
983
+ _: 1
984
+ })) : createCommentVNode("", true);
1229
985
  };
1230
986
  }
1231
987
  });
1232
- var WorkflowHeaderActions_vue_vue_type_style_index_0_lang_module_default = {
1233
- container: "_container_uqc1z_123",
1234
- activator: "_activator_uqc1z_127",
1235
- group: "_group_uqc1z_138",
1236
- disabledShareButton: "_disabledShareButton_uqc1z_143"
1237
- };
1238
- 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" };
1239
1027
  var WorkflowHeaderDraftPublishActions_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
1240
1028
  __name: "WorkflowHeaderDraftPublishActions",
1241
1029
  props: {
@@ -1249,60 +1037,144 @@ var WorkflowHeaderDraftPublishActions_vue_vue_type_script_setup_true_lang_defaul
1249
1037
  isNewWorkflow: { type: Boolean },
1250
1038
  workflowPermissions: {}
1251
1039
  },
1252
- emits: ["workflow:saved"],
1253
1040
  setup(__props, { expose: __expose }) {
1254
1041
  const props = __props;
1255
1042
  const actionsMenuRef = useTemplateRef("actionsMenu");
1256
- 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
+ });
1257
1050
  const uiStore = useUIStore();
1258
1051
  const workflowsStore = useWorkflowsStore();
1259
1052
  const i18n = useI18n();
1260
- const { saveCurrentWorkflow } = useWorkflowSaving({ router: useRouter() });
1053
+ const router = useRouter();
1054
+ const autosaveStore = useWorkflowAutosaveStore();
1055
+ const { saveCurrentWorkflow, cancelAutoSave } = useWorkflowSaving({ router });
1261
1056
  const autoSaveForPublish = ref(false);
1262
- const isWorkflowSaving = computed(() => {
1263
- return uiStore.isActionActive.workflowSaving && !autoSaveForPublish.value;
1264
- });
1265
1057
  const importFileRef = computed(() => actionsMenuRef.value?.importFileRef);
1266
- const onPublishButtonClick = async () => {
1267
- 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) {
1268
1082
  autoSaveForPublish.value = true;
1269
- const saved = await saveCurrentWorkflow({}, true);
1083
+ saved = await saveCurrentWorkflow({}, true);
1270
1084
  autoSaveForPublish.value = false;
1271
- if (!saved) return;
1085
+ }
1086
+ return saved;
1087
+ };
1088
+ const onPublishButtonClick = async () => {
1089
+ if (uiStore.stateIsDirty || props.isNewWorkflow) {
1090
+ if (!await saveBeforePublish()) return;
1272
1091
  }
1273
1092
  uiStore.openModalWithData({
1274
1093
  name: WORKFLOW_PUBLISH_MODAL_KEY,
1275
1094
  data: {}
1276
1095
  });
1277
1096
  };
1278
- const foundTriggers = computed(() => getActivatableTriggerNodes(workflowsStore.workflowTriggerNodes));
1279
- const containsTrigger = computed(() => {
1280
- return foundTriggers.value.length > 0;
1281
- });
1282
- const isWorkflowSaved = computed(() => {
1283
- return !uiStore.stateIsDirty && !props.isNewWorkflow;
1284
- });
1285
- const publishButtonEnabled = computed(() => {
1286
- if (!props.workflowPermissions.publish) return false;
1287
- if (!containsTrigger.value) return false;
1288
- if (workflowsStore.nodesIssuesExist) return false;
1289
- return workflowsStore.workflow.versionId && workflowsStore.workflow.versionId !== workflowsStore.workflow.activeVersion?.versionId || uiStore.stateIsDirty;
1290
- });
1291
- const publishTooltipText = computed(() => {
1292
- if (!props.workflowPermissions.publish) return i18n.baseText("workflows.publish.permissionDenied");
1293
- const wfHasAnyChanges = workflowsStore.workflow.versionId !== workflowsStore.workflow.activeVersion?.versionId;
1294
- if (!containsTrigger.value) return i18n.baseText("workflows.publishModal.noTriggerMessage");
1295
- if (workflowsStore.nodesIssuesExist) return i18n.baseText("workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.title", {
1296
- interpolate: { count: workflowsStore.nodesWithIssues.length },
1297
- adjustToNumber: workflowsStore.nodesWithIssues.length
1298
- });
1299
- if (!wfHasAnyChanges && !uiStore.stateIsDirty) return i18n.baseText("workflows.publishModal.noChanges");
1300
- 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];
1301
1173
  });
1302
1174
  const activeVersion = computed(() => workflowsStore.workflow.activeVersion);
1303
1175
  const activeVersionName = computed(() => {
1304
1176
  if (!activeVersion.value) return "";
1305
- return activeVersion.value.name || generateVersionName(activeVersion.value.versionId);
1177
+ return activeVersion.value.name ?? generateVersionName(activeVersion.value.versionId);
1306
1178
  });
1307
1179
  const latestPublishDate = computed(() => {
1308
1180
  return getLastPublishedVersion(activeVersion.value?.workflowPublishHistory ?? [])?.createdAt;
@@ -1316,78 +1188,58 @@ var WorkflowHeaderDraftPublishActions_vue_vue_type_script_setup_true_lang_defaul
1316
1188
  __expose({ importFileRef });
1317
1189
  return (_ctx, _cache) => {
1318
1190
  return openBlock(), createElementBlock("div", { class: normalizeClass(_ctx.$style.container) }, [
1319
- !_ctx.isNewWorkflow ? (openBlock(), createBlock(CollaborationPane_default, { key: 0 })) : createCommentVNode("", true),
1320
- activeVersion.value ? (openBlock(), createElementBlock("div", {
1191
+ !__props.isNewWorkflow ? (openBlock(), createBlock(CollaborationPane_default, { key: 0 })) : createCommentVNode("", true),
1192
+ !shouldHidePublishButton.value ? (openBlock(), createElementBlock("div", {
1321
1193
  key: 1,
1322
- class: normalizeClass(_ctx.$style.activeVersionIndicator),
1323
- "data-test-id": "workflow-active-version-indicator"
1324
- }, [createVNode(unref(N8nTooltip_default), null, {
1325
- content: withCtx(() => [
1326
- createTextVNode(toDisplayString(activeVersionName.value), 1),
1327
- _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)),
1328
1202
  createTextVNode(toDisplayString(unref(i18n).baseText("workflowHistory.item.active")) + " ", 1),
1329
1203
  latestPublishDate.value ? (openBlock(), createBlock(TimeAgo_default, {
1330
1204
  key: 0,
1331
1205
  date: latestPublishDate.value
1332
1206
  }, null, 8, ["date"])) : createCommentVNode("", true)
1333
- ]),
1334
- default: withCtx(() => [createVNode(unref(N8nIcon_default), {
1335
- icon: "circle-check",
1336
- color: "success",
1337
- size: "xlarge",
1338
- class: normalizeClass(_ctx.$style.icon)
1339
- }, null, 8, ["class"])]),
1340
- _: 1
1341
- })], 2)) : createCommentVNode("", true),
1342
- !_ctx.isArchived && (_ctx.workflowPermissions.update || _ctx.workflowPermissions.publish) ? (openBlock(), createElementBlock("div", {
1343
- key: 2,
1344
- class: normalizeClass(_ctx.$style.publishButtonWrapper)
1345
- }, [createVNode(unref(N8nTooltip_default), { disabled: !publishTooltipText.value }, {
1346
- content: withCtx(() => [createTextVNode(toDisplayString(publishTooltipText.value), 1)]),
1207
+ ], 64)) : createCommentVNode("", true)])]),
1347
1208
  default: withCtx(() => [createVNode(unref(N8nButton_default), {
1348
1209
  loading: autoSaveForPublish.value,
1349
- disabled: !publishButtonEnabled.value || isWorkflowSaving.value,
1210
+ disabled: !publishButtonConfig.value.enabled || readOnlyForPublish.value,
1350
1211
  type: "secondary",
1351
1212
  "data-test-id": "workflow-open-publish-modal-button",
1352
1213
  onClick: onPublishButtonClick
1353
1214
  }, {
1354
- 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)]),
1355
1224
  _: 1
1356
1225
  }, 8, ["loading", "disabled"])]),
1357
1226
  _: 1
1358
1227
  }, 8, ["disabled"])], 2)) : createCommentVNode("", true),
1359
- createVNode(SaveButton_default, {
1360
- type: "primary",
1361
- saved: isWorkflowSaved.value,
1362
- disabled: isWorkflowSaving.value || _ctx.readOnly || _ctx.isArchived || !_ctx.isNewWorkflow && !_ctx.workflowPermissions.update,
1363
- "is-saving": isWorkflowSaving.value,
1364
- "with-shortcut": !_ctx.readOnly && !_ctx.isArchived && _ctx.workflowPermissions.update,
1365
- "shortcut-tooltip": unref(i18n).baseText("saveWorkflowButton.hint"),
1366
- "data-test-id": "workflow-save-button",
1367
- onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("workflow:saved"))
1368
- }, null, 8, [
1369
- "saved",
1370
- "disabled",
1371
- "is-saving",
1372
- "with-shortcut",
1373
- "shortcut-tooltip"
1374
- ]),
1375
1228
  createVNode(WorkflowHistoryButton_default, {
1376
1229
  "workflow-id": props.id,
1377
- "is-new-workflow": _ctx.isNewWorkflow
1230
+ "is-new-workflow": __props.isNewWorkflow
1378
1231
  }, null, 8, ["workflow-id", "is-new-workflow"]),
1379
1232
  createVNode(ActionsDropdownMenu_default, {
1380
- id: _ctx.id,
1233
+ id: __props.id,
1381
1234
  ref: "actionsMenu",
1382
- "workflow-permissions": _ctx.workflowPermissions,
1383
- "is-new-workflow": _ctx.isNewWorkflow,
1384
- "read-only": _ctx.readOnly,
1385
- "is-archived": _ctx.isArchived,
1386
- name: _ctx.name,
1387
- tags: _ctx.tags,
1388
- "current-folder": _ctx.currentFolder,
1389
- meta: _ctx.meta,
1390
- "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
1391
1243
  }, null, 8, [
1392
1244
  "id",
1393
1245
  "workflow-permissions",
@@ -1404,10 +1256,16 @@ var WorkflowHeaderDraftPublishActions_vue_vue_type_script_setup_true_lang_defaul
1404
1256
  }
1405
1257
  });
1406
1258
  var WorkflowHeaderDraftPublishActions_vue_vue_type_style_index_0_lang_module_default = {
1407
- container: "_container_p6bf9_123",
1408
- activeVersionIndicator: "_activeVersionIndicator_p6bf9_127",
1409
- icon: "_icon_p6bf9_131",
1410
- 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"
1411
1269
  };
1412
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 }]]);
1413
1271
  var _hoisted_1 = {
@@ -1429,8 +1287,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1429
1287
  isArchived: { type: Boolean },
1430
1288
  description: {}
1431
1289
  },
1432
- emits: ["workflow:deactivated"],
1433
- setup(__props, { emit: __emit }) {
1290
+ setup(__props) {
1434
1291
  const WORKFLOW_NAME_BP_TO_WIDTH = {
1435
1292
  XS: 150,
1436
1293
  SM: 200,
@@ -1439,14 +1296,13 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1439
1296
  XL: 1e3
1440
1297
  };
1441
1298
  const props = __props;
1442
- const emit = __emit;
1443
1299
  const $style = useCssModule();
1444
1300
  const settingsStore = useSettingsStore();
1445
1301
  const uiStore = useUIStore();
1446
1302
  const workflowsStore = useWorkflowsStore();
1447
1303
  const projectsStore = useProjectsStore();
1304
+ const collaborationStore = useCollaborationStore();
1448
1305
  const foldersStore = useFoldersStore();
1449
- const npsSurveyStore = useNpsSurveyStore();
1450
1306
  const i18n = useI18n();
1451
1307
  const router = useRouter();
1452
1308
  const route = useRoute();
@@ -1469,10 +1325,11 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1469
1325
  const isNewWorkflow = computed(() => {
1470
1326
  return !workflowsStore.isWorkflowSaved[props.id];
1471
1327
  });
1472
- const isWorkflowSaving = computed(() => {
1473
- return uiStore.isActionActive.workflowSaving;
1474
- });
1475
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
+ });
1476
1333
  const workflowTagIds = computed(() => {
1477
1334
  return (props.tags ?? []).map((tag) => typeof tag === "string" ? tag : tag.id);
1478
1335
  });
@@ -1490,26 +1347,8 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1490
1347
  isTagsEditEnabled.value = false;
1491
1348
  renameInput.value?.forceCancel();
1492
1349
  });
1493
- async function onSaveButtonClick() {
1494
- if (isWorkflowSaving.value) return;
1495
- const id = getWorkflowId(props.id, route.params.name);
1496
- const name = props.name;
1497
- const tags = props.tags;
1498
- const wasNewWorkflow = !workflowsStore.isWorkflowSaved[props.id];
1499
- if (await workflowSaving.saveCurrentWorkflow({
1500
- id,
1501
- name,
1502
- tags
1503
- })) {
1504
- showCreateWorkflowSuccessToast(id, wasNewWorkflow);
1505
- await npsSurveyStore.fetchPromptsData();
1506
- if (route.name === VIEWS.EXECUTION_DEBUG) await router.replace({
1507
- name: VIEWS.WORKFLOW,
1508
- params: { name: props.id }
1509
- });
1510
- }
1511
- }
1512
1350
  function onTagsEditEnable() {
1351
+ if (readOnlyActions.value) return;
1513
1352
  appliedTagIds.value = props.tags ?? [];
1514
1353
  isTagsEditEnabled.value = true;
1515
1354
  setTimeout(() => {
@@ -1525,6 +1364,11 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1525
1364
  return;
1526
1365
  }
1527
1366
  if (tagsSaving.value) return;
1367
+ if (readOnlyActions.value) {
1368
+ isTagsEditEnabled.value = false;
1369
+ return;
1370
+ }
1371
+ collaborationStore.requestWriteAccess();
1528
1372
  tagsSaving.value = true;
1529
1373
  const saved = await workflowSaving.saveCurrentWorkflow({ tags });
1530
1374
  telemetry$1.track("User edited workflow tags", {
@@ -1580,7 +1424,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1580
1424
  toast.showError(error, locale.baseText("generic.archiveWorkflowError"));
1581
1425
  return;
1582
1426
  }
1583
- uiStore.stateIsDirty = false;
1427
+ uiStore.markStateClean();
1584
1428
  toast.showMessage({
1585
1429
  title: locale.baseText("mainSidebar.showMessage.handleArchive.title", { interpolate: { workflowName: props.name } }),
1586
1430
  type: "success"
@@ -1613,7 +1457,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1613
1457
  toast.showError(error, locale.baseText("generic.deleteWorkflowError"));
1614
1458
  return;
1615
1459
  }
1616
- uiStore.stateIsDirty = false;
1460
+ uiStore.markStateClean();
1617
1461
  documentTitle.reset();
1618
1462
  toast.showMessage({
1619
1463
  title: locale.baseText("mainSidebar.showMessage.handleSelect1.title", { interpolate: { workflowName: props.name } }),
@@ -1669,6 +1513,9 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1669
1513
  const handleImportWorkflowFromFile = () => {
1670
1514
  if (workflowHeaderActionsRef.value?.importFileRef) workflowHeaderActionsRef.value.importFileRef.click();
1671
1515
  };
1516
+ const handleWorkflowSaved = (data) => {
1517
+ if (data.isFirstSave) showCreateWorkflowSuccessToast(props.id, true);
1518
+ };
1672
1519
  onMounted(() => {
1673
1520
  nodeViewEventBus.on("importWorkflowFromFile", handleImportWorkflowFromFile);
1674
1521
  nodeViewEventBus.on("archiveWorkflow", handleArchiveWorkflow);
@@ -1676,6 +1523,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1676
1523
  nodeViewEventBus.on("deleteWorkflow", handleDeleteWorkflow);
1677
1524
  nodeViewEventBus.on("renameWorkflow", onNameToggle);
1678
1525
  nodeViewEventBus.on("addTag", onTagsEditEnable);
1526
+ canvasEventBus.on("saved:workflow", handleWorkflowSaved);
1679
1527
  });
1680
1528
  onBeforeUnmount(() => {
1681
1529
  nodeViewEventBus.off("importWorkflowFromFile", handleImportWorkflowFromFile);
@@ -1684,6 +1532,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1684
1532
  nodeViewEventBus.off("deleteWorkflow", handleDeleteWorkflow);
1685
1533
  nodeViewEventBus.off("renameWorkflow", onNameToggle);
1686
1534
  nodeViewEventBus.off("addTag", onTagsEditEnable);
1535
+ canvasEventBus.off("saved:workflow", handleWorkflowSaved);
1687
1536
  });
1688
1537
  return (_ctx, _cache) => {
1689
1538
  return openBlock(), createElementBlock("div", { class: normalizeClass(unref($style).container) }, [
@@ -1705,15 +1554,15 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1705
1554
  }, "/", 2)) : createCommentVNode("", true), (openBlock(), createBlock(unref(N8nInlineTextEdit_default), {
1706
1555
  ref_key: "renameInput",
1707
1556
  ref: renameInput,
1708
- key: _ctx.id,
1557
+ key: __props.id,
1709
1558
  placeholder: "Workflow name",
1710
1559
  "data-test-id": "workflow-name-input",
1711
1560
  class: "name",
1712
- "model-value": _ctx.name,
1561
+ "model-value": __props.name,
1713
1562
  "max-length": unref(128),
1714
1563
  "max-width": WORKFLOW_NAME_BP_TO_WIDTH[bp],
1715
- "read-only": _ctx.readOnly || _ctx.isArchived || !isNewWorkflow.value && !workflowPermissions.value.update,
1716
- disabled: _ctx.readOnly || _ctx.isArchived || !isNewWorkflow.value && !workflowPermissions.value.update,
1564
+ "read-only": readOnlyActions.value,
1565
+ disabled: readOnlyActions.value,
1717
1566
  "onUpdate:modelValue": onNameSubmit
1718
1567
  }, null, 8, [
1719
1568
  "model-value",
@@ -1726,7 +1575,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1726
1575
  }, 1032, ["current-folder"])]),
1727
1576
  _: 1
1728
1577
  }),
1729
- 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, {
1730
1579
  key: 0,
1731
1580
  ref: "dropdown",
1732
1581
  modelValue: appliedTagIds.value,
@@ -1741,18 +1590,18 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1741
1590
  "modelValue",
1742
1591
  "event-bus",
1743
1592
  "placeholder"
1744
- ])) : (_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", {
1745
1594
  class: "add-tag clickable",
1746
1595
  "data-test-id": "new-tag-link",
1747
1596
  onClick: onTagsEditEnable
1748
1597
  }, " + " + toDisplayString(unref(i18n).baseText("workflowDetails.addTag")), 1)])) : (openBlock(), createBlock(WorkflowTagsContainer_default, {
1749
- key: _ctx.id,
1598
+ key: __props.id,
1750
1599
  "tag-ids": workflowTagIds.value,
1751
1600
  clickable: true,
1752
1601
  responsive: true,
1753
1602
  "data-test-id": "workflow-tags",
1754
1603
  onClick: onTagsEditEnable
1755
- }, 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), {
1756
1605
  key: 0,
1757
1606
  class: "ml-3xs",
1758
1607
  theme: "tertiary",
@@ -1766,18 +1615,16 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1766
1615
  default: withCtx(() => [!isNewWorkflow.value ? (openBlock(), createBlock(WorkflowProductionChecklist_default, {
1767
1616
  key: 0,
1768
1617
  workflow: unref(workflowsStore).workflow
1769
- }, null, 8, ["workflow"])) : createCommentVNode("", true), unref(true) ? (openBlock(), createBlock(WorkflowHeaderDraftPublishActions_default, {
1770
- key: 1,
1771
- id: _ctx.id,
1618
+ }, null, 8, ["workflow"])) : createCommentVNode("", true), createVNode(WorkflowHeaderDraftPublishActions_default, {
1619
+ id: __props.id,
1772
1620
  ref: "workflowHeaderActions",
1773
- tags: _ctx.tags,
1774
- name: _ctx.name,
1775
- meta: _ctx.meta,
1776
- "read-only": _ctx.readOnly,
1777
- "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,
1778
1626
  "is-new-workflow": isNewWorkflow.value,
1779
- "workflow-permissions": workflowPermissions.value,
1780
- "onWorkflow:saved": onSaveButtonClick
1627
+ "workflow-permissions": workflowPermissions.value
1781
1628
  }, null, 8, [
1782
1629
  "id",
1783
1630
  "tags",
@@ -1787,33 +1634,7 @@ var WorkflowDetails_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
1787
1634
  "is-archived",
1788
1635
  "is-new-workflow",
1789
1636
  "workflow-permissions"
1790
- ])) : (openBlock(), createBlock(WorkflowHeaderActions_default, {
1791
- key: 2,
1792
- id: _ctx.id,
1793
- ref: "workflowHeaderActions",
1794
- name: _ctx.name,
1795
- tags: _ctx.tags,
1796
- "current-folder": _ctx.currentFolder,
1797
- meta: _ctx.meta,
1798
- "read-only": _ctx.readOnly,
1799
- "is-archived": _ctx.isArchived,
1800
- active: _ctx.active,
1801
- "is-new-workflow": isNewWorkflow.value,
1802
- "workflow-permissions": workflowPermissions.value,
1803
- "onWorkflow:saved": onSaveButtonClick,
1804
- "onWorkflow:deactivated": _cache[1] || (_cache[1] = ($event) => emit("workflow:deactivated"))
1805
- }, null, 8, [
1806
- "id",
1807
- "name",
1808
- "tags",
1809
- "current-folder",
1810
- "meta",
1811
- "read-only",
1812
- "is-archived",
1813
- "active",
1814
- "is-new-workflow",
1815
- "workflow-permissions"
1816
- ]))]),
1637
+ ])]),
1817
1638
  _: 1
1818
1639
  })
1819
1640
  ], 2);
@@ -1828,7 +1649,7 @@ var WorkflowDetails_vue_vue_type_style_index_1_lang_module_default = {
1828
1649
  closeNodeViewDiscovery,
1829
1650
  "header-controls": "_header-controls_7bao3_145"
1830
1651
  };
1831
- 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"]]);
1832
1653
  init_shared_esm_bundler();
1833
1654
  var vue_github_button_default = defineComponent({
1834
1655
  name: "github-button",
@@ -1866,7 +1687,7 @@ var vue_github_button_default = defineComponent({
1866
1687
  const _this = this;
1867
1688
  __vitePreload(() => import(
1868
1689
  /* webpackMode: "eager" */
1869
- "./buttons.esm-Euf82NbC.js"
1690
+ "./buttons.esm-DHCtg4os.js"
1870
1691
  ), []).then(function(module) {
1871
1692
  if (_this.$el.lastChild !== _) return;
1872
1693
  module.render(_.appendChild(_this.$refs._), function(el) {
@@ -1892,6 +1713,7 @@ var MainHeader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
1892
1713
  const ndvStore = useNDVStore();
1893
1714
  const uiStore = useUIStore();
1894
1715
  const sourceControlStore = useSourceControlStore();
1716
+ const collaborationStore = useCollaborationStore();
1895
1717
  const workflowsStore = useWorkflowsStore();
1896
1718
  const executionsStore = useExecutionsStore();
1897
1719
  const settingsStore = useSettingsStore();
@@ -1932,7 +1754,7 @@ var MainHeader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
1932
1754
  const workflow = computed(() => workflowsStore.workflow);
1933
1755
  const workflowId = computed(() => String(route.params.name || workflowsStore.workflowId));
1934
1756
  const onWorkflowPage = computed(() => !!(route.meta.nodeView || route.meta.keepWorkflowAlive));
1935
- const readOnly = computed(() => sourceControlStore.preferences.branchReadOnly);
1757
+ const readOnly = computed(() => sourceControlStore.preferences.branchReadOnly || collaborationStore.shouldBeReadOnly);
1936
1758
  const isEnterprise = computed(() => settingsStore.isQueueModeEnabled && settingsStore.isWorkerViewAvailable);
1937
1759
  const isTelemetryEnabled = computed(() => {
1938
1760
  return settingsStore.isTelemetryEnabled;
@@ -2018,7 +1840,8 @@ var MainHeader_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
2018
1840
  const { href } = router.resolve(routeToNavigateTo);
2019
1841
  window.open(href, "_blank");
2020
1842
  } else if (route.name !== routeToNavigateTo.name) {
2021
- 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();
2022
1845
  activeHeaderTab.value = MAIN_HEADER_TABS.WORKFLOW;
2023
1846
  await router.push(routeToNavigateTo);
2024
1847
  }
@@ -2146,4 +1969,12 @@ var MainHeader_vue_vue_type_style_index_0_lang_module_default = {
2146
1969
  "github-button-container": "_github-button-container_4ekmy_173"
2147
1970
  };
2148
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 }]]);
2149
- 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 };