@firecms/user_management 3.0.0 → 3.1.0-canary.1df3b2c

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.
package/dist/index.umd.js CHANGED
@@ -360,11 +360,17 @@
360
360
  }
361
361
  const mgmtUser_0 = users.find((u_3) => u_3.email?.toLowerCase() === user_3?.email?.toLowerCase());
362
362
  if (mgmtUser_0) {
363
- if (mgmtUser_0.uid !== user_3.uid) {
364
- console.warn("User uid has changed, updating user in user management system");
363
+ const needsUidUpdate = mgmtUser_0.uid !== user_3.uid;
364
+ const needsPhotoUpdate = user_3.photoURL && mgmtUser_0.photoURL !== user_3.photoURL;
365
+ if (needsUidUpdate || needsPhotoUpdate) {
366
+ const updateReason = needsUidUpdate ? "uid" : "photoURL";
367
+ console.debug(`User ${updateReason} has changed, updating user in user management system`);
365
368
  saveUser({
366
369
  ...mgmtUser_0,
367
- uid: user_3.uid
370
+ uid: user_3.uid,
371
+ ...needsPhotoUpdate ? {
372
+ photoURL: user_3.photoURL
373
+ } : {}
368
374
  }).then(() => {
369
375
  console.debug("User updated in user management system", mgmtUser_0);
370
376
  }).catch((e_4) => {
@@ -630,7 +636,7 @@
630
636
  React.useEffect(t5, t6);
631
637
  let t7;
632
638
  let t8;
633
- if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
639
+ if ($[18] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
634
640
  t7 = {
635
641
  display: "flex",
636
642
  flexDirection: "column",
@@ -725,7 +731,7 @@
725
731
  t21 = $[42];
726
732
  }
727
733
  let t22;
728
- if ($[43] === Symbol.for("react.memo_cache_sentinel")) {
734
+ if ($[43] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
729
735
  t22 = /* @__PURE__ */ jsxRuntime.jsxs(ui.TableHeader, { className: "rounded-md", children: [
730
736
  /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, {}),
731
737
  /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { align: "center", children: "Create entities" }),
@@ -739,7 +745,7 @@
739
745
  t22 = $[43];
740
746
  }
741
747
  let t23;
742
- if ($[44] === Symbol.for("react.memo_cache_sentinel")) {
748
+ if ($[44] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
743
749
  t23 = /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { scope: "row", children: /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "All collections" }) });
744
750
  $[44] = t23;
745
751
  } else {
@@ -826,7 +832,7 @@
826
832
  t39 = $[68];
827
833
  }
828
834
  let t40;
829
- if ($[69] === Symbol.for("react.memo_cache_sentinel")) {
835
+ if ($[69] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
830
836
  t40 = /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { align: "center" });
831
837
  $[69] = t40;
832
838
  } else {
@@ -894,7 +900,7 @@
894
900
  t43 = $[87];
895
901
  }
896
902
  let t44;
897
- if ($[88] === Symbol.for("react.memo_cache_sentinel")) {
903
+ if ($[88] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
898
904
  t44 = /* @__PURE__ */ jsxRuntime.jsx(core.FieldCaption, { children: "You can customise the permissions that the users related to this role can perform in the entities of each collection" });
899
905
  $[88] = t44;
900
906
  } else {
@@ -924,7 +930,7 @@
924
930
  const t49 = isAdmin || values_0.config?.createCollections ? "true" : "false";
925
931
  let t50;
926
932
  let t51;
927
- if ($[93] === Symbol.for("react.memo_cache_sentinel")) {
933
+ if ($[93] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
928
934
  t50 = /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: "true", children: " Yes " });
929
935
  t51 = /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: "false", children: " No " });
930
936
  $[93] = t50;
@@ -982,7 +988,7 @@
982
988
  let t60;
983
989
  let t61;
984
990
  let t62;
985
- if ($[107] === Symbol.for("react.memo_cache_sentinel")) {
991
+ if ($[107] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
986
992
  t60 = /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: "true", children: " Yes " });
987
993
  t61 = /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: "false", children: " No " });
988
994
  t62 = /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: "own", children: " Only his/her own " });
@@ -1044,7 +1050,7 @@
1044
1050
  let t71;
1045
1051
  let t72;
1046
1052
  let t73;
1047
- if ($[122] === Symbol.for("react.memo_cache_sentinel")) {
1053
+ if ($[122] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1048
1054
  t71 = /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: "true", children: " Yes " });
1049
1055
  t72 = /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: "false", children: " No " });
1050
1056
  t73 = /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: "own", children: " Only his/her own " });
@@ -1122,7 +1128,7 @@
1122
1128
  }
1123
1129
  let t80;
1124
1130
  if ($[144] !== handleClose) {
1125
- t80 = /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "text", color: "primary", onClick: () => {
1131
+ t80 = /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "text", onClick: () => {
1126
1132
  handleClose();
1127
1133
  }, children: "Cancel" });
1128
1134
  $[144] = handleClose;
@@ -1134,7 +1140,7 @@
1134
1140
  const t82 = isNewRole ? "Create role" : "Update";
1135
1141
  let t83;
1136
1142
  if ($[146] !== isSubmitting || $[147] !== t81 || $[148] !== t82) {
1137
- t83 = /* @__PURE__ */ jsxRuntime.jsx(ui.LoadingButton, { variant: "filled", color: "primary", type: "submit", disabled: t81, loading: isSubmitting, children: t82 });
1143
+ t83 = /* @__PURE__ */ jsxRuntime.jsx(ui.LoadingButton, { variant: "filled", type: "submit", disabled: t81, loading: isSubmitting, children: t82 });
1138
1144
  $[146] = isSubmitting;
1139
1145
  $[147] = t81;
1140
1146
  $[148] = t82;
@@ -1259,7 +1265,7 @@
1259
1265
  const [roleToBeDeleted, setRoleToBeDeleted] = React.useState(void 0);
1260
1266
  const [deleteInProgress, setDeleteInProgress] = React.useState(false);
1261
1267
  let t1;
1262
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
1268
+ if ($[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1263
1269
  t1 = /* @__PURE__ */ jsxRuntime.jsxs(ui.TableHeader, { children: [
1264
1270
  /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { header: true, className: "w-16" }),
1265
1271
  /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { header: true, children: "Role" }),
@@ -1307,7 +1313,7 @@
1307
1313
  if ($[5] !== allowDefaultRolesCreation || $[6] !== roles || $[7] !== saveRole) {
1308
1314
  t3 = (!roles || roles.length === 0) && /* @__PURE__ */ jsxRuntime.jsx(ui.TableRow, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { colspan: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.CenteredView, { className: "flex flex-col gap-4 my-8 items-center", children: [
1309
1315
  /* @__PURE__ */ jsxRuntime.jsx(ui.Typography, { variant: "label", children: "You don't have any roles yet." }),
1310
- allowDefaultRolesCreation && /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outlined", onClick: () => {
1316
+ allowDefaultRolesCreation && /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: () => {
1311
1317
  DEFAULT_ROLES.forEach((role_0) => {
1312
1318
  saveRole(role_0);
1313
1319
  });
@@ -1357,7 +1363,7 @@
1357
1363
  let t7;
1358
1364
  let t8;
1359
1365
  let t9;
1360
- if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
1366
+ if ($[15] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1361
1367
  t7 = () => {
1362
1368
  setRoleToBeDeleted(void 0);
1363
1369
  };
@@ -1406,7 +1412,7 @@
1406
1412
  const [dialogOpen, setDialogOpen] = React.useState(false);
1407
1413
  const [selectedRole, setSelectedRole] = React.useState();
1408
1414
  let t1;
1409
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
1415
+ if ($[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1410
1416
  t1 = (user) => {
1411
1417
  setDialogOpen(true);
1412
1418
  setSelectedRole(user);
@@ -1417,7 +1423,7 @@
1417
1423
  }
1418
1424
  const onRoleClicked = t1;
1419
1425
  let t2;
1420
- if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
1426
+ if ($[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1421
1427
  t2 = () => {
1422
1428
  setSelectedRole(void 0);
1423
1429
  setDialogOpen(false);
@@ -1428,7 +1434,7 @@
1428
1434
  }
1429
1435
  const handleClose = t2;
1430
1436
  let t3;
1431
- if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
1437
+ if ($[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1432
1438
  t3 = /* @__PURE__ */ jsxRuntime.jsx(ui.Typography, { gutterBottom: true, variant: "h4", className: "flex-grow", component: "h4", children: "Roles" });
1433
1439
  $[2] = t3;
1434
1440
  } else {
@@ -1436,7 +1442,7 @@
1436
1442
  }
1437
1443
  let t4;
1438
1444
  let t5;
1439
- if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
1445
+ if ($[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1440
1446
  t4 = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center mt-12", children: [
1441
1447
  t3,
1442
1448
  /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { size: "large", startIcon: /* @__PURE__ */ jsxRuntime.jsx(ui.AddIcon, {}), onClick: () => setDialogOpen(true), children: "Add role" })
@@ -1602,7 +1608,7 @@
1602
1608
  }
1603
1609
  let t6;
1604
1610
  let t7;
1605
- if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
1611
+ if ($[18] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1606
1612
  t6 = {
1607
1613
  display: "flex",
1608
1614
  flexDirection: "column",
@@ -1733,7 +1739,7 @@
1733
1739
  }
1734
1740
  let t25;
1735
1741
  if ($[53] !== handleClose) {
1736
- t25 = /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "text", color: "primary", onClick: () => {
1742
+ t25 = /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "text", onClick: () => {
1737
1743
  handleClose();
1738
1744
  }, children: "Cancel" });
1739
1745
  $[53] = handleClose;
@@ -1745,7 +1751,7 @@
1745
1751
  const t27 = isNewUser ? "Create user" : "Update";
1746
1752
  let t28;
1747
1753
  if ($[55] !== isSubmitting || $[56] !== t26 || $[57] !== t27) {
1748
- t28 = /* @__PURE__ */ jsxRuntime.jsx(ui.LoadingButton, { variant: "filled", color: "primary", type: "submit", disabled: t26, loading: isSubmitting, children: t27 });
1754
+ t28 = /* @__PURE__ */ jsxRuntime.jsx(ui.LoadingButton, { variant: "filled", type: "submit", disabled: t26, loading: isSubmitting, children: t27 });
1749
1755
  $[55] = isSubmitting;
1750
1756
  $[56] = t26;
1751
1757
  $[57] = t27;
@@ -1842,13 +1848,14 @@
1842
1848
  const [userToBeDeleted, setUserToBeDeleted] = React.useState(void 0);
1843
1849
  const [deleteInProgress, setDeleteInProgress] = React.useState(false);
1844
1850
  let t1;
1845
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
1851
+ if ($[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1846
1852
  t1 = /* @__PURE__ */ jsxRuntime.jsxs(ui.TableHeader, { children: [
1847
- /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { className: "truncate w-16" }),
1853
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { className: "w-12" }),
1848
1854
  /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { children: "Email" }),
1849
1855
  /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { children: "Name" }),
1850
1856
  /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { children: "Roles" }),
1851
- /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { children: "Created on" })
1857
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { children: "Created on" }),
1858
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { className: "w-12" })
1852
1859
  ] });
1853
1860
  $[0] = t1;
1854
1861
  } else {
@@ -1864,14 +1871,15 @@
1864
1871
  return /* @__PURE__ */ jsxRuntime.jsxs(ui.TableRow, { onClick: () => {
1865
1872
  onUserClicked(user);
1866
1873
  }, children: [
1867
- /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { className: "w-10", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Tooltip, { asChild: true, title: "Delete this user", children: /* @__PURE__ */ jsxRuntime.jsx(ui.IconButton, { size: "small", onClick: (event) => {
1868
- event.stopPropagation();
1869
- return setUserToBeDeleted(user);
1870
- }, children: /* @__PURE__ */ jsxRuntime.jsx(ui.DeleteIcon, {}) }) }) }),
1874
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { className: "w-12", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Avatar, { src: user.photoURL ?? void 0, outerClassName: "w-8 h-8 min-w-8 min-h-8 p-0", className: "text-sm", hover: false, children: user.displayName ? user.displayName[0].toUpperCase() : user.email ? user.email[0].toUpperCase() : "U" }) }),
1871
1875
  /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { children: user.email }),
1872
1876
  /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { className: "font-medium align-left", children: user.displayName }),
1873
1877
  /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { className: "align-left", children: userRoles ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: userRoles.map(_temp$1) }) : null }),
1874
- /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { children: formattedDate })
1878
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { children: formattedDate }),
1879
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { className: "w-12", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Tooltip, { asChild: true, title: "Delete this user", children: /* @__PURE__ */ jsxRuntime.jsx(ui.IconButton, { size: "smallest", onClick: (event) => {
1880
+ event.stopPropagation();
1881
+ return setUserToBeDeleted(user);
1882
+ }, children: /* @__PURE__ */ jsxRuntime.jsx(ui.DeleteIcon, { size: "small" }) }) }) })
1875
1883
  ] }, "row_" + user.uid);
1876
1884
  });
1877
1885
  $[1] = dateFormat;
@@ -1886,7 +1894,7 @@
1886
1894
  if ($[6] !== authController || $[7] !== saveUser || $[8] !== snackbarController || $[9] !== users) {
1887
1895
  t3 = (!users || users.length === 0) && /* @__PURE__ */ jsxRuntime.jsx(ui.TableRow, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.TableCell, { colspan: 6, children: /* @__PURE__ */ jsxRuntime.jsxs(ui.CenteredView, { className: "flex flex-col gap-4 my-8 items-center", children: [
1888
1896
  /* @__PURE__ */ jsxRuntime.jsx(ui.Typography, { variant: "label", children: "There are no users yet" }),
1889
- /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outlined", onClick: () => {
1897
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: () => {
1890
1898
  if (!authController.user?.uid) {
1891
1899
  throw Error("UsersTable, authController misconfiguration");
1892
1900
  }
@@ -1966,7 +1974,7 @@
1966
1974
  let t7;
1967
1975
  let t8;
1968
1976
  let t9;
1969
- if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
1977
+ if ($[18] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1970
1978
  t7 = () => {
1971
1979
  setUserToBeDeleted(void 0);
1972
1980
  };
@@ -2017,7 +2025,7 @@
2017
2025
  const [newFormKey, setNewFormKey] = React.useState(0);
2018
2026
  useUserManagement();
2019
2027
  let t1;
2020
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
2028
+ if ($[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
2021
2029
  t1 = (user) => {
2022
2030
  setSelectedUser(user);
2023
2031
  setDialogOpen(true);
@@ -2028,7 +2036,7 @@
2028
2036
  }
2029
2037
  const onUserClicked = t1;
2030
2038
  let t2;
2031
- if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
2039
+ if ($[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
2032
2040
  t2 = () => {
2033
2041
  setDialogOpen(false);
2034
2042
  setSelectedUser(void 0);
@@ -2039,7 +2047,7 @@
2039
2047
  }
2040
2048
  const handleClose = t2;
2041
2049
  let t3;
2042
- if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
2050
+ if ($[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
2043
2051
  t3 = () => {
2044
2052
  setSelectedUser(void 0);
2045
2053
  setNewFormKey(_temp);
@@ -2051,7 +2059,7 @@
2051
2059
  }
2052
2060
  const handleAddUser = t3;
2053
2061
  let t4;
2054
- if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
2062
+ if ($[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
2055
2063
  t4 = /* @__PURE__ */ jsxRuntime.jsx(ui.Typography, { gutterBottom: true, variant: "h4", className: "flex-grow", component: "h4", children: "Users" });
2056
2064
  $[3] = t4;
2057
2065
  } else {
@@ -2059,7 +2067,7 @@
2059
2067
  }
2060
2068
  let t5;
2061
2069
  let t6;
2062
- if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
2070
+ if ($[4] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
2063
2071
  t5 = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center mt-12", children: [
2064
2072
  t4,
2065
2073
  /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { size: "large", startIcon: /* @__PURE__ */ jsxRuntime.jsx(ui.AddIcon, {}), onClick: handleAddUser, children: "Add user" })
@@ -2182,7 +2190,7 @@
2182
2190
  const buttonLabel = noUsers && noRoles ? "Create default roles and add current user as admin" : noUsers ? "Add current user as admin" : noRoles ? "Create default roles" : void 0;
2183
2191
  let t1;
2184
2192
  let t2;
2185
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
2193
+ if ($[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
2186
2194
  t1 = /* @__PURE__ */ jsxRuntime.jsx(ui.Typography, { variant: "subtitle2", className: "uppercase", children: "Create your users and roles" });
2187
2195
  t2 = /* @__PURE__ */ jsxRuntime.jsx(ui.Typography, { children: "You have no users or roles defined. You can create default roles and add the current user as admin." });
2188
2196
  $[0] = t1;
@@ -2243,7 +2251,7 @@
2243
2251
  t3 = $[12];
2244
2252
  }
2245
2253
  let t4;
2246
- if ($[13] === Symbol.for("react.memo_cache_sentinel")) {
2254
+ if ($[13] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
2247
2255
  t4 = /* @__PURE__ */ jsxRuntime.jsx(ui.AddIcon, {});
2248
2256
  $[13] = t4;
2249
2257
  } else {
@@ -2254,7 +2262,7 @@
2254
2262
  t5 = /* @__PURE__ */ jsxRuntime.jsxs(ui.Paper, { className: "my-4 flex flex-col px-4 py-6 bg-white dark:bg-surface-accent-800 gap-2", children: [
2255
2263
  t1,
2256
2264
  t2,
2257
- /* @__PURE__ */ jsxRuntime.jsxs(ui.Button, { variant: "outlined", onClick: t3, children: [
2265
+ /* @__PURE__ */ jsxRuntime.jsxs(ui.Button, { onClick: t3, children: [
2258
2266
  t4,
2259
2267
  buttonLabel
2260
2268
  ] })
@@ -2280,6 +2288,7 @@
2280
2288
  icon: "gpp_good",
2281
2289
  view: /* @__PURE__ */ jsxRuntime.jsx(RolesView, {})
2282
2290
  }];
2291
+ exports2.DEFAULT_ROLES = DEFAULT_ROLES;
2283
2292
  exports2.IntroWidget = IntroWidget;
2284
2293
  exports2.RESERVED_GROUPS = RESERVED_GROUPS;
2285
2294
  exports2.RoleChip = RoleChip;