n8n-editor-ui 1.102.2 → 1.104.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/assets/{ActionDropdown-CiegfqhB.js → ActionDropdown-Ct6XJ0cl.js} +1 -1
  2. package/dist/assets/{AnimatedSpinner-DZ7wHd_W.js → AnimatedSpinner-CIyQ3zKd.js} +1 -1
  3. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-BQoi5khn.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-xv6FYiyR.js} +1 -1
  4. package/dist/assets/{AuthView-K2y2JXyp.js → AuthView-dJdngoqx.js} +2 -2
  5. package/dist/assets/{ChangePasswordView-D_EsQtLD.js → ChangePasswordView-C74U84q5.js} +3 -3
  6. package/dist/assets/CollectionParameter-DCn5Jtcj.js +4 -0
  7. package/dist/assets/ConsumedTokensDetails.vue_vue_type_script_setup_true_lang-CkASni2S.js +44 -0
  8. package/dist/assets/{CredentialsView-DvE9GnD7.js → CredentialsView-jouDB3H1.js} +8 -8
  9. package/dist/assets/{DemoFooter-kRP32xy4.js → DemoFooter-CHlbEpB-.js} +9 -8
  10. package/dist/assets/{EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-B6KKFEL7.js → EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-CbDihlsO.js} +1 -1
  11. package/dist/assets/{EntityNotFound-q_5k8QTh.js → EntityNotFound-Dtqj9thX.js} +1 -1
  12. package/dist/assets/{EntityUnAuthorised-DrFh2EVh.js → EntityUnAuthorised-BBsbc6du.js} +1 -1
  13. package/dist/assets/{ErrorView-CdyA4lBI.js → ErrorView-BN4Jm32q.js} +1 -1
  14. package/dist/assets/{EvaluationsRootView-DBi9hUxa.js → EvaluationsRootView-B70WfmnQ.js} +5 -3
  15. package/dist/assets/{EvaluationsView-6l_Invxt.css → EvaluationsView-BTyYfInB.css} +6 -6
  16. package/dist/assets/{EvaluationsView-VbCSsM2z.js → EvaluationsView-DQd7op3j.js} +53 -40
  17. package/dist/assets/{ExecutionsTime-DkME6I3E.css → ExecutionsTime-Bo7IOE5K.css} +6 -6
  18. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-v5SEEKlZ.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-C_2brmCr.js} +16 -16
  19. package/dist/assets/{ExecutionsView-sSmNa_LK.js → ExecutionsView-CKPZTnZV.js} +21 -18
  20. package/dist/assets/{FileSaver.min-BemkeU_7.js → FileSaver.min-BvxTURBB.js} +1 -1
  21. package/dist/assets/{FixedCollectionParameter-yzvCzSx6.js → FixedCollectionParameter-CA-CigeR.js} +1 -1
  22. package/dist/assets/{ForgotMyPasswordView-BKvBLqbr.js → ForgotMyPasswordView-YyVmo-nw.js} +3 -3
  23. package/dist/assets/{InfoAccordion--ZQQuSPX.js → InfoAccordion-BNmUe2V9.js} +1 -1
  24. package/dist/assets/{InsightsChartAverageRuntime-DGOGXDwW.js → InsightsChartAverageRuntime-C9sCNhzD.js} +5 -4
  25. package/dist/assets/{InsightsChartFailed-1vg5XpxV.js → InsightsChartFailed-DWA6YbZj.js} +5 -4
  26. package/dist/assets/{InsightsChartFailureRate-7nJvVi9O.js → InsightsChartFailureRate-CfknGtrr.js} +5 -4
  27. package/dist/assets/{InsightsChartTimeSaved-DKn1pZ2q.js → InsightsChartTimeSaved-DtLO9DJx.js} +5 -4
  28. package/dist/assets/{InsightsChartTotal-ByrPtNMJ.js → InsightsChartTotal-yX_QJ-44.js} +5 -4
  29. package/dist/assets/{InsightsDashboard-BwLnzxKC.js → InsightsDashboard-BlYvn96O.js} +19 -19
  30. package/dist/assets/{InsightsDashboard-CXbI-Jyg.css → InsightsDashboard-C27Avzrv.css} +2 -2
  31. package/dist/assets/{InsightsPaywall-8Xzv5tgi.js → InsightsPaywall-BCfIY_xn.js} +3 -3
  32. package/dist/assets/{InsightsSummary-CVMZ0AIR.js → InsightsSummary-OiO7efWD.js} +9 -4
  33. package/dist/assets/{InsightsTableWorkflows-DJhX6bQW.css → InsightsTableWorkflows-BTHSCwX8.css} +27 -3
  34. package/dist/assets/{InsightsTableWorkflows-KGsV_wLS.js → InsightsTableWorkflows-pTl3m7wx.js} +80 -27
  35. package/dist/assets/{Logo-DFdhGUpH.js → Logo-8g4P9vyv.js} +1 -1
  36. package/dist/assets/{LogsPanel-Bvy4ANV7.css → LogsPanel-D0xdq4fV.css} +21 -21
  37. package/dist/assets/{LogsPanel-DDzEUcu_.js → LogsPanel-so01MtIR.js} +23 -12
  38. package/dist/assets/{MainHeader-IUjqKc1i.js → MainHeader-CcUlKfHC.js} +20 -26
  39. package/dist/assets/{MainHeader-DYYEm7nF.css → MainHeader-qSHM1Rvp.css} +12 -12
  40. package/dist/assets/{MainSidebar-CaLHZgDB.css → MainSidebar-D74VZmM5.css} +7 -8
  41. package/dist/assets/{MainSidebar-BV-JzM27.js → MainSidebar-DOGhP_oY.js} +26 -25
  42. package/dist/assets/{N8nDataTableServer-Dq5Mwh9d.js → N8nDataTableServer-9HerjyzX.js} +39 -19
  43. package/dist/assets/{NodeCreation-DCV9QVeh.js → NodeCreation-CVbCKnet.js} +45 -21
  44. package/dist/assets/{NodeCreation-32nlvQSy.css → NodeCreation-CxN6JIS_.css} +9 -1
  45. package/dist/assets/{NodeCreator-C8jv1gta.js → NodeCreator-BOosPF8_.js} +114 -204
  46. package/dist/assets/{NodeCreator-DWE25utr.css → NodeCreator-CkvY2niF.css} +0 -128
  47. package/dist/assets/{NodeDetailsView-D7qedYA0.js → NodeDetailsView-KFidngJi.js} +21 -16
  48. package/dist/assets/{NodeDetailsViewV2-BAkPjDo5.js → NodeDetailsViewV2-BL4KKqW-.js} +21 -16
  49. package/dist/assets/{NodeView-DKlyR0_C.js → NodeView-BzC6ELga.js} +2271 -686
  50. package/dist/assets/{NodeView-BbQy7Are.css → NodeView-G2qfXaOy.css} +766 -95
  51. package/dist/assets/{ProjectHeader-Co0EPo6y.js → ProjectHeader-B9-GdGvC.js} +2 -2
  52. package/dist/assets/{ProjectSettings-CUwuhSyu.js → ProjectSettings-CE4_geFa.js} +7 -5
  53. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-DDVpVAyT.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-Bb8zUJvi.js} +1 -1
  54. package/dist/assets/{ResourcesListLayout-0KbQy3_m.js → ResourcesListLayout-ClTEnqVS.js} +3 -3
  55. package/dist/assets/{RunDataJson-T-LRvnsQ.js → RunDataJson-fXQKTIFD.js} +8 -9
  56. package/dist/assets/{RunDataJsonActions-C5tGgl2w.js → RunDataJsonActions-CMP1sUPZ.js} +1 -1
  57. package/dist/assets/RunDataParsedAiContent-CHK6Y4ET.js +298 -0
  58. package/dist/assets/{RunDataSearch-CsykTpQU.js → RunDataSearch-CAZGWZzz.js} +1 -1
  59. package/dist/assets/{RunDataTable-DS-hDrAF.js → RunDataTable-CeqmA-n3.js} +65 -56
  60. package/dist/assets/{RunDataTable-CTBtmQIs.css → RunDataTable-n918b-Qv.css} +55 -55
  61. package/dist/assets/{SamlOnboarding-Dr42BiUa.js → SamlOnboarding-BrdzPMSK.js} +3 -3
  62. package/dist/assets/{SettingsApiView-0TAqOns3.js → SettingsApiView-Cj2YYKAl.js} +5 -4
  63. package/dist/assets/{SettingsCommunityNodesView-BO5mZg81.js → SettingsCommunityNodesView-ChB--kZD.js} +4 -3
  64. package/dist/assets/{SettingsExternalSecrets-BmpYfnUN.js → SettingsExternalSecrets-BjghCvkE.js} +5 -3
  65. package/dist/assets/{SettingsLdapView-AdcIL_WB.js → SettingsLdapView-DIB1-nTk.js} +1 -1
  66. package/dist/assets/{SettingsLogStreamingView-DHAPBv4i.js → SettingsLogStreamingView-BOOGkcwK.js} +1 -1
  67. package/dist/assets/{SettingsPersonalView-D-sKTNF5.js → SettingsPersonalView-DaNZTNUy.js} +1 -1
  68. package/dist/assets/{SettingsSourceControl-D_jgIQPN.js → SettingsSourceControl-B5fQRT0V.js} +10 -8
  69. package/dist/assets/{SettingsSso-DpxORkrt.js → SettingsSso-CWX-T13W.js} +1 -1
  70. package/dist/assets/{SettingsUsageAndPlan-DWu4RW1N.js → SettingsUsageAndPlan-Cnnf9k6X.js} +15 -10
  71. package/dist/assets/{SettingsUsageAndPlan-D6TiPwUx.css → SettingsUsageAndPlan-ZZQpCmyQ.css} +3 -3
  72. package/dist/assets/{SettingsUsersView-r6-ZO8CO.js → SettingsUsersView-BLDi4lpv.js} +107 -44
  73. package/dist/assets/{SettingsUsersView-BuZbf1jq.css → SettingsUsersView-RQTdLxyb.css} +13 -6
  74. package/dist/assets/{SettingsView-DoZ4920P.js → SettingsView-Dtc8MEv6.js} +1 -1
  75. package/dist/assets/{SetupView-Ca70rhsh.js → SetupView-C4C-2Idz.js} +3 -3
  76. package/dist/assets/{SetupWorkflowCredentialsButton-ujybntOa.js → SetupWorkflowCredentialsButton-Pzrxag-k.js} +1 -1
  77. package/dist/assets/{SetupWorkflowFromTemplateView-KE6NTkHC.js → SetupWorkflowFromTemplateView-CRsZDYct.js} +3 -3
  78. package/dist/assets/{SigninView-_rmKLSpx.js → SigninView-COyoSAUi.js} +3 -3
  79. package/dist/assets/{SignoutView-DYPGyBsZ.js → SignoutView-B0t9kc5s.js} +1 -1
  80. package/dist/assets/{SignupView-BDSpYIB0.js → SignupView-BN8MCOnb.js} +3 -3
  81. package/dist/assets/{TableBase-Bz6zRvAL.js → TableBase-BmhIwPwZ.js} +1 -1
  82. package/dist/assets/{Tags-Doq3WsWA.js → Tags-DeTgaVsD.js} +1 -1
  83. package/dist/assets/{TemplateDetails-BzDS-0Fd.js → TemplateDetails-Bh-WSvQ-.js} +2 -2
  84. package/dist/assets/{TemplateList-D_XBHKQu.js → TemplateList-DxvJMjPE.js} +1 -1
  85. package/dist/assets/{TemplatesCollectionView-BvnC5QZ9.js → TemplatesCollectionView-BhilAS_8.js} +6 -6
  86. package/dist/assets/{TemplatesSearchView-CCsnhiD3.js → TemplatesSearchView-CWxnTQ8Z.js} +3 -3
  87. package/dist/assets/{TemplatesView-DbW9D41Q.js → TemplatesView-Co-FQLhr.js} +1 -1
  88. package/dist/assets/{TemplatesWorkflowView-CVFtBBcd.js → TemplatesWorkflowView-DAWgsT0T.js} +6 -6
  89. package/dist/assets/{TriggerPanel-DRpKKKun.css → TriggerPanel-DJv04feX.css} +1 -354
  90. package/dist/assets/{TriggerPanel-CP3_UsCW.js → TriggerPanel-JaXhe1VW.js} +133 -1089
  91. package/dist/assets/{VariablesView-DIZkSQZ3.js → VariablesView-JnfEn1f-.js} +5 -5
  92. package/dist/assets/VueMarkdown-DDKnTMgT.js +1570 -0
  93. package/dist/assets/{WorkerView-DgXLi4d9.js → WorkerView-DZG4C_Qp.js} +6 -5
  94. package/dist/assets/{WorkflowActivator-f0lJXePV.js → WorkflowActivator-C8hP37n7.js} +2 -2
  95. package/dist/assets/{WorkflowExecutionsInfoAccordion-BFSae6PE.js → WorkflowExecutionsInfoAccordion-DCNvkxhh.js} +2 -2
  96. package/dist/assets/{WorkflowExecutionsLandingPage-Bb104kSO.js → WorkflowExecutionsLandingPage-DVp6SoPy.js} +3 -3
  97. package/dist/assets/{WorkflowExecutionsPreview-Do5Rp-8m.js → WorkflowExecutionsPreview-CKYWZWv1.js} +9 -7
  98. package/dist/assets/{WorkflowExecutionsView-BSv7OYhx.js → WorkflowExecutionsView-BIkweP3p.js} +8 -8
  99. package/dist/assets/{WorkflowHistory-CsEfwZK8.js → WorkflowHistory-C0LrWJW0.js} +6 -6
  100. package/dist/assets/{WorkflowOnboardingView-BOvx7CPi.js → WorkflowOnboardingView-CWMUgnLK.js} +1 -1
  101. package/dist/assets/{WorkflowPreview-BQ_GLS2J.js → WorkflowPreview-DmYMBSH3.js} +3 -1
  102. package/dist/assets/{WorkflowsView-DYxrTukw.js → WorkflowsView-jEphnf90.js} +125 -17
  103. package/dist/assets/aiTemplatesStarterCollection.store-oECEA5nR.js +794 -0
  104. package/dist/assets/{chartjs.utils-D8ESC4_p.js → chartjs.utils-CP28DnUQ.js} +2 -2
  105. package/dist/assets/{en-C2EOIYih.js → en-BX7CKkqE.js} +27 -6
  106. package/dist/assets/{global-link-actions-BIVeUMGo.js → global-link-actions-BjpAG7gt.js} +1 -1
  107. package/dist/assets/{import-curl-CjhdjoGU.js → import-curl-BD22LJ4z.js} +1 -1
  108. package/dist/assets/{index-COleXxZf.css → index-BWpYwmXd.css} +541 -1074
  109. package/dist/assets/{index-DAODXvFs.js → index-CjbtyS1n.js} +1 -1
  110. package/dist/assets/{index-B3p3789J.js → index-Cm5yBbby.js} +21381 -15752
  111. package/dist/assets/{pickBy-CaeaG_7P.js → pickBy-DA-1tKxT.js} +1 -1
  112. package/dist/assets/{templateActions-Ct4VGqHx.js → templateActions-D9IAsJ2m.js} +1 -1
  113. package/dist/assets/{typescript.worker-CUj0Nj-S.js → typescript.worker-KwUz68Jx.js} +2499 -157
  114. package/dist/assets/{useBeforeUnload-Yj83KQFp.js → useBeforeUnload-BR-V9Uaz.js} +1 -1
  115. package/dist/assets/{useExecutionDebugging-wUQ9K2sh.js → useExecutionDebugging-C8zR-uFJ.js} +1 -1
  116. package/dist/assets/{useExecutionHelpers-i07QEXws.js → useExecutionHelpers-DQcWcZ8o.js} +1 -1
  117. package/dist/assets/{useImportCurlCommand-Bs8VOC2z.js → useImportCurlCommand-B3-fEq8S.js} +9 -9
  118. package/dist/assets/{RunData-DuKNwYqe.css → useKeybindings-2A271Jke.css} +193 -62
  119. package/dist/assets/{RunData-CctCvWsu.js → useKeybindings-DetzdpXy.js} +288 -1696
  120. package/dist/assets/{useProjectPages-DHCwu3nX.js → useProjectPages-qXIMd_UF.js} +1 -1
  121. package/dist/assets/{usePushConnection-Iyy-883l.js → usePushConnection-Duvg6z8O.js} +10 -2
  122. package/dist/assets/{useWorkflowActivate-DpHXxGAq.js → useWorkflowActivate-BE4Ckf9k.js} +1 -1
  123. package/dist/index.html +3 -7
  124. package/eslint.config.mjs +1 -1
  125. package/index.html +1 -5
  126. package/package.json +1 -1
  127. package/vite.config.mts +23 -3
  128. package/dist/assets/CollectionParameter-DvyRKBx0.js +0 -4
  129. package/dist/assets/RunDataParsedAiContent-BILLIvVH.js +0 -148
  130. package/dist/assets/useKeybindings-BUK7Ngh6.css +0 -133
  131. package/dist/assets/useKeybindings-ul7syjnB.js +0 -118
@@ -1,25 +1,26 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/NodeCreation-DCV9QVeh.js","assets/index-B3p3789J.js","assets/index-COleXxZf.css","assets/NodeCreation-32nlvQSy.css","assets/NodeDetailsView-D7qedYA0.js","assets/TriggerPanel-CP3_UsCW.js","assets/RunData-CctCvWsu.js","assets/FileSaver.min-BemkeU_7.js","assets/useKeybindings-ul7syjnB.js","assets/useKeybindings-BUK7Ngh6.css","assets/useExecutionHelpers-i07QEXws.js","assets/RunData-DuKNwYqe.css","assets/RunDataParsedAiContent-BILLIvVH.js","assets/RunDataParsedAiContent-wfIiKsq7.css","assets/InfoAccordion--ZQQuSPX.js","assets/InfoAccordion-dxudNqVC.css","assets/TriggerPanel-DRpKKKun.css","assets/useWorkflowActivate-DpHXxGAq.js","assets/ActionDropdown-CiegfqhB.js","assets/ActionDropdown-BmC0wfMx.css","assets/import-curl-CjhdjoGU.js","assets/global-link-actions-BIVeUMGo.js","assets/useExecutionDebugging-wUQ9K2sh.js","assets/useBeforeUnload-Yj83KQFp.js","assets/NodeDetailsView-CaTI-1QQ.css","assets/NodeDetailsViewV2-BAkPjDo5.js","assets/NodeDetailsViewV2-BxNx4ZUM.css","assets/SetupWorkflowCredentialsButton-ujybntOa.js"])))=>i.map(i=>d[i]);
2
- import { _ as _export_sfc$1, h as createElementBlock, g as openBlock, j as createBaseVNode, d as defineComponent, cp as PanelPosition, cq as useVueFlow, bV as toRef, e as createBlock, w as withCtx, J as renderSlot, f as createCommentVNode, F as Fragment, i as createVNode, b_ as resolveDynamicComponent, l as unref, cr as _sfc_main$R, x as computed, a0 as _sfc_main$S, c as useI18n, c9 as KeyboardShortcutTooltip, n as normalizeClass, q as N8nButton, bq as NodeConnectionTypes, cs as getBezierPath, ct as getSmoothStepPath, cu as Position, bW as inject, cv as CanvasKey, ab as useCssModule, cw as parseCanvasConnectionHandleString, r as ref, o as onMounted, y as renderList, cx as _sfc_main$d$1, P as normalizeStyle, T as useUIStore, bI as useNodeTypesStore, a4 as useWorkflowsStore, ae as useSourceControlStore, am as getResourcePermissions, cy as isNodeWithWorkflowSelector, cz as getSubworkflowId, cA as isPresent, aa as watch, cB as getMousePosition, aS as STICKY_NODE_TYPE, bB as usePinnedData, cC as NOT_DUPLICATABLE_NODE_TYPES, cD as isExecutable, cE as Teleport, cb as useStyles, bL as getDefaultExportFromCjs, cF as DEFAULT_NODE_SIZE, cG as CanvasNodeRenderType, cH as GRID_SIZE, cd as useThrottleFn, cI as getRectOfNodes, c1 as onUnmounted, cJ as onKeyDown, cK as onKeyUp, cL as useSlots, c3 as useAttrs, cM as getBoundsofRects, cN as watchEffect, t as toDisplayString, cO as getConnectedEdges, bY as normalizeProps, D as mergeProps, bG as provide, aK as h, bh as createSlots, cP as isValidNodeConnectionType, cQ as _sfc_main$3$1, cR as CanvasNodeKey, cS as CanvasConnectionMode, cT as mergeModels, cU as useModel, I as onBeforeUnmount, cV as _sfc_main$T, N as N8nIcon, $ as N8nTooltip, bD as useNodeHelpers, cW as TitledList, k as createTextVNode, cX as CanvasNodeDirtiness, ar as useTemplateRef, cY as useElementSize, bR as _sfc_main$U, as as InlineRename, cZ as toValue, c_ as isCommunityPackageName, c$ as NPM_PACKAGE_DOCS_BASE_URL, d0 as BUILTIN_NODES_DOCS_URL, aM as useNDVStore, d1 as COMMUNITY_NODES_INSTALLATION_DOCS_URL, d2 as N8nTabs, bf as useExternalHooks, ay as useTelemetry, c4 as useClipboard, ak as useWorkflowHelpers, a as useToast, d3 as OPEN_URL_PANEL_TRIGGER_NODE_TYPES, d4 as PRODUCTION_ONLY_TRIGGER_NODE_TYPES, d5 as MCP_TRIGGER_NODE_TYPE, d6 as FORM_TRIGGER_NODE_TYPE, bz as CHAT_TRIGGER_NODE_TYPE, O as resolveComponent, H as N8nRadioButtons, bg as onClickOutside, d7 as toRef$1, d8 as tryOnScopeDispose, d9 as toValue$1, da as isIOS, db as noop$2, dc as isObject, dd as isClient, S as useDebounce, de as getNodeInputs, df as _sfc_main$V, v as useSettingsStore, dg as useCredentialsStore, u as useUsersStore, af as useProjectsStore, dh as OPEN_AI_API_CREDENTIAL_TYPE, di as N8nCallout, p as N8nText, dj as useHistoryStore, aO as usePostHog, dk as useNodeSettingsParameters, dl as useResizeObserver, aq as ProjectTypes, dm as NDV_UI_OVERHAUL_EXPERIMENT, dn as BASE_NODE_SURVEY_URL, co as ndvEventBus, bQ as withModifiers, a1 as N8nLink, dp as CUSTOM_NODES_DOCS_URL, aU as withDirectives, dq as N8nNotice, aV as vShow, dr as _sfc_main$W, ds as NodeCredentials, bs as get$3, dt as getNodeParameters, du as deepCopy, dv as nameIsParameter, dw as RenameNodeCommand, bH as useCanvasOperations, Q as createEventBus, a2 as defineStore, cf as shallowRef, dx as watchOnce, dy as calculateNodeSize, dz as NodeId, dA as useGetPointerPosition, dB as clamp, dC as N8nSticky, dD as useNodeCreatorStore, bd as useTemplatesStore, V as VIEWS, dE as isExtraTemplateLinksExperimentEnabled, az as nodeViewEventBus, bl as trackTemplatesClick, bm as TemplateClickSource, dF as NODE_CREATOR_OPEN_SOURCES, dG as useBuilderStore, a_ as withKeys, dH as N8nInput, dI as CanvasNodeHandleKey, dJ as Transition$1, dK as _sfc_main$f$1, b as useRouter, bC as useLogsStore, bE as useRunWorkflow, dL as insertSpacersBetweenEndpoints, dM as createCanvasConnectionHandleString, dN as CONFIGURATION_NODE_OFFSET, dO as isEqual, dP as useDeviceSupport, dQ as isOutsideSelected, K as nextTick, dR as _sfc_main$1$4, dS as MarkerType, dT as Suspense, bZ as guardReactiveProps, dU as updateViewportToContainNodes, dV as useNodeDirtiness, dW as CUSTOM_API_CALL_KEY, dX as mapLegacyEndpointsToCanvasConnectionPort, dY as getNodeOutputs, dZ as getTriggerNodeServiceName, d_ as sanitizeHtml, d$ as WAIT_NODE_TYPE, e0 as SEND_AND_WAIT_OPERATION, e1 as FORM_NODE_TYPE, e2 as WAIT_INDEFINITELY, e3 as checkOverlap, e4 as SIMULATE_NODE_TYPE, e5 as SIMULATE_TRIGGER_NODE_TYPE, e6 as mapLegacyConnectionsToCanvasConnections, e7 as getNodeIconSource, e8 as refThrottled, e9 as useFocusPanelStore, ea as isValueExpression, eb as __unplugin_components_2$2, ec as __unplugin_components_3$1, bp as isChatNode, ed as truncateBeforeLast, ee as reactive, a5 as useRoute, ai as useDocumentTitle, aj as useWorkflowSaving, ef as useEnvironmentsStore, eg as useExternalSecretsStore, ac as useRootStore, aN as useExecutionsStore, ad as useCanvasStore, ah as useNpsSurveyStore, R as useTagsStore, a3 as usePushConnectionStore, ag as useFoldersStore, eh as useAgentRequestStore, ei as useWorkflowExtraction, ej as FOCUS_PANEL_EXPERIMENT, a6 as PLACEHOLDER_EMPTY_WORKFLOW_ID, ek as NEW_WORKFLOW_ID, bJ as START_NODE_TYPE, el as getNodeViewTab, G as MAIN_HEADER_TABS, em as VALID_WORKFLOW_IMPORT_URL_REGEX, aA as useMessage, aB as MODAL_CONFIRM, en as jsonParse, by as MANUAL_CHAT_TRIGGER_NODE_TYPE, eo as EVALUATION_TRIGGER_NODE_TYPE, ep as getBounds, eq as onBeforeRouteLeave, aT as onBeforeMount, aC as WORKFLOW_SETTINGS_MODAL_KEY, er as onActivated, es as onDeactivated, et as defineAsyncComponent, aI as __vitePreload, ap as EnterpriseEditionFeature, eu as EVALUATION_NODE_TYPE, ev as getEasyAiWorkflowJson, ew as getRagStarterWorkflowJson, ex as tryToParseNumber, b3 as sourceControlEventBus, ey as getNodesWithNormalizedPosition, ez as needsAgentInput, eA as FROM_AI_PARAMETERS_MODAL_KEY, eB as historyBus, eC as DRAG_EVENT_DATA_KEY } from "./index-B3p3789J.js";
3
- import { N as N8nActionDropdown } from "./ActionDropdown-CiegfqhB.js";
4
- import { N as N8nBlockUi, u as useKeybindings, c as canvasEventBus } from "./useKeybindings-ul7syjnB.js";
5
- import { i as importCurlEventBus } from "./import-curl-CjhdjoGU.js";
6
- import { g as globalLinkActionsEventBus } from "./global-link-actions-BIVeUMGo.js";
7
- import { u as useExecutionDebugging } from "./useExecutionDebugging-wUQ9K2sh.js";
8
- import { u as useBeforeUnload } from "./useBeforeUnload-Yj83KQFp.js";
9
- const _sfc_main$Q = {};
10
- const _hoisted_1$g = {
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/NodeCreation-CVbCKnet.js","assets/index-Cm5yBbby.js","assets/index-BWpYwmXd.css","assets/NodeCreation-CxN6JIS_.css","assets/NodeDetailsView-KFidngJi.js","assets/TriggerPanel-JaXhe1VW.js","assets/useKeybindings-DetzdpXy.js","assets/FileSaver.min-BvxTURBB.js","assets/useExecutionHelpers-DQcWcZ8o.js","assets/useKeybindings-2A271Jke.css","assets/RunDataParsedAiContent-CHK6Y4ET.js","assets/VueMarkdown-DDKnTMgT.js","assets/RunDataParsedAiContent-wfIiKsq7.css","assets/ConsumedTokensDetails.vue_vue_type_script_setup_true_lang-CkASni2S.js","assets/InfoAccordion-BNmUe2V9.js","assets/InfoAccordion-dxudNqVC.css","assets/TriggerPanel-DJv04feX.css","assets/useWorkflowActivate-BE4Ckf9k.js","assets/ActionDropdown-Ct6XJ0cl.js","assets/ActionDropdown-BmC0wfMx.css","assets/import-curl-BD22LJ4z.js","assets/global-link-actions-BjpAG7gt.js","assets/useExecutionDebugging-C8zR-uFJ.js","assets/useBeforeUnload-BR-V9Uaz.js","assets/aiTemplatesStarterCollection.store-oECEA5nR.js","assets/NodeDetailsView-CaTI-1QQ.css","assets/NodeDetailsViewV2-BL4KKqW-.js","assets/NodeDetailsViewV2-BxNx4ZUM.css","assets/SetupWorkflowCredentialsButton-Pzrxag-k.js"])))=>i.map(i=>d[i]);
2
+ import { _ as _export_sfc$1, h as createElementBlock, g as openBlock, j as createBaseVNode, d as defineComponent, cn as PanelPosition, co as useVueFlow, bT as toRef, e as createBlock, w as withCtx, J as renderSlot, f as createCommentVNode, F as Fragment, i as createVNode, bY as resolveDynamicComponent, l as unref, cp as _sfc_main$X, x as computed, a0 as _sfc_main$Y, c as useI18n, c7 as KeyboardShortcutTooltip, n as normalizeClass, q as N8nButton, $ as N8nTooltip, bp as NodeConnectionTypes, cq as getBezierPath, cr as getSmoothStepPath, cs as Position, bU as inject, ct as CanvasKey, ac as useCssModule, cu as parseCanvasConnectionHandleString, r as ref, o as onMounted, y as renderList, cv as _sfc_main$d$1, P as normalizeStyle, T as useUIStore, bH as useNodeTypesStore, a5 as useWorkflowsStore, af as useSourceControlStore, an as getResourcePermissions, cw as isNodeWithWorkflowSelector, cx as getSubworkflowId, cy as isPresent, ab as watch, cz as getMousePosition, aR as STICKY_NODE_TYPE, bA as usePinnedData, cA as NOT_DUPLICATABLE_NODE_TYPES, cB as isExecutable, cC as Teleport, c9 as useStyles, bK as getDefaultExportFromCjs, cD as DEFAULT_NODE_SIZE, cE as CanvasNodeRenderType, cF as GRID_SIZE, cb as useThrottleFn, cG as getRectOfNodes, b$ as onUnmounted, cH as onKeyDown, cI as onKeyUp, cJ as useSlots, c1 as useAttrs, cK as getBoundsofRects, cL as watchEffect, t as toDisplayString, cM as getConnectedEdges, bW as normalizeProps, D as mergeProps, bF as provide, aL as h, bg as createSlots, cN as isValidNodeConnectionType, cO as _sfc_main$3$1, cP as CanvasNodeKey, cQ as CanvasConnectionMode, cR as mergeModels, cS as useModel, I as onBeforeUnmount, cT as _sfc_main$Z, N as N8nIcon, bC as useNodeHelpers, cU as TitledList, k as createTextVNode, cV as CanvasNodeDirtiness, aN as useNDVStore, cW as N8nSelect, cX as _sfc_main$_, bQ as _sfc_main$$, cY as truncate, cZ as createStaticVNode, c_ as usePostHog, bI as START_NODE_TYPE, c$ as MANUAL_TRIGGER_NODE_TYPE, d0 as CRON_NODE_TYPE, d1 as INTERVAL_NODE_TYPE, d2 as getNodeInputs, d3 as getNodeOutputs, d4 as uniqBy, c5 as waitingNodeTooltip, d5 as NDV_UI_OVERHAUL_EXPERIMENT, c4 as resolveDirective, p as N8nText, aT as withDirectives, d6 as _sfc_main$10, a1 as I18nT, bP as withModifiers, H as N8nRadioButtons, az as useTelemetry, as as useTemplateRef, d7 as useElementSize, at as InlineRename, b as useRouter, d8 as useCommunityNodesStore, a2 as N8nLink, V as VIEWS, d9 as captureException, da as N8nNotice, db as i18n, dc as toValue, dd as isCommunityPackageName, de as NPM_PACKAGE_DOCS_BASE_URL, df as BUILTIN_NODES_DOCS_URL, dg as COMMUNITY_NODES_INSTALLATION_DOCS_URL, u as useUsersStore, dh as N8nTabs, be as useExternalHooks, c2 as useClipboard, al as useWorkflowHelpers, a as useToast, di as OPEN_URL_PANEL_TRIGGER_NODE_TYPES, dj as PRODUCTION_ONLY_TRIGGER_NODE_TYPES, dk as MCP_TRIGGER_NODE_TYPE, dl as FORM_TRIGGER_NODE_TYPE, by as CHAT_TRIGGER_NODE_TYPE, O as resolveComponent, bf as onClickOutside, dm as toRef$1, dn as tryOnScopeDispose, dp as toValue$1, dq as isIOS, dr as noop$2, ds as isObject, dt as isClient, S as useDebounce, v as useSettingsStore, du as useCredentialsStore, ag as useProjectsStore, dv as OPEN_AI_API_CREDENTIAL_TYPE, dw as N8nCallout, dx as useHistoryStore, dy as useNodeSettingsParameters, dz as useResizeObserver, ar as ProjectTypes, dA as BASE_NODE_SURVEY_URL, cm as ndvEventBus, dB as CUSTOM_NODES_DOCS_URL, aU as vShow, dC as _sfc_main$11, dD as NodeCredentials, br as get$3, dE as getNodeParameters, dF as deepCopy, dG as nameIsParameter, dH as RenameNodeCommand, bG as useCanvasOperations, Q as createEventBus, cl as useActiveElement, dI as useEnvironmentsStore, dJ as watchOnce, dK as Transition$1, dL as ExpressionLocalResolveContextSymbol, dM as calculateNodeSize, dN as NodeId, dO as useGetPointerPosition, dP as clamp, dQ as N8nSticky, dR as useNodeCreatorStore, bc as useTemplatesStore, dS as isExtraTemplateLinksExperimentEnabled, aA as nodeViewEventBus, bk as trackTemplatesClick, bl as TemplateClickSource, dT as NODE_CREATOR_OPEN_SOURCES, dU as useBuilderStore, ak as useWorkflowSaving, aZ as withKeys, dV as N8nInput, dW as CanvasNodeHandleKey, dX as _sfc_main$f$1, bB as useLogsStore, bD as useRunWorkflow, dY as insertSpacersBetweenEndpoints, dZ as createCanvasConnectionHandleString, d_ as CONFIGURATION_NODE_OFFSET, d$ as isEqual, e0 as useDeviceSupport, e1 as isOutsideSelected, K as nextTick, e2 as _sfc_main$1$4, e3 as MarkerType, e4 as Suspense, bX as guardReactiveProps, e5 as updateViewportToContainNodes, e6 as useNodeDirtiness, e7 as CUSTOM_API_CALL_KEY, e8 as mapLegacyEndpointsToCanvasConnectionPort, e9 as getTriggerNodeServiceName, ea as sanitizeHtml, eb as WAIT_NODE_TYPE, ec as SEND_AND_WAIT_OPERATION, ed as FORM_NODE_TYPE, ee as WAIT_INDEFINITELY, ef as checkOverlap, eg as SIMULATE_NODE_TYPE, eh as SIMULATE_TRIGGER_NODE_TYPE, ei as mapLegacyConnectionsToCanvasConnections, ej as getNodeIconSource, ek as refThrottled, el as useFocusPanelStore, em as HTML_NODE_TYPE, en as isValueExpression, eo as isResourceLocatorValue, ep as AI_TRANSFORM_NODE_TYPE, eq as useResolvedExpression, er as InfoTip, es as __unplugin_components_2$3, et as __unplugin_components_3$1, eu as __unplugin_components_4, ev as __unplugin_components_5, ew as __unplugin_components_6, ex as __unplugin_components_7, ey as __unplugin_components_8, ez as __unplugin_components_9, c8 as N8nResizeWrapper, eA as getParameterTypeOption, eB as htmlEditorEventBus, eC as parseFromExpression, eD as isValidParameterOption, eE as formatAsExpression, eF as hasFocusOnInput, eG as isFocusableEl, bo as isChatNode, eH as truncateBeforeLast, eI as reactive, a6 as useRoute, aj as useDocumentTitle, eJ as useExternalSecretsStore, ad as useRootStore, aO as useExecutionsStore, ae as useCanvasStore, ai as useNpsSurveyStore, R as useTagsStore, a4 as usePushConnectionStore, ah as useFoldersStore, eK as useAgentRequestStore, eL as useWorkflowExtraction, eM as FOCUS_PANEL_EXPERIMENT, a7 as PLACEHOLDER_EMPTY_WORKFLOW_ID, eN as NEW_WORKFLOW_ID, eO as getNodeViewTab, G as MAIN_HEADER_TABS, eP as VALID_WORKFLOW_IMPORT_URL_REGEX, aB as useMessage, aC as MODAL_CONFIRM, eQ as jsonParse, bx as MANUAL_CHAT_TRIGGER_NODE_TYPE, eR as EVALUATION_TRIGGER_NODE_TYPE, eS as getBounds, eT as onBeforeRouteLeave, aS as onBeforeMount, aD as WORKFLOW_SETTINGS_MODAL_KEY, eU as onActivated, eV as onDeactivated, eW as defineAsyncComponent, aJ as __vitePreload, aq as EnterpriseEditionFeature, eX as EVALUATION_NODE_TYPE, eY as getEasyAiWorkflowJson, eZ as getRagStarterWorkflowJson, e_ as tryToParseNumber, b2 as sourceControlEventBus, e$ as getNodesWithNormalizedPosition, f0 as needsAgentInput, f1 as FROM_AI_PARAMETERS_MODAL_KEY, f2 as historyBus, f3 as DRAG_EVENT_DATA_KEY } from "./index-Cm5yBbby.js";
3
+ import { u as useExperimentalNdvStore, R as RunData, N as N8nBlockUi, a as useKeybindings, c as canvasEventBus } from "./useKeybindings-DetzdpXy.js";
4
+ import { N as N8nActionDropdown } from "./ActionDropdown-Ct6XJ0cl.js";
5
+ import { i as importCurlEventBus } from "./import-curl-BD22LJ4z.js";
6
+ import { g as globalLinkActionsEventBus } from "./global-link-actions-BjpAG7gt.js";
7
+ import { u as useExecutionDebugging } from "./useExecutionDebugging-C8zR-uFJ.js";
8
+ import { u as useBeforeUnload } from "./useBeforeUnload-BR-V9Uaz.js";
9
+ import { u as useAITemplatesStarterCollectionStore } from "./aiTemplatesStarterCollection.store-oECEA5nR.js";
10
+ const _sfc_main$W = {};
11
+ const _hoisted_1$i = {
11
12
  xmlns: "http://www.w3.org/2000/svg",
12
13
  viewBox: "0 0 16 16"
13
14
  };
14
- function _sfc_render$1(_ctx, _cache) {
15
- return openBlock(), createElementBlock("svg", _hoisted_1$g, _cache[0] || (_cache[0] = [
15
+ function _sfc_render$2(_ctx, _cache) {
16
+ return openBlock(), createElementBlock("svg", _hoisted_1$i, _cache[0] || (_cache[0] = [
16
17
  createBaseVNode("path", {
17
18
  fill: "currentColor",
18
19
  d: "M1.6.13c-.18-.17-.47-.18-.62 0L.56.57.14.98c-.2.15-.18.44 0 .62l3.63 3.6c.1.1.1.27 0 .37-.2.2-.53.52-.93.94-.56.57-.12 1.62.22 2.11.05.07.12.1.2.1.05-.01.1-.04.15-.08l5.23-5.22c.1-.1.1-.26-.02-.34-.5-.34-1.55-.78-2.12-.22-.42.4-.75.73-.94.93-.1.1-.27.1-.37 0L1.6.13ZM9.5 3.9c.07-.09.2-.1.3-.04l6.07 3.44c.15.08.18.29.05.4l-1.21 1.22a.26.26 0 0 1-.26.07l-2.18-.64a.26.26 0 0 0-.32.33l.76 2.02c.04.1.01.2-.06.27L7.7 15.92a.26.26 0 0 1-.41-.05L3.83 9.8a.26.26 0 0 1 .04-.3l5.62-5.6Z"
19
20
  }, null, -1)
20
21
  ]));
21
22
  }
22
- const TidyUpIcon = /* @__PURE__ */ _export_sfc$1(_sfc_main$Q, [["render", _sfc_render$1]]);
23
+ const TidyUpIcon = /* @__PURE__ */ _export_sfc$1(_sfc_main$W, [["render", _sfc_render$2]]);
23
24
  const _sfc_main$1$3 = {
24
25
  name: "ControlButton",
25
26
  compatConfig: { MODE: 3 }
@@ -32,12 +33,12 @@ const _export_sfc = (sfc, props) => {
32
33
  return target2;
33
34
  };
34
35
  const _hoisted_1$5$1 = { class: "vue-flow__controls-button" };
35
- function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
36
+ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
36
37
  return openBlock(), createElementBlock("button", _hoisted_1$5$1, [
37
38
  renderSlot(_ctx.$slots, "default")
38
39
  ]);
39
40
  }
40
- const ControlButton = /* @__PURE__ */ _export_sfc(_sfc_main$1$3, [["render", _sfc_render]]);
41
+ const ControlButton = /* @__PURE__ */ _export_sfc(_sfc_main$1$3, [["render", _sfc_render$1]]);
41
42
  const _hoisted_1$4$1 = {
42
43
  xmlns: "http://www.w3.org/2000/svg",
43
44
  viewBox: "0 0 32 32"
@@ -86,7 +87,7 @@ function render$1(_ctx, _cache) {
86
87
  return openBlock(), createElementBlock("svg", _hoisted_1$1$2, _hoisted_3$1$1);
87
88
  }
88
89
  const Lock = { render: render$1 };
89
- const _hoisted_1$f = {
90
+ const _hoisted_1$h = {
90
91
  xmlns: "http://www.w3.org/2000/svg",
91
92
  viewBox: "0 0 25 32"
92
93
  };
@@ -95,14 +96,14 @@ const _hoisted_3$7 = [
95
96
  _hoisted_2$b
96
97
  ];
97
98
  function render(_ctx, _cache) {
98
- return openBlock(), createElementBlock("svg", _hoisted_1$f, _hoisted_3$7);
99
+ return openBlock(), createElementBlock("svg", _hoisted_1$h, _hoisted_3$7);
99
100
  }
100
101
  const Unlock = { render };
101
102
  const __default__$4 = {
102
103
  name: "Controls",
103
104
  compatConfig: { MODE: 3 }
104
105
  };
105
- const _sfc_main$P = /* @__PURE__ */ defineComponent({
106
+ const _sfc_main$V = /* @__PURE__ */ defineComponent({
106
107
  ...__default__$4,
107
108
  props: {
108
109
  showZoom: { type: Boolean, default: true },
@@ -145,7 +146,7 @@ const _sfc_main$P = /* @__PURE__ */ defineComponent({
145
146
  emit("interactionChange", !isInteractive.value);
146
147
  }
147
148
  return (_ctx, _cache) => {
148
- return openBlock(), createBlock(unref(_sfc_main$R), {
149
+ return openBlock(), createBlock(unref(_sfc_main$X), {
149
150
  class: "vue-flow__controls",
150
151
  position: _ctx.position
151
152
  }, {
@@ -218,7 +219,7 @@ const _sfc_main$P = /* @__PURE__ */ defineComponent({
218
219
  };
219
220
  }
220
221
  });
221
- const _sfc_main$O = /* @__PURE__ */ defineComponent({
222
+ const _sfc_main$U = /* @__PURE__ */ defineComponent({
222
223
  __name: "CanvasControlButtons",
223
224
  props: {
224
225
  zoom: { default: 1 },
@@ -228,7 +229,8 @@ const _sfc_main$O = /* @__PURE__ */ defineComponent({
228
229
  setup(__props, { emit: __emit }) {
229
230
  const props = __props;
230
231
  const emit = __emit;
231
- const i18n = useI18n();
232
+ const i18n2 = useI18n();
233
+ const experimentalNdvStore = useExperimentalNdvStore();
232
234
  const isResetZoomVisible = computed(() => props.zoom !== 1);
233
235
  function onResetZoom() {
234
236
  emit("reset-zoom");
@@ -246,15 +248,16 @@ const _sfc_main$O = /* @__PURE__ */ defineComponent({
246
248
  emit("tidy-up");
247
249
  }
248
250
  return (_ctx, _cache) => {
249
- const _component_N8nIconButton = _sfc_main$S;
251
+ const _component_N8nIconButton = _sfc_main$Y;
250
252
  const _component_N8nButton = N8nButton;
251
- return openBlock(), createBlock(unref(_sfc_main$P), {
253
+ const _component_N8nTooltip = N8nTooltip;
254
+ return openBlock(), createBlock(unref(_sfc_main$V), {
252
255
  "show-zoom": false,
253
256
  "show-fit-view": false
254
257
  }, {
255
258
  default: withCtx(() => [
256
259
  createVNode(KeyboardShortcutTooltip, {
257
- label: unref(i18n).baseText("nodeView.zoomToFit"),
260
+ label: unref(i18n2).baseText("nodeView.zoomToFit"),
258
261
  shortcut: { keys: ["1"] }
259
262
  }, {
260
263
  default: withCtx(() => [
@@ -269,7 +272,7 @@ const _sfc_main$O = /* @__PURE__ */ defineComponent({
269
272
  _: 1
270
273
  }, 8, ["label"]),
271
274
  createVNode(KeyboardShortcutTooltip, {
272
- label: unref(i18n).baseText("nodeView.zoomIn"),
275
+ label: unref(i18n2).baseText("nodeView.zoomIn"),
273
276
  shortcut: { keys: ["+"] }
274
277
  }, {
275
278
  default: withCtx(() => [
@@ -284,7 +287,7 @@ const _sfc_main$O = /* @__PURE__ */ defineComponent({
284
287
  _: 1
285
288
  }, 8, ["label"]),
286
289
  createVNode(KeyboardShortcutTooltip, {
287
- label: unref(i18n).baseText("nodeView.zoomOut"),
290
+ label: unref(i18n2).baseText("nodeView.zoomOut"),
288
291
  shortcut: { keys: ["-"] }
289
292
  }, {
290
293
  default: withCtx(() => [
@@ -300,7 +303,7 @@ const _sfc_main$O = /* @__PURE__ */ defineComponent({
300
303
  }, 8, ["label"]),
301
304
  isResetZoomVisible.value ? (openBlock(), createBlock(KeyboardShortcutTooltip, {
302
305
  key: 0,
303
- label: unref(i18n).baseText("nodeView.resetZoom"),
306
+ label: unref(i18n2).baseText("nodeView.resetZoom"),
304
307
  shortcut: { keys: ["0"] }
305
308
  }, {
306
309
  default: withCtx(() => [
@@ -316,7 +319,7 @@ const _sfc_main$O = /* @__PURE__ */ defineComponent({
316
319
  }, 8, ["label"])) : createCommentVNode("", true),
317
320
  !_ctx.readOnly ? (openBlock(), createBlock(KeyboardShortcutTooltip, {
318
321
  key: 1,
319
- label: unref(i18n).baseText("nodeView.tidyUp"),
322
+ label: unref(i18n2).baseText("nodeView.tidyUp"),
320
323
  shortcut: { shiftKey: true, altKey: true, keys: ["T"] }
321
324
  }, {
322
325
  default: withCtx(() => [
@@ -335,7 +338,37 @@ const _sfc_main$O = /* @__PURE__ */ defineComponent({
335
338
  }, 8, ["class"])
336
339
  ]),
337
340
  _: 1
338
- }, 8, ["label"])) : createCommentVNode("", true)
341
+ }, 8, ["label"])) : createCommentVNode("", true),
342
+ unref(experimentalNdvStore).isActive(props.zoom) ? (openBlock(), createBlock(_component_N8nTooltip, {
343
+ key: 2,
344
+ placement: "top",
345
+ content: unref(i18n2).baseText("nodeView.expandAllNodes")
346
+ }, {
347
+ default: withCtx(() => [
348
+ createVNode(_component_N8nIconButton, {
349
+ type: "tertiary",
350
+ size: "large",
351
+ icon: "maximize-2",
352
+ onClick: unref(experimentalNdvStore).expandAllNodes
353
+ }, null, 8, ["onClick"])
354
+ ]),
355
+ _: 1
356
+ }, 8, ["content"])) : createCommentVNode("", true),
357
+ unref(experimentalNdvStore).isActive(props.zoom) ? (openBlock(), createBlock(_component_N8nTooltip, {
358
+ key: 3,
359
+ placement: "top",
360
+ content: unref(i18n2).baseText("nodeView.collapseAllNodes")
361
+ }, {
362
+ default: withCtx(() => [
363
+ createVNode(_component_N8nIconButton, {
364
+ type: "tertiary",
365
+ size: "large",
366
+ icon: "minimize-2",
367
+ onClick: unref(experimentalNdvStore).collapseAllNodes
368
+ }, null, 8, ["onClick"])
369
+ ]),
370
+ _: 1
371
+ }, 8, ["content"])) : createCommentVNode("", true)
339
372
  ]),
340
373
  _: 1
341
374
  });
@@ -343,13 +376,13 @@ const _sfc_main$O = /* @__PURE__ */ defineComponent({
343
376
  }
344
377
  });
345
378
  const iconButton = "_iconButton_fx9xi_123";
346
- const style0$z = {
379
+ const style0$D = {
347
380
  iconButton
348
381
  };
349
- const cssModules$z = {
350
- "$style": style0$z
382
+ const cssModules$D = {
383
+ "$style": style0$D
351
384
  };
352
- const __unplugin_components_1 = /* @__PURE__ */ _export_sfc$1(_sfc_main$O, [["__cssModules", cssModules$z]]);
385
+ const __unplugin_components_1 = /* @__PURE__ */ _export_sfc$1(_sfc_main$U, [["__cssModules", cssModules$D]]);
353
386
  const EDGE_PADDING_BOTTOM = 130;
354
387
  const EDGE_PADDING_X = 40;
355
388
  const EDGE_BORDER_RADIUS = 16;
@@ -406,7 +439,7 @@ function injectStrict(key, fallback) {
406
439
  function useCanvas() {
407
440
  return injectStrict(CanvasKey);
408
441
  }
409
- const _sfc_main$N = /* @__PURE__ */ defineComponent({
442
+ const _sfc_main$T = /* @__PURE__ */ defineComponent({
410
443
  __name: "CanvasConnectionLine",
411
444
  props: {
412
445
  sourceX: {},
@@ -473,14 +506,14 @@ const _sfc_main$N = /* @__PURE__ */ defineComponent({
473
506
  });
474
507
  const edge$1 = "_edge_cbk94_123";
475
508
  const visible = "_visible_cbk94_129";
476
- const style0$y = {
509
+ const style0$C = {
477
510
  edge: edge$1,
478
511
  visible
479
512
  };
480
- const cssModules$y = {
481
- "$style": style0$y
513
+ const cssModules$C = {
514
+ "$style": style0$C
482
515
  };
483
- const __unplugin_components_0$4 = /* @__PURE__ */ _export_sfc$1(_sfc_main$N, [["__cssModules", cssModules$y]]);
516
+ const __unplugin_components_0$4 = /* @__PURE__ */ _export_sfc$1(_sfc_main$T, [["__cssModules", cssModules$C]]);
484
517
  const position = ref([0, 0]);
485
518
  const isOpen = ref(false);
486
519
  const target = ref();
@@ -493,7 +526,7 @@ const useContextMenu = (onAction = () => {
493
526
  const nodeTypesStore = useNodeTypesStore();
494
527
  const workflowsStore = useWorkflowsStore();
495
528
  const sourceControlStore = useSourceControlStore();
496
- const i18n = useI18n();
529
+ const i18n2 = useI18n();
497
530
  const workflowPermissions = computed(
498
531
  () => getResourcePermissions(workflowsStore.workflow.scopes).workflow
499
532
  );
@@ -558,20 +591,20 @@ const useContextMenu = (onAction = () => {
558
591
  const i18nOptions = {
559
592
  adjustToNumber: nodes.length,
560
593
  interpolate: {
561
- subject: onlyStickies ? i18n.baseText("contextMenu.sticky", { adjustToNumber: nodes.length }) : i18n.baseText("contextMenu.node", { adjustToNumber: nodes.length })
594
+ subject: onlyStickies ? i18n2.baseText("contextMenu.sticky", { adjustToNumber: nodes.length }) : i18n2.baseText("contextMenu.node", { adjustToNumber: nodes.length })
562
595
  }
563
596
  };
564
597
  const selectionActions = [
565
598
  {
566
599
  id: "select_all",
567
600
  divided: true,
568
- label: i18n.baseText("contextMenu.selectAll"),
601
+ label: i18n2.baseText("contextMenu.selectAll"),
569
602
  shortcut: { metaKey: true, keys: ["A"] },
570
603
  disabled: nodes.length === workflowsStore.allNodes.length
571
604
  },
572
605
  {
573
606
  id: "deselect_all",
574
- label: i18n.baseText("contextMenu.deselectAll"),
607
+ label: i18n2.baseText("contextMenu.deselectAll"),
575
608
  disabled: nodes.length === 0
576
609
  }
577
610
  ];
@@ -579,7 +612,7 @@ const useContextMenu = (onAction = () => {
579
612
  {
580
613
  id: "extract_sub_workflow",
581
614
  divided: true,
582
- label: i18n.baseText("contextMenu.extract", { adjustToNumber: nodes.length }),
615
+ label: i18n2.baseText("contextMenu.extract", { adjustToNumber: nodes.length }),
583
616
  shortcut: { altKey: true, keys: ["X"] },
584
617
  disabled: isReadOnly.value
585
618
  }
@@ -588,7 +621,7 @@ const useContextMenu = (onAction = () => {
588
621
  {
589
622
  id: "tidy_up",
590
623
  divided: true,
591
- label: i18n.baseText(
624
+ label: i18n2.baseText(
592
625
  nodes.length < 2 ? "contextMenu.tidyUpWorkflow" : "contextMenu.tidyUpSelection"
593
626
  ),
594
627
  shortcut: { shiftKey: true, altKey: true, keys: ["T"] }
@@ -599,13 +632,13 @@ const useContextMenu = (onAction = () => {
599
632
  {
600
633
  id: "add_node",
601
634
  shortcut: { keys: ["Tab"] },
602
- label: i18n.baseText("contextMenu.addNode"),
635
+ label: i18n2.baseText("contextMenu.addNode"),
603
636
  disabled: isReadOnly.value
604
637
  },
605
638
  {
606
639
  id: "add_sticky",
607
640
  shortcut: { shiftKey: true, keys: ["s"] },
608
- label: i18n.baseText("contextMenu.addSticky"),
641
+ label: i18n2.baseText("contextMenu.addSticky"),
609
642
  disabled: isReadOnly.value
610
643
  },
611
644
  ...layoutActions,
@@ -615,24 +648,24 @@ const useContextMenu = (onAction = () => {
615
648
  const menuActions = [
616
649
  !onlyStickies && {
617
650
  id: "toggle_activation",
618
- label: nodes.every((node2) => node2.disabled) ? i18n.baseText("contextMenu.activate", i18nOptions) : i18n.baseText("contextMenu.deactivate", i18nOptions),
651
+ label: nodes.every((node2) => node2.disabled) ? i18n2.baseText("contextMenu.activate", i18nOptions) : i18n2.baseText("contextMenu.deactivate", i18nOptions),
619
652
  shortcut: { keys: ["D"] },
620
653
  disabled: isReadOnly.value
621
654
  },
622
655
  !onlyStickies && {
623
656
  id: "toggle_pin",
624
- label: nodes.every((node2) => hasPinData(node2)) ? i18n.baseText("contextMenu.unpin", i18nOptions) : i18n.baseText("contextMenu.pin", i18nOptions),
657
+ label: nodes.every((node2) => hasPinData(node2)) ? i18n2.baseText("contextMenu.unpin", i18nOptions) : i18n2.baseText("contextMenu.pin", i18nOptions),
625
658
  shortcut: { keys: ["p"] },
626
659
  disabled: isReadOnly.value || !nodes.every((n) => usePinnedData(n).canPinNode(true))
627
660
  },
628
661
  {
629
662
  id: "copy",
630
- label: i18n.baseText("contextMenu.copy", i18nOptions),
663
+ label: i18n2.baseText("contextMenu.copy", i18nOptions),
631
664
  shortcut: { metaKey: true, keys: ["C"] }
632
665
  },
633
666
  {
634
667
  id: "duplicate",
635
- label: i18n.baseText("contextMenu.duplicate", i18nOptions),
668
+ label: i18n2.baseText("contextMenu.duplicate", i18nOptions),
636
669
  shortcut: { metaKey: true, keys: ["D"] },
637
670
  disabled: isReadOnly.value || !nodes.every(canDuplicateNode)
638
671
  },
@@ -642,7 +675,7 @@ const useContextMenu = (onAction = () => {
642
675
  {
643
676
  id: "delete",
644
677
  divided: true,
645
- label: i18n.baseText("contextMenu.delete", i18nOptions),
678
+ label: i18n2.baseText("contextMenu.delete", i18nOptions),
646
679
  shortcut: { keys: ["Del"] },
647
680
  disabled: isReadOnly.value
648
681
  }
@@ -651,29 +684,29 @@ const useContextMenu = (onAction = () => {
651
684
  const singleNodeActions = onlyStickies ? [
652
685
  {
653
686
  id: "open",
654
- label: i18n.baseText("contextMenu.editSticky"),
687
+ label: i18n2.baseText("contextMenu.editSticky"),
655
688
  shortcut: { keys: ["↵"] },
656
689
  disabled: isReadOnly.value
657
690
  },
658
691
  {
659
692
  id: "change_color",
660
- label: i18n.baseText("contextMenu.changeColor"),
693
+ label: i18n2.baseText("contextMenu.changeColor"),
661
694
  disabled: isReadOnly.value
662
695
  }
663
696
  ] : [
664
697
  {
665
698
  id: "open",
666
- label: i18n.baseText("contextMenu.open"),
699
+ label: i18n2.baseText("contextMenu.open"),
667
700
  shortcut: { keys: ["↵"] }
668
701
  },
669
702
  {
670
703
  id: "execute",
671
- label: i18n.baseText("contextMenu.test"),
704
+ label: i18n2.baseText("contextMenu.test"),
672
705
  disabled: isReadOnly.value || !isExecutable$1(nodes[0])
673
706
  },
674
707
  {
675
708
  id: "rename",
676
- label: i18n.baseText("contextMenu.rename"),
709
+ label: i18n2.baseText("contextMenu.rename"),
677
710
  shortcut: { keys: ["Space"] },
678
711
  disabled: isReadOnly.value
679
712
  }
@@ -681,7 +714,7 @@ const useContextMenu = (onAction = () => {
681
714
  if (isNodeWithWorkflowSelector(nodes[0])) {
682
715
  singleNodeActions.push({
683
716
  id: "open_sub_workflow",
684
- label: i18n.baseText("contextMenu.openSubworkflow"),
717
+ label: i18n2.baseText("contextMenu.openSubworkflow"),
685
718
  shortcut: { shiftKey: true, metaKey: true, keys: ["O"] },
686
719
  disabled: !canOpenSubworkflow.value
687
720
  });
@@ -711,7 +744,7 @@ const useContextMenu = (onAction = () => {
711
744
  _dispatchAction
712
745
  };
713
746
  };
714
- const _sfc_main$M = /* @__PURE__ */ defineComponent({
747
+ const _sfc_main$S = /* @__PURE__ */ defineComponent({
715
748
  __name: "ContextMenu",
716
749
  emits: ["action"],
717
750
  setup(__props, { emit: __emit }) {
@@ -779,14 +812,14 @@ const _sfc_main$M = /* @__PURE__ */ defineComponent({
779
812
  });
780
813
  const contextMenu = "_contextMenu_12fz3_123";
781
814
  const activator = "_activator_12fz3_127";
782
- const style0$x = {
815
+ const style0$B = {
783
816
  contextMenu,
784
817
  activator
785
818
  };
786
- const cssModules$x = {
787
- "$style": style0$x
819
+ const cssModules$B = {
820
+ "$style": style0$B
788
821
  };
789
- const ContextMenu = /* @__PURE__ */ _export_sfc$1(_sfc_main$M, [["__cssModules", cssModules$x]]);
822
+ const ContextMenu = /* @__PURE__ */ _export_sfc$1(_sfc_main$S, [["__cssModules", cssModules$B]]);
790
823
  var graph;
791
824
  var hasRequiredGraph;
792
825
  function requireGraph() {
@@ -4871,11 +4904,11 @@ function selection_select$1(select2) {
4871
4904
  function array$1(x) {
4872
4905
  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);
4873
4906
  }
4874
- function empty$1() {
4907
+ function empty$2() {
4875
4908
  return [];
4876
4909
  }
4877
4910
  function selectorAll$1(selector2) {
4878
- return selector2 == null ? empty$1 : function() {
4911
+ return selector2 == null ? empty$2 : function() {
4879
4912
  return this.querySelectorAll(selector2);
4880
4913
  };
4881
4914
  }
@@ -5513,7 +5546,7 @@ Selection$1.prototype = selection.prototype = {
5513
5546
  dispatch: selection_dispatch$1,
5514
5547
  [Symbol.iterator]: selection_iterator$1
5515
5548
  };
5516
- function select$1(selector2) {
5549
+ function select$2(selector2) {
5517
5550
  return typeof selector2 === "string" ? new Selection$1([[document.querySelector(selector2)]], [document.documentElement]) : new Selection$1([[selector2]], root$1);
5518
5551
  }
5519
5552
  function sourceEvent$1(event) {
@@ -5545,7 +5578,7 @@ function noevent$1(event) {
5545
5578
  event.stopImmediatePropagation();
5546
5579
  }
5547
5580
  function dragDisable(view) {
5548
- var root2 = view.document.documentElement, selection2 = select$1(view).on("dragstart.drag", noevent$1, nonpassivecapture$1);
5581
+ var root2 = view.document.documentElement, selection2 = select$2(view).on("dragstart.drag", noevent$1, nonpassivecapture$1);
5549
5582
  if ("onselectstart" in root2) {
5550
5583
  selection2.on("selectstart.drag", noevent$1, nonpassivecapture$1);
5551
5584
  } else {
@@ -5554,7 +5587,7 @@ function dragDisable(view) {
5554
5587
  }
5555
5588
  }
5556
5589
  function yesdrag$1(view, noclick) {
5557
- var root2 = view.document.documentElement, selection2 = select$1(view).on("dragstart.drag", null);
5590
+ var root2 = view.document.documentElement, selection2 = select$2(view).on("dragstart.drag", null);
5558
5591
  if (noclick) {
5559
5592
  selection2.on("click.drag", noevent$1, nonpassivecapture$1);
5560
5593
  setTimeout(function() {
@@ -7054,7 +7087,7 @@ function zoom() {
7054
7087
  return this;
7055
7088
  },
7056
7089
  emit: function(type) {
7057
- var d = select$1(this.that).datum();
7090
+ var d = select$2(this.that).datum();
7058
7091
  listeners.call(
7059
7092
  type,
7060
7093
  this.that,
@@ -7092,7 +7125,7 @@ function zoom() {
7092
7125
  }
7093
7126
  function mousedowned(event, ...args) {
7094
7127
  if (touchending || !filter2.apply(this, arguments)) return;
7095
- var currentTarget = event.currentTarget, g = gesture(this, args, true).event(event), v = select$1(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), p = pointer$1(event, currentTarget), x0 = event.clientX, y0 = event.clientY;
7128
+ var currentTarget = event.currentTarget, g = gesture(this, args, true).event(event), v = select$2(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), p = pointer$1(event, currentTarget), x0 = event.clientX, y0 = event.clientY;
7096
7129
  dragDisable(event.view);
7097
7130
  nopropagation$1(event);
7098
7131
  g.mouse = [p, this.__zoom.invert(p)];
@@ -7117,8 +7150,8 @@ function zoom() {
7117
7150
  if (!filter2.apply(this, arguments)) return;
7118
7151
  var t0 = this.__zoom, p0 = pointer$1(event.changedTouches ? event.changedTouches[0] : event, this), p1 = t0.invert(p0), k1 = t0.k * (event.shiftKey ? 0.5 : 2), t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);
7119
7152
  noevent$2(event);
7120
- if (duration > 0) select$1(this).transition().duration(duration).call(schedule2, t1, p0, event);
7121
- else select$1(this).call(zoom2.transform, t1, p0, event);
7153
+ if (duration > 0) select$2(this).transition().duration(duration).call(schedule2, t1, p0, event);
7154
+ else select$2(this).call(zoom2.transform, t1, p0, event);
7122
7155
  }
7123
7156
  function touchstarted(event, ...args) {
7124
7157
  if (!filter2.apply(this, arguments)) return;
@@ -7178,7 +7211,7 @@ function zoom() {
7178
7211
  if (g.taps === 2) {
7179
7212
  t = pointer$1(t, this);
7180
7213
  if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {
7181
- var p = select$1(this).on("dblclick.zoom");
7214
+ var p = select$2(this).on("dblclick.zoom");
7182
7215
  if (p) p.apply(this, arguments);
7183
7216
  }
7184
7217
  }
@@ -7294,14 +7327,14 @@ const _sfc_main$1$2 = /* @__PURE__ */ defineComponent({
7294
7327
  };
7295
7328
  }
7296
7329
  });
7297
- const _hoisted_1$e = ["width", "height", "viewBox", "aria-labelledby"];
7330
+ const _hoisted_1$g = ["width", "height", "viewBox", "aria-labelledby"];
7298
7331
  const _hoisted_2$a = ["id"];
7299
7332
  const _hoisted_3$6 = ["d", "fill", "stroke", "stroke-width"];
7300
7333
  const __default__$3 = {
7301
7334
  name: "MiniMap",
7302
7335
  compatConfig: { MODE: 3 }
7303
7336
  };
7304
- const _sfc_main$L = /* @__PURE__ */ defineComponent({
7337
+ const _sfc_main$R = /* @__PURE__ */ defineComponent({
7305
7338
  ...__default__$3,
7306
7339
  props: {
7307
7340
  nodeColor: { type: [String, Function], default: "#e2e2e2" },
@@ -7397,7 +7430,7 @@ const _sfc_main$L = /* @__PURE__ */ defineComponent({
7397
7430
  watchEffect(
7398
7431
  (onCleanup) => {
7399
7432
  if (el.value) {
7400
- const selection2 = select$1(el.value);
7433
+ const selection2 = select$2(el.value);
7401
7434
  const zoomHandler = (event) => {
7402
7435
  if (event.sourceEvent.type !== "wheel" || !d3Selection.value || !d3Zoom.value) {
7403
7436
  return;
@@ -7464,7 +7497,7 @@ const _sfc_main$L = /* @__PURE__ */ defineComponent({
7464
7497
  emit("nodeMouseleave", param);
7465
7498
  }
7466
7499
  return (_ctx, _cache) => {
7467
- return openBlock(), createBlock(unref(_sfc_main$R), {
7500
+ return openBlock(), createBlock(unref(_sfc_main$X), {
7468
7501
  position: _ctx.position,
7469
7502
  class: normalizeClass(["vue-flow__minimap", { pannable: _ctx.pannable, zoomable: _ctx.zoomable }])
7470
7503
  }, {
@@ -7515,16 +7548,16 @@ const _sfc_main$L = /* @__PURE__ */ defineComponent({
7515
7548
  "stroke-width": _ctx.maskStrokeWidth,
7516
7549
  "fill-rule": "evenodd"
7517
7550
  }, null, 8, _hoisted_3$6)
7518
- ], 8, _hoisted_1$e))
7551
+ ], 8, _hoisted_1$g))
7519
7552
  ]),
7520
7553
  _: 1
7521
7554
  }, 8, ["position", "class"]);
7522
7555
  };
7523
7556
  }
7524
7557
  });
7525
- const _hoisted_1$d = ["id", "x", "y", "width", "height", "patternTransform"];
7558
+ const _hoisted_1$f = ["id", "x", "y", "width", "height", "patternTransform"];
7526
7559
  const _hoisted_2$9 = ["d", "stroke-width"];
7527
- const _sfc_main$K = /* @__PURE__ */ defineComponent({
7560
+ const _sfc_main$Q = /* @__PURE__ */ defineComponent({
7528
7561
  __name: "CanvasBackgroundStripedPattern",
7529
7562
  props: {
7530
7563
  id: {},
@@ -7550,11 +7583,11 @@ const _sfc_main$K = /* @__PURE__ */ defineComponent({
7550
7583
  d: `M0 ${scaledGap.value / 2} H${scaledGap.value}`,
7551
7584
  "stroke-width": scaledGap.value / 2
7552
7585
  }, null, 8, _hoisted_2$9)
7553
- ], 8, _hoisted_1$d);
7586
+ ], 8, _hoisted_1$f);
7554
7587
  };
7555
7588
  }
7556
7589
  });
7557
- const CanvasBackgroundStripedPattern = /* @__PURE__ */ _export_sfc$1(_sfc_main$K, [["__scopeId", "data-v-efb5a8d2"]]);
7590
+ const CanvasBackgroundStripedPattern = /* @__PURE__ */ _export_sfc$1(_sfc_main$Q, [["__scopeId", "data-v-efb5a8d2"]]);
7558
7591
  var BackgroundVariant = /* @__PURE__ */ ((BackgroundVariant2) => {
7559
7592
  BackgroundVariant2["Lines"] = "lines";
7560
7593
  BackgroundVariant2["Dots"] = "dots";
@@ -7578,7 +7611,7 @@ const DefaultBgColors = {
7578
7611
  [BackgroundVariant.Dots]: "#81818a",
7579
7612
  [BackgroundVariant.Lines]: "#eee"
7580
7613
  };
7581
- const _hoisted_1$c = ["id", "x", "y", "width", "height", "patternTransform"];
7614
+ const _hoisted_1$e = ["id", "x", "y", "width", "height", "patternTransform"];
7582
7615
  const _hoisted_2$8 = {
7583
7616
  key: 2,
7584
7617
  height: "100",
@@ -7590,7 +7623,7 @@ const __default__$2 = {
7590
7623
  name: "Background",
7591
7624
  compatConfig: { MODE: 3 }
7592
7625
  };
7593
- const _sfc_main$J = /* @__PURE__ */ defineComponent({
7626
+ const _sfc_main$P = /* @__PURE__ */ defineComponent({
7594
7627
  ...__default__$2,
7595
7628
  props: {
7596
7629
  id: {},
@@ -7661,7 +7694,7 @@ const _sfc_main$J = /* @__PURE__ */ defineComponent({
7661
7694
  }, null, 8, _hoisted_3$5)
7662
7695
  ])) : createCommentVNode("", true)
7663
7696
  ])
7664
- ], 8, _hoisted_1$c)
7697
+ ], 8, _hoisted_1$e)
7665
7698
  ]),
7666
7699
  createBaseVNode("rect", {
7667
7700
  x: _ctx.x,
@@ -7675,7 +7708,7 @@ const _sfc_main$J = /* @__PURE__ */ defineComponent({
7675
7708
  };
7676
7709
  }
7677
7710
  });
7678
- const _sfc_main$I = /* @__PURE__ */ defineComponent({
7711
+ const _sfc_main$O = /* @__PURE__ */ defineComponent({
7679
7712
  __name: "CanvasBackground",
7680
7713
  props: {
7681
7714
  striped: { type: Boolean },
@@ -7683,7 +7716,7 @@ const _sfc_main$I = /* @__PURE__ */ defineComponent({
7683
7716
  },
7684
7717
  setup(__props) {
7685
7718
  return (_ctx, _cache) => {
7686
- return openBlock(), createBlock(unref(_sfc_main$J), {
7719
+ return openBlock(), createBlock(unref(_sfc_main$P), {
7687
7720
  "data-test-id": "canvas-background",
7688
7721
  "pattern-color": "#aaa",
7689
7722
  gap: unref(GRID_SIZE)
@@ -7705,8 +7738,8 @@ const _sfc_main$I = /* @__PURE__ */ defineComponent({
7705
7738
  };
7706
7739
  }
7707
7740
  });
7708
- const _hoisted_1$b = ["id"];
7709
- const _sfc_main$H = /* @__PURE__ */ defineComponent({
7741
+ const _hoisted_1$d = ["id"];
7742
+ const _sfc_main$N = /* @__PURE__ */ defineComponent({
7710
7743
  __name: "CanvasArrowHeadMarker",
7711
7744
  props: {
7712
7745
  id: {}
@@ -7733,13 +7766,13 @@ const _sfc_main$H = /* @__PURE__ */ defineComponent({
7733
7766
  stroke: "context-stroke",
7734
7767
  fill: "context-stroke"
7735
7768
  }, null, -1)
7736
- ]), 8, _hoisted_1$b)
7769
+ ]), 8, _hoisted_1$d)
7737
7770
  ])
7738
7771
  ]);
7739
7772
  };
7740
7773
  }
7741
7774
  });
7742
- const _sfc_main$G = /* @__PURE__ */ defineComponent({
7775
+ const _sfc_main$M = /* @__PURE__ */ defineComponent({
7743
7776
  __name: "CanvasEdgeToolbar",
7744
7777
  props: {
7745
7778
  type: {}
@@ -7749,7 +7782,7 @@ const _sfc_main$G = /* @__PURE__ */ defineComponent({
7749
7782
  const emit = __emit;
7750
7783
  const props = __props;
7751
7784
  const $style = useCssModule();
7752
- const i18n = useI18n();
7785
+ const i18n2 = useI18n();
7753
7786
  const classes = computed(() => ({
7754
7787
  [$style.canvasEdgeToolbar]: true
7755
7788
  }));
@@ -7761,7 +7794,7 @@ const _sfc_main$G = /* @__PURE__ */ defineComponent({
7761
7794
  emit("delete");
7762
7795
  }
7763
7796
  return (_ctx, _cache) => {
7764
- const _component_N8nIconButton = _sfc_main$S;
7797
+ const _component_N8nIconButton = _sfc_main$Y;
7765
7798
  return openBlock(), createElementBlock("div", {
7766
7799
  class: normalizeClass(classes.value),
7767
7800
  "data-test-id": "canvas-edge-toolbar"
@@ -7774,7 +7807,7 @@ const _sfc_main$G = /* @__PURE__ */ defineComponent({
7774
7807
  size: "small",
7775
7808
  "icon-size": "medium",
7776
7809
  icon: "plus",
7777
- title: unref(i18n).baseText("node.add"),
7810
+ title: unref(i18n2).baseText("node.add"),
7778
7811
  onClick: onAdd2
7779
7812
  }, null, 8, ["title"])) : createCommentVNode("", true),
7780
7813
  createVNode(_component_N8nIconButton, {
@@ -7784,7 +7817,7 @@ const _sfc_main$G = /* @__PURE__ */ defineComponent({
7784
7817
  size: "small",
7785
7818
  "icon-size": "medium",
7786
7819
  icon: "trash-2",
7787
- title: unref(i18n).baseText("node.delete"),
7820
+ title: unref(i18n2).baseText("node.delete"),
7788
7821
  onClick: onDelete
7789
7822
  }, null, 8, ["title"])
7790
7823
  ], 2);
@@ -7792,17 +7825,17 @@ const _sfc_main$G = /* @__PURE__ */ defineComponent({
7792
7825
  }
7793
7826
  });
7794
7827
  const canvasEdgeToolbar = "_canvasEdgeToolbar_uogmx_123";
7795
- const style0$w = {
7828
+ const style0$A = {
7796
7829
  canvasEdgeToolbar
7797
7830
  };
7798
- const cssModules$w = {
7799
- "$style": style0$w
7831
+ const cssModules$A = {
7832
+ "$style": style0$A
7800
7833
  };
7801
- const CanvasEdgeToolbar = /* @__PURE__ */ _export_sfc$1(_sfc_main$G, [["__cssModules", cssModules$w]]);
7802
- const _hoisted_1$a = ["data-source-node-name", "data-target-node-name"];
7834
+ const CanvasEdgeToolbar = /* @__PURE__ */ _export_sfc$1(_sfc_main$M, [["__cssModules", cssModules$A]]);
7835
+ const _hoisted_1$c = ["data-source-node-name", "data-target-node-name"];
7803
7836
  const _hoisted_2$7 = ["data-source-node-name", "data-target-node-name", "data-edge-status"];
7804
7837
  const delayedHoveredTimeout = 600;
7805
- const _sfc_main$F = /* @__PURE__ */ defineComponent({
7838
+ const _sfc_main$L = /* @__PURE__ */ defineComponent({
7806
7839
  __name: "CanvasEdge",
7807
7840
  props: {
7808
7841
  id: {},
@@ -7948,7 +7981,7 @@ const _sfc_main$F = /* @__PURE__ */ defineComponent({
7948
7981
  "interaction-width": 40
7949
7982
  }, null, 8, ["id", "class", "style", "path", "marker-end"]);
7950
7983
  }), 128))
7951
- ], 8, _hoisted_1$a),
7984
+ ], 8, _hoisted_1$c),
7952
7985
  createVNode(unref(_sfc_main$3$1), null, {
7953
7986
  default: withCtx(() => [
7954
7987
  createBaseVNode("div", {
@@ -7982,15 +8015,15 @@ const _sfc_main$F = /* @__PURE__ */ defineComponent({
7982
8015
  const edge = "_edge_fyzmo_123";
7983
8016
  const edgeLabelWrapper = "_edgeLabelWrapper_fyzmo_127";
7984
8017
  const edgeLabel = "_edgeLabel_fyzmo_127";
7985
- const style0$v = {
8018
+ const style0$z = {
7986
8019
  edge,
7987
8020
  edgeLabelWrapper,
7988
8021
  edgeLabel
7989
8022
  };
7990
- const cssModules$v = {
7991
- "$style": style0$v
8023
+ const cssModules$z = {
8024
+ "$style": style0$z
7992
8025
  };
7993
- const Edge = /* @__PURE__ */ _export_sfc$1(_sfc_main$F, [["__cssModules", cssModules$v]]);
8026
+ const Edge = /* @__PURE__ */ _export_sfc$1(_sfc_main$L, [["__cssModules", cssModules$z]]);
7994
8027
  function useCanvasNode() {
7995
8028
  const node2 = inject(CanvasNodeKey);
7996
8029
  const data = computed(
@@ -8066,9 +8099,9 @@ function useCanvasNode() {
8066
8099
  eventBus
8067
8100
  };
8068
8101
  }
8069
- const _hoisted_1$9 = ["title"];
8102
+ const _hoisted_1$b = ["title"];
8070
8103
  const _hoisted_2$6 = ["onClick"];
8071
- const _sfc_main$E = /* @__PURE__ */ defineComponent({
8104
+ const _sfc_main$K = /* @__PURE__ */ defineComponent({
8072
8105
  __name: "CanvasNodeStickyColorSelector",
8073
8106
  props: {
8074
8107
  "visible": { type: Boolean },
@@ -8077,7 +8110,7 @@ const _sfc_main$E = /* @__PURE__ */ defineComponent({
8077
8110
  emits: /* @__PURE__ */ mergeModels(["update"], ["update:visible"]),
8078
8111
  setup(__props, { emit: __emit }) {
8079
8112
  const emit = __emit;
8080
- const i18n = useI18n();
8113
+ const i18n2 = useI18n();
8081
8114
  const { render: render2, eventBus } = useCanvasNode();
8082
8115
  const renderOptions = computed(() => render2.value.options);
8083
8116
  const autoHideTimeout = ref(null);
@@ -8112,7 +8145,7 @@ const _sfc_main$E = /* @__PURE__ */ defineComponent({
8112
8145
  });
8113
8146
  return (_ctx, _cache) => {
8114
8147
  const _component_N8nIcon = N8nIcon;
8115
- const _component_N8nPopover = _sfc_main$T;
8148
+ const _component_N8nPopover = _sfc_main$Z;
8116
8149
  return openBlock(), createBlock(_component_N8nPopover, {
8117
8150
  visible: isPopoverVisible.value,
8118
8151
  "onUpdate:visible": _cache[0] || (_cache[0] = ($event) => isPopoverVisible.value = $event),
@@ -8129,10 +8162,10 @@ const _sfc_main$E = /* @__PURE__ */ defineComponent({
8129
8162
  createBaseVNode("div", {
8130
8163
  class: normalizeClass(_ctx.$style.option),
8131
8164
  "data-test-id": "change-sticky-color",
8132
- title: unref(i18n).baseText("node.changeColor")
8165
+ title: unref(i18n2).baseText("node.changeColor")
8133
8166
  }, [
8134
8167
  createVNode(_component_N8nIcon, { icon: "palette" })
8135
- ], 10, _hoisted_1$9)
8168
+ ], 10, _hoisted_1$b)
8136
8169
  ]),
8137
8170
  default: withCtx(() => [
8138
8171
  createBaseVNode("div", {
@@ -8162,7 +8195,7 @@ const content$1 = "_content_3lp7u_129";
8162
8195
  const color = "_color_3lp7u_136";
8163
8196
  const selected$2 = "_selected_3lp7u_148";
8164
8197
  const option = "_option_3lp7u_173";
8165
- const style0$u = {
8198
+ const style0$y = {
8166
8199
  popover,
8167
8200
  content: content$1,
8168
8201
  color,
@@ -8176,11 +8209,11 @@ const style0$u = {
8176
8209
  "sticky-color-7": "_sticky-color-7_3lp7u_169",
8177
8210
  option
8178
8211
  };
8179
- const cssModules$u = {
8180
- "$style": style0$u
8212
+ const cssModules$y = {
8213
+ "$style": style0$y
8181
8214
  };
8182
- const __unplugin_components_2$1 = /* @__PURE__ */ _export_sfc$1(_sfc_main$E, [["__cssModules", cssModules$u]]);
8183
- const _sfc_main$D = /* @__PURE__ */ defineComponent({
8215
+ const __unplugin_components_2$2 = /* @__PURE__ */ _export_sfc$1(_sfc_main$K, [["__cssModules", cssModules$y]]);
8216
+ const _sfc_main$J = /* @__PURE__ */ defineComponent({
8184
8217
  __name: "CanvasNodeToolbar",
8185
8218
  props: {
8186
8219
  readOnly: { type: Boolean }
@@ -8190,15 +8223,16 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
8190
8223
  const emit = __emit;
8191
8224
  const props = __props;
8192
8225
  const $style = useCssModule();
8193
- const i18n = useI18n();
8226
+ const i18n2 = useI18n();
8194
8227
  const { isExecuting } = useCanvas();
8195
8228
  const { isDisabled, render: render2, name } = useCanvasNode();
8196
8229
  const workflowsStore = useWorkflowsStore();
8197
8230
  const nodeTypesStore = useNodeTypesStore();
8198
- const node2 = computed(() => !!name.value && workflowsStore.getNodeByName(name.value));
8231
+ const experimentalNdvStore = useExperimentalNdvStore();
8232
+ const node2 = computed(() => name.value ? workflowsStore.getNodeByName(name.value) : null);
8199
8233
  const isToolNode = computed(() => !!node2.value && nodeTypesStore.isToolNode(node2.value.type));
8200
8234
  const nodeDisabledTitle = computed(() => {
8201
- return isDisabled.value ? i18n.baseText("node.enable") : i18n.baseText("node.disable");
8235
+ return isDisabled.value ? i18n2.baseText("node.enable") : i18n2.baseText("node.disable");
8202
8236
  });
8203
8237
  const isStickyColorSelectorOpen = ref(false);
8204
8238
  const isHovered = ref(false);
@@ -8214,6 +8248,9 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
8214
8248
  return !props.readOnly && render2.value.type === CanvasNodeRenderType.Default;
8215
8249
  });
8216
8250
  const isDeleteNodeVisible = computed(() => !props.readOnly);
8251
+ const isFocusNodeVisible = computed(
8252
+ () => experimentalNdvStore.isEnabled && node2.value !== null && experimentalNdvStore.collapsedNodes[node2.value.id] !== false
8253
+ );
8217
8254
  const isStickyNoteChangeColorVisible = computed(
8218
8255
  () => !props.readOnly && render2.value.type === CanvasNodeRenderType.StickyNote
8219
8256
  );
@@ -8240,10 +8277,15 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
8240
8277
  function onMouseLeave() {
8241
8278
  isHovered.value = false;
8242
8279
  }
8280
+ function onFocusNode() {
8281
+ if (node2.value) {
8282
+ experimentalNdvStore.focusNode(node2.value.id);
8283
+ }
8284
+ }
8243
8285
  return (_ctx, _cache) => {
8244
- const _component_N8nIconButton = _sfc_main$S;
8286
+ const _component_N8nIconButton = _sfc_main$Y;
8245
8287
  const _component_N8nTooltip = N8nTooltip;
8246
- const _component_CanvasNodeStickyColorSelector = __unplugin_components_2$1;
8288
+ const _component_CanvasNodeStickyColorSelector = __unplugin_components_2$2;
8247
8289
  return openBlock(), createElementBlock("div", {
8248
8290
  "data-test-id": "canvas-node-toolbar",
8249
8291
  class: normalizeClass(classes.value),
@@ -8253,28 +8295,28 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
8253
8295
  createBaseVNode("div", {
8254
8296
  class: normalizeClass(unref($style).canvasNodeToolbarItems)
8255
8297
  }, [
8256
- createVNode(_component_N8nTooltip, {
8298
+ isExecuteNodeVisible.value ? (openBlock(), createBlock(_component_N8nTooltip, {
8299
+ key: 0,
8257
8300
  placement: "top",
8258
8301
  disabled: !unref(isDisabled),
8259
- content: unref(i18n).baseText("ndv.execute.deactivated")
8302
+ content: unref(i18n2).baseText("ndv.execute.deactivated")
8260
8303
  }, {
8261
8304
  default: withCtx(() => [
8262
- isExecuteNodeVisible.value ? (openBlock(), createBlock(_component_N8nIconButton, {
8263
- key: 0,
8305
+ createVNode(_component_N8nIconButton, {
8264
8306
  "data-test-id": "execute-node-button",
8265
8307
  type: "tertiary",
8266
8308
  text: "",
8267
8309
  size: "small",
8268
8310
  icon: "play",
8269
8311
  disabled: unref(isExecuting) || unref(isDisabled),
8270
- title: unref(i18n).baseText("node.testStep"),
8312
+ title: unref(i18n2).baseText("node.testStep"),
8271
8313
  onClick: executeNode
8272
- }, null, 8, ["disabled", "title"])) : createCommentVNode("", true)
8314
+ }, null, 8, ["disabled", "title"])
8273
8315
  ]),
8274
8316
  _: 1
8275
- }, 8, ["disabled", "content"]),
8317
+ }, 8, ["disabled", "content"])) : createCommentVNode("", true),
8276
8318
  isDisableNodeVisible.value ? (openBlock(), createBlock(_component_N8nIconButton, {
8277
- key: 0,
8319
+ key: 1,
8278
8320
  "data-test-id": "disable-node-button",
8279
8321
  type: "tertiary",
8280
8322
  text: "",
@@ -8284,17 +8326,25 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
8284
8326
  onClick: onToggleNode
8285
8327
  }, null, 8, ["title"])) : createCommentVNode("", true),
8286
8328
  isDeleteNodeVisible.value ? (openBlock(), createBlock(_component_N8nIconButton, {
8287
- key: 1,
8329
+ key: 2,
8288
8330
  "data-test-id": "delete-node-button",
8289
8331
  type: "tertiary",
8290
8332
  size: "small",
8291
8333
  text: "",
8292
8334
  icon: "trash-2",
8293
- title: unref(i18n).baseText("node.delete"),
8335
+ title: unref(i18n2).baseText("node.delete"),
8294
8336
  onClick: onDeleteNode
8295
8337
  }, null, 8, ["title"])) : createCommentVNode("", true),
8338
+ isFocusNodeVisible.value ? (openBlock(), createBlock(_component_N8nIconButton, {
8339
+ key: 3,
8340
+ type: "tertiary",
8341
+ size: "small",
8342
+ text: "",
8343
+ icon: "crosshair",
8344
+ onClick: onFocusNode
8345
+ })) : createCommentVNode("", true),
8296
8346
  isStickyNoteChangeColorVisible.value ? (openBlock(), createBlock(_component_CanvasNodeStickyColorSelector, {
8297
- key: 2,
8347
+ key: 4,
8298
8348
  visible: isStickyColorSelectorOpen.value,
8299
8349
  "onUpdate:visible": _cache[0] || (_cache[0] = ($event) => isStickyColorSelectorOpen.value = $event),
8300
8350
  onUpdate: onChangeStickyColor
@@ -8315,24 +8365,24 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
8315
8365
  const canvasNodeToolbar$1 = "_canvasNodeToolbar_104hp_123";
8316
8366
  const canvasNodeToolbarItems = "_canvasNodeToolbarItems_104hp_130";
8317
8367
  const forceVisible = "_forceVisible_104hp_141";
8318
- const style0$t = {
8368
+ const style0$x = {
8319
8369
  canvasNodeToolbar: canvasNodeToolbar$1,
8320
8370
  canvasNodeToolbarItems,
8321
8371
  forceVisible
8322
8372
  };
8323
- const cssModules$t = {
8324
- "$style": style0$t
8373
+ const cssModules$x = {
8374
+ "$style": style0$x
8325
8375
  };
8326
- const CanvasNodeToolbar = /* @__PURE__ */ _export_sfc$1(_sfc_main$D, [["__cssModules", cssModules$t]]);
8327
- const _hoisted_1$8 = { key: 1 };
8376
+ const CanvasNodeToolbar = /* @__PURE__ */ _export_sfc$1(_sfc_main$J, [["__cssModules", cssModules$x]]);
8377
+ const _hoisted_1$a = { key: 1 };
8328
8378
  const _hoisted_2$5 = ["textContent"];
8329
8379
  const _hoisted_3$4 = { key: 2 };
8330
8380
  const _hoisted_4$3 = { key: 5 };
8331
- const _sfc_main$C = /* @__PURE__ */ defineComponent({
8381
+ const _sfc_main$I = /* @__PURE__ */ defineComponent({
8332
8382
  __name: "CanvasNodeStatusIcons",
8333
8383
  setup(__props) {
8334
8384
  const nodeHelpers = useNodeHelpers();
8335
- const i18n = useI18n();
8385
+ const i18n2 = useI18n();
8336
8386
  const {
8337
8387
  hasPinnedData,
8338
8388
  issues: issues2,
@@ -8368,7 +8418,7 @@ const _sfc_main$C = /* @__PURE__ */ defineComponent({
8368
8418
  }, {
8369
8419
  content: withCtx(() => [
8370
8420
  createVNode(TitledList, {
8371
- title: `${unref(i18n).baseText("node.issues")}:`,
8421
+ title: `${unref(i18n2).baseText("node.issues")}:`,
8372
8422
  items: unref(issues2)
8373
8423
  }, null, 8, ["title", "items"])
8374
8424
  ]),
@@ -8377,7 +8427,7 @@ const _sfc_main$C = /* @__PURE__ */ defineComponent({
8377
8427
  ]),
8378
8428
  _: 1
8379
8429
  })
8380
- ], 2)) : unref(executionWaiting) || unref(executionStatus) === "waiting" ? (openBlock(), createElementBlock("div", _hoisted_1$8, [
8430
+ ], 2)) : unref(executionWaiting) || unref(executionStatus) === "waiting" ? (openBlock(), createElementBlock("div", _hoisted_1$a, [
8381
8431
  createBaseVNode("div", {
8382
8432
  class: normalizeClass([_ctx.$style.status, _ctx.$style.waiting])
8383
8433
  }, [
@@ -8422,7 +8472,7 @@ const _sfc_main$C = /* @__PURE__ */ defineComponent({
8422
8472
  placement: "bottom"
8423
8473
  }, {
8424
8474
  content: withCtx(() => [
8425
- createTextVNode(toDisplayString(unref(i18n).baseText(
8475
+ createTextVNode(toDisplayString(unref(i18n2).baseText(
8426
8476
  dirtiness.value === unref(CanvasNodeDirtiness).PARAMETERS_UPDATED ? "node.dirty" : "node.subjectToChange"
8427
8477
  )), 1)
8428
8478
  ]),
@@ -8455,16 +8505,16 @@ const _sfc_main$C = /* @__PURE__ */ defineComponent({
8455
8505
  }
8456
8506
  });
8457
8507
  const status = "_status_93vv6_123";
8458
- const runData = "_runData_93vv6_130";
8508
+ const runData$1 = "_runData_93vv6_130";
8459
8509
  const waiting$1 = "_waiting_93vv6_134";
8460
8510
  const pinnedData = "_pinnedData_93vv6_138";
8461
8511
  const running$1 = "_running_93vv6_142";
8462
8512
  const issues = "_issues_93vv6_165";
8463
8513
  const count = "_count_93vv6_170";
8464
8514
  const warning$2 = "_warning_93vv6_174";
8465
- const style0$s = {
8515
+ const style0$w = {
8466
8516
  status,
8467
- runData,
8517
+ runData: runData$1,
8468
8518
  waiting: waiting$1,
8469
8519
  pinnedData,
8470
8520
  running: running$1,
@@ -8473,11 +8523,11 @@ const style0$s = {
8473
8523
  count,
8474
8524
  warning: warning$2
8475
8525
  };
8476
- const cssModules$s = {
8477
- "$style": style0$s
8526
+ const cssModules$w = {
8527
+ "$style": style0$w
8478
8528
  };
8479
- const __unplugin_components_3 = /* @__PURE__ */ _export_sfc$1(_sfc_main$C, [["__cssModules", cssModules$s]]);
8480
- const _sfc_main$B = /* @__PURE__ */ defineComponent({
8529
+ const __unplugin_components_3 = /* @__PURE__ */ _export_sfc$1(_sfc_main$I, [["__cssModules", cssModules$w]]);
8530
+ const _sfc_main$H = /* @__PURE__ */ defineComponent({
8481
8531
  __name: "CanvasNodeDisabledStrikeThrough",
8482
8532
  setup(__props) {
8483
8533
  const $style = useCssModule();
@@ -8499,16 +8549,16 @@ const _sfc_main$B = /* @__PURE__ */ defineComponent({
8499
8549
  const disabledStrikeThrough = "_disabledStrikeThrough_nl2g7_123";
8500
8550
  const success$2 = "_success_nl2g7_132";
8501
8551
  const warning$1 = "_warning_nl2g7_136";
8502
- const style0$r = {
8552
+ const style0$v = {
8503
8553
  disabledStrikeThrough,
8504
8554
  success: success$2,
8505
8555
  warning: warning$1
8506
8556
  };
8507
- const cssModules$r = {
8508
- "$style": style0$r
8557
+ const cssModules$v = {
8558
+ "$style": style0$v
8509
8559
  };
8510
- const __unplugin_components_2 = /* @__PURE__ */ _export_sfc$1(_sfc_main$B, [["__cssModules", cssModules$r]]);
8511
- const _sfc_main$A = /* @__PURE__ */ defineComponent({
8560
+ const __unplugin_components_2$1 = /* @__PURE__ */ _export_sfc$1(_sfc_main$H, [["__cssModules", cssModules$v]]);
8561
+ const _sfc_main$G = /* @__PURE__ */ defineComponent({
8512
8562
  __name: "CanvasNodeTooltip",
8513
8563
  props: {
8514
8564
  visible: { type: Boolean }
@@ -8547,14 +8597,14 @@ const _sfc_main$A = /* @__PURE__ */ defineComponent({
8547
8597
  });
8548
8598
  const tooltipTrigger = "_tooltipTrigger_dauyi_123";
8549
8599
  const popper = "_popper_dauyi_131";
8550
- const style0$q = {
8600
+ const style0$u = {
8551
8601
  tooltipTrigger,
8552
8602
  popper
8553
8603
  };
8554
- const cssModules$q = {
8555
- "$style": style0$q
8604
+ const cssModules$u = {
8605
+ "$style": style0$u
8556
8606
  };
8557
- const __unplugin_components_0$3 = /* @__PURE__ */ _export_sfc$1(_sfc_main$A, [["__cssModules", cssModules$q]]);
8607
+ const __unplugin_components_0$3 = /* @__PURE__ */ _export_sfc$1(_sfc_main$G, [["__cssModules", cssModules$u]]);
8558
8608
  function useNodeConnections({
8559
8609
  inputs: inputs2,
8560
8610
  outputs,
@@ -8603,122 +8653,1126 @@ function useNodeConnections({
8603
8653
  isValidConnection
8604
8654
  };
8605
8655
  }
8606
- const _sfc_main$z = /* @__PURE__ */ defineComponent({
8607
- __name: "NodeTitle",
8656
+ const _hoisted_1$9 = { key: 0 };
8657
+ const _sfc_main$F = /* @__PURE__ */ defineComponent({
8658
+ __name: "InputNodeSelect",
8608
8659
  props: {
8609
- modelValue: { default: "" },
8610
- nodeType: { default: void 0 },
8611
- readOnly: { type: Boolean, default: false }
8660
+ nodes: {},
8661
+ workflow: {},
8662
+ modelValue: {}
8612
8663
  },
8613
8664
  emits: ["update:model-value"],
8614
8665
  setup(__props, { emit: __emit }) {
8666
+ const props = __props;
8615
8667
  const emit = __emit;
8616
- function onRename(value) {
8617
- if (value.trim() !== "") {
8618
- emit("update:model-value", value.trim());
8668
+ const i18n2 = useI18n();
8669
+ const workflowsStore = useWorkflowsStore();
8670
+ const nodeTypesStore = useNodeTypesStore();
8671
+ const ndvStore = useNDVStore();
8672
+ const selectedInputNode = computed(() => workflowsStore.getNodeByName(props.modelValue ?? ""));
8673
+ const selectedInputNodeType = computed(() => {
8674
+ const node2 = selectedInputNode.value;
8675
+ if (!node2) return null;
8676
+ return nodeTypesStore.getNodeType(node2.type, node2.typeVersion);
8677
+ });
8678
+ const inputNodes = computed(
8679
+ () => props.nodes?.map((node2) => {
8680
+ const fullNode = workflowsStore.getNodeByName(node2.name);
8681
+ if (!fullNode) return null;
8682
+ return {
8683
+ node: fullNode,
8684
+ type: nodeTypesStore.getNodeType(fullNode.type, fullNode.typeVersion),
8685
+ depth: node2.depth
8686
+ };
8687
+ }).filter(isPresent) ?? []
8688
+ );
8689
+ const activeNode = computed(() => ndvStore.activeNode);
8690
+ const activeNodeType = computed(() => {
8691
+ const node2 = activeNode.value;
8692
+ if (!node2) return null;
8693
+ return nodeTypesStore.getNodeType(node2.type, node2.typeVersion);
8694
+ });
8695
+ const isMultiInputNode = computed(() => {
8696
+ const nodeType = activeNodeType.value;
8697
+ return nodeType !== null && nodeType.inputs.length > 1;
8698
+ });
8699
+ const connectedTo = (nodeName) => {
8700
+ const connections2 = ndvStore.ndvNodeInputNumber[nodeName];
8701
+ if (!connections2) return "";
8702
+ if (connections2.length === 1) {
8703
+ return `Input ${ndvStore.ndvNodeInputNumber[nodeName]}`;
8619
8704
  }
8705
+ return `Inputs ${ndvStore.ndvNodeInputNumber[nodeName].join(", ")}`;
8706
+ };
8707
+ function getMultipleNodesText(nodeName) {
8708
+ if (!nodeName || !isMultiInputNode.value || !activeNode.value || !activeNodeType.value?.inputNames)
8709
+ return "";
8710
+ const activeNodeConnections = props.workflow.connectionsByDestinationNode[activeNode.value.name].main || [];
8711
+ const connectedInputIndexes = activeNodeConnections.reduce((acc, node2, index) => {
8712
+ if (node2?.[0] && node2[0].node === nodeName) return [...acc, index];
8713
+ return acc;
8714
+ }, []);
8715
+ const connectedInputs = connectedInputIndexes.map(
8716
+ (inputIndex) => activeNodeType.value?.inputNames?.[inputIndex]
8717
+ );
8718
+ if (connectedInputs.length === 0) return "";
8719
+ return `(${connectedInputs.join(" & ")})`;
8720
+ }
8721
+ function title2(nodeName, length = 30) {
8722
+ return truncate(nodeName, length);
8723
+ }
8724
+ function subtitle2(nodeName, depth) {
8725
+ const multipleNodesText = getMultipleNodesText(nodeName);
8726
+ if (multipleNodesText) return multipleNodesText;
8727
+ return i18n2.baseText("ndv.input.nodeDistance", { adjustToNumber: depth });
8728
+ }
8729
+ function onInputNodeChange(value) {
8730
+ emit("update:model-value", value);
8620
8731
  }
8621
- const wrapperRef = useTemplateRef("wrapperRef");
8622
- const { width } = useElementSize(wrapperRef);
8623
8732
  return (_ctx, _cache) => {
8624
- return openBlock(), createElementBlock("span", {
8625
- class: normalizeClass(_ctx.$style.container),
8626
- "data-test-id": "node-title-container"
8733
+ const _component_n8n_option = _sfc_main$_;
8734
+ const _component_n8n_select = N8nSelect;
8735
+ return openBlock(), createBlock(_component_n8n_select, {
8736
+ "model-value": _ctx.modelValue,
8737
+ "no-data-text": unref(i18n2).baseText("ndv.input.noNodesFound"),
8738
+ placeholder: unref(i18n2).baseText("ndv.input.parentNodes"),
8739
+ class: normalizeClass(_ctx.$style.select),
8740
+ teleported: "",
8741
+ size: "small",
8742
+ filterable: "",
8743
+ "data-test-id": "ndv-input-select",
8744
+ "onUpdate:modelValue": onInputNodeChange
8745
+ }, {
8746
+ prefix: withCtx(() => [
8747
+ createVNode(_sfc_main$$, {
8748
+ disabled: selectedInputNode.value?.disabled,
8749
+ "node-type": selectedInputNodeType.value,
8750
+ size: 14,
8751
+ shrink: false
8752
+ }, null, 8, ["disabled", "node-type"])
8753
+ ]),
8754
+ default: withCtx(() => [
8755
+ (openBlock(true), createElementBlock(Fragment, null, renderList(inputNodes.value, ({ node: node2, type, depth }) => {
8756
+ return openBlock(), createBlock(_component_n8n_option, {
8757
+ key: node2.name,
8758
+ value: node2.name,
8759
+ class: normalizeClass([_ctx.$style.node, { [_ctx.$style.disabled]: node2.disabled }]),
8760
+ label: `${title2(node2.name)} ${getMultipleNodesText(node2.name)}`,
8761
+ "data-test-id": "ndv-input-option"
8762
+ }, {
8763
+ default: withCtx(() => [
8764
+ createVNode(_sfc_main$$, {
8765
+ disabled: node2.disabled,
8766
+ "node-type": type,
8767
+ size: 14,
8768
+ shrink: false,
8769
+ class: normalizeClass(_ctx.$style.icon)
8770
+ }, null, 8, ["disabled", "node-type", "class"]),
8771
+ createBaseVNode("span", {
8772
+ class: normalizeClass(_ctx.$style.title)
8773
+ }, [
8774
+ createTextVNode(toDisplayString(title2(node2.name)) + " ", 1),
8775
+ node2.disabled ? (openBlock(), createElementBlock("span", _hoisted_1$9, "(" + toDisplayString(unref(i18n2).baseText("node.disabled")) + ")", 1)) : createCommentVNode("", true)
8776
+ ], 2),
8777
+ createBaseVNode("span", {
8778
+ class: normalizeClass(_ctx.$style.subtitle)
8779
+ }, toDisplayString(connectedTo(node2.name) ? connectedTo(node2.name) : subtitle2(node2.name, depth)), 3)
8780
+ ]),
8781
+ _: 2
8782
+ }, 1032, ["value", "class", "label"]);
8783
+ }), 128))
8784
+ ]),
8785
+ _: 1
8786
+ }, 8, ["model-value", "no-data-text", "placeholder", "class"]);
8787
+ };
8788
+ }
8789
+ });
8790
+ const select$1 = "_select_wv0ev_123";
8791
+ const node$1 = "_node_wv0ev_132";
8792
+ const icon$1 = "_icon_wv0ev_140";
8793
+ const title$2 = "_title_wv0ev_144";
8794
+ const disabled$2 = "_disabled_wv0ev_153";
8795
+ const subtitle$1 = "_subtitle_wv0ev_157";
8796
+ const style0$t = {
8797
+ select: select$1,
8798
+ node: node$1,
8799
+ icon: icon$1,
8800
+ title: title$2,
8801
+ disabled: disabled$2,
8802
+ subtitle: subtitle$1
8803
+ };
8804
+ const cssModules$t = {
8805
+ "$style": style0$t
8806
+ };
8807
+ const InputNodeSelect = /* @__PURE__ */ _export_sfc$1(_sfc_main$F, [["__cssModules", cssModules$t]]);
8808
+ const _sfc_main$E = /* @__PURE__ */ defineComponent({
8809
+ __name: "NDVEmptyState",
8810
+ props: {
8811
+ title: {}
8812
+ },
8813
+ setup(__props) {
8814
+ return (_ctx, _cache) => {
8815
+ return openBlock(), createElementBlock("article", {
8816
+ class: normalizeClass(_ctx.$style.empty)
8627
8817
  }, [
8628
- createBaseVNode("span", {
8629
- class: normalizeClass(_ctx.$style.iconWrapper)
8630
- }, [
8631
- createVNode(_sfc_main$U, {
8632
- "node-type": _ctx.nodeType,
8633
- size: 18,
8634
- "show-tooltip": true,
8635
- "tooltip-position": "left"
8636
- }, null, 8, ["node-type"])
8637
- ], 2),
8638
- createBaseVNode("div", {
8639
- ref_key: "wrapperRef",
8640
- ref: wrapperRef,
8641
- class: normalizeClass(_ctx.$style.textWrapper)
8818
+ renderSlot(_ctx.$slots, "icon"),
8819
+ createBaseVNode("h1", {
8820
+ class: normalizeClass(_ctx.$style.title)
8821
+ }, toDisplayString(_ctx.title), 3),
8822
+ createBaseVNode("p", {
8823
+ class: normalizeClass(_ctx.$style.description)
8642
8824
  }, [
8643
- createVNode(unref(InlineRename), {
8644
- "max-width": unref(width),
8645
- "model-value": _ctx.modelValue,
8646
- "read-only": _ctx.readOnly,
8647
- "onUpdate:modelValue": onRename
8648
- }, null, 8, ["max-width", "model-value", "read-only"])
8825
+ renderSlot(_ctx.$slots, "description")
8649
8826
  ], 2)
8650
8827
  ], 2);
8651
8828
  };
8652
8829
  }
8653
8830
  });
8654
- const container$4 = "_container_178ym_123";
8655
- const textWrapper = "_textWrapper_178ym_132";
8656
- const iconWrapper = "_iconWrapper_178ym_137";
8657
- const style0$p = {
8658
- container: container$4,
8659
- textWrapper,
8660
- iconWrapper
8831
+ const empty$1 = "_empty_1x72k_2";
8832
+ const title$1 = "_title_1x72k_13";
8833
+ const description$1 = "_description_1x72k_20";
8834
+ const style0$s = {
8835
+ empty: empty$1,
8836
+ title: title$1,
8837
+ description: description$1
8661
8838
  };
8662
- const cssModules$p = {
8663
- "$style": style0$p
8839
+ const cssModules$s = {
8840
+ "$style": style0$s
8664
8841
  };
8665
- const NodeTitle = /* @__PURE__ */ _export_sfc$1(_sfc_main$z, [["__cssModules", cssModules$p]]);
8666
- const useNodeDocsUrl = ({
8667
- nodeType: nodeTypeRef
8668
- }) => {
8669
- const packageName = computed(() => toValue(nodeTypeRef)?.name.split(".")[0] ?? "");
8670
- const isCommunityNode = computed(() => {
8671
- const nodeType = toValue(nodeTypeRef);
8672
- if (nodeType) {
8673
- return isCommunityPackageName(nodeType.name);
8674
- }
8675
- return false;
8676
- });
8677
- const docsUrl = computed(() => {
8678
- const nodeType = toValue(nodeTypeRef);
8679
- if (!nodeType) {
8680
- return "";
8681
- }
8682
- if (nodeType.documentationUrl?.startsWith("http")) {
8683
- return nodeType.documentationUrl;
8684
- }
8685
- const utmParams = new URLSearchParams({
8686
- utm_source: "n8n_app",
8687
- utm_medium: "node_settings_modal-credential_link",
8688
- utm_campaign: nodeType.name
8689
- });
8690
- const primaryDocUrl = nodeType.codex?.resources?.primaryDocumentation?.[0]?.url;
8691
- if (primaryDocUrl) {
8692
- return `${primaryDocUrl}?${utmParams.toString()}`;
8693
- }
8694
- if (isCommunityNode.value) {
8695
- return `${NPM_PACKAGE_DOCS_BASE_URL}${packageName.value}`;
8696
- }
8697
- return `${BUILTIN_NODES_DOCS_URL}?${utmParams.toString()}`;
8698
- });
8699
- return { docsUrl };
8842
+ const __unplugin_components_2 = /* @__PURE__ */ _export_sfc$1(_sfc_main$E, [["__cssModules", cssModules$s]]);
8843
+ const _sfc_main$D = {};
8844
+ const _hoisted_1$8 = {
8845
+ width: "112",
8846
+ height: "80",
8847
+ viewBox: "0 0 112 80",
8848
+ fill: "none",
8849
+ xmlns: "http://www.w3.org/2000/svg",
8850
+ "xmlns:xlink": "http://www.w3.org/1999/xlink"
8700
8851
  };
8701
- const _sfc_main$y = /* @__PURE__ */ defineComponent({
8702
- __name: "NodeSettingsTabs",
8852
+ function _sfc_render(_ctx, _cache) {
8853
+ return openBlock(), createElementBlock("svg", _hoisted_1$8, _cache[0] || (_cache[0] = [
8854
+ createStaticVNode('<mask id="mask0_489_46042" style="mask-type:alpha;" maskUnits="userSpaceOnUse" x="0" y="0" width="112" height="80"><rect width="112" height="80" fill="url(#paint0_linear_489_46042)"></rect></mask><g mask="url(#mask0_489_46042)"><rect x="-0.5" width="112" height="80" fill="url(#pattern0)" fill-opacity="0.6"></rect></g><defs><pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"><use xlink:href="#image0_489_46042" transform="scale(0.00357143 0.005)"></use></pattern><linearGradient id="paint0_linear_489_46042" x1="90.5" y1="40.4494" x2="112.5" y2="40.4494" gradientUnits="userSpaceOnUse"><stop></stop><stop offset="1" stop-color="white" stop-opacity="0"></stop></linearGradient><image id="image0_489_46042" width="280" height="200" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAADICAYAAAAzx/4XAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABhdSURBVHgB7d0JcFTVngbw/72d4IYa0Ie4IK2llgpodNwtB9AaxVILF7ZxynkgWupojaRwASXQGEBqEAI8LXfBpZQS9IFabjMFkXFfijCKyqjQqIiKShCUpdP3vvPdpXP7pjtk6dPdSX+/qlPpJX07UfrL/yz3XEOIPJNiswaZkbKBtkiluC0qRB1gCJW86ntmjzYM81YvWIhyhgFTwlCxGJGyBcJKhTQxhUrSpJraKSpcVgjDhTQqEyo5U+6prbVExmV6TnWT6ixbnuxmSZ262xCLVTUIUTsxYEoMKpdM4aKCZV5ZUmIMFMoljsGUkMk1c9RArjE39HBchcuYadVVdUKUYwyYEjEhVhstj8gqdbMi8HA8kpTBqmqJC5EGHOQtEeVlMkXSw6WB4UK6cQymBKB6UYMso4OPWYZMrWG4kGasYEpAmWGHB3Xj0ydVzRUizRgwJcAwjaFpD9gyVYjygAHTxTndo9Bium2WLBWiPGDAdHFlkWT4/KK6uVzrQnnCgOniDNuIBu/blr1aiPKEAdPF2Xba1DQeYfVCecOAISJtGDBEpA0Dhoi0YcAQkTYMGCLShgFDRNowYIhIGwYMEWnDgCEibRgwRKQNA4aItGHAEJE2DBgi0oYBQ0TaMGCISBsGDBFpw4AhIm0YMESkDQOGiLRhwBCRNgwYItKGAUNE2jBgiEgbBgwRacOAISJtGDBEpA0Dhoi0YcAQkTYMGCLShgFDRNowYIhIGwYMEWnDgCEibRgwRKQNA4aItGHAEJE2DBgi0oYBQ0TaMGCISBsGDBFpw4AhIm0YMESkDQOGiLRhwBCRNgwYItKGAUNE2jBgiEgbBgwRacOAISJtGDBEpA0Dhoi0YcAQkTYMGCLShgFDRNowYIhIGwYMEWnDgCEibRgwRKQNA4aItGHAEJE2DBgi0oYBQ0TaMGCISBsGDBFpw4AhIm0YMESkDQOGiLRhwBCRNgwYItKGAUNE2hhCXc7ll19eUVZWNto0zYFGJDLIamys8J+LRMrilpWst217WSKRqFu6dGlciDRhwHQho0aNilqWVavC4/I2vGyhCpqpDBrSISLUJYwcOfJWFS6vq5vHS9tURiKRcf3795c1a9a8JUQ5xAqmk0N3qLy8/O/q5iDpIMMwlu7evXuMqmYahCgHOMjbyalwWSE5CBdA18o7HlFOsIvUiY0YMaJWfWnLeEtr9FbdpQrVXXpDiDqIXaROavjw4aPVlwWiiapmBi9ZsqROiDqAXaTOa4popMZjtIUXlQ4GTCfkVS9R0SvqvQ9RuzFgOqe/Sn7k632oi+IYTCfjTUtvkTxJJBI9OG1N7cUKppMpKyurlDzK9/tR18KA6Xzy+oG3LCsqRO3EgOl8KiSPTNOMClE7MWCISJsyIUcsVlvRGJEVhm3Nq5k8fqEUr3wPuHKAl9qNFYwnFqtqMND9MMwF1TW16yfXzLl1Qqw2KkXGtu245Fe9ELUTAybAaPprHbXFmFsekfXV02oX3BX7r6KZSUkmk3WSR42NjQwYajcGTIBl2aubPWjL6EikfJWqalZU3zN7tBSYtyalTvJAVUt1XANDHcExmDTofmRdezhIdZ8GqaCZYog9d3fSWDYzVhWXwnhScrRFQ0sMw3hSiDqAFUyAZUi8Fd9W8O5TIpFYqr7ERa/44sWLFwpRBzBggiJm28YbCtR9QrfFsqwq0WuqEHUQz0UKwFR1MiIdOc8nns/u01VXXTXXNM1bJcdUeM174YUXxglRBzFgQlQ1goDp+GpZQxYmGxPzZsTu0DYL4534iC0uc9lNq1ddo1OEKAfYRQoYpyoYI1djG6r7ZEbKF+CYogm6Smo8ZjA265YcwHFwPCHKkZKrYPCB31cSUTEjlaYtUSNi9rVtqTTcqiUqOWKLzCtLql5XrCov07zDhg2LqYBo9y53akq6asmSJXOFKIe6ZMDEYvdGG6W80jKNioiYJ6vfUs38qDBxA0T7yYJqNqpq+qSqvH9YceG1xsZGBE1bNorihddIm04ZMMEqJILAMFWI2E5wYCwiKoUTV0E2Zlp1VZ0UEIImmUwOUjeHRiKRSnU76j9nlpU1WI2NdapieUuF0UIupCOdijZgUIXslkhFhq5MVPRWIQ3tOb4KlnrVJboiVrjFdxlNmjo7ZphmqutkW9bUaVPGx4QoDwq6ktfvyhimEVV/W/uiKyNuFVKRVC110SbEoJ2zNGywMZ1sSL2dtLdahlFvGtKgwqEe4aCmqqNqqnp9Ww6Y7/EWos5Ca8Bk6cpExa1CoipEdJVQ6Ko0uCFibbAMM94tIvWSkPieQgAho6aqpbUKNd5C1Bl0OGCaDaiaUpHelSlv+mZbcimuWr1t2RvUoGbcNiSOKkQ91pCDSiIuex7LccZbVLjUhR5vT2bm9r8MUZHYY8CgCqmQnRVZujKpKiTVnclTV0b0QlBFsz2ZZbzFCH0N3w4dIo3Riu/Z0+NERScVMM5Je1nWhiRlb21dGcGHWQWHWLJahVVDa7syOjlVkZn5Nw6Nt4S/yQg0LGJECJ+n2nGqdVPtO9XeUW2lagnZw4+R4bYdeE8GDRW9VMCURcoX2PhA5HhA1WvNujLFNtsSZBjetg12+mfYErtq+uTx86QpQFIvkab/ZOgTnqlajWpniBssQY2qrVJtumornMOK9BQ3jE5XrY9q3VXbodo61d5U7TPVtgeO4QcNQ4aKWipgsNmS+qvdnnNaAl2ZtAHVhmIOkZbYKmCM9HCJJ3bvGjtz2sT/FffDv7e4/+3wTegl7lJtt3f/JHHD5VzVjH333Ve6deuGZfjYHU62b99eZts2gmS+ajHVvlZtjGqjVNsnw4+DkxkfVW2OapuF1Qx1IoExmBY3W1LPFV9XRhcracUjpulUMKq8WP3Lr1uGPzx/Gk6CPFu1gaqdrNrB4lYjP6n2iWr/p9pG1W5X7Z9UM4499li59NJL5ZRTTnFC5ssvv5Tly5fL+++/L7t370alMkO1TaqdYqr36969uxx44IG42Bm2xpStW7fK77//fqAKpPHiVkYIpR+897Wl5WBh6FDBNQWMaSJAFhZgQLXYGNbO5AZzn4gkLWv+199+O23xgr/tpR7/V9VuUK1fhtdcLW43BhXOaart07NnT5kzZ44MGTLECQxABTN06FAZM2aM1NfXI817oyFcEEbnn3++DBgwwAmZbdu2yTvvvCNvvPGGbN68WRVU9s3ijt9sFbdqOki1fcUNEoTfL9I0rhOsbogKJhUw06qrcEZuTs7K7exmzpy49a7qe8feWzPxKXErh39TrVq1ngiLCjWv1qNHD+ybggpDGhoasMtcf/X8ieJ9sC+88EI599xzU+ECuH3MMcfIyJEjETCpxw8++GCpqqqSa665RtCl8g0fPlzuuusuWbRoEaoZHOhKcSumY8Ttgh0pbjWD6ul/xJ39+i3wq7CKoYLinrzpUlPNM9xwwQAtQuM/VeuJILjgggucdvTRRzsVyTfffCPLli2T9957D1VHauD3zDPPdLpFYfvtt5+cdtppTpD8+eefzmP9+vWTgQMHpoULoAq69tpr5e2333a6S8r54obLaaHDXqTaNar9TbUnVPtVguGC8SSDBQ3lHwOmueA0MwZdMRN01D777COnnnqq1NTUON2ZIHRr7rzzTidkfAcddJBEIpHmB1cfdARV37595YsvvnAeQ0X0l7/8JeMPc8IJJ8ghhxwin3/+ObZU6KUe6uUfPxqNyo4dO2TdunXGzp07D1UP/4dq34hbiWJ2Cq8x8J4MGSoEbjjVJLhQLhgwGNB1xkVQuYTDBc444ww5++yz5YADDkg9tv/++zthkgnCChUQIITQ3cLxM8FxjjrqKCkvb1oRjdCZMWOGzJs3zxnnufrqq3ENaTyFMZ1LxR2ANv3fif0kKhRWMOnCC+XQMMDrjJ+EuzC+vfbay+n2YEB2zZo1zmP+1HQme++9t1OV+LdRwQTHasJQ7SBg1MyTc//mm2+W66+/3jk+xoHw3GuvvSabNm3CQfp4zRmLsdWkO+sWKhRWMJkFF9JhdsYZL9m4cWPWF5x++ulOpeGHSksBg0BCFwdQoWTrHvmOOOKIVAWDMBoxYkTq2KhcevXq5by3Zz9xK5iI83uoAEL3yKlibNYylF8MmHTh6sWfoXEGWT/99NPUwGwYxkMwJY1qA10m3M80BgPoEmGGqbKy0hkMRmsJxn4wOIxQwXuEAwlhhuDx74obMs7vkFRjMIwVKhR2kVzBpf7BbhICZr1qW5LJZA/MGK1du9ZZOBeGLs5ll13mTEPj9mGHHeaPizSDQBg8eLAzZoNqpn///tISjPvMmjVLNmzYIIMGDWr2PN4Hx/Eg1RAyTsBgkDdVubCzRHnGgMkcLH4Fg9vbxK1iBm7evNlZhZspYODII4902h7fUH3QES4ImdbA2M+wYcOcGSNUMpkEwsw/uT01yEtUKKXeRco0c4SG2ZgrVLtRtb+KNxGDBXXvvvsuVtZKvmEMBqGUrdsVkgpIO5k0/HMK2FWifCvlCiZT5YJp6RGqjVXtEO++3+Vwzg/CepS6ujpnlW2RMkKNqGBYwTRVLvuLe8byveIurouKGzKYkUktcME09EsvveSvrC16lhAVTqlWMMHqxe9O3CbuuT7OdMzxxx/vnAmNLsknn3wiK1eudNah7Nq1ywmZVatWZRxwLQScsrBz507/LjIFJz2ygqGCK+Uukj8Iiq/YcW6keOFyww03yN133+2sUcHgKaqV5557TqZOnepMU3/77bfO1gvFEjDougWmzxEuu4WoCJRiwGSaLbpANWdxyVlnnSUPPfRQ2gswuDp27Fhn1ezEiROdr63xww8/yPr16+Wcc85ptugOA8aYkcIpAlg3Ex68xZQ0zrg++eSTpU+fPi0O7qKCCXTZEC47hKgIlOoYTDBk8MnFMlhnqewll1yS8QVYeYvl+Y8++qjMnDnTmTZuCVb94gzp8847T6qrq9OeQxg888wzcvHFF8tNN90kL7/8ctrzv/zyi0yYMEGuvPJKufHGG+Wrr75q8b3QbcNrPOgrdY4BIurySrmCQbj660XKvcdSS/gzwXPXXXedtAbGabBXjG3bznYLQVjP8v333zu3f/vtN6fLFYSw2LJli1Mpff3119hms8X3QsD8+uuv/l30lRAwzsw0l2pTIZXav7/wJUX8CuYP8SZc8IHvTBBgCKA//vjDuStuBfO7EBWBUvwDF5xd8cdgUttNrlu3TjqTRCIh8Xg8dVfczaawCTnX1VHBlXIFHewqob/iBAy6NnYnOusYAYOBZA+ql58leOUBNQvGVXdUKFxo58In1Pmrj5W6GP/o8IEDs0aYRtYFa3NwlrcH/SR/TwlWMFRwpV7B+PChxEhrI3bzf/7556WjsGudHzLZtnjoKExPYzr7448/9h/CANL/S9OpR9gvk0FDBVPKARP84KHEeEu89SNPPPFEh09oxJYNfsDoqmAwsPvqq6/6U9T42dHVQ1Cmn9+In4NbNVABlGLAhK/57DcsRomrlvzoo4/kvvvuS21RWawwIP3444/7dzG4i8vMImgwI8YTqKngSi1ggpdd9ZvlNVwxEbvxO4tO8MFdunRpq1ft5hsGonH6gjfrhSTEJWhxWYNguLCLRAVV6l0kS9JD5lVxr87oLFybPXu2rFixQnINXSd/gygERXtCDCdfPvvss/5d9JH+W7Ufpel3SS20S80gsZtEeVaqXaRgwwCJ5X3FwMsDqq3CN+JcICzz/+CDDySXcF6Rv8UlBmrb2hVbvXq1cyVIbxNyTK9jqTACxgo1VjBUUKVawQS7R37I+A19DlwhcR0++NiWAdce+uyzzySXgicvtqWCQWU1efJk5+cS9+fHz/uCuDNIflimmmFGbFYuVCilXMH4H0L/Q9no3cbXD1Wbr9pm7LPyyiuvSG1tbcFX+SKIHnzwQXn99df9hzCw+4i4ewYHQ5KDvFQUSn0Mxg+a4IcTAYM+CwZfZqm2BetYsDYGlcN3333XqoMfeuihqbUwuMJAEK4qgEuXADb0Dp9giX1ounfv7rwWx8HF2QAXV3vssceCXaoHxb3o/W7v5/ZD0g9PB8dfqFBatYN0F5TppMdwQ/g0iLv0/sxEIlGOcEFFc+KJJ2a91KsPwYFrUGNnPGy5cPjhh6eewxoZvB7PY9OqK664wgkVHwIFe9DgciWjRo2Sk046yTkDe/z48c64kKdO3IDBVQ8QLAlJr8KcKmbg4Iv+WQXVoFTA2PZbK+verBOiPCjVHe0QHn6I+GMwqOYS3vP+SZAIl9dU66Vme67fsmVL+YIFC+Tnn3+W6dOnOxdZywZVysiRI51qI3ypEYy/IHjuuOOO8DWNUq+96KKLnMua4Htx//777xesz/HOk8Ks0Qxxt2VISnq4sItERaPUr4sUnk0KngDp38bWB4vFvUb1v2/durUcm36j4sBMznHHHZf14AiOcHgEZbvWNaDK8a9XjbGXxYsXC05j8Dyh2iZp6hZlC5emlbxEBVDKAROsYvzxiuAVHYMnIP+k2jOq7VIVxLXbt2/f++mnn3bOMbrttttkwIABohO23sSWDN5sE6qVl6SpagmHS7ARFVSpn02daU1MIktDyDyl2gMqZLbhPKCnnnpKbr/9dmeLh/ZAcNxyyy3Su3dv6devnzz88MPBKiUF2zFg1zoPRpl/C/1smWaQRNhFogLjpWObPoTBv/jB7pIEvqK7hDUn+LTfotoBb775pnOdJAziBi5Av0c//vijzJ8/Xx544AHn/k8//SRTpkxxFt5hn97gda2xQXjghMmNkh4o4XDh+AsVDW7Zmnm62p+V8S8BEqwWMLD6d9UeVu1nDLouX77cuYxJa2FbTgQTAsZ7b6e7g5BZtGiRfPjhh2lnYKN6CWyCtUOyj70EqxeigmPAuIJdinDQBMPGb9jg5RPVPseLsGQfVUZrYYOoWbNmOVPP4p5cWe8dy8a1r1ER4Zh+qIQueWJK5vEWW9g1oiLDLlKTTFPXRuh5/3vQsO2ds7k2LkPiX4wNMLUcvg4SwgLbW2ItDS7g5p16gLDCiU4LVTtBtR5qILcPVuuiizRkyBBnvQwqG7zWg+s3ZQsXdo2oqDBg0vkBgg+tXymINL9YW3DTcKfL88gjj8iLL77oBAMWygXHUABjK9iKEwHj7aGLY8dVW6baN+IO3PZW7SpVDVXgTO4lS5Y44zp4XWBXvL7e+zJYqOgxYJoLhox4t4NB4y/CA2clNFb34vrVbYBuF1IG+898JE1ncmO7CKzK+xd1zB5r167N1IXtJu51nFi9UNFjwGQWDhlfsILBtDVOisSJRPuGno9I8038cUzMPmHnf8wEYd+ZleKGjR8MOJtyobhbX1aqdqB3LASQf0lY7PD9hzBYqBNgwGQXDBm/e+QP/vrXUkIFgg98T0m/UmQ3aQqi4DQ4ggELXbBvrn/1xeDMD74f4YNFfW94x8WxEt7rMO6zSTKfDsCQoaLDgGlZeLVveJUvQgZBgS5LRJoCxsxwnEzbRPiDyb5gFwxVzEbJvAgwKaxgqBNgwLROOBwQMqb31YcP/Z4CxsrS/IDwqx5T0isgW9L3rOGCOuoUGDB7FuyCBM9bagw8jsf8cMk2/tJSwPiCYzzB2apM+9bwrGkqegyY1guGCzQGHiuTpqom05VagwETDppgQISnws0Mr/cXAPK8Iyp6DJjWC6/2Dd72181ASwETrmQyVR/h7SLCxwhu88kxGCpqDJjWCa/ytaR5WIR3xAu/Pjzj01LA7Cmk2DWiToEB03Z+mJiB28GAEckcMMHbVuhxO/S6TCHlf1+msGLQUFFiwLSeX8X4ty1pHiit2TouU7cmU8BI6Lad5StR0WLAtE0wCMKDs209RkvPtTY8GDJU1Bgw7WNnuW+04TVEXR4DJrcYIkQB3HCKiLRhwBCRNgwYItKGAUNE2jBgiEgbBgwRacOAISJtGDBdnGFI2gWbjIjZV4jyhAHTxdmGHU9/QKJClCcMmC6uLBmpDz1UOS5W2/qLaBN1AAOmi4vFquLiXuDNV7GfaY0WojxgwJQA27KeDN43DXOoEOUBA6YElNnmwtBDg6rvmT1OiDRjwJQAdJNssdOqGDHMKRNitVEh0ogBUyLKkkZMfQlOWVeUR2QFQ4Z0YsCUCGew15CpoYejCJlJNbWDhEiDtmz1SF2ACpOY+p8+pdkThixMNMrUme6sE1FOMGBK0KSaOXMNMW7N8vRSNe20LGkl62fE7qgXog5gwJSorJUMUQ4xYEoYxl7UP4AF6mZUiDRgwJBU31M7Wv1LQDUTFaIcYsBQSmx6bWVjo3W5mOZAww2bqBB1wD8AobUpv0xPqN8AAAAASUVORK5CYII="></image></defs>', 3)
8855
+ ]));
8856
+ }
8857
+ const WireMeUp = /* @__PURE__ */ _export_sfc$1(_sfc_main$D, [["render", _sfc_render]]);
8858
+ const _sfc_main$C = /* @__PURE__ */ defineComponent({
8859
+ __name: "InputPanel",
8703
8860
  props: {
8704
- modelValue: { default: "params" },
8705
- nodeType: { default: void 0 },
8706
- pushRef: { default: "" },
8707
- hideDocs: { type: Boolean }
8861
+ runIndex: {},
8862
+ workflow: {},
8863
+ pushRef: {},
8864
+ activeNodeName: {},
8865
+ currentNodeName: { default: "" },
8866
+ canLinkRuns: { type: Boolean, default: false },
8867
+ linkedRuns: { type: Boolean },
8868
+ readOnly: { type: Boolean, default: false },
8869
+ isProductionExecutionPreview: { type: Boolean, default: false },
8870
+ isPaneActive: { type: Boolean, default: false },
8871
+ displayMode: {},
8872
+ compact: { type: Boolean },
8873
+ disableDisplayModeSelection: { type: Boolean },
8874
+ focusedMappableInput: {},
8875
+ isMappingOnboarded: { type: Boolean }
8708
8876
  },
8709
- emits: ["update:model-value"],
8877
+ emits: ["itemHover", "tableMounted", "linkRun", "unlinkRun", "runChange", "search", "changeInputNode", "execute", "activatePane", "displayModeChange"],
8710
8878
  setup(__props, { emit: __emit }) {
8711
8879
  const props = __props;
8712
8880
  const emit = __emit;
8713
- const externalHooks = useExternalHooks();
8714
- const ndvStore = useNDVStore();
8715
- const workflowsStore = useWorkflowsStore();
8716
- const i18n = useI18n();
8881
+ const i18n2 = useI18n();
8717
8882
  const telemetry = useTelemetry();
8718
- const { docsUrl } = useNodeDocsUrl({ nodeType: () => props.nodeType });
8719
- const activeNode = computed(() => ndvStore.activeNode);
8720
- const isCommunityNode = computed(() => {
8721
- const nodeType = props.nodeType;
8883
+ const showDraggableHintWithDelay = ref(false);
8884
+ const draggableHintShown = ref(false);
8885
+ const mappedNode2 = ref(null);
8886
+ const collapsingColumnName = ref(null);
8887
+ const inputModes = [
8888
+ { value: "mapping", label: i18n2.baseText("ndv.input.mapping") },
8889
+ { value: "debugging", label: i18n2.baseText("ndv.input.fromAI") }
8890
+ ];
8891
+ const nodeTypesStore = useNodeTypesStore();
8892
+ const workflowsStore = useWorkflowsStore();
8893
+ const posthogStore = usePostHog();
8894
+ const activeNode = computed(() => workflowsStore.getNodeByName(props.activeNodeName));
8895
+ const rootNode = computed(() => {
8896
+ if (!activeNode.value) return null;
8897
+ return props.workflow.getChildNodes(activeNode.value.name, "ALL").at(0) ?? null;
8898
+ });
8899
+ const hasRootNodeRun = computed(() => {
8900
+ return !!(rootNode.value && workflowsStore.getWorkflowExecution?.data?.resultData.runData[rootNode.value]);
8901
+ });
8902
+ const inputMode = ref(
8903
+ // Show debugging mode by default only when the node has already run
8904
+ activeNode.value && workflowsStore.getWorkflowExecution?.data?.resultData.runData[activeNode.value.name] ? "debugging" : "mapping"
8905
+ );
8906
+ const isMappingMode = computed(() => isActiveNodeConfig.value && inputMode.value === "mapping");
8907
+ const showDraggableHint = computed(() => {
8908
+ const toIgnore = [START_NODE_TYPE, MANUAL_TRIGGER_NODE_TYPE, CRON_NODE_TYPE, INTERVAL_NODE_TYPE];
8909
+ if (!currentNode.value || toIgnore.includes(currentNode.value.type)) {
8910
+ return false;
8911
+ }
8912
+ return !!props.focusedMappableInput && !props.isMappingOnboarded;
8913
+ });
8914
+ const isActiveNodeConfig = computed(() => {
8915
+ let inputs2 = activeNodeType.value?.inputs ?? [];
8916
+ let outputs = activeNodeType.value?.outputs ?? [];
8917
+ if (props.workflow && activeNode.value) {
8918
+ const node2 = props.workflow.getNode(activeNode.value.name);
8919
+ if (node2 && activeNodeType.value) {
8920
+ inputs2 = getNodeInputs(props.workflow, node2, activeNodeType.value);
8921
+ outputs = getNodeOutputs(props.workflow, node2, activeNodeType.value);
8922
+ }
8923
+ }
8924
+ if (!Array.isArray(inputs2)) {
8925
+ inputs2 = [];
8926
+ }
8927
+ if (!Array.isArray(outputs)) {
8928
+ outputs = [];
8929
+ }
8930
+ return inputs2.length === 0 || inputs2.every((input) => filterOutConnectionType(input, NodeConnectionTypes.Main)) && outputs.find((output) => filterOutConnectionType(output, NodeConnectionTypes.Main));
8931
+ });
8932
+ const isMappingEnabled = computed(() => {
8933
+ if (props.readOnly) return false;
8934
+ if (isActiveNodeConfig.value) return isMappingMode.value && mappedNode2.value !== null;
8935
+ return true;
8936
+ });
8937
+ const isExecutingPrevious = computed(() => {
8938
+ if (!workflowsStore.isWorkflowRunning) {
8939
+ return false;
8940
+ }
8941
+ const triggeredNode = workflowsStore.executedNode;
8942
+ const executingNode = workflowsStore.executingNode;
8943
+ if (activeNode.value && triggeredNode === activeNode.value.name && workflowsStore.isNodeExecuting(props.currentNodeName)) {
8944
+ return true;
8945
+ }
8946
+ if (executingNode.length || triggeredNode) {
8947
+ return !!parentNodes.value.find(
8948
+ (node2) => workflowsStore.isNodeExecuting(node2.name) || node2.name === triggeredNode
8949
+ );
8950
+ }
8951
+ return false;
8952
+ });
8953
+ const rootNodesParents = computed(() => {
8954
+ if (!rootNode.value) return [];
8955
+ return props.workflow.getParentNodesByDepth(rootNode.value);
8956
+ });
8957
+ const currentNode = computed(() => {
8958
+ if (isActiveNodeConfig.value) {
8959
+ if (mappedNode2.value) {
8960
+ return workflowsStore.getNodeByName(mappedNode2.value);
8961
+ }
8962
+ return activeNode.value;
8963
+ }
8964
+ return workflowsStore.getNodeByName(props.currentNodeName ?? "");
8965
+ });
8966
+ const connectedCurrentNodeOutputs = computed(() => {
8967
+ const search = parentNodes.value.find(({ name }) => name === props.currentNodeName);
8968
+ return search?.indicies;
8969
+ });
8970
+ const parentNodes = computed(() => {
8971
+ if (!activeNode.value) {
8972
+ return [];
8973
+ }
8974
+ const parents = props.workflow.getParentNodesByDepth(activeNode.value.name).filter((parent) => parent.name !== activeNode.value?.name);
8975
+ return uniqBy(parents, (parent) => parent.name);
8976
+ });
8977
+ const currentNodeDepth = computed(() => {
8978
+ const node2 = parentNodes.value.find(
8979
+ (parent) => currentNode.value && parent.name === currentNode.value.name
8980
+ );
8981
+ return node2?.depth ?? -1;
8982
+ });
8983
+ const activeNodeType = computed(() => {
8984
+ if (!activeNode.value) return null;
8985
+ return nodeTypesStore.getNodeType(activeNode.value.type, activeNode.value.typeVersion);
8986
+ });
8987
+ const waitingMessage = computed(() => {
8988
+ const parentNode = parentNodes.value[0];
8989
+ return parentNode && waitingNodeTooltip(workflowsStore.getNodeByName(parentNode.name));
8990
+ });
8991
+ const isNDVV2 = computed(
8992
+ () => posthogStore.isVariantEnabled(
8993
+ NDV_UI_OVERHAUL_EXPERIMENT.name,
8994
+ NDV_UI_OVERHAUL_EXPERIMENT.variant
8995
+ )
8996
+ );
8997
+ watch(
8998
+ inputMode,
8999
+ (mode) => {
9000
+ onRunIndexChange(-1);
9001
+ if (mode === "mapping") {
9002
+ onUnlinkRun();
9003
+ mappedNode2.value = rootNodesParents.value[0]?.name ?? null;
9004
+ } else {
9005
+ mappedNode2.value = null;
9006
+ }
9007
+ },
9008
+ { immediate: true }
9009
+ );
9010
+ watch(showDraggableHint, (curr, prev) => {
9011
+ if (curr && !prev) {
9012
+ setTimeout(() => {
9013
+ if (draggableHintShown.value) {
9014
+ return;
9015
+ }
9016
+ showDraggableHintWithDelay.value = showDraggableHint.value;
9017
+ if (showDraggableHintWithDelay.value) {
9018
+ draggableHintShown.value = true;
9019
+ telemetry.track("User viewed data mapping tooltip", {
9020
+ type: "unexecuted input pane"
9021
+ });
9022
+ }
9023
+ }, 1e3);
9024
+ } else if (!curr) {
9025
+ showDraggableHintWithDelay.value = false;
9026
+ }
9027
+ });
9028
+ function filterOutConnectionType(item, type) {
9029
+ if (!item) return false;
9030
+ return typeof item === "string" ? item !== type : item.type !== type;
9031
+ }
9032
+ function onInputModeChange(val) {
9033
+ inputMode.value = val;
9034
+ }
9035
+ function onMappedNodeSelected(val) {
9036
+ mappedNode2.value = val;
9037
+ onRunIndexChange(0);
9038
+ onUnlinkRun();
9039
+ }
9040
+ function onNodeExecute() {
9041
+ emit("execute");
9042
+ if (activeNode.value) {
9043
+ telemetry.track("User clicked ndv button", {
9044
+ node_type: activeNode.value.type,
9045
+ workflow_id: workflowsStore.workflowId,
9046
+ push_ref: props.pushRef,
9047
+ pane: "input",
9048
+ type: "executePrevious"
9049
+ });
9050
+ }
9051
+ }
9052
+ function onRunIndexChange(run) {
9053
+ emit("runChange", run);
9054
+ }
9055
+ function onLinkRun() {
9056
+ emit("linkRun");
9057
+ }
9058
+ function onUnlinkRun() {
9059
+ emit("unlinkRun");
9060
+ }
9061
+ function onSearch(search) {
9062
+ emit("search", search);
9063
+ }
9064
+ function onItemHover(item) {
9065
+ emit("itemHover", item);
9066
+ }
9067
+ function onTableMounted(event) {
9068
+ emit("tableMounted", event);
9069
+ }
9070
+ function onInputNodeChange(value) {
9071
+ const index = parentNodes.value.findIndex((node2) => node2.name === value) + 1;
9072
+ emit("changeInputNode", value, index);
9073
+ }
9074
+ function onConnectionHelpClick() {
9075
+ if (activeNode.value) {
9076
+ telemetry.track("User clicked ndv link", {
9077
+ node_type: activeNode.value.type,
9078
+ workflow_id: workflowsStore.workflowId,
9079
+ push_ref: props.pushRef,
9080
+ pane: "input",
9081
+ type: "not-connected-help"
9082
+ });
9083
+ }
9084
+ }
9085
+ function activatePane() {
9086
+ emit("activatePane");
9087
+ }
9088
+ function handleChangeCollapsingColumn(columnName) {
9089
+ collapsingColumnName.value = columnName;
9090
+ }
9091
+ return (_ctx, _cache) => {
9092
+ const _directive_n8n_html = resolveDirective("n8n-html");
9093
+ return openBlock(), createBlock(RunData, {
9094
+ class: normalizeClass(_ctx.$style.runData),
9095
+ node: currentNode.value,
9096
+ nodes: isMappingMode.value ? rootNodesParents.value : parentNodes.value,
9097
+ workflow: _ctx.workflow,
9098
+ "run-index": isMappingMode.value ? 0 : _ctx.runIndex,
9099
+ "linked-runs": _ctx.linkedRuns,
9100
+ "can-link-runs": !mappedNode2.value && _ctx.canLinkRuns,
9101
+ "too-much-data-title": unref(i18n2).baseText("ndv.input.tooMuchData.title"),
9102
+ "no-data-in-branch-message": unref(i18n2).baseText("ndv.input.noOutputDataInBranch"),
9103
+ "is-executing": isExecutingPrevious.value,
9104
+ "executing-message": unref(i18n2).baseText("ndv.input.executingPrevious"),
9105
+ "push-ref": _ctx.pushRef,
9106
+ "override-outputs": connectedCurrentNodeOutputs.value,
9107
+ "mapping-enabled": isMappingEnabled.value,
9108
+ "distance-from-active": currentNodeDepth.value,
9109
+ "is-production-execution-preview": _ctx.isProductionExecutionPreview,
9110
+ "is-pane-active": _ctx.isPaneActive,
9111
+ "display-mode": _ctx.displayMode,
9112
+ "pane-type": "input",
9113
+ "data-test-id": "ndv-input-panel",
9114
+ "disable-ai-content": true,
9115
+ "collapsing-table-column-name": collapsingColumnName.value,
9116
+ compact: _ctx.compact,
9117
+ "disable-display-mode-selection": _ctx.disableDisplayModeSelection,
9118
+ onActivatePane: activatePane,
9119
+ onItemHover,
9120
+ onLinkRun,
9121
+ onUnlinkRun,
9122
+ onRunChange: onRunIndexChange,
9123
+ onTableMounted,
9124
+ onSearch,
9125
+ onDisplayModeChange: _cache[2] || (_cache[2] = ($event) => emit("displayModeChange", $event)),
9126
+ onCollapsingTableColumnChanged: handleChangeCollapsingColumn
9127
+ }, createSlots({
9128
+ header: withCtx(() => [
9129
+ createBaseVNode("div", {
9130
+ class: normalizeClass([_ctx.$style.titleSection, { [_ctx.$style.titleSectionV2]: isNDVV2.value }])
9131
+ }, [
9132
+ createVNode(unref(N8nText), {
9133
+ bold: true,
9134
+ color: "text-light",
9135
+ size: _ctx.compact ? "small" : "medium",
9136
+ class: normalizeClass([_ctx.$style.title, { [_ctx.$style.titleV2]: isNDVV2.value }])
9137
+ }, {
9138
+ default: withCtx(() => [
9139
+ createTextVNode(toDisplayString(unref(i18n2).baseText("ndv.input")), 1)
9140
+ ]),
9141
+ _: 1
9142
+ }, 8, ["size", "class"]),
9143
+ isActiveNodeConfig.value && !_ctx.readOnly ? (openBlock(), createBlock(unref(N8nRadioButtons), {
9144
+ key: 0,
9145
+ "data-test-id": "input-panel-mode",
9146
+ options: inputModes,
9147
+ "model-value": inputMode.value,
9148
+ "onUpdate:modelValue": onInputModeChange
9149
+ }, null, 8, ["model-value"])) : createCommentVNode("", true)
9150
+ ], 2)
9151
+ ]),
9152
+ "input-select": withCtx(() => [
9153
+ parentNodes.value.length && _ctx.currentNodeName ? (openBlock(), createBlock(InputNodeSelect, {
9154
+ key: 0,
9155
+ "model-value": _ctx.currentNodeName,
9156
+ workflow: _ctx.workflow,
9157
+ nodes: parentNodes.value,
9158
+ "onUpdate:modelValue": onInputNodeChange
9159
+ }, null, 8, ["model-value", "workflow", "nodes"])) : createCommentVNode("", true)
9160
+ ]),
9161
+ "node-not-run": withCtx(() => [
9162
+ isActiveNodeConfig.value && rootNode.value || parentNodes.value.length ? (openBlock(), createElementBlock("div", {
9163
+ key: 0,
9164
+ class: normalizeClass(_ctx.$style.noOutputData)
9165
+ }, [
9166
+ isNDVV2.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
9167
+ isMappingEnabled.value || hasRootNodeRun.value ? (openBlock(), createBlock(__unplugin_components_2, {
9168
+ key: 0,
9169
+ title: unref(i18n2).baseText("ndv.input.noOutputData.v2.title")
9170
+ }, {
9171
+ icon: withCtx(() => [
9172
+ createVNode(unref(N8nIcon), {
9173
+ icon: "arrow-right-to-line",
9174
+ size: "xlarge"
9175
+ })
9176
+ ]),
9177
+ description: withCtx(() => [
9178
+ createVNode(unref(I18nT), {
9179
+ tag: "span",
9180
+ keypath: "ndv.input.noOutputData.v2.description",
9181
+ scope: "global"
9182
+ }, {
9183
+ link: withCtx(() => [
9184
+ createVNode(_sfc_main$10, {
9185
+ "hide-icon": "",
9186
+ transparent: "",
9187
+ type: "secondary",
9188
+ "node-name": (isActiveNodeConfig.value ? rootNode.value : activeNode.value?.name) ?? "",
9189
+ label: unref(i18n2).baseText("ndv.input.noOutputData.v2.action"),
9190
+ tooltip: unref(i18n2).baseText("ndv.input.noOutputData.v2.tooltip"),
9191
+ "tooltip-placement": "bottom",
9192
+ "telemetry-source": "inputs",
9193
+ "data-test-id": "execute-previous-node",
9194
+ onExecute: onNodeExecute
9195
+ }, null, 8, ["node-name", "label", "tooltip"]),
9196
+ _cache[4] || (_cache[4] = createBaseVNode("br", null, null, -1))
9197
+ ]),
9198
+ _: 1
9199
+ })
9200
+ ]),
9201
+ _: 1
9202
+ }, 8, ["title"])) : (openBlock(), createBlock(__unplugin_components_2, {
9203
+ key: 1,
9204
+ title: unref(i18n2).baseText("ndv.input.rootNodeHasNotRun.title")
9205
+ }, {
9206
+ icon: withCtx(() => _cache[5] || (_cache[5] = [
9207
+ createBaseVNode("svg", {
9208
+ width: "16px",
9209
+ viewBox: "0 0 16 14",
9210
+ fill: "none",
9211
+ xmlns: "http://www.w3.org/2000/svg"
9212
+ }, [
9213
+ createBaseVNode("path", {
9214
+ d: "M11 2C10.4375 2 10 1.5625 10 1C10 0.46875 10.4375 0 11 0H13C14.6562 0 16 1.34375 16 3V11C16 12.6562 14.6562 14 13 14H11C10.4375 14 10 13.5625 10 13C10 12.4688 10.4375 12 11 12H13C13.5312 12 14 11.5625 14 11V3C14 2.46875 13.5312 2 13 2H11ZM10.6875 7.71875L6.6875 11.7188C6.3125 12.125 5.65625 12.125 5.28125 11.7188C4.875 11.3438 4.875 10.6875 5.28125 10.3125L7.5625 8H1C0.4375 8 0 7.5625 0 7C0 6.46875 0.4375 6 1 6H7.5625L5.28125 3.71875C4.875 3.34375 4.875 2.6875 5.28125 2.3125C5.65625 1.90625 6.3125 1.90625 6.6875 2.3125L10.6875 6.3125C11.0938 6.6875 11.0938 7.34375 10.6875 7.71875Z",
9215
+ fill: "currentColor"
9216
+ })
9217
+ ], -1)
9218
+ ])),
9219
+ description: withCtx(() => [
9220
+ createVNode(unref(I18nT), {
9221
+ tag: "span",
9222
+ keypath: "ndv.input.rootNodeHasNotRun.description",
9223
+ scope: "global"
9224
+ }, {
9225
+ link: withCtx(() => [
9226
+ createBaseVNode("a", {
9227
+ href: "#",
9228
+ "data-test-id": "switch-to-mapping-mode-link",
9229
+ onClick: _cache[0] || (_cache[0] = withModifiers(($event) => onInputModeChange("mapping"), ["prevent"]))
9230
+ }, toDisplayString(unref(i18n2).baseText("ndv.input.rootNodeHasNotRun.description.link")), 1)
9231
+ ]),
9232
+ _: 1
9233
+ })
9234
+ ]),
9235
+ _: 1
9236
+ }, 8, ["title"]))
9237
+ ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
9238
+ isMappingEnabled.value || hasRootNodeRun.value ? (openBlock(), createBlock(unref(N8nText), {
9239
+ key: 0,
9240
+ tag: "div",
9241
+ bold: true,
9242
+ color: "text-dark",
9243
+ size: "large"
9244
+ }, {
9245
+ default: withCtx(() => [
9246
+ createTextVNode(toDisplayString(unref(i18n2).baseText("ndv.input.noOutputData.title")), 1)
9247
+ ]),
9248
+ _: 1
9249
+ })) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
9250
+ createVNode(unref(N8nText), {
9251
+ tag: "div",
9252
+ bold: true,
9253
+ color: "text-dark",
9254
+ size: "large"
9255
+ }, {
9256
+ default: withCtx(() => [
9257
+ createTextVNode(toDisplayString(unref(i18n2).baseText("ndv.input.rootNodeHasNotRun.title")), 1)
9258
+ ]),
9259
+ _: 1
9260
+ }),
9261
+ createVNode(unref(N8nText), {
9262
+ tag: "div",
9263
+ color: "text-dark",
9264
+ size: "medium"
9265
+ }, {
9266
+ default: withCtx(() => [
9267
+ createVNode(unref(I18nT), {
9268
+ tag: "span",
9269
+ keypath: "ndv.input.rootNodeHasNotRun.description",
9270
+ scope: "global"
9271
+ }, {
9272
+ link: withCtx(() => [
9273
+ createBaseVNode("a", {
9274
+ href: "#",
9275
+ "data-test-id": "switch-to-mapping-mode-link",
9276
+ onClick: _cache[1] || (_cache[1] = withModifiers(($event) => onInputModeChange("mapping"), ["prevent"]))
9277
+ }, toDisplayString(unref(i18n2).baseText("ndv.input.rootNodeHasNotRun.description.link")), 1)
9278
+ ]),
9279
+ _: 1
9280
+ })
9281
+ ]),
9282
+ _: 1
9283
+ })
9284
+ ], 64)),
9285
+ !_ctx.readOnly ? (openBlock(), createBlock(unref(N8nTooltip), {
9286
+ key: 2,
9287
+ visible: showDraggableHint.value && showDraggableHintWithDelay.value
9288
+ }, {
9289
+ content: withCtx(() => [
9290
+ withDirectives(createBaseVNode("div", null, null, 512), [
9291
+ [
9292
+ _directive_n8n_html,
9293
+ unref(i18n2).baseText("dataMapping.dragFromPreviousHint", {
9294
+ interpolate: { name: _ctx.focusedMappableInput }
9295
+ })
9296
+ ]
9297
+ ])
9298
+ ]),
9299
+ default: withCtx(() => [
9300
+ createVNode(_sfc_main$10, {
9301
+ type: "secondary",
9302
+ "hide-icon": "",
9303
+ transparent: true,
9304
+ "node-name": (isActiveNodeConfig.value ? rootNode.value : activeNode.value?.name) ?? "",
9305
+ label: unref(i18n2).baseText("ndv.input.noOutputData.executePrevious"),
9306
+ class: "mt-m",
9307
+ "telemetry-source": "inputs",
9308
+ "data-test-id": "execute-previous-node",
9309
+ onExecute: onNodeExecute
9310
+ }, null, 8, ["node-name", "label"])
9311
+ ]),
9312
+ _: 1
9313
+ }, 8, ["visible"])) : createCommentVNode("", true),
9314
+ !_ctx.readOnly ? (openBlock(), createBlock(unref(N8nText), {
9315
+ key: 3,
9316
+ tag: "div",
9317
+ size: "small"
9318
+ }, {
9319
+ default: withCtx(() => [
9320
+ createVNode(unref(I18nT), {
9321
+ keypath: "ndv.input.noOutputData.hint",
9322
+ scope: "global"
9323
+ }, {
9324
+ info: withCtx(() => [
9325
+ createVNode(unref(N8nTooltip), { placement: "bottom" }, {
9326
+ content: withCtx(() => [
9327
+ createTextVNode(toDisplayString(unref(i18n2).baseText("ndv.input.noOutputData.hint.tooltip")), 1)
9328
+ ]),
9329
+ default: withCtx(() => [
9330
+ createVNode(unref(N8nIcon), { icon: "circle-help" })
9331
+ ]),
9332
+ _: 1
9333
+ })
9334
+ ]),
9335
+ _: 1
9336
+ })
9337
+ ]),
9338
+ _: 1
9339
+ })) : createCommentVNode("", true)
9340
+ ], 64))
9341
+ ], 2)) : (openBlock(), createElementBlock("div", {
9342
+ key: 1,
9343
+ class: normalizeClass(_ctx.$style.notConnected)
9344
+ }, [
9345
+ isNDVV2.value ? (openBlock(), createBlock(__unplugin_components_2, {
9346
+ key: 0,
9347
+ title: unref(i18n2).baseText("ndv.input.notConnected.v2.title")
9348
+ }, {
9349
+ icon: withCtx(() => [
9350
+ createVNode(WireMeUp)
9351
+ ]),
9352
+ description: withCtx(() => [
9353
+ createVNode(unref(I18nT), {
9354
+ tag: "span",
9355
+ keypath: "ndv.input.notConnected.v2.description",
9356
+ scope: "global"
9357
+ }, {
9358
+ link: withCtx(() => [
9359
+ createBaseVNode("a", {
9360
+ href: "https://docs.n8n.io/workflows/connections/",
9361
+ target: "_blank",
9362
+ onClick: onConnectionHelpClick
9363
+ }, toDisplayString(unref(i18n2).baseText("ndv.input.notConnected.learnMore")), 1)
9364
+ ]),
9365
+ _: 1
9366
+ })
9367
+ ]),
9368
+ _: 1
9369
+ }, 8, ["title"])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
9370
+ createBaseVNode("div", null, [
9371
+ createVNode(WireMeUp)
9372
+ ]),
9373
+ createVNode(unref(N8nText), {
9374
+ tag: "div",
9375
+ bold: true,
9376
+ color: "text-dark",
9377
+ size: "large"
9378
+ }, {
9379
+ default: withCtx(() => [
9380
+ createTextVNode(toDisplayString(unref(i18n2).baseText("ndv.input.notConnected.title")), 1)
9381
+ ]),
9382
+ _: 1
9383
+ }),
9384
+ createVNode(unref(N8nText), { tag: "div" }, {
9385
+ default: withCtx(() => [
9386
+ createTextVNode(toDisplayString(unref(i18n2).baseText("ndv.input.notConnected.message")) + " ", 1),
9387
+ createBaseVNode("a", {
9388
+ href: "https://docs.n8n.io/workflows/connections/",
9389
+ target: "_blank",
9390
+ onClick: onConnectionHelpClick
9391
+ }, toDisplayString(unref(i18n2).baseText("ndv.input.notConnected.learnMore")), 1)
9392
+ ]),
9393
+ _: 1
9394
+ })
9395
+ ], 64))
9396
+ ], 2))
9397
+ ]),
9398
+ "node-waiting": withCtx(() => [
9399
+ createVNode(unref(N8nText), {
9400
+ bold: true,
9401
+ color: "text-dark",
9402
+ size: "large"
9403
+ }, {
9404
+ default: withCtx(() => [
9405
+ createTextVNode(toDisplayString(unref(i18n2).baseText("ndv.output.waitNodeWaiting.title")), 1)
9406
+ ]),
9407
+ _: 1
9408
+ }),
9409
+ withDirectives(createVNode(unref(N8nText), null, null, 512), [
9410
+ [_directive_n8n_html, waitingMessage.value]
9411
+ ])
9412
+ ]),
9413
+ "no-output-data": withCtx(() => [
9414
+ createVNode(unref(N8nText), {
9415
+ tag: "div",
9416
+ bold: true,
9417
+ color: "text-dark",
9418
+ size: "large"
9419
+ }, {
9420
+ default: withCtx(() => [
9421
+ createTextVNode(toDisplayString(unref(i18n2).baseText("ndv.input.noOutputData")), 1)
9422
+ ]),
9423
+ _: 1
9424
+ })
9425
+ ]),
9426
+ "recovered-artificial-output-data": withCtx(() => [
9427
+ createBaseVNode("div", {
9428
+ class: normalizeClass(_ctx.$style.recoveredOutputData)
9429
+ }, [
9430
+ createVNode(unref(N8nText), {
9431
+ tag: "div",
9432
+ bold: true,
9433
+ color: "text-dark",
9434
+ size: "large"
9435
+ }, {
9436
+ default: withCtx(() => [
9437
+ createTextVNode(toDisplayString(unref(i18n2).baseText("executionDetails.executionFailed.recoveredNodeTitle")), 1)
9438
+ ]),
9439
+ _: 1
9440
+ }),
9441
+ createVNode(unref(N8nText), null, {
9442
+ default: withCtx(() => [
9443
+ createTextVNode(toDisplayString(unref(i18n2).baseText("executionDetails.executionFailed.recoveredNodeMessage")), 1)
9444
+ ]),
9445
+ _: 1
9446
+ })
9447
+ ], 2)
9448
+ ]),
9449
+ _: 2
9450
+ }, [
9451
+ isMappingMode.value ? {
9452
+ name: "before-data",
9453
+ fn: withCtx(() => [
9454
+ (openBlock(), createBlock(resolveDynamicComponent("style"), null, {
9455
+ default: withCtx(() => _cache[3] || (_cache[3] = [
9456
+ createTextVNode("button.linkRun { display: none }")
9457
+ ])),
9458
+ _: 1
9459
+ })),
9460
+ createBaseVNode("div", {
9461
+ class: normalizeClass(_ctx.$style.mappedNode)
9462
+ }, [
9463
+ createVNode(InputNodeSelect, {
9464
+ "model-value": mappedNode2.value,
9465
+ workflow: _ctx.workflow,
9466
+ nodes: rootNodesParents.value,
9467
+ "onUpdate:modelValue": onMappedNodeSelected
9468
+ }, null, 8, ["model-value", "workflow", "nodes"])
9469
+ ], 2)
9470
+ ]),
9471
+ key: "0"
9472
+ } : void 0
9473
+ ]), 1032, ["class", "node", "nodes", "workflow", "run-index", "linked-runs", "can-link-runs", "too-much-data-title", "no-data-in-branch-message", "is-executing", "executing-message", "push-ref", "override-outputs", "mapping-enabled", "distance-from-active", "is-production-execution-preview", "is-pane-active", "display-mode", "collapsing-table-column-name", "compact", "disable-display-mode-selection"]);
9474
+ };
9475
+ }
9476
+ });
9477
+ const runData = "_runData_1mq3a_123";
9478
+ const mappedNode = "_mappedNode_1mq3a_127";
9479
+ const titleSection = "_titleSection_1mq3a_131";
9480
+ const titleSectionV2 = "_titleSectionV2_1mq3a_140";
9481
+ const inputModeTab = "_inputModeTab_1mq3a_144";
9482
+ const noOutputData = "_noOutputData_1mq3a_148";
9483
+ const recoveredOutputData = "_recoveredOutputData_1mq3a_155";
9484
+ const notConnected = "_notConnected_1mq3a_164";
9485
+ const title = "_title_1mq3a_131";
9486
+ const titleV2 = "_titleV2_1mq3a_179";
9487
+ const style0$r = {
9488
+ runData,
9489
+ mappedNode,
9490
+ titleSection,
9491
+ titleSectionV2,
9492
+ inputModeTab,
9493
+ noOutputData,
9494
+ recoveredOutputData,
9495
+ notConnected,
9496
+ title,
9497
+ titleV2
9498
+ };
9499
+ const cssModules$r = {
9500
+ "$style": style0$r
9501
+ };
9502
+ const InputPanel = /* @__PURE__ */ _export_sfc$1(_sfc_main$C, [["__cssModules", cssModules$r]]);
9503
+ const _sfc_main$B = /* @__PURE__ */ defineComponent({
9504
+ __name: "NodeTitle",
9505
+ props: {
9506
+ modelValue: { default: "" },
9507
+ nodeType: { default: void 0 },
9508
+ readOnly: { type: Boolean, default: false }
9509
+ },
9510
+ emits: ["update:model-value"],
9511
+ setup(__props, { emit: __emit }) {
9512
+ const emit = __emit;
9513
+ function onRename(value) {
9514
+ if (value.trim() !== "") {
9515
+ emit("update:model-value", value.trim());
9516
+ }
9517
+ }
9518
+ const wrapperRef = useTemplateRef("wrapperRef");
9519
+ const { width } = useElementSize(wrapperRef);
9520
+ return (_ctx, _cache) => {
9521
+ return openBlock(), createElementBlock("span", {
9522
+ class: normalizeClass(_ctx.$style.container),
9523
+ "data-test-id": "node-title-container"
9524
+ }, [
9525
+ createBaseVNode("span", {
9526
+ class: normalizeClass(_ctx.$style.iconWrapper)
9527
+ }, [
9528
+ createVNode(_sfc_main$$, {
9529
+ "node-type": _ctx.nodeType,
9530
+ size: 18,
9531
+ "show-tooltip": true,
9532
+ "tooltip-position": "left"
9533
+ }, null, 8, ["node-type"])
9534
+ ], 2),
9535
+ createBaseVNode("div", {
9536
+ ref_key: "wrapperRef",
9537
+ ref: wrapperRef,
9538
+ class: normalizeClass(_ctx.$style.textWrapper)
9539
+ }, [
9540
+ createVNode(unref(InlineRename), {
9541
+ "max-width": unref(width),
9542
+ "model-value": _ctx.modelValue,
9543
+ "read-only": _ctx.readOnly,
9544
+ "onUpdate:modelValue": onRename
9545
+ }, null, 8, ["max-width", "model-value", "read-only"])
9546
+ ], 2)
9547
+ ], 2);
9548
+ };
9549
+ }
9550
+ });
9551
+ const container$5 = "_container_178ym_123";
9552
+ const textWrapper = "_textWrapper_178ym_132";
9553
+ const iconWrapper$1 = "_iconWrapper_178ym_137";
9554
+ const style0$q = {
9555
+ container: container$5,
9556
+ textWrapper,
9557
+ iconWrapper: iconWrapper$1
9558
+ };
9559
+ const cssModules$q = {
9560
+ "$style": style0$q
9561
+ };
9562
+ const NodeTitle = /* @__PURE__ */ _export_sfc$1(_sfc_main$B, [["__cssModules", cssModules$q]]);
9563
+ const _sfc_main$A = /* @__PURE__ */ defineComponent({
9564
+ __name: "CommunityNodeFooter",
9565
+ props: {
9566
+ packageName: {},
9567
+ showManage: { type: Boolean }
9568
+ },
9569
+ setup(__props) {
9570
+ const props = __props;
9571
+ const router = useRouter();
9572
+ const bugsUrl = ref(`https://registry.npmjs.org/${props.packageName}`);
9573
+ const installedPackage = ref(void 0);
9574
+ async function openSettingsPage() {
9575
+ await router.push({ name: VIEWS.COMMUNITY_NODES });
9576
+ }
9577
+ async function openIssuesPage() {
9578
+ if (bugsUrl.value) {
9579
+ window.open(bugsUrl.value, "_blank");
9580
+ }
9581
+ }
9582
+ async function getBugsUrl(packageName) {
9583
+ const url = `https://registry.npmjs.org/${packageName}`;
9584
+ try {
9585
+ const response = await fetch(url);
9586
+ if (!response.ok) {
9587
+ throw new Error("Could not get metadata for package");
9588
+ }
9589
+ const data = await response.json();
9590
+ if (data.bugs?.url) {
9591
+ bugsUrl.value = data.bugs.url;
9592
+ }
9593
+ } catch (error2) {
9594
+ captureException(error2);
9595
+ }
9596
+ }
9597
+ onMounted(async () => {
9598
+ if (props.packageName) {
9599
+ await getBugsUrl(props.packageName);
9600
+ installedPackage.value = await useCommunityNodesStore().getInstalledPackage(props.packageName);
9601
+ }
9602
+ });
9603
+ return (_ctx, _cache) => {
9604
+ return openBlock(), createElementBlock("div", null, [
9605
+ createBaseVNode("div", {
9606
+ class: normalizeClass(_ctx.$style.separator)
9607
+ }, null, 2),
9608
+ createBaseVNode("div", {
9609
+ class: normalizeClass(_ctx.$style.container)
9610
+ }, [
9611
+ installedPackage.value ? (openBlock(), createBlock(unref(N8nText), {
9612
+ key: 0,
9613
+ size: "small",
9614
+ color: "text-light",
9615
+ style: { "margin-right": "auto" }
9616
+ }, {
9617
+ default: withCtx(() => [
9618
+ createTextVNode(" Package version " + toDisplayString(installedPackage.value.installedVersion) + " (" + toDisplayString(installedPackage.value.updateAvailable ? "Legacy" : "Latest") + ") ", 1)
9619
+ ]),
9620
+ _: 1
9621
+ })) : createCommentVNode("", true),
9622
+ props.showManage ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
9623
+ createVNode(unref(N8nLink), {
9624
+ theme: "text",
9625
+ onClick: openSettingsPage
9626
+ }, {
9627
+ default: withCtx(() => [
9628
+ createVNode(unref(N8nText), {
9629
+ size: "small",
9630
+ color: "primary",
9631
+ bold: ""
9632
+ }, {
9633
+ default: withCtx(() => _cache[0] || (_cache[0] = [
9634
+ createTextVNode(" Manage ")
9635
+ ])),
9636
+ _: 1
9637
+ })
9638
+ ]),
9639
+ _: 1
9640
+ }),
9641
+ createVNode(unref(N8nText), {
9642
+ size: "small",
9643
+ style: { "color": "var(--color-foreground-base)" },
9644
+ bold: ""
9645
+ }, {
9646
+ default: withCtx(() => _cache[1] || (_cache[1] = [
9647
+ createTextVNode("|")
9648
+ ])),
9649
+ _: 1
9650
+ })
9651
+ ], 64)) : createCommentVNode("", true),
9652
+ createVNode(unref(N8nLink), {
9653
+ theme: "text",
9654
+ onClick: openIssuesPage
9655
+ }, {
9656
+ default: withCtx(() => [
9657
+ createVNode(unref(N8nText), {
9658
+ size: "small",
9659
+ color: "primary",
9660
+ bold: ""
9661
+ }, {
9662
+ default: withCtx(() => _cache[2] || (_cache[2] = [
9663
+ createTextVNode(" Report issue ")
9664
+ ])),
9665
+ _: 1
9666
+ })
9667
+ ]),
9668
+ _: 1
9669
+ })
9670
+ ], 2)
9671
+ ]);
9672
+ };
9673
+ }
9674
+ });
9675
+ const container$4 = "_container_1lo1n_123";
9676
+ const separator = "_separator_1lo1n_131";
9677
+ const style0$p = {
9678
+ container: container$4,
9679
+ separator
9680
+ };
9681
+ const cssModules$p = {
9682
+ "$style": style0$p
9683
+ };
9684
+ const CommunityNodeFooter = /* @__PURE__ */ _export_sfc$1(_sfc_main$A, [["__cssModules", cssModules$p]]);
9685
+ const _sfc_main$z = /* @__PURE__ */ defineComponent({
9686
+ __name: "CommunityNodeUpdateInfo",
9687
+ setup(__props) {
9688
+ const noticeStyles = computed(() => {
9689
+ const isDark = useUIStore().appliedTheme === "dark";
9690
+ if (isDark) {
9691
+ return {
9692
+ borderColor: "var(--color-callout-secondary-border)",
9693
+ backgroundColor: "var(--color-callout-secondary-background)",
9694
+ color: "var(--color-callout-secondary-font)"
9695
+ };
9696
+ }
9697
+ return {
9698
+ borderColor: "var(--color-secondary)",
9699
+ backgroundColor: "var(--color-secondary-tint-3)"
9700
+ };
9701
+ });
9702
+ return (_ctx, _cache) => {
9703
+ return openBlock(), createBlock(unref(N8nNotice), {
9704
+ theme: "info",
9705
+ style: normalizeStyle({
9706
+ marginTop: "0",
9707
+ ...noticeStyles.value
9708
+ })
9709
+ }, {
9710
+ default: withCtx(() => [
9711
+ createTextVNode(toDisplayString(unref(i18n).baseText("communityNodeUpdateInfo.available")), 1)
9712
+ ]),
9713
+ _: 1
9714
+ }, 8, ["style"]);
9715
+ };
9716
+ }
9717
+ });
9718
+ const useNodeDocsUrl = ({
9719
+ nodeType: nodeTypeRef
9720
+ }) => {
9721
+ const packageName = computed(() => toValue(nodeTypeRef)?.name.split(".")[0] ?? "");
9722
+ const isCommunityNode = computed(() => {
9723
+ const nodeType = toValue(nodeTypeRef);
9724
+ if (nodeType) {
9725
+ return isCommunityPackageName(nodeType.name);
9726
+ }
9727
+ return false;
9728
+ });
9729
+ const docsUrl = computed(() => {
9730
+ const nodeType = toValue(nodeTypeRef);
9731
+ if (!nodeType) {
9732
+ return "";
9733
+ }
9734
+ if (nodeType.documentationUrl?.startsWith("http")) {
9735
+ return nodeType.documentationUrl;
9736
+ }
9737
+ const utmParams = new URLSearchParams({
9738
+ utm_source: "n8n_app",
9739
+ utm_medium: "node_settings_modal-credential_link",
9740
+ utm_campaign: nodeType.name
9741
+ });
9742
+ const primaryDocUrl = nodeType.codex?.resources?.primaryDocumentation?.[0]?.url;
9743
+ if (primaryDocUrl) {
9744
+ return `${primaryDocUrl}?${utmParams.toString()}`;
9745
+ }
9746
+ if (isCommunityNode.value) {
9747
+ return `${NPM_PACKAGE_DOCS_BASE_URL}${packageName.value}`;
9748
+ }
9749
+ return `${BUILTIN_NODES_DOCS_URL}?${utmParams.toString()}`;
9750
+ });
9751
+ return { docsUrl };
9752
+ };
9753
+ const _sfc_main$y = /* @__PURE__ */ defineComponent({
9754
+ __name: "NodeSettingsTabs",
9755
+ props: {
9756
+ modelValue: { default: "params" },
9757
+ nodeType: { default: void 0 },
9758
+ pushRef: { default: "" },
9759
+ hideDocs: { type: Boolean }
9760
+ },
9761
+ emits: ["update:model-value"],
9762
+ setup(__props, { emit: __emit }) {
9763
+ const props = __props;
9764
+ const emit = __emit;
9765
+ const externalHooks = useExternalHooks();
9766
+ const ndvStore = useNDVStore();
9767
+ const workflowsStore = useWorkflowsStore();
9768
+ const i18n2 = useI18n();
9769
+ const telemetry = useTelemetry();
9770
+ const { docsUrl } = useNodeDocsUrl({ nodeType: () => props.nodeType });
9771
+ const communityNodesStore = useCommunityNodesStore();
9772
+ const activeNode = computed(() => ndvStore.activeNode);
9773
+ const installedPackage = ref(void 0);
9774
+ const isCommunityNode = computed(() => {
9775
+ const nodeType = props.nodeType;
8722
9776
  if (nodeType) {
8723
9777
  return isCommunityPackageName(nodeType.name);
8724
9778
  }
@@ -8734,12 +9788,13 @@ const _sfc_main$y = /* @__PURE__ */ defineComponent({
8734
9788
  const options = computed(() => {
8735
9789
  const options2 = [
8736
9790
  {
8737
- label: i18n.baseText("nodeSettings.parameters"),
9791
+ label: i18n2.baseText("nodeSettings.parameters"),
8738
9792
  value: "params"
8739
9793
  },
8740
9794
  {
8741
- label: i18n.baseText("nodeSettings.settings"),
8742
- value: "settings"
9795
+ label: i18n2.baseText("nodeSettings.settings"),
9796
+ value: "settings",
9797
+ notification: installedPackage.value?.updateAvailable ? true : void 0
8743
9798
  }
8744
9799
  ];
8745
9800
  if (isCommunityNode.value) {
@@ -8747,7 +9802,7 @@ const _sfc_main$y = /* @__PURE__ */ defineComponent({
8747
9802
  icon: "box",
8748
9803
  value: "communityNode",
8749
9804
  align: "right",
8750
- tooltip: i18n.baseText("generic.communityNode.tooltip", {
9805
+ tooltip: i18n2.baseText("generic.communityNode.tooltip", {
8751
9806
  interpolate: {
8752
9807
  docUrl: COMMUNITY_NODES_INSTALLATION_DOCS_URL,
8753
9808
  packageName: packageName.value
@@ -8757,7 +9812,7 @@ const _sfc_main$y = /* @__PURE__ */ defineComponent({
8757
9812
  }
8758
9813
  if (documentationUrl.value) {
8759
9814
  options2.push({
8760
- label: i18n.baseText("nodeSettings.docs"),
9815
+ label: i18n2.baseText("nodeSettings.docs"),
8761
9816
  value: "docs",
8762
9817
  href: documentationUrl.value,
8763
9818
  align: "right"
@@ -8794,6 +9849,11 @@ const _sfc_main$y = /* @__PURE__ */ defineComponent({
8794
9849
  telemetry.track("user clicked cnr docs link", { source: "node details view" });
8795
9850
  }
8796
9851
  }
9852
+ onMounted(async () => {
9853
+ if (isCommunityNode.value && useUsersStore().isInstanceOwner) {
9854
+ installedPackage.value = await communityNodesStore.getInstalledPackage(packageName.value);
9855
+ }
9856
+ });
8797
9857
  return (_ctx, _cache) => {
8798
9858
  return openBlock(), createBlock(unref(N8nTabs), {
8799
9859
  options: options.value,
@@ -8842,7 +9902,7 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
8842
9902
  const clipboard = useClipboard();
8843
9903
  const workflowHelpers = useWorkflowHelpers();
8844
9904
  const toast = useToast();
8845
- const i18n = useI18n();
9905
+ const i18n2 = useI18n();
8846
9906
  const telemetry = useTelemetry();
8847
9907
  const isMinimized = ref(
8848
9908
  props.nodeTypeDescription && !OPEN_URL_PANEL_TRIGGER_NODE_TYPES.includes(props.nodeTypeDescription.name)
@@ -8879,46 +9939,46 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
8879
9939
  switch (nodeType) {
8880
9940
  case CHAT_TRIGGER_NODE_TYPE:
8881
9941
  return {
8882
- toggleTitle: i18n.baseText("nodeWebhooks.webhookUrls.chatTrigger"),
8883
- clickToDisplay: i18n.baseText("nodeWebhooks.clickToDisplayWebhookUrls.formTrigger"),
8884
- clickToHide: i18n.baseText("nodeWebhooks.clickToHideWebhookUrls.chatTrigger"),
8885
- clickToCopy: i18n.baseText("nodeWebhooks.clickToCopyWebhookUrls.chatTrigger"),
8886
- testUrl: i18n.baseText("nodeWebhooks.testUrl"),
8887
- productionUrl: i18n.baseText("nodeWebhooks.productionUrl"),
8888
- copyTitle: i18n.baseText("nodeWebhooks.showMessage.title.chatTrigger"),
8889
- copyMessage: i18n.baseText("nodeWebhooks.showMessage.message.chatTrigger")
9942
+ toggleTitle: i18n2.baseText("nodeWebhooks.webhookUrls.chatTrigger"),
9943
+ clickToDisplay: i18n2.baseText("nodeWebhooks.clickToDisplayWebhookUrls.formTrigger"),
9944
+ clickToHide: i18n2.baseText("nodeWebhooks.clickToHideWebhookUrls.chatTrigger"),
9945
+ clickToCopy: i18n2.baseText("nodeWebhooks.clickToCopyWebhookUrls.chatTrigger"),
9946
+ testUrl: i18n2.baseText("nodeWebhooks.testUrl"),
9947
+ productionUrl: i18n2.baseText("nodeWebhooks.productionUrl"),
9948
+ copyTitle: i18n2.baseText("nodeWebhooks.showMessage.title.chatTrigger"),
9949
+ copyMessage: i18n2.baseText("nodeWebhooks.showMessage.message.chatTrigger")
8890
9950
  };
8891
9951
  case FORM_TRIGGER_NODE_TYPE:
8892
9952
  return {
8893
- toggleTitle: i18n.baseText("nodeWebhooks.webhookUrls.formTrigger"),
8894
- clickToDisplay: i18n.baseText("nodeWebhooks.clickToDisplayWebhookUrls.formTrigger"),
8895
- clickToHide: i18n.baseText("nodeWebhooks.clickToHideWebhookUrls.formTrigger"),
8896
- clickToCopy: i18n.baseText("nodeWebhooks.clickToCopyWebhookUrls.formTrigger"),
8897
- testUrl: i18n.baseText("nodeWebhooks.testUrl"),
8898
- productionUrl: i18n.baseText("nodeWebhooks.productionUrl"),
8899
- copyTitle: i18n.baseText("nodeWebhooks.showMessage.title.formTrigger"),
8900
- copyMessage: i18n.baseText("nodeWebhooks.showMessage.message.formTrigger")
9953
+ toggleTitle: i18n2.baseText("nodeWebhooks.webhookUrls.formTrigger"),
9954
+ clickToDisplay: i18n2.baseText("nodeWebhooks.clickToDisplayWebhookUrls.formTrigger"),
9955
+ clickToHide: i18n2.baseText("nodeWebhooks.clickToHideWebhookUrls.formTrigger"),
9956
+ clickToCopy: i18n2.baseText("nodeWebhooks.clickToCopyWebhookUrls.formTrigger"),
9957
+ testUrl: i18n2.baseText("nodeWebhooks.testUrl"),
9958
+ productionUrl: i18n2.baseText("nodeWebhooks.productionUrl"),
9959
+ copyTitle: i18n2.baseText("nodeWebhooks.showMessage.title.formTrigger"),
9960
+ copyMessage: i18n2.baseText("nodeWebhooks.showMessage.message.formTrigger")
8901
9961
  };
8902
9962
  case MCP_TRIGGER_NODE_TYPE:
8903
9963
  return {
8904
- toggleTitle: i18n.baseText("nodeWebhooks.webhookUrls.mcpTrigger"),
8905
- clickToDisplay: i18n.baseText("nodeWebhooks.clickToDisplayWebhookUrls.mcpTrigger"),
8906
- clickToHide: i18n.baseText("nodeWebhooks.clickToHideWebhookUrls.mcpTrigger"),
8907
- clickToCopy: i18n.baseText("nodeWebhooks.clickToCopyWebhookUrls.mcpTrigger"),
8908
- testUrl: i18n.baseText("nodeWebhooks.testUrl"),
8909
- productionUrl: i18n.baseText("nodeWebhooks.productionUrl"),
8910
- copyTitle: i18n.baseText("nodeWebhooks.showMessage.title.mcpTrigger"),
9964
+ toggleTitle: i18n2.baseText("nodeWebhooks.webhookUrls.mcpTrigger"),
9965
+ clickToDisplay: i18n2.baseText("nodeWebhooks.clickToDisplayWebhookUrls.mcpTrigger"),
9966
+ clickToHide: i18n2.baseText("nodeWebhooks.clickToHideWebhookUrls.mcpTrigger"),
9967
+ clickToCopy: i18n2.baseText("nodeWebhooks.clickToCopyWebhookUrls.mcpTrigger"),
9968
+ testUrl: i18n2.baseText("nodeWebhooks.testUrl"),
9969
+ productionUrl: i18n2.baseText("nodeWebhooks.productionUrl"),
9970
+ copyTitle: i18n2.baseText("nodeWebhooks.showMessage.title.mcpTrigger"),
8911
9971
  copyMessage: void 0
8912
9972
  };
8913
9973
  default:
8914
9974
  return {
8915
- toggleTitle: i18n.baseText("nodeWebhooks.webhookUrls"),
8916
- clickToDisplay: i18n.baseText("nodeWebhooks.clickToDisplayWebhookUrls"),
8917
- clickToHide: i18n.baseText("nodeWebhooks.clickToHideWebhookUrls"),
8918
- clickToCopy: i18n.baseText("nodeWebhooks.clickToCopyWebhookUrls"),
8919
- testUrl: i18n.baseText("nodeWebhooks.testUrl"),
8920
- productionUrl: i18n.baseText("nodeWebhooks.productionUrl"),
8921
- copyTitle: i18n.baseText("nodeWebhooks.showMessage.title"),
9975
+ toggleTitle: i18n2.baseText("nodeWebhooks.webhookUrls"),
9976
+ clickToDisplay: i18n2.baseText("nodeWebhooks.clickToDisplayWebhookUrls"),
9977
+ clickToHide: i18n2.baseText("nodeWebhooks.clickToHideWebhookUrls"),
9978
+ clickToCopy: i18n2.baseText("nodeWebhooks.clickToCopyWebhookUrls"),
9979
+ testUrl: i18n2.baseText("nodeWebhooks.testUrl"),
9980
+ productionUrl: i18n2.baseText("nodeWebhooks.productionUrl"),
9981
+ copyTitle: i18n2.baseText("nodeWebhooks.showMessage.title"),
8922
9982
  copyMessage: void 0
8923
9983
  };
8924
9984
  }
@@ -9246,7 +10306,7 @@ const _sfc_main$w = /* @__PURE__ */ defineComponent({
9246
10306
  const workflowsStore = useWorkflowsStore();
9247
10307
  const nodeTypesStore = useNodeTypesStore();
9248
10308
  const nodeHelpers = useNodeHelpers();
9249
- const i18n = useI18n();
10309
+ const i18n2 = useI18n();
9250
10310
  const { debounce } = useDebounce();
9251
10311
  const emit = __emit;
9252
10312
  const possibleConnections = ref([]);
@@ -9395,7 +10455,7 @@ const _sfc_main$w = /* @__PURE__ */ defineComponent({
9395
10455
  showNodeInputsIssues
9396
10456
  });
9397
10457
  return (_ctx, _cache) => {
9398
- const _component_n8n_icon_button = _sfc_main$S;
10458
+ const _component_n8n_icon_button = _sfc_main$Y;
9399
10459
  const _component_n8n_tooltip = N8nTooltip;
9400
10460
  return possibleConnections.value.length ? (openBlock(), createElementBlock("div", {
9401
10461
  key: 0,
@@ -9453,7 +10513,7 @@ const _sfc_main$w = /* @__PURE__ */ defineComponent({
9453
10513
  createTextVNode(" Add " + toDisplayString(connection.displayName) + " ", 1),
9454
10514
  hasInputIssues(getConnectionContext(connection, index)) ? (openBlock(), createBlock(TitledList, {
9455
10515
  key: 0,
9456
- title: `${unref(i18n).baseText("node.issues")}:`,
10516
+ title: `${unref(i18n2).baseText("node.issues")}:`,
9457
10517
  items: nodeInputIssues.value[connection.type]
9458
10518
  }, null, 8, ["title", "items"])) : createCommentVNode("", true)
9459
10519
  ]),
@@ -9495,7 +10555,7 @@ const _sfc_main$w = /* @__PURE__ */ defineComponent({
9495
10555
  createTextVNode(toDisplayString(node2.node.name) + " ", 1),
9496
10556
  node2.issues ? (openBlock(), createBlock(TitledList, {
9497
10557
  key: 0,
9498
- title: `${unref(i18n).baseText("node.issues")}:`,
10558
+ title: `${unref(i18n2).baseText("node.issues")}:`,
9499
10559
  items: node2.issues
9500
10560
  }, null, 8, ["title", "items"])) : createCommentVNode("", true)
9501
10561
  ]),
@@ -9504,7 +10564,7 @@ const _sfc_main$w = /* @__PURE__ */ defineComponent({
9504
10564
  class: normalizeClass(_ctx.$style.connectedNode),
9505
10565
  onClick: ($event) => onNodeClick(node2.node.name, getConnectionContext(connection, index))
9506
10566
  }, [
9507
- createVNode(_sfc_main$U, {
10567
+ createVNode(_sfc_main$$, {
9508
10568
  "node-type": node2.nodeType,
9509
10569
  "node-name": node2.node.name,
9510
10570
  "tooltip-position": "top",
@@ -9589,7 +10649,7 @@ const _sfc_main$v = /* @__PURE__ */ defineComponent({
9589
10649
  class: normalizeClass(_ctx.$style.tabs),
9590
10650
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("tab-changed", $event))
9591
10651
  }, null, 8, ["model-value", "node-type", "push-ref", "class"])) : createCommentVNode("", true),
9592
- !_ctx.hideExecute ? (openBlock(), createBlock(_sfc_main$V, {
10652
+ !_ctx.hideExecute ? (openBlock(), createBlock(_sfc_main$10, {
9593
10653
  key: 1,
9594
10654
  "data-test-id": "node-execute-button",
9595
10655
  "node-name": _ctx.nodeName,
@@ -9606,10 +10666,10 @@ const _sfc_main$v = /* @__PURE__ */ defineComponent({
9606
10666
  };
9607
10667
  }
9608
10668
  });
9609
- const header$2 = "_header_1mro3_123";
10669
+ const header$1 = "_header_1mro3_123";
9610
10670
  const tabs = "_tabs_1mro3_135";
9611
10671
  const style0$n = {
9612
- header: header$2,
10672
+ header: header$1,
9613
10673
  tabs
9614
10674
  };
9615
10675
  const cssModules$n = {
@@ -9636,7 +10696,7 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
9636
10696
  const ndvStore = useNDVStore();
9637
10697
  const projectsStore = useProjectsStore();
9638
10698
  const telemetry = useTelemetry();
9639
- const i18n = useI18n();
10699
+ const i18n2 = useI18n();
9640
10700
  const toast = useToast();
9641
10701
  const userHasOpenAiCredentialAlready = computed(
9642
10702
  () => !!credentialsStore.allCredentials.filter(
@@ -9664,8 +10724,8 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
9664
10724
  } catch (e) {
9665
10725
  toast.showError(
9666
10726
  e,
9667
- i18n.baseText("freeAi.credits.showError.claim.title"),
9668
- i18n.baseText("freeAi.credits.showError.claim.message")
10727
+ i18n2.baseText("freeAi.credits.showError.claim.title"),
10728
+ i18n2.baseText("freeAi.credits.showError.claim.message")
9669
10729
  );
9670
10730
  } finally {
9671
10731
  claimingCredits.value = false;
@@ -9685,13 +10745,13 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
9685
10745
  createVNode(_component_n8n_button, {
9686
10746
  type: "tertiary",
9687
10747
  size: "small",
9688
- label: unref(i18n).baseText("freeAi.credits.callout.claim.button.label"),
10748
+ label: unref(i18n2).baseText("freeAi.credits.callout.claim.button.label"),
9689
10749
  loading: claimingCredits.value,
9690
10750
  onClick: onClaimCreditsClicked
9691
10751
  }, null, 8, ["label", "loading"])
9692
10752
  ]),
9693
10753
  default: withCtx(() => [
9694
- createTextVNode(toDisplayString(unref(i18n).baseText("freeAi.credits.callout.claim.title", {
10754
+ createTextVNode(toDisplayString(unref(i18n2).baseText("freeAi.credits.callout.claim.title", {
9695
10755
  interpolate: { credits: unref(settingsStore).aiCreditsQuota }
9696
10756
  })) + " ", 1)
9697
10757
  ]),
@@ -9704,7 +10764,7 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
9704
10764
  default: withCtx(() => [
9705
10765
  createVNode(_component_n8n_text, { size: "small" }, {
9706
10766
  default: withCtx(() => [
9707
- createTextVNode(toDisplayString(unref(i18n).baseText("freeAi.credits.callout.success.title.part1", {
10767
+ createTextVNode(toDisplayString(unref(i18n2).baseText("freeAi.credits.callout.success.title.part1", {
9708
10768
  interpolate: { credits: unref(settingsStore).aiCreditsQuota }
9709
10769
  })), 1)
9710
10770
  ]),
@@ -9716,7 +10776,7 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
9716
10776
  bold: true
9717
10777
  }, {
9718
10778
  default: withCtx(() => [
9719
- createTextVNode(toDisplayString(unref(i18n).baseText("freeAi.credits.callout.success.title.part2")), 1)
10779
+ createTextVNode(toDisplayString(unref(i18n2).baseText("freeAi.credits.callout.success.title.part2")), 1)
9720
10780
  ]),
9721
10781
  _: 1
9722
10782
  })
@@ -9772,6 +10832,18 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
9772
10832
  const props = __props;
9773
10833
  const emit = __emit;
9774
10834
  const slots = useSlots();
10835
+ const nodeValues = ref({
10836
+ color: "#ff0000",
10837
+ alwaysOutputData: false,
10838
+ executeOnce: false,
10839
+ notesInFlow: false,
10840
+ onError: "stopWorkflow",
10841
+ retryOnFail: false,
10842
+ maxTries: 3,
10843
+ waitBetweenTries: 1e3,
10844
+ notes: "",
10845
+ parameters: {}
10846
+ });
9775
10847
  const nodeTypesStore = useNodeTypesStore();
9776
10848
  const ndvStore = useNDVStore();
9777
10849
  const workflowsStore = useWorkflowsStore();
@@ -9781,9 +10853,8 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
9781
10853
  const telemetry = useTelemetry();
9782
10854
  const nodeHelpers = useNodeHelpers();
9783
10855
  const externalHooks = useExternalHooks();
9784
- const i18n = useI18n();
10856
+ const i18n2 = useI18n();
9785
10857
  const nodeSettingsParameters = useNodeSettingsParameters();
9786
- const nodeValues = nodeSettingsParameters.nodeValues;
9787
10858
  const nodeParameterWrapper = useTemplateRef("nodeParameterWrapper");
9788
10859
  const shouldShowStaticScrollbar = ref(false);
9789
10860
  if (props.isEmbeddedInCanvas) {
@@ -9797,6 +10868,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
9797
10868
  const hiddenIssuesInputs = ref([]);
9798
10869
  const nodeSettings = ref([]);
9799
10870
  const subConnections = ref(null);
10871
+ const installedPackage = ref(void 0);
9800
10872
  const currentWorkflowInstance = computed(() => workflowsStore.getCurrentWorkflow());
9801
10873
  const currentWorkflow = computed(
9802
10874
  () => workflowsStore.getWorkflowById(currentWorkflowInstance.value.id)
@@ -9827,7 +10899,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
9827
10899
  );
9828
10900
  const executeButtonTooltip = computed(() => {
9829
10901
  if (node2.value && isLatestNodeVersion.value && props.inputSize > 1 && !nodeHelpers.isSingleExecution(node2.value.type, node2.value.parameters)) {
9830
- return i18n.baseText("nodeSettings.executeButtonTooltip.times", {
10902
+ return i18n2.baseText("nodeSettings.executeButtonTooltip.times", {
9831
10903
  interpolate: { inputSize: props.inputSize }
9832
10904
  });
9833
10905
  }
@@ -9835,12 +10907,12 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
9835
10907
  });
9836
10908
  const nodeVersionTag = computed(() => {
9837
10909
  if (!nodeType.value || nodeType.value.hidden) {
9838
- return i18n.baseText("nodeSettings.deprecated");
10910
+ return i18n2.baseText("nodeSettings.deprecated");
9839
10911
  }
9840
10912
  if (isLatestNodeVersion.value) {
9841
- return i18n.baseText("nodeSettings.latest");
10913
+ return i18n2.baseText("nodeSettings.latest");
9842
10914
  }
9843
- return i18n.baseText("nodeSettings.latestVersion", {
10915
+ return i18n2.baseText("nodeSettings.latestVersion", {
9844
10916
  interpolate: { version: latestVersion.value.toString() }
9845
10917
  });
9846
10918
  });
@@ -9863,6 +10935,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
9863
10935
  );
9864
10936
  const outputPanelEditMode = computed(() => ndvStore.outputPanelEditMode);
9865
10937
  const isCommunityNode = computed(() => !!node2.value && isCommunityPackageName(node2.value.type));
10938
+ const packageName = computed(() => node2.value?.type.split(".")[0] ?? "");
9866
10939
  const usedCredentials = computed(
9867
10940
  () => Object.values(workflowsStore.usedCredentials).filter(
9868
10941
  (credential) => Object.values(node2.value?.credentials || []).find(
@@ -9956,7 +11029,11 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
9956
11029
  );
9957
11030
  for (const key of Object.keys(nodeParameters)) {
9958
11031
  if (nodeParameters?.[key] !== null && nodeParameters?.[key] !== void 0) {
9959
- nodeSettingsParameters.setValue(`parameters.${key}`, nodeParameters[key]);
11032
+ nodeSettingsParameters.setValue(
11033
+ nodeValues,
11034
+ `parameters.${key}`,
11035
+ nodeParameters[key]
11036
+ );
9960
11037
  }
9961
11038
  }
9962
11039
  if (nodeParameters) {
@@ -9969,7 +11046,13 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
9969
11046
  nodeHelpers.updateNodeCredentialIssuesByName(_node.name);
9970
11047
  }
9971
11048
  } else if (nameIsParameter(parameterData)) {
9972
- nodeSettingsParameters.updateNodeParameter(parameterData, newValue, _node, isToolNode.value);
11049
+ nodeSettingsParameters.updateNodeParameter(
11050
+ nodeValues,
11051
+ parameterData,
11052
+ newValue,
11053
+ _node,
11054
+ isToolNode.value
11055
+ );
9973
11056
  } else {
9974
11057
  nodeValues.value = {
9975
11058
  ...nodeValues.value,
@@ -10012,31 +11095,34 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10012
11095
  nodeSettings.value.push(
10013
11096
  ...[
10014
11097
  {
10015
- displayName: i18n.baseText("nodeSettings.alwaysOutputData.displayName"),
11098
+ displayName: i18n2.baseText("nodeSettings.alwaysOutputData.displayName"),
10016
11099
  name: "alwaysOutputData",
10017
11100
  type: "boolean",
10018
11101
  default: false,
10019
11102
  noDataExpression: true,
10020
- description: i18n.baseText("nodeSettings.alwaysOutputData.description")
11103
+ description: i18n2.baseText("nodeSettings.alwaysOutputData.description"),
11104
+ isNodeSetting: true
10021
11105
  },
10022
11106
  {
10023
- displayName: i18n.baseText("nodeSettings.executeOnce.displayName"),
11107
+ displayName: i18n2.baseText("nodeSettings.executeOnce.displayName"),
10024
11108
  name: "executeOnce",
10025
11109
  type: "boolean",
10026
11110
  default: false,
10027
11111
  noDataExpression: true,
10028
- description: i18n.baseText("nodeSettings.executeOnce.description")
11112
+ description: i18n2.baseText("nodeSettings.executeOnce.description"),
11113
+ isNodeSetting: true
10029
11114
  },
10030
11115
  {
10031
- displayName: i18n.baseText("nodeSettings.retryOnFail.displayName"),
11116
+ displayName: i18n2.baseText("nodeSettings.retryOnFail.displayName"),
10032
11117
  name: "retryOnFail",
10033
11118
  type: "boolean",
10034
11119
  default: false,
10035
11120
  noDataExpression: true,
10036
- description: i18n.baseText("nodeSettings.retryOnFail.description")
11121
+ description: i18n2.baseText("nodeSettings.retryOnFail.description"),
11122
+ isNodeSetting: true
10037
11123
  },
10038
11124
  {
10039
- displayName: i18n.baseText("nodeSettings.maxTries.displayName"),
11125
+ displayName: i18n2.baseText("nodeSettings.maxTries.displayName"),
10040
11126
  name: "maxTries",
10041
11127
  type: "number",
10042
11128
  typeOptions: {
@@ -10050,10 +11136,11 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10050
11136
  }
10051
11137
  },
10052
11138
  noDataExpression: true,
10053
- description: i18n.baseText("nodeSettings.maxTries.description")
11139
+ description: i18n2.baseText("nodeSettings.maxTries.description"),
11140
+ isNodeSetting: true
10054
11141
  },
10055
11142
  {
10056
- displayName: i18n.baseText("nodeSettings.waitBetweenTries.displayName"),
11143
+ displayName: i18n2.baseText("nodeSettings.waitBetweenTries.displayName"),
10057
11144
  name: "waitBetweenTries",
10058
11145
  type: "number",
10059
11146
  typeOptions: {
@@ -10067,36 +11154,38 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10067
11154
  }
10068
11155
  },
10069
11156
  noDataExpression: true,
10070
- description: i18n.baseText("nodeSettings.waitBetweenTries.description")
11157
+ description: i18n2.baseText("nodeSettings.waitBetweenTries.description"),
11158
+ isNodeSetting: true
10071
11159
  },
10072
11160
  {
10073
- displayName: i18n.baseText("nodeSettings.onError.displayName"),
11161
+ displayName: i18n2.baseText("nodeSettings.onError.displayName"),
10074
11162
  name: "onError",
10075
11163
  type: "options",
10076
11164
  options: [
10077
11165
  {
10078
- name: i18n.baseText("nodeSettings.onError.options.stopWorkflow.displayName"),
11166
+ name: i18n2.baseText("nodeSettings.onError.options.stopWorkflow.displayName"),
10079
11167
  value: "stopWorkflow",
10080
- description: i18n.baseText("nodeSettings.onError.options.stopWorkflow.description")
11168
+ description: i18n2.baseText("nodeSettings.onError.options.stopWorkflow.description")
10081
11169
  },
10082
11170
  {
10083
- name: i18n.baseText("nodeSettings.onError.options.continueRegularOutput.displayName"),
11171
+ name: i18n2.baseText("nodeSettings.onError.options.continueRegularOutput.displayName"),
10084
11172
  value: "continueRegularOutput",
10085
- description: i18n.baseText(
11173
+ description: i18n2.baseText(
10086
11174
  "nodeSettings.onError.options.continueRegularOutput.description"
10087
11175
  )
10088
11176
  },
10089
11177
  {
10090
- name: i18n.baseText("nodeSettings.onError.options.continueErrorOutput.displayName"),
11178
+ name: i18n2.baseText("nodeSettings.onError.options.continueErrorOutput.displayName"),
10091
11179
  value: "continueErrorOutput",
10092
- description: i18n.baseText(
11180
+ description: i18n2.baseText(
10093
11181
  "nodeSettings.onError.options.continueErrorOutput.description"
10094
11182
  )
10095
11183
  }
10096
11184
  ],
10097
11185
  default: "stopWorkflow",
10098
- description: i18n.baseText("nodeSettings.onError.description"),
10099
- noDataExpression: true
11186
+ description: i18n2.baseText("nodeSettings.onError.description"),
11187
+ noDataExpression: true,
11188
+ isNodeSetting: true
10100
11189
  }
10101
11190
  ]
10102
11191
  );
@@ -10104,7 +11193,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10104
11193
  nodeSettings.value.push(
10105
11194
  ...[
10106
11195
  {
10107
- displayName: i18n.baseText("nodeSettings.notes.displayName"),
11196
+ displayName: i18n2.baseText("nodeSettings.notes.displayName"),
10108
11197
  name: "notes",
10109
11198
  type: "string",
10110
11199
  typeOptions: {
@@ -10112,15 +11201,17 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10112
11201
  },
10113
11202
  default: "",
10114
11203
  noDataExpression: true,
10115
- description: i18n.baseText("nodeSettings.notes.description")
11204
+ description: i18n2.baseText("nodeSettings.notes.description"),
11205
+ isNodeSetting: true
10116
11206
  },
10117
11207
  {
10118
- displayName: i18n.baseText("nodeSettings.notesInFlow.displayName"),
11208
+ displayName: i18n2.baseText("nodeSettings.notesInFlow.displayName"),
10119
11209
  name: "notesInFlow",
10120
11210
  type: "boolean",
10121
11211
  default: false,
10122
11212
  noDataExpression: true,
10123
- description: i18n.baseText("nodeSettings.notesInFlow.description")
11213
+ description: i18n2.baseText("nodeSettings.notesInFlow.description"),
11214
+ isNodeSetting: true
10124
11215
  }
10125
11216
  ]
10126
11217
  );
@@ -10287,7 +11378,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10287
11378
  watch(node2, () => {
10288
11379
  setNodeValues();
10289
11380
  });
10290
- onMounted(() => {
11381
+ onMounted(async () => {
10291
11382
  populateHiddenIssuesSet();
10292
11383
  populateSettings();
10293
11384
  setNodeValues();
@@ -10297,6 +11388,9 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10297
11388
  }
10298
11389
  importCurlEventBus.on("setHttpNodeParameters", setHttpNodeParameters);
10299
11390
  ndvEventBus.on("updateParameterValue", valueChanged);
11391
+ if (isCommunityNode.value && useUsersStore().isInstanceOwner) {
11392
+ installedPackage.value = await useCommunityNodesStore().getInstalledPackage(packageName.value);
11393
+ }
10300
11394
  });
10301
11395
  onBeforeUnmount(() => {
10302
11396
  props.eventBus?.off("openSettings", openSettings);
@@ -10318,11 +11412,12 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10318
11412
  const _component_NodeTitle = NodeTitle;
10319
11413
  const _component_n8n_icon = N8nIcon;
10320
11414
  const _component_n8n_text = N8nText;
10321
- const _component_i18n_t = resolveComponent("i18n-t");
10322
11415
  const _component_n8n_link = N8nLink;
10323
11416
  const _component_n8n_notice = N8nNotice;
11417
+ const _component_CommunityNodeUpdateInfo = _sfc_main$z;
10324
11418
  const _component_N8nIcon = N8nIcon;
10325
11419
  const _component_n8n_block_ui = N8nBlockUi;
11420
+ const _component_CommunityNodeFooter = CommunityNodeFooter;
10326
11421
  return openBlock(), createElementBlock("div", {
10327
11422
  class: normalizeClass({
10328
11423
  "node-settings": true,
@@ -10346,7 +11441,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10346
11441
  "onUpdate:modelValue": nameChanged
10347
11442
  }, null, 8, ["model-value", "node-type", "read-only"])) : createCommentVNode("", true),
10348
11443
  isExecutable2.value || slots.actions ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
10349
- isExecutable2.value && !_ctx.blockUI && node2.value && nodeValid.value ? (openBlock(), createBlock(_sfc_main$V, {
11444
+ isExecutable2.value && !_ctx.blockUI && node2.value && nodeValid.value ? (openBlock(), createBlock(_sfc_main$10, {
10350
11445
  key: 0,
10351
11446
  "data-test-id": "node-execute-button",
10352
11447
  "node-name": node2.value.name,
@@ -10396,7 +11491,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10396
11491
  bold: ""
10397
11492
  }, {
10398
11493
  default: withCtx(() => [
10399
- createTextVNode(toDisplayString(unref(i18n).baseText("nodeSettings.communityNodeUnknown.title")), 1)
11494
+ createTextVNode(toDisplayString(unref(i18n2).baseText("nodeSettings.communityNodeUnknown.title")), 1)
10400
11495
  ]),
10401
11496
  _: 1
10402
11497
  })
@@ -10406,9 +11501,10 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10406
11501
  class: normalizeClass(_ctx.$style.descriptionContainer)
10407
11502
  }, [
10408
11503
  createBaseVNode("div", _hoisted_4, [
10409
- createVNode(_component_i18n_t, {
11504
+ createVNode(unref(I18nT), {
10410
11505
  keypath: "nodeSettings.communityNodeUnknown.description",
10411
11506
  tag: "span",
11507
+ scope: "global",
10412
11508
  onClick: onMissingNodeTextClick
10413
11509
  }, {
10414
11510
  action: withCtx(() => [
@@ -10425,20 +11521,21 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10425
11521
  onClick: onMissingNodeLearnMoreLinkClick
10426
11522
  }, {
10427
11523
  default: withCtx(() => [
10428
- createTextVNode(toDisplayString(unref(i18n).baseText("nodeSettings.communityNodeUnknown.installLink.text")), 1)
11524
+ createTextVNode(toDisplayString(unref(i18n2).baseText("nodeSettings.communityNodeUnknown.installLink.text")), 1)
10429
11525
  ]),
10430
11526
  _: 1
10431
11527
  }, 8, ["to"])
10432
- ], 2)) : (openBlock(), createBlock(_component_i18n_t, {
11528
+ ], 2)) : (openBlock(), createBlock(unref(I18nT), {
10433
11529
  key: 1,
10434
11530
  keypath: "nodeSettings.nodeTypeUnknown.description",
10435
- tag: "span"
11531
+ tag: "span",
11532
+ scope: "global"
10436
11533
  }, {
10437
11534
  action: withCtx(() => [
10438
11535
  createBaseVNode("a", {
10439
11536
  href: unref(CUSTOM_NODES_DOCS_URL),
10440
11537
  target: "_blank",
10441
- textContent: toDisplayString(unref(i18n).baseText("nodeSettings.nodeTypeUnknown.description.customNode"))
11538
+ textContent: toDisplayString(unref(i18n2).baseText("nodeSettings.nodeTypeUnknown.description.customNode"))
10442
11539
  }, null, 8, _hoisted_6)
10443
11540
  ]),
10444
11541
  _: 1
@@ -10459,7 +11556,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10459
11556
  }, [
10460
11557
  hasForeignCredential.value && !isHomeProjectTeam.value ? (openBlock(), createBlock(_component_n8n_notice, {
10461
11558
  key: 0,
10462
- content: unref(i18n).baseText("nodeSettings.hasForeignCredential", {
11559
+ content: unref(i18n2).baseText("nodeSettings.hasForeignCredential", {
10463
11560
  interpolate: { owner: credentialOwnerName.value }
10464
11561
  })
10465
11562
  }, null, 8, ["content"])) : createCommentVNode("", true),
@@ -10469,11 +11566,11 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10469
11566
  node: node2.value,
10470
11567
  "node-type-description": nodeType.value
10471
11568
  }, null, 8, ["node", "node-type-description"]),
10472
- nodeValuesInitialized.value ? (openBlock(), createBlock(_sfc_main$W, {
11569
+ nodeValuesInitialized.value ? (openBlock(), createBlock(_sfc_main$11, {
10473
11570
  key: 0,
10474
11571
  parameters: parametersNoneSetting.value,
10475
11572
  "hide-delete": true,
10476
- "node-values": unref(nodeValues),
11573
+ "node-values": nodeValues.value,
10477
11574
  "is-read-only": isReadOnly.value,
10478
11575
  "hidden-issues-inputs": hiddenIssuesInputs.value,
10479
11576
  path: "parameters",
@@ -10499,14 +11596,14 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10499
11596
  showNoParametersNotice.value ? (openBlock(), createElementBlock("div", _hoisted_7, [
10500
11597
  createVNode(_component_n8n_text, null, {
10501
11598
  default: withCtx(() => [
10502
- createTextVNode(toDisplayString(unref(i18n).baseText("nodeSettings.thisNodeDoesNotHaveAnyParameters")), 1)
11599
+ createTextVNode(toDisplayString(unref(i18n2).baseText("nodeSettings.thisNodeDoesNotHaveAnyParameters")), 1)
10503
11600
  ]),
10504
11601
  _: 1
10505
11602
  })
10506
11603
  ])) : createCommentVNode("", true),
10507
- unref(nodeHelpers).isCustomApiCallSelected(unref(nodeValues)) ? (openBlock(), createElementBlock("div", _hoisted_8, [
11604
+ unref(nodeHelpers).isCustomApiCallSelected(nodeValues.value) ? (openBlock(), createElementBlock("div", _hoisted_8, [
10508
11605
  createVNode(_component_n8n_notice, {
10509
- content: unref(i18n).baseText("nodeSettings.useTheHttpRequestNode", {
11606
+ content: unref(i18n2).baseText("nodeSettings.useTheHttpRequestNode", {
10510
11607
  interpolate: { nodeTypeDisplayName: nodeType.value?.displayName ?? "" }
10511
11608
  })
10512
11609
  }, null, 8, ["content"])
@@ -10515,9 +11612,13 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10515
11612
  [vShow, openPanel.value === "params"]
10516
11613
  ]),
10517
11614
  withDirectives(createBaseVNode("div", null, [
10518
- createVNode(_sfc_main$W, {
11615
+ isCommunityNode.value && installedPackage.value?.updateAvailable ? (openBlock(), createBlock(_component_CommunityNodeUpdateInfo, {
11616
+ key: 0,
11617
+ "data-test-id": "update-available"
11618
+ })) : createCommentVNode("", true),
11619
+ createVNode(_sfc_main$11, {
10519
11620
  parameters: parametersSetting.value,
10520
- "node-values": unref(nodeValues),
11621
+ "node-values": nodeValues.value,
10521
11622
  "is-read-only": isReadOnly.value,
10522
11623
  "hide-delete": true,
10523
11624
  "hidden-issues-inputs": hiddenIssuesInputs.value,
@@ -10525,10 +11626,10 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10525
11626
  onValueChanged: valueChanged,
10526
11627
  onParameterBlur
10527
11628
  }, null, 8, ["parameters", "node-values", "is-read-only", "hidden-issues-inputs"]),
10528
- createVNode(_sfc_main$W, {
11629
+ createVNode(_sfc_main$11, {
10529
11630
  parameters: nodeSettings.value,
10530
11631
  "hide-delete": true,
10531
- "node-values": unref(nodeValues),
11632
+ "node-values": nodeValues.value,
10532
11633
  "is-read-only": isReadOnly.value,
10533
11634
  "hidden-issues-inputs": hiddenIssuesInputs.value,
10534
11635
  path: "",
@@ -10536,7 +11637,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10536
11637
  onParameterBlur
10537
11638
  }, null, 8, ["parameters", "node-values", "is-read-only", "hidden-issues-inputs"]),
10538
11639
  createBaseVNode("div", _hoisted_9, [
10539
- createTextVNode(toDisplayString(unref(i18n).baseText("nodeSettings.nodeVersion", {
11640
+ createTextVNode(toDisplayString(unref(i18n2).baseText("nodeSettings.nodeVersion", {
10540
11641
  interpolate: {
10541
11642
  node: nodeType.value?.displayName,
10542
11643
  version: (node2.value.typeVersion ?? latestVersion.value).toString()
@@ -10556,7 +11657,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10556
11657
  onClick: onFeatureRequestClick
10557
11658
  }, [
10558
11659
  createVNode(_component_N8nIcon, { icon: "lightbulb" }),
10559
- createTextVNode(" " + toDisplayString(unref(i18n).baseText("ndv.featureRequest")), 1)
11660
+ createTextVNode(" " + toDisplayString(unref(i18n2).baseText("ndv.featureRequest")), 1)
10560
11661
  ])
10561
11662
  ], 2)) : createCommentVNode("", true)
10562
11663
  ], 34)) : createCommentVNode("", true),
@@ -10568,17 +11669,22 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
10568
11669
  onSwitchSelectedNode,
10569
11670
  onOpenConnectionNodeCreator
10570
11671
  }, null, 8, ["root-node"])) : createCommentVNode("", true),
10571
- createVNode(_component_n8n_block_ui, { show: _ctx.blockUI }, null, 8, ["show"])
11672
+ createVNode(_component_n8n_block_ui, { show: _ctx.blockUI }, null, 8, ["show"]),
11673
+ openPanel.value === "settings" && isCommunityNode.value ? (openBlock(), createBlock(_component_CommunityNodeFooter, {
11674
+ key: 5,
11675
+ "package-name": packageName.value,
11676
+ "show-manage": unref(useUsersStore)().isInstanceOwner
11677
+ }, null, 8, ["package-name", "show-manage"])) : createCommentVNode("", true)
10572
11678
  ], 34);
10573
11679
  };
10574
11680
  }
10575
11681
  });
10576
- const header$1 = "_header_1vh2c_123";
11682
+ const header = "_header_1vh2c_123";
10577
11683
  const warningIcon = "_warningIcon_1vh2c_127";
10578
11684
  const descriptionContainer = "_descriptionContainer_1vh2c_132";
10579
11685
  const featureRequest = "_featureRequest_1vh2c_137";
10580
11686
  const style0$m = {
10581
- header: header$1,
11687
+ header,
10582
11688
  warningIcon,
10583
11689
  descriptionContainer,
10584
11690
  featureRequest
@@ -10586,12 +11692,13 @@ const style0$m = {
10586
11692
  const cssModules$m = {
10587
11693
  "$style": style0$m
10588
11694
  };
10589
- const NodeSettings = /* @__PURE__ */ _export_sfc$1(_sfc_main$t, [["__cssModules", cssModules$m], ["__scopeId", "data-v-c8d3cd57"]]);
11695
+ const NodeSettings = /* @__PURE__ */ _export_sfc$1(_sfc_main$t, [["__cssModules", cssModules$m], ["__scopeId", "data-v-b0fee41c"]]);
10590
11696
  const _sfc_main$s = /* @__PURE__ */ defineComponent({
10591
11697
  __name: "ExperimentalCanvasNodeSettings",
10592
11698
  props: {
10593
11699
  nodeId: {},
10594
- noWheel: { type: Boolean }
11700
+ noWheel: { type: Boolean },
11701
+ isReadOnly: { type: Boolean }
10595
11702
  },
10596
11703
  setup(__props) {
10597
11704
  const settingsEventBus = createEventBus();
@@ -10610,69 +11717,31 @@ const _sfc_main$s = /* @__PURE__ */ defineComponent({
10610
11717
  "active-node": activeNode.value,
10611
11718
  "push-ref": "",
10612
11719
  "foreign-credentials": [],
10613
- "read-only": false,
11720
+ "read-only": _ctx.isReadOnly,
10614
11721
  "block-u-i": false,
10615
11722
  executable: false,
10616
11723
  "input-size": 0,
10617
11724
  "is-embedded-in-canvas": "",
10618
11725
  "no-wheel": _ctx.noWheel,
10619
11726
  onValueChanged: handleValueChanged
10620
- }, {
10621
- actions: withCtx(() => [
10622
- renderSlot(_ctx.$slots, "actions")
10623
- ]),
10624
- _: 3
10625
- }, 8, ["event-bus", "active-node", "no-wheel"]);
10626
- };
10627
- }
10628
- });
10629
- const useExperimentalNdvStore = defineStore("experimentalNdv", () => {
10630
- const workflowStore = useWorkflowsStore();
10631
- const settingsStore = useSettingsStore();
10632
- const isEnabled = computed(
10633
- () => !Number.isNaN(settingsStore.experimental__minZoomNodeSettingsInCanvas) && settingsStore.experimental__minZoomNodeSettingsInCanvas > 0
10634
- );
10635
- const maxCanvasZoom = computed(
10636
- () => isEnabled.value ? settingsStore.experimental__minZoomNodeSettingsInCanvas : 4
10637
- );
10638
- const collapsedNodes = shallowRef({});
10639
- function setNodeExpanded(nodeId, isExpanded) {
10640
- collapsedNodes.value = {
10641
- ...collapsedNodes.value,
10642
- [nodeId]: isExpanded ?? !collapsedNodes.value[nodeId]
10643
- };
10644
- }
10645
- function collapseAllNodes() {
10646
- collapsedNodes.value = workflowStore.allNodes.reduce(
10647
- (acc, node2) => {
10648
- acc[node2.id] = true;
10649
- return acc;
10650
- },
10651
- {}
10652
- );
10653
- }
10654
- function expandAllNodes() {
10655
- collapsedNodes.value = {};
10656
- }
10657
- function isActive(canvasZoom) {
10658
- return isEnabled.value && canvasZoom === maxCanvasZoom.value;
11727
+ }, {
11728
+ actions: withCtx(() => [
11729
+ renderSlot(_ctx.$slots, "actions")
11730
+ ]),
11731
+ _: 3
11732
+ }, 8, ["event-bus", "active-node", "read-only", "no-wheel"]);
11733
+ };
10659
11734
  }
10660
- return {
10661
- isEnabled,
10662
- maxCanvasZoom,
10663
- collapsedNodes: computed(() => collapsedNodes.value),
10664
- isActive,
10665
- setNodeExpanded,
10666
- expandAllNodes,
10667
- collapseAllNodes
10668
- };
10669
11735
  });
10670
11736
  const _sfc_main$r = /* @__PURE__ */ defineComponent({
10671
11737
  __name: "ExperimentalEmbeddedNodeDetails",
10672
11738
  props: {
10673
- nodeId: {}
11739
+ nodeId: {},
11740
+ isReadOnly: { type: Boolean },
11741
+ isConfigurable: { type: Boolean }
10674
11742
  },
10675
11743
  setup(__props) {
11744
+ const ndvStore = useNDVStore();
10676
11745
  const experimentalNdvStore = useExperimentalNdvStore();
10677
11746
  const isExpanded = computed(() => !experimentalNdvStore.collapsedNodes[__props.nodeId]);
10678
11747
  const nodeTypesStore = useNodeTypesStore();
@@ -10684,7 +11753,7 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
10684
11753
  }
10685
11754
  return null;
10686
11755
  });
10687
- const vf = useVueFlow(workflowsStore.workflowId);
11756
+ const vf = useVueFlow();
10688
11757
  const isMoving = ref(false);
10689
11758
  const moveStartListener = vf.onMoveStart(() => {
10690
11759
  isMoving.value = true;
@@ -10708,28 +11777,84 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
10708
11777
  )
10709
11778
  );
10710
11779
  const isOnceVisible = ref(isVisible.value);
10711
- watchOnce(isVisible, (visible2) => {
10712
- isOnceVisible.value = isOnceVisible.value || visible2;
11780
+ const shouldShowInputPanel = ref(false);
11781
+ const containerRef = useTemplateRef("container");
11782
+ const inputPanelContainerRef = useTemplateRef("inputPanelContainer");
11783
+ const activeElement = useActiveElement();
11784
+ const expressionResolveCtx = computed(() => {
11785
+ if (!node2.value) {
11786
+ return void 0;
11787
+ }
11788
+ const runIndex = 0;
11789
+ const execution = workflowsStore.workflowExecutionData;
11790
+ const nodeName = node2.value.name;
11791
+ function findInputNode() {
11792
+ const taskData = (execution?.data?.resultData.runData[nodeName] ?? [])[runIndex];
11793
+ const source = taskData?.source[0];
11794
+ if (source) {
11795
+ return {
11796
+ name: source.previousNode,
11797
+ branchIndex: source.previousNodeOutput ?? 0,
11798
+ runIndex: source.previousNodeRun ?? 0
11799
+ };
11800
+ }
11801
+ const inputs2 = workflow.value.getParentNodesByDepth(nodeName, 1);
11802
+ if (inputs2.length > 0) {
11803
+ return {
11804
+ name: inputs2[0].name,
11805
+ branchIndex: inputs2[0].indicies[0] ?? 0,
11806
+ runIndex: 0
11807
+ };
11808
+ }
11809
+ return void 0;
11810
+ }
11811
+ return {
11812
+ localResolve: true,
11813
+ envVars: useEnvironmentsStore().variablesAsObject,
11814
+ workflow: workflow.value,
11815
+ execution,
11816
+ nodeName,
11817
+ additionalKeys: {},
11818
+ inputNode: findInputNode()
11819
+ };
10713
11820
  });
11821
+ const workflow = computed(() => workflowsStore.getCurrentWorkflow());
10714
11822
  function handleToggleExpand() {
10715
11823
  experimentalNdvStore.setNodeExpanded(__props.nodeId);
10716
11824
  }
11825
+ provide(ExpressionLocalResolveContextSymbol, expressionResolveCtx);
11826
+ watchOnce(isVisible, (visible2) => {
11827
+ isOnceVisible.value = isOnceVisible.value || visible2;
11828
+ });
11829
+ watch([activeElement, vf.getSelectedNodes], ([active, selected2]) => {
11830
+ if (active && containerRef.value?.contains(active)) {
11831
+ shouldShowInputPanel.value = !!active.closest("[data-test-id=inline-expression-editor-input]") || !!inputPanelContainerRef.value?.contains(active);
11832
+ }
11833
+ if (selected2.every((sel) => sel.id !== node2.value?.id)) {
11834
+ shouldShowInputPanel.value = false;
11835
+ }
11836
+ });
10717
11837
  return (_ctx, _cache) => {
11838
+ const _component_N8nText = N8nText;
10718
11839
  return openBlock(), createElementBlock("div", {
10719
11840
  ref: "container",
10720
11841
  class: normalizeClass([_ctx.$style.component, isExpanded.value ? _ctx.$style.expanded : _ctx.$style.collapsed]),
10721
- style: normalizeStyle({ "--zoom": `${1 / unref(experimentalNdvStore).maxCanvasZoom}` })
11842
+ style: normalizeStyle({
11843
+ "--zoom": `${1 / unref(experimentalNdvStore).maxCanvasZoom}`,
11844
+ "--node-width-scaler": _ctx.isConfigurable ? 1 : 1.5
11845
+ })
10722
11846
  }, [
10723
11847
  isOnceVisible.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
10724
11848
  isExpanded.value ? (openBlock(), createBlock(_sfc_main$s, {
10725
11849
  key: 0,
11850
+ tabindex: "-1",
10726
11851
  "node-id": _ctx.nodeId,
10727
11852
  class: normalizeClass(_ctx.$style.settingsView),
10728
- "no-wheel": !isMoving.value
10729
- /* to not interrupt panning while allowing scroll of the settings pane, allow wheel event while panning */
11853
+ "no-wheel": !isMoving.value,
11854
+ "is-read-only": _ctx.isReadOnly
10730
11855
  }, {
10731
11856
  actions: withCtx(() => [
10732
- createVNode(unref(_sfc_main$S), {
11857
+ createVNode(unref(_sfc_main$Y), {
10733
11858
  icon: "minimize-2",
10734
11859
  type: "secondary",
10735
11860
  text: "",
@@ -10740,7 +11865,7 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
10740
11865
  })
10741
11866
  ]),
10742
11867
  _: 1
10743
- }, 8, ["node-id", "class", "no-wheel"])) : (openBlock(), createElementBlock("div", {
11868
+ }, 8, ["node-id", "class", "no-wheel", "is-read-only"])) : (openBlock(), createElementBlock("div", {
10744
11869
  key: 1,
10745
11870
  role: "button ",
10746
11871
  class: normalizeClass(_ctx.$style.collapsedContent),
@@ -10757,35 +11882,81 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
10757
11882
  icon: "maximize-2",
10758
11883
  size: "large"
10759
11884
  })
10760
- ], 2))
11885
+ ], 2)),
11886
+ createVNode(Transition$1, { name: "input" }, {
11887
+ default: withCtx(() => [
11888
+ shouldShowInputPanel.value && node2.value ? (openBlock(), createElementBlock("div", {
11889
+ key: 0,
11890
+ ref: "inputPanelContainer",
11891
+ class: normalizeClass(_ctx.$style.inputPanelContainer),
11892
+ tabindex: -1
11893
+ }, [
11894
+ createVNode(InputPanel, {
11895
+ class: normalizeClass(_ctx.$style.inputPanel),
11896
+ workflow: workflow.value,
11897
+ "run-index": 0,
11898
+ compact: "",
11899
+ "push-ref": "",
11900
+ "display-mode": "schema",
11901
+ "disable-display-mode-selection": "",
11902
+ "active-node-name": node2.value.name,
11903
+ "current-node-name": expressionResolveCtx.value?.inputNode?.name,
11904
+ "is-mapping-onboarded": unref(ndvStore).isMappingOnboarded,
11905
+ "focused-mappable-input": unref(ndvStore).focusedMappableInput
11906
+ }, {
11907
+ header: withCtx(() => [
11908
+ createVNode(_component_N8nText, {
11909
+ class: normalizeClass(_ctx.$style.inputPanelTitle),
11910
+ bold: true,
11911
+ color: "text-light",
11912
+ size: "small"
11913
+ }, {
11914
+ default: withCtx(() => _cache[0] || (_cache[0] = [
11915
+ createTextVNode(" Input ")
11916
+ ])),
11917
+ _: 1
11918
+ }, 8, ["class"])
11919
+ ]),
11920
+ _: 1
11921
+ }, 8, ["class", "workflow", "active-node-name", "current-node-name", "is-mapping-onboarded", "focused-mappable-input"])
11922
+ ], 2)) : createCommentVNode("", true)
11923
+ ]),
11924
+ _: 1
11925
+ })
10761
11926
  ], 64)) : createCommentVNode("", true)
10762
11927
  ], 6);
10763
11928
  };
10764
11929
  }
10765
11930
  });
10766
- const component$2 = "_component_1kmdn_123";
10767
- const expanded = "_expanded_1kmdn_134";
10768
- const collapsed = "_collapsed_1kmdn_137";
10769
- const collapsedContent = "_collapsedContent_1kmdn_149";
10770
- const settingsView = "_settingsView_1kmdn_150";
11931
+ const component$2 = "_component_1fv8q_123";
11932
+ const expanded = "_expanded_1fv8q_131";
11933
+ const collapsed = "_collapsed_1fv8q_137";
11934
+ const collapsedContent = "_collapsedContent_1fv8q_149";
11935
+ const settingsView = "_settingsView_1fv8q_150";
11936
+ const inputPanelContainer = "_inputPanelContainer_1fv8q_179";
11937
+ const inputPanel = "_inputPanel_1fv8q_179";
11938
+ const inputPanelTitle = "_inputPanelTitle_1fv8q_201";
10771
11939
  const style0$l = {
10772
11940
  component: component$2,
10773
11941
  expanded,
10774
11942
  collapsed,
10775
11943
  collapsedContent,
10776
- settingsView
11944
+ settingsView,
11945
+ inputPanelContainer,
11946
+ inputPanel,
11947
+ inputPanelTitle
10777
11948
  };
10778
11949
  const cssModules$l = {
10779
11950
  "$style": style0$l
10780
11951
  };
10781
- const ExperimentalInPlaceNodeSettings = /* @__PURE__ */ _export_sfc$1(_sfc_main$r, [["__cssModules", cssModules$l]]);
11952
+ const ExperimentalInPlaceNodeSettings = /* @__PURE__ */ _export_sfc$1(_sfc_main$r, [["__cssModules", cssModules$l], ["__scopeId", "data-v-7a0aa493"]]);
10782
11953
  const _hoisted_1$3 = ["data-test-id"];
10783
11954
  const _sfc_main$q = /* @__PURE__ */ defineComponent({
10784
11955
  __name: "CanvasNodeDefault",
10785
11956
  emits: ["open:contextmenu", "activate"],
10786
11957
  setup(__props, { emit: __emit }) {
10787
11958
  const $style = useCssModule();
10788
- const i18n = useI18n();
11959
+ const i18n2 = useI18n();
10789
11960
  const emit = __emit;
10790
11961
  const { initialized, viewport } = useCanvas();
10791
11962
  const {
@@ -10796,6 +11967,7 @@ const _sfc_main$q = /* @__PURE__ */ defineComponent({
10796
11967
  outputs,
10797
11968
  connections: connections2,
10798
11969
  isDisabled,
11970
+ isReadOnly,
10799
11971
  isSelected,
10800
11972
  hasPinnedData,
10801
11973
  executionStatus,
@@ -10881,15 +12053,17 @@ const _sfc_main$q = /* @__PURE__ */ defineComponent({
10881
12053
  }
10882
12054
  return (_ctx, _cache) => {
10883
12055
  const _component_CanvasNodeTooltip = __unplugin_components_0$3;
10884
- const _component_NodeIcon = _sfc_main$U;
10885
- const _component_CanvasNodeDisabledStrikeThrough = __unplugin_components_2;
12056
+ const _component_NodeIcon = _sfc_main$$;
12057
+ const _component_CanvasNodeDisabledStrikeThrough = __unplugin_components_2$1;
10886
12058
  const _component_CanvasNodeStatusIcons = __unplugin_components_3;
10887
12059
  return unref(experimentalNdvStore).isActive(unref(viewport).zoom) ? (openBlock(), createBlock(ExperimentalInPlaceNodeSettings, {
10888
12060
  key: 0,
10889
12061
  "node-id": unref(id2),
10890
12062
  class: normalizeClass(classes.value),
10891
- style: normalizeStyle(styles.value)
10892
- }, null, 8, ["node-id", "class", "style"])) : (openBlock(), createElementBlock("div", {
12063
+ style: normalizeStyle(styles.value),
12064
+ "is-read-only": unref(isReadOnly),
12065
+ "is-configurable": renderOptions.value.configurable ?? false
12066
+ }, null, 8, ["node-id", "class", "style", "is-read-only", "is-configurable"])) : (openBlock(), createElementBlock("div", {
10893
12067
  key: 1,
10894
12068
  class: normalizeClass(classes.value),
10895
12069
  style: normalizeStyle(styles.value),
@@ -10919,7 +12093,7 @@ const _sfc_main$q = /* @__PURE__ */ defineComponent({
10919
12093
  unref(isDisabled) ? (openBlock(), createElementBlock("div", {
10920
12094
  key: 1,
10921
12095
  class: normalizeClass(unref($style).disabledLabel)
10922
- }, " (" + toDisplayString(unref(i18n).baseText("node.disabled")) + ") ", 3)) : createCommentVNode("", true),
12096
+ }, " (" + toDisplayString(unref(i18n2).baseText("node.disabled")) + ") ", 3)) : createCommentVNode("", true),
10923
12097
  unref(subtitle2) ? (openBlock(), createElementBlock("div", {
10924
12098
  key: 2,
10925
12099
  class: normalizeClass(unref($style).subtitle)
@@ -12465,7 +13639,7 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
12465
13639
  __name: "CanvasNodeAddNodes",
12466
13640
  setup(__props) {
12467
13641
  const nodeCreatorStore = useNodeCreatorStore();
12468
- const i18n = useI18n();
13642
+ const i18n2 = useI18n();
12469
13643
  const settingsStore = useSettingsStore();
12470
13644
  const templatesStore = useTemplatesStore();
12471
13645
  const isTooltipVisible = ref(false);
@@ -12519,7 +13693,7 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
12519
13693
  "show-after": 700
12520
13694
  }, {
12521
13695
  content: withCtx(() => [
12522
- createTextVNode(toDisplayString(unref(i18n).baseText("nodeView.canvasAddButton.addATriggerNodeBeforeExecuting")), 1)
13696
+ createTextVNode(toDisplayString(unref(i18n2).baseText("nodeView.canvasAddButton.addATriggerNodeBeforeExecuting")), 1)
12523
13697
  ]),
12524
13698
  default: withCtx(() => [
12525
13699
  createBaseVNode("button", {
@@ -12539,7 +13713,7 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
12539
13713
  createBaseVNode("p", {
12540
13714
  class: normalizeClass(_ctx.$style.label)
12541
13715
  }, [
12542
- createTextVNode(toDisplayString(unref(i18n).baseText("nodeView.canvasAddButton.addFirstStep")) + " ", 1),
13716
+ createTextVNode(toDisplayString(unref(i18n2).baseText("nodeView.canvasAddButton.addFirstStep")) + " ", 1),
12543
13717
  templatesLinkEnabled.value ? (openBlock(), createBlock(_component_N8nLink, {
12544
13718
  key: 0,
12545
13719
  to: templateRepository.value.to,
@@ -12550,7 +13724,7 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
12550
13724
  onClick: _cache[0] || (_cache[0] = ($event) => unref(trackTemplatesClick)(unref(TemplateClickSource).emptyWorkflowLink))
12551
13725
  }, {
12552
13726
  default: withCtx(() => [
12553
- createTextVNode(toDisplayString(unref(i18n).baseText("nodeView.templateLink")), 1)
13727
+ createTextVNode(toDisplayString(unref(i18n2).baseText("nodeView.templateLink")), 1)
12554
13728
  ]),
12555
13729
  _: 1
12556
13730
  }, 8, ["to", "target"])) : createCommentVNode("", true)
@@ -12576,17 +13750,24 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
12576
13750
  emits: ["delete"],
12577
13751
  setup(__props, { emit: __emit }) {
12578
13752
  const emit = __emit;
12579
- const i18n = useI18n();
13753
+ const i18n2 = useI18n();
13754
+ const router = useRouter();
12580
13755
  const { id: id2 } = useCanvasNode();
12581
13756
  const builderStore = useBuilderStore();
13757
+ const workflowsStore = useWorkflowsStore();
13758
+ const workflowSaver = useWorkflowSaving({ router });
12582
13759
  const isPromptVisible = ref(true);
12583
13760
  const isFocused = ref(false);
12584
13761
  const prompt = ref("");
12585
13762
  const hasContent = computed(() => prompt.value.trim().length > 0);
12586
13763
  async function onSubmit() {
12587
- builderStore.openChat();
13764
+ const isNewWorkflow = workflowsStore.isNewWorkflow;
13765
+ if (isNewWorkflow) {
13766
+ await workflowSaver.saveCurrentWorkflow();
13767
+ }
13768
+ await builderStore.openChat();
12588
13769
  emit("delete", id2.value);
12589
- await builderStore.initBuilderChat(prompt.value, "canvas");
13770
+ builderStore.sendChatMessage({ text: prompt.value, source: "canvas" });
12590
13771
  isPromptVisible.value = false;
12591
13772
  }
12592
13773
  return (_ctx, _cache) => {
@@ -12610,7 +13791,7 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
12610
13791
  class: normalizeClass(_ctx.$style.form_textarea),
12611
13792
  type: "textarea",
12612
13793
  disabled: unref(builderStore).streaming,
12613
- placeholder: unref(i18n).baseText("aiAssistant.builder.placeholder"),
13794
+ placeholder: unref(i18n2).baseText("aiAssistant.builder.placeholder"),
12614
13795
  "read-only": false,
12615
13796
  rows: 15,
12616
13797
  onFocus: _cache[1] || (_cache[1] = ($event) => isFocused.value = true),
@@ -12626,7 +13807,7 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
12626
13807
  onKeydown: withKeys(onSubmit, ["enter"])
12627
13808
  }, {
12628
13809
  default: withCtx(() => [
12629
- createTextVNode(toDisplayString(unref(i18n).baseText("aiAssistant.builder.buildWorkflow")), 1)
13810
+ createTextVNode(toDisplayString(unref(i18n2).baseText("aiAssistant.builder.buildWorkflow")), 1)
12630
13811
  ]),
12631
13812
  _: 1
12632
13813
  }, 8, ["disabled"])
@@ -12904,13 +14085,13 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
12904
14085
  };
12905
14086
  }
12906
14087
  });
12907
- const wrapper$2 = "_wrapper_hyidj_123";
14088
+ const wrapper$3 = "_wrapper_hyidj_123";
12908
14089
  const secondary = "_secondary_hyidj_126";
12909
14090
  const line = "_line_hyidj_126";
12910
14091
  const plus$1 = "_plus_hyidj_129";
12911
14092
  const success = "_success_hyidj_135";
12912
14093
  const style0$e = {
12913
- wrapper: wrapper$2,
14094
+ wrapper: wrapper$3,
12914
14095
  secondary,
12915
14096
  line,
12916
14097
  plus: plus$1,
@@ -12948,7 +14129,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
12948
14129
  setup(__props, { emit: __emit }) {
12949
14130
  const emit = __emit;
12950
14131
  const $style = useCssModule();
12951
- const i18n = useI18n();
14132
+ const i18n2 = useI18n();
12952
14133
  const { render: render2 } = useCanvasNode();
12953
14134
  const { label: label2, isConnected, isConnecting, isReadOnly, isRequired, runData: runData2 } = useCanvasNodeHandle();
12954
14135
  const classes = computed(() => ({
@@ -12961,7 +14142,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
12961
14142
  const renderOptions = computed(() => render2.value.options);
12962
14143
  const runDataTotal = computed(() => runData2.value?.total ?? 0);
12963
14144
  const runDataLabel2 = computed(
12964
- () => !isConnected.value && runData2.value && runData2.value.total > 0 ? i18n.baseText("ndv.output.items", {
14145
+ () => !isConnected.value && runData2.value && runData2.value.total > 0 ? i18n2.baseText("ndv.output.items", {
12965
14146
  adjustToNumber: runData2.value.total,
12966
14147
  interpolate: { count: String(runData2.value.total) }
12967
14148
  }) : ""
@@ -13329,7 +14510,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
13329
14510
  [style.hovered]: !!__props.hovered
13330
14511
  }));
13331
14512
  const router = useRouter();
13332
- const i18n = useI18n();
14513
+ const i18n2 = useI18n();
13333
14514
  const workflowsStore = useWorkflowsStore();
13334
14515
  const logsStore = useLogsStore();
13335
14516
  const { runEntireWorkflow } = useRunWorkflow({ router });
@@ -13368,11 +14549,11 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
13368
14549
  size: "large",
13369
14550
  disabled: isExecuting.value,
13370
14551
  "data-test-id": testId.value,
13371
- label: unref(i18n).baseText("chat.hide"),
14552
+ label: unref(i18n2).baseText("chat.hide"),
13372
14553
  onClickCapture: _cache[0] || (_cache[0] = ($event) => unref(logsStore).toggleOpen(false))
13373
14554
  }, null, 8, ["disabled", "data-test-id", "label"])) : (openBlock(), createBlock(KeyboardShortcutTooltip, {
13374
14555
  key: 1,
13375
- label: unref(i18n).baseText("chat.open"),
14556
+ label: unref(i18n2).baseText("chat.open"),
13376
14557
  shortcut: { keys: ["c"] }
13377
14558
  }, {
13378
14559
  default: withCtx(() => [
@@ -13382,7 +14563,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
13382
14563
  size: "large",
13383
14564
  disabled: isExecuting.value,
13384
14565
  "data-test-id": testId.value,
13385
- label: unref(i18n).baseText("chat.open"),
14566
+ label: unref(i18n2).baseText("chat.open"),
13386
14567
  onClickCapture: _cache[1] || (_cache[1] = ($event) => unref(startChat)("node"))
13387
14568
  }, null, 8, ["disabled", "data-test-id", "label"])
13388
14569
  ]),
@@ -13395,7 +14576,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
13395
14576
  size: "large",
13396
14577
  disabled: isExecuting.value,
13397
14578
  "data-test-id": testId.value,
13398
- label: unref(i18n).baseText("nodeView.runButtonText.executeWorkflow"),
14579
+ label: unref(i18n2).baseText("nodeView.runButtonText.executeWorkflow"),
13399
14580
  onClickCapture: handleClickExecute
13400
14581
  }, null, 8, ["disabled", "data-test-id", "label"]))
13401
14582
  ], 64)) : createCommentVNode("", true)
@@ -13453,7 +14634,8 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
13453
14634
  const style = useCssModule();
13454
14635
  const props = __props;
13455
14636
  const contextMenu2 = useContextMenu();
13456
- const { connectingHandle } = useCanvas();
14637
+ const { connectingHandle, viewport } = useCanvas();
14638
+ const experimentalNdvStore = useExperimentalNdvStore();
13457
14639
  const nodeClasses = ref([]);
13458
14640
  const inputs2 = computed(() => props.data.inputs);
13459
14641
  const outputs = computed(() => props.data.outputs);
@@ -13471,6 +14653,9 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
13471
14653
  connections: connections2
13472
14654
  });
13473
14655
  const isDisabled = computed(() => props.data.disabled);
14656
+ const isExperimentalEmbeddedNdvShown = computed(
14657
+ () => experimentalNdvStore.isActive(viewport.value.zoom)
14658
+ );
13474
14659
  const classes = computed(() => ({
13475
14660
  [style.canvasNode]: true,
13476
14661
  [style.showToolbar]: showToolbar2.value,
@@ -13519,7 +14704,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
13519
14704
  const handleType = mode === CanvasConnectionMode.Input ? "target" : "source";
13520
14705
  const connectionsCount = connections2.value[mode][endpoint.type]?.[endpoint.index]?.length ?? 0;
13521
14706
  const isConnecting = connectingHandle.value?.nodeId === props.id && connectingHandle.value?.handleType === handleType && connectingHandle.value?.handleId === handleId;
13522
- const offsetValue = position2 === Position.Bottom ? `${GRID_SIZE * 2 * (1 + index * 2) + CONFIGURATION_NODE_OFFSET}px` : `${100 / (endpoints.length + 1) * (index + 1)}%`;
14707
+ const offsetValue = position2 === Position.Bottom ? `${GRID_SIZE * 2 * (1 + index * 2) + CONFIGURATION_NODE_OFFSET}px` : isExperimentalEmbeddedNdvShown.value && endpoints.length === 1 ? `${(1 + index) * (GRID_SIZE * 2)}px` : `${100 / (endpoints.length + 1) * (index + 1)}%`;
13523
14708
  return {
13524
14709
  ...endpoint,
13525
14710
  handleId,
@@ -14209,6 +15394,10 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
14209
15394
  }
14210
15395
  }
14211
15396
  async function onTidyUp(payload) {
15397
+ if (payload.nodeIdsFilter && payload.nodeIdsFilter.length > 0) {
15398
+ clearSelectedNodes();
15399
+ addSelectedNodes(payload.nodeIdsFilter.map(findNode).filter(isPresent));
15400
+ }
14212
15401
  const applyOnSelection = selectedNodes.value.length > 1;
14213
15402
  const target2 = applyOnSelection ? "selection" : "all";
14214
15403
  const result = layout(target2);
@@ -14376,14 +15565,14 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
14376
15565
  createVNode(_component_CanvasConnectionLine, normalizeProps(guardReactiveProps(connectionLineProps)), null, 16)
14377
15566
  ]),
14378
15567
  default: withCtx(() => [
14379
- createVNode(_sfc_main$H, { id: arrowHeadMarkerId.value }, null, 8, ["id"]),
14380
- createVNode(_sfc_main$I, {
15568
+ createVNode(_sfc_main$N, { id: arrowHeadMarkerId.value }, null, 8, ["id"]),
15569
+ createVNode(_sfc_main$O, {
14381
15570
  viewport: unref(viewport),
14382
15571
  striped: _ctx.readOnly
14383
15572
  }, null, 8, ["viewport", "striped"]),
14384
15573
  createVNode(Transition$1, { name: "minimap" }, {
14385
15574
  default: withCtx(() => [
14386
- withDirectives(createVNode(unref(_sfc_main$L), {
15575
+ withDirectives(createVNode(unref(_sfc_main$R), {
14387
15576
  "data-test-id": "canvas-minimap",
14388
15577
  "aria-label": "n8n Minimap",
14389
15578
  height: 120,
@@ -14435,13 +15624,13 @@ const style0$5 = {
14435
15624
  const cssModules$5 = {
14436
15625
  "$style": style0$5
14437
15626
  };
14438
- const Canvas = /* @__PURE__ */ _export_sfc$1(_sfc_main$9, [["__cssModules", cssModules$5], ["__scopeId", "data-v-49d79266"]]);
15627
+ const Canvas = /* @__PURE__ */ _export_sfc$1(_sfc_main$9, [["__cssModules", cssModules$5], ["__scopeId", "data-v-5ad26715"]]);
14439
15628
  function useCanvasMapping({
14440
15629
  nodes,
14441
15630
  connections: connections2,
14442
15631
  workflowObject
14443
15632
  }) {
14444
- const i18n = useI18n();
15633
+ const i18n2 = useI18n();
14445
15634
  const workflowsStore = useWorkflowsStore();
14446
15635
  const nodeTypesStore = useNodeTypesStore();
14447
15636
  const nodeHelpers = useNodeHelpers();
@@ -14627,11 +15816,11 @@ function useCanvasMapping({
14627
15816
  return acc;
14628
15817
  }
14629
15818
  if ("eventTriggerDescription" in nodeTypeDescription) {
14630
- const nodeName = i18n.shortNodeType(nodeTypeDescription.name);
15819
+ const nodeName = i18n2.shortNodeType(nodeTypeDescription.name);
14631
15820
  const { eventTriggerDescription } = nodeTypeDescription;
14632
- acc[node2.id] = i18n.nodeText(nodeTypeDescription.name).eventTriggerDescription(nodeName, eventTriggerDescription ?? "");
15821
+ acc[node2.id] = i18n2.nodeText(nodeTypeDescription.name).eventTriggerDescription(nodeName, eventTriggerDescription ?? "");
14633
15822
  } else {
14634
- acc[node2.id] = i18n.baseText("node.waitingForYouToCreateAnEventIn", {
15823
+ acc[node2.id] = i18n2.baseText("node.waitingForYouToCreateAnEventIn", {
14635
15824
  interpolate: {
14636
15825
  nodeType: nodeTypeDescription ? getTriggerNodeServiceName(nodeTypeDescription) : ""
14637
15826
  }
@@ -14733,24 +15922,24 @@ function useCanvasMapping({
14733
15922
  if (workflowExecution && lastNodeExecuted && isExecutionSummary(workflowExecution)) {
14734
15923
  if (node2.name === workflowExecution.data?.resultData?.lastNodeExecuted && workflowExecution?.waitTill && !workflowExecution?.finished) {
14735
15924
  if (node2 && node2.type === WAIT_NODE_TYPE && ["webhook", "form"].includes(node2.parameters.resume)) {
14736
- acc[node2.id] = node2.parameters.resume === "webhook" ? i18n.baseText("node.theNodeIsWaitingWebhookCall") : i18n.baseText("node.theNodeIsWaitingFormCall");
15925
+ acc[node2.id] = node2.parameters.resume === "webhook" ? i18n2.baseText("node.theNodeIsWaitingWebhookCall") : i18n2.baseText("node.theNodeIsWaitingFormCall");
14737
15926
  return acc;
14738
15927
  }
14739
15928
  if (node2?.parameters.operation === SEND_AND_WAIT_OPERATION) {
14740
- acc[node2.id] = i18n.baseText("node.theNodeIsWaitingUserInput");
15929
+ acc[node2.id] = i18n2.baseText("node.theNodeIsWaitingUserInput");
14741
15930
  return acc;
14742
15931
  }
14743
15932
  if (node2?.type === FORM_NODE_TYPE) {
14744
- acc[node2.id] = i18n.baseText("node.theNodeIsWaitingFormCall");
15933
+ acc[node2.id] = i18n2.baseText("node.theNodeIsWaitingFormCall");
14745
15934
  return acc;
14746
15935
  }
14747
15936
  const waitDate = new Date(workflowExecution.waitTill);
14748
15937
  if (waitDate.getTime() === WAIT_INDEFINITELY.getTime()) {
14749
- acc[node2.id] = i18n.baseText(
15938
+ acc[node2.id] = i18n2.baseText(
14750
15939
  "node.theNodeIsWaitingIndefinitelyForAnIncomingWebhookCall"
14751
15940
  );
14752
15941
  }
14753
- acc[node2.id] = i18n.baseText("node.nodeIsWaitingTill", {
15942
+ acc[node2.id] = i18n2.baseText("node.nodeIsWaitingTill", {
14754
15943
  interpolate: {
14755
15944
  date: waitDate.toLocaleDateString(),
14756
15945
  time: waitDate.toLocaleTimeString()
@@ -14929,14 +16118,14 @@ function useCanvasMapping({
14929
16118
  }
14930
16119
  if (nodePinnedDataById.value[fromNode.id]) {
14931
16120
  const pinnedDataCount = nodePinnedDataById.value[fromNode.id]?.length ?? 0;
14932
- return pinnedDataCount > 0 ? i18n.baseText("ndv.output.items", {
16121
+ return pinnedDataCount > 0 ? i18n2.baseText("ndv.output.items", {
14933
16122
  adjustToNumber: pinnedDataCount,
14934
16123
  interpolate: { count: String(pinnedDataCount) }
14935
16124
  }) : "";
14936
16125
  } else if (nodeExecutionRunDataById.value[fromNode.id]) {
14937
16126
  const { type, index } = parseCanvasConnectionHandleString(connection.sourceHandle);
14938
16127
  const runDataTotal = nodeExecutionRunDataOutputMapById.value[fromNode.id]?.[type]?.[index]?.total ?? 0;
14939
- return runDataTotal > 0 ? i18n.baseText("ndv.output.items", {
16128
+ return runDataTotal > 0 ? i18n2.baseText("ndv.output.items", {
14940
16129
  adjustToNumber: runDataTotal,
14941
16130
  interpolate: { count: String(runDataTotal) }
14942
16131
  }) : "";
@@ -14979,7 +16168,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
14979
16168
  { immediate: true }
14980
16169
  );
14981
16170
  return (_ctx, _cache) => {
14982
- const _component_N8nIconButton = _sfc_main$S;
16171
+ const _component_N8nIconButton = _sfc_main$Y;
14983
16172
  return openBlock(), createElementBlock("div", {
14984
16173
  class: normalizeClass([_ctx.$style.component, content2.value === void 0 ? _ctx.$style.closed : ""])
14985
16174
  }, [
@@ -15089,225 +16278,591 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
15089
16278
  };
15090
16279
  }
15091
16280
  });
15092
- const wrapper$1 = "_wrapper_jyurh_123";
16281
+ const wrapper$2 = "_wrapper_jyurh_123";
15093
16282
  const canvas = "_canvas_jyurh_131";
15094
16283
  const style0$3 = {
15095
- wrapper: wrapper$1,
16284
+ wrapper: wrapper$2,
15096
16285
  canvas
15097
16286
  };
15098
16287
  const cssModules$3 = {
15099
16288
  "$style": style0$3
15100
16289
  };
15101
16290
  const WorkflowCanvas = /* @__PURE__ */ _export_sfc$1(_sfc_main$7, [["__cssModules", cssModules$3]]);
16291
+ function useExecutionData({ node: node2 }) {
16292
+ const workflowsStore = useWorkflowsStore();
16293
+ const workflowExecution = computed(() => {
16294
+ return workflowsStore.getWorkflowExecution;
16295
+ });
16296
+ const workflowRunData = computed(() => {
16297
+ if (workflowExecution.value === null) {
16298
+ return null;
16299
+ }
16300
+ const executionData = workflowExecution.value.data;
16301
+ if (!executionData?.resultData?.runData) {
16302
+ return null;
16303
+ }
16304
+ return executionData.resultData.runData;
16305
+ });
16306
+ const hasNodeRun = computed(() => {
16307
+ if (workflowsStore.subWorkflowExecutionError) return true;
16308
+ return Boolean(
16309
+ node2.value && workflowRunData.value && Object.prototype.hasOwnProperty.bind(workflowRunData.value)(node2.value.name)
16310
+ );
16311
+ });
16312
+ return {
16313
+ workflowExecution,
16314
+ workflowRunData,
16315
+ hasNodeRun
16316
+ };
16317
+ }
15102
16318
  const _sfc_main$6 = /* @__PURE__ */ defineComponent({
15103
16319
  ...{ name: "FocusPanel" },
15104
16320
  __name: "FocusPanel",
15105
16321
  props: {
15106
- executable: { type: Boolean }
16322
+ isCanvasReadOnly: { type: Boolean }
15107
16323
  },
15108
- setup(__props) {
16324
+ emits: ["focus", "saveKeyboardShortcut"],
16325
+ setup(__props, { emit: __emit }) {
15109
16326
  const props = __props;
16327
+ const emit = __emit;
16328
+ const inputField = ref();
15110
16329
  const locale = useI18n();
15111
16330
  const nodeHelpers = useNodeHelpers();
15112
16331
  const focusPanelStore = useFocusPanelStore();
16332
+ const workflowsStore = useWorkflowsStore();
15113
16333
  const nodeTypesStore = useNodeTypesStore();
15114
16334
  const nodeSettingsParameters = useNodeSettingsParameters();
16335
+ const environmentsStore = useEnvironmentsStore();
16336
+ const deviceSupport = useDeviceSupport();
16337
+ const { debounce } = useDebounce();
16338
+ const styles = useStyles();
15115
16339
  const focusedNodeParameter = computed(() => focusPanelStore.focusedNodeParameters[0]);
15116
16340
  const resolvedParameter = computed(
15117
16341
  () => focusedNodeParameter.value && focusPanelStore.isRichParameter(focusedNodeParameter.value) ? focusedNodeParameter.value : void 0
15118
16342
  );
15119
16343
  const focusPanelActive = computed(() => focusPanelStore.focusPanelActive);
16344
+ const focusPanelHidden = computed(() => focusPanelStore.focusPanelHidden);
16345
+ const focusPanelWidth = computed(() => focusPanelStore.focusPanelWidth);
16346
+ const isDisabled = computed(() => {
16347
+ if (!resolvedParameter.value) return false;
16348
+ return !!resolvedParameter.value.parameter.disabledOptions && nodeSettingsParameters.shouldDisplayNodeParameter(
16349
+ resolvedParameter.value.node.parameters,
16350
+ resolvedParameter.value.node,
16351
+ resolvedParameter.value.parameter,
16352
+ resolvedParameter.value.parameterPath.split(".").slice(1, -1).join("."),
16353
+ "disabledOptions"
16354
+ );
16355
+ });
16356
+ const isDisplayed = computed(() => {
16357
+ if (!resolvedParameter.value) return true;
16358
+ return nodeSettingsParameters.shouldDisplayNodeParameter(
16359
+ resolvedParameter.value.node.parameters,
16360
+ resolvedParameter.value.node,
16361
+ resolvedParameter.value.parameter,
16362
+ resolvedParameter.value.parameterPath.split(".").slice(1, -1).join("."),
16363
+ "displayOptions"
16364
+ );
16365
+ });
15120
16366
  const isExecutable2 = computed(() => {
15121
16367
  if (!resolvedParameter.value) return false;
16368
+ if (!isDisplayed.value) return false;
15122
16369
  const foreignCredentials = nodeHelpers.getForeignCredentialsIfSharingEnabled(
15123
16370
  resolvedParameter.value.node.credentials
15124
16371
  );
15125
16372
  return nodeHelpers.isNodeExecutable(
15126
16373
  resolvedParameter.value.node,
15127
- props.executable,
16374
+ !props.isCanvasReadOnly,
15128
16375
  foreignCredentials
15129
16376
  );
15130
16377
  });
16378
+ const node2 = computed(() => resolvedParameter.value?.node);
16379
+ const { hasNodeRun } = useExecutionData({ node: node2 });
16380
+ function getTypeOption(optionName) {
16381
+ return resolvedParameter.value ? getParameterTypeOption(resolvedParameter.value.parameter, optionName) : void 0;
16382
+ }
16383
+ const codeEditorMode = computed(() => {
16384
+ return resolvedParameter.value?.node.parameters.mode;
16385
+ });
16386
+ const editorType = computed(() => {
16387
+ return getTypeOption("editor") ?? void 0;
16388
+ });
16389
+ const editorLanguage = computed(() => {
16390
+ if (editorType.value === "json" || resolvedParameter.value?.parameter.type === "json")
16391
+ return "json";
16392
+ return getTypeOption("editorLanguage") ?? "javaScript";
16393
+ });
16394
+ const editorRows = computed(() => getTypeOption("rows"));
15131
16395
  const isToolNode = computed(
15132
16396
  () => resolvedParameter.value ? nodeTypesStore.isToolNode(resolvedParameter.value?.node.type) : false
15133
16397
  );
16398
+ const isHtmlNode = computed(
16399
+ () => !!resolvedParameter.value && resolvedParameter.value.node.type === HTML_NODE_TYPE
16400
+ );
15134
16401
  const expressionModeEnabled = computed(
15135
16402
  () => resolvedParameter.value && isValueExpression(resolvedParameter.value.parameter, resolvedParameter.value.value)
15136
16403
  );
15137
- function optionSelected() {
15138
- }
16404
+ const expression = computed(() => {
16405
+ if (!expressionModeEnabled.value) return "";
16406
+ return isResourceLocatorValue(resolvedParameter.value) ? resolvedParameter.value.value : resolvedParameter.value;
16407
+ });
16408
+ const shouldCaptureForPosthog = computed(
16409
+ () => resolvedParameter.value?.node.type === AI_TRANSFORM_NODE_TYPE
16410
+ );
16411
+ const isReadOnly = computed(() => props.isCanvasReadOnly || isDisabled.value);
16412
+ const resolvedAdditionalExpressionData = computed(() => {
16413
+ return {
16414
+ $vars: environmentsStore.variablesAsObject
16415
+ };
16416
+ });
16417
+ const targetNodeParameterContext = computed(() => {
16418
+ if (!resolvedParameter.value) return void 0;
16419
+ return {
16420
+ nodeName: resolvedParameter.value.node.name,
16421
+ parameterPath: resolvedParameter.value.parameterPath
16422
+ };
16423
+ });
16424
+ const isNodeExecuting = computed(() => workflowsStore.isNodeExecuting(node2.value?.name ?? ""));
16425
+ const { resolvedExpression } = useResolvedExpression({
16426
+ expression,
16427
+ additionalData: resolvedAdditionalExpressionData,
16428
+ stringifyObject: resolvedParameter.value && resolvedParameter.value.parameter.type !== "multiOptions"
16429
+ });
15139
16430
  function valueChanged(value) {
15140
16431
  if (resolvedParameter.value === void 0) {
15141
16432
  return;
15142
16433
  }
15143
16434
  nodeSettingsParameters.updateNodeParameter(
16435
+ toRef(resolvedParameter.value.node.parameters),
15144
16436
  { value, name: resolvedParameter.value.parameterPath },
15145
16437
  value,
15146
16438
  resolvedParameter.value.node,
15147
16439
  isToolNode.value
15148
16440
  );
15149
16441
  }
16442
+ async function setFocus() {
16443
+ await nextTick();
16444
+ if (inputField.value) {
16445
+ if (hasFocusOnInput(inputField.value)) {
16446
+ inputField.value.focusOnInput();
16447
+ } else if (isFocusableEl(inputField.value)) {
16448
+ inputField.value.focus();
16449
+ }
16450
+ }
16451
+ emit("focus");
16452
+ }
16453
+ function optionSelected(command) {
16454
+ if (!resolvedParameter.value) return;
16455
+ switch (command) {
16456
+ case "resetValue": {
16457
+ if (typeof resolvedParameter.value.parameter.default === "string") {
16458
+ valueChanged(resolvedParameter.value.parameter.default);
16459
+ }
16460
+ void setFocus();
16461
+ break;
16462
+ }
16463
+ case "addExpression": {
16464
+ const newValue = formatAsExpression(
16465
+ resolvedParameter.value.value,
16466
+ resolvedParameter.value.parameter.type
16467
+ );
16468
+ valueChanged(typeof newValue === "string" ? newValue : newValue.value);
16469
+ void setFocus();
16470
+ break;
16471
+ }
16472
+ case "removeExpression": {
16473
+ const newValue = parseFromExpression(
16474
+ resolvedParameter.value.value,
16475
+ resolvedExpression.value,
16476
+ resolvedParameter.value.parameter.type,
16477
+ resolvedParameter.value.parameter.default,
16478
+ (resolvedParameter.value.parameter.options ?? []).filter(isValidParameterOption)
16479
+ );
16480
+ if (typeof newValue === "string") {
16481
+ valueChanged(newValue);
16482
+ } else if (newValue && typeof newValue.value === "string") {
16483
+ valueChanged(newValue.value);
16484
+ }
16485
+ void setFocus();
16486
+ break;
16487
+ }
16488
+ case "formatHtml":
16489
+ htmlEditorEventBus.emit("format-html");
16490
+ break;
16491
+ }
16492
+ }
16493
+ const valueChangedDebounced = debounce(valueChanged, { debounceTime: 0 });
16494
+ function focusWithDelay() {
16495
+ setTimeout(() => {
16496
+ void setFocus();
16497
+ }, 50);
16498
+ }
16499
+ function handleKeydown(event) {
16500
+ if (event.key === "s" && deviceSupport.isCtrlKeyPressed(event)) {
16501
+ event.stopPropagation();
16502
+ event.preventDefault();
16503
+ if (isReadOnly.value) return;
16504
+ emit("saveKeyboardShortcut", event);
16505
+ }
16506
+ }
16507
+ const registerKeyboardListener = () => {
16508
+ document.addEventListener("keydown", handleKeydown, true);
16509
+ };
16510
+ const unregisterKeyboardListener = () => {
16511
+ document.removeEventListener("keydown", handleKeydown, true);
16512
+ };
16513
+ watch(
16514
+ [() => focusPanelStore.lastFocusTimestamp, () => expressionModeEnabled.value],
16515
+ () => focusWithDelay()
16516
+ );
16517
+ watch(
16518
+ () => focusPanelStore.focusPanelActive,
16519
+ (newValue) => {
16520
+ if (newValue) {
16521
+ registerKeyboardListener();
16522
+ } else {
16523
+ unregisterKeyboardListener();
16524
+ }
16525
+ },
16526
+ { immediate: true }
16527
+ );
16528
+ function onResize(event) {
16529
+ focusPanelStore.updateWidth(event.width);
16530
+ }
16531
+ const onResizeThrottle = useThrottleFn(onResize, 10);
15150
16532
  return (_ctx, _cache) => {
15151
- const _component_n8n_icon = N8nIcon;
15152
- const _component_NodeExecuteButton = _sfc_main$V;
15153
- const _component_ParameterOptions = __unplugin_components_2$2;
16533
+ const _component_NodeExecuteButton = _sfc_main$10;
16534
+ const _component_N8nIcon = N8nIcon;
16535
+ const _component_ParameterOptions = __unplugin_components_2$3;
15154
16536
  const _component_ExpressionEditorModalInput = __unplugin_components_3$1;
15155
- return focusPanelActive.value ? (openBlock(), createElementBlock("div", {
16537
+ const _component_CodeNodeEditor = __unplugin_components_4;
16538
+ const _component_HtmlEditor = __unplugin_components_5;
16539
+ const _component_CssEditor = __unplugin_components_6;
16540
+ const _component_SqlEditor = __unplugin_components_7;
16541
+ const _component_JsEditor = __unplugin_components_8;
16542
+ const _component_JsonEditor = __unplugin_components_9;
16543
+ const _component_N8nRadioButtons = N8nRadioButtons;
16544
+ return focusPanelActive.value ? withDirectives((openBlock(), createElementBlock("div", {
15156
16545
  key: 0,
15157
- class: normalizeClass(_ctx.$style.container),
15158
- onKeydown: _cache[3] || (_cache[3] = withModifiers(() => {
16546
+ class: normalizeClass(_ctx.$style.wrapper),
16547
+ onKeydown: _cache[1] || (_cache[1] = withModifiers(() => {
15159
16548
  }, ["stop"]))
15160
16549
  }, [
15161
- createBaseVNode("div", {
15162
- class: normalizeClass(_ctx.$style.header)
15163
- }, [
15164
- createVNode(unref(N8nText), {
15165
- size: "small",
15166
- bold: true
15167
- }, {
15168
- default: withCtx(() => [
15169
- createTextVNode(toDisplayString(unref(locale).baseText("nodeView.focusPanel.title")), 1)
15170
- ]),
15171
- _: 1
15172
- }),
15173
- createBaseVNode("div", {
15174
- class: normalizeClass(_ctx.$style.closeButton),
15175
- onClick: _cache[0] || (_cache[0] = //@ts-ignore
15176
- (...args) => unref(focusPanelStore).closeFocusPanel && unref(focusPanelStore).closeFocusPanel(...args))
15177
- }, [
15178
- createVNode(_component_n8n_icon, {
15179
- icon: "arrow-right",
15180
- color: "text-base"
15181
- })
15182
- ], 2)
15183
- ], 2),
15184
- resolvedParameter.value ? (openBlock(), createElementBlock("div", {
15185
- key: 0,
15186
- class: normalizeClass(_ctx.$style.content)
15187
- }, [
15188
- createBaseVNode("div", {
15189
- class: normalizeClass(_ctx.$style.tabHeader)
15190
- }, [
15191
- createBaseVNode("div", {
15192
- class: normalizeClass(_ctx.$style.tabHeaderText)
15193
- }, [
15194
- createVNode(unref(N8nText), {
15195
- color: "text-dark",
15196
- size: "small"
15197
- }, {
15198
- default: withCtx(() => [
15199
- createTextVNode(toDisplayString(resolvedParameter.value.parameter.displayName), 1)
15200
- ]),
15201
- _: 1
15202
- }),
15203
- createVNode(unref(N8nText), {
15204
- color: "text-base",
15205
- size: "xsmall"
15206
- }, {
15207
- default: withCtx(() => [
15208
- createTextVNode(toDisplayString(resolvedParameter.value.node.name), 1)
15209
- ]),
15210
- _: 1
15211
- })
15212
- ], 2),
15213
- createVNode(_component_NodeExecuteButton, {
15214
- "data-test-id": "node-execute-button",
15215
- "node-name": resolvedParameter.value.node.name,
15216
- tooltip: `Execute ${resolvedParameter.value.node.name}`,
15217
- disabled: !isExecutable2.value,
15218
- size: "small",
15219
- icon: "play",
15220
- square: true,
15221
- "hide-label": true,
15222
- "telemetry-source": "focus"
15223
- }, null, 8, ["node-name", "tooltip", "disabled"])
15224
- ], 2),
15225
- createBaseVNode("div", {
15226
- class: normalizeClass(_ctx.$style.parameterDetailsWrapper)
15227
- }, [
16550
+ createVNode(unref(N8nResizeWrapper), {
16551
+ width: focusPanelWidth.value,
16552
+ "supported-directions": ["left"],
16553
+ "min-width": 300,
16554
+ "max-width": 1e3,
16555
+ "grid-size": 8,
16556
+ style: normalizeStyle({ width: `${focusPanelWidth.value}px`, zIndex: unref(styles).APP_Z_INDEXES.FOCUS_PANEL }),
16557
+ onResize: unref(onResizeThrottle)
16558
+ }, {
16559
+ default: withCtx(() => [
15228
16560
  createBaseVNode("div", {
15229
- class: normalizeClass(_ctx.$style.parameterOptionsWrapper)
15230
- }, [
15231
- _cache[4] || (_cache[4] = createBaseVNode("div", null, null, -1)),
15232
- createVNode(_component_ParameterOptions, {
15233
- parameter: resolvedParameter.value.parameter,
15234
- value: resolvedParameter.value.value,
15235
- "is-read-only": false,
15236
- "onUpdate:modelValue": optionSelected
15237
- }, null, 8, ["parameter", "value"])
15238
- ], 2),
15239
- typeof resolvedParameter.value.value === "string" ? (openBlock(), createElementBlock("div", {
15240
- key: 0,
15241
- class: normalizeClass(_ctx.$style.editorContainer)
16561
+ class: normalizeClass(_ctx.$style.container)
15242
16562
  }, [
15243
- expressionModeEnabled.value ? (openBlock(), createBlock(_component_ExpressionEditorModalInput, {
16563
+ resolvedParameter.value ? (openBlock(), createElementBlock("div", {
15244
16564
  key: 0,
15245
- "model-value": resolvedParameter.value.value,
15246
- class: normalizeClass(_ctx.$style.editor),
15247
- "is-read-only": false,
15248
- path: resolvedParameter.value.parameterPath,
15249
- "data-test-id": "expression-modal-input",
15250
- "target-node-parameter-context": {
15251
- nodeName: resolvedParameter.value.node.name,
15252
- parameterPath: resolvedParameter.value.parameterPath
15253
- },
15254
- onChange: _cache[1] || (_cache[1] = ($event) => valueChanged($event.value))
15255
- }, null, 8, ["model-value", "class", "path", "target-node-parameter-context"])) : (openBlock(), createBlock(unref(N8nInput), {
16565
+ class: normalizeClass(_ctx.$style.content)
16566
+ }, [
16567
+ createBaseVNode("div", {
16568
+ class: normalizeClass(_ctx.$style.tabHeader)
16569
+ }, [
16570
+ createBaseVNode("div", {
16571
+ class: normalizeClass(_ctx.$style.tabHeaderText)
16572
+ }, [
16573
+ createVNode(unref(N8nText), {
16574
+ color: "text-dark",
16575
+ size: "small"
16576
+ }, {
16577
+ default: withCtx(() => [
16578
+ createTextVNode(toDisplayString(resolvedParameter.value.parameter.displayName), 1)
16579
+ ]),
16580
+ _: 1
16581
+ }),
16582
+ createVNode(unref(N8nText), {
16583
+ color: "text-base",
16584
+ size: "xsmall"
16585
+ }, {
16586
+ default: withCtx(() => [
16587
+ createTextVNode(toDisplayString(resolvedParameter.value.node.name), 1)
16588
+ ]),
16589
+ _: 1
16590
+ })
16591
+ ], 2),
16592
+ createBaseVNode("div", {
16593
+ class: normalizeClass(_ctx.$style.buttonWrapper)
16594
+ }, [
16595
+ createVNode(_component_NodeExecuteButton, {
16596
+ "data-test-id": "node-execute-button",
16597
+ "node-name": resolvedParameter.value.node.name,
16598
+ tooltip: `Execute ${resolvedParameter.value.node.name}`,
16599
+ disabled: !isExecutable2.value,
16600
+ size: "small",
16601
+ icon: "play",
16602
+ square: true,
16603
+ "hide-label": true,
16604
+ "telemetry-source": "focus"
16605
+ }, null, 8, ["node-name", "tooltip", "disabled"]),
16606
+ createVNode(_component_N8nIcon, {
16607
+ class: normalizeClass(_ctx.$style.closeButton),
16608
+ icon: "x",
16609
+ color: "text-base",
16610
+ size: "xlarge",
16611
+ onClick: unref(focusPanelStore).closeFocusPanel
16612
+ }, null, 8, ["class", "onClick"])
16613
+ ], 2)
16614
+ ], 2),
16615
+ createBaseVNode("div", {
16616
+ class: normalizeClass(_ctx.$style.parameterDetailsWrapper)
16617
+ }, [
16618
+ createBaseVNode("div", {
16619
+ class: normalizeClass(_ctx.$style.parameterOptionsWrapper)
16620
+ }, [
16621
+ createBaseVNode("div", {
16622
+ class: normalizeClass(_ctx.$style.noExecutionDataTip)
16623
+ }, [
16624
+ !unref(hasNodeRun) && !isNodeExecuting.value ? (openBlock(), createBlock(unref(InfoTip), {
16625
+ key: 0,
16626
+ class: normalizeClass(_ctx.$style.delayedShow),
16627
+ bold: true
16628
+ }, {
16629
+ default: withCtx(() => [
16630
+ createTextVNode(toDisplayString(unref(locale).baseText("nodeView.focusPanel.noExecutionData")), 1)
16631
+ ]),
16632
+ _: 1
16633
+ }, 8, ["class"])) : createCommentVNode("", true)
16634
+ ], 2),
16635
+ isDisplayed.value ? (openBlock(), createBlock(_component_ParameterOptions, {
16636
+ key: 0,
16637
+ parameter: resolvedParameter.value.parameter,
16638
+ value: resolvedParameter.value.value,
16639
+ "is-read-only": isReadOnly.value,
16640
+ "onUpdate:modelValue": optionSelected
16641
+ }, null, 8, ["parameter", "value", "is-read-only"])) : createCommentVNode("", true)
16642
+ ], 2),
16643
+ typeof resolvedParameter.value.value === "string" ? (openBlock(), createElementBlock("div", {
16644
+ key: 0,
16645
+ class: normalizeClass(_ctx.$style.editorContainer)
16646
+ }, [
16647
+ !isDisplayed.value ? (openBlock(), createElementBlock("div", {
16648
+ key: 0,
16649
+ class: normalizeClass([_ctx.$style.content, _ctx.$style.emptyContent])
16650
+ }, [
16651
+ createBaseVNode("div", {
16652
+ class: normalizeClass(_ctx.$style.emptyText)
16653
+ }, [
16654
+ createVNode(unref(N8nText), { color: "text-base" }, {
16655
+ default: withCtx(() => [
16656
+ createTextVNode(toDisplayString(unref(locale).baseText("nodeView.focusPanel.missingParameter")), 1)
16657
+ ]),
16658
+ _: 1
16659
+ })
16660
+ ], 2)
16661
+ ], 2)) : expressionModeEnabled.value ? (openBlock(), createBlock(_component_ExpressionEditorModalInput, {
16662
+ key: 1,
16663
+ ref_key: "inputField",
16664
+ ref: inputField,
16665
+ "model-value": resolvedParameter.value.value,
16666
+ class: normalizeClass(_ctx.$style.editor),
16667
+ "is-read-only": isReadOnly.value,
16668
+ path: resolvedParameter.value.parameterPath,
16669
+ "data-test-id": "expression-modal-input",
16670
+ "target-node-parameter-context": targetNodeParameterContext.value,
16671
+ onChange: _cache[0] || (_cache[0] = ($event) => unref(valueChangedDebounced)($event.value))
16672
+ }, null, 8, ["model-value", "class", "is-read-only", "path", "target-node-parameter-context"])) : ["json", "string"].includes(resolvedParameter.value.parameter.type) ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [
16673
+ editorType.value === "codeNodeEditor" ? (openBlock(), createBlock(_component_CodeNodeEditor, {
16674
+ key: 0,
16675
+ id: resolvedParameter.value.parameterPath,
16676
+ ref_key: "inputField",
16677
+ ref: inputField,
16678
+ class: normalizeClass(_ctx.$style.heightFull),
16679
+ mode: codeEditorMode.value,
16680
+ "model-value": resolvedParameter.value.value,
16681
+ "default-value": resolvedParameter.value.parameter.default,
16682
+ language: editorLanguage.value,
16683
+ "is-read-only": isReadOnly.value,
16684
+ "target-node-parameter-context": targetNodeParameterContext.value,
16685
+ "fill-parent": "",
16686
+ "disable-ask-ai": true,
16687
+ "onUpdate:modelValue": unref(valueChangedDebounced)
16688
+ }, null, 8, ["id", "class", "mode", "model-value", "default-value", "language", "is-read-only", "target-node-parameter-context", "onUpdate:modelValue"])) : editorType.value === "htmlEditor" ? (openBlock(), createBlock(_component_HtmlEditor, {
16689
+ key: 1,
16690
+ ref_key: "inputField",
16691
+ ref: inputField,
16692
+ "model-value": resolvedParameter.value.value,
16693
+ "is-read-only": isReadOnly.value,
16694
+ rows: editorRows.value,
16695
+ "disable-expression-coloring": !isHtmlNode.value,
16696
+ "disable-expression-completions": !isHtmlNode.value,
16697
+ fullscreen: "",
16698
+ "onUpdate:modelValue": unref(valueChangedDebounced)
16699
+ }, null, 8, ["model-value", "is-read-only", "rows", "disable-expression-coloring", "disable-expression-completions", "onUpdate:modelValue"])) : editorType.value === "cssEditor" ? (openBlock(), createBlock(_component_CssEditor, {
16700
+ key: 2,
16701
+ ref_key: "inputField",
16702
+ ref: inputField,
16703
+ "model-value": resolvedParameter.value.value,
16704
+ "is-read-only": isReadOnly.value,
16705
+ rows: editorRows.value,
16706
+ fullscreen: "",
16707
+ "onUpdate:modelValue": unref(valueChangedDebounced)
16708
+ }, null, 8, ["model-value", "is-read-only", "rows", "onUpdate:modelValue"])) : editorType.value === "sqlEditor" ? (openBlock(), createBlock(_component_SqlEditor, {
16709
+ key: 3,
16710
+ ref_key: "inputField",
16711
+ ref: inputField,
16712
+ "model-value": resolvedParameter.value.value,
16713
+ dialect: getTypeOption("sqlDialect"),
16714
+ "is-read-only": isReadOnly.value,
16715
+ rows: editorRows.value,
16716
+ fullscreen: "",
16717
+ "onUpdate:modelValue": unref(valueChangedDebounced)
16718
+ }, null, 8, ["model-value", "dialect", "is-read-only", "rows", "onUpdate:modelValue"])) : editorType.value === "jsEditor" ? (openBlock(), createBlock(_component_JsEditor, {
16719
+ key: 4,
16720
+ ref_key: "inputField",
16721
+ ref: inputField,
16722
+ "model-value": resolvedParameter.value.value,
16723
+ "is-read-only": isReadOnly.value,
16724
+ rows: editorRows.value,
16725
+ "posthog-capture": shouldCaptureForPosthog.value,
16726
+ "fill-parent": "",
16727
+ "onUpdate:modelValue": unref(valueChangedDebounced)
16728
+ }, null, 8, ["model-value", "is-read-only", "rows", "posthog-capture", "onUpdate:modelValue"])) : resolvedParameter.value.parameter.type === "json" ? (openBlock(), createBlock(_component_JsonEditor, {
16729
+ key: 5,
16730
+ ref_key: "inputField",
16731
+ ref: inputField,
16732
+ "model-value": resolvedParameter.value.value,
16733
+ "is-read-only": isReadOnly.value,
16734
+ rows: editorRows.value,
16735
+ fullscreen: "",
16736
+ "fill-parent": "",
16737
+ "onUpdate:modelValue": unref(valueChangedDebounced)
16738
+ }, null, 8, ["model-value", "is-read-only", "rows", "onUpdate:modelValue"])) : (openBlock(), createBlock(unref(N8nInput), {
16739
+ key: 6,
16740
+ ref_key: "inputField",
16741
+ ref: inputField,
16742
+ "model-value": resolvedParameter.value.value,
16743
+ class: normalizeClass(_ctx.$style.editor),
16744
+ readonly: isReadOnly.value,
16745
+ type: "textarea",
16746
+ resize: "none",
16747
+ "onUpdate:modelValue": unref(valueChangedDebounced)
16748
+ }, null, 8, ["model-value", "class", "readonly", "onUpdate:modelValue"]))
16749
+ ], 64)) : createCommentVNode("", true)
16750
+ ], 2)) : createCommentVNode("", true)
16751
+ ], 2)
16752
+ ], 2)) : (openBlock(), createElementBlock("div", {
15256
16753
  key: 1,
15257
- "model-value": resolvedParameter.value.value,
15258
- class: normalizeClass(_ctx.$style.editor),
15259
- type: "textarea",
15260
- resize: "none",
15261
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => valueChanged($event))
15262
- }, null, 8, ["model-value", "class"]))
15263
- ], 2)) : createCommentVNode("", true)
15264
- ], 2)
15265
- ], 2)) : (openBlock(), createElementBlock("div", {
15266
- key: 1,
15267
- class: normalizeClass([_ctx.$style.content, _ctx.$style.emptyContent])
15268
- }, [
15269
- createBaseVNode("div", {
15270
- class: normalizeClass(_ctx.$style.emptyText)
15271
- }, [
15272
- createVNode(unref(N8nText), { color: "text-base" }, {
15273
- default: withCtx(() => [
15274
- createTextVNode(toDisplayString(unref(locale).baseText("nodeView.focusPanel.noParameters")), 1)
15275
- ]),
15276
- _: 1
15277
- })
15278
- ], 2)
15279
- ], 2))
15280
- ], 34)) : createCommentVNode("", true);
16754
+ class: normalizeClass([_ctx.$style.content, _ctx.$style.emptyContent])
16755
+ }, [
16756
+ createBaseVNode("div", {
16757
+ class: normalizeClass(_ctx.$style.emptyText)
16758
+ }, [
16759
+ createBaseVNode("div", {
16760
+ class: normalizeClass(_ctx.$style.focusParameterWrapper)
16761
+ }, [
16762
+ createBaseVNode("div", {
16763
+ class: normalizeClass(_ctx.$style.iconWrapper)
16764
+ }, [
16765
+ createVNode(_component_N8nIcon, {
16766
+ class: normalizeClass(_ctx.$style.forceHover),
16767
+ icon: "panel-right",
16768
+ size: "medium"
16769
+ }, null, 8, ["class"]),
16770
+ createVNode(_component_N8nIcon, {
16771
+ class: normalizeClass(_ctx.$style.pointerIcon),
16772
+ icon: "mouse-pointer",
16773
+ color: "text-dark",
16774
+ size: "large"
16775
+ }, null, 8, ["class"])
16776
+ ], 2),
16777
+ createVNode(_component_N8nIcon, {
16778
+ icon: "ellipsis-vertical",
16779
+ size: "small",
16780
+ color: "text-base"
16781
+ }),
16782
+ createVNode(_component_N8nRadioButtons, {
16783
+ size: "small",
16784
+ "model-value": "expression",
16785
+ disabled: true,
16786
+ options: [
16787
+ { label: unref(locale).baseText("parameterInput.fixed"), value: "fixed" },
16788
+ { label: unref(locale).baseText("parameterInput.expression"), value: "expression" }
16789
+ ]
16790
+ }, null, 8, ["options"])
16791
+ ], 2),
16792
+ createVNode(unref(N8nText), {
16793
+ color: "text-base",
16794
+ size: "medium",
16795
+ bold: true
16796
+ }, {
16797
+ default: withCtx(() => [
16798
+ createTextVNode(toDisplayString(unref(locale).baseText("nodeView.focusPanel.noParameters.title")), 1)
16799
+ ]),
16800
+ _: 1
16801
+ }),
16802
+ createVNode(unref(N8nText), {
16803
+ color: "text-base",
16804
+ size: "small"
16805
+ }, {
16806
+ default: withCtx(() => [
16807
+ createTextVNode(toDisplayString(unref(locale).baseText("nodeView.focusPanel.noParameters.subtitle")), 1)
16808
+ ]),
16809
+ _: 1
16810
+ })
16811
+ ], 2)
16812
+ ], 2))
16813
+ ], 2)
16814
+ ]),
16815
+ _: 1
16816
+ }, 8, ["width", "style", "onResize"])
16817
+ ], 34)), [
16818
+ [vShow, !focusPanelHidden.value]
16819
+ ]) : createCommentVNode("", true);
15281
16820
  };
15282
16821
  }
15283
16822
  });
15284
- const container = "_container_1shes_123";
15285
- const closeButton = "_closeButton_1shes_132";
15286
- const header = "_header_1shes_136";
15287
- const content = "_content_1shes_144";
15288
- const emptyContent = "_emptyContent_1shes_150";
15289
- const emptyText = "_emptyText_1shes_155";
15290
- const tabHeader = "_tabHeader_1shes_158";
15291
- const tabHeaderText = "_tabHeaderText_1shes_165";
15292
- const buttonWrapper = "_buttonWrapper_1shes_170";
15293
- const parameterDetailsWrapper = "_parameterDetailsWrapper_1shes_175";
15294
- const parameterOptionsWrapper = "_parameterOptionsWrapper_1shes_182";
15295
- const editorContainer = "_editorContainer_1shes_186";
15296
- const editor = "_editor_1shes_186";
16823
+ const wrapper$1 = "_wrapper_1ebmp_123";
16824
+ const container = "_container_1ebmp_132";
16825
+ const content = "_content_1ebmp_138";
16826
+ const emptyContent = "_emptyContent_1ebmp_144";
16827
+ const emptyText = "_emptyText_1ebmp_149";
16828
+ const focusParameterWrapper = "_focusParameterWrapper_1ebmp_155";
16829
+ const iconWrapper = "_iconWrapper_1ebmp_162";
16830
+ const pointerIcon = "_pointerIcon_1ebmp_166";
16831
+ const tabHeader = "_tabHeader_1ebmp_176";
16832
+ const tabHeaderText = "_tabHeaderText_1ebmp_183";
16833
+ const buttonWrapper = "_buttonWrapper_1ebmp_188";
16834
+ const parameterDetailsWrapper = "_parameterDetailsWrapper_1ebmp_193";
16835
+ const parameterOptionsWrapper = "_parameterOptionsWrapper_1ebmp_200";
16836
+ const noExecutionDataTip = "_noExecutionDataTip_1ebmp_204";
16837
+ const editorContainer = "_editorContainer_1ebmp_207";
16838
+ const editor = "_editor_1ebmp_207";
16839
+ const delayedShow = "_delayedShow_1ebmp_222";
16840
+ const triggerShow = "_triggerShow_1ebmp_1";
16841
+ const closeButton = "_closeButton_1ebmp_233";
16842
+ const heightFull = "_heightFull_1ebmp_237";
16843
+ const forceHover = "_forceHover_1ebmp_241";
15297
16844
  const style0$2 = {
16845
+ wrapper: wrapper$1,
15298
16846
  container,
15299
- closeButton,
15300
- header,
15301
16847
  content,
15302
16848
  emptyContent,
15303
16849
  emptyText,
16850
+ focusParameterWrapper,
16851
+ iconWrapper,
16852
+ pointerIcon,
15304
16853
  tabHeader,
15305
16854
  tabHeaderText,
15306
16855
  buttonWrapper,
15307
16856
  parameterDetailsWrapper,
15308
16857
  parameterOptionsWrapper,
16858
+ noExecutionDataTip,
15309
16859
  editorContainer,
15310
- editor
16860
+ editor,
16861
+ delayedShow,
16862
+ triggerShow,
16863
+ closeButton,
16864
+ heightFull,
16865
+ forceHover
15311
16866
  };
15312
16867
  const cssModules$2 = {
15313
16868
  "$style": style0$2
@@ -15327,18 +16882,18 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
15327
16882
  setup(__props, { emit: __emit }) {
15328
16883
  const emit = __emit;
15329
16884
  const props = __props;
15330
- const i18n = useI18n();
16885
+ const i18n2 = useI18n();
15331
16886
  const selectableTriggerNodes = computed(
15332
16887
  () => props.triggerNodes.filter((node2) => !node2.disabled && !isChatNode(node2))
15333
16888
  );
15334
16889
  const label2 = computed(() => {
15335
16890
  if (!props.executing) {
15336
- return i18n.baseText("nodeView.runButtonText.executeWorkflow");
16891
+ return i18n2.baseText("nodeView.runButtonText.executeWorkflow");
15337
16892
  }
15338
16893
  if (props.waitingForWebhook) {
15339
- return i18n.baseText("nodeView.runButtonText.waitingForTriggerEvent");
16894
+ return i18n2.baseText("nodeView.runButtonText.waitingForTriggerEvent");
15340
16895
  }
15341
- return i18n.baseText("nodeView.runButtonText.executingWorkflow");
16896
+ return i18n2.baseText("nodeView.runButtonText.executingWorkflow");
15342
16897
  });
15343
16898
  const actions2 = computed(
15344
16899
  () => props.triggerNodes.filter((node2) => !isChatNode(node2)).toSorted((a, b) => {
@@ -15363,8 +16918,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
15363
16918
  return props.getNodeType(node2.type, node2.typeVersion);
15364
16919
  }
15365
16920
  return (_ctx, _cache) => {
15366
- const _component_I18nT = resolveComponent("I18nT");
15367
- const _component_NodeIcon = _sfc_main$U;
16921
+ const _component_NodeIcon = _sfc_main$$;
15368
16922
  return openBlock(), createElementBlock("div", {
15369
16923
  class: normalizeClass([_ctx.$style.component, isSplitButton.value ? _ctx.$style.split : ""])
15370
16924
  }, [
@@ -15397,7 +16951,10 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
15397
16951
  bold: false
15398
16952
  }, {
15399
16953
  default: withCtx(() => [
15400
- createVNode(_component_I18nT, { keypath: "nodeView.runButtonText.from" }, {
16954
+ createVNode(unref(I18nT), {
16955
+ keypath: "nodeView.runButtonText.from",
16956
+ scope: "global"
16957
+ }, {
15401
16958
  nodeName: withCtx(() => [
15402
16959
  createVNode(unref(N8nText), {
15403
16960
  bold: "",
@@ -15453,7 +17010,10 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
15453
17010
  "node-type": getNodeTypeByName(item.id)
15454
17011
  }, null, 8, ["class", "node-type"]),
15455
17012
  createBaseVNode("span", null, [
15456
- createVNode(_component_I18nT, { keypath: "nodeView.runButtonText.from" }, {
17013
+ createVNode(unref(I18nT), {
17014
+ keypath: "nodeView.runButtonText.from",
17015
+ scope: "global"
17016
+ }, {
15457
17017
  nodeName: withCtx(() => [
15458
17018
  createVNode(unref(N8nText), {
15459
17019
  bold: "",
@@ -15571,18 +17131,18 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
15571
17131
  },
15572
17132
  setup(__props) {
15573
17133
  const props = __props;
15574
- const i18n = useI18n();
15575
- const title = computed(
15576
- () => props.stopping ? i18n.baseText("nodeView.stoppingCurrentExecution") : i18n.baseText("nodeView.stopCurrentExecution")
17134
+ const i18n2 = useI18n();
17135
+ const title2 = computed(
17136
+ () => props.stopping ? i18n2.baseText("nodeView.stoppingCurrentExecution") : i18n2.baseText("nodeView.stopCurrentExecution")
15577
17137
  );
15578
17138
  return (_ctx, _cache) => {
15579
- const _component_N8nIconButton = _sfc_main$S;
17139
+ const _component_N8nIconButton = _sfc_main$Y;
15580
17140
  return openBlock(), createBlock(_component_N8nIconButton, {
15581
17141
  icon: "square",
15582
17142
  size: "large",
15583
17143
  class: "stop-execution",
15584
17144
  type: "secondary",
15585
- title: title.value,
17145
+ title: title2.value,
15586
17146
  loading: _ctx.stopping,
15587
17147
  "data-test-id": "stop-execution-button"
15588
17148
  }, null, 8, ["title", "loading"]);
@@ -15592,14 +17152,14 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
15592
17152
  const _sfc_main$3 = /* @__PURE__ */ defineComponent({
15593
17153
  __name: "CanvasStopWaitingForWebhookButton",
15594
17154
  setup(__props) {
15595
- const i18n = useI18n();
17155
+ const i18n2 = useI18n();
15596
17156
  return (_ctx, _cache) => {
15597
- const _component_N8nIconButton = _sfc_main$S;
17157
+ const _component_N8nIconButton = _sfc_main$Y;
15598
17158
  return openBlock(), createBlock(_component_N8nIconButton, {
15599
17159
  class: "stop-execution",
15600
17160
  icon: "square",
15601
17161
  size: "large",
15602
- title: unref(i18n).baseText("nodeView.stopWaitingForWebhookCall"),
17162
+ title: unref(i18n2).baseText("nodeView.stopWaitingForWebhookCall"),
15603
17163
  type: "secondary",
15604
17164
  "data-test-id": "stop-execution-waiting-for-webhook-button"
15605
17165
  }, null, 8, ["title"]);
@@ -15651,21 +17211,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
15651
17211
  __name: "NodeView",
15652
17212
  setup(__props) {
15653
17213
  const LazyNodeCreation = defineAsyncComponent(
15654
- async () => await __vitePreload(() => import("./NodeCreation-DCV9QVeh.js").then((n) => n.N), true ? __vite__mapDeps([0,1,2,3]) : void 0)
17214
+ async () => await __vitePreload(() => import("./NodeCreation-CVbCKnet.js").then((n) => n.N), true ? __vite__mapDeps([0,1,2,3]) : void 0)
15655
17215
  );
15656
17216
  const LazyNodeDetailsView = defineAsyncComponent(
15657
- async () => await __vitePreload(() => import("./NodeDetailsView-D7qedYA0.js"), true ? __vite__mapDeps([4,1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]) : void 0)
17217
+ async () => await __vitePreload(() => import("./NodeDetailsView-KFidngJi.js"), true ? __vite__mapDeps([4,1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]) : void 0)
15658
17218
  );
15659
17219
  const LazyNodeDetailsViewV2 = defineAsyncComponent(
15660
- async () => await __vitePreload(() => import("./NodeDetailsViewV2-BAkPjDo5.js"), true ? __vite__mapDeps([25,1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,26]) : void 0)
17220
+ async () => await __vitePreload(() => import("./NodeDetailsViewV2-BL4KKqW-.js"), true ? __vite__mapDeps([26,1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,27]) : void 0)
15661
17221
  );
15662
17222
  const LazySetupWorkflowCredentialsButton = defineAsyncComponent(
15663
- async () => await __vitePreload(() => import("./SetupWorkflowCredentialsButton-ujybntOa.js"), true ? __vite__mapDeps([27,1,2]) : void 0)
17223
+ async () => await __vitePreload(() => import("./SetupWorkflowCredentialsButton-Pzrxag-k.js"), true ? __vite__mapDeps([28,1,2]) : void 0)
15664
17224
  );
15665
17225
  const $style = useCssModule();
15666
17226
  const router = useRouter();
15667
17227
  const route = useRoute();
15668
- const i18n = useI18n();
17228
+ const i18n2 = useI18n();
15669
17229
  const telemetry = useTelemetry();
15670
17230
  const externalHooks = useExternalHooks();
15671
17231
  const toast = useToast();
@@ -15700,6 +17260,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
15700
17260
  const posthogStore = usePostHog();
15701
17261
  const agentRequestStore = useAgentRequestStore();
15702
17262
  const logsStore = useLogsStore();
17263
+ const aiTemplatesStarterCollectionStore = useAITemplatesStarterCollectionStore();
15703
17264
  const { addBeforeUnloadEventBindings, removeBeforeUnloadEventBindings } = useBeforeUnload({
15704
17265
  route
15705
17266
  });
@@ -15813,8 +17374,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
15813
17374
  } catch (error2) {
15814
17375
  toast.showError(
15815
17376
  error2,
15816
- i18n.baseText("nodeView.showError.mounted1.title"),
15817
- i18n.baseText("nodeView.showError.mounted1.message") + ":"
17377
+ i18n2.baseText("nodeView.showError.mounted1.title"),
17378
+ i18n2.baseText("nodeView.showError.mounted1.message") + ":"
15818
17379
  );
15819
17380
  return;
15820
17381
  }
@@ -15859,8 +17420,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
15859
17420
  break;
15860
17421
  default:
15861
17422
  toast.showError(
15862
- new Error(i18n.baseText("nodeView.couldntLoadWorkflow.invalidWorkflowObject")),
15863
- i18n.baseText("nodeView.couldntImportWorkflow")
17423
+ new Error(i18n2.baseText("nodeView.couldntLoadWorkflow.invalidWorkflowObject")),
17424
+ i18n2.baseText("nodeView.couldntImportWorkflow")
15864
17425
  );
15865
17426
  await router.replace({ name: VIEWS.NEW_WORKFLOW });
15866
17427
  }
@@ -15935,6 +17496,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
15935
17496
  if (workflowData.meta?.onboardingId) {
15936
17497
  trackOpenWorkflowFromOnboardingTemplate();
15937
17498
  }
17499
+ if (workflowData.meta?.templateId?.startsWith("035_template_onboarding")) {
17500
+ aiTemplatesStarterCollectionStore.trackUserOpenedWorkflow(
17501
+ workflowData.meta.templateId.split("-").pop() ?? ""
17502
+ );
17503
+ }
15938
17504
  await projectsStore.setProjectNavActiveIdByWorkflowHomeProject(workflowData.homeProject);
15939
17505
  } catch (error2) {
15940
17506
  if (error2.httpStatusCode === 404) {
@@ -15949,7 +17515,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
15949
17515
  params: { entityType: "workflow" }
15950
17516
  });
15951
17517
  }
15952
- toast.showError(error2, i18n.baseText("openWorkflow.workflowNotFoundError"));
17518
+ toast.showError(error2, i18n2.baseText("openWorkflow.workflowNotFoundError"));
15953
17519
  void router.push({
15954
17520
  name: VIEWS.NEW_WORKFLOW
15955
17521
  });
@@ -15984,15 +17550,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
15984
17550
  async function openTemplateFromWorkflowJSON(workflow) {
15985
17551
  if (!workflow.nodes || !workflow.connections) {
15986
17552
  toast.showError(
15987
- new Error(i18n.baseText("nodeView.couldntLoadWorkflow.invalidWorkflowObject")),
15988
- i18n.baseText("nodeView.couldntImportWorkflow")
17553
+ new Error(i18n2.baseText("nodeView.couldntLoadWorkflow.invalidWorkflowObject")),
17554
+ i18n2.baseText("nodeView.couldntImportWorkflow")
15989
17555
  );
15990
17556
  await router.replace({ name: VIEWS.NEW_WORKFLOW });
15991
17557
  return;
15992
17558
  }
15993
17559
  resetWorkspace();
15994
17560
  canvasStore.startLoading();
15995
- canvasStore.setLoadingText(i18n.baseText("nodeView.loadingTemplate"));
17561
+ canvasStore.setLoadingText(i18n2.baseText("nodeView.loadingTemplate"));
15996
17562
  workflowsStore.currentWorkflowExecutions = [];
15997
17563
  executionsStore.activeExecution = null;
15998
17564
  isBlankRedirect.value = true;
@@ -16010,7 +17576,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16010
17576
  async function openWorkflowTemplate(templateId) {
16011
17577
  resetWorkspace();
16012
17578
  canvasStore.startLoading();
16013
- canvasStore.setLoadingText(i18n.baseText("nodeView.loadingTemplate"));
17579
+ canvasStore.setLoadingText(i18n2.baseText("nodeView.loadingTemplate"));
16014
17580
  workflowsStore.currentWorkflowExecutions = [];
16015
17581
  executionsStore.activeExecution = null;
16016
17582
  let data;
@@ -16019,13 +17585,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16019
17585
  data = await templatesStore.getFixedWorkflowTemplate(templateId);
16020
17586
  if (!data) {
16021
17587
  throw new Error(
16022
- i18n.baseText("nodeView.workflowTemplateWithIdCouldNotBeFound", {
17588
+ i18n2.baseText("nodeView.workflowTemplateWithIdCouldNotBeFound", {
16023
17589
  interpolate: { templateId }
16024
17590
  })
16025
17591
  );
16026
17592
  }
16027
17593
  } catch (error2) {
16028
- toast.showError(error2, i18n.baseText("nodeView.couldntImportWorkflow"));
17594
+ toast.showError(error2, i18n2.baseText("nodeView.couldntImportWorkflow"));
16029
17595
  await router.replace({ name: VIEWS.NEW_WORKFLOW });
16030
17596
  return;
16031
17597
  }
@@ -16128,7 +17694,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16128
17694
  }
16129
17695
  async function onCopyNodes(ids) {
16130
17696
  await copyNodes(ids);
16131
- toast.showMessage({ title: i18n.baseText("generic.copiedToClipboard"), type: "success" });
17697
+ toast.showMessage({ title: i18n2.baseText("generic.copiedToClipboard"), type: "success" });
16132
17698
  }
16133
17699
  async function onClipboardPaste(plainTextData) {
16134
17700
  if (getNodeViewTab(route) !== MAIN_HEADER_TABS.WORKFLOW || !keyBindingsEnabled.value || !checkIfEditingIsAllowed()) {
@@ -16137,16 +17703,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16137
17703
  let workflowData = null;
16138
17704
  if (plainTextData.match(VALID_WORKFLOW_IMPORT_URL_REGEX)) {
16139
17705
  const importConfirm = await message.confirm(
16140
- i18n.baseText("nodeView.confirmMessage.onClipboardPasteEvent.message", {
17706
+ i18n2.baseText("nodeView.confirmMessage.onClipboardPasteEvent.message", {
16141
17707
  interpolate: { plainTextData }
16142
17708
  }),
16143
- i18n.baseText("nodeView.confirmMessage.onClipboardPasteEvent.headline"),
17709
+ i18n2.baseText("nodeView.confirmMessage.onClipboardPasteEvent.headline"),
16144
17710
  {
16145
17711
  type: "warning",
16146
- confirmButtonText: i18n.baseText(
17712
+ confirmButtonText: i18n2.baseText(
16147
17713
  "nodeView.confirmMessage.onClipboardPasteEvent.confirmButtonText"
16148
17714
  ),
16149
- cancelButtonText: i18n.baseText(
17715
+ cancelButtonText: i18n2.baseText(
16150
17716
  "nodeView.confirmMessage.onClipboardPasteEvent.cancelButtonText"
16151
17717
  )
16152
17718
  }
@@ -16212,7 +17778,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16212
17778
  async function onSaveFromWithinNDV() {
16213
17779
  if (ndvStore.activeNodeName) {
16214
17780
  toast.showMessage({
16215
- title: i18n.baseText("generic.workflowSaved"),
17781
+ title: i18n2.baseText("generic.workflowSaved"),
16216
17782
  type: "success"
16217
17783
  });
16218
17784
  }
@@ -16234,17 +17800,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16234
17800
  if (!keyBindingsEnabled.value || document.querySelector(".rename-prompt")) return;
16235
17801
  try {
16236
17802
  const promptResponsePromise = message.prompt(
16237
- i18n.baseText("nodeView.prompt.newName") + ":",
16238
- i18n.baseText("nodeView.prompt.renameNode") + `: ${currentName}`,
17803
+ i18n2.baseText("nodeView.prompt.newName") + ":",
17804
+ i18n2.baseText("nodeView.prompt.renameNode") + `: ${currentName}`,
16239
17805
  {
16240
17806
  customClass: "rename-prompt",
16241
- confirmButtonText: i18n.baseText("nodeView.prompt.rename"),
16242
- cancelButtonText: i18n.baseText("nodeView.prompt.cancel"),
16243
- inputErrorMessage: i18n.baseText("nodeView.prompt.invalidName"),
17807
+ confirmButtonText: i18n2.baseText("nodeView.prompt.rename"),
17808
+ cancelButtonText: i18n2.baseText("nodeView.prompt.cancel"),
17809
+ inputErrorMessage: i18n2.baseText("nodeView.prompt.invalidName"),
16244
17810
  inputValue: currentName,
16245
17811
  inputValidator: (value) => {
16246
17812
  if (!value.trim()) {
16247
- return i18n.baseText("nodeView.prompt.invalidName");
17813
+ return i18n2.baseText("nodeView.prompt.invalidName");
16248
17814
  }
16249
17815
  return true;
16250
17816
  }
@@ -16284,6 +17850,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16284
17850
  revalidateNodeOutputConnections(id2);
16285
17851
  }
16286
17852
  function onClickNodeAdd(source, sourceHandle) {
17853
+ if (isFocusPanelFeatureEnabled.value && focusPanelStore.focusPanelActive) {
17854
+ focusPanelStore.hideFocusPanel();
17855
+ }
16287
17856
  nodeCreatorStore.openNodeCreatorForConnectingNode({
16288
17857
  connection: {
16289
17858
  source,
@@ -16354,13 +17923,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16354
17923
  async function onImportWorkflowDataEvent(data) {
16355
17924
  const workflowData = data.data;
16356
17925
  await importWorkflowData(workflowData, "file", {
16357
- viewport: viewportBoundaries.value
17926
+ viewport: viewportBoundaries.value,
17927
+ regenerateIds: data.regenerateIds === true || data.regenerateIds === void 0
16358
17928
  });
16359
17929
  fitView();
16360
17930
  selectNodes(workflowData.nodes?.map((node2) => node2.id) ?? []);
16361
17931
  if (data.tidyUp) {
17932
+ const nodesIdsToTidyUp = data.nodesIdsToTidyUp;
16362
17933
  setTimeout(() => {
16363
- canvasEventBus.emit("tidyUp", { source: "import-workflow-data" });
17934
+ canvasEventBus.emit("tidyUp", {
17935
+ source: "import-workflow-data",
17936
+ nodeIdsFilter: nodesIdsToTidyUp
17937
+ });
16364
17938
  }, 0);
16365
17939
  }
16366
17940
  }
@@ -16435,27 +18009,30 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16435
18009
  async function onRevertAddNode({ node: node2 }) {
16436
18010
  await revertAddNode(node2.name);
16437
18011
  }
16438
- async function onSwitchActiveNode(nodeName) {
18012
+ function onSwitchActiveNode(nodeName) {
16439
18013
  const node2 = workflowsStore.getNodeByName(nodeName);
16440
18014
  if (!node2) return;
16441
18015
  setNodeActiveByName(nodeName);
16442
18016
  selectNodes([node2.id]);
16443
18017
  }
16444
- async function onOpenSelectiveNodeCreator(node2, connectionType2, connectionIndex = 0) {
18018
+ function onOpenSelectiveNodeCreator(node2, connectionType2, connectionIndex = 0) {
16445
18019
  nodeCreatorStore.openSelectiveNodeCreator({ node: node2, connectionType: connectionType2, connectionIndex });
16446
18020
  }
16447
- function onOpenNodeCreatorForTriggerNodes(source) {
16448
- nodeCreatorStore.openNodeCreatorForTriggerNodes(source);
16449
- }
16450
- function onOpenNodeCreatorFromCanvas(source) {
16451
- onToggleNodeCreator({ createNodeActive: true, source });
16452
- }
16453
18021
  function onToggleNodeCreator(options) {
16454
18022
  nodeCreatorStore.setNodeCreatorState(options);
18023
+ if (isFocusPanelFeatureEnabled.value && focusPanelStore.focusPanelActive) {
18024
+ focusPanelStore.hideFocusPanel(options.createNodeActive);
18025
+ }
16455
18026
  if (!options.createNodeActive && !options.hasAddedNodes) {
16456
18027
  uiStore.resetLastInteractedWith();
16457
18028
  }
16458
18029
  }
18030
+ function onOpenNodeCreatorFromCanvas(source) {
18031
+ onToggleNodeCreator({ createNodeActive: true, source });
18032
+ }
18033
+ function onOpenNodeCreatorForTriggerNodes(source) {
18034
+ nodeCreatorStore.openNodeCreatorForTriggerNodes(source);
18035
+ }
16459
18036
  function onToggleFocusPanel() {
16460
18037
  if (!isFocusPanelFeatureEnabled.value) {
16461
18038
  return;
@@ -16465,6 +18042,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16465
18042
  function closeNodeCreator() {
16466
18043
  if (nodeCreatorStore.isCreateNodeActive) {
16467
18044
  nodeCreatorStore.isCreateNodeActive = false;
18045
+ if (isFocusPanelFeatureEnabled.value && focusPanelStore.focusPanelActive) {
18046
+ focusPanelStore.hideFocusPanel(false);
18047
+ }
16468
18048
  }
16469
18049
  }
16470
18050
  function onCreateSticky() {
@@ -16527,11 +18107,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16527
18107
  telemetry.track("User clicked execute node button", telemetryPayload);
16528
18108
  void externalHooks.run("nodeView.onRunNode", telemetryPayload);
16529
18109
  }
16530
- async function onOpenExecution(executionId) {
18110
+ async function onOpenExecution(executionId, nodeId) {
16531
18111
  canvasStore.startLoading();
16532
18112
  resetWorkspace();
16533
18113
  await initializeData();
16534
- const data = await openExecution(executionId);
18114
+ const data = await openExecution(executionId, nodeId);
16535
18115
  if (!data) {
16536
18116
  return;
16537
18117
  }
@@ -16570,7 +18150,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16570
18150
  console.error(`Execution ${data.id} error:`);
16571
18151
  console.error(data.data.resultData.error.stack);
16572
18152
  toast.showMessage({
16573
- title: i18n.baseText("nodeView.showError.workflowError"),
18153
+ title: i18n2.baseText("nodeView.showError.workflowError"),
16574
18154
  message: data.data.resultData.error.message,
16575
18155
  type: "error",
16576
18156
  duration: 0
@@ -16581,7 +18161,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16581
18161
  function onExecutionOpenedWithWaitTill(data) {
16582
18162
  if (data.waitTill) {
16583
18163
  toast.showMessage({
16584
- title: i18n.baseText("nodeView.thisExecutionHasntFinishedYet"),
18164
+ title: i18n2.baseText("nodeView.thisExecutionHasntFinishedYet"),
16585
18165
  message: h(_sfc_main$2),
16586
18166
  type: "warning",
16587
18167
  duration: 0
@@ -16706,17 +18286,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16706
18286
  window.top.postMessage(
16707
18287
  JSON.stringify({
16708
18288
  command: "error",
16709
- message: i18n.baseText("openWorkflow.workflowImportError")
18289
+ message: i18n2.baseText("openWorkflow.workflowImportError")
16710
18290
  }),
16711
18291
  "*"
16712
18292
  );
16713
18293
  }
16714
- toast.showError(e, i18n.baseText("openWorkflow.workflowImportError"));
18294
+ toast.showError(e, i18n2.baseText("openWorkflow.workflowImportError"));
16715
18295
  }
16716
18296
  } else if (json2 && json2.command === "openExecution") {
16717
18297
  try {
16718
18298
  isProductionExecutionPreview.value = json2.executionMode !== "manual" && json2.executionMode !== "evaluation";
16719
- await onOpenExecution(json2.executionId);
18299
+ await onOpenExecution(json2.executionId, json2.nodeId);
16720
18300
  canOpenNDV.value = json2.canOpenNDV ?? true;
16721
18301
  hideNodeIssues.value = json2.hideNodeIssues ?? false;
16722
18302
  isExecutionPreview.value = true;
@@ -16725,13 +18305,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16725
18305
  window.top.postMessage(
16726
18306
  JSON.stringify({
16727
18307
  command: "error",
16728
- message: i18n.baseText("nodeView.showError.openExecution.title")
18308
+ message: i18n2.baseText("nodeView.showError.openExecution.title")
16729
18309
  }),
16730
18310
  "*"
16731
18311
  );
16732
18312
  }
16733
18313
  toast.showMessage({
16734
- title: i18n.baseText("nodeView.showError.openExecution.title"),
18314
+ title: i18n2.baseText("nodeView.showError.openExecution.title"),
16735
18315
  message: e.message,
16736
18316
  type: "error"
16737
18317
  });
@@ -16754,10 +18334,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16754
18334
  if (isReadOnlyRoute.value || isReadOnlyEnvironment.value) {
16755
18335
  const messageContext = isReadOnlyRoute.value ? "executions" : "workflows";
16756
18336
  readOnlyNotification.value = toast.showMessage({
16757
- title: i18n.baseText(
18337
+ title: i18n2.baseText(
16758
18338
  isReadOnlyEnvironment.value ? `readOnlyEnv.showMessage.${messageContext}.title` : "readOnly.showMessage.executions.title"
16759
18339
  ),
16760
- message: i18n.baseText(
18340
+ message: i18n2.baseText(
16761
18341
  isReadOnlyEnvironment.value ? `readOnlyEnv.showMessage.${messageContext}.message` : "readOnly.showMessage.executions.message"
16762
18342
  ),
16763
18343
  type: "info"
@@ -16870,8 +18450,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16870
18450
  setNodeActive(nodeUi.id);
16871
18451
  } else {
16872
18452
  toast.showToast({
16873
- title: i18n.baseText("nodeView.showMessage.ndvUrl.missingNodes.title"),
16874
- message: i18n.baseText("nodeView.showMessage.ndvUrl.missingNodes.content"),
18453
+ title: i18n2.baseText("nodeView.showMessage.ndvUrl.missingNodes.title"),
18454
+ message: i18n2.baseText("nodeView.showMessage.ndvUrl.missingNodes.content"),
16875
18455
  type: "warning"
16876
18456
  });
16877
18457
  void router.replace({
@@ -17106,18 +18686,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
17106
18686
  isLogsPanelOpen.value ? (openBlock(), createBlock(_sfc_main$1, {
17107
18687
  key: 0,
17108
18688
  type: "tertiary",
17109
- label: unref(i18n).baseText("chat.hide"),
18689
+ label: unref(i18n2).baseText("chat.hide"),
17110
18690
  class: normalizeClass(unref($style).chatButton),
17111
18691
  onClick: _cache[1] || (_cache[1] = ($event) => unref(logsStore).toggleOpen(false))
17112
18692
  }, null, 8, ["label", "class"])) : (openBlock(), createBlock(KeyboardShortcutTooltip, {
17113
18693
  key: 1,
17114
- label: unref(i18n).baseText("chat.open"),
18694
+ label: unref(i18n2).baseText("chat.open"),
17115
18695
  shortcut: { keys: ["c"] }
17116
18696
  }, {
17117
18697
  default: withCtx(() => [
17118
18698
  createVNode(_sfc_main$1, {
17119
18699
  type: isRunWorkflowButtonVisible.value ? "secondary" : "primary",
17120
- label: unref(i18n).baseText("chat.open"),
18700
+ label: unref(i18n2).baseText("chat.open"),
17121
18701
  class: normalizeClass(unref($style).chatButton),
17122
18702
  onClick: onOpenChat
17123
18703
  }, null, 8, ["type", "label", "class"])
@@ -17142,7 +18722,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
17142
18722
  class: normalizeClass(unref($style).readOnlyEnvironmentNotification)
17143
18723
  }, {
17144
18724
  default: withCtx(() => [
17145
- createTextVNode(toDisplayString(unref(i18n).baseText("readOnlyEnv.cantEditOrRun")), 1)
18725
+ createTextVNode(toDisplayString(unref(i18n2).baseText("readOnlyEnv.cantEditOrRun")), 1)
17146
18726
  ]),
17147
18727
  _: 1
17148
18728
  }, 8, ["class"])) : createCommentVNode("", true),
@@ -17196,8 +18776,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
17196
18776
  }, 8, ["id", "workflow", "workflow-object", "fallback-nodes", "show-fallback-nodes", "event-bus", "read-only", "executing", "key-bindings", "onUpdate:logs:inputOpen", "onUpdate:logs:outputOpen", "onUpdate:hasRangeSelection"])) : createCommentVNode("", true),
17197
18777
  isFocusPanelFeatureEnabled.value ? (openBlock(), createBlock(FocusPanel, {
17198
18778
  key: 1,
17199
- executable: !isCanvasReadOnly.value
17200
- }, null, 8, ["executable"])) : createCommentVNode("", true)
18779
+ "is-canvas-read-only": isCanvasReadOnly.value,
18780
+ onSaveKeyboardShortcut: onSaveWorkflow
18781
+ }, null, 8, ["is-canvas-read-only"])) : createCommentVNode("", true)
17201
18782
  ], 2);
17202
18783
  };
17203
18784
  }
@@ -17223,8 +18804,12 @@ const NodeView$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
17223
18804
  default: NodeView
17224
18805
  }, Symbol.toStringTag, { value: "Module" }));
17225
18806
  export {
18807
+ CommunityNodeFooter as C,
18808
+ InputPanel as I,
17226
18809
  NodeSettings as N,
18810
+ __unplugin_components_2 as _,
17227
18811
  useNodeDocsUrl as a,
17228
- NodeView$1 as b,
17229
- useExperimentalNdvStore as u
18812
+ _sfc_main$z as b,
18813
+ NodeView$1 as c,
18814
+ useExecutionData as u
17230
18815
  };