n8n-editor-ui 1.43.0 → 1.43.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 (147) hide show
  1. package/.turbo/turbo-build.log +72 -72
  2. package/dist/assets/{AuthView-wAV15F8m.js → AuthView-k9-4l8d2.js} +2 -2
  3. package/dist/assets/{AuthView-wAV15F8m.js.map → AuthView-k9-4l8d2.js.map} +1 -1
  4. package/dist/assets/{CanvasControls-gKuuF9YF.js → CanvasControls-4_78UsoA.js} +2 -2
  5. package/dist/assets/{CanvasControls-gKuuF9YF.js.map → CanvasControls-4_78UsoA.js.map} +1 -1
  6. package/dist/assets/{ChangePasswordView-lW3AftTZ.js → ChangePasswordView-WZx2sxAq.js} +2 -2
  7. package/dist/assets/{ChangePasswordView-lW3AftTZ.js.map → ChangePasswordView-WZx2sxAq.js.map} +1 -1
  8. package/dist/assets/{CollectionParameter-DTYD_Lcf.js → CollectionParameter-DDWzNH-Y.js} +2 -2
  9. package/dist/assets/CollectionParameter-DDWzNH-Y.js.map +1 -0
  10. package/dist/assets/{CredentialsView-R7OKepMF.js → CredentialsView-pP5cOmCw.js} +2 -2
  11. package/dist/assets/{CredentialsView-R7OKepMF.js.map → CredentialsView-pP5cOmCw.js.map} +1 -1
  12. package/dist/assets/{ExecutionsFilter-NfToJM9y.js → ExecutionsFilter-Zq0mjSZf.js} +2 -2
  13. package/dist/assets/{ExecutionsFilter-NfToJM9y.js.map → ExecutionsFilter-Zq0mjSZf.js.map} +1 -1
  14. package/dist/assets/{ExecutionsView-i3z4OWwK.js → ExecutionsView-2RUbEKrf.js} +2 -2
  15. package/dist/assets/{ExecutionsView-i3z4OWwK.js.map → ExecutionsView-2RUbEKrf.js.map} +1 -1
  16. package/dist/assets/{ForgotMyPasswordView-OicEjBTM.js → ForgotMyPasswordView-ZBwhNj_M.js} +2 -2
  17. package/dist/assets/{ForgotMyPasswordView-OicEjBTM.js.map → ForgotMyPasswordView-ZBwhNj_M.js.map} +1 -1
  18. package/dist/assets/{MainHeader-VEoGw9mF.js → MainHeader-__zJO-m7.js} +2 -2
  19. package/dist/assets/{MainHeader-VEoGw9mF.js.map → MainHeader-__zJO-m7.js.map} +1 -1
  20. package/dist/assets/{MainSidebar-9VtAlHw5.js → MainSidebar-7XGRE24x.js} +2 -2
  21. package/dist/assets/{MainSidebar-9VtAlHw5.js.map → MainSidebar-7XGRE24x.js.map} +1 -1
  22. package/dist/assets/{NodeCreation-yGH6whwu.js → NodeCreation-BmkaaGqL.js} +3 -3
  23. package/dist/assets/{NodeCreation-yGH6whwu.js.map → NodeCreation-BmkaaGqL.js.map} +1 -1
  24. package/dist/assets/{NodeCreator-uo45xC8F.js → NodeCreator-iBjoivu6.js} +2 -2
  25. package/dist/assets/{NodeCreator-uo45xC8F.js.map → NodeCreator-iBjoivu6.js.map} +1 -1
  26. package/dist/assets/{NodeList-mBvddp-7.js → NodeList-qt_5gC5-.js} +2 -2
  27. package/dist/assets/{NodeList-mBvddp-7.js.map → NodeList-qt_5gC5-.js.map} +1 -1
  28. package/dist/assets/NodeView-qN4Zuw87.js +9 -0
  29. package/dist/assets/NodeView-qN4Zuw87.js.map +1 -0
  30. package/dist/assets/{NodeView-XB-d5jgs.css → NodeView-sEzPscdT.css} +1 -1
  31. package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-YOVpN0pD.js → ProjectCardBadge.vue_vue_type_script_setup_true_lang-tfIcNjaC.js} +2 -2
  32. package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-YOVpN0pD.js.map → ProjectCardBadge.vue_vue_type_script_setup_true_lang-tfIcNjaC.js.map} +1 -1
  33. package/dist/assets/{ProjectSettings-ZDAhIwhQ.js → ProjectSettings-B-H5G2EN.js} +2 -2
  34. package/dist/assets/{ProjectSettings-ZDAhIwhQ.js.map → ProjectSettings-B-H5G2EN.js.map} +1 -1
  35. package/dist/assets/{ProjectTabs-L2yrOMy6.js → ProjectTabs-A5hdgqW2.js} +2 -2
  36. package/dist/assets/{ProjectTabs-L2yrOMy6.js.map → ProjectTabs-A5hdgqW2.js.map} +1 -1
  37. package/dist/assets/{PushConnectionTracker-GgAPUiGC.js → PushConnectionTracker-1875-61J.js} +2 -2
  38. package/dist/assets/{PushConnectionTracker-GgAPUiGC.js.map → PushConnectionTracker-1875-61J.js.map} +1 -1
  39. package/dist/assets/{ResourcesListLayout-S53Q3neu.js → ResourcesListLayout-zQLxB7dP.js} +2 -2
  40. package/dist/assets/{ResourcesListLayout-S53Q3neu.js.map → ResourcesListLayout-zQLxB7dP.js.map} +1 -1
  41. package/dist/assets/{RunDataAi-jJ9KfOCF.js → RunDataAi-sZalPI5G.js} +2 -2
  42. package/dist/assets/{RunDataAi-jJ9KfOCF.js.map → RunDataAi-sZalPI5G.js.map} +1 -1
  43. package/dist/assets/{RunDataJson-52-sD-ud.js → RunDataJson-Wjq8QCxZ.js} +3 -3
  44. package/dist/assets/{RunDataJson-52-sD-ud.js.map → RunDataJson-Wjq8QCxZ.js.map} +1 -1
  45. package/dist/assets/{RunDataJsonActions-Zjaa2Qdn.js → RunDataJsonActions-s5miC4iz.js} +2 -2
  46. package/dist/assets/{RunDataJsonActions-Zjaa2Qdn.js.map → RunDataJsonActions-s5miC4iz.js.map} +1 -1
  47. package/dist/assets/{RunDataSchema-iNj_tX9n.js → RunDataSchema-s4wg-kE7.js} +2 -2
  48. package/dist/assets/{RunDataSchema-iNj_tX9n.js.map → RunDataSchema-s4wg-kE7.js.map} +1 -1
  49. package/dist/assets/{RunDataSearch-6GGyQrwT.js → RunDataSearch-jtcvkqv3.js} +2 -2
  50. package/dist/assets/{RunDataSearch-6GGyQrwT.js.map → RunDataSearch-jtcvkqv3.js.map} +1 -1
  51. package/dist/assets/{RunDataTable-f5gLoK65.js → RunDataTable-ViMJNYSP.js} +2 -2
  52. package/dist/assets/{RunDataTable-f5gLoK65.js.map → RunDataTable-ViMJNYSP.js.map} +1 -1
  53. package/dist/assets/{SamlOnboarding--QQ0CjBZ.js → SamlOnboarding-ImP6fnp5.js} +2 -2
  54. package/dist/assets/{SamlOnboarding--QQ0CjBZ.js.map → SamlOnboarding-ImP6fnp5.js.map} +1 -1
  55. package/dist/assets/{SettingsApiView-XqezQtu_.js → SettingsApiView-mtjfmBn2.js} +2 -2
  56. package/dist/assets/{SettingsApiView-XqezQtu_.js.map → SettingsApiView-mtjfmBn2.js.map} +1 -1
  57. package/dist/assets/{SettingsCommunityNodesView-qmLS2FT2.js → SettingsCommunityNodesView-3ZbERy3i.js} +2 -2
  58. package/dist/assets/{SettingsCommunityNodesView-qmLS2FT2.js.map → SettingsCommunityNodesView-3ZbERy3i.js.map} +1 -1
  59. package/dist/assets/{SettingsExternalSecrets--1U82XVJ.js → SettingsExternalSecrets-RZSTXpBn.js} +2 -2
  60. package/dist/assets/{SettingsExternalSecrets--1U82XVJ.js.map → SettingsExternalSecrets-RZSTXpBn.js.map} +1 -1
  61. package/dist/assets/{SettingsFakeDoorView-7i_qMtlE.js → SettingsFakeDoorView-woDCBRrk.js} +2 -2
  62. package/dist/assets/{SettingsFakeDoorView-7i_qMtlE.js.map → SettingsFakeDoorView-woDCBRrk.js.map} +1 -1
  63. package/dist/assets/{SettingsLdapView-uwXk-BOB.js → SettingsLdapView-VGtviAVN.js} +2 -2
  64. package/dist/assets/{SettingsLdapView-uwXk-BOB.js.map → SettingsLdapView-VGtviAVN.js.map} +1 -1
  65. package/dist/assets/{SettingsLogStreamingView-9iFeBG5H.js → SettingsLogStreamingView--Mm-atCG.js} +2 -2
  66. package/dist/assets/{SettingsLogStreamingView-9iFeBG5H.js.map → SettingsLogStreamingView--Mm-atCG.js.map} +1 -1
  67. package/dist/assets/{SettingsPersonalView-wv1eEj4o.js → SettingsPersonalView-5sWpXI6Q.js} +2 -2
  68. package/dist/assets/{SettingsPersonalView-wv1eEj4o.js.map → SettingsPersonalView-5sWpXI6Q.js.map} +1 -1
  69. package/dist/assets/{SettingsSourceControl-Q_7vZyBx.js → SettingsSourceControl-XlFUiK_r.js} +2 -2
  70. package/dist/assets/{SettingsSourceControl-Q_7vZyBx.js.map → SettingsSourceControl-XlFUiK_r.js.map} +1 -1
  71. package/dist/assets/{SettingsSso-9-1iByXJ.js → SettingsSso-RaxUMYEI.js} +2 -2
  72. package/dist/assets/{SettingsSso-9-1iByXJ.js.map → SettingsSso-RaxUMYEI.js.map} +1 -1
  73. package/dist/assets/{SettingsUsageAndPlan-Es866y16.js → SettingsUsageAndPlan-hZIuBr2_.js} +2 -2
  74. package/dist/assets/{SettingsUsageAndPlan-Es866y16.js.map → SettingsUsageAndPlan-hZIuBr2_.js.map} +1 -1
  75. package/dist/assets/{SettingsUsersView-wmmQr7i0.js → SettingsUsersView-Y7yTA_F4.js} +2 -2
  76. package/dist/assets/{SettingsUsersView-wmmQr7i0.js.map → SettingsUsersView-Y7yTA_F4.js.map} +1 -1
  77. package/dist/assets/{SettingsView-oYe3uTRj.js → SettingsView-rKKZ6L11.js} +2 -2
  78. package/dist/assets/{SettingsView-oYe3uTRj.js.map → SettingsView-rKKZ6L11.js.map} +1 -1
  79. package/dist/assets/{SetupView-KGS1CEsN.js → SetupView-vgQT3oJU.js} +2 -2
  80. package/dist/assets/{SetupView-KGS1CEsN.js.map → SetupView-vgQT3oJU.js.map} +1 -1
  81. package/dist/assets/{SetupWorkflowCredentialsButton-Ccl5HCte.js → SetupWorkflowCredentialsButton-QGvaG01Z.js} +2 -2
  82. package/dist/assets/{SetupWorkflowCredentialsButton-Ccl5HCte.js.map → SetupWorkflowCredentialsButton-QGvaG01Z.js.map} +1 -1
  83. package/dist/assets/{SetupWorkflowFromTemplateView-_ayHH-IZ.js → SetupWorkflowFromTemplateView-8kV0zT9M.js} +2 -2
  84. package/dist/assets/{SetupWorkflowFromTemplateView-_ayHH-IZ.js.map → SetupWorkflowFromTemplateView-8kV0zT9M.js.map} +1 -1
  85. package/dist/assets/{SigninView-Gc6N_vLo.js → SigninView-9HcFtYYH.js} +2 -2
  86. package/dist/assets/{SigninView-Gc6N_vLo.js.map → SigninView-9HcFtYYH.js.map} +1 -1
  87. package/dist/assets/SignoutView-aFW_4GHN.js +2 -0
  88. package/dist/assets/SignoutView-aFW_4GHN.js.map +1 -0
  89. package/dist/assets/{SignupView-TUYaR1Nz.js → SignupView-pWu_Kk45.js} +2 -2
  90. package/dist/assets/{SignupView-TUYaR1Nz.js.map → SignupView-pWu_Kk45.js.map} +1 -1
  91. package/dist/assets/{TemplateDetails-s0HGsSP9.js → TemplateDetails-PaDbF87J.js} +2 -2
  92. package/dist/assets/{TemplateDetails-s0HGsSP9.js.map → TemplateDetails-PaDbF87J.js.map} +1 -1
  93. package/dist/assets/{TemplateList--L3zJ5wK.js → TemplateList-M4LBpjOe.js} +2 -2
  94. package/dist/assets/{TemplateList--L3zJ5wK.js.map → TemplateList-M4LBpjOe.js.map} +1 -1
  95. package/dist/assets/{TemplatesCollectionView-d1seBq10.js → TemplatesCollectionView-RBv7X4Gh.js} +2 -2
  96. package/dist/assets/{TemplatesCollectionView-d1seBq10.js.map → TemplatesCollectionView-RBv7X4Gh.js.map} +1 -1
  97. package/dist/assets/{TemplatesInfoCarousel-XG1W0SLa.js → TemplatesInfoCarousel-e2wgfGBn.js} +2 -2
  98. package/dist/assets/{TemplatesInfoCarousel-XG1W0SLa.js.map → TemplatesInfoCarousel-e2wgfGBn.js.map} +1 -1
  99. package/dist/assets/{TemplatesSearchView-OYEX_uZ1.js → TemplatesSearchView-FkqpvNK2.js} +2 -2
  100. package/dist/assets/{TemplatesSearchView-OYEX_uZ1.js.map → TemplatesSearchView-FkqpvNK2.js.map} +1 -1
  101. package/dist/assets/{TemplatesView-RFX1Nriq.js → TemplatesView-bbDzQ95P.js} +2 -2
  102. package/dist/assets/{TemplatesView-RFX1Nriq.js.map → TemplatesView-bbDzQ95P.js.map} +1 -1
  103. package/dist/assets/{TemplatesWorkflowView-t6Xqg5xY.js → TemplatesWorkflowView-7-rFNLp9.js} +2 -2
  104. package/dist/assets/{TemplatesWorkflowView-t6Xqg5xY.js.map → TemplatesWorkflowView-7-rFNLp9.js.map} +1 -1
  105. package/dist/assets/{VariablesView-ZV3cuGWP.js → VariablesView-qHyda1UV.js} +2 -2
  106. package/dist/assets/{VariablesView-ZV3cuGWP.js.map → VariablesView-qHyda1UV.js.map} +1 -1
  107. package/dist/assets/{WorkerView-PvV1tbob.js → WorkerView-B0yhM0J1.js} +2 -2
  108. package/dist/assets/{WorkerView-PvV1tbob.js.map → WorkerView-B0yhM0J1.js.map} +1 -1
  109. package/dist/assets/{WorkflowActivator-TncK9t4c.js → WorkflowActivator-VjkeCh0z.js} +2 -2
  110. package/dist/assets/{WorkflowActivator-TncK9t4c.js.map → WorkflowActivator-VjkeCh0z.js.map} +1 -1
  111. package/dist/assets/{WorkflowExecutionsInfoAccordion-AnHjUFE3.js → WorkflowExecutionsInfoAccordion-3GkCvE9Q.js} +2 -2
  112. package/dist/assets/{WorkflowExecutionsInfoAccordion-AnHjUFE3.js.map → WorkflowExecutionsInfoAccordion-3GkCvE9Q.js.map} +1 -1
  113. package/dist/assets/{WorkflowExecutionsLandingPage-oxT4cL0I.js → WorkflowExecutionsLandingPage-O_YbgvYB.js} +2 -2
  114. package/dist/assets/{WorkflowExecutionsLandingPage-oxT4cL0I.js.map → WorkflowExecutionsLandingPage-O_YbgvYB.js.map} +1 -1
  115. package/dist/assets/{WorkflowExecutionsPreview-S4t3V3mn.js → WorkflowExecutionsPreview-6bNa2avB.js} +2 -2
  116. package/dist/assets/{WorkflowExecutionsPreview-S4t3V3mn.js.map → WorkflowExecutionsPreview-6bNa2avB.js.map} +1 -1
  117. package/dist/assets/{WorkflowExecutionsView-2SiI_dZv.js → WorkflowExecutionsView-e12KrPNp.js} +2 -2
  118. package/dist/assets/{WorkflowExecutionsView-2SiI_dZv.js.map → WorkflowExecutionsView-e12KrPNp.js.map} +1 -1
  119. package/dist/assets/{WorkflowHistory-tlNmMBC4.js → WorkflowHistory-XyI7xi5R.js} +2 -2
  120. package/dist/assets/{WorkflowHistory-tlNmMBC4.js.map → WorkflowHistory-XyI7xi5R.js.map} +1 -1
  121. package/dist/assets/{WorkflowOnboardingView-sQP7Ib3w.js → WorkflowOnboardingView-wfo0sagy.js} +2 -2
  122. package/dist/assets/{WorkflowOnboardingView-sQP7Ib3w.js.map → WorkflowOnboardingView-wfo0sagy.js.map} +1 -1
  123. package/dist/assets/{WorkflowsView-77fg2wMF.js → WorkflowsView-zWdxjaUV.js} +2 -2
  124. package/dist/assets/{WorkflowsView-77fg2wMF.js.map → WorkflowsView-zWdxjaUV.js.map} +1 -1
  125. package/dist/assets/{cloud-k5hx0-AG.js → cloud-FHxD5S8r.js} +2 -2
  126. package/dist/assets/{cloud-k5hx0-AG.js.map → cloud-FHxD5S8r.js.map} +1 -1
  127. package/dist/assets/{collaboration.store-nJkMa2Yk.js → collaboration.store-aa4nebcL.js} +2 -2
  128. package/dist/assets/{collaboration.store-nJkMa2Yk.js.map → collaboration.store-aa4nebcL.js.map} +1 -1
  129. package/dist/assets/{index-OLvpAx8p.js → index-6ulnOLCO.js} +4 -4
  130. package/dist/assets/{index-OLvpAx8p.js.map → index-6ulnOLCO.js.map} +1 -1
  131. package/dist/assets/{templateActions-4mG5U0Gi.js → templateActions-9fUm8Xpc.js} +2 -2
  132. package/dist/assets/{templateActions-4mG5U0Gi.js.map → templateActions-9fUm8Xpc.js.map} +1 -1
  133. package/dist/assets/{useExecutionDebugging-PDsNeD99.js → useExecutionDebugging-QUE85fFt.js} +2 -2
  134. package/dist/assets/{useExecutionDebugging-PDsNeD99.js.map → useExecutionDebugging-QUE85fFt.js.map} +1 -1
  135. package/dist/assets/{useExecutionHelpers-z0jWdDj0.js → useExecutionHelpers-5nDBsYfy.js} +2 -2
  136. package/dist/assets/{useExecutionHelpers-z0jWdDj0.js.map → useExecutionHelpers-5nDBsYfy.js.map} +1 -1
  137. package/dist/assets/{usePushConnection-5HhKaz1I.js → usePushConnection-FzHJLOiR.js} +2 -2
  138. package/dist/assets/{usePushConnection-5HhKaz1I.js.map → usePushConnection-FzHJLOiR.js.map} +1 -1
  139. package/dist/assets/{useWorkflowActivate--rX-aMfx.js → useWorkflowActivate-rx_C76SX.js} +2 -2
  140. package/dist/assets/{useWorkflowActivate--rX-aMfx.js.map → useWorkflowActivate-rx_C76SX.js.map} +1 -1
  141. package/dist/index.html +1 -1
  142. package/package.json +1 -1
  143. package/dist/assets/CollectionParameter-DTYD_Lcf.js.map +0 -1
  144. package/dist/assets/NodeView-vh3Qdfdh.js +0 -9
  145. package/dist/assets/NodeView-vh3Qdfdh.js.map +0 -1
  146. package/dist/assets/SignoutView-zep-aWVN.js +0 -2
  147. package/dist/assets/SignoutView-zep-aWVN.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectSettings-ZDAhIwhQ.js","sources":["../../src/features/projects/components/ProjectDeleteDialog.vue","../../src/features/projects/components/ProjectRoleUpgradeDialog.vue","../../src/features/projects/components/ProjectSettings.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, computed } from 'vue';\nimport type {\n\tProject,\n\tProjectListItem,\n\tProjectSharingData,\n} from '@/features/projects/projects.types';\nimport ProjectSharing from '@/features/projects/components/ProjectSharing.vue';\nimport { useI18n } from '@/composables/useI18n';\n\ntype Props = {\n\tcurrentProject: Project | null;\n\tprojects: ProjectListItem[];\n};\n\nconst props = defineProps<Props>();\nconst visible = defineModel<boolean>();\nconst emit = defineEmits<{\n\t(e: 'confirmDelete', value?: string): void;\n}>();\n\nconst locale = useI18n();\n\nconst selectedProject = ref<ProjectSharingData | null>(null);\nconst operation = ref<'transfer' | 'wipe' | null>(null);\nconst wipeConfirmText = ref('');\nconst isValid = computed(() => {\n\tif (operation.value === 'transfer') {\n\t\treturn !!selectedProject.value;\n\t}\n\tif (operation.value === 'wipe') {\n\t\treturn (\n\t\t\twipeConfirmText.value ===\n\t\t\tlocale.baseText('projects.settings.delete.question.wipe.placeholder')\n\t\t);\n\t}\n\treturn false;\n});\n\nconst onDelete = () => {\n\tif (!isValid.value) {\n\t\treturn;\n\t}\n\n\tif (operation.value === 'wipe') {\n\t\tselectedProject.value = null;\n\t}\n\n\temit('confirmDelete', selectedProject.value?.id);\n};\n</script>\n<template>\n\t<el-dialog\n\t\tv-model=\"visible\"\n\t\t:title=\"\n\t\t\tlocale.baseText('projects.settings.delete.title', {\n\t\t\t\tinterpolate: { projectName: props.currentProject?.name ?? '' },\n\t\t\t})\n\t\t\"\n\t\twidth=\"500\"\n\t>\n\t\t<n8n-text color=\"text-base\">{{ locale.baseText('projects.settings.delete.message') }}</n8n-text>\n\t\t<div class=\"pt-l\">\n\t\t\t<el-radio\n\t\t\t\t:model-value=\"operation\"\n\t\t\t\tlabel=\"transfer\"\n\t\t\t\tclass=\"mb-s\"\n\t\t\t\t@update:model-value=\"operation = 'transfer'\"\n\t\t\t>\n\t\t\t\t<n8n-text color=\"text-dark\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.delete.question.transfer.label')\n\t\t\t\t}}</n8n-text>\n\t\t\t</el-radio>\n\t\t\t<div v-if=\"operation === 'transfer'\" :class=\"$style.operation\">\n\t\t\t\t<n8n-text color=\"text-dark\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.delete.question.transfer.title')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<ProjectSharing\n\t\t\t\t\tv-model=\"selectedProject\"\n\t\t\t\t\tclass=\"pt-2xs\"\n\t\t\t\t\t:projects=\"props.projects\"\n\t\t\t\t\t:empty-options-text=\"locale.baseText('projects.sharing.noMatchingProjects')\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<el-radio\n\t\t\t\t:model-value=\"operation\"\n\t\t\t\tlabel=\"wipe\"\n\t\t\t\tclass=\"mb-s\"\n\t\t\t\t@update:model-value=\"operation = 'wipe'\"\n\t\t\t>\n\t\t\t\t<n8n-text color=\"text-dark\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.delete.question.wipe.label')\n\t\t\t\t}}</n8n-text>\n\t\t\t</el-radio>\n\t\t\t<div v-if=\"operation === 'wipe'\" :class=\"$style.operation\">\n\t\t\t\t<n8n-input-label :label=\"locale.baseText('projects.settings.delete.question.wipe.title')\">\n\t\t\t\t\t<n8n-input\n\t\t\t\t\t\tv-model=\"wipeConfirmText\"\n\t\t\t\t\t\t:placeholder=\"locale.baseText('projects.settings.delete.question.wipe.placeholder')\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-input-label>\n\t\t\t</div>\n\t\t</div>\n\t\t<template #footer>\n\t\t\t<N8nButton\n\t\t\t\ttype=\"danger\"\n\t\t\t\tnative-type=\"button\"\n\t\t\t\t:disabled=\"!isValid\"\n\t\t\t\tdata-test-id=\"project-settings-delete-confirm-button\"\n\t\t\t\t@click.stop.prevent=\"onDelete\"\n\t\t\t\t>{{ locale.baseText('projects.settings.danger.deleteProject') }}</N8nButton\n\t\t\t>\n\t\t</template>\n\t</el-dialog>\n</template>\n\n<style lang=\"scss\" module>\n.operation {\n\tpadding: 0 0 var(--spacing-l) var(--spacing-l);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from '@/composables/useI18n';\nimport { useUIStore } from '@/stores/ui.store';\n\ntype Props = {\n\tlimit: number;\n\tplanName?: string;\n};\n\nconst props = defineProps<Props>();\nconst visible = defineModel<boolean>();\nconst uiStore = useUIStore();\nconst locale = useI18n();\n\nconst goToUpgrade = async () => {\n\tawait uiStore.goToUpgrade('rbac', 'upgrade-rbac');\n\tvisible.value = false;\n};\n</script>\n<template>\n\t<el-dialog\n\t\tv-model=\"visible\"\n\t\t:title=\"locale.baseText('projects.settings.role.upgrade.title')\"\n\t\twidth=\"500\"\n\t>\n\t\t<div class=\"pt-l\">\n\t\t\t<i18n-t keypath=\"projects.settings.role.upgrade.message\">\n\t\t\t\t<template #planName>{{ props.planName }}</template>\n\t\t\t\t<template #limit>\n\t\t\t\t\t{{\n\t\t\t\t\t\tlocale.baseText('projects.create.limit', {\n\t\t\t\t\t\t\tadjustToNumber: props.limit,\n\t\t\t\t\t\t\tinterpolate: { num: String(props.limit) },\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t</template>\n\t\t\t</i18n-t>\n\t\t</div>\n\t\t<template #footer>\n\t\t\t<N8nButton type=\"secondary\" native-type=\"button\" @click=\"visible = false\">{{\n\t\t\t\tlocale.baseText('generic.cancel')\n\t\t\t}}</N8nButton>\n\t\t\t<N8nButton type=\"primary\" native-type=\"button\" @click=\"goToUpgrade\">{{\n\t\t\t\tlocale.baseText('projects.create.limitReached.link')\n\t\t\t}}</N8nButton>\n\t\t</template>\n\t</el-dialog>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch, onBeforeMount, nextTick } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { deepCopy } from 'n8n-workflow';\nimport { useUsersStore } from '@/stores/users.store';\nimport type { IUser } from '@/Interface';\nimport { useI18n } from '@/composables/useI18n';\nimport { useProjectsStore } from '@/features/projects/projects.store';\nimport ProjectTabs from '@/features/projects/components/ProjectTabs.vue';\nimport type { Project, ProjectRelation } from '@/features/projects/projects.types';\nimport { useToast } from '@/composables/useToast';\nimport { VIEWS } from '@/constants';\nimport ProjectDeleteDialog from '@/features/projects/components/ProjectDeleteDialog.vue';\nimport ProjectRoleUpgradeDialog from '@/features/projects/components/ProjectRoleUpgradeDialog.vue';\nimport { useRolesStore } from '@/stores/roles.store';\nimport type { ProjectRole } from '@/types/roles.types';\nimport { useCloudPlanStore } from '@/stores/cloudPlan.store';\nimport { useTelemetry } from '@/composables/useTelemetry';\n\ntype FormDataDiff = {\n\tname?: string;\n\trole?: ProjectRelation[];\n\tmemberAdded?: ProjectRelation[];\n\tmemberRemoved?: ProjectRelation[];\n};\n\nconst usersStore = useUsersStore();\nconst locale = useI18n();\nconst projectsStore = useProjectsStore();\nconst rolesStore = useRolesStore();\nconst cloudPlanStore = useCloudPlanStore();\nconst toast = useToast();\nconst router = useRouter();\nconst telemetry = useTelemetry();\nconst dialogVisible = ref(false);\nconst upgradeDialogVisible = ref(false);\n\nconst isDirty = ref(false);\nconst formData = ref<Pick<Project, 'name' | 'relations'>>({\n\tname: '',\n\trelations: [],\n});\nconst projectRoleTranslations = ref<{ [key: string]: string }>({\n\t'project:editor': locale.baseText('projects.settings.role.editor'),\n\t'project:admin': locale.baseText('projects.settings.role.admin'),\n});\nconst nameInput = ref<HTMLInputElement | null>(null);\n\nconst usersList = computed(() =>\n\tusersStore.allUsers.filter((user: IUser) => {\n\t\tconst isAlreadySharedWithUser = (formData.value.relations || []).find(\n\t\t\t(r: ProjectRelation) => r.id === user.id,\n\t\t);\n\n\t\treturn !isAlreadySharedWithUser;\n\t}),\n);\n\nconst projects = computed(() =>\n\tprojectsStore.teamProjects.filter((project) => project.id !== projectsStore.currentProjectId),\n);\nconst projectRoles = computed(() =>\n\trolesStore.processedProjectRoles.map((role) => ({\n\t\t...role,\n\t\tname: projectRoleTranslations.value[role.role],\n\t})),\n);\nconst firstLicensedRole = computed(() => projectRoles.value.find((role) => role.licensed)?.role);\n\nconst onAddMember = (userId: string) => {\n\tisDirty.value = true;\n\tconst user = usersStore.getUserById(userId);\n\tif (!user) return;\n\n\tconst { id, firstName, lastName, email } = user;\n\tconst relation = { id, firstName, lastName, email } as ProjectRelation;\n\n\tif (firstLicensedRole.value) {\n\t\trelation.role = firstLicensedRole.value;\n\t}\n\n\tformData.value.relations.push(relation);\n};\n\nconst onRoleAction = (user: Partial<IUser>, role: string) => {\n\tisDirty.value = true;\n\tconst index = formData.value.relations.findIndex((r: ProjectRelation) => r.id === user.id);\n\tif (role === 'remove') {\n\t\tformData.value.relations.splice(index, 1);\n\t} else {\n\t\tformData.value.relations[index].role = role as ProjectRole;\n\t}\n};\n\nconst onNameInput = () => {\n\tisDirty.value = true;\n};\n\nconst onCancel = () => {\n\tformData.value.relations = projectsStore.currentProject?.relations\n\t\t? deepCopy(projectsStore.currentProject.relations)\n\t\t: [];\n\tformData.value.name = projectsStore.currentProject?.name ?? '';\n\tisDirty.value = false;\n};\n\nconst makeFormDataDiff = (): FormDataDiff => {\n\tconst diff: FormDataDiff = {};\n\tif (!projectsStore.currentProject) {\n\t\treturn diff;\n\t}\n\n\tif (formData.value.name !== projectsStore.currentProject.name) {\n\t\tdiff.name = formData.value.name ?? '';\n\t}\n\n\tif (formData.value.relations.length !== projectsStore.currentProject.relations.length) {\n\t\tdiff.memberAdded = formData.value.relations.filter(\n\t\t\t(r: ProjectRelation) => !projectsStore.currentProject?.relations.find((cr) => cr.id === r.id),\n\t\t);\n\t\tdiff.memberRemoved = projectsStore.currentProject.relations.filter(\n\t\t\t(cr: ProjectRelation) => !formData.value.relations.find((r) => r.id === cr.id),\n\t\t);\n\t}\n\n\tdiff.role = formData.value.relations.filter((r: ProjectRelation) => {\n\t\tconst currentRelation = projectsStore.currentProject?.relations.find((cr) => cr.id === r.id);\n\t\treturn currentRelation?.role !== r.role && !diff.memberAdded?.find((ar) => ar.id === r.id);\n\t});\n\n\treturn diff;\n};\n\nconst sendTelemetry = (diff: FormDataDiff) => {\n\tif (diff.name) {\n\t\ttelemetry.track('User changed project name', {\n\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\tname: diff.name,\n\t\t});\n\t}\n\n\tif (diff.memberAdded) {\n\t\tdiff.memberAdded.forEach((r) => {\n\t\t\ttelemetry.track('User added member to project', {\n\t\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\t\ttarget_user_id: r.id,\n\t\t\t\trole: r.role,\n\t\t\t});\n\t\t});\n\t}\n\n\tif (diff.memberRemoved) {\n\t\tdiff.memberRemoved.forEach((r) => {\n\t\t\ttelemetry.track('User removed member from project', {\n\t\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\t\ttarget_user_id: r.id,\n\t\t\t});\n\t\t});\n\t}\n\n\tif (diff.role) {\n\t\tdiff.role.forEach((r) => {\n\t\t\ttelemetry.track('User changed member role on project', {\n\t\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\t\ttarget_user_id: r.id,\n\t\t\t\trole: r.role,\n\t\t\t});\n\t\t});\n\t}\n};\n\nconst onSubmit = async () => {\n\ttry {\n\t\tif (isDirty.value && projectsStore.currentProject) {\n\t\t\tconst diff = makeFormDataDiff();\n\n\t\t\tawait projectsStore.updateProject({\n\t\t\t\tid: projectsStore.currentProject.id,\n\t\t\t\tname: formData.value.name,\n\t\t\t\trelations: formData.value.relations.map((r: ProjectRelation) => ({\n\t\t\t\t\tuserId: r.id,\n\t\t\t\t\trole: r.role,\n\t\t\t\t})),\n\t\t\t});\n\t\t\tsendTelemetry(diff);\n\t\t\tisDirty.value = false;\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: locale.baseText('projects.settings.save.successful.title', {\n\t\t\t\t\tinterpolate: { projectName: formData.value.name ?? '' },\n\t\t\t\t}),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('projects.settings.save.error.title'));\n\t}\n};\n\nconst onDelete = async () => {\n\tawait projectsStore.getAllProjects();\n\tdialogVisible.value = true;\n};\n\nconst onConfirmDelete = async (transferId?: string) => {\n\ttry {\n\t\tif (projectsStore.currentProject) {\n\t\t\tconst projectName = projectsStore.currentProject?.name ?? '';\n\t\t\tawait projectsStore.deleteProject(projectsStore.currentProject.id, transferId);\n\t\t\tawait router.push({ name: VIEWS.HOMEPAGE });\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: locale.baseText('projects.settings.delete.successful.title', {\n\t\t\t\t\tinterpolate: { projectName },\n\t\t\t\t}),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t\tdialogVisible.value = true;\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('projects.settings.delete.error.title'));\n\t}\n};\n\nconst selectProjectNameIfMatchesDefault = () => {\n\tif (\n\t\tnameInput.value &&\n\t\tformData.value.name === locale.baseText('projects.settings.newProjectName')\n\t) {\n\t\tnameInput.value.focus();\n\t\tnameInput.value.select();\n\t}\n};\n\nwatch(\n\t() => projectsStore.currentProject,\n\tasync () => {\n\t\tformData.value.name = projectsStore.currentProject?.name ?? '';\n\t\tformData.value.relations = projectsStore.currentProject?.relations\n\t\t\t? deepCopy(projectsStore.currentProject.relations)\n\t\t\t: [];\n\t\tawait nextTick();\n\t\tselectProjectNameIfMatchesDefault();\n\t},\n\t{ immediate: true },\n);\n\nonBeforeMount(async () => {\n\tawait usersStore.fetchUsers();\n});\n</script>\n\n<template>\n\t<div :class=\"$style.projectSettings\">\n\t\t<div :class=\"$style.header\">\n\t\t\t<ProjectTabs />\n\t\t</div>\n\t\t<form @submit.prevent=\"onSubmit\">\n\t\t\t<fieldset>\n\t\t\t\t<label for=\"name\">{{ locale.baseText('projects.settings.name') }}</label>\n\t\t\t\t<N8nInput\n\t\t\t\t\tid=\"name\"\n\t\t\t\t\tref=\"nameInput\"\n\t\t\t\t\tv-model=\"formData.name\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tname=\"name\"\n\t\t\t\t\t@input=\"onNameInput\"\n\t\t\t\t/>\n\t\t\t</fieldset>\n\t\t\t<fieldset>\n\t\t\t\t<label for=\"projectMembers\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.projectMembers')\n\t\t\t\t}}</label>\n\t\t\t\t<N8nUserSelect\n\t\t\t\t\tid=\"projectMembers\"\n\t\t\t\t\tclass=\"mb-s\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t:users=\"usersList\"\n\t\t\t\t\t:current-user-id=\"usersStore.currentUser?.id\"\n\t\t\t\t\t:placeholder=\"$locale.baseText('workflows.shareModal.select.placeholder')\"\n\t\t\t\t\tdata-test-id=\"project-members-select\"\n\t\t\t\t\t@update:model-value=\"onAddMember\"\n\t\t\t\t>\n\t\t\t\t\t<template #prefix>\n\t\t\t\t\t\t<N8nIcon icon=\"search\" />\n\t\t\t\t\t</template>\n\t\t\t\t</N8nUserSelect>\n\t\t\t\t<N8nUsersList\n\t\t\t\t\t:actions=\"[]\"\n\t\t\t\t\t:users=\"formData.relations\"\n\t\t\t\t\t:current-user-id=\"usersStore.currentUser?.id\"\n\t\t\t\t\t:delete-label=\"$locale.baseText('workflows.shareModal.list.delete')\"\n\t\t\t\t>\n\t\t\t\t\t<template #actions=\"{ user }\">\n\t\t\t\t\t\t<div :class=\"$style.buttons\">\n\t\t\t\t\t\t\t<N8nSelect\n\t\t\t\t\t\t\t\tclass=\"mr-2xs\"\n\t\t\t\t\t\t\t\t:model-value=\"user?.role || projectRoles[0].role\"\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t@update:model-value=\"onRoleAction(user, $event)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<N8nOption\n\t\t\t\t\t\t\t\t\tv-for=\"role in projectRoles\"\n\t\t\t\t\t\t\t\t\t:key=\"role.role\"\n\t\t\t\t\t\t\t\t\t:value=\"role.role\"\n\t\t\t\t\t\t\t\t\t:label=\"role.name\"\n\t\t\t\t\t\t\t\t\t:disabled=\"!role.licensed\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ role.name\n\t\t\t\t\t\t\t\t\t}}<span\n\t\t\t\t\t\t\t\t\t\tv-if=\"!role.licensed\"\n\t\t\t\t\t\t\t\t\t\t:class=\"$style.upgrade\"\n\t\t\t\t\t\t\t\t\t\t@click=\"upgradeDialogVisible = true\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t&nbsp;-&nbsp;{{ locale.baseText('generic.upgrade') }}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</N8nOption>\n\t\t\t\t\t\t\t</N8nSelect>\n\t\t\t\t\t\t\t<N8nButton\n\t\t\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t\t\tnative-type=\"button\"\n\t\t\t\t\t\t\t\tsquare\n\t\t\t\t\t\t\t\ticon=\"trash\"\n\t\t\t\t\t\t\t\tdata-test-id=\"project-user-remove\"\n\t\t\t\t\t\t\t\t@click=\"onRoleAction(user, 'remove')\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t</N8nUsersList>\n\t\t\t</fieldset>\n\t\t\t<fieldset :class=\"$style.buttons\">\n\t\t\t\t<div>\n\t\t\t\t\t<small v-if=\"isDirty\" class=\"mr-2xs\">{{\n\t\t\t\t\t\tlocale.baseText('projects.settings.message.unsavedChanges')\n\t\t\t\t\t}}</small>\n\t\t\t\t\t<N8nButton\n\t\t\t\t\t\t:disabled=\"!isDirty\"\n\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\tnative-type=\"button\"\n\t\t\t\t\t\tclass=\"mr-2xs\"\n\t\t\t\t\t\tdata-test-id=\"project-settings-cancel-button\"\n\t\t\t\t\t\t@click.stop.prevent=\"onCancel\"\n\t\t\t\t\t\t>{{ locale.baseText('projects.settings.button.cancel') }}</N8nButton\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t\t<N8nButton\n\t\t\t\t\t:disabled=\"!isDirty\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\tdata-test-id=\"project-settings-save-button\"\n\t\t\t\t\t>{{ locale.baseText('projects.settings.button.save') }}</N8nButton\n\t\t\t\t>\n\t\t\t</fieldset>\n\t\t\t<fieldset>\n\t\t\t\t<hr class=\"mb-2xl\" />\n\t\t\t\t<h3 class=\"mb-xs\">{{ locale.baseText('projects.settings.danger.title') }}</h3>\n\t\t\t\t<small>{{ locale.baseText('projects.settings.danger.message') }}</small>\n\t\t\t\t<br />\n\t\t\t\t<N8nButton\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tnative-type=\"button\"\n\t\t\t\t\tclass=\"mt-s\"\n\t\t\t\t\tdata-test-id=\"project-settings-delete-button\"\n\t\t\t\t\t@click.stop.prevent=\"onDelete\"\n\t\t\t\t\t>{{ locale.baseText('projects.settings.danger.deleteProject') }}</N8nButton\n\t\t\t\t>\n\t\t\t</fieldset>\n\t\t</form>\n\t\t<ProjectDeleteDialog\n\t\t\tv-model=\"dialogVisible\"\n\t\t\t:current-project=\"projectsStore.currentProject\"\n\t\t\t:projects=\"projects\"\n\t\t\t@confirm-delete=\"onConfirmDelete\"\n\t\t/>\n\t\t<ProjectRoleUpgradeDialog\n\t\t\tv-model=\"upgradeDialogVisible\"\n\t\t\t:limit=\"projectsStore.teamProjectsLimit\"\n\t\t\t:plan-name=\"cloudPlanStore.currentPlanData?.displayName\"\n\t\t/>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.projectSettings {\n\tdisplay: grid;\n\twidth: 100%;\n\tjustify-items: center;\n\tgrid-auto-rows: max-content;\n\n\tform {\n\t\twidth: 100%;\n\t\tmax-width: 1280px;\n\t\tpadding: 0 var(--spacing-2xl);\n\n\t\tfieldset {\n\t\t\tpadding-bottom: var(--spacing-2xl);\n\n\t\t\tlabel {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin-bottom: var(--spacing-xs);\n\t\t\t\tfont-size: var(--font-size-xl);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.header {\n\twidth: 100%;\n\tmax-width: 1280px;\n\tpadding: var(--spacing-l) var(--spacing-2xl) 0;\n}\n\n.upgrade {\n\tcursor: pointer;\n}\n\n.buttons {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\talign-items: center;\n}\n</style>\n"],"names":["props","__props","visible","_useModel","emit","__emit","locale","useI18n","selectedProject","ref","operation","wipeConfirmText","isValid","computed","onDelete","_a","uiStore","useUIStore","goToUpgrade","usersStore","useUsersStore","projectsStore","useProjectsStore","rolesStore","useRolesStore","cloudPlanStore","useCloudPlanStore","toast","useToast","router","useRouter","telemetry","useTelemetry","dialogVisible","upgradeDialogVisible","isDirty","formData","projectRoleTranslations","nameInput","usersList","user","r","projects","project","projectRoles","role","firstLicensedRole","onAddMember","userId","id","firstName","lastName","email","relation","onRoleAction","index","onNameInput","onCancel","deepCopy","_b","makeFormDataDiff","diff","cr","currentRelation","ar","sendTelemetry","onSubmit","error","onConfirmDelete","transferId","projectName","VIEWS","selectProjectNameIfMatchesDefault","watch","nextTick","onBeforeMount"],"mappings":"kiDAeA,MAAMA,EAAQC,EACRC,EAAUC,EAAqBF,EAAA,YAAA,EAC/BG,EAAOC,EAIPC,EAASC,IAETC,EAAkBC,EAA+B,IAAI,EACrDC,EAAYD,EAAgC,IAAI,EAChDE,EAAkBF,EAAI,EAAE,EACxBG,EAAUC,EAAS,IACpBH,EAAU,QAAU,WAChB,CAAC,CAACF,EAAgB,MAEtBE,EAAU,QAAU,OAEtBC,EAAgB,QAChBL,EAAO,SAAS,oDAAoD,EAG/D,EACP,EAEKQ,EAAW,IAAM,OACjBF,EAAQ,QAITF,EAAU,QAAU,SACvBF,EAAgB,MAAQ,MAGpBJ,EAAA,iBAAiBW,EAAAP,EAAgB,QAAhB,YAAAO,EAAuB,EAAE,EAAA,k4ECvChD,MAAMf,EAAQC,EACRC,EAAUC,EAAqBF,EAAA,YAAA,EAC/Be,EAAUC,KACVX,EAASC,IAETW,EAAc,SAAY,CACzB,MAAAF,EAAQ,YAAY,OAAQ,cAAc,EAChDd,EAAQ,MAAQ,EAAA,s+BCUjB,MAAMiB,EAAaC,KACbd,EAASC,IACTc,EAAgBC,KAChBC,EAAaC,KACbC,EAAiBC,KACjBC,EAAQC,KACRC,EAASC,KACTC,EAAYC,KACZC,EAAgBxB,EAAI,EAAK,EACzByB,EAAuBzB,EAAI,EAAK,EAEhC0B,EAAU1B,EAAI,EAAK,EACnB2B,EAAW3B,EAAyC,CACzD,KAAM,GACN,UAAW,CAAC,CAAA,CACZ,EACK4B,EAA0B5B,EAA+B,CAC9D,iBAAkBH,EAAO,SAAS,+BAA+B,EACjE,gBAAiBA,EAAO,SAAS,8BAA8B,CAAA,CAC/D,EACKgC,EAAY7B,EAA6B,IAAI,EAE7C8B,EAAY1B,EAAS,IAC1BM,EAAW,SAAS,OAAQqB,GAKpB,EAJ0BJ,EAAS,MAAM,WAAa,CAAI,GAAA,KAC/DK,GAAuBA,EAAE,KAAOD,EAAK,EAAA,CAIvC,CAAA,EAGIE,EAAW7B,EAAS,IACzBQ,EAAc,aAAa,OAAQsB,GAAYA,EAAQ,KAAOtB,EAAc,gBAAgB,CAAA,EAEvFuB,EAAe/B,EAAS,IAC7BU,EAAW,sBAAsB,IAAKsB,IAAU,CAC/C,GAAGA,EACH,KAAMR,EAAwB,MAAMQ,EAAK,IAAI,CAAA,EAC5C,CAAA,EAEGC,EAAoBjC,EAAS,IAAM,OAAA,OAAAE,EAAA6B,EAAa,MAAM,KAAMC,GAASA,EAAK,QAAQ,IAA/C,YAAA9B,EAAkD,KAAI,EAEzFgC,EAAeC,GAAmB,CACvCb,EAAQ,MAAQ,GACV,MAAAK,EAAOrB,EAAW,YAAY6B,CAAM,EAC1C,GAAI,CAACR,EAAM,OAEX,KAAM,CAAE,GAAAS,EAAI,UAAAC,EAAW,SAAAC,EAAU,MAAAC,GAAUZ,EACrCa,EAAW,CAAE,GAAAJ,EAAI,UAAAC,EAAW,SAAAC,EAAU,MAAAC,CAAM,EAE9CN,EAAkB,QACrBO,EAAS,KAAOP,EAAkB,OAG1BV,EAAA,MAAM,UAAU,KAAKiB,CAAQ,CAAA,EAGjCC,EAAe,CAACd,EAAsBK,IAAiB,CAC5DV,EAAQ,MAAQ,GACV,MAAAoB,EAAQnB,EAAS,MAAM,UAAU,UAAWK,GAAuBA,EAAE,KAAOD,EAAK,EAAE,EACrFK,IAAS,SACZT,EAAS,MAAM,UAAU,OAAOmB,EAAO,CAAC,EAExCnB,EAAS,MAAM,UAAUmB,CAAK,EAAE,KAAOV,CACxC,EAGKW,GAAc,IAAM,CACzBrB,EAAQ,MAAQ,EAAA,EAGXsB,GAAW,IAAM,SACbrB,EAAA,MAAM,WAAYrB,EAAAM,EAAc,iBAAd,MAAAN,EAA8B,UACtD2C,EAASrC,EAAc,eAAe,SAAS,EAC/C,CAAA,EACHe,EAAS,MAAM,OAAOuB,EAAAtC,EAAc,iBAAd,YAAAsC,EAA8B,OAAQ,GAC5DxB,EAAQ,MAAQ,EAAA,EAGXyB,GAAmB,IAAoB,CAC5C,MAAMC,EAAqB,CAAA,EACvB,OAACxC,EAAc,iBAIfe,EAAS,MAAM,OAASf,EAAc,eAAe,OACnDwC,EAAA,KAAOzB,EAAS,MAAM,MAAQ,IAGhCA,EAAS,MAAM,UAAU,SAAWf,EAAc,eAAe,UAAU,SACzEwC,EAAA,YAAczB,EAAS,MAAM,UAAU,OAC1CK,GAAuB,OAAA,SAAC1B,EAAAM,EAAc,iBAAd,MAAAN,EAA8B,UAAU,KAAM+C,GAAOA,EAAG,KAAOrB,EAAE,KAAE,EAExFoB,EAAA,cAAgBxC,EAAc,eAAe,UAAU,OAC1DyC,GAAwB,CAAC1B,EAAS,MAAM,UAAU,KAAMK,GAAMA,EAAE,KAAOqB,EAAG,EAAE,CAAA,GAI/ED,EAAK,KAAOzB,EAAS,MAAM,UAAU,OAAQK,GAAuB,SAC7D,MAAAsB,GAAkBhD,EAAAM,EAAc,iBAAd,YAAAN,EAA8B,UAAU,KAAM+C,GAAOA,EAAG,KAAOrB,EAAE,IACzF,OAAOsB,GAAA,YAAAA,EAAiB,QAAStB,EAAE,MAAQ,GAACkB,EAAAE,EAAK,cAAL,MAAAF,EAAkB,KAAMK,GAAOA,EAAG,KAAOvB,EAAE,IAAE,CACzF,GAEMoB,CAAA,EAGFI,GAAiBJ,GAAuB,OACzCA,EAAK,MACR9B,EAAU,MAAM,4BAA6B,CAC5C,YAAYhB,EAAAM,EAAc,iBAAd,YAAAN,EAA8B,GAC1C,KAAM8C,EAAK,IAAA,CACX,EAGEA,EAAK,aACHA,EAAA,YAAY,QAASpB,GAAM,OAC/BV,EAAU,MAAM,+BAAgC,CAC/C,YAAYhB,EAAAM,EAAc,iBAAd,YAAAN,EAA8B,GAC1C,eAAgB0B,EAAE,GAClB,KAAMA,EAAE,IAAA,CACR,CAAA,CACD,EAGEoB,EAAK,eACHA,EAAA,cAAc,QAASpB,GAAM,OACjCV,EAAU,MAAM,mCAAoC,CACnD,YAAYhB,EAAAM,EAAc,iBAAd,YAAAN,EAA8B,GAC1C,eAAgB0B,EAAE,EAAA,CAClB,CAAA,CACD,EAGEoB,EAAK,MACHA,EAAA,KAAK,QAASpB,GAAM,OACxBV,EAAU,MAAM,sCAAuC,CACtD,YAAYhB,EAAAM,EAAc,iBAAd,YAAAN,EAA8B,GAC1C,eAAgB0B,EAAE,GAClB,KAAMA,EAAE,IAAA,CACR,CAAA,CACD,CACF,EAGKyB,GAAW,SAAY,CACxB,GAAA,CACC,GAAA/B,EAAQ,OAASd,EAAc,eAAgB,CAClD,MAAMwC,EAAOD,KAEb,MAAMvC,EAAc,cAAc,CACjC,GAAIA,EAAc,eAAe,GACjC,KAAMe,EAAS,MAAM,KACrB,UAAWA,EAAS,MAAM,UAAU,IAAKK,IAAwB,CAChE,OAAQA,EAAE,GACV,KAAMA,EAAE,IAAA,EACP,CAAA,CACF,EACDwB,GAAcJ,CAAI,EAClB1B,EAAQ,MAAQ,GAChBR,EAAM,YAAY,CACjB,MAAOrB,EAAO,SAAS,0CAA2C,CACjE,YAAa,CAAE,YAAa8B,EAAS,MAAM,MAAQ,EAAG,CAAA,CACtD,EACD,KAAM,SAAA,CACN,CACF,QACQ+B,EAAO,CACfxC,EAAM,UAAUwC,EAAO7D,EAAO,SAAS,oCAAoC,CAAC,CAC7E,CAAA,EAGKQ,GAAW,SAAY,CAC5B,MAAMO,EAAc,iBACpBY,EAAc,MAAQ,EAAA,EAGjBmC,GAAkB,MAAOC,GAAwB,OAClD,GAAA,CACH,GAAIhD,EAAc,eAAgB,CAC3B,MAAAiD,IAAcvD,EAAAM,EAAc,iBAAd,YAAAN,EAA8B,OAAQ,GAC1D,MAAMM,EAAc,cAAcA,EAAc,eAAe,GAAIgD,CAAU,EAC7E,MAAMxC,EAAO,KAAK,CAAE,KAAM0C,GAAM,SAAU,EAC1C5C,EAAM,YAAY,CACjB,MAAOrB,EAAO,SAAS,4CAA6C,CACnE,YAAa,CAAE,YAAAgE,CAAY,CAAA,CAC3B,EACD,KAAM,SAAA,CACN,EACDrC,EAAc,MAAQ,EACvB,QACQkC,EAAO,CACfxC,EAAM,UAAUwC,EAAO7D,EAAO,SAAS,sCAAsC,CAAC,CAC/E,CAAA,EAGKkE,GAAoC,IAAM,CAE9ClC,EAAU,OACVF,EAAS,MAAM,OAAS9B,EAAO,SAAS,kCAAkC,IAE1EgC,EAAU,MAAM,QAChBA,EAAU,MAAM,SACjB,EAGD,OAAAmC,GACC,IAAMpD,EAAc,eACpB,SAAY,SACXe,EAAS,MAAM,OAAOrB,EAAAM,EAAc,iBAAd,YAAAN,EAA8B,OAAQ,GACnDqB,EAAA,MAAM,WAAYuB,EAAAtC,EAAc,iBAAd,MAAAsC,EAA8B,UACtDD,EAASrC,EAAc,eAAe,SAAS,EAC/C,CAAA,EACH,MAAMqD,GAAS,EACmBF,IACnC,EACA,CAAE,UAAW,EAAK,CAAA,EAGnBG,GAAc,SAAY,CACzB,MAAMxD,EAAW,YAAW,CAC5B"}
1
+ {"version":3,"file":"ProjectSettings-B-H5G2EN.js","sources":["../../src/features/projects/components/ProjectDeleteDialog.vue","../../src/features/projects/components/ProjectRoleUpgradeDialog.vue","../../src/features/projects/components/ProjectSettings.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, computed } from 'vue';\nimport type {\n\tProject,\n\tProjectListItem,\n\tProjectSharingData,\n} from '@/features/projects/projects.types';\nimport ProjectSharing from '@/features/projects/components/ProjectSharing.vue';\nimport { useI18n } from '@/composables/useI18n';\n\ntype Props = {\n\tcurrentProject: Project | null;\n\tprojects: ProjectListItem[];\n};\n\nconst props = defineProps<Props>();\nconst visible = defineModel<boolean>();\nconst emit = defineEmits<{\n\t(e: 'confirmDelete', value?: string): void;\n}>();\n\nconst locale = useI18n();\n\nconst selectedProject = ref<ProjectSharingData | null>(null);\nconst operation = ref<'transfer' | 'wipe' | null>(null);\nconst wipeConfirmText = ref('');\nconst isValid = computed(() => {\n\tif (operation.value === 'transfer') {\n\t\treturn !!selectedProject.value;\n\t}\n\tif (operation.value === 'wipe') {\n\t\treturn (\n\t\t\twipeConfirmText.value ===\n\t\t\tlocale.baseText('projects.settings.delete.question.wipe.placeholder')\n\t\t);\n\t}\n\treturn false;\n});\n\nconst onDelete = () => {\n\tif (!isValid.value) {\n\t\treturn;\n\t}\n\n\tif (operation.value === 'wipe') {\n\t\tselectedProject.value = null;\n\t}\n\n\temit('confirmDelete', selectedProject.value?.id);\n};\n</script>\n<template>\n\t<el-dialog\n\t\tv-model=\"visible\"\n\t\t:title=\"\n\t\t\tlocale.baseText('projects.settings.delete.title', {\n\t\t\t\tinterpolate: { projectName: props.currentProject?.name ?? '' },\n\t\t\t})\n\t\t\"\n\t\twidth=\"500\"\n\t>\n\t\t<n8n-text color=\"text-base\">{{ locale.baseText('projects.settings.delete.message') }}</n8n-text>\n\t\t<div class=\"pt-l\">\n\t\t\t<el-radio\n\t\t\t\t:model-value=\"operation\"\n\t\t\t\tlabel=\"transfer\"\n\t\t\t\tclass=\"mb-s\"\n\t\t\t\t@update:model-value=\"operation = 'transfer'\"\n\t\t\t>\n\t\t\t\t<n8n-text color=\"text-dark\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.delete.question.transfer.label')\n\t\t\t\t}}</n8n-text>\n\t\t\t</el-radio>\n\t\t\t<div v-if=\"operation === 'transfer'\" :class=\"$style.operation\">\n\t\t\t\t<n8n-text color=\"text-dark\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.delete.question.transfer.title')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<ProjectSharing\n\t\t\t\t\tv-model=\"selectedProject\"\n\t\t\t\t\tclass=\"pt-2xs\"\n\t\t\t\t\t:projects=\"props.projects\"\n\t\t\t\t\t:empty-options-text=\"locale.baseText('projects.sharing.noMatchingProjects')\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<el-radio\n\t\t\t\t:model-value=\"operation\"\n\t\t\t\tlabel=\"wipe\"\n\t\t\t\tclass=\"mb-s\"\n\t\t\t\t@update:model-value=\"operation = 'wipe'\"\n\t\t\t>\n\t\t\t\t<n8n-text color=\"text-dark\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.delete.question.wipe.label')\n\t\t\t\t}}</n8n-text>\n\t\t\t</el-radio>\n\t\t\t<div v-if=\"operation === 'wipe'\" :class=\"$style.operation\">\n\t\t\t\t<n8n-input-label :label=\"locale.baseText('projects.settings.delete.question.wipe.title')\">\n\t\t\t\t\t<n8n-input\n\t\t\t\t\t\tv-model=\"wipeConfirmText\"\n\t\t\t\t\t\t:placeholder=\"locale.baseText('projects.settings.delete.question.wipe.placeholder')\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-input-label>\n\t\t\t</div>\n\t\t</div>\n\t\t<template #footer>\n\t\t\t<N8nButton\n\t\t\t\ttype=\"danger\"\n\t\t\t\tnative-type=\"button\"\n\t\t\t\t:disabled=\"!isValid\"\n\t\t\t\tdata-test-id=\"project-settings-delete-confirm-button\"\n\t\t\t\t@click.stop.prevent=\"onDelete\"\n\t\t\t\t>{{ locale.baseText('projects.settings.danger.deleteProject') }}</N8nButton\n\t\t\t>\n\t\t</template>\n\t</el-dialog>\n</template>\n\n<style lang=\"scss\" module>\n.operation {\n\tpadding: 0 0 var(--spacing-l) var(--spacing-l);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from '@/composables/useI18n';\nimport { useUIStore } from '@/stores/ui.store';\n\ntype Props = {\n\tlimit: number;\n\tplanName?: string;\n};\n\nconst props = defineProps<Props>();\nconst visible = defineModel<boolean>();\nconst uiStore = useUIStore();\nconst locale = useI18n();\n\nconst goToUpgrade = async () => {\n\tawait uiStore.goToUpgrade('rbac', 'upgrade-rbac');\n\tvisible.value = false;\n};\n</script>\n<template>\n\t<el-dialog\n\t\tv-model=\"visible\"\n\t\t:title=\"locale.baseText('projects.settings.role.upgrade.title')\"\n\t\twidth=\"500\"\n\t>\n\t\t<div class=\"pt-l\">\n\t\t\t<i18n-t keypath=\"projects.settings.role.upgrade.message\">\n\t\t\t\t<template #planName>{{ props.planName }}</template>\n\t\t\t\t<template #limit>\n\t\t\t\t\t{{\n\t\t\t\t\t\tlocale.baseText('projects.create.limit', {\n\t\t\t\t\t\t\tadjustToNumber: props.limit,\n\t\t\t\t\t\t\tinterpolate: { num: String(props.limit) },\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t</template>\n\t\t\t</i18n-t>\n\t\t</div>\n\t\t<template #footer>\n\t\t\t<N8nButton type=\"secondary\" native-type=\"button\" @click=\"visible = false\">{{\n\t\t\t\tlocale.baseText('generic.cancel')\n\t\t\t}}</N8nButton>\n\t\t\t<N8nButton type=\"primary\" native-type=\"button\" @click=\"goToUpgrade\">{{\n\t\t\t\tlocale.baseText('projects.create.limitReached.link')\n\t\t\t}}</N8nButton>\n\t\t</template>\n\t</el-dialog>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch, onBeforeMount, nextTick } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { deepCopy } from 'n8n-workflow';\nimport { useUsersStore } from '@/stores/users.store';\nimport type { IUser } from '@/Interface';\nimport { useI18n } from '@/composables/useI18n';\nimport { useProjectsStore } from '@/features/projects/projects.store';\nimport ProjectTabs from '@/features/projects/components/ProjectTabs.vue';\nimport type { Project, ProjectRelation } from '@/features/projects/projects.types';\nimport { useToast } from '@/composables/useToast';\nimport { VIEWS } from '@/constants';\nimport ProjectDeleteDialog from '@/features/projects/components/ProjectDeleteDialog.vue';\nimport ProjectRoleUpgradeDialog from '@/features/projects/components/ProjectRoleUpgradeDialog.vue';\nimport { useRolesStore } from '@/stores/roles.store';\nimport type { ProjectRole } from '@/types/roles.types';\nimport { useCloudPlanStore } from '@/stores/cloudPlan.store';\nimport { useTelemetry } from '@/composables/useTelemetry';\n\ntype FormDataDiff = {\n\tname?: string;\n\trole?: ProjectRelation[];\n\tmemberAdded?: ProjectRelation[];\n\tmemberRemoved?: ProjectRelation[];\n};\n\nconst usersStore = useUsersStore();\nconst locale = useI18n();\nconst projectsStore = useProjectsStore();\nconst rolesStore = useRolesStore();\nconst cloudPlanStore = useCloudPlanStore();\nconst toast = useToast();\nconst router = useRouter();\nconst telemetry = useTelemetry();\nconst dialogVisible = ref(false);\nconst upgradeDialogVisible = ref(false);\n\nconst isDirty = ref(false);\nconst formData = ref<Pick<Project, 'name' | 'relations'>>({\n\tname: '',\n\trelations: [],\n});\nconst projectRoleTranslations = ref<{ [key: string]: string }>({\n\t'project:editor': locale.baseText('projects.settings.role.editor'),\n\t'project:admin': locale.baseText('projects.settings.role.admin'),\n});\nconst nameInput = ref<HTMLInputElement | null>(null);\n\nconst usersList = computed(() =>\n\tusersStore.allUsers.filter((user: IUser) => {\n\t\tconst isAlreadySharedWithUser = (formData.value.relations || []).find(\n\t\t\t(r: ProjectRelation) => r.id === user.id,\n\t\t);\n\n\t\treturn !isAlreadySharedWithUser;\n\t}),\n);\n\nconst projects = computed(() =>\n\tprojectsStore.teamProjects.filter((project) => project.id !== projectsStore.currentProjectId),\n);\nconst projectRoles = computed(() =>\n\trolesStore.processedProjectRoles.map((role) => ({\n\t\t...role,\n\t\tname: projectRoleTranslations.value[role.role],\n\t})),\n);\nconst firstLicensedRole = computed(() => projectRoles.value.find((role) => role.licensed)?.role);\n\nconst onAddMember = (userId: string) => {\n\tisDirty.value = true;\n\tconst user = usersStore.getUserById(userId);\n\tif (!user) return;\n\n\tconst { id, firstName, lastName, email } = user;\n\tconst relation = { id, firstName, lastName, email } as ProjectRelation;\n\n\tif (firstLicensedRole.value) {\n\t\trelation.role = firstLicensedRole.value;\n\t}\n\n\tformData.value.relations.push(relation);\n};\n\nconst onRoleAction = (user: Partial<IUser>, role: string) => {\n\tisDirty.value = true;\n\tconst index = formData.value.relations.findIndex((r: ProjectRelation) => r.id === user.id);\n\tif (role === 'remove') {\n\t\tformData.value.relations.splice(index, 1);\n\t} else {\n\t\tformData.value.relations[index].role = role as ProjectRole;\n\t}\n};\n\nconst onNameInput = () => {\n\tisDirty.value = true;\n};\n\nconst onCancel = () => {\n\tformData.value.relations = projectsStore.currentProject?.relations\n\t\t? deepCopy(projectsStore.currentProject.relations)\n\t\t: [];\n\tformData.value.name = projectsStore.currentProject?.name ?? '';\n\tisDirty.value = false;\n};\n\nconst makeFormDataDiff = (): FormDataDiff => {\n\tconst diff: FormDataDiff = {};\n\tif (!projectsStore.currentProject) {\n\t\treturn diff;\n\t}\n\n\tif (formData.value.name !== projectsStore.currentProject.name) {\n\t\tdiff.name = formData.value.name ?? '';\n\t}\n\n\tif (formData.value.relations.length !== projectsStore.currentProject.relations.length) {\n\t\tdiff.memberAdded = formData.value.relations.filter(\n\t\t\t(r: ProjectRelation) => !projectsStore.currentProject?.relations.find((cr) => cr.id === r.id),\n\t\t);\n\t\tdiff.memberRemoved = projectsStore.currentProject.relations.filter(\n\t\t\t(cr: ProjectRelation) => !formData.value.relations.find((r) => r.id === cr.id),\n\t\t);\n\t}\n\n\tdiff.role = formData.value.relations.filter((r: ProjectRelation) => {\n\t\tconst currentRelation = projectsStore.currentProject?.relations.find((cr) => cr.id === r.id);\n\t\treturn currentRelation?.role !== r.role && !diff.memberAdded?.find((ar) => ar.id === r.id);\n\t});\n\n\treturn diff;\n};\n\nconst sendTelemetry = (diff: FormDataDiff) => {\n\tif (diff.name) {\n\t\ttelemetry.track('User changed project name', {\n\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\tname: diff.name,\n\t\t});\n\t}\n\n\tif (diff.memberAdded) {\n\t\tdiff.memberAdded.forEach((r) => {\n\t\t\ttelemetry.track('User added member to project', {\n\t\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\t\ttarget_user_id: r.id,\n\t\t\t\trole: r.role,\n\t\t\t});\n\t\t});\n\t}\n\n\tif (diff.memberRemoved) {\n\t\tdiff.memberRemoved.forEach((r) => {\n\t\t\ttelemetry.track('User removed member from project', {\n\t\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\t\ttarget_user_id: r.id,\n\t\t\t});\n\t\t});\n\t}\n\n\tif (diff.role) {\n\t\tdiff.role.forEach((r) => {\n\t\t\ttelemetry.track('User changed member role on project', {\n\t\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\t\ttarget_user_id: r.id,\n\t\t\t\trole: r.role,\n\t\t\t});\n\t\t});\n\t}\n};\n\nconst onSubmit = async () => {\n\ttry {\n\t\tif (isDirty.value && projectsStore.currentProject) {\n\t\t\tconst diff = makeFormDataDiff();\n\n\t\t\tawait projectsStore.updateProject({\n\t\t\t\tid: projectsStore.currentProject.id,\n\t\t\t\tname: formData.value.name,\n\t\t\t\trelations: formData.value.relations.map((r: ProjectRelation) => ({\n\t\t\t\t\tuserId: r.id,\n\t\t\t\t\trole: r.role,\n\t\t\t\t})),\n\t\t\t});\n\t\t\tsendTelemetry(diff);\n\t\t\tisDirty.value = false;\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: locale.baseText('projects.settings.save.successful.title', {\n\t\t\t\t\tinterpolate: { projectName: formData.value.name ?? '' },\n\t\t\t\t}),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('projects.settings.save.error.title'));\n\t}\n};\n\nconst onDelete = async () => {\n\tawait projectsStore.getAllProjects();\n\tdialogVisible.value = true;\n};\n\nconst onConfirmDelete = async (transferId?: string) => {\n\ttry {\n\t\tif (projectsStore.currentProject) {\n\t\t\tconst projectName = projectsStore.currentProject?.name ?? '';\n\t\t\tawait projectsStore.deleteProject(projectsStore.currentProject.id, transferId);\n\t\t\tawait router.push({ name: VIEWS.HOMEPAGE });\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: locale.baseText('projects.settings.delete.successful.title', {\n\t\t\t\t\tinterpolate: { projectName },\n\t\t\t\t}),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t\tdialogVisible.value = true;\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('projects.settings.delete.error.title'));\n\t}\n};\n\nconst selectProjectNameIfMatchesDefault = () => {\n\tif (\n\t\tnameInput.value &&\n\t\tformData.value.name === locale.baseText('projects.settings.newProjectName')\n\t) {\n\t\tnameInput.value.focus();\n\t\tnameInput.value.select();\n\t}\n};\n\nwatch(\n\t() => projectsStore.currentProject,\n\tasync () => {\n\t\tformData.value.name = projectsStore.currentProject?.name ?? '';\n\t\tformData.value.relations = projectsStore.currentProject?.relations\n\t\t\t? deepCopy(projectsStore.currentProject.relations)\n\t\t\t: [];\n\t\tawait nextTick();\n\t\tselectProjectNameIfMatchesDefault();\n\t},\n\t{ immediate: true },\n);\n\nonBeforeMount(async () => {\n\tawait usersStore.fetchUsers();\n});\n</script>\n\n<template>\n\t<div :class=\"$style.projectSettings\">\n\t\t<div :class=\"$style.header\">\n\t\t\t<ProjectTabs />\n\t\t</div>\n\t\t<form @submit.prevent=\"onSubmit\">\n\t\t\t<fieldset>\n\t\t\t\t<label for=\"name\">{{ locale.baseText('projects.settings.name') }}</label>\n\t\t\t\t<N8nInput\n\t\t\t\t\tid=\"name\"\n\t\t\t\t\tref=\"nameInput\"\n\t\t\t\t\tv-model=\"formData.name\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tname=\"name\"\n\t\t\t\t\t@input=\"onNameInput\"\n\t\t\t\t/>\n\t\t\t</fieldset>\n\t\t\t<fieldset>\n\t\t\t\t<label for=\"projectMembers\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.projectMembers')\n\t\t\t\t}}</label>\n\t\t\t\t<N8nUserSelect\n\t\t\t\t\tid=\"projectMembers\"\n\t\t\t\t\tclass=\"mb-s\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t:users=\"usersList\"\n\t\t\t\t\t:current-user-id=\"usersStore.currentUser?.id\"\n\t\t\t\t\t:placeholder=\"$locale.baseText('workflows.shareModal.select.placeholder')\"\n\t\t\t\t\tdata-test-id=\"project-members-select\"\n\t\t\t\t\t@update:model-value=\"onAddMember\"\n\t\t\t\t>\n\t\t\t\t\t<template #prefix>\n\t\t\t\t\t\t<N8nIcon icon=\"search\" />\n\t\t\t\t\t</template>\n\t\t\t\t</N8nUserSelect>\n\t\t\t\t<N8nUsersList\n\t\t\t\t\t:actions=\"[]\"\n\t\t\t\t\t:users=\"formData.relations\"\n\t\t\t\t\t:current-user-id=\"usersStore.currentUser?.id\"\n\t\t\t\t\t:delete-label=\"$locale.baseText('workflows.shareModal.list.delete')\"\n\t\t\t\t>\n\t\t\t\t\t<template #actions=\"{ user }\">\n\t\t\t\t\t\t<div :class=\"$style.buttons\">\n\t\t\t\t\t\t\t<N8nSelect\n\t\t\t\t\t\t\t\tclass=\"mr-2xs\"\n\t\t\t\t\t\t\t\t:model-value=\"user?.role || projectRoles[0].role\"\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t@update:model-value=\"onRoleAction(user, $event)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<N8nOption\n\t\t\t\t\t\t\t\t\tv-for=\"role in projectRoles\"\n\t\t\t\t\t\t\t\t\t:key=\"role.role\"\n\t\t\t\t\t\t\t\t\t:value=\"role.role\"\n\t\t\t\t\t\t\t\t\t:label=\"role.name\"\n\t\t\t\t\t\t\t\t\t:disabled=\"!role.licensed\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ role.name\n\t\t\t\t\t\t\t\t\t}}<span\n\t\t\t\t\t\t\t\t\t\tv-if=\"!role.licensed\"\n\t\t\t\t\t\t\t\t\t\t:class=\"$style.upgrade\"\n\t\t\t\t\t\t\t\t\t\t@click=\"upgradeDialogVisible = true\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t&nbsp;-&nbsp;{{ locale.baseText('generic.upgrade') }}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</N8nOption>\n\t\t\t\t\t\t\t</N8nSelect>\n\t\t\t\t\t\t\t<N8nButton\n\t\t\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t\t\tnative-type=\"button\"\n\t\t\t\t\t\t\t\tsquare\n\t\t\t\t\t\t\t\ticon=\"trash\"\n\t\t\t\t\t\t\t\tdata-test-id=\"project-user-remove\"\n\t\t\t\t\t\t\t\t@click=\"onRoleAction(user, 'remove')\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t</N8nUsersList>\n\t\t\t</fieldset>\n\t\t\t<fieldset :class=\"$style.buttons\">\n\t\t\t\t<div>\n\t\t\t\t\t<small v-if=\"isDirty\" class=\"mr-2xs\">{{\n\t\t\t\t\t\tlocale.baseText('projects.settings.message.unsavedChanges')\n\t\t\t\t\t}}</small>\n\t\t\t\t\t<N8nButton\n\t\t\t\t\t\t:disabled=\"!isDirty\"\n\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\tnative-type=\"button\"\n\t\t\t\t\t\tclass=\"mr-2xs\"\n\t\t\t\t\t\tdata-test-id=\"project-settings-cancel-button\"\n\t\t\t\t\t\t@click.stop.prevent=\"onCancel\"\n\t\t\t\t\t\t>{{ locale.baseText('projects.settings.button.cancel') }}</N8nButton\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t\t<N8nButton\n\t\t\t\t\t:disabled=\"!isDirty\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\tdata-test-id=\"project-settings-save-button\"\n\t\t\t\t\t>{{ locale.baseText('projects.settings.button.save') }}</N8nButton\n\t\t\t\t>\n\t\t\t</fieldset>\n\t\t\t<fieldset>\n\t\t\t\t<hr class=\"mb-2xl\" />\n\t\t\t\t<h3 class=\"mb-xs\">{{ locale.baseText('projects.settings.danger.title') }}</h3>\n\t\t\t\t<small>{{ locale.baseText('projects.settings.danger.message') }}</small>\n\t\t\t\t<br />\n\t\t\t\t<N8nButton\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tnative-type=\"button\"\n\t\t\t\t\tclass=\"mt-s\"\n\t\t\t\t\tdata-test-id=\"project-settings-delete-button\"\n\t\t\t\t\t@click.stop.prevent=\"onDelete\"\n\t\t\t\t\t>{{ locale.baseText('projects.settings.danger.deleteProject') }}</N8nButton\n\t\t\t\t>\n\t\t\t</fieldset>\n\t\t</form>\n\t\t<ProjectDeleteDialog\n\t\t\tv-model=\"dialogVisible\"\n\t\t\t:current-project=\"projectsStore.currentProject\"\n\t\t\t:projects=\"projects\"\n\t\t\t@confirm-delete=\"onConfirmDelete\"\n\t\t/>\n\t\t<ProjectRoleUpgradeDialog\n\t\t\tv-model=\"upgradeDialogVisible\"\n\t\t\t:limit=\"projectsStore.teamProjectsLimit\"\n\t\t\t:plan-name=\"cloudPlanStore.currentPlanData?.displayName\"\n\t\t/>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.projectSettings {\n\tdisplay: grid;\n\twidth: 100%;\n\tjustify-items: center;\n\tgrid-auto-rows: max-content;\n\n\tform {\n\t\twidth: 100%;\n\t\tmax-width: 1280px;\n\t\tpadding: 0 var(--spacing-2xl);\n\n\t\tfieldset {\n\t\t\tpadding-bottom: var(--spacing-2xl);\n\n\t\t\tlabel {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin-bottom: var(--spacing-xs);\n\t\t\t\tfont-size: var(--font-size-xl);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.header {\n\twidth: 100%;\n\tmax-width: 1280px;\n\tpadding: var(--spacing-l) var(--spacing-2xl) 0;\n}\n\n.upgrade {\n\tcursor: pointer;\n}\n\n.buttons {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\talign-items: center;\n}\n</style>\n"],"names":["props","__props","visible","_useModel","emit","__emit","locale","useI18n","selectedProject","ref","operation","wipeConfirmText","isValid","computed","onDelete","_a","uiStore","useUIStore","goToUpgrade","usersStore","useUsersStore","projectsStore","useProjectsStore","rolesStore","useRolesStore","cloudPlanStore","useCloudPlanStore","toast","useToast","router","useRouter","telemetry","useTelemetry","dialogVisible","upgradeDialogVisible","isDirty","formData","projectRoleTranslations","nameInput","usersList","user","r","projects","project","projectRoles","role","firstLicensedRole","onAddMember","userId","id","firstName","lastName","email","relation","onRoleAction","index","onNameInput","onCancel","deepCopy","_b","makeFormDataDiff","diff","cr","currentRelation","ar","sendTelemetry","onSubmit","error","onConfirmDelete","transferId","projectName","VIEWS","selectProjectNameIfMatchesDefault","watch","nextTick","onBeforeMount"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{G as p,az as d,r as i,e as T,d as u,l as b,m as _,T as S,I as j,ag as f}from"./vendor-qzAIxxHa.js";import{o as w,V as o,d$ as E,w as P}from"./index-OLvpAx8p.js";import{_ as v}from"./n8n-roXSR3ff.js";const C=p({__name:"ProjectTabs",setup(k){const r=P(),e=d(),c=w(),l=i(""),m=T(()=>{var n;const s=(n=e==null?void 0:e.params)==null?void 0:n.projectId,a=s?{workflows:{name:o.PROJECTS_WORKFLOWS,params:{projectId:s}},credentials:{name:o.PROJECTS_CREDENTIALS,params:{projectId:s}}}:{workflows:{name:o.WORKFLOWS},credentials:{name:o.CREDENTIALS}},t=[{label:r.baseText("mainSidebar.workflows"),value:a.workflows.name,to:a.workflows},{label:r.baseText("mainSidebar.credentials"),value:a.credentials.name,to:a.credentials}];return s&&E(c.currentProject).update&&t.push({label:r.baseText("projects.settings"),value:o.PROJECT_SETTINGS,to:{name:o.PROJECT_SETTINGS,params:{projectId:s}}}),t});return u(()=>e==null?void 0:e.name,()=>{l.value=e==null?void 0:e.name},{immediate:!0}),(s,a)=>{const t=f("N8nTabs");return b(),_("div",{class:j(s.$style.projectTabs)},[S(t,{modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=n=>l.value=n),options:m.value,"data-test-id":"project-tabs"},null,8,["modelValue","options"])],2)}}}),I="_projectTabs_1nw28_1",R={projectTabs:I},O={$style:R},W=v(C,[["__cssModules",O]]);export{W as P};
2
- //# sourceMappingURL=ProjectTabs-L2yrOMy6.js.map
1
+ import{G as p,az as d,r as i,e as T,d as u,l as b,m as _,T as S,I as j,ag as f}from"./vendor-qzAIxxHa.js";import{o as w,V as o,d$ as E,w as P}from"./index-6ulnOLCO.js";import{_ as v}from"./n8n-roXSR3ff.js";const C=p({__name:"ProjectTabs",setup(k){const r=P(),e=d(),c=w(),l=i(""),m=T(()=>{var n;const s=(n=e==null?void 0:e.params)==null?void 0:n.projectId,a=s?{workflows:{name:o.PROJECTS_WORKFLOWS,params:{projectId:s}},credentials:{name:o.PROJECTS_CREDENTIALS,params:{projectId:s}}}:{workflows:{name:o.WORKFLOWS},credentials:{name:o.CREDENTIALS}},t=[{label:r.baseText("mainSidebar.workflows"),value:a.workflows.name,to:a.workflows},{label:r.baseText("mainSidebar.credentials"),value:a.credentials.name,to:a.credentials}];return s&&E(c.currentProject).update&&t.push({label:r.baseText("projects.settings"),value:o.PROJECT_SETTINGS,to:{name:o.PROJECT_SETTINGS,params:{projectId:s}}}),t});return u(()=>e==null?void 0:e.name,()=>{l.value=e==null?void 0:e.name},{immediate:!0}),(s,a)=>{const t=f("N8nTabs");return b(),_("div",{class:j(s.$style.projectTabs)},[S(t,{modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=n=>l.value=n),options:m.value,"data-test-id":"project-tabs"},null,8,["modelValue","options"])],2)}}}),I="_projectTabs_1nw28_1",R={projectTabs:I},O={$style:R},W=v(C,[["__cssModules",O]]);export{W as P};
2
+ //# sourceMappingURL=ProjectTabs-A5hdgqW2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectTabs-L2yrOMy6.js","sources":["../../src/features/projects/components/ProjectTabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, computed } from 'vue';\nimport type { RouteRecordName } from 'vue-router';\nimport { useRoute } from 'vue-router';\nimport { VIEWS } from '@/constants';\nimport { useI18n } from '@/composables/useI18n';\nimport { useProjectsStore } from '../projects.store';\nimport { getProjectPermissions } from '@/permissions';\n\nconst locale = useI18n();\nconst route = useRoute();\n\nconst projectsStore = useProjectsStore();\n\nconst selectedTab = ref<RouteRecordName | null | undefined>('');\nconst options = computed(() => {\n\tconst projectId = route?.params?.projectId;\n\tconst to = projectId\n\t\t? {\n\t\t\t\tworkflows: {\n\t\t\t\t\tname: VIEWS.PROJECTS_WORKFLOWS,\n\t\t\t\t\tparams: { projectId },\n\t\t\t\t},\n\t\t\t\tcredentials: {\n\t\t\t\t\tname: VIEWS.PROJECTS_CREDENTIALS,\n\t\t\t\t\tparams: { projectId },\n\t\t\t\t},\n\t\t\t}\n\t\t: {\n\t\t\t\tworkflows: {\n\t\t\t\t\tname: VIEWS.WORKFLOWS,\n\t\t\t\t},\n\t\t\t\tcredentials: {\n\t\t\t\t\tname: VIEWS.CREDENTIALS,\n\t\t\t\t},\n\t\t\t};\n\tconst tabs = [\n\t\t{\n\t\t\tlabel: locale.baseText('mainSidebar.workflows'),\n\t\t\tvalue: to.workflows.name,\n\t\t\tto: to.workflows,\n\t\t},\n\t\t{\n\t\t\tlabel: locale.baseText('mainSidebar.credentials'),\n\t\t\tvalue: to.credentials.name,\n\t\t\tto: to.credentials,\n\t\t},\n\t];\n\n\tif (projectId && getProjectPermissions(projectsStore.currentProject).update) {\n\t\ttabs.push({\n\t\t\tlabel: locale.baseText('projects.settings'),\n\t\t\tvalue: VIEWS.PROJECT_SETTINGS,\n\t\t\tto: { name: VIEWS.PROJECT_SETTINGS, params: { projectId } },\n\t\t});\n\t}\n\n\treturn tabs;\n});\nwatch(\n\t() => route?.name,\n\t() => {\n\t\tselectedTab.value = route?.name;\n\t},\n\t{ immediate: true },\n);\n</script>\n\n<template>\n\t<div :class=\"$style.projectTabs\">\n\t\t<N8nTabs v-model=\"selectedTab\" :options=\"options\" data-test-id=\"project-tabs\" />\n\t</div>\n</template>\n\n<style module lang=\"scss\">\n.projectTabs {\n\tpadding: var(--spacing-2xs) 0 var(--spacing-l);\n}\n</style>\n"],"names":["locale","useI18n","route","useRoute","projectsStore","useProjectsStore","selectedTab","ref","options","computed","projectId","_a","to","VIEWS","tabs","getProjectPermissions","watch"],"mappings":"uPASA,MAAMA,EAASC,IACTC,EAAQC,IAERC,EAAgBC,IAEhBC,EAAcC,EAAwC,EAAE,EACxDC,EAAUC,EAAS,IAAM,OACxB,MAAAC,GAAYC,EAAAT,GAAA,YAAAA,EAAO,SAAP,YAAAS,EAAe,UAC3BC,EAAKF,EACR,CACA,UAAW,CACV,KAAMG,EAAM,mBACZ,OAAQ,CAAE,UAAAH,CAAU,CACrB,EACA,YAAa,CACZ,KAAMG,EAAM,qBACZ,OAAQ,CAAE,UAAAH,CAAU,CACrB,CAAA,EAEA,CACA,UAAW,CACV,KAAMG,EAAM,SACb,EACA,YAAa,CACZ,KAAMA,EAAM,WACb,CAAA,EAEGC,EAAO,CACZ,CACC,MAAOd,EAAO,SAAS,uBAAuB,EAC9C,MAAOY,EAAG,UAAU,KACpB,GAAIA,EAAG,SACR,EACA,CACC,MAAOZ,EAAO,SAAS,yBAAyB,EAChD,MAAOY,EAAG,YAAY,KACtB,GAAIA,EAAG,WACR,CAAA,EAGD,OAAIF,GAAaK,EAAsBX,EAAc,cAAc,EAAE,QACpEU,EAAK,KAAK,CACT,MAAOd,EAAO,SAAS,mBAAmB,EAC1C,MAAOa,EAAM,iBACb,GAAI,CAAE,KAAMA,EAAM,iBAAkB,OAAQ,CAAE,UAAAH,EAAY,CAAA,CAC1D,EAGKI,CAAA,CACP,EACD,OAAAE,EACC,IAAMd,GAAA,YAAAA,EAAO,KACb,IAAM,CACLI,EAAY,MAAQJ,GAAA,YAAAA,EAAO,IAC5B,EACA,CAAE,UAAW,EAAK,CAAA"}
1
+ {"version":3,"file":"ProjectTabs-A5hdgqW2.js","sources":["../../src/features/projects/components/ProjectTabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, computed } from 'vue';\nimport type { RouteRecordName } from 'vue-router';\nimport { useRoute } from 'vue-router';\nimport { VIEWS } from '@/constants';\nimport { useI18n } from '@/composables/useI18n';\nimport { useProjectsStore } from '../projects.store';\nimport { getProjectPermissions } from '@/permissions';\n\nconst locale = useI18n();\nconst route = useRoute();\n\nconst projectsStore = useProjectsStore();\n\nconst selectedTab = ref<RouteRecordName | null | undefined>('');\nconst options = computed(() => {\n\tconst projectId = route?.params?.projectId;\n\tconst to = projectId\n\t\t? {\n\t\t\t\tworkflows: {\n\t\t\t\t\tname: VIEWS.PROJECTS_WORKFLOWS,\n\t\t\t\t\tparams: { projectId },\n\t\t\t\t},\n\t\t\t\tcredentials: {\n\t\t\t\t\tname: VIEWS.PROJECTS_CREDENTIALS,\n\t\t\t\t\tparams: { projectId },\n\t\t\t\t},\n\t\t\t}\n\t\t: {\n\t\t\t\tworkflows: {\n\t\t\t\t\tname: VIEWS.WORKFLOWS,\n\t\t\t\t},\n\t\t\t\tcredentials: {\n\t\t\t\t\tname: VIEWS.CREDENTIALS,\n\t\t\t\t},\n\t\t\t};\n\tconst tabs = [\n\t\t{\n\t\t\tlabel: locale.baseText('mainSidebar.workflows'),\n\t\t\tvalue: to.workflows.name,\n\t\t\tto: to.workflows,\n\t\t},\n\t\t{\n\t\t\tlabel: locale.baseText('mainSidebar.credentials'),\n\t\t\tvalue: to.credentials.name,\n\t\t\tto: to.credentials,\n\t\t},\n\t];\n\n\tif (projectId && getProjectPermissions(projectsStore.currentProject).update) {\n\t\ttabs.push({\n\t\t\tlabel: locale.baseText('projects.settings'),\n\t\t\tvalue: VIEWS.PROJECT_SETTINGS,\n\t\t\tto: { name: VIEWS.PROJECT_SETTINGS, params: { projectId } },\n\t\t});\n\t}\n\n\treturn tabs;\n});\nwatch(\n\t() => route?.name,\n\t() => {\n\t\tselectedTab.value = route?.name;\n\t},\n\t{ immediate: true },\n);\n</script>\n\n<template>\n\t<div :class=\"$style.projectTabs\">\n\t\t<N8nTabs v-model=\"selectedTab\" :options=\"options\" data-test-id=\"project-tabs\" />\n\t</div>\n</template>\n\n<style module lang=\"scss\">\n.projectTabs {\n\tpadding: var(--spacing-2xs) 0 var(--spacing-l);\n}\n</style>\n"],"names":["locale","useI18n","route","useRoute","projectsStore","useProjectsStore","selectedTab","ref","options","computed","projectId","_a","to","VIEWS","tabs","getProjectPermissions","watch"],"mappings":"uPASA,MAAMA,EAASC,IACTC,EAAQC,IAERC,EAAgBC,IAEhBC,EAAcC,EAAwC,EAAE,EACxDC,EAAUC,EAAS,IAAM,OACxB,MAAAC,GAAYC,EAAAT,GAAA,YAAAA,EAAO,SAAP,YAAAS,EAAe,UAC3BC,EAAKF,EACR,CACA,UAAW,CACV,KAAMG,EAAM,mBACZ,OAAQ,CAAE,UAAAH,CAAU,CACrB,EACA,YAAa,CACZ,KAAMG,EAAM,qBACZ,OAAQ,CAAE,UAAAH,CAAU,CACrB,CAAA,EAEA,CACA,UAAW,CACV,KAAMG,EAAM,SACb,EACA,YAAa,CACZ,KAAMA,EAAM,WACb,CAAA,EAEGC,EAAO,CACZ,CACC,MAAOd,EAAO,SAAS,uBAAuB,EAC9C,MAAOY,EAAG,UAAU,KACpB,GAAIA,EAAG,SACR,EACA,CACC,MAAOZ,EAAO,SAAS,yBAAyB,EAChD,MAAOY,EAAG,YAAY,KACtB,GAAIA,EAAG,WACR,CAAA,EAGD,OAAIF,GAAaK,EAAsBX,EAAc,cAAc,EAAE,QACpEU,EAAK,KAAK,CACT,MAAOd,EAAO,SAAS,mBAAmB,EAC1C,MAAOa,EAAM,iBACb,GAAI,CAAE,KAAMA,EAAM,iBAAkB,OAAQ,CAAE,UAAAH,EAAY,CAAA,CAC1D,EAGKI,CAAA,CACP,EACD,OAAAE,EACC,IAAMd,GAAA,YAAAA,EAAO,KACb,IAAM,CACLI,EAAY,MAAQJ,GAAA,YAAAA,EAAO,IAC5B,EACA,CAAE,UAAW,EAAK,CAAA"}
@@ -1,2 +1,2 @@
1
- import{m as l}from"./pinia-hqNpa1CE.js";import{l as p}from"./index-OLvpAx8p.js";import{G as m,l as e,m as n,T as t,O as s,p as a,S as _,R as d,H as u,ag as r}from"./vendor-qzAIxxHa.js";import{_ as f}from"./n8n-roXSR3ff.js";const T=m({name:"PushConnectionTracker",computed:{...l(p)}}),h={key:0,class:"push-connection-lost primary-color"},C=["innerHTML"];function k(o,S,$,v,x,y){const c=r("font-awesome-icon"),i=r("n8n-tooltip");return e(),n("span",null,[o.rootStore.pushConnectionActive?u(o.$slots,"default",{key:1}):(e(),n("div",h,[t(i,{placement:"bottom-end"},{content:s(()=>[a("div",{innerHTML:o.$locale.baseText("pushConnectionTracker.cannotConnectToServer")},null,8,C)]),default:s(()=>[a("span",null,[t(c,{icon:"exclamation-triangle"}),_("  "+d(o.$locale.baseText("pushConnectionTracker.connectionLost")),1)])]),_:1})]))])}const H=f(T,[["render",k]]);export{H as P};
2
- //# sourceMappingURL=PushConnectionTracker-GgAPUiGC.js.map
1
+ import{m as l}from"./pinia-hqNpa1CE.js";import{l as p}from"./index-6ulnOLCO.js";import{G as m,l as e,m as n,T as t,O as s,p as a,S as _,R as d,H as u,ag as r}from"./vendor-qzAIxxHa.js";import{_ as f}from"./n8n-roXSR3ff.js";const T=m({name:"PushConnectionTracker",computed:{...l(p)}}),h={key:0,class:"push-connection-lost primary-color"},C=["innerHTML"];function k(o,S,$,v,x,y){const c=r("font-awesome-icon"),i=r("n8n-tooltip");return e(),n("span",null,[o.rootStore.pushConnectionActive?u(o.$slots,"default",{key:1}):(e(),n("div",h,[t(i,{placement:"bottom-end"},{content:s(()=>[a("div",{innerHTML:o.$locale.baseText("pushConnectionTracker.cannotConnectToServer")},null,8,C)]),default:s(()=>[a("span",null,[t(c,{icon:"exclamation-triangle"}),_("  "+d(o.$locale.baseText("pushConnectionTracker.connectionLost")),1)])]),_:1})]))])}const H=f(T,[["render",k]]);export{H as P};
2
+ //# sourceMappingURL=PushConnectionTracker-1875-61J.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PushConnectionTracker-GgAPUiGC.js","sources":["../../src/components/PushConnectionTracker.vue"],"sourcesContent":["<template>\n\t<span>\n\t\t<div v-if=\"!rootStore.pushConnectionActive\" class=\"push-connection-lost primary-color\">\n\t\t\t<n8n-tooltip placement=\"bottom-end\">\n\t\t\t\t<template #content>\n\t\t\t\t\t<div v-html=\"$locale.baseText('pushConnectionTracker.cannotConnectToServer')\"></div>\n\t\t\t\t</template>\n\t\t\t\t<span>\n\t\t\t\t\t<font-awesome-icon icon=\"exclamation-triangle\" />&nbsp;\n\t\t\t\t\t{{ $locale.baseText('pushConnectionTracker.connectionLost') }}\n\t\t\t\t</span>\n\t\t\t</n8n-tooltip>\n\t\t</div>\n\t\t<slot v-else />\n\t</span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useRootStore } from '@/stores/n8nRoot.store';\n\nexport default defineComponent({\n\tname: 'PushConnectionTracker',\n\tcomputed: {\n\t\t...mapStores(useRootStore),\n\t},\n});\n</script>\n"],"names":["_sfc_main","defineComponent","mapStores","useRootStore","_hoisted_1","_resolveComponent","_openBlock","_createElementBlock","_ctx","_renderSlot","_createVNode","_component_n8n_tooltip","_withCtx","$locale","_createElementVNode","_hoisted_2","_component_font_awesome_icon"],"mappings":"+NAsBA,MAAAA,EAAeC,EAAgB,CAC9B,KAAM,wBACN,SAAU,CACT,GAAGC,EAAUC,CAAY,CAC1B,CACD,CAAC,EAzB6CC,EAAM,CAAA,IAAA,uHADnDC,EAaO,aAAA,EAZN,OAAAC,EAAA,EAAAC,EAUM,OAVN,KAAA,CAAAC,EACC,+BAUDC,EAAAD,EAAA,OAAA,UAAA,CAAA,IAAA,EAAA,OARuFD,EAAA,MAAAH,EAAA,CAAAM,EAApFC,EAAoF,CAAA,UAAA,YAAA,EAAA,CAAA,QAA/EC,EAAQC,IAAAA,CALlBC,EAAA,MAAA,CAAA,UAAAN,EAAA,QAAA,SAAA,6CAAA,GAUW,KAAA,EAAAO,CAAA,CAAA,CAAA,UAFNH,EAAiD,IAAA,CACjDE,EAAA,OAAA,KAAA,CAAAJ,EAAAM,EAAA,CAAA,KAAA,sBAAA,CAAA,yEATL,CAAA,CAAA,CAAA,KAaE,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"PushConnectionTracker-1875-61J.js","sources":["../../src/components/PushConnectionTracker.vue"],"sourcesContent":["<template>\n\t<span>\n\t\t<div v-if=\"!rootStore.pushConnectionActive\" class=\"push-connection-lost primary-color\">\n\t\t\t<n8n-tooltip placement=\"bottom-end\">\n\t\t\t\t<template #content>\n\t\t\t\t\t<div v-html=\"$locale.baseText('pushConnectionTracker.cannotConnectToServer')\"></div>\n\t\t\t\t</template>\n\t\t\t\t<span>\n\t\t\t\t\t<font-awesome-icon icon=\"exclamation-triangle\" />&nbsp;\n\t\t\t\t\t{{ $locale.baseText('pushConnectionTracker.connectionLost') }}\n\t\t\t\t</span>\n\t\t\t</n8n-tooltip>\n\t\t</div>\n\t\t<slot v-else />\n\t</span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useRootStore } from '@/stores/n8nRoot.store';\n\nexport default defineComponent({\n\tname: 'PushConnectionTracker',\n\tcomputed: {\n\t\t...mapStores(useRootStore),\n\t},\n});\n</script>\n"],"names":["_sfc_main","defineComponent","mapStores","useRootStore","_hoisted_1","_resolveComponent","_openBlock","_createElementBlock","_ctx","_renderSlot","_createVNode","_component_n8n_tooltip","_withCtx","$locale","_createElementVNode","_hoisted_2","_component_font_awesome_icon"],"mappings":"+NAsBA,MAAAA,EAAeC,EAAgB,CAC9B,KAAM,wBACN,SAAU,CACT,GAAGC,EAAUC,CAAY,CAC1B,CACD,CAAC,EAzB6CC,EAAM,CAAA,IAAA,uHADnDC,EAaO,aAAA,EAZN,OAAAC,EAAA,EAAAC,EAUM,OAVN,KAAA,CAAAC,EACC,+BAUDC,EAAAD,EAAA,OAAA,UAAA,CAAA,IAAA,EAAA,OARuFD,EAAA,MAAAH,EAAA,CAAAM,EAApFC,EAAoF,CAAA,UAAA,YAAA,EAAA,CAAA,QAA/EC,EAAQC,IAAAA,CALlBC,EAAA,MAAA,CAAA,UAAAN,EAAA,QAAA,SAAA,6CAAA,GAUW,KAAA,EAAAO,CAAA,CAAA,CAAA,UAFNH,EAAiD,IAAA,CACjDE,EAAA,OAAA,KAAA,CAAAJ,EAAAM,EAAA,CAAA,KAAA,sBAAA,CAAA,yEATL,CAAA,CAAA,CAAA,KAaE,CAAA,CAAA,CAAA"}
@@ -1,2 +1,2 @@
1
- import{m as G}from"./pinia-hqNpa1CE.js";import{i as se,dT as re,E as oe,o as ae,d as le,a as ne,w as ie,F as de}from"./index-OLvpAx8p.js";import{G as B,l as i,m as h,H as c,p as b,I as u,Q as P,M as g,O as l,T as f,V as Q,U as J,S as F,R as k,ag as r,az as ue,r as w,e as W,d as T,b as ce,n as fe,ab as pe,al as me,F as q,a7 as ye}from"./vendor-qzAIxxHa.js";import{_ as M}from"./n8n-roXSR3ff.js";const he=B({name:"PageViewLayout",data(){return{loading:!1}},computed:{...G(se)}}),ge="_wrapper_u24kg_1",$e="_content_u24kg_12",ve={wrapper:ge,content:$e};function we(e,s,p,L,j,A){return i(),h("div",{class:u(e.$style.wrapper)},[c(e.$slots,"header"),b("main",{class:u(e.$style.content)},[c(e.$slots,"default")],2)],2)}const be={$style:ve},_e=M(he,[["render",we],["__cssModules",be]]),Pe=B({props:{overflow:{type:Boolean,default:!1}}}),Fe="_wrapper_183my_1",ke="_overflow_183my_6",je="_list_183my_6",Se="_body_183my_6",Ve={wrapper:Fe,overflow:ke,list:je,body:Se};function Ce(e,s,p,L,j,A){return i(),h("div",{class:u({[e.$style.wrapper]:!0,[e.$style.overflow]:e.overflow})},[b("div",{class:u(e.$style.list)},[e.$slots.header?(i(),h("div",{key:0,class:u(e.$style.header)},[c(e.$slots,"header")],2)):P("",!0),b("div",{class:u(e.$style.body)},[c(e.$slots,"default")],2)],2)],2)}const Le={$style:Ve},Ae=M(Pe,[["render",Ce],["__cssModules",Le]]),Ue=B({components:{ProjectSharing:re},props:{modelValue:{type:Object,default:()=>({})},keys:{type:Array,default:()=>[]},shareable:{type:Boolean,default:!0},reset:{type:Function,default:()=>{}}},data(){return{EnterpriseEditionFeature:oe,selectedProject:null}},computed:{...G(ae),filtersLength(){let e=0;return this.keys.forEach(s=>{if(s==="search")return;const p=this.modelValue[s];e+=(Array.isArray(p)?p.length>0:p!=="")?1:0}),e},hasFilters(){return this.filtersLength>0}},watch:{filtersLength(e){this.$emit("update:filtersLength",e)}},async beforeMount(){await this.projectsStore.getAllProjects(),this.selectedProject=this.projectsStore.projects.find(e=>e.id===this.modelValue.homeProject)??null},methods:{setKeyValue(e,s){const p={...this.modelValue,[e]:s};this.$emit("update:modelValue",p)},resetFilters(){if(this.reset)this.reset();else{const e={...this.modelValue};this.keys.forEach(s=>{e[s]=Array.isArray(this.modelValue[s])?[]:""}),this.$emit("update:modelValue",e)}this.selectedProject=null}}}),Te={"filter-button":"_filter-button_91qwg_1","filters-dropdown":"_filters-dropdown_91qwg_6","filters-dropdown-footer":"_filters-dropdown-footer_91qwg_11"};function De(e,s,p,L,j,A){const $=r("n8n-badge"),S=r("n8n-button"),m=r("n8n-input-label"),_=r("ProjectSharing"),o=r("enterprise-edition"),V=r("n8n-link"),C=r("n8n-popover");return i(),g(C,{trigger:"click",width:"304",size:"large"},{reference:l(()=>[f(S,{icon:"filter",type:"tertiary",active:e.hasFilters,class:u(e.$style["filter-button"]),"data-test-id":"resources-list-filters-trigger"},{default:l(()=>[Q(f($,{theme:"primary",class:"mr-4xs"},{default:l(()=>[F(k(e.filtersLength),1)]),_:1},512),[[J,e.filtersLength>0]]),F(" "+k(e.$locale.baseText("forms.resourceFiltersDropdown.filters")),1)]),_:1},8,["active","class"])]),default:l(()=>[b("div",{class:u(e.$style["filters-dropdown"]),"data-test-id":"resources-list-filters-dropdown"},[c(e.$slots,"default",{filters:e.modelValue,setKeyValue:e.setKeyValue}),e.shareable&&e.projectsStore.isProjectHome?(i(),g(o,{key:0,features:[e.EnterpriseEditionFeature.Sharing]},{default:l(()=>[f(m,{label:e.$locale.baseText("forms.resourceFiltersDropdown.owner"),bold:!1,size:"small",color:"text-base",class:"mb-3xs"},null,8,["label"]),f(_,{modelValue:e.selectedProject,"onUpdate:modelValue":[s[0]||(s[0]=y=>e.selectedProject=y),s[1]||(s[1]=y=>e.setKeyValue("homeProject",y.id))],class:"pt-2xs",projects:e.projectsStore.projects,placeholder:e.$locale.baseText("forms.resourceFiltersDropdown.owner.placeholder"),"empty-options-text":e.$locale.baseText("projects.sharing.noMatchingProjects")},null,8,["modelValue","projects","placeholder","empty-options-text"])]),_:1},8,["features"])):P("",!0),e.hasFilters?(i(),h("div",{key:1,class:u([e.$style["filters-dropdown-footer"],"mt-s"])},[f(V,{onClick:e.resetFilters},{default:l(()=>[F(k(e.$locale.baseText("forms.resourceFiltersDropdown.reset")),1)]),_:1},8,["onClick"])],2)):P("",!0)],2)]),_:3})}const Ke={$style:Te},ze=M(Ue,[["render",De],["__cssModules",Ke]]),Re=B({name:"ResourcesListLayout",components:{PageViewLayout:_e,PageViewLayoutList:Ae,ResourceFiltersDropdown:ze},props:{resourceKey:{type:String,default:""},displayName:{type:Function,default:e=>e.name},resources:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},initialize:{type:Function,default:()=>async()=>{}},filters:{type:Object,default:()=>({search:"",homeProject:""})},additionalFiltersHandler:{type:Function,required:!1,default:void 0},shareable:{type:Boolean,default:!0},showFiltersDropdown:{type:Boolean,default:!0},sortFns:{type:Object,default:()=>({})},sortOptions:{type:Array,default:()=>["lastUpdated","lastCreated","nameAsc","nameDesc"]},type:{type:String,default:"list"},typeProps:{type:Object,default:()=>({itemSize:80})}},emits:["update:filters","click:add","sort"],setup(e,{emit:s}){const p=ue(),L=ie(),{callDebounced:j}=le(),A=ne(),$=de(),S=w(!0),m=w(e.sortOptions[0]),_=w(!1),o=w(e.filters),V=w(1),C=w(10),y=w(!1),U=w(null),D=W(()=>Object.keys(o.value)),K=W(()=>e.resources.filter(d=>{let a=!0;if(o.value.homeProject&&(a=a&&!!(d.homeProject&&d.homeProject.id===o.value.homeProject)),o.value.search){const z=o.value.search.toLowerCase();a=a&&e.displayName(d).toLowerCase().includes(z)}return e.additionalFiltersHandler&&(a=e.additionalFiltersHandler(d,o.value,a)),a}).sort((d,a)=>{switch(m.value){case"lastUpdated":return e.sortFns.lastUpdated?e.sortFns.lastUpdated(d,a):new Date(a.updatedAt).valueOf()-new Date(d.updatedAt).valueOf();case"lastCreated":return e.sortFns.lastCreated?e.sortFns.lastCreated(d,a):new Date(a.createdAt).valueOf()-new Date(d.createdAt).valueOf();case"nameAsc":return e.sortFns.nameAsc?e.sortFns.nameAsc(d,a):e.displayName(d).trim().localeCompare(e.displayName(a).trim());case"nameDesc":return e.sortFns.nameDesc?e.sortFns.nameDesc(d,a):e.displayName(a).trim().localeCompare(e.displayName(d).trim());default:return e.sortFns[m.value]?e.sortFns[m.value](d,a):0}})),N=()=>{U.value&&U.value.focus()},O=()=>!!D.value.find(t=>t!=="search"&&(Array.isArray(e.filters[t])?e.filters[t].length>0:e.filters[t]!=="")),E=t=>{C.value=t},H=t=>{V.value=t},n=t=>{if(y.value){if(t!=="reset")return;setTimeout(()=>y.value=!1,1500)}const d=o.value,a=[],z=[];Object.keys(d).forEach(R=>{d[R]&&(a.push(R),z.push(R==="search"?null:d[R]))}),$.track(`User set filters in ${e.resourceKey} list`,{filters_set:a,filter_values:z,[`${e.resourceKey}_total_in_view`]:e.resources.length,[`${e.resourceKey}_after_filtering`]:K.value.length})},v=t=>{s("click:add",t)},X=t=>{s("update:filters",t)},I=()=>{Object.keys(o.value).forEach(t=>{o.value[t]=Array.isArray(o.value[t])?[]:""}),y.value=!0,n("reset"),s("update:filters",o.value)},Y=()=>"itemSize"in e.typeProps?e.typeProps.itemSize:0,Z=()=>"columns"in e.typeProps?e.typeProps.columns:{},x=()=>{$.track(`User changed sorting in ${e.resourceKey} list`,{sorting:m.value})},ee=t=>{_.value=t>0},te=t=>{o.value.search=t,s("update:filters",o.value)};return T(()=>e.filters,t=>{o.value=t}),T(()=>o.value.homeProject,()=>{n("homeProject")}),T(()=>o.value.search,()=>j(n,{debounceTime:1e3,trailing:!0},"search")),T(()=>m.value,t=>{s("sort",t),x()}),T(()=>{var t;return(t=p==null?void 0:p.params)==null?void 0:t.projectId},()=>{I()}),ce(async()=>{await e.initialize(),S.value=!1,await fe(),N(),O()&&(_.value=!0)}),{loading:S,i18n:L,search:U,usersStore:A,filterKeys:D,currentPage:V,rowsPerPage:C,filteredAndSortedResources:K,hasFilters:_,sortBy:m,resettingFilters:y,filtersModel:o,sendFiltersTelemetry:n,getColumns:Z,itemSize:Y,onAddButtonClick:v,onUpdateFiltersLength:ee,onUpdateFilters:X,resetFilters:I,callDebounced:j,setCurrentPage:H,setRowsPerPage:E,onSearch:te}}}),Be="_filters_18koc_1",Me="_search_18koc_16",Ne="_listWrapper_18koc_20",Oe="_datatable_18koc_38",Ee={"filters-row":"_filters-row_18koc_1",filters:Be,search:Me,listWrapper:Ne,"sort-and-filter":"_sort-and-filter_18koc_26","header-loading":"_header-loading_18koc_30","card-loading":"_card-loading_18koc_34",datatable:Oe},He={key:0},Ie={key:0},We={key:0,class:"mt-xs"},qe=b("div",{class:"pb-xs"},null,-1);function Ge(e,s,p,L,j,A){const $=r("n8n-loading"),S=r("n8n-action-box"),m=r("n8n-icon"),_=r("n8n-input"),o=r("ResourceFiltersDropdown"),V=r("n8n-option"),C=r("n8n-select"),y=r("n8n-button"),U=r("n8n-link"),D=r("n8n-info-tip"),K=r("n8n-recycle-scroller"),N=r("n8n-datatable"),O=r("n8n-text"),E=r("PageViewLayoutList"),H=r("PageViewLayout");return i(),g(H,null,{header:l(()=>[c(e.$slots,"header")]),default:l(()=>[e.loading?(i(),h("div",He,[f($,{class:u([e.$style["header-loading"],"mb-l"]),variant:"custom"},null,8,["class"]),f($,{class:u([e.$style["card-loading"],"mb-2xs"]),variant:"custom"},null,8,["class"]),f($,{class:u(e.$style["card-loading"]),variant:"custom"},null,8,["class"])])):(i(),h(q,{key:1},[e.resources.length===0?(i(),h("div",Ie,[c(e.$slots,"empty",{},()=>{var n,v;return[f(S,{"data-test-id":"empty-resources-list",emoji:"👋",heading:e.i18n.baseText((n=e.usersStore.currentUser)!=null&&n.firstName?`${e.resourceKey}.empty.heading`:`${e.resourceKey}.empty.heading.userNotSetup`,{interpolate:{name:((v=e.usersStore.currentUser)==null?void 0:v.firstName)??""}}),description:e.i18n.baseText(`${e.resourceKey}.empty.description`),"button-text":e.i18n.baseText(`${e.resourceKey}.empty.button`),"button-type":"secondary","onClick:button":e.onAddButtonClick},null,8,["heading","description","button-text","onClick:button"])]})])):(i(),g(E,{key:1,overflow:e.type!=="list"},{header:l(()=>[b("div",{class:u(e.$style["filters-row"])},[b("div",{class:u(e.$style.filters)},[f(_,{ref:"search","model-value":e.filtersModel.search,class:u([e.$style.search,"mr-2xs"]),placeholder:e.i18n.baseText(`${e.resourceKey}.search.placeholder`),clearable:"","data-test-id":"resources-list-search","onUpdate:modelValue":e.onSearch},{prefix:l(()=>[f(m,{icon:"search"})]),_:1},8,["model-value","class","placeholder","onUpdate:modelValue"]),e.showFiltersDropdown?(i(),g(o,{key:0,keys:e.filterKeys,reset:e.resetFilters,"model-value":e.filtersModel,shareable:e.shareable,"onUpdate:modelValue":e.onUpdateFilters,"onUpdate:filtersLength":e.onUpdateFiltersLength},{default:l(n=>[c(e.$slots,"filters",pe(me(n)))]),_:3},8,["keys","reset","model-value","shareable","onUpdate:modelValue","onUpdate:filtersLength"])):P("",!0),b("div",{class:u(e.$style["sort-and-filter"])},[f(C,{modelValue:e.sortBy,"onUpdate:modelValue":s[0]||(s[0]=n=>e.sortBy=n),"data-test-id":"resources-list-sort"},{default:l(()=>[(i(!0),h(q,null,ye(e.sortOptions,n=>(i(),g(V,{key:n,"data-test-id":"resources-list-sort-item",value:n,label:e.i18n.baseText(`${e.resourceKey}.sort.${n}`)},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])],2)],2),c(e.$slots,"add-button",{disabled:e.disabled},()=>[f(y,{size:"large",disabled:e.disabled,"data-test-id":"resources-list-add",onClick:e.onAddButtonClick},{default:l(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.add`)),1)]),_:1},8,["disabled","onClick"])])],2),c(e.$slots,"callout"),e.showFiltersDropdown?Q((i(),h("div",We,[f(D,{bold:!1},{default:l(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.filters.active`))+" ",1),f(U,{"data-test-id":"workflows-filter-reset",size:"small",onClick:e.resetFilters},{default:l(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.filters.active.reset`)),1)]),_:1},8,["onClick"])]),_:1})],512)),[[J,e.hasFilters]]):P("",!0),qe]),default:l(()=>[c(e.$slots,"preamble"),e.filteredAndSortedResources.length>0?(i(),h("div",{key:0,ref:"listWrapperRef",class:u(e.$style.listWrapper)},[e.type==="list"?(i(),g(K,{key:0,"data-test-id":"resources-list",items:e.filteredAndSortedResources,"item-size":e.itemSize(),"item-key":"id"},{default:l(({item:n,updateItemSize:v})=>[c(e.$slots,"default",{data:n,updateItemSize:v})]),postListContent:l(()=>[c(e.$slots,"postListContent")]),_:3},8,["items","item-size"])):P("",!0),e.type==="datatable"?(i(),g(N,{key:1,"data-test-id":"resources-table",class:u(e.$style.datatable),columns:e.getColumns(),rows:e.filteredAndSortedResources,"current-page":e.currentPage,"rows-per-page":e.rowsPerPage,"onUpdate:currentPage":e.setCurrentPage,"onUpdate:rowsPerPage":e.setRowsPerPage},{row:l(({columns:n,row:v})=>[c(e.$slots,"default",{data:v,columns:n})]),_:3},8,["class","columns","rows","current-page","rows-per-page","onUpdate:currentPage","onUpdate:rowsPerPage"])):P("",!0)],2)):(i(),g(O,{key:1,color:"text-base",size:"medium","data-test-id":"resources-list-empty"},{default:l(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.noResults`)),1)]),_:1})),c(e.$slots,"postamble")]),_:3},8,["overflow"]))],64))]),_:3})}const Qe={$style:Ee},xe=M(Re,[["render",Ge],["__cssModules",Qe]]);export{xe as R};
2
- //# sourceMappingURL=ResourcesListLayout-S53Q3neu.js.map
1
+ import{m as G}from"./pinia-hqNpa1CE.js";import{i as se,dT as re,E as oe,o as ae,d as le,a as ne,w as ie,F as de}from"./index-6ulnOLCO.js";import{G as B,l as i,m as h,H as c,p as b,I as u,Q as P,M as g,O as l,T as f,V as Q,U as J,S as F,R as k,ag as r,az as ue,r as w,e as W,d as T,b as ce,n as fe,ab as pe,al as me,F as q,a7 as ye}from"./vendor-qzAIxxHa.js";import{_ as M}from"./n8n-roXSR3ff.js";const he=B({name:"PageViewLayout",data(){return{loading:!1}},computed:{...G(se)}}),ge="_wrapper_u24kg_1",$e="_content_u24kg_12",ve={wrapper:ge,content:$e};function we(e,s,p,L,j,A){return i(),h("div",{class:u(e.$style.wrapper)},[c(e.$slots,"header"),b("main",{class:u(e.$style.content)},[c(e.$slots,"default")],2)],2)}const be={$style:ve},_e=M(he,[["render",we],["__cssModules",be]]),Pe=B({props:{overflow:{type:Boolean,default:!1}}}),Fe="_wrapper_183my_1",ke="_overflow_183my_6",je="_list_183my_6",Se="_body_183my_6",Ve={wrapper:Fe,overflow:ke,list:je,body:Se};function Ce(e,s,p,L,j,A){return i(),h("div",{class:u({[e.$style.wrapper]:!0,[e.$style.overflow]:e.overflow})},[b("div",{class:u(e.$style.list)},[e.$slots.header?(i(),h("div",{key:0,class:u(e.$style.header)},[c(e.$slots,"header")],2)):P("",!0),b("div",{class:u(e.$style.body)},[c(e.$slots,"default")],2)],2)],2)}const Le={$style:Ve},Ae=M(Pe,[["render",Ce],["__cssModules",Le]]),Ue=B({components:{ProjectSharing:re},props:{modelValue:{type:Object,default:()=>({})},keys:{type:Array,default:()=>[]},shareable:{type:Boolean,default:!0},reset:{type:Function,default:()=>{}}},data(){return{EnterpriseEditionFeature:oe,selectedProject:null}},computed:{...G(ae),filtersLength(){let e=0;return this.keys.forEach(s=>{if(s==="search")return;const p=this.modelValue[s];e+=(Array.isArray(p)?p.length>0:p!=="")?1:0}),e},hasFilters(){return this.filtersLength>0}},watch:{filtersLength(e){this.$emit("update:filtersLength",e)}},async beforeMount(){await this.projectsStore.getAllProjects(),this.selectedProject=this.projectsStore.projects.find(e=>e.id===this.modelValue.homeProject)??null},methods:{setKeyValue(e,s){const p={...this.modelValue,[e]:s};this.$emit("update:modelValue",p)},resetFilters(){if(this.reset)this.reset();else{const e={...this.modelValue};this.keys.forEach(s=>{e[s]=Array.isArray(this.modelValue[s])?[]:""}),this.$emit("update:modelValue",e)}this.selectedProject=null}}}),Te={"filter-button":"_filter-button_91qwg_1","filters-dropdown":"_filters-dropdown_91qwg_6","filters-dropdown-footer":"_filters-dropdown-footer_91qwg_11"};function De(e,s,p,L,j,A){const $=r("n8n-badge"),S=r("n8n-button"),m=r("n8n-input-label"),_=r("ProjectSharing"),o=r("enterprise-edition"),V=r("n8n-link"),C=r("n8n-popover");return i(),g(C,{trigger:"click",width:"304",size:"large"},{reference:l(()=>[f(S,{icon:"filter",type:"tertiary",active:e.hasFilters,class:u(e.$style["filter-button"]),"data-test-id":"resources-list-filters-trigger"},{default:l(()=>[Q(f($,{theme:"primary",class:"mr-4xs"},{default:l(()=>[F(k(e.filtersLength),1)]),_:1},512),[[J,e.filtersLength>0]]),F(" "+k(e.$locale.baseText("forms.resourceFiltersDropdown.filters")),1)]),_:1},8,["active","class"])]),default:l(()=>[b("div",{class:u(e.$style["filters-dropdown"]),"data-test-id":"resources-list-filters-dropdown"},[c(e.$slots,"default",{filters:e.modelValue,setKeyValue:e.setKeyValue}),e.shareable&&e.projectsStore.isProjectHome?(i(),g(o,{key:0,features:[e.EnterpriseEditionFeature.Sharing]},{default:l(()=>[f(m,{label:e.$locale.baseText("forms.resourceFiltersDropdown.owner"),bold:!1,size:"small",color:"text-base",class:"mb-3xs"},null,8,["label"]),f(_,{modelValue:e.selectedProject,"onUpdate:modelValue":[s[0]||(s[0]=y=>e.selectedProject=y),s[1]||(s[1]=y=>e.setKeyValue("homeProject",y.id))],class:"pt-2xs",projects:e.projectsStore.projects,placeholder:e.$locale.baseText("forms.resourceFiltersDropdown.owner.placeholder"),"empty-options-text":e.$locale.baseText("projects.sharing.noMatchingProjects")},null,8,["modelValue","projects","placeholder","empty-options-text"])]),_:1},8,["features"])):P("",!0),e.hasFilters?(i(),h("div",{key:1,class:u([e.$style["filters-dropdown-footer"],"mt-s"])},[f(V,{onClick:e.resetFilters},{default:l(()=>[F(k(e.$locale.baseText("forms.resourceFiltersDropdown.reset")),1)]),_:1},8,["onClick"])],2)):P("",!0)],2)]),_:3})}const Ke={$style:Te},ze=M(Ue,[["render",De],["__cssModules",Ke]]),Re=B({name:"ResourcesListLayout",components:{PageViewLayout:_e,PageViewLayoutList:Ae,ResourceFiltersDropdown:ze},props:{resourceKey:{type:String,default:""},displayName:{type:Function,default:e=>e.name},resources:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},initialize:{type:Function,default:()=>async()=>{}},filters:{type:Object,default:()=>({search:"",homeProject:""})},additionalFiltersHandler:{type:Function,required:!1,default:void 0},shareable:{type:Boolean,default:!0},showFiltersDropdown:{type:Boolean,default:!0},sortFns:{type:Object,default:()=>({})},sortOptions:{type:Array,default:()=>["lastUpdated","lastCreated","nameAsc","nameDesc"]},type:{type:String,default:"list"},typeProps:{type:Object,default:()=>({itemSize:80})}},emits:["update:filters","click:add","sort"],setup(e,{emit:s}){const p=ue(),L=ie(),{callDebounced:j}=le(),A=ne(),$=de(),S=w(!0),m=w(e.sortOptions[0]),_=w(!1),o=w(e.filters),V=w(1),C=w(10),y=w(!1),U=w(null),D=W(()=>Object.keys(o.value)),K=W(()=>e.resources.filter(d=>{let a=!0;if(o.value.homeProject&&(a=a&&!!(d.homeProject&&d.homeProject.id===o.value.homeProject)),o.value.search){const z=o.value.search.toLowerCase();a=a&&e.displayName(d).toLowerCase().includes(z)}return e.additionalFiltersHandler&&(a=e.additionalFiltersHandler(d,o.value,a)),a}).sort((d,a)=>{switch(m.value){case"lastUpdated":return e.sortFns.lastUpdated?e.sortFns.lastUpdated(d,a):new Date(a.updatedAt).valueOf()-new Date(d.updatedAt).valueOf();case"lastCreated":return e.sortFns.lastCreated?e.sortFns.lastCreated(d,a):new Date(a.createdAt).valueOf()-new Date(d.createdAt).valueOf();case"nameAsc":return e.sortFns.nameAsc?e.sortFns.nameAsc(d,a):e.displayName(d).trim().localeCompare(e.displayName(a).trim());case"nameDesc":return e.sortFns.nameDesc?e.sortFns.nameDesc(d,a):e.displayName(a).trim().localeCompare(e.displayName(d).trim());default:return e.sortFns[m.value]?e.sortFns[m.value](d,a):0}})),N=()=>{U.value&&U.value.focus()},O=()=>!!D.value.find(t=>t!=="search"&&(Array.isArray(e.filters[t])?e.filters[t].length>0:e.filters[t]!=="")),E=t=>{C.value=t},H=t=>{V.value=t},n=t=>{if(y.value){if(t!=="reset")return;setTimeout(()=>y.value=!1,1500)}const d=o.value,a=[],z=[];Object.keys(d).forEach(R=>{d[R]&&(a.push(R),z.push(R==="search"?null:d[R]))}),$.track(`User set filters in ${e.resourceKey} list`,{filters_set:a,filter_values:z,[`${e.resourceKey}_total_in_view`]:e.resources.length,[`${e.resourceKey}_after_filtering`]:K.value.length})},v=t=>{s("click:add",t)},X=t=>{s("update:filters",t)},I=()=>{Object.keys(o.value).forEach(t=>{o.value[t]=Array.isArray(o.value[t])?[]:""}),y.value=!0,n("reset"),s("update:filters",o.value)},Y=()=>"itemSize"in e.typeProps?e.typeProps.itemSize:0,Z=()=>"columns"in e.typeProps?e.typeProps.columns:{},x=()=>{$.track(`User changed sorting in ${e.resourceKey} list`,{sorting:m.value})},ee=t=>{_.value=t>0},te=t=>{o.value.search=t,s("update:filters",o.value)};return T(()=>e.filters,t=>{o.value=t}),T(()=>o.value.homeProject,()=>{n("homeProject")}),T(()=>o.value.search,()=>j(n,{debounceTime:1e3,trailing:!0},"search")),T(()=>m.value,t=>{s("sort",t),x()}),T(()=>{var t;return(t=p==null?void 0:p.params)==null?void 0:t.projectId},()=>{I()}),ce(async()=>{await e.initialize(),S.value=!1,await fe(),N(),O()&&(_.value=!0)}),{loading:S,i18n:L,search:U,usersStore:A,filterKeys:D,currentPage:V,rowsPerPage:C,filteredAndSortedResources:K,hasFilters:_,sortBy:m,resettingFilters:y,filtersModel:o,sendFiltersTelemetry:n,getColumns:Z,itemSize:Y,onAddButtonClick:v,onUpdateFiltersLength:ee,onUpdateFilters:X,resetFilters:I,callDebounced:j,setCurrentPage:H,setRowsPerPage:E,onSearch:te}}}),Be="_filters_18koc_1",Me="_search_18koc_16",Ne="_listWrapper_18koc_20",Oe="_datatable_18koc_38",Ee={"filters-row":"_filters-row_18koc_1",filters:Be,search:Me,listWrapper:Ne,"sort-and-filter":"_sort-and-filter_18koc_26","header-loading":"_header-loading_18koc_30","card-loading":"_card-loading_18koc_34",datatable:Oe},He={key:0},Ie={key:0},We={key:0,class:"mt-xs"},qe=b("div",{class:"pb-xs"},null,-1);function Ge(e,s,p,L,j,A){const $=r("n8n-loading"),S=r("n8n-action-box"),m=r("n8n-icon"),_=r("n8n-input"),o=r("ResourceFiltersDropdown"),V=r("n8n-option"),C=r("n8n-select"),y=r("n8n-button"),U=r("n8n-link"),D=r("n8n-info-tip"),K=r("n8n-recycle-scroller"),N=r("n8n-datatable"),O=r("n8n-text"),E=r("PageViewLayoutList"),H=r("PageViewLayout");return i(),g(H,null,{header:l(()=>[c(e.$slots,"header")]),default:l(()=>[e.loading?(i(),h("div",He,[f($,{class:u([e.$style["header-loading"],"mb-l"]),variant:"custom"},null,8,["class"]),f($,{class:u([e.$style["card-loading"],"mb-2xs"]),variant:"custom"},null,8,["class"]),f($,{class:u(e.$style["card-loading"]),variant:"custom"},null,8,["class"])])):(i(),h(q,{key:1},[e.resources.length===0?(i(),h("div",Ie,[c(e.$slots,"empty",{},()=>{var n,v;return[f(S,{"data-test-id":"empty-resources-list",emoji:"👋",heading:e.i18n.baseText((n=e.usersStore.currentUser)!=null&&n.firstName?`${e.resourceKey}.empty.heading`:`${e.resourceKey}.empty.heading.userNotSetup`,{interpolate:{name:((v=e.usersStore.currentUser)==null?void 0:v.firstName)??""}}),description:e.i18n.baseText(`${e.resourceKey}.empty.description`),"button-text":e.i18n.baseText(`${e.resourceKey}.empty.button`),"button-type":"secondary","onClick:button":e.onAddButtonClick},null,8,["heading","description","button-text","onClick:button"])]})])):(i(),g(E,{key:1,overflow:e.type!=="list"},{header:l(()=>[b("div",{class:u(e.$style["filters-row"])},[b("div",{class:u(e.$style.filters)},[f(_,{ref:"search","model-value":e.filtersModel.search,class:u([e.$style.search,"mr-2xs"]),placeholder:e.i18n.baseText(`${e.resourceKey}.search.placeholder`),clearable:"","data-test-id":"resources-list-search","onUpdate:modelValue":e.onSearch},{prefix:l(()=>[f(m,{icon:"search"})]),_:1},8,["model-value","class","placeholder","onUpdate:modelValue"]),e.showFiltersDropdown?(i(),g(o,{key:0,keys:e.filterKeys,reset:e.resetFilters,"model-value":e.filtersModel,shareable:e.shareable,"onUpdate:modelValue":e.onUpdateFilters,"onUpdate:filtersLength":e.onUpdateFiltersLength},{default:l(n=>[c(e.$slots,"filters",pe(me(n)))]),_:3},8,["keys","reset","model-value","shareable","onUpdate:modelValue","onUpdate:filtersLength"])):P("",!0),b("div",{class:u(e.$style["sort-and-filter"])},[f(C,{modelValue:e.sortBy,"onUpdate:modelValue":s[0]||(s[0]=n=>e.sortBy=n),"data-test-id":"resources-list-sort"},{default:l(()=>[(i(!0),h(q,null,ye(e.sortOptions,n=>(i(),g(V,{key:n,"data-test-id":"resources-list-sort-item",value:n,label:e.i18n.baseText(`${e.resourceKey}.sort.${n}`)},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])],2)],2),c(e.$slots,"add-button",{disabled:e.disabled},()=>[f(y,{size:"large",disabled:e.disabled,"data-test-id":"resources-list-add",onClick:e.onAddButtonClick},{default:l(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.add`)),1)]),_:1},8,["disabled","onClick"])])],2),c(e.$slots,"callout"),e.showFiltersDropdown?Q((i(),h("div",We,[f(D,{bold:!1},{default:l(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.filters.active`))+" ",1),f(U,{"data-test-id":"workflows-filter-reset",size:"small",onClick:e.resetFilters},{default:l(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.filters.active.reset`)),1)]),_:1},8,["onClick"])]),_:1})],512)),[[J,e.hasFilters]]):P("",!0),qe]),default:l(()=>[c(e.$slots,"preamble"),e.filteredAndSortedResources.length>0?(i(),h("div",{key:0,ref:"listWrapperRef",class:u(e.$style.listWrapper)},[e.type==="list"?(i(),g(K,{key:0,"data-test-id":"resources-list",items:e.filteredAndSortedResources,"item-size":e.itemSize(),"item-key":"id"},{default:l(({item:n,updateItemSize:v})=>[c(e.$slots,"default",{data:n,updateItemSize:v})]),postListContent:l(()=>[c(e.$slots,"postListContent")]),_:3},8,["items","item-size"])):P("",!0),e.type==="datatable"?(i(),g(N,{key:1,"data-test-id":"resources-table",class:u(e.$style.datatable),columns:e.getColumns(),rows:e.filteredAndSortedResources,"current-page":e.currentPage,"rows-per-page":e.rowsPerPage,"onUpdate:currentPage":e.setCurrentPage,"onUpdate:rowsPerPage":e.setRowsPerPage},{row:l(({columns:n,row:v})=>[c(e.$slots,"default",{data:v,columns:n})]),_:3},8,["class","columns","rows","current-page","rows-per-page","onUpdate:currentPage","onUpdate:rowsPerPage"])):P("",!0)],2)):(i(),g(O,{key:1,color:"text-base",size:"medium","data-test-id":"resources-list-empty"},{default:l(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.noResults`)),1)]),_:1})),c(e.$slots,"postamble")]),_:3},8,["overflow"]))],64))]),_:3})}const Qe={$style:Ee},xe=M(Re,[["render",Ge],["__cssModules",Qe]]);export{xe as R};
2
+ //# sourceMappingURL=ResourcesListLayout-zQLxB7dP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResourcesListLayout-S53Q3neu.js","sources":["../../src/components/layouts/PageViewLayout.vue","../../src/components/layouts/PageViewLayoutList.vue","../../src/components/forms/ResourceFiltersDropdown.vue","../../src/components/layouts/ResourcesListLayout.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.wrapper\">\n\t\t<slot name=\"header\" />\n\t\t<main :class=\"$style.content\">\n\t\t\t<slot />\n\t\t</main>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\n\nexport default defineComponent({\n\tname: 'PageViewLayout',\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUIStore),\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.wrapper {\n\tdisplay: grid;\n\theight: 100%;\n\twidth: 100%;\n\tmax-width: 1280px;\n\tgrid-template-rows: auto 1fr;\n\tbox-sizing: border-box;\n\talign-content: start;\n\tpadding: var(--spacing-l) var(--spacing-2xl) 0;\n}\n\n.content {\n\tdisplay: grid;\n\theight: 100%;\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n\tprops: {\n\t\toverflow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n});\n</script>\n\n<template>\n\t<div :class=\"{ [$style.wrapper]: true, [$style.overflow]: overflow }\">\n\t\t<div :class=\"$style.list\">\n\t\t\t<div v-if=\"$slots.header\" :class=\"$style.header\">\n\t\t\t\t<slot name=\"header\" />\n\t\t\t</div>\n\t\t\t<div :class=\"$style.body\">\n\t\t\t\t<slot />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.wrapper {\n\tdisplay: grid;\n\theight: 100%;\n}\n\n.overflow {\n\t.list {\n\t\t.body {\n\t\t\toverflow: auto;\n\t\t}\n\t}\n}\n\n.list {\n\tdisplay: grid;\n\tgrid-template-rows: auto 1fr;\n\theight: 100%;\n\t.body {\n\t\tposition: relative;\n\t\theight: 100%;\n\t}\n}\n</style>\n","<template>\n\t<n8n-popover trigger=\"click\" width=\"304\" size=\"large\">\n\t\t<template #reference>\n\t\t\t<n8n-button\n\t\t\t\ticon=\"filter\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:active=\"hasFilters\"\n\t\t\t\t:class=\"$style['filter-button']\"\n\t\t\t\tdata-test-id=\"resources-list-filters-trigger\"\n\t\t\t>\n\t\t\t\t<n8n-badge v-show=\"filtersLength > 0\" theme=\"primary\" class=\"mr-4xs\">\n\t\t\t\t\t{{ filtersLength }}\n\t\t\t\t</n8n-badge>\n\t\t\t\t{{ $locale.baseText('forms.resourceFiltersDropdown.filters') }}\n\t\t\t</n8n-button>\n\t\t</template>\n\t\t<div :class=\"$style['filters-dropdown']\" data-test-id=\"resources-list-filters-dropdown\">\n\t\t\t<slot :filters=\"modelValue\" :set-key-value=\"setKeyValue\" />\n\t\t\t<enterprise-edition\n\t\t\t\tv-if=\"shareable && projectsStore.isProjectHome\"\n\t\t\t\t:features=\"[EnterpriseEditionFeature.Sharing]\"\n\t\t\t>\n\t\t\t\t<n8n-input-label\n\t\t\t\t\t:label=\"$locale.baseText('forms.resourceFiltersDropdown.owner')\"\n\t\t\t\t\t:bold=\"false\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\tclass=\"mb-3xs\"\n\t\t\t\t/>\n\t\t\t\t<ProjectSharing\n\t\t\t\t\tv-model=\"selectedProject\"\n\t\t\t\t\tclass=\"pt-2xs\"\n\t\t\t\t\t:projects=\"projectsStore.projects\"\n\t\t\t\t\t:placeholder=\"$locale.baseText('forms.resourceFiltersDropdown.owner.placeholder')\"\n\t\t\t\t\t:empty-options-text=\"$locale.baseText('projects.sharing.noMatchingProjects')\"\n\t\t\t\t\t@update:model-value=\"setKeyValue('homeProject', ($event as ProjectSharingData).id)\"\n\t\t\t\t/>\n\t\t\t</enterprise-edition>\n\t\t\t<div v-if=\"hasFilters\" :class=\"[$style['filters-dropdown-footer'], 'mt-s']\">\n\t\t\t\t<n8n-link @click=\"resetFilters\">\n\t\t\t\t\t{{ $locale.baseText('forms.resourceFiltersDropdown.reset') }}\n\t\t\t\t</n8n-link>\n\t\t\t</div>\n\t\t</div>\n\t</n8n-popover>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { EnterpriseEditionFeature } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useProjectsStore } from '@/features/projects/projects.store';\nimport type { PropType } from 'vue';\nimport type { ProjectSharingData } from '@/features/projects/projects.types';\nimport ProjectSharing from '@/features/projects/components/ProjectSharing.vue';\n\nexport type IResourceFiltersType = Record<string, boolean | string | string[]>;\n\nexport default defineComponent({\n\tcomponents: {\n\t\tProjectSharing,\n\t},\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType<IResourceFiltersType>,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tkeys: {\n\t\t\ttype: Array as PropType<string[]>,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshareable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\treset: {\n\t\t\ttype: Function as PropType<() => void>,\n\t\t\tdefault: () => {},\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tEnterpriseEditionFeature,\n\t\t\tselectedProject: null as ProjectSharingData | null,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useProjectsStore),\n\t\tfiltersLength(): number {\n\t\t\tlet length = 0;\n\n\t\t\tthis.keys.forEach((key) => {\n\t\t\t\tif (key === 'search') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst value = this.modelValue[key];\n\t\t\t\tlength += (Array.isArray(value) ? value.length > 0 : value !== '') ? 1 : 0;\n\t\t\t});\n\n\t\t\treturn length;\n\t\t},\n\t\thasFilters(): boolean {\n\t\t\treturn this.filtersLength > 0;\n\t\t},\n\t},\n\twatch: {\n\t\tfiltersLength(value: number) {\n\t\t\tthis.$emit('update:filtersLength', value);\n\t\t},\n\t},\n\tasync beforeMount() {\n\t\tawait this.projectsStore.getAllProjects();\n\t\tthis.selectedProject =\n\t\t\tthis.projectsStore.projects.find((project) => project.id === this.modelValue.homeProject) ??\n\t\t\tnull;\n\t},\n\tmethods: {\n\t\tsetKeyValue(key: string, value: unknown) {\n\t\t\tconst filters = {\n\t\t\t\t...this.modelValue,\n\t\t\t\t[key]: value,\n\t\t\t};\n\n\t\t\tthis.$emit('update:modelValue', filters);\n\t\t},\n\t\tresetFilters() {\n\t\t\tif (this.reset) {\n\t\t\t\tthis.reset();\n\t\t\t} else {\n\t\t\t\tconst filters = { ...this.modelValue };\n\n\t\t\t\tthis.keys.forEach((key) => {\n\t\t\t\t\tfilters[key] = Array.isArray(this.modelValue[key]) ? [] : '';\n\t\t\t\t});\n\n\t\t\t\tthis.$emit('update:modelValue', filters);\n\t\t\t}\n\t\t\tthis.selectedProject = null;\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.filter-button {\n\theight: 40px;\n\talign-items: center;\n}\n\n.filters-dropdown {\n\twidth: 280px;\n\tpadding-bottom: var(--spacing-s);\n}\n\n.filters-dropdown-footer {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n}\n</style>\n","<template>\n\t<PageViewLayout>\n\t\t<template #header> <slot name=\"header\" /> </template>\n\t\t<div v-if=\"loading\">\n\t\t\t<n8n-loading :class=\"[$style['header-loading'], 'mb-l']\" variant=\"custom\" />\n\t\t\t<n8n-loading :class=\"[$style['card-loading'], 'mb-2xs']\" variant=\"custom\" />\n\t\t\t<n8n-loading :class=\"$style['card-loading']\" variant=\"custom\" />\n\t\t</div>\n\t\t<template v-else>\n\t\t\t<div v-if=\"resources.length === 0\">\n\t\t\t\t<slot name=\"empty\">\n\t\t\t\t\t<n8n-action-box\n\t\t\t\t\t\tdata-test-id=\"empty-resources-list\"\n\t\t\t\t\t\temoji=\"👋\"\n\t\t\t\t\t\t:heading=\"\n\t\t\t\t\t\t\ti18n.baseText(\n\t\t\t\t\t\t\t\tusersStore.currentUser?.firstName\n\t\t\t\t\t\t\t\t\t? (`${resourceKey}.empty.heading` as BaseTextKey)\n\t\t\t\t\t\t\t\t\t: (`${resourceKey}.empty.heading.userNotSetup` as BaseTextKey),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tinterpolate: { name: usersStore.currentUser?.firstName ?? '' },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t:description=\"i18n.baseText(`${resourceKey}.empty.description` as BaseTextKey)\"\n\t\t\t\t\t\t:button-text=\"i18n.baseText(`${resourceKey}.empty.button` as BaseTextKey)\"\n\t\t\t\t\t\tbutton-type=\"secondary\"\n\t\t\t\t\t\t@click:button=\"onAddButtonClick\"\n\t\t\t\t\t/>\n\t\t\t\t</slot>\n\t\t\t</div>\n\t\t\t<PageViewLayoutList v-else :overflow=\"type !== 'list'\">\n\t\t\t\t<template #header>\n\t\t\t\t\t<div :class=\"$style['filters-row']\">\n\t\t\t\t\t\t<div :class=\"$style.filters\">\n\t\t\t\t\t\t\t<n8n-input\n\t\t\t\t\t\t\t\tref=\"search\"\n\t\t\t\t\t\t\t\t:model-value=\"filtersModel.search\"\n\t\t\t\t\t\t\t\t:class=\"[$style['search'], 'mr-2xs']\"\n\t\t\t\t\t\t\t\t:placeholder=\"i18n.baseText(`${resourceKey}.search.placeholder` as BaseTextKey)\"\n\t\t\t\t\t\t\t\tclearable\n\t\t\t\t\t\t\t\tdata-test-id=\"resources-list-search\"\n\t\t\t\t\t\t\t\t@update:model-value=\"onSearch\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<template #prefix>\n\t\t\t\t\t\t\t\t\t<n8n-icon icon=\"search\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</n8n-input>\n\t\t\t\t\t\t\t<ResourceFiltersDropdown\n\t\t\t\t\t\t\t\tv-if=\"showFiltersDropdown\"\n\t\t\t\t\t\t\t\t:keys=\"filterKeys\"\n\t\t\t\t\t\t\t\t:reset=\"resetFilters\"\n\t\t\t\t\t\t\t\t:model-value=\"filtersModel\"\n\t\t\t\t\t\t\t\t:shareable=\"shareable\"\n\t\t\t\t\t\t\t\t@update:model-value=\"onUpdateFilters\"\n\t\t\t\t\t\t\t\t@update:filters-length=\"onUpdateFiltersLength\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<template #default=\"resourceFiltersSlotProps\">\n\t\t\t\t\t\t\t\t\t<slot name=\"filters\" v-bind=\"resourceFiltersSlotProps\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</ResourceFiltersDropdown>\n\t\t\t\t\t\t\t<div :class=\"$style['sort-and-filter']\">\n\t\t\t\t\t\t\t\t<n8n-select v-model=\"sortBy\" data-test-id=\"resources-list-sort\">\n\t\t\t\t\t\t\t\t\t<n8n-option\n\t\t\t\t\t\t\t\t\t\tv-for=\"sortOption in sortOptions\"\n\t\t\t\t\t\t\t\t\t\t:key=\"sortOption\"\n\t\t\t\t\t\t\t\t\t\tdata-test-id=\"resources-list-sort-item\"\n\t\t\t\t\t\t\t\t\t\t:value=\"sortOption\"\n\t\t\t\t\t\t\t\t\t\t:label=\"i18n.baseText(`${resourceKey}.sort.${sortOption}` as BaseTextKey)\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</n8n-select>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<slot name=\"add-button\" :disabled=\"disabled\">\n\t\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t\t\t\t\tdata-test-id=\"resources-list-add\"\n\t\t\t\t\t\t\t\t@click=\"onAddButtonClick\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.add` as BaseTextKey) }}\n\t\t\t\t\t\t\t</n8n-button>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<slot name=\"callout\"></slot>\n\n\t\t\t\t\t<div v-if=\"showFiltersDropdown\" v-show=\"hasFilters\" class=\"mt-xs\">\n\t\t\t\t\t\t<n8n-info-tip :bold=\"false\">\n\t\t\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.filters.active` as BaseTextKey) }}\n\t\t\t\t\t\t\t<n8n-link data-test-id=\"workflows-filter-reset\" size=\"small\" @click=\"resetFilters\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.filters.active.reset` as BaseTextKey) }}\n\t\t\t\t\t\t\t</n8n-link>\n\t\t\t\t\t\t</n8n-info-tip>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"pb-xs\" />\n\t\t\t\t</template>\n\n\t\t\t\t<slot name=\"preamble\" />\n\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"filteredAndSortedResources.length > 0\"\n\t\t\t\t\tref=\"listWrapperRef\"\n\t\t\t\t\t:class=\"$style.listWrapper\"\n\t\t\t\t>\n\t\t\t\t\t<n8n-recycle-scroller\n\t\t\t\t\t\tv-if=\"type === 'list'\"\n\t\t\t\t\t\tdata-test-id=\"resources-list\"\n\t\t\t\t\t\t:items=\"filteredAndSortedResources\"\n\t\t\t\t\t\t:item-size=\"itemSize()\"\n\t\t\t\t\t\titem-key=\"id\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #default=\"{ item, updateItemSize }\">\n\t\t\t\t\t\t\t<slot :data=\"item\" :update-item-size=\"updateItemSize\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template #postListContent>\n\t\t\t\t\t\t\t<slot name=\"postListContent\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</n8n-recycle-scroller>\n\t\t\t\t\t<n8n-datatable\n\t\t\t\t\t\tv-if=\"type === 'datatable'\"\n\t\t\t\t\t\tdata-test-id=\"resources-table\"\n\t\t\t\t\t\t:class=\"$style.datatable\"\n\t\t\t\t\t\t:columns=\"getColumns()\"\n\t\t\t\t\t\t:rows=\"filteredAndSortedResources\"\n\t\t\t\t\t\t:current-page=\"currentPage\"\n\t\t\t\t\t\t:rows-per-page=\"rowsPerPage\"\n\t\t\t\t\t\t@update:current-page=\"setCurrentPage\"\n\t\t\t\t\t\t@update:rows-per-page=\"setRowsPerPage\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #row=\"{ columns, row }\">\n\t\t\t\t\t\t\t<slot :data=\"row\" :columns=\"columns\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</n8n-datatable>\n\t\t\t\t</div>\n\n\t\t\t\t<n8n-text v-else color=\"text-base\" size=\"medium\" data-test-id=\"resources-list-empty\">\n\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.noResults` as BaseTextKey) }}\n\t\t\t\t</n8n-text>\n\n\t\t\t\t<slot name=\"postamble\" />\n\t\t\t</PageViewLayoutList>\n\t\t</template>\n\t</PageViewLayout>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, ref, onMounted, watch } from 'vue';\nimport type { PropType } from 'vue';\n\nimport type { ProjectSharingData } from '@/features/projects/projects.types';\nimport PageViewLayout from '@/components/layouts/PageViewLayout.vue';\nimport PageViewLayoutList from '@/components/layouts/PageViewLayoutList.vue';\nimport ResourceFiltersDropdown from '@/components/forms/ResourceFiltersDropdown.vue';\nimport { useUsersStore } from '@/stores/users.store';\nimport type { DatatableColumn } from 'n8n-design-system';\nimport { useI18n } from '@/composables/useI18n';\nimport { useDebounce } from '@/composables/useDebounce';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useRoute } from 'vue-router';\n\n// eslint-disable-next-line unused-imports/no-unused-imports, @typescript-eslint/no-unused-vars\nimport type { BaseTextKey } from '@/plugins/i18n';\n\nexport interface IResource {\n\tid: string;\n\tname: string;\n\tupdatedAt: string;\n\tcreatedAt: string;\n\thomeProject?: ProjectSharingData;\n}\n\ninterface IFilters {\n\tsearch: string;\n\thomeProject: string;\n\t[key: string]: boolean | string | string[];\n}\n\ntype IResourceKeyType = 'credentials' | 'workflows';\n\nexport default defineComponent({\n\tname: 'ResourcesListLayout',\n\tcomponents: {\n\t\tPageViewLayout,\n\t\tPageViewLayoutList,\n\t\tResourceFiltersDropdown,\n\t},\n\tprops: {\n\t\tresourceKey: {\n\t\t\ttype: String,\n\t\t\tdefault: '' as IResourceKeyType,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: Function as PropType<(resource: IResource) => string>,\n\t\t\tdefault: (resource: IResource) => resource.name,\n\t\t},\n\t\tresources: {\n\t\t\ttype: Array as PropType<IResource[]>,\n\t\t\tdefault: (): IResource[] => [],\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tinitialize: {\n\t\t\ttype: Function as PropType<() => Promise<void>>,\n\t\t\tdefault: () => async () => {},\n\t\t},\n\t\tfilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: (): IFilters => ({ search: '', homeProject: '' }),\n\t\t},\n\t\tadditionalFiltersHandler: {\n\t\t\ttype: Function,\n\t\t\trequired: false,\n\t\t\tdefault: undefined,\n\t\t},\n\t\tshareable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tshowFiltersDropdown: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tsortFns: {\n\t\t\ttype: Object as PropType<Record<string, (a: IResource, b: IResource) => number>>,\n\t\t\tdefault: (): Record<string, (a: IResource, b: IResource) => number> => ({}),\n\t\t},\n\t\tsortOptions: {\n\t\t\ttype: Array as PropType<string[]>,\n\t\t\tdefault: () => ['lastUpdated', 'lastCreated', 'nameAsc', 'nameDesc'],\n\t\t},\n\t\ttype: {\n\t\t\ttype: String as PropType<'datatable' | 'list'>,\n\t\t\tdefault: 'list',\n\t\t},\n\t\ttypeProps: {\n\t\t\ttype: Object as PropType<{ itemSize: number } | { columns: DatatableColumn[] }>,\n\t\t\tdefault: () => ({\n\t\t\t\titemSize: 80,\n\t\t\t}),\n\t\t},\n\t},\n\temits: ['update:filters', 'click:add', 'sort'],\n\tsetup(props, { emit }) {\n\t\tconst route = useRoute();\n\t\tconst i18n = useI18n();\n\t\tconst { callDebounced } = useDebounce();\n\t\tconst usersStore = useUsersStore();\n\t\tconst telemetry = useTelemetry();\n\n\t\tconst loading = ref(true);\n\t\tconst sortBy = ref(props.sortOptions[0]);\n\t\tconst hasFilters = ref(false);\n\t\tconst filtersModel = ref(props.filters);\n\t\tconst currentPage = ref(1);\n\t\tconst rowsPerPage = ref<number | '*'>(10);\n\t\tconst resettingFilters = ref(false);\n\t\tconst search = ref<HTMLElement | null>(null);\n\n\t\t//computed\n\n\t\tconst filterKeys = computed(() => {\n\t\t\treturn Object.keys(filtersModel.value);\n\t\t});\n\n\t\tconst filteredAndSortedResources = computed(() => {\n\t\t\tconst filtered = props.resources.filter((resource) => {\n\t\t\t\tlet matches = true;\n\n\t\t\t\tif (filtersModel.value.homeProject) {\n\t\t\t\t\tmatches =\n\t\t\t\t\t\tmatches &&\n\t\t\t\t\t\t!!(resource.homeProject && resource.homeProject.id === filtersModel.value.homeProject);\n\t\t\t\t}\n\n\t\t\t\tif (filtersModel.value.search) {\n\t\t\t\t\tconst searchString = filtersModel.value.search.toLowerCase();\n\t\t\t\t\tmatches = matches && props.displayName(resource).toLowerCase().includes(searchString);\n\t\t\t\t}\n\n\t\t\t\tif (props.additionalFiltersHandler) {\n\t\t\t\t\tmatches = props.additionalFiltersHandler(resource, filtersModel.value, matches);\n\t\t\t\t}\n\n\t\t\t\treturn matches;\n\t\t\t});\n\n\t\t\treturn filtered.sort((a, b) => {\n\t\t\t\tswitch (sortBy.value) {\n\t\t\t\t\tcase 'lastUpdated':\n\t\t\t\t\t\treturn props.sortFns.lastUpdated\n\t\t\t\t\t\t\t? props.sortFns.lastUpdated(a, b)\n\t\t\t\t\t\t\t: new Date(b.updatedAt).valueOf() - new Date(a.updatedAt).valueOf();\n\t\t\t\t\tcase 'lastCreated':\n\t\t\t\t\t\treturn props.sortFns.lastCreated\n\t\t\t\t\t\t\t? props.sortFns.lastCreated(a, b)\n\t\t\t\t\t\t\t: new Date(b.createdAt).valueOf() - new Date(a.createdAt).valueOf();\n\t\t\t\t\tcase 'nameAsc':\n\t\t\t\t\t\treturn props.sortFns.nameAsc\n\t\t\t\t\t\t\t? props.sortFns.nameAsc(a, b)\n\t\t\t\t\t\t\t: props.displayName(a).trim().localeCompare(props.displayName(b).trim());\n\t\t\t\t\tcase 'nameDesc':\n\t\t\t\t\t\treturn props.sortFns.nameDesc\n\t\t\t\t\t\t\t? props.sortFns.nameDesc(a, b)\n\t\t\t\t\t\t\t: props.displayName(b).trim().localeCompare(props.displayName(a).trim());\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn props.sortFns[sortBy.value] ? props.sortFns[sortBy.value](a, b) : 0;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t//methods\n\n\t\tconst focusSearchInput = () => {\n\t\t\tif (search.value) {\n\t\t\t\tsearch.value.focus();\n\t\t\t}\n\t\t};\n\n\t\tconst hasAppliedFilters = (): boolean => {\n\t\t\treturn !!filterKeys.value.find(\n\t\t\t\t(key) =>\n\t\t\t\t\tkey !== 'search' &&\n\t\t\t\t\t(Array.isArray(props.filters[key])\n\t\t\t\t\t\t? props.filters[key].length > 0\n\t\t\t\t\t\t: props.filters[key] !== ''),\n\t\t\t);\n\t\t};\n\n\t\tconst setRowsPerPage = (numberOfRowsPerPage: number | '*') => {\n\t\t\trowsPerPage.value = numberOfRowsPerPage;\n\t\t};\n\n\t\tconst setCurrentPage = (page: number) => {\n\t\t\tcurrentPage.value = page;\n\t\t};\n\n\t\tconst sendFiltersTelemetry = (source: string) => {\n\t\t\t// Prevent sending multiple telemetry events when resetting filters\n\t\t\t// Timeout is required to wait for search debounce to be over\n\t\t\tif (resettingFilters.value) {\n\t\t\t\tif (source !== 'reset') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetTimeout(() => (resettingFilters.value = false), 1500);\n\t\t\t}\n\n\t\t\tconst filters = filtersModel.value as Record<string, string[] | string | boolean>;\n\t\t\tconst filtersSet: string[] = [];\n\t\t\tconst filterValues: Array<string[] | string | boolean | null> = [];\n\n\t\t\tObject.keys(filters).forEach((key) => {\n\t\t\t\tif (filters[key]) {\n\t\t\t\t\tfiltersSet.push(key);\n\t\t\t\t\tfilterValues.push(key === 'search' ? null : filters[key]);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttelemetry.track(`User set filters in ${props.resourceKey} list`, {\n\t\t\t\tfilters_set: filtersSet,\n\t\t\t\tfilter_values: filterValues,\n\t\t\t\t[`${props.resourceKey}_total_in_view`]: props.resources.length,\n\t\t\t\t[`${props.resourceKey}_after_filtering`]: filteredAndSortedResources.value.length,\n\t\t\t});\n\t\t};\n\n\t\tconst onAddButtonClick = (e: Event) => {\n\t\t\temit('click:add', e);\n\t\t};\n\n\t\tconst onUpdateFilters = (e: Event) => {\n\t\t\temit('update:filters', e);\n\t\t};\n\n\t\tconst resetFilters = () => {\n\t\t\tObject.keys(filtersModel.value).forEach((key) => {\n\t\t\t\tfiltersModel.value[key] = Array.isArray(filtersModel.value[key]) ? [] : '';\n\t\t\t});\n\n\t\t\tresettingFilters.value = true;\n\t\t\tsendFiltersTelemetry('reset');\n\t\t\temit('update:filters', filtersModel.value);\n\t\t};\n\n\t\tconst itemSize = () => {\n\t\t\tif ('itemSize' in props.typeProps) {\n\t\t\t\treturn props.typeProps.itemSize;\n\t\t\t}\n\t\t\treturn 0;\n\t\t};\n\n\t\tconst getColumns = () => {\n\t\t\tif ('columns' in props.typeProps) {\n\t\t\t\treturn props.typeProps.columns;\n\t\t\t}\n\t\t\treturn {};\n\t\t};\n\n\t\tconst sendSortingTelemetry = () => {\n\t\t\ttelemetry.track(`User changed sorting in ${props.resourceKey} list`, {\n\t\t\t\tsorting: sortBy.value,\n\t\t\t});\n\t\t};\n\n\t\tconst onUpdateFiltersLength = (length: number) => {\n\t\t\thasFilters.value = length > 0;\n\t\t};\n\n\t\tconst onSearch = (s: string) => {\n\t\t\tfiltersModel.value.search = s;\n\t\t\temit('update:filters', filtersModel.value);\n\t\t};\n\n\t\t//watchers\n\n\t\twatch(\n\t\t\t() => props.filters,\n\t\t\t(value) => {\n\t\t\t\tfiltersModel.value = value;\n\t\t\t},\n\t\t);\n\n\t\twatch(\n\t\t\t() => filtersModel.value.homeProject,\n\t\t\t() => {\n\t\t\t\tsendFiltersTelemetry('homeProject');\n\t\t\t},\n\t\t);\n\n\t\twatch(\n\t\t\t() => filtersModel.value.search,\n\t\t\t() => callDebounced(sendFiltersTelemetry, { debounceTime: 1000, trailing: true }, 'search'),\n\t\t);\n\n\t\twatch(\n\t\t\t() => sortBy.value,\n\t\t\t(newValue) => {\n\t\t\t\temit('sort', newValue);\n\t\t\t\tsendSortingTelemetry();\n\t\t\t},\n\t\t);\n\n\t\twatch(\n\t\t\t() => route?.params?.projectId,\n\t\t\t() => {\n\t\t\t\tresetFilters();\n\t\t\t},\n\t\t);\n\n\t\tonMounted(async () => {\n\t\t\tawait props.initialize();\n\t\t\tloading.value = false;\n\t\t\tawait nextTick();\n\n\t\t\tfocusSearchInput();\n\n\t\t\tif (hasAppliedFilters()) {\n\t\t\t\thasFilters.value = true;\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tloading,\n\t\t\ti18n,\n\t\t\tsearch,\n\t\t\tusersStore,\n\t\t\tfilterKeys,\n\t\t\tcurrentPage,\n\t\t\trowsPerPage,\n\t\t\tfilteredAndSortedResources,\n\t\t\thasFilters,\n\t\t\tsortBy,\n\t\t\tresettingFilters,\n\t\t\tfiltersModel,\n\t\t\tsendFiltersTelemetry,\n\t\t\tgetColumns,\n\t\t\titemSize,\n\t\t\tonAddButtonClick,\n\t\t\tonUpdateFiltersLength,\n\t\t\tonUpdateFilters,\n\t\t\tresetFilters,\n\t\t\tcallDebounced,\n\t\t\tsetCurrentPage,\n\t\t\tsetRowsPerPage,\n\t\t\tonSearch,\n\t\t};\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.filters-row {\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\tjustify-content: space-between;\n}\n\n.filters {\n\tdisplay: grid;\n\tgrid-auto-flow: column;\n\tgrid-auto-columns: max-content;\n\tgap: var(--spacing-2xs);\n\talign-items: center;\n}\n\n.search {\n\tmax-width: 240px;\n}\n\n.listWrapper {\n\tposition: absolute;\n\theight: 100%;\n\twidth: 100%;\n}\n\n.sort-and-filter {\n\twhite-space: nowrap;\n}\n\n.header-loading {\n\theight: 36px;\n}\n\n.card-loading {\n\theight: 69px;\n}\n\n.datatable {\n\tpadding-bottom: var(--spacing-s);\n}\n</style>\n"],"names":["_sfc_main$3","defineComponent","mapStores","useUIStore","_sfc_render","_ctx","$style","$setup","$data","$options","_normalizeClass","_renderSlot","_sfc_main$2","_cache","$slots","_openBlock","_createElementBlock","_createCommentVNode","_sfc_main$1","ProjectSharing","EnterpriseEditionFeature","useProjectsStore","length","key","value","project","filters","_resolveComponent","_createBlock","_component_n8n_popover","_withCtx","_createVNode","_component_n8n_button","_withDirectives","_component_n8n_badge","_createTextVNode","_toDisplayString","_vShow","_createElementVNode","setKeyValue","shareable","projectsStore","_component_enterprise_edition","$locale","_component_n8n_input_label","selectedProject","_component_ProjectSharing","$event","resetFilters","_component_n8n_link","_sfc_main","PageViewLayout","PageViewLayoutList","ResourceFiltersDropdown","resource","props","emit","route","useRoute","i18n","useI18n","callDebounced","useDebounce","usersStore","useUsersStore","telemetry","useTelemetry","loading","ref","sortBy","hasFilters","filtersModel","currentPage","rowsPerPage","resettingFilters","search","filterKeys","computed","filteredAndSortedResources","matches","searchString","a","b","focusSearchInput","hasAppliedFilters","setRowsPerPage","numberOfRowsPerPage","setCurrentPage","page","sendFiltersTelemetry","source","filtersSet","filterValues","onAddButtonClick","e","onUpdateFilters","itemSize","getColumns","sendSortingTelemetry","onUpdateFiltersLength","onSearch","s","watch","newValue","_a","onMounted","nextTick","_hoisted_2","_hoisted_3","_component_PageViewLayout","_hoisted_1","_component_n8n_loading","_Fragment","_component_n8n_action_box","resourceKey","_component_PageViewLayoutList","_component_n8n_input","_component_n8n_icon","showFiltersDropdown","_component_ResourceFiltersDropdown","_normalizeProps","_guardReactiveProps","resourceFiltersSlotProps","_component_n8n_select","_renderList","sortOption","_component_n8n_option","disabled","_component_n8n_info_tip","_hoisted_4","type","_component_n8n_recycle_scroller","item","updateItemSize","_component_n8n_datatable","columns","row","_component_n8n_text"],"mappings":"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"}
1
+ {"version":3,"file":"ResourcesListLayout-zQLxB7dP.js","sources":["../../src/components/layouts/PageViewLayout.vue","../../src/components/layouts/PageViewLayoutList.vue","../../src/components/forms/ResourceFiltersDropdown.vue","../../src/components/layouts/ResourcesListLayout.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.wrapper\">\n\t\t<slot name=\"header\" />\n\t\t<main :class=\"$style.content\">\n\t\t\t<slot />\n\t\t</main>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\n\nexport default defineComponent({\n\tname: 'PageViewLayout',\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUIStore),\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.wrapper {\n\tdisplay: grid;\n\theight: 100%;\n\twidth: 100%;\n\tmax-width: 1280px;\n\tgrid-template-rows: auto 1fr;\n\tbox-sizing: border-box;\n\talign-content: start;\n\tpadding: var(--spacing-l) var(--spacing-2xl) 0;\n}\n\n.content {\n\tdisplay: grid;\n\theight: 100%;\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n\tprops: {\n\t\toverflow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n});\n</script>\n\n<template>\n\t<div :class=\"{ [$style.wrapper]: true, [$style.overflow]: overflow }\">\n\t\t<div :class=\"$style.list\">\n\t\t\t<div v-if=\"$slots.header\" :class=\"$style.header\">\n\t\t\t\t<slot name=\"header\" />\n\t\t\t</div>\n\t\t\t<div :class=\"$style.body\">\n\t\t\t\t<slot />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.wrapper {\n\tdisplay: grid;\n\theight: 100%;\n}\n\n.overflow {\n\t.list {\n\t\t.body {\n\t\t\toverflow: auto;\n\t\t}\n\t}\n}\n\n.list {\n\tdisplay: grid;\n\tgrid-template-rows: auto 1fr;\n\theight: 100%;\n\t.body {\n\t\tposition: relative;\n\t\theight: 100%;\n\t}\n}\n</style>\n","<template>\n\t<n8n-popover trigger=\"click\" width=\"304\" size=\"large\">\n\t\t<template #reference>\n\t\t\t<n8n-button\n\t\t\t\ticon=\"filter\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:active=\"hasFilters\"\n\t\t\t\t:class=\"$style['filter-button']\"\n\t\t\t\tdata-test-id=\"resources-list-filters-trigger\"\n\t\t\t>\n\t\t\t\t<n8n-badge v-show=\"filtersLength > 0\" theme=\"primary\" class=\"mr-4xs\">\n\t\t\t\t\t{{ filtersLength }}\n\t\t\t\t</n8n-badge>\n\t\t\t\t{{ $locale.baseText('forms.resourceFiltersDropdown.filters') }}\n\t\t\t</n8n-button>\n\t\t</template>\n\t\t<div :class=\"$style['filters-dropdown']\" data-test-id=\"resources-list-filters-dropdown\">\n\t\t\t<slot :filters=\"modelValue\" :set-key-value=\"setKeyValue\" />\n\t\t\t<enterprise-edition\n\t\t\t\tv-if=\"shareable && projectsStore.isProjectHome\"\n\t\t\t\t:features=\"[EnterpriseEditionFeature.Sharing]\"\n\t\t\t>\n\t\t\t\t<n8n-input-label\n\t\t\t\t\t:label=\"$locale.baseText('forms.resourceFiltersDropdown.owner')\"\n\t\t\t\t\t:bold=\"false\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\tclass=\"mb-3xs\"\n\t\t\t\t/>\n\t\t\t\t<ProjectSharing\n\t\t\t\t\tv-model=\"selectedProject\"\n\t\t\t\t\tclass=\"pt-2xs\"\n\t\t\t\t\t:projects=\"projectsStore.projects\"\n\t\t\t\t\t:placeholder=\"$locale.baseText('forms.resourceFiltersDropdown.owner.placeholder')\"\n\t\t\t\t\t:empty-options-text=\"$locale.baseText('projects.sharing.noMatchingProjects')\"\n\t\t\t\t\t@update:model-value=\"setKeyValue('homeProject', ($event as ProjectSharingData).id)\"\n\t\t\t\t/>\n\t\t\t</enterprise-edition>\n\t\t\t<div v-if=\"hasFilters\" :class=\"[$style['filters-dropdown-footer'], 'mt-s']\">\n\t\t\t\t<n8n-link @click=\"resetFilters\">\n\t\t\t\t\t{{ $locale.baseText('forms.resourceFiltersDropdown.reset') }}\n\t\t\t\t</n8n-link>\n\t\t\t</div>\n\t\t</div>\n\t</n8n-popover>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { EnterpriseEditionFeature } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useProjectsStore } from '@/features/projects/projects.store';\nimport type { PropType } from 'vue';\nimport type { ProjectSharingData } from '@/features/projects/projects.types';\nimport ProjectSharing from '@/features/projects/components/ProjectSharing.vue';\n\nexport type IResourceFiltersType = Record<string, boolean | string | string[]>;\n\nexport default defineComponent({\n\tcomponents: {\n\t\tProjectSharing,\n\t},\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType<IResourceFiltersType>,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tkeys: {\n\t\t\ttype: Array as PropType<string[]>,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshareable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\treset: {\n\t\t\ttype: Function as PropType<() => void>,\n\t\t\tdefault: () => {},\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tEnterpriseEditionFeature,\n\t\t\tselectedProject: null as ProjectSharingData | null,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useProjectsStore),\n\t\tfiltersLength(): number {\n\t\t\tlet length = 0;\n\n\t\t\tthis.keys.forEach((key) => {\n\t\t\t\tif (key === 'search') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst value = this.modelValue[key];\n\t\t\t\tlength += (Array.isArray(value) ? value.length > 0 : value !== '') ? 1 : 0;\n\t\t\t});\n\n\t\t\treturn length;\n\t\t},\n\t\thasFilters(): boolean {\n\t\t\treturn this.filtersLength > 0;\n\t\t},\n\t},\n\twatch: {\n\t\tfiltersLength(value: number) {\n\t\t\tthis.$emit('update:filtersLength', value);\n\t\t},\n\t},\n\tasync beforeMount() {\n\t\tawait this.projectsStore.getAllProjects();\n\t\tthis.selectedProject =\n\t\t\tthis.projectsStore.projects.find((project) => project.id === this.modelValue.homeProject) ??\n\t\t\tnull;\n\t},\n\tmethods: {\n\t\tsetKeyValue(key: string, value: unknown) {\n\t\t\tconst filters = {\n\t\t\t\t...this.modelValue,\n\t\t\t\t[key]: value,\n\t\t\t};\n\n\t\t\tthis.$emit('update:modelValue', filters);\n\t\t},\n\t\tresetFilters() {\n\t\t\tif (this.reset) {\n\t\t\t\tthis.reset();\n\t\t\t} else {\n\t\t\t\tconst filters = { ...this.modelValue };\n\n\t\t\t\tthis.keys.forEach((key) => {\n\t\t\t\t\tfilters[key] = Array.isArray(this.modelValue[key]) ? [] : '';\n\t\t\t\t});\n\n\t\t\t\tthis.$emit('update:modelValue', filters);\n\t\t\t}\n\t\t\tthis.selectedProject = null;\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.filter-button {\n\theight: 40px;\n\talign-items: center;\n}\n\n.filters-dropdown {\n\twidth: 280px;\n\tpadding-bottom: var(--spacing-s);\n}\n\n.filters-dropdown-footer {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n}\n</style>\n","<template>\n\t<PageViewLayout>\n\t\t<template #header> <slot name=\"header\" /> </template>\n\t\t<div v-if=\"loading\">\n\t\t\t<n8n-loading :class=\"[$style['header-loading'], 'mb-l']\" variant=\"custom\" />\n\t\t\t<n8n-loading :class=\"[$style['card-loading'], 'mb-2xs']\" variant=\"custom\" />\n\t\t\t<n8n-loading :class=\"$style['card-loading']\" variant=\"custom\" />\n\t\t</div>\n\t\t<template v-else>\n\t\t\t<div v-if=\"resources.length === 0\">\n\t\t\t\t<slot name=\"empty\">\n\t\t\t\t\t<n8n-action-box\n\t\t\t\t\t\tdata-test-id=\"empty-resources-list\"\n\t\t\t\t\t\temoji=\"👋\"\n\t\t\t\t\t\t:heading=\"\n\t\t\t\t\t\t\ti18n.baseText(\n\t\t\t\t\t\t\t\tusersStore.currentUser?.firstName\n\t\t\t\t\t\t\t\t\t? (`${resourceKey}.empty.heading` as BaseTextKey)\n\t\t\t\t\t\t\t\t\t: (`${resourceKey}.empty.heading.userNotSetup` as BaseTextKey),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tinterpolate: { name: usersStore.currentUser?.firstName ?? '' },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t:description=\"i18n.baseText(`${resourceKey}.empty.description` as BaseTextKey)\"\n\t\t\t\t\t\t:button-text=\"i18n.baseText(`${resourceKey}.empty.button` as BaseTextKey)\"\n\t\t\t\t\t\tbutton-type=\"secondary\"\n\t\t\t\t\t\t@click:button=\"onAddButtonClick\"\n\t\t\t\t\t/>\n\t\t\t\t</slot>\n\t\t\t</div>\n\t\t\t<PageViewLayoutList v-else :overflow=\"type !== 'list'\">\n\t\t\t\t<template #header>\n\t\t\t\t\t<div :class=\"$style['filters-row']\">\n\t\t\t\t\t\t<div :class=\"$style.filters\">\n\t\t\t\t\t\t\t<n8n-input\n\t\t\t\t\t\t\t\tref=\"search\"\n\t\t\t\t\t\t\t\t:model-value=\"filtersModel.search\"\n\t\t\t\t\t\t\t\t:class=\"[$style['search'], 'mr-2xs']\"\n\t\t\t\t\t\t\t\t:placeholder=\"i18n.baseText(`${resourceKey}.search.placeholder` as BaseTextKey)\"\n\t\t\t\t\t\t\t\tclearable\n\t\t\t\t\t\t\t\tdata-test-id=\"resources-list-search\"\n\t\t\t\t\t\t\t\t@update:model-value=\"onSearch\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<template #prefix>\n\t\t\t\t\t\t\t\t\t<n8n-icon icon=\"search\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</n8n-input>\n\t\t\t\t\t\t\t<ResourceFiltersDropdown\n\t\t\t\t\t\t\t\tv-if=\"showFiltersDropdown\"\n\t\t\t\t\t\t\t\t:keys=\"filterKeys\"\n\t\t\t\t\t\t\t\t:reset=\"resetFilters\"\n\t\t\t\t\t\t\t\t:model-value=\"filtersModel\"\n\t\t\t\t\t\t\t\t:shareable=\"shareable\"\n\t\t\t\t\t\t\t\t@update:model-value=\"onUpdateFilters\"\n\t\t\t\t\t\t\t\t@update:filters-length=\"onUpdateFiltersLength\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<template #default=\"resourceFiltersSlotProps\">\n\t\t\t\t\t\t\t\t\t<slot name=\"filters\" v-bind=\"resourceFiltersSlotProps\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</ResourceFiltersDropdown>\n\t\t\t\t\t\t\t<div :class=\"$style['sort-and-filter']\">\n\t\t\t\t\t\t\t\t<n8n-select v-model=\"sortBy\" data-test-id=\"resources-list-sort\">\n\t\t\t\t\t\t\t\t\t<n8n-option\n\t\t\t\t\t\t\t\t\t\tv-for=\"sortOption in sortOptions\"\n\t\t\t\t\t\t\t\t\t\t:key=\"sortOption\"\n\t\t\t\t\t\t\t\t\t\tdata-test-id=\"resources-list-sort-item\"\n\t\t\t\t\t\t\t\t\t\t:value=\"sortOption\"\n\t\t\t\t\t\t\t\t\t\t:label=\"i18n.baseText(`${resourceKey}.sort.${sortOption}` as BaseTextKey)\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</n8n-select>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<slot name=\"add-button\" :disabled=\"disabled\">\n\t\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t\t\t\t\tdata-test-id=\"resources-list-add\"\n\t\t\t\t\t\t\t\t@click=\"onAddButtonClick\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.add` as BaseTextKey) }}\n\t\t\t\t\t\t\t</n8n-button>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<slot name=\"callout\"></slot>\n\n\t\t\t\t\t<div v-if=\"showFiltersDropdown\" v-show=\"hasFilters\" class=\"mt-xs\">\n\t\t\t\t\t\t<n8n-info-tip :bold=\"false\">\n\t\t\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.filters.active` as BaseTextKey) }}\n\t\t\t\t\t\t\t<n8n-link data-test-id=\"workflows-filter-reset\" size=\"small\" @click=\"resetFilters\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.filters.active.reset` as BaseTextKey) }}\n\t\t\t\t\t\t\t</n8n-link>\n\t\t\t\t\t\t</n8n-info-tip>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"pb-xs\" />\n\t\t\t\t</template>\n\n\t\t\t\t<slot name=\"preamble\" />\n\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"filteredAndSortedResources.length > 0\"\n\t\t\t\t\tref=\"listWrapperRef\"\n\t\t\t\t\t:class=\"$style.listWrapper\"\n\t\t\t\t>\n\t\t\t\t\t<n8n-recycle-scroller\n\t\t\t\t\t\tv-if=\"type === 'list'\"\n\t\t\t\t\t\tdata-test-id=\"resources-list\"\n\t\t\t\t\t\t:items=\"filteredAndSortedResources\"\n\t\t\t\t\t\t:item-size=\"itemSize()\"\n\t\t\t\t\t\titem-key=\"id\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #default=\"{ item, updateItemSize }\">\n\t\t\t\t\t\t\t<slot :data=\"item\" :update-item-size=\"updateItemSize\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template #postListContent>\n\t\t\t\t\t\t\t<slot name=\"postListContent\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</n8n-recycle-scroller>\n\t\t\t\t\t<n8n-datatable\n\t\t\t\t\t\tv-if=\"type === 'datatable'\"\n\t\t\t\t\t\tdata-test-id=\"resources-table\"\n\t\t\t\t\t\t:class=\"$style.datatable\"\n\t\t\t\t\t\t:columns=\"getColumns()\"\n\t\t\t\t\t\t:rows=\"filteredAndSortedResources\"\n\t\t\t\t\t\t:current-page=\"currentPage\"\n\t\t\t\t\t\t:rows-per-page=\"rowsPerPage\"\n\t\t\t\t\t\t@update:current-page=\"setCurrentPage\"\n\t\t\t\t\t\t@update:rows-per-page=\"setRowsPerPage\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #row=\"{ columns, row }\">\n\t\t\t\t\t\t\t<slot :data=\"row\" :columns=\"columns\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</n8n-datatable>\n\t\t\t\t</div>\n\n\t\t\t\t<n8n-text v-else color=\"text-base\" size=\"medium\" data-test-id=\"resources-list-empty\">\n\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.noResults` as BaseTextKey) }}\n\t\t\t\t</n8n-text>\n\n\t\t\t\t<slot name=\"postamble\" />\n\t\t\t</PageViewLayoutList>\n\t\t</template>\n\t</PageViewLayout>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, ref, onMounted, watch } from 'vue';\nimport type { PropType } from 'vue';\n\nimport type { ProjectSharingData } from '@/features/projects/projects.types';\nimport PageViewLayout from '@/components/layouts/PageViewLayout.vue';\nimport PageViewLayoutList from '@/components/layouts/PageViewLayoutList.vue';\nimport ResourceFiltersDropdown from '@/components/forms/ResourceFiltersDropdown.vue';\nimport { useUsersStore } from '@/stores/users.store';\nimport type { DatatableColumn } from 'n8n-design-system';\nimport { useI18n } from '@/composables/useI18n';\nimport { useDebounce } from '@/composables/useDebounce';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useRoute } from 'vue-router';\n\n// eslint-disable-next-line unused-imports/no-unused-imports, @typescript-eslint/no-unused-vars\nimport type { BaseTextKey } from '@/plugins/i18n';\n\nexport interface IResource {\n\tid: string;\n\tname: string;\n\tupdatedAt: string;\n\tcreatedAt: string;\n\thomeProject?: ProjectSharingData;\n}\n\ninterface IFilters {\n\tsearch: string;\n\thomeProject: string;\n\t[key: string]: boolean | string | string[];\n}\n\ntype IResourceKeyType = 'credentials' | 'workflows';\n\nexport default defineComponent({\n\tname: 'ResourcesListLayout',\n\tcomponents: {\n\t\tPageViewLayout,\n\t\tPageViewLayoutList,\n\t\tResourceFiltersDropdown,\n\t},\n\tprops: {\n\t\tresourceKey: {\n\t\t\ttype: String,\n\t\t\tdefault: '' as IResourceKeyType,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: Function as PropType<(resource: IResource) => string>,\n\t\t\tdefault: (resource: IResource) => resource.name,\n\t\t},\n\t\tresources: {\n\t\t\ttype: Array as PropType<IResource[]>,\n\t\t\tdefault: (): IResource[] => [],\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tinitialize: {\n\t\t\ttype: Function as PropType<() => Promise<void>>,\n\t\t\tdefault: () => async () => {},\n\t\t},\n\t\tfilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: (): IFilters => ({ search: '', homeProject: '' }),\n\t\t},\n\t\tadditionalFiltersHandler: {\n\t\t\ttype: Function,\n\t\t\trequired: false,\n\t\t\tdefault: undefined,\n\t\t},\n\t\tshareable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tshowFiltersDropdown: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tsortFns: {\n\t\t\ttype: Object as PropType<Record<string, (a: IResource, b: IResource) => number>>,\n\t\t\tdefault: (): Record<string, (a: IResource, b: IResource) => number> => ({}),\n\t\t},\n\t\tsortOptions: {\n\t\t\ttype: Array as PropType<string[]>,\n\t\t\tdefault: () => ['lastUpdated', 'lastCreated', 'nameAsc', 'nameDesc'],\n\t\t},\n\t\ttype: {\n\t\t\ttype: String as PropType<'datatable' | 'list'>,\n\t\t\tdefault: 'list',\n\t\t},\n\t\ttypeProps: {\n\t\t\ttype: Object as PropType<{ itemSize: number } | { columns: DatatableColumn[] }>,\n\t\t\tdefault: () => ({\n\t\t\t\titemSize: 80,\n\t\t\t}),\n\t\t},\n\t},\n\temits: ['update:filters', 'click:add', 'sort'],\n\tsetup(props, { emit }) {\n\t\tconst route = useRoute();\n\t\tconst i18n = useI18n();\n\t\tconst { callDebounced } = useDebounce();\n\t\tconst usersStore = useUsersStore();\n\t\tconst telemetry = useTelemetry();\n\n\t\tconst loading = ref(true);\n\t\tconst sortBy = ref(props.sortOptions[0]);\n\t\tconst hasFilters = ref(false);\n\t\tconst filtersModel = ref(props.filters);\n\t\tconst currentPage = ref(1);\n\t\tconst rowsPerPage = ref<number | '*'>(10);\n\t\tconst resettingFilters = ref(false);\n\t\tconst search = ref<HTMLElement | null>(null);\n\n\t\t//computed\n\n\t\tconst filterKeys = computed(() => {\n\t\t\treturn Object.keys(filtersModel.value);\n\t\t});\n\n\t\tconst filteredAndSortedResources = computed(() => {\n\t\t\tconst filtered = props.resources.filter((resource) => {\n\t\t\t\tlet matches = true;\n\n\t\t\t\tif (filtersModel.value.homeProject) {\n\t\t\t\t\tmatches =\n\t\t\t\t\t\tmatches &&\n\t\t\t\t\t\t!!(resource.homeProject && resource.homeProject.id === filtersModel.value.homeProject);\n\t\t\t\t}\n\n\t\t\t\tif (filtersModel.value.search) {\n\t\t\t\t\tconst searchString = filtersModel.value.search.toLowerCase();\n\t\t\t\t\tmatches = matches && props.displayName(resource).toLowerCase().includes(searchString);\n\t\t\t\t}\n\n\t\t\t\tif (props.additionalFiltersHandler) {\n\t\t\t\t\tmatches = props.additionalFiltersHandler(resource, filtersModel.value, matches);\n\t\t\t\t}\n\n\t\t\t\treturn matches;\n\t\t\t});\n\n\t\t\treturn filtered.sort((a, b) => {\n\t\t\t\tswitch (sortBy.value) {\n\t\t\t\t\tcase 'lastUpdated':\n\t\t\t\t\t\treturn props.sortFns.lastUpdated\n\t\t\t\t\t\t\t? props.sortFns.lastUpdated(a, b)\n\t\t\t\t\t\t\t: new Date(b.updatedAt).valueOf() - new Date(a.updatedAt).valueOf();\n\t\t\t\t\tcase 'lastCreated':\n\t\t\t\t\t\treturn props.sortFns.lastCreated\n\t\t\t\t\t\t\t? props.sortFns.lastCreated(a, b)\n\t\t\t\t\t\t\t: new Date(b.createdAt).valueOf() - new Date(a.createdAt).valueOf();\n\t\t\t\t\tcase 'nameAsc':\n\t\t\t\t\t\treturn props.sortFns.nameAsc\n\t\t\t\t\t\t\t? props.sortFns.nameAsc(a, b)\n\t\t\t\t\t\t\t: props.displayName(a).trim().localeCompare(props.displayName(b).trim());\n\t\t\t\t\tcase 'nameDesc':\n\t\t\t\t\t\treturn props.sortFns.nameDesc\n\t\t\t\t\t\t\t? props.sortFns.nameDesc(a, b)\n\t\t\t\t\t\t\t: props.displayName(b).trim().localeCompare(props.displayName(a).trim());\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn props.sortFns[sortBy.value] ? props.sortFns[sortBy.value](a, b) : 0;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t//methods\n\n\t\tconst focusSearchInput = () => {\n\t\t\tif (search.value) {\n\t\t\t\tsearch.value.focus();\n\t\t\t}\n\t\t};\n\n\t\tconst hasAppliedFilters = (): boolean => {\n\t\t\treturn !!filterKeys.value.find(\n\t\t\t\t(key) =>\n\t\t\t\t\tkey !== 'search' &&\n\t\t\t\t\t(Array.isArray(props.filters[key])\n\t\t\t\t\t\t? props.filters[key].length > 0\n\t\t\t\t\t\t: props.filters[key] !== ''),\n\t\t\t);\n\t\t};\n\n\t\tconst setRowsPerPage = (numberOfRowsPerPage: number | '*') => {\n\t\t\trowsPerPage.value = numberOfRowsPerPage;\n\t\t};\n\n\t\tconst setCurrentPage = (page: number) => {\n\t\t\tcurrentPage.value = page;\n\t\t};\n\n\t\tconst sendFiltersTelemetry = (source: string) => {\n\t\t\t// Prevent sending multiple telemetry events when resetting filters\n\t\t\t// Timeout is required to wait for search debounce to be over\n\t\t\tif (resettingFilters.value) {\n\t\t\t\tif (source !== 'reset') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetTimeout(() => (resettingFilters.value = false), 1500);\n\t\t\t}\n\n\t\t\tconst filters = filtersModel.value as Record<string, string[] | string | boolean>;\n\t\t\tconst filtersSet: string[] = [];\n\t\t\tconst filterValues: Array<string[] | string | boolean | null> = [];\n\n\t\t\tObject.keys(filters).forEach((key) => {\n\t\t\t\tif (filters[key]) {\n\t\t\t\t\tfiltersSet.push(key);\n\t\t\t\t\tfilterValues.push(key === 'search' ? null : filters[key]);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttelemetry.track(`User set filters in ${props.resourceKey} list`, {\n\t\t\t\tfilters_set: filtersSet,\n\t\t\t\tfilter_values: filterValues,\n\t\t\t\t[`${props.resourceKey}_total_in_view`]: props.resources.length,\n\t\t\t\t[`${props.resourceKey}_after_filtering`]: filteredAndSortedResources.value.length,\n\t\t\t});\n\t\t};\n\n\t\tconst onAddButtonClick = (e: Event) => {\n\t\t\temit('click:add', e);\n\t\t};\n\n\t\tconst onUpdateFilters = (e: Event) => {\n\t\t\temit('update:filters', e);\n\t\t};\n\n\t\tconst resetFilters = () => {\n\t\t\tObject.keys(filtersModel.value).forEach((key) => {\n\t\t\t\tfiltersModel.value[key] = Array.isArray(filtersModel.value[key]) ? [] : '';\n\t\t\t});\n\n\t\t\tresettingFilters.value = true;\n\t\t\tsendFiltersTelemetry('reset');\n\t\t\temit('update:filters', filtersModel.value);\n\t\t};\n\n\t\tconst itemSize = () => {\n\t\t\tif ('itemSize' in props.typeProps) {\n\t\t\t\treturn props.typeProps.itemSize;\n\t\t\t}\n\t\t\treturn 0;\n\t\t};\n\n\t\tconst getColumns = () => {\n\t\t\tif ('columns' in props.typeProps) {\n\t\t\t\treturn props.typeProps.columns;\n\t\t\t}\n\t\t\treturn {};\n\t\t};\n\n\t\tconst sendSortingTelemetry = () => {\n\t\t\ttelemetry.track(`User changed sorting in ${props.resourceKey} list`, {\n\t\t\t\tsorting: sortBy.value,\n\t\t\t});\n\t\t};\n\n\t\tconst onUpdateFiltersLength = (length: number) => {\n\t\t\thasFilters.value = length > 0;\n\t\t};\n\n\t\tconst onSearch = (s: string) => {\n\t\t\tfiltersModel.value.search = s;\n\t\t\temit('update:filters', filtersModel.value);\n\t\t};\n\n\t\t//watchers\n\n\t\twatch(\n\t\t\t() => props.filters,\n\t\t\t(value) => {\n\t\t\t\tfiltersModel.value = value;\n\t\t\t},\n\t\t);\n\n\t\twatch(\n\t\t\t() => filtersModel.value.homeProject,\n\t\t\t() => {\n\t\t\t\tsendFiltersTelemetry('homeProject');\n\t\t\t},\n\t\t);\n\n\t\twatch(\n\t\t\t() => filtersModel.value.search,\n\t\t\t() => callDebounced(sendFiltersTelemetry, { debounceTime: 1000, trailing: true }, 'search'),\n\t\t);\n\n\t\twatch(\n\t\t\t() => sortBy.value,\n\t\t\t(newValue) => {\n\t\t\t\temit('sort', newValue);\n\t\t\t\tsendSortingTelemetry();\n\t\t\t},\n\t\t);\n\n\t\twatch(\n\t\t\t() => route?.params?.projectId,\n\t\t\t() => {\n\t\t\t\tresetFilters();\n\t\t\t},\n\t\t);\n\n\t\tonMounted(async () => {\n\t\t\tawait props.initialize();\n\t\t\tloading.value = false;\n\t\t\tawait nextTick();\n\n\t\t\tfocusSearchInput();\n\n\t\t\tif (hasAppliedFilters()) {\n\t\t\t\thasFilters.value = true;\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tloading,\n\t\t\ti18n,\n\t\t\tsearch,\n\t\t\tusersStore,\n\t\t\tfilterKeys,\n\t\t\tcurrentPage,\n\t\t\trowsPerPage,\n\t\t\tfilteredAndSortedResources,\n\t\t\thasFilters,\n\t\t\tsortBy,\n\t\t\tresettingFilters,\n\t\t\tfiltersModel,\n\t\t\tsendFiltersTelemetry,\n\t\t\tgetColumns,\n\t\t\titemSize,\n\t\t\tonAddButtonClick,\n\t\t\tonUpdateFiltersLength,\n\t\t\tonUpdateFilters,\n\t\t\tresetFilters,\n\t\t\tcallDebounced,\n\t\t\tsetCurrentPage,\n\t\t\tsetRowsPerPage,\n\t\t\tonSearch,\n\t\t};\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.filters-row {\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\tjustify-content: space-between;\n}\n\n.filters {\n\tdisplay: grid;\n\tgrid-auto-flow: column;\n\tgrid-auto-columns: max-content;\n\tgap: var(--spacing-2xs);\n\talign-items: center;\n}\n\n.search {\n\tmax-width: 240px;\n}\n\n.listWrapper {\n\tposition: absolute;\n\theight: 100%;\n\twidth: 100%;\n}\n\n.sort-and-filter {\n\twhite-space: nowrap;\n}\n\n.header-loading {\n\theight: 36px;\n}\n\n.card-loading {\n\theight: 69px;\n}\n\n.datatable {\n\tpadding-bottom: var(--spacing-s);\n}\n</style>\n"],"names":["_sfc_main$3","defineComponent","mapStores","useUIStore","_sfc_render","_ctx","$style","$setup","$data","$options","_normalizeClass","_renderSlot","_sfc_main$2","_cache","$slots","_openBlock","_createElementBlock","_createCommentVNode","_sfc_main$1","ProjectSharing","EnterpriseEditionFeature","useProjectsStore","length","key","value","project","filters","_resolveComponent","_createBlock","_component_n8n_popover","_withCtx","_createVNode","_component_n8n_button","_withDirectives","_component_n8n_badge","_createTextVNode","_toDisplayString","_vShow","_createElementVNode","setKeyValue","shareable","projectsStore","_component_enterprise_edition","$locale","_component_n8n_input_label","selectedProject","_component_ProjectSharing","$event","resetFilters","_component_n8n_link","_sfc_main","PageViewLayout","PageViewLayoutList","ResourceFiltersDropdown","resource","props","emit","route","useRoute","i18n","useI18n","callDebounced","useDebounce","usersStore","useUsersStore","telemetry","useTelemetry","loading","ref","sortBy","hasFilters","filtersModel","currentPage","rowsPerPage","resettingFilters","search","filterKeys","computed","filteredAndSortedResources","matches","searchString","a","b","focusSearchInput","hasAppliedFilters","setRowsPerPage","numberOfRowsPerPage","setCurrentPage","page","sendFiltersTelemetry","source","filtersSet","filterValues","onAddButtonClick","e","onUpdateFilters","itemSize","getColumns","sendSortingTelemetry","onUpdateFiltersLength","onSearch","s","watch","newValue","_a","onMounted","nextTick","_hoisted_2","_hoisted_3","_component_PageViewLayout","_hoisted_1","_component_n8n_loading","_Fragment","_component_n8n_action_box","resourceKey","_component_PageViewLayoutList","_component_n8n_input","_component_n8n_icon","showFiltersDropdown","_component_ResourceFiltersDropdown","_normalizeProps","_guardReactiveProps","resourceFiltersSlotProps","_component_n8n_select","_renderList","sortOption","_component_n8n_option","disabled","_component_n8n_info_tip","_hoisted_4","type","_component_n8n_recycle_scroller","item","updateItemSize","_component_n8n_datatable","columns","row","_component_n8n_text"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import{N as k,aw as Y,ax as Z,_ as F,ay as ee}from"./n8n-roXSR3ff.js";import{ae as te,u as ne,w as oe,a4 as K,j as G,a9 as Q}from"./index-OLvpAx8p.js";import{G as W,af as se,r as E,b as ae,ag as B,l as y,m as g,p as v,I as p,T as w,R as h,u as V,M as H,a2 as re,Q as N,F as L,a7 as q,e as O,O as R,S as z,d as ie,J as le}from"./vendor-qzAIxxHa.js";import{C as ue}from"./lodash-es-SWsik9tP.js";import"./axios-s2RMMPhA.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./pinia-hqNpa1CE.js";import"./flatted-jPn12Tq4.js";import"./@vueuse/core-3K2u_AzZ.js";import"./@n8n/permissions-1O7vSg-k.js";import"./dateformat-ZLFwQ-J0.js";import"./vue-i18n-COIxmhgq.js";import"./uuid-McvpxQtQ.js";import"./@n8n/codemirror-lang-sql-PDL6jaEc.js";import"./@lezer/common-1hBQ1gIF.js";import"./prettier-XiNuC5bg.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-html-n8n-m8pcIqw_.js";import"./@n8n/codemirror-lang-uuamtW6H.js";import"./fast-json-stable-stringify-F21sPGMl.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-NS1qgWpD.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";const x=n=>({type:"json",data:n,parsed:!1}),X={[k.AiLanguageModel](n){const o=n.response??n;if(!o)throw new Error("No response from Language Model");return Array.isArray(o==null?void 0:o.messages)&&(o==null?void 0:o.messages.length)===1&&typeof(o==null?void 0:o.messages[0])=="string"?{type:"text",data:o.messages[0],parsed:!0}:o.messages&&Array.isArray(o.messages)?X[k.AiMemory](n):o.generations?{type:"json",data:o.generations.map(a=>a!=null&&a.text?a.text:Array.isArray(a)?a.map(M=>M.text??M).join(`
1
+ import{N as k,aw as Y,ax as Z,_ as F,ay as ee}from"./n8n-roXSR3ff.js";import{ae as te,u as ne,w as oe,a4 as K,j as G,a9 as Q}from"./index-6ulnOLCO.js";import{G as W,af as se,r as E,b as ae,ag as B,l as y,m as g,p as v,I as p,T as w,R as h,u as V,M as H,a2 as re,Q as N,F as L,a7 as q,e as O,O as R,S as z,d as ie,J as le}from"./vendor-qzAIxxHa.js";import{C as ue}from"./lodash-es-SWsik9tP.js";import"./axios-s2RMMPhA.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./pinia-hqNpa1CE.js";import"./flatted-jPn12Tq4.js";import"./@vueuse/core-3K2u_AzZ.js";import"./@n8n/permissions-1O7vSg-k.js";import"./dateformat-ZLFwQ-J0.js";import"./vue-i18n-COIxmhgq.js";import"./uuid-McvpxQtQ.js";import"./@n8n/codemirror-lang-sql-PDL6jaEc.js";import"./@lezer/common-1hBQ1gIF.js";import"./prettier-XiNuC5bg.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-html-n8n-m8pcIqw_.js";import"./@n8n/codemirror-lang-uuamtW6H.js";import"./fast-json-stable-stringify-F21sPGMl.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-NS1qgWpD.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";const x=n=>({type:"json",data:n,parsed:!1}),X={[k.AiLanguageModel](n){const o=n.response??n;if(!o)throw new Error("No response from Language Model");return Array.isArray(o==null?void 0:o.messages)&&(o==null?void 0:o.messages.length)===1&&typeof(o==null?void 0:o.messages[0])=="string"?{type:"text",data:o.messages[0],parsed:!0}:o.messages&&Array.isArray(o.messages)?X[k.AiMemory](n):o.generations?{type:"json",data:o.generations.map(a=>a!=null&&a.text?a.text:Array.isArray(a)?a.map(M=>M.text??M).join(`
2
2
 
3
3
  `).trim():a),parsed:!0}:{type:"json",data:o,parsed:!0}},[k.AiTool]:x,[k.AiAgent]:x,[k.AiMemory](n){var b;const o=n.chatHistory??n.messages??((b=n==null?void 0:n.response)==null?void 0:b.chat_history);return Array.isArray(o)?{type:"markdown",data:o.map(a=>{var M;if(a.type==="constructor"&&((M=a.id)!=null&&M.includes("messages"))&&a.kwargs){let s=a.kwargs.content;return Array.isArray(s)&&(s=s.map(D=>{const{type:S,image_url:f}=D;return S==="image_url"&&typeof f=="object"&&typeof f.url=="string"?`![Input image](${f.url})`:typeof f=="string"?`![Input image](${f})`:D.text}).join(`
4
4
  `)),Object.keys(a.kwargs.additional_kwargs).length&&(s+=` (${JSON.stringify(a.kwargs.additional_kwargs)})`),a.id.includes("HumanMessage")?s=`**Human:** ${String(s).trim()}`:a.id.includes("AIMessage")?s=`**AI:** ${s}`:a.id.includes("SystemMessage")&&(s=`**System Message:** ${s}`),n.action&&n.action!=="getMessages"&&(s=`## Action: ${n.action}
@@ -10,4 +10,4 @@ ${s}`),s}return""}).join(`
10
10
  `),parsed:!0}}},ce=()=>({parseAiRunData:(o,b)=>{if([k.AiChain,k.Main].includes(b))return o.map(s=>({raw:s.json,parsedContent:null}));const j=o.map(s=>!Y(s.binary)?s.binary:s.json),a=X[b];return a?j.filter(s=>s!==void 0).map(s=>({raw:s,parsedContent:a(s)})):[{raw:j.filter(s=>s!==void 0),parsedContent:null}]}});var de=W({name:"VueMarkdown",props:{source:{type:String,required:!0},options:{type:Object,required:!1}},data:function(){return{md:null}},computed:{content:function(){var n,o=this.source;return(n=this.md)===null||n===void 0?void 0:n.render(o)}},created:function(){var n;this.md=new Z((n=this.options)!==null&&n!==void 0?n:{})},render:function(){return se("div",{innerHTML:this.content})}});const J=de,pe=["data-content-type"],me=["textContent"],ye=W({__name:"AiRunContentBlock",props:{runData:{}},setup(n){const o=n,b=oe(),j=te(),{showMessage:a}=ne(),M=ce(),s=E(r()),D=E(!1),S=E(!1),f=E(void 0);function r(){return!{input:[k.AiDocument,k.AiTextSplitter],output:[k.AiDocument,k.AiEmbedding,k.AiTextSplitter,k.AiVectorStore]}[o.runData.inOut].includes(o.runData.type)}function T(e){return e.data?M.parseAiRunData(e.data,e.type):void 0}function $(e){return typeof e!="string"?!1:[/^# .+/gm,/\*{1,2}.+\*{1,2}/g,/\[.+\]\(.+\)/g,/```[\s\S]+```/g].some(u=>u.test(e))}function _(e){return"```json\n"+e+"\n```"}function A(e){return $(e)?e:Array.isArray(e)&&e.length&&typeof e[0]!="number"?e.map(u=>A(u)).join(`
11
11
 
12
12
  `).trim():_(typeof e=="string"?e:JSON.stringify(e,null,2))}function t(e){S.value=!!e.find(i=>{var u;return((u=i.parsedContent)==null?void 0:u.parsed)===!0})}function c(){s.value=!s.value}function m(e){try{j.copy(JSON.stringify(e,void 0,2)),a({title:b.baseText("generic.copiedToClipboard"),type:"success"})}catch{}}return ae(()=>{f.value=T(o.runData),f.value&&t(f.value)}),(e,i)=>{const u=B("font-awesome-icon"),l=B("el-switch"),C=B("n8n-icon-button");return y(),g("div",{class:p(e.$style.block)},[v("header",{class:p(e.$style.blockHeader),onClick:c},[v("button",{class:p(e.$style.blockToggle)},[w(u,{icon:s.value?"angle-down":"angle-up",size:"lg"},null,8,["icon"])],2),v("p",{class:p(e.$style.blockTitle)},h(V(ue)(e.runData.inOut)),3),S.value?(y(),H(l,{key:0,modelValue:D.value,"onUpdate:modelValue":i[0]||(i[0]=d=>D.value=d),class:p(e.$style.rawSwitch),"active-text":"RAW JSON",onClick:i[1]||(i[1]=re(()=>{},["stop"]))},null,8,["modelValue","class"])):N("",!0)],2),v("main",{class:p({[e.$style.blockContent]:!0,[e.$style.blockContentExpanded]:s.value})},[(y(!0),g(L,null,q(f.value,({parsedContent:d,raw:I},U)=>(y(),g("div",{key:U,class:p(e.$style.contentText),"data-content-type":d==null?void 0:d.type},[d&&!D.value?(y(),g(L,{key:0},[d.type==="json"?(y(),H(V(J),{key:0,source:A(d.data),class:p(e.$style.markdown)},null,8,["source","class"])):N("",!0),d.type==="markdown"?(y(),H(V(J),{key:1,source:d.data,class:p(e.$style.markdown)},null,8,["source","class"])):N("",!0),d.type==="text"?(y(),g("p",{key:2,class:p(e.$style.runText),textContent:h(d.data)},null,10,me)):N("",!0)],64)):(y(),g("div",{key:1,class:p(e.$style.rawContent)},[w(C,{size:"small",class:p(e.$style.copyToClipboard),type:"secondary",title:e.$locale.baseText("nodeErrorView.copyToClipboard"),icon:"copy",onClick:P=>m(I)},null,8,["class","title","onClick"]),w(V(J),{source:A(I),class:p(e.$style.markdown)},null,8,["source","class"])],2))],10,pe))),128))],2)],2)}}}),fe="_copyToClipboard_1bt7e_1",ke="_rawContent_1bt7e_7",_e="_markdown_1bt7e_11",ge="_contentText_1bt7e_35",Te="_block_1bt7e_40",be="_blockContent_1bt7e_48",he="_blockContentExpanded_1bt7e_52",we="_runText_1bt7e_56",ve="_rawSwitch_1bt7e_61",$e="_blockHeader_1bt7e_68",Ae="_blockTitle_1bt7e_80",Ce="_blockToggle_1bt7e_85",Me={copyToClipboard:fe,rawContent:ke,markdown:_e,contentText:ge,block:Te,blockContent:be,blockContentExpanded:he,runText:we,rawSwitch:ve,blockHeader:$e,blockTitle:Ae,blockToggle:Ce},Se={$style:Me},Ie=F(ye,[["__cssModules",Se]]),Ne={key:0},De={key:1},je=v("br",null,null,-1),Re=W({__name:"RunDataAiContent",props:{inputData:{},contentIndex:{}},setup(n){const o=n,b=K(),j=G(),a=O(()=>{var T,$;return($=(T=S.value)==null?void 0:T.data)==null?void 0:$.reduce((_,A)=>{var c,m;const t=((c=A.json)==null?void 0:c.tokenUsage)??((m=A.json)==null?void 0:m.tokenUsageEstimate);return t?{completionTokens:_.completionTokens+t.completionTokens,promptTokens:_.promptTokens+t.promptTokens,totalTokens:_.totalTokens+t.totalTokens}:_},{completionTokens:0,promptTokens:0,totalTokens:0})}),M=O(()=>{var r,T;return(T=(r=S.value)==null?void 0:r.data)==null?void 0:T.some($=>{var _;return(_=$.json)==null?void 0:_.tokenUsageEstimate})});function s(r){return M.value?`~${r}`:r.toString()}function D(r){const T=j.getNodeByName(o.inputData.node),$=b.getNodeType((T==null?void 0:T.type)??"");return{startTimeMs:r.metadata.startTime,executionTimeMs:r.metadata.executionTime,node:$,type:r.inOut,connectionType:r.type}}const S=O(()=>o.inputData.data.find(r=>r.inOut==="output")),f=O(()=>{if(S.value!==void 0)return D(S.value)});return(r,T)=>{var t,c,m,e,i,u;const $=B("n8n-tooltip"),_=B("n8n-text"),A=B("n8n-info-tip");return y(),g("div",{class:p(r.$style.container)},[v("header",{class:p(r.$style.header)},[(t=f.value)!=null&&t.node?(y(),H(Q,{key:0,class:p(r.$style.nodeIcon),"node-type":f.value.node,size:20},null,8,["class","node-type"])):N("",!0),v("div",{class:p(r.$style.headerWrap)},[v("p",{class:p(r.$style.title)},h(r.inputData.node),3),v("ul",{class:p(r.$style.meta)},[(c=f.value)!=null&&c.startTimeMs?(y(),g("li",Ne,h((m=f.value)==null?void 0:m.executionTimeMs)+"ms",1)):N("",!0),(e=f.value)!=null&&e.startTimeMs?(y(),g("li",De,[w($,null,{content:R(()=>{var l;return[z(h(new Date((l=f.value)==null?void 0:l.startTimeMs).toLocaleString()),1)]}),default:R(()=>{var l;return[z(" "+h(r.$locale.baseText("runData.aiContentBlock.startedAt",{interpolate:{startTime:new Date((l=f.value)==null?void 0:l.startTimeMs).toLocaleTimeString()}})),1)]}),_:1})])):N("",!0),(((i=a.value)==null?void 0:i.totalTokens)??0)>0?(y(),g("li",{key:2,class:p(r.$style.tokensUsage)},[z(h(r.$locale.baseText("runData.aiContentBlock.tokens",{interpolate:{count:s(((u=a.value)==null?void 0:u.totalTokens)??0)}}))+" ",1),w(A,{type:"tooltip",theme:"info-light","tooltip-placement":"right"},{default:R(()=>[v("div",null,[w(_,{bold:!0,size:"small"},{default:R(()=>{var l;return[z(h(r.$locale.baseText("runData.aiContentBlock.tokens.prompt"))+" "+h(r.$locale.baseText("runData.aiContentBlock.tokens",{interpolate:{count:s(((l=a.value)==null?void 0:l.promptTokens)??0)}})),1)]}),_:1}),je,w(_,{bold:!0,size:"small"},{default:R(()=>{var l;return[z(h(r.$locale.baseText("runData.aiContentBlock.tokens.completion"))+" "+h(r.$locale.baseText("runData.aiContentBlock.tokens",{interpolate:{count:s(((l=a.value)==null?void 0:l.completionTokens)??0)}})),1)]}),_:1})])]),_:1})],2)):N("",!0)],2)],2)],2),(y(!0),g(L,null,q(o.inputData.data,(l,C)=>(y(),g("main",{key:C,class:p(r.$style.content)},[w(Ie,{"run-data":l},null,8,["run-data"])],2))),128))],2)}}}),Be="_container_dypaw_2",xe="_nodeIcon_dypaw_5",ze="_header_dypaw_8",Oe="_headerWrap_dypaw_14",Ee="_title_dypaw_18",Ve="_meta_dypaw_25",Ue="_tokensUsage_dypaw_41",He={container:Be,nodeIcon:xe,header:ze,headerWrap:Oe,title:Ee,meta:Ve,tokensUsage:Ue},Le={$style:He},We=F(Re,[["__cssModules",Le]]),Pe=["data-tree-depth"],Je=["onClick"],Fe=["textContent"],qe=W({__name:"RunDataAi",props:{node:{},runIndex:{default:0},hideTitle:{type:Boolean},slim:{type:Boolean}},setup(n){const o=n,b=G(),j=K(),a=E([]);function M(t){return a.value.some(c=>c.node===t.node&&c.runIndex===t.runIndex)}function s(t,c,m){const e=b.getWorkflowResultDataByNodeName(t.node);if(!(e!=null&&e[t.runIndex]))return[];const i=e[t.runIndex];if(!i)return[];const u=[];function l(C,d){C&&Object.keys(C).map(I=>{u.push({data:C[I][0],inOut:d,type:I,metadata:{executionTime:i.executionTime,startTime:i.startTime}})})}return c&&l(i.inputOverride,"input"),m&&l(i.data,"output"),u}function D(t){t.expanded=!t.expanded}function S(t){var m;if(!((m=_.value)==null?void 0:m.find(e=>e.node===t.node&&e.runIndex===t.runIndex))){a.value=[];return}a.value=[{node:t.node,runIndex:t.runIndex,data:s({node:t.node,runIndex:t.runIndex},!0,!0)}]}function f(t){const c=b.getNodeByName(t);return c?j.getNodeType(c==null?void 0:c.type):null}function r(){A.value.length&&A.value[0].children.length&&S(A.value[0].children[0])}const T=(t,c,m,e=[])=>{var i,u;return{node:t,id:t,depth:c,startTime:((u=(i=m==null?void 0:m.data)==null?void 0:i.metadata)==null?void 0:u.startTime)??0,runIndex:(m==null?void 0:m.runIndex)??0,children:e}};function $(t,c){var C;const{connectionsByDestinationNode:m}=b.getCurrentWorkflow(),e=m[t],i=((C=_.value)==null?void 0:C.filter(d=>d.node===t))??[];if(!e)return i.map(d=>T(t,c,d));const l=Object.keys(e).filter(d=>d!==k.Main).flatMap(d=>e[d][0].flatMap(I=>$(I.node,c+1)));return i.length?i.map(d=>T(t,c,d,l)):(l.sort((d,I)=>d.startTime-I.startTime),[T(t,c,void 0,l)])}const _=O(()=>{var e;const t=b.getWorkflowResultDataByNodeName(o.node.name);if(!t||!Array.isArray(t))return;const c=(e=t[o.runIndex].metadata)==null?void 0:e.subRun;if(!Array.isArray(c))return;const m=c.flatMap(i=>s(i,!1,!0).map(u=>({...i,data:u})));return m.sort((i,u)=>{var d,I,U,P;const l=((I=(d=i.data)==null?void 0:d.metadata)==null?void 0:I.startTime)||0,C=((P=(U=u.data)==null?void 0:U.metadata)==null?void 0:P.startTime)||0;return l-C}),m}),A=O(()=>{const t=o.node;return $(t.name,0)||[]});return ie(()=>o.runIndex,r,{immediate:!0}),(t,c)=>{const m=B("font-awesome-icon"),e=B("n8n-tooltip"),i=B("n8n-text");return _.value?(y(),g("div",{key:0,class:p(t.$style.container)},[v("div",{class:p({[t.$style.tree]:!0,[t.$style.slim]:t.slim})},[w(V(ee),{data:A.value,props:{label:"node"},"default-expand-all":"",indent:12,"expand-on-click-node":!1,"data-test-id":"lm-chat-logs-tree",onNodeClick:S},{default:R(({node:u,data:l})=>[v("div",{class:p({[t.$style.treeNode]:!0,[t.$style.isSelected]:M(l)}),"data-tree-depth":l.depth,style:le({"--item-depth":l.depth})},[l.children.length?(y(),g("button",{key:0,class:p(t.$style.treeToggle),onClick:C=>D(u)},[w(m,{icon:u.expanded?"angle-down":"angle-up"},null,8,["icon"])],10,Je)):N("",!0),w(e,{disabled:!t.slim,placement:"right"},{content:R(()=>[z(h(u.label),1)]),default:R(()=>[v("span",{class:p(t.$style.leafLabel)},[w(Q,{"node-type":f(l.node),size:17},null,8,["node-type"]),t.slim?N("",!0):(y(),g("span",{key:0,textContent:h(u.label)},null,8,Fe))],2)]),_:2},1032,["disabled"])],14,Pe)]),_:1},8,["data"])],2),v("div",{class:p(t.$style.runData)},[a.value.length===0?(y(),g("div",{key:0,class:p(t.$style.empty)},[w(i,{size:"large"},{default:R(()=>[z(h(t.$locale.baseText("ndv.output.ai.empty",{interpolate:{node:o.node.name}})),1)]),_:1})],2)):N("",!0),(y(!0),g(L,null,q(a.value,(u,l)=>(y(),g("div",{key:`${u.node}__${u.runIndex}__index`,"data-test-id":"lm-chat-logs-entry"},[w(We,{"input-data":u,"content-index":l},null,8,["input-data","content-index"])]))),128))],2)],2)):N("",!0)}}}),Ke="_treeToggle_z0rh6_1",Ge="_leafLabel_z0rh6_9",Qe="_empty_z0rh6_15",Xe="_title_z0rh6_19",Ye="_tree_z0rh6_1",Ze="_slim_z0rh6_32",et="_runData_z0rh6_36",tt="_container_z0rh6_42",nt="_isSelected_z0rh6_69",ot="_treeNode_z0rh6_73",st={treeToggle:Ke,leafLabel:Ge,empty:Qe,title:Xe,tree:Ye,slim:Ze,runData:et,container:tt,isSelected:nt,treeNode:ot},at={$style:st},xt=F(qe,[["__cssModules",at]]);export{xt as default};
13
- //# sourceMappingURL=RunDataAi-jJ9KfOCF.js.map
13
+ //# sourceMappingURL=RunDataAi-sZalPI5G.js.map