UNPKG

n8n-editor-ui

Version:

Workflow Editor UI for n8n

500 lines (499 loc) 36.7 kB
; (function () { System.register(["./chunk-legacy-Re9CbdfL.js", "./vue.runtime.esm-bundler-legacy--Sn1h8On.js", "./_MapCache-legacy-DlYNX_X1.js", "./src-legacy-uZTNWMC0.js", "./en-legacy-DJK4SpPN.js", "./preload-helper-legacy-CXRjoQ0T.js", "./_plugin-vue_export-helper-legacy-DZMI5HPp.js", "./truncate-legacy-BGje52Or.js", "./_initCloneObject-legacy-BQarUtj5.js", "./table-legacy-CYxTRgYJ.js", "./icon-legacy-CqVXaCIS.js", "./empty-legacy-CA9D6itE.js", "./useTelemetry-legacy-B3pzzkAE.js", "./useToast-legacy-C4Vu5mt9.js", "./sanitize-html-legacy-DLqXJu-U.js", "./CalendarDate-legacy-BUvNgcoo.js", "./path-browserify-legacy-C6ml8BkF.js", "./constants-legacy-TKxWCqvM.js", "./merge-legacy-8xjIc_ts.js", "./_baseOrderBy-legacy-CB2Dh5d_.js", "./dateformat-legacy-C4HUJTCr.js", "./useDebounce-legacy-CqZ-fJEm.js", "./useExternalHooks-legacy-8pg6K3ln.js", "./useStyles-legacy-E8NPEyeD.js", "./dateFormatter-legacy-V7YuOSR6.js", "./orderBy-legacy-BzJ3mIT5.js", "./useWorkflowsCache-legacy-cpFekYcn.js", "./evaluation.constants-legacy-BTXqkGkt.js"], function (_export, _context) { "use strict"; var __toESM, computed, toDisplayString, createElementBlock, createCommentVNode, unref, ref, createVNode, defineComponent, createBlock, onMounted, Fragment, withCtx, openBlock, withModifiers, renderList, createTextVNode, normalizeClass, createBaseVNode, useI18n, N8nCallout_default, ElScrollbar, N8nExternalLink_default, N8nText_default, N8nIcon_default, N8nTooltip_default, TableHeaderControlsButton_default, N8nLoading_default, N8nIconButton_default, N8nHeading_default, __plugin_vue_export_helper_default, useRouter, useWorkflowsStore, useEvaluationStore, useToast, VIEWS, convertToDisplayDate, require_orderBy, useWorkflowSettingsCache, applyCachedVisibility, getTestTableHeaders, applyCachedSortOrder, statusDictionary, getDefaultOrderedColumns, TestTableBase_default, getTestCasesColumns, getErrorBaseKey, __vite_style__, import_orderBy, _hoisted_1, _hoisted_2, _hoisted_3, TestRunDetailView_vue_vue_type_script_setup_true_lang_default, container, header, timestamp, backButton, headerSeparator, summary, summaryStats, stat, controls, downloadButton, runsHeader, runsHeaderButtons, loading, scrollableSummary, summaryCard, capitalized, summaryCardTitle, summaryCardContentLargeNumber, alertText, deletedExecutionRowIndex, TestRunDetailView_vue_vue_type_style_index_1_lang_module_default, cssModules, TestRunDetailView_default; return { setters: [function (_chunkLegacy001Js) { __toESM = _chunkLegacy001Js.o; }, function (_vueRuntimeEsmBundlerLegacy003Js) { computed = _vueRuntimeEsmBundlerLegacy003Js.C; toDisplayString = _vueRuntimeEsmBundlerLegacy003Js.Cn; createElementBlock = _vueRuntimeEsmBundlerLegacy003Js.D; createCommentVNode = _vueRuntimeEsmBundlerLegacy003Js.E; unref = _vueRuntimeEsmBundlerLegacy003Js.Gt; ref = _vueRuntimeEsmBundlerLegacy003Js.It; createVNode = _vueRuntimeEsmBundlerLegacy003Js.M; defineComponent = _vueRuntimeEsmBundlerLegacy003Js.P; createBlock = _vueRuntimeEsmBundlerLegacy003Js.T; onMounted = _vueRuntimeEsmBundlerLegacy003Js.Z; Fragment = _vueRuntimeEsmBundlerLegacy003Js._; withCtx = _vueRuntimeEsmBundlerLegacy003Js.bt; openBlock = _vueRuntimeEsmBundlerLegacy003Js.et; withModifiers = _vueRuntimeEsmBundlerLegacy003Js.h; renderList = _vueRuntimeEsmBundlerLegacy003Js.it; createTextVNode = _vueRuntimeEsmBundlerLegacy003Js.j; normalizeClass = _vueRuntimeEsmBundlerLegacy003Js.vn; createBaseVNode = _vueRuntimeEsmBundlerLegacy003Js.w; }, function (_MapCacheLegacy005Js) { useI18n = _MapCacheLegacy005Js.gt; }, function (_srcLegacy007Js) { N8nCallout_default = _srcLegacy007Js.Bn; ElScrollbar = _srcLegacy007Js.Gt; N8nExternalLink_default = _srcLegacy007Js.H; N8nText_default = _srcLegacy007Js.Vn; N8nIcon_default = _srcLegacy007Js.Wn; N8nTooltip_default = _srcLegacy007Js.mt; TableHeaderControlsButton_default = _srcLegacy007Js.o; N8nLoading_default = _srcLegacy007Js.tt; N8nIconButton_default = _srcLegacy007Js.xt; N8nHeading_default = _srcLegacy007Js.zn; }, function (_enLegacy00bJs) {}, function (_preloadHelperLegacy00dJs) {}, function (_pluginVue_exportHelperLegacy00fJs) { __plugin_vue_export_helper_default = _pluginVue_exportHelperLegacy00fJs.t; }, function (_truncateLegacy00hJs) { useRouter = _truncateLegacy00hJs.y; }, function (_initCloneObjectLegacy00jJs) {}, function (_tableLegacy00lJs) {}, function (_iconLegacy00nJs) {}, function (_emptyLegacy00vJs) {}, function (_useTelemetryLegacy00HJs) { useWorkflowsStore = _useTelemetryLegacy00HJs.o; useEvaluationStore = _useTelemetryLegacy00HJs.st; }, function (_useToastLegacy00JJs) { useToast = _useToastLegacy00JJs.t; }, function (_sanitizeHtmlLegacy00LJs) {}, function (_CalendarDateLegacy00NJs) {}, function (_pathBrowserifyLegacy00RJs) {}, function (_constantsLegacy00TJs) { VIEWS = _constantsLegacy00TJs.Io; }, function (_mergeLegacy00VJs) {}, function (_baseOrderByLegacy00ZJs) {}, function (_dateformatLegacy00$Js) {}, function (_useDebounceLegacy011Js) {}, function (_useExternalHooksLegacy013Js) {}, function (_useStylesLegacy015Js) {}, function (_dateFormatterLegacy02LJs) { convertToDisplayDate = _dateFormatterLegacy02LJs.t; }, function (_orderByLegacy02VJs) { require_orderBy = _orderByLegacy02VJs.t; }, function (_useWorkflowsCacheLegacy049Js) { useWorkflowSettingsCache = _useWorkflowsCacheLegacy049Js.t; }, function (_evaluationConstantsLegacy05zJs) { applyCachedVisibility = _evaluationConstantsLegacy05zJs.a; getTestTableHeaders = _evaluationConstantsLegacy05zJs.c; applyCachedSortOrder = _evaluationConstantsLegacy05zJs.i; statusDictionary = _evaluationConstantsLegacy05zJs.n; getDefaultOrderedColumns = _evaluationConstantsLegacy05zJs.o; TestTableBase_default = _evaluationConstantsLegacy05zJs.r; getTestCasesColumns = _evaluationConstantsLegacy05zJs.s; getErrorBaseKey = _evaluationConstantsLegacy05zJs.t; }], execute: function () { __vite_style__ = document.createElement('style'); __vite_style__.textContent = "/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n/**\n\tWhen hovering over link in row, ensure hover background is removed from row\n */\ntr:hover:has(.open-execution-link:hover) {\n --table--row--color--background--hover: transparent;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._container_8z68v_123 {\n height: 100%;\n width: 100%;\n max-width: var(--content-container--width);\n padding: var(--spacing--lg) 0;\n}\n._header_8z68v_130 {\n display: flex;\n align-items: center;\n gap: var(--spacing--2xs);\n margin-bottom: var(--spacing--lg);\n}\n._header_8z68v_130 ._timestamp_8z68v_136 {\n color: var(--color--text);\n font-size: var(--font-size--sm);\n}\n._backButton_8z68v_141 {\n display: flex;\n align-items: center;\n gap: var(--spacing--3xs);\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n color: var(--color--text);\n transition: color 0.1s ease-in-out;\n}\n._backButton_8z68v_141:hover {\n color: var(--color--primary);\n}\n._headerSeparator_8z68v_156 {\n font-size: var(--font-size--xl);\n color: var(--color--text--tint-1);\n}\n._summary_8z68v_161 {\n margin-bottom: var(--spacing--md);\n}\n._summary_8z68v_161 ._summaryStats_8z68v_164 {\n display: flex;\n gap: var(--spacing--lg);\n}\n._stat_8z68v_169 {\n display: flex;\n flex-direction: column;\n}\n._controls_8z68v_174 {\n display: flex;\n gap: var(--spacing--sm);\n margin-bottom: var(--spacing--sm);\n}\n._downloadButton_8z68v_180 {\n margin-bottom: var(--spacing--sm);\n}\n._runsHeader_8z68v_184 {\n display: flex;\n}\n._runsHeader_8z68v_184 > div:first-child {\n flex: 1;\n}\n._runsHeaderButtons_8z68v_191 {\n display: flex;\n gap: var(--spacing--xs);\n}\n._loading_8z68v_196 {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 200px;\n}\n._scrollableSummary_8z68v_203 {\n border: var(--border-width) var(--border-style) var(--color--foreground);\n border-radius: 5px;\n background-color: var(--color--background--light-3);\n}\n._scrollableSummary_8z68v_203 .el-scrollbar__bar {\n opacity: 1;\n}\n._scrollableSummary_8z68v_203 .el-scrollbar__thumb {\n background-color: var(--color--foreground);\n}\n._scrollableSummary_8z68v_203 .el-scrollbar__thumb:hover {\n background-color: var(--color--foreground--shade-1);\n}\n._summaryCard_8z68v_218 {\n height: 100px;\n box-sizing: border-box;\n padding: var(--spacing--sm);\n border-right: var(--border-width) var(--border-style) var(--color--foreground);\n flex-basis: 169px;\n flex-shrink: 0;\n max-width: 170px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}\n._summaryCard_8z68v_218:first-child {\n border-top-left-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n._capitalized_8z68v_235 {\n text-transform: none;\n}\n._capitalized_8z68v_235::first-letter {\n text-transform: uppercase;\n}\n._summaryCardTitle_8z68v_243 {\n display: inline;\n width: -moz-fit-content;\n width: fit-content;\n max-width: 100%;\n flex-shrink: 0;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n color: var(--color--text);\n}\n._summaryCardContentLargeNumber_8z68v_254 {\n font-size: 32px;\n line-height: 1;\n}\n._alertText_8z68v_259 {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n max-width: 100%;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: normal;\n word-break: break-word;\n color: var(--color--text--danger);\n font-size: var(--font-size--2xs);\n line-height: 1.25;\n}\n._deletedExecutionRowIndex_8z68v_274 {\n color: var(--color--text);\n font-weight: var(--font-weight--regular);\n}/*$vite$:1*/"; document.head.appendChild(__vite_style__); //#region src/features/ai/evaluation.ee/views/TestRunDetailView.vue?vue&type=script&setup=true&lang.ts import_orderBy = /* @__PURE__ */__toESM(require_orderBy()); _hoisted_1 = { style: { "display": "flex" } }; _hoisted_2 = { style: { "display": "flex", "justify-content": "space-between", "gap": "10px" } }; _hoisted_3 = { style: { "display": "inline-flex", "gap": "12px", "align-items": "center", "max-width": "100%" } }; TestRunDetailView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({ __name: "TestRunDetailView", setup(__props) { const router = useRouter(); const toast = useToast(); const evaluationStore = useEvaluationStore(); const workflowsStore = useWorkflowsStore(); const locale = useI18n(); const workflowsCache = useWorkflowSettingsCache(); const isLoading = ref(true); const testCases = ref([]); const hasFailedTestCases = ref(false); const runId = computed(() => router.currentRoute.value.params.runId); const workflowId = computed(() => router.currentRoute.value.params.name); const workflowName = computed(() => workflowsStore.getWorkflowById(workflowId.value)?.name ?? ""); const cachedUserPreferences = ref(); const expandedRows = ref(/* @__PURE__ */new Set()); const run = computed(() => evaluationStore.testRunsById[runId.value]); const runErrorDetails = computed(() => { return run.value?.errorDetails; }); const filteredTestCases = computed(() => (0, import_orderBy.default)(testCases.value, record => record.runAt, ["asc"]).map((record, index) => Object.assign(record, { index: index + 1 }))); const isAllExpanded = computed(() => expandedRows.value.size === filteredTestCases.value.length); const testRunIndex = computed(() => Object.values((0, import_orderBy.default)(evaluationStore.testRunsById, record => new Date(record.runAt), ["asc"]).filter(({ workflowId: wId }) => wId === workflowId.value) ?? {}).findIndex(({ id }) => id === runId.value)); const formattedTime = computed(() => convertToDisplayDate(new Date(run.value?.runAt).getTime())); const openRelatedExecution = row => { const executionId = row.executionId; if (executionId) { const { href } = router.resolve({ name: VIEWS.EXECUTION_PREVIEW, params: { name: workflowId.value, executionId } }); window.open(href, "_blank"); } }; const inputColumns = computed(() => getTestCasesColumns(filteredTestCases.value, "inputs")); const orderedColumns = computed(() => { return applyCachedVisibility(applyCachedSortOrder(getDefaultOrderedColumns(run.value, filteredTestCases.value), cachedUserPreferences.value?.order), cachedUserPreferences.value?.visibility); }); const columns = computed(() => [{ prop: "index", width: 100, label: locale.baseText("evaluation.runDetail.testCase"), sortable: true }, { prop: "status", label: locale.baseText("evaluation.listRuns.status"), minWidth: 125 }, ...getTestTableHeaders(orderedColumns.value, filteredTestCases.value)]); const metrics = computed(() => run.value?.metrics ?? {}); const fetchExecutionTestCases = async () => { if (!runId.value || !workflowId.value) return; isLoading.value = true; try { const testRun = await evaluationStore.getTestRun({ workflowId: workflowId.value, runId: runId.value }); const testCaseEvaluationExecutions = await evaluationStore.fetchTestCaseExecutions({ workflowId: workflowId.value, runId: testRun.id }); testCases.value = testCaseEvaluationExecutions ?? []; hasFailedTestCases.value = testCaseEvaluationExecutions?.some(testCase => testCase.status === "error"); await evaluationStore.fetchTestRuns(run.value.workflowId); } catch (error) { toast.showError(error, locale.baseText("evaluation.listRuns.toast.error.fetchTestCases")); } finally { isLoading.value = false; } }; async function loadCachedUserPreferences() { cachedUserPreferences.value = await workflowsCache.getEvaluationPreferences(workflowId.value); } async function saveCachedUserPreferences() { if (cachedUserPreferences.value) await workflowsCache.saveEvaluationPreferences(workflowId.value, cachedUserPreferences.value); } async function handleColumnVisibilityUpdate(columnKey, visibility) { cachedUserPreferences.value ??= { order: [], visibility: {} }; cachedUserPreferences.value.visibility[columnKey] = visibility; await saveCachedUserPreferences(); } async function handleColumnOrderUpdate(newOrder) { cachedUserPreferences.value ??= { order: [], visibility: {} }; cachedUserPreferences.value.order = newOrder; await saveCachedUserPreferences(); } function toggleRowExpansion(row) { if (expandedRows.value.has(row.id)) expandedRows.value.delete(row.id);else expandedRows.value.add(row.id); } function toggleAllExpansion() { if (isAllExpanded.value) expandedRows.value.clear();else expandedRows.value = new Set(filteredTestCases.value.map(row => row.id)); } onMounted(async () => { await fetchExecutionTestCases(); await loadCachedUserPreferences(); }); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { class: normalizeClass(_ctx.$style.container), "data-test-id": "test-definition-run-detail" }, [createBaseVNode("div", { class: normalizeClass(_ctx.$style.header) }, [createBaseVNode("button", { class: normalizeClass(_ctx.$style.backButton), onClick: _cache[0] || (_cache[0] = $event => unref(router).back()) }, [createVNode(unref(N8nIcon_default), { icon: "arrow-left" }), createVNode(unref(N8nHeading_default), { size: "large", bold: true }, { default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("evaluation.listRuns.runListHeader", { interpolate: { name: workflowName.value } })), 1)]), _: 1 })], 2), createBaseVNode("span", { class: normalizeClass(_ctx.$style.headerSeparator) }, "/", 2), createVNode(unref(N8nHeading_default), { size: "large", bold: true }, { default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("evaluation.listRuns.testCasesListHeader", { interpolate: { index: testRunIndex.value + 1 } })), 1)]), _: 1 })], 2), run.value?.status === "error" ? (openBlock(), createBlock(unref(N8nCallout_default), { key: 0, theme: "danger", icon: "triangle-alert", class: "mb-s" }, { default: withCtx(() => [createVNode(unref(N8nText_default), { size: "small", class: normalizeClass(_ctx.$style.capitalized) }, { default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText(`${unref(getErrorBaseKey)(run.value?.errorCode)}`, runErrorDetails.value ? { interpolate: runErrorDetails.value } : {}) ?? unref(locale).baseText(`${unref(getErrorBaseKey)("UNKNOWN_ERROR")}`)), 1)]), _: 1 }, 8, ["class"])]), _: 1 })) : createCommentVNode("", true), createVNode(unref(ElScrollbar), { always: "", class: normalizeClass([_ctx.$style.scrollableSummary, "mb-m"]) }, { default: withCtx(() => [createBaseVNode("div", _hoisted_1, [createBaseVNode("div", { class: normalizeClass(_ctx.$style.summaryCard) }, [createVNode(unref(N8nText_default), { size: "small", class: normalizeClass(_ctx.$style.summaryCardTitle) }, { default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("evaluation.runDetail.totalCases")), 1)]), _: 1 }, 8, ["class"]), createVNode(unref(N8nText_default), { size: "xlarge", class: normalizeClass(_ctx.$style.summaryCardContentLargeNumber), bold: "" }, { default: withCtx(() => [createTextVNode(toDisplayString(testCases.value.length), 1)]), _: 1 }, 8, ["class"])], 2), createBaseVNode("div", { class: normalizeClass(_ctx.$style.summaryCard) }, [createVNode(unref(N8nText_default), { size: "small", class: normalizeClass(_ctx.$style.summaryCardTitle) }, { default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("evaluation.runDetail.ranAt")), 1)]), _: 1 }, 8, ["class"]), createBaseVNode("div", null, [createVNode(unref(N8nText_default), { size: "medium" }, { default: withCtx(() => [createTextVNode(toDisplayString(formattedTime.value.date) + " " + toDisplayString(formattedTime.value.time), 1)]), _: 1 })])], 2), createBaseVNode("div", { class: normalizeClass(_ctx.$style.summaryCard) }, [createVNode(unref(N8nText_default), { size: "small", class: normalizeClass(_ctx.$style.summaryCardTitle) }, { default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("evaluation.listRuns.status")), 1)]), _: 1 }, 8, ["class"]), run.value?.status === "completed" && hasFailedTestCases.value ? (openBlock(), createBlock(unref(N8nText_default), { key: 0, size: "medium", color: "warning" }, { default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText(`evaluation.runDetail.error.partialCasesFailed`)), 1)]), _: 1 })) : (openBlock(), createBlock(unref(N8nText_default), { key: 1, color: unref(statusDictionary)[run.value?.status]?.color, size: "medium", class: normalizeClass(run.value?.status.toLowerCase()), style: { "text-transform": "capitalize" } }, { default: withCtx(() => [createTextVNode(toDisplayString(run.value?.status), 1)]), _: 1 }, 8, ["color", "class"]))], 2), (openBlock(true), createElementBlock(Fragment, null, renderList(metrics.value, (value, key) => { return openBlock(), createElementBlock("div", { key, class: normalizeClass(_ctx.$style.summaryCard) }, [createVNode(unref(N8nTooltip_default), { content: key, placement: "top" }, { default: withCtx(() => [createVNode(unref(N8nText_default), { size: "small", class: normalizeClass(_ctx.$style.summaryCardTitle), style: { "text-overflow": "ellipsis", "overflow": "hidden" } }, { default: withCtx(() => [createTextVNode(toDisplayString(key), 1)]), _: 2 }, 1032, ["class"])]), _: 2 }, 1032, ["content"]), createVNode(unref(N8nText_default), { size: "xlarge", class: normalizeClass(_ctx.$style.summaryCardContentLargeNumber), bold: "" }, { default: withCtx(() => [createTextVNode(toDisplayString(value.toFixed(2)), 1)]), _: 2 }, 1032, ["class"])], 2); }), 128))])]), _: 1 }, 8, ["class"]), createBaseVNode("div", { class: normalizeClass(["mb-s", _ctx.$style.runsHeader]) }, [createBaseVNode("div", null, [createVNode(unref(N8nHeading_default), { size: "large", bold: true }, { default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("evaluation.listRuns.allTestCases", { interpolate: { count: filteredTestCases.value.length } })), 1)]), _: 1 })]), createBaseVNode("div", { class: normalizeClass(_ctx.$style.runsHeaderButtons) }, [createVNode(unref(N8nIconButton_default), { icon: isAllExpanded.value ? "chevrons-down-up" : "chevrons-up-down", type: "secondary", size: "medium", onClick: toggleAllExpansion }, null, 8, ["icon"]), createVNode(unref(TableHeaderControlsButton_default), { size: "medium", "icon-size": "small", columns: orderedColumns.value, "onUpdate:columnVisibility": handleColumnVisibilityUpdate, "onUpdate:columnOrder": handleColumnOrderUpdate }, null, 8, ["columns"])], 2)], 2), !isLoading.value && !inputColumns.value.length && run.value?.status === "completed" && run.value?.finalResult === "success" ? (openBlock(), createBlock(unref(N8nCallout_default), { key: 1, theme: "secondary", icon: "info", class: "mb-s" }, { default: withCtx(() => [createVNode(unref(N8nText_default), { size: "small", class: normalizeClass(_ctx.$style.capitalized) }, { default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText("evaluation.runDetail.notice.useSetInputs")), 1)]), _: 1 }, 8, ["class"])]), _: 1 })) : createCommentVNode("", true), isLoading.value ? (openBlock(), createElementBlock("div", { key: 2, class: normalizeClass(_ctx.$style.loading) }, [createVNode(unref(N8nLoading_default), { loading: true, rows: 5 })], 2)) : (openBlock(), createBlock(TestTableBase_default, { key: 3, data: filteredTestCases.value, columns: columns.value, "default-sort": { prop: "id", order: "descending" }, "expanded-rows": expandedRows.value, onRowClick: toggleRowExpansion }, { id: withCtx(({ row }) => [createBaseVNode("div", _hoisted_2, toDisplayString(row.id), 1)]), index: withCtx(({ row }) => [createBaseVNode("div", null, [row.executionId ? (openBlock(), createBlock(unref(N8nExternalLink_default), { key: 0, class: "open-execution-link", onClick: withModifiers($event => openRelatedExecution(row), ["stop", "prevent"]) }, { default: withCtx(() => [createTextVNode(" #" + toDisplayString(row.index), 1)]), _: 2 }, 1032, ["onClick"])) : (openBlock(), createElementBlock("span", { key: 1, class: normalizeClass(_ctx.$style.deletedExecutionRowIndex) }, "#" + toDisplayString(row.index), 3))])]), status: withCtx(({ row }) => [createBaseVNode("div", _hoisted_3, [createVNode(unref(N8nIcon_default), { icon: unref(statusDictionary)[row.status].icon, color: unref(statusDictionary)[row.status].color }, null, 8, ["icon", "color"]), row.status === "error" ? (openBlock(), createBlock(unref(N8nTooltip_default), { key: 0, placement: "top", "show-after": 300 }, { content: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText(`${unref(getErrorBaseKey)(row.errorCode)}`) || row.status), 1)]), default: withCtx(() => [createVNode(unref(N8nText_default), { color: "danger", class: normalizeClass(_ctx.$style.capitalized) }, { default: withCtx(() => [createTextVNode(toDisplayString(unref(locale).baseText(`${unref(getErrorBaseKey)(row.errorCode)}`) || row.status), 1)]), _: 2 }, 1032, ["class"])]), _: 2 }, 1024)) : (openBlock(), createBlock(unref(N8nText_default), { key: 1, class: normalizeClass(_ctx.$style.capitalized) }, { default: withCtx(() => [createTextVNode(toDisplayString(row.status), 1)]), _: 2 }, 1032, ["class"]))])]), _: 1 }, 8, ["data", "columns", "expanded-rows"]))], 2); }; } }); //#endregion //#region src/features/ai/evaluation.ee/views/TestRunDetailView.vue?vue&type=style&index=1&lang.module.scss container = "_container_8z68v_123"; header = "_header_8z68v_130"; timestamp = "_timestamp_8z68v_136"; backButton = "_backButton_8z68v_141"; headerSeparator = "_headerSeparator_8z68v_156"; summary = "_summary_8z68v_161"; summaryStats = "_summaryStats_8z68v_164"; stat = "_stat_8z68v_169"; controls = "_controls_8z68v_174"; downloadButton = "_downloadButton_8z68v_180"; runsHeader = "_runsHeader_8z68v_184"; runsHeaderButtons = "_runsHeaderButtons_8z68v_191"; loading = "_loading_8z68v_196"; scrollableSummary = "_scrollableSummary_8z68v_203"; summaryCard = "_summaryCard_8z68v_218"; capitalized = "_capitalized_8z68v_235"; summaryCardTitle = "_summaryCardTitle_8z68v_243"; summaryCardContentLargeNumber = "_summaryCardContentLargeNumber_8z68v_254"; alertText = "_alertText_8z68v_259"; deletedExecutionRowIndex = "_deletedExecutionRowIndex_8z68v_274"; TestRunDetailView_vue_vue_type_style_index_1_lang_module_default = { container, header, timestamp, backButton, headerSeparator, summary, summaryStats, stat, controls, downloadButton, runsHeader, runsHeaderButtons, loading, scrollableSummary, summaryCard, capitalized, summaryCardTitle, summaryCardContentLargeNumber, alertText, deletedExecutionRowIndex }; //#endregion //#region src/features/ai/evaluation.ee/views/TestRunDetailView.vue cssModules = { "$style": TestRunDetailView_vue_vue_type_style_index_1_lang_module_default }; _export("default", TestRunDetailView_default = /* @__PURE__ */__plugin_vue_export_helper_default(TestRunDetailView_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules], ["__scopeId", "data-v-fd115f6f"]])); //#endregion } }; }); })();