@atom8n/n8n-editor-ui 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/.stylelintcache +1 -0
  2. package/README.md +59 -0
  3. package/biome.jsonc +8 -0
  4. package/build.log +55 -0
  5. package/data/node-popularity.json +3998 -0
  6. package/dist/assets/AddDataTableModal-UINkk54_.js +1555 -0
  7. package/dist/assets/AgentEditorModal-CVww87TJ.js +358 -0
  8. package/dist/assets/Alert-Dy86dyOr.js +102 -0
  9. package/dist/assets/AnimatedSpinner-DmPN4poP.js +15 -0
  10. package/dist/assets/AnnotationTagsDropdown.ee-BJ7N9lek.js +71 -0
  11. package/dist/assets/AuthView-D2LWHrMp.js +106 -0
  12. package/dist/assets/BottomMenu-CIQiK_dJ.js +532 -0
  13. package/dist/assets/CalendarDate-DgQUMbNo.js +875 -0
  14. package/dist/assets/ChangePasswordView-Z6tUkw0u.js +133 -0
  15. package/dist/assets/ChatAgentAvatar-50YBnv3N.js +67 -0
  16. package/dist/assets/ChatFile-xZxmc2nV.js +146 -0
  17. package/dist/assets/ChatLayout-CTE_5SiM.js +96 -0
  18. package/dist/assets/ChatPersonalAgentsView-BGpHk03K.js +149 -0
  19. package/dist/assets/ChatSidebar-BkVwIypC.js +528 -0
  20. package/dist/assets/ChatView-BbbdeU9x.js +1559 -0
  21. package/dist/assets/ChatWorkflowAgentsView-BtunOxlC.js +116 -0
  22. package/dist/assets/CollectionParameter-BdcPG1lu.js +52 -0
  23. package/dist/assets/CommitMonoVariable-ytizKI8U.woff2 +0 -0
  24. package/dist/assets/CommunityNodeUpdateInfo-C37kca4W.js +273 -0
  25. package/dist/assets/CopyInput-DDZVu2iU.js +74 -0
  26. package/dist/assets/CredentialIcon-8YdTTFZ1.js +80 -0
  27. package/dist/assets/CredentialPicker-DWtj314o.js +293 -0
  28. package/dist/assets/CredentialSelectorModal-DTW2fKh0.js +138 -0
  29. package/dist/assets/CredentialsView-BjUchcCu.js +480 -0
  30. package/dist/assets/DataTableActions-DpAkoxg_.js +95 -0
  31. package/dist/assets/DataTableDetailsView-Coq7zdW5.js +41922 -0
  32. package/dist/assets/DataTableView-Cs-BIkzw.js +293 -0
  33. package/dist/assets/DemoFooter-Cga3jvi-.js +65 -0
  34. package/dist/assets/Draggable-vfvXl9Sp.js +105 -0
  35. package/dist/assets/EmptySharedSectionActionBox-DOXZtTCv.js +36 -0
  36. package/dist/assets/EnterpriseEdition.ee-D_rCFexM.js +15 -0
  37. package/dist/assets/EntityNotFound-3dhTRWsE.js +85 -0
  38. package/dist/assets/EntityUnAuthorised-ChJYZakE.js +66 -0
  39. package/dist/assets/ErrorView-zT9cX76a.js +61 -0
  40. package/dist/assets/EvaluationsRootView-C-OVWYnY.js +523 -0
  41. package/dist/assets/EvaluationsView-CJwJTruc.js +469 -0
  42. package/dist/assets/ExecutionsTime-DEQiyozR.js +573 -0
  43. package/dist/assets/ExecutionsView-Bd5Oh8TH.js +791 -0
  44. package/dist/assets/ExternalSecretsProviderConnectionSwitch.ee-C7Ih-uRo.js +191 -0
  45. package/dist/assets/FixedCollectionParameter-CYuTDW9t.js +496 -0
  46. package/dist/assets/ForgotMyPasswordView-Bs_L9P27.js +102 -0
  47. package/dist/assets/InsightsChartAverageRuntime-Bp3VA8_7.js +62 -0
  48. package/dist/assets/InsightsChartFailed-KPaNWoEr.js +52 -0
  49. package/dist/assets/InsightsChartFailureRate-DE6kE3FM.js +54 -0
  50. package/dist/assets/InsightsChartTimeSaved-auABNZlc.js +68 -0
  51. package/dist/assets/InsightsChartTotal-BKzYRKE7.js +56 -0
  52. package/dist/assets/InsightsDashboard-JWx4W6Db.js +473 -0
  53. package/dist/assets/InsightsPaywall-C8zLLKe8.js +63 -0
  54. package/dist/assets/InsightsSummary-cmN1lHDm.js +210 -0
  55. package/dist/assets/InsightsTableWorkflows-CqcC3IbQ.js +203 -0
  56. package/dist/assets/InterVariable-DiVDrmQJ.woff2 +0 -0
  57. package/dist/assets/InterVariable-Italic-FCBEiFp6.woff2 +0 -0
  58. package/dist/assets/ItemsRenderer-DC8WVyMv.js +922 -0
  59. package/dist/assets/KeyboardShortcutTooltip-D8PAK5JP.js +31 -0
  60. package/dist/assets/LogsPanel-BR06u9RK.js +52 -0
  61. package/dist/assets/LogsPanel-C-_acMHp.js +2325 -0
  62. package/dist/assets/MCPConnectWorkflowsModal-3g8_iUa4.js +303 -0
  63. package/dist/assets/MainHeader-DiQc1edn.js +2153 -0
  64. package/dist/assets/MainSidebar-CoPGG5Ea.js +804 -0
  65. package/dist/assets/MigrationRuleDetail-BAxk1Pvl.js +295 -0
  66. package/dist/assets/MigrationRules-IW9lZMpE.js +285 -0
  67. package/dist/assets/Modal-CIzXlZdZ.js +204 -0
  68. package/dist/assets/ModelByIdSelectorModal-DLvBjzJO.js +115 -0
  69. package/dist/assets/NDVEmptyState-33UoX00I.js +19743 -0
  70. package/dist/assets/NodeCreation-BNzbSWSB.js +240 -0
  71. package/dist/assets/NodeCreator-BftgCKx7.js +1288 -0
  72. package/dist/assets/NodeDetailsView-CsoQCpcF.js +1075 -0
  73. package/dist/assets/NodeDetailsViewV2-C_wNQR_3.js +981 -0
  74. package/dist/assets/NodeIcon-B9VW6tX6.js +87 -0
  75. package/dist/assets/NodeSettings-ZwVip6VR.js +1872 -0
  76. package/dist/assets/NodeView-D4WUEvLB.js +2452 -0
  77. package/dist/assets/OAuthConsentView-DlrUqZbT.js +230 -0
  78. package/dist/assets/PageViewLayout-NT1KPFgy.js +12 -0
  79. package/dist/assets/ParameterInputList-sG2nz-Jo.js +38091 -0
  80. package/dist/assets/PrebuiltAgentTemplatesView-Csi5U8dc.js +154 -0
  81. package/dist/assets/ProjectBreadcrumb-C_XiY7sc.js +98 -0
  82. package/dist/assets/ProjectCardBadge-t_hs7vzx.js +209 -0
  83. package/dist/assets/ProjectHeader-Dq5Ihb26.js +549 -0
  84. package/dist/assets/ProjectIcon-DY8gGuHX.js +64 -0
  85. package/dist/assets/ProjectRoleView-Du-KTrAC.js +435 -0
  86. package/dist/assets/ProjectRolesView-DjxM_y4u.js +239 -0
  87. package/dist/assets/ProjectSettings-C6kWuV21.js +966 -0
  88. package/dist/assets/ProjectSharing-CVUgNWAY.js +262 -0
  89. package/dist/assets/ProjectVariables-CJlAo3dv.js +467 -0
  90. package/dist/assets/ProviderSettingsModal-BUFC2ZLv.js +307 -0
  91. package/dist/assets/PushConnectionTracker-DPBnGV0v.js +27 -0
  92. package/dist/assets/ResolversView-3BdkvvYA.js +209 -0
  93. package/dist/assets/ResourceFiltersDropdown-dgyXpcEX.js +159 -0
  94. package/dist/assets/ResourcesListLayout-qBLtomK6.js +631 -0
  95. package/dist/assets/RunDataHtml-BrW0OQra.js +7 -0
  96. package/dist/assets/RunDataHtml-Cleia4Cj.js +40 -0
  97. package/dist/assets/RunDataJson-uxkrhYRK.js +227 -0
  98. package/dist/assets/RunDataJsonActions-DkPk7E8d.js +5007 -0
  99. package/dist/assets/RunDataParsedAiContent-CtPRjig-.js +26 -0
  100. package/dist/assets/RunDataParsedAiContent-WAuqLQ5M.js +192 -0
  101. package/dist/assets/RunDataSearch-YBWUr93C.js +141 -0
  102. package/dist/assets/RunDataTable-DcXaBynW.js +631 -0
  103. package/dist/assets/SamlOnboarding-BTdQ_hr3.js +78 -0
  104. package/dist/assets/SaveButton-D5sQSxIk.js +89 -0
  105. package/dist/assets/SelectedItemsInfo-BHZ-NvF5.js +58 -0
  106. package/dist/assets/SettingsApiView-IfZTMXx1.js +313 -0
  107. package/dist/assets/SettingsChatHubView-gWh2X6vX.js +285 -0
  108. package/dist/assets/SettingsCommunityNodesView-D8VQtpGY.js +349 -0
  109. package/dist/assets/SettingsExternalSecrets-CpMc7mkW.js +233 -0
  110. package/dist/assets/SettingsLdapView-CU5a2MAy.js +2553 -0
  111. package/dist/assets/SettingsLogStreamingView-uojTe-oX.js +375 -0
  112. package/dist/assets/SettingsMCPView-B5Swp1C_.js +1214 -0
  113. package/dist/assets/SettingsPersonalView-Cr3aGood.js +402 -0
  114. package/dist/assets/SettingsSourceControl-DXOvFDEY.js +547 -0
  115. package/dist/assets/SettingsSso-27MfU1HV.js +1032 -0
  116. package/dist/assets/SettingsUsageAndPlan-DqIO-G46.js +419 -0
  117. package/dist/assets/SettingsUsersView-DfHB4_Kh.js +833 -0
  118. package/dist/assets/SettingsView-C4sA7Uny.js +90 -0
  119. package/dist/assets/SetupTemplateFormStep-BmiSzZin.js +258 -0
  120. package/dist/assets/SetupView-VORZ-L_u.js +112 -0
  121. package/dist/assets/SetupWorkflowCredentialsButton-DTmkOAW5.js +73 -0
  122. package/dist/assets/SetupWorkflowFromTemplateView-B9NupdJE.js +286 -0
  123. package/dist/assets/SeverityTag-CX1qTTNA.js +45 -0
  124. package/dist/assets/SigninView-D9_Pm16j.js +358 -0
  125. package/dist/assets/SignoutView-BFsjEAGz.js +19 -0
  126. package/dist/assets/SignupView-Am4ot0QZ.js +137 -0
  127. package/dist/assets/SkeletonAgentCard-C5TL-h8F.js +191 -0
  128. package/dist/assets/TagsDropdown-Bvx_Hd6Q.js +230 -0
  129. package/dist/assets/TemplateCard-CyQ1GuVz.js +105 -0
  130. package/dist/assets/TemplateDetails-CZRusTxE.js +124 -0
  131. package/dist/assets/TemplateList-DKvbwuiY.js +333 -0
  132. package/dist/assets/TemplatesCollectionView-D8dxU8By.js +184 -0
  133. package/dist/assets/TemplatesSearchView-CebC_GLs.js +1230 -0
  134. package/dist/assets/TemplatesView-025CcmIY.js +57 -0
  135. package/dist/assets/TemplatesWorkflowView-C2JfwJAn.js +170 -0
  136. package/dist/assets/TestRunDetailView-Ck78TTWO.js +395 -0
  137. package/dist/assets/TextWithHighlights-BxumwGnv.js +57 -0
  138. package/dist/assets/TimeAgo-C6EN4lCs.js +123 -0
  139. package/dist/assets/ToolsSelectorModal-8QJoUvRL.js +368 -0
  140. package/dist/assets/TriggerPanel-B6pacLkk.js +1225 -0
  141. package/dist/assets/VirtualSchema-B3zGe_8b.js +2402 -0
  142. package/dist/assets/VirtualSchema-Dkh0Cu5z.js +37 -0
  143. package/dist/assets/VueMarkdown-CQqJL9vK.js +28 -0
  144. package/dist/assets/WorkerView-Caznsljo.js +563 -0
  145. package/dist/assets/WorkflowActivationErrorMessage-CGrfPi9O.js +17 -0
  146. package/dist/assets/WorkflowActivator-BINnz0f7.js +362 -0
  147. package/dist/assets/WorkflowExecutionsInfoAccordion-Dg37yEfT.js +166 -0
  148. package/dist/assets/WorkflowExecutionsLandingPage-V2wdubhK.js +93 -0
  149. package/dist/assets/WorkflowExecutionsPreview-DdJaqYV6.js +616 -0
  150. package/dist/assets/WorkflowExecutionsView-DV8ySTfn.js +808 -0
  151. package/dist/assets/WorkflowHistory-GtaBMzIM.js +973 -0
  152. package/dist/assets/WorkflowLocation-CQ9Sq-2y.js +164 -0
  153. package/dist/assets/WorkflowOnboardingView-C49gt0Jr.js +61 -0
  154. package/dist/assets/WorkflowPreview-CXdvv4Nq.js +186 -0
  155. package/dist/assets/WorkflowTagsDropdown-QwbICWjN.js +71 -0
  156. package/dist/assets/WorkflowsView-B-MWIECO.js +3253 -0
  157. package/dist/assets/_MapCache-CcdIl4Ae.js +363 -0
  158. package/dist/assets/_baseOrderBy-N8Be_6z6.js +2989 -0
  159. package/dist/assets/_initCloneObject-viQQyT6o.js +80 -0
  160. package/dist/assets/_plugin-vue_export-helper-BwBpWJRZ.js +6 -0
  161. package/dist/assets/aiTemplatesStarterCollection.store-nL9nePkK.js +656 -0
  162. package/dist/assets/apiKeys.store-BhOFmP2j.js +51 -0
  163. package/dist/assets/assistant.store-CNywgN4S.js +518 -0
  164. package/dist/assets/auth.eventBus-CWXS0Qp7.js +5 -0
  165. package/dist/assets/banners.store-CGEcBTDn.js +195 -0
  166. package/dist/assets/builder.store-Czk2ipDE.js +31417 -0
  167. package/dist/assets/buttons.esm-yintpW2E.js +364 -0
  168. package/dist/assets/chart-CNvyywtJ.js +10958 -0
  169. package/dist/assets/chartjs.utils-BAE52Cv9.js +155 -0
  170. package/dist/assets/chat.store-290YeyrQ.js +865 -0
  171. package/dist/assets/chatPanel.store-NDaawEZL.js +118 -0
  172. package/dist/assets/chunk-6z4oVpB-.js +36 -0
  173. package/dist/assets/col-Cmt4cmuS.js +158 -0
  174. package/dist/assets/constants-C8OH4tTq.js +106256 -0
  175. package/dist/assets/constants-DMrsrpD7.js +32 -0
  176. package/dist/assets/core-B9gt_4yk.js +4 -0
  177. package/dist/assets/core-CP5FY4aX.js +1202 -0
  178. package/dist/assets/core-CRbPymLT.js +9741 -0
  179. package/dist/assets/dataTable.store-DmipQsol.js +207 -0
  180. package/dist/assets/date-picker-2IDsBs2n.js +4115 -0
  181. package/dist/assets/dateFormatter-ik4-9_9r.js +33 -0
  182. package/dist/assets/dateformat-hG8NERse.js +181 -0
  183. package/dist/assets/dialog-lMho1TD8.js +425 -0
  184. package/dist/assets/dist-Cw46Is-h.js +151 -0
  185. package/dist/assets/doppler-B__k0MeW.webp +0 -0
  186. package/dist/assets/element-icons-B-tDfklg.woff +0 -0
  187. package/dist/assets/element-icons-_lZGOqcG.ttf +0 -0
  188. package/dist/assets/empty-BuGRxzl4.js +2210 -0
  189. package/dist/assets/en-CF30SCh2.js +95 -0
  190. package/dist/assets/en-DyO2pPiC.js +2 -0
  191. package/dist/assets/es-BkUFJVtD.js +43338 -0
  192. package/dist/assets/evaluation.constants-GYAwmJnh.js +284 -0
  193. package/dist/assets/executions.store-B9uRYwgv.js +205 -0
  194. package/dist/assets/exports-Crx_gvt_.js +1799 -0
  195. package/dist/assets/externalSecrets.ee.store-BJh4a_6G.js +118 -0
  196. package/dist/assets/fileUtils-CRWqOQje.js +20 -0
  197. package/dist/assets/folders.store-yAFj-5Vl.js +235 -0
  198. package/dist/assets/get-BcEmeOxn.js +2781 -0
  199. package/dist/assets/index-SL8542zQ.js +28372 -0
  200. package/dist/assets/insights.constants-BkJCYJTL.js +55 -0
  201. package/dist/assets/insights.store-BFc3kDUo.js +61 -0
  202. package/dist/assets/insights.utils-CcLXdrrz.js +77 -0
  203. package/dist/assets/isEmpty-C3XXoHqJ.js +35216 -0
  204. package/dist/assets/languageModules-9LyndCqU.js +13862 -0
  205. package/dist/assets/logStreaming.store-IZhWe_VK.js +190 -0
  206. package/dist/assets/mcp.constants-_Jcn7fPq.js +10 -0
  207. package/dist/assets/mcp.store-B9yfcAN9.js +116 -0
  208. package/dist/assets/merge-DhuTk1HM.js +564 -0
  209. package/dist/assets/nodeCreator.store-Bpnrwp2l.js +5444 -0
  210. package/dist/assets/nodeIcon-D6X-ENYt.js +102 -0
  211. package/dist/assets/nodeTransforms-RzcOM0v2.js +42 -0
  212. package/dist/assets/orderBy-Cu9F9DU_.js +15 -0
  213. package/dist/assets/path-browserify-RUt2u7iT.js +328 -0
  214. package/dist/assets/personalizedTemplatesV3.store-BGYp0YBN.js +334 -0
  215. package/dist/assets/pickBy-UI0Jt4wC.js +18 -0
  216. package/dist/assets/preload-helper-dyVz7ck7.js +59 -0
  217. package/dist/assets/radio-CSce3UT0.js +262 -0
  218. package/dist/assets/readyToRun.store-YEMvPUqo.js +626 -0
  219. package/dist/assets/readyToRunWorkflows.store-G3srgIze.js +1319 -0
  220. package/dist/assets/retry-BgHaYzbB.js +23 -0
  221. package/dist/assets/roles.store-CRf_zJTb.js +51 -0
  222. package/dist/assets/router-DNpzz3GH.js +2631 -0
  223. package/dist/assets/sanitize-html-CbW56HUN.js +10758 -0
  224. package/dist/assets/schemaPreview.store-DUgN1yVE.js +113 -0
  225. package/dist/assets/semver-Bk6DGseV.js +1306 -0
  226. package/dist/assets/smartDecimal-DAZl4HKA.js +6 -0
  227. package/dist/assets/sortByProperty-Cn7iGKYu.js +8 -0
  228. package/dist/assets/sourceControl.eventBus-D47xXSc_.js +3 -0
  229. package/dist/assets/sqlite3-DBpDb1lf.wasm +0 -0
  230. package/dist/assets/sqlite3-opfs-async-proxy-vVtmDGHX.js +461 -0
  231. package/dist/assets/sqlite3-worker1-bundler-friendly-DLarOZDL.js +9405 -0
  232. package/dist/assets/src-jviYSG25.js +55454 -0
  233. package/dist/assets/sso.store-DyApJwhx.js +139 -0
  234. package/dist/assets/style-E3CrYFV8.css +111829 -0
  235. package/dist/assets/table-we1DjFMV.js +3944 -0
  236. package/dist/assets/templateActions-bEDSARw2.js +65 -0
  237. package/dist/assets/templateTransforms-BHWiRbtR.js +43 -0
  238. package/dist/assets/truncate-C0KYt7i3.js +4176 -0
  239. package/dist/assets/typescript.worker-CYqLvLHh.js +152048 -0
  240. package/dist/assets/uniqBy-xDyuCRP0.js +10 -0
  241. package/dist/assets/usage.store-CU5J_nGm.js +100 -0
  242. package/dist/assets/useActions-B1JckIRj.js +255 -0
  243. package/dist/assets/useBeforeUnload-DiDkvI8p.js +40 -0
  244. package/dist/assets/useCanvasMapping-BXT7rGhC.js +12570 -0
  245. package/dist/assets/useCanvasOperations-8ULLtMkY.js +1765 -0
  246. package/dist/assets/useClipboard-DvjhVHqJ.js +39 -0
  247. package/dist/assets/useCommandBar-C4tLJbKt.js +2425 -0
  248. package/dist/assets/useCredentialResolvers-BKeFGJnY.js +78 -0
  249. package/dist/assets/useCustomAgent-DpILEt5e.js +471 -0
  250. package/dist/assets/useDebounce-Br5_1ug-.js +147 -0
  251. package/dist/assets/useExecutionData-M5iKsX6z.js +23 -0
  252. package/dist/assets/useExecutionDebugging-8azMzbnd.js +191 -0
  253. package/dist/assets/useExecutionHelpers-BgRRhpBM.js +91 -0
  254. package/dist/assets/useImportCurlCommand-CKiEmX5P.js +8891 -0
  255. package/dist/assets/useIntersectionObserver-BWMwOueh.js +33 -0
  256. package/dist/assets/useKeybindings-B2jfN6rd.js +62 -0
  257. package/dist/assets/useLogsTreeExpand-sZViUfdM.js +843 -0
  258. package/dist/assets/useMcp-DoMOIfqT.js +27 -0
  259. package/dist/assets/usePageRedirectionHelper-DjkznpX6.js +51 -0
  260. package/dist/assets/usePinnedData-BhZkqttf.js +203 -0
  261. package/dist/assets/usePushConnection-DMS-F_IW.js +513 -0
  262. package/dist/assets/useRecentResources-BVORr7eM.js +118 -0
  263. package/dist/assets/useRunWorkflow-LO7ffLp9.js +950 -0
  264. package/dist/assets/useSettingsItems-BhZXwMZn.js +144 -0
  265. package/dist/assets/useTelemetryContext-V6bv4YRq.js +34 -0
  266. package/dist/assets/useWorkflowActivate-DeSmDXjI.js +152 -0
  267. package/dist/assets/useWorkflowsCache-DtcEEAIR.js +179 -0
  268. package/dist/assets/userRoleProvisioning.store-kkSIdeTo.js +33 -0
  269. package/dist/assets/utils-DI7dLldp.js +54 -0
  270. package/dist/assets/versions.store-B1z2OrLE.js +191 -0
  271. package/dist/assets/vue-CydWIhxN.js +4378 -0
  272. package/dist/assets/vue-json-pretty-CsGX66mG.js +1130 -0
  273. package/dist/assets/vue.runtime.esm-bundler-tP5dCd7J.js +7325 -0
  274. package/dist/assets/xml-B_oj6Mle.js +2060 -0
  275. package/dist/favicon.ico +0 -0
  276. package/dist/index.html +157 -0
  277. package/dist/static/base-path.js +1 -0
  278. package/dist/static/community_package_tooltip_img.png +0 -0
  279. package/dist/static/data-mapping-gif.gif +0 -0
  280. package/dist/static/form-grey.svg +1 -0
  281. package/dist/static/google-auth/disabled.dark.png +0 -0
  282. package/dist/static/google-auth/disabled.png +0 -0
  283. package/dist/static/google-auth/focus.dark.png +0 -0
  284. package/dist/static/google-auth/focus.png +0 -0
  285. package/dist/static/google-auth/normal.dark.png +0 -0
  286. package/dist/static/google-auth/normal.png +0 -0
  287. package/dist/static/google-auth/pressed.dark.png +0 -0
  288. package/dist/static/google-auth/pressed.png +0 -0
  289. package/dist/static/n8n-logo.png +0 -0
  290. package/dist/static/og_image.png +0 -0
  291. package/dist/static/open-ai.svg +1 -0
  292. package/dist/static/openChat.png +0 -0
  293. package/dist/static/posthog.init.js +41 -0
  294. package/dist/static/prefers-color-scheme.css +5 -0
  295. package/dist/static/webhook-icon.svg +1 -0
  296. package/dist/tree-sitter-bash.wasm +0 -0
  297. package/dist/tree-sitter.wasm +0 -0
  298. package/eslint.config.mjs +59 -0
  299. package/index.html +45 -0
  300. package/index.js +0 -0
  301. package/package.json +147 -0
  302. package/postcss.config.cjs +6 -0
  303. package/scripts/fetch-node-popularity.mjs +102 -0
  304. package/stylelint.config.mjs +9 -0
  305. package/tailwind.config.js +8 -0
  306. package/tsconfig.json +36 -0
  307. package/vite/i18n-locales-hmr-helpers.ts +19 -0
  308. package/vite/source-map-js-shim.ts +1 -0
  309. package/vite/vite-plugin-node-popularity.mts +32 -0
  310. package/vite.config.mts +304 -0
@@ -0,0 +1,833 @@
1
+ import { C as computed, Cn as toDisplayString, D as createElementBlock, E as createCommentVNode, Gt as unref, I as guardReactiveProps, It as ref, M as createVNode, P as defineComponent, T as createBlock, U as mergeModels, Z as onMounted, _ as Fragment, bt as withCtx, et as openBlock, ft as useModel, it as renderList, j as createTextVNode, vn as normalizeClass, w as createBaseVNode, yn as normalizeProps } from "./vue.runtime.esm-bundler-tP5dCd7J.js";
2
+ import { W as useDebounceFn, it as I18nT, rt as useI18n } from "./core-CRbPymLT.js";
3
+ import { Cn as N8nIcon_default, Ct as N8nActionBox_default, Tt as ElSwitch, bn as N8nText_default, g as N8nUserInfo_default, ht as N8nTooltip_default, it as N8nActionToggle_default, k as N8nNotice_default, lt as N8nBadge_default, mt as N8nLink_default, ot as N8nActionDropdown_default, u as N8nDataTableServer_default, vn as N8nHeading_default, xn as N8nButton_default, yt as N8nInput_default } from "./src-jviYSG25.js";
4
+ import "./en-CF30SCh2.js";
5
+ import "./preload-helper-dyVz7ck7.js";
6
+ import { t as __plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BwBpWJRZ.js";
7
+ import "./truncate-C0KYt7i3.js";
8
+ import { Er as useUsersStore, Xn as useDocumentTitle, aa as useUIStore, h as useMessage, ms as useSettingsStore, no as INVITE_USER_MODAL_KEY, y as useToast, yr as hasPermission, za as DELETE_USER_MODAL_KEY } from "./builder.store-Czk2ipDE.js";
9
+ import "./empty-BuGRxzl4.js";
10
+ import { t as ElRadio } from "./radio-CSce3UT0.js";
11
+ import "./get-BcEmeOxn.js";
12
+ import "./sanitize-html-CbW56HUN.js";
13
+ import "./CalendarDate-DgQUMbNo.js";
14
+ import { t as Alert_default } from "./Alert-Dy86dyOr.js";
15
+ import "./path-browserify-RUt2u7iT.js";
16
+ import "./_MapCache-CcdIl4Ae.js";
17
+ import { Kr as ROLE, ni as USERS_LIST_SORT_OPTIONS, rs as MODAL_CONFIRM, yc as EnterpriseEditionFeature } from "./constants-C8OH4tTq.js";
18
+ import "./merge-DhuTk1HM.js";
19
+ import "./_baseOrderBy-N8Be_6z6.js";
20
+ import "./dateformat-hG8NERse.js";
21
+ import "./useDebounce-Br5_1ug-.js";
22
+ import { t as useClipboard } from "./useClipboard-DvjhVHqJ.js";
23
+ import "./versions.store-B1z2OrLE.js";
24
+ import { t as usePageRedirectionHelper } from "./usePageRedirectionHelper-DjkznpX6.js";
25
+ import { r as formatTimeAgo } from "./dateFormatter-ik4-9_9r.js";
26
+ import { t as EnterpriseEdition_ee_default } from "./EnterpriseEdition.ee-D_rCFexM.js";
27
+ import { n as useSSOStore } from "./sso.store-DyApJwhx.js";
28
+ import { t as useUserRoleProvisioningStore } from "./userRoleProvisioning.store-kkSIdeTo.js";
29
+ var _hoisted_1$1 = { key: 1 };
30
+ var SettingsUsersRoleCell_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
31
+ __name: "SettingsUsersRoleCell",
32
+ props: {
33
+ data: {},
34
+ roles: {},
35
+ actions: {}
36
+ },
37
+ emits: ["update:role"],
38
+ setup(__props, { emit: __emit }) {
39
+ const props = __props;
40
+ const emit = __emit;
41
+ const selectedRole = ref(props.data.role ?? ROLE.Default);
42
+ const isEditable = computed(() => props.data.role !== ROLE.Owner);
43
+ const roleLabel$1 = computed(() => props.roles[selectedRole.value]?.label);
44
+ const onActionSelect = (role) => {
45
+ emit("update:role", {
46
+ role,
47
+ userId: props.data.id
48
+ });
49
+ };
50
+ return (_ctx, _cache) => {
51
+ return openBlock(), createElementBlock("div", null, [isEditable.value ? (openBlock(), createBlock(unref(N8nActionDropdown_default), {
52
+ key: 0,
53
+ placement: "bottom-start",
54
+ items: props.actions,
55
+ "data-test-id": "user-role-dropdown",
56
+ onSelect: onActionSelect
57
+ }, {
58
+ activator: withCtx(() => [createBaseVNode("button", {
59
+ class: normalizeClass(_ctx.$style.roleLabel),
60
+ type: "button"
61
+ }, [createVNode(unref(N8nText_default), { color: "text-dark" }, {
62
+ default: withCtx(() => [createTextVNode(toDisplayString(roleLabel$1.value), 1)]),
63
+ _: 1
64
+ }), createVNode(unref(N8nIcon_default), {
65
+ color: "text-dark",
66
+ icon: "chevron-down",
67
+ size: "large"
68
+ })], 2)]),
69
+ menuItem: withCtx((item) => [createVNode(unref(ElRadio), {
70
+ "model-value": selectedRole.value,
71
+ label: item.id,
72
+ "onUpdate:modelValue": ($event) => selectedRole.value = item.id
73
+ }, {
74
+ default: withCtx(() => [createBaseVNode("span", { class: normalizeClass(_ctx.$style.radioLabel) }, [createVNode(unref(N8nText_default), {
75
+ color: "text-dark",
76
+ class: "pb-3xs"
77
+ }, {
78
+ default: withCtx(() => [createTextVNode(toDisplayString(item.label), 1)]),
79
+ _: 2
80
+ }, 1024), createVNode(unref(N8nText_default), {
81
+ color: "text-dark",
82
+ size: "small"
83
+ }, {
84
+ default: withCtx(() => [createTextVNode(toDisplayString(props.roles[item.id]?.desc), 1)]),
85
+ _: 2
86
+ }, 1024)], 2)]),
87
+ _: 2
88
+ }, 1032, [
89
+ "model-value",
90
+ "label",
91
+ "onUpdate:modelValue"
92
+ ])]),
93
+ _: 1
94
+ }, 8, ["items"])) : (openBlock(), createElementBlock("span", _hoisted_1$1, toDisplayString(roleLabel$1.value), 1))]);
95
+ };
96
+ }
97
+ });
98
+ var SettingsUsersRoleCell_vue_vue_type_style_index_0_lang_module_default = {
99
+ roleLabel: "_roleLabel_uhits_123",
100
+ radioLabel: "_radioLabel_uhits_133",
101
+ removeUser: "_removeUser_uhits_143"
102
+ };
103
+ var SettingsUsersRoleCell_default = /* @__PURE__ */ __plugin_vue_export_helper_default(SettingsUsersRoleCell_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": SettingsUsersRoleCell_vue_vue_type_style_index_0_lang_module_default }]]);
104
+ var SettingsUsersProjectsCell_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
105
+ __name: "SettingsUsersProjectsCell",
106
+ props: { data: {} },
107
+ setup(__props) {
108
+ const props = __props;
109
+ const i18n = useI18n();
110
+ const rolesAccessingAllProjects = ref([ROLE.Owner, ROLE.Admin]);
111
+ const visibleProjectsNum = ref(2);
112
+ const allProjects = computed(() => {
113
+ if (props.data.role && rolesAccessingAllProjects.value.includes(props.data.role)) return [i18n.baseText("settings.users.table.row.allProjects")];
114
+ else if (!props.data.projectRelations?.length) return [i18n.baseText("settings.users.table.row.personalProject")];
115
+ else return props.data.projectRelations.map(({ name }) => name);
116
+ });
117
+ const projects$1 = computed(() => ({
118
+ visible: allProjects.value.slice(0, visibleProjectsNum.value),
119
+ additional: allProjects.value.slice(visibleProjectsNum.value)
120
+ }));
121
+ return (_ctx, _cache) => {
122
+ return openBlock(), createElementBlock("div", { class: normalizeClass(_ctx.$style.projects) }, [
123
+ (openBlock(true), createElementBlock(Fragment, null, renderList(projects$1.value.visible, (project$1, index) => {
124
+ return openBlock(), createElementBlock(Fragment, { key: index }, [createBaseVNode("span", { class: normalizeClass(_ctx.$style.project) }, toDisplayString(project$1), 3), index < projects$1.value.visible.length - 1 ? (openBlock(), createElementBlock("span", {
125
+ key: 0,
126
+ class: normalizeClass(_ctx.$style.comma)
127
+ }, ",", 2)) : createCommentVNode("", true)], 64);
128
+ }), 128)),
129
+ projects$1.value.additional.length > 0 ? (openBlock(), createElementBlock("span", {
130
+ key: 0,
131
+ class: normalizeClass(_ctx.$style.comma)
132
+ }, ",", 2)) : createCommentVNode("", true),
133
+ projects$1.value.additional.length > 0 ? (openBlock(), createBlock(unref(N8nTooltip_default), { key: 1 }, {
134
+ content: withCtx(() => [createBaseVNode("ul", { class: normalizeClass(_ctx.$style.projectList) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(projects$1.value.additional, (project$1, index) => {
135
+ return openBlock(), createElementBlock("li", { key: index }, toDisplayString(project$1), 1);
136
+ }), 128))], 2)]),
137
+ default: withCtx(() => [createBaseVNode("span", { class: normalizeClass(_ctx.$style.project) }, "+ " + toDisplayString(projects$1.value.additional.length), 3)]),
138
+ _: 1
139
+ })) : createCommentVNode("", true)
140
+ ], 2);
141
+ };
142
+ }
143
+ });
144
+ var SettingsUsersProjectsCell_vue_vue_type_style_index_0_lang_module_default = {
145
+ projects: "_projects_1l6q5_123",
146
+ project: "_project_1l6q5_123",
147
+ comma: "_comma_1l6q5_138",
148
+ projectList: "_projectList_1l6q5_143"
149
+ };
150
+ var SettingsUsersProjectsCell_default = /* @__PURE__ */ __plugin_vue_export_helper_default(SettingsUsersProjectsCell_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": SettingsUsersProjectsCell_vue_vue_type_style_index_0_lang_module_default }]]);
151
+ var SettingsUsersActionsCell_default = /* @__PURE__ */ defineComponent({
152
+ __name: "SettingsUsersActionsCell",
153
+ props: {
154
+ data: {},
155
+ actions: {}
156
+ },
157
+ emits: ["action"],
158
+ setup(__props, { emit: __emit }) {
159
+ const props = __props;
160
+ const emit = __emit;
161
+ const onUserAction = (action) => {
162
+ emit("action", {
163
+ action,
164
+ userId: props.data.id
165
+ });
166
+ };
167
+ return (_ctx, _cache) => {
168
+ return openBlock(), createElementBlock("div", null, [props.data.signInType !== "ldap" && props.actions.length > 0 ? (openBlock(), createBlock(unref(N8nActionToggle_default), {
169
+ key: 0,
170
+ placement: "bottom",
171
+ actions: props.actions,
172
+ theme: "dark",
173
+ onAction: onUserAction
174
+ }, null, 8, ["actions"])) : createCommentVNode("", true)]);
175
+ };
176
+ }
177
+ });
178
+ var SettingsUsersLastActiveCell_default = /* @__PURE__ */ defineComponent({
179
+ __name: "SettingsUsersLastActiveCell",
180
+ props: { data: {} },
181
+ setup(__props) {
182
+ const i18n = useI18n();
183
+ const props = __props;
184
+ const formattedDate = computed(() => props.data.lastActiveAt ? formatTimeAgo(props.data.lastActiveAt) : i18n.baseText("generic.never"));
185
+ return (_ctx, _cache) => {
186
+ return openBlock(), createElementBlock("span", null, toDisplayString(formattedDate.value), 1);
187
+ };
188
+ }
189
+ });
190
+ var _hoisted_1 = { class: "pt-xs pb-xs" };
191
+ var SettingsUsersTable_default = /* @__PURE__ */ defineComponent({
192
+ __name: "SettingsUsersTable",
193
+ props: /* @__PURE__ */ mergeModels({
194
+ data: {},
195
+ actions: {},
196
+ loading: { type: Boolean },
197
+ canEditRole: { type: Boolean }
198
+ }, {
199
+ "tableOptions": { default: () => ({}) },
200
+ "tableOptionsModifiers": {}
201
+ }),
202
+ emits: /* @__PURE__ */ mergeModels([
203
+ "update:options",
204
+ "update:role",
205
+ "action"
206
+ ], ["update:tableOptions"]),
207
+ setup(__props, { emit: __emit }) {
208
+ const i18n = useI18n();
209
+ const settingsStore = useSettingsStore();
210
+ const props = __props;
211
+ const emit = __emit;
212
+ const tableOptions = useModel(__props, "tableOptions");
213
+ const rows = computed(() => props.data.items);
214
+ const headers = ref([
215
+ {
216
+ title: i18n.baseText("settings.users.table.header.user"),
217
+ key: "name",
218
+ width: 400,
219
+ value(row) {
220
+ return {
221
+ ...row,
222
+ isPendingUser: row.isPending
223
+ };
224
+ }
225
+ },
226
+ {
227
+ title: i18n.baseText("settings.users.table.header.accountType"),
228
+ key: "role"
229
+ },
230
+ {
231
+ title: i18n.baseText("settings.users.table.header.lastActive"),
232
+ key: "lastActiveAt",
233
+ value(row) {
234
+ return {
235
+ ...row,
236
+ lastActiveAt: row.lastActiveAt ?? ""
237
+ };
238
+ }
239
+ },
240
+ {
241
+ title: i18n.baseText("settings.users.table.header.2fa"),
242
+ key: "mfaEnabled",
243
+ value(row) {
244
+ return row.mfaEnabled ? i18n.baseText("settings.users.table.row.2fa.enabled") : i18n.baseText("settings.users.table.row.2fa.disabled");
245
+ }
246
+ },
247
+ {
248
+ title: i18n.baseText("projects.menu.title"),
249
+ key: "projects",
250
+ disableSort: true,
251
+ value() {}
252
+ },
253
+ {
254
+ title: "",
255
+ key: "actions",
256
+ align: "end",
257
+ width: 46,
258
+ disableSort: true,
259
+ value() {}
260
+ }
261
+ ]);
262
+ const roles = computed(() => ({
263
+ [ROLE.Owner]: {
264
+ label: i18n.baseText("auth.roles.owner"),
265
+ desc: ""
266
+ },
267
+ [ROLE.Admin]: {
268
+ label: i18n.baseText("auth.roles.admin"),
269
+ desc: i18n.baseText("settings.users.table.row.role.description.admin")
270
+ },
271
+ [ROLE.Member]: {
272
+ label: i18n.baseText("auth.roles.member"),
273
+ desc: i18n.baseText("settings.users.table.row.role.description.member")
274
+ },
275
+ ...settingsStore.isChatFeatureEnabled && { [ROLE.ChatUser]: {
276
+ label: i18n.baseText("auth.roles.chatUser"),
277
+ desc: i18n.baseText("settings.users.table.row.role.description.chatUser")
278
+ } },
279
+ [ROLE.Default]: {
280
+ label: i18n.baseText("auth.roles.default"),
281
+ desc: ""
282
+ }
283
+ }));
284
+ const roleActions = computed(() => [
285
+ {
286
+ id: ROLE.Member,
287
+ label: i18n.baseText("auth.roles.member")
288
+ },
289
+ ...settingsStore.isChatFeatureEnabled ? [{
290
+ id: ROLE.ChatUser,
291
+ label: i18n.baseText("auth.roles.chatUser")
292
+ }] : [],
293
+ {
294
+ id: ROLE.Admin,
295
+ label: i18n.baseText("auth.roles.admin")
296
+ }
297
+ ]);
298
+ const canUpdateRole = computed(() => {
299
+ if (!hasPermission(["rbac"], { rbac: { scope: ["user:update", "user:changeRole"] } })) return false;
300
+ if (!props.canEditRole) return false;
301
+ return true;
302
+ });
303
+ const filterActions = (user) => {
304
+ if (user.isOwner) return [];
305
+ return props.actions.filter((action) => action.guard?.({
306
+ ...user,
307
+ isPendingUser: user.isPending
308
+ }) ?? true);
309
+ };
310
+ const onRoleChange = ({ role, userId }) => {
311
+ emit("update:role", {
312
+ role,
313
+ userId
314
+ });
315
+ };
316
+ return (_ctx, _cache) => {
317
+ return openBlock(), createElementBlock("div", null, [createVNode(unref(N8nDataTableServer_default), {
318
+ "sort-by": tableOptions.value.sortBy,
319
+ "onUpdate:sortBy": _cache[1] || (_cache[1] = ($event) => tableOptions.value.sortBy = $event),
320
+ page: tableOptions.value.page,
321
+ "onUpdate:page": _cache[2] || (_cache[2] = ($event) => tableOptions.value.page = $event),
322
+ "items-per-page": tableOptions.value.itemsPerPage,
323
+ "onUpdate:itemsPerPage": _cache[3] || (_cache[3] = ($event) => tableOptions.value.itemsPerPage = $event),
324
+ headers: headers.value,
325
+ items: rows.value,
326
+ "items-length": _ctx.data.count,
327
+ "page-sizes": [
328
+ 10,
329
+ 25,
330
+ 50
331
+ ],
332
+ "onUpdate:options": _cache[4] || (_cache[4] = ($event) => emit("update:options", $event))
333
+ }, {
334
+ [`item.name`]: withCtx(({ value }) => [createBaseVNode("div", _hoisted_1, [createVNode(unref(N8nUserInfo_default), normalizeProps(guardReactiveProps(value)), null, 16)])]),
335
+ [`item.role`]: withCtx(({ item }) => [canUpdateRole.value ? (openBlock(), createBlock(SettingsUsersRoleCell_default, {
336
+ key: 0,
337
+ data: item,
338
+ roles: roles.value,
339
+ actions: roleActions.value,
340
+ "onUpdate:role": onRoleChange
341
+ }, null, 8, [
342
+ "data",
343
+ "roles",
344
+ "actions"
345
+ ])) : (openBlock(), createBlock(unref(N8nText_default), {
346
+ key: 1,
347
+ color: "text-dark"
348
+ }, {
349
+ default: withCtx(() => [createTextVNode(toDisplayString(roles.value[item.role ?? unref(ROLE).Default]?.label), 1)]),
350
+ _: 2
351
+ }, 1024))]),
352
+ [`item.lastActiveAt`]: withCtx(({ item }) => [createVNode(SettingsUsersLastActiveCell_default, { data: item }, null, 8, ["data"])]),
353
+ [`item.projects`]: withCtx(({ item }) => [createVNode(SettingsUsersProjectsCell_default, { data: item }, null, 8, ["data"])]),
354
+ [`item.actions`]: withCtx(({ item }) => [createVNode(SettingsUsersActionsCell_default, {
355
+ data: item,
356
+ actions: filterActions(item),
357
+ onAction: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("action", $event))
358
+ }, null, 8, ["data", "actions"])]),
359
+ _: 2
360
+ }, 1032, [
361
+ "sort-by",
362
+ "page",
363
+ "items-per-page",
364
+ "headers",
365
+ "items",
366
+ "items-length"
367
+ ])]);
368
+ };
369
+ }
370
+ });
371
+ var tooltipKey = "settings.personal.mfa.enforce.unlicensed_tooltip";
372
+ var SettingsUsersView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
373
+ __name: "SettingsUsersView",
374
+ setup(__props) {
375
+ const clipboard = useClipboard();
376
+ const { showToast, showError } = useToast();
377
+ const message = useMessage();
378
+ const settingsStore = useSettingsStore();
379
+ const uiStore = useUIStore();
380
+ const usersStore = useUsersStore();
381
+ const ssoStore = useSSOStore();
382
+ const documentTitle = useDocumentTitle();
383
+ const pageRedirectionHelper = usePageRedirectionHelper();
384
+ const userRoleProvisioningStore = useUserRoleProvisioningStore();
385
+ const i18n = useI18n();
386
+ const search$1 = ref("");
387
+ const usersTableState = ref({
388
+ page: 0,
389
+ itemsPerPage: 10,
390
+ sortBy: [
391
+ {
392
+ id: "firstName",
393
+ desc: false
394
+ },
395
+ {
396
+ id: "lastName",
397
+ desc: false
398
+ },
399
+ {
400
+ id: "email",
401
+ desc: false
402
+ }
403
+ ]
404
+ });
405
+ const showUMSetupWarning = computed(() => hasPermission(["defaultUser"]));
406
+ const isEnforceMFAEnabled = computed(() => settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.EnforceMFA]);
407
+ const isInstanceRoleProvisioningEnabled = computed(() => userRoleProvisioningStore.provisioningConfig?.scopesProvisionInstanceRole || false);
408
+ onMounted(async () => {
409
+ documentTitle.set(i18n.baseText("settings.users"));
410
+ if (!showUMSetupWarning.value) await updateUsersTableData(usersTableState.value);
411
+ await userRoleProvisioningStore.getProvisioningConfig();
412
+ });
413
+ const usersListActions = computed(() => {
414
+ return [
415
+ {
416
+ label: i18n.baseText("settings.users.actions.copyInviteLink"),
417
+ value: "copyInviteLink",
418
+ guard: (user) => usersStore.usersLimitNotReached && !user.firstName && !!user.inviteAcceptUrl
419
+ },
420
+ {
421
+ label: i18n.baseText("settings.users.actions.reinvite"),
422
+ value: "reinvite",
423
+ guard: (user) => usersStore.usersLimitNotReached && !user.firstName && settingsStore.isSmtpSetup
424
+ },
425
+ {
426
+ label: i18n.baseText("settings.users.actions.delete"),
427
+ value: "delete",
428
+ guard: (user) => hasPermission(["rbac"], { rbac: { scope: "user:delete" } }) && user.id !== usersStore.currentUserId
429
+ },
430
+ {
431
+ label: i18n.baseText("settings.users.actions.copyPasswordResetLink"),
432
+ value: "copyPasswordResetLink",
433
+ guard: (user) => hasPermission(["rbac"], { rbac: { scope: "user:resetPassword" } }) && usersStore.usersLimitNotReached && !user.isPendingUser && user.id !== usersStore.currentUserId
434
+ },
435
+ {
436
+ label: i18n.baseText("settings.users.actions.allowSSOManualLogin"),
437
+ value: "allowSSOManualLogin",
438
+ guard: (user) => !!ssoStore.isSamlLoginEnabled && !user.settings?.allowSSOManualLogin
439
+ },
440
+ {
441
+ label: i18n.baseText("settings.users.actions.disallowSSOManualLogin"),
442
+ value: "disallowSSOManualLogin",
443
+ guard: (user) => !!ssoStore.isSamlLoginEnabled && user.settings?.allowSSOManualLogin === true
444
+ }
445
+ ];
446
+ });
447
+ const isAdvancedPermissionsEnabled = computed(() => settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.AdvancedPermissions]);
448
+ const userRoles = computed(() => {
449
+ return [
450
+ {
451
+ value: ROLE.Member,
452
+ label: i18n.baseText("auth.roles.member")
453
+ },
454
+ {
455
+ value: ROLE.ChatUser,
456
+ label: i18n.baseText("auth.roles.chatUser"),
457
+ disabled: !isAdvancedPermissionsEnabled.value
458
+ },
459
+ {
460
+ value: ROLE.Admin,
461
+ label: i18n.baseText("auth.roles.admin"),
462
+ disabled: !isAdvancedPermissionsEnabled.value
463
+ }
464
+ ];
465
+ });
466
+ async function onUsersListAction({ action, userId }) {
467
+ switch (action) {
468
+ case "delete":
469
+ await onDelete(userId);
470
+ break;
471
+ case "reinvite":
472
+ await onReinvite(userId);
473
+ break;
474
+ case "copyInviteLink":
475
+ await onCopyInviteLink(userId);
476
+ break;
477
+ case "copyPasswordResetLink":
478
+ await onCopyPasswordResetLink(userId);
479
+ break;
480
+ case "allowSSOManualLogin":
481
+ await onAllowSSOManualLogin(userId);
482
+ break;
483
+ case "disallowSSOManualLogin":
484
+ await onDisallowSSOManualLogin(userId);
485
+ break;
486
+ }
487
+ }
488
+ function onInvite() {
489
+ uiStore.openModalWithData({
490
+ name: INVITE_USER_MODAL_KEY,
491
+ data: { afterInvite: async () => {
492
+ await updateUsersTableData(usersTableState.value);
493
+ } }
494
+ });
495
+ }
496
+ async function onDelete(userId) {
497
+ uiStore.openModalWithData({
498
+ name: DELETE_USER_MODAL_KEY,
499
+ data: {
500
+ userId,
501
+ afterDelete: async () => {
502
+ await updateUsersTableData(usersTableState.value);
503
+ }
504
+ }
505
+ });
506
+ }
507
+ async function onReinvite(userId) {
508
+ try {
509
+ const user = usersStore.usersList.state.items.find((u) => u.id === userId);
510
+ if (user?.email && user?.role) {
511
+ if (!["global:admin", "global:member"].includes(user.role)) throw new Error("Invalid role name on reinvite");
512
+ await usersStore.reinviteUser({
513
+ email: user.email,
514
+ role: user.role
515
+ });
516
+ showToast({
517
+ type: "success",
518
+ title: i18n.baseText("settings.users.inviteResent"),
519
+ message: i18n.baseText("settings.users.emailSentTo", { interpolate: { email: user.email ?? "" } })
520
+ });
521
+ }
522
+ } catch (e) {
523
+ showError(e, i18n.baseText("settings.users.userReinviteError"));
524
+ }
525
+ }
526
+ async function onCopyInviteLink(userId) {
527
+ const user = usersStore.usersList.state.items.find((u) => u.id === userId);
528
+ if (user?.inviteAcceptUrl) {
529
+ clipboard.copy(user.inviteAcceptUrl);
530
+ showToast({
531
+ type: "success",
532
+ title: i18n.baseText("settings.users.inviteUrlCreated"),
533
+ message: i18n.baseText("settings.users.inviteUrlCreated.message")
534
+ });
535
+ }
536
+ }
537
+ async function onCopyPasswordResetLink(userId) {
538
+ try {
539
+ const user = usersStore.usersList.state.items.find((u) => u.id === userId);
540
+ if (user) {
541
+ const url = await usersStore.getUserPasswordResetLink(user);
542
+ clipboard.copy(url.link);
543
+ showToast({
544
+ type: "success",
545
+ title: i18n.baseText("settings.users.passwordResetUrlCreated"),
546
+ message: i18n.baseText("settings.users.passwordResetUrlCreated.message")
547
+ });
548
+ }
549
+ } catch (error) {
550
+ showError(error, i18n.baseText("settings.users.passwordResetLinkError"));
551
+ }
552
+ }
553
+ async function onAllowSSOManualLogin(userId) {
554
+ const user = usersStore.usersList.state.items.find((u) => u.id === userId);
555
+ if (user) {
556
+ if (!user.settings) user.settings = {};
557
+ user.settings.allowSSOManualLogin = true;
558
+ await usersStore.updateOtherUserSettings(userId, user.settings);
559
+ await updateUsersTableData(usersTableState.value);
560
+ showToast({
561
+ type: "success",
562
+ title: i18n.baseText("settings.users.allowSSOManualLogin"),
563
+ message: i18n.baseText("settings.users.allowSSOManualLogin.message")
564
+ });
565
+ }
566
+ }
567
+ async function onDisallowSSOManualLogin(userId) {
568
+ const user = usersStore.usersList.state.items.find((u) => u.id === userId);
569
+ if (user?.settings) {
570
+ user.settings.allowSSOManualLogin = false;
571
+ await usersStore.updateOtherUserSettings(userId, user.settings);
572
+ await updateUsersTableData(usersTableState.value);
573
+ showToast({
574
+ type: "success",
575
+ title: i18n.baseText("settings.users.disallowSSOManualLogin"),
576
+ message: i18n.baseText("settings.users.disallowSSOManualLogin.message")
577
+ });
578
+ }
579
+ }
580
+ function goToUpgrade() {
581
+ pageRedirectionHelper.goToUpgrade("settings-users", "upgrade-users");
582
+ }
583
+ function goToUpgradeAdvancedPermissions() {
584
+ pageRedirectionHelper.goToUpgrade("settings-users", "upgrade-advanced-permissions");
585
+ }
586
+ const onUpdateRole = async (payload) => {
587
+ const user = usersStore.usersList.state.items.find((u) => u.id === payload.userId);
588
+ if (!user) {
589
+ showError(/* @__PURE__ */ new Error("User not found"), i18n.baseText("settings.users.userNotFound"));
590
+ return;
591
+ }
592
+ await onRoleChange(user, payload.role);
593
+ };
594
+ async function onRoleChange(user, newRoleName) {
595
+ if (newRoleName === user.role) return;
596
+ const name = user.firstName && user.lastName ? `${user.firstName} ${user.lastName}` : user.email ?? "";
597
+ const role = userRoles.value.find(({ value }) => value === newRoleName)?.label ?? newRoleName;
598
+ if (newRoleName === ROLE.ChatUser) {
599
+ if (await message.confirm(i18n.baseText("settings.users.userRoleUpdated.confirm.message", { interpolate: { role } }), i18n.baseText("settings.users.userRoleUpdated.confirm.title", { interpolate: { user: name } }), {
600
+ confirmButtonText: i18n.baseText("settings.users.userRoleUpdated.confirm.button"),
601
+ cancelButtonText: i18n.baseText("settings.users.userRoleUpdated.cancel.button")
602
+ }) !== "confirm") return;
603
+ }
604
+ try {
605
+ await usersStore.updateGlobalRole({
606
+ id: user.id,
607
+ newRoleName
608
+ });
609
+ showToast({
610
+ type: "success",
611
+ title: i18n.baseText("settings.users.userRoleUpdated"),
612
+ message: i18n.baseText("settings.users.userRoleUpdated.message", { interpolate: {
613
+ user: name,
614
+ role
615
+ } })
616
+ });
617
+ } catch (e) {
618
+ showError(e, i18n.baseText("settings.users.userRoleUpdatedError"));
619
+ }
620
+ }
621
+ const isValidSortKey = (key) => USERS_LIST_SORT_OPTIONS.includes(key);
622
+ const updateUsersTableData = async ({ page, itemsPerPage, sortBy }) => {
623
+ try {
624
+ usersTableState.value = {
625
+ page,
626
+ itemsPerPage,
627
+ sortBy
628
+ };
629
+ const skip = page * itemsPerPage;
630
+ const take = itemsPerPage;
631
+ const transformedSortBy = sortBy.flatMap(({ id, desc }) => {
632
+ const dir = desc ? "desc" : "asc";
633
+ if (id === "name") return [
634
+ `firstName:${dir}`,
635
+ `lastName:${dir}`,
636
+ `email:${dir}`
637
+ ];
638
+ return `${id}:${dir}`;
639
+ }).filter(isValidSortKey);
640
+ await usersStore.usersList.execute(0, {
641
+ skip,
642
+ take,
643
+ sortBy: transformedSortBy,
644
+ expand: ["projectRelations"],
645
+ filter: { fullText: search$1.value.trim() }
646
+ });
647
+ } catch (error) {
648
+ showError(error, i18n.baseText("settings.users.table.update.error"));
649
+ }
650
+ };
651
+ const debouncedUpdateUsersTableData = useDebounceFn(() => {
652
+ usersTableState.value.page = 0;
653
+ updateUsersTableData(usersTableState.value);
654
+ }, 300);
655
+ const onSearch = (value) => {
656
+ search$1.value = value;
657
+ debouncedUpdateUsersTableData();
658
+ };
659
+ async function onUpdateMfaEnforced(value) {
660
+ const boolValue = typeof value === "boolean" ? value : Boolean(value);
661
+ try {
662
+ await usersStore.updateEnforceMfa(boolValue);
663
+ showToast({
664
+ type: "success",
665
+ title: boolValue ? i18n.baseText("settings.personal.mfa.enforce.enabled.title") : i18n.baseText("settings.personal.mfa.enforce.disabled.title"),
666
+ message: boolValue ? i18n.baseText("settings.personal.mfa.enforce.enabled.message") : i18n.baseText("settings.personal.mfa.enforce.disabled.message")
667
+ });
668
+ } catch (error) {
669
+ showError(error, i18n.baseText("settings.personal.mfa.enforce.error"));
670
+ }
671
+ }
672
+ return (_ctx, _cache) => {
673
+ return openBlock(), createElementBlock("div", { class: normalizeClass(_ctx.$style.container) }, [
674
+ createVNode(unref(N8nHeading_default), {
675
+ tag: "h1",
676
+ size: "2xlarge",
677
+ class: "mb-xl"
678
+ }, {
679
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("settings.users")) + " ", 1), !showUMSetupWarning.value ? (openBlock(), createBlock(unref(N8nText_default), {
680
+ key: 0,
681
+ class: normalizeClass(_ctx.$style.userCount),
682
+ color: "text-light"
683
+ }, {
684
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("settings.users.count", {
685
+ interpolate: { count: unref(usersStore).usersList.state.count },
686
+ adjustToNumber: unref(usersStore).usersList.state.count
687
+ })), 1)]),
688
+ _: 1
689
+ }, 8, ["class"])) : createCommentVNode("", true)]),
690
+ _: 1
691
+ }),
692
+ !unref(usersStore).usersLimitNotReached ? (openBlock(), createElementBlock("div", {
693
+ key: 0,
694
+ class: normalizeClass(_ctx.$style.setupInfoContainer)
695
+ }, [createVNode(unref(N8nActionBox_default), {
696
+ heading: unref(i18n).baseText(unref(uiStore).contextBasedTranslationKeys.users.settings.unavailable.title),
697
+ description: unref(i18n).baseText(unref(uiStore).contextBasedTranslationKeys.users.settings.unavailable.description),
698
+ "button-text": unref(i18n).baseText(unref(uiStore).contextBasedTranslationKeys.users.settings.unavailable.button),
699
+ "onClick:button": goToUpgrade
700
+ }, null, 8, [
701
+ "heading",
702
+ "description",
703
+ "button-text"
704
+ ])], 2)) : createCommentVNode("", true),
705
+ !isAdvancedPermissionsEnabled.value ? (openBlock(), createBlock(unref(N8nNotice_default), { key: 1 }, {
706
+ default: withCtx(() => [createVNode(unref(I18nT), {
707
+ keypath: "settings.users.advancedPermissions.warning",
708
+ scope: "global"
709
+ }, {
710
+ link: withCtx(() => [createVNode(unref(N8nLink_default), {
711
+ "data-test-id": "upgrade-permissions-link",
712
+ size: "small",
713
+ onClick: goToUpgradeAdvancedPermissions
714
+ }, {
715
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("generic.upgrade")), 1)]),
716
+ _: 1
717
+ })]),
718
+ _: 1
719
+ })]),
720
+ _: 1
721
+ })) : createCommentVNode("", true),
722
+ createBaseVNode("div", { class: normalizeClass(_ctx.$style.settingsContainer) }, [createBaseVNode("div", { class: normalizeClass(_ctx.$style.settingsContainerInfo) }, [createVNode(unref(N8nText_default), { bold: true }, {
723
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("settings.personal.mfa.enforce.title")) + " ", 1), !isEnforceMFAEnabled.value ? (openBlock(), createBlock(unref(N8nBadge_default), {
724
+ key: 0,
725
+ class: "ml-4xs"
726
+ }, {
727
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("generic.upgrade")), 1)]),
728
+ _: 1
729
+ })) : createCommentVNode("", true)]),
730
+ _: 1
731
+ }), createVNode(unref(N8nText_default), {
732
+ size: "small",
733
+ color: "text-light"
734
+ }, {
735
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("settings.personal.mfa.enforce.message")), 1)]),
736
+ _: 1
737
+ })], 2), createBaseVNode("div", { class: normalizeClass(_ctx.$style.settingsContainerAction) }, [createVNode(EnterpriseEdition_ee_default, { features: [unref(EnterpriseEditionFeature).EnforceMFA] }, {
738
+ fallback: withCtx(() => [createVNode(unref(N8nTooltip_default), null, {
739
+ content: withCtx(() => [createVNode(unref(I18nT), {
740
+ keypath: tooltipKey,
741
+ tag: "span",
742
+ scope: "global"
743
+ }, {
744
+ action: withCtx(() => [createBaseVNode("a", { onClick: goToUpgrade }, toDisplayString(unref(i18n).baseText("settings.personal.mfa.enforce.unlicensed_tooltip.link")), 1)]),
745
+ _: 1
746
+ })]),
747
+ default: withCtx(() => [createVNode(unref(ElSwitch), {
748
+ "model-value": unref(settingsStore).isMFAEnforced,
749
+ size: "large",
750
+ disabled: true
751
+ }, null, 8, ["model-value"])]),
752
+ _: 1
753
+ })]),
754
+ default: withCtx(() => [createVNode(unref(ElSwitch), {
755
+ "model-value": unref(settingsStore).isMFAEnforced,
756
+ size: "large",
757
+ "data-test-id": "enable-force-mfa",
758
+ "onUpdate:modelValue": onUpdateMfaEnforced
759
+ }, null, 8, ["model-value"])]),
760
+ _: 1
761
+ }, 8, ["features"])], 2)], 2),
762
+ isInstanceRoleProvisioningEnabled.value ? (openBlock(), createElementBlock("div", {
763
+ key: 2,
764
+ class: normalizeClass(_ctx.$style.container)
765
+ }, [createVNode(Alert_default, {
766
+ type: "info",
767
+ title: unref(i18n).baseText("settings.provisioningInstanceRolesHandledBySsoProvider.description")
768
+ }, null, 8, ["title"])], 2)) : createCommentVNode("", true),
769
+ !showUMSetupWarning.value ? (openBlock(), createElementBlock("div", {
770
+ key: 3,
771
+ class: normalizeClass(_ctx.$style.buttonContainer)
772
+ }, [createVNode(unref(N8nInput_default), {
773
+ class: normalizeClass(_ctx.$style.search),
774
+ "model-value": search$1.value,
775
+ placeholder: unref(i18n).baseText("settings.users.search.placeholder"),
776
+ clearable: "",
777
+ "data-test-id": "users-list-search",
778
+ "onUpdate:modelValue": onSearch
779
+ }, {
780
+ prefix: withCtx(() => [createVNode(unref(N8nIcon_default), { icon: "search" })]),
781
+ _: 1
782
+ }, 8, [
783
+ "class",
784
+ "model-value",
785
+ "placeholder"
786
+ ]), createVNode(unref(N8nTooltip_default), { disabled: !unref(ssoStore).isSamlLoginEnabled }, {
787
+ content: withCtx(() => [createBaseVNode("span", null, toDisplayString(unref(i18n).baseText("settings.users.invite.tooltip")), 1)]),
788
+ default: withCtx(() => [createBaseVNode("div", null, [createVNode(unref(N8nButton_default), {
789
+ disabled: unref(ssoStore).isSamlLoginEnabled || !unref(usersStore).usersLimitNotReached || isInstanceRoleProvisioningEnabled.value,
790
+ label: unref(i18n).baseText("settings.users.invite"),
791
+ size: "large",
792
+ "data-test-id": "settings-users-invite-button",
793
+ onClick: onInvite
794
+ }, null, 8, ["disabled", "label"])])]),
795
+ _: 1
796
+ }, 8, ["disabled"])], 2)) : createCommentVNode("", true),
797
+ unref(usersStore).usersLimitNotReached || unref(usersStore).usersList.state.count > 1 ? (openBlock(), createElementBlock("div", {
798
+ key: 4,
799
+ class: normalizeClass(_ctx.$style.usersContainer)
800
+ }, [createVNode(SettingsUsersTable_default, {
801
+ "table-options": usersTableState.value,
802
+ "onUpdate:tableOptions": _cache[0] || (_cache[0] = ($event) => usersTableState.value = $event),
803
+ "data-test-id": "settings-users-table",
804
+ "can-edit-role": !isInstanceRoleProvisioningEnabled.value,
805
+ data: unref(usersStore).usersList.state,
806
+ loading: unref(usersStore).usersList.isLoading,
807
+ actions: usersListActions.value,
808
+ "onUpdate:options": updateUsersTableData,
809
+ "onUpdate:role": onUpdateRole,
810
+ onAction: onUsersListAction
811
+ }, null, 8, [
812
+ "table-options",
813
+ "can-edit-role",
814
+ "data",
815
+ "loading",
816
+ "actions"
817
+ ])], 2)) : createCommentVNode("", true)
818
+ ], 2);
819
+ };
820
+ }
821
+ });
822
+ var SettingsUsersView_vue_vue_type_style_index_0_lang_module_default = {
823
+ userCount: "_userCount_1n3d0_123",
824
+ buttonContainer: "_buttonContainer_1n3d0_128",
825
+ search: "_search_1n3d0_135",
826
+ setupInfoContainer: "_setupInfoContainer_1n3d0_139",
827
+ settingsContainer: "_settingsContainer_1n3d0_143",
828
+ settingsContainerInfo: "_settingsContainerInfo_1n3d0_154",
829
+ settingsContainerAction: "_settingsContainerAction_1n3d0_163",
830
+ container: "_container_1n3d0_171"
831
+ };
832
+ var SettingsUsersView_default = /* @__PURE__ */ __plugin_vue_export_helper_default(SettingsUsersView_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": SettingsUsersView_vue_vue_type_style_index_0_lang_module_default }]]);
833
+ export { SettingsUsersView_default as default };