n8n-editor-ui 1.101.0 → 1.102.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 (132) hide show
  1. package/dist/assets/{ActionDropdown-BujIG0Jq.js → ActionDropdown-D-JmCYsp.js} +2 -2
  2. package/dist/assets/{AnimatedSpinner-B5cpb6Fs.js → AnimatedSpinner-BiuDg2x2.js} +1 -1
  3. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-BPigGQTI.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-Bp194Fz4.js} +1 -1
  4. package/dist/assets/{AuthView-BOTPYtpM.js → AuthView-DF-20OPE.js} +2 -2
  5. package/dist/assets/{ChangePasswordView-DbeC55bz.js → ChangePasswordView-DSn8-M1-.js} +3 -3
  6. package/dist/assets/CollectionParameter-Bz5DzZqs.js +4 -0
  7. package/dist/assets/{CredentialsView-DUh5K-2r.js → CredentialsView-IQx76pD4.js} +8 -8
  8. package/dist/assets/{DemoFooter-BXPfbNJE.js → DemoFooter-49OiW0k2.js} +8 -7
  9. package/dist/assets/{EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-CDDQIxv5.js → EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-FNKd4r6R.js} +1 -1
  10. package/dist/assets/{EntityNotFound-CBUuOOYw.js → EntityNotFound-DScKsOtg.js} +1 -1
  11. package/dist/assets/{EntityUnAuthorised-7xgN3ECo.js → EntityUnAuthorised-DweZmhgI.js} +1 -1
  12. package/dist/assets/{ErrorView-BVfcsoOa.js → ErrorView-CNDVS4gm.js} +4 -4
  13. package/dist/assets/{EvaluationsRootView-BjrpKDj-.js → EvaluationsRootView-81SdPChp.js} +19 -27
  14. package/dist/assets/{EvaluationsView-DdmFZCH-.js → EvaluationsView-BAyQWPF9.js} +7 -7
  15. package/dist/assets/{ExecutionsTime-kMSlccIr.css → ExecutionsTime-DkME6I3E.css} +26 -19
  16. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-Ctx5Ybnr.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-Qw7S05EC.js} +23 -21
  17. package/dist/assets/{ExecutionsView-8BjGHy2I.js → ExecutionsView--yDyvnL8.js} +15 -16
  18. package/dist/assets/{ExecutionsView-DSsowKj4.css → ExecutionsView-BHBePl1_.css} +1 -1
  19. package/dist/assets/{FileSaver.min-C5wzcK59.js → FileSaver.min-CeGSkamF.js} +1 -1
  20. package/dist/assets/{FixedCollectionParameter-DjlaZyUQ.css → FixedCollectionParameter-CEzpjeQZ.css} +18 -18
  21. package/dist/assets/{FixedCollectionParameter-BrPQ5Vay.js → FixedCollectionParameter-tgbkzIuD.js} +7 -7
  22. package/dist/assets/{ForgotMyPasswordView-L0afefc1.js → ForgotMyPasswordView-CVwKac4K.js} +3 -3
  23. package/dist/assets/{InfoAccordion-CEk3XG5b.js → InfoAccordion-75IQV-_q.js} +1 -1
  24. package/dist/assets/{InsightsChartAverageRuntime-BrwBWr_R.js → InsightsChartAverageRuntime-C4C4zghF.js} +4 -4
  25. package/dist/assets/{InsightsChartFailed-ILKWvikG.js → InsightsChartFailed-DyhWE17m.js} +4 -4
  26. package/dist/assets/{InsightsChartFailureRate-D1AVYwU7.js → InsightsChartFailureRate-B09GcGvY.js} +4 -4
  27. package/dist/assets/{InsightsChartTimeSaved-D49Rwn6-.js → InsightsChartTimeSaved-DGzFyou3.js} +4 -4
  28. package/dist/assets/{InsightsChartTotal-Bs-pUgA3.js → InsightsChartTotal-fIUzF41H.js} +4 -4
  29. package/dist/assets/{InsightsDashboard-BIC4uZpW.js → InsightsDashboard-Qhv7fScv.js} +10 -10
  30. package/dist/assets/{InsightsPaywall-DmwFI-6e.js → InsightsPaywall-C3-la0kD.js} +1 -1
  31. package/dist/assets/{InsightsSummary-D9lEzWNT.js → InsightsSummary-CJgV5s0y.js} +14 -13
  32. package/dist/assets/{InsightsSummary-DzGQpM5h.css → InsightsSummary-DTFIhBF3.css} +25 -27
  33. package/dist/assets/InsightsTableWorkflows-P5OHXu1Y.js +177 -0
  34. package/dist/assets/{Logo-DNxOhbuV.js → Logo-8MWdHUz0.js} +1 -1
  35. package/dist/assets/{LogsPanel-DvWnD7rJ.js → LogsPanel-BabpRONg.js} +279 -212
  36. package/dist/assets/{LogsPanel-D5R6F35L.css → LogsPanel-Bvy4ANV7.css} +106 -61
  37. package/dist/assets/{MainHeader-BVHIuVVT.js → MainHeader-0ppftO6b.js} +10 -10
  38. package/dist/assets/{MainSidebar-CEHr93uL.js → MainSidebar-BnXOkYK4.js} +23 -16
  39. package/dist/assets/{MainSidebar-DqrgzqvZ.css → MainSidebar-CaLHZgDB.css} +2 -2
  40. package/dist/assets/{InsightsTableWorkflows-CC8t-sAL.js → N8nDataTableServer-Cx18Zd1O.js} +9 -181
  41. package/dist/assets/{NodeCreation-Bq5626Ha.js → NodeCreation-DKbc91uY.js} +7 -7
  42. package/dist/assets/{NodeCreator-Dk0sNXFZ.css → NodeCreator-DWE25utr.css} +51 -58
  43. package/dist/assets/{NodeCreator-D7xT3ogw.js → NodeCreator-xRYJHbTG.js} +118 -112
  44. package/dist/assets/NodeDetailsView-CPVE5S8P.js +1155 -0
  45. package/dist/assets/NodeDetailsView-CaTI-1QQ.css +668 -0
  46. package/dist/assets/NodeDetailsViewV2-5pxsZwAo.js +1061 -0
  47. package/dist/assets/NodeDetailsViewV2-BxNx4ZUM.css +506 -0
  48. package/dist/assets/{NodeView-DL8JxnMc.css → NodeView-Cgf2HuDk.css} +263 -110
  49. package/dist/assets/{NodeView-DoR46iB5.js → NodeView-DYjZmKNE.js} +580 -409
  50. package/dist/assets/{ProjectHeader-DSKKwiQ0.js → ProjectHeader-e8JosKaj.js} +5 -5
  51. package/dist/assets/{ProjectSettings-C3sMIDHh.js → ProjectSettings-DNKcVLkd.js} +201 -25
  52. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-cnANEo9o.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-EuKDPqQH.js} +3 -3
  53. package/dist/assets/{ResourcesListLayout-BVbjqFbc.js → ResourcesListLayout-C4y0iPmg.js} +4 -4
  54. package/dist/assets/{RunData-DG20AzLo.js → RunData-D3xzjO33.js} +124 -99
  55. package/dist/assets/{RunData-B5_okvCv.css → RunData-DuKNwYqe.css} +99 -85
  56. package/dist/assets/{RunDataJson-7okRLIES.js → RunDataJson-D5YFtOcJ.js} +16 -20
  57. package/dist/assets/{RunDataJsonActions-DrgwFS0W.css → RunDataJsonActions-B2jW3_UG.css} +3 -5
  58. package/dist/assets/{RunDataJsonActions-Qkg8HmUd.js → RunDataJsonActions-BWvs4coo.js} +15 -16
  59. package/dist/assets/{RunDataParsedAiContent-DRO1Bjsh.js → RunDataParsedAiContent-BYISiW-I.js} +12 -12
  60. package/dist/assets/{RunDataParsedAiContent-9EEUzCKp.css → RunDataParsedAiContent-wfIiKsq7.css} +16 -13
  61. package/dist/assets/{RunDataSearch-R6qtl0Jf.css → RunDataSearch-2eEalFoi.css} +8 -7
  62. package/dist/assets/{RunDataSearch-D5eQUWvi.js → RunDataSearch-oo3_BoLt.js} +4 -4
  63. package/dist/assets/{RunDataTable-CJmmTtEp.js → RunDataTable-6rCOQNCX.js} +126 -54
  64. package/dist/assets/{RunDataTable-CykHIwNT.css → RunDataTable-CTBtmQIs.css} +84 -44
  65. package/dist/assets/{SamlOnboarding-ClxYfm5z.js → SamlOnboarding-BG-gGcbY.js} +3 -3
  66. package/dist/assets/{SettingsApiView-Ds7FYVrN.js → SettingsApiView-Bmlbp7pD.js} +1 -1
  67. package/dist/assets/{SettingsCommunityNodesView-QKvLs6gi.js → SettingsCommunityNodesView-4DWd4UiC.js} +32 -6
  68. package/dist/assets/{SettingsExternalSecrets-d1KDgYYp.css → SettingsExternalSecrets-BAX9ENm9.css} +9 -6
  69. package/dist/assets/{SettingsExternalSecrets-DGRdvsMy.js → SettingsExternalSecrets-hpUcipWw.js} +17 -13
  70. package/dist/assets/{SettingsLdapView-C_LJwixk.js → SettingsLdapView-7p7L95v9.js} +1 -1
  71. package/dist/assets/{SettingsLogStreamingView-CaEJvgJ9.js → SettingsLogStreamingView-4CpWJqj_.js} +1 -1
  72. package/dist/assets/{SettingsPersonalView-DlwXaGDs.js → SettingsPersonalView-9iP06ihA.js} +11 -3
  73. package/dist/assets/{SettingsSourceControl-B6eULOfX.js → SettingsSourceControl-BGjWhqqJ.js} +5 -5
  74. package/dist/assets/{SettingsSso-5zcg-J4E.js → SettingsSso-ChOyD3kc.js} +1 -1
  75. package/dist/assets/{SettingsUsageAndPlan-CMBvYdjo.js → SettingsUsageAndPlan-jP8nn4Rh.js} +1 -1
  76. package/dist/assets/SettingsUsersView-BhfbqjxW.js +861 -0
  77. package/dist/assets/SettingsUsersView-BuZbf1jq.css +446 -0
  78. package/dist/assets/{SettingsView-Bawwm19P.css → SettingsView-4yzof_Pb.css} +4 -4
  79. package/dist/assets/{SettingsView-BuDKhqwZ.js → SettingsView-DTFEdRdj.js} +14 -14
  80. package/dist/assets/{SetupView-DSaQcQDF.js → SetupView-CXuAO6tx.js} +3 -3
  81. package/dist/assets/{SetupWorkflowCredentialsButton-BWISZAxq.js → SetupWorkflowCredentialsButton-Bj4rSqAV.js} +2 -2
  82. package/dist/assets/{SetupWorkflowFromTemplateView-CfDWCwoA.js → SetupWorkflowFromTemplateView-DG8Ml3A0.js} +8 -12
  83. package/dist/assets/{SigninView-BpjyswHb.js → SigninView-KmmptKWN.js} +7 -3
  84. package/dist/assets/{SignoutView-f_CoUl4S.js → SignoutView-8rAPEX_X.js} +1 -1
  85. package/dist/assets/{SignupView-q3f9g3P9.js → SignupView-ZYUP6f-Y.js} +3 -3
  86. package/dist/assets/{TableBase-DruQl-SO.js → TableBase-7XxrB0dw.js} +1 -1
  87. package/dist/assets/{Tags-DbmKHzWo.js → Tags-C8Jnw74N.js} +1 -1
  88. package/dist/assets/{TemplateDetails-DP_5pkzG.js → TemplateDetails-Bk1ixuRQ.js} +2 -2
  89. package/dist/assets/{TemplateList-y8Aumcsb.js → TemplateList-9SAC8OGn.js} +6 -3
  90. package/dist/assets/{TemplatesCollectionView-VdQpHtxs.js → TemplatesCollectionView-CLZDJ4HM.js} +6 -6
  91. package/dist/assets/{TemplatesSearchView-BUcYRVEK.js → TemplatesSearchView-DRzdGp3s.js} +8 -8
  92. package/dist/assets/{TemplatesView-4DUEEEtD.js → TemplatesView-V6ud-nM5.js} +3 -3
  93. package/dist/assets/{TemplatesWorkflowView--zUXMB8f.js → TemplatesWorkflowView-CLb4CuR2.js} +6 -6
  94. package/dist/assets/{NodeDetailsView-DB-5JPUD.js → TriggerPanel-BOC7PYsi.js} +498 -1415
  95. package/dist/assets/{NodeDetailsView-BaIj2qAa.css → TriggerPanel-DRpKKKun.css} +296 -903
  96. package/dist/assets/{VariablesView-DoWb0Vtv.js → VariablesView-BDzhSaxw.js} +6 -6
  97. package/dist/assets/{VariablesView-Kog_9PMT.css → VariablesView-Bh0OeH4s.css} +6 -6
  98. package/dist/assets/{WorkerView-D56d7XJA.js → WorkerView-C2A7cYkr.js} +9 -9
  99. package/dist/assets/{WorkflowActivator-CQxaDCfA.js → WorkflowActivator-BmIzNsA8.js} +8 -8
  100. package/dist/assets/{WorkflowActivator-BJPsIkXE.css → WorkflowActivator-DhLX6i1H.css} +2 -2
  101. package/dist/assets/{WorkflowExecutionsInfoAccordion-D9p_ZqmA.js → WorkflowExecutionsInfoAccordion-Cn4GRGO_.js} +6 -6
  102. package/dist/assets/{WorkflowExecutionsLandingPage-CymYth6K.js → WorkflowExecutionsLandingPage-s-dIgG6D.js} +3 -3
  103. package/dist/assets/{WorkflowExecutionsPreview-DRvf3WQC.js → WorkflowExecutionsPreview-BE7NfRAa.js} +12 -12
  104. package/dist/assets/{WorkflowExecutionsView-DxiIaUKV.js → WorkflowExecutionsView-DFmBdF-B.js} +16 -16
  105. package/dist/assets/{WorkflowHistory-DBPIq2u7.js → WorkflowHistory-3wO0nQYD.js} +4 -4
  106. package/dist/assets/{WorkflowOnboardingView-D4QKSetf.js → WorkflowOnboardingView-mBVE6x-i.js} +1 -1
  107. package/dist/assets/{WorkflowPreview-D3YRZjYi.js → WorkflowPreview-DlNMFCKn.js} +1 -1
  108. package/dist/assets/{WorkflowsView-ipf8KKwB.css → WorkflowsView-CyJbJBc8.css} +25 -21
  109. package/dist/assets/{WorkflowsView-DPADmBVd.js → WorkflowsView-DsAOuPT0.js} +77 -72
  110. package/dist/assets/{chartjs.utils-Cou_ISuU.js → chartjs.utils-BywXqBmg.js} +2 -2
  111. package/dist/assets/{en-DzZibgm_.js → en-CcKAtA8V.js} +45 -5
  112. package/dist/assets/{global-link-actions-olwfH36z.js → global-link-actions-BzAw9ZbO.js} +1 -1
  113. package/dist/assets/{import-curl-DD21H3kK.js → import-curl-1LWAxRTV.js} +1 -1
  114. package/dist/assets/{index-uJOu4Uio.js → index-B6A1nL2x.js} +1 -1
  115. package/dist/assets/{index-BzamKJpD.css → index-C66_v3sX.css} +1302 -1279
  116. package/dist/assets/{index-7S5ADieN.js → index-V0GOmfo8.js} +40721 -34933
  117. package/dist/assets/{pickBy-DPxZbMic.js → pickBy-CtRItcCT.js} +1 -1
  118. package/dist/assets/{templateActions-DJJfyIhq.js → templateActions-DpIzx0ws.js} +2 -2
  119. package/dist/assets/{useBeforeUnload-DveXGtGN.js → useBeforeUnload-B0EP7Q2i.js} +1 -1
  120. package/dist/assets/{useExecutionDebugging-DM4nhx6D.js → useExecutionDebugging-AwlOA2KI.js} +2 -1
  121. package/dist/assets/{useExecutionHelpers-BfF56crp.js → useExecutionHelpers-DvBwGIzz.js} +1 -1
  122. package/dist/assets/{useImportCurlCommand-BAgQhwtE.js → useImportCurlCommand-DIFC7Epr.js} +2 -2
  123. package/dist/assets/{useKeybindings-CV0VsjNP.js → useKeybindings-CduQ2pi5.js} +4 -4
  124. package/dist/assets/{useProjectPages-DgMGWOaO.js → useProjectPages-DmNmAOdq.js} +1 -1
  125. package/dist/assets/{usePushConnection-D8SE-itT.js → usePushConnection-Dyd5__87.js} +6 -12
  126. package/dist/assets/{useWorkflowActivate-BKz3N1SO.js → useWorkflowActivate-z9iwP6OY.js} +1 -1
  127. package/dist/index.html +2 -2
  128. package/package.json +1 -1
  129. package/vite.config.mts +2 -2
  130. package/dist/assets/CollectionParameter-CExdr4jd.js +0 -4
  131. package/dist/assets/SettingsUsersView-BL3TAhT8.js +0 -338
  132. package/dist/assets/SettingsUsersView-By12E2li.css +0 -143
@@ -1,33 +1,10 @@
1
- import { bl as isArrayLike, bm as isArray, bn as isBuffer, bo as isTypedArray, bp as isArguments, bq as getTag, br as isPrototype, bs as baseKeys, bt as addTokenUsageData, bu as emptyTokenUsageData, bv as isChatNode, bw as NodeConnectionTypes, bx as v4, by as get, bz as isRef, bA as isReactive, bB as isProxy, bC as toRaw, bD as AGENT_LANGCHAIN_NODE_TYPE, bE as MANUAL_CHAT_TRIGGER_NODE_TYPE, bF as CHAT_TRIGGER_NODE_TYPE, a as useToast, r as ref, x as computed, c as useI18n$1, bG as usePinnedData, az as useMessage, aA as MODAL_CONFIRM, a3 as useWorkflowsStore, bH as useLogsStore, b as useRouter, bI as useNodeHelpers, bJ as useRunWorkflow, V as VIEWS, bK as chatEventBus, a9 as watch, bL as provide, d as defineComponent, i as createElementBlock, g as openBlock, n as normalizeClass, j as createVNode, k as createBaseVNode, m as unref, p as N8nText, w as withCtx, J as renderSlot, l as createTextVNode, t as toDisplayString, _ as _export_sfc, a4 as useRoute, ad as useSourceControlStore, bM as useCanvasOperations, bN as useNodeTypesStore, bO as START_NODE_TYPE, e as createBlock, f as createCommentVNode, Z as N8nTooltip, bP as formatTokenUsageCount, bQ as getDefaultExportFromCjs, bR as requireUpperFirst, aq as useTemplateRef, bS as useTimestamp, bT as toTime, bU as toDayMonth, bV as withModifiers, F as Fragment, y as renderList, O as normalizeStyle, bW as _sfc_main$k, bX as I18nT, aW as N8nIcon, $ as _sfc_main$l, q as N8nButton, K as nextTick, bY as useVirtualList, bZ as toRef, D as mergeProps, H as N8nRadioButtons, b_ as inject, b$ as toRefs, o as onMounted, c0 as normalizeProps, c1 as guardReactiveProps, c2 as resolveDynamicComponent, c3 as markdownLink, c4 as useFileDialog, c5 as onUnmounted, aT as withDirectives, c6 as vModelText, a_ as withKeys, c7 as useAttrs, c8 as useClipboard, bh as createSlots, aL as useNDVStore, c9 as PiPWindowSymbol, ca as resolveDirective, a0 as N8nLink, cb as waitingNodeTooltip, aO as useLocalStorage, cc as LOG_DETAILS_PANEL_STATE, cd as KeyboardShortcutTooltip, ce as N8nResizeWrapper, cf as useStyles, cg as Workflow, ch as useThrottleFn, ci as parse, S as useUIStore, ac as useCanvasStore, ax as useTelemetry, cj as onScopeDispose, I as onBeforeUnmount, ck as applyThemeToBody, cl as useProvideTooltipAppendTo, cm as LOGS_PANEL_STATE, cn as LOCAL_STORAGE_PANEL_HEIGHT, co as LOCAL_STORAGE_OVERVIEW_PANEL_WIDTH, cp as LOCAL_STORAGE_PANEL_WIDTH, cq as useActiveElement, cr as ndvEventBus } from "./index-7S5ADieN.js";
2
- import { p as parseErrorMetadata, _ as _sfc_main$j, H as HighlightJS, V as VueMarkdown, R as RunData } from "./RunData-DG20AzLo.js";
3
- import { N as N8nActionDropdown } from "./ActionDropdown-BujIG0Jq.js";
4
- import { c as canvasEventBus, u as useKeybindings } from "./useKeybindings-CV0VsjNP.js";
5
- import "./FileSaver.min-C5wzcK59.js";
6
- import "./useExecutionHelpers-BfF56crp.js";
7
- var mapTag = "[object Map]", setTag = "[object Set]";
8
- var objectProto = Object.prototype;
9
- var hasOwnProperty = objectProto.hasOwnProperty;
10
- function isEmpty(value) {
11
- if (value == null) {
12
- return true;
13
- }
14
- if (isArrayLike(value) && (isArray(value) || typeof value == "string" || typeof value.splice == "function" || isBuffer(value) || isTypedArray(value) || isArguments(value))) {
15
- return !value.length;
16
- }
17
- var tag = getTag(value);
18
- if (tag == mapTag || tag == setTag) {
19
- return !value.size;
20
- }
21
- if (isPrototype(value)) {
22
- return !baseKeys(value).length;
23
- }
24
- for (var key in value) {
25
- if (hasOwnProperty.call(value, key)) {
26
- return false;
27
- }
28
- }
29
- return true;
30
- }
1
+ import { bl as addTokenUsageData, bm as emptyTokenUsageData, bn as isChatNode, bo as NodeConnectionTypes, bp as v4, bq as get, br as isRef, bs as isReactive, bt as isProxy, bu as toRaw, bv as AGENT_LANGCHAIN_NODE_TYPE, bw as MANUAL_CHAT_TRIGGER_NODE_TYPE, bx as CHAT_TRIGGER_NODE_TYPE, by as isEmpty, a as useToast, r as ref, x as computed, c as useI18n$1, bz as usePinnedData, aA as useMessage, aB as MODAL_CONFIRM, a4 as useWorkflowsStore, bA as useLogsStore, b as useRouter, bB as useNodeHelpers, bC as useRunWorkflow, V as VIEWS, bD as chatEventBus, aa as watch, bE as provide, d as defineComponent, h as createElementBlock, g as openBlock, n as normalizeClass, i as createVNode, j as createBaseVNode, l as unref, p as N8nText, w as withCtx, J as renderSlot, k as createTextVNode, t as toDisplayString, _ as _export_sfc, a5 as useRoute, ae as useSourceControlStore, bF as useCanvasOperations, bG as useNodeTypesStore, bH as START_NODE_TYPE, e as createBlock, f as createCommentVNode, $ as N8nTooltip, bI as formatTokenUsageCount, bJ as getDefaultExportFromCjs, bK as requireUpperFirst, F as Fragment, ar as useTemplateRef, bL as useTimestamp, bM as toTime, bN as toDayMonth, bO as withModifiers, y as renderList, P as normalizeStyle, bP as _sfc_main$k, bQ as I18nT, N as N8nIcon, a0 as _sfc_main$l, q as N8nButton, K as nextTick, bR as getScrollbarWidth, bS as useVirtualList, bT as toRef, D as mergeProps, H as N8nRadioButtons, bU as inject, bV as toRefs, o as onMounted, bW as normalizeProps, bX as guardReactiveProps, bY as resolveDynamicComponent, bZ as markdownLink, b_ as useFileDialog, b$ as onUnmounted, aU as withDirectives, c0 as vModelText, a_ as withKeys, c1 as useAttrs, c2 as useClipboard, bh as createSlots, aM as useNDVStore, c3 as PiPWindowSymbol, c4 as resolveDirective, a1 as N8nLink, c5 as waitingNodeTooltip, aP as useLocalStorage, c6 as LOG_DETAILS_PANEL_STATE, c7 as KeyboardShortcutTooltip, c8 as N8nResizeWrapper, c9 as useStyles, ca as Workflow, cb as useThrottleFn, cc as parse, cd as shallowRef, T as useUIStore, ad as useCanvasStore, ay as useTelemetry, ce as onScopeDispose, I as onBeforeUnmount, cf as applyThemeToBody, cg as useProvideTooltipAppendTo, ch as LOGS_PANEL_STATE, ci as LOCAL_STORAGE_PANEL_HEIGHT, cj as LOCAL_STORAGE_OVERVIEW_PANEL_WIDTH, ck as LOCAL_STORAGE_PANEL_WIDTH, cl as useActiveElement, cm as ndvEventBus } from "./index-V0GOmfo8.js";
2
+ import { p as parseErrorMetadata, _ as _sfc_main$j, H as HighlightJS, V as VueMarkdown, R as RunData } from "./RunData-D3xzjO33.js";
3
+ import { _ as __unplugin_components_1 } from "./AnimatedSpinner-BiuDg2x2.js";
4
+ import { N as N8nActionDropdown } from "./ActionDropdown-D-JmCYsp.js";
5
+ import { c as canvasEventBus, u as useKeybindings } from "./useKeybindings-CduQ2pi5.js";
6
+ import "./FileSaver.min-CeGSkamF.js";
7
+ import "./useExecutionHelpers-DvBwGIzz.js";
31
8
  const TOOL_EXECUTOR_NODE_NAME = "PartialExecutionToolExecutor";
32
9
  function getConsumedTokens(task) {
33
10
  if (!task.data) {
@@ -47,8 +24,9 @@ function createNode(node, context, runIndex, runData, children = []) {
47
24
  return {
48
25
  parent: context.parent,
49
26
  node,
50
- id: `${context.workflow.id}:${node.name}:${context.executionId}:${runIndex}`,
51
- depth: context.depth,
27
+ // The ID consists of workflow ID, node ID and run index (including ancestor's), which
28
+ // makes it possible to identify the same log across different executions
29
+ id: `${context.workflow.id}:${node.id}:${[...context.ancestorRunIndexes, runIndex].join(":")}`,
52
30
  runIndex,
53
31
  runData,
54
32
  children,
@@ -69,7 +47,7 @@ function getChildNodes(treeNode, node, runIndex, context) {
69
47
  return createLogTreeRec({
70
48
  ...context,
71
49
  parent: treeNode,
72
- depth: context.depth + 1,
50
+ ancestorRunIndexes: [...context.ancestorRunIndexes, runIndex ?? 0],
73
51
  workflow,
74
52
  executionId: subExecutionLocator.executionId,
75
53
  data: subWorkflowRunData
@@ -88,7 +66,7 @@ function getChildNodes(treeNode, node, runIndex, context) {
88
66
  const subNode = context.workflow.getNode(subNodeName);
89
67
  return subNode ? getTreeNodeData(subNode, t, index, {
90
68
  ...context,
91
- depth: context.depth + 1,
69
+ ancestorRunIndexes: [...context.ancestorRunIndexes, runIndex ?? 0],
92
70
  parent: treeNode
93
71
  }) : [];
94
72
  })
@@ -119,28 +97,24 @@ function getSubtreeTotalConsumedTokens(treeNode, includeSubWorkflow) {
119
97
  }
120
98
  return calculate(treeNode);
121
99
  }
122
- function findLogEntryToAutoSelectRec(subTree, depth) {
123
- for (const entry of subTree) {
124
- if (entry.runData?.error) {
125
- return entry;
126
- }
127
- const childAutoSelect = findLogEntryToAutoSelectRec(entry.children, depth + 1);
128
- if (childAutoSelect) {
129
- return childAutoSelect;
130
- }
131
- if (entry.node.type === AGENT_LANGCHAIN_NODE_TYPE) {
132
- if (isPlaceholderLog(entry) && entry.children.length > 0) {
133
- return entry.children[0];
134
- }
135
- return entry;
136
- }
100
+ function findLogEntryToAutoSelect(subTree) {
101
+ const entryWithError = findLogEntryRec((e) => !!e.runData?.error, subTree);
102
+ if (entryWithError) {
103
+ return entryWithError;
137
104
  }
138
- return depth === 0 ? subTree[0] : void 0;
105
+ const entryForAiAgent = findLogEntryRec(
106
+ (entry) => entry.node.type === AGENT_LANGCHAIN_NODE_TYPE || entry.parent?.node.type === AGENT_LANGCHAIN_NODE_TYPE && isPlaceholderLog(entry.parent),
107
+ subTree
108
+ );
109
+ if (entryForAiAgent) {
110
+ return entryForAiAgent;
111
+ }
112
+ return subTree[subTree.length - 1];
139
113
  }
140
114
  function createLogTree(workflow, response, workflows = {}, subWorkflowData = {}) {
141
115
  return createLogTreeRec({
142
116
  parent: void 0,
143
- depth: 0,
117
+ ancestorRunIndexes: [],
144
118
  executionId: response.id,
145
119
  workflow,
146
120
  workflows,
@@ -188,18 +162,26 @@ function findLogEntryRec(isMatched, entries) {
188
162
  }
189
163
  return void 0;
190
164
  }
191
- function findSelectedLogEntry(selection, entries) {
165
+ function findSelectedLogEntry(selection, entries, isExecuting) {
192
166
  switch (selection.type) {
193
167
  case "initial":
194
- return findLogEntryToAutoSelectRec(entries, 0);
168
+ return isExecuting ? void 0 : findLogEntryToAutoSelect(entries);
195
169
  case "none":
196
170
  return void 0;
197
171
  case "selected": {
198
- const entry = findLogEntryRec((e) => e.id === selection.id, entries);
199
- if (entry) {
200
- return entry;
172
+ const found = findLogEntryRec((e) => e.id === selection.entry.id, entries);
173
+ if (found === void 0 && !isExecuting) {
174
+ for (let runIndex = selection.entry.runIndex - 1; runIndex >= 0; runIndex--) {
175
+ const fallback = findLogEntryRec(
176
+ (e) => e.workflow.id === selection.entry.workflow.id && e.node.id === selection.entry.node.id && e.runIndex === runIndex,
177
+ entries
178
+ );
179
+ if (fallback !== void 0) {
180
+ return fallback;
181
+ }
182
+ }
201
183
  }
202
- return findLogEntryToAutoSelectRec(entries, 0);
184
+ return found;
203
185
  }
204
186
  }
205
187
  }
@@ -757,12 +739,10 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
757
739
  var upperFirstExports = requireUpperFirst();
758
740
  const upperFirst = /* @__PURE__ */ getDefaultExportFromCjs(upperFirstExports);
759
741
  const _hoisted_1$e = { key: 0 };
760
- const _hoisted_2$3 = { key: 1 };
761
742
  const _sfc_main$g = /* @__PURE__ */ defineComponent({
762
743
  __name: "LogsViewNodeName",
763
744
  props: {
764
745
  name: {},
765
- latestName: {},
766
746
  isError: { type: Boolean },
767
747
  isDeleted: { type: Boolean }
768
748
  },
@@ -776,8 +756,9 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
776
756
  color: _ctx.isError ? "danger" : void 0
777
757
  }, {
778
758
  default: withCtx(() => [
779
- _ctx.isDeleted || _ctx.name !== _ctx.latestName ? (openBlock(), createElementBlock("del", _hoisted_1$e, toDisplayString(_ctx.name), 1)) : createCommentVNode("", true),
780
- !_ctx.isDeleted ? (openBlock(), createElementBlock("span", _hoisted_2$3, toDisplayString(_ctx.latestName), 1)) : createCommentVNode("", true)
759
+ _ctx.isDeleted ? (openBlock(), createElementBlock("del", _hoisted_1$e, toDisplayString(_ctx.name), 1)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
760
+ createTextVNode(toDisplayString(_ctx.name), 1)
761
+ ], 64))
781
762
  ]),
782
763
  _: 1
783
764
  }, 8, ["class", "color"]);
@@ -814,10 +795,13 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
814
795
  const now = useTimestamp({ interval: 1e3 });
815
796
  const nodeTypeStore = useNodeTypesStore();
816
797
  const type = computed(() => nodeTypeStore.getNodeType(props.data.node.type));
817
- const isSettled = computed(
818
- () => props.data.runData?.executionStatus && !["running", "waiting"].includes(props.data.runData.executionStatus)
819
- );
798
+ const isRunning = computed(() => props.data.runData?.executionStatus === "running");
799
+ const isWaiting = computed(() => props.data.runData?.executionStatus === "waiting");
800
+ const isSettled = computed(() => !isRunning.value && !isWaiting.value);
820
801
  const isError = computed(() => !!props.data.runData?.error);
802
+ const statusTextKeyPath = computed(
803
+ () => isSettled.value ? "logs.overview.body.summaryText.in" : "logs.overview.body.summaryText.for"
804
+ );
821
805
  const startedAtText = computed(() => {
822
806
  if (props.data.runData === void 0) {
823
807
  return "—";
@@ -840,17 +824,17 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
840
824
  () => props.shouldShowTokenCountColumn ? getSubtreeTotalConsumedTokens(props.data, false) : void 0
841
825
  );
842
826
  const hasChildren = computed(() => props.data.children.length > 0 || hasSubExecution(props.data));
843
- function isLastChild(level) {
844
- let parent = props.data.parent;
827
+ const indents = computed(() => {
828
+ const ret = [];
845
829
  let data = props.data;
846
- for (let i = 0; i < props.data.depth - level; i++) {
847
- data = parent;
848
- parent = parent?.parent;
830
+ while (data.parent !== void 0) {
831
+ const siblings = data.parent?.children ?? [];
832
+ const lastSibling = siblings[siblings.length - 1];
833
+ ret.unshift({ straight: lastSibling?.id !== data.id, curved: data === props.data });
834
+ data = data.parent;
849
835
  }
850
- const siblings = parent?.children ?? [];
851
- const lastSibling = siblings[siblings.length - 1];
852
- return data === void 0 && lastSibling === void 0 || data?.node === lastSibling?.node && data?.runIndex === lastSibling?.runIndex;
853
- }
836
+ return ret;
837
+ });
854
838
  watch(
855
839
  () => props.isSelected,
856
840
  (isSelected) => {
@@ -864,6 +848,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
864
848
  );
865
849
  return (_ctx, _cache) => {
866
850
  const _component_NodeIcon = _sfc_main$k;
851
+ const _component_AnimatedSpinner = __unplugin_components_1;
867
852
  return openBlock(), createElementBlock("div", {
868
853
  ref: "containerRef",
869
854
  role: "treeitem",
@@ -878,19 +863,19 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
878
863
  }),
879
864
  onClick: _cache[3] || (_cache[3] = withModifiers(($event) => emit("toggleSelected"), ["stop"]))
880
865
  }, [
881
- (openBlock(true), createElementBlock(Fragment, null, renderList(props.data.depth, (level) => {
866
+ (openBlock(true), createElementBlock(Fragment, null, renderList(indents.value, (indent2, level) => {
882
867
  return openBlock(), createElementBlock("div", {
883
868
  key: level,
884
869
  class: normalizeClass({
885
870
  [_ctx.$style.indent]: true,
886
- [_ctx.$style.connectorCurved]: level === props.data.depth,
887
- [_ctx.$style.connectorStraight]: !isLastChild(level)
871
+ [_ctx.$style.connectorCurved]: indent2.curved,
872
+ [_ctx.$style.connectorStraight]: indent2.straight
888
873
  })
889
874
  }, null, 2);
890
875
  }), 128)),
891
876
  createBaseVNode("div", {
892
877
  class: normalizeClass(_ctx.$style.background),
893
- style: normalizeStyle({ "--indent-depth": props.data.depth })
878
+ style: normalizeStyle({ "--indent-depth": indents.value.length })
894
879
  }, null, 6),
895
880
  createVNode(_component_NodeIcon, {
896
881
  "node-type": type.value,
@@ -899,11 +884,10 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
899
884
  }, null, 8, ["node-type", "class"]),
900
885
  createVNode(LogsViewNodeName, {
901
886
  class: normalizeClass(_ctx.$style.name),
902
- "latest-name": _ctx.latestInfo?.name ?? props.data.node.name,
903
- name: props.data.node.name,
887
+ name: _ctx.latestInfo?.name ?? props.data.node.name,
904
888
  "is-error": isError.value,
905
889
  "is-deleted": _ctx.latestInfo?.deleted ?? false
906
- }, null, 8, ["class", "latest-name", "name", "is-error", "is-deleted"]),
890
+ }, null, 8, ["class", "name", "is-error", "is-deleted"]),
907
891
  !_ctx.isCompact ? (openBlock(), createBlock(unref(N8nText), {
908
892
  key: 0,
909
893
  tag: "div",
@@ -912,38 +896,39 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
912
896
  class: normalizeClass(_ctx.$style.timeTook)
913
897
  }, {
914
898
  default: withCtx(() => [
915
- isSettled.value ? (openBlock(), createBlock(unref(I18nT), {
899
+ timeText.value !== void 0 ? (openBlock(), createBlock(unref(I18nT), {
916
900
  key: 0,
917
- keypath: "logs.overview.body.summaryText.in"
901
+ keypath: statusTextKeyPath.value
918
902
  }, {
919
903
  status: withCtx(() => [
920
- isError.value ? (openBlock(), createBlock(unref(N8nText), {
921
- key: 0,
922
- color: "danger",
923
- bold: true,
904
+ createVNode(unref(N8nText), {
905
+ color: isError.value ? "danger" : void 0,
906
+ bold: isError.value,
924
907
  size: "small"
925
908
  }, {
926
909
  default: withCtx(() => [
927
- createVNode(unref(N8nIcon), {
928
- icon: "exclamation-triangle",
929
- class: normalizeClass(_ctx.$style.errorIcon)
930
- }, null, 8, ["class"]),
910
+ isRunning.value ? (openBlock(), createBlock(_component_AnimatedSpinner, {
911
+ key: 0,
912
+ class: normalizeClass(_ctx.$style.statusTextIcon)
913
+ }, null, 8, ["class"])) : isWaiting.value ? (openBlock(), createBlock(unref(N8nIcon), {
914
+ key: 1,
915
+ icon: "status-waiting",
916
+ class: normalizeClass(_ctx.$style.statusTextIcon)
917
+ }, null, 8, ["class"])) : isError.value ? (openBlock(), createBlock(unref(N8nIcon), {
918
+ key: 2,
919
+ icon: "triangle-alert",
920
+ class: normalizeClass(_ctx.$style.statusTextIcon)
921
+ }, null, 8, ["class"])) : createCommentVNode("", true),
931
922
  createTextVNode(" " + toDisplayString(statusText.value), 1)
932
923
  ]),
933
924
  _: 1
934
- })) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
935
- createTextVNode(toDisplayString(statusText.value), 1)
936
- ], 64))
925
+ }, 8, ["color", "bold"])
937
926
  ]),
938
927
  time: withCtx(() => [
939
928
  createTextVNode(toDisplayString(timeText.value), 1)
940
929
  ]),
941
930
  _: 1
942
- })) : timeText.value !== void 0 ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
943
- createTextVNode(toDisplayString(unref(locale).baseText("logs.overview.body.summaryText.for", {
944
- interpolate: { status: statusText.value, time: timeText.value }
945
- })), 1)
946
- ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [
931
+ }, 8, ["keypath"])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
947
932
  createTextVNode("—")
948
933
  ], 64))
949
934
  ]),
@@ -980,19 +965,18 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
980
965
  key: 3,
981
966
  size: "medium",
982
967
  color: "danger",
983
- icon: "exclamation-triangle",
968
+ icon: "triangle-alert",
984
969
  class: normalizeClass(_ctx.$style.compactErrorIcon)
985
970
  }, null, 8, ["class"])) : createCommentVNode("", true),
986
971
  !_ctx.isCompact || !props.latestInfo?.deleted ? (openBlock(), createBlock(unref(_sfc_main$l), {
987
972
  key: 4,
988
973
  type: "secondary",
989
974
  size: "small",
990
- icon: "edit",
975
+ icon: "square-pen",
991
976
  "icon-size": "medium",
992
- style: normalizeStyle([{ "color": "var(--color-text-base)" }, {
993
- visibility: props.canOpenNdv ? "" : "hidden",
994
- color: "var(--color-text-base)"
995
- }]),
977
+ style: normalizeStyle({
978
+ visibility: props.canOpenNdv ? "" : "hidden"
979
+ }),
996
980
  disabled: props.latestInfo?.deleted,
997
981
  class: normalizeClass(_ctx.$style.openNdvButton),
998
982
  "aria-label": unref(locale).baseText("logs.overview.body.open"),
@@ -1003,23 +987,30 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
1003
987
  type: "secondary",
1004
988
  size: "small",
1005
989
  icon: "play",
1006
- style: { "color": "var(--color-text-base)" },
1007
990
  "aria-label": unref(locale).baseText("logs.overview.body.run"),
1008
- class: normalizeClass([_ctx.$style.partialExecutionButton, props.data.depth > 0 ? _ctx.$style.unavailable : ""]),
991
+ class: normalizeClass([_ctx.$style.partialExecutionButton, indents.value.length > 0 ? _ctx.$style.unavailable : ""]),
1009
992
  disabled: props.latestInfo?.deleted || props.latestInfo?.disabled,
1010
993
  onClick: _cache[1] || (_cache[1] = withModifiers(($event) => emit("triggerPartialExecution"), ["stop"]))
1011
994
  }, null, 8, ["aria-label", "class", "disabled"])) : createCommentVNode("", true),
995
+ _ctx.isCompact && !hasChildren.value ? (openBlock(), createElementBlock(Fragment, { key: 6 }, [
996
+ isRunning.value ? (openBlock(), createBlock(_component_AnimatedSpinner, {
997
+ key: 0,
998
+ class: normalizeClass(_ctx.$style.statusIcon)
999
+ }, null, 8, ["class"])) : isWaiting.value ? (openBlock(), createBlock(unref(N8nIcon), {
1000
+ key: 1,
1001
+ icon: "status-waiting",
1002
+ class: normalizeClass(_ctx.$style.statusIcon)
1003
+ }, null, 8, ["class"])) : createCommentVNode("", true)
1004
+ ], 64)) : createCommentVNode("", true),
1012
1005
  !_ctx.isCompact || hasChildren.value ? (openBlock(), createBlock(unref(N8nButton), {
1013
- key: 6,
1006
+ key: 7,
1014
1007
  type: "secondary",
1015
1008
  size: "small",
1016
1009
  icon: props.expanded ? "chevron-down" : "chevron-up",
1017
1010
  "icon-size": "medium",
1018
1011
  square: true,
1019
1012
  style: normalizeStyle({
1020
- visibility: hasChildren.value ? "" : "hidden",
1021
- color: "var(--color-text-base)"
1022
- // give higher specificity than the style from the component itself
1013
+ visibility: hasChildren.value ? "" : "hidden"
1023
1014
  }),
1024
1015
  class: normalizeClass(_ctx.$style.toggleButton),
1025
1016
  "aria-label": unref(locale).baseText("logs.overview.body.toggleRow"),
@@ -1029,25 +1020,27 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
1029
1020
  };
1030
1021
  }
1031
1022
  });
1032
- const container$7 = "_container_yoz1w_123";
1033
- const background = "_background_yoz1w_139";
1034
- const selected = "_selected_yoz1w_148";
1035
- const error = "_error_yoz1w_154";
1036
- const indent = "_indent_yoz1w_158";
1037
- const connectorCurved = "_connectorCurved_yoz1w_167";
1038
- const connectorStraight = "_connectorStraight_yoz1w_177";
1039
- const icon$3 = "_icon_yoz1w_186";
1040
- const name = "_name_yoz1w_192";
1041
- const timeTook = "_timeTook_yoz1w_198";
1042
- const errorIcon = "_errorIcon_yoz1w_203";
1043
- const startedAt = "_startedAt_yoz1w_208";
1044
- const consumedTokens = "_consumedTokens_yoz1w_214";
1045
- const compactErrorIcon = "_compactErrorIcon_yoz1w_221";
1046
- const partialExecutionButton = "_partialExecutionButton_yoz1w_233";
1047
- const openNdvButton = "_openNdvButton_yoz1w_234";
1048
- const compact = "_compact_yoz1w_221";
1049
- const unavailable = "_unavailable_yoz1w_244";
1050
- const toggleButton = "_toggleButton_yoz1w_252";
1023
+ const container$7 = "_container_6ygvb_123";
1024
+ const background = "_background_6ygvb_140";
1025
+ const selected = "_selected_6ygvb_149";
1026
+ const error = "_error_6ygvb_155";
1027
+ const indent = "_indent_6ygvb_159";
1028
+ const connectorCurved = "_connectorCurved_6ygvb_168";
1029
+ const connectorStraight = "_connectorStraight_6ygvb_178";
1030
+ const icon$3 = "_icon_6ygvb_187";
1031
+ const name = "_name_6ygvb_193";
1032
+ const timeTook = "_timeTook_6ygvb_199";
1033
+ const statusTextIcon = "_statusTextIcon_6ygvb_204";
1034
+ const startedAt = "_startedAt_6ygvb_209";
1035
+ const consumedTokens = "_consumedTokens_6ygvb_215";
1036
+ const compactErrorIcon = "_compactErrorIcon_6ygvb_222";
1037
+ const partialExecutionButton = "_partialExecutionButton_6ygvb_234";
1038
+ const openNdvButton = "_openNdvButton_6ygvb_235";
1039
+ const compact = "_compact_6ygvb_222";
1040
+ const unavailable = "_unavailable_6ygvb_245";
1041
+ const toggleButton = "_toggleButton_6ygvb_253";
1042
+ const statusIcon = "_statusIcon_6ygvb_277";
1043
+ const placeholder$1 = "_placeholder_6ygvb_285";
1051
1044
  const style0$9 = {
1052
1045
  container: container$7,
1053
1046
  background,
@@ -1059,7 +1052,7 @@ const style0$9 = {
1059
1052
  icon: icon$3,
1060
1053
  name,
1061
1054
  timeTook,
1062
- errorIcon,
1055
+ statusTextIcon,
1063
1056
  startedAt,
1064
1057
  consumedTokens,
1065
1058
  compactErrorIcon,
@@ -1067,7 +1060,9 @@ const style0$9 = {
1067
1060
  openNdvButton,
1068
1061
  compact,
1069
1062
  unavailable,
1070
- toggleButton
1063
+ toggleButton,
1064
+ statusIcon,
1065
+ placeholder: placeholder$1
1071
1066
  };
1072
1067
  const cssModules$9 = {
1073
1068
  "$style": style0$9
@@ -1136,7 +1131,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
1136
1131
  flatLogEntries: {},
1137
1132
  latestNodeInfo: {}
1138
1133
  },
1139
- emits: ["clickHeader", "select", "clearExecutionData", "openNdv", "toggleExpanded", "loadSubExecution"],
1134
+ emits: ["clickHeader", "select", "clearExecutionData", "openNdv", "toggleExpanded"],
1140
1135
  setup(__props, { emit: __emit }) {
1141
1136
  const emit = __emit;
1142
1137
  const locale = useI18n$1();
@@ -1148,6 +1143,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
1148
1143
  { label: locale.baseText("logs.overview.header.switch.overview"), value: "overview" },
1149
1144
  { label: locale.baseText("logs.overview.header.switch.details"), value: "details" }
1150
1145
  ]);
1146
+ const hasStaticScrollbar = getScrollbarWidth() > 0;
1151
1147
  const consumedTokens2 = computed(
1152
1148
  () => getTotalConsumedTokens(
1153
1149
  ...__props.entries.map(
@@ -1162,6 +1158,12 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
1162
1158
  const shouldShowTokenCountColumn = computed(
1163
1159
  () => consumedTokens2.value.totalTokens > 0 || __props.entries.some((entry) => getSubtreeTotalConsumedTokens(entry, true).totalTokens > 0)
1164
1160
  );
1161
+ const isExpanded = computed(
1162
+ () => __props.flatLogEntries.reduce((acc, entry, index, arr) => {
1163
+ acc[entry.id] = arr[index + 1]?.parent?.id === entry.id;
1164
+ return acc;
1165
+ }, {})
1166
+ );
1165
1167
  const virtualList = useVirtualList(
1166
1168
  toRef(() => __props.flatLogEntries),
1167
1169
  { itemHeight: 32 }
@@ -1169,13 +1171,6 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
1169
1171
  function handleSwitchView(value) {
1170
1172
  emit("select", value === "overview" ? void 0 : __props.flatLogEntries[0]);
1171
1173
  }
1172
- function handleToggleExpanded(treeNode) {
1173
- if (hasSubExecution(treeNode) && treeNode.children.length === 0) {
1174
- emit("loadSubExecution", treeNode);
1175
- return;
1176
- }
1177
- emit("toggleExpanded", treeNode);
1178
- }
1179
1174
  async function handleTriggerPartialExecution(treeNode) {
1180
1175
  const latestName = __props.latestNodeInfo[treeNode.node.id]?.name ?? treeNode.node.name;
1181
1176
  if (latestName) {
@@ -1183,20 +1178,34 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
1183
1178
  }
1184
1179
  }
1185
1180
  watch(
1186
- () => __props.selected,
1187
- async (selection) => {
1188
- if (selection && virtualList.list.value.every((e) => e.data.id !== selection.id)) {
1189
- const index = __props.flatLogEntries.findIndex((e) => e.id === selection?.id);
1181
+ [() => __props.execution?.status === "running", () => __props.flatLogEntries.length],
1182
+ async ([isRunning, flatEntryCount], [wasRunning]) => {
1183
+ await nextTick(() => {
1184
+ if (__props.selected === void 0 && (isRunning || wasRunning)) {
1185
+ virtualList.scrollTo(flatEntryCount - 1);
1186
+ }
1187
+ });
1188
+ },
1189
+ { immediate: true }
1190
+ );
1191
+ watch(
1192
+ () => __props.selected?.id,
1193
+ async (selectedId) => {
1194
+ await nextTick(() => {
1195
+ if (selectedId === void 0) {
1196
+ return;
1197
+ }
1198
+ const index = virtualList.list.value.some((e) => e.data.id === selectedId) ? -1 : __props.flatLogEntries.findIndex((e) => e.id === selectedId);
1190
1199
  if (index >= 0) {
1191
- await nextTick(() => virtualList.scrollTo(index));
1200
+ virtualList.scrollTo(index);
1192
1201
  }
1193
- }
1202
+ });
1194
1203
  },
1195
1204
  { immediate: true }
1196
1205
  );
1197
1206
  return (_ctx, _cache) => {
1198
1207
  return openBlock(), createElementBlock("div", {
1199
- class: normalizeClass(_ctx.$style.container),
1208
+ class: normalizeClass([_ctx.$style.container, hasStaticScrollbar ? _ctx.$style.staticScrollBar : ""]),
1200
1209
  "data-test-id": "logs-overview"
1201
1210
  }, [
1202
1211
  createVNode(LogsPanelHeader, {
@@ -1213,7 +1222,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
1213
1222
  createVNode(unref(N8nButton), {
1214
1223
  size: "mini",
1215
1224
  type: "secondary",
1216
- icon: "trash",
1225
+ icon: "trash-2",
1217
1226
  "icon-size": "medium",
1218
1227
  "data-test-id": "clear-execution-data-button",
1219
1228
  class: normalizeClass(_ctx.$style.clearButton),
@@ -1270,9 +1279,9 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
1270
1279
  "is-compact": _ctx.isCompact,
1271
1280
  "should-show-token-count-column": shouldShowTokenCountColumn.value,
1272
1281
  "latest-info": _ctx.latestNodeInfo[data.node.id],
1273
- expanded: unref(virtualList).list.value[index + 1]?.data.parent?.id === data.id,
1282
+ expanded: isExpanded.value[data.id],
1274
1283
  "can-open-ndv": data.executionId === _ctx.execution?.id,
1275
- onToggleExpanded: ($event) => handleToggleExpanded(data),
1284
+ onToggleExpanded: ($event) => emit("toggleExpanded", data),
1276
1285
  onOpenNdv: ($event) => emit("openNdv", data),
1277
1286
  onTriggerPartialExecution: ($event) => handleTriggerPartialExecution(data),
1278
1287
  onToggleSelected: ($event) => emit("select", _ctx.selected?.id === data.id ? void 0 : data)
@@ -1293,14 +1302,15 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
1293
1302
  };
1294
1303
  }
1295
1304
  });
1296
- const container$5 = "_container_fcgc7_123";
1297
- const clearButton = "_clearButton_fcgc7_133";
1298
- const content$1 = "_content_fcgc7_139";
1299
- const empty = "_empty_fcgc7_148";
1300
- const emptyText = "_emptyText_fcgc7_153";
1301
- const summary = "_summary_fcgc7_158";
1302
- const tree = "_tree_fcgc7_162";
1303
- const switchViewButtons = "_switchViewButtons_fcgc7_170";
1305
+ const container$5 = "_container_pydb1_123";
1306
+ const clearButton = "_clearButton_pydb1_133";
1307
+ const content$1 = "_content_pydb1_139";
1308
+ const empty = "_empty_pydb1_149";
1309
+ const emptyText = "_emptyText_pydb1_154";
1310
+ const summary = "_summary_pydb1_159";
1311
+ const tree = "_tree_pydb1_163";
1312
+ const staticScrollBar = "_staticScrollBar_pydb1_168";
1313
+ const switchViewButtons = "_switchViewButtons_pydb1_193";
1304
1314
  const style0$7 = {
1305
1315
  container: container$5,
1306
1316
  clearButton,
@@ -1309,6 +1319,7 @@ const style0$7 = {
1309
1319
  emptyText,
1310
1320
  summary,
1311
1321
  tree,
1322
+ staticScrollBar,
1312
1323
  switchViewButtons
1313
1324
  };
1314
1325
  const cssModules$7 = {
@@ -4406,7 +4417,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
4406
4417
  return _ctx.emptyText && unref(initialMessages).length === 0 && _ctx.messages.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_1$1, [
4407
4418
  createBaseVNode("div", _hoisted_2, [
4408
4419
  createVNode(unref(N8nIcon), {
4409
- icon: "comment",
4420
+ icon: "message-circle",
4410
4421
  size: "large",
4411
4422
  class: "emptyIcon"
4412
4423
  }),
@@ -4500,7 +4511,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
4500
4511
  required: true
4501
4512
  },
4502
4513
  icon: {
4503
- type: String,
4514
+ type: Object,
4504
4515
  required: true
4505
4516
  },
4506
4517
  placement: {
@@ -4674,7 +4685,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
4674
4685
  type: "secondary",
4675
4686
  size: "small",
4676
4687
  "icon-size": "medium",
4677
- icon: "undo",
4688
+ icon: "undo-2",
4678
4689
  title: unref(locale).baseText("chat.window.session.reset"),
4679
4690
  onClick: withModifiers(onRefreshSession, ["stop"])
4680
4691
  }, null, 8, ["class", "title"])
@@ -4712,7 +4723,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
4712
4723
  !_ctx.isReadOnly && isTextMessage(message) && message.sender === "user" ? (openBlock(), createBlock(MessageOptionAction, {
4713
4724
  key: 1,
4714
4725
  "data-test-id": "repost-message-button",
4715
- icon: "redo",
4726
+ icon: "redo-2",
4716
4727
  label: unref(locale).baseText("chat.window.chat.chatMessageOptions.repostMessage"),
4717
4728
  placement: "left",
4718
4729
  onClickOnce: ($event) => repostMessage(message)
@@ -4720,7 +4731,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
4720
4731
  !_ctx.isReadOnly && isTextMessage(message) && message.sender === "user" ? (openBlock(), createBlock(MessageOptionAction, {
4721
4732
  key: 2,
4722
4733
  "data-test-id": "reuse-message-button",
4723
- icon: "copy",
4734
+ icon: "files",
4724
4735
  label: unref(locale).baseText("chat.window.chat.chatMessageOptions.reuseMessage"),
4725
4736
  placement: "left",
4726
4737
  onClick: ($event) => reuseMessage(message)
@@ -4770,17 +4781,18 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
4770
4781
  };
4771
4782
  }
4772
4783
  });
4773
- const chat$1 = "_chat_1r0jy_123";
4774
- const chatHeader = "_chatHeader_1r0jy_148";
4775
- const chatTitle = "_chatTitle_1r0jy_161";
4776
- const session = "_session_1r0jy_165";
4777
- const sessionId = "_sessionId_1r0jy_173";
4778
- const copyable = "_copyable_1r0jy_179";
4779
- const headerButton = "_headerButton_1r0jy_183";
4780
- const newHeaderButton = "_newHeaderButton_1r0jy_188";
4781
- const chatBody = "_chatBody_1r0jy_193";
4782
- const messages = "_messages_1r0jy_202";
4783
- const messagesInput = "_messagesInput_1r0jy_213";
4784
+ const chat$1 = "_chat_oezi2_123";
4785
+ const chatHeader = "_chatHeader_oezi2_151";
4786
+ const chatTitle = "_chatTitle_oezi2_164";
4787
+ const session = "_session_oezi2_168";
4788
+ const sessionId = "_sessionId_oezi2_176";
4789
+ const copyable = "_copyable_oezi2_182";
4790
+ const headerButton = "_headerButton_oezi2_186";
4791
+ const newHeaderButton = "_newHeaderButton_oezi2_191";
4792
+ const chatBody = "_chatBody_oezi2_196";
4793
+ const messages = "_messages_oezi2_205";
4794
+ const messagesInput = "_messagesInput_oezi2_216";
4795
+ const messagesHistory = "_messagesHistory_oezi2_250";
4784
4796
  const style0$4 = {
4785
4797
  chat: chat$1,
4786
4798
  chatHeader,
@@ -4792,7 +4804,8 @@ const style0$4 = {
4792
4804
  newHeaderButton,
4793
4805
  chatBody,
4794
4806
  messages,
4795
- messagesInput
4807
+ messagesInput,
4808
+ messagesHistory
4796
4809
  };
4797
4810
  const cssModules$4 = {
4798
4811
  "$style": style0$4
@@ -4803,9 +4816,12 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
4803
4816
  props: {
4804
4817
  title: {},
4805
4818
  paneType: {},
4806
- logEntry: {}
4819
+ logEntry: {},
4820
+ collapsingTableColumnName: {}
4807
4821
  },
4808
- setup(__props) {
4822
+ emits: ["collapsingTableColumnChanged"],
4823
+ setup(__props, { emit: __emit }) {
4824
+ const emit = __emit;
4809
4825
  const locale = useI18n$1();
4810
4826
  const ndvStore = useNDVStore();
4811
4827
  const pipWindow = inject(PiPWindowSymbol, ref());
@@ -4814,7 +4830,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
4814
4830
  () => __props.paneType === "input" && (__props.logEntry.runData?.source.length ?? 0) > 1
4815
4831
  );
4816
4832
  const runDataProps = computed(() => {
4817
- if (__props.logEntry.depth > 0 || __props.paneType === "output") {
4833
+ if (isSubNodeLog(__props.logEntry) || __props.paneType === "output") {
4818
4834
  return { node: __props.logEntry.node, runIndex: __props.logEntry.runIndex };
4819
4835
  }
4820
4836
  const source = __props.logEntry.runData?.source[0];
@@ -4857,10 +4873,12 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
4857
4873
  "disable-edit": true,
4858
4874
  "disable-hover-highlight": true,
4859
4875
  "display-mode": displayMode.value,
4860
- "disable-ai-content": _ctx.logEntry.depth === 0,
4876
+ "disable-ai-content": !unref(isSubNodeLog)(_ctx.logEntry),
4861
4877
  "is-executing": isExecuting.value,
4862
4878
  "table-header-bg-color": "light",
4863
- onDisplayModeChange: handleChangeDisplayMode
4879
+ "collapsing-table-column-name": _ctx.collapsingTableColumnName,
4880
+ onDisplayModeChange: handleChangeDisplayMode,
4881
+ onCollapsingTableColumnChanged: _cache[0] || (_cache[0] = ($event) => emit("collapsingTableColumnChanged", $event))
4864
4882
  }), createSlots({
4865
4883
  header: withCtx(() => [
4866
4884
  createVNode(unref(N8nText), {
@@ -4929,7 +4947,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
4929
4947
  ]),
4930
4948
  key: "1"
4931
4949
  } : void 0
4932
- ]), 1040, ["workflow", "workflow-execution", "too-much-data-title", "no-data-in-branch-message", "executing-message", "pane-type", "display-mode", "disable-ai-content", "is-executing"])) : createCommentVNode("", true);
4950
+ ]), 1040, ["workflow", "workflow-execution", "too-much-data-title", "no-data-in-branch-message", "executing-message", "pane-type", "display-mode", "disable-ai-content", "is-executing", "collapsing-table-column-name"])) : createCommentVNode("", true);
4933
4951
  };
4934
4952
  }
4935
4953
  });
@@ -5040,9 +5058,11 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
5040
5058
  logEntry: {},
5041
5059
  window: {},
5042
5060
  latestInfo: {},
5043
- panels: {}
5061
+ panels: {},
5062
+ collapsingInputTableColumnName: {},
5063
+ collapsingOutputTableColumnName: {}
5044
5064
  },
5045
- emits: ["clickHeader", "toggleInputOpen", "toggleOutputOpen"],
5065
+ emits: ["clickHeader", "toggleInputOpen", "toggleOutputOpen", "collapsingInputTableColumnChanged", "collapsingOutputTableColumnChanged"],
5046
5066
  setup(__props, { emit: __emit }) {
5047
5067
  const emit = __emit;
5048
5068
  const locale = useI18n$1();
@@ -5091,10 +5111,9 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
5091
5111
  class: normalizeClass(_ctx.$style.icon)
5092
5112
  }, null, 8, ["node-type", "class"]),
5093
5113
  createVNode(LogsViewNodeName, {
5094
- "latest-name": _ctx.latestInfo?.name ?? _ctx.logEntry.node.name,
5095
- name: _ctx.logEntry.node.name,
5114
+ name: _ctx.latestInfo?.name ?? _ctx.logEntry.node.name,
5096
5115
  "is-deleted": _ctx.latestInfo?.deleted ?? false
5097
- }, null, 8, ["latest-name", "name", "is-deleted"]),
5116
+ }, null, 8, ["name", "is-deleted"]),
5098
5117
  _ctx.isOpen && _ctx.logEntry.runData !== void 0 ? (openBlock(), createBlock(LogsViewExecutionSummary, {
5099
5118
  key: 0,
5100
5119
  class: normalizeClass(_ctx.$style.executionSummary),
@@ -5189,8 +5208,10 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
5189
5208
  "data-test-id": "log-details-input",
5190
5209
  "pane-type": "input",
5191
5210
  title: unref(locale).baseText("logs.details.header.actions.input"),
5192
- "log-entry": _ctx.logEntry
5193
- }, null, 8, ["title", "log-entry"])
5211
+ "log-entry": _ctx.logEntry,
5212
+ "collapsing-table-column-name": _ctx.collapsingInputTableColumnName,
5213
+ onCollapsingTableColumnChanged: _cache[3] || (_cache[3] = ($event) => emit("collapsingInputTableColumnChanged", $event))
5214
+ }, null, 8, ["title", "log-entry", "collapsing-table-column-name"])
5194
5215
  ]),
5195
5216
  _: 1
5196
5217
  }, 8, ["class", "width", "style", "is-resizing-enabled", "window", "onResize"])) : createCommentVNode("", true),
@@ -5200,8 +5221,10 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
5200
5221
  "pane-type": "output",
5201
5222
  class: normalizeClass(_ctx.$style.outputPanel),
5202
5223
  title: unref(locale).baseText("logs.details.header.actions.output"),
5203
- "log-entry": _ctx.logEntry
5204
- }, null, 8, ["class", "title", "log-entry"])) : createCommentVNode("", true)
5224
+ "log-entry": _ctx.logEntry,
5225
+ "collapsing-table-column-name": _ctx.collapsingOutputTableColumnName,
5226
+ onCollapsingTableColumnChanged: _cache[4] || (_cache[4] = ($event) => emit("collapsingOutputTableColumnChanged", $event))
5227
+ }, null, 8, ["class", "title", "log-entry", "collapsing-table-column-name"])) : createCommentVNode("", true)
5205
5228
  ], 64))
5206
5229
  ], 2)) : createCommentVNode("", true)
5207
5230
  ], 2);
@@ -5302,7 +5325,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
5302
5325
  _ctx.isOpen ? (openBlock(), createBlock(unref(N8nActionDropdown), {
5303
5326
  key: 1,
5304
5327
  "icon-size": "small",
5305
- "activator-icon": "ellipsis-h",
5328
+ "activator-icon": "ellipsis",
5306
5329
  "activator-size": "small",
5307
5330
  items: menuItems.value,
5308
5331
  teleported: false,
@@ -5447,11 +5470,16 @@ function useLogsExecutionData() {
5447
5470
  }
5448
5471
  function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
5449
5472
  const telemetry = useTelemetry();
5450
- const manualLogEntrySelection = ref({ type: "initial" });
5451
- const selected2 = computed(() => findSelectedLogEntry(manualLogEntrySelection.value, tree2.value));
5473
+ const manualLogEntrySelection = shallowRef({ type: "initial" });
5474
+ const nodeIdToSelect = shallowRef();
5475
+ const isExecutionStopped = computed(() => execution.value?.stoppedAt !== void 0);
5476
+ const selected2 = computed(
5477
+ () => findSelectedLogEntry(manualLogEntrySelection.value, tree2.value, !isExecutionStopped.value)
5478
+ );
5452
5479
  const logsStore = useLogsStore();
5453
5480
  const uiStore = useUIStore();
5454
5481
  const canvasStore = useCanvasStore();
5482
+ const workflowsStore = useWorkflowsStore();
5455
5483
  function syncSelectionToCanvasIfEnabled(value) {
5456
5484
  if (!logsStore.isLogSelectionSyncedWithCanvas) {
5457
5485
  return;
@@ -5459,7 +5487,7 @@ function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
5459
5487
  canvasEventBus.emit("nodes:select", { ids: [value.node.id], panIntoView: true });
5460
5488
  }
5461
5489
  function select(value) {
5462
- manualLogEntrySelection.value = value === void 0 ? { type: "none" } : { type: "selected", id: value.id };
5490
+ manualLogEntrySelection.value = value === void 0 ? { type: "none" } : { type: "selected", entry: value };
5463
5491
  if (value) {
5464
5492
  syncSelectionToCanvasIfEnabled(value);
5465
5493
  telemetry.track("User selected node in log view", {
@@ -5473,14 +5501,20 @@ function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
5473
5501
  }
5474
5502
  function selectPrev() {
5475
5503
  const entries = flatLogEntries.value;
5504
+ if (entries.length === 0) {
5505
+ return;
5506
+ }
5476
5507
  const prevEntry = selected2.value ? getEntryAtRelativeIndex(entries, selected2.value.id, -1) ?? entries[0] : entries[entries.length - 1];
5477
- manualLogEntrySelection.value = { type: "selected", id: prevEntry.id };
5508
+ manualLogEntrySelection.value = { type: "selected", entry: prevEntry };
5478
5509
  syncSelectionToCanvasIfEnabled(prevEntry);
5479
5510
  }
5480
5511
  function selectNext() {
5481
5512
  const entries = flatLogEntries.value;
5513
+ if (entries.length === 0) {
5514
+ return;
5515
+ }
5482
5516
  const nextEntry = selected2.value ? getEntryAtRelativeIndex(entries, selected2.value.id, 1) ?? entries[entries.length - 1] : entries[0];
5483
- manualLogEntrySelection.value = { type: "selected", id: nextEntry.id };
5517
+ manualLogEntrySelection.value = { type: "selected", entry: nextEntry };
5484
5518
  syncSelectionToCanvasIfEnabled(nextEntry);
5485
5519
  }
5486
5520
  watch(
@@ -5495,14 +5529,23 @@ function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
5495
5529
  watch(
5496
5530
  [() => uiStore.lastSelectedNode, () => logsStore.isLogSelectionSyncedWithCanvas],
5497
5531
  ([selectedOnCanvas, shouldSync]) => {
5498
- if (!shouldSync || !selectedOnCanvas || canvasStore.hasRangeSelection || selected2.value?.node.name === selectedOnCanvas) {
5532
+ const selectedNodeId = selectedOnCanvas ? workflowsStore.nodesByName[selectedOnCanvas]?.id : void 0;
5533
+ nodeIdToSelect.value = shouldSync && !canvasStore.hasRangeSelection && selected2.value?.node.id !== selectedNodeId ? selectedNodeId : void 0;
5534
+ },
5535
+ { immediate: true }
5536
+ );
5537
+ watch(
5538
+ [tree2, nodeIdToSelect],
5539
+ ([latestTree, id]) => {
5540
+ if (id === void 0) {
5499
5541
  return;
5500
5542
  }
5501
- const entry = findLogEntryRec((e) => e.node.name === selectedOnCanvas, tree2.value);
5543
+ const entry = findLogEntryRec((e) => e.node.id === id, latestTree);
5502
5544
  if (!entry) {
5503
5545
  return;
5504
5546
  }
5505
- manualLogEntrySelection.value = { type: "selected", id: entry.id };
5547
+ nodeIdToSelect.value = void 0;
5548
+ manualLogEntrySelection.value = { type: "selected", entry };
5506
5549
  let parent = entry.parent;
5507
5550
  while (parent !== void 0) {
5508
5551
  toggleExpand(parent, true);
@@ -5513,11 +5556,18 @@ function useLogsSelection(execution, tree2, flatLogEntries, toggleExpand) {
5513
5556
  );
5514
5557
  return { selected: selected2, select, selectPrev, selectNext };
5515
5558
  }
5516
- function useLogsTreeExpand(entries) {
5517
- const collapsedEntries = ref({});
5559
+ function useLogsTreeExpand(entries, loadSubExecution) {
5560
+ const collapsedEntries = shallowRef({});
5518
5561
  const flatLogEntries = computed(() => flattenLogEntries(entries.value, collapsedEntries.value));
5519
5562
  function toggleExpanded(treeNode, expand) {
5520
- collapsedEntries.value[treeNode.id] = expand === void 0 ? !collapsedEntries.value[treeNode.id] : !expand;
5563
+ if (hasSubExecution(treeNode) && treeNode.children.length === 0) {
5564
+ void loadSubExecution(treeNode);
5565
+ return;
5566
+ }
5567
+ collapsedEntries.value = {
5568
+ ...collapsedEntries.value,
5569
+ [treeNode.id]: expand === void 0 ? !collapsedEntries.value[treeNode.id] : !expand
5570
+ };
5521
5571
  }
5522
5572
  return {
5523
5573
  flatLogEntries,
@@ -5730,7 +5780,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
5730
5780
  container: {}
5731
5781
  },
5732
5782
  setup(__props) {
5733
- const pipWindow = inject(PiPWindowSymbol);
5783
+ const pipWindow = inject(PiPWindowSymbol, ref());
5734
5784
  const activeElement = useActiveElement({ window: pipWindow?.value });
5735
5785
  const isBlurred = computed(() => {
5736
5786
  if (pipWindow?.value) {
@@ -5742,7 +5792,8 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
5742
5792
  toRef(() => __props.keyMap),
5743
5793
  { disabled: isBlurred }
5744
5794
  );
5745
- return () => {
5795
+ return (_ctx, _cache) => {
5796
+ return openBlock(), createElementBlock("div");
5746
5797
  };
5747
5798
  }
5748
5799
  });
@@ -5787,13 +5838,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5787
5838
  displayExecution
5788
5839
  } = useChatState(props.isReadOnly);
5789
5840
  const { entries, execution, hasChat, latestNodeNameById, resetExecutionData, loadSubExecution } = useLogsExecutionData();
5790
- const { flatLogEntries, toggleExpanded } = useLogsTreeExpand(entries);
5841
+ const { flatLogEntries, toggleExpanded } = useLogsTreeExpand(entries, loadSubExecution);
5791
5842
  const { selected: selected2, select, selectNext, selectPrev } = useLogsSelection(
5792
5843
  execution,
5793
5844
  entries,
5794
5845
  flatLogEntries,
5795
5846
  toggleExpanded
5796
5847
  );
5848
+ const inputTableColumnCollapsing = ref();
5849
+ const outputTableColumnCollapsing = ref();
5797
5850
  const isLogDetailsOpen = computed(() => isOpen.value && selected2.value !== void 0);
5798
5851
  const isLogDetailsVisuallyOpen = computed(
5799
5852
  () => isLogDetailsOpen.value && !isCollapsingDetailsPanel.value
@@ -5807,6 +5860,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5807
5860
  onToggleOpen,
5808
5861
  onToggleSyncSelection: logsStore.toggleLogSelectionSync
5809
5862
  }));
5863
+ const inputCollapsingColumnName = computed(
5864
+ () => inputTableColumnCollapsing.value?.nodeName === selected2.value?.node.name ? inputTableColumnCollapsing.value?.columnName ?? null : null
5865
+ );
5866
+ const outputCollapsingColumnName = computed(
5867
+ () => outputTableColumnCollapsing.value?.nodeName === selected2.value?.node.name ? outputTableColumnCollapsing.value?.columnName ?? null : null
5868
+ );
5810
5869
  const keyMap = computed(() => ({
5811
5870
  j: selectNext,
5812
5871
  k: selectPrev,
@@ -5832,6 +5891,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5832
5891
  ndvStore.setOutputRunIndex(treeNode.runIndex);
5833
5892
  });
5834
5893
  }
5894
+ function handleChangeInputTableColumnCollapsing(columnName) {
5895
+ inputTableColumnCollapsing.value = columnName && selected2.value ? { nodeName: selected2.value.node.name, columnName } : void 0;
5896
+ }
5897
+ function handleChangeOutputTableColumnCollapsing(columnName) {
5898
+ outputTableColumnCollapsing.value = columnName && selected2.value ? { nodeName: selected2.value.node.name, columnName } : void 0;
5899
+ }
5835
5900
  return (_ctx, _cache) => {
5836
5901
  return openBlock(), createElementBlock("div", {
5837
5902
  ref_key: "pipContainer",
@@ -5910,8 +5975,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5910
5975
  onResizeend: handleResizeOverviewPanelEnd
5911
5976
  }, {
5912
5977
  default: withCtx(() => [
5913
- (openBlock(), createBlock(LogsOverviewPanel, {
5914
- key: unref(execution)?.id ?? "",
5978
+ createVNode(LogsOverviewPanel, {
5915
5979
  class: normalizeClass(_ctx.$style.logsOverview),
5916
5980
  "is-open": unref(isOpen),
5917
5981
  "is-read-only": _ctx.isReadOnly,
@@ -5925,14 +5989,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5925
5989
  onSelect: unref(select),
5926
5990
  onClearExecutionData: unref(resetExecutionData),
5927
5991
  onToggleExpanded: unref(toggleExpanded),
5928
- onOpenNdv: handleOpenNdv,
5929
- onLoadSubExecution: unref(loadSubExecution)
5992
+ onOpenNdv: handleOpenNdv
5930
5993
  }, {
5931
5994
  actions: withCtx(() => [
5932
5995
  !isLogDetailsVisuallyOpen.value ? (openBlock(), createBlock(LogsPanelActions, normalizeProps(mergeProps({ key: 0 }, logsPanelActionsProps.value)), null, 16)) : createCommentVNode("", true)
5933
5996
  ]),
5934
5997
  _: 1
5935
- }, 8, ["class", "is-open", "is-read-only", "is-compact", "selected", "execution", "entries", "latest-node-info", "flat-log-entries", "onSelect", "onClearExecutionData", "onToggleExpanded", "onLoadSubExecution"]))
5998
+ }, 8, ["class", "is-open", "is-read-only", "is-compact", "selected", "execution", "entries", "latest-node-info", "flat-log-entries", "onSelect", "onClearExecutionData", "onToggleExpanded"])
5936
5999
  ]),
5937
6000
  _: 1
5938
6001
  }, 8, ["class", "width", "style", "is-resizing-enabled", "window", "onResize"]),
@@ -5942,17 +6005,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5942
6005
  "is-open": unref(isOpen),
5943
6006
  "log-entry": unref(selected2),
5944
6007
  window: unref(pipWindow),
5945
- "latest-info": unref(latestNodeNameById)[unref(selected2).id],
6008
+ "latest-info": unref(latestNodeNameById)[unref(selected2).node.id],
5946
6009
  panels: unref(logsStore).detailsState,
6010
+ "collapsing-input-table-column-name": inputCollapsingColumnName.value,
6011
+ "collapsing-output-table-column-name": outputCollapsingColumnName.value,
5947
6012
  onClickHeader: _cache[2] || (_cache[2] = ($event) => unref(onToggleOpen)(true)),
5948
6013
  onToggleInputOpen: unref(logsStore).toggleInputOpen,
5949
- onToggleOutputOpen: unref(logsStore).toggleOutputOpen
6014
+ onToggleOutputOpen: unref(logsStore).toggleOutputOpen,
6015
+ onCollapsingInputTableColumnChanged: handleChangeInputTableColumnCollapsing,
6016
+ onCollapsingOutputTableColumnChanged: handleChangeOutputTableColumnCollapsing
5950
6017
  }, {
5951
6018
  actions: withCtx(() => [
5952
6019
  isLogDetailsVisuallyOpen.value ? (openBlock(), createBlock(LogsPanelActions, normalizeProps(mergeProps({ key: 0 }, logsPanelActionsProps.value)), null, 16)) : createCommentVNode("", true)
5953
6020
  ]),
5954
6021
  _: 1
5955
- }, 8, ["class", "is-open", "log-entry", "window", "latest-info", "panels", "onToggleInputOpen", "onToggleOutputOpen"])) : createCommentVNode("", true)
6022
+ }, 8, ["class", "is-open", "log-entry", "window", "latest-info", "panels", "collapsing-input-table-column-name", "collapsing-output-table-column-name", "onToggleInputOpen", "onToggleOutputOpen"])) : createCommentVNode("", true)
5956
6023
  ], 2)
5957
6024
  ], 2)
5958
6025
  ]),