@local-civics/mgmt-ui 0.1.195 → 0.1.197

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.js CHANGED
@@ -62,7 +62,7 @@ var __objRest$2 = (source, exclude) => {
62
62
  }
63
63
  return target;
64
64
  };
65
- const useStyles$w = core.createStyles((theme) => ({
65
+ const useStyles$v = core.createStyles((theme) => ({
66
66
  user: {
67
67
  display: "block",
68
68
  width: "100%",
@@ -73,7 +73,7 @@ const useStyles$w = core.createStyles((theme) => ({
73
73
  }));
74
74
  function UserButton(_a) {
75
75
  var _b = _a, { image, name, email, icon } = _b, others = __objRest$2(_b, ["image", "name", "email", "icon"]);
76
- const { classes } = useStyles$w();
76
+ const { classes } = useStyles$v();
77
77
  return /* @__PURE__ */ React__namespace.createElement(core.Group, __spreadValues$e({ className: classes.user }, others), /* @__PURE__ */ React__namespace.createElement(core.Avatar, { src: image, radius: "xl" }), /* @__PURE__ */ React__namespace.createElement("div", { style: { flex: 1 } }, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", weight: 500 }, name), /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", size: "xs" }, email)));
78
78
  }
79
79
 
@@ -84,7 +84,7 @@ const compact = (num) => {
84
84
  }).format(num || 0);
85
85
  };
86
86
 
87
- const useStyles$v = core.createStyles((theme, _params, getRef) => {
87
+ const useStyles$u = core.createStyles((theme, _params, getRef) => {
88
88
  const icon = getRef("icon");
89
89
  return {
90
90
  control: {
@@ -137,7 +137,7 @@ const useStyles$v = core.createStyles((theme, _params, getRef) => {
137
137
  };
138
138
  });
139
139
  function LinksGroup({ icon: Icon, href, label, initiallyOpened, links, active, notifications }) {
140
- const { classes, theme, cx } = useStyles$v();
140
+ const { classes, theme, cx } = useStyles$u();
141
141
  const hasLinks = Array.isArray(links) && links.length > 0;
142
142
  const hasActiveLinks = Array.isArray(links) && links.map((l) => !!active && active === `${label}/${l.label}`).reduce((a, b) => a || b, false);
143
143
  const [opened, setOpened] = React.useState(initiallyOpened || hasActiveLinks || false);
@@ -183,8 +183,8 @@ function LinksGroup({ icon: Icon, href, label, initiallyOpened, links, active, n
183
183
  }
184
184
 
185
185
  var __defProp$d = Object.defineProperty;
186
- var __defProps$a = Object.defineProperties;
187
- var __getOwnPropDescs$a = Object.getOwnPropertyDescriptors;
186
+ var __defProps$9 = Object.defineProperties;
187
+ var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
188
188
  var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
189
189
  var __hasOwnProp$d = Object.prototype.hasOwnProperty;
190
190
  var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
@@ -200,8 +200,8 @@ var __spreadValues$d = (a, b) => {
200
200
  }
201
201
  return a;
202
202
  };
203
- var __spreadProps$a = (a, b) => __defProps$a(a, __getOwnPropDescs$a(b));
204
- const useStyles$u = core.createStyles((theme, _params, getRef) => {
203
+ var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
204
+ const useStyles$t = core.createStyles((theme, _params, getRef) => {
205
205
  const icon = getRef("icon");
206
206
  return {
207
207
  navbar: {
@@ -232,7 +232,7 @@ const useStyles$u = core.createStyles((theme, _params, getRef) => {
232
232
  color: theme.colorScheme === "dark" ? theme.white : theme.black,
233
233
  borderBottom: `1px solid ${theme.colorScheme === "dark" ? theme.colors.dark[4] : theme.colors.gray[3]}`
234
234
  },
235
- link: __spreadProps$a(__spreadValues$d({}, theme.fn.focusStyles()), {
235
+ link: __spreadProps$9(__spreadValues$d({}, theme.fn.focusStyles()), {
236
236
  display: "flex",
237
237
  alignItems: "center",
238
238
  textDecoration: "none",
@@ -302,7 +302,7 @@ const TRIAL_PAGES = [
302
302
  "Badges"
303
303
  ];
304
304
  function Navbar(props) {
305
- const { classes, cx } = useStyles$u();
305
+ const { classes, cx } = useStyles$t();
306
306
  const [burgerOpen, setBurgerOpen] = React__namespace.useState(false);
307
307
  const toggle = () => setBurgerOpen(!burgerOpen);
308
308
  const links = data.map((item) => {
@@ -315,7 +315,7 @@ function Navbar(props) {
315
315
  }
316
316
  return /* @__PURE__ */ React__namespace.createElement(
317
317
  LinksGroup,
318
- __spreadProps$a(__spreadValues$d(__spreadValues$d({
318
+ __spreadProps$9(__spreadValues$d(__spreadValues$d({
319
319
  key: item.label,
320
320
  active: props.active
321
321
  }, item), context), {
@@ -345,7 +345,7 @@ function Navbar(props) {
345
345
  } }, /* @__PURE__ */ React__namespace.createElement(icons.IconLogout, { className: classes.linkIcon, stroke: 1.5 }), /* @__PURE__ */ React__namespace.createElement("span", null, "Logout"))))));
346
346
  }
347
347
 
348
- const useStyles$t = core.createStyles((theme) => ({
348
+ const useStyles$s = core.createStyles((theme) => ({
349
349
  inner: {
350
350
  paddingTop: theme.spacing.xl,
351
351
  paddingBottom: theme.spacing.xl * 4
@@ -381,7 +381,7 @@ const useStyles$t = core.createStyles((theme) => ({
381
381
  }
382
382
  }));
383
383
  const GettingStarted = (props) => {
384
- const { classes } = useStyles$t();
384
+ const { classes } = useStyles$s();
385
385
  return /* @__PURE__ */ React__namespace.createElement(
386
386
  core.Modal,
387
387
  {
@@ -395,7 +395,7 @@ const GettingStarted = (props) => {
395
395
  );
396
396
  };
397
397
 
398
- const useStyles$s = core.createStyles((theme) => ({
398
+ const useStyles$r = core.createStyles((theme) => ({
399
399
  title: {
400
400
  fontSize: 34,
401
401
  fontWeight: 900,
@@ -436,7 +436,7 @@ const useStyles$s = core.createStyles((theme) => ({
436
436
  }
437
437
  }));
438
438
  const SwitchAccount = (props) => {
439
- const { classes, theme } = useStyles$s();
439
+ const { classes, theme } = useStyles$r();
440
440
  const options = props.accounts.map((a) => {
441
441
  return /* @__PURE__ */ React__namespace.createElement(core.UnstyledButton, { onClick: () => props.onClick && props.onClick(a.accountId), key: a.accountId, p: theme.spacing.md }, /* @__PURE__ */ React__namespace.createElement(core.Card, { withBorder: true, shadow: "md", radius: "md", className: classes.card, p: "xl" }, a.isAdmin && /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__PURE__ */ React__namespace.createElement(icons.IconBatteryEco, { size: 50, stroke: 2, color: theme.fn.primaryColor() })), a.isGroupAdmin && !a.isAdmin && /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__PURE__ */ React__namespace.createElement(icons.IconBooks, { size: 50, stroke: 2, color: theme.fn.primaryColor() })), !a.isAdmin && !a.isGroupAdmin && /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__PURE__ */ React__namespace.createElement(icons.IconBackpack, { size: 50, stroke: 2, color: theme.fn.primaryColor() })), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "lg", weight: 500, className: classes.cardTitle, mt: "md" }, a.name), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", color: "dimmed", mt: "sm" }, a.isAdmin ? "Admin" : a.isGroupAdmin ? "Educator" : "Student")));
442
442
  });
@@ -453,7 +453,7 @@ const SwitchAccount = (props) => {
453
453
  );
454
454
  };
455
455
 
456
- const useStyles$r = core.createStyles((theme) => ({
456
+ const useStyles$q = core.createStyles((theme) => ({
457
457
  root: {
458
458
  display: "flex",
459
459
  backgroundImage: `linear-gradient(-60deg, ${theme.colors[theme.primaryColor][4]} 0%, ${theme.colors[theme.primaryColor][7]} 100%)`,
@@ -497,7 +497,7 @@ const useStyles$r = core.createStyles((theme) => ({
497
497
  }
498
498
  }));
499
499
  const StatsGroup = ({ data, footer }) => {
500
- const { classes } = useStyles$r();
500
+ const { classes } = useStyles$q();
501
501
  const stats = data.map((stat) => {
502
502
  const value = (() => {
503
503
  if (stat.unit === "%") {
@@ -517,7 +517,7 @@ const Tabs = (props) => {
517
517
  return /* @__PURE__ */ React__namespace.createElement(core.Tabs, { value: props.value, onTabChange: props.onChange }, /* @__PURE__ */ React__namespace.createElement(core.Tabs.List, null, tabs));
518
518
  };
519
519
 
520
- const useStyles$q = core.createStyles((theme) => ({
520
+ const useStyles$p = core.createStyles((theme) => ({
521
521
  button: {
522
522
  borderTopRightRadius: 0,
523
523
  borderBottomRightRadius: 0,
@@ -532,7 +532,7 @@ const useStyles$q = core.createStyles((theme) => ({
532
532
  }
533
533
  }));
534
534
  const SplitButton$5 = (props) => {
535
- const { classes, theme } = useStyles$q();
535
+ const { classes, theme } = useStyles$p();
536
536
  theme.colors[theme.primaryColor][theme.colorScheme === "dark" ? 5 : 6];
537
537
  return /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "sm" }, /* @__PURE__ */ React__namespace.createElement(
538
538
  core.Button,
@@ -560,7 +560,7 @@ const SplitButton$5 = (props) => {
560
560
  ));
561
561
  };
562
562
 
563
- const useStyles$p = core.createStyles((theme) => ({
563
+ const useStyles$o = core.createStyles((theme) => ({
564
564
  wrapper: {
565
565
  display: "flex",
566
566
  alignItems: "center",
@@ -611,7 +611,7 @@ const useStyles$p = core.createStyles((theme) => ({
611
611
  }
612
612
  }));
613
613
  const PlaceholderBanner = (props) => {
614
- const { classes } = useStyles$p();
614
+ const { classes } = useStyles$o();
615
615
  const title = props.title || "Nothing to display";
616
616
  const description = props.description || "We don't have anything to show you here just yet. Add data, check back later, or adjust your search.";
617
617
  return /* @__PURE__ */ React__namespace.createElement("div", { className: classes.wrapper }, /* @__PURE__ */ React__namespace.createElement("div", { className: classes.body }, /* @__PURE__ */ React__namespace.createElement(core.Title, { className: classes.title }, props.loading ? "Loading..." : title), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", color: "dimmed" }, props.loading ? "Hold on, we're loading your data." : description)), /* @__PURE__ */ React__namespace.createElement(core.Image, { src: `https://cdn.localcivics.io/illustrations/${props.icon}.svg`, className: classes.image }));
@@ -657,8 +657,6 @@ function useSortableData(items, config = { key: "", direction: null }) {
657
657
  let direction = "asc";
658
658
  if (sortConfig.key === key && sortConfig.direction === "asc") {
659
659
  direction = "desc";
660
- } else if (sortConfig.key === key && sortConfig.direction === "desc") {
661
- direction = null;
662
660
  }
663
661
  setSortConfig({ key, direction });
664
662
  };
@@ -666,8 +664,8 @@ function useSortableData(items, config = { key: "", direction: null }) {
666
664
  }
667
665
 
668
666
  var __defProp$c = Object.defineProperty;
669
- var __defProps$9 = Object.defineProperties;
670
- var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
667
+ var __defProps$8 = Object.defineProperties;
668
+ var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
671
669
  var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
672
670
  var __hasOwnProp$c = Object.prototype.hasOwnProperty;
673
671
  var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
@@ -683,10 +681,10 @@ var __spreadValues$c = (a, b) => {
683
681
  }
684
682
  return a;
685
683
  };
686
- var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
684
+ var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
687
685
  function Table$k(props) {
688
686
  const preparedItems = React__namespace.useMemo(() => {
689
- return props.items.map((item) => __spreadProps$9(__spreadValues$c({}, item), {
687
+ return props.items.map((item) => __spreadProps$8(__spreadValues$c({}, item), {
690
688
  status: item.isComplete ? 1 : 0
691
689
  }));
692
690
  }, [props.items]);
@@ -783,7 +781,7 @@ function Table$j(props) {
783
781
  ));
784
782
  }
785
783
 
786
- const useStyles$o = core.createStyles((theme) => ({
784
+ const useStyles$n = core.createStyles((theme) => ({
787
785
  title: {
788
786
  fontSize: 34,
789
787
  fontWeight: 900,
@@ -796,7 +794,7 @@ const useStyles$o = core.createStyles((theme) => ({
796
794
  }
797
795
  }));
798
796
  const Badge = (props) => {
799
- const { classes } = useStyles$o();
797
+ const { classes } = useStyles$n();
800
798
  const [tab, setTab] = React.useState("lessons");
801
799
  const numberOfStudents = props.students.length;
802
800
  const numberOfBadges = numberOfStudents > 0 ? props.students.filter((u) => u.isComplete).length : 0;
@@ -894,7 +892,7 @@ function Table$i(props) {
894
892
  return /* @__PURE__ */ React__namespace.createElement(core.ScrollArea.Autosize, { maxHeight: 600 }, /* @__PURE__ */ React__namespace.createElement(core.Table, { horizontalSpacing: 0, verticalSpacing: 0, sx: { minWidth: 700 } }, /* @__PURE__ */ React__namespace.createElement("tbody", null, rows)));
895
893
  }
896
894
 
897
- const useStyles$n = core.createStyles((theme) => ({
895
+ const useStyles$m = core.createStyles((theme) => ({
898
896
  title: {
899
897
  fontSize: 34,
900
898
  fontWeight: 900,
@@ -907,7 +905,7 @@ const useStyles$n = core.createStyles((theme) => ({
907
905
  }
908
906
  }));
909
907
  const Badges = (props) => {
910
- const { classes } = useStyles$n();
908
+ const { classes } = useStyles$m();
911
909
  return /* @__PURE__ */ React__namespace.createElement(core.Container, { size: "lg", py: "xl" }, /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "md" }, /* @__PURE__ */ React__namespace.createElement(core.Grid, null, /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { sm: "auto" }, /* @__PURE__ */ React__namespace.createElement(core.Badge, { variant: "filled", size: "lg" }, "Badges"), /* @__PURE__ */ React__namespace.createElement(core.Title, { order: 2, className: classes.title, mt: "md" }, "Badges and micro-credentials"), /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", className: classes.description, mt: "sm" }, "Key milestones that reflect skill development, micro-credentials, or academic progress"))), /* @__PURE__ */ React__namespace.createElement(
912
910
  core.Autocomplete,
913
911
  {
@@ -1138,8 +1136,8 @@ const SplitButton$4 = (props) => {
1138
1136
  };
1139
1137
 
1140
1138
  var __defProp$b = Object.defineProperty;
1141
- var __defProps$8 = Object.defineProperties;
1142
- var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
1139
+ var __defProps$7 = Object.defineProperties;
1140
+ var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
1143
1141
  var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
1144
1142
  var __hasOwnProp$b = Object.prototype.hasOwnProperty;
1145
1143
  var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
@@ -1155,14 +1153,14 @@ var __spreadValues$b = (a, b) => {
1155
1153
  }
1156
1154
  return a;
1157
1155
  };
1158
- var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
1156
+ var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
1159
1157
  function Table$c(props) {
1160
- React__namespace.useMemo(() => {
1161
- return props.items.map((item) => __spreadProps$8(__spreadValues$b({}, item), {
1158
+ const preparedItems = React__namespace.useMemo(() => {
1159
+ return props.items.map((item) => __spreadProps$7(__spreadValues$b({}, item), {
1162
1160
  fullName: item.givenName && item.familyName ? `${item.givenName} ${item.familyName}`.toLowerCase() : item.email.toLowerCase()
1163
1161
  }));
1164
1162
  }, [props.items]);
1165
- const { items: sortedItems, requestSort, sortConfig } = useSortableData(props.items);
1163
+ const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);
1166
1164
  if (props.items.length === 0) {
1167
1165
  return /* @__PURE__ */ React__namespace.createElement(
1168
1166
  PlaceholderBanner,
@@ -1256,8 +1254,8 @@ function Table$c(props) {
1256
1254
  }
1257
1255
 
1258
1256
  var __defProp$a = Object.defineProperty;
1259
- var __defProps$7 = Object.defineProperties;
1260
- var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
1257
+ var __defProps$6 = Object.defineProperties;
1258
+ var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
1261
1259
  var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
1262
1260
  var __hasOwnProp$a = Object.prototype.hasOwnProperty;
1263
1261
  var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
@@ -1273,8 +1271,8 @@ var __spreadValues$a = (a, b) => {
1273
1271
  }
1274
1272
  return a;
1275
1273
  };
1276
- var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
1277
- const useStyles$m = core.createStyles((theme) => ({
1274
+ var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
1275
+ const useStyles$l = core.createStyles((theme) => ({
1278
1276
  title: {
1279
1277
  fontSize: 34,
1280
1278
  fontWeight: 900,
@@ -1307,7 +1305,7 @@ const useStyles$m = core.createStyles((theme) => ({
1307
1305
  }
1308
1306
  }));
1309
1307
  const Class = (props) => {
1310
- const { classes } = useStyles$m();
1308
+ const { classes } = useStyles$l();
1311
1309
  const form$1 = form.useForm({
1312
1310
  initialValues: {
1313
1311
  classId: "",
@@ -1339,7 +1337,7 @@ const Class = (props) => {
1339
1337
  padding: "xl",
1340
1338
  size: "xl"
1341
1339
  },
1342
- /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "md" }, /* @__PURE__ */ React__namespace.createElement(DropzoneButton$1, __spreadProps$7(__spreadValues$a({}, props), { close: () => setOpened(false) })), /* @__PURE__ */ React__namespace.createElement(core.Divider, { label: "or", labelPosition: "center", my: "md", variant: "dashed" }), /* @__PURE__ */ React__namespace.createElement("form", { onSubmit: form$1.onSubmit(() => {
1340
+ /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "md" }, /* @__PURE__ */ React__namespace.createElement(DropzoneButton$1, __spreadProps$6(__spreadValues$a({}, props), { close: () => setOpened(false) })), /* @__PURE__ */ React__namespace.createElement(core.Divider, { label: "or", labelPosition: "center", my: "md", variant: "dashed" }), /* @__PURE__ */ React__namespace.createElement("form", { onSubmit: form$1.onSubmit(() => {
1343
1341
  const values = form$1.values;
1344
1342
  form$1.reset();
1345
1343
  setOpened(false);
@@ -1408,7 +1406,7 @@ const Class = (props) => {
1408
1406
  ))))));
1409
1407
  };
1410
1408
  const DropzoneButton$1 = (props) => {
1411
- const { classes, theme } = useStyles$m();
1409
+ const { classes, theme } = useStyles$l();
1412
1410
  const openRef = React__namespace.useRef(null);
1413
1411
  const [loading, setLoading] = React__namespace.useState(false);
1414
1412
  const onDrop = React__namespace.useCallback((acceptedFiles) => {
@@ -1454,21 +1452,6 @@ const DropzoneButton$1 = (props) => {
1454
1452
  } }, "Select file"));
1455
1453
  };
1456
1454
 
1457
- const useStyles$l = core.createStyles((theme) => ({
1458
- th: { padding: "0 !important" },
1459
- control: {
1460
- width: "100%",
1461
- padding: `${theme.spacing.xs}px ${theme.spacing.md}px`,
1462
- "&:hover": {
1463
- backgroundColor: theme.colorScheme === "dark" ? theme.colors.dark[6] : theme.colors.gray[0]
1464
- }
1465
- }
1466
- }));
1467
- function Th({ children, reversed, sorted, onSort }) {
1468
- const { classes } = useStyles$l();
1469
- const Icon = sorted ? reversed ? icons.IconChevronUp : icons.IconChevronDown : icons.IconSelector;
1470
- return /* @__PURE__ */ React__namespace.createElement("th", { className: classes.th }, /* @__PURE__ */ React__namespace.createElement(core.UnstyledButton, { onClick: onSort, className: classes.control }, /* @__PURE__ */ React__namespace.createElement(core.Group, { position: "apart", noWrap: true, spacing: "xs" }, /* @__PURE__ */ React__namespace.createElement(core.Text, { weight: 500, size: "sm", sx: { whiteSpace: "nowrap" } }, children), /* @__PURE__ */ React__namespace.createElement(core.Center, null, /* @__PURE__ */ React__namespace.createElement(Icon, { size: 14, stroke: 1.5 })))));
1471
- }
1472
1455
  function Table$b(props) {
1473
1456
  const { items: sortedItems, requestSort, sortConfig } = useSortableData(props.items);
1474
1457
  if (props.items.length === 0) {
@@ -1490,24 +1473,49 @@ function Table$b(props) {
1490
1473
  confirmProps: { color: "red" },
1491
1474
  onConfirm: () => props.onDeleteClass(group)
1492
1475
  });
1493
- const rows = sortedItems.map((row) => /* @__PURE__ */ React__namespace.createElement("tr", { key: row.classId }, /* @__PURE__ */ React__namespace.createElement("td", null, /* @__PURE__ */ React__namespace.createElement(core.UnstyledButton, { component: reactRouterDom.Link, to: row.href }, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: 14 }, row.name))), /* @__PURE__ */ React__namespace.createElement("td", null, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: 14 }, row.description)), /* @__PURE__ */ React__namespace.createElement("td", null, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: 14 }, row.numberOfStudents || 0)), /* @__PURE__ */ React__namespace.createElement("td", null, /* @__PURE__ */ React__namespace.createElement(core.Group, { noWrap: true, spacing: 0, position: "right" }, /* @__PURE__ */ React__namespace.createElement(core.ActionIcon, { color: "red" }, /* @__PURE__ */ React__namespace.createElement(icons.IconTrash, { onClick: () => openDeleteModal(row), size: 16, stroke: 1.5 }))))));
1494
- return /* @__PURE__ */ React__namespace.createElement(core.ScrollArea.Autosize, { maxHeight: 600 }, /* @__PURE__ */ React__namespace.createElement(core.Table, { verticalSpacing: 20, sx: { minWidth: 700 }, highlightOnHover: true, striped: true }, /* @__PURE__ */ React__namespace.createElement("thead", null, /* @__PURE__ */ React__namespace.createElement("tr", null, /* @__PURE__ */ React__namespace.createElement(
1495
- Th,
1496
- {
1497
- sorted: sortConfig.key === "name",
1498
- reversed: sortConfig.direction === "desc",
1499
- onSort: () => requestSort("name")
1500
- },
1501
- "Class Name"
1502
- ), /* @__PURE__ */ React__namespace.createElement("th", { style: { padding: "7px 16px" } }, /* @__PURE__ */ React__namespace.createElement(core.Text, { weight: 500, size: "sm" }, "Description")), /* @__PURE__ */ React__namespace.createElement(
1503
- Th,
1476
+ const sortStatus = {
1477
+ columnAccessor: sortConfig.key,
1478
+ direction: sortConfig.direction === "desc" ? "desc" : "asc"
1479
+ };
1480
+ return /* @__PURE__ */ React__namespace.createElement(core.ScrollArea.Autosize, { maxHeight: 600 }, /* @__PURE__ */ React__namespace.createElement(
1481
+ mantineDatatable.DataTable,
1504
1482
  {
1505
- sorted: sortConfig.key === "numberOfStudents",
1506
- reversed: sortConfig.direction === "desc",
1507
- onSort: () => requestSort("numberOfStudents")
1508
- },
1509
- "# of Students"
1510
- ), /* @__PURE__ */ React__namespace.createElement("th", null))), /* @__PURE__ */ React__namespace.createElement("tbody", null, rows)));
1483
+ withBorder: false,
1484
+ borderRadius: "sm",
1485
+ verticalSpacing: "sm",
1486
+ sx: { minWidth: 700 },
1487
+ highlightOnHover: true,
1488
+ striped: true,
1489
+ records: sortedItems,
1490
+ idAccessor: "classId",
1491
+ sortStatus,
1492
+ onSortStatusChange: (status) => requestSort(status.columnAccessor),
1493
+ columns: [
1494
+ {
1495
+ accessor: "name",
1496
+ title: "Class Name",
1497
+ sortable: true,
1498
+ render: (row) => /* @__PURE__ */ React__namespace.createElement(core.UnstyledButton, { component: reactRouterDom.Link, to: row.href }, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: 14, weight: 500 }, row.name))
1499
+ },
1500
+ {
1501
+ accessor: "description",
1502
+ title: "Description",
1503
+ render: (row) => /* @__PURE__ */ React__namespace.createElement(core.Text, { size: 14 }, row.description)
1504
+ },
1505
+ {
1506
+ accessor: "numberOfStudents",
1507
+ title: "# of Students",
1508
+ sortable: true,
1509
+ render: (row) => /* @__PURE__ */ React__namespace.createElement(core.Text, { size: 14 }, row.numberOfStudents || 0)
1510
+ },
1511
+ {
1512
+ accessor: "actions",
1513
+ title: "",
1514
+ render: (row) => /* @__PURE__ */ React__namespace.createElement(core.Group, { noWrap: true, spacing: 0, position: "right" }, /* @__PURE__ */ React__namespace.createElement(core.ActionIcon, { color: "red", onClick: () => openDeleteModal(row) }, /* @__PURE__ */ React__namespace.createElement(icons.IconTrash, { size: 16, stroke: 1.5 })))
1515
+ }
1516
+ ]
1517
+ }
1518
+ ));
1511
1519
  }
1512
1520
 
1513
1521
  var __defProp$9 = Object.defineProperty;
@@ -2072,8 +2080,8 @@ function Stack$3(props) {
2072
2080
  }
2073
2081
 
2074
2082
  var __defProp$7 = Object.defineProperty;
2075
- var __defProps$6 = Object.defineProperties;
2076
- var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
2083
+ var __defProps$5 = Object.defineProperties;
2084
+ var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
2077
2085
  var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
2078
2086
  var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
2079
2087
  var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
@@ -2089,13 +2097,18 @@ var __spreadValues$7 = (a, b) => {
2089
2097
  }
2090
2098
  return a;
2091
2099
  };
2092
- var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
2100
+ var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
2093
2101
  function Table$6(props) {
2094
2102
  const preparedItems = React__namespace.useMemo(() => {
2095
- return props.items.map((item) => __spreadProps$6(__spreadValues$7({}, item), {
2103
+ return props.items.map((item) => __spreadProps$5(__spreadValues$7({}, item), {
2096
2104
  status: item.isComplete ? 2 : item.isStarted ? 1 : 0
2097
2105
  }));
2098
2106
  }, [props.items]);
2107
+ const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);
2108
+ const sortStatus = {
2109
+ columnAccessor: sortConfig.key,
2110
+ direction: sortConfig.direction === "desc" ? "desc" : "asc"
2111
+ };
2099
2112
  if (props.items.length === 0) {
2100
2113
  return /* @__PURE__ */ React__namespace.createElement(
2101
2114
  PlaceholderBanner,
@@ -2107,11 +2120,6 @@ function Table$6(props) {
2107
2120
  }
2108
2121
  );
2109
2122
  }
2110
- const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);
2111
- const sortStatus = {
2112
- columnAccessor: sortConfig.key,
2113
- direction: sortConfig.direction === "desc" ? "desc" : "asc"
2114
- };
2115
2123
  return /* @__PURE__ */ React__namespace.createElement(core.ScrollArea.Autosize, { maxHeight: 600 }, /* @__PURE__ */ React__namespace.createElement(
2116
2124
  mantineDatatable.DataTable,
2117
2125
  {
@@ -2580,8 +2588,8 @@ function Table$4(props) {
2580
2588
  }
2581
2589
 
2582
2590
  var __defProp$6 = Object.defineProperty;
2583
- var __defProps$5 = Object.defineProperties;
2584
- var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
2591
+ var __defProps$4 = Object.defineProperties;
2592
+ var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
2585
2593
  var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
2586
2594
  var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
2587
2595
  var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
@@ -2597,7 +2605,7 @@ var __spreadValues$6 = (a, b) => {
2597
2605
  }
2598
2606
  return a;
2599
2607
  };
2600
- var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
2608
+ var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
2601
2609
  const useStyles$a = core.createStyles((theme) => ({
2602
2610
  title: {
2603
2611
  fontSize: 34,
@@ -2659,7 +2667,7 @@ const People = (props) => {
2659
2667
  padding: "xl",
2660
2668
  size: "xl"
2661
2669
  },
2662
- /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "md" }, /* @__PURE__ */ React__namespace.createElement(DropzoneButton, __spreadProps$5(__spreadValues$6({}, props), { close: () => setOpened(false) })), /* @__PURE__ */ React__namespace.createElement(core.Divider, { label: "or", labelPosition: "center", my: "md", variant: "dashed" }), /* @__PURE__ */ React__namespace.createElement("form", { onSubmit: form$1.onSubmit(() => {
2670
+ /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "md" }, /* @__PURE__ */ React__namespace.createElement(DropzoneButton, __spreadProps$4(__spreadValues$6({}, props), { close: () => setOpened(false) })), /* @__PURE__ */ React__namespace.createElement(core.Divider, { label: "or", labelPosition: "center", my: "md", variant: "dashed" }), /* @__PURE__ */ React__namespace.createElement("form", { onSubmit: form$1.onSubmit(() => {
2663
2671
  const values = form$1.values;
2664
2672
  form$1.reset();
2665
2673
  setOpened(false);
@@ -2947,8 +2955,8 @@ const TrialHome = (props) => {
2947
2955
  };
2948
2956
 
2949
2957
  var __defProp$4 = Object.defineProperty;
2950
- var __defProps$4 = Object.defineProperties;
2951
- var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
2958
+ var __defProps$3 = Object.defineProperties;
2959
+ var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
2952
2960
  var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
2953
2961
  var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
2954
2962
  var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
@@ -2964,7 +2972,7 @@ var __spreadValues$4 = (a, b) => {
2964
2972
  }
2965
2973
  return a;
2966
2974
  };
2967
- var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
2975
+ var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
2968
2976
  var __objRest = (source, exclude) => {
2969
2977
  var target = {};
2970
2978
  for (var prop in source)
@@ -3022,7 +3030,7 @@ function ImageCheckbox(_a) {
3022
3030
  const { classes, cx } = useStyles$7({ checked: value });
3023
3031
  return /* @__PURE__ */ React__namespace.createElement(
3024
3032
  core.UnstyledButton,
3025
- __spreadProps$4(__spreadValues$4({}, others), {
3033
+ __spreadProps$3(__spreadValues$4({}, others), {
3026
3034
  onClick: () => handleChange(!value),
3027
3035
  className: cx(classes.button, className)
3028
3036
  }),
@@ -3043,7 +3051,7 @@ function ImageCheckbox(_a) {
3043
3051
  function SelectGrid(props) {
3044
3052
  const items = props.items.map((item) => /* @__PURE__ */ React__namespace.createElement(
3045
3053
  ImageCheckbox,
3046
- __spreadProps$4(__spreadValues$4({}, item), {
3054
+ __spreadProps$3(__spreadValues$4({}, item), {
3047
3055
  key: item.title,
3048
3056
  onChange: (checked) => props.onChange(item.title, checked)
3049
3057
  })
@@ -3062,8 +3070,8 @@ function SelectGrid(props) {
3062
3070
  }
3063
3071
 
3064
3072
  var __defProp$3 = Object.defineProperty;
3065
- var __defProps$3 = Object.defineProperties;
3066
- var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
3073
+ var __defProps$2 = Object.defineProperties;
3074
+ var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
3067
3075
  var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
3068
3076
  var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
3069
3077
  var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
@@ -3079,7 +3087,7 @@ var __spreadValues$3 = (a, b) => {
3079
3087
  }
3080
3088
  return a;
3081
3089
  };
3082
- var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
3090
+ var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
3083
3091
  const useStyles$6 = core.createStyles((theme) => ({
3084
3092
  wrapper: {
3085
3093
  minHeight: "100%",
@@ -3189,7 +3197,7 @@ const TrialRegistration = (props) => {
3189
3197
  label: "School/Organization Name",
3190
3198
  placeholder: "What's the name of your school?",
3191
3199
  data: props.organizations.map((o) => {
3192
- return __spreadProps$3(__spreadValues$3({}, o), { value: o.displayName });
3200
+ return __spreadProps$2(__spreadValues$3({}, o), { value: o.displayName });
3193
3201
  }),
3194
3202
  onItemSubmit: (item) => setOrganization({ organizationId: item.organizationId, displayName: item.displayName }),
3195
3203
  onChange: (next) => {
@@ -3201,7 +3209,7 @@ const TrialRegistration = (props) => {
3201
3209
  SelectGrid,
3202
3210
  {
3203
3211
  items: OPTIONS,
3204
- onChange: (e, checked) => setInterests(__spreadProps$3(__spreadValues$3({}, interests), { [e]: checked }))
3212
+ onChange: (e, checked) => setInterests(__spreadProps$2(__spreadValues$3({}, interests), { [e]: checked }))
3205
3213
  }
3206
3214
  ), /* @__PURE__ */ React__namespace.createElement(core.Group, { position: "right", mt: "md" }, /* @__PURE__ */ React__namespace.createElement(
3207
3215
  core.Button,
@@ -3240,8 +3248,8 @@ const AdminProvider = (props) => {
3240
3248
  };
3241
3249
 
3242
3250
  var __defProp$2 = Object.defineProperty;
3243
- var __defProps$2 = Object.defineProperties;
3244
- var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
3251
+ var __defProps$1 = Object.defineProperties;
3252
+ var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
3245
3253
  var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
3246
3254
  var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
3247
3255
  var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
@@ -3257,7 +3265,7 @@ var __spreadValues$2 = (a, b) => {
3257
3265
  }
3258
3266
  return a;
3259
3267
  };
3260
- var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
3268
+ var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
3261
3269
  const useStyles$5 = core.createStyles((theme, props) => ({
3262
3270
  footer: {
3263
3271
  paddingTop: theme.spacing.md,
@@ -3353,7 +3361,7 @@ const App = (props) => {
3353
3361
  padding: "xs",
3354
3362
  navbar: props.navbar && /* @__PURE__ */ React__namespace.createElement(
3355
3363
  Navbar,
3356
- __spreadProps$2(__spreadValues$2({}, props.navbar.props), {
3364
+ __spreadProps$1(__spreadValues$2({}, props.navbar.props), {
3357
3365
  onSwitchAccounts: account.accounts && account.accounts.length > 1 ? () => account.setChangeModalOpen(true) : void 0
3358
3366
  })
3359
3367
  ),
@@ -3547,8 +3555,6 @@ function Stack$1(props) {
3547
3555
  }
3548
3556
 
3549
3557
  var __defProp$1 = Object.defineProperty;
3550
- var __defProps$1 = Object.defineProperties;
3551
- var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
3552
3558
  var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
3553
3559
  var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
3554
3560
  var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
@@ -3564,37 +3570,12 @@ var __spreadValues$1 = (a, b) => {
3564
3570
  }
3565
3571
  return a;
3566
3572
  };
3567
- var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
3568
3573
  function Table$2(props) {
3569
3574
  const preparedItems = React__namespace.useMemo(() => {
3570
- var _a, _b;
3571
- console.group("Pathway Table Data Check");
3572
- console.log("Raw items from props:", props);
3573
- console.log("Raw items from prop.itemss:", props.items);
3574
- console.log("Categories available:", props.categories);
3575
- const mapped = props.items.map((item) => {
3576
- const flatItem = __spreadProps$1(__spreadValues$1({}, item), {
3577
- status: item.isComplete ? 1 : 0
3578
- });
3579
- if (item.categoryPoints) {
3580
- Object.keys(item.categoryPoints).forEach((catId) => {
3581
- flatItem[catId] = item.categoryPoints[catId];
3582
- });
3583
- }
3584
- return flatItem;
3585
- });
3586
- console.log("Transformed items (Flat):", mapped);
3587
- const firstCatId = (_b = (_a = props.categories) == null ? void 0 : _a[0]) == null ? void 0 : _b.categoryId;
3588
- if (mapped.length > 0 && firstCatId) {
3589
- console.log(`Matching Check for ID [${firstCatId}]:`, mapped[0][firstCatId] !== void 0 ? "\u2705 FOUND" : "\u274C MISSING");
3590
- console.groupEnd();
3591
- } else if (props.categories) {
3592
- console.groupEnd();
3593
- }
3594
- return mapped;
3595
- }, [props.items, props.categories]);
3575
+ return (props.items || []).map((item) => __spreadValues$1(__spreadValues$1({}, item), item.categoryPoints));
3576
+ }, [props.items]);
3596
3577
  const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);
3597
- if (props.items.length === 0) {
3578
+ if (props.loading && props.items.length === 0) {
3598
3579
  return /* @__PURE__ */ React__namespace.createElement(
3599
3580
  PlaceholderBanner,
3600
3581
  {
@@ -3632,7 +3613,7 @@ function Table$2(props) {
3632
3613
  render: (row) => /* @__PURE__ */ React__namespace.createElement(core.Group, { spacing: "sm", noWrap: true }, /* @__PURE__ */ React__namespace.createElement(core.Avatar, { size: 40, src: row.avatar, radius: 40 }), /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", weight: 500 }, row.name), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "xs", color: "dimmed" }, row.email)))
3633
3614
  },
3634
3615
  {
3635
- accessor: "status",
3616
+ accessor: "isComplete",
3636
3617
  title: "Status",
3637
3618
  sortable: true,
3638
3619
  titleStyle: { whiteSpace: "nowrap" },
@@ -3677,6 +3658,8 @@ function Table$1(props) {
3677
3658
  mantineDatatable.DataTable,
3678
3659
  {
3679
3660
  verticalSpacing: "sm",
3661
+ withBorder: false,
3662
+ borderRadius: "sm",
3680
3663
  sx: { minWidth: 700 },
3681
3664
  highlightOnHover: true,
3682
3665
  striped: true,
@@ -3689,7 +3672,23 @@ function Table$1(props) {
3689
3672
  accessor: "badgeName",
3690
3673
  title: "Badge Name",
3691
3674
  sortable: true,
3692
- render: (row) => /* @__PURE__ */ React__namespace.createElement(core.Text, { component: reactRouterDom.Link, to: row.href, color: "blue" }, row.badgeName)
3675
+ render: (row) => /* @__PURE__ */ React__namespace.createElement(
3676
+ core.Text,
3677
+ {
3678
+ component: reactRouterDom.Link,
3679
+ to: row.href,
3680
+ sx: (theme) => ({
3681
+ color: theme.colorScheme === "dark" ? theme.white : theme.black,
3682
+ textDecoration: "none",
3683
+ fontWeight: 500,
3684
+ "&:hover": {
3685
+ textDecoration: "underline",
3686
+ color: theme.colors.blue[6]
3687
+ }
3688
+ })
3689
+ },
3690
+ row.badgeName
3691
+ )
3693
3692
  },
3694
3693
  {
3695
3694
  accessor: "percentageCompletion",