n8n-editor-ui
Version:
Workflow Editor UI for n8n
950 lines • 59.7 kB
JavaScript
;
(function () {
System.register(["./vue.runtime.esm-bundler-legacy--Sn1h8On.js", "./_MapCache-legacy-DlYNX_X1.js", "./src-legacy-uZTNWMC0.js", "./en-legacy-DJK4SpPN.js", "./preload-helper-legacy-CXRjoQ0T.js", "./_plugin-vue_export-helper-legacy-DZMI5HPp.js", "./truncate-legacy-BGje52Or.js", "./icon-legacy-CqVXaCIS.js", "./empty-legacy-CA9D6itE.js", "./radio-legacy-D3Bp0uYy.js", "./useTelemetry-legacy-B3pzzkAE.js", "./useToast-legacy-C4Vu5mt9.js", "./sanitize-html-legacy-DLqXJu-U.js", "./CalendarDate-legacy-BUvNgcoo.js", "./Alert-legacy-r5yqS7J9.js", "./path-browserify-legacy-C6ml8BkF.js", "./constants-legacy-TKxWCqvM.js", "./merge-legacy-8xjIc_ts.js", "./_baseOrderBy-legacy-CB2Dh5d_.js", "./dateformat-legacy-C4HUJTCr.js", "./useDebounce-legacy-CqZ-fJEm.js", "./useExternalHooks-legacy-8pg6K3ln.js", "./useStyles-legacy-E8NPEyeD.js", "./cloudPlan.store-legacy-U_Bztyyz.js", "./useClipboard-legacy-DEPZr2pv.js", "./versions.store-legacy-BtvVzXUy.js", "./usePageRedirectionHelper-legacy-D0bLDat3.js", "./dateFormatter-legacy-V7YuOSR6.js", "./EnterpriseEdition.ee-legacy-41Hc0JOt.js", "./sso.store-legacy-Bv88fDKQ.js", "./userRoleProvisioning.store-legacy-DCP2ky8Z.js"], function (_export, _context) {
"use strict";
var computed, toDisplayString, createElementBlock, createCommentVNode, unref, guardReactiveProps, ref, createVNode, defineComponent, createBlock, mergeModels, onMounted, Fragment, withCtx, openBlock, useModel, renderList, createTextVNode, normalizeClass, createBaseVNode, normalizeProps, I18nT, useI18n, useDebounceFn, N8nActionBox_default, N8nNotice_default, N8nButton_default, ElSwitch, N8nText_default, N8nIcon_default, N8nBadge_default, N8nActionToggle_default, N8nTooltip_default, N8nActionDropdown_default, N8nUserInfo_default, N8nDataTableServer_default, N8nLink_default, N8nInput_default, N8nHeading_default, __plugin_vue_export_helper_default, ElRadio, useUIStore, useSettingsStore, INVITE_USER_MODAL_KEY, useDocumentTitle, DELETE_USER_MODAL_KEY, useUsersStore, hasPermission, useToast, Alert_default, ROLE, USERS_LIST_SORT_OPTIONS, EnterpriseEditionFeature, useClipboard, usePageRedirectionHelper, formatTimeAgo, EnterpriseEdition_ee_default, useSSOStore, useUserRoleProvisioningStore, __vite_style__, _hoisted_1$1, SettingsUsersRoleCell_vue_vue_type_script_setup_true_lang_default, roleLabel, radioLabel, removeUser, SettingsUsersRoleCell_vue_vue_type_style_index_0_lang_module_default, cssModules$2, SettingsUsersRoleCell_default, SettingsUsersProjectsCell_vue_vue_type_script_setup_true_lang_default, projects, project, comma, projectList, SettingsUsersProjectsCell_vue_vue_type_style_index_0_lang_module_default, cssModules$1, SettingsUsersProjectsCell_default, SettingsUsersActionsCell_vue_vue_type_script_setup_true_lang_default, SettingsUsersActionsCell_default, SettingsUsersLastActiveCell_vue_vue_type_script_setup_true_lang_default, SettingsUsersLastActiveCell_default, _hoisted_1, SettingsUsersTable_vue_vue_type_script_setup_true_lang_default, SettingsUsersTable_default, tooltipKey, SettingsUsersView_vue_vue_type_script_setup_true_lang_default, userCount, buttonContainer, search, setupInfoContainer, settingsContainer, settingsContainerInfo, settingsContainerAction, container, SettingsUsersView_vue_vue_type_style_index_0_lang_module_default, cssModules, SettingsUsersView_default;
return {
setters: [function (_vueRuntimeEsmBundlerLegacy003Js) {
computed = _vueRuntimeEsmBundlerLegacy003Js.C;
toDisplayString = _vueRuntimeEsmBundlerLegacy003Js.Cn;
createElementBlock = _vueRuntimeEsmBundlerLegacy003Js.D;
createCommentVNode = _vueRuntimeEsmBundlerLegacy003Js.E;
unref = _vueRuntimeEsmBundlerLegacy003Js.Gt;
guardReactiveProps = _vueRuntimeEsmBundlerLegacy003Js.I;
ref = _vueRuntimeEsmBundlerLegacy003Js.It;
createVNode = _vueRuntimeEsmBundlerLegacy003Js.M;
defineComponent = _vueRuntimeEsmBundlerLegacy003Js.P;
createBlock = _vueRuntimeEsmBundlerLegacy003Js.T;
mergeModels = _vueRuntimeEsmBundlerLegacy003Js.U;
onMounted = _vueRuntimeEsmBundlerLegacy003Js.Z;
Fragment = _vueRuntimeEsmBundlerLegacy003Js._;
withCtx = _vueRuntimeEsmBundlerLegacy003Js.bt;
openBlock = _vueRuntimeEsmBundlerLegacy003Js.et;
useModel = _vueRuntimeEsmBundlerLegacy003Js.ft;
renderList = _vueRuntimeEsmBundlerLegacy003Js.it;
createTextVNode = _vueRuntimeEsmBundlerLegacy003Js.j;
normalizeClass = _vueRuntimeEsmBundlerLegacy003Js.vn;
createBaseVNode = _vueRuntimeEsmBundlerLegacy003Js.w;
normalizeProps = _vueRuntimeEsmBundlerLegacy003Js.yn;
}, function (_MapCacheLegacy005Js) {
I18nT = _MapCacheLegacy005Js._t;
useI18n = _MapCacheLegacy005Js.gt;
useDebounceFn = _MapCacheLegacy005Js.rt;
}, function (_srcLegacy007Js) {
N8nActionBox_default = _srcLegacy007Js.Ct;
N8nNotice_default = _srcLegacy007Js.D;
N8nButton_default = _srcLegacy007Js.Hn;
ElSwitch = _srcLegacy007Js.Tt;
N8nText_default = _srcLegacy007Js.Vn;
N8nIcon_default = _srcLegacy007Js.Wn;
N8nBadge_default = _srcLegacy007Js.at;
N8nActionToggle_default = _srcLegacy007Js.et;
N8nTooltip_default = _srcLegacy007Js.mt;
N8nActionDropdown_default = _srcLegacy007Js.nt;
N8nUserInfo_default = _srcLegacy007Js.p;
N8nDataTableServer_default = _srcLegacy007Js.s;
N8nLink_default = _srcLegacy007Js.ut;
N8nInput_default = _srcLegacy007Js.yt;
N8nHeading_default = _srcLegacy007Js.zn;
}, function (_enLegacy00bJs) {}, function (_preloadHelperLegacy00dJs) {}, function (_pluginVue_exportHelperLegacy00fJs) {
__plugin_vue_export_helper_default = _pluginVue_exportHelperLegacy00fJs.t;
}, function (_truncateLegacy00hJs) {}, function (_iconLegacy00nJs) {}, function (_emptyLegacy00vJs) {}, function (_radioLegacy00zJs) {
ElRadio = _radioLegacy00zJs.t;
}, function (_useTelemetryLegacy00HJs) {
useUIStore = _useTelemetryLegacy00HJs.Fi;
useSettingsStore = _useTelemetryLegacy00HJs.Ho;
INVITE_USER_MODAL_KEY = _useTelemetryLegacy00HJs.Ma;
useDocumentTitle = _useTelemetryLegacy00HJs.Tn;
DELETE_USER_MODAL_KEY = _useTelemetryLegacy00HJs.ha;
useUsersStore = _useTelemetryLegacy00HJs.nr;
hasPermission = _useTelemetryLegacy00HJs.qn;
}, function (_useToastLegacy00JJs) {
useToast = _useToastLegacy00JJs.t;
}, function (_sanitizeHtmlLegacy00LJs) {}, function (_CalendarDateLegacy00NJs) {}, function (_AlertLegacy00PJs) {
Alert_default = _AlertLegacy00PJs.t;
}, function (_pathBrowserifyLegacy00RJs) {}, function (_constantsLegacy00TJs) {
ROLE = _constantsLegacy00TJs.Yr;
USERS_LIST_SORT_OPTIONS = _constantsLegacy00TJs.ii;
EnterpriseEditionFeature = _constantsLegacy00TJs.pc;
}, function (_mergeLegacy00VJs) {}, function (_baseOrderByLegacy00ZJs) {}, function (_dateformatLegacy00$Js) {}, function (_useDebounceLegacy011Js) {}, function (_useExternalHooksLegacy013Js) {}, function (_useStylesLegacy015Js) {}, function (_cloudPlanStoreLegacy01dJs) {}, function (_useClipboardLegacy01xJs) {
useClipboard = _useClipboardLegacy01xJs.t;
}, function (_versionsStoreLegacy01LJs) {}, function (_usePageRedirectionHelperLegacy01NJs) {
usePageRedirectionHelper = _usePageRedirectionHelperLegacy01NJs.t;
}, function (_dateFormatterLegacy02LJs) {
formatTimeAgo = _dateFormatterLegacy02LJs.r;
}, function (_EnterpriseEditionEeLegacy02PJs) {
EnterpriseEdition_ee_default = _EnterpriseEditionEeLegacy02PJs.t;
}, function (_ssoStoreLegacy039Js) {
useSSOStore = _ssoStoreLegacy039Js.n;
}, function (_userRoleProvisioningStoreLegacy05JJs) {
useUserRoleProvisioningStore = _userRoleProvisioningStoreLegacy05JJs.t;
}],
execute: function () {
__vite_style__ = document.createElement('style');
__vite_style__.textContent = "/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._roleLabel_uhits_123 {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing--3xs);\n background: transparent;\n padding: 0;\n border: none;\n cursor: pointer;\n}\n._radioLabel_uhits_133 {\n max-width: 268px;\n display: inline-flex;\n flex-direction: column;\n padding: var(--spacing--2xs) 0;\n}\n._radioLabel_uhits_133 span {\n white-space: normal;\n}\n._removeUser_uhits_143 {\n display: block;\n padding: var(--spacing--2xs) var(--spacing--lg);\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._projects_1l6q5_123 {\n display: flex;\n height: 100%;\n align-items: center;\n}\n._project_1l6q5_123 {\n flex: 1 1 0;\n min-width: 0;\n max-width: max-content;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n._comma_1l6q5_138 {\n flex-shrink: 0;\n padding: 0 var(--spacing--5xs);\n}\n._projectList_1l6q5_143 {\n padding: 0 var(--spacing--sm);\n}\n._projectList_1l6q5_143 li {\n list-style: disc outside;\n}/* BEM support Func\n -------------------------- */\n/* Transition\n-------------------------- */\n/* Color\n-------------------------- */\n/* Link\n-------------------------- */\n/* Border\n-------------------------- */\n/* Outline\n-------------------------- */\n/* Box shadow\n-------------------------- */\n/* Fill\n-------------------------- */\n/* Typography\n-------------------------- */\n/* z-index\n-------------------------- */\n/* Disable base\n-------------------------- */\n/* Icon\n-------------------------- */\n/* Checkbox\n-------------------------- */\n/* Radio\n-------------------------- */\n/* Select\n-------------------------- */\n/* Alert\n-------------------------- */\n/* MessageBox\n-------------------------- */\n/* Message\n-------------------------- */\n/* Notification\n-------------------------- */\n/* Input\n-------------------------- */\n/* Cascader\n-------------------------- */\n/* Group\n-------------------------- */\n/* Tab\n-------------------------- */\n/* Button\n-------------------------- */\n/* cascader\n-------------------------- */\n/* Switch\n-------------------------- */\n/* Dialog\n-------------------------- */\n/* Table\n-------------------------- */\n/* Pagination\n-------------------------- */\n/* Popup\n-------------------------- */\n/* Popover\n-------------------------- */\n/* Tooltip\n-------------------------- */\n/* Tag\n-------------------------- */\n/* Tree\n-------------------------- */\n/* Dropdown\n-------------------------- */\n/* Badge\n-------------------------- */\n/* Card\n--------------------------*/\n/* Slider\n--------------------------*/\n/* Steps\n--------------------------*/\n/* Menu\n--------------------------*/\n/* Rate\n--------------------------*/\n/* DatePicker\n--------------------------*/\n/* Loading\n--------------------------*/\n/* Scrollbar\n--------------------------*/\n/* Carousel\n--------------------------*/\n/* Collapse\n--------------------------*/\n/* Transfer\n--------------------------*/\n/* Header\n --------------------------*/\n/* Footer\n--------------------------*/\n/* Main\n--------------------------*/\n/* Timeline\n--------------------------*/\n/* Backtop\n--------------------------*/\n/* Link\n--------------------------*/\n/* Calendar\n--------------------------*/\n/* Form\n-------------------------- */\n/* Avatar\n--------------------------*/\n/* Break-point\n--------------------------*/\n/* Break-points\n -------------------------- */\n/* Scrollbar\n -------------------------- */\n/* Placeholder\n -------------------------- */\n/* BEM\n -------------------------- */\n._userCount_1n3d0_123 {\n display: block;\n padding: var(--spacing--3xs) 0 0;\n}\n._buttonContainer_1n3d0_128 {\n display: flex;\n justify-content: space-between;\n gap: var(--spacing--sm);\n margin: 0 0 var(--spacing--sm);\n}\n._search_1n3d0_135 {\n max-width: 300px;\n}\n._setupInfoContainer_1n3d0_139 {\n max-width: 728px;\n}\n._settingsContainer_1n3d0_143 {\n display: flex;\n align-items: center;\n padding-left: var(--spacing--sm);\n margin-bottom: var(--spacing--lg);\n justify-content: space-between;\n flex-shrink: 0;\n border-radius: 4px;\n border: 1px solid var(--Colors-Foreground---color--foreground, #d9dee8);\n}\n._settingsContainerInfo_1n3d0_154 {\n display: flex;\n padding: 8px 0;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n gap: 1px;\n}\n._settingsContainerAction_1n3d0_163 {\n display: flex;\n padding: 20px 16px 20px 248px;\n justify-content: flex-end;\n align-items: center;\n flex-shrink: 0;\n}\n._container_1n3d0_171 {\n padding-bottom: 20px;\n}/*$vite$:1*/";
document.head.appendChild(__vite_style__);
//#region src/features/settings/users/components/SettingsUsersRoleCell.vue?vue&type=script&setup=true&lang.ts
_hoisted_1$1 = {
key: 1
};
SettingsUsersRoleCell_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
__name: "SettingsUsersRoleCell",
props: {
data: {},
roles: {},
actions: {}
},
emits: ["update:role"],
setup(__props, {
emit: __emit
}) {
const props = __props;
const emit = __emit;
const selectedRole = ref(props.data.role ?? ROLE.Default);
const isEditable = computed(() => props.data.role !== ROLE.Owner);
const roleLabel$1 = computed(() => props.roles[selectedRole.value].label);
const onActionSelect = role => {
emit("update:role", {
role,
userId: props.data.id
});
};
return (_ctx, _cache) => {
return openBlock(), createElementBlock("div", null, [isEditable.value ? (openBlock(), createBlock(unref(N8nActionDropdown_default), {
key: 0,
placement: "bottom-start",
items: props.actions,
"data-test-id": "user-role-dropdown",
onSelect: onActionSelect
}, {
activator: withCtx(() => [createBaseVNode("button", {
class: normalizeClass(_ctx.$style.roleLabel),
type: "button"
}, [createVNode(unref(N8nText_default), {
color: "text-dark"
}, {
default: withCtx(() => [createTextVNode(toDisplayString(roleLabel$1.value), 1)]),
_: 1
}), createVNode(unref(N8nIcon_default), {
color: "text-dark",
icon: "chevron-down",
size: "large"
})], 2)]),
menuItem: withCtx(item => [createVNode(unref(ElRadio), {
"model-value": selectedRole.value,
label: item.id,
"onUpdate:modelValue": $event => selectedRole.value = item.id
}, {
default: withCtx(() => [createBaseVNode("span", {
class: normalizeClass(_ctx.$style.radioLabel)
}, [createVNode(unref(N8nText_default), {
color: "text-dark",
class: "pb-3xs"
}, {
default: withCtx(() => [createTextVNode(toDisplayString(item.label), 1)]),
_: 2
}, 1024), createVNode(unref(N8nText_default), {
color: "text-dark",
size: "small"
}, {
default: withCtx(() => [createTextVNode(toDisplayString(props.roles[item.id].desc), 1)]),
_: 2
}, 1024)], 2)]),
_: 2
}, 1032, ["model-value", "label", "onUpdate:modelValue"])]),
_: 1
}, 8, ["items"])) : (openBlock(), createElementBlock("span", _hoisted_1$1, toDisplayString(roleLabel$1.value), 1))]);
};
}
}); //#endregion
//#region src/features/settings/users/components/SettingsUsersRoleCell.vue?vue&type=style&index=0&lang.module.scss
roleLabel = "_roleLabel_uhits_123";
radioLabel = "_radioLabel_uhits_133";
removeUser = "_removeUser_uhits_143";
SettingsUsersRoleCell_vue_vue_type_style_index_0_lang_module_default = {
roleLabel,
radioLabel,
removeUser
}; //#endregion
//#region src/features/settings/users/components/SettingsUsersRoleCell.vue
cssModules$2 = {
"$style": SettingsUsersRoleCell_vue_vue_type_style_index_0_lang_module_default
};
SettingsUsersRoleCell_default = /* @__PURE__ */__plugin_vue_export_helper_default(SettingsUsersRoleCell_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$2]]); //#endregion
//#region src/features/settings/users/components/SettingsUsersProjectsCell.vue?vue&type=script&setup=true&lang.ts
SettingsUsersProjectsCell_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
__name: "SettingsUsersProjectsCell",
props: {
data: {}
},
setup(__props) {
const props = __props;
const i18n = useI18n();
const rolesAccessingAllProjects = ref([ROLE.Owner, ROLE.Admin]);
const visibleProjectsNum = ref(2);
const allProjects = computed(() => {
if (props.data.role && rolesAccessingAllProjects.value.includes(props.data.role)) return [i18n.baseText("settings.users.table.row.allProjects")];else if (!props.data.projectRelations?.length) return [i18n.baseText("settings.users.table.row.personalProject")];else return props.data.projectRelations.map(({
name
}) => name);
});
const projects$1 = computed(() => ({
visible: allProjects.value.slice(0, visibleProjectsNum.value),
additional: allProjects.value.slice(visibleProjectsNum.value)
}));
return (_ctx, _cache) => {
return openBlock(), createElementBlock("div", {
class: normalizeClass(_ctx.$style.projects)
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(projects$1.value.visible, (project$1, index) => {
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", {
key: 0,
class: normalizeClass(_ctx.$style.comma)
}, ",", 2)) : createCommentVNode("", true)], 64);
}), 128)), projects$1.value.additional.length > 0 ? (openBlock(), createElementBlock("span", {
key: 0,
class: normalizeClass(_ctx.$style.comma)
}, ",", 2)) : createCommentVNode("", true), projects$1.value.additional.length > 0 ? (openBlock(), createBlock(unref(N8nTooltip_default), {
key: 1
}, {
content: withCtx(() => [createBaseVNode("ul", {
class: normalizeClass(_ctx.$style.projectList)
}, [(openBlock(true), createElementBlock(Fragment, null, renderList(projects$1.value.additional, (project$1, index) => {
return openBlock(), createElementBlock("li", {
key: index
}, toDisplayString(project$1), 1);
}), 128))], 2)]),
default: withCtx(() => [createBaseVNode("span", {
class: normalizeClass(_ctx.$style.project)
}, "+ " + toDisplayString(projects$1.value.additional.length), 3)]),
_: 1
})) : createCommentVNode("", true)], 2);
};
}
}); //#endregion
//#region src/features/settings/users/components/SettingsUsersProjectsCell.vue?vue&type=style&index=0&lang.module.scss
projects = "_projects_1l6q5_123";
project = "_project_1l6q5_123";
comma = "_comma_1l6q5_138";
projectList = "_projectList_1l6q5_143";
SettingsUsersProjectsCell_vue_vue_type_style_index_0_lang_module_default = {
projects,
project,
comma,
projectList
}; //#endregion
//#region src/features/settings/users/components/SettingsUsersProjectsCell.vue
cssModules$1 = {
"$style": SettingsUsersProjectsCell_vue_vue_type_style_index_0_lang_module_default
};
SettingsUsersProjectsCell_default = /* @__PURE__ */__plugin_vue_export_helper_default(SettingsUsersProjectsCell_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules$1]]); //#endregion
//#region src/features/settings/users/components/SettingsUsersActionsCell.vue?vue&type=script&setup=true&lang.ts
SettingsUsersActionsCell_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
__name: "SettingsUsersActionsCell",
props: {
data: {},
actions: {}
},
emits: ["action"],
setup(__props, {
emit: __emit
}) {
const props = __props;
const emit = __emit;
const onUserAction = action => {
emit("action", {
action,
userId: props.data.id
});
};
return (_ctx, _cache) => {
return openBlock(), createElementBlock("div", null, [props.data.signInType !== "ldap" && props.actions.length > 0 ? (openBlock(), createBlock(unref(N8nActionToggle_default), {
key: 0,
placement: "bottom",
actions: props.actions,
theme: "dark",
onAction: onUserAction
}, null, 8, ["actions"])) : createCommentVNode("", true)]);
};
}
}); //#endregion
//#region src/features/settings/users/components/SettingsUsersActionsCell.vue
SettingsUsersActionsCell_default = SettingsUsersActionsCell_vue_vue_type_script_setup_true_lang_default; //#endregion
//#region src/features/settings/users/components/SettingsUsersLastActiveCell.vue?vue&type=script&setup=true&lang.ts
SettingsUsersLastActiveCell_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
__name: "SettingsUsersLastActiveCell",
props: {
data: {}
},
setup(__props) {
const i18n = useI18n();
const props = __props;
const formattedDate = computed(() => props.data.lastActiveAt ? formatTimeAgo(props.data.lastActiveAt) : i18n.baseText("generic.never"));
return (_ctx, _cache) => {
return openBlock(), createElementBlock("span", null, toDisplayString(formattedDate.value), 1);
};
}
}); //#endregion
//#region src/features/settings/users/components/SettingsUsersLastActiveCell.vue
SettingsUsersLastActiveCell_default = SettingsUsersLastActiveCell_vue_vue_type_script_setup_true_lang_default; //#endregion
//#region src/features/settings/users/components/SettingsUsersTable.vue?vue&type=script&setup=true&lang.ts
_hoisted_1 = {
class: "pt-xs pb-xs"
};
SettingsUsersTable_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
__name: "SettingsUsersTable",
props: /* @__PURE__ */mergeModels({
data: {},
actions: {},
loading: {
type: Boolean
},
canEditRole: {
type: Boolean
}
}, {
"tableOptions": {
default: () => ({})
},
"tableOptionsModifiers": {}
}),
emits: /* @__PURE__ */mergeModels(["update:options", "update:role", "action"], ["update:tableOptions"]),
setup(__props, {
emit: __emit
}) {
const i18n = useI18n();
const props = __props;
const emit = __emit;
const tableOptions = useModel(__props, "tableOptions");
const rows = computed(() => props.data.items);
const headers = ref([{
title: i18n.baseText("settings.users.table.header.user"),
key: "name",
width: 400,
value(row) {
return {
...row,
isPendingUser: row.isPending
};
}
}, {
title: i18n.baseText("settings.users.table.header.accountType"),
key: "role"
}, {
title: i18n.baseText("settings.users.table.header.lastActive"),
key: "lastActiveAt",
value(row) {
return {
...row,
lastActiveAt: row.lastActiveAt ?? ""
};
}
}, {
title: i18n.baseText("settings.users.table.header.2fa"),
key: "mfaEnabled",
value(row) {
return row.mfaEnabled ? i18n.baseText("settings.users.table.row.2fa.enabled") : i18n.baseText("settings.users.table.row.2fa.disabled");
}
}, {
title: i18n.baseText("projects.menu.title"),
key: "projects",
disableSort: true,
value() {}
}, {
title: "",
key: "actions",
align: "end",
width: 46,
disableSort: true,
value() {}
}]);
const roles = computed(() => ({
[ROLE.Owner]: {
label: i18n.baseText("auth.roles.owner"),
desc: ""
},
[ROLE.Admin]: {
label: i18n.baseText("auth.roles.admin"),
desc: i18n.baseText("settings.users.table.row.role.description.admin")
},
[ROLE.Member]: {
label: i18n.baseText("auth.roles.member"),
desc: i18n.baseText("settings.users.table.row.role.description.member")
},
[ROLE.Default]: {
label: i18n.baseText("auth.roles.default"),
desc: ""
}
}));
const roleActions = computed(() => [{
id: ROLE.Member,
label: i18n.baseText("auth.roles.member")
}, {
id: ROLE.Admin,
label: i18n.baseText("auth.roles.admin")
}]);
const canUpdateRole = computed(() => {
if (!hasPermission(["rbac"], {
rbac: {
scope: ["user:update", "user:changeRole"]
}
})) return false;
if (!props.canEditRole) return false;
return true;
});
const filterActions = user => {
if (user.isOwner) return [];
return props.actions.filter(action => action.guard?.({
...user,
isPendingUser: user.isPending
}) ?? true);
};
const onRoleChange = ({
role,
userId
}) => {
emit("update:role", {
role,
userId
});
};
return (_ctx, _cache) => {
return openBlock(), createElementBlock("div", null, [createVNode(unref(N8nDataTableServer_default), {
"sort-by": tableOptions.value.sortBy,
"onUpdate:sortBy": _cache[1] || (_cache[1] = $event => tableOptions.value.sortBy = $event),
page: tableOptions.value.page,
"onUpdate:page": _cache[2] || (_cache[2] = $event => tableOptions.value.page = $event),
"items-per-page": tableOptions.value.itemsPerPage,
"onUpdate:itemsPerPage": _cache[3] || (_cache[3] = $event => tableOptions.value.itemsPerPage = $event),
headers: headers.value,
items: rows.value,
"items-length": _ctx.data.count,
"page-sizes": [10, 25, 50],
"onUpdate:options": _cache[4] || (_cache[4] = $event => emit("update:options", $event))
}, {
[`item.name`]: withCtx(({
value
}) => [createBaseVNode("div", _hoisted_1, [createVNode(unref(N8nUserInfo_default), normalizeProps(guardReactiveProps(value)), null, 16)])]),
[`item.role`]: withCtx(({
item
}) => [canUpdateRole.value ? (openBlock(), createBlock(SettingsUsersRoleCell_default, {
key: 0,
data: item,
roles: roles.value,
actions: roleActions.value,
"onUpdate:role": onRoleChange
}, null, 8, ["data", "roles", "actions"])) : (openBlock(), createBlock(unref(N8nText_default), {
key: 1,
color: "text-dark"
}, {
default: withCtx(() => [createTextVNode(toDisplayString(roles.value[item.role ?? unref(ROLE).Default].label), 1)]),
_: 2
}, 1024))]),
[`item.lastActiveAt`]: withCtx(({
item
}) => [createVNode(SettingsUsersLastActiveCell_default, {
data: item
}, null, 8, ["data"])]),
[`item.projects`]: withCtx(({
item
}) => [createVNode(SettingsUsersProjectsCell_default, {
data: item
}, null, 8, ["data"])]),
[`item.actions`]: withCtx(({
item
}) => [createVNode(SettingsUsersActionsCell_default, {
data: item,
actions: filterActions(item),
onAction: _cache[0] || (_cache[0] = $event => _ctx.$emit("action", $event))
}, null, 8, ["data", "actions"])]),
_: 2
}, 1032, ["sort-by", "page", "items-per-page", "headers", "items", "items-length"])]);
};
}
}); //#endregion
//#region src/features/settings/users/components/SettingsUsersTable.vue
SettingsUsersTable_default = SettingsUsersTable_vue_vue_type_script_setup_true_lang_default; //#endregion
//#region src/features/settings/users/views/SettingsUsersView.vue?vue&type=script&setup=true&lang.ts
tooltipKey = "settings.personal.mfa.enforce.unlicensed_tooltip";
SettingsUsersView_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */defineComponent({
__name: "SettingsUsersView",
setup(__props) {
const clipboard = useClipboard();
const {
showToast,
showError
} = useToast();
const settingsStore = useSettingsStore();
const uiStore = useUIStore();
const usersStore = useUsersStore();
const ssoStore = useSSOStore();
const documentTitle = useDocumentTitle();
const pageRedirectionHelper = usePageRedirectionHelper();
const userRoleProvisioningStore = useUserRoleProvisioningStore();
const i18n = useI18n();
const search$1 = ref("");
const usersTableState = ref({
page: 0,
itemsPerPage: 10,
sortBy: [{
id: "firstName",
desc: false
}, {
id: "lastName",
desc: false
}, {
id: "email",
desc: false
}]
});
const showUMSetupWarning = computed(() => hasPermission(["defaultUser"]));
const isEnforceMFAEnabled = computed(() => settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.EnforceMFA]);
const isInstanceRoleProvisioningEnabled = computed(() => userRoleProvisioningStore.provisioningConfig?.scopesProvisionInstanceRole || false);
onMounted(async () => {
documentTitle.set(i18n.baseText("settings.users"));
if (!showUMSetupWarning.value) await updateUsersTableData(usersTableState.value);
await userRoleProvisioningStore.getProvisioningConfig();
});
const usersListActions = computed(() => {
return [{
label: i18n.baseText("settings.users.actions.copyInviteLink"),
value: "copyInviteLink",
guard: user => usersStore.usersLimitNotReached && !user.firstName && !!user.inviteAcceptUrl
}, {
label: i18n.baseText("settings.users.actions.reinvite"),
value: "reinvite",
guard: user => usersStore.usersLimitNotReached && !user.firstName && settingsStore.isSmtpSetup
}, {
label: i18n.baseText("settings.users.actions.delete"),
value: "delete",
guard: user => hasPermission(["rbac"], {
rbac: {
scope: "user:delete"
}
}) && user.id !== usersStore.currentUserId
}, {
label: i18n.baseText("settings.users.actions.copyPasswordResetLink"),
value: "copyPasswordResetLink",
guard: user => hasPermission(["rbac"], {
rbac: {
scope: "user:resetPassword"
}
}) && usersStore.usersLimitNotReached && !user.isPendingUser && user.id !== usersStore.currentUserId
}, {
label: i18n.baseText("settings.users.actions.allowSSOManualLogin"),
value: "allowSSOManualLogin",
guard: user => !!ssoStore.isSamlLoginEnabled && !user.settings?.allowSSOManualLogin
}, {
label: i18n.baseText("settings.users.actions.disallowSSOManualLogin"),
value: "disallowSSOManualLogin",
guard: user => !!ssoStore.isSamlLoginEnabled && user.settings?.allowSSOManualLogin === true
}];
});
const isAdvancedPermissionsEnabled = computed(() => settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.AdvancedPermissions]);
const userRoles = computed(() => {
return [{
value: ROLE.Member,
label: i18n.baseText("auth.roles.member")
}, {
value: ROLE.Admin,
label: i18n.baseText("auth.roles.admin"),
disabled: !isAdvancedPermissionsEnabled.value
}];
});
async function onUsersListAction({
action,
userId
}) {
switch (action) {
case "delete":
await onDelete(userId);
break;
case "reinvite":
await onReinvite(userId);
break;
case "copyInviteLink":
await onCopyInviteLink(userId);
break;
case "copyPasswordResetLink":
await onCopyPasswordResetLink(userId);
break;
case "allowSSOManualLogin":
await onAllowSSOManualLogin(userId);
break;
case "disallowSSOManualLogin":
await onDisallowSSOManualLogin(userId);
break;
}
}
function onInvite() {
uiStore.openModalWithData({
name: INVITE_USER_MODAL_KEY,
data: {
afterInvite: async () => {
await updateUsersTableData(usersTableState.value);
}
}
});
}
async function onDelete(userId) {
uiStore.openModalWithData({
name: DELETE_USER_MODAL_KEY,
data: {
userId,
afterDelete: async () => {
await updateUsersTableData(usersTableState.value);
}
}
});
}
async function onReinvite(userId) {
try {
const user = usersStore.usersList.state.items.find(u => u.id === userId);
if (user?.email && user?.role) {
if (!["global:admin", "global:member"].includes(user.role)) throw new Error("Invalid role name on reinvite");
await usersStore.reinviteUser({
email: user.email,
role: user.role
});
showToast({
type: "success",
title: i18n.baseText("settings.users.inviteResent"),
message: i18n.baseText("settings.users.emailSentTo", {
interpolate: {
email: user.email ?? ""
}
})
});
}
} catch (e) {
showError(e, i18n.baseText("settings.users.userReinviteError"));
}
}
async function onCopyInviteLink(userId) {
const user = usersStore.usersList.state.items.find(u => u.id === userId);
if (user?.inviteAcceptUrl) {
clipboard.copy(user.inviteAcceptUrl);
showToast({
type: "success",
title: i18n.baseText("settings.users.inviteUrlCreated"),
message: i18n.baseText("settings.users.inviteUrlCreated.message")
});
}
}
async function onCopyPasswordResetLink(userId) {
try {
const user = usersStore.usersList.state.items.find(u => u.id === userId);
if (user) {
const url = await usersStore.getUserPasswordResetLink(user);
clipboard.copy(url.link);
showToast({
type: "success",
title: i18n.baseText("settings.users.passwordResetUrlCreated"),
message: i18n.baseText("settings.users.passwordResetUrlCreated.message")
});
}
} catch (error) {
showError(error, i18n.baseText("settings.users.passwordResetLinkError"));
}
}
async function onAllowSSOManualLogin(userId) {
const user = usersStore.usersList.state.items.find(u => u.id === userId);
if (user) {
if (!user.settings) user.settings = {};
user.settings.allowSSOManualLogin = true;
await usersStore.updateOtherUserSettings(userId, user.settings);
await updateUsersTableData(usersTableState.value);
showToast({
type: "success",
title: i18n.baseText("settings.users.allowSSOManualLogin"),
message: i18n.baseText("settings.users.allowSSOManualLogin.message")
});
}
}
async function onDisallowSSOManualLogin(userId) {
const user = usersStore.usersList.state.items.find(u => u.id === userId);
if (user?.settings) {
user.settings.allowSSOManualLogin = false;
await usersStore.updateOtherUserSettings(userId, user.settings);
await updateUsersTableData(usersTableState.value);
showToast({
type: "success",
title: i18n.baseText("settings.users.disallowSSOManualLogin"),
message: i18n.baseText("settings.users.disallowSSOManualLogin.message")
});
}
}
function goToUpgrade() {
pageRedirectionHelper.goToUpgrade("settings-users", "upgrade-users");
}
function goToUpgradeAdvancedPermissions() {
pageRedirectionHelper.goToUpgrade("settings-users", "upgrade-advanced-permissions");
}
const onUpdateRole = async payload => {
const user = usersStore.usersList.state.items.find(u => u.id === payload.userId);
if (!user) {
showError(/* @__PURE__ */new Error("User not found"), i18n.baseText("settings.users.userNotFound"));
return;
}
await onRoleChange(user, payload.role);
};
async function onRoleChange(user, newRoleName) {
try {
await usersStore.updateGlobalRole({
id: user.id,
newRoleName
});
const role = userRoles.value.find(({
value
}) => value === newRoleName)?.label || newRoleName;
showToast({
type: "success",
title: i18n.baseText("settings.users.userRoleUpdated"),
message: i18n.baseText("settings.users.userRoleUpdated.message", {
interpolate: {
user: user.firstName && user.lastName ? `${user.firstName} ${user.lastName}` : user.email ?? "",
role
}
})
});
} catch (e) {
showError(e, i18n.baseText("settings.users.userReinviteError"));
}
}
const isValidSortKey = key => USERS_LIST_SORT_OPTIONS.includes(key);
const updateUsersTableData = async ({
page,
itemsPerPage,
sortBy
}) => {
try {
usersTableState.value = {
page,
itemsPerPage,
sortBy
};
const skip = page * itemsPerPage;
const take = itemsPerPage;
const transformedSortBy = sortBy.flatMap(({
id,
desc
}) => {
const dir = desc ? "desc" : "asc";
if (id === "name") return [`firstName:${dir}`, `lastName:${dir}`, `email:${dir}`];
return `${id}:${dir}`;
}).filter(isValidSortKey);
await usersStore.usersList.execute(0, {
skip,
take,
sortBy: transformedSortBy,
expand: ["projectRelations"],
filter: {
fullText: search$1.value.trim()
}
});
} catch (error) {
showError(error, i18n.baseText("settings.users.table.update.error"));
}
};
const debouncedUpdateUsersTableData = useDebounceFn(() => {
usersTableState.value.page = 0;
updateUsersTableData(usersTableState.value);
}, 300);
const onSearch = value => {
search$1.value = value;
debouncedUpdateUsersTableData();
};
async function onUpdateMfaEnforced(value) {
const boolValue = typeof value === "boolean" ? value : Boolean(value);
try {
await usersStore.updateEnforceMfa(boolValue);
showToast({
type: "success",
title: boolValue ? i18n.baseText("settings.personal.mfa.enforce.enabled.title") : i18n.baseText("settings.personal.mfa.enforce.disabled.title"),
message: boolValue ? i18n.baseText("settings.personal.mfa.enforce.enabled.message") : i18n.baseText("settings.personal.mfa.enforce.disabled.message")
});
} catch (error) {
showError(error, i18n.baseText("settings.personal.mfa.enforce.error"));
}
}
return (_ctx, _cache) => {
return openBlock(), createElementBlock("div", {
class: normalizeClass(_ctx.$style.container)
}, [createVNode(unref(N8nHeading_default), {
tag: "h1",
size: "2xlarge",
class: "mb-xl"
}, {
default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("settings.users")) + " ", 1), !showUMSetupWarning.value ? (openBlock(), createBlock(unref(N8nText_default), {
key: 0,
class: normalizeClass(_ctx.$style.userCount),
color: "text-light"
}, {
default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("settings.users.count", {
interpolate: {
count: unref(usersStore).usersList.state.count
},
adjustToNumber: unref(usersStore).usersList.state.count
})), 1)]),
_: 1
}, 8, ["class"])) : createCommentVNode("", true)]),
_: 1
}), !unref(usersStore).usersLimitNotReached ? (openBlock(), createElementBlock("div", {
key: 0,
class: normalizeClass(_ctx.$style.setupInfoContainer)
}, [createVNode(unref(N8nActionBox_default), {
heading: unref(i18n).baseText(unref(uiStore).contextBasedTranslationKeys.users.settings.unavailable.title),
description: unref(i18n).baseText(unref(uiStore).contextBasedTranslationKeys.users.settings.unavailable.description),
"button-text": unref(i18n).baseText(unref(uiStore).contextBasedTranslationKeys.users.settings.unavailable.button),
"onClick:button": goToUpgrade
}, null, 8, ["heading", "description", "button-text"])], 2)) : createCommentVNode("", true), !isAdvancedPermissionsEnabled.value ? (openBlock(), createBlock(unref(N8nNotice_default), {
key: 1
}, {
default: withCtx(() => [createVNode(unref(I18nT), {
keypath: "settings.users.advancedPermissions.warning",
scope: "global"
}, {
link: withCtx(() => [createVNode(unref(N8nLink_default), {
"data-test-id": "upgrade-permissions-link",
size: "small",
onClick: goToUpgradeAdvancedPermissions
}, {
default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("generic.upgrade")), 1)]),
_: 1
})]),
_: 1
})]),
_: 1
})) : createCommentVNode("", true), createBaseVNode("div", {
class: normalizeClass(_ctx.$style.settingsContainer)
}, [createBaseVNode("div", {
class: normalizeClass(_ctx.$style.settingsContainerInfo)
}, [createVNode(unref(N8nText_default), {
bold: true
}, {
default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("settings.personal.mfa.enforce.title")) + " ", 1), !isEnforceMFAEnabled.value ? (openBlock(), createBlock(unref(N8nBadge_default), {
key: 0,
class: "ml-4xs"
}, {
default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("generic.upgrade")), 1)]),
_: 1
})) : createCommentVNode("", true)]),
_: 1
}), createVNode(unref(N8nText_default), {
size: "small",
color: "text-light"
}, {
default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("settings.personal.mfa.enforce.message")), 1)]),
_: 1
})], 2), createBaseVNode("div", {
class: normalizeClass(_ctx.$style.settingsContainerAction)
}, [createVNode(EnterpriseEdition_ee_default, {
features: [unref(EnterpriseEditionFeature).EnforceMFA]
}, {
fallback: withCtx(() => [createVNode(unref(N8nTooltip_default), null, {
content: withCtx(() => [createVNode(unref(I18nT), {
keypath: tooltipKey,
tag: "span",
scope: "global"
}, {
action: withCtx(() => [createBaseVNode("a", {
onClick: goToUpgrade
}, toDisplayString(unref(i18n).baseText("settings.personal.mfa.enforce.unlicensed_tooltip.link")), 1)]),
_: 1
})]),
default: withCtx(() => [createVNode(unref(ElSwitch), {
"model-value": unref(settingsStore).isMFAEnforced,
size: "large",
disabled: true
}, null, 8, ["model-value"])]),
_: 1
})]),
default: withCtx(() => [createVNode(unref(ElSwitch), {
"model-value": unref(settingsStore).isMFAEnforced,
size: "large",
"data-test-id": "enable-force-mfa",
"onUpdate:modelValue": onUpdateMfaEnforced
}, null, 8, ["model-value"])]),
_: 1
}, 8, ["features"])], 2)], 2), isInstanceRoleProvisioningEnabled.value ? (openBlock(), createElementBlock("div", {
key: 2,
class: normalizeClass(_ctx.$style.container)
}, [createVNode(Alert_default, {
type: "info",
title: unref(i18n).baseText("settings.provisioningInstanceRolesHandledBySsoProvider.description")
}, null, 8, ["title"])], 2)) : createCommentVNode("", true), !showUMSetupWarning.value ? (openBlock(), createElementBlock("div", {
key: 3,
class: normalizeClass(_ctx.$style.buttonContainer)
}, [createVNode(unref(N8nInput_default), {
class: normalizeClass(_ctx.$style.search),
"model-value": search$1.value,
placeholder: unref(i18n).baseText("settings.users.search.placeholder"),
clearable: "",
"data-test-id": "users-list-search",
"onUpdate:modelValue": onSearch
}, {
prefix: withCtx(() => [createVNode(unref(N8nIcon_default), {
icon: "search"
})]),
_: 1
}, 8, ["class", "model-value", "placeholder"]), createVNode(unref(N8nTooltip_default), {
disabled: !unref(ssoStore).isSamlLoginEnabled
}, {
content: withCtx(() => [createBaseVNode("span", null, toDisplayString(unref(i18n).baseText("settings.users.invite.tooltip")), 1)]),
default: withCtx(() => [createBaseVNode("div", null, [createVNode(unref(N8nButton_default), {
disabled: unref(ssoStore).isSamlLoginEnabled || !unref(usersStore).usersLimitNotReached || isInstanceRoleProvisioningEnabled.value,
label: unref(i18n).baseText("settings.users.invite"),
size: "large",
"data-test-id": "settings-users-invite-button",
onClick: onInvite
}, null, 8, ["disabled", "label"])])]),
_: 1
}, 8, ["disabled"])], 2)) : createCommentVNode("", true), unref(usersStore).usersLimitNotReached || unref(usersStore).usersList.state.count > 1 ? (openBlock(), createElementBlock("div", {
key: 4,
class: normalizeClass(_ctx.$style.usersContainer)
}, [createVNode(SettingsUsersTable_default, {
"table-options": usersTableState.value,
"onUpdate:tableOptions": _cache[0] || (_cache[0] = $event => usersTableState.value = $event),
"data-test-id": "settings-users-table",
"can-edit-role": !isInstanceRoleProvisioningEnabled.value,
data: unref(usersStore).usersList.state,
loading: unref(usersStore).usersList.isLoading,
actions: usersListActions.value,
"onUpdate:options": updateUsersTableData,
"onUpdate:role": onUpdateRole,
onAction: onUsersListAction
}, null, 8, ["table-options", "can-edit-role", "data", "loading", "actions"])], 2)) : createCommentVNode("", true)], 2);
};
}
}); //#endregion
//#region src/features/settings/users/views/SettingsUsersView.vue?vue&type=style&index=0&lang.module.scss
userCount = "_userCount_1n3d0_123";
buttonContainer = "_buttonContainer_1n3d0_128";
search = "_search_1n3d0_135";
setupInfoContainer = "_setupInfoContainer_1n3d0_139";
settingsContainer = "_settingsContainer_1n3d0_143";
settingsContainerInfo = "_settingsContainerInfo_1n3d0_154";
settingsContainerAction = "_settingsContainerAction_1n3d0_163";
container = "_container_1n3d0_171";
SettingsUsersView_vue_vue_type_style_index_0_lang_module_default = {
userCount,
buttonContainer,
search,
setupInfoContainer,
settingsContainer,
settingsContainerInfo,
settingsContainerAction,
container
}; //#endregion
//#region src/features/settings/users/views/SettingsUsersView.vue
cssModules = {
"$style": SettingsUsersView_vue_vue_type_style_index_0_lang_module_default
};
_export("default", SettingsUsersView_default = /* @__PURE__ */__plugin_vue_export_helper_default(SettingsUsersView_vue_vue_type_script_setup_true_lang_default, [["__cssModules", cssModules]])); //#endregion
}
};
});
})();