n8n-editor-ui 1.86.0 → 1.87.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/assets/AnimatedSpinner-BJKBduqI.js +18 -0
  2. package/dist/assets/AnimatedSpinner-ChSRgyeI.css +39 -0
  3. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-DofUIs9S.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-BNiwICGe.js} +1 -1
  4. package/dist/assets/{AuthView-CyY2quTd.js → AuthView-DrViDPFs.js} +2 -2
  5. package/dist/assets/{CanvasChatSwitch-CRtE2Fld.css → CanvasChatSwitch-0IWSu8RE.css} +249 -45
  6. package/dist/assets/{CanvasChatSwitch-BTInPgKl.js → CanvasChatSwitch-BnTApoNZ.js} +436 -268
  7. package/dist/assets/{ChangePasswordView-Db-MkXhZ.js → ChangePasswordView-DPUv2ZhO.js} +3 -3
  8. package/dist/assets/CollectionParameter-14_bIMyy.js +4 -0
  9. package/dist/assets/{CredentialsView-CLr_6U2B.js → CredentialsView-Cx3MfjwO.js} +8 -8
  10. package/dist/assets/{ErrorView-CUS5vnCW.js → ErrorView-C3Sxa6Qs.js} +1 -1
  11. package/dist/assets/{ExecutionsTime-BOPJEomw.css → ExecutionsTime-DZHUIJjP.css} +6 -6
  12. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-D15zjPBZ.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-B0NnOKRw.js} +23 -20
  13. package/dist/assets/{ExecutionsView-1df-oH5P.js → ExecutionsView-BD9a5MiE.js} +48 -56
  14. package/dist/assets/{ExecutionsView-BnBpSqVn.css → ExecutionsView-ByQf9yli.css} +13 -47
  15. package/dist/assets/{FileSaver.min-DLKMtSuf.js → FileSaver.min-CsyH54Dh.js} +1 -1
  16. package/dist/assets/{FixedCollectionParameter-CcqTLBeP.js → FixedCollectionParameter-icyYiANk.js} +1 -1
  17. package/dist/assets/{ForgotMyPasswordView-BHRWkO2H.js → ForgotMyPasswordView-B7m6OAyt.js} +3 -3
  18. package/dist/assets/InsightsChartAverageRuntime-CiI5y8BG.js +61 -0
  19. package/dist/assets/InsightsChartFailed-BAnQv9pU.js +57 -0
  20. package/dist/assets/InsightsChartFailureRate-CGRL86zw.js +57 -0
  21. package/dist/assets/InsightsChartTimeSaved-BJmjC9xP.js +71 -0
  22. package/dist/assets/InsightsChartTotal-YSqQgGkL.js +59 -0
  23. package/dist/assets/InsightsDashboard-CB4vHnBh.css +152 -0
  24. package/dist/assets/InsightsDashboard-oe5QP-_0.js +154 -0
  25. package/dist/assets/InsightsPaywall-BCSe1GCl.js +58 -0
  26. package/dist/assets/InsightsPaywall-OeXh6LeZ.css +133 -0
  27. package/dist/assets/InsightsSummary-Bf61oFlG.js +185 -0
  28. package/dist/assets/{InsightsSummary-DcRuPjLJ.css → InsightsSummary-W08OzElS.css} +57 -35
  29. package/dist/assets/InsightsTableWorkflows-B5M_o3Di.js +129 -0
  30. package/dist/assets/InsightsTableWorkflows-Us3j4UTO.css +128 -0
  31. package/dist/assets/{Logo-DbXTFYA8.js → Logo-DZ8mhDMd.js} +1 -1
  32. package/dist/assets/{MainHeader-BfQR9Td3.js → MainHeader-CItoJWMi.js} +9 -10
  33. package/dist/assets/{MainSidebar-CDUegYGN.js → MainSidebar-Cponf9eD.js} +11 -2
  34. package/dist/assets/{NodeCreation-BBXRRxZa.js → NodeCreation-DiUBT9p0.js} +4 -4
  35. package/dist/assets/{NodeCreator-BiyvtIjb.js → NodeCreator-BHji7uJa.js} +3 -3
  36. package/dist/assets/{NodeDetailsView-BcVu3kf0.css → NodeDetailsView-BT-ro74o.css} +63 -70
  37. package/dist/assets/{NodeDetailsView-Ph7FVpa8.js → NodeDetailsView-CPsaG2IZ.js} +123 -444
  38. package/dist/assets/{NodeView-BEJ48TF4.js → NodeView-9P-9rNOD.js} +19 -21
  39. package/dist/assets/{ProjectCardBadge-B7cCM6Eo.js → ProjectCardBadge-BdyDghHf.js} +1 -1
  40. package/dist/assets/{ProjectHeader-BjPaep-H.js → ProjectHeader-D8-9oE80.js} +1 -1
  41. package/dist/assets/{ProjectSettings-C1By1g0Z.js → ProjectSettings-Brpx7x2l.js} +2 -2
  42. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-UHiXbqwy.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-CShLauba.js} +1 -2
  43. package/dist/assets/{ResourcesListLayout-CiiXWGd5.js → ResourcesListLayout-nD22utQX.js} +1 -1
  44. package/dist/assets/{RunDataAi-CN9FrT9c.css → RunDataAi-CUUDqZRP.css} +128 -0
  45. package/dist/assets/{RunDataAi-CQE0VYut.js → RunDataAi-DULZvgnn.js} +88 -37
  46. package/dist/assets/{RunDataJson-BY9cOxFp.js → RunDataJson-jnag_uEf.js} +11 -12
  47. package/dist/assets/{RunDataJsonActions-CuFjccfe.js → RunDataJsonActions-CWCdb4Yi.js} +1 -2
  48. package/dist/assets/{RunDataSearch-afEc-21Y.js → RunDataSearch-CI5OdX2M.js} +1 -1
  49. package/dist/assets/{RunDataTable-N6yWFXKt.js → RunDataTable-CQc98S7W.js} +10 -8
  50. package/dist/assets/{SamlOnboarding-HDQzVmha.js → SamlOnboarding-mdVsZszT.js} +3 -3
  51. package/dist/assets/{SettingsApiView-DQMZT3uc.js → SettingsApiView-CRDQ66Jq.js} +1 -1
  52. package/dist/assets/{SettingsCommunityNodesView-BlQT_0E8.js → SettingsCommunityNodesView-DCp8y1mn.js} +4 -5
  53. package/dist/assets/{SettingsExternalSecrets-BL_3qoNS.js → SettingsExternalSecrets-PhLe1dhs.js} +1 -1
  54. package/dist/assets/{SettingsLdapView-BMsfXg-A.js → SettingsLdapView-DrPh9Cmp.js} +1 -1
  55. package/dist/assets/{SettingsLogStreamingView-Bm5vaSO2.js → SettingsLogStreamingView-D_dGzLfg.js} +1 -1
  56. package/dist/assets/{SettingsPersonalView-Djl1VXnE.js → SettingsPersonalView-C6XeNBcf.js} +1 -1
  57. package/dist/assets/{SettingsSourceControl-A-9nD8hG.js → SettingsSourceControl-Bu_qi87k.js} +1 -1
  58. package/dist/assets/{SettingsSso-DZCscZY6.js → SettingsSso-BF8Nr76R.js} +1 -1
  59. package/dist/assets/{SettingsUsageAndPlan-Rd5AGlNl.js → SettingsUsageAndPlan-DTyc2TI4.js} +1 -1
  60. package/dist/assets/{SettingsUsersView-NEahsGVs.js → SettingsUsersView-BfK_vKh5.js} +1 -1
  61. package/dist/assets/{SettingsView-CeXAUGXE.js → SettingsView-bkz5b7Ks.js} +1 -1
  62. package/dist/assets/{SetupView-BI7oJfg0.js → SetupView--_MmPcKt.js} +3 -3
  63. package/dist/assets/{SetupWorkflowCredentialsButton-DMZX1S1F.js → SetupWorkflowCredentialsButton-C94b-j6c.js} +2 -4
  64. package/dist/assets/{SetupWorkflowFromTemplateView-DZsPVdhN.js → SetupWorkflowFromTemplateView-Bn6NUya1.js} +3 -12
  65. package/dist/assets/{SigninView-CzVnEKyz.js → SigninView-s9B3HXBX.js} +3 -3
  66. package/dist/assets/{SignoutView-C4ynr4AN.js → SignoutView-CvFIZuRL.js} +1 -1
  67. package/dist/assets/{SignupView-9nwGonm9.js → SignupView-B6YMoGnc.js} +3 -3
  68. package/dist/assets/{TemplateDetails-DT1tI4AF.js → TemplateDetails-DOGmuYC4.js} +1 -1
  69. package/dist/assets/{TemplateList-DGPm_Qol.js → TemplateList-BRL4OSZK.js} +1 -1
  70. package/dist/assets/{TemplatesCollectionView-DwXY5s5G.js → TemplatesCollectionView-Ct2GIDCZ.js} +7 -9
  71. package/dist/assets/{TemplatesSearchView-D0R7uF40.js → TemplatesSearchView-CWGmY4-P.js} +3 -3
  72. package/dist/assets/{TemplatesView-BZ-ntkfi.js → TemplatesView-vYQo2Y75.js} +1 -1
  73. package/dist/assets/{TemplatesWorkflowView-TwVAHvD7.js → TemplatesWorkflowView-Cw6mc6wy.js} +5 -7
  74. package/dist/assets/{TestDefinitionEditView-o2Gc4BjN.js → TestDefinitionEditView-CZnzTAsp.js} +163 -199
  75. package/dist/assets/{TestDefinitionEditView-C3nnWQ4Q.css → TestDefinitionEditView-Cwkrz308.css} +12 -18
  76. package/dist/assets/{TestDefinitionListView-BuUWjPAl.js → TestDefinitionListView-CKsRlhn4.js} +1 -1
  77. package/dist/assets/{TestDefinitionNewView-DmSFNxfn.js → TestDefinitionNewView-B1KZ2Qnt.js} +2 -2
  78. package/dist/assets/{TestDefinitionRootView-1dNmGZUI.js → TestDefinitionRootView-V43FaNr3.js} +1 -1
  79. package/dist/assets/{VariablesView-D46tH9pw.js → VariablesView-DLB1Vvnc.js} +3 -3
  80. package/dist/assets/{WorkerView-G0K849qT.js → WorkerView-Iqi25XGQ.js} +6 -7
  81. package/dist/assets/{WorkflowActivator-DfalOPsa.js → WorkflowActivator-D9fExB06.js} +2 -2
  82. package/dist/assets/{WorkflowExecutionsInfoAccordion-BcD7ZskD.js → WorkflowExecutionsInfoAccordion-Md7C2uBw.js} +1 -1
  83. package/dist/assets/{WorkflowExecutionsLandingPage-BhPbJi5K.js → WorkflowExecutionsLandingPage-CKOlfG7s.js} +2 -2
  84. package/dist/assets/{WorkflowExecutionsPreview-CHu6M3Dh.css → WorkflowExecutionsPreview-D7jTJ8GL.css} +16 -48
  85. package/dist/assets/{WorkflowExecutionsPreview-CowaFwPg.js → WorkflowExecutionsPreview-DS6HDJng.js} +24 -256
  86. package/dist/assets/{WorkflowExecutionsView-BAojAjIM.js → WorkflowExecutionsView-LF3g9gDB.js} +11 -17
  87. package/dist/assets/{WorkflowHistory-Bj5_YFN8.js → WorkflowHistory-Cu7OIIMi.js} +4 -4
  88. package/dist/assets/{WorkflowOnboardingView-D9peqUJs.js → WorkflowOnboardingView-B2WUKfr6.js} +1 -1
  89. package/dist/assets/{WorkflowPreview-gflk06YT.js → WorkflowPreview-DlKRTeNZ.js} +1 -1
  90. package/dist/assets/{WorkflowsView-CmgKYCQ6.js → WorkflowsView-dot2ovV7.js} +10 -10
  91. package/dist/assets/chartjs.utils-BLcAAfTE.js +193 -0
  92. package/dist/assets/dateFormatter-Cdy8FmTT.js +21 -0
  93. package/dist/assets/{easyAiWorkflowUtils-CLssJdgl.js → easyAiWorkflowUtils-C5xkiwuo.js} +1 -1
  94. package/dist/assets/{global-link-actions-BphqczCY.js → global-link-actions-CfWIYTMM.js} +1 -1
  95. package/dist/assets/{import-curl-C9KhAemD.js → import-curl-DO7fae0m.js} +1 -1
  96. package/dist/assets/{index-C0DaAYgf.js → index-Bo3CExk-.js} +3 -1
  97. package/dist/assets/{index-CkOV8f0Z.js → index-D76xStxp.js} +9450 -3622
  98. package/dist/assets/{index-BaqhUIB7.css → index-DJ205bL0.css} +369 -44
  99. package/dist/assets/{pickBy-DUugkW7s.js → pickBy-DdpxIwij.js} +1 -1
  100. package/dist/assets/{templateActions-Czp13jCM.js → templateActions-BCMgItKi.js} +2 -7
  101. package/dist/assets/{useBeforeUnload-BBbiw-FV.js → useBeforeUnload-CDzomPGL.js} +1 -1
  102. package/dist/assets/{useCanvasMapping-Cla--atl.js → useCanvasMapping-D1DfqsUU.js} +6 -6
  103. package/dist/assets/{useCanvasOperations-FyzGfva5.js → useCanvasOperations-CAthHfOB.js} +27 -256
  104. package/dist/assets/{useClearExecutionButtonVisible-fESJZE5R.js → useClearExecutionButtonVisible-CnDyjcGF.js} +2 -2
  105. package/dist/assets/{useExecutionDebugging-D4s4CdaL.js → useExecutionDebugging-Bm9sy3W3.js} +1 -1
  106. package/dist/assets/{useExecutionHelpers-Bm91b8wb.js → useExecutionHelpers-C_yBGArA.js} +2 -19
  107. package/dist/assets/{useImportCurlCommand-BPNuR5ZX.js → useImportCurlCommand-CK-lTdZr.js} +2 -2
  108. package/dist/assets/{usePushConnection-BbQhNUm8.js → usePushConnection-potv7eom.js} +3 -4
  109. package/dist/assets/{useTestDefinitionForm-ZJngcsSH.js → useTestDefinitionForm-Dlzud2C-.js} +1 -1
  110. package/dist/assets/{useWorkflowActivate-CkCvd-g6.js → useWorkflowActivate-BvmFVCGP.js} +1 -1
  111. package/dist/index.html +2 -2
  112. package/package.json +1 -1
  113. package/dist/assets/CollectionParameter-BD3jmKi_.js +0 -4
  114. package/dist/assets/InsightsSummary-CyilLKXz.js +0 -152
  115. package/dist/assets/pushConnection.store-Cb2TGyrZ.js +0 -238
  116. package/dist/assets/useRunWorkflow-DnbQqqcB.js +0 -527
@@ -1,10 +1,10 @@
1
- import { u as useTestDefinitionForm } from "./useTestDefinitionForm-ZJngcsSH.js";
2
- import { _ as _export_sfc, i as createElementBlock, g as openBlock, k as createBaseVNode, n as normalizeClass, d as defineComponent, r as ref, $ as useCssModule, q as computed, h as resolveComponent, m as unref, j as createVNode, f as createCommentVNode, aR as N8nTooltip, w as withCtx, e as createBlock, b8 as N8nText, x as renderSlot, F as Fragment, l as createTextVNode, t as toDisplayString, dc as InfoTip, c as useI18n, gf as ne, T as useWorkflowsStore, bv as useNodeTypesStore, U as useRoute, b as useRouter, fM as useModel, o as onMounted, cX as N8nHeading, gg as _sfc_main$9, b2 as mergeProps, ba as N8nButton, ah as useTelemetry, a3 as useProjectsStore, gh as SAMPLE_EVALUATION_WORKFLOW, aS as N8nLink, gi as __unplugin_components_0, V as VIEWS, fL as mergeModels, gj as Tag, gk as NODE_PINNING_MODAL_KEY, gl as __unplugin_components_0$1, aj as useMessage, fl as dateFormat, bb as watchEffect, D as renderList, aB as withDirectives, aC as vShow, gm as TestTableBase, ca as N8nIcon, B as normalizeStyle, K as useDebounce, a as useToast, c7 as useTestDefinitionStore, fZ as useAnnotationTagsStore, L as useUIStore, Z as useDocumentVisibility, I as watch, aT as _sfc_main$a, gn as InlineNameEdit } from "./index-CkOV8f0Z.js";
3
- import { u as useVueFlow, a as useCanvasMapping, C as Canvas, b as CanvasNode } from "./useCanvasMapping-Cla--atl.js";
4
- import { c as useCanvasOperations } from "./useCanvasOperations-FyzGfva5.js";
5
- import { L as Line } from "./index-C0DaAYgf.js";
6
- import "./useRunWorkflow-DnbQqqcB.js";
7
- import "./pushConnection.store-Cb2TGyrZ.js";
1
+ import { u as useTestDefinitionForm } from "./useTestDefinitionForm-Dlzud2C-.js";
2
+ import { _ as _export_sfc, i as createElementBlock, g as openBlock, k as createBaseVNode, n as normalizeClass, d as defineComponent, r as ref, a0 as useCssModule, q as computed, h as resolveComponent, m as unref, j as createVNode, f as createCommentVNode, aS as N8nTooltip, w as withCtx, e as createBlock, b9 as N8nText, x as renderSlot, F as Fragment, l as createTextVNode, t as toDisplayString, df as InfoTip, c as useI18n, g8 as ne, U as useWorkflowsStore, bw as useNodeTypesStore, W as useRoute, b as useRouter, fA as useModel, o as onMounted, c_ as N8nHeading, g9 as _sfc_main$9, b3 as mergeProps, bb as N8nButton, ai as useTelemetry, a4 as useProjectsStore, ga as SAMPLE_EVALUATION_WORKFLOW, aT as N8nLink, gb as __unplugin_components_0, V as VIEWS, fz as mergeModels, gc as Tag, gd as NODE_PINNING_MODAL_KEY, ge as __unplugin_components_0$1, ak as useMessage, gf as useCssVar, f9 as dateformat, bc as watchEffect, D as renderList, gg as TestTableBase, bE as N8nIcon, K as useDebounce, a as useToast, g5 as useTestDefinitionStore, fQ as useAnnotationTagsStore, L as useUIStore, $ as useDocumentVisibility, I as watch, d2 as orderBy, aU as _sfc_main$a, gh as InlineNameEdit } from "./index-D76xStxp.js";
3
+ import { u as useVueFlow, a as useCanvasMapping, C as Canvas, b as CanvasNode } from "./useCanvasMapping-D1DfqsUU.js";
4
+ import { b as useCanvasOperations } from "./useCanvasOperations-CAthHfOB.js";
5
+ import { L as Line } from "./index-Bo3CExk-.js";
6
+ import { _ as __unplugin_components_0$2 } from "./AnimatedSpinner-BJKBduqI.js";
7
+ import { c as convertToDisplayDate } from "./dateFormatter-Cdy8FmTT.js";
8
8
  const blockArrow = "_blockArrow_hbkir_123";
9
9
  const stalk = "_stalk_hbkir_129";
10
10
  const arrowHead = "_arrowHead_hbkir_136";
@@ -762,61 +762,44 @@ const cssModules$4 = {
762
762
  "$style": style0$4
763
763
  };
764
764
  const ConfigSection = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__cssModules", cssModules$4]]);
765
- const THEME_COLORS = {
766
- light: {
767
- primary: "rgb(255, 110, 92)",
768
- text: {
769
- primary: "rgb(68, 68, 68)",
770
- secondary: "rgb(102, 102, 102)"
771
- },
772
- background: "rgb(255, 255, 255)",
773
- grid: "rgba(68, 68, 68, 0.1)"
774
- },
775
- dark: {
776
- primary: "rgb(255, 110, 92)",
777
- text: {
778
- primary: "rgb(255, 255, 255)",
779
- secondary: "rgba(255, 255, 255, 0.7)"
780
- },
781
- background: "rgb(32, 32, 32)",
782
- grid: "rgba(255, 255, 255, 0.1)"
783
- }
784
- };
785
- function useMetricsChart(mode = "light") {
786
- const colors = THEME_COLORS[mode];
787
- const toRGBA = (color, alpha) => {
788
- if (color.includes("rgba")) return color;
789
- return color.replace("rgb", "rgba").replace(")", `, ${alpha})`);
765
+ function useMetricsChart() {
766
+ const colors = {
767
+ primary: useCssVar("--color-primary", document.body).value,
768
+ textBase: useCssVar("--color-text-base", document.body).value,
769
+ backgroundXLight: useCssVar("--color-background-xlight", document.body).value,
770
+ foregroundLight: useCssVar("--color-foreground-light", document.body).value,
771
+ foregroundBase: useCssVar("--color-foreground-base", document.body).value,
772
+ foregroundDark: useCssVar("--color-foreground-dark", document.body).value
790
773
  };
791
774
  function generateChartData(runs2, metric) {
792
- const sortedRuns = [...runs2].sort((a, b) => new Date(a.runAt).getTime() - new Date(b.runAt).getTime()).filter((run) => run.metrics?.[metric]);
793
- return {
794
- labels: sortedRuns.map((run) => {
795
- return dateFormat(run.runAt, "yyyy-mm-dd HH:MM");
796
- }),
775
+ const data = {
797
776
  datasets: [
798
777
  {
799
- label: metric,
800
- data: sortedRuns.map((run) => run.metrics?.[metric] ?? 0),
778
+ data: runs2,
779
+ parsing: {
780
+ xAxisKey: "id",
781
+ yAxisKey: `metrics.${metric}`
782
+ },
801
783
  borderColor: colors.primary,
802
- backgroundColor: toRGBA(colors.primary, 0.1),
803
- borderWidth: 2,
804
- pointRadius: 4,
805
- pointHoverRadius: 6,
806
- pointBackgroundColor: colors.primary,
807
- pointBorderColor: colors.primary,
808
- pointHoverBackgroundColor: colors.background,
809
- pointHoverBorderColor: colors.primary,
810
- tension: 0.4,
811
- fill: true
784
+ backgroundColor: colors.backgroundXLight,
785
+ borderWidth: 1,
786
+ pointRadius: 2,
787
+ pointHoverRadius: 4,
788
+ pointBackgroundColor: colors.backgroundXLight,
789
+ pointHoverBackgroundColor: colors.backgroundXLight
812
790
  }
813
791
  ]
814
792
  };
793
+ return data;
815
794
  }
816
- function generateChartOptions(params) {
795
+ function generateChartOptions({
796
+ metric,
797
+ data
798
+ }) {
817
799
  return {
818
800
  responsive: true,
819
801
  maintainAspectRatio: false,
802
+ animation: false,
820
803
  devicePixelRatio: 2,
821
804
  interaction: {
822
805
  mode: "index",
@@ -824,67 +807,64 @@ function useMetricsChart(mode = "light") {
824
807
  },
825
808
  scales: {
826
809
  y: {
827
- beginAtZero: true,
810
+ border: {
811
+ display: false
812
+ },
828
813
  grid: {
829
- color: colors.grid
814
+ color: colors.foregroundBase
830
815
  },
831
816
  ticks: {
832
817
  padding: 8,
833
- color: colors.text.primary
834
- },
835
- title: {
836
- display: false,
837
- text: params.metric,
838
- padding: 16,
839
- color: colors.text.primary
818
+ color: colors.textBase
840
819
  }
841
820
  },
842
821
  x: {
843
- grid: {
822
+ border: {
844
823
  display: false
845
824
  },
846
- ticks: {
825
+ grid: {
847
826
  display: false
848
827
  },
849
- title: {
850
- text: params.xTitle,
851
- padding: 1,
852
- color: colors.text.primary
828
+ ticks: {
829
+ color: colors.textBase,
830
+ // eslint-disable-next-line id-denylist
831
+ callback(_tickValue, index) {
832
+ return `#${data[index].index}`;
833
+ }
853
834
  }
854
835
  }
855
836
  },
856
837
  plugins: {
857
838
  tooltip: {
858
- backgroundColor: colors.background,
859
- titleColor: colors.text.primary,
839
+ backgroundColor: colors.backgroundXLight,
840
+ titleColor: colors.textBase,
860
841
  titleFont: {
861
842
  weight: "600"
862
843
  },
863
- bodyColor: colors.text.secondary,
844
+ bodyColor: colors.textBase,
864
845
  bodySpacing: 4,
865
846
  padding: 12,
866
- borderColor: toRGBA(colors.primary, 0.2),
847
+ borderColor: colors.foregroundBase,
867
848
  borderWidth: 1,
868
849
  displayColors: true,
869
850
  callbacks: {
870
- title: (tooltipItems) => tooltipItems[0].label,
871
- label: (context) => `${params.metric}: ${context.parsed.y.toFixed(2)}`
851
+ title: (tooltipItems) => {
852
+ return dateformat(tooltipItems[0].raw.runAt, "yyyy-mm-dd HH:MM");
853
+ },
854
+ label: (context) => `${metric}: ${context.parsed.y.toFixed(2)}`,
855
+ labelColor() {
856
+ return {
857
+ borderColor: "rgba(29, 21, 21, 0)",
858
+ backgroundColor: colors.primary,
859
+ borderWidth: 0,
860
+ borderRadius: 5
861
+ };
862
+ }
872
863
  }
873
864
  },
874
865
  legend: {
875
866
  display: false
876
867
  }
877
- },
878
- animation: {
879
- duration: 750,
880
- easing: "easeInOutQuart"
881
- },
882
- transitions: {
883
- active: {
884
- animation: {
885
- duration: 300
886
- }
887
- }
888
868
  }
889
869
  };
890
870
  }
@@ -897,26 +877,29 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
897
877
  __name: "MetricsChart",
898
878
  props: {
899
879
  selectedMetric: {},
900
- runs: {},
901
- theme: {}
880
+ runs: {}
902
881
  },
903
882
  emits: ["update:selectedMetric"],
904
883
  setup(__props, { emit: __emit }) {
905
884
  const emit = __emit;
906
885
  const props = __props;
907
- const locale = useI18n();
908
- const metricsChart = useMetricsChart(props.theme);
886
+ const metricsChart = useMetricsChart();
909
887
  const availableMetrics = computed(() => {
910
888
  return props.runs.reduce((acc, run) => {
911
889
  const metricKeys = Object.keys(run.metrics ?? {});
912
890
  return [.../* @__PURE__ */ new Set([...acc, ...metricKeys])];
913
891
  }, []);
914
892
  });
915
- const chartData = computed(() => metricsChart.generateChartData(props.runs, props.selectedMetric));
893
+ const filteredRuns = computed(
894
+ () => props.runs.filter((run) => run.metrics?.[props.selectedMetric] !== void 0)
895
+ );
896
+ const chartData = computed(
897
+ () => metricsChart.generateChartData(filteredRuns.value, props.selectedMetric)
898
+ );
916
899
  const chartOptions = computed(
917
900
  () => metricsChart.generateChartOptions({
918
901
  metric: props.selectedMetric,
919
- xTitle: locale.baseText("testDefinition.listRuns.runDate")
902
+ data: filteredRuns.value
920
903
  })
921
904
  );
922
905
  watchEffect(() => {
@@ -927,8 +910,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
927
910
  return (_ctx, _cache) => {
928
911
  const _component_N8nOption = resolveComponent("N8nOption");
929
912
  const _component_N8nSelect = resolveComponent("N8nSelect");
930
- return availableMetrics.value.length > 0 ? (openBlock(), createElementBlock("div", {
931
- key: 0,
913
+ return openBlock(), createElementBlock("div", {
932
914
  class: normalizeClass(_ctx.$style.metricsChartContainer)
933
915
  }, [
934
916
  createBaseVNode("div", {
@@ -956,22 +938,22 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
956
938
  createBaseVNode("div", {
957
939
  class: normalizeClass(_ctx.$style.chartWrapper)
958
940
  }, [
959
- availableMetrics.value.length > 0 ? (openBlock(), createBlock(unref(Line), {
941
+ (openBlock(), createBlock(unref(Line), {
960
942
  key: _ctx.selectedMetric,
961
943
  data: chartData.value,
962
944
  options: chartOptions.value,
963
945
  class: normalizeClass(_ctx.$style.metricsChart)
964
- }, null, 8, ["data", "options", "class"])) : createCommentVNode("", true)
946
+ }, null, 8, ["data", "options", "class"]))
965
947
  ], 2)
966
- ], 2)) : createCommentVNode("", true);
948
+ ], 2);
967
949
  };
968
950
  }
969
951
  });
970
- const metricsChartContainer = "_metricsChartContainer_1ejem_123";
971
- const chartHeader = "_chartHeader_1ejem_128";
972
- const chartTitle = "_chartTitle_1ejem_136";
973
- const metricSelect = "_metricSelect_1ejem_141";
974
- const chartWrapper = "_chartWrapper_1ejem_144";
952
+ const metricsChartContainer = "_metricsChartContainer_1xhz2_123";
953
+ const chartHeader = "_chartHeader_1xhz2_128";
954
+ const chartTitle = "_chartTitle_1xhz2_131";
955
+ const metricSelect = "_metricSelect_1xhz2_136";
956
+ const chartWrapper = "_chartWrapper_1xhz2_139";
975
957
  const style0$3 = {
976
958
  metricsChartContainer,
977
959
  chartHeader,
@@ -988,24 +970,43 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
988
970
  __name: "TestRunsTable",
989
971
  props: {
990
972
  runs: {},
991
- columns: {},
992
- selectable: { type: Boolean }
973
+ columns: {}
993
974
  },
994
- emits: ["rowClick", "selectionChange", "deleteRuns"],
975
+ emits: ["rowClick"],
995
976
  setup(__props, { emit: __emit }) {
996
977
  const emit = __emit;
997
978
  const props = __props;
998
- const statusesColorDictionary = {
999
- new: "var(--color-primary)",
1000
- running: "var(--color-secondary)",
1001
- completed: "var(--color-success)",
1002
- error: "var(--color-danger)",
1003
- cancelled: "var(--color-foreground-dark)",
1004
- warning: "var(--color-warning)",
1005
- success: "var(--color-success)"
979
+ const statusDictionary = {
980
+ new: {
981
+ icon: "status-new",
982
+ color: "foreground-xdark"
983
+ },
984
+ running: {
985
+ icon: "spinner",
986
+ color: "secondary"
987
+ },
988
+ completed: {
989
+ icon: "status-completed",
990
+ color: "success"
991
+ },
992
+ error: {
993
+ icon: "status-error",
994
+ color: "danger"
995
+ },
996
+ cancelled: {
997
+ icon: "status-canceled",
998
+ color: "foreground-xdark"
999
+ },
1000
+ warning: {
1001
+ icon: "status-warning",
1002
+ color: "warning"
1003
+ },
1004
+ success: {
1005
+ icon: "status-completed",
1006
+ color: "success"
1007
+ }
1006
1008
  };
1007
1009
  const locale = useI18n();
1008
- const selectedRows = ref([]);
1009
1010
  const runSummaries = computed(() => {
1010
1011
  return props.runs.map(({ status, finalResult, ...run }) => {
1011
1012
  if (status === "completed" && finalResult) {
@@ -1014,86 +1015,60 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
1014
1015
  return { ...run, status };
1015
1016
  });
1016
1017
  });
1017
- function onSelectionChange(runs2) {
1018
- selectedRows.value = runs2;
1019
- emit("selectionChange", runs2);
1020
- }
1021
- async function deleteRuns() {
1022
- emit("deleteRuns", selectedRows.value);
1023
- }
1024
1018
  return (_ctx, _cache) => {
1025
1019
  const _component_N8nHeading = resolveComponent("N8nHeading");
1026
- const _component_n8n_button = resolveComponent("n8n-button");
1020
+ const _component_AnimatedSpinner = __unplugin_components_0$2;
1027
1021
  return openBlock(), createElementBlock("div", {
1028
1022
  class: normalizeClass(_ctx.$style.container)
1029
1023
  }, [
1030
1024
  createVNode(_component_N8nHeading, {
1031
1025
  size: "large",
1032
1026
  bold: true,
1033
- class: normalizeClass(_ctx.$style.runsTableHeading)
1027
+ class: normalizeClass(_ctx.$style.runsTableHeading),
1028
+ color: "text-base"
1034
1029
  }, {
1035
1030
  default: withCtx(() => [
1036
- createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.pastRuns.total", { adjustToNumber: _ctx.runs.length })), 1)
1031
+ createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.edit.pastRuns.total", { adjustToNumber: _ctx.runs.length })) + " ", 1),
1032
+ createVNode(unref(N8nText), null, {
1033
+ default: withCtx(() => [
1034
+ createTextVNode(" (" + toDisplayString(_ctx.runs.length) + ") ", 1)
1035
+ ]),
1036
+ _: 1
1037
+ })
1037
1038
  ]),
1038
1039
  _: 1
1039
1040
  }, 8, ["class"]),
1040
- createBaseVNode("div", {
1041
- class: normalizeClass(_ctx.$style.header)
1042
- }, [
1043
- withDirectives(createVNode(_component_n8n_button, {
1044
- type: "danger",
1045
- class: normalizeClass(_ctx.$style.activator),
1046
- size: "medium",
1047
- icon: "trash",
1048
- "data-test-id": "delete-runs-button",
1049
- onClick: deleteRuns
1050
- }, {
1051
- default: withCtx(() => [
1052
- createTextVNode(toDisplayString(unref(locale).baseText("testDefinition.listRuns.deleteRuns", {
1053
- adjustToNumber: selectedRows.value.length
1054
- })), 1)
1055
- ]),
1056
- _: 1
1057
- }, 8, ["class"]), [
1058
- [vShow, selectedRows.value.length > 0]
1059
- ])
1060
- ], 2),
1061
1041
  createVNode(TestTableBase, {
1062
1042
  data: runSummaries.value,
1063
1043
  columns: _ctx.columns,
1064
- selectable: "",
1065
1044
  "default-sort": { prop: "runAt", order: "descending" },
1066
- onRowClick: _cache[0] || (_cache[0] = (row) => emit("rowClick", row)),
1067
- onSelectionChange
1045
+ onRowClick: _cache[0] || (_cache[0] = (row) => emit("rowClick", row))
1068
1046
  }, {
1047
+ id: withCtx(({ row }) => [
1048
+ createTextVNode("#" + toDisplayString(row.index), 1)
1049
+ ]),
1069
1050
  status: withCtx(({ row }) => [
1070
1051
  createBaseVNode("div", _hoisted_1$1, [
1071
- createVNode(unref(N8nIcon), {
1072
- icon: "circle",
1073
- size: "xsmall",
1074
- style: normalizeStyle({ color: statusesColorDictionary[row.status] })
1075
- }, null, 8, ["style"]),
1076
- row.status === "error" ? (openBlock(), createBlock(unref(N8nText), {
1052
+ row.status === "running" ? (openBlock(), createBlock(unref(N8nText), {
1077
1053
  key: 0,
1078
- size: "small",
1079
- bold: "",
1080
- color: "text-base"
1054
+ color: "secondary",
1055
+ class: "mr-2xs"
1081
1056
  }, {
1082
1057
  default: withCtx(() => [
1083
- createTextVNode(toDisplayString(row.failedCases) + " / " + toDisplayString(row.totalCases) + " " + toDisplayString(row.status), 1)
1058
+ createVNode(_component_AnimatedSpinner)
1084
1059
  ]),
1085
- _: 2
1086
- }, 1024)) : (openBlock(), createBlock(unref(N8nText), {
1060
+ _: 1
1061
+ })) : (openBlock(), createBlock(unref(N8nIcon), {
1087
1062
  key: 1,
1088
- size: "small",
1089
- bold: "",
1090
- color: "text-base"
1091
- }, {
1092
- default: withCtx(() => [
1093
- createTextVNode(toDisplayString(row.status), 1)
1094
- ]),
1095
- _: 2
1096
- }, 1024))
1063
+ icon: statusDictionary[row.status].icon,
1064
+ color: statusDictionary[row.status].color,
1065
+ class: "mr-2xs"
1066
+ }, null, 8, ["icon", "color"])),
1067
+ row.status === "error" ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [
1068
+ createTextVNode(toDisplayString(row.failedCases) + " " + toDisplayString(row.status), 1)
1069
+ ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 3 }, [
1070
+ createTextVNode(toDisplayString(row.status), 1)
1071
+ ], 64))
1097
1072
  ])
1098
1073
  ]),
1099
1074
  _: 1
@@ -1102,7 +1077,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
1102
1077
  };
1103
1078
  }
1104
1079
  });
1105
- const container = "_container_fgn23_123";
1080
+ const container = "_container_1rjad_123";
1106
1081
  const style0$2 = {
1107
1082
  container
1108
1083
  };
@@ -1114,22 +1089,17 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1114
1089
  __name: "RunsSection",
1115
1090
  props: /* @__PURE__ */ mergeModels({
1116
1091
  runs: {},
1117
- testId: {},
1118
- appliedTheme: {}
1092
+ testId: {}
1119
1093
  }, {
1120
1094
  "selectedMetric": { required: true },
1121
1095
  "selectedMetricModifiers": {}
1122
1096
  }),
1123
- emits: /* @__PURE__ */ mergeModels(["deleteRuns"], ["update:selectedMetric"]),
1124
- setup(__props, { emit: __emit }) {
1097
+ emits: ["update:selectedMetric"],
1098
+ setup(__props) {
1125
1099
  const props = __props;
1126
- const emit = __emit;
1127
1100
  const locale = useI18n();
1128
1101
  const router = useRouter();
1129
1102
  const selectedMetric = useModel(__props, "selectedMetric");
1130
- function onDeleteRuns(toDelete) {
1131
- emit("deleteRuns", toDelete);
1132
- }
1133
1103
  const metrics = computed(() => {
1134
1104
  const metricKeys = props.runs.reduce((acc, run) => {
1135
1105
  Object.keys(run.metrics ?? {}).forEach((metric) => acc.add(metric));
@@ -1144,14 +1114,13 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1144
1114
  sortable: true,
1145
1115
  showHeaderTooltip: true,
1146
1116
  sortMethod: (a, b) => (a.metrics?.[metric] ?? 0) - (b.metrics?.[metric] ?? 0),
1147
- formatter: (row) => (row.metrics?.[metric] ?? 0).toFixed(2)
1117
+ formatter: (row) => row.metrics?.[metric] !== void 0 ? (row.metrics?.[metric]).toFixed(2) : ""
1148
1118
  }))
1149
1119
  );
1150
1120
  const columns = computed(() => [
1151
1121
  {
1152
- prop: "runNumber",
1122
+ prop: "id",
1153
1123
  label: locale.baseText("testDefinition.listRuns.runNumber"),
1154
- formatter: (row) => `${row.id}`,
1155
1124
  showOverflowTooltip: true
1156
1125
  },
1157
1126
  {
@@ -1159,6 +1128,10 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1159
1128
  label: "Run at",
1160
1129
  sortable: true,
1161
1130
  showOverflowTooltip: true,
1131
+ formatter: (row) => {
1132
+ const { date, time } = convertToDisplayDate(row.runAt);
1133
+ return [date, time].join(", ");
1134
+ },
1162
1135
  sortMethod: (a, b) => new Date(a.runAt ?? a.createdAt).getTime() - new Date(b.runAt ?? b.createdAt).getTime()
1163
1136
  },
1164
1137
  {
@@ -1181,23 +1154,21 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1181
1154
  createVNode(MetricsChart, {
1182
1155
  selectedMetric: selectedMetric.value,
1183
1156
  "onUpdate:selectedMetric": _cache[0] || (_cache[0] = ($event) => selectedMetric.value = $event),
1184
- runs: _ctx.runs,
1185
- theme: _ctx.appliedTheme
1186
- }, null, 8, ["selectedMetric", "runs", "theme"]),
1157
+ runs: _ctx.runs
1158
+ }, null, 8, ["selectedMetric", "runs"]),
1187
1159
  createVNode(TestRunsTable, {
1188
1160
  class: normalizeClass(_ctx.$style.runsTable),
1189
1161
  runs: _ctx.runs,
1190
1162
  columns: columns.value,
1191
1163
  selectable: true,
1192
1164
  "data-test-id": "past-runs-table",
1193
- onDeleteRuns,
1194
1165
  onRowClick: handleRowClick
1195
1166
  }, null, 8, ["class", "runs", "columns"])
1196
1167
  ], 2);
1197
1168
  };
1198
1169
  }
1199
1170
  });
1200
- const runs = "_runs_gua3g_123";
1171
+ const runs = "_runs_37xaf_123";
1201
1172
  const style0$1 = {
1202
1173
  runs
1203
1174
  };
@@ -1235,7 +1206,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1235
1206
  const isLoading = computed(() => tagsStore.isLoading);
1236
1207
  const tagsById = computed(() => tagsStore.tagsById);
1237
1208
  const currentWorkflowId = computed(() => props.name);
1238
- const appliedTheme = computed(() => uiStore.appliedTheme);
1239
1209
  const workflowName = computed(() => workflowStore.workflow.name);
1240
1210
  const hasRuns = computed(() => runs2.value.length > 0);
1241
1211
  const fieldsIssues = computed(() => testDefinitionStore.getFieldIssues(props.testId) ?? []);
@@ -1269,20 +1239,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1269
1239
  });
1270
1240
  window.open(executionsRoute.href, "_blank");
1271
1241
  }
1272
- const runs2 = computed(
1273
- () => Object.values(testDefinitionStore.testRunsById ?? {}).filter(
1274
- (run) => run.testDefinitionId === props.testId
1275
- )
1276
- );
1242
+ const runs2 = computed(() => {
1243
+ const testRuns = Object.values(testDefinitionStore.testRunsById ?? {}).filter(
1244
+ ({ testDefinitionId }) => testDefinitionId === props.testId
1245
+ );
1246
+ return orderBy(testRuns, (record) => new Date(record.runAt), ["asc"]).map(
1247
+ (record, index) => Object.assign(record, { index: index + 1 })
1248
+ );
1249
+ });
1277
1250
  const isRunning = computed(() => runs2.value.some((run) => run.status === "running"));
1278
1251
  const isRunTestEnabled = computed(() => fieldsIssues.value.length === 0 && !isRunning.value);
1279
- async function onDeleteRuns(toDelete) {
1280
- await Promise.all(
1281
- toDelete.map(async (run) => {
1282
- await testDefinitionStore.deleteTestRun({ testDefinitionId: props.testId, runId: run.id });
1283
- })
1284
- );
1285
- }
1286
1252
  async function renameTag(newName) {
1287
1253
  await tagsStore.rename({ id: state.value.tags.value[0], name: newName });
1288
1254
  }
@@ -1436,10 +1402,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1436
1402
  "onUpdate:selectedMetric": _cache[1] || (_cache[1] = ($event) => selectedMetric.value = $event),
1437
1403
  class: normalizeClass(_ctx.$style.runs),
1438
1404
  runs: runs2.value,
1439
- "test-id": _ctx.testId,
1440
- "applied-theme": appliedTheme.value,
1441
- onDeleteRuns
1442
- }, null, 8, ["selectedMetric", "class", "runs", "test-id", "applied-theme"])) : createCommentVNode("", true),
1405
+ "test-id": _ctx.testId
1406
+ }, null, 8, ["selectedMetric", "class", "runs", "test-id"])) : createCommentVNode("", true),
1443
1407
  showConfig.value ? (openBlock(), createBlock(ConfigSection, {
1444
1408
  key: 1,
1445
1409
  tags: unref(state).tags,
@@ -752,30 +752,25 @@
752
752
  -------------------------- */
753
753
  /* BEM
754
754
  -------------------------- */
755
- ._metricsChartContainer_1ejem_123 {
755
+ ._metricsChartContainer_1xhz2_123 {
756
756
  background: var(--color-background-xlight);
757
757
  border-radius: var(--border-radius-large);
758
- box-shadow: var(--box-shadow-base);
758
+ border: 1px solid var(--color-foreground-base);
759
759
  }
760
- ._metricsChartContainer_1ejem_123 ._chartHeader_1ejem_128 {
761
- display: flex;
762
- justify-content: flex-start;
763
- align-items: center;
764
- gap: var(--spacing-s);
765
- padding: var(--spacing-xs) var(--spacing-s);
766
- border-bottom: 1px solid var(--color-foreground-base);
760
+ ._metricsChartContainer_1xhz2_123 ._chartHeader_1xhz2_128 {
761
+ padding: var(--spacing-xs) var(--spacing-s) 0;
767
762
  }
768
- ._metricsChartContainer_1ejem_123 ._chartTitle_1ejem_136 {
763
+ ._metricsChartContainer_1xhz2_123 ._chartTitle_1xhz2_131 {
769
764
  font-size: var(--font-size-l);
770
765
  font-weight: var(--font-weight-bold);
771
766
  color: var(--color-text-base);
772
767
  }
773
- ._metricsChartContainer_1ejem_123 ._metricSelect_1ejem_141 {
768
+ ._metricsChartContainer_1xhz2_123 ._metricSelect_1xhz2_136 {
774
769
  max-width: 15rem;
775
770
  }
776
- ._metricsChartContainer_1ejem_123 ._chartWrapper_1ejem_144 {
771
+ ._metricsChartContainer_1xhz2_123 ._chartWrapper_1xhz2_139 {
777
772
  position: relative;
778
- height: var(--metrics-chart-height, 200px);
773
+ height: var(--metrics-chart-height, 147px);
779
774
  width: 100%;
780
775
  padding: var(--spacing-s);
781
776
  }/* BEM support Func
@@ -900,11 +895,10 @@
900
895
  -------------------------- */
901
896
  /* BEM
902
897
  -------------------------- */
903
- ._container_fgn23_123 {
898
+ ._container_1rjad_123 {
904
899
  display: flex;
905
900
  flex-direction: column;
906
- gap: 10px;
907
- flex: 1;
901
+ gap: 8px;
908
902
  }/* BEM support Func
909
903
  -------------------------- */
910
904
  /* Transition
@@ -1027,10 +1021,10 @@
1027
1021
  -------------------------- */
1028
1022
  /* BEM
1029
1023
  -------------------------- */
1030
- ._runs_gua3g_123 {
1024
+ ._runs_37xaf_123 {
1031
1025
  display: flex;
1032
1026
  flex-direction: column;
1033
- gap: var(--spacing-m);
1027
+ gap: var(--spacing-s);
1034
1028
  flex: 1;
1035
1029
  overflow: auto;
1036
1030
  margin-bottom: 20px;
@@ -1,4 +1,4 @@
1
- import { d as defineComponent, q as computed, i as createElementBlock, g as openBlock, n as normalizeClass, k as createBaseVNode, j as createVNode, w as withCtx, l as createTextVNode, m as unref, d6 as N8nBadge, e as createBlock, f as createCommentVNode, t as toDisplayString, c as useI18n, b8 as N8nText, ba as N8nButton, F as Fragment, _ as _export_sfc, x as renderSlot, b2 as mergeProps, ca as N8nIcon, cR as _sfc_main$3, D as renderList, b as useRouter, c7 as useTestDefinitionStore, a as useToast, d4 as useAsyncState, c$ as orderBy, gd as N8nLoading, cX as N8nHeading, J as withModifiers, ge as N8nActionToggle, aR as N8nTooltip, aT as _sfc_main$4, ar as h, c8 as RouterLink, V as VIEWS, aj as useMessage, ak as MODAL_CONFIRM } from "./index-CkOV8f0Z.js";
1
+ import { d as defineComponent, q as computed, i as createElementBlock, g as openBlock, n as normalizeClass, k as createBaseVNode, j as createVNode, w as withCtx, l as createTextVNode, m as unref, d9 as N8nBadge, e as createBlock, f as createCommentVNode, t as toDisplayString, c as useI18n, b9 as N8nText, bb as N8nButton, F as Fragment, _ as _export_sfc, x as renderSlot, b3 as mergeProps, bE as N8nIcon, cV as _sfc_main$3, D as renderList, b as useRouter, g5 as useTestDefinitionStore, a as useToast, d7 as useAsyncState, d2 as orderBy, g6 as N8nLoading, c_ as N8nHeading, J as withModifiers, g7 as N8nActionToggle, aS as N8nTooltip, aU as _sfc_main$4, as as h, cd as RouterLink, V as VIEWS, ak as useMessage, al as MODAL_CONFIRM } from "./index-D76xStxp.js";
2
2
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
3
3
  __name: "EmptyState",
4
4
  emits: ["create-test"],