@iblai/iblai-js 2.5.7 → 2.5.8
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.
|
@@ -65112,6 +65112,7 @@ var tabsUserstab$3 = {
|
|
|
65112
65112
|
columnStatus: "Status",
|
|
65113
65113
|
roleAdmin: "Admin",
|
|
65114
65114
|
roleUser: "User",
|
|
65115
|
+
selectRoleAriaLabel: "Select role for {name}",
|
|
65115
65116
|
selectPoliciesAriaLabel: "Select policies for {name}",
|
|
65116
65117
|
allPoliciesSelected: "All ({count}) selected",
|
|
65117
65118
|
nPoliciesSelected: "{count} selected",
|
|
@@ -72161,6 +72162,7 @@ var tabsUserstab$2 = {
|
|
|
72161
72162
|
columnStatus: "Statut",
|
|
72162
72163
|
roleAdmin: "Admin",
|
|
72163
72164
|
roleUser: "Utilisateur",
|
|
72165
|
+
selectRoleAriaLabel: "Sélectionner le rôle pour {name}",
|
|
72164
72166
|
selectPoliciesAriaLabel: "Sélectionner les politiques pour {name}",
|
|
72165
72167
|
allPoliciesSelected: "Tout ({count}) sélectionné",
|
|
72166
72168
|
nPoliciesSelected: "{count} sélectionné(s)",
|
|
@@ -79044,6 +79046,7 @@ var tabsUserstab$1 = {
|
|
|
79044
79046
|
columnStatus: "Estado",
|
|
79045
79047
|
roleAdmin: "Admin",
|
|
79046
79048
|
roleUser: "Usuario",
|
|
79049
|
+
selectRoleAriaLabel: "Seleccionar rol para {name}",
|
|
79047
79050
|
selectPoliciesAriaLabel: "Seleccionar políticas para {name}",
|
|
79048
79051
|
allPoliciesSelected: "Todas ({count}) seleccionadas",
|
|
79049
79052
|
nPoliciesSelected: "{count} seleccionada(s)",
|
|
@@ -85927,6 +85930,7 @@ var tabsUserstab = {
|
|
|
85927
85930
|
columnStatus: "状态",
|
|
85928
85931
|
roleAdmin: "管理员",
|
|
85929
85932
|
roleUser: "用户",
|
|
85933
|
+
selectRoleAriaLabel: "为 {name} 选择角色",
|
|
85930
85934
|
selectPoliciesAriaLabel: "为 {name} 选择策略",
|
|
85931
85935
|
allPoliciesSelected: "全部({count})已选",
|
|
85932
85936
|
nPoliciesSelected: "已选 {count} 个",
|
|
@@ -147895,6 +147899,7 @@ function UsersTab({ tenant, onInviteClick, currentSpa, showGradebookTab = false,
|
|
|
147895
147899
|
const [updateUserStatus] = useUpdateUserStatusMutation();
|
|
147896
147900
|
const [updatePlatformUserRoleWithPolicies] = useUpdatePlatformUserRoleWithPoliciesMutation();
|
|
147897
147901
|
const [updatingUserIds, setUpdatingUserIds] = useState(new Set());
|
|
147902
|
+
const [pendingRoles, setPendingRoles] = useState({});
|
|
147898
147903
|
const [openPolicyPopover, setOpenPolicyPopover] = useState(null);
|
|
147899
147904
|
const [selectedUser, setSelectedUser] = useState(null);
|
|
147900
147905
|
const { currentTenant } = useCurrentTenant();
|
|
@@ -147947,18 +147952,19 @@ function UsersTab({ tenant, onInviteClick, currentSpa, showGradebookTab = false,
|
|
|
147947
147952
|
if (!isWatcher)
|
|
147948
147953
|
await refetchPlatformUsers();
|
|
147949
147954
|
};
|
|
147950
|
-
const handleUserRoleChange = async (user) => {
|
|
147955
|
+
const handleUserRoleChange = async (user, nextRole) => {
|
|
147951
147956
|
const userId = user === null || user === void 0 ? void 0 : user.user_id;
|
|
147952
147957
|
if (!userId)
|
|
147953
147958
|
return;
|
|
147954
147959
|
// Add to updating state
|
|
147955
147960
|
setUpdatingUserIds((prev) => new Set(prev).add(userId));
|
|
147961
|
+
setPendingRoles((prev) => ({ ...prev, [userId]: nextRole }));
|
|
147956
147962
|
try {
|
|
147957
147963
|
await updateUserRole({
|
|
147958
147964
|
username: user === null || user === void 0 ? void 0 : user.username,
|
|
147959
147965
|
org: user === null || user === void 0 ? void 0 : user.platform_org,
|
|
147960
147966
|
role: 'org-instructor',
|
|
147961
|
-
active:
|
|
147967
|
+
active: nextRole === 'admin',
|
|
147962
147968
|
}).unwrap();
|
|
147963
147969
|
// Only clear policies if role change succeeded
|
|
147964
147970
|
try {
|
|
@@ -147980,6 +147986,7 @@ function UsersTab({ tenant, onInviteClick, currentSpa, showGradebookTab = false,
|
|
|
147980
147986
|
toast.success(t('tabsUserstab.roleUpdatedSuccess'));
|
|
147981
147987
|
// Manually invalidate the platformUsers query since it's in a different API slice
|
|
147982
147988
|
dispatch(platformApiSlice.util.invalidateTags([featureTags.PLATFORM_USERS]));
|
|
147989
|
+
await refetchPlatformUsers();
|
|
147983
147990
|
}
|
|
147984
147991
|
catch (error) {
|
|
147985
147992
|
toast.error(t('tabsUserstab.roleUpdateFailed'));
|
|
@@ -147990,6 +147997,10 @@ function UsersTab({ tenant, onInviteClick, currentSpa, showGradebookTab = false,
|
|
|
147990
147997
|
newSet.delete(userId);
|
|
147991
147998
|
return newSet;
|
|
147992
147999
|
});
|
|
148000
|
+
setPendingRoles((prev) => {
|
|
148001
|
+
const { [userId]: _removed, ...rest } = prev;
|
|
148002
|
+
return rest;
|
|
148003
|
+
});
|
|
147993
148004
|
}
|
|
147994
148005
|
};
|
|
147995
148006
|
const handleUserStatusChange = async (user, newStatus) => {
|
|
@@ -148090,6 +148101,7 @@ function UsersTab({ tenant, onInviteClick, currentSpa, showGradebookTab = false,
|
|
|
148090
148101
|
const totalCount = (_b = (isWatcher ? accessibleUsers === null || accessibleUsers === void 0 ? void 0 : accessibleUsers.count : users === null || users === void 0 ? void 0 : users.count)) !== null && _b !== void 0 ? _b : 0;
|
|
148091
148102
|
const totalPages = Math.ceil(totalCount / PAGE_SIZE$5);
|
|
148092
148103
|
return (jsxs("div", { className: "mt-4", children: [jsxs("div", { className: "flex justify-between items-center gap-1", children: [jsxs("div", { className: "relative mb-6 max-w-sm", children: [jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" }), jsx(Input, { type: "text", value: searchQuery, onChange: (event) => setQuerySearch(event.target.value), placeholder: t('tabsUserstab.searchPlaceholder'), className: "pl-10 pr-10 focus:ring-blue-500 focus:border-blue-500 h-[35px]", "aria-label": t('tabsUserstab.searchAriaLabel') }), searchQuery.length > 0 && (searchQuery !== debouncedSearchQuery || isLoading) && (jsx(LoaderCircle, { "data-testid": "search-spinner", className: "absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400 animate-spin", "aria-hidden": "true" }))] }), !isWatcher && (jsx("div", { className: "mb-6", children: jsx(Button$1, { className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] hover:opacity-90 text-white h-[35px]", onClick: onInviteClick, children: t('tabsUserstab.inviteButton') }) }))] }), isLoading ? (jsx("div", { className: "flex justify-center items-center h-64", children: jsx(Spinner, {}) })) : (jsxs(Fragment$1, { children: [jsx("div", { className: "bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg overflow-x-auto", children: jsxs("table", { className: "w-full text-sm", children: [jsx("thead", { className: "bg-gray-50 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600", children: jsxs("tr", { children: [jsx("th", { className: `px-6 py-3 text-left font-medium text-gray-500 dark:text-gray-400 ${isWatcher ? 'w-full' : 'w-[41%]'}`, children: t('tabsUserstab.columnEmail') }), !isWatcher && (jsxs(Fragment$1, { children: [jsx("th", { className: "px-6 py-3 text-left font-medium text-gray-500 dark:text-gray-400 w-[16%]", children: t('tabsUserstab.columnRole') }), jsx("th", { className: "px-6 py-3 text-left font-medium text-gray-500 dark:text-gray-400 w-[25%]", children: t('tabsUserstab.columnPolicies') }), jsx("th", { className: "px-6 py-3 text-left font-medium text-gray-500 dark:text-gray-400 w-[18%]", children: t('tabsUserstab.columnStatus') })] }))] }) }), jsxs("tbody", { className: "divide-y divide-gray-200 dark:divide-gray-600", children: [rows.map((row) => {
|
|
148104
|
+
var _a;
|
|
148093
148105
|
// Only set on the admin path — see {@link UserRow}.
|
|
148094
148106
|
const user = row.managed;
|
|
148095
148107
|
return (jsxs("tr", { onClick: () => setSelectedUser(row), className: "cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors", children: [jsx("td", { "aria-label": 'user-management-email-column', className: "px-6 py-4 text-gray-900 dark:text-gray-100 text-sm max-w-0", children: jsx("button", { type: "button", onClick: (e) => {
|
|
@@ -148097,7 +148109,9 @@ function UsersTab({ tenant, onInviteClick, currentSpa, showGradebookTab = false,
|
|
|
148097
148109
|
setSelectedUser(row);
|
|
148098
148110
|
}, className: "block max-w-full truncate text-left hover:text-blue-600 hover:underline focus:outline-none focus:text-blue-600", "aria-label": t('tabsUserstab.viewProfileAriaLabel', {
|
|
148099
148111
|
name: row.name || row.email,
|
|
148100
|
-
}), children: row.email }) }), user && (jsxs(Fragment$1, { children: [jsx("td", { className: "px-6 py-4", onClick: (e) => e.stopPropagation(), children: jsxs(Select$1, { value:
|
|
148112
|
+
}), children: row.email }) }), user && (jsxs(Fragment$1, { children: [jsx("td", { className: "px-6 py-4", onClick: (e) => e.stopPropagation(), children: jsxs(Select$1, { value: (_a = pendingRoles[user.user_id]) !== null && _a !== void 0 ? _a : (user.is_admin ? 'admin' : 'student'), onValueChange: (nextRole) => handleUserRoleChange(user, nextRole), disabled: updatingUserIds.has(user === null || user === void 0 ? void 0 : user.user_id), children: [jsxs(SelectTrigger, { className: "w-full text-sm", "aria-label": t('tabsUserstab.selectRoleAriaLabel', {
|
|
148113
|
+
name: user.name,
|
|
148114
|
+
}), children: [jsx(SelectValue, {}), updatingUserIds.has(user === null || user === void 0 ? void 0 : user.user_id) && (jsx(LoaderCircle, { "data-testid": "role-update-spinner", className: "h-4 w-4 animate-spin", "aria-hidden": "true" }))] }), jsxs(SelectContent, { className: "text-sm", children: [jsx(SelectItem, { value: "admin", children: t('tabsUserstab.roleAdmin') }), jsx(SelectItem, { value: "student", children: t('tabsUserstab.roleUser') })] })] }) }), jsx("td", { className: "px-6 py-4", onClick: (e) => e.stopPropagation(), children: jsxs(Popover, { modal: true, open: openPolicyPopover === user.user_id, onOpenChange: (open) => setOpenPolicyPopover(open ? user.user_id : null), children: [jsx(PopoverTrigger, { asChild: true, children: jsxs(Button$1, { variant: "outline", role: "combobox", "aria-expanded": openPolicyPopover === user.user_id, "aria-label": t('tabsUserstab.selectPoliciesAriaLabel', {
|
|
148101
148115
|
name: user.name,
|
|
148102
148116
|
}), className: "w-full justify-between text-sm h-9 font-normal", disabled: updatingUserIds.has(user === null || user === void 0 ? void 0 : user.user_id), children: [jsx("span", { className: "truncate", children: user.is_admin
|
|
148103
148117
|
? t('tabsUserstab.allPoliciesSelected', {
|
|
@@ -101937,6 +101937,7 @@ var tabsUserstab$3 = {
|
|
|
101937
101937
|
columnStatus: "Status",
|
|
101938
101938
|
roleAdmin: "Admin",
|
|
101939
101939
|
roleUser: "User",
|
|
101940
|
+
selectRoleAriaLabel: "Select role for {name}",
|
|
101940
101941
|
selectPoliciesAriaLabel: "Select policies for {name}",
|
|
101941
101942
|
allPoliciesSelected: "All ({count}) selected",
|
|
101942
101943
|
nPoliciesSelected: "{count} selected",
|
|
@@ -108986,6 +108987,7 @@ var tabsUserstab$2 = {
|
|
|
108986
108987
|
columnStatus: "Statut",
|
|
108987
108988
|
roleAdmin: "Admin",
|
|
108988
108989
|
roleUser: "Utilisateur",
|
|
108990
|
+
selectRoleAriaLabel: "Sélectionner le rôle pour {name}",
|
|
108989
108991
|
selectPoliciesAriaLabel: "Sélectionner les politiques pour {name}",
|
|
108990
108992
|
allPoliciesSelected: "Tout ({count}) sélectionné",
|
|
108991
108993
|
nPoliciesSelected: "{count} sélectionné(s)",
|
|
@@ -115869,6 +115871,7 @@ var tabsUserstab$1 = {
|
|
|
115869
115871
|
columnStatus: "Estado",
|
|
115870
115872
|
roleAdmin: "Admin",
|
|
115871
115873
|
roleUser: "Usuario",
|
|
115874
|
+
selectRoleAriaLabel: "Seleccionar rol para {name}",
|
|
115872
115875
|
selectPoliciesAriaLabel: "Seleccionar políticas para {name}",
|
|
115873
115876
|
allPoliciesSelected: "Todas ({count}) seleccionadas",
|
|
115874
115877
|
nPoliciesSelected: "{count} seleccionada(s)",
|
|
@@ -122752,6 +122755,7 @@ var tabsUserstab = {
|
|
|
122752
122755
|
columnStatus: "状态",
|
|
122753
122756
|
roleAdmin: "管理员",
|
|
122754
122757
|
roleUser: "用户",
|
|
122758
|
+
selectRoleAriaLabel: "为 {name} 选择角色",
|
|
122755
122759
|
selectPoliciesAriaLabel: "为 {name} 选择策略",
|
|
122756
122760
|
allPoliciesSelected: "全部({count})已选",
|
|
122757
122761
|
nPoliciesSelected: "已选 {count} 个",
|
|
@@ -181008,6 +181012,7 @@ function UsersTab({ tenant, onInviteClick, currentSpa, showGradebookTab = false,
|
|
|
181008
181012
|
const [updateUserStatus] = useUpdateUserStatusMutation();
|
|
181009
181013
|
const [updatePlatformUserRoleWithPolicies] = useUpdatePlatformUserRoleWithPoliciesMutation();
|
|
181010
181014
|
const [updatingUserIds, setUpdatingUserIds] = useState(new Set());
|
|
181015
|
+
const [pendingRoles, setPendingRoles] = useState({});
|
|
181011
181016
|
const [openPolicyPopover, setOpenPolicyPopover] = useState(null);
|
|
181012
181017
|
const [selectedUser, setSelectedUser] = useState(null);
|
|
181013
181018
|
const { currentTenant } = useCurrentTenant();
|
|
@@ -181060,18 +181065,19 @@ function UsersTab({ tenant, onInviteClick, currentSpa, showGradebookTab = false,
|
|
|
181060
181065
|
if (!isWatcher)
|
|
181061
181066
|
await refetchPlatformUsers();
|
|
181062
181067
|
};
|
|
181063
|
-
const handleUserRoleChange = async (user) => {
|
|
181068
|
+
const handleUserRoleChange = async (user, nextRole) => {
|
|
181064
181069
|
const userId = user === null || user === void 0 ? void 0 : user.user_id;
|
|
181065
181070
|
if (!userId)
|
|
181066
181071
|
return;
|
|
181067
181072
|
// Add to updating state
|
|
181068
181073
|
setUpdatingUserIds((prev) => new Set(prev).add(userId));
|
|
181074
|
+
setPendingRoles((prev) => ({ ...prev, [userId]: nextRole }));
|
|
181069
181075
|
try {
|
|
181070
181076
|
await updateUserRole({
|
|
181071
181077
|
username: user === null || user === void 0 ? void 0 : user.username,
|
|
181072
181078
|
org: user === null || user === void 0 ? void 0 : user.platform_org,
|
|
181073
181079
|
role: 'org-instructor',
|
|
181074
|
-
active:
|
|
181080
|
+
active: nextRole === 'admin',
|
|
181075
181081
|
}).unwrap();
|
|
181076
181082
|
// Only clear policies if role change succeeded
|
|
181077
181083
|
try {
|
|
@@ -181093,6 +181099,7 @@ function UsersTab({ tenant, onInviteClick, currentSpa, showGradebookTab = false,
|
|
|
181093
181099
|
toast.success(t('tabsUserstab.roleUpdatedSuccess'));
|
|
181094
181100
|
// Manually invalidate the platformUsers query since it's in a different API slice
|
|
181095
181101
|
dispatch(platformApiSlice.util.invalidateTags([featureTags.PLATFORM_USERS]));
|
|
181102
|
+
await refetchPlatformUsers();
|
|
181096
181103
|
}
|
|
181097
181104
|
catch (error) {
|
|
181098
181105
|
toast.error(t('tabsUserstab.roleUpdateFailed'));
|
|
@@ -181103,6 +181110,10 @@ function UsersTab({ tenant, onInviteClick, currentSpa, showGradebookTab = false,
|
|
|
181103
181110
|
newSet.delete(userId);
|
|
181104
181111
|
return newSet;
|
|
181105
181112
|
});
|
|
181113
|
+
setPendingRoles((prev) => {
|
|
181114
|
+
const { [userId]: _removed, ...rest } = prev;
|
|
181115
|
+
return rest;
|
|
181116
|
+
});
|
|
181106
181117
|
}
|
|
181107
181118
|
};
|
|
181108
181119
|
const handleUserStatusChange = async (user, newStatus) => {
|
|
@@ -181203,6 +181214,7 @@ function UsersTab({ tenant, onInviteClick, currentSpa, showGradebookTab = false,
|
|
|
181203
181214
|
const totalCount = (_b = (isWatcher ? accessibleUsers === null || accessibleUsers === void 0 ? void 0 : accessibleUsers.count : users === null || users === void 0 ? void 0 : users.count)) !== null && _b !== void 0 ? _b : 0;
|
|
181204
181215
|
const totalPages = Math.ceil(totalCount / PAGE_SIZE$d);
|
|
181205
181216
|
return (jsxs("div", { className: "mt-4", children: [jsxs("div", { className: "flex justify-between items-center gap-1", children: [jsxs("div", { className: "relative mb-6 max-w-sm", children: [jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400" }), jsx(Input, { type: "text", value: searchQuery, onChange: (event) => setQuerySearch(event.target.value), placeholder: t('tabsUserstab.searchPlaceholder'), className: "pl-10 pr-10 focus:ring-blue-500 focus:border-blue-500 h-[35px]", "aria-label": t('tabsUserstab.searchAriaLabel') }), searchQuery.length > 0 && (searchQuery !== debouncedSearchQuery || isLoading) && (jsx(LoaderCircle, { "data-testid": "search-spinner", className: "absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400 animate-spin", "aria-hidden": "true" }))] }), !isWatcher && (jsx("div", { className: "mb-6", children: jsx(Button$1, { className: "bg-gradient-to-r from-[#2563EB] to-[#93C5FD] hover:opacity-90 text-white h-[35px]", onClick: onInviteClick, children: t('tabsUserstab.inviteButton') }) }))] }), isLoading ? (jsx("div", { className: "flex justify-center items-center h-64", children: jsx(Spinner, {}) })) : (jsxs(Fragment$1, { children: [jsx("div", { className: "bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg overflow-x-auto", children: jsxs("table", { className: "w-full text-sm", children: [jsx("thead", { className: "bg-gray-50 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600", children: jsxs("tr", { children: [jsx("th", { className: `px-6 py-3 text-left font-medium text-gray-500 dark:text-gray-400 ${isWatcher ? 'w-full' : 'w-[41%]'}`, children: t('tabsUserstab.columnEmail') }), !isWatcher && (jsxs(Fragment$1, { children: [jsx("th", { className: "px-6 py-3 text-left font-medium text-gray-500 dark:text-gray-400 w-[16%]", children: t('tabsUserstab.columnRole') }), jsx("th", { className: "px-6 py-3 text-left font-medium text-gray-500 dark:text-gray-400 w-[25%]", children: t('tabsUserstab.columnPolicies') }), jsx("th", { className: "px-6 py-3 text-left font-medium text-gray-500 dark:text-gray-400 w-[18%]", children: t('tabsUserstab.columnStatus') })] }))] }) }), jsxs("tbody", { className: "divide-y divide-gray-200 dark:divide-gray-600", children: [rows.map((row) => {
|
|
181217
|
+
var _a;
|
|
181206
181218
|
// Only set on the admin path — see {@link UserRow}.
|
|
181207
181219
|
const user = row.managed;
|
|
181208
181220
|
return (jsxs("tr", { onClick: () => setSelectedUser(row), className: "cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors", children: [jsx("td", { "aria-label": 'user-management-email-column', className: "px-6 py-4 text-gray-900 dark:text-gray-100 text-sm max-w-0", children: jsx("button", { type: "button", onClick: (e) => {
|
|
@@ -181210,7 +181222,9 @@ function UsersTab({ tenant, onInviteClick, currentSpa, showGradebookTab = false,
|
|
|
181210
181222
|
setSelectedUser(row);
|
|
181211
181223
|
}, className: "block max-w-full truncate text-left hover:text-blue-600 hover:underline focus:outline-none focus:text-blue-600", "aria-label": t('tabsUserstab.viewProfileAriaLabel', {
|
|
181212
181224
|
name: row.name || row.email,
|
|
181213
|
-
}), children: row.email }) }), user && (jsxs(Fragment$1, { children: [jsx("td", { className: "px-6 py-4", onClick: (e) => e.stopPropagation(), children: jsxs(Select$1, { value:
|
|
181225
|
+
}), children: row.email }) }), user && (jsxs(Fragment$1, { children: [jsx("td", { className: "px-6 py-4", onClick: (e) => e.stopPropagation(), children: jsxs(Select$1, { value: (_a = pendingRoles[user.user_id]) !== null && _a !== void 0 ? _a : (user.is_admin ? 'admin' : 'student'), onValueChange: (nextRole) => handleUserRoleChange(user, nextRole), disabled: updatingUserIds.has(user === null || user === void 0 ? void 0 : user.user_id), children: [jsxs(SelectTrigger, { className: "w-full text-sm", "aria-label": t('tabsUserstab.selectRoleAriaLabel', {
|
|
181226
|
+
name: user.name,
|
|
181227
|
+
}), children: [jsx(SelectValue, {}), updatingUserIds.has(user === null || user === void 0 ? void 0 : user.user_id) && (jsx(LoaderCircle, { "data-testid": "role-update-spinner", className: "h-4 w-4 animate-spin", "aria-hidden": "true" }))] }), jsxs(SelectContent, { className: "text-sm", children: [jsx(SelectItem, { value: "admin", children: t('tabsUserstab.roleAdmin') }), jsx(SelectItem, { value: "student", children: t('tabsUserstab.roleUser') })] })] }) }), jsx("td", { className: "px-6 py-4", onClick: (e) => e.stopPropagation(), children: jsxs(Popover, { modal: true, open: openPolicyPopover === user.user_id, onOpenChange: (open) => setOpenPolicyPopover(open ? user.user_id : null), children: [jsx(PopoverTrigger, { asChild: true, children: jsxs(Button$1, { variant: "outline", role: "combobox", "aria-expanded": openPolicyPopover === user.user_id, "aria-label": t('tabsUserstab.selectPoliciesAriaLabel', {
|
|
181214
181228
|
name: user.name,
|
|
181215
181229
|
}), className: "w-full justify-between text-sm h-9 font-normal", disabled: updatingUserIds.has(user === null || user === void 0 ? void 0 : user.user_id), children: [jsx("span", { className: "truncate", children: user.is_admin
|
|
181216
181230
|
? t('tabsUserstab.allPoliciesSelected', {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iblai/iblai-js",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.8",
|
|
4
4
|
"description": "Unified JavaScript SDK for IBL.ai — re-exports data-layer, web-containers, and web-utils under a single package",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -76,9 +76,9 @@
|
|
|
76
76
|
"axios": "1.13.6",
|
|
77
77
|
"dotenv": "16.6.1",
|
|
78
78
|
"winston": "3.19.0",
|
|
79
|
-
"@iblai/mcp": "1.10.5",
|
|
80
79
|
"@iblai/data-layer": "1.12.106",
|
|
81
|
-
"@iblai/
|
|
80
|
+
"@iblai/mcp": "1.10.5",
|
|
81
|
+
"@iblai/web-containers": "1.18.8",
|
|
82
82
|
"@iblai/web-utils": "2.1.17"
|
|
83
83
|
},
|
|
84
84
|
"peerDependencies": {
|