@local-civics/mgmt-ui 0.1.95 → 0.1.97

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.d.ts CHANGED
@@ -18,6 +18,7 @@ interface NavbarProps {
18
18
  trial?: boolean;
19
19
  loading?: boolean;
20
20
  onLogout: () => void;
21
+ onGettingStarted: () => void;
21
22
  onSwitchAccounts?: () => void;
22
23
  }
23
24
  declare function Navbar(props: NavbarProps): JSX.Element;
@@ -582,13 +583,14 @@ declare const StartAnonymousLesson: (props: StartAnonymousLessonProps) => JSX.El
582
583
  */
583
584
  type BadgeGridProps = {
584
585
  badges: TaskCardProps[];
586
+ onAssign: (taskId: string) => void;
585
587
  };
586
588
  type TaskCardProps = {
589
+ taskId: string;
587
590
  title: string;
588
591
  description: string;
589
- lessonsCompleted: number;
590
- lessonsTotal: number;
591
592
  href: string;
593
+ onAssign: (taskId: string) => void;
592
594
  };
593
595
 
594
596
  /**
@@ -597,6 +599,7 @@ type TaskCardProps = {
597
599
  type TrialHomeProps = BadgeGridProps & {
598
600
  loading: boolean;
599
601
  name: string;
602
+ firstName: string;
600
603
  daysRemaining: number;
601
604
  upgradeHref: string;
602
605
  };
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$o = core.createStyles((theme) => ({
65
+ const useStyles$p = core.createStyles((theme) => ({
66
66
  user: {
67
67
  display: "block",
68
68
  width: "100%",
@@ -73,7 +73,7 @@ const useStyles$o = 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$o();
76
+ const { classes } = useStyles$p();
77
77
  return /* @__PURE__ */ React__namespace.createElement(core.Group, __spreadValues$9({ 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$n = core.createStyles((theme, _params, getRef) => {
87
+ const useStyles$o = core.createStyles((theme, _params, getRef) => {
88
88
  const icon = getRef("icon");
89
89
  return {
90
90
  control: {
@@ -137,7 +137,7 @@ const useStyles$n = 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$n();
140
+ const { classes, theme, cx } = useStyles$o();
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);
@@ -201,7 +201,7 @@ var __spreadValues$8 = (a, b) => {
201
201
  return a;
202
202
  };
203
203
  var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
204
- const useStyles$m = core.createStyles((theme, _params, getRef) => {
204
+ const useStyles$n = core.createStyles((theme, _params, getRef) => {
205
205
  const icon = getRef("icon");
206
206
  return {
207
207
  navbar: {
@@ -300,7 +300,7 @@ const TRIAL_PAGES = [
300
300
  "Badges"
301
301
  ];
302
302
  function Navbar(props) {
303
- const { classes, cx } = useStyles$m();
303
+ const { classes, cx } = useStyles$n();
304
304
  const [burgerOpen, setBurgerOpen] = React__namespace.useState(false);
305
305
  const toggle = () => setBurgerOpen(!burgerOpen);
306
306
  const links = data.map((item) => {
@@ -331,7 +331,10 @@ function Navbar(props) {
331
331
  name: props.name,
332
332
  email: props.email
333
333
  }
334
- ), /* @__PURE__ */ React__namespace.createElement(core.Navbar.Section, { grow: true, className: classes.links, component: core.ScrollArea }, /* @__PURE__ */ React__namespace.createElement("div", { className: classes.linksInner }, links)), !props.loading && /* @__PURE__ */ React__namespace.createElement(core.Navbar.Section, { className: classes.footer }, !!props.onSwitchAccounts && /* @__PURE__ */ React__namespace.createElement("a", { href: "#", className: classes.link, onClick: (event) => {
334
+ ), /* @__PURE__ */ React__namespace.createElement(core.Navbar.Section, { grow: true, className: classes.links, component: core.ScrollArea }, /* @__PURE__ */ React__namespace.createElement("div", { className: classes.linksInner }, links)), !props.loading && /* @__PURE__ */ React__namespace.createElement(core.Navbar.Section, { className: classes.footer }, props.trial && /* @__PURE__ */ React__namespace.createElement("a", { href: "#", className: classes.link, onClick: (event) => {
335
+ event.preventDefault();
336
+ props.onGettingStarted();
337
+ } }, /* @__PURE__ */ React__namespace.createElement(icons.IconVideo, { className: classes.linkIcon, stroke: 1.5 }), /* @__PURE__ */ React__namespace.createElement("span", null, "Getting started")), !!props.onSwitchAccounts && /* @__PURE__ */ React__namespace.createElement("a", { href: "#", className: classes.link, onClick: (event) => {
335
338
  event.preventDefault();
336
339
  props.onSwitchAccounts && props.onSwitchAccounts();
337
340
  } }, /* @__PURE__ */ React__namespace.createElement(icons.IconSwitchHorizontal, { className: classes.linkIcon, stroke: 1.5 }), /* @__PURE__ */ React__namespace.createElement("span", null, "Change account")), /* @__PURE__ */ React__namespace.createElement("a", { href: "#", className: classes.link, onClick: (event) => {
@@ -340,7 +343,7 @@ function Navbar(props) {
340
343
  } }, /* @__PURE__ */ React__namespace.createElement(icons.IconLogout, { className: classes.linkIcon, stroke: 1.5 }), /* @__PURE__ */ React__namespace.createElement("span", null, "Logout"))))));
341
344
  }
342
345
 
343
- const useStyles$l = core.createStyles((theme) => ({
346
+ const useStyles$m = core.createStyles((theme) => ({
344
347
  title: {
345
348
  fontSize: 34,
346
349
  fontWeight: 900,
@@ -381,7 +384,7 @@ const useStyles$l = core.createStyles((theme) => ({
381
384
  }
382
385
  }));
383
386
  const SwitchAccount = (props) => {
384
- const { classes, theme } = useStyles$l();
387
+ const { classes, theme } = useStyles$m();
385
388
  const options = props.accounts.map((a) => {
386
389
  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")));
387
390
  });
@@ -398,7 +401,7 @@ const SwitchAccount = (props) => {
398
401
  );
399
402
  };
400
403
 
401
- const useStyles$k = core.createStyles((theme) => ({
404
+ const useStyles$l = core.createStyles((theme) => ({
402
405
  root: {
403
406
  display: "flex",
404
407
  backgroundImage: `linear-gradient(-60deg, ${theme.colors[theme.primaryColor][4]} 0%, ${theme.colors[theme.primaryColor][7]} 100%)`,
@@ -442,7 +445,7 @@ const useStyles$k = core.createStyles((theme) => ({
442
445
  }
443
446
  }));
444
447
  const StatsGroup = ({ data, footer }) => {
445
- const { classes } = useStyles$k();
448
+ const { classes } = useStyles$l();
446
449
  const stats = data.map((stat) => {
447
450
  const value = (() => {
448
451
  if (stat.unit === "%") {
@@ -461,7 +464,7 @@ const Tabs = (props) => {
461
464
  return /* @__PURE__ */ React__namespace.createElement(core.Tabs, { value: props.value, onTabChange: props.onChange }, /* @__PURE__ */ React__namespace.createElement(core.Tabs.List, null, tabs));
462
465
  };
463
466
 
464
- const useStyles$j = core.createStyles((theme) => ({
467
+ const useStyles$k = core.createStyles((theme) => ({
465
468
  button: {
466
469
  borderTopRightRadius: 0,
467
470
  borderBottomRightRadius: 0,
@@ -476,7 +479,7 @@ const useStyles$j = core.createStyles((theme) => ({
476
479
  }
477
480
  }));
478
481
  const SplitButton$3 = (props) => {
479
- const { classes, theme } = useStyles$j();
482
+ const { classes, theme } = useStyles$k();
480
483
  const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === "dark" ? 5 : 6];
481
484
  return /* @__PURE__ */ React__namespace.createElement(core.Group, { noWrap: true, spacing: 0 }, /* @__PURE__ */ React__namespace.createElement(
482
485
  core.Button,
@@ -513,7 +516,7 @@ const SplitButton$3 = (props) => {
513
516
  ))));
514
517
  };
515
518
 
516
- const useStyles$i = core.createStyles((theme) => ({
519
+ const useStyles$j = core.createStyles((theme) => ({
517
520
  wrapper: {
518
521
  display: "flex",
519
522
  alignItems: "center",
@@ -564,7 +567,7 @@ const useStyles$i = core.createStyles((theme) => ({
564
567
  }
565
568
  }));
566
569
  const PlaceholderBanner = (props) => {
567
- const { classes } = useStyles$i();
570
+ const { classes } = useStyles$j();
568
571
  const title = props.title || "Nothing to display";
569
572
  const description = props.description || "We don't have anything to show you here just yet. Add data, check back later, or adjust your search.";
570
573
  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 }));
@@ -636,7 +639,7 @@ function Table$f(props) {
636
639
  return /* @__PURE__ */ React__namespace.createElement(core.ScrollArea.Autosize, { maxHeight: 600 }, /* @__PURE__ */ React__namespace.createElement(core.Table, { verticalSpacing: "sm", sx: { minWidth: 700 }, highlightOnHover: true, striped: true }, /* @__PURE__ */ React__namespace.createElement("thead", null, /* @__PURE__ */ React__namespace.createElement("tr", null, /* @__PURE__ */ React__namespace.createElement("th", null, "Lesson Name"), /* @__PURE__ */ React__namespace.createElement("th", null, "Lesson Completion"))), /* @__PURE__ */ React__namespace.createElement("tbody", null, rows)));
637
640
  }
638
641
 
639
- const useStyles$h = core.createStyles((theme) => ({
642
+ const useStyles$i = core.createStyles((theme) => ({
640
643
  title: {
641
644
  fontSize: 34,
642
645
  fontWeight: 900,
@@ -649,7 +652,7 @@ const useStyles$h = core.createStyles((theme) => ({
649
652
  }
650
653
  }));
651
654
  const Badge = (props) => {
652
- const { classes } = useStyles$h();
655
+ const { classes } = useStyles$i();
653
656
  const [tab, setTab] = React.useState("lessons");
654
657
  const numberOfStudents = props.students.length;
655
658
  const percentageOfBadgesEarned = numberOfStudents > 0 ? props.students.filter((u) => u.isComplete).length / numberOfStudents : 0;
@@ -746,7 +749,7 @@ function Table$e(props) {
746
749
  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)));
747
750
  }
748
751
 
749
- const useStyles$g = core.createStyles((theme) => ({
752
+ const useStyles$h = core.createStyles((theme) => ({
750
753
  title: {
751
754
  fontSize: 34,
752
755
  fontWeight: 900,
@@ -759,7 +762,7 @@ const useStyles$g = core.createStyles((theme) => ({
759
762
  }
760
763
  }));
761
764
  const Badges = (props) => {
762
- const { classes } = useStyles$g();
765
+ const { classes } = useStyles$h();
763
766
  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" }, "Project-sized skills acquisition and standards alignment."))), /* @__PURE__ */ React__namespace.createElement(
764
767
  core.Autocomplete,
765
768
  {
@@ -1033,7 +1036,7 @@ var __spreadValues$7 = (a, b) => {
1033
1036
  return a;
1034
1037
  };
1035
1038
  var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
1036
- const useStyles$f = core.createStyles((theme) => ({
1039
+ const useStyles$g = core.createStyles((theme) => ({
1037
1040
  title: {
1038
1041
  fontSize: 34,
1039
1042
  fontWeight: 900,
@@ -1066,7 +1069,7 @@ const useStyles$f = core.createStyles((theme) => ({
1066
1069
  }
1067
1070
  }));
1068
1071
  const Class = (props) => {
1069
- const { classes } = useStyles$f();
1072
+ const { classes } = useStyles$g();
1070
1073
  const form$1 = form.useForm({
1071
1074
  initialValues: {
1072
1075
  classId: "",
@@ -1166,7 +1169,7 @@ const Class = (props) => {
1166
1169
  ))))));
1167
1170
  };
1168
1171
  const DropzoneButton$1 = (props) => {
1169
- const { classes, theme } = useStyles$f();
1172
+ const { classes, theme } = useStyles$g();
1170
1173
  const openRef = React__namespace.useRef(null);
1171
1174
  const [loading, setLoading] = React__namespace.useState(false);
1172
1175
  const onDrop = React__namespace.useCallback((acceptedFiles) => {
@@ -1252,7 +1255,7 @@ var __spreadValues$6 = (a, b) => {
1252
1255
  }
1253
1256
  return a;
1254
1257
  };
1255
- const useStyles$e = core.createStyles((theme) => ({
1258
+ const useStyles$f = core.createStyles((theme) => ({
1256
1259
  title: {
1257
1260
  fontSize: 34,
1258
1261
  fontWeight: 900,
@@ -1265,7 +1268,7 @@ const useStyles$e = core.createStyles((theme) => ({
1265
1268
  }
1266
1269
  }));
1267
1270
  const Classes = (props) => {
1268
- const { classes } = useStyles$e();
1271
+ const { classes } = useStyles$f();
1269
1272
  const form$1 = form.useForm({
1270
1273
  initialValues: {
1271
1274
  classId: "",
@@ -1336,7 +1339,7 @@ const Classes = (props) => {
1336
1339
  ))))));
1337
1340
  };
1338
1341
 
1339
- const useStyles$d = core.createStyles((theme) => ({
1342
+ const useStyles$e = core.createStyles((theme) => ({
1340
1343
  title: {
1341
1344
  fontSize: 34,
1342
1345
  fontWeight: 900,
@@ -1350,7 +1353,7 @@ const useStyles$d = core.createStyles((theme) => ({
1350
1353
  }
1351
1354
  }));
1352
1355
  const UserInfo = (props) => {
1353
- const { classes } = useStyles$d();
1356
+ const { classes } = useStyles$e();
1354
1357
  return /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__PURE__ */ React__namespace.createElement(core.Title, { className: classes.title }, props.name), /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", className: classes.description, mt: "xs" }, props.impactStatement));
1355
1358
  };
1356
1359
 
@@ -1488,7 +1491,7 @@ const Student = (props) => {
1488
1491
  ))))));
1489
1492
  };
1490
1493
 
1491
- const useStyles$c = core.createStyles((theme, props) => {
1494
+ const useStyles$d = core.createStyles((theme, props) => {
1492
1495
  const from = props.from || "blue";
1493
1496
  const to = props.to || "green";
1494
1497
  return {
@@ -1516,7 +1519,7 @@ const useStyles$c = core.createStyles((theme, props) => {
1516
1519
  };
1517
1520
  });
1518
1521
  function CardGradient(props) {
1519
- const { classes } = useStyles$c(props);
1522
+ const { classes } = useStyles$d(props);
1520
1523
  const from = props.from || "blue";
1521
1524
  const to = props.to || "green";
1522
1525
  const icon = props.icon || /* @__PURE__ */ React__namespace.createElement(icons.IconColorSwatch, { size: 28, stroke: 1.5 });
@@ -1560,7 +1563,7 @@ var __objRest$1 = (source, exclude) => {
1560
1563
  }
1561
1564
  return target;
1562
1565
  };
1563
- const useStyles$b = core.createStyles((theme) => ({
1566
+ const useStyles$c = core.createStyles((theme) => ({
1564
1567
  card: {
1565
1568
  height: 240,
1566
1569
  backgroundSize: "cover",
@@ -1576,11 +1579,6 @@ const useStyles$b = core.createStyles((theme) => ({
1576
1579
  right: 0,
1577
1580
  left: 0
1578
1581
  },
1579
- action: {
1580
- position: "absolute",
1581
- bottom: theme.spacing.xl,
1582
- right: theme.spacing.xl
1583
- },
1584
1582
  title: {
1585
1583
  color: theme.white,
1586
1584
  marginBottom: theme.spacing.xs / 2
@@ -1595,18 +1593,16 @@ const TenantBanner = (_a) => {
1595
1593
  title,
1596
1594
  description,
1597
1595
  image,
1598
- action,
1599
1596
  style,
1600
1597
  className
1601
1598
  } = _b, others = __objRest$1(_b, [
1602
1599
  "title",
1603
1600
  "description",
1604
1601
  "image",
1605
- "action",
1606
1602
  "style",
1607
1603
  "className"
1608
1604
  ]);
1609
- const { classes, cx, theme } = useStyles$b();
1605
+ const { classes, cx, theme } = useStyles$c();
1610
1606
  return /* @__PURE__ */ React__namespace.createElement(
1611
1607
  core.Card,
1612
1608
  __spreadValues$5({
@@ -1617,24 +1613,12 @@ const TenantBanner = (_a) => {
1617
1613
  /* @__PURE__ */ React__namespace.createElement(
1618
1614
  core.Overlay,
1619
1615
  {
1620
- gradient: `linear-gradient(105deg, ${theme.black} 20%, #312f2f 50%, ${theme.colors.gray[4]} 100%)`,
1616
+ gradient: `linear-gradient(105deg, ${theme.black} 20%, #312f2f 50%, ${theme.colors.gray[6]} 100%)`,
1621
1617
  opacity: 0.55,
1622
1618
  zIndex: 0
1623
1619
  }
1624
1620
  ),
1625
- /* @__PURE__ */ React__namespace.createElement("div", { className: classes.content }, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "lg", weight: 700, className: classes.title }, title), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", className: classes.description }, description), /* @__PURE__ */ React__namespace.createElement(
1626
- core.Button,
1627
- {
1628
- className: classes.action,
1629
- variant: "white",
1630
- color: "dark",
1631
- component: "a",
1632
- size: "xs",
1633
- href: action.link,
1634
- target: "_blank"
1635
- },
1636
- action.label
1637
- ))
1621
+ /* @__PURE__ */ React__namespace.createElement("div", { className: classes.content }, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "lg", weight: 700, className: classes.title }, title), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", className: classes.description }, description))
1638
1622
  );
1639
1623
  };
1640
1624
 
@@ -1651,11 +1635,7 @@ const Home = (props) => {
1651
1635
  {
1652
1636
  title: props.organization.name,
1653
1637
  description: props.organization.description,
1654
- image: props.organization.image,
1655
- action: {
1656
- label: "Visit website",
1657
- link: props.organization.website
1658
- }
1638
+ image: props.organization.image
1659
1639
  }
1660
1640
  ))), /* @__PURE__ */ React__namespace.createElement(core.Grid, { gutter: "md" }, /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, null, /* @__PURE__ */ React__namespace.createElement(
1661
1641
  CardGradient,
@@ -1704,7 +1684,7 @@ function Table$3(props) {
1704
1684
  return /* @__PURE__ */ React__namespace.createElement(core.ScrollArea.Autosize, { maxHeight: 600 }, /* @__PURE__ */ React__namespace.createElement(core.Table, { verticalSpacing: "sm", sx: { minWidth: 700 }, highlightOnHover: true, striped: true }, /* @__PURE__ */ React__namespace.createElement("thead", null, /* @__PURE__ */ React__namespace.createElement("tr", null, /* @__PURE__ */ React__namespace.createElement("th", null, "Student Name"), /* @__PURE__ */ React__namespace.createElement("th", null, "Reflection"), /* @__PURE__ */ React__namespace.createElement("th", null, "Rating"))), /* @__PURE__ */ React__namespace.createElement("tbody", null, rows)));
1705
1685
  }
1706
1686
 
1707
- const useStyles$a = core.createStyles((theme) => ({
1687
+ const useStyles$b = core.createStyles((theme) => ({
1708
1688
  button: {
1709
1689
  borderTopRightRadius: 0,
1710
1690
  borderBottomRightRadius: 0,
@@ -1719,7 +1699,7 @@ const useStyles$a = core.createStyles((theme) => ({
1719
1699
  }
1720
1700
  }));
1721
1701
  const SplitButton$1 = (props) => {
1722
- const { classes, theme } = useStyles$a();
1702
+ const { classes, theme } = useStyles$b();
1723
1703
  const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === "dark" ? 5 : 6];
1724
1704
  return /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "sm" }, /* @__PURE__ */ React__namespace.createElement(
1725
1705
  core.Button,
@@ -1872,7 +1852,7 @@ function Stack(props) {
1872
1852
  }
1873
1853
  const truncateWithEllipses = (text, max) => text.substr(0, max - 1) + (text.length > max ? "…" : "");
1874
1854
 
1875
- const useStyles$9 = core.createStyles((theme) => ({
1855
+ const useStyles$a = core.createStyles((theme) => ({
1876
1856
  title: {
1877
1857
  fontSize: 34,
1878
1858
  fontWeight: 900,
@@ -1885,7 +1865,7 @@ const useStyles$9 = core.createStyles((theme) => ({
1885
1865
  }
1886
1866
  }));
1887
1867
  const Lesson = (props) => {
1888
- const { classes } = useStyles$9();
1868
+ const { classes } = useStyles$a();
1889
1869
  const [tab, setTab] = React.useState("question");
1890
1870
  const numberOfStudents = props.students.length;
1891
1871
  const percentageOfLessonsCompleted = numberOfStudents > 0 ? props.students.filter((u) => u.isComplete).length / numberOfStudents : 0;
@@ -2028,7 +2008,7 @@ function Table$1(props) {
2028
2008
  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)));
2029
2009
  }
2030
2010
 
2031
- const useStyles$8 = core.createStyles((theme) => ({
2011
+ const useStyles$9 = core.createStyles((theme) => ({
2032
2012
  title: {
2033
2013
  fontSize: 34,
2034
2014
  fontWeight: 900,
@@ -2041,7 +2021,7 @@ const useStyles$8 = core.createStyles((theme) => ({
2041
2021
  }
2042
2022
  }));
2043
2023
  const Lessons = (props) => {
2044
- const { classes } = useStyles$8();
2024
+ const { classes } = useStyles$9();
2045
2025
  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" }, "Lessons"), /* @__PURE__ */ React__namespace.createElement(core.Title, { order: 2, className: classes.title, mt: "md" }, "Lessons"), /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", className: classes.description, mt: "sm" }, "Explore units of instruction and/or see corresponding class progress."))), /* @__PURE__ */ React__namespace.createElement(
2046
2026
  core.Autocomplete,
2047
2027
  {
@@ -2058,7 +2038,7 @@ const Lessons = (props) => {
2058
2038
  ))));
2059
2039
  };
2060
2040
 
2061
- const useStyles$7 = core.createStyles((theme) => ({
2041
+ const useStyles$8 = core.createStyles((theme) => ({
2062
2042
  title: {
2063
2043
  fontSize: 22,
2064
2044
  fontWeight: 900,
@@ -2077,7 +2057,7 @@ const useStyles$7 = core.createStyles((theme) => ({
2077
2057
  }
2078
2058
  }));
2079
2059
  function AccessCode(props) {
2080
- const { classes } = useStyles$7();
2060
+ const { classes } = useStyles$8();
2081
2061
  return /* @__PURE__ */ React__namespace.createElement(core.Container, { mx: "0", px: "0", size: 460, my: 30 }, /* @__PURE__ */ React__namespace.createElement(core.Title, { className: classes.title }, "Access code"), /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", size: "sm" }, "Grant access to join your organization"), /* @__PURE__ */ React__namespace.createElement(core.Paper, { withBorder: true, shadow: "md", p: 30, radius: "md", mt: "xl" }, /* @__PURE__ */ React__namespace.createElement(core.TextInput, { value: props.value, readOnly: true }), /* @__PURE__ */ React__namespace.createElement(core.Group, { position: "apart", mt: "lg", className: classes.controls }, /* @__PURE__ */ React__namespace.createElement(
2082
2062
  core.Anchor,
2083
2063
  {
@@ -2105,7 +2085,7 @@ const monthNames = [
2105
2085
  "November",
2106
2086
  "December"
2107
2087
  ];
2108
- const useStyles$6 = core.createStyles((theme) => ({
2088
+ const useStyles$7 = core.createStyles((theme) => ({
2109
2089
  title: {
2110
2090
  fontSize: 34,
2111
2091
  fontWeight: 900,
@@ -2135,7 +2115,7 @@ const useStyles$6 = core.createStyles((theme) => ({
2135
2115
  }
2136
2116
  }));
2137
2117
  const Organization = (props) => {
2138
- const { classes } = useStyles$6();
2118
+ const { classes } = useStyles$7();
2139
2119
  return /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__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.UnstyledButton, { onClick: props.onBackClick }, /* @__PURE__ */ React__namespace.createElement(
2140
2120
  core.Badge,
2141
2121
  {
@@ -2161,7 +2141,7 @@ const Organization = (props) => {
2161
2141
  ] }))))));
2162
2142
  };
2163
2143
 
2164
- const useStyles$5 = core.createStyles((theme) => ({
2144
+ const useStyles$6 = core.createStyles((theme) => ({
2165
2145
  button: {
2166
2146
  borderTopRightRadius: 0,
2167
2147
  borderBottomRightRadius: 0,
@@ -2176,7 +2156,7 @@ const useStyles$5 = core.createStyles((theme) => ({
2176
2156
  }
2177
2157
  }));
2178
2158
  const SplitButton = (props) => {
2179
- const { classes, theme } = useStyles$5();
2159
+ const { classes, theme } = useStyles$6();
2180
2160
  const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === "dark" ? 5 : 6];
2181
2161
  const hasMenu = !!props.withOrganizationLink;
2182
2162
  return /* @__PURE__ */ React__namespace.createElement(core.Group, { noWrap: true, spacing: 0 }, /* @__PURE__ */ React__namespace.createElement(
@@ -2257,7 +2237,7 @@ var __spreadValues$4 = (a, b) => {
2257
2237
  return a;
2258
2238
  };
2259
2239
  var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
2260
- const useStyles$4 = core.createStyles((theme) => ({
2240
+ const useStyles$5 = core.createStyles((theme) => ({
2261
2241
  title: {
2262
2242
  fontSize: 34,
2263
2243
  fontWeight: 900,
@@ -2287,7 +2267,7 @@ const useStyles$4 = core.createStyles((theme) => ({
2287
2267
  }
2288
2268
  }));
2289
2269
  const People = (props) => {
2290
- const { classes } = useStyles$4();
2270
+ const { classes } = useStyles$5();
2291
2271
  const form$1 = form.useForm({
2292
2272
  initialValues: {
2293
2273
  userId: "",
@@ -2391,7 +2371,7 @@ const People = (props) => {
2391
2371
  ))))));
2392
2372
  };
2393
2373
  const DropzoneButton = (props) => {
2394
- const { classes, theme } = useStyles$4();
2374
+ const { classes, theme } = useStyles$5();
2395
2375
  const openRef = React__namespace.useRef(null);
2396
2376
  const [loading, setLoading] = React__namespace.useState(false);
2397
2377
  const onDrop = React__namespace.useCallback((acceptedFiles) => {
@@ -2437,7 +2417,7 @@ const DropzoneButton = (props) => {
2437
2417
  } }, "Select file"));
2438
2418
  };
2439
2419
 
2440
- const useStyles$3 = core.createStyles((theme) => ({
2420
+ const useStyles$4 = core.createStyles((theme) => ({
2441
2421
  form: {
2442
2422
  backgroundColor: theme.white,
2443
2423
  padding: theme.spacing.xl,
@@ -2500,7 +2480,7 @@ const useStyles$3 = core.createStyles((theme) => ({
2500
2480
  }
2501
2481
  }));
2502
2482
  const StartAnonymousLesson = (props) => {
2503
- const { classes } = useStyles$3();
2483
+ const { classes } = useStyles$4();
2504
2484
  const [name, setName] = React__namespace.useState("");
2505
2485
  return /* @__PURE__ */ React__namespace.createElement("div", { className: classes.wrapper }, /* @__PURE__ */ React__namespace.createElement(core.Container, null, /* @__PURE__ */ React__namespace.createElement(core.SimpleGrid, { maw: 960, cols: 2, spacing: 15, breakpoints: [{ maxWidth: "sm", cols: 1 }] }, /* @__PURE__ */ React__namespace.createElement("div", { className: classes.content }, /* @__PURE__ */ React__namespace.createElement(core.Badge, { color: "violet" }, "Community"), /* @__PURE__ */ React__namespace.createElement(core.Title, { className: classes.title }, props.title), /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", mt: "md" }, props.description), /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", mt: "md" }, "Instructed by ", props.educatorName, ".")), /* @__PURE__ */ React__namespace.createElement("div", { className: classes.form }, /* @__PURE__ */ React__namespace.createElement(
2506
2486
  core.TextInput,
@@ -2534,23 +2514,52 @@ var __spreadValues$3 = (a, b) => {
2534
2514
  };
2535
2515
  const BadgeGrid = (props) => {
2536
2516
  const badges = props.badges.map((b) => /* @__PURE__ */ React__namespace.createElement(TaskCard, __spreadValues$3({ key: b.title }, b)));
2537
- return /* @__PURE__ */ React__namespace.createElement(core.SimpleGrid, { cols: 3, breakpoints: [{ maxWidth: "sm", cols: 1 }] }, badges);
2517
+ return /* @__PURE__ */ React__namespace.createElement(core.SimpleGrid, { cols: 4, breakpoints: [{ maxWidth: "sm", cols: 1 }, { maxWidth: "md", cols: 3 }] }, badges);
2538
2518
  };
2539
2519
  function TaskCard(props) {
2540
- const isComplete = props.lessonsCompleted >= props.lessonsTotal;
2541
- return /* @__PURE__ */ React__namespace.createElement(core.Card, { withBorder: true, radius: "md" }, /* @__PURE__ */ React__namespace.createElement(core.Group, { position: "apart", mb: 20 }, /* @__PURE__ */ React__namespace.createElement(core.ThemeIcon, { size: "lg", variant: "gradient", gradient: { from: "indigo", to: "cyan" } }, /* @__PURE__ */ React__namespace.createElement(icons.IconBadge, { size: 20 })), !!props.lessonsTotal && isComplete && /* @__PURE__ */ React__namespace.createElement(core.Badge, { variant: "gradient", gradient: { from: "indigo", to: "cyan" } }, "Complete"), !!props.lessonsTotal && !isComplete && /* @__PURE__ */ React__namespace.createElement(core.Badge, { variant: "filled" }, "Incomplete")), /* @__PURE__ */ React__namespace.createElement(core.UnstyledButton, { component: reactRouterDom.Link, to: props.href, mt: "md", sx: { ":hover": { textDecoration: "underline" } } }, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "lg", weight: 500 }, props.title)), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", color: "dimmed", mt: 5, mb: 50 }, props.description), !!props.lessonsCompleted && /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", size: "sm", mt: "md" }, "Lessons completed:", " ", /* @__PURE__ */ React__namespace.createElement(
2542
- core.Text,
2520
+ return /* @__PURE__ */ React__namespace.createElement(core.Card, { withBorder: true, radius: "md" }, /* @__PURE__ */ React__namespace.createElement(core.UnstyledButton, { component: reactRouterDom.Link, to: props.href, sx: { ":hover": { textDecoration: "underline" } } }, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "md", weight: 500 }, props.title)), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", color: "dimmed", mt: 5, mb: 25, h: 100, sx: { overflowY: "scroll" } }, props.description), /* @__PURE__ */ React__namespace.createElement(
2521
+ core.Button,
2543
2522
  {
2544
- span: true,
2545
- weight: 500,
2546
- sx: (theme) => ({ color: theme.colorScheme === "dark" ? theme.white : theme.black })
2523
+ variant: "gradient",
2524
+ size: "xs",
2525
+ leftIcon: /* @__PURE__ */ React__namespace.createElement(icons.IconClipboardCopy, { size: 14 }),
2526
+ onClick: () => props.onAssign(props.taskId)
2547
2527
  },
2548
- props.lessonsCompleted
2549
- )), !!props.lessonsTotal && /* @__PURE__ */ React__namespace.createElement(core.Progress, { value: props.lessonsCompleted / props.lessonsTotal * 100, mt: 5 }));
2528
+ "Assign"
2529
+ ));
2550
2530
  }
2551
2531
 
2532
+ const useStyles$3 = core.createStyles((theme) => ({
2533
+ action: {
2534
+ ":hover": {
2535
+ textDecoration: "underline"
2536
+ }
2537
+ },
2538
+ title: {
2539
+ color: theme.colorScheme === "dark" ? theme.white : theme.black,
2540
+ fontFamily: `Greycliff CF, ${theme.fontFamily}`,
2541
+ fontSize: theme.fontSizes.xl,
2542
+ lineHeight: 1.5,
2543
+ fontWeight: 900,
2544
+ [theme.fn.smallerThan("xs")]: {
2545
+ fontSize: theme.fontSizes.md
2546
+ }
2547
+ }
2548
+ }));
2552
2549
  const TrialHome = (props) => {
2553
- return /* @__PURE__ */ React__namespace.createElement(core.Container, { size: "lg" }, /* @__PURE__ */ React__namespace.createElement(core.Badge, null, props.daysRemaining, " day", props.daysRemaining !== 1 ? "s" : "", " left"), /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "sm" }, /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: 0 }, /* @__PURE__ */ React__namespace.createElement(
2550
+ const { classes } = useStyles$3();
2551
+ return /* @__PURE__ */ React__namespace.createElement(core.Container, { size: "lg" }, /* @__PURE__ */ React__namespace.createElement(core.Badge, null, props.daysRemaining, " day", props.daysRemaining !== 1 ? "s" : "", " left"), /* @__PURE__ */ React__namespace.createElement(
2552
+ core.Button,
2553
+ {
2554
+ className: classes.action,
2555
+ variant: "white",
2556
+ component: "a",
2557
+ size: "xs",
2558
+ href: props.upgradeHref,
2559
+ target: "_blank"
2560
+ },
2561
+ "UPGRADE NOW"
2562
+ ), /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "sm" }, /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: 0 }, /* @__PURE__ */ React__namespace.createElement(
2554
2563
  UserInfo,
2555
2564
  {
2556
2565
  variant: "compact",
@@ -2561,14 +2570,10 @@ const TrialHome = (props) => {
2561
2570
  TenantBanner,
2562
2571
  {
2563
2572
  title: "Trial Account",
2564
- description: "Welcome to Local Civics! You are currently interacting with our trial experience.",
2565
- image: "https://cdn.localcivics.io/hub/landing.jpg",
2566
- action: {
2567
- label: "UPGRADE NOW",
2568
- link: props.upgradeHref
2569
- }
2573
+ description: `Welcome to your Local Civics Trial Account${props.firstName ? ", " + props.firstName : ""}!`,
2574
+ image: "https://cdn.localcivics.io/hub/landing.jpg"
2570
2575
  }
2571
- )), /* @__PURE__ */ React__namespace.createElement(BadgeGrid, { badges: props.badges })));
2576
+ )), /* @__PURE__ */ React__namespace.createElement(core.Title, { mb: 20, mt: 20, className: classes.title }, "Based on the tags you selected,", /* @__PURE__ */ React__namespace.createElement("br", null), " check out these lessons to get started with your students!"), /* @__PURE__ */ React__namespace.createElement(BadgeGrid, { onAssign: props.onAssign, badges: props.badges })));
2572
2577
  };
2573
2578
 
2574
2579
  var __defProp$2 = Object.defineProperty;