n8n-editor-ui 1.113.1 → 1.114.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 (133) hide show
  1. package/.build/cache-marker +1 -1
  2. package/.build/node-popularity.json +1 -3918
  3. package/dist/assets/{AddDataStoreModal-C-20tjW5.js → AddDataStoreModal-CsFLy-os.js} +8 -8
  4. package/dist/assets/{AnimatedSpinner-WDiU4lXb.js → AnimatedSpinner-BdYQZRvm.js} +1 -1
  5. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-CV4yKdOK.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-C-w_sFn5.js} +1 -1
  6. package/dist/assets/{AuthView-BfD8L-MR.js → AuthView-DfDkMLKR.js} +2 -2
  7. package/dist/assets/{ChangePasswordView-BHlNjnju.js → ChangePasswordView-D7ySKRGb.js} +3 -3
  8. package/dist/assets/CollectionParameter-CNnsizMe.js +4 -0
  9. package/dist/assets/{ConsumedTokensDetails.vue_vue_type_script_setup_true_lang-Bm1msTtB.js → ConsumedTokensDetails.vue_vue_type_script_setup_true_lang-ZKSyv6Rm.js} +1 -1
  10. package/dist/assets/{CredentialsView-Bpi1QEHU.js → CredentialsView-BSSTTfsB.js} +19 -19
  11. package/dist/assets/{DataStoreActions.vue_vue_type_script_setup_true_lang-BCsNv_gY.js → DataStoreActions.vue_vue_type_script_setup_true_lang-D4LRnvHA.js} +1 -1
  12. package/dist/assets/{DataStoreDetailsView-BwvQ5I7d.js → DataStoreDetailsView-Dkr_HtEW.js} +38 -26
  13. package/dist/assets/{DataStoreView-Bctk8RYi.js → DataStoreView-Cms5uqRt.js} +13 -14
  14. package/dist/assets/{DemoFooter-CxWGBc_7.js → DemoFooter-CKaunwpF.js} +6 -6
  15. package/dist/assets/{EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-DqQrOg_2.js → EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-BS4e8zRV.js} +3 -3
  16. package/dist/assets/{EntityNotFound-D7CGrbgk.js → EntityNotFound-D80vzHfS.js} +1 -1
  17. package/dist/assets/{EntityUnAuthorised-BO9xlb2N.js → EntityUnAuthorised-BlMXoT9N.js} +1 -1
  18. package/dist/assets/{ErrorView-C1PhniXH.js → ErrorView-Cg-eq9CL.js} +9 -9
  19. package/dist/assets/{EvaluationsRootView-C0QRKk3k.js → EvaluationsRootView-DWg4U9MD.js} +5 -5
  20. package/dist/assets/{EvaluationsView-CYpgbXKx.js → EvaluationsView-DZT93B1S.js} +3 -3
  21. package/dist/assets/{ExecutionsTime-etWexlXm.css → ExecutionsTime-CWHk7ZwI.css} +6 -6
  22. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-Dh8inRTk.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-BZMWMaK1.js} +39 -39
  23. package/dist/assets/{ExecutionsView-BCb0Zr7W.js → ExecutionsView-DVSp3FTL.js} +10 -10
  24. package/dist/assets/{FixedCollectionParameter-D4km_FeH.js → FixedCollectionParameter-BFbAkjot.js} +4 -4
  25. package/dist/assets/{FixedCollectionParameter-Dg7ZadcB.css → FixedCollectionParameter-TY1-sHgZ.css} +18 -18
  26. package/dist/assets/{ForgotMyPasswordView-CdhGWxw4.js → ForgotMyPasswordView-1gl-DTSD.js} +3 -3
  27. package/dist/assets/{InfoAccordion-DE2_sS98.js → InfoAccordion-B4atTFpH.js} +1 -1
  28. package/dist/assets/{InsightsChartAverageRuntime-D5ZE_Nla.js → InsightsChartAverageRuntime-BdVbh5ca.js} +4 -4
  29. package/dist/assets/{InsightsChartFailed-BdeF-nyF.js → InsightsChartFailed-tRahEeus.js} +4 -4
  30. package/dist/assets/{InsightsChartFailureRate-C_YnwTyc.js → InsightsChartFailureRate-aLmvV-2j.js} +4 -4
  31. package/dist/assets/{InsightsChartTimeSaved-cTOv1Iga.js → InsightsChartTimeSaved-Bw1GK02H.js} +4 -4
  32. package/dist/assets/{InsightsChartTotal-BKK9PNU1.js → InsightsChartTotal-YCLp-Mvg.js} +4 -4
  33. package/dist/assets/{InsightsDashboard-COAZWSu2.js → InsightsDashboard-C0GhlvO0.js} +11 -11
  34. package/dist/assets/{InsightsPaywall-BWpRemTn.js → InsightsPaywall-BqrNu0Sm.js} +1 -1
  35. package/dist/assets/{InsightsSummary-jcJA88u3.js → InsightsSummary-BIsW50Wb.js} +2 -3
  36. package/dist/assets/{InsightsTableWorkflows-Bh_NN7kQ.js → InsightsTableWorkflows-m0FuDdM6.js} +6 -7
  37. package/dist/assets/{Logo-DZ3J8N5N.js → Logo-CJDZZ9Dc.js} +1 -1
  38. package/dist/assets/{LogsPanel-DSS_hDBL.js → LogsPanel-AuBzspf5.js} +189 -101
  39. package/dist/assets/{LogsPanel-CUsQIBpC.css → LogsPanel-BE9Gl1z0.css} +26 -27
  40. package/dist/assets/{MainHeader-6lIHYgJG.css → MainHeader-BM1jYnSL.css} +6 -6
  41. package/dist/assets/{MainHeader-DfMxpY4d.js → MainHeader-CTr2-gOV.js} +17 -17
  42. package/dist/assets/{MainSidebar-a73tcV9E.css → MainSidebar-BWPXOik1.css} +156 -0
  43. package/dist/assets/{MainSidebar-C7fZf9ti.js → MainSidebar-wsfu6n1v.js} +204 -48
  44. package/dist/assets/{NodeCreation-DndFLn5s.js → NodeCreation-Uqspyd-Q.js} +11 -11
  45. package/dist/assets/{NodeCreator-DG0hCOby.js → NodeCreator-Cho8tlDH.js} +47 -34
  46. package/dist/assets/{NodeDetailsView-G0hcQtkE.js → NodeDetailsView-Cla0enix.js} +27 -27
  47. package/dist/assets/{NodeDetailsViewV2-BGHhaOjo.js → NodeDetailsViewV2-CImiiHw5.js} +16 -16
  48. package/dist/assets/{NodeView-Chs2u0U9.css → NodeView-DoRx_8YL.css} +0 -165
  49. package/dist/assets/{NodeView-D_Lf20Cj.js → NodeView-R0RrSafO.js} +82 -258
  50. package/dist/assets/{PageViewLayout-cxvwso_r.js → PageViewLayout-XMbxzupW.js} +1 -1
  51. package/dist/assets/{PrebuiltAgentTemplatesView--njlASMr.js → PrebuiltAgentTemplatesView-CVQlXLgD.js} +2 -2
  52. package/dist/assets/{ProjectBreadcrumb-KIWhTojS.js → ProjectBreadcrumb-CARSpK7o.js} +28 -12
  53. package/dist/assets/{ProjectHeader-B5uv4DKo.css → ProjectHeader-BNMKpvzV.css} +9 -9
  54. package/dist/assets/{ProjectHeader-PFXNU0--.js → ProjectHeader-CSMsPy1n.js} +10 -10
  55. package/dist/assets/{ProjectSettings-C1kZ9wA5.js → ProjectSettings-BfGExA4I.js} +169 -161
  56. package/dist/assets/{ProjectSettings-B5z1mrGW.css → ProjectSettings-Cj1kC16G.css} +30 -15
  57. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-Bzf7nqUd.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-QmS6y6VJ.js} +5 -5
  58. package/dist/assets/{ResourcesListLayout-DQODsJpR.js → ResourcesListLayout-ATgLHOKO.js} +42 -42
  59. package/dist/assets/{ResourcesListLayout-vTwRIDRz.css → ResourcesListLayout-BseE8-rt.css} +8 -8
  60. package/dist/assets/{RunDataJson-BcUo9gnI.js → RunDataJson-PRchch-O.js} +3 -3
  61. package/dist/assets/{RunDataJsonActions-BCQ7lOd5.js → RunDataJsonActions-Ca-7abwJ.js} +1 -1
  62. package/dist/assets/{RunDataParsedAiContent-BnKhGr-k.js → RunDataParsedAiContent-LwO8lYeE.js} +2 -2
  63. package/dist/assets/{RunDataSearch-CiRa4kQq.js → RunDataSearch-_AawIJ1P.js} +59 -16
  64. package/dist/assets/{RunDataTable-Cb01UpR9.js → RunDataTable-C2IhJVY7.js} +4 -4
  65. package/dist/assets/{SamlOnboarding-BqIwhbZw.js → SamlOnboarding-DNGq1d-y.js} +3 -3
  66. package/dist/assets/{SelectedItemsInfo-DuFbVGZm.js → SelectedItemsInfo-DCbeoQ__.js} +1 -1
  67. package/dist/assets/{SettingsApiView-D2j7Vbwi.js → SettingsApiView-B8W2w9F3.js} +23 -24
  68. package/dist/assets/{SettingsCommunityNodesView-oZIjk1s_.js → SettingsCommunityNodesView-CSGQvqSv.js} +31 -31
  69. package/dist/assets/{SettingsExternalSecrets-Cea9JY7A.js → SettingsExternalSecrets-DvgKCijP.js} +18 -18
  70. package/dist/assets/{SettingsLdapView-Cg2gnd72.js → SettingsLdapView-Bls3Hiov.js} +17 -17
  71. package/dist/assets/{SettingsLogStreamingView-BScR5ZFJ.js → SettingsLogStreamingView-DC0NxA14.js} +29 -29
  72. package/dist/assets/SettingsMCPView-D_A3IzDR.js +626 -0
  73. package/dist/assets/SettingsMCPView-INU33iV4.css +370 -0
  74. package/dist/assets/{SettingsPersonalView-BfEdqrEE.js → SettingsPersonalView-BfvHbPzX.js} +31 -31
  75. package/dist/assets/{SettingsSourceControl-CQiyVvB3.js → SettingsSourceControl-DEAYOup_.js} +208 -65
  76. package/dist/assets/{SettingsSso-CAAxAbK6.js → SettingsSso-DT7TNXiC.js} +61 -23
  77. package/dist/assets/{SettingsUsageAndPlan-DTV0d49_.js → SettingsUsageAndPlan-BunLqdZX.js} +16 -17
  78. package/dist/assets/{SettingsUsageAndPlan-CfFJy6fo.css → SettingsUsageAndPlan-CfunueCX.css} +3 -3
  79. package/dist/assets/{SettingsUsersView-Ceq9-_wv.js → SettingsUsersView-C1DaGjPi.js} +4 -4
  80. package/dist/assets/{SettingsView-sqSuzp6q.js → SettingsView-BVBdo1Q8.js} +13 -12
  81. package/dist/assets/{SetupView-DNxfN7wc.js → SetupView-Ds_FejJz.js} +3 -3
  82. package/dist/assets/{SetupWorkflowCredentialsButton-DUCOv6F6.js → SetupWorkflowCredentialsButton-7QTSQ-Cp.js} +3 -3
  83. package/dist/assets/{SetupWorkflowFromTemplateView-DU4khxPx.js → SetupWorkflowFromTemplateView-DgAeg0pL.js} +13 -13
  84. package/dist/assets/{SigninView-BnzCVklk.js → SigninView-CTCti60k.js} +17 -17
  85. package/dist/assets/{SignoutView-CQx1YcpJ.js → SignoutView-BfiSDA3M.js} +1 -1
  86. package/dist/assets/{SignupView-CVowy7ND.js → SignupView-CHc0tHGl.js} +3 -3
  87. package/dist/assets/{TableBase-ChC-0JXo.js → TableBase-DCODsxOa.js} +1 -1
  88. package/dist/assets/{Tags-BElvlb53.js → Tags-D9gPKoUj.js} +1 -1
  89. package/dist/assets/{TemplateDetails-DFAU0IXa.js → TemplateDetails-BlV9NmCy.js} +11 -11
  90. package/dist/assets/{TemplateList-BqOvn2Up.js → TemplateList-CazlTEkA.js} +15 -15
  91. package/dist/assets/{TemplatesCollectionView-DUe-c9UK.js → TemplatesCollectionView-BEeRygO7.js} +15 -15
  92. package/dist/assets/{TemplatesSearchView-DqlXEFp4.js → TemplatesSearchView-CI00kxyK.js} +30 -30
  93. package/dist/assets/{TemplatesView-e-KwnRmC.js → TemplatesView-mLslH3Uw.js} +3 -3
  94. package/dist/assets/{TemplatesWorkflowView-DGdEHxRG.js → TemplatesWorkflowView-SSmdLOOW.js} +18 -18
  95. package/dist/assets/{TriggerPanel-BC7r1f-p.js → TriggerPanel-BHkYzUPx.js} +100 -124
  96. package/dist/assets/{TriggerPanel-DiD8pi0I.css → TriggerPanel-CZRJpcTa.css} +26 -24
  97. package/dist/assets/{VariablesView-BHcrNXsw.css → VariablesView-CO67wOhz.css} +6 -6
  98. package/dist/assets/{VariablesView-q3KOFXbh.js → VariablesView-k-pzl-O9.js} +9 -9
  99. package/dist/assets/{WorkerView-p9Gb5B1L.js → WorkerView-Cx8ge4xs.js} +27 -27
  100. package/dist/assets/{WorkflowActivator-jI4sUqXL.css → WorkflowActivator-BqnfTqdT.css} +2 -2
  101. package/dist/assets/{WorkflowActivator-3wlzZHDO.js → WorkflowActivator-By5Pii_6.js} +35 -27
  102. package/dist/assets/{WorkflowExecutionsInfoAccordion-MSQf1wi3.js → WorkflowExecutionsInfoAccordion-eJG4y2WA.js} +2 -2
  103. package/dist/assets/{WorkflowExecutionsLandingPage-C70_LGAv.js → WorkflowExecutionsLandingPage-C0mutLGh.js} +3 -3
  104. package/dist/assets/{WorkflowExecutionsPreview-D_xisYpD.js → WorkflowExecutionsPreview-G-4e7QQ9.js} +17 -17
  105. package/dist/assets/{WorkflowExecutionsView-ezc5vRrS.js → WorkflowExecutionsView-B0SmXxbP.js} +20 -20
  106. package/dist/assets/{WorkflowExecutionsView-DqWqyiNg.css → WorkflowExecutionsView-BI8VcrjR.css} +2 -2
  107. package/dist/assets/{WorkflowHistory-DeSZ98ik.js → WorkflowHistory-BiN2BqQR.js} +23 -23
  108. package/dist/assets/{WorkflowOnboardingView-XDAzh9C1.js → WorkflowOnboardingView-B9FkhZA-.js} +1 -1
  109. package/dist/assets/{WorkflowPreview-R4owDoRV.js → WorkflowPreview-BsgTaevQ.js} +5 -5
  110. package/dist/assets/{WorkflowsView-BJ_oKX3h.js → WorkflowsView-CLXbFUXb.js} +314 -136
  111. package/dist/assets/{WorkflowsView-MF9XcT0u.css → WorkflowsView-Cn8b7sC6.css} +295 -18
  112. package/dist/assets/{canvas-tCm4ovGg.js → canvas-BXznnLzi.js} +1 -1
  113. package/dist/assets/{chartjs.utils-B2U_02-S.js → chartjs.utils-D46nHC00.js} +2 -2
  114. package/dist/assets/{core-BDQ6uBcD.js → core-HeJRdxVB.js} +1 -1
  115. package/dist/assets/{global-link-actions-Cz-zl4uP.js → global-link-actions-dPKQ-sAY.js} +1 -1
  116. package/dist/assets/{index-CpPc1kM8.css → index-BlwIvpv7.css} +2746 -2641
  117. package/dist/assets/{index-CCyQeXiT.js → index-DGBHFnWS.js} +1 -1
  118. package/dist/assets/{index-BDDH_NIA.js → index-cWho1w-N.js} +15923 -17969
  119. package/dist/assets/{pickBy-B2RJpRoj.js → pickBy-DvVK9TvT.js} +1 -1
  120. package/dist/assets/{readyToRunWorkflows.store-lmsJGEVO.js → readyToRunWorkflows.store-o5xlMxpo.js} +1 -1
  121. package/dist/assets/{readyToRunWorkflowsV2.store-Bl7jk-i9.js → readyToRunWorkflowsV2.store-C_fY_4MX.js} +2 -2
  122. package/dist/assets/{templateActions-Bvze3qDu.js → templateActions-jNqx4MKh.js} +1 -1
  123. package/dist/assets/{useBeforeUnload-C1FPWSkO.js → useBeforeUnload-rUCiQOqr.js} +1 -1
  124. package/dist/assets/{useExecutionDebugging-Dgg7jmNh.js → useExecutionDebugging-BaETRwGq.js} +1 -1
  125. package/dist/assets/{useImportCurlCommand-sjcpA0Ub.js → useImportCurlCommand-BdmWWgaO.js} +1 -1
  126. package/dist/assets/{useProjectPages-B5KBSvIU.js → useProjectPages-BauGQpM_.js} +1 -1
  127. package/dist/assets/{usePushConnection-BEiaZIUU.js → usePushConnection-Bc8yBAxj.js} +12 -6
  128. package/dist/assets/{useWorkflowActivate-DykqGtLA.js → useWorkflowActivate-bxZnJPU3.js} +1 -1
  129. package/dist/index.html +2 -2
  130. package/package.json +1 -1
  131. package/scripts/cache-marker.mjs +11 -0
  132. package/turbo.json +2 -1
  133. package/dist/assets/CollectionParameter-D7XE8ypc.js +0 -4
@@ -1,7 +1,7 @@
1
- import { d as defineComponent, r as ref, x as computed, e as createBlock, g as openBlock, bs as createSlots, w as withCtx, Y as renderSlot, h as createElementBlock, F as Fragment, A as renderList, l as unref, ed as _sfc_main$8, n as normalizeClass, i as createVNode, J as N8nUserInfo, K as mergeProps, D as useI18n, ec as N8nSelect, _ as _export_sfc, el as mergeModels, em as useModel, br as onClickOutside, j as createBaseVNode, f as createCommentVNode, aa as Tooltip, ab as _sfc_main$9, q as N8nButton, k as createTextVNode, t as toDisplayString, gn as N8nTabs, N as N8nIcon, c as useI18n$1, a9 as resolveComponent, p as N8nText, fI as ProjectSharing, e9 as N8nInputLabel, d2 as N8nInput, B as withModifiers, aB as usePageRedirectionHelper, ac as I18nT, a8 as watch, gA as isProjectRole, gB as ElRadio, aN as N8nActionDropdown, ej as N8nActionToggle, en as N8nDataTableServer, c3 as normalizeProps, c4 as guardReactiveProps, u as useUsersStore, av as useProjectsStore, gC as useRolesStore, bc as useCloudPlanStore, a as useToast, b as useRouter, ay as useDocumentTitle, b2 as onBeforeMount, o as onMounted, f1 as N8nFormInput, dT as deepCopy, am as useTelemetry, Z as nextTick, fx as isIconOrEmoji, V as VIEWS, er as useDebounceFn } from "./index-BDDH_NIA.js";
2
- import { P as ProjectHeader } from "./ProjectHeader-PFXNU0--.js";
3
- import "./useProjectPages-B5KBSvIU.js";
4
- import "./readyToRunWorkflowsV2.store-Bl7jk-i9.js";
1
+ import { d as defineComponent, r as ref, x as computed, e as createBlock, g as openBlock, bv as createSlots, w as withCtx, Y as renderSlot, h as createElementBlock, F as Fragment, A as renderList, l as unref, eh as _sfc_main$8, n as normalizeClass, i as createVNode, J as N8nUserInfo, K as mergeProps, D as useI18n, eg as N8nSelect, _ as _export_sfc, ep as mergeModels, eq as useModel, bu as onClickOutside, j as createBaseVNode, f as createCommentVNode, aa as Tooltip, ab as _sfc_main$9, q as N8nButton, k as createTextVNode, t as toDisplayString, gr as N8nTabs, N as N8nIcon, c as useI18n$1, a9 as resolveComponent, p as N8nText, fM as ProjectSharing, ed as N8nInputLabel, d6 as N8nInput, B as withModifiers, aB as usePageRedirectionHelper, ac as I18nT, a8 as watch, gE as isProjectRole, gF as ElRadio, aN as N8nActionDropdown, en as N8nActionToggle, er as N8nDataTableServer, c7 as normalizeProps, c8 as guardReactiveProps, u as useUsersStore, av as useProjectsStore, gG as useRolesStore, bc as useCloudPlanStore, a as useToast, b as useRouter, ay as useDocumentTitle, b2 as onBeforeMount, o as onMounted, f5 as N8nFormInput, dX as deepCopy, am as useTelemetry, Z as nextTick, fB as isIconOrEmoji, V as VIEWS, ev as useDebounceFn } from "./index-cWho1w-N.js";
2
+ import { P as ProjectHeader } from "./ProjectHeader-CSMsPy1n.js";
3
+ import "./useProjectPages-BauGQpM_.js";
4
+ import "./readyToRunWorkflowsV2.store-C_fY_4MX.js";
5
5
  const _sfc_main$7 = /* @__PURE__ */ defineComponent({
6
6
  __name: "UserSelect",
7
7
  props: {
@@ -224,6 +224,7 @@ const ALL_ICON_PICKER_ICONS = [
224
224
  "triangle-alert",
225
225
  "maximize",
226
226
  "maximize-2",
227
+ "mcp",
227
228
  "external-link",
228
229
  "arrow-left-right",
229
230
  "file",
@@ -564,13 +565,13 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
564
565
  emit("confirmDelete", selectedProject.value?.id);
565
566
  };
566
567
  return (_ctx, _cache) => {
567
- const _component_n8n_text = N8nText;
568
- const _component_el_radio = resolveComponent("el-radio");
569
- const _component_n8n_input = N8nInput;
570
- const _component_n8n_input_label = N8nInputLabel;
568
+ const _component_N8nText = N8nText;
569
+ const _component_ElRadio = resolveComponent("ElRadio");
570
+ const _component_N8nInput = N8nInput;
571
+ const _component_N8nInputLabel = N8nInputLabel;
571
572
  const _component_N8nButton = N8nButton;
572
- const _component_el_dialog = resolveComponent("el-dialog");
573
- return openBlock(), createBlock(_component_el_dialog, {
573
+ const _component_ElDialog = resolveComponent("ElDialog");
574
+ return openBlock(), createBlock(_component_ElDialog, {
574
575
  modelValue: visible.value,
575
576
  "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => visible.value = $event),
576
577
  title: unref(locale).baseText("projects.settings.delete.title", {
@@ -593,7 +594,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
593
594
  }, 8, ["disabled"])
594
595
  ]),
595
596
  default: withCtx(() => [
596
- !hasMovableResources.value ? (openBlock(), createBlock(_component_n8n_text, {
597
+ !hasMovableResources.value ? (openBlock(), createBlock(_component_N8nText, {
597
598
  key: 0,
598
599
  color: "text-base"
599
600
  }, {
@@ -602,21 +603,21 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
602
603
  ]),
603
604
  _: 1
604
605
  })) : hasMovableResources.value ? (openBlock(), createElementBlock("div", _hoisted_1$4, [
605
- createVNode(_component_n8n_text, { color: "text-base" }, {
606
+ createVNode(_component_N8nText, { color: "text-base" }, {
606
607
  default: withCtx(() => [
607
608
  createTextVNode(toDisplayString(unref(locale).baseText("projects.settings.delete.message")), 1)
608
609
  ]),
609
610
  _: 1
610
611
  }),
611
612
  createBaseVNode("div", _hoisted_2$1, [
612
- createVNode(_component_el_radio, {
613
+ createVNode(_component_ElRadio, {
613
614
  "model-value": operation2.value,
614
615
  label: "transfer",
615
616
  class: "mb-s",
616
617
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => operation2.value = "transfer")
617
618
  }, {
618
619
  default: withCtx(() => [
619
- createVNode(_component_n8n_text, { color: "text-dark" }, {
620
+ createVNode(_component_N8nText, { color: "text-dark" }, {
620
621
  default: withCtx(() => [
621
622
  createTextVNode(toDisplayString(unref(locale).baseText("projects.settings.delete.question.transfer.label")), 1)
622
623
  ]),
@@ -629,7 +630,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
629
630
  key: 0,
630
631
  class: normalizeClass(_ctx.$style.operation)
631
632
  }, [
632
- createVNode(_component_n8n_text, { color: "text-dark" }, {
633
+ createVNode(_component_N8nText, { color: "text-dark" }, {
633
634
  default: withCtx(() => [
634
635
  createTextVNode(toDisplayString(unref(locale).baseText("projects.settings.delete.question.transfer.title")), 1)
635
636
  ]),
@@ -643,14 +644,14 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
643
644
  "empty-options-text": unref(locale).baseText("projects.sharing.noMatchingProjects")
644
645
  }, null, 8, ["modelValue", "projects", "empty-options-text"])
645
646
  ], 2)) : createCommentVNode("", true),
646
- createVNode(_component_el_radio, {
647
+ createVNode(_component_ElRadio, {
647
648
  "model-value": operation2.value,
648
649
  label: "wipe",
649
650
  class: "mb-s",
650
651
  "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => operation2.value = "wipe")
651
652
  }, {
652
653
  default: withCtx(() => [
653
- createVNode(_component_n8n_text, { color: "text-dark" }, {
654
+ createVNode(_component_N8nText, { color: "text-dark" }, {
654
655
  default: withCtx(() => [
655
656
  createTextVNode(toDisplayString(unref(locale).baseText("projects.settings.delete.question.wipe.label")), 1)
656
657
  ]),
@@ -663,11 +664,11 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
663
664
  key: 1,
664
665
  class: normalizeClass(_ctx.$style.operation)
665
666
  }, [
666
- createVNode(_component_n8n_input_label, {
667
+ createVNode(_component_N8nInputLabel, {
667
668
  label: unref(locale).baseText("projects.settings.delete.question.wipe.title")
668
669
  }, {
669
670
  default: withCtx(() => [
670
- createVNode(_component_n8n_input, {
671
+ createVNode(_component_N8nInput, {
671
672
  modelValue: wipeConfirmText.value,
672
673
  "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => wipeConfirmText.value = $event),
673
674
  "data-test-id": "project-delete-confirm-input",
@@ -715,8 +716,8 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
715
716
  };
716
717
  return (_ctx, _cache) => {
717
718
  const _component_N8nButton = N8nButton;
718
- const _component_el_dialog = resolveComponent("el-dialog");
719
- return openBlock(), createBlock(_component_el_dialog, {
719
+ const _component_ElDialog = resolveComponent("ElDialog");
720
+ return openBlock(), createBlock(_component_ElDialog, {
720
721
  modelValue: visible.value,
721
722
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => visible.value = $event),
722
723
  title: unref(locale).baseText("projects.settings.role.upgrade.title"),
@@ -1033,11 +1034,8 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1033
1034
  });
1034
1035
  const _hoisted_1 = { for: "projectName" };
1035
1036
  const _hoisted_2 = { for: "projectDescription" };
1036
- const _hoisted_3 = { for: "projectMembers" };
1037
- const _hoisted_4 = {
1038
- key: 0,
1039
- class: "mr-2xs"
1040
- };
1037
+ const _hoisted_3 = { class: "mr-2xs" };
1038
+ const _hoisted_4 = { for: "projectMembers" };
1041
1039
  const _hoisted_5 = { class: "mb-xs" };
1042
1040
  const _sfc_main = /* @__PURE__ */ defineComponent({
1043
1041
  __name: "ProjectSettings",
@@ -1051,6 +1049,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1051
1049
  const router = useRouter();
1052
1050
  const telemetry = useTelemetry();
1053
1051
  const documentTitle = useDocumentTitle();
1052
+ const showSaveError = (error) => {
1053
+ toast.showError(error, i18n.baseText("projects.settings.save.error.title"));
1054
+ };
1054
1055
  const dialogVisible = ref(false);
1055
1056
  const upgradeDialogVisible = ref(false);
1056
1057
  const isDirty = ref(false);
@@ -1088,9 +1089,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1088
1089
  });
1089
1090
  const usersList = computed(
1090
1091
  () => usersStore.allUsers.filter((user) => {
1091
- const isAlreadySharedWithUser = (formData.value.relations || []).find(
1092
- (r) => r.id === user.id
1093
- );
1092
+ const isAlreadySharedWithUser = (formData.value.relations || []).find((r) => r.id === user.id);
1094
1093
  return !isAlreadySharedWithUser;
1095
1094
  })
1096
1095
  );
@@ -1113,16 +1112,31 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1113
1112
  guard: (member) => member.id !== usersStore.currentUser?.id && member.role !== "project:personalOwner"
1114
1113
  }
1115
1114
  ]);
1116
- const onAddMember = (userId) => {
1117
- isDirty.value = true;
1115
+ const onAddMember = async (userId) => {
1116
+ if (!projectsStore.currentProject) return;
1118
1117
  const user = usersStore.usersById[userId];
1119
1118
  if (!user) return;
1120
- const { id, firstName, lastName, email } = user;
1121
- const relation = { id, firstName, lastName, email };
1122
- if (firstLicensedRole.value) {
1123
- relation.role = firstLicensedRole.value;
1119
+ const role = firstLicensedRole.value;
1120
+ if (!role) return;
1121
+ if (!formData.value.relations.find((r) => r.id === userId)) {
1122
+ formData.value.relations.push({ id: userId, role });
1123
+ }
1124
+ try {
1125
+ suppressNextSync.value = true;
1126
+ await projectsStore.addMember(projectsStore.currentProject.id, { userId, role });
1127
+ toast.showMessage({
1128
+ type: "success",
1129
+ title: i18n.baseText("projects.settings.member.added.title")
1130
+ });
1131
+ telemetry.track("User added member to project", {
1132
+ project_id: projectsStore.currentProject.id,
1133
+ target_user_id: userId,
1134
+ role
1135
+ });
1136
+ } catch (error) {
1137
+ formData.value.relations = formData.value.relations.filter((r) => r.id !== userId);
1138
+ showSaveError(error);
1124
1139
  }
1125
- formData.value.relations.push(relation);
1126
1140
  };
1127
1141
  const onUpdateMemberRole = async ({ userId, role }) => {
1128
1142
  if (!projectsStore.currentProject) {
@@ -1135,12 +1149,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1135
1149
  const originalRole = formData.value.relations[memberIndex].role;
1136
1150
  formData.value.relations[memberIndex].role = role;
1137
1151
  try {
1138
- await projectsStore.updateProject(projectsStore.currentProject.id, {
1139
- relations: formData.value.relations.map((r) => ({
1140
- userId: r.id,
1141
- role: r.role
1142
- }))
1143
- });
1152
+ suppressNextSync.value = true;
1153
+ await projectsStore.updateMemberRole(projectsStore.currentProject.id, userId, role);
1144
1154
  toast.showMessage({
1145
1155
  type: "success",
1146
1156
  title: i18n.baseText("projects.settings.memberRole.updated.title")
@@ -1168,9 +1178,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1168
1178
  if (!isPersisted) return;
1169
1179
  try {
1170
1180
  suppressNextSync.value = true;
1171
- await projectsStore.updateProject(current.id, {
1172
- relations: current.relations.filter((r) => r.id !== userId).map((r) => ({ userId: r.id, role: r.role }))
1173
- });
1181
+ await projectsStore.removeMember(current.id, userId);
1174
1182
  toast.showMessage({
1175
1183
  type: "success",
1176
1184
  title: i18n.baseText("projects.settings.member.removed.title")
@@ -1181,7 +1189,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1181
1189
  });
1182
1190
  } catch (error) {
1183
1191
  formData.value.relations.splice(idx, 0, removed);
1184
- toast.showError(error, i18n.baseText("projects.settings.save.error.title"));
1192
+ showSaveError(error);
1185
1193
  }
1186
1194
  }
1187
1195
  const onMembersListAction = async ({ action, userId }) => {
@@ -1191,10 +1199,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1191
1199
  break;
1192
1200
  }
1193
1201
  };
1194
- const onCancel = () => {
1202
+ const resetFormData = () => {
1195
1203
  formData.value.relations = projectsStore.currentProject?.relations ? deepCopy(projectsStore.currentProject.relations) : [];
1196
1204
  formData.value.name = projectsStore.currentProject?.name ?? "";
1197
1205
  formData.value.description = projectsStore.currentProject?.description ?? "";
1206
+ };
1207
+ const onCancel = () => {
1208
+ resetFormData();
1198
1209
  isDirty.value = false;
1199
1210
  };
1200
1211
  const makeFormDataDiff = () => {
@@ -1223,59 +1234,43 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1223
1234
  return diff;
1224
1235
  };
1225
1236
  const sendTelemetry = (diff) => {
1237
+ const projectId = projectsStore.currentProject?.id;
1226
1238
  if (diff.name) {
1227
- telemetry.track("User changed project name", {
1228
- project_id: projectsStore.currentProject?.id,
1229
- name: diff.name
1230
- });
1239
+ telemetry.track("User changed project name", { project_id: projectId, name: diff.name });
1231
1240
  }
1232
- if (diff.memberAdded) {
1233
- diff.memberAdded.forEach((r) => {
1234
- telemetry.track("User added member to project", {
1235
- project_id: projectsStore.currentProject?.id,
1236
- target_user_id: r.id,
1237
- role: r.role
1238
- });
1241
+ diff.memberAdded?.forEach((r) => {
1242
+ telemetry.track("User added member to project", {
1243
+ project_id: projectId,
1244
+ target_user_id: r.id,
1245
+ role: r.role
1239
1246
  });
1240
- }
1241
- if (diff.memberRemoved) {
1242
- diff.memberRemoved.forEach((r) => {
1243
- telemetry.track("User removed member from project", {
1244
- project_id: projectsStore.currentProject?.id,
1245
- target_user_id: r.id
1246
- });
1247
+ });
1248
+ diff.memberRemoved?.forEach((r) => {
1249
+ telemetry.track("User removed member from project", {
1250
+ project_id: projectId,
1251
+ target_user_id: r.id
1247
1252
  });
1248
- }
1249
- if (diff.role) {
1250
- diff.role.forEach((r) => {
1251
- telemetry.track("User changed member role on project", {
1252
- project_id: projectsStore.currentProject?.id,
1253
- target_user_id: r.id,
1254
- role: r.role
1255
- });
1253
+ });
1254
+ diff.role?.forEach((r) => {
1255
+ telemetry.track("User changed member role on project", {
1256
+ project_id: projectId,
1257
+ target_user_id: r.id,
1258
+ role: r.role
1256
1259
  });
1257
- }
1260
+ });
1258
1261
  };
1259
1262
  const updateProject = async () => {
1260
1263
  if (!projectsStore.currentProject) {
1261
1264
  return;
1262
1265
  }
1263
1266
  try {
1264
- if (formData.value.relations.some((r) => r.role === "project:personalOwner")) {
1265
- throw new Error("Invalid role selected for this project.");
1266
- }
1267
1267
  await projectsStore.updateProject(projectsStore.currentProject.id, {
1268
1268
  name: formData.value.name ?? "",
1269
- icon: projectIcon.value,
1270
- description: formData.value.description ?? "",
1271
- relations: formData.value.relations.map((r) => ({
1272
- userId: r.id,
1273
- role: r.role
1274
- }))
1269
+ description: formData.value.description ?? ""
1275
1270
  });
1276
1271
  isDirty.value = false;
1277
1272
  } catch (error) {
1278
- toast.showError(error, i18n.baseText("projects.settings.save.error.title"));
1273
+ showSaveError(error);
1279
1274
  throw error;
1280
1275
  }
1281
1276
  };
@@ -1306,12 +1301,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1306
1301
  const onConfirmDelete = async (transferId) => {
1307
1302
  try {
1308
1303
  if (projectsStore.currentProject) {
1309
- const projectName = projectsStore.currentProject?.name ?? "";
1304
+ const projectName2 = projectsStore.currentProject?.name ?? "";
1310
1305
  await projectsStore.deleteProject(projectsStore.currentProject.id, transferId);
1311
1306
  await router.push({ name: VIEWS.HOMEPAGE });
1312
1307
  toast.showMessage({
1313
1308
  title: i18n.baseText("projects.settings.delete.successful.title", {
1314
- interpolate: { projectName }
1309
+ interpolate: { projectName: projectName2 }
1315
1310
  }),
1316
1311
  type: "success"
1317
1312
  });
@@ -1328,11 +1323,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1328
1323
  }
1329
1324
  };
1330
1325
  const onIconUpdated = async () => {
1331
- await updateProject();
1332
- toast.showMessage({
1333
- title: i18n.baseText("projects.settings.icon.update.successful.title"),
1334
- type: "success"
1335
- });
1326
+ if (!projectsStore.currentProject) return;
1327
+ try {
1328
+ await projectsStore.updateProject(projectsStore.currentProject.id, {
1329
+ icon: projectIcon.value
1330
+ });
1331
+ toast.showMessage({
1332
+ title: i18n.baseText("projects.settings.icon.update.successful.title"),
1333
+ type: "success"
1334
+ });
1335
+ } catch (error) {
1336
+ showSaveError(error);
1337
+ }
1336
1338
  };
1337
1339
  watch(
1338
1340
  () => projectsStore.currentProject,
@@ -1341,9 +1343,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1341
1343
  suppressNextSync.value = false;
1342
1344
  return;
1343
1345
  }
1344
- formData.value.name = projectsStore.currentProject?.name ?? "";
1345
- formData.value.description = projectsStore.currentProject?.description ?? "";
1346
- formData.value.relations = projectsStore.currentProject?.relations ? deepCopy(projectsStore.currentProject.relations) : [];
1346
+ resetFormData();
1347
1347
  await nextTick();
1348
1348
  selectProjectNameIfMatchesDefault();
1349
1349
  if (projectsStore.currentProject?.icon && isIconOrEmoji(projectsStore.currentProject.icon)) {
@@ -1356,19 +1356,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1356
1356
  () => formData.value.relations.map((relation) => {
1357
1357
  const user = usersStore.usersById[relation.id];
1358
1358
  const safeRole = isProjectRole(relation.role) ? relation.role : "project:viewer";
1359
- if (!user) {
1360
- return {
1361
- ...relation,
1362
- role: safeRole,
1363
- firstName: null,
1364
- lastName: null,
1365
- email: null
1366
- };
1367
- }
1368
1359
  return {
1369
1360
  ...user,
1370
1361
  ...relation,
1371
- role: safeRole
1362
+ role: safeRole,
1363
+ firstName: user?.firstName ?? null,
1364
+ lastName: user?.lastName ?? null,
1365
+ email: user?.email ?? null
1372
1366
  };
1373
1367
  })
1374
1368
  );
@@ -1377,19 +1371,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1377
1371
  count: relationUsers.value.length
1378
1372
  }));
1379
1373
  const filteredMembersData = computed(() => {
1380
- if (!search2.value.trim()) {
1381
- return membersTableData.value;
1382
- }
1374
+ if (!search2.value.trim()) return membersTableData.value;
1383
1375
  const searchTerm = search2.value.toLowerCase();
1384
1376
  const filtered = relationUsers.value.filter((member) => {
1385
- const fullName = `${member.firstName || ""} ${member.lastName || ""}`.toLowerCase();
1386
- const email = (member.email || "").toLowerCase();
1377
+ const fullName = `${member.firstName ?? ""} ${member.lastName ?? ""}`.toLowerCase();
1378
+ const email = (member.email ?? "").toLowerCase();
1387
1379
  return fullName.includes(searchTerm) || email.includes(searchTerm);
1388
1380
  });
1389
- return {
1390
- items: filtered,
1391
- count: filtered.length
1392
- };
1381
+ return { items: filtered, count: filtered.length };
1393
1382
  });
1394
1383
  const debouncedSearch = useDebounceFn(() => {
1395
1384
  membersTableState.value.page = 0;
@@ -1409,10 +1398,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1409
1398
  selectProjectNameIfMatchesDefault();
1410
1399
  });
1411
1400
  return (_ctx, _cache) => {
1401
+ const _component_N8nText = N8nText;
1412
1402
  const _component_N8nIconPicker = IconPicker;
1403
+ const _component_N8nButton = N8nButton;
1413
1404
  const _component_N8nIcon = N8nIcon;
1414
1405
  const _component_N8nUserSelect = N8nUserSelect;
1415
- const _component_N8nButton = N8nButton;
1416
1406
  return openBlock(), createElementBlock("div", {
1417
1407
  class: normalizeClass(_ctx.$style.projectSettings),
1418
1408
  "data-test-id": "project-settings-container"
@@ -1420,7 +1410,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1420
1410
  createBaseVNode("div", {
1421
1411
  class: normalizeClass(_ctx.$style.header)
1422
1412
  }, [
1423
- createVNode(ProjectHeader)
1413
+ createVNode(ProjectHeader),
1414
+ createVNode(_component_N8nText, {
1415
+ tag: "h1",
1416
+ size: "xlarge",
1417
+ class: "pt-xs pb-m"
1418
+ }, {
1419
+ default: withCtx(() => [
1420
+ createTextVNode(toDisplayString(unref(i18n).baseText("projects.settings.info")), 1)
1421
+ ]),
1422
+ _: 1
1423
+ })
1424
1424
  ], 2),
1425
1425
  createBaseVNode("form", {
1426
1426
  onSubmit: withModifiers(onSubmit, ["prevent"])
@@ -1428,7 +1428,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1428
1428
  createBaseVNode("fieldset", null, [
1429
1429
  createBaseVNode("label", _hoisted_1, toDisplayString(unref(i18n).baseText("projects.settings.name")), 1),
1430
1430
  createBaseVNode("div", {
1431
- class: normalizeClass(_ctx.$style["project-name"])
1431
+ class: normalizeClass(_ctx.$style.projectName)
1432
1432
  }, [
1433
1433
  createVNode(_component_N8nIconPicker, {
1434
1434
  modelValue: projectIcon.value,
@@ -1449,7 +1449,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1449
1449
  name: "name",
1450
1450
  required: "",
1451
1451
  "data-test-id": "project-settings-name-input",
1452
- class: normalizeClass(_ctx.$style["project-name-input"]),
1452
+ class: normalizeClass(_ctx.$style.projectNameInput),
1453
1453
  onEnter: onSubmit,
1454
1454
  onInput: onTextInput,
1455
1455
  onValidate: _cache[2] || (_cache[2] = ($event) => isValid.value = $event)
@@ -1468,16 +1468,49 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1468
1468
  maxlength: 512,
1469
1469
  autosize: true,
1470
1470
  "data-test-id": "project-settings-description-input",
1471
+ class: normalizeClass(_ctx.$style.projectDescriptionInput),
1471
1472
  onEnter: onSubmit,
1472
1473
  onInput: onTextInput,
1473
1474
  onValidate: _cache[4] || (_cache[4] = ($event) => isValid.value = $event)
1474
- }, null, 8, ["modelValue"])
1475
+ }, null, 8, ["modelValue", "class"])
1475
1476
  ]),
1477
+ isDirty.value ? (openBlock(), createElementBlock("fieldset", {
1478
+ key: 0,
1479
+ class: normalizeClass(_ctx.$style.buttons)
1480
+ }, [
1481
+ createBaseVNode("div", null, [
1482
+ createBaseVNode("small", _hoisted_3, toDisplayString(unref(i18n).baseText("projects.settings.message.unsavedChanges")), 1),
1483
+ createVNode(_component_N8nButton, {
1484
+ type: "secondary",
1485
+ "native-type": "button",
1486
+ class: "mr-2xs",
1487
+ "data-test-id": "project-settings-cancel-button",
1488
+ onClick: withModifiers(onCancel, ["stop", "prevent"])
1489
+ }, {
1490
+ default: withCtx(() => [
1491
+ createTextVNode(toDisplayString(unref(i18n).baseText("projects.settings.button.cancel")), 1)
1492
+ ]),
1493
+ _: 1
1494
+ })
1495
+ ]),
1496
+ createVNode(_component_N8nButton, {
1497
+ disabled: !isValid.value,
1498
+ type: "primary",
1499
+ "data-test-id": "project-settings-save-button"
1500
+ }, {
1501
+ default: withCtx(() => [
1502
+ createTextVNode(toDisplayString(unref(i18n).baseText("projects.settings.button.save")), 1)
1503
+ ]),
1504
+ _: 1
1505
+ }, 8, ["disabled"])
1506
+ ], 2)) : createCommentVNode("", true),
1476
1507
  createBaseVNode("fieldset", null, [
1477
- createBaseVNode("label", _hoisted_3, toDisplayString(unref(i18n).baseText("projects.settings.projectMembers")), 1),
1508
+ createBaseVNode("h3", null, [
1509
+ createBaseVNode("label", _hoisted_4, toDisplayString(unref(i18n).baseText("projects.settings.projectMembers")), 1)
1510
+ ]),
1478
1511
  createVNode(_component_N8nUserSelect, {
1479
1512
  id: "projectMembers",
1480
- class: "mb-s",
1513
+ class: normalizeClass([_ctx.$style.userSelect, "mb-s"]),
1481
1514
  size: "large",
1482
1515
  users: usersList.value,
1483
1516
  "current-user-id": unref(usersStore).currentUser?.id,
@@ -1489,7 +1522,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1489
1522
  createVNode(_component_N8nIcon, { icon: "search" })
1490
1523
  ]),
1491
1524
  _: 1
1492
- }, 8, ["users", "current-user-id", "placeholder"]),
1525
+ }, 8, ["class", "users", "current-user-id", "placeholder"]),
1493
1526
  relationUsers.value.length > 0 ? (openBlock(), createElementBlock("div", {
1494
1527
  key: 0,
1495
1528
  class: normalizeClass(_ctx.$style.membersTableContainer)
@@ -1521,41 +1554,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1521
1554
  }, null, 8, ["table-options", "data", "current-user-id", "project-roles", "actions"])
1522
1555
  ], 2)) : createCommentVNode("", true)
1523
1556
  ]),
1524
- createBaseVNode("fieldset", {
1525
- class: normalizeClass(_ctx.$style.buttons)
1526
- }, [
1527
- createBaseVNode("div", null, [
1528
- isDirty.value ? (openBlock(), createElementBlock("small", _hoisted_4, toDisplayString(unref(i18n).baseText("projects.settings.message.unsavedChanges")), 1)) : createCommentVNode("", true),
1529
- createVNode(_component_N8nButton, {
1530
- disabled: !isDirty.value,
1531
- type: "secondary",
1532
- "native-type": "button",
1533
- class: "mr-2xs",
1534
- "data-test-id": "project-settings-cancel-button",
1535
- onClick: withModifiers(onCancel, ["stop", "prevent"])
1536
- }, {
1537
- default: withCtx(() => [
1538
- createTextVNode(toDisplayString(unref(i18n).baseText("projects.settings.button.cancel")), 1)
1539
- ]),
1540
- _: 1
1541
- }, 8, ["disabled"])
1542
- ]),
1543
- createVNode(_component_N8nButton, {
1544
- disabled: !isDirty.value || !isValid.value,
1545
- type: "primary",
1546
- "data-test-id": "project-settings-save-button"
1547
- }, {
1548
- default: withCtx(() => [
1549
- createTextVNode(toDisplayString(unref(i18n).baseText("projects.settings.button.save")), 1)
1550
- ]),
1551
- _: 1
1552
- }, 8, ["disabled"])
1553
- ], 2),
1554
1557
  createBaseVNode("fieldset", null, [
1555
- _cache[8] || (_cache[8] = createBaseVNode("hr", { class: "mb-2xl" }, null, -1)),
1556
1558
  createBaseVNode("h3", _hoisted_5, toDisplayString(unref(i18n).baseText("projects.settings.danger.title")), 1),
1557
1559
  createBaseVNode("small", null, toDisplayString(unref(i18n).baseText("projects.settings.danger.message")), 1),
1558
- _cache[9] || (_cache[9] = createBaseVNode("br", null, null, -1)),
1560
+ _cache[8] || (_cache[8] = createBaseVNode("br", null, null, -1)),
1559
1561
  createVNode(_component_N8nButton, {
1560
1562
  type: "tertiary",
1561
1563
  "native-type": "button",
@@ -1588,12 +1590,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1588
1590
  };
1589
1591
  }
1590
1592
  });
1591
- const projectSettings = "_projectSettings_2n0pf_123";
1592
- const header = "_header_2n0pf_143";
1593
- const upgrade = "_upgrade_2n0pf_149";
1594
- const buttons = "_buttons_2n0pf_153";
1595
- const membersTableContainer = "_membersTableContainer_2n0pf_159";
1596
- const search = "_search_2n0pf_163";
1593
+ const projectSettings = "_projectSettings_1kv8e_123";
1594
+ const header = "_header_1kv8e_147";
1595
+ const upgrade = "_upgrade_1kv8e_153";
1596
+ const buttons = "_buttons_1kv8e_157";
1597
+ const membersTableContainer = "_membersTableContainer_1kv8e_163";
1598
+ const search = "_search_1kv8e_167";
1599
+ const projectName = "_projectName_1kv8e_172";
1600
+ const projectNameInput = "_projectNameInput_1kv8e_177";
1601
+ const projectDescriptionInput = "_projectDescriptionInput_1kv8e_181";
1602
+ const userSelect = "_userSelect_1kv8e_182";
1597
1603
  const style0 = {
1598
1604
  projectSettings,
1599
1605
  header,
@@ -1601,8 +1607,10 @@ const style0 = {
1601
1607
  buttons,
1602
1608
  membersTableContainer,
1603
1609
  search,
1604
- "project-name": "_project-name_2n0pf_168",
1605
- "project-name-input": "_project-name-input_2n0pf_172"
1610
+ projectName,
1611
+ projectNameInput,
1612
+ projectDescriptionInput,
1613
+ userSelect
1606
1614
  };
1607
1615
  const cssModules = {
1608
1616
  "$style": style0