@local-civics/mgmt-ui 0.1.213 → 0.1.215

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../node_modules/style-inject/dist/style-inject.es.js","../src/components/users/UserButton/UserButton.tsx","../src/utils/numbers.ts","../src/components/navigation/NavbarLinksGroups/NavbarLinksGroups.tsx","../src/components/navigation/Navbar/Navbar.tsx","../src/components/users/GettingStarted/GettingStarted.tsx","../src/components/users/SwitchAccount/SwitchAccount.tsx","../src/components/data/StatsGroup/StatsGroup.tsx","../src/components/navigation/Tabs/Tabs.tsx","../src/pages/Badge/SplitButton.tsx","../src/components/banners/PlaceholderBanner/PlaceholderBanner.tsx","../src/pages/Badge/LessonStack.tsx","../src/utils/useSortableData.ts","../src/pages/Badge/Table.tsx","../src/pages/Badge/LessonTable.tsx","../src/pages/Badge/Badge.tsx","../src/pages/Badges/Table.tsx","../src/pages/Badges/Badges.tsx","../src/pages/Dashboard/StudentTable.tsx","../src/utils/time.ts","../src/pages/Dashboard/ReflectionTable.tsx","../src/pages/Dashboard/ImpactTable.tsx","../src/pages/Dashboard/BadgeTable.tsx","../src/pages/Dashboard/LessonTable.tsx","../src/pages/Dashboard/Dashboard.tsx","../src/pages/Class/Table.tsx","../src/pages/Class/Class.tsx","../src/pages/Classes/Table.tsx","../src/pages/Classes/Classes.tsx","../src/components/users/UserInfo/UserInfo.tsx","../src/pages/Student/BadgeTable.tsx","../src/pages/Student/AnswerTable.tsx","../src/pages/Student/ReflectionTable.tsx","../src/pages/Student/Student.tsx","../src/components/cards/CardGradient.tsx","../src/components/banners/TenantBanner/TenantBanner.tsx","../src/pages/Home/Home.tsx","../src/pages/Lesson/ReflectionTable.tsx","../src/pages/Lesson/SplitButton.tsx","../src/pages/Lesson/AnswerStack.tsx","../src/pages/Lesson/Table.tsx","../src/pages/Lesson/QuestionStack.tsx","../src/pages/Lesson/Lesson.tsx","../src/pages/Lessons/Table.tsx","../src/pages/Lessons/Lessons.tsx","../src/pages/Organization/AccessCode.tsx","../src/pages/Organization/Organization.tsx","../src/pages/People/SplitButton.tsx","../src/pages/People/Table.tsx","../src/pages/People/People.tsx","../src/pages/StartAnonymousLesson/StartAnonymousLesson.tsx","../src/components/grid/BadgeGrid/BadgeGrid.tsx","../src/pages/TrialHome/TrialHome.tsx","../src/components/grid/SelectGrid/SelectGrid.tsx","../src/pages/TrialRegistration/TrialRegistration.tsx","../src/providers/AdminProvider/AdminProvider.tsx","../src/shells/App/App.tsx","../src/pages/Pathways/Table.tsx","../src/pages/Pathways/Pathways.tsx","../src/pages/Pathway/SplitButton.tsx","../src/pages/Pathway/BadgeStack.tsx","../src/pages/Pathway/Table.tsx","../src/pages/Pathway/BadgeTable.tsx","../src/pages/Pathway/Pathway.tsx","../src/pages/FileLocker/SplitButton.tsx","../src/pages/FileLocker/FileStack.tsx","../src/pages/FileLocker/Table.tsx","../src/pages/FileLocker/useFilteredStudents.ts","../src/pages/FileLocker/FileLocker.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import * as React from 'react';\nimport { Avatar } from '@mantine/core';\n\ninterface UserButtonProps {\n image: string;\n name: string;\n email: string;\n}\n\n/**\n * The identity chip above the nav. Keeps Mantine's `Avatar` specifically (its built-in\n * initials-fallback when `image` is empty is real, relied-upon behavior for educator accounts\n * that often lack a profile photo — not something to rebuild) while the surrounding chrome is\n * restyled to match the redesigned sidebar.\n */\nexport function UserButton({ image, name, email }: UserButtonProps) {\n return (\n <div className=\"m-3 flex items-center gap-2.5 rounded-xl border border-mint-400/30 bg-gradient-to-r from-sky-blue-400/15 to-mint-400/15 p-2.5 shadow-[0_2px_10px_rgba(30,226,175,0.15)]\">\n <Avatar\n src={image}\n radius=\"xl\"\n size={32}\n styles={{ placeholder: { color: \"#232A3A\", backgroundColor: \"rgba(30,226,175,0.2)\" } }}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-xs font-bold text-dark-blue-400\">{name}</div>\n <div className=\"truncate text-[10px] text-slate-500\">{email}</div>\n </div>\n </div>\n );\n}\n","/**\n * Compact number\n * @param num\n */\nexport const compact = (num?: number) => {\n return Intl.NumberFormat(\"en-US\", {\n notation: \"compact\",\n maximumFractionDigits: 1,\n }).format(num || 0);\n};","import * as React from 'react';\nimport { useState } from 'react';\nimport { TablerIcon, IconChevronRight } from '@tabler/icons';\nimport { Link } from \"react-router-dom\";\nimport { compact } from \"../../../utils/numbers\";\n\n/**\n * The accent color cycled across sidebar rows, same fixed rotation as the rest of the app.\n */\nexport type LinksGroupAccent = \"cyan\" | \"mint\" | \"gold\";\n\nconst ACCENT_CLASSNAMES: Record<LinksGroupAccent, { row: string; chip: string; icon: string; pill: string }> = {\n cyan: {\n row: \"bg-sky-blue-400/15 border-sky-blue-400/30\",\n chip: \"bg-sky-blue-400/25\",\n icon: \"text-sky-blue-400\",\n pill: \"bg-sky-blue-400/15 text-dark-blue-400\",\n },\n mint: {\n row: \"bg-mint-400/15 border-mint-400/30\",\n chip: \"bg-mint-400/25\",\n icon: \"text-mint-400\",\n pill: \"bg-mint-400/15 text-dark-blue-400\",\n },\n gold: {\n row: \"bg-gold-400/15 border-gold-400/30\",\n chip: \"bg-gold-400/25\",\n icon: \"text-gold-400\",\n pill: \"bg-gold-400/15 text-dark-blue-400\",\n },\n};\n\ninterface LinksGroupProps {\n icon: TablerIcon;\n label: string;\n accent?: LinksGroupAccent;\n initiallyOpened?: boolean;\n active?: string\n notifications: number\n href: string\n links?: { notifications: number, label: string, href: string;}[];\n}\n\n/**\n * A single sidebar row — a plain link, or (when `links` is non-empty) a chevron-toggled group that\n * auto-opens when one of its children is active and auto-closes when it isn't, while still\n * allowing manual toggling in between. Same behavior as before this round's restyle (chevron/\n * auto-open/notification-badge logic unchanged) — only the markup/styling moved from Mantine's\n * `createStyles` theme to Tailwind utility classes, plus a new optional `accent` for the\n * cyan/mint/gold rotation the redesigned sidebar uses (defaults to cyan if omitted).\n */\nexport function LinksGroup({ icon: Icon, href, label, accent = \"cyan\", initiallyOpened, links, active, notifications}: LinksGroupProps) {\n const hasLinks = Array.isArray(links) && links.length > 0;\n const hasActiveLinks = Array.isArray(links) && links.map(l => !!active && active === `${label}/${l.label}`).reduce((a, b) => a || b, false)\n const [opened, setOpened] = useState(initiallyOpened || hasActiveLinks || false);\n\n React.useEffect(() => {\n setOpened(hasActiveLinks)\n }, [hasActiveLinks])\n\n const isActive = !!active && !hasLinks && label === active;\n const accentClasses = ACCENT_CLASSNAMES[accent];\n\n const items = (hasLinks ? links : []).map((link) => {\n const linkActive = !!active && active === `${label}/${link.label}`;\n return (\n <Link\n key={link.label}\n to={link.href}\n className={`flex items-center justify-between gap-2 rounded-[8px] border px-3 py-2 text-xs no-underline transition-colors ${\n linkActive\n ? `${accentClasses.row} font-bold text-dark-blue-400`\n : \"border-transparent font-medium text-slate-500 hover:bg-slate-50\"\n }`}\n >\n {link.label}\n {!!link.notifications && (\n <span className={`rounded-full px-2 py-0.5 text-[10px] font-bold ${accentClasses.pill}`}>\n {compact(link.notifications)}\n </span>\n )}\n </Link>\n );\n });\n\n const rowInner = (\n <div className=\"flex flex-1 items-center gap-2.5\">\n <div className={`flex h-[30px] w-[30px] shrink-0 items-center justify-center rounded-lg ${isActive ? accentClasses.chip : \"bg-slate-50\"}`}>\n <Icon size={14} stroke={isActive ? 2.2 : 1.75} className={isActive ? accentClasses.icon : \"text-slate-400\"} />\n </div>\n <span className={`flex-1 text-xs ${isActive ? \"font-bold text-dark-blue-400\" : \"font-medium text-slate-500\"}`}>{label}</span>\n </div>\n );\n\n return (\n <div>\n <div\n onClick={() => hasLinks && setOpened((o) => !o)}\n className={`flex items-center gap-2.5 rounded-[10px] border px-3.5 py-2.5 transition-colors ${\n isActive ? accentClasses.row : \"border-transparent hover:bg-slate-50\"\n } ${hasLinks ? \"cursor-pointer\" : \"\"}`}\n >\n {hasLinks ? rowInner : <Link to={href} className=\"flex flex-1 items-center gap-2.5 no-underline\">{rowInner}</Link>}\n\n {!!notifications && (\n <span className={`rounded-full px-2 py-0.5 text-[10px] font-bold ${accentClasses.pill}`}>\n {compact(notifications)}\n </span>\n )}\n\n {hasLinks && (\n <IconChevronRight\n size={13}\n stroke={2.2}\n className={`shrink-0 text-slate-300 transition-transform ${opened ? \"rotate-90\" : \"\"}`}\n />\n )}\n </div>\n {hasLinks && opened && (\n <div className=\"ml-[29px] mt-0.5 flex flex-col gap-0.5 border-l border-slate-100 pl-2.5\">{items}</div>\n )}\n </div>\n );\n}\n","import * as React from 'react';\nimport {\n IconAlbum,\n IconBuilding,\n IconCategory2,\n IconClipboard,\n IconGauge,\n IconHome2,\n IconLambda,\n IconLogout,\n IconRoute,\n IconSwitchHorizontal,\n IconVideo,\n TablerIcon,\n} from '@tabler/icons';\nimport { UserButton } from \"../../users/UserButton/UserButton\";\nimport { LinksGroup, LinksGroupAccent } from \"../NavbarLinksGroups/NavbarLinksGroups\";\n\n/**\n * NavbarProps\n */\nexport interface NavbarProps {\n active?: string\n version: string\n image: string\n name: string\n email: string\n links: Record<string, {notifications: number, href: string, hidden?: boolean}>\n trial?: boolean\n loading?: boolean\n onLogout: () => void;\n onGettingStarted: () => void;\n onSwitchAccounts?: () => void;\n}\n\nconst data: { label: string; icon: TablerIcon; accent: LinksGroupAccent; links?: { label: string }[] }[] = [\n { label: 'Home', icon: IconHome2, accent: \"cyan\" },\n { label: 'Dashboard', icon: IconGauge, accent: \"mint\" },\n { label: 'Classes', icon: IconCategory2, accent: \"gold\" },\n { label: 'Pathways', icon: IconRoute, accent: \"cyan\" },\n { label: 'Badges', icon: IconAlbum, accent: \"mint\" },\n { label: 'Lessons', icon: IconLambda, accent: \"gold\" },\n { label: 'File Locker', icon: IconClipboard, accent: \"cyan\" },\n { label: 'Organization', icon: IconBuilding, accent: \"gold\", links: [{ label: 'Overview' }, { label: 'People' }] },\n]\n\nconst TRIAL_PAGES = [\n 'Home',\n 'Lessons',\n 'Badges',\n]\n\n/**\n * The educator/admin left nav. Same behavior as before this round's restyle — item list, per-item\n * notification counts, the `hidden`/trial visibility rules, the Organization sub-menu — only the\n * markup/styling moved from Mantine's `createStyles` theme to Tailwind utility classes (matching\n * the flat cyan/mint/gold system already shipped on the student side), plus `active` is now\n * optional rather than required (it was forcing at least one caller to pass an empty string just\n * to satisfy the type, which meant no row ever highlighted for it).\n * @param props\n * @constructor\n */\nexport function Navbar(props: NavbarProps) {\n const links = data.map((item) => {\n const context = props.links[item.label] || {notifications: 0, href: \"\"}\n if(context.hidden || (props.trial && TRIAL_PAGES.indexOf(item.label) === -1)){\n return null\n }\n\n if(props.loading && item.label !== 'Home'){\n return null\n }\n\n return <LinksGroup\n key={item.label}\n active={props.active}\n {...item}\n {...context}\n links={(item.links || []).map((link) => {\n return {...link, ...(props.links[`${item.label}/${link.label}`] || {notifications: 0, href: \"\"})}\n })}\n />\n });\n\n return (\n <nav className=\"flex h-full w-[230px] shrink-0 flex-col border-r border-slate-200 bg-white\">\n <div className=\"flex items-center justify-between border-b border-slate-100 p-4\">\n <div className=\"w-24\">\n <img className=\"w-full object-contain\" src=\"https://cdn.localcivics.io/brand/localcivics.png\" alt=\"Logo\" />\n </div>\n {!!props.trial && (\n <span className=\"rounded-full bg-gold-400/15 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400\">\n Trial\n </span>\n )}\n </div>\n\n {!props.loading && <UserButton image={props.image} name={props.name} email={props.email} />}\n\n <div className=\"flex flex-1 flex-col gap-0.5 overflow-y-auto p-2.5\">{links}</div>\n\n {!props.loading && (\n <div className=\"flex flex-col gap-0.5 border-t border-slate-200 p-2.5\">\n {props.trial && <UtilLink label=\"Getting started\" icon={IconVideo} onClick={props.onGettingStarted} />}\n {!!props.onSwitchAccounts && (\n <UtilLink label=\"Change account\" icon={IconSwitchHorizontal} onClick={props.onSwitchAccounts} />\n )}\n <UtilLink label=\"Logout\" icon={IconLogout} onClick={props.onLogout} />\n </div>\n )}\n </nav>\n );\n}\n\nconst UtilLink = (props: { label: string; icon: TablerIcon; onClick: () => void }) => {\n const Icon = props.icon;\n return (\n <div\n onClick={props.onClick}\n className=\"flex cursor-pointer items-center gap-2.5 rounded-[10px] px-3.5 py-2 text-slate-400 hover:bg-slate-50 hover:text-slate-500\"\n >\n <Icon size={13} stroke={1.75} />\n <span className=\"text-[11.5px]\">{props.label}</span>\n </div>\n );\n};\n","import * as React from 'react';\nimport {\n Modal,\n Text,\n createStyles,\n Center,\n Loader,\n Container, Title,\n Button,\n Group,\n} from '@mantine/core';\n\nconst useStyles = createStyles((theme) => ({\n inner: {\n paddingTop: theme.spacing.xl,\n paddingBottom: theme.spacing.xl * 4,\n },\n\n content: {\n maxWidth: 600,\n marginRight: theme.spacing.xl,\n\n [theme.fn.smallerThan('md')]: {\n maxWidth: '100%',\n marginRight: 0,\n },\n },\n\n title: {\n color: theme.colorScheme === 'dark' ? theme.white : theme.black,\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n fontSize: 44,\n lineHeight: 1.2,\n fontWeight: 900,\n\n [theme.fn.smallerThan('xs')]: {\n fontSize: 28,\n },\n },\n\n control: {\n [theme.fn.smallerThan('xs')]: {\n flex: 1,\n },\n },\n\n highlight: {\n position: 'relative',\n backgroundColor: theme.fn.variant({ variant: 'light', color: theme.primaryColor }).background,\n borderRadius: theme.radius.sm,\n padding: '4px 12px',\n },\n}));\n\n/**\n * GettingStartedProps\n */\nexport type GettingStartedProps = {\n opened: boolean\n loading: boolean\n videoURL: string\n onClose: () => void;\n}\n\n/**\n * GettingStarted\n * @param props\n * @constructor\n */\nexport const GettingStarted = (props: GettingStartedProps) => {\n const { classes } = useStyles();\n\n return <Modal centered\n fullScreen\n opened={props.opened}\n onClose={() => props.onClose && props.onClose()}\n size=\"sm\"\n >\n <div style={{ position: 'relative' }}>\n { props.loading && <Center style={{ height: 400 }}><Loader/></Center> }\n { !props.loading && <Container>\n <Group position=\"center\">\n <div className={classes.inner}>\n <div className={classes.content}>\n <Button onClick={props.onClose} radius=\"xl\" size=\"md\" className={classes.control}>\n Skip tour\n </Button>\n <Title className={classes.title}>\n Get Started with Your Trial\n </Title>\n <Text color=\"dimmed\" mt=\"md\">\n Welcome! We&apos;re excited that you are trying Local Civics lessons and badges with your students. Watch this short video tour to know how to navigate the platform.\n </Text>\n <video style={{marginTop: \"20px\", marginBottom: \"20px\"}} width=\"600\" height=\"350\" controls>\n <source src={props.videoURL} type=\"video/mp4\"/>\n Your browser does not support the video tag.\n </video>\n </div>\n </div>\n </Group>\n </Container>\n }\n </div>\n </Modal>\n}","import {IconBackpack, IconBatteryEco, IconBooks} from \"@tabler/icons\";\nimport * as React from 'react';\nimport {Modal, SimpleGrid, UnstyledButton, Card, ScrollArea, Text, createStyles, Center, Loader} from '@mantine/core';\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n\n description: {\n maxWidth: 600,\n margin: 'auto',\n\n '&::after': {\n content: '\"\"',\n display: 'block',\n backgroundColor: theme.fn.primaryColor(),\n width: 45,\n height: 2,\n marginTop: theme.spacing.sm,\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n },\n\n card: {\n transition: 'box-shadow 150ms ease, transform 100ms ease',\n\n '&:hover': {\n boxShadow: `${theme.shadows.md} !important`,\n transform: 'scale(1.02)',\n },\n },\n\n cardTitle: {\n '&::after': {\n content: '\"\"',\n display: 'block',\n backgroundColor: theme.fn.primaryColor(),\n width: 45,\n height: 2,\n marginTop: theme.spacing.sm,\n },\n },\n}));\n\n/**\n * AccountItem\n */\nexport type AccountItem = {\n accountId: string\n name: string\n isAdmin?: boolean\n isGroupAdmin?: boolean\n}\n\n/**\n * SwitchAccountProps\n */\nexport type SwitchAccountProps = {\n opened: boolean\n account: string\n loading: boolean\n accounts: AccountItem[]\n onClick: (account: string) => void;\n onClose: () => void;\n}\n\n/**\n * SwitchAccount\n * @param props\n * @constructor\n */\nexport const SwitchAccount = (props: SwitchAccountProps) => {\n const { classes, theme } = useStyles();\n\n const options = props.accounts.map(a => {\n return <UnstyledButton onClick={() => props.onClick && props.onClick(a.accountId)} key={a.accountId} p={theme.spacing.md}>\n <Card withBorder shadow=\"md\" radius=\"md\" className={classes.card} p=\"xl\">\n { a.isAdmin && <><IconBatteryEco size={50} stroke={2} color={theme.fn.primaryColor()}/></> }\n { a.isGroupAdmin && !a.isAdmin && <><IconBooks size={50} stroke={2} color={theme.fn.primaryColor()}/></>}\n { !a.isAdmin && !a.isGroupAdmin && <><IconBackpack size={50} stroke={2} color={theme.fn.primaryColor()}/></>}\n\n <Text size=\"lg\" weight={500} className={classes.cardTitle} mt=\"md\">\n {a.name}\n </Text>\n <Text size=\"sm\" color=\"dimmed\" mt=\"sm\">\n {a.isAdmin ? \"Admin\" : a.isGroupAdmin ? \"Educator\" : \"Student\"}\n </Text>\n </Card>\n </UnstyledButton>\n })\n\n return <Modal centered\n fullScreen\n opened={props.opened}\n onClose={() => props.onClose && props.onClose()}\n size=\"sm\"\n >\n <div style={{ position: 'relative' }}>\n { props.loading && <Center style={{ height: 400 }}><Loader/></Center> }\n { !props.loading && <ScrollArea.Autosize maxHeight={600}>\n <SimpleGrid p={20} cols={3} spacing=\"xl\" breakpoints={[{ maxWidth: 'md', cols: 1 }]}>\n {options}\n </SimpleGrid>\n </ScrollArea.Autosize>\n }\n </div>\n </Modal>\n}","import * as React from 'react';\n\ninterface StatsGroupProps {\n data: { title: string; value: number, unit?: string}[];\n footer?: React.ReactNode\n}\n\n/**\n * The dark navy stat highlight used across pages that have real aggregate numbers to show (Class\n * Roster today; File Locker and Lessons reuse the exact same component in later rounds, for\n * cross-page consistency). Same prop contract and percentage-rounding behavior as before this\n * round's restyle — only the markup/styling moved from Mantine's `createStyles` theme to Tailwind.\n * @param data\n * @param footer\n * @constructor\n */\nexport const StatsGroup = ({ data, footer }: StatsGroupProps) => {\n const stats = data.map((stat) => {\n const value = (() => {\n if (stat.unit === '%') {\n // https://stackoverflow.com/questions/11832914/how-to-round-to-at-most-2-decimal-places-if-necessary\n return Math.round((stat.value + Number.EPSILON) * 100)\n }\n\n return stat.value\n })()\n\n // falls back to 0 for undefined, null, NaN, etc\n const safeValue = Number.isFinite(value) ? value : 0;\n\n return (\n <div key={stat.title}>\n <div className=\"text-3xl font-black text-white\">\n {safeValue.toLocaleString()}\n {stat.unit}\n </div>\n <div className=\"mt-1.5 text-[11px] font-bold uppercase tracking-wide text-white/70\">{stat.title}</div>\n </div>\n );\n });\n\n return (\n <div className=\"flex flex-wrap gap-x-10 gap-y-4 rounded-2xl bg-gradient-to-br from-dark-blue-600 via-dark-blue-400 to-sky-blue-400 px-8 py-6\">\n {stats}\n {footer}\n </div>\n );\n}\n","import * as React from 'react';\nimport {Tabs as TabsCore, TabsValue} from '@mantine/core';\n\n/**\n * TabProps\n */\nexport interface TabsProps{\n data?: {label?: string, value: string}[]\n value?: TabsValue\n\n onChange: (next: string) => void\n}\n\n/**\n * Tabs\n * @param props\n * @constructor\n */\nexport const Tabs = (props: TabsProps) => {\n const tabs = props.data?.map(item => <TabsCore.Tab key={item.value} value={item.value}>{item.label||item.value}</TabsCore.Tab>)\n\n return (\n <TabsCore value={props.value} onTabChange={props.onChange}>\n <TabsCore.List>\n {tabs}\n </TabsCore.List>\n </TabsCore>\n );\n}","import * as React from 'react'\nimport { createStyles, Button, Stack, Menu, Group, ActionIcon } from '@mantine/core';\nimport {\n IconChevronDown,\n IconPlaylistAdd,\n IconClipboardCopy, IconTableExport\n} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\n\nconst useStyles = createStyles((theme) => ({\n button: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n marginLeft: 0,\n marginRight: 0,\n },\n\n menuControl: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n border: 0,\n borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark[7] : theme.white}`,\n },\n}));\n\nexport type SplitButtonProps = {\n href: string\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\nexport const SplitButton = (props: SplitButtonProps) => {\n const { classes, theme } = useStyles();\n const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === 'dark' ? 5 : 6];\n\n return (\n <Stack spacing=\"sm\">\n <Button<typeof Link> component={Link} to={props.href}\n className={classes.button}\n variant=\"gradient\"\n >\n Preview\n </Button>\n <Button\n leftIcon={<IconClipboardCopy size={14} />}\n onClick={props.onCopyLinkClick}\n >\n Copy link\n </Button>\n <Button\n leftIcon={<IconTableExport size={14} />}\n onClick={props.onExportDataClick}\n >\n Export data (.csv)\n </Button>\n </Stack>\n );\n}","import * as React from 'react'\nimport { createStyles, Text, Title, Image } from '@mantine/core';\n\nconst useStyles = createStyles((theme) => ({\n wrapper: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing.xl * 2,\n borderRadius: theme.radius.md,\n backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark[8] : theme.white,\n border: `1px solid ${\n theme.colorScheme === 'dark' ? theme.colors.dark[8] : theme.colors.gray[3]\n }`,\n\n [`@media (max-width: ${theme.breakpoints.sm}px)`]: {\n flexDirection: 'column-reverse',\n padding: theme.spacing.xl,\n },\n },\n\n image: {\n maxWidth: '40%',\n\n [`@media (max-width: ${theme.breakpoints.sm}px)`]: {\n maxWidth: '100%',\n },\n },\n\n body: {\n paddingRight: theme.spacing.xl * 4,\n\n [`@media (max-width: ${theme.breakpoints.sm}px)`]: {\n paddingRight: 0,\n marginTop: theme.spacing.xl,\n },\n },\n\n title: {\n color: theme.colorScheme === 'dark' ? theme.white : theme.black,\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n lineHeight: 1,\n marginBottom: theme.spacing.md,\n },\n\n controls: {\n display: 'flex',\n marginTop: theme.spacing.xl,\n },\n\n inputWrapper: {\n width: '100%',\n flex: '1',\n },\n\n input: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n borderRight: 0,\n },\n\n control: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n },\n}));\n\n/**\n * PlaceholderBannerIcon\n */\nexport type PlaceholderBannerIcon = \"badges\" | \"lessons\" | \"dashboard\" | \"groups\" | \"kindergarten\" | \"thinking\"\n\n/**\n * PlaceholderBannerProps\n */\nexport type PlaceholderBannerProps = {\n loading: boolean\n icon: PlaceholderBannerIcon\n title?: string,\n description?: string,\n}\n\nexport const PlaceholderBanner = (props: PlaceholderBannerProps) => {\n const { classes } = useStyles();\n const title = props.title || \"Nothing to display\"\n const description = props.description || \"We don't have anything to show you here just yet. Add data, check back later, or adjust your search.\"\n return (\n <div className={classes.wrapper}>\n <div className={classes.body}>\n <Title className={classes.title}>{props.loading ? \"Loading...\" : title}</Title>\n <Text size=\"sm\" color=\"dimmed\">{props.loading ? \"Hold on, we're loading your data.\" : description}</Text>\n </div>\n\n <Image src={`https://cdn.localcivics.io/illustrations/${props.icon}.svg`} className={classes.image} />\n </div>\n );\n}","import * as React from 'react';\nimport {Grid, Badge, Text} from '@mantine/core';\nimport {Link} from \"react-router-dom\";\n\n/**\n * Item\n */\nexport interface Item {\n lessonName: string\n completion: number\n isStarted?: boolean\n href: string\n}\n\n/**\n * StackData\n */\nexport type StackData = {\n items: Item[]\n}\n\n/**\n * StackProps\n */\nexport type StackProps = StackData\n\n/**\n * Stack\n * @constructor\n * @param props\n */\nexport function Stack(props: StackProps) {\n if(props.items.length === 0){\n return null\n }\n\n const rows = props.items.map((row) => (\n <>\n <Grid.Col span={6}>\n <Text<typeof Link> component={Link} to={row.href} color=\"dark.4\" weight=\"bold\" size=\"md\">\n {row.lessonName}\n </Text>\n </Grid.Col>\n <Grid.Col span={6}>\n {row.completion >= 1 && <Badge variant=\"filled\">Complete</Badge>}\n {row.completion === 0 && !row.isStarted && <Badge color=\"red\" variant=\"filled\">Not started</Badge>}\n {row.completion > 0 && row.completion < 1 && <Badge color=\"violet\" variant=\"filled\">{Math.round((row.completion + Number.EPSILON) * 100)}% Complete</Badge>}\n </Grid.Col>\n </>\n ));\n\n return <Grid grow gutter=\"lg\" sx={{ padding: 20, minWidth: 700 }}>\n {rows}\n </Grid>\n}","import { useMemo, useState } from 'react';\n\nexport type SortDirection = 'asc' | 'desc' | null;\n\nexport interface SortConfig<T> {\n key: keyof T | string;\n direction: SortDirection;\n}\n\nexport function useSortableData<T>(items: T[], config: SortConfig<T> = { key: '', direction: null }) {\n const [sortConfig, setSortConfig] = useState<SortConfig<T>>(config);\n\n const sortedItems = useMemo(() => {\n let sortableItems = [...items];\n if (sortConfig.direction !== null) {\n sortableItems.sort((a, b) => {\n const aValue = (a as any)[sortConfig.key];\n const bValue = (b as any)[sortConfig.key];\n\n // Handle null/undefined values to prevent crashes\n if (aValue === bValue) return 0;\n if (aValue === null || aValue === undefined) return 1;\n if (bValue === null || bValue === undefined) return -1;\n\n // Numeric Sort (e.g., Badges Earned, Lessons Completed)\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return sortConfig.direction === 'asc' ? aValue - bValue : bValue - aValue;\n }\n\n // Boolean Sort (e.g., Account Created, Status)\n // Descending puts True/Yes at the top\n if (typeof aValue === 'boolean' && typeof bValue === 'boolean') {\n return sortConfig.direction === 'asc' \n ? (aValue === bValue ? 0 : aValue ? 1 : -1)\n : (aValue === bValue ? 0 : aValue ? -1 : 1);\n }\n\n // Date Sort (e.g., Last Active)\n if (aValue instanceof Date && bValue instanceof Date) {\n return sortConfig.direction === 'asc' \n ? aValue.getTime() - bValue.getTime() \n : bValue.getTime() - aValue.getTime();\n }\n\n // Default String Sort (e.g., Student Name, Class Name)\n // Uses localeCompare for safe alphabetical sorting\n return sortConfig.direction === 'asc'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n }\n return sortableItems;\n }, [items, sortConfig]);\n\n const requestSort = (key: string) => {\n let direction: 'asc' | 'desc' = 'asc';\n if (sortConfig.key === key && sortConfig.direction === 'asc') {\n direction = 'desc';\n }\n \n setSortConfig({ key, direction });\n };\n\n return { items: sortedItems, requestSort, sortConfig };\n}","import { DataTable, DataTableSortStatus } from \"mantine-datatable\";\nimport * as React from 'react';\nimport {Avatar, Group, Text, ScrollArea, Badge} from '@mantine/core';\nimport {Link} from \"react-router-dom\";\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {Stack as LessonStack, Item as LessonItem} from \"./LessonStack\";\nimport { useSortableData } from \"../../utils/useSortableData\";\n\n/**\n * Item\n */\nexport interface Item {\n userId: string\n avatar: string\n name: string\n email: string\n isComplete?: boolean\n lessons: LessonItem[]\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n // Map status boolean to a number so it can be sorted\n const preparedItems = React.useMemo(() => {\n return props.items.map(item => ({\n ...item,\n status: item.isComplete ? 1 : 0,\n }));\n }, [props.items]);\n\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems); //add sort logic\n \n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No badges to display\"\n description=\"There has not been any badge progress just yet.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n\n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n };\n \n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n verticalSpacing=\"sm\"\n sx={{ minWidth: 700 }}\n withBorder={false}\n borderRadius=\"sm\"\n withColumnBorders\n striped\n highlightOnHover\n records={sortedItems}\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)}\n idAccessor=\"userId\"\n columns={[{\n accessor: 'name',\n title: 'Student Name',\n sortable: true,\n render: (row: Item) => (\n <Group spacing=\"sm\">\n <Avatar size={40} src={row.avatar} radius={40}/>\n <div>\n <Text size=\"sm\" weight={500}>\n {row.name}\n </Text>\n <Text size=\"xs\" color=\"dimmed\">\n {row.email}\n </Text>\n </div>\n </Group>\n ),\n },{\n accessor: 'status',\n title: 'Status',\n sortable: true,\n render: (row: Item) => (\n <>\n {!!row.isComplete && <Badge variant=\"filled\">Complete</Badge>}\n {!row.isComplete && <Badge color=\"red\" variant=\"filled\">Incomplete</Badge>}\n </>\n )\n }]}\n rowExpansion={{\n content: ({ record }: {record: Item}) => (\n <LessonStack items={record.lessons}/>\n ),\n }}\n />\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport {ScrollArea, Text} from '@mantine/core';\nimport {Link} from \"react-router-dom\";\nimport { DataTable, DataTableSortStatus } from \"mantine-datatable\"\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport { useSortableData } from \"../../utils/useSortableData\";\n/**\n * Item\n */\nexport interface Item {\n lessonId: string\n lessonName: string\n percentageCompletion: number\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(props.items);\n\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No lessons to display\"\n description=\"There are not lessons in badge.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n };\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n verticalSpacing=\"sm\"\n sx={{ minWidth: 700 }}\n highlightOnHover\n striped\n records={sortedItems}\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)}\n columns={[\n {\n accessor: 'lessonName',\n title: 'Lesson Name',\n sortable: true,\n render: (row) => (\n <Text<typeof Link> component={Link} to={row.href}>\n {row.lessonName}\n </Text>\n )\n },\n {\n accessor: 'percentageCompletion',\n title: 'Lesson Completion',\n sortable: true,\n render: (row) => `${Math.round((row.percentageCompletion + Number.EPSILON) * 100)}%`\n }\n ]}\n />\n </ScrollArea.Autosize>\n );\n}","import {IconArrowLeft, IconCategory2} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n createStyles,\n Badge as BadgeCore,\n Title,\n Text,\n Container, Stack, Grid,\n Select, ActionIcon, Group,\n LoadingOverlay,\n UnstyledButton,\n} from '@mantine/core';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Tabs} from \"../../components/navigation/Tabs/Tabs\";\nimport {SplitButton} from \"./SplitButton\";\nimport {Table, Item} from \"./Table\";\nimport {Table as LessonTable, Item as LessonItem} from \"./LessonTable\"\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n\n description: {\n maxWidth: 600,\n },\n}));\n\n/**\n * BadgeUserItem\n */\nexport type BadgeUserItem = Item\n\n/**\n * BadgeClass\n */\nexport type BadgeClass = {\n classId: string\n name: string\n active: boolean\n}\n\n/**\n * BadgeProps\n */\nexport type BadgeProps = {\n loading: boolean\n displayName: string,\n description: string\n classes: BadgeClass[]\n lessons: LessonItem[]\n classId: string\n students: BadgeUserItem[]\n href: string\n trial?: boolean\n lessonsCompleted?: number\n\n onBackClick: () => void;\n onClassChange: (classId: string) => void;\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\n/**\n * Badge\n * @param props\n * @constructor\n */\nexport const Badge = (props: BadgeProps) => {\n const { classes } = useStyles();\n const [tab, setTab] = useState(\"lessons\")\n\n const numberOfStudents = props.students.length\n const numberOfBadges = numberOfStudents > 0 ? props.students.filter(u => u.isComplete).length : 0\n const percentageOfBadgesEarned = numberOfStudents > 0 ? props.students.filter(u => u.isComplete).length / numberOfStudents : 0\n\n return (\n <Container size=\"lg\" py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <UnstyledButton onClick={props.onBackClick}>\n <BadgeCore\n variant=\"filled\"\n leftSection={<ActionIcon color=\"blue\" size=\"xs\" radius=\"xl\" variant=\"filled\">\n <IconArrowLeft size={14} />\n </ActionIcon>}\n size=\"lg\">\n Back\n </BadgeCore>\n </UnstyledButton>\n <Group>\n <Stack spacing={0}>\n <Title order={2} className={classes.title} mt=\"md\">\n {props.displayName || \"Badge\"}\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">\n {props.description || \"No description\"}\n </Text>\n </Stack>\n\n {!props.trial && <Stack ml=\"auto\">\n <SplitButton\n href={props.href}\n onCopyLinkClick={props.onCopyLinkClick}\n onExportDataClick={props.onExportDataClick}\n />\n </Stack>}\n </Group>\n </Grid.Col>\n </Grid>\n <div>\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n <Stack>\n <StatsGroup data={[\n {\n title: props.trial ? \"LESSONS SUBMITTED\" : \"BADGE COMPLETION\",\n value: props.trial ? props.lessonsCompleted || 0 : numberOfBadges,\n unit: props.trial ? '' : '',\n },\n ]}/>\n\n { !props.trial && <Select\n clearable\n clearButtonLabel=\"Clear class selection\"\n size=\"sm\"\n placeholder=\"Select a class\"\n nothingFound=\"No options\"\n value={props.classId}\n onChange={props.onClassChange}\n icon={<IconCategory2/>}\n data={props.classes.map(g => {return {value: g.classId, label: g.name}})}\n />}\n\n <Stack spacing={0}>\n { !props.trial && <Tabs\n value={tab}\n data={[\n {label: \"By lesson\", value: \"lessons\"},\n {label: \"By student\", value: \"students\"},\n ]}\n onChange={setTab}\n />}\n\n { (!!props.trial || tab === \"lessons\") && <LessonTable\n loading={props.loading}\n items={props.lessons}\n /> }\n\n { (!props.trial && tab === \"students\") && <Table\n loading={props.loading}\n items={props.students}\n />}\n </Stack>\n </Stack>\n </div>\n </div>\n </Stack>\n </Container>\n )\n}","import * as React from 'react';\nimport {Link} from \"react-router-dom\";\n\n/**\n * Item\n */\nexport interface Item {\n badgeId: string,\n name: string;\n description: string\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[];\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n if (props.loading) {\n return <div className=\"text-sm text-slate-400\">Loading…</div>;\n }\n\n if (props.items.length === 0) {\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white p-8 text-center text-sm text-slate-400 shadow-sm\">\n No badges to display.\n </div>\n );\n }\n\n return (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n {props.items.map((row, i) => (\n <Link\n key={row.badgeId}\n to={row.href}\n className={`block px-5 py-4 no-underline hover:bg-slate-50 ${i < props.items.length - 1 ? \"border-b border-slate-100\" : \"\"}`}\n >\n <div className=\"text-sm font-bold text-dark-blue-400\">{row.name}</div>\n {row.description && <div className=\"mt-1 text-xs leading-relaxed text-slate-500\">{row.description}</div>}\n </Link>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport {IconSearch} from \"@tabler/icons\";\nimport {Table, Item} from \"./Table\";\n\n/**\n * BadgeItem\n */\nexport type BadgeItem = Item\n\n/**\n * BadgesProps\n */\nexport type BadgesProps = {\n loading: boolean\n badges: BadgeItem[]\n\n onAutocompleteChange: (value: string) => void\n}\n\n/**\n * Badges\n * @param props\n * @constructor\n */\nexport const Badges = (props: BadgesProps) => {\n return (\n <div className=\"mx-auto flex max-w-4xl flex-col gap-5 px-4 py-8\">\n <div className=\"space-y-1\">\n <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">Badges and micro-credentials</h1>\n <p className=\"text-sm text-slate-500\">Project-sized skills acquisition and standards alignment.</p>\n </div>\n\n <div className=\"flex items-center gap-2.5 rounded-xl border border-slate-200 bg-white px-4 py-3 shadow-sm\">\n <IconSearch size={15} stroke={1.75} className=\"text-slate-400\" />\n <input\n type=\"text\"\n placeholder=\"Search for a badge that fits your needs\"\n onChange={(e) => props.onAutocompleteChange(e.target.value)}\n className=\"flex-1 border-none bg-transparent text-sm text-dark-blue-400 outline-none placeholder:text-slate-400\"\n />\n </div>\n\n <Table loading={props.loading} items={props.badges} />\n </div>\n )\n}\n","import * as React from 'react';\nimport {Table as MantineTable, ScrollArea, UnstyledButton} from '@mantine/core';\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n studentId: string\n studentName: string\n className: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableMethods\n */\nexport type TableMethods = {\n onViewProfile: (item: Item) => void;\n}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & TableMethods\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No students to display\"\n description=\"You don't have any students yet, add them and revisit.\"\n loading={props.loading}\n icon=\"groups\"\n />\n }\n\n const rows = props.items.map((row) => (\n <tr key={row.studentName}>\n <td><UnstyledButton onClick={() => props.onViewProfile(row)}>{row.studentName}</UnstyledButton></td>\n <td>{row.className}</td>\n </tr>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <MantineTable verticalSpacing=\"sm\" sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Student Name</th>\n <th>Class Name</th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea.Autosize>\n );\n}","// https://stackoverflow.com/questions/6108819/javascript-timestamp-to-relative-time\nconst units: {unit: Intl.RelativeTimeFormatUnit; ms: number}[] = [\n {unit: \"year\", ms: 31536000000},\n {unit: \"month\", ms: 2628000000},\n {unit: \"day\", ms: 86400000},\n {unit: \"hour\", ms: 3600000},\n {unit: \"minute\", ms: 60000},\n {unit: \"second\", ms: 1000},\n];\nconst rtf = new Intl.RelativeTimeFormat(\"en\", {numeric: \"auto\"});\n\n/**\n * Get language-sensitive relative time message from Dates.\n * @param relative - the relative dateTime, generally is in the past or future\n * @param pivot - the dateTime of reference, generally is the current time\n */\nexport function relativeTimeFromDates(relative: Date | null, pivot: Date = new Date()): string {\n if (!relative) return \"\";\n const elapsed = relative.getTime() - pivot.getTime();\n return relativeTimeFromElapsed(elapsed);\n}\n\n/**\n * Get language-sensitive relative time message from elapsed time.\n * @param elapsed - the elapsed time in milliseconds\n */\nexport function relativeTimeFromElapsed(elapsed: number): string {\n for (const {unit, ms} of units) {\n if (Math.abs(elapsed) >= ms || unit === \"second\") {\n return rtf.format(Math.round(elapsed / ms), unit);\n }\n }\n return \"\";\n}","import * as React from 'react';\nimport {Table as MantineTable, ScrollArea} from '@mantine/core';\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {relativeTimeFromDates} from \"../../utils/time\";\n\n/**\n * Item\n */\nexport interface Item {\n lessonName: string\n studentName: string\n reflection: string\n updatedAt: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableMethods\n */\nexport type TableMethods = {}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & TableMethods\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No reflections to display\"\n description=\"There has not been any lesson progress just yet.\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n const rows = props.items.map((row) => (\n <tr key={row.studentName+row.lessonName}>\n <td>{row.studentName}</td>\n <td>{row.lessonName}</td>\n <td>{row.reflection}</td>\n <td>{relativeTimeFromDates(new Date(row.updatedAt))}</td>\n </tr>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <MantineTable verticalSpacing=\"sm\" sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Student Name</th>\n <th>Lesson Name</th>\n <th>Reflection</th>\n <th>Updated At</th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport {Table as MantineTable, ScrollArea} from '@mantine/core';\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n studentName: string\n impactStatement: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableMethods\n */\nexport type TableMethods = {}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & TableMethods\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No impact statements to display\"\n description=\"There are no students with impact statements yet.\"\n loading={props.loading}\n icon=\"kindergarten\"\n />\n }\n\n const rows = props.items.map((row) => (\n <tr key={row.studentName}>\n <td>{row.studentName}</td>\n <td>{row.impactStatement}</td>\n </tr>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <MantineTable verticalSpacing=\"sm\" sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Student Name</th>\n <th>Impact Statement</th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport { Table as MantineTable, Group, Text, ScrollArea, UnstyledButton } from '@mantine/core';\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n badgeId: string,\n name: string;\n description: string\n percentageCompletion: number\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[];\n}\n\n/**\n * TableMethods\n */\nexport type TableMethods = {\n onClick: (badge: Item) => void\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & TableMethods\n\n/**\n * Table\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No badges to display\"\n description=\"We don't have any badges to show you just yet.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n\n const rows = props.items.map((row) => (\n <tr key={row.badgeId}>\n <td>\n <UnstyledButton onClick={() => props.onClick && props.onClick(row)}>\n {row.name}\n </UnstyledButton>\n </td>\n <td>{row.description}</td>\n <td>{Math.round((row.percentageCompletion + Number.EPSILON) * 100)}%</td>\n </tr>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <MantineTable verticalSpacing=\"sm\" sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Badge Name</th>\n <th>Description</th>\n <th>Completion</th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport { Table as MantineTable, Group, Text, ScrollArea, UnstyledButton } from '@mantine/core';\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n lessonId: string,\n name: string;\n description: string\n percentageCompletion: number\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[];\n}\n\n/**\n * TableMethods\n */\nexport type TableMethods = {\n onClick: (badge: Item) => void\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & TableMethods\n\n/**\n * Table\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No lessons to display\"\n description=\"We don't have any lessons to show you just yet.\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n const rows = props.items.map((row) => (\n <tr key={row.lessonId}>\n <td>\n <UnstyledButton onClick={() => props.onClick && props.onClick(row)}>\n {row.name}\n </UnstyledButton>\n </td>\n <td>{row.description}</td>\n <td>{Math.round((row.percentageCompletion + Number.EPSILON) * 100)}%</td>\n </tr>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <MantineTable verticalSpacing=\"sm\" sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Lesson Name</th>\n <th>Description</th>\n <th>Completion</th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea.Autosize>\n );\n}","import {IconCategory2} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {Container, LoadingOverlay, Select, Stack, Text, Title} from '@mantine/core';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Tabs} from \"../../components/navigation/Tabs/Tabs\";\nimport {Item as StudentItem, Table as StudentTable} from \"./StudentTable\";\nimport {Table as ReflectionTable, Item as ReflectionItem} from \"./ReflectionTable\";\nimport {Item as ImpactItem, Table as ImpactTable} from \"./ImpactTable\";\nimport {Item as BadgeItem, Table as BadgeTable} from \"./BadgeTable\";\nimport {Item as LessonItem, Table as LessonTable} from \"./LessonTable\";\n\n/**\n * DashboardClass\n */\nexport type DashboardClass = {\n classId: string\n name: string\n}\n\n/**\n * DashboardProps\n */\nexport type DashboardProps = {\n loading: boolean\n students: StudentItem[]\n impacts: ImpactItem[]\n reflections: ReflectionItem[],\n classes: DashboardClass[],\n badges: BadgeItem[],\n lessons: LessonItem[],\n classId: string\n percentageOfAccountsCreated: number\n numberOfBadgesEarned: number\n numberOfLessonsCompleted: number\n\n onClassChange: (classId: string) => void;\n onViewStudentProfile: (student: StudentItem) => void\n onBadgeClick: (badge: BadgeItem) => void;\n onLessonClick: (lesson: LessonItem) => void;\n}\n\n/**\n * Dashboard\n * @param props\n * @constructor\n */\nexport const Dashboard = (props: DashboardProps) => {\n const [tab, setTab] = useState(\"students\")\n\n return <Container size=\"lg\" py=\"xl\">\n <Stack>\n <Stack spacing={0}>\n <Title size=\"h3\">Dashboard</Title>\n <Text color=\"dimmed\" size=\"sm\" mt=\"md\">\n Track your students’ pathway progress\n </Text>\n </Stack>\n <Stack>\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n <Stack spacing=\"sm\">\n <StatsGroup data={[\n {\n title: \"# OF STUDENTS\",\n value: props.students.length,\n },\n {\n title: \"ACCOUNT CREATION\",\n value: props.percentageOfAccountsCreated,\n unit: \"%\",\n },\n {\n title: \"BADGES EARNED\",\n value: props.numberOfBadgesEarned,\n },\n {\n title: \"LESSONS COMPLETED\",\n value: props.numberOfLessonsCompleted,\n },\n ]}/>\n\n <Select\n clearable\n clearButtonLabel=\"Clear class selection\"\n size=\"sm\"\n placeholder=\"Select a class\"\n nothingFound=\"No options\"\n value={props.classId}\n onChange={props.onClassChange}\n icon={<IconCategory2/>}\n data={props.classes.map(g => {return {value: g.classId, label: g.name}})}\n />\n\n <Stack spacing={0}>\n <Tabs\n value={tab}\n data={[\n {label: \"My students\", value: \"students\"},\n {label: \"Impact statements\", value: \"impact\"},\n {label: \"Reflections\", value: \"reflections\"},\n {label: \"Badges\", value: \"badges\"},\n {label: \"Lessons\", value: \"lessons\"},\n ]}\n onChange={setTab}\n />\n\n { tab === \"impact\" && <ImpactTable\n loading={props.loading}\n items={props.impacts}\n />}\n\n { tab === \"reflections\" && <ReflectionTable\n loading={props.loading}\n items={props.reflections}\n /> }\n\n { tab === \"badges\" && <BadgeTable\n loading={props.loading}\n items={props.badges}\n onClick={props.onBadgeClick}\n /> }\n\n { tab === \"lessons\" && <LessonTable\n loading={props.loading}\n items={props.lessons}\n onClick={props.onLessonClick}\n /> }\n\n { tab === \"students\" && <StudentTable\n loading={props.loading}\n items={props.students}\n onViewProfile={props.onViewStudentProfile}\n />}\n </Stack>\n </Stack>\n </div>\n </Stack>\n </Stack>\n </Container>\n}","import {openConfirmModal} from \"@mantine/modals\";\nimport {Text} from '@mantine/core';\nimport * as React from 'react';\nimport {Link} from \"react-router-dom\";\nimport {IconCheck, IconTrash} from '@tabler/icons';\n\n/**\n * Item\n */\nexport type Item = {\n classId: string,\n userId: string,\n avatar: string,\n email: string,\n givenName: string,\n familyName: string,\n lastActivity: Date | null\n readonly: boolean\n hasAccount: boolean\n badgesEarned: number\n lessonsCompleted: number\n isAdmin: boolean\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & {\n onDelete: (member: Item) => void\n onRoleChange: (user: Item, role: string | null) => void;\n}\n\nconst openDeleteModal = (student: Item, onDelete: (member: Item) => void) => openConfirmModal({\n title: `Remove \"${student.givenName && student.familyName ? `${student.givenName} ${student.familyName}` : student.email}\" from this class?`,\n centered: true,\n children: (\n <Text size=\"sm\">\n Click confirm if you want to remove the student from this specific class. This will NOT remove the student from the Tech Platform.\n </Text>\n ),\n labels: { confirm: 'Remove Student', cancel: \"Cancel\" },\n confirmProps: { color: 'red' },\n onConfirm: () => onDelete(student),\n});\n\n/**\n * Table. Same delete-confirmation (`openConfirmModal`) and role-change behavior as before this\n * round's restyle — only the row markup moved from `mantine-datatable` to Tailwind.\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n if (props.loading) {\n return <div className=\"text-sm text-slate-400\">Loading…</div>;\n }\n\n if (props.items.length === 0) {\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white p-8 text-center text-sm text-slate-400 shadow-sm\">\n You have not rostered any students yet.\n </div>\n );\n }\n\n return (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div className=\"grid grid-cols-[2.2fr_1.2fr_1fr_1.2fr_1fr_0.6fr] gap-3 border-b border-slate-100 px-5 py-3 text-[10px] font-bold uppercase tracking-wide text-slate-400\">\n <div>Name</div>\n <div>Role</div>\n <div>Badges Earned</div>\n <div>Lessons Completed</div>\n <div>Account Created?</div>\n <div />\n </div>\n {props.items.map((row, i) => {\n const name = row.givenName && row.familyName ? `${row.givenName} ${row.familyName}` : row.email;\n const initials = (row.givenName?.[0] || row.email[0] || \"?\") + (row.familyName?.[0] || \"\");\n return (\n <div\n key={row.email}\n className={`grid grid-cols-[2.2fr_1.2fr_1fr_1.2fr_1fr_0.6fr] items-center gap-3 px-5 py-3.5 ${\n i < props.items.length - 1 ? \"border-b border-slate-100\" : \"\"\n }`}\n >\n <Link to={row.href} className=\"flex min-w-0 items-center gap-2.5 no-underline\">\n {row.avatar ? (\n <img className=\"h-8 w-8 shrink-0 rounded-full object-cover\" src={row.avatar} alt={name} />\n ) : (\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-mint-400/20 text-[10px] font-bold text-dark-blue-400\">\n {initials.toUpperCase()}\n </div>\n )}\n <div className=\"min-w-0\">\n <div className=\"truncate text-xs font-bold text-dark-blue-400\">{name}</div>\n <div className=\"truncate text-[10.5px] text-slate-400\">{row.email}</div>\n </div>\n </Link>\n\n <select\n disabled={row.readonly}\n value={row.isAdmin ? \"educator\" : \"student\"}\n onChange={(e) => props.onRoleChange && props.onRoleChange(row, e.target.value)}\n className=\"w-fit rounded-lg border border-slate-200 bg-white px-2.5 py-1.5 text-xs font-medium text-slate-600 disabled:opacity-50\"\n >\n <option value=\"student\">Student</option>\n <option value=\"educator\">Educator</option>\n </select>\n\n <div className=\"text-xs font-bold text-dark-blue-400\">{row.badgesEarned}</div>\n <div className=\"text-xs font-bold text-dark-blue-400\">{row.lessonsCompleted}</div>\n <div>{row.hasAccount && <IconCheck size={16} stroke={3} className=\"text-mint-400\" />}</div>\n <div>\n {!row.readonly && !!props.onDelete && (\n <button\n type=\"button\"\n onClick={() => openDeleteModal(row, props.onDelete)}\n className=\"flex h-7 w-7 items-center justify-center rounded-md text-slate-300 hover:bg-red-50 hover:text-red-500\"\n >\n <IconTrash size={14} stroke={1.75} />\n </button>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","import {IconArrowLeft, IconCloudUpload, IconDownload, IconLink, IconPlus, IconX} from \"@tabler/icons\";\nimport {ParseResult} from \"papaparse\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n Drawer,\n Button, TextInput,\n Group, Divider,\n} from '@mantine/core';\nimport { Dropzone, MIME_TYPES } from '@mantine/dropzone';\nimport { useForm } from '@mantine/form';\nimport * as papa from 'papaparse'\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Table, Item} from \"./Table\";\n\n/**\n * MemberItem\n */\nexport type MemberItem = Item\n\n/**\n * ClassProps\n */\nexport type ClassProps = {\n loading: boolean\n displayName: string\n description: string\n members: MemberItem[]\n percentageOfAccountsCreated: number\n numberOfBadgesEarned: number\n numberOfLessonsCompleted: number\n\n onBackClick: () => void;\n onCreateMembers: (members: MemberItem[]) => void;\n onDeleteMember: (student: MemberItem) => void;\n onChangeUserRole: (user: MemberItem, role: string | null) => void;\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n\n}\n\n/**\n * Class. Chrome (header, actions, stat bar, table) is restyled to match the redesigned educator\n * sidebar/shell; the Add Students drawer (CSV bulk upload + manual entry) and its underlying\n * `onCreateMembers`/Dropzone/form logic are unchanged from before this round.\n * @param props\n * @constructor\n */\nexport const Class = (props: ClassProps) => {\n const [opened, setOpened] = useState(false);\n return (\n <>\n <Drawer\n opened={opened}\n onClose={() => setOpened(false)}\n title=\"Add students\"\n padding=\"xl\"\n size=\"xl\"\n >\n <DropzoneButton {...props} close={() => setOpened(false)} />\n </Drawer>\n\n <div className=\"mx-auto flex max-w-5xl flex-col gap-5 px-4 py-8\">\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n <div className=\"space-y-1.5\">\n <div onClick={props.onBackClick} className=\"flex w-max cursor-pointer items-center gap-1 text-xs font-bold text-sky-blue-400\">\n <IconArrowLeft size={13} stroke={2.5} />\n Back\n </div>\n <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">{props.displayName || \"Class\"}</h1>\n <p className=\"text-sm text-slate-500\">{props.description || \"No description\"}</p>\n </div>\n\n {!props.loading && (\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => setOpened(true)}\n className=\"flex items-center gap-1.5 rounded-lg border border-slate-200 bg-white px-3.5 py-2 text-xs font-bold text-slate-600 hover:bg-slate-50\"\n >\n <IconPlus size={13} stroke={2} />\n Add students\n </button>\n <button\n type=\"button\"\n onClick={props.onCopyLinkClick}\n className=\"flex items-center gap-1.5 rounded-lg border border-slate-200 bg-white px-3.5 py-2 text-xs font-bold text-slate-600 hover:bg-slate-50\"\n >\n <IconLink size={13} stroke={2} />\n Copy class link\n </button>\n <button\n type=\"button\"\n onClick={props.onExportDataClick}\n className=\"flex items-center gap-1.5 rounded-lg bg-gradient-to-r from-gold-400 to-[#f5c300] px-3.5 py-2 text-xs font-bold text-dark-blue-400 shadow-[0_3px_12px_rgba(255,212,77,0.35)]\"\n >\n <IconDownload size={13} stroke={2} />\n Export data (.csv)\n </button>\n </div>\n )}\n </div>\n\n <StatsGroup data={[\n {\n title: \"# OF STUDENTS\",\n value: props.members.filter(a => !a.isAdmin).length,\n },\n {\n title: \"ACCOUNT CREATION\",\n value: props.percentageOfAccountsCreated,\n unit: \"%\",\n },\n {\n title: \"BADGES EARNED\",\n value: props.numberOfBadgesEarned,\n },\n {\n title: \"LESSONS COMPLETED\",\n value: props.numberOfLessonsCompleted,\n },\n ]}/>\n\n <Table\n loading={props.loading}\n items={props.members}\n onDelete={props.onDeleteMember}\n onRoleChange={props.onChangeUserRole}\n />\n </div>\n </>\n )\n}\n\nconst DropzoneButton = (props: ClassProps & {close: () => void}) => {\n const form = useForm({\n initialValues: {\n classId: '',\n userId: '',\n email: '',\n givenName: '',\n familyName: '',\n avatar: '',\n role: '',\n readonly: false,\n lastActivity: null,\n hasAccount: false,\n lessonsCompleted: 0,\n badgesEarned: 0,\n href: \"\",\n isAdmin: false,\n },\n\n validate: {\n email: (value) => /^\\S+@\\S+$/.test(value) && props.members.filter(u => u.email === value).length === 0 ? null : 'Invalid email',\n },\n });\n const openRef = React.useRef<() => void>(null);\n const [loading, setLoading] = React.useState(false)\n const onDrop = React.useCallback((acceptedFiles: File[]) => {\n setLoading(true)\n acceptedFiles.forEach((file) => {\n papa.parse(file, {\n download: true,\n header: true,\n dynamicTyping: true,\n skipEmptyLines: true,\n worker: true,\n complete: function(results: ParseResult<MemberItem>) {\n const data = results.data\n .filter(v => /^\\S+@\\S+$/.test(v.email) && props.members.filter(u => u.email === v.email).length === 0)\n data.length > 0 && props.onCreateMembers && props.onCreateMembers(data)\n setLoading(false)\n props.close()\n }\n })\n })\n\n }, [])\n\n return (\n <div className=\"flex flex-col gap-4\">\n <Dropzone\n loading={loading}\n openRef={openRef}\n onDrop={onDrop}\n accept={[MIME_TYPES.csv]}\n maxSize={5 * 1024 ** 2}\n >\n <div style={{ pointerEvents: 'none' }}>\n <Group position=\"center\">\n <IconCloudUpload size={50} stroke={1.5} />\n </Group>\n\n <p className=\"mt-6 text-center text-lg font-bold text-dark-blue-400\">Upload multiple</p>\n <p className=\"mt-2 text-center text-sm text-slate-400\">\n Drag&apos;n&apos;drop files here to upload. We can accept only <i>.csv</i> files that\n are less than 5mb in size.\n </p>\n </div>\n </Dropzone>\n\n <div className=\"flex justify-center\">\n <button\n type=\"button\"\n onClick={() => openRef.current?.()}\n className=\"rounded-full bg-dark-blue-400 px-6 py-2.5 text-xs font-bold text-white\"\n >\n Select file\n </button>\n </div>\n\n <Divider label=\"or\" labelPosition=\"center\" my=\"md\" variant=\"dashed\"/>\n\n <form onSubmit={form.onSubmit(() => {\n const values = form.values\n form.reset()\n props.close()\n props.onCreateMembers && props.onCreateMembers([values])\n })}>\n <div className=\"flex flex-col gap-3\">\n <TextInput\n withAsterisk\n label=\"Email\"\n placeholder=\"Email\"\n {...form.getInputProps('email')}\n />\n <Group grow>\n <TextInput\n label=\"Given name\"\n placeholder=\"Given name\"\n {...form.getInputProps('givenName')}\n />\n <TextInput\n label=\"Family name\"\n placeholder=\"Family name\"\n {...form.getInputProps('familyName')}\n />\n </Group>\n <button\n type=\"submit\"\n className=\"mt-2 rounded-lg bg-dark-blue-400 px-4 py-2.5 text-xs font-bold text-white\"\n >\n Submit\n </button>\n </div>\n </form>\n </div>\n );\n}\n","import {openConfirmModal} from \"@mantine/modals\";\nimport * as React from 'react';\nimport { DataTable, DataTableSortStatus } from 'mantine-datatable';\nimport { Group, Text, ActionIcon, ScrollArea, UnstyledButton } from '@mantine/core';\nimport { IconTrash } from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {useSortableData} from \"../../utils/useSortableData\";\n\nexport type Item = { \n href: string, \n classId: string, \n name: string; \n description: string, \n numberOfStudents: number \n}\n\nexport interface TableProps {\n loading: boolean\n items: Item[];\n onDeleteClass: (item: Item) => void\n}\n\nexport function Table(props: TableProps) {\n // 1. Initialize sorting on the underlying data\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(props.items);\n\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No classes to display\"\n description=\"You don't have any classes yet. Try creating one first...\"\n loading={props.loading}\n icon=\"groups\"\n />\n }\n\n const openDeleteModal = (group: Item) => openConfirmModal({\n title: `Delete \"${group.name}\"?`,\n centered: true,\n children: (\n <Text size=\"sm\">\n Are you sure you want to delete this class? This action is destructive and you will have\n to contact support to restore your data.\n </Text>\n ),\n labels: { confirm: 'Delete class', cancel: \"No don't delete it\" },\n confirmProps: { color: 'red' },\n onConfirm: () => props.onDeleteClass(group),\n });\n\n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n };\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n withBorder={false}\n borderRadius=\"sm\"\n verticalSpacing=\"sm\"\n sx={{ minWidth: 700 }}\n highlightOnHover\n striped\n records={sortedItems}\n idAccessor=\"classId\"\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)}\n columns={[\n {\n accessor: 'name',\n title: 'Class Name',\n sortable: true,\n render: (row) => (\n <UnstyledButton<typeof Link> component={Link} to={row.href}>\n <Text size={14} weight={500}>\n {row.name}\n </Text>\n </UnstyledButton>\n ),\n },\n {\n accessor: 'description',\n title: 'Description',\n // Static column (no sortable: true)\n render: (row) =>\n <Text size={14}>\n {row.description}\n </Text>\n },\n {\n accessor: 'numberOfStudents',\n title: '# of Students',\n sortable: true,\n render: (row) =>\n <Text size={14}>\n {row.numberOfStudents || 0}\n </Text>\n },\n {\n accessor: 'actions',\n title: '',\n render: (row) => (\n <Group noWrap spacing={0} position=\"right\">\n <ActionIcon color=\"red\" onClick={() => openDeleteModal(row)}>\n <IconTrash size={16} stroke={1.5} />\n </ActionIcon>\n </Group>\n ),\n },\n ]}\n />\n </ScrollArea.Autosize>\n );\n}","import {IconInfoCircle, IconPlaylistAdd} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n createStyles,\n Badge,\n Title,\n Text,\n Container, Stack, Grid,\n Drawer,\n Button, TextInput, ActionIcon,\n Tooltip, Group, LoadingOverlay, Autocomplete,\n} from '@mantine/core';\nimport { useForm } from '@mantine/form';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Table, Item} from \"./Table\";\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n\n description: {\n maxWidth: 600,\n },\n}));\n\n/**\n * ClassItem\n */\nexport type ClassItem = Item\n\n/**\n * ClassesProps\n */\nexport type ClassesProps = {\n loading: boolean\n classes: ClassItem[]\n\n onCreateClass: (group: ClassItem) => void\n onDeleteClass: (group: ClassItem) => void\n onAutocompleteChange: (next: string) => void\n}\n\n/**\n * Classes\n * @param props\n * @constructor\n */\nexport const Classes = (props: ClassesProps) => {\n const { classes } = useStyles();\n const form = useForm({\n initialValues: {\n classId: '',\n name: '',\n description: '',\n href: '',\n numberOfStudents: 0,\n },\n\n validate: {\n name: (val) => (val.length <= 6 ? 'Name should include at least 6 characters' : null),\n },\n });\n const [opened, setOpened] = useState(false);\n return (\n <>\n <Drawer\n opened={opened}\n onClose={() => setOpened(false)}\n title={<Group spacing={0}>\n <Title size=\"h5\">Create a class</Title>\n <Tooltip label=\"Classes settings cannot be modified once created\">\n <ActionIcon>\n <IconInfoCircle color=\"#3b82f6\" size={14} />\n </ActionIcon>\n </Tooltip>\n </Group>}\n padding=\"xl\"\n size=\"xl\"\n >\n <form onSubmit={form.onSubmit(() => {\n const values = form.values\n form.reset()\n setOpened(false)\n props.onCreateClass && props.onCreateClass(values)\n })}>\n <Stack>\n <TextInput\n withAsterisk\n label=\"Name\"\n placeholder=\"Class name\"\n {...form.getInputProps('name')}\n />\n <TextInput\n label=\"Description\"\n placeholder=\"A class for my first period English students\"\n {...form.getInputProps('description')}\n />\n </Stack>\n <Button type=\"submit\" fullWidth mt=\"md\">\n Submit\n </Button>\n </form>\n </Drawer>\n <Container size=\"lg\" py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <Badge variant=\"filled\" size=\"lg\">\n Classes\n </Badge>\n <Title order={2} className={classes.title} mt=\"md\">\n Organize people into classes\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">\n Create classes, cohorts, or custom subgroups\n </Text>\n </Grid.Col>\n <Grid.Col sm=\"content\">\n { !props.loading && <Button\n onClick={() => setOpened(true)}\n leftIcon={<IconPlaylistAdd size={14} />}>\n Create class\n </Button> }\n </Grid.Col>\n </Grid>\n\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n <Stack spacing=\"sm\">\n <StatsGroup data={[\n {\n title: \"# OF CLASSES\",\n value: props.classes.length,\n },\n ]}/>\n\n <Autocomplete\n placeholder=\"Search for classes\"\n data={props.classes.map(item => item.name)}\n onChange={props.onAutocompleteChange}\n />\n\n <Table\n loading={props.loading}\n items={props.classes}\n onDeleteClass={props.onDeleteClass}\n />\n </Stack>\n </div>\n </Stack>\n </Container>\n </>\n )\n}","import * as React from 'react';\nimport {Avatar, Text, Paper, Blockquote, Title, createStyles, Stack} from '@mantine/core';\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n marginTop: 16,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n description: {\n maxWidth: 600,\n },\n}));\n\nexport type UserInfoProps = {\n variant?: \"compact\"\n name: string\n impactStatement: string\n}\n\n/**\n * UserInfo\n * @constructor\n * @param props\n */\nexport const UserInfo = (props: UserInfoProps) => {\n const { classes } = useStyles();\n return <>\n <Title className={classes.title}>\n {props.name}\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"xs\">\n {props.impactStatement}\n </Text>\n </>\n}","import {DataTable} from \"mantine-datatable\";\nimport * as React from 'react';\nimport {ScrollArea, Badge, Text} from '@mantine/core';\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n badgeId: string\n badgeName: string\n isComplete?: boolean\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No badges to display\"\n description=\"There has not been any badge progress just yet.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n verticalSpacing=\"sm\"\n sx={{ minWidth: 700 }}\n withBorder={false}\n borderRadius=\"sm\"\n withColumnBorders\n striped\n highlightOnHover\n records={props.items}\n idAccessor=\"badgeId\"\n columns={[{\n accessor: 'name',\n title: 'Badge Name',\n render: (row: Item) => (\n <>\n <Text>{row.badgeName}</Text>\n </>\n ),\n },{\n accessor: 'status',\n render: (row: Item) => (\n <>\n {!!row.isComplete && <Badge variant=\"filled\">Complete</Badge>}\n {!row.isComplete && <Badge color=\"red\" variant=\"filled\">Incomplete</Badge>}\n </>\n )\n }]}\n />\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport {Table as MantineTable, ScrollArea, Text} from '@mantine/core';\nimport {Link} from \"react-router-dom\";\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n lessonId: string\n lessonName: string\n questionName: string\n answer: string[]\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No answers to display\"\n description=\"There has not been any lesson progress just yet.\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n const rows = props.items.map((row) => (\n <tr key={row.questionName}>\n <td><Text<typeof Link> component={Link} to={row.href}>{row.lessonName}</Text></td>\n <td>{row.questionName}</td>\n <td>{row.answer.join(\",\")}</td>\n </tr>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <MantineTable verticalSpacing=\"sm\" sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Lesson Name</th>\n <th>Question</th>\n <th>Answer</th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport {Table as MantineTable, ScrollArea, Text} from '@mantine/core';\nimport {Link} from \"react-router-dom\";\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n lessonId: string\n lessonName: string\n reflection: string\n rating: number\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No reflections to display\"\n description=\"There has not been any lesson progress just yet.\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n const rows = props.items.map((row) => (\n <tr key={row.lessonName}>\n <td><Text<typeof Link> component={Link} to={row.href}>{row.lessonName}</Text></td>\n <td>{row.reflection}</td>\n <td>{row.rating.toLocaleString()}</td>\n </tr>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <MantineTable verticalSpacing=\"sm\" sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Lesson Name</th>\n <th>Reflection</th>\n <th>Rating</th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea.Autosize>\n );\n}","import {ActionIcon, Badge, Container, Grid, LoadingOverlay, Stack, UnstyledButton} from \"@mantine/core\";\nimport {IconArrowLeft} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from \"react\";\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Tabs} from \"../../components/navigation/Tabs/Tabs\";\nimport {UserInfo} from \"../../components/users/UserInfo/UserInfo\";\nimport {Table as BadgeTable, Item as BadgeItem} from \"./BadgeTable\"\nimport {Table as AnswerTable, Item as AnswerItem} from \"./AnswerTable\"\nimport {Table as ReflectionTable, Item as ReflectionItem} from \"./ReflectionTable\"\n\n/**\n * StudentProps\n */\nexport type StudentProps = {\n loading: boolean\n name: string\n impactStatement: string\n numberOfProblemsSolved: number\n percentageOfLessonsCompleted: number\n numberOfLessonsCompleted: number\n badges: BadgeItem[],\n lessons: LessonItem[],\n answers: AnswerItem[],\n reflections: ReflectionItem[],\n\n onBackClick: () => void\n}\ntype LessonItem = {\n lessonId: string\n lessonName: string\n isComplete: boolean\n}\nexport const Student = (props: StudentProps) => {\n const [tab, setTab] = useState(\"badges\")\n const numberOfBadgesCompleted = props.badges.length > 0 ? props.badges.filter(b => b.isComplete).length : 0\n const TEMPORARY_numberOfLessonsCompleted = props.lessons.filter(l => l.isComplete).length\n\n // const percentageOfBadgesEarned = numberOfBadges > 0 ? props.badges.filter(b => b.isComplete).length / numberOfBadges : 0\n\n return <Container size=\"lg\" py=\"xl\">\n <Stack spacing=\"md\">\n <Grid gutter=\"md\">\n <Grid.Col sm=\"auto\">\n <UnstyledButton onClick={props.onBackClick}>\n <Badge\n variant=\"filled\"\n leftSection={<ActionIcon color=\"blue\" size=\"xs\" radius=\"xl\" variant=\"filled\">\n <IconArrowLeft size={14} />\n </ActionIcon>}\n size=\"lg\">\n Back\n </Badge>\n </UnstyledButton>\n\n <UserInfo\n variant=\"compact\"\n name={props.name}\n impactStatement={props.impactStatement}\n />\n </Grid.Col>\n </Grid>\n\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n <Stack spacing=\"lg\">\n <StatsGroup data={[\n {\n title: \"PROBLEMS SOLVED\",\n value: props.numberOfProblemsSolved,\n },\n {\n title: \"LESSON COMPLETION\",\n value: TEMPORARY_numberOfLessonsCompleted,\n unit: \"\"\n },\n {\n title: \"BADGE COMPLETION\",\n value: numberOfBadgesCompleted,\n unit: \"\"\n },\n ]}/>\n\n <Stack spacing={0}>\n <Tabs\n value={tab}\n data={[\n {label: \"My badges\", value: \"badges\"},\n {label: \"My answers\", value: \"answers\"},\n {label: \"My reflections\", value: \"reflections\"},\n ]}\n onChange={setTab}\n />\n\n { tab === \"badges\" && <BadgeTable\n loading={props.loading}\n items={props.badges}\n /> }\n\n { tab === \"answers\" && <AnswerTable\n loading={props.loading}\n items={props.answers}\n /> }\n\n { tab === \"reflections\" && <ReflectionTable\n loading={props.loading}\n items={props.reflections}\n /> }\n </Stack>\n </Stack>\n </div>\n </Stack>\n </Container>\n}","import * as React from 'react';\nimport { createStyles, Paper, Text, ThemeIcon } from '@mantine/core';\nimport { IconColorSwatch } from '@tabler/icons';\n\nconst useStyles = createStyles((theme, props: CardGradientProps) => {\n const from = props.from || 'blue'\n const to = props.to || 'green'\n return {\n card: {\n position: 'relative',\n cursor: 'pointer',\n overflow: 'hidden',\n transition: 'transform 150ms ease, box-shadow 100ms ease',\n padding: theme.spacing.xl,\n paddingLeft: theme.spacing.xl * 2,\n\n '&:hover': {\n boxShadow: theme.shadows.md,\n transform: 'scale(1.02)',\n },\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n width: 6,\n backgroundImage: theme.fn.linearGradient(0, theme.colors[from][6], theme.colors[to][6]),\n },\n },\n }\n});\n\nexport type CardGradientProps = {\n title: string;\n description: string;\n onClick: () => void;\n icon?: React.ReactNode\n from?: string\n to?: string\n}\n\nexport function CardGradient(props: CardGradientProps) {\n const { classes } = useStyles(props);\n const from = props.from || 'blue'\n const to = props.to || 'green'\n const icon = props.icon || <IconColorSwatch size={28} stroke={1.5} />\n return (\n <Paper withBorder radius=\"md\" className={classes.card} onClick={props.onClick}>\n <ThemeIcon\n size=\"xl\"\n radius=\"md\"\n variant=\"gradient\"\n gradient={{ deg: 0, from, to }}\n >\n {icon}\n </ThemeIcon>\n <Text size=\"xl\" weight={500} mt=\"md\">\n {props.title}\n </Text>\n <Text size=\"sm\" mt=\"sm\" color=\"dimmed\">\n {props.description}\n </Text>\n </Paper>\n );\n}","import * as React from \"react\";\nimport { Card, CardProps, createStyles, Overlay, Text, Group, Button } from \"@mantine/core\";\nimport { showNotification } from \"@mantine/notifications\";\n\nconst useStyles = createStyles((theme) => ({\n card: {\n height: 240,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n whiteSpace: 'pre-line'\n },\n\n content: {\n position: 'absolute',\n padding: theme.spacing.xl,\n zIndex: 1,\n top: 0,\n bottom: 0,\n right: 0,\n left: 0,\n },\n\n title: {\n color: theme.white,\n marginBottom: theme.spacing.xs / 2,\n },\n\n description: {\n color: theme.white,\n maxWidth: 220,\n },\n code: {\n color: theme.white,\n maxWidth: 220,\n },\n}));\n\ninterface TenantBannerProps {\n title: string;\n description: string;\n image: string;\n code?: string;\n}\n\n/**\n * TenantBanner\n * @param title\n * @param description\n * @param image\n * @param style\n * @param className\n * @param code\n * @param others\n * @constructor\n */\nexport const TenantBanner = ({\n title,\n description,\n image,\n style,\n className,\n code,\n ...others\n }: TenantBannerProps & Omit<CardProps, keyof TenantBannerProps | 'children'>) => {\n const { classes, cx, theme } = useStyles();\n const handleCopy = async () => {\n if (!code) return;\n \n try {\n await navigator.clipboard.writeText(code);\n showNotification({\n title: \"Copied!\",\n message: \"Community code copied to clipboard.\",\n autoClose: 3000,\n });\n } catch (err) {\n console.error(\"Failed to copy code\", err);\n }\n };\n\n return (\n <Card\n radius=\"md\"\n style={{ backgroundImage: `url(${image})`, ...style }}\n className={cx(classes.card, className)}\n {...others}\n >\n <Overlay\n gradient={`linear-gradient(105deg, ${theme.black} 20%, #312f2f 50%, ${theme.colors.gray[6]} 100%)`}\n opacity={0.55}\n zIndex={0}\n />\n\n <div className={classes.content}>\n <Text size=\"lg\" weight={700} className={classes.title}>\n {title}\n </Text>\n\n <Text size=\"sm\" className={classes.description}>\n {description}\n </Text>\n \n \n <Group mt=\"sm\" spacing=\"xs\">\n <Text size=\"sm\" className={classes.code}>\n Community Code: {code || \"—\"}\n </Text>\n\n {code && (\n <Button\n size=\"xs\"\n variant=\"white\"\n onClick={handleCopy}\n styles={{\n root: {\n backgroundColor: \"rgba(255,255,255,0.9)\",\n },\n }}\n >\n Copy\n </Button>\n )}\n </Group>\n </div>\n </Card>\n );\n}","import * as React from 'react';\nimport {Container, Grid, Stack} from '@mantine/core';\nimport {CardGradient} from \"../../components/cards/CardGradient\";\nimport {UserInfo} from \"../../components/users/UserInfo/UserInfo\";\nimport {TenantBanner} from \"../../components/banners/TenantBanner/TenantBanner\";\n\n/**\n * HomeProps\n */\nexport type HomeProps = {\n loading: boolean\n avatarURL: string\n name: string\n impactStatement: string\n organization: {name: string, description: string, image: string, website: string, accessCode: string}\n\n onDashboardClick: () => void;\n onClassesClick: () => void;\n onPathwaysClick: () => void;\n onBadgesClick: () => void;\n onLessonsClick: () => void;\n onFileLockerClick: () => void;\n\n}\n\n/**\n * Home\n * @param props\n * @constructor\n */\nexport const Home = (props: HomeProps) => {\n return <Container size=\"lg\">\n <Stack spacing=\"lg\">\n <Grid gutter=\"md\">\n <Grid.Col md={6}>\n <UserInfo\n variant=\"compact\"\n name={props.name}\n impactStatement={props.impactStatement}\n />\n </Grid.Col>\n <Grid.Col md={6}>\n <TenantBanner\n title={props.organization.name}\n description={props.organization.description}\n image={props.organization.image}\n code={props.organization.accessCode}\n />\n </Grid.Col>\n </Grid>\n\n <Grid gutter=\"md\">\n <Grid.Col>\n <CardGradient\n title=\"Dashboard\"\n description=\"Track your students’ pathway progress\"\n onClick={props.onDashboardClick}\n />\n </Grid.Col>\n <Grid.Col>\n <CardGradient\n title=\"Classes\"\n description=\"Create classes, cohorts, or custom subgroups\"\n onClick={props.onClassesClick}\n />\n </Grid.Col>\n <Grid.Col>\n <CardGradient\n title=\"Pathways\"\n description=\"Explore all your unique pathway requirements in one clear space\"\n onClick={props.onPathwaysClick}\n />\n </Grid.Col>\n <Grid.Col>\n <CardGradient\n title=\"Badges\"\n description=\"Key milestones that reflect skill development, micro-credentials, or academic progress\"\n onClick={props.onBadgesClick}\n />\n </Grid.Col>\n <Grid.Col>\n <CardGradient\n title=\"Lessons\"\n description=\"Bite-sized activities and learning experiences accelerating students achievement\"\n onClick={props.onLessonsClick}\n />\n </Grid.Col>\n <Grid.Col>\n <CardGradient\n title=\"File Locker\"\n description=\"A secure space to view student-submitted work and provide feedback\"\n onClick={props.onFileLockerClick}\n />\n </Grid.Col>\n </Grid>\n </Stack>\n </Container>\n}","import * as React from 'react';\nimport { DataTable, DataTableSortStatus } from \"mantine-datatable\";\nimport { ScrollArea } from '@mantine/core';\nimport { PlaceholderBanner } from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport { useSortableData } from \"../../utils/useSortableData\";\n\n/**\n * Item\n */\nexport interface Item {\n studentName: string\n reflection: string\n rating: number\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableMethods\n */\nexport type TableMethods = {}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & TableMethods\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(props.items);\n\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No reflections to display\"\n description=\"There has not been any lesson progress just yet.\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n };\n \n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n records={sortedItems} // sorted items instead of props.items\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)}\n columns={[\n { accessor: 'studentName', title: 'Student Name', sortable: true },\n { accessor: 'reflection', title: 'Reflection' },\n { accessor: 'rating', title: 'Rating', sortable: true },\n ]}\n />\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react'\nimport { createStyles, Button, Menu, Group, ActionIcon, Stack } from '@mantine/core';\nimport {\n IconChevronDown,\n IconClipboardCopy, IconTableExport\n} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\n\nconst useStyles = createStyles((theme) => ({\n button: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n marginLeft: 0,\n marginRight: 0,\n },\n\n menuControl: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n border: 0,\n borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark[7] : theme.white}`,\n },\n}));\n\nexport type SplitButtonProps = {\n href: string\n noExport?: boolean\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\nexport const SplitButton = (props: SplitButtonProps) => {\n const { classes, theme } = useStyles();\n const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === 'dark' ? 5 : 6];\n\n return (\n <Stack spacing=\"sm\">\n <Button<typeof Link> component={Link} to={props.href}\n className={classes.button}\n variant=\"gradient\"\n >\n Preview\n </Button>\n <Button\n variant=\"gradient\"\n leftIcon={<IconClipboardCopy size={14} />}\n onClick={props.onCopyLinkClick}\n >\n Copy link\n </Button>\n <Button\n leftIcon={<IconTableExport size={14} />}\n onClick={props.onExportDataClick}\n >\n Export data (.csv)\n </Button>\n </Stack>\n );\n}","import * as React from 'react';\nimport {Stack as MantineStack, UnstyledButton, ScrollArea, Title, Text} from '@mantine/core';\nimport { Link } from 'react-router-dom';\n\n/**\n * Item\n */\nexport interface Item {\n questionName: string\n answer: string[]\n}\n\n/**\n * StackData\n */\nexport type StackData = {\n href: string\n items: Item[]\n}\n\n/**\n * StackMethods\n */\nexport type StackMethods = {}\n\n/**\n * StackProps\n */\nexport type StackProps = StackData & StackMethods\n\n/**\n * Stack\n * @constructor\n * @param props\n */\nexport function Stack(props: StackProps) {\n if(props.items.length === 0){\n return null\n }\n\n const rows = props.items.map((row) => (\n <MantineStack spacing={0} key={row.questionName}>\n <Title color=\"dark.4\" size=\"lg\">{row.questionName}</Title>\n <Text>{row.answer.join(\",\") || \"No answer.\"}</Text>\n </MantineStack>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <UnstyledButton<typeof Link> component={Link} to={props.href}>\n <MantineStack spacing={24} sx={{ padding: 20, minWidth: 700 }}>\n {rows}\n </MantineStack>\n </UnstyledButton>\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport {\n Avatar,\n Badge,\n Group,\n Text,\n ScrollArea,\n UnstyledButton,\n} from '@mantine/core';\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {Stack as AnswerStack, Item as AnswerItem} from \"./AnswerStack\"\nimport { DataTable, DataTableSortStatus } from \"mantine-datatable\";\nimport { useSortableData } from \"../../utils/useSortableData\";\n\n/**\n * Item\n */\nexport interface Item {\n userId: string\n avatar: string\n name: string\n email: string\n answers: AnswerItem[]\n isStarted?: boolean\n isComplete?: boolean\n href: string\n}\n\n/**\n * TableProps\n */\nexport interface TableProps {\n loading: boolean\n items: Item[];\n}\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n const preparedItems = React.useMemo(() => {\n return props.items.map(item => ({\n ...item,\n status: item.isComplete ? 2 : (item.isStarted ? 1 : 0),\n }));\n }, [props.items]);\n\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);\n \n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n }; \n\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No students to display\"\n description=\"You don't have any student data yet for this lesson\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n verticalSpacing=\"sm\"\n sx={{ minWidth: 700 }}\n withBorder={false}\n borderRadius=\"sm\"\n withColumnBorders\n striped\n highlightOnHover\n idAccessor=\"userId\"\n records={sortedItems}\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)}\n columns={[{\n accessor: 'name',\n title: 'Student Name',\n sortable: true,\n render: (row: Item) => (\n <UnstyledButton>\n <Group spacing=\"sm\">\n <Avatar size={40} src={row.avatar} radius={40}/>\n <div>\n <Text size=\"sm\" weight={500}>\n {row.name}\n </Text>\n <Text size=\"xs\" color=\"dimmed\">\n {row.email}\n </Text>\n </div>\n </Group>\n </UnstyledButton>\n ),\n },{\n accessor: 'status',\n title: 'Status',\n sortable: true,\n render: (row: Item) => (\n <>\n {!!row.isComplete && <Badge variant=\"filled\">Complete</Badge>}\n {!row.isComplete && !row.isStarted && <Badge color=\"red\" variant=\"filled\">Not started</Badge>}\n {!row.isComplete && !!row.isStarted && <Badge color=\"violet\" variant=\"filled\">In progress</Badge>}\n </>\n )\n }]}\n rowExpansion={{\n content: ({ record }: {record: Item}) => (\n <AnswerStack href={record.href} items={record.answers}/>\n ),\n }}\n />\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport {Stack as MantineStack, ScrollArea, Title, Text, Card} from '@mantine/core';\nimport {Chart, AxisOptions} from \"react-charts\";\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n question: string\n answers: string[][]\n choices?: string[]\n chart?: boolean\n}\n\n/**\n * StackData\n */\nexport type StackData = {\n loading: boolean\n items: Item[]\n}\n\n\n/**\n * StackProps\n */\nexport type StackProps = StackData\n\n/**\n * Stack\n * @constructor\n * @param props\n */\nexport function Stack(props: StackProps) {\n const primaryAxis = React.useMemo<\n AxisOptions<{primary: string, secondary: string}>\n >(\n () => ({\n position: \"left\",\n getValue: (datum) => datum.primary,\n }),\n []\n );\n\n const secondaryAxes = React.useMemo<\n AxisOptions<{primary: string, secondary: string}>[]\n >(\n () => [\n {\n position: \"bottom\",\n getValue: (datum) => datum.secondary,\n },\n ],\n []\n );\n\n\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No questions to display\"\n description=\"There are no questions in this lesson.\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n const rows = props.items.map((row) => {\n if(row.chart){\n const labelMap: any = {}\n const choices = row.choices || []\n choices.forEach(c => {\n labelMap[c] = 0\n })\n\n row.answers.forEach(a => a.forEach(r => {\n if(r in labelMap){\n labelMap[r] = labelMap[r] ? labelMap[r] + 1 : 1\n }\n }))\n\n return <Card key={row.question} withBorder p=\"xl\" radius=\"md\">\n <MantineStack spacing={4}>\n <Title size=\"lg\">{row.question}</Title>\n <Text size=\"sm\">{row.answers.length} answers</Text>\n\n <div style={{ background: \"white\", height: \"300px\", width: \"100%\", position: 'relative' }}>\n <Chart\n options={{\n data: [{\n label: '',\n data: choices.map(k => {\n return {\n primary: truncateWithEllipses(k, 50),\n secondary: labelMap[k]\n }\n }),\n }],\n primaryAxis,\n secondaryAxes,\n }}\n />\n </div>\n </MantineStack>\n </Card>\n }\n\n return <Card key={row.question} withBorder p=\"xl\" radius=\"md\">\n <MantineStack spacing={4}>\n <Title size=\"lg\">{row.question}</Title>\n <Text size=\"sm\">{row.answers.length} answers</Text>\n\n <ScrollArea.Autosize maxHeight={600}>\n <MantineStack spacing={4}>\n {\n row.answers.map(a => {\n const answerText = a.join(\"\\n\")\n return <Card key={answerText} p={5} radius={0} bg=\"gray.0\">\n <Text>{answerText}</Text>\n </Card>\n })\n }\n </MantineStack>\n </ScrollArea.Autosize>\n </MantineStack>\n </Card>\n });\n\n\n return <MantineStack py={4} spacing={10} sx={{ minWidth: 700 }}>\n {rows}\n </MantineStack>\n}\n\nconst truncateWithEllipses = (text: string, max: number) => text.substr(0,max-1)+(text.length>max?'&hellip;':'')","import {IconArrowLeft, IconCategory2} from \"@tabler/icons\";\nimport AvatarInit from \"avatar-initials\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n createStyles,\n Badge,\n Title,\n Text,\n Container, Stack, Grid,\n Select, ActionIcon, Group,\n LoadingOverlay,\n UnstyledButton, Avatar,\n} from '@mantine/core';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Tabs} from \"../../components/navigation/Tabs/Tabs\";\nimport {compact} from \"../../utils/numbers\";\nimport {Item as ReflectionItem, Table as ReflectionTable} from \"./ReflectionTable\";\nimport {SplitButton} from \"./SplitButton\";\nimport {Table, Item} from \"./Table\";\nimport {Stack as QuestionStack, Item as QuestionItem} from \"./QuestionStack\";\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n\n description: {\n maxWidth: 600,\n },\n}));\n\n/**\n * LessonUserItem\n */\nexport type LessonUserItem = Item\n\n/**\n * LessonClass\n */\nexport type LessonClass = {\n classId: string\n name: string\n active: boolean\n}\n\n/**\n * LessonProps\n */\nexport type LessonProps = {\n loading: boolean\n displayName: string\n description: string\n href: string\n classId: string\n classes: LessonClass[]\n students: LessonUserItem[]\n reflections: ReflectionItem[],\n questions: QuestionItem[],\n trial?: boolean\n lessonsCompleted?: number\n contributors?: {name: string}[]\n\n onBackClick: () => void;\n onClassChange: (classId: string) => void;\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\n/**\n * Lesson\n * @param props\n * @constructor\n */\nexport const Lesson = (props: LessonProps) => {\n const { classes } = useStyles();\n const [tab, setTab] = useState(\"question\")\n\n const numberOfStudents = props.students.length\n const numberOfLessons = numberOfStudents > 0 ? props.students.filter(u => u.isComplete).length : 0\n const percentageOfLessonsCompleted = numberOfStudents > 0 ? props.students.filter(u => u.isComplete).length / numberOfStudents : 0\n const contributors = props.contributors || []\n const avatars = contributors.slice(0, 5).map((u, i) => {\n const fullName = u.name\n let initials = fullName.split(/[ -]/).map((n) => n.charAt(0)).join('');\n const src = AvatarInit.initialAvatar({\n background: '#1c7ed6',\n color: '#fff',\n fontFamily: \"'Lato', 'Lato-Regular', 'Helvetica Neue'\",\n fontSize: 10,\n fontWeight: 250,\n size: 30,\n initials: initials,\n })\n\n return <Avatar key={i} src={src} radius=\"xl\" />\n })\n\n const remainingUsers = contributors.slice(5).length\n if(remainingUsers){\n const initials = \"+\" + compact(remainingUsers)\n const src = AvatarInit.initialAvatar({\n background: '#1c7ed6',\n color: '#fff',\n fontFamily: \"'Lato', 'Lato-Regular', 'Helvetica Neue'\",\n fontSize: 10,\n fontWeight: 250,\n size: 30,\n initials: initials,\n })\n\n avatars.push(<Avatar src={src} radius=\"xl\" />)\n }\n\n const tabs = props.trial ? [\n {label: \"By question\", value: \"question\"},\n {label: \"By student\", value: \"students\"},\n ] : [\n {label: \"By question\", value: \"question\"},\n {label: \"By student\", value: \"students\"},\n {label: \"By reflection\", value: \"reflections\"},\n ]\n\n return (\n <Container size=\"lg\" py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <UnstyledButton onClick={props.onBackClick}>\n <Badge\n variant=\"filled\"\n leftSection={<ActionIcon color=\"blue\" size=\"xs\" radius=\"xl\" variant=\"filled\">\n <IconArrowLeft size={14} />\n </ActionIcon>}\n size=\"lg\">\n Back\n </Badge>\n </UnstyledButton>\n <Group>\n <Stack spacing={0}>\n <Title order={2} className={classes.title} mt=\"md\">\n {props.displayName || \"Lesson\"}\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">\n {props.description || \"No description\"}\n </Text>\n </Stack>\n\n <Stack ml=\"auto\">\n <SplitButton\n href={props.href}\n noExport={props.trial}\n onCopyLinkClick={props.onCopyLinkClick}\n onExportDataClick={props.onExportDataClick}\n />\n </Stack>\n </Group>\n </Grid.Col>\n </Grid>\n <div>\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n <Stack>\n <StatsGroup\n data={[\n {\n title: props.trial ? \"# OF SUBMISSIONS\" : \"LESSON COMPLETION\",\n value: props.trial ? props.lessonsCompleted || 0 : numberOfLessons,\n unit: props.trial ? '' : '',\n },\n ]}\n />\n\n <Group position=\"apart\">\n <Avatar.Group spacing=\"sm\">\n {avatars}\n </Avatar.Group>\n </Group>\n\n {!props.trial && <Select\n clearable\n clearButtonLabel=\"Clear class selection\"\n size=\"sm\"\n placeholder=\"Select a class\"\n nothingFound=\"No options\"\n value={props.classId}\n onChange={props.onClassChange}\n icon={<IconCategory2/>}\n data={props.classes.map(g => {return {value: g.classId, label: g.name}})}\n />}\n\n <Stack spacing={0}>\n <Tabs\n value={tab}\n data={tabs}\n onChange={setTab}\n />\n\n { tab === \"question\" && <QuestionStack\n loading={props.loading}\n items={props.questions}\n />}\n\n { tab === \"reflections\" && <ReflectionTable\n loading={props.loading}\n items={props.reflections}\n /> }\n\n { tab === \"students\" && <Table\n loading={props.loading}\n items={props.students}\n />}\n </Stack>\n </Stack>\n </div>\n </div>\n </Stack>\n </Container>\n )\n}","import * as React from 'react';\nimport { Table as MantineTable, Group, Text, ScrollArea, UnstyledButton } from '@mantine/core';\nimport {Link} from \"react-router-dom\";\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n lessonId: string,\n name: string;\n description: string\n href: string\n}\n\n/**\n * TableProps\n */\nexport interface TableProps {\n loading: boolean\n items: Item[];\n}\n\n/**\n * Table\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No lessons to display\"\n description=\"We don't have any lessons to show you just yet.\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n const rows = props.items.map((row) => (\n <tr key={row.lessonId}>\n <td>\n <UnstyledButton<typeof Link> component={Link} to={row.href}\n sx={(theme) => ({\n display: 'block',\n width: '100%',\n padding: theme.spacing.md,\n color: theme.colorScheme === 'dark' ? theme.colors.dark[0] : theme.black,\n\n '&:hover': {\n backgroundColor:\n theme.colorScheme === 'dark' ? theme.colors.dark[8] : theme.colors.gray[1],\n },\n })}>\n <Group>\n <div>\n <Text size=\"sm\" weight={500}>\n {row.name}\n </Text>\n <Text size=\"xs\" color=\"dimmed\">\n {row.description}\n </Text>\n </div>\n </Group>\n </UnstyledButton>\n </td>\n </tr>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <MantineTable horizontalSpacing={0} verticalSpacing={0} sx={{ minWidth: 700 }}>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport {\n createStyles,\n Badge,\n Title,\n Text,\n Container, Stack, Grid, Autocomplete, LoadingOverlay,\n} from '@mantine/core';\nimport {Table, Item} from \"./Table\";\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n\n description: {\n maxWidth: 600,\n },\n}));\n\n/**\n * LessonItem\n */\nexport type LessonItem = Item\n\n/**\n * LessonsProps\n */\nexport type LessonsProps = {\n loading: boolean\n lessons: LessonItem[]\n\n onAutocompleteChange: (next: string) => void\n}\n\n/**\n * Lessons\n * @param props\n * @constructor\n */\nexport const Lessons = (props: LessonsProps) => {\n const { classes } = useStyles();\n return (\n <Container size=\"lg\" py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <Badge variant=\"filled\" size=\"lg\">\n Lessons\n </Badge>\n <Title order={2} className={classes.title} mt=\"md\">\n Lessons\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">\n Bite-sized activities and learning experiences accelerating students achievement\n </Text>\n </Grid.Col>\n </Grid>\n\n <Autocomplete\n placeholder=\"Search for a lesson that fits your needs\"\n data={props.lessons.map(item => item.name)}\n onChange={props.onAutocompleteChange}\n />\n\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n <Table\n loading={props.loading}\n items={props.lessons}\n />\n </div>\n </Stack>\n </Container>\n )\n}","import * as React from 'react';\nimport {\n createStyles,\n Paper,\n Title,\n Text,\n TextInput,\n Button,\n Container,\n Group,\n Anchor,\n Center,\n Box,\n} from '@mantine/core';\nimport {IconPointer} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 22,\n fontWeight: 900,\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n },\n\n controls: {\n [theme.fn.smallerThan('xs')]: {\n flexDirection: 'column-reverse',\n },\n },\n\n control: {\n [theme.fn.smallerThan('xs')]: {\n width: '100%',\n textAlign: 'center',\n },\n },\n}));\n\nexport type AccessCodeProps = {\n value: string\n peopleLink: string\n onCopyCode: () => void;\n}\n\nexport function AccessCode(props: AccessCodeProps) {\n const { classes } = useStyles();\n\n return (\n <Container mx=\"0\" px=\"0\" size={460} my={30}>\n <Title className={classes.title}>\n Access code\n </Title>\n <Text color=\"dimmed\" size=\"sm\">\n Grant access to join your organization\n </Text>\n\n <Paper withBorder shadow=\"md\" p={30} radius=\"md\" mt=\"xl\">\n <TextInput value={props.value} readOnly/>\n <Group position=\"apart\" mt=\"lg\" className={classes.controls}>\n <Anchor<typeof Link> component={Link} to={props.peopleLink}\n color=\"dimmed\" size=\"sm\" className={classes.control}>\n <Center inline>\n <IconPointer size={12} stroke={1.5} />\n <Box ml={5}>See people in my organization</Box>\n </Center>\n </Anchor>\n <Button onClick={props.onCopyCode} className={classes.control}>Copy code</Button>\n </Group>\n </Paper>\n </Container>\n );\n}","import {IconArrowLeft} from \"@tabler/icons\";\nimport * as React from 'react';\nimport {\n createStyles,\n Title,\n Text,\n Container, Stack, Grid,\n Badge,\n ActionIcon,\n LoadingOverlay,\n UnstyledButton,\n} from '@mantine/core';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {AccessCode} from \"./AccessCode\";\n\nconst monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n];\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n description: {\n maxWidth: 600,\n },\n wrapper: {\n position: 'relative',\n marginBottom: 30,\n },\n\n dropzone: {\n borderWidth: 1,\n paddingBottom: 50,\n },\n\n icon: {\n color: theme.colorScheme === 'dark' ? theme.colors.dark[3] : theme.colors.gray[4],\n },\n\n control: {\n position: 'absolute',\n width: 250,\n left: 'calc(50% - 125px)',\n bottom: -20,\n },\n}));\n\n/**\n * OrganizationProps\n */\nexport type OrganizationProps = {\n loading: boolean\n displayName: string\n description: string\n numberOfStudents: number\n numberOfEducators: number\n percentageOfAccountsActive: number\n accessCode: string\n peopleLink: string\n\n onBackClick: () => void;\n onCopyAccessCode: () => void;\n}\n\n/**\n * Organization\n * @param props\n * @constructor\n */\nexport const Organization = (props: OrganizationProps) => {\n const { classes } = useStyles();\n return (\n <>\n <Container size=\"lg\" py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <UnstyledButton onClick={props.onBackClick}>\n <Badge\n variant=\"filled\"\n leftSection={<ActionIcon color=\"blue\" size=\"xs\" radius=\"xl\" variant=\"filled\">\n <IconArrowLeft size={14} />\n </ActionIcon>}\n size=\"lg\">\n Back\n </Badge>\n </UnstyledButton>\n <Title order={2} className={classes.title} mt=\"md\">\n {props.displayName || \"Overview\"}\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">\n {props.description || \"No description\"}\n </Text>\n </Grid.Col>\n </Grid>\n\n <AccessCode value={props.accessCode} onCopyCode={props.onCopyAccessCode} peopleLink={props.peopleLink} />\n\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n\n <Stack spacing=\"sm\">\n <StatsGroup data={[\n {\n title: \"# OF STUDENTS\",\n value: props.numberOfStudents || 0,\n },\n {\n title: \"# OF EDUCATORS\",\n value: props.numberOfEducators || 0,\n },\n {\n title: `ACTIVE USERS (${monthNames[(new Date()).getMonth()]})`,\n value: props.percentageOfAccountsActive,\n unit: \"%\",\n },\n ]}/>\n </Stack>\n </div>\n </Stack>\n </Container>\n </>\n )\n}","import * as React from 'react'\nimport { createStyles, Button, Menu, Group, ActionIcon } from '@mantine/core';\nimport {\n IconChevronDown,\n IconPlaylistAdd,\n IconClipboardCopy\n} from '@tabler/icons';\n\nconst useStyles = createStyles((theme) => ({\n button: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n marginLeft: 0,\n marginRight: 0,\n },\n\n menuControl: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n border: 0,\n borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark[7] : theme.white}`,\n },\n}));\n\nexport type SplitButtonProps = {\n withOrganizationLink?: boolean\n onAddUsersClick: () => void;\n onCopyOrganizationLinkClick: () => void;\n}\n\nexport const SplitButton = (props: SplitButtonProps) => {\n const { classes, theme } = useStyles();\n const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === 'dark' ? 5 : 6];\n\n const hasMenu = !!props.withOrganizationLink\n\n return (\n <Group noWrap spacing={0}>\n <Button\n className={hasMenu ? classes.button: \"\"}\n leftIcon={<IconPlaylistAdd size={14} />}\n onClick={props.onAddUsersClick}\n >\n Add members\n </Button>\n { hasMenu && <Menu transition=\"pop\" position=\"bottom-end\">\n <Menu.Target>\n <ActionIcon\n variant=\"filled\"\n color={theme.primaryColor}\n size={36}\n className={classes.menuControl}\n >\n <IconChevronDown size={16} stroke={1.5} />\n </ActionIcon>\n </Menu.Target>\n <Menu.Dropdown>\n { !!props.withOrganizationLink && <Menu.Item\n icon={<IconClipboardCopy size={16} stroke={1.5} color={menuIconColor} />}\n onClick={props.onCopyOrganizationLinkClick}\n >\n Copy organization link\n </Menu.Item> }\n </Menu.Dropdown>\n </Menu> }\n </Group>\n );\n}","import {openConfirmModal} from \"@mantine/modals\";\nimport * as React from 'react';\nimport {\n Avatar,\n Table as MantineTable,\n Group,\n Text,\n ActionIcon,\n UnstyledButton,\n ScrollArea,\n Select,\n Box\n} from '@mantine/core';\nimport {IconCheck, IconTrash} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {relativeTimeFromDates} from \"../../utils/time\";\n\n/**\n * Item\n */\nexport type Item = {\n userId: string,\n avatar: string,\n email: string,\n givenName: string,\n familyName: string,\n lastActivity: Date | null\n readonly: boolean\n hasAccount: boolean\n isAdmin: boolean\n isGroupAdmin: boolean\n numberOfClasses: number\n href: string\n}\n\n/**\n * TableProps\n */\nexport interface TableProps {\n loading: boolean\n items: Item[];\n\n onDelete?: (user: Item) => void\n onRoleChange?: (user: Item, role: string | null) => void;\n}\n\n/**\n * Table\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No people to display\"\n description=\"You have not rostered any people yet.\"\n loading={props.loading}\n icon=\"groups\"\n />\n }\n\n const openDeleteModal = (student: Item) => openConfirmModal({\n title: `Remove \"${student.givenName && student.familyName ? `${student.givenName} ${student.familyName}` : student.email}\" from this class?`,\n centered: true,\n children: (\n <Text size=\"sm\">\n Click confirm if you want to remove the student from this specific class. This will NOT remove the student from the Tech Platform.\n </Text>\n ),\n labels: { confirm: 'Remove Student', cancel: \"Cancel\" },\n confirmProps: { color: 'red' },\n onConfirm: () => props.onDelete && props.onDelete(student),\n });\n\n const rows = props.items.map((row) => (\n <tr key={row.email}>\n <td>\n <UnstyledButton<typeof Link> component={Link} to={row.href}>\n <Group spacing=\"sm\">\n <Avatar size={40} src={row.avatar} radius={40} />\n <div>\n <Text size=\"sm\" weight={500}>\n {row.givenName && row.familyName ? `${row.givenName} ${row.familyName}` : row.email}\n </Text>\n <Text size=\"xs\" color=\"dimmed\">\n {row.email}\n </Text>\n </div>\n </Group>\n </UnstyledButton>\n </td>\n <td>\n <Box maw={150}>\n <Select\n size=\"sm\"\n value={row.isAdmin ? \"admin\" : row.isGroupAdmin ? \"educator\" : \"student\"}\n onChange={(value) => props.onRoleChange && props.onRoleChange(row, value)}\n data={[{value: \"student\", label: \"Student\"}, {value: \"educator\", label: \"Educator\"}, {value: \"admin\", label: \"Admin\"}]}\n />\n </Box>\n </td>\n <td>{row.hasAccount && <IconCheck color=\"green\" />}</td>\n <td>{row.numberOfClasses}</td>\n {/* <td>{row.lastActivity ? relativeTimeFromDates(row.lastActivity) : \"\"}</td> */}\n <td>\n <Group noWrap spacing={0} position=\"right\">\n { !row.readonly && !!props.onDelete && <ActionIcon color=\"red\">\n <IconTrash onClick={() => openDeleteModal(row)} size={16} stroke={1.5} />\n </ActionIcon> }\n </Group>\n </td>\n </tr>\n ));\n\n return (\n <ScrollArea>\n <MantineTable verticalSpacing={20} sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Name</th>\n <th>Role</th>\n <th>Account Created?</th>\n <th># of Classes</th>\n {/* <th>Last Active</th> */}\n <th></th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea>\n );\n}","import {IconArrowLeft, IconCloudUpload, IconX, IconDownload} from \"@tabler/icons\";\nimport {ParseResult} from \"papaparse\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n createStyles,\n Title,\n Text,\n Container, Stack, Grid,\n Drawer,\n Button, TextInput, Badge,\n ActionIcon,\n Group, Divider, LoadingOverlay, Autocomplete,\n UnstyledButton,\n} from '@mantine/core';\nimport { Dropzone, MIME_TYPES } from '@mantine/dropzone';\nimport { useForm } from '@mantine/form';\nimport * as papa from 'papaparse'\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {SplitButton} from \"./SplitButton\";\nimport {Table, Item} from \"./Table\";\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n description: {\n maxWidth: 600,\n },\n wrapper: {\n position: 'relative',\n marginBottom: 30,\n },\n\n dropzone: {\n borderWidth: 1,\n paddingBottom: 50,\n },\n\n icon: {\n color: theme.colorScheme === 'dark' ? theme.colors.dark[3] : theme.colors.gray[4],\n },\n\n control: {\n position: 'absolute',\n width: 250,\n left: 'calc(50% - 125px)',\n bottom: -20,\n },\n}));\n\n/**\n * UserItem\n */\nexport type UserItem = Item\n\n/**\n * PeopleProps\n */\nexport type PeopleProps = {\n loading: boolean\n users: UserItem[]\n percentageOfAccountsCreated: number\n percentageRostered: number\n withOrganizationLink?: boolean\n\n onBackClick: () => void;\n onCreateUsers: (users: UserItem[]) => void;\n onDeleteUser: (user: UserItem) => void;\n onChangeUserRole: (user: UserItem, role: string | null) => void;\n onCopyLinkClick: () => void;\n onAutocompleteChange: (next: string) => void\n}\n\n/**\n * Class\n * @param props\n * @constructor\n */\nexport const People = (props: PeopleProps) => {\n const { classes } = useStyles();\n const form = useForm({\n initialValues: {\n userId: '',\n email: '',\n givenName: '',\n familyName: '',\n avatar: '',\n role: '',\n readonly: false,\n lastActivity: null,\n hasAccount: false,\n numberOfClasses: 0,\n href: \"\",\n isAdmin: false,\n isGroupAdmin: false,\n },\n\n validate: {\n email: (value) => /^\\S+@\\S+$/.test(value) && props.users.filter(u => u.email === value).length === 0 ? null : 'Invalid email',\n },\n });\n const [opened, setOpened] = useState(false);\n return (\n <>\n <Drawer\n opened={opened}\n onClose={() => setOpened(false)}\n title={<Title size=\"h5\">Add members</Title>}\n padding=\"xl\"\n size=\"xl\"\n >\n <Stack spacing=\"md\">\n <DropzoneButton {...props} close={() => setOpened(false)} />\n\n <Divider label=\"or\" labelPosition=\"center\" my=\"md\" variant=\"dashed\"/>\n\n <form onSubmit={form.onSubmit(() => {\n const values = form.values\n form.reset()\n setOpened(false)\n props.onCreateUsers && props.onCreateUsers([values])\n })}>\n <Stack>\n <TextInput\n withAsterisk\n label=\"Email\"\n placeholder=\"Email\"\n {...form.getInputProps('email')}\n />\n <Group grow>\n <TextInput\n label=\"Given name\"\n placeholder=\"Given name\"\n {...form.getInputProps('givenName')}\n />\n <TextInput\n label=\"Family name\"\n placeholder=\"Family name\"\n {...form.getInputProps('familyName')}\n />\n </Group>\n <Button type=\"submit\" fullWidth mt=\"md\">\n Submit\n </Button>\n </Stack>\n </form>\n </Stack>\n </Drawer>\n <Container size=\"lg\" py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <UnstyledButton onClick={props.onBackClick}>\n <Badge\n variant=\"filled\"\n leftSection={<ActionIcon color=\"blue\" size=\"xs\" radius=\"xl\" variant=\"filled\">\n <IconArrowLeft size={14} />\n </ActionIcon>}\n size=\"lg\">\n Back\n </Badge>\n </UnstyledButton>\n <Title order={2} className={classes.title} mt=\"md\">People</Title>\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">Manage members of your organization</Text>\n </Grid.Col>\n <Grid.Col sm=\"content\">\n { !props.loading && <SplitButton\n withOrganizationLink={props.withOrganizationLink}\n onAddUsersClick={() => setOpened(true)}\n onCopyOrganizationLinkClick={props.onCopyLinkClick}\n />}\n </Grid.Col>\n </Grid>\n\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n\n <Stack spacing=\"sm\">\n <StatsGroup data={[\n {\n title: \"# OF PEOPLE\",\n value: props.users.length,\n },\n {\n title: \"ACCOUNT CREATION\",\n value: props.percentageOfAccountsCreated,\n unit: \"%\",\n },\n {\n title: \"PERCENTAGE ROSTERED\",\n unit: \"%\",\n value: props.percentageRostered,\n },\n ]}/>\n\n <Autocomplete\n placeholder=\"Search for a people in your organization\"\n data={props.users.map(item => item.email)}\n onChange={props.onAutocompleteChange}\n />\n\n <Table\n loading={props.loading}\n items={props.users}\n onDelete={props.onDeleteUser}\n onRoleChange={props.onChangeUserRole}\n />\n </Stack>\n </div>\n </Stack>\n </Container>\n </>\n )\n}\n\nconst DropzoneButton = (props: PeopleProps & {close: () => void}) => {\n const { classes, theme } = useStyles();\n const openRef = React.useRef<() => void>(null);\n const [loading, setLoading] = React.useState(false)\n const onDrop = React.useCallback((acceptedFiles: File[]) => {\n setLoading(true)\n acceptedFiles.forEach((file) => {\n papa.parse(file, {\n download: true,\n header: true,\n dynamicTyping: true,\n skipEmptyLines: true,\n worker: true,\n complete: function(results: ParseResult<UserItem>) {\n const data = results.data\n .filter(v => /^\\S+@\\S+$/.test(v.email) && props.users.filter(u => u.email === v.email).length === 0)\n data.length > 0 && props.onCreateUsers && props.onCreateUsers(data)\n setLoading(false)\n props.close()\n }\n })\n })\n\n }, [])\n\n return (\n <div className={classes.wrapper}>\n <Dropzone\n loading={loading}\n openRef={openRef}\n onDrop={onDrop}\n className={classes.dropzone}\n radius=\"md\"\n accept={[MIME_TYPES.csv]}\n maxSize={5 * 1024 ** 2}\n >\n <div style={{ pointerEvents: 'none' }}>\n <Group position=\"center\">\n <Dropzone.Accept>\n <IconDownload size={50} color={theme.colors[theme.primaryColor][6]} stroke={1.5} />\n </Dropzone.Accept>\n <Dropzone.Reject>\n <IconX size={50} color={theme.colors.red[6]} stroke={1.5} />\n </Dropzone.Reject>\n <Dropzone.Idle>\n <IconCloudUpload\n size={50}\n color={theme.colorScheme === 'dark' ? theme.colors.dark[0] : theme.black}\n stroke={1.5}\n />\n </Dropzone.Idle>\n </Group>\n\n <Text align=\"center\" weight={700} size=\"lg\" mt=\"xl\">\n <Dropzone.Accept>Drop files here</Dropzone.Accept>\n <Dropzone.Reject>Csv file less than 5mb</Dropzone.Reject>\n <Dropzone.Idle>Upload multiple</Dropzone.Idle>\n </Text>\n <Text align=\"center\" size=\"sm\" mt=\"xs\" color=\"dimmed\">\n Drag&apos;n&apos;drop files here to upload. We can accept only <i>.csv</i> files that\n are less than 5mb in size.\n </Text>\n </div>\n </Dropzone>\n\n <Button className={classes.control} size=\"md\" radius=\"xl\" onClick={() => openRef.current?.()}>\n Select file\n </Button>\n </div>\n );\n}","import * as React from \"react\";\nimport { createStyles, Text, Title, TextInput, Button, Group, Container, SimpleGrid, Badge } from \"@mantine/core\";\n\nconst useStyles = createStyles((theme) => ({\n form: {\n backgroundColor: theme.white,\n padding: theme.spacing.xl,\n border: `1px solid ${theme.colorScheme === \"dark\" ? theme.colors.dark[8] : theme.colors.gray[3]}`,\n borderRadius: theme.radius.md,\n boxShadow: theme.shadows.md,\n minWidth: 300,\n height: \"fit-content\",\n },\n\n wrapper: {\n position: \"relative\",\n paddingTop: 180,\n paddingBottom: 130,\n },\n\n content: {\n maxWidth: 480,\n marginRight: theme.spacing.xl * 3,\n\n [theme.fn.smallerThan(\"md\")]: {\n maxWidth: \"100%\",\n marginRight: 0,\n },\n },\n\n title: {\n color: theme.colorScheme === \"dark\" ? theme.white : theme.black,\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n fontSize: 44,\n lineHeight: 1.2,\n fontWeight: 900,\n\n [theme.fn.smallerThan(\"xs\")]: {\n fontSize: 28,\n },\n },\n\n control: {\n [theme.fn.smallerThan(\"xs\")]: {\n flex: 1,\n },\n },\n\n image: {\n flex: 1,\n\n [theme.fn.smallerThan(\"md\")]: {\n display: \"none\",\n },\n },\n\n highlight: {\n position: \"relative\",\n backgroundColor: theme.fn.variant({ variant: \"light\", color: theme.primaryColor }).background,\n borderRadius: theme.radius.sm,\n padding: \"4px 12px\",\n },\n\n input: {\n backgroundColor: theme.white,\n borderColor: theme.colors.gray[4],\n color: theme.black,\n\n \"&::placeholder\": {\n color: theme.colors.gray[5],\n },\n },\n\n inputLabel: {\n color: theme.black,\n },\n}));\n\n/**\n * StartAnonymousLessonProps\n */\nexport type StartAnonymousLessonProps = {\n title: string;\n description: string;\n educatorName: string;\n studentName?: string;\n onStart: (name: string) => void;\n};\n\n/**\n * StartAnonymousLesson\n * @param props\n * @constructor\n */\nexport const StartAnonymousLesson = (props: StartAnonymousLessonProps) => {\n const { classes } = useStyles();\n const [name, setName] = React.useState(\"\");\n\n return (\n <div className={classes.wrapper}>\n <Container>\n <SimpleGrid maw={960} cols={2} spacing={15} breakpoints={[{ maxWidth: \"sm\", cols: 1 }]}>\n <div className={classes.content}>\n <Badge color=\"violet\">Community</Badge>\n <Title className={classes.title}>{props.title}</Title>\n <Text color=\"dimmed\" mt=\"md\">\n {props.description}\n </Text>\n <Text color=\"dimmed\" mt=\"md\">\n You are now part of {`${props.educatorName}'s`} Class\n </Text>\n </div>\n <div className={classes.form}>\n <TextInput\n label=\"Name\"\n placeholder=\"John Doe\"\n defaultValue={props.studentName}\n readOnly={!!props.studentName}\n required\n onChange={(e) => setName(e.target.value)}\n classNames={{ input: classes.input, label: classes.inputLabel }}\n />\n\n <Group position=\"right\" mt=\"md\">\n <Button\n disabled={!name && !props.studentName}\n onClick={() => props.onStart(name)}\n className={classes.control}\n >\n {!props.studentName ? \"Start lesson\" : \"Continue lesson\"}\n </Button>\n </Group>\n </div>\n </SimpleGrid>\n </Container>\n </div>\n );\n};\n","import * as React from \"react\";\nimport {Card, Text, SimpleGrid, UnstyledButton, Button} from '@mantine/core';\nimport {IconClipboardCopy} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\n\n/**\n * BadgeGridProps\n */\nexport type BadgeGridProps = {\n badges: TaskCardProps[]\n onAssign: (taskId: string) => void;\n}\n\n/**\n * BadgeGrid\n * @param props\n * @constructor\n */\nexport const BadgeGrid = (props: BadgeGridProps) => {\n const badges = props.badges.map(b => <TaskCard key={b.title} {...b}/>)\n return <SimpleGrid cols={4} breakpoints={[{ maxWidth: 'sm', cols: 1 }, { maxWidth: 'md', cols: 3 }]}>\n {badges}\n </SimpleGrid>\n}\n\nexport type TaskCardProps = {\n taskId: string\n title: string\n description: string\n href: string\n onAssign: (taskId: string) => void;\n}\n\nexport function TaskCard(props: TaskCardProps) {\n return (\n <Card withBorder radius=\"md\">\n <UnstyledButton<typeof Link> component={Link} to={props.href} sx={{\":hover\": {textDecoration: \"underline\"}}}>\n <Text size=\"md\" weight={500}>\n {props.title}\n </Text>\n </UnstyledButton>\n\n <Text size=\"sm\" color=\"dimmed\" mt={5} mb={25} h={125} sx={{overflowY: \"scroll\"}}>\n {props.description}\n </Text>\n\n <Button\n variant=\"gradient\"\n size=\"xs\"\n leftIcon={<IconClipboardCopy size={14} />}\n onClick={() => props.onAssign(props.taskId)}\n >\n Assign\n </Button>\n </Card>\n );\n}","import * as React from 'react';\nimport {Badge, Button, Container, createStyles, Stack, Title} from '@mantine/core';\nimport {BadgeGrid, BadgeGridProps} from \"../../components/grid/BadgeGrid/BadgeGrid\";\nimport {UserInfo} from \"../../components/users/UserInfo/UserInfo\";\nimport {TenantBanner} from \"../../components/banners/TenantBanner/TenantBanner\";\n\nconst useStyles = createStyles((theme) => ({\n action: {\n backgroundColor: \"inherit\",\n \":hover\": {\n textDecoration: \"underline\"\n },\n },\n title: {\n color: theme.colorScheme === 'dark' ? theme.white : theme.black,\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n fontSize: theme.fontSizes.xl,\n lineHeight: 1.5,\n fontWeight: 900,\n\n [theme.fn.smallerThan('xs')]: {\n fontSize: theme.fontSizes.md,\n },\n },\n}));\n\n/**\n * TrialHomeProps\n */\nexport type TrialHomeProps = BadgeGridProps & {\n loading: boolean\n name: string\n firstName: string\n daysRemaining: number\n upgradeHref: string\n}\n\n/**\n * TrialHome\n * @param props\n * @constructor\n */\nexport const TrialHome = (props: TrialHomeProps) => {\n const { classes } = useStyles();\n return <Container size=\"lg\">\n <Badge>{props.daysRemaining} day{props.daysRemaining !== 1 ? \"s\" : \"\"} left</Badge>\n <Button\n className={classes.action}\n variant=\"white\"\n component=\"a\"\n size=\"xs\"\n href={props.upgradeHref}\n target=\"_blank\"\n >\n UPGRADE NOW\n </Button>\n <Stack spacing=\"sm\">\n <Stack spacing={0}>\n <UserInfo\n variant=\"compact\"\n name={props.name}\n impactStatement=\"\"\n />\n <TenantBanner\n title=\"Trial Account\"\n description={`Welcome to your Local Civics Trial Account${props.firstName ? \", \" + props.firstName : \"\"}!`}\n image=\"https://cdn.localcivics.io/hub/landing.jpg\"\n />\n </Stack>\n <Title maw={500} mb={20} mt={20} className={classes.title}>\n Based on the tags you selected, check out these lessons to get started with your students!\n </Title>\n <BadgeGrid onAssign={props.onAssign} badges={props.badges}/>\n </Stack>\n </Container>\n}","import {TablerIcon} from \"@tabler/icons\";\nimport * as React from \"react\";\nimport {UnstyledButton, Checkbox, Text, SimpleGrid, createStyles, ThemeIcon} from '@mantine/core';\nimport { useUncontrolled } from '@mantine/hooks';\n\nconst useStyles = createStyles((theme, { checked }: { checked: boolean }) => ({\n button: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n transition: 'background-color 150ms ease, border-color 150ms ease',\n border: `1px solid ${\n checked\n ? theme.fn.variant({ variant: 'outline', color: theme.primaryColor }).border\n : theme.colorScheme === 'dark'\n ? theme.colors.dark[8]\n : theme.colors.gray[3]\n }`,\n borderRadius: theme.radius.sm,\n padding: theme.spacing.md,\n paddingTop: theme.spacing.sm,\n paddingBottom: theme.spacing.sm,\n backgroundColor: checked\n ? theme.fn.variant({ variant: 'light', color: theme.primaryColor }).background\n : theme.colorScheme === 'dark'\n ? theme.colors.dark[8]\n : theme.white,\n },\n\n body: {\n flex: 1,\n marginLeft: theme.spacing.md,\n },\n}));\n\ninterface ImageCheckboxProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?(checked: boolean): void;\n title: string;\n description: string;\n icon: TablerIcon;\n}\n\nexport function ImageCheckbox({\n checked,\n defaultChecked,\n onChange,\n title,\n description,\n className,\n icon: Icon,\n ...others\n }: ImageCheckboxProps & Omit<React.ComponentPropsWithoutRef<'button'>, keyof ImageCheckboxProps>) {\n const [value, handleChange] = useUncontrolled({\n value: checked,\n defaultValue: defaultChecked,\n finalValue: false,\n onChange,\n });\n\n const { classes, cx } = useStyles({ checked: value });\n\n return (\n <UnstyledButton\n {...others}\n onClick={() => handleChange(!value)}\n className={cx(classes.button, className)}\n >\n <ThemeIcon variant=\"light\" size=\"lg\" color=\"blue\">\n <Icon size={25}/>\n </ThemeIcon>\n\n <div className={classes.body}>\n <Text weight={500} size=\"sm\" sx={{ lineHeight: 1 }}>\n {title}\n </Text>\n </div>\n\n <Checkbox\n checked={value}\n onChange={() => {}}\n tabIndex={-1}\n styles={{ input: { cursor: 'pointer' } }}\n />\n </UnstyledButton>\n );\n}\n\nexport type SelectGridProps = {\n items: {description: string, title: string, icon: TablerIcon}[]\n onChange: (title: string, checked: boolean) => void;\n}\n\nexport function SelectGrid(props: SelectGridProps) {\n const items = props.items.map((item) => <ImageCheckbox\n {...item}\n key={item.title}\n onChange={(checked) => props.onChange(item.title, checked)}\n />);\n return (\n <SimpleGrid\n cols={2}\n breakpoints={[\n { maxWidth: 'md', cols: 2 },\n { maxWidth: 'sm', cols: 1 },\n ]}\n >\n {items}\n </SimpleGrid>\n );\n}","import * as React from \"react\";\nimport {\n createStyles,\n Text,\n Title,\n SimpleGrid,\n TextInput,\n Button,\n Group,\n Image, Autocomplete,\n} from '@mantine/core';\nimport {\n IconPodium,\n IconTools,\n IconNews,\n IconSchool,\n IconScribble,\n IconBackpack,\n IconPresentation,\n IconBriefcase\n} from '@tabler/icons';\nimport {SelectGrid} from \"../../components/grid/SelectGrid/SelectGrid\";\n\nconst useStyles = createStyles((theme) => ({\n wrapper: {\n minHeight: '100%',\n boxSizing: 'border-box',\n backgroundImage: `linear-gradient(-60deg, #4e5561 0%, #222a39 100%)`,\n padding: theme.spacing.xl * 2.5,\n\n [`@media (max-width: ${theme.breakpoints.sm}px)`]: {\n padding: theme.spacing.xl * 1.5,\n },\n },\n\n title: {\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n fontSize: 50,\n color: theme.white,\n lineHeight: 1,\n maxWidth: 500,\n },\n\n description: {\n color: theme.colors[theme.primaryColor][0],\n maxWidth: 500,\n\n [`@media (max-width: ${theme.breakpoints.sm}px)`]: {\n maxWidth: '100%',\n },\n },\n\n form: {\n backgroundColor: theme.white,\n padding: theme.spacing.xl,\n borderRadius: theme.radius.md,\n boxShadow: theme.shadows.lg,\n },\n\n social: {\n color: theme.white,\n\n '&:hover': {\n color: theme.colors[theme.primaryColor][1],\n },\n },\n\n input: {\n backgroundColor: theme.white,\n borderColor: theme.colors.gray[4],\n color: theme.black,\n\n '&::placeholder': {\n color: theme.colors.gray[5],\n },\n },\n\n inputLabel: {\n color: theme.black,\n },\n\n control: {\n backgroundColor: theme.colors[theme.primaryColor][6],\n },\n}));\n\nconst OPTIONS = [\n { description: 'elementary', title: 'Elementary (K-5)', icon: IconScribble},\n { description: 'middle', title: 'Middle (6-8)', icon: IconBackpack},\n { description: 'high school', title: 'High School (9-12)', icon: IconSchool},\n { description: 'college', title: 'College', icon: IconPodium },\n { description: 'career', title: 'Career', icon: IconBriefcase },\n { description: 'work-based learning', title: 'Work-Based Learning', icon: IconPresentation },\n { description: 'student leadership', title: 'Student Leadership', icon: IconPodium },\n { description: 'civics', title: 'Civics', icon: IconNews },\n { description: 'project-based learning', title: 'Project-Based Learning', icon: IconTools },\n]\n\n/**\n * TrialRegistrationProps\n */\nexport type TrialRegistrationProps = {\n organizations: {organizationId: string, displayName: string}[]\n onBegin: (data: NewTrialRegistration) => void\n onQueryOrganizations: (name: string) => void;\n}\n\nexport type NewTrialRegistration = {\n firstName: string\n lastName: string\n organizationId: string\n organizationName: string\n interests: string[]\n}\n\n/**\n * TrialRegistration\n * @param props\n * @constructor\n */\nexport const TrialRegistration = (props: TrialRegistrationProps) => {\n const { classes } = useStyles();\n const [firstName, setFirstName] = React.useState(\"\")\n const [lastName, setLastName] = React.useState(\"\")\n const [organization, setOrganization] = React.useState({organizationId: \"\", displayName: \"\"})\n const [interests, setInterests] = React.useState({})\n\n return (\n <div className={classes.wrapper}>\n <SimpleGrid maw={1300} ml=\"auto\" mr=\"auto\" cols={2} spacing={50} breakpoints={[{ maxWidth: 'md', cols: 1 }]}>\n <Group spacing=\"sm\">\n <Image\n height={200}\n width=\"auto\"\n fit=\"contain\"\n src=\"https://cdn.localcivics.io/brand/l.png\"\n />\n <div>\n <Title className={classes.title}>\n Are you an\n {\" \"}\n <Text\n component=\"span\"\n inherit\n variant=\"gradient\"\n gradient={{ from: 'pink', to: 'yellow' }}\n >\n educator\n </Text>\n {\" \"}\n interested in a free trial?\n </Title>\n <Text className={classes.description} mt=\"sm\">\n Try out a few of the features we can bring to your classroom. No commitment required.\n </Text>\n </div>\n </Group>\n <div className={classes.form}>\n <SimpleGrid cols={2} spacing={15} breakpoints={[{ maxWidth: 'sm', cols: 1 }]}>\n <TextInput\n label=\"First Name\"\n placeholder=\"Insert your first name\"\n required\n classNames={{ input: classes.input, label: classes.inputLabel }}\n onChange={(e) => setFirstName(e.target.value)}\n />\n <TextInput\n label=\"Last Name\"\n placeholder=\"Insert your last name\"\n required\n classNames={{ input: classes.input, label: classes.inputLabel }}\n onChange={(e) => setLastName(e.target.value)}\n />\n\n <Autocomplete\n label=\"School/Organization Name\"\n placeholder=\"What's the name of your school?\"\n data={props.organizations.map(o => {return {...o, value: o.displayName}})}\n onItemSubmit={(item) => setOrganization({organizationId: item.organizationId, displayName: item.displayName})}\n onChange={(next) => {\n setOrganization({organizationId: \"\", displayName: next})\n return props.onQueryOrganizations(next)\n }}\n />\n </SimpleGrid>\n\n <Text size={14} weight={500} mb=\"md\" mt=\"xl\">\n Where do you want to start? (Select as many as you want)\n </Text>\n <SelectGrid\n items={OPTIONS}\n onChange={(e, checked) => setInterests({...interests, [e]: checked})}\n />\n\n <Group position=\"right\" mt=\"md\">\n <Button\n disabled={!firstName || !lastName}\n onClick={() => props.onBegin({\n firstName,\n lastName,\n organizationId: organization.organizationId,\n organizationName: organization.displayName,\n interests: Object.keys(interests),\n })}\n className={classes.control}>Begin trial</Button>\n </Group>\n </div>\n </SimpleGrid>\n </div>\n );\n}","import * as React from 'react';\nimport {createEmotionCache, MantineProvider} from '@mantine/core';\nimport { ModalsProvider } from '@mantine/modals';\nimport {NotificationsProvider} from \"@mantine/notifications\";\n\nconst mycCache = createEmotionCache({\n key: 'mantine',\n prepend: false\n});\n\n/**\n * AdminProviderProps\n */\nexport interface AdminProviderProps {\n notificationLimit?: number\n children: React.ReactNode\n}\n\n/**\n * AdminProvider\n * @constructor\n * @param props\n */\nexport const AdminProvider = (props: AdminProviderProps) => {\n return <MantineProvider\n theme={{\n loader: \"bars\"\n }}\n withNormalizeCSS withGlobalStyles emotionCache={mycCache}>\n <NotificationsProvider limit={props.notificationLimit || 5}>\n <ModalsProvider>\n { props.children }\n </ModalsProvider>\n </NotificationsProvider>\n </MantineProvider>\n}","import {Loader, Center, ActionIcon, AppShell, Container, createStyles, Group, Image, Text, Title} from \"@mantine/core\";\nimport {IconBrandFacebook, IconBrandInstagram, IconBrandLinkedin} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport type {AccountItem} from \"../../components/users/SwitchAccount/SwitchAccount\";\nimport {SwitchAccount} from \"../../components/users/SwitchAccount/SwitchAccount\"\nimport {Navbar, NavbarProps} from \"../../components/navigation/Navbar/Navbar\";\n\nconst useStyles = createStyles((theme, props: AppProps) => ({\n footer: {\n paddingTop: theme.spacing.md,\n paddingBottom: theme.spacing.md,\n paddingLeft: props.navbar ? theme.spacing.md : 0,\n backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark[6] : theme.colors.gray[0],\n borderTop: `1px solid ${\n theme.colorScheme === 'dark' ? theme.colors.dark[5] : theme.colors.gray[2]\n }`,\n\n [theme.fn.largerThan('sm')]: {\n paddingTop: theme.spacing.xl * 2,\n paddingBottom: theme.spacing.xl * 2,\n paddingLeft: props.navbar ? theme.spacing.xl * 13 : 0,\n }\n },\n\n page: {\n [theme.fn.smallerThan('sm')]: {\n paddingTop: theme.spacing.xl * 3,\n }\n },\n\n logo: {\n maxWidth: 200,\n\n [theme.fn.smallerThan('sm')]: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n },\n\n description: {\n marginTop: 5,\n\n [theme.fn.smallerThan('sm')]: {\n marginTop: theme.spacing.xs,\n textAlign: 'center',\n },\n },\n\n inner: {\n display: 'flex',\n justifyContent: 'space-between',\n\n [theme.fn.smallerThan('sm')]: {\n flexDirection: 'column',\n alignItems: 'center',\n },\n },\n\n groups: {\n display: 'flex',\n flexWrap: 'wrap',\n\n [theme.fn.smallerThan('sm')]: {\n display: 'none',\n },\n },\n\n wrapper: {\n width: 160,\n },\n\n link: {\n display: 'block',\n color: theme.colorScheme === 'dark' ? theme.colors.dark[1] : theme.colors.gray[6],\n fontSize: theme.fontSizes.sm,\n paddingTop: 3,\n paddingBottom: 3,\n\n '&:hover': {\n textDecoration: 'underline',\n },\n },\n\n title: {\n fontSize: theme.fontSizes.md,\n fontWeight: 700,\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n marginBottom: theme.spacing.xs / 2,\n color: theme.colorScheme === 'dark' ? theme.white : theme.black,\n },\n\n afterFooter: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginTop: theme.spacing.xl,\n paddingTop: theme.spacing.xl,\n paddingBottom: theme.spacing.xl,\n borderTop: `1px solid ${\n theme.colorScheme === 'dark' ? theme.colors.dark[4] : theme.colors.gray[2]\n }`,\n\n [theme.fn.smallerThan('sm')]: {\n flexDirection: 'column',\n },\n },\n\n social: {\n [theme.fn.smallerThan('sm')]: {\n marginTop: theme.spacing.xs,\n },\n },\n}));\n\n/**\n * AppProps\n */\nexport type AppProps = {\n loading?: boolean\n account?: string\n accounts?: AccountItem[]\n\n navbar?: React.ReactElement<NavbarProps>\n page: React.ReactNode\n onAccountChange?: (account: string) => Promise<void>;\n}\n\n/**\n * App\n * @param props\n * @constructor\n */\nexport const App = (props: AppProps) => {\n const { classes } = useStyles(props);\n const account = useAccount(props.account, props.accounts, props.onAccountChange)\n return <AppShell\n padding=\"xs\"\n navbar={props.navbar && <Navbar\n {...props.navbar.props}\n onSwitchAccounts={account.accounts && account.accounts.length > 1 ? () => account.setChangeModalOpen(true) : undefined}\n />}\n footer={<>{!account.opened && <footer className={classes.footer}>\n <Container className={classes.inner}>\n <div className={classes.logo}>\n <Group spacing=\"xs\">\n <div style={{ width: 15 }}>\n <Image fit=\"contain\" src=\"https://cdn.localcivics.io/brand/l.png\"/>\n </div>\n <Title color=\"dimmed\" size=\"h5\">PathLink</Title>\n </Group>\n <Text size=\"xs\" color=\"dimmed\" className={classes.description}>\n We connect students to powerful civic learning experiences.\n </Text>\n </div>\n <div className={classes.groups}>\n <div className={classes.wrapper}>\n <Text\n className={classes.link}\n component=\"a\"\n href=\"https://www.localcivics.io\"\n target=\"_blank\"\n >\n About\n </Text>\n <Text\n className={classes.link}\n component=\"a\"\n href=\"https://www.localcivics.io/terms-of-service\"\n target=\"_blank\"\n >\n Terms\n </Text>\n <Text\n className={classes.link}\n component=\"a\"\n href=\"https://www.localcivics.io/privacy-policy\"\n target=\"_blank\"\n >\n Privacy\n </Text>\n <Text\n className={classes.link}\n component=\"a\"\n href=\"https://localcivics.notion.site/Help-Center-b52300f587b64fc0a61f512686e7626d\"\n target=\"_blank\"\n >\n Help Center\n </Text>\n </div>\n </div>\n </Container>\n <Container className={classes.afterFooter}>\n <Text color=\"dimmed\" size=\"sm\">\n © {new Date().getFullYear()} Local Civics. All rights reserved.\n </Text>\n\n <Group spacing={0} className={classes.social} position=\"right\" noWrap>\n <ActionIcon component=\"a\" target=\"_blank\" href=\"https://www.instagram.com/localcivics/\" size=\"lg\">\n <IconBrandInstagram size={18} stroke={1.5} />\n </ActionIcon>\n <ActionIcon component=\"a\" target=\"_blank\" href=\"https://www.linkedin.com/company/localcivics\" size=\"lg\">\n <IconBrandLinkedin size={18} stroke={1.5} />\n </ActionIcon>\n <ActionIcon component=\"a\" target=\"_blank\" href=\"https://www.facebook.com/localcivics/\" size=\"lg\">\n <IconBrandFacebook size={18} stroke={1.5} />\n </ActionIcon>\n </Group>\n </Container>\n </footer>}</>}\n styles={(theme) => ({\n main: { backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark[8] : theme.colors.gray[0] },\n })}\n >\n <div className={classes.page} style={{ position: 'relative' }}>\n { (props.loading || account.opened) && <Center style={{ height: 400 }}><Loader/></Center> }\n { (!props.loading && !account.opened) && props.page }\n </div>\n { !!account.accounts && !!account.account && <SwitchAccount\n opened={account.opened}\n loading={account.loading}\n account={account.account}\n accounts={account.accounts}\n onClick={account.onAccountChange}\n onClose={() => account.setChangeModalOpen(false)}\n />}\n </AppShell>\n}\n\nconst useAccount = (account?: string, accounts?: AccountItem[], onAccountChange?: (account: string) => Promise<void>) => {\n const accountsKey = JSON.stringify(accounts)\n const [changeModalOpen, setChangeModalOpen] = useState(false);\n const [active, setActive] = useState(account);\n const [loading, setLoading] = useState(false)\n\n React.useEffect(() => {\n setActive(account)\n }, [account, accountsKey])\n\n return {\n opened: changeModalOpen,\n account: active,\n accounts: accounts,\n loading,\n setChangeModalOpen,\n onAccountChange: (account: string) => {\n setLoading(true)\n if(!onAccountChange){\n return\n }\n\n onAccountChange(account).then(() => {\n setActive(account)\n setLoading(false)\n setChangeModalOpen(false)\n })\n }\n }\n}","import * as React from 'react';\nimport {Link} from \"react-router-dom\";\nimport {IconChevronRight} from \"@tabler/icons\";\n\n/**\n * Item\n */\nexport interface Item {\n badgeId: string,\n name: string;\n description: string\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[];\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n if (props.loading) {\n return <div className=\"text-sm text-slate-400\">Loading…</div>;\n }\n\n if (props.items.length === 0) {\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white p-8 text-center text-sm text-slate-400 shadow-sm\">\n No pathways to display.\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n {props.items.map((row) => (\n <Link\n key={row.badgeId}\n to={row.href}\n className=\"flex items-center gap-4 rounded-xl border border-slate-200 bg-white p-4 no-underline shadow-sm hover:bg-slate-50\"\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-bold text-dark-blue-400\">{row.name}</div>\n {row.description && <div className=\"mt-1 text-xs leading-relaxed text-slate-500\">{row.description}</div>}\n </div>\n <IconChevronRight size={16} stroke={2} className=\"shrink-0 text-slate-300\" />\n </Link>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport {Table, Item} from \"./Table\";\n\n/**\n * PathwaysItem\n */\nexport type PathwaysItem = Item\n\n/**\n * PathwaysProps\n */\nexport type PathwaysProps = {\n loading: boolean\n pathways: PathwaysItem[]\n}\n\n/**\n * PathwaysPage\n * @param props\n * @constructor\n */\nexport const Pathways = (props: PathwaysProps) => {\n return (\n <div className=\"mx-auto flex max-w-4xl flex-col gap-5 px-4 py-8\">\n <div className=\"space-y-1\">\n <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">Pathways</h1>\n <p className=\"text-sm text-slate-500\">Explore all your unique pathway requirements in one clear space</p>\n </div>\n\n <Table loading={props.loading} items={props.pathways} />\n </div>\n )\n}\n","import * as React from 'react'\nimport { createStyles, Button, Stack, Menu, Group, ActionIcon } from '@mantine/core';\nimport {\n IconChevronDown,\n IconPlaylistAdd,\n IconClipboardCopy, IconTableExport\n} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\n\nconst useStyles = createStyles((theme) => ({\n button: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n marginLeft: 0,\n marginRight: 0,\n },\n\n menuControl: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n border: 0,\n borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark[7] : theme.white}`,\n },\n}));\n\nexport type SplitButtonProps = {\n href: string\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\nexport const SplitButton = (props: SplitButtonProps) => {\n const { classes, theme } = useStyles();\n const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === 'dark' ? 5 : 6];\n\n return (\n <Stack spacing=\"sm\">\n <Button<typeof Link> component={Link} to={props.href}\n className={classes.button}\n variant=\"gradient\"\n >\n Preview\n </Button>\n <Button\n leftIcon={<IconClipboardCopy size={14} />}\n onClick={props.onCopyLinkClick}\n >\n Copy link\n </Button>\n <Button\n leftIcon={<IconTableExport size={14} />}\n onClick={props.onExportDataClick}\n >\n Export data (.csv)\n </Button>\n </Stack>\n );\n}","import * as React from 'react';\nimport {Grid, Badge, Text} from '@mantine/core';\nimport {Link} from \"react-router-dom\";\n\n/**\n * Item\n */\nexport interface Item {\n badgeName: string\n completion: number\n isStarted?: boolean\n href: string\n}\n\n/**\n * StackData\n */\nexport type StackData = {\n items: Item[]\n}\n\n/**\n * StackProps\n */\nexport type StackProps = StackData\n\n/**\n * Stack\n * @constructor\n * @param props\n */\nexport function Stack(props: StackProps) {\n if(props.items.length === 0){\n return null\n }\n\n const rows = props.items.map((row) => (\n <>\n <Grid.Col span={6}>\n <Text<typeof Link> component={Link} to={row.href} color=\"dark.4\" weight=\"bold\" size=\"md\">\n {row.badgeName}\n </Text>\n </Grid.Col>\n <Grid.Col span={6}>\n {row.completion >= 1 && <Badge variant=\"filled\">Complete</Badge>}\n {row.completion === 0 && !row.isStarted && <Badge color=\"red\" variant=\"filled\">Not started</Badge>}\n {row.completion > 0 && row.completion < 1 && <Badge color=\"violet\" variant=\"filled\">{Math.round((row.completion + Number.EPSILON) * 100)}% Complete</Badge>}\n </Grid.Col>\n </>\n ));\n\n return <Grid grow gutter=\"lg\" sx={{ padding: 20, minWidth: 700 }}>\n {rows}\n </Grid>\n}","import {DataTable, DataTableSortStatus} from \"mantine-datatable\";\nimport * as React from 'react';\nimport {Avatar, Group, Text, ScrollArea, Badge} from '@mantine/core';\nimport { IconSelector, IconChevronUp } from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\nimport { PlaceholderBanner } from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {Stack as BadgeStack, Item as BadgeItem} from \"./BadgeStack\";\nimport { useSortableData } from \"../../utils/useSortableData\";\n\n/**\n * Item\n */\nexport interface Item {\n userId: string\n avatar: string\n name: string\n email: string\n isComplete?: boolean\n badges: BadgeItem[]\n categoryPoints?: Record<string, number>\n [key: string]: any;\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n/**\n * Category\n */\nexport type Category = {\n categoryId: string\n name: string\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & {\n categories: Category[]\n}\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n const preparedItems = React.useMemo(() => {\n return (props.items || []).map(item => ({\n ...item,\n ...item.categoryPoints, // Spreads all category IDs and their point values\n }));\n }, [props.items]);\n\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);\n \n if(props.loading && props.items.length === 0){\n return <PlaceholderBanner\n title=\"No badges to display\"\n description=\"There has not been any badge progress just yet.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n\n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n };\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n verticalSpacing=\"sm\"\n sx={{ minWidth: 700 }}\n withBorder={false}\n borderRadius=\"sm\"\n withColumnBorders\n striped\n highlightOnHover\n records={sortedItems}\n idAccessor=\"userId\"\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)} // Added to trigger sort\n columns={[{\n accessor: 'name',\n title: 'Student Name',\n sortable: true,\n titleStyle: { whiteSpace: 'nowrap' as const }, // Prevents UI stacking\n render: (row: Item) => (\n <Group spacing=\"sm\" noWrap>\n <Avatar size={40} src={row.avatar} radius={40}/>\n <div>\n <Text size=\"sm\" weight={500}>\n {row.name}\n </Text>\n <Text size=\"xs\" color=\"dimmed\">\n {row.email}\n </Text>\n </div>\n </Group>\n ),\n },{\n accessor: 'isComplete',\n title: 'Status',\n sortable: true, \n titleStyle: { whiteSpace: 'nowrap' as const },\n render: (row: Item) => ( \n <Badge color={row.isComplete ? \"blue\" : \"red\"} variant=\"filled\">\n {row.isComplete ? \"Complete\" : \"Incomplete\"}\n </Badge>\n )\n },\n ...props.categories.map((category) => ({\n // Use dot notation: 'categoryPoints.ID'\n accessor: category.categoryId,\n title: category.name,\n sortable: true,\n titleStyle: { whiteSpace: 'nowrap' as const }, \n render: (row: any) => (\n <Badge color=\"blue\" variant=\"filled\">\n {row[category.categoryId] ?? 0} pts\n </Badge>\n )\n }))\n ]}\n rowExpansion={{\n content: ({ record }: {record: Item}) => (\n <BadgeStack items={record.badges}/>\n ),\n }}\n />\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport { ScrollArea, Text } from '@mantine/core';\nimport { DataTable, DataTableSortStatus } from 'mantine-datatable';\nimport { IconSelector, IconChevronUp } from '@tabler/icons';\nimport { Link } from \"react-router-dom\";\nimport { PlaceholderBanner } from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport { useSortableData } from \"../../utils/useSortableData\";\n\n/**\n * Item \n */\nexport interface Item {\n badgeId: string\n badgeName: string\n percentageCompletion: number\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(props.items);\n\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No badges to display\"\n description=\"There are no badges in this pathway.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n\n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n };\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n verticalSpacing=\"sm\"\n withBorder={false} \n borderRadius=\"sm\"\n sx={{ minWidth: 700 }}\n highlightOnHover\n striped\n records={sortedItems}\n idAccessor=\"badgeId\"\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)}\n columns={[\n {\n accessor: 'badgeName',\n title: 'Badge Name',\n sortable: true,\n render: (row) => (\n <Text<typeof Link> component={Link} to={row.href} \n sx={(theme) => ({\n color: theme.colorScheme === 'dark' ? theme.white : theme.black,\n textDecoration: 'none',\n fontWeight: 500,\n '&:hover': {\n textDecoration: 'underline', // Adds an underline only on hover for UX\n color: theme.colors.blue[6] // Optional: change color only on hover\n },\n })}\n >\n {row.badgeName}\n </Text>\n ),\n },\n {\n accessor: 'percentageCompletion',\n title: 'Badge Completion',\n sortable: true,\n render: (row) => {\n const roundedValue = Math.round((row.percentageCompletion + Number.EPSILON) * 100);\n return `${roundedValue}%`;\n },\n },\n ]}\n />\n </ScrollArea.Autosize>\n );\n}","import {IconArrowLeft, IconCategory2} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n createStyles,\n Badge as BadgeCore,\n Title,\n Text,\n Container, Stack, Grid,\n Select, ActionIcon, Group,\n LoadingOverlay,\n UnstyledButton,\n} from '@mantine/core';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Tabs} from \"../../components/navigation/Tabs/Tabs\";\nimport {SplitButton} from \"./SplitButton\";\nimport {Table, Item} from \"./Table\";\nimport {Table as BadgeTable, Item as BadgeItem} from \"./BadgeTable\";\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n\n description: {\n maxWidth: 600,\n },\n}));\n\n/**\n * PathwayUserItem\n */\nexport type PathwayUserItem = Item\n\n/**\n * PathwayClass\n */\nexport type PathwayClass = {\n classId: string\n name: string\n active: boolean\n}\n\n/**\n * PathwayProps\n */\nexport type PathwayProps = {\n loading: boolean\n title: string,\n description: string\n classes: PathwayClass[]\n badges: BadgeItem[]\n classId: string\n students: PathwayUserItem[]\n categories: { categoryId: string; name: string }[]\n href: string\n trial?: boolean\n badgesCompleted?: number\n\n onBackClick: () => void;\n onClassChange: (classId: string) => void;\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\n/**\n * Pathway\n * @param props\n * @constructor\n */\nexport const Pathway = (props: PathwayProps) => {\n const { classes } = useStyles();\n const [tab, setTab] = useState(\"badges\")\n\n const numberOfStudents = props.students.length\n const percentageOfBadgesEarned = numberOfStudents > 0 ? props.students.filter(u => u.isComplete).length / numberOfStudents : 0\n const numberOfBadgesEarned = numberOfStudents > 0 ? props.students.filter(u => u.isComplete).length : 0\n\n return (\n <Container size=\"lg\" py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <UnstyledButton onClick={props.onBackClick}>\n <BadgeCore\n variant=\"filled\"\n leftSection={<ActionIcon color=\"blue\" size=\"xs\" radius=\"xl\" variant=\"filled\">\n <IconArrowLeft size={14} />\n </ActionIcon>}\n size=\"lg\">\n Back\n </BadgeCore>\n </UnstyledButton>\n <Group>\n <Stack spacing={0}>\n <Title order={2} className={classes.title} mt=\"md\">\n {props.title || \"Pathway\"}\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">\n {props.description || \"No description\"}\n </Text>\n </Stack>\n\n {!props.trial && <Stack ml=\"auto\">\n <SplitButton\n href={props.href}\n onCopyLinkClick={props.onCopyLinkClick}\n onExportDataClick={props.onExportDataClick}\n />\n </Stack>}\n </Group>\n </Grid.Col>\n </Grid>\n <div>\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n <Stack>\n <StatsGroup data={[\n {\n title: props.trial ? \"BADGES SUBMITTED\" : \"PATHWAY COMPLETION\",\n value: props.trial ? 0: numberOfBadgesEarned,\n unit: props.trial ? '' : '',\n },\n ]}/>\n\n { !props.trial && <Select\n clearable\n clearButtonLabel=\"Clear class selection\"\n size=\"sm\"\n placeholder=\"Select a class\"\n nothingFound=\"No options\"\n value={props.classId}\n onChange={props.onClassChange}\n icon={<IconCategory2/>}\n data={props.classes.map(g => {return {value: g.classId, label: g.name}})}\n />}\n\n <Stack spacing={0}>\n { !props.trial && <Tabs\n value={tab}\n data={[\n {label: \"By Badge\", value: \"badges\"},\n {label: \"By student\", value: \"students\"},\n ]}\n onChange={setTab}\n />}\n\n { (!!props.trial || tab === \"badges\") && <BadgeTable\n loading={props.loading}\n items={props.badges}\n /> }\n\n { (!props.trial && tab === \"students\") && <Table\n loading={props.loading}\n items={props.students}\n categories={props.categories}\n />}\n </Stack>\n </Stack>\n </div>\n </div>\n </Stack>\n </Container>\n )\n}","import * as React from 'react'\nimport { createStyles, Button, Stack, Menu, Group, ActionIcon } from '@mantine/core';\nimport {\n IconChevronDown,\n IconPlaylistAdd,\n IconClipboardCopy, IconTableExport\n} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\n\nconst useStyles = createStyles((theme) => ({\n button: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n marginLeft: 0,\n marginRight: 0,\n },\n\n menuControl: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n border: 0,\n borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark[7] : theme.white}`,\n },\n}));\n\nexport type SplitButtonProps = {\n href: string\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\nexport const SplitButton = (props: SplitButtonProps) => {\n const { classes, theme } = useStyles();\n const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === 'dark' ? 5 : 6];\n\n return (\n <Stack spacing=\"sm\">\n {/* <Button<typeof Link> component={Link} to={props.href}\n className={classes.button}\n variant=\"gradient\"\n >\n Preview\n </Button>\n <Button\n leftIcon={<IconClipboardCopy size={14} />}\n onClick={props.onCopyLinkClick}\n >\n Copy link\n </Button> */}\n <Button\n leftIcon={<IconTableExport size={14} />}\n onClick={props.onExportDataClick}\n >\n Export data (.csv)\n </Button>\n </Stack>\n );\n}","import * as React from 'react';\nimport {Grid, Badge, Text} from '@mantine/core';\nimport {Link} from \"react-router-dom\";\nimport { Button } from \"@mantine/core\"\n\nexport interface Item {\n link: string\n badgeName: string\n lessonName: string\n question: string\n}\n\nexport type StackProps = {\n items: Item[]\n hideBadge?: boolean\n hideLesson?: boolean\n}\n\n/**\n * Stack\n * @constructor\n * @param props\n */\nexport function Stack(props: StackProps) {\n const { items, hideBadge, hideLesson } = props\n if (!items.length) return null;\n\n const visibleColumns = [\n true, // Link (always)\n !hideBadge,\n !hideLesson,\n true // Question (always)\n ].filter(Boolean).length\n\n const span = 12 / visibleColumns\n\n return (\n <Grid gutter=\"md\" sx={{ padding: 20, minWidth: 700 }}>\n {/* Header row */}\n <Grid.Col span={span}><Text weight=\"bold\">Link</Text></Grid.Col>\n\n {!hideBadge && (\n <Grid.Col span={span}>\n <Text weight=\"bold\">Badge</Text>\n </Grid.Col>\n )}\n\n {!hideLesson && (\n <Grid.Col span={span}>\n <Text weight=\"bold\">Lesson</Text>\n </Grid.Col>\n )}\n\n <Grid.Col span={span}><Text weight=\"bold\">Question</Text></Grid.Col>\n\n {/* Rows */}\n {items.map((row, i) => (\n <React.Fragment key={i}>\n <Grid.Col span={span}>\n <Button\n component=\"a\"\n href={row.link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n size=\"xs\"\n variant=\"light\"\n >\n View File\n </Button>\n </Grid.Col>\n\n {!hideBadge && (\n <Grid.Col span={span}>\n <Text>{row.badgeName}</Text>\n </Grid.Col>\n )}\n\n {!hideLesson && (\n <Grid.Col span={span}>\n <Text>{row.lessonName}</Text>\n </Grid.Col>\n )}\n\n <Grid.Col span={span}>\n <Text>{row.question}</Text>\n </Grid.Col>\n </React.Fragment>\n ))}\n </Grid>\n )\n}","import { DataTable, DataTableSortStatus } from \"mantine-datatable\";\nimport * as React from 'react';\nimport {Avatar, Group, Text, ScrollArea, Badge} from '@mantine/core';\nimport {Link} from \"react-router-dom\";\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {Stack as FileStack} from \"./FileStack\";\nimport { useSortableData } from \"../../utils/useSortableData\";\n\n/**\n * Item\n */\nexport interface Item {\n userId: string\n avatar: string\n name: string\n email: string\n submissions: SubmissionItem[]\n}\n\nexport interface SubmissionItem {\n link: string\n badgeName: string\n badgeId: string\n lessonName: string\n question: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & {\n hideBadge?: boolean\n hideLesson?: boolean\n}\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n // Map status boolean to a number so it can be sorted\n const preparedItems = React.useMemo(() => {\n return props.items.map(item => ({\n ...item,\n submissionCount: item.submissions?.length || 0,\n }));\n }, [props.items]);\n\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems); //add sort logic\n \n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No files to display\"\n description=\"There are no submitted files to display yet.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n\n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n };\n \n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n verticalSpacing=\"sm\"\n sx={{ minWidth: 700 }}\n withBorder={false}\n borderRadius=\"sm\"\n withColumnBorders\n striped\n highlightOnHover\n records={sortedItems}\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)}\n idAccessor=\"userId\"\n columns={[{\n accessor: 'name',\n title: 'Student Name',\n sortable: true,\n render: (row: Item) => (\n <Group spacing=\"sm\">\n <Avatar size={40} src={row.avatar} radius={40}/>\n <div>\n <Text size=\"sm\" weight={500}>\n {row.name}\n </Text>\n <Text size=\"xs\" color=\"dimmed\">\n {row.email}\n </Text>\n </div>\n </Group>\n ),\n },{\n accessor: 'submissionCount',\n title: 'Files',\n sortable: true,\n render: (row: Item) => row.submissions.length\n }]}\n rowExpansion={{\n content: ({ record }) => (\n <FileStack\n items={record.submissions}\n hideBadge={props.hideBadge}\n hideLesson={props.hideLesson}\n />\n ),\n }}\n />\n </ScrollArea.Autosize>\n );\n}","import * as React from \"react\"\nimport { FileLockerUserItem } from \"./FileLocker\"\n\nexport type Submission = {\n badgeId: string\n lessonName: string\n}\n\nexport const useFilteredStudents = (students: FileLockerUserItem[]) => {\n return React.useMemo(() => {\n\n const byBadge = (badgeId: string): FileLockerUserItem[] =>\n students\n .map(s => ({\n ...s,\n submissions: (s.submissions || []).filter(\n (sub) => sub.badgeId === badgeId\n )\n }))\n .filter(s => s.submissions.length)\n\n const byLesson = (lessonName: string): FileLockerUserItem[] =>\n students\n .map(s => ({\n ...s,\n submissions: (s.submissions || []).filter(\n (sub) => sub.lessonName === lessonName\n )\n }))\n .filter(s => s.submissions.length)\n\n const byPathway = (\n pathwayId: string,\n badges: any[]\n ): FileLockerUserItem[] => {\n\n const validBadgeIds = badges\n .filter((b: any) =>\n Array.isArray(b.categories) &&\n b.categories.some((c: string) =>\n c.startsWith(pathwayId)\n )\n )\n .map((b: any) => b.badgeId)\n\n return students\n .map(s => ({\n ...s,\n submissions: (s.submissions || []).filter(\n (sub) => validBadgeIds.includes(sub.badgeId)\n )\n }))\n .filter(s => s.submissions.length)\n }\n\n return { byBadge, byLesson, byPathway }\n\n }, [students])\n}","import {IconArrowLeft, IconCategory2} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n createStyles,\n Badge as BadgeCore,\n Title,\n Text,\n Container, Stack, Grid,\n Select, ActionIcon, Group,\n LoadingOverlay,\n UnstyledButton,\n} from '@mantine/core';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Tabs} from \"../../components/navigation/Tabs/Tabs\";\nimport {SplitButton} from \"./SplitButton\";\nimport {Table, Item} from \"./Table\";\nimport {Table as LessonTable, Item as LessonItem} from \"./FileTable\"\nimport { useFilteredStudents } from \"./useFilteredStudents\"\nimport { Accordion } from \"@mantine/core\"\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n\n description: {\n maxWidth: 600,\n },\n}));\n\ntype Badge = {\n badgeId: string\n displayName: string\n}\n\ntype BadgeTableProps = {\n badges: Badge[]\n students: FileLockerUserItem[]\n}\n\nconst BadgeTable: React.FC<BadgeTableProps & { loading: boolean }> = ({ badges, students, loading }) => {\n const { byBadge } = useFilteredStudents(students)\n const countFiles = (students: FileLockerUserItem[]) =>\n students.reduce((acc, s) => acc + (s.submissions?.length || 0), 0)\n\n return (\n <Accordion>\n {badges.map((b) => {\n const studentsForBadge = byBadge(b.badgeId)\n const fileCount = countFiles(studentsForBadge)\n\n return (\n <Accordion.Item key={b.badgeId} value={b.badgeId}>\n <Accordion.Control>\n <Group position=\"apart\" w=\"100%\">\n <Text>{b.displayName}</Text>\n <BadgeCore size=\"sm\">{fileCount}</BadgeCore>\n </Group>\n </Accordion.Control>\n\n <Accordion.Panel>\n <Table\n loading={loading}\n items={studentsForBadge}\n hideBadge\n />\n </Accordion.Panel>\n </Accordion.Item>\n )\n })}\n </Accordion>\n )\n}\n\ntype Lesson = {\n lessonId: string\n lessonName: string\n}\n\ntype LessonTableProps = {\n lessons: Lesson[]\n students: FileLockerUserItem[]\n}\n\nconst LessonTableWrapper: React.FC<LessonTableProps & { loading: boolean }> = ({ lessons, students, loading }) => {\n const { byLesson } = useFilteredStudents(students)\n\n const countFiles = (students: FileLockerUserItem[]) =>\n students.reduce((acc, s) => acc + (s.submissions?.length || 0), 0)\n\n return (\n <Accordion>\n {lessons.map((l) => {\n const studentsForLesson = byLesson(l.lessonName)\n const fileCount = countFiles(studentsForLesson)\n\n return (\n <Accordion.Item key={l.lessonId} value={l.lessonId}>\n <Accordion.Control>\n <Group position=\"apart\" w=\"100%\">\n <Text>{l.lessonName}</Text>\n <BadgeCore size=\"sm\">{fileCount}</BadgeCore>\n </Group>\n </Accordion.Control>\n\n <Accordion.Panel>\n <Table\n loading={loading}\n items={studentsForLesson}\n hideLesson\n />\n </Accordion.Panel>\n </Accordion.Item>\n )\n })}\n </Accordion>\n )\n}\n\ntype Pathway = {\n pathwayId: string\n title: string\n description: string\n}\n\ntype PathwayTableProps = {\n pathways: Pathway[]\n badges: any[]\n students: FileLockerUserItem[]\n}\n\nexport const PathwayTable: React.FC<PathwayTableProps & { loading: boolean }> = ({\n pathways,\n badges,\n students,\n loading,\n}) => {\n const { byPathway } = useFilteredStudents(students)\n\n const countFiles = (students: FileLockerUserItem[]) =>\n students.reduce((acc, s) => acc + (s.submissions?.length || 0), 0)\n\n return (\n <Accordion>\n {pathways.map((p) => {\n const studentsForPathway = byPathway(p.pathwayId, badges)\n const fileCount = countFiles(studentsForPathway)\n\n return (\n <Accordion.Item key={p.pathwayId} value={p.pathwayId}>\n <Accordion.Control>\n <Group position=\"apart\" w=\"100%\">\n <div>\n <strong>{p.title}</strong>\n <div>{p.description}</div>\n </div>\n <BadgeCore size=\"sm\">{fileCount}</BadgeCore>\n </Group>\n </Accordion.Control>\n\n <Accordion.Panel>\n <Table\n loading={loading}\n items={studentsForPathway}\n />\n </Accordion.Panel>\n </Accordion.Item>\n )\n })}\n </Accordion>\n )\n}\n\n//TODO Refactor\n\n/**\n * FileLockerUserItem\n */\nexport type FileLockerUserItem = Item\n\n/**\n * FileLockerClass\n */\nexport type FileLockerClass = {\n classId: string\n name: string\n active: boolean\n}\n\n/**\n * FileLockerProps\n */\nexport type FileLockerProps = {\n loading: boolean\n displayName: string,\n description: string\n classes: FileLockerClass[]\n lessons: LessonItem[]\n classId: string\n students: FileLockerUserItem[]\n href: string\n trial?: boolean\n lessonsCompleted?: number\n pathways?: {\n pathwayId: string\n title: string\n description: string\n }[]\n \n badges?: {\n badgeId: string\n displayName: string\n categories?: string[]\n }[]\n\n onBackClick: () => void;\n onClassChange: (classId: string) => void;\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\n/**\n * FileLocker\n * @param props\n * @constructor\n */\nexport const FileLocker = (props: FileLockerProps) => {\n const { classes } = useStyles();\n const [tab, setTab] = useState(\"students\")\n\n const numberOfStudents = props.students.length\n const numberOfFiles = props.students.reduce(\n (acc, s) => acc + (s.submissions?.length || 0),\n 0\n )\n\n return (\n <Container size=\"lg\" py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <UnstyledButton onClick={props.onBackClick}>\n <BadgeCore\n variant=\"filled\"\n leftSection={<ActionIcon color=\"blue\" size=\"xs\" radius=\"xl\" variant=\"filled\">\n <IconArrowLeft size={14} />\n </ActionIcon>}\n size=\"lg\">\n Back\n </BadgeCore>\n </UnstyledButton>\n <Group>\n <Stack spacing={0}>\n <Title order={2} className={classes.title} mt=\"md\">\n {props.displayName || \"File\"}\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">\n {props.description || \"No description\"}\n </Text>\n </Stack>\n\n {!props.trial && <Stack ml=\"auto\">\n <SplitButton\n href={props.href}\n onCopyLinkClick={props.onCopyLinkClick}\n onExportDataClick={props.onExportDataClick}\n />\n </Stack>}\n </Group>\n </Grid.Col>\n </Grid>\n <div>\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n <Stack>\n <StatsGroup data={[\n {\n title: props.trial ? \"LESSONS SUBMITTED\" : \"FILES\",\n value: props.trial ? props.lessonsCompleted || 0 : numberOfFiles,\n unit: props.trial ? '' : '',\n },\n ]}/>\n\n { !props.trial && <Select\n clearable\n clearButtonLabel=\"Clear class selection\"\n size=\"sm\"\n placeholder=\"Select a class\"\n nothingFound=\"No options\"\n value={props.classId}\n onChange={props.onClassChange}\n icon={<IconCategory2/>}\n data={props.classes.map(g => {return {value: g.classId, label: g.name}})}\n />}\n\n <Stack spacing={0}>\n { !props.trial && <Tabs\n value={tab}\n data={[\n {label: \"By student\", value: \"students\"},\n {label: \"By pathway\", value: \"pathways\"},\n {label: \"By badge\", value: \"badges\"},\n {label: \"By lesson\", value: \"lessons\"},\n ]}\n onChange={setTab}\n />}\n\n { (!props.trial && tab === \"students\") && <Table\n loading={props.loading}\n items={props.students}\n />}\n {tab === \"pathways\" && (\n <PathwayTable\n pathways={props.pathways || []}\n badges={props.badges || []}\n students={props.students}\n loading={props.loading}\n />\n )}\n\n {tab === \"badges\" && (\n <BadgeTable\n badges={props.badges || []}\n students={props.students}\n loading={props.loading}\n\n />\n )}\n\n {tab === \"lessons\" && (\n <LessonTableWrapper\n lessons={props.lessons}\n students={props.students}\n loading={props.loading}\n\n />\n )}\n\n </Stack>\n </Stack>\n </div>\n </div>\n </Stack>\n </Container>\n )\n}"],"names":["__spreadProps","__spreadValues","useStyles","TabsCore","SplitButton","Stack","Badge","Table","LessonStack","BadgeCore","LessonTable","MantineTable","ImpactTable","ReflectionTable","BadgeTable","StudentTable","DropzoneButton","AnswerTable","__objRest","MantineStack","AnswerStack","QuestionStack","account","BadgeStack","FileStack","students"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../node_modules/style-inject/dist/style-inject.es.js","../src/components/users/UserButton/UserButton.tsx","../src/utils/numbers.ts","../src/components/navigation/NavbarLinksGroups/NavbarLinksGroups.tsx","../src/components/navigation/Navbar/Navbar.tsx","../src/components/users/GettingStarted/GettingStarted.tsx","../src/components/users/SwitchAccount/SwitchAccount.tsx","../src/components/data/StatsGroup/StatsGroup.tsx","../src/components/navigation/Tabs/Tabs.tsx","../src/pages/Badge/SplitButton.tsx","../src/components/banners/PlaceholderBanner/PlaceholderBanner.tsx","../src/pages/Badge/LessonStack.tsx","../src/utils/useSortableData.ts","../src/pages/Badge/Table.tsx","../src/pages/Badge/LessonTable.tsx","../src/pages/Badge/Badge.tsx","../src/pages/Badges/Table.tsx","../src/pages/Badges/Badges.tsx","../src/pages/Dashboard/StudentTable.tsx","../src/utils/time.ts","../src/pages/Dashboard/ReflectionTable.tsx","../src/pages/Dashboard/ImpactTable.tsx","../src/pages/Dashboard/BadgeTable.tsx","../src/pages/Dashboard/LessonTable.tsx","../src/pages/Dashboard/Dashboard.tsx","../src/pages/Class/Table.tsx","../src/pages/Class/Class.tsx","../src/pages/Classes/Table.tsx","../src/pages/Classes/Classes.tsx","../src/pages/Student/BadgeTable.tsx","../src/pages/Student/AnswerTable.tsx","../src/pages/Student/ReflectionTable.tsx","../src/pages/Student/Student.tsx","../src/components/cards/CardGradient.tsx","../src/pages/Home/Home.tsx","../src/pages/Lesson/ReflectionTable.tsx","../src/pages/Lesson/SplitButton.tsx","../src/pages/Lesson/AnswerStack.tsx","../src/pages/Lesson/Table.tsx","../src/pages/Lesson/QuestionStack.tsx","../src/pages/Lesson/Lesson.tsx","../src/pages/Lessons/Table.tsx","../src/pages/Lessons/Lessons.tsx","../src/pages/Organization/AccessCode.tsx","../src/pages/Organization/Organization.tsx","../src/pages/People/SplitButton.tsx","../src/pages/People/Table.tsx","../src/pages/People/People.tsx","../src/pages/StartAnonymousLesson/StartAnonymousLesson.tsx","../src/components/grid/BadgeGrid/BadgeGrid.tsx","../src/components/users/UserInfo/UserInfo.tsx","../src/components/banners/TenantBanner/TenantBanner.tsx","../src/pages/TrialHome/TrialHome.tsx","../src/components/grid/SelectGrid/SelectGrid.tsx","../src/pages/TrialRegistration/TrialRegistration.tsx","../src/providers/AdminProvider/AdminProvider.tsx","../src/shells/App/App.tsx","../src/pages/Pathways/Table.tsx","../src/pages/Pathways/Pathways.tsx","../src/pages/Pathway/SplitButton.tsx","../src/pages/Pathway/BadgeStack.tsx","../src/pages/Pathway/Table.tsx","../src/pages/Pathway/BadgeTable.tsx","../src/pages/Pathway/Pathway.tsx","../src/pages/FileLocker/SplitButton.tsx","../src/pages/FileLocker/FileStack.tsx","../src/pages/FileLocker/Table.tsx","../src/pages/FileLocker/SubmissionDetail.tsx","../src/pages/FileLocker/useFilteredStudents.ts","../src/pages/FileLocker/FileLocker.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import * as React from 'react';\nimport { Avatar } from '@mantine/core';\n\ninterface UserButtonProps {\n image: string;\n name: string;\n email: string;\n}\n\n/**\n * The identity chip above the nav. Keeps Mantine's `Avatar` specifically (its built-in\n * initials-fallback when `image` is empty is real, relied-upon behavior for educator accounts\n * that often lack a profile photo — not something to rebuild) while the surrounding chrome is\n * restyled to match the redesigned sidebar.\n */\nexport function UserButton({ image, name, email }: UserButtonProps) {\n return (\n <div className=\"m-3 flex items-center gap-2.5 rounded-xl border border-mint-400/30 bg-gradient-to-r from-sky-blue-400/15 to-mint-400/15 p-2.5 shadow-[0_2px_10px_rgba(30,226,175,0.15)]\">\n <Avatar\n src={image}\n radius=\"xl\"\n size={32}\n styles={{ placeholder: { color: \"#232A3A\", backgroundColor: \"rgba(30,226,175,0.2)\" } }}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-xs font-bold text-dark-blue-400\">{name}</div>\n <div className=\"truncate text-[10px] text-slate-500\">{email}</div>\n </div>\n </div>\n );\n}\n","/**\n * Compact number\n * @param num\n */\nexport const compact = (num?: number) => {\n return Intl.NumberFormat(\"en-US\", {\n notation: \"compact\",\n maximumFractionDigits: 1,\n }).format(num || 0);\n};","import * as React from 'react';\nimport { useState } from 'react';\nimport { TablerIcon, IconChevronRight } from '@tabler/icons';\nimport { Link } from \"react-router-dom\";\nimport { compact } from \"../../../utils/numbers\";\n\n/**\n * The accent color cycled across sidebar rows, same fixed rotation as the rest of the app.\n */\nexport type LinksGroupAccent = \"cyan\" | \"mint\" | \"gold\";\n\nconst ACCENT_CLASSNAMES: Record<LinksGroupAccent, { row: string; chip: string; icon: string; pill: string }> = {\n cyan: {\n row: \"bg-sky-blue-400/15 border-sky-blue-400/30\",\n chip: \"bg-sky-blue-400/25\",\n icon: \"text-sky-blue-400\",\n pill: \"bg-sky-blue-400/15 text-dark-blue-400\",\n },\n mint: {\n row: \"bg-mint-400/15 border-mint-400/30\",\n chip: \"bg-mint-400/25\",\n icon: \"text-mint-400\",\n pill: \"bg-mint-400/15 text-dark-blue-400\",\n },\n gold: {\n row: \"bg-gold-400/15 border-gold-400/30\",\n chip: \"bg-gold-400/25\",\n icon: \"text-gold-400\",\n pill: \"bg-gold-400/15 text-dark-blue-400\",\n },\n};\n\ninterface LinksGroupProps {\n icon: TablerIcon;\n label: string;\n accent?: LinksGroupAccent;\n initiallyOpened?: boolean;\n active?: string\n notifications: number\n href: string\n links?: { notifications: number, label: string, href: string;}[];\n}\n\n/**\n * A single sidebar row — a plain link, or (when `links` is non-empty) a chevron-toggled group that\n * auto-opens when one of its children is active and auto-closes when it isn't, while still\n * allowing manual toggling in between. Same behavior as before this round's restyle (chevron/\n * auto-open/notification-badge logic unchanged) — only the markup/styling moved from Mantine's\n * `createStyles` theme to Tailwind utility classes, plus a new optional `accent` for the\n * cyan/mint/gold rotation the redesigned sidebar uses (defaults to cyan if omitted).\n */\nexport function LinksGroup({ icon: Icon, href, label, accent = \"cyan\", initiallyOpened, links, active, notifications}: LinksGroupProps) {\n const hasLinks = Array.isArray(links) && links.length > 0;\n const hasActiveLinks = Array.isArray(links) && links.map(l => !!active && active === `${label}/${l.label}`).reduce((a, b) => a || b, false)\n const [opened, setOpened] = useState(initiallyOpened || hasActiveLinks || false);\n\n React.useEffect(() => {\n setOpened(hasActiveLinks)\n }, [hasActiveLinks])\n\n const isActive = !!active && !hasLinks && label === active;\n const accentClasses = ACCENT_CLASSNAMES[accent];\n\n const items = (hasLinks ? links : []).map((link) => {\n const linkActive = !!active && active === `${label}/${link.label}`;\n return (\n <Link\n key={link.label}\n to={link.href}\n className={`flex items-center justify-between gap-2 rounded-[8px] border px-3 py-2 text-xs no-underline transition-colors ${\n linkActive\n ? `${accentClasses.row} font-bold text-dark-blue-400`\n : \"border-transparent font-medium text-slate-500 hover:bg-slate-50\"\n }`}\n >\n {link.label}\n {!!link.notifications && (\n <span className={`rounded-full px-2 py-0.5 text-[10px] font-bold ${accentClasses.pill}`}>\n {compact(link.notifications)}\n </span>\n )}\n </Link>\n );\n });\n\n const rowInner = (\n <div className=\"flex flex-1 items-center gap-2.5\">\n <div className={`flex h-[30px] w-[30px] shrink-0 items-center justify-center rounded-lg ${isActive ? accentClasses.chip : \"bg-slate-50\"}`}>\n <Icon size={14} stroke={isActive ? 2.2 : 1.75} className={isActive ? accentClasses.icon : \"text-slate-400\"} />\n </div>\n <span className={`flex-1 text-xs ${isActive ? \"font-bold text-dark-blue-400\" : \"font-medium text-slate-500\"}`}>{label}</span>\n </div>\n );\n\n return (\n <div>\n <div\n onClick={() => hasLinks && setOpened((o) => !o)}\n className={`flex items-center gap-2.5 rounded-[10px] border px-3.5 py-2.5 transition-colors ${\n isActive ? accentClasses.row : \"border-transparent hover:bg-slate-50\"\n } ${hasLinks ? \"cursor-pointer\" : \"\"}`}\n >\n {hasLinks ? rowInner : <Link to={href} className=\"flex flex-1 items-center gap-2.5 no-underline\">{rowInner}</Link>}\n\n {!!notifications && (\n <span className={`rounded-full px-2 py-0.5 text-[10px] font-bold ${accentClasses.pill}`}>\n {compact(notifications)}\n </span>\n )}\n\n {hasLinks && (\n <IconChevronRight\n size={13}\n stroke={2.2}\n className={`shrink-0 text-slate-300 transition-transform ${opened ? \"rotate-90\" : \"\"}`}\n />\n )}\n </div>\n {hasLinks && opened && (\n <div className=\"ml-[29px] mt-0.5 flex flex-col gap-0.5 border-l border-slate-100 pl-2.5\">{items}</div>\n )}\n </div>\n );\n}\n","import * as React from 'react';\nimport {\n IconAlbum,\n IconBuilding,\n IconCategory2,\n IconClipboard,\n IconGauge,\n IconHome2,\n IconLambda,\n IconLogout,\n IconRoute,\n IconSwitchHorizontal,\n IconVideo,\n TablerIcon,\n} from '@tabler/icons';\nimport { UserButton } from \"../../users/UserButton/UserButton\";\nimport { LinksGroup, LinksGroupAccent } from \"../NavbarLinksGroups/NavbarLinksGroups\";\n\n/**\n * NavbarProps\n */\nexport interface NavbarProps {\n active?: string\n version: string\n image: string\n name: string\n email: string\n links: Record<string, {notifications: number, href: string, hidden?: boolean}>\n trial?: boolean\n loading?: boolean\n onLogout: () => void;\n onGettingStarted: () => void;\n onSwitchAccounts?: () => void;\n}\n\nconst data: { label: string; icon: TablerIcon; accent: LinksGroupAccent; links?: { label: string }[] }[] = [\n { label: 'Home', icon: IconHome2, accent: \"cyan\" },\n { label: 'Dashboard', icon: IconGauge, accent: \"mint\" },\n { label: 'Classes', icon: IconCategory2, accent: \"gold\" },\n { label: 'Pathways', icon: IconRoute, accent: \"cyan\" },\n { label: 'Badges', icon: IconAlbum, accent: \"mint\" },\n { label: 'Lessons', icon: IconLambda, accent: \"gold\" },\n { label: 'File Locker', icon: IconClipboard, accent: \"cyan\" },\n { label: 'Organization', icon: IconBuilding, accent: \"gold\", links: [{ label: 'Overview' }, { label: 'People' }] },\n]\n\nconst TRIAL_PAGES = [\n 'Home',\n 'Lessons',\n 'Badges',\n]\n\n/**\n * The educator/admin left nav. Same behavior as before this round's restyle — item list, per-item\n * notification counts, the `hidden`/trial visibility rules, the Organization sub-menu — only the\n * markup/styling moved from Mantine's `createStyles` theme to Tailwind utility classes (matching\n * the flat cyan/mint/gold system already shipped on the student side), plus `active` is now\n * optional rather than required (it was forcing at least one caller to pass an empty string just\n * to satisfy the type, which meant no row ever highlighted for it).\n * @param props\n * @constructor\n */\nexport function Navbar(props: NavbarProps) {\n const links = data.map((item) => {\n const context = props.links[item.label] || {notifications: 0, href: \"\"}\n if(context.hidden || (props.trial && TRIAL_PAGES.indexOf(item.label) === -1)){\n return null\n }\n\n if(props.loading && item.label !== 'Home'){\n return null\n }\n\n return <LinksGroup\n key={item.label}\n active={props.active}\n {...item}\n {...context}\n links={(item.links || []).map((link) => {\n return {...link, ...(props.links[`${item.label}/${link.label}`] || {notifications: 0, href: \"\"})}\n })}\n />\n });\n\n return (\n <nav className=\"flex h-full w-[230px] shrink-0 flex-col border-r border-slate-200 bg-white\">\n <div className=\"flex items-center justify-between border-b border-slate-100 p-4\">\n <div className=\"w-24\">\n <img className=\"w-full object-contain\" src=\"https://cdn.localcivics.io/brand/localcivics.png\" alt=\"Logo\" />\n </div>\n {!!props.trial && (\n <span className=\"rounded-full bg-gold-400/15 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400\">\n Trial\n </span>\n )}\n </div>\n\n {!props.loading && <UserButton image={props.image} name={props.name} email={props.email} />}\n\n <div className=\"flex flex-1 flex-col gap-0.5 overflow-y-auto p-2.5\">{links}</div>\n\n {!props.loading && (\n <div className=\"flex flex-col gap-0.5 border-t border-slate-200 p-2.5\">\n {props.trial && <UtilLink label=\"Getting started\" icon={IconVideo} onClick={props.onGettingStarted} />}\n {!!props.onSwitchAccounts && (\n <UtilLink label=\"Change account\" icon={IconSwitchHorizontal} onClick={props.onSwitchAccounts} />\n )}\n <UtilLink label=\"Logout\" icon={IconLogout} onClick={props.onLogout} />\n </div>\n )}\n </nav>\n );\n}\n\nconst UtilLink = (props: { label: string; icon: TablerIcon; onClick: () => void }) => {\n const Icon = props.icon;\n return (\n <div\n onClick={props.onClick}\n className=\"flex cursor-pointer items-center gap-2.5 rounded-[10px] px-3.5 py-2 text-slate-400 hover:bg-slate-50 hover:text-slate-500\"\n >\n <Icon size={13} stroke={1.75} />\n <span className=\"text-[11.5px]\">{props.label}</span>\n </div>\n );\n};\n","import * as React from 'react';\nimport {\n Modal,\n Text,\n createStyles,\n Center,\n Loader,\n Container, Title,\n Button,\n Group,\n} from '@mantine/core';\n\nconst useStyles = createStyles((theme) => ({\n inner: {\n paddingTop: theme.spacing.xl,\n paddingBottom: theme.spacing.xl * 4,\n },\n\n content: {\n maxWidth: 600,\n marginRight: theme.spacing.xl,\n\n [theme.fn.smallerThan('md')]: {\n maxWidth: '100%',\n marginRight: 0,\n },\n },\n\n title: {\n color: theme.colorScheme === 'dark' ? theme.white : theme.black,\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n fontSize: 44,\n lineHeight: 1.2,\n fontWeight: 900,\n\n [theme.fn.smallerThan('xs')]: {\n fontSize: 28,\n },\n },\n\n control: {\n [theme.fn.smallerThan('xs')]: {\n flex: 1,\n },\n },\n\n highlight: {\n position: 'relative',\n backgroundColor: theme.fn.variant({ variant: 'light', color: theme.primaryColor }).background,\n borderRadius: theme.radius.sm,\n padding: '4px 12px',\n },\n}));\n\n/**\n * GettingStartedProps\n */\nexport type GettingStartedProps = {\n opened: boolean\n loading: boolean\n videoURL: string\n onClose: () => void;\n}\n\n/**\n * GettingStarted\n * @param props\n * @constructor\n */\nexport const GettingStarted = (props: GettingStartedProps) => {\n const { classes } = useStyles();\n\n return <Modal centered\n fullScreen\n opened={props.opened}\n onClose={() => props.onClose && props.onClose()}\n size=\"sm\"\n >\n <div style={{ position: 'relative' }}>\n { props.loading && <Center style={{ height: 400 }}><Loader/></Center> }\n { !props.loading && <Container>\n <Group position=\"center\">\n <div className={classes.inner}>\n <div className={classes.content}>\n <Button onClick={props.onClose} radius=\"xl\" size=\"md\" className={classes.control}>\n Skip tour\n </Button>\n <Title className={classes.title}>\n Get Started with Your Trial\n </Title>\n <Text color=\"dimmed\" mt=\"md\">\n Welcome! We&apos;re excited that you are trying Local Civics lessons and badges with your students. Watch this short video tour to know how to navigate the platform.\n </Text>\n <video style={{marginTop: \"20px\", marginBottom: \"20px\"}} width=\"600\" height=\"350\" controls>\n <source src={props.videoURL} type=\"video/mp4\"/>\n Your browser does not support the video tag.\n </video>\n </div>\n </div>\n </Group>\n </Container>\n }\n </div>\n </Modal>\n}","import {IconBackpack, IconBatteryEco, IconBooks} from \"@tabler/icons\";\nimport * as React from 'react';\nimport {Modal, SimpleGrid, UnstyledButton, Card, ScrollArea, Text, createStyles, Center, Loader} from '@mantine/core';\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n\n description: {\n maxWidth: 600,\n margin: 'auto',\n\n '&::after': {\n content: '\"\"',\n display: 'block',\n backgroundColor: theme.fn.primaryColor(),\n width: 45,\n height: 2,\n marginTop: theme.spacing.sm,\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n },\n\n card: {\n transition: 'box-shadow 150ms ease, transform 100ms ease',\n\n '&:hover': {\n boxShadow: `${theme.shadows.md} !important`,\n transform: 'scale(1.02)',\n },\n },\n\n cardTitle: {\n '&::after': {\n content: '\"\"',\n display: 'block',\n backgroundColor: theme.fn.primaryColor(),\n width: 45,\n height: 2,\n marginTop: theme.spacing.sm,\n },\n },\n}));\n\n/**\n * AccountItem\n */\nexport type AccountItem = {\n accountId: string\n name: string\n isAdmin?: boolean\n isGroupAdmin?: boolean\n}\n\n/**\n * SwitchAccountProps\n */\nexport type SwitchAccountProps = {\n opened: boolean\n account: string\n loading: boolean\n accounts: AccountItem[]\n onClick: (account: string) => void;\n onClose: () => void;\n}\n\n/**\n * SwitchAccount\n * @param props\n * @constructor\n */\nexport const SwitchAccount = (props: SwitchAccountProps) => {\n const { classes, theme } = useStyles();\n\n const options = props.accounts.map(a => {\n return <UnstyledButton onClick={() => props.onClick && props.onClick(a.accountId)} key={a.accountId} p={theme.spacing.md}>\n <Card withBorder shadow=\"md\" radius=\"md\" className={classes.card} p=\"xl\">\n { a.isAdmin && <><IconBatteryEco size={50} stroke={2} color={theme.fn.primaryColor()}/></> }\n { a.isGroupAdmin && !a.isAdmin && <><IconBooks size={50} stroke={2} color={theme.fn.primaryColor()}/></>}\n { !a.isAdmin && !a.isGroupAdmin && <><IconBackpack size={50} stroke={2} color={theme.fn.primaryColor()}/></>}\n\n <Text size=\"lg\" weight={500} className={classes.cardTitle} mt=\"md\">\n {a.name}\n </Text>\n <Text size=\"sm\" color=\"dimmed\" mt=\"sm\">\n {a.isAdmin ? \"Admin\" : a.isGroupAdmin ? \"Educator\" : \"Student\"}\n </Text>\n </Card>\n </UnstyledButton>\n })\n\n return <Modal centered\n fullScreen\n opened={props.opened}\n onClose={() => props.onClose && props.onClose()}\n size=\"sm\"\n >\n <div style={{ position: 'relative' }}>\n { props.loading && <Center style={{ height: 400 }}><Loader/></Center> }\n { !props.loading && <ScrollArea.Autosize maxHeight={600}>\n <SimpleGrid p={20} cols={3} spacing=\"xl\" breakpoints={[{ maxWidth: 'md', cols: 1 }]}>\n {options}\n </SimpleGrid>\n </ScrollArea.Autosize>\n }\n </div>\n </Modal>\n}","import * as React from 'react';\n\ninterface StatsGroupProps {\n data: { title: string; value: number, unit?: string}[];\n footer?: React.ReactNode\n}\n\n/**\n * The dark navy stat highlight used across pages that have real aggregate numbers to show (Class\n * Roster today; File Locker and Lessons reuse the exact same component in later rounds, for\n * cross-page consistency). Same prop contract and percentage-rounding behavior as before this\n * round's restyle — only the markup/styling moved from Mantine's `createStyles` theme to Tailwind.\n * @param data\n * @param footer\n * @constructor\n */\nexport const StatsGroup = ({ data, footer }: StatsGroupProps) => {\n const stats = data.map((stat) => {\n const value = (() => {\n if (stat.unit === '%') {\n // https://stackoverflow.com/questions/11832914/how-to-round-to-at-most-2-decimal-places-if-necessary\n return Math.round((stat.value + Number.EPSILON) * 100)\n }\n\n return stat.value\n })()\n\n // falls back to 0 for undefined, null, NaN, etc\n const safeValue = Number.isFinite(value) ? value : 0;\n\n return (\n <div key={stat.title}>\n <div className=\"text-3xl font-black text-white\">\n {safeValue.toLocaleString()}\n {stat.unit}\n </div>\n <div className=\"mt-1.5 text-[11px] font-bold uppercase tracking-wide text-white/70\">{stat.title}</div>\n </div>\n );\n });\n\n return (\n <div className=\"flex flex-wrap gap-x-10 gap-y-4 rounded-2xl bg-gradient-to-br from-dark-blue-600 via-dark-blue-400 to-sky-blue-400 px-8 py-6\">\n {stats}\n {footer}\n </div>\n );\n}\n","import * as React from 'react';\nimport {Tabs as TabsCore, TabsValue} from '@mantine/core';\n\n/**\n * TabProps\n */\nexport interface TabsProps{\n data?: {label?: string, value: string}[]\n value?: TabsValue\n\n onChange: (next: string) => void\n}\n\n/**\n * Tabs\n * @param props\n * @constructor\n */\nexport const Tabs = (props: TabsProps) => {\n const tabs = props.data?.map(item => <TabsCore.Tab key={item.value} value={item.value}>{item.label||item.value}</TabsCore.Tab>)\n\n return (\n <TabsCore value={props.value} onTabChange={props.onChange}>\n <TabsCore.List>\n {tabs}\n </TabsCore.List>\n </TabsCore>\n );\n}","import * as React from 'react'\nimport { createStyles, Button, Stack, Menu, Group, ActionIcon } from '@mantine/core';\nimport {\n IconChevronDown,\n IconPlaylistAdd,\n IconClipboardCopy, IconTableExport\n} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\n\nconst useStyles = createStyles((theme) => ({\n button: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n marginLeft: 0,\n marginRight: 0,\n },\n\n menuControl: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n border: 0,\n borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark[7] : theme.white}`,\n },\n}));\n\nexport type SplitButtonProps = {\n href: string\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\nexport const SplitButton = (props: SplitButtonProps) => {\n const { classes, theme } = useStyles();\n const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === 'dark' ? 5 : 6];\n\n return (\n <Stack spacing=\"sm\">\n <Button<typeof Link> component={Link} to={props.href}\n className={classes.button}\n variant=\"gradient\"\n >\n Preview\n </Button>\n <Button\n leftIcon={<IconClipboardCopy size={14} />}\n onClick={props.onCopyLinkClick}\n >\n Copy link\n </Button>\n <Button\n leftIcon={<IconTableExport size={14} />}\n onClick={props.onExportDataClick}\n >\n Export data (.csv)\n </Button>\n </Stack>\n );\n}","import * as React from 'react'\nimport { createStyles, Text, Title, Image } from '@mantine/core';\n\nconst useStyles = createStyles((theme) => ({\n wrapper: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing.xl * 2,\n borderRadius: theme.radius.md,\n backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark[8] : theme.white,\n border: `1px solid ${\n theme.colorScheme === 'dark' ? theme.colors.dark[8] : theme.colors.gray[3]\n }`,\n\n [`@media (max-width: ${theme.breakpoints.sm}px)`]: {\n flexDirection: 'column-reverse',\n padding: theme.spacing.xl,\n },\n },\n\n image: {\n maxWidth: '40%',\n\n [`@media (max-width: ${theme.breakpoints.sm}px)`]: {\n maxWidth: '100%',\n },\n },\n\n body: {\n paddingRight: theme.spacing.xl * 4,\n\n [`@media (max-width: ${theme.breakpoints.sm}px)`]: {\n paddingRight: 0,\n marginTop: theme.spacing.xl,\n },\n },\n\n title: {\n color: theme.colorScheme === 'dark' ? theme.white : theme.black,\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n lineHeight: 1,\n marginBottom: theme.spacing.md,\n },\n\n controls: {\n display: 'flex',\n marginTop: theme.spacing.xl,\n },\n\n inputWrapper: {\n width: '100%',\n flex: '1',\n },\n\n input: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n borderRight: 0,\n },\n\n control: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n },\n}));\n\n/**\n * PlaceholderBannerIcon\n */\nexport type PlaceholderBannerIcon = \"badges\" | \"lessons\" | \"dashboard\" | \"groups\" | \"kindergarten\" | \"thinking\"\n\n/**\n * PlaceholderBannerProps\n */\nexport type PlaceholderBannerProps = {\n loading: boolean\n icon: PlaceholderBannerIcon\n title?: string,\n description?: string,\n}\n\nexport const PlaceholderBanner = (props: PlaceholderBannerProps) => {\n const { classes } = useStyles();\n const title = props.title || \"Nothing to display\"\n const description = props.description || \"We don't have anything to show you here just yet. Add data, check back later, or adjust your search.\"\n return (\n <div className={classes.wrapper}>\n <div className={classes.body}>\n <Title className={classes.title}>{props.loading ? \"Loading...\" : title}</Title>\n <Text size=\"sm\" color=\"dimmed\">{props.loading ? \"Hold on, we're loading your data.\" : description}</Text>\n </div>\n\n <Image src={`https://cdn.localcivics.io/illustrations/${props.icon}.svg`} className={classes.image} />\n </div>\n );\n}","import * as React from 'react';\nimport {Grid, Badge, Text} from '@mantine/core';\nimport {Link} from \"react-router-dom\";\n\n/**\n * Item\n */\nexport interface Item {\n lessonName: string\n completion: number\n isStarted?: boolean\n href: string\n}\n\n/**\n * StackData\n */\nexport type StackData = {\n items: Item[]\n}\n\n/**\n * StackProps\n */\nexport type StackProps = StackData\n\n/**\n * Stack\n * @constructor\n * @param props\n */\nexport function Stack(props: StackProps) {\n if(props.items.length === 0){\n return null\n }\n\n const rows = props.items.map((row) => (\n <>\n <Grid.Col span={6}>\n <Text<typeof Link> component={Link} to={row.href} color=\"dark.4\" weight=\"bold\" size=\"md\">\n {row.lessonName}\n </Text>\n </Grid.Col>\n <Grid.Col span={6}>\n {row.completion >= 1 && <Badge variant=\"filled\">Complete</Badge>}\n {row.completion === 0 && !row.isStarted && <Badge color=\"red\" variant=\"filled\">Not started</Badge>}\n {row.completion > 0 && row.completion < 1 && <Badge color=\"violet\" variant=\"filled\">{Math.round((row.completion + Number.EPSILON) * 100)}% Complete</Badge>}\n </Grid.Col>\n </>\n ));\n\n return <Grid grow gutter=\"lg\" sx={{ padding: 20, minWidth: 700 }}>\n {rows}\n </Grid>\n}","import { useMemo, useState } from 'react';\n\nexport type SortDirection = 'asc' | 'desc' | null;\n\nexport interface SortConfig<T> {\n key: keyof T | string;\n direction: SortDirection;\n}\n\nexport function useSortableData<T>(items: T[], config: SortConfig<T> = { key: '', direction: null }) {\n const [sortConfig, setSortConfig] = useState<SortConfig<T>>(config);\n\n const sortedItems = useMemo(() => {\n let sortableItems = [...items];\n if (sortConfig.direction !== null) {\n sortableItems.sort((a, b) => {\n const aValue = (a as any)[sortConfig.key];\n const bValue = (b as any)[sortConfig.key];\n\n // Handle null/undefined values to prevent crashes\n if (aValue === bValue) return 0;\n if (aValue === null || aValue === undefined) return 1;\n if (bValue === null || bValue === undefined) return -1;\n\n // Numeric Sort (e.g., Badges Earned, Lessons Completed)\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return sortConfig.direction === 'asc' ? aValue - bValue : bValue - aValue;\n }\n\n // Boolean Sort (e.g., Account Created, Status)\n // Descending puts True/Yes at the top\n if (typeof aValue === 'boolean' && typeof bValue === 'boolean') {\n return sortConfig.direction === 'asc' \n ? (aValue === bValue ? 0 : aValue ? 1 : -1)\n : (aValue === bValue ? 0 : aValue ? -1 : 1);\n }\n\n // Date Sort (e.g., Last Active)\n if (aValue instanceof Date && bValue instanceof Date) {\n return sortConfig.direction === 'asc' \n ? aValue.getTime() - bValue.getTime() \n : bValue.getTime() - aValue.getTime();\n }\n\n // Default String Sort (e.g., Student Name, Class Name)\n // Uses localeCompare for safe alphabetical sorting\n return sortConfig.direction === 'asc'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n }\n return sortableItems;\n }, [items, sortConfig]);\n\n const requestSort = (key: string) => {\n let direction: 'asc' | 'desc' = 'asc';\n if (sortConfig.key === key && sortConfig.direction === 'asc') {\n direction = 'desc';\n }\n \n setSortConfig({ key, direction });\n };\n\n return { items: sortedItems, requestSort, sortConfig };\n}","import { DataTable, DataTableSortStatus } from \"mantine-datatable\";\nimport * as React from 'react';\nimport {Avatar, Group, Text, ScrollArea, Badge} from '@mantine/core';\nimport {Link} from \"react-router-dom\";\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {Stack as LessonStack, Item as LessonItem} from \"./LessonStack\";\nimport { useSortableData } from \"../../utils/useSortableData\";\n\n/**\n * Item\n */\nexport interface Item {\n userId: string\n avatar: string\n name: string\n email: string\n isComplete?: boolean\n lessons: LessonItem[]\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n // Map status boolean to a number so it can be sorted\n const preparedItems = React.useMemo(() => {\n return props.items.map(item => ({\n ...item,\n status: item.isComplete ? 1 : 0,\n }));\n }, [props.items]);\n\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems); //add sort logic\n \n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No badges to display\"\n description=\"There has not been any badge progress just yet.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n\n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n };\n \n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n verticalSpacing=\"sm\"\n sx={{ minWidth: 700 }}\n withBorder={false}\n borderRadius=\"sm\"\n withColumnBorders\n striped\n highlightOnHover\n records={sortedItems}\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)}\n idAccessor=\"userId\"\n columns={[{\n accessor: 'name',\n title: 'Student Name',\n sortable: true,\n render: (row: Item) => (\n <Group spacing=\"sm\">\n <Avatar size={40} src={row.avatar} radius={40}/>\n <div>\n <Text size=\"sm\" weight={500}>\n {row.name}\n </Text>\n <Text size=\"xs\" color=\"dimmed\">\n {row.email}\n </Text>\n </div>\n </Group>\n ),\n },{\n accessor: 'status',\n title: 'Status',\n sortable: true,\n render: (row: Item) => (\n <>\n {!!row.isComplete && <Badge variant=\"filled\">Complete</Badge>}\n {!row.isComplete && <Badge color=\"red\" variant=\"filled\">Incomplete</Badge>}\n </>\n )\n }]}\n rowExpansion={{\n content: ({ record }: {record: Item}) => (\n <LessonStack items={record.lessons}/>\n ),\n }}\n />\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport {ScrollArea, Text} from '@mantine/core';\nimport {Link} from \"react-router-dom\";\nimport { DataTable, DataTableSortStatus } from \"mantine-datatable\"\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport { useSortableData } from \"../../utils/useSortableData\";\n/**\n * Item\n */\nexport interface Item {\n lessonId: string\n lessonName: string\n percentageCompletion: number\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(props.items);\n\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No lessons to display\"\n description=\"There are not lessons in badge.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n };\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n verticalSpacing=\"sm\"\n sx={{ minWidth: 700 }}\n highlightOnHover\n striped\n records={sortedItems}\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)}\n columns={[\n {\n accessor: 'lessonName',\n title: 'Lesson Name',\n sortable: true,\n render: (row) => (\n <Text<typeof Link> component={Link} to={row.href}>\n {row.lessonName}\n </Text>\n )\n },\n {\n accessor: 'percentageCompletion',\n title: 'Lesson Completion',\n sortable: true,\n render: (row) => `${Math.round((row.percentageCompletion + Number.EPSILON) * 100)}%`\n }\n ]}\n />\n </ScrollArea.Autosize>\n );\n}","import {IconArrowLeft, IconCategory2} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n createStyles,\n Badge as BadgeCore,\n Title,\n Text,\n Container, Stack, Grid,\n Select, ActionIcon, Group,\n LoadingOverlay,\n UnstyledButton,\n} from '@mantine/core';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Tabs} from \"../../components/navigation/Tabs/Tabs\";\nimport {SplitButton} from \"./SplitButton\";\nimport {Table, Item} from \"./Table\";\nimport {Table as LessonTable, Item as LessonItem} from \"./LessonTable\"\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n\n description: {\n maxWidth: 600,\n },\n}));\n\n/**\n * BadgeUserItem\n */\nexport type BadgeUserItem = Item\n\n/**\n * BadgeClass\n */\nexport type BadgeClass = {\n classId: string\n name: string\n active: boolean\n}\n\n/**\n * BadgeProps\n */\nexport type BadgeProps = {\n loading: boolean\n displayName: string,\n description: string\n classes: BadgeClass[]\n lessons: LessonItem[]\n classId: string\n students: BadgeUserItem[]\n href: string\n trial?: boolean\n lessonsCompleted?: number\n\n onBackClick: () => void;\n onClassChange: (classId: string) => void;\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\n/**\n * Badge\n * @param props\n * @constructor\n */\nexport const Badge = (props: BadgeProps) => {\n const { classes } = useStyles();\n const [tab, setTab] = useState(\"lessons\")\n\n const numberOfStudents = props.students.length\n const numberOfBadges = numberOfStudents > 0 ? props.students.filter(u => u.isComplete).length : 0\n const percentageOfBadgesEarned = numberOfStudents > 0 ? props.students.filter(u => u.isComplete).length / numberOfStudents : 0\n\n return (\n <Container fluid py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <UnstyledButton onClick={props.onBackClick}>\n <BadgeCore\n variant=\"filled\"\n leftSection={<ActionIcon color=\"blue\" size=\"xs\" radius=\"xl\" variant=\"filled\">\n <IconArrowLeft size={14} />\n </ActionIcon>}\n size=\"lg\">\n Back\n </BadgeCore>\n </UnstyledButton>\n <Group>\n <Stack spacing={0}>\n <Title order={2} className={classes.title} mt=\"md\">\n {props.displayName || \"Badge\"}\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">\n {props.description || \"No description\"}\n </Text>\n </Stack>\n\n {!props.trial && <Stack ml=\"auto\">\n <SplitButton\n href={props.href}\n onCopyLinkClick={props.onCopyLinkClick}\n onExportDataClick={props.onExportDataClick}\n />\n </Stack>}\n </Group>\n </Grid.Col>\n </Grid>\n <div>\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n <Stack>\n <StatsGroup data={[\n {\n title: props.trial ? \"LESSONS SUBMITTED\" : \"BADGE COMPLETION\",\n value: props.trial ? props.lessonsCompleted || 0 : numberOfBadges,\n unit: props.trial ? '' : '',\n },\n ]}/>\n\n { !props.trial && <Select\n clearable\n clearButtonLabel=\"Clear class selection\"\n size=\"sm\"\n placeholder=\"Select a class\"\n nothingFound=\"No options\"\n value={props.classId}\n onChange={props.onClassChange}\n icon={<IconCategory2/>}\n data={props.classes.map(g => {return {value: g.classId, label: g.name}})}\n />}\n\n <Stack spacing={0}>\n { !props.trial && <Tabs\n value={tab}\n data={[\n {label: \"By lesson\", value: \"lessons\"},\n {label: \"By student\", value: \"students\"},\n ]}\n onChange={setTab}\n />}\n\n { (!!props.trial || tab === \"lessons\") && <LessonTable\n loading={props.loading}\n items={props.lessons}\n /> }\n\n { (!props.trial && tab === \"students\") && <Table\n loading={props.loading}\n items={props.students}\n />}\n </Stack>\n </Stack>\n </div>\n </div>\n </Stack>\n </Container>\n )\n}","import * as React from 'react';\nimport {Link} from \"react-router-dom\";\n\n/**\n * Item\n */\nexport interface Item {\n badgeId: string,\n name: string;\n description: string\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[];\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n if (props.loading) {\n return <div className=\"text-sm text-slate-400\">Loading…</div>;\n }\n\n if (props.items.length === 0) {\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white p-8 text-center text-sm text-slate-400 shadow-sm\">\n No badges to display.\n </div>\n );\n }\n\n return (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n {props.items.map((row, i) => (\n <Link\n key={row.badgeId}\n to={row.href}\n className={`block px-5 py-4 no-underline hover:bg-slate-50 ${i < props.items.length - 1 ? \"border-b border-slate-100\" : \"\"}`}\n >\n <div className=\"text-sm font-bold text-dark-blue-400\">{row.name}</div>\n {row.description && <div className=\"mt-1 text-xs leading-relaxed text-slate-500\">{row.description}</div>}\n </Link>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport {IconSearch} from \"@tabler/icons\";\nimport {Table, Item} from \"./Table\";\n\n/**\n * BadgeItem\n */\nexport type BadgeItem = Item\n\n/**\n * BadgesProps\n */\nexport type BadgesProps = {\n loading: boolean\n badges: BadgeItem[]\n\n onAutocompleteChange: (value: string) => void\n}\n\n/**\n * Badges\n * @param props\n * @constructor\n */\nexport const Badges = (props: BadgesProps) => {\n return (\n <div className=\"flex flex-col gap-5 px-4 py-8\">\n <div className=\"space-y-1\">\n <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">Badges and micro-credentials</h1>\n <p className=\"text-sm text-slate-500\">Project-sized skills acquisition and standards alignment.</p>\n </div>\n\n <div className=\"flex items-center gap-2.5 rounded-xl border border-slate-200 bg-white px-4 py-3 shadow-sm\">\n <IconSearch size={15} stroke={1.75} className=\"text-slate-400\" />\n <input\n type=\"text\"\n placeholder=\"Search for a badge that fits your needs\"\n onChange={(e) => props.onAutocompleteChange(e.target.value)}\n className=\"flex-1 border-none bg-transparent text-sm text-dark-blue-400 outline-none placeholder:text-slate-400\"\n />\n </div>\n\n <Table loading={props.loading} items={props.badges} />\n </div>\n )\n}\n","import * as React from 'react';\nimport {Table as MantineTable, ScrollArea, UnstyledButton} from '@mantine/core';\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n studentId: string\n studentName: string\n className: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableMethods\n */\nexport type TableMethods = {\n onViewProfile: (item: Item) => void;\n}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & TableMethods\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No students to display\"\n description=\"You don't have any students yet, add them and revisit.\"\n loading={props.loading}\n icon=\"groups\"\n />\n }\n\n const rows = props.items.map((row) => (\n <tr key={row.studentName}>\n <td><UnstyledButton onClick={() => props.onViewProfile(row)}>{row.studentName}</UnstyledButton></td>\n <td>{row.className}</td>\n </tr>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <MantineTable verticalSpacing=\"sm\" sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Student Name</th>\n <th>Class Name</th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea.Autosize>\n );\n}","// https://stackoverflow.com/questions/6108819/javascript-timestamp-to-relative-time\nconst units: {unit: Intl.RelativeTimeFormatUnit; ms: number}[] = [\n {unit: \"year\", ms: 31536000000},\n {unit: \"month\", ms: 2628000000},\n {unit: \"day\", ms: 86400000},\n {unit: \"hour\", ms: 3600000},\n {unit: \"minute\", ms: 60000},\n {unit: \"second\", ms: 1000},\n];\nconst rtf = new Intl.RelativeTimeFormat(\"en\", {numeric: \"auto\"});\n\n/**\n * Get language-sensitive relative time message from Dates.\n * @param relative - the relative dateTime, generally is in the past or future\n * @param pivot - the dateTime of reference, generally is the current time\n */\nexport function relativeTimeFromDates(relative: Date | null, pivot: Date = new Date()): string {\n if (!relative) return \"\";\n const elapsed = relative.getTime() - pivot.getTime();\n return relativeTimeFromElapsed(elapsed);\n}\n\n/**\n * Get language-sensitive relative time message from elapsed time.\n * @param elapsed - the elapsed time in milliseconds\n */\nexport function relativeTimeFromElapsed(elapsed: number): string {\n for (const {unit, ms} of units) {\n if (Math.abs(elapsed) >= ms || unit === \"second\") {\n return rtf.format(Math.round(elapsed / ms), unit);\n }\n }\n return \"\";\n}","import * as React from 'react';\nimport {Table as MantineTable, ScrollArea} from '@mantine/core';\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {relativeTimeFromDates} from \"../../utils/time\";\n\n/**\n * Item\n */\nexport interface Item {\n lessonName: string\n studentName: string\n reflection: string\n updatedAt: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableMethods\n */\nexport type TableMethods = {}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & TableMethods\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No reflections to display\"\n description=\"There has not been any lesson progress just yet.\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n const rows = props.items.map((row) => (\n <tr key={row.studentName+row.lessonName}>\n <td>{row.studentName}</td>\n <td>{row.lessonName}</td>\n <td>{row.reflection}</td>\n <td>{relativeTimeFromDates(new Date(row.updatedAt))}</td>\n </tr>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <MantineTable verticalSpacing=\"sm\" sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Student Name</th>\n <th>Lesson Name</th>\n <th>Reflection</th>\n <th>Updated At</th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport {Table as MantineTable, ScrollArea} from '@mantine/core';\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n studentName: string\n impactStatement: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableMethods\n */\nexport type TableMethods = {}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & TableMethods\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No impact statements to display\"\n description=\"There are no students with impact statements yet.\"\n loading={props.loading}\n icon=\"kindergarten\"\n />\n }\n\n const rows = props.items.map((row) => (\n <tr key={row.studentName}>\n <td>{row.studentName}</td>\n <td>{row.impactStatement}</td>\n </tr>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <MantineTable verticalSpacing=\"sm\" sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Student Name</th>\n <th>Impact Statement</th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport { Table as MantineTable, Group, Text, ScrollArea, UnstyledButton } from '@mantine/core';\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n badgeId: string,\n name: string;\n description: string\n percentageCompletion: number\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[];\n}\n\n/**\n * TableMethods\n */\nexport type TableMethods = {\n onClick: (badge: Item) => void\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & TableMethods\n\n/**\n * Table\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No badges to display\"\n description=\"We don't have any badges to show you just yet.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n\n const rows = props.items.map((row) => (\n <tr key={row.badgeId}>\n <td>\n <UnstyledButton onClick={() => props.onClick && props.onClick(row)}>\n {row.name}\n </UnstyledButton>\n </td>\n <td>{row.description}</td>\n <td>{Math.round((row.percentageCompletion + Number.EPSILON) * 100)}%</td>\n </tr>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <MantineTable verticalSpacing=\"sm\" sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Badge Name</th>\n <th>Description</th>\n <th>Completion</th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport { Table as MantineTable, Group, Text, ScrollArea, UnstyledButton } from '@mantine/core';\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n lessonId: string,\n name: string;\n description: string\n percentageCompletion: number\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[];\n}\n\n/**\n * TableMethods\n */\nexport type TableMethods = {\n onClick: (badge: Item) => void\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & TableMethods\n\n/**\n * Table\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No lessons to display\"\n description=\"We don't have any lessons to show you just yet.\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n const rows = props.items.map((row) => (\n <tr key={row.lessonId}>\n <td>\n <UnstyledButton onClick={() => props.onClick && props.onClick(row)}>\n {row.name}\n </UnstyledButton>\n </td>\n <td>{row.description}</td>\n <td>{Math.round((row.percentageCompletion + Number.EPSILON) * 100)}%</td>\n </tr>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <MantineTable verticalSpacing=\"sm\" sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Lesson Name</th>\n <th>Description</th>\n <th>Completion</th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea.Autosize>\n );\n}","import {IconCategory2} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {Container, LoadingOverlay, Select, Stack, Text, Title} from '@mantine/core';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Tabs} from \"../../components/navigation/Tabs/Tabs\";\nimport {Item as StudentItem, Table as StudentTable} from \"./StudentTable\";\nimport {Table as ReflectionTable, Item as ReflectionItem} from \"./ReflectionTable\";\nimport {Item as ImpactItem, Table as ImpactTable} from \"./ImpactTable\";\nimport {Item as BadgeItem, Table as BadgeTable} from \"./BadgeTable\";\nimport {Item as LessonItem, Table as LessonTable} from \"./LessonTable\";\n\n/**\n * DashboardClass\n */\nexport type DashboardClass = {\n classId: string\n name: string\n}\n\n/**\n * DashboardProps\n */\nexport type DashboardProps = {\n loading: boolean\n students: StudentItem[]\n impacts: ImpactItem[]\n reflections: ReflectionItem[],\n classes: DashboardClass[],\n badges: BadgeItem[],\n lessons: LessonItem[],\n classId: string\n percentageOfAccountsCreated: number\n numberOfBadgesEarned: number\n numberOfLessonsCompleted: number\n\n onClassChange: (classId: string) => void;\n onViewStudentProfile: (student: StudentItem) => void\n onBadgeClick: (badge: BadgeItem) => void;\n onLessonClick: (lesson: LessonItem) => void;\n}\n\n/**\n * Dashboard\n * @param props\n * @constructor\n */\nexport const Dashboard = (props: DashboardProps) => {\n const [tab, setTab] = useState(\"students\")\n\n return <Container fluid py=\"xl\">\n <Stack>\n <Stack spacing={0}>\n <Title size=\"h3\">Dashboard</Title>\n <Text color=\"dimmed\" size=\"sm\" mt=\"md\">\n Track your students’ pathway progress\n </Text>\n </Stack>\n <Stack>\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n <Stack spacing=\"sm\">\n <StatsGroup data={[\n {\n title: \"# OF STUDENTS\",\n value: props.students.length,\n },\n {\n title: \"ACCOUNT CREATION\",\n value: props.percentageOfAccountsCreated,\n unit: \"%\",\n },\n {\n title: \"BADGES EARNED\",\n value: props.numberOfBadgesEarned,\n },\n {\n title: \"LESSONS COMPLETED\",\n value: props.numberOfLessonsCompleted,\n },\n ]}/>\n\n <Select\n clearable\n clearButtonLabel=\"Clear class selection\"\n size=\"sm\"\n placeholder=\"Select a class\"\n nothingFound=\"No options\"\n value={props.classId}\n onChange={props.onClassChange}\n icon={<IconCategory2/>}\n data={props.classes.map(g => {return {value: g.classId, label: g.name}})}\n />\n\n <Stack spacing={0}>\n <Tabs\n value={tab}\n data={[\n {label: \"My students\", value: \"students\"},\n {label: \"Impact statements\", value: \"impact\"},\n {label: \"Reflections\", value: \"reflections\"},\n {label: \"Badges\", value: \"badges\"},\n {label: \"Lessons\", value: \"lessons\"},\n ]}\n onChange={setTab}\n />\n\n { tab === \"impact\" && <ImpactTable\n loading={props.loading}\n items={props.impacts}\n />}\n\n { tab === \"reflections\" && <ReflectionTable\n loading={props.loading}\n items={props.reflections}\n /> }\n\n { tab === \"badges\" && <BadgeTable\n loading={props.loading}\n items={props.badges}\n onClick={props.onBadgeClick}\n /> }\n\n { tab === \"lessons\" && <LessonTable\n loading={props.loading}\n items={props.lessons}\n onClick={props.onLessonClick}\n /> }\n\n { tab === \"students\" && <StudentTable\n loading={props.loading}\n items={props.students}\n onViewProfile={props.onViewStudentProfile}\n />}\n </Stack>\n </Stack>\n </div>\n </Stack>\n </Stack>\n </Container>\n}","import {openConfirmModal} from \"@mantine/modals\";\nimport {Text} from '@mantine/core';\nimport * as React from 'react';\nimport {Link} from \"react-router-dom\";\nimport {IconCheck, IconTrash} from '@tabler/icons';\nimport {useSortableData} from \"../../utils/useSortableData\";\n\n/**\n * Item\n */\nexport type Item = {\n classId: string,\n userId: string,\n avatar: string,\n email: string,\n givenName: string,\n familyName: string,\n lastActivity: Date | null\n readonly: boolean\n hasAccount: boolean\n badgesEarned: number\n lessonsCompleted: number\n isAdmin: boolean\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & {\n onDelete: (member: Item) => void\n onRoleChange: (user: Item, role: string | null) => void;\n}\n\nconst openDeleteModal = (student: Item, onDelete: (member: Item) => void) => openConfirmModal({\n title: `Remove \"${student.givenName && student.familyName ? `${student.givenName} ${student.familyName}` : student.email}\" from this class?`,\n centered: true,\n children: (\n <Text size=\"sm\">\n Click confirm if you want to remove the student from this specific class. This will NOT remove the student from the Tech Platform.\n </Text>\n ),\n labels: { confirm: 'Remove Student', cancel: \"Cancel\" },\n confirmProps: { color: 'red' },\n onConfirm: () => onDelete(student),\n});\n\n/**\n * Table. Same delete-confirmation (`openConfirmModal`) and role-change behavior as before this\n * round's restyle — only the row markup moved from `mantine-datatable` to Tailwind.\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n const preparedItems = React.useMemo(() => {\n return props.items.map(item => ({\n ...item,\n fullName: item.givenName && item.familyName ? `${item.givenName} ${item.familyName}`.toLowerCase() : item.email.toLowerCase(),\n }));\n }, [props.items]);\n\n const {items: sortedItems, requestSort, sortConfig} = useSortableData(preparedItems);\n\n if (props.loading) {\n return <div className=\"text-sm text-slate-400\">Loading…</div>;\n }\n\n if (props.items.length === 0) {\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white p-8 text-center text-sm text-slate-400 shadow-sm\">\n You have not rostered any students yet.\n </div>\n );\n }\n\n const indicator = (key: string) => sortConfig.key !== key ? \"\" : (sortConfig.direction === \"desc\" ? \" ▾\" : \" ▴\");\n\n return (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n {/* Header/email text intentionally darker (slate-500) than the shared slate-400 token Pathways/Badges/Lessons/FileLocker's tables still use — scoped to this page pending design feedback, see plan. */}\n <div className=\"grid grid-cols-[2.2fr_1.2fr_1fr_1.2fr_1fr_0.6fr] gap-3 border-b border-slate-100 px-5 py-3 text-[10px] font-bold uppercase tracking-wide text-slate-500\">\n <button onClick={() => requestSort(\"fullName\")} className=\"flex items-center text-left hover:text-slate-700\">Name{indicator(\"fullName\")}</button>\n <button onClick={() => requestSort(\"isAdmin\")} className=\"flex items-center justify-center text-center hover:text-slate-700\">Role{indicator(\"isAdmin\")}</button>\n <button onClick={() => requestSort(\"badgesEarned\")} className=\"flex items-center justify-center text-center hover:text-slate-700\">Badges Earned{indicator(\"badgesEarned\")}</button>\n <button onClick={() => requestSort(\"lessonsCompleted\")} className=\"flex items-center justify-center text-center hover:text-slate-700\">Lessons Completed{indicator(\"lessonsCompleted\")}</button>\n <button onClick={() => requestSort(\"hasAccount\")} className=\"flex items-center justify-center text-center hover:text-slate-700\">Account Created?{indicator(\"hasAccount\")}</button>\n <div />\n </div>\n {sortedItems.map((row, i) => {\n const name = row.givenName && row.familyName ? `${row.givenName} ${row.familyName}` : row.email;\n const initials = (row.givenName?.[0] || row.email[0] || \"?\") + (row.familyName?.[0] || \"\");\n const identity = (\n <>\n {row.avatar ? (\n <img className=\"h-8 w-8 shrink-0 rounded-full object-cover\" src={row.avatar} alt={name} />\n ) : (\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-mint-400/20 text-[10px] font-bold text-dark-blue-400\">\n {initials.toUpperCase()}\n </div>\n )}\n <div className=\"min-w-0\">\n <div className=\"truncate text-xs font-bold text-dark-blue-400\">{name}</div>\n <div className=\"truncate text-[10.5px] text-slate-500\">{row.email}</div>\n </div>\n </>\n );\n return (\n <div\n key={row.email}\n className={`grid grid-cols-[2.2fr_1.2fr_1fr_1.2fr_1fr_0.6fr] items-center gap-3 px-5 py-3.5 ${\n i < sortedItems.length - 1 ? \"border-b border-slate-100\" : \"\"\n }`}\n >\n {row.href ? (\n <Link to={row.href} className=\"flex min-w-0 items-center gap-2.5 no-underline\">\n {identity}\n </Link>\n ) : (\n <div className=\"flex min-w-0 items-center gap-2.5\">\n {identity}\n </div>\n )}\n\n <div className=\"flex justify-center\">\n <select\n disabled={row.readonly}\n value={row.isAdmin ? \"educator\" : \"student\"}\n onChange={(e) => props.onRoleChange && props.onRoleChange(row, e.target.value)}\n className=\"w-fit rounded-lg border border-slate-200 bg-white px-2.5 py-1.5 text-xs font-medium text-slate-600 disabled:opacity-50\"\n >\n <option value=\"student\">Student</option>\n <option value=\"educator\">Educator</option>\n </select>\n </div>\n\n <div className=\"text-center text-xs font-bold text-dark-blue-400\">{row.badgesEarned}</div>\n <div className=\"text-center text-xs font-bold text-dark-blue-400\">{row.lessonsCompleted}</div>\n <div className=\"flex justify-center\">{row.hasAccount && <IconCheck size={16} stroke={3} className=\"text-mint-400\" />}</div>\n <div>\n {!row.readonly && !!props.onDelete && (\n <button\n type=\"button\"\n onClick={() => openDeleteModal(row, props.onDelete)}\n className=\"flex h-7 w-7 items-center justify-center rounded-md text-slate-400 hover:bg-red-50 hover:text-red-500\"\n >\n <IconTrash size={14} stroke={1.75} />\n </button>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","import {IconArrowLeft, IconCloudUpload, IconDownload, IconLink, IconPlus, IconX} from \"@tabler/icons\";\nimport {ParseResult} from \"papaparse\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n Drawer,\n Button, TextInput,\n Group, Divider,\n} from '@mantine/core';\nimport { Dropzone, MIME_TYPES } from '@mantine/dropzone';\nimport { useForm } from '@mantine/form';\nimport * as papa from 'papaparse'\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Table, Item} from \"./Table\";\n\n/**\n * MemberItem\n */\nexport type MemberItem = Item\n\n/**\n * ClassProps\n */\nexport type ClassProps = {\n loading: boolean\n displayName: string\n description: string\n members: MemberItem[]\n percentageOfAccountsCreated: number\n numberOfBadgesEarned: number\n numberOfLessonsCompleted: number\n\n onBackClick: () => void;\n onCreateMembers: (members: MemberItem[]) => void;\n onDeleteMember: (student: MemberItem) => void;\n onChangeUserRole: (user: MemberItem, role: string | null) => void;\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n\n}\n\n/**\n * Class. Chrome (header, actions, stat bar, table) is restyled to match the redesigned educator\n * sidebar/shell; the Add Students drawer (CSV bulk upload + manual entry) and its underlying\n * `onCreateMembers`/Dropzone/form logic are unchanged from before this round.\n * @param props\n * @constructor\n */\nexport const Class = (props: ClassProps) => {\n const [opened, setOpened] = useState(false);\n return (\n <>\n <Drawer\n opened={opened}\n onClose={() => setOpened(false)}\n title=\"Add students\"\n padding=\"xl\"\n size=\"xl\"\n >\n <DropzoneButton {...props} close={() => setOpened(false)} />\n </Drawer>\n\n <div className=\"flex flex-col gap-5 px-4 py-8\">\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n <div className=\"space-y-1.5\">\n <div onClick={props.onBackClick} className=\"flex w-max cursor-pointer items-center gap-1 text-xs font-bold text-sky-blue-400\">\n <IconArrowLeft size={13} stroke={2.5} />\n Back\n </div>\n <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">{props.displayName || \"Class\"}</h1>\n <p className=\"text-sm text-slate-500\">{props.description || \"No description\"}</p>\n </div>\n\n {!props.loading && (\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => setOpened(true)}\n className=\"flex items-center gap-1.5 rounded-lg border border-slate-200 bg-white px-3.5 py-2 text-xs font-bold text-slate-600 hover:bg-slate-50\"\n >\n <IconPlus size={13} stroke={2} />\n Add students\n </button>\n <button\n type=\"button\"\n onClick={props.onCopyLinkClick}\n className=\"flex items-center gap-1.5 rounded-lg border border-slate-200 bg-white px-3.5 py-2 text-xs font-bold text-slate-600 hover:bg-slate-50\"\n >\n <IconLink size={13} stroke={2} />\n Copy class link\n </button>\n <button\n type=\"button\"\n onClick={props.onExportDataClick}\n className=\"flex items-center gap-1.5 rounded-lg bg-gradient-to-r from-gold-400 to-[#f5c300] px-3.5 py-2 text-xs font-bold text-dark-blue-400 shadow-[0_3px_12px_rgba(255,212,77,0.35)]\"\n >\n <IconDownload size={13} stroke={2} />\n Export data (.csv)\n </button>\n </div>\n )}\n </div>\n\n <StatsGroup data={[\n {\n title: \"# OF STUDENTS\",\n value: props.members.filter(a => !a.isAdmin).length,\n },\n {\n title: \"ACCOUNT CREATION\",\n value: props.percentageOfAccountsCreated,\n unit: \"%\",\n },\n {\n title: \"BADGES EARNED\",\n value: props.numberOfBadgesEarned,\n },\n {\n title: \"LESSONS COMPLETED\",\n value: props.numberOfLessonsCompleted,\n },\n ]}/>\n\n <Table\n loading={props.loading}\n items={props.members}\n onDelete={props.onDeleteMember}\n onRoleChange={props.onChangeUserRole}\n />\n </div>\n </>\n )\n}\n\nconst DropzoneButton = (props: ClassProps & {close: () => void}) => {\n const form = useForm({\n initialValues: {\n classId: '',\n userId: '',\n email: '',\n givenName: '',\n familyName: '',\n avatar: '',\n role: '',\n readonly: false,\n lastActivity: null,\n hasAccount: false,\n lessonsCompleted: 0,\n badgesEarned: 0,\n href: \"\",\n isAdmin: false,\n },\n\n validate: {\n email: (value) => /^\\S+@\\S+$/.test(value) && props.members.filter(u => u.email === value).length === 0 ? null : 'Invalid email',\n },\n });\n const openRef = React.useRef<() => void>(null);\n const [loading, setLoading] = React.useState(false)\n const onDrop = React.useCallback((acceptedFiles: File[]) => {\n setLoading(true)\n acceptedFiles.forEach((file) => {\n papa.parse(file, {\n download: true,\n header: true,\n dynamicTyping: true,\n skipEmptyLines: true,\n worker: true,\n complete: function(results: ParseResult<MemberItem>) {\n const data = results.data\n .filter(v => /^\\S+@\\S+$/.test(v.email) && props.members.filter(u => u.email === v.email).length === 0)\n data.length > 0 && props.onCreateMembers && props.onCreateMembers(data)\n setLoading(false)\n props.close()\n }\n })\n })\n\n }, [])\n\n return (\n <div className=\"flex flex-col gap-4\">\n <Dropzone\n loading={loading}\n openRef={openRef}\n onDrop={onDrop}\n accept={[MIME_TYPES.csv]}\n maxSize={5 * 1024 ** 2}\n >\n <div style={{ pointerEvents: 'none' }}>\n <Group position=\"center\">\n <IconCloudUpload size={50} stroke={1.5} />\n </Group>\n\n <p className=\"mt-6 text-center text-lg font-bold text-dark-blue-400\">Upload multiple</p>\n <p className=\"mt-2 text-center text-sm text-slate-400\">\n Drag&apos;n&apos;drop files here to upload. We can accept only <i>.csv</i> files that\n are less than 5mb in size.\n </p>\n </div>\n </Dropzone>\n\n <div className=\"flex justify-center\">\n <button\n type=\"button\"\n onClick={() => openRef.current?.()}\n className=\"rounded-full bg-dark-blue-400 px-6 py-2.5 text-xs font-bold text-white\"\n >\n Select file\n </button>\n </div>\n\n <Divider label=\"or\" labelPosition=\"center\" my=\"md\" variant=\"dashed\"/>\n\n <form onSubmit={form.onSubmit(() => {\n const values = form.values\n form.reset()\n props.close()\n props.onCreateMembers && props.onCreateMembers([values])\n })}>\n <div className=\"flex flex-col gap-3\">\n <TextInput\n withAsterisk\n label=\"Email\"\n placeholder=\"Email\"\n {...form.getInputProps('email')}\n />\n <Group grow>\n <TextInput\n label=\"Given name\"\n placeholder=\"Given name\"\n {...form.getInputProps('givenName')}\n />\n <TextInput\n label=\"Family name\"\n placeholder=\"Family name\"\n {...form.getInputProps('familyName')}\n />\n </Group>\n <button\n type=\"submit\"\n className=\"mt-2 rounded-lg bg-dark-blue-400 px-4 py-2.5 text-xs font-bold text-white\"\n >\n Submit\n </button>\n </div>\n </form>\n </div>\n );\n}\n","import {openConfirmModal} from \"@mantine/modals\";\nimport * as React from 'react';\nimport { DataTable, DataTableSortStatus } from 'mantine-datatable';\nimport { Group, Text, ActionIcon, ScrollArea, UnstyledButton } from '@mantine/core';\nimport { IconTrash } from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {useSortableData} from \"../../utils/useSortableData\";\n\nexport type Item = { \n href: string, \n classId: string, \n name: string; \n description: string, \n numberOfStudents: number \n}\n\nexport interface TableProps {\n loading: boolean\n items: Item[];\n onDeleteClass: (item: Item) => void\n}\n\nexport function Table(props: TableProps) {\n // 1. Initialize sorting on the underlying data\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(props.items);\n\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No classes to display\"\n description=\"You don't have any classes yet. Try creating one first...\"\n loading={props.loading}\n icon=\"groups\"\n />\n }\n\n const openDeleteModal = (group: Item) => openConfirmModal({\n title: `Delete \"${group.name}\"?`,\n centered: true,\n children: (\n <Text size=\"sm\">\n Are you sure you want to delete this class? This action is destructive and you will have\n to contact support to restore your data.\n </Text>\n ),\n labels: { confirm: 'Delete class', cancel: \"No don't delete it\" },\n confirmProps: { color: 'red' },\n onConfirm: () => props.onDeleteClass(group),\n });\n\n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n };\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n withBorder={false}\n borderRadius=\"sm\"\n verticalSpacing=\"sm\"\n sx={{ minWidth: 700 }}\n highlightOnHover\n striped\n records={sortedItems}\n idAccessor=\"classId\"\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)}\n columns={[\n {\n accessor: 'name',\n title: 'Class Name',\n sortable: true,\n render: (row) => (\n <UnstyledButton<typeof Link> component={Link} to={row.href}>\n <Text size={14} weight={500}>\n {row.name}\n </Text>\n </UnstyledButton>\n ),\n },\n {\n accessor: 'description',\n title: 'Description',\n // Static column (no sortable: true)\n render: (row) =>\n <Text size={14}>\n {row.description}\n </Text>\n },\n {\n accessor: 'numberOfStudents',\n title: '# of Students',\n sortable: true,\n render: (row) =>\n <Text size={14}>\n {row.numberOfStudents || 0}\n </Text>\n },\n {\n accessor: 'actions',\n title: '',\n render: (row) => (\n <Group noWrap spacing={0} position=\"right\">\n <ActionIcon color=\"red\" onClick={() => openDeleteModal(row)}>\n <IconTrash size={16} stroke={1.5} />\n </ActionIcon>\n </Group>\n ),\n },\n ]}\n />\n </ScrollArea.Autosize>\n );\n}","import {IconInfoCircle, IconPlaylistAdd} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n createStyles,\n Badge,\n Title,\n Text,\n Container, Stack, Grid,\n Drawer,\n Button, TextInput, ActionIcon,\n Tooltip, Group, LoadingOverlay, Autocomplete,\n} from '@mantine/core';\nimport { useForm } from '@mantine/form';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Table, Item} from \"./Table\";\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n\n description: {\n maxWidth: 600,\n },\n}));\n\n/**\n * ClassItem\n */\nexport type ClassItem = Item\n\n/**\n * ClassesProps\n */\nexport type ClassesProps = {\n loading: boolean\n classes: ClassItem[]\n\n onCreateClass: (group: ClassItem) => void\n onDeleteClass: (group: ClassItem) => void\n onAutocompleteChange: (next: string) => void\n}\n\n/**\n * Classes\n * @param props\n * @constructor\n */\nexport const Classes = (props: ClassesProps) => {\n const { classes } = useStyles();\n const form = useForm({\n initialValues: {\n classId: '',\n name: '',\n description: '',\n href: '',\n numberOfStudents: 0,\n },\n\n validate: {\n name: (val) => (val.length <= 6 ? 'Name should include at least 6 characters' : null),\n },\n });\n const [opened, setOpened] = useState(false);\n return (\n <>\n <Drawer\n opened={opened}\n onClose={() => setOpened(false)}\n title={<Group spacing={0}>\n <Title size=\"h5\">Create a class</Title>\n <Tooltip label=\"Classes settings cannot be modified once created\">\n <ActionIcon>\n <IconInfoCircle color=\"#3b82f6\" size={14} />\n </ActionIcon>\n </Tooltip>\n </Group>}\n padding=\"xl\"\n size=\"xl\"\n >\n <form onSubmit={form.onSubmit(() => {\n const values = form.values\n form.reset()\n setOpened(false)\n props.onCreateClass && props.onCreateClass(values)\n })}>\n <Stack>\n <TextInput\n withAsterisk\n label=\"Name\"\n placeholder=\"Class name\"\n {...form.getInputProps('name')}\n />\n <TextInput\n label=\"Description\"\n placeholder=\"A class for my first period English students\"\n {...form.getInputProps('description')}\n />\n </Stack>\n <Button type=\"submit\" fullWidth mt=\"md\">\n Submit\n </Button>\n </form>\n </Drawer>\n <Container fluid py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <Badge variant=\"filled\" size=\"lg\">\n Classes\n </Badge>\n <Title order={2} className={classes.title} mt=\"md\">\n Organize people into classes\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">\n Create classes, cohorts, or custom subgroups\n </Text>\n </Grid.Col>\n <Grid.Col sm=\"content\">\n { !props.loading && <Button\n onClick={() => setOpened(true)}\n leftIcon={<IconPlaylistAdd size={14} />}>\n Create class\n </Button> }\n </Grid.Col>\n </Grid>\n\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n <Stack spacing=\"sm\">\n <StatsGroup data={[\n {\n title: \"# OF CLASSES\",\n value: props.classes.length,\n },\n ]}/>\n\n <Autocomplete\n placeholder=\"Search for classes\"\n data={props.classes.map(item => item.name)}\n onChange={props.onAutocompleteChange}\n />\n\n <Table\n loading={props.loading}\n items={props.classes}\n onDeleteClass={props.onDeleteClass}\n />\n </Stack>\n </div>\n </Stack>\n </Container>\n </>\n )\n}","import * as React from 'react';\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n badgeId: string\n badgeName: string\n isComplete?: boolean\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n if (props.items.length === 0) {\n return <PlaceholderBanner\n title=\"No badges to display\"\n description=\"There has not been any badge progress just yet.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n\n return (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n {props.items.map((row, i) => (\n <div\n key={row.badgeId || row.badgeName}\n className={`flex items-center justify-between gap-4 px-5 py-4 ${i < props.items.length - 1 ? \"border-b border-slate-100\" : \"\"}`}\n >\n <div className=\"text-sm font-bold text-dark-blue-400\">{row.badgeName}</div>\n <span className={`shrink-0 rounded-full px-2.5 py-1 text-[10px] font-bold uppercase tracking-wide ${row.isComplete ? \"bg-mint-100 text-dark-blue-400\" : \"bg-slate-100 text-slate-500\"}`}>\n {row.isComplete ? \"Complete\" : \"Incomplete\"}\n </span>\n </div>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport {Link} from \"react-router-dom\";\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n lessonId: string\n lessonName: string\n badgeName?: string\n questionName: string\n answer: string[]\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\ntype LessonGroup = {\n lessonId: string\n lessonName: string\n badgeName?: string\n href: string\n items: Item[]\n}\n\n/**\n * Table. Groups the flat, one-row-per-question item list into one card per lesson - incoming order\n * (badge, then curriculum position - see getStudent() in useOrganization.ts) determines group order.\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n if (props.items.length === 0) {\n return <PlaceholderBanner\n title=\"No answers to display\"\n description=\"There has not been any lesson progress just yet.\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n const groups: LessonGroup[] = [];\n const groupByLessonId: Record<string, LessonGroup> = {};\n props.items.forEach((row) => {\n let group = groupByLessonId[row.lessonId];\n if (!group) {\n group = {lessonId: row.lessonId, lessonName: row.lessonName, badgeName: row.badgeName, href: row.href, items: []};\n groupByLessonId[row.lessonId] = group;\n groups.push(group);\n }\n group.items.push(row);\n });\n\n return (\n <div className=\"flex flex-col gap-3\">\n {groups.map((group) => (\n <div key={group.lessonId} className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div className=\"border-b border-slate-100 px-5 py-4\">\n <Link to={group.href} className=\"text-sm font-bold text-dark-blue-400 no-underline hover:underline\">{group.lessonName}</Link>\n {group.badgeName && <div className=\"mt-1 text-xs text-slate-500\">{group.badgeName}</div>}\n </div>\n {group.items.map((row, i) => (\n <div\n key={row.questionName}\n className={`px-5 py-4 ${i < group.items.length - 1 ? \"border-b border-slate-100\" : \"\"}`}\n >\n <div className=\"text-xs font-semibold text-slate-500\">{row.questionName}</div>\n <div className=\"mt-1 text-xs text-slate-600\">{row.answer.join(\", \")}</div>\n </div>\n ))}\n </div>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport {Link} from \"react-router-dom\";\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n lessonId: string\n lessonName: string\n badgeName?: string\n reflection: string\n rating: number\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n if (props.items.length === 0) {\n return <PlaceholderBanner\n title=\"No reflections to display\"\n description=\"There has not been any lesson progress just yet.\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n return (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n {props.items.map((row, i) => (\n <div\n key={row.lessonId || row.lessonName}\n className={`flex items-start justify-between gap-4 px-5 py-4 ${i < props.items.length - 1 ? \"border-b border-slate-100\" : \"\"}`}\n >\n <div className=\"min-w-0\">\n <Link to={row.href} className=\"text-sm font-bold text-dark-blue-400 no-underline hover:underline\">{row.lessonName}</Link>\n {row.badgeName && <div className=\"mt-1 text-xs text-slate-500\">{row.badgeName}</div>}\n <div className=\"mt-1.5 text-xs text-slate-600\">{row.reflection}</div>\n </div>\n <div className=\"shrink-0 rounded-full bg-gold-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400\">\n {row.rating.toLocaleString()}\n </div>\n </div>\n ))}\n </div>\n );\n}\n","import {IconArrowLeft} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from \"react\";\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Table as BadgeTable, Item as BadgeItem} from \"./BadgeTable\"\nimport {Table as AnswerTable, Item as AnswerItem} from \"./AnswerTable\"\nimport {Table as ReflectionTable, Item as ReflectionItem} from \"./ReflectionTable\"\n\n/**\n * StudentProps\n */\nexport type StudentProps = {\n loading: boolean\n name: string\n impactStatement: string\n numberOfProblemsSolved: number\n percentageOfLessonsCompleted: number\n numberOfLessonsCompleted: number\n badges: BadgeItem[],\n lessons: LessonItem[],\n answers: AnswerItem[],\n reflections: ReflectionItem[],\n\n onBackClick: () => void\n}\ntype LessonItem = {\n lessonId: string\n lessonName: string\n isComplete: boolean\n}\nconst TABS = [\n {label: \"My badges\", value: \"badges\"},\n {label: \"My answers\", value: \"answers\"},\n {label: \"My reflections\", value: \"reflections\"},\n]\n\nexport const Student = (props: StudentProps) => {\n const [tab, setTab] = useState(\"badges\")\n const numberOfBadgesCompleted = props.badges.length > 0 ? props.badges.filter(b => b.isComplete).length : 0\n const numberOfLessonsCompleted = props.lessons.filter(l => l.isComplete).length\n\n return (\n <div className=\"flex flex-col gap-5 px-4 py-8\">\n <div className=\"space-y-1.5\">\n <div onClick={props.onBackClick} className=\"flex w-max cursor-pointer items-center gap-1 text-xs font-bold text-sky-blue-400\">\n <IconArrowLeft size={13} stroke={2.5} />\n Back\n </div>\n <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">{props.name || \"Student\"}</h1>\n {props.impactStatement && <p className=\"max-w-xl text-sm text-slate-500\">{props.impactStatement}</p>}\n </div>\n\n <StatsGroup data={[\n {\n title: \"PROBLEMS SOLVED\",\n value: props.numberOfProblemsSolved,\n },\n {\n title: \"LESSON COMPLETION\",\n value: numberOfLessonsCompleted,\n },\n {\n title: \"BADGE COMPLETION\",\n value: numberOfBadgesCompleted,\n },\n ]}/>\n\n <div className=\"flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1\">\n {TABS.map((t) => (\n <button\n key={t.value}\n onClick={() => setTab(t.value)}\n className={`rounded-lg px-4 py-2 text-xs font-bold ${tab === t.value ? \"bg-sky-blue-400/20 text-dark-blue-400\" : \"text-slate-400 hover:text-slate-600\"}`}\n >\n {t.label}\n </button>\n ))}\n </div>\n\n {tab === \"badges\" && <BadgeTable loading={props.loading} items={props.badges} />}\n {tab === \"answers\" && <AnswerTable loading={props.loading} items={props.answers} />}\n {tab === \"reflections\" && <ReflectionTable loading={props.loading} items={props.reflections} />}\n </div>\n )\n}","import * as React from 'react';\n\nexport type CardGradientAccent = \"cyan\" | \"mint\" | \"gold\";\n\nconst ACCENT_BORDER: Record<CardGradientAccent, string> = {\n cyan: \"border-l-sky-blue-400\",\n mint: \"border-l-mint-400\",\n gold: \"border-l-gold-400\",\n};\n\nconst ACCENT_GRADIENT: Record<CardGradientAccent, string> = {\n cyan: \"from-sky-blue-400\",\n mint: \"from-mint-400\",\n gold: \"from-gold-400\",\n};\n\nexport type CardGradientProps = {\n title: string;\n description: string;\n onClick: () => void;\n icon?: React.ReactNode\n accent?: CardGradientAccent\n}\n\n/**\n * A clickable link-card used on Teacher Home. Same title/description/onClick contract as before\n * this round's restyle; the Mantine from/to gradient color-name props are replaced with a single\n * accent prop matching the app-wide cyan/mint/gold rotation (see Navbar.tsx's own per-item accent\n * mapping, reused here for the same 5 sections). Not part of the public barrel - Home.tsx is its\n * only consumer, so this prop-contract change carries no other blast radius.\n */\nexport function CardGradient(props: CardGradientProps) {\n const accent = props.accent || \"cyan\"\n return (\n <div\n onClick={props.onClick}\n className={`flex cursor-pointer items-center gap-[18px] rounded-2xl border border-l-4 border-slate-200 bg-white px-[22px] py-[18px] transition-transform hover:scale-[1.02] hover:shadow-md ${ACCENT_BORDER[accent]}`}\n >\n <div className={`flex h-10 w-10 shrink-0 items-center justify-center rounded-[10px] bg-gradient-to-br ${ACCENT_GRADIENT[accent]} to-dark-blue-400 text-white`}>\n {props.icon}\n </div>\n <div>\n <div className=\"text-[15.5px] font-extrabold text-dark-blue-400\">{props.title}</div>\n <div className=\"mt-0.5 text-xs text-slate-500\">{props.description}</div>\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport {IconAlbum, IconCategory2, IconClipboard, IconGauge, IconRoute} from '@tabler/icons';\nimport {showNotification} from '@mantine/notifications';\nimport {CardGradient} from \"../../components/cards/CardGradient\";\n\n/**\n * HomeProps\n */\nexport type HomeProps = {\n loading: boolean\n avatarURL: string\n name: string\n impactStatement: string\n organization: {name: string, description: string, image: string, website: string, accessCode: string}\n\n onDashboardClick: () => void;\n onClassesClick: () => void;\n onPathwaysClick: () => void;\n onBadgesClick: () => void;\n onLessonsClick: () => void;\n onFileLockerClick: () => void;\n\n}\n\n/**\n * Home\n * @param props\n * @constructor\n */\nexport const Home = (props: HomeProps) => {\n const accessCode = props.organization.accessCode\n\n const onCopyAccessCode = async () => {\n if (!accessCode) return;\n\n try {\n await navigator.clipboard.writeText(accessCode);\n showNotification({\n title: 'Copied!',\n message: \"Community code copied to clipboard.\",\n autoClose: 3000,\n });\n } catch (err) {\n console.error(\"Failed to copy code\", err);\n }\n };\n\n return <div className=\"flex w-full flex-col gap-5\">\n <div className=\"flex items-stretch gap-5\">\n <div className=\"flex-1\">\n <div className=\"text-[28px] font-extrabold text-dark-blue-400\">{props.name}</div>\n <div className=\"mt-1.5 text-[12.5px] text-slate-400\">{props.impactStatement}</div>\n </div>\n\n <div className=\"flex w-[440px] shrink-0 flex-col justify-between gap-3 rounded-2xl bg-gradient-to-br from-dark-blue-600 via-dark-blue-400 to-sky-blue-400 p-5\">\n <div>\n <div className=\"text-base font-extrabold text-white\">{props.organization.name}</div>\n <div className=\"mt-1.5 text-[11.5px] leading-relaxed text-white/70\">{props.organization.description}</div>\n </div>\n\n {accessCode && <div className=\"flex items-center gap-2\">\n <span className=\"text-[11px] text-white/70\">Community code: {accessCode}</span>\n <button\n onClick={onCopyAccessCode}\n className=\"rounded-md bg-white/90 px-2.5 py-1 text-[10.5px] font-bold text-dark-blue-400 hover:bg-white\"\n >\n Copy\n </button>\n </div>}\n </div>\n </div>\n\n <div className=\"flex flex-col gap-3\">\n <CardGradient\n title=\"Dashboard\"\n description=\"Track your students’ pathway progress\"\n accent=\"mint\"\n icon={<IconGauge size={18} stroke={1.75}/>}\n onClick={props.onDashboardClick}\n />\n <CardGradient\n title=\"Classes\"\n description=\"Create classes, cohorts, or custom subgroups\"\n accent=\"gold\"\n icon={<IconCategory2 size={18} stroke={1.75}/>}\n onClick={props.onClassesClick}\n />\n <CardGradient\n title=\"Pathways\"\n description=\"Explore all your unique pathway requirements in one clear space\"\n accent=\"cyan\"\n icon={<IconRoute size={18} stroke={1.75}/>}\n onClick={props.onPathwaysClick}\n />\n <CardGradient\n title=\"Badges\"\n description=\"Key milestones that reflect skill development, micro-credentials, or academic progress\"\n accent=\"mint\"\n icon={<IconAlbum size={18} stroke={1.75}/>}\n onClick={props.onBadgesClick}\n />\n <CardGradient\n title=\"File Locker\"\n description=\"A secure space to view student-submitted work and provide feedback\"\n accent=\"cyan\"\n icon={<IconClipboard size={18} stroke={1.75}/>}\n onClick={props.onFileLockerClick}\n />\n </div>\n </div>\n}\n","import * as React from 'react';\nimport { DataTable, DataTableSortStatus } from \"mantine-datatable\";\nimport { ScrollArea } from '@mantine/core';\nimport { PlaceholderBanner } from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport { useSortableData } from \"../../utils/useSortableData\";\n\n/**\n * Item\n */\nexport interface Item {\n studentName: string\n reflection: string\n rating: number\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableMethods\n */\nexport type TableMethods = {}\n\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & TableMethods\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(props.items);\n\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No reflections to display\"\n description=\"There has not been any lesson progress just yet.\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n };\n \n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n records={sortedItems} // sorted items instead of props.items\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)}\n columns={[\n { accessor: 'studentName', title: 'Student Name', sortable: true },\n { accessor: 'reflection', title: 'Reflection' },\n { accessor: 'rating', title: 'Rating', sortable: true },\n ]}\n />\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react'\nimport { createStyles, Button, Menu, Group, ActionIcon, Stack } from '@mantine/core';\nimport {\n IconChevronDown,\n IconClipboardCopy, IconTableExport\n} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\n\nconst useStyles = createStyles((theme) => ({\n button: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n marginLeft: 0,\n marginRight: 0,\n },\n\n menuControl: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n border: 0,\n borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark[7] : theme.white}`,\n },\n}));\n\nexport type SplitButtonProps = {\n href: string\n noExport?: boolean\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\nexport const SplitButton = (props: SplitButtonProps) => {\n const { classes, theme } = useStyles();\n const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === 'dark' ? 5 : 6];\n\n return (\n <Stack spacing=\"sm\">\n <Button<typeof Link> component={Link} to={props.href}\n className={classes.button}\n variant=\"gradient\"\n >\n Preview\n </Button>\n <Button\n variant=\"gradient\"\n leftIcon={<IconClipboardCopy size={14} />}\n onClick={props.onCopyLinkClick}\n >\n Copy link\n </Button>\n <Button\n leftIcon={<IconTableExport size={14} />}\n onClick={props.onExportDataClick}\n >\n Export data (.csv)\n </Button>\n </Stack>\n );\n}","import * as React from 'react';\nimport {Stack as MantineStack, UnstyledButton, ScrollArea, Title, Text} from '@mantine/core';\nimport { Link } from 'react-router-dom';\n\n/**\n * Item\n */\nexport interface Item {\n questionName: string\n answer: string[]\n}\n\n/**\n * StackData\n */\nexport type StackData = {\n href: string\n items: Item[]\n}\n\n/**\n * StackMethods\n */\nexport type StackMethods = {}\n\n/**\n * StackProps\n */\nexport type StackProps = StackData & StackMethods\n\n/**\n * Stack\n * @constructor\n * @param props\n */\nexport function Stack(props: StackProps) {\n if(props.items.length === 0){\n return null\n }\n\n const rows = props.items.map((row) => (\n <MantineStack spacing={0} key={row.questionName}>\n <Title color=\"dark.4\" size=\"lg\">{row.questionName}</Title>\n <Text>{row.answer.join(\",\") || \"No answer.\"}</Text>\n </MantineStack>\n ));\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <UnstyledButton<typeof Link> component={Link} to={props.href}>\n <MantineStack spacing={24} sx={{ padding: 20, minWidth: 700 }}>\n {rows}\n </MantineStack>\n </UnstyledButton>\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport {\n Avatar,\n Badge,\n Group,\n Text,\n ScrollArea,\n UnstyledButton,\n} from '@mantine/core';\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {Stack as AnswerStack, Item as AnswerItem} from \"./AnswerStack\"\nimport { DataTable, DataTableSortStatus } from \"mantine-datatable\";\nimport { useSortableData } from \"../../utils/useSortableData\";\n\n/**\n * Item\n */\nexport interface Item {\n userId: string\n avatar: string\n name: string\n email: string\n answers: AnswerItem[]\n isStarted?: boolean\n isComplete?: boolean\n href: string\n}\n\n/**\n * TableProps\n */\nexport interface TableProps {\n loading: boolean\n items: Item[];\n}\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n const preparedItems = React.useMemo(() => {\n return props.items.map(item => ({\n ...item,\n status: item.isComplete ? 2 : (item.isStarted ? 1 : 0),\n }));\n }, [props.items]);\n\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);\n \n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n }; \n\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No students to display\"\n description=\"You don't have any student data yet for this lesson\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n verticalSpacing=\"sm\"\n sx={{ minWidth: 700 }}\n withBorder={false}\n borderRadius=\"sm\"\n withColumnBorders\n striped\n highlightOnHover\n idAccessor=\"userId\"\n records={sortedItems}\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)}\n columns={[{\n accessor: 'name',\n title: 'Student Name',\n sortable: true,\n render: (row: Item) => (\n <UnstyledButton>\n <Group spacing=\"sm\">\n <Avatar size={40} src={row.avatar} radius={40}/>\n <div>\n <Text size=\"sm\" weight={500}>\n {row.name}\n </Text>\n <Text size=\"xs\" color=\"dimmed\">\n {row.email}\n </Text>\n </div>\n </Group>\n </UnstyledButton>\n ),\n },{\n accessor: 'status',\n title: 'Status',\n sortable: true,\n render: (row: Item) => (\n <>\n {!!row.isComplete && <Badge variant=\"filled\">Complete</Badge>}\n {!row.isComplete && !row.isStarted && <Badge color=\"red\" variant=\"filled\">Not started</Badge>}\n {!row.isComplete && !!row.isStarted && <Badge color=\"violet\" variant=\"filled\">In progress</Badge>}\n </>\n )\n }]}\n rowExpansion={{\n content: ({ record }: {record: Item}) => (\n <AnswerStack href={record.href} items={record.answers}/>\n ),\n }}\n />\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport {Stack as MantineStack, ScrollArea, Title, Text, Card} from '@mantine/core';\nimport {Chart, AxisOptions} from \"react-charts\";\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * Item\n */\nexport interface Item {\n question: string\n answers: string[][]\n choices?: string[]\n chart?: boolean\n}\n\n/**\n * StackData\n */\nexport type StackData = {\n loading: boolean\n items: Item[]\n}\n\n\n/**\n * StackProps\n */\nexport type StackProps = StackData\n\n/**\n * Stack\n * @constructor\n * @param props\n */\nexport function Stack(props: StackProps) {\n const primaryAxis = React.useMemo<\n AxisOptions<{primary: string, secondary: string}>\n >(\n () => ({\n position: \"left\",\n getValue: (datum) => datum.primary,\n }),\n []\n );\n\n const secondaryAxes = React.useMemo<\n AxisOptions<{primary: string, secondary: string}>[]\n >(\n () => [\n {\n position: \"bottom\",\n getValue: (datum) => datum.secondary,\n },\n ],\n []\n );\n\n\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No questions to display\"\n description=\"There are no questions in this lesson.\"\n loading={props.loading}\n icon=\"lessons\"\n />\n }\n\n const rows = props.items.map((row) => {\n if(row.chart){\n const labelMap: any = {}\n const choices = row.choices || []\n choices.forEach(c => {\n labelMap[c] = 0\n })\n\n row.answers.forEach(a => a.forEach(r => {\n if(r in labelMap){\n labelMap[r] = labelMap[r] ? labelMap[r] + 1 : 1\n }\n }))\n\n return <Card key={row.question} withBorder p=\"xl\" radius=\"md\">\n <MantineStack spacing={4}>\n <Title size=\"lg\">{row.question}</Title>\n <Text size=\"sm\">{row.answers.length} answers</Text>\n\n <div style={{ background: \"white\", height: \"300px\", width: \"100%\", position: 'relative' }}>\n <Chart\n options={{\n data: [{\n label: '',\n data: choices.map(k => {\n return {\n primary: truncateWithEllipses(k, 50),\n secondary: labelMap[k]\n }\n }),\n }],\n primaryAxis,\n secondaryAxes,\n }}\n />\n </div>\n </MantineStack>\n </Card>\n }\n\n return <Card key={row.question} withBorder p=\"xl\" radius=\"md\">\n <MantineStack spacing={4}>\n <Title size=\"lg\">{row.question}</Title>\n <Text size=\"sm\">{row.answers.length} answers</Text>\n\n <ScrollArea.Autosize maxHeight={600}>\n <MantineStack spacing={4}>\n {\n row.answers.map(a => {\n const answerText = a.join(\"\\n\")\n return <Card key={answerText} p={5} radius={0} bg=\"gray.0\">\n <Text>{answerText}</Text>\n </Card>\n })\n }\n </MantineStack>\n </ScrollArea.Autosize>\n </MantineStack>\n </Card>\n });\n\n\n return <MantineStack py={4} spacing={10} sx={{ minWidth: 700 }}>\n {rows}\n </MantineStack>\n}\n\nconst truncateWithEllipses = (text: string, max: number) => text.substr(0,max-1)+(text.length>max?'&hellip;':'')","import {IconArrowLeft, IconCategory2} from \"@tabler/icons\";\nimport AvatarInit from \"avatar-initials\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n createStyles,\n Badge,\n Title,\n Text,\n Container, Stack, Grid,\n Select, ActionIcon, Group,\n LoadingOverlay,\n UnstyledButton, Avatar,\n} from '@mantine/core';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Tabs} from \"../../components/navigation/Tabs/Tabs\";\nimport {compact} from \"../../utils/numbers\";\nimport {Item as ReflectionItem, Table as ReflectionTable} from \"./ReflectionTable\";\nimport {SplitButton} from \"./SplitButton\";\nimport {Table, Item} from \"./Table\";\nimport {Stack as QuestionStack, Item as QuestionItem} from \"./QuestionStack\";\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n\n description: {\n maxWidth: 600,\n },\n}));\n\n/**\n * LessonUserItem\n */\nexport type LessonUserItem = Item\n\n/**\n * LessonClass\n */\nexport type LessonClass = {\n classId: string\n name: string\n active: boolean\n}\n\n/**\n * LessonProps\n */\nexport type LessonProps = {\n loading: boolean\n displayName: string\n description: string\n href: string\n classId: string\n classes: LessonClass[]\n students: LessonUserItem[]\n reflections: ReflectionItem[],\n questions: QuestionItem[],\n trial?: boolean\n lessonsCompleted?: number\n contributors?: {name: string}[]\n\n onBackClick: () => void;\n onClassChange: (classId: string) => void;\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\n/**\n * Lesson\n * @param props\n * @constructor\n */\nexport const Lesson = (props: LessonProps) => {\n const { classes } = useStyles();\n const [tab, setTab] = useState(\"question\")\n\n const numberOfStudents = props.students.length\n const numberOfLessons = numberOfStudents > 0 ? props.students.filter(u => u.isComplete).length : 0\n const percentageOfLessonsCompleted = numberOfStudents > 0 ? props.students.filter(u => u.isComplete).length / numberOfStudents : 0\n const contributors = props.contributors || []\n const avatars = contributors.slice(0, 5).map((u, i) => {\n const fullName = u.name\n let initials = fullName.split(/[ -]/).map((n) => n.charAt(0)).join('');\n const src = AvatarInit.initialAvatar({\n background: '#1c7ed6',\n color: '#fff',\n fontFamily: \"'Lato', 'Lato-Regular', 'Helvetica Neue'\",\n fontSize: 10,\n fontWeight: 250,\n size: 30,\n initials: initials,\n })\n\n return <Avatar key={i} src={src} radius=\"xl\" />\n })\n\n const remainingUsers = contributors.slice(5).length\n if(remainingUsers){\n const initials = \"+\" + compact(remainingUsers)\n const src = AvatarInit.initialAvatar({\n background: '#1c7ed6',\n color: '#fff',\n fontFamily: \"'Lato', 'Lato-Regular', 'Helvetica Neue'\",\n fontSize: 10,\n fontWeight: 250,\n size: 30,\n initials: initials,\n })\n\n avatars.push(<Avatar src={src} radius=\"xl\" />)\n }\n\n const tabs = props.trial ? [\n {label: \"By question\", value: \"question\"},\n {label: \"By student\", value: \"students\"},\n ] : [\n {label: \"By question\", value: \"question\"},\n {label: \"By student\", value: \"students\"},\n {label: \"By reflection\", value: \"reflections\"},\n ]\n\n return (\n <Container fluid py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <UnstyledButton onClick={props.onBackClick}>\n <Badge\n variant=\"filled\"\n leftSection={<ActionIcon color=\"blue\" size=\"xs\" radius=\"xl\" variant=\"filled\">\n <IconArrowLeft size={14} />\n </ActionIcon>}\n size=\"lg\">\n Back\n </Badge>\n </UnstyledButton>\n <Group>\n <Stack spacing={0}>\n <Title order={2} className={classes.title} mt=\"md\">\n {props.displayName || \"Lesson\"}\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">\n {props.description || \"No description\"}\n </Text>\n </Stack>\n\n <Stack ml=\"auto\">\n <SplitButton\n href={props.href}\n noExport={props.trial}\n onCopyLinkClick={props.onCopyLinkClick}\n onExportDataClick={props.onExportDataClick}\n />\n </Stack>\n </Group>\n </Grid.Col>\n </Grid>\n <div>\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n <Stack>\n <StatsGroup\n data={[\n {\n title: props.trial ? \"# OF SUBMISSIONS\" : \"LESSON COMPLETION\",\n value: props.trial ? props.lessonsCompleted || 0 : numberOfLessons,\n unit: props.trial ? '' : '',\n },\n ]}\n />\n\n <Group position=\"apart\">\n <Avatar.Group spacing=\"sm\">\n {avatars}\n </Avatar.Group>\n </Group>\n\n {!props.trial && <Select\n clearable\n clearButtonLabel=\"Clear class selection\"\n size=\"sm\"\n placeholder=\"Select a class\"\n nothingFound=\"No options\"\n value={props.classId}\n onChange={props.onClassChange}\n icon={<IconCategory2/>}\n data={props.classes.map(g => {return {value: g.classId, label: g.name}})}\n />}\n\n <Stack spacing={0}>\n <Tabs\n value={tab}\n data={tabs}\n onChange={setTab}\n />\n\n { tab === \"question\" && <QuestionStack\n loading={props.loading}\n items={props.questions}\n />}\n\n { tab === \"reflections\" && <ReflectionTable\n loading={props.loading}\n items={props.reflections}\n /> }\n\n { tab === \"students\" && <Table\n loading={props.loading}\n items={props.students}\n />}\n </Stack>\n </Stack>\n </div>\n </div>\n </Stack>\n </Container>\n )\n}","import * as React from 'react';\nimport {Link} from \"react-router-dom\";\nimport {IconChevronRight} from \"@tabler/icons\";\n\n/**\n * Item\n */\nexport interface Item {\n lessonId: string,\n name: string;\n description: string\n pathway?: string\n href: string\n}\n\n/**\n * TableProps\n */\nexport interface TableProps {\n loading: boolean\n items: Item[];\n}\n\n/**\n * Table\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n if (props.loading) {\n return <div className=\"text-sm text-slate-400\">Loading…</div>;\n }\n\n if (props.items.length === 0) {\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white p-8 text-center text-sm text-slate-400 shadow-sm\">\n No lessons to display.\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex gap-4 px-4 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">\n <div className=\"flex-1\">Lesson</div>\n <div className=\"w-40 shrink-0\">Pathway</div>\n <div className=\"w-4 shrink-0\" />\n </div>\n\n {props.items.map((row) => (\n <Link\n key={row.lessonId}\n to={row.href}\n className=\"flex items-center gap-4 rounded-xl border border-slate-200 bg-white p-4 no-underline shadow-sm hover:bg-slate-50\"\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-bold text-dark-blue-400\">{row.name}</div>\n {row.description && <div className=\"mt-1 text-xs leading-relaxed text-slate-500\">{row.description}</div>}\n </div>\n <div className=\"w-40 shrink-0 text-xs text-slate-500\">{row.pathway || \"—\"}</div>\n <IconChevronRight size={16} stroke={2} className=\"w-4 shrink-0 text-slate-300\" />\n </Link>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport {IconSearch} from \"@tabler/icons\";\nimport {Table, Item} from \"./Table\";\n\n/**\n * LessonItem\n */\nexport type LessonItem = Item\n\n/**\n * LessonsProps\n */\nexport type LessonsProps = {\n loading: boolean\n lessons: LessonItem[]\n\n onAutocompleteChange: (next: string) => void\n}\n\n/**\n * Lessons\n * @param props\n * @constructor\n */\nexport const Lessons = (props: LessonsProps) => {\n return (\n <div className=\"flex flex-col gap-5 px-4 py-8\">\n <div className=\"space-y-1\">\n <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">Lessons</h1>\n <p className=\"text-sm text-slate-500\">Bite-sized activities and learning experiences accelerating students achievement</p>\n </div>\n\n <div className=\"relative\">\n <IconSearch size={16} stroke={2} className=\"pointer-events-none absolute left-3.5 top-1/2 -translate-y-1/2 text-slate-400\" />\n <input\n type=\"text\"\n placeholder=\"Search for a lesson that fits your needs\"\n onChange={(e) => props.onAutocompleteChange(e.target.value)}\n className=\"w-full rounded-xl border border-slate-200 bg-white py-2.5 pl-10 pr-4 text-sm text-dark-blue-400 placeholder:text-slate-400 focus:border-sky-blue-400 focus:outline-none\"\n />\n </div>\n\n <Table loading={props.loading} items={props.lessons} />\n </div>\n )\n}\n","import * as React from 'react';\nimport {\n createStyles,\n Paper,\n Title,\n Text,\n TextInput,\n Button,\n Container,\n Group,\n Anchor,\n Center,\n Box,\n} from '@mantine/core';\nimport {IconPointer} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 22,\n fontWeight: 900,\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n },\n\n controls: {\n [theme.fn.smallerThan('xs')]: {\n flexDirection: 'column-reverse',\n },\n },\n\n control: {\n [theme.fn.smallerThan('xs')]: {\n width: '100%',\n textAlign: 'center',\n },\n },\n}));\n\nexport type AccessCodeProps = {\n value: string\n peopleLink: string\n onCopyCode: () => void;\n}\n\nexport function AccessCode(props: AccessCodeProps) {\n const { classes } = useStyles();\n\n return (\n <Container mx=\"0\" px=\"0\" size={460} my={30}>\n <Title className={classes.title}>\n Access code\n </Title>\n <Text color=\"dimmed\" size=\"sm\">\n Grant access to join your organization\n </Text>\n\n <Paper withBorder shadow=\"md\" p={30} radius=\"md\" mt=\"xl\">\n <TextInput value={props.value} readOnly/>\n <Group position=\"apart\" mt=\"lg\" className={classes.controls}>\n <Anchor<typeof Link> component={Link} to={props.peopleLink}\n color=\"dimmed\" size=\"sm\" className={classes.control}>\n <Center inline>\n <IconPointer size={12} stroke={1.5} />\n <Box ml={5}>See people in my organization</Box>\n </Center>\n </Anchor>\n <Button onClick={props.onCopyCode} className={classes.control}>Copy code</Button>\n </Group>\n </Paper>\n </Container>\n );\n}","import {IconArrowLeft} from \"@tabler/icons\";\nimport * as React from 'react';\nimport {\n createStyles,\n Title,\n Text,\n Container, Stack, Grid,\n Badge,\n ActionIcon,\n LoadingOverlay,\n UnstyledButton,\n} from '@mantine/core';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {AccessCode} from \"./AccessCode\";\n\nconst monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n];\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n description: {\n maxWidth: 600,\n },\n wrapper: {\n position: 'relative',\n marginBottom: 30,\n },\n\n dropzone: {\n borderWidth: 1,\n paddingBottom: 50,\n },\n\n icon: {\n color: theme.colorScheme === 'dark' ? theme.colors.dark[3] : theme.colors.gray[4],\n },\n\n control: {\n position: 'absolute',\n width: 250,\n left: 'calc(50% - 125px)',\n bottom: -20,\n },\n}));\n\n/**\n * OrganizationProps\n */\nexport type OrganizationProps = {\n loading: boolean\n displayName: string\n description: string\n numberOfStudents: number\n numberOfEducators: number\n percentageOfAccountsActive: number\n accessCode: string\n peopleLink: string\n\n onBackClick: () => void;\n onCopyAccessCode: () => void;\n}\n\n/**\n * Organization\n * @param props\n * @constructor\n */\nexport const Organization = (props: OrganizationProps) => {\n const { classes } = useStyles();\n return (\n <>\n <Container fluid py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <UnstyledButton onClick={props.onBackClick}>\n <Badge\n variant=\"filled\"\n leftSection={<ActionIcon color=\"blue\" size=\"xs\" radius=\"xl\" variant=\"filled\">\n <IconArrowLeft size={14} />\n </ActionIcon>}\n size=\"lg\">\n Back\n </Badge>\n </UnstyledButton>\n <Title order={2} className={classes.title} mt=\"md\">\n {props.displayName || \"Overview\"}\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">\n {props.description || \"No description\"}\n </Text>\n </Grid.Col>\n </Grid>\n\n <AccessCode value={props.accessCode} onCopyCode={props.onCopyAccessCode} peopleLink={props.peopleLink} />\n\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n\n <Stack spacing=\"sm\">\n <StatsGroup data={[\n {\n title: \"# OF STUDENTS\",\n value: props.numberOfStudents || 0,\n },\n {\n title: \"# OF EDUCATORS\",\n value: props.numberOfEducators || 0,\n },\n {\n title: `ACTIVE USERS (${monthNames[(new Date()).getMonth()]})`,\n value: props.percentageOfAccountsActive,\n unit: \"%\",\n },\n ]}/>\n </Stack>\n </div>\n </Stack>\n </Container>\n </>\n )\n}","import * as React from 'react'\nimport { createStyles, Button, Menu, Group, ActionIcon } from '@mantine/core';\nimport {\n IconChevronDown,\n IconPlaylistAdd,\n IconClipboardCopy\n} from '@tabler/icons';\n\nconst useStyles = createStyles((theme) => ({\n button: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n marginLeft: 0,\n marginRight: 0,\n },\n\n menuControl: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n border: 0,\n borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark[7] : theme.white}`,\n },\n}));\n\nexport type SplitButtonProps = {\n withOrganizationLink?: boolean\n onAddUsersClick: () => void;\n onCopyOrganizationLinkClick: () => void;\n}\n\nexport const SplitButton = (props: SplitButtonProps) => {\n const { classes, theme } = useStyles();\n const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === 'dark' ? 5 : 6];\n\n const hasMenu = !!props.withOrganizationLink\n\n return (\n <Group noWrap spacing={0}>\n <Button\n className={hasMenu ? classes.button: \"\"}\n leftIcon={<IconPlaylistAdd size={14} />}\n onClick={props.onAddUsersClick}\n >\n Add members\n </Button>\n { hasMenu && <Menu transition=\"pop\" position=\"bottom-end\">\n <Menu.Target>\n <ActionIcon\n variant=\"filled\"\n color={theme.primaryColor}\n size={36}\n className={classes.menuControl}\n >\n <IconChevronDown size={16} stroke={1.5} />\n </ActionIcon>\n </Menu.Target>\n <Menu.Dropdown>\n { !!props.withOrganizationLink && <Menu.Item\n icon={<IconClipboardCopy size={16} stroke={1.5} color={menuIconColor} />}\n onClick={props.onCopyOrganizationLinkClick}\n >\n Copy organization link\n </Menu.Item> }\n </Menu.Dropdown>\n </Menu> }\n </Group>\n );\n}","import {openConfirmModal} from \"@mantine/modals\";\nimport * as React from 'react';\nimport {\n Avatar,\n Table as MantineTable,\n Group,\n Text,\n ActionIcon,\n UnstyledButton,\n ScrollArea,\n Select,\n Box\n} from '@mantine/core';\nimport {IconCheck, IconTrash} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\nimport {\n PlaceholderBanner\n} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {relativeTimeFromDates} from \"../../utils/time\";\n\n/**\n * Item\n */\nexport type Item = {\n userId: string,\n avatar: string,\n email: string,\n givenName: string,\n familyName: string,\n lastActivity: Date | null\n readonly: boolean\n hasAccount: boolean\n isAdmin: boolean\n isGroupAdmin: boolean\n numberOfClasses: number\n href: string\n}\n\n/**\n * TableProps\n */\nexport interface TableProps {\n loading: boolean\n items: Item[];\n\n onDelete?: (user: Item) => void\n onRoleChange?: (user: Item, role: string | null) => void;\n}\n\n/**\n * Table\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No people to display\"\n description=\"You have not rostered any people yet.\"\n loading={props.loading}\n icon=\"groups\"\n />\n }\n\n const openDeleteModal = (student: Item) => openConfirmModal({\n title: `Remove \"${student.givenName && student.familyName ? `${student.givenName} ${student.familyName}` : student.email}\" from this class?`,\n centered: true,\n children: (\n <Text size=\"sm\">\n Click confirm if you want to remove the student from this specific class. This will NOT remove the student from the Tech Platform.\n </Text>\n ),\n labels: { confirm: 'Remove Student', cancel: \"Cancel\" },\n confirmProps: { color: 'red' },\n onConfirm: () => props.onDelete && props.onDelete(student),\n });\n\n const rows = props.items.map((row) => (\n <tr key={row.email}>\n <td>\n <UnstyledButton<typeof Link> component={Link} to={row.href}>\n <Group spacing=\"sm\">\n <Avatar size={40} src={row.avatar} radius={40} />\n <div>\n <Text size=\"sm\" weight={500}>\n {row.givenName && row.familyName ? `${row.givenName} ${row.familyName}` : row.email}\n </Text>\n <Text size=\"xs\" color=\"dimmed\">\n {row.email}\n </Text>\n </div>\n </Group>\n </UnstyledButton>\n </td>\n <td>\n <Box maw={150}>\n <Select\n size=\"sm\"\n value={row.isAdmin ? \"admin\" : row.isGroupAdmin ? \"educator\" : \"student\"}\n onChange={(value) => props.onRoleChange && props.onRoleChange(row, value)}\n data={[{value: \"student\", label: \"Student\"}, {value: \"educator\", label: \"Educator\"}, {value: \"admin\", label: \"Admin\"}]}\n />\n </Box>\n </td>\n <td>{row.hasAccount && <IconCheck color=\"green\" />}</td>\n <td>{row.numberOfClasses}</td>\n {/* <td>{row.lastActivity ? relativeTimeFromDates(row.lastActivity) : \"\"}</td> */}\n <td>\n <Group noWrap spacing={0} position=\"right\">\n { !row.readonly && !!props.onDelete && <ActionIcon color=\"red\">\n <IconTrash onClick={() => openDeleteModal(row)} size={16} stroke={1.5} />\n </ActionIcon> }\n </Group>\n </td>\n </tr>\n ));\n\n return (\n <ScrollArea>\n <MantineTable verticalSpacing={20} sx={{ minWidth: 700 }} highlightOnHover striped>\n <thead>\n <tr>\n <th>Name</th>\n <th>Role</th>\n <th>Account Created?</th>\n <th># of Classes</th>\n {/* <th>Last Active</th> */}\n <th></th>\n </tr>\n </thead>\n <tbody>{rows}</tbody>\n </MantineTable>\n </ScrollArea>\n );\n}","import {IconArrowLeft, IconCloudUpload, IconX, IconDownload} from \"@tabler/icons\";\nimport {ParseResult} from \"papaparse\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n createStyles,\n Title,\n Text,\n Container, Stack, Grid,\n Drawer,\n Button, TextInput, Badge,\n ActionIcon,\n Group, Divider, LoadingOverlay, Autocomplete,\n UnstyledButton,\n} from '@mantine/core';\nimport { Dropzone, MIME_TYPES } from '@mantine/dropzone';\nimport { useForm } from '@mantine/form';\nimport * as papa from 'papaparse'\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {SplitButton} from \"./SplitButton\";\nimport {Table, Item} from \"./Table\";\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n description: {\n maxWidth: 600,\n },\n wrapper: {\n position: 'relative',\n marginBottom: 30,\n },\n\n dropzone: {\n borderWidth: 1,\n paddingBottom: 50,\n },\n\n icon: {\n color: theme.colorScheme === 'dark' ? theme.colors.dark[3] : theme.colors.gray[4],\n },\n\n control: {\n position: 'absolute',\n width: 250,\n left: 'calc(50% - 125px)',\n bottom: -20,\n },\n}));\n\n/**\n * UserItem\n */\nexport type UserItem = Item\n\n/**\n * PeopleProps\n */\nexport type PeopleProps = {\n loading: boolean\n users: UserItem[]\n percentageOfAccountsCreated: number\n percentageRostered: number\n withOrganizationLink?: boolean\n\n onBackClick: () => void;\n onCreateUsers: (users: UserItem[]) => void;\n onDeleteUser: (user: UserItem) => void;\n onChangeUserRole: (user: UserItem, role: string | null) => void;\n onCopyLinkClick: () => void;\n onAutocompleteChange: (next: string) => void\n}\n\n/**\n * Class\n * @param props\n * @constructor\n */\nexport const People = (props: PeopleProps) => {\n const { classes } = useStyles();\n const form = useForm({\n initialValues: {\n userId: '',\n email: '',\n givenName: '',\n familyName: '',\n avatar: '',\n role: '',\n readonly: false,\n lastActivity: null,\n hasAccount: false,\n numberOfClasses: 0,\n href: \"\",\n isAdmin: false,\n isGroupAdmin: false,\n },\n\n validate: {\n email: (value) => /^\\S+@\\S+$/.test(value) && props.users.filter(u => u.email === value).length === 0 ? null : 'Invalid email',\n },\n });\n const [opened, setOpened] = useState(false);\n return (\n <>\n <Drawer\n opened={opened}\n onClose={() => setOpened(false)}\n title={<Title size=\"h5\">Add members</Title>}\n padding=\"xl\"\n size=\"xl\"\n >\n <Stack spacing=\"md\">\n <DropzoneButton {...props} close={() => setOpened(false)} />\n\n <Divider label=\"or\" labelPosition=\"center\" my=\"md\" variant=\"dashed\"/>\n\n <form onSubmit={form.onSubmit(() => {\n const values = form.values\n form.reset()\n setOpened(false)\n props.onCreateUsers && props.onCreateUsers([values])\n })}>\n <Stack>\n <TextInput\n withAsterisk\n label=\"Email\"\n placeholder=\"Email\"\n {...form.getInputProps('email')}\n />\n <Group grow>\n <TextInput\n label=\"Given name\"\n placeholder=\"Given name\"\n {...form.getInputProps('givenName')}\n />\n <TextInput\n label=\"Family name\"\n placeholder=\"Family name\"\n {...form.getInputProps('familyName')}\n />\n </Group>\n <Button type=\"submit\" fullWidth mt=\"md\">\n Submit\n </Button>\n </Stack>\n </form>\n </Stack>\n </Drawer>\n <Container fluid py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <UnstyledButton onClick={props.onBackClick}>\n <Badge\n variant=\"filled\"\n leftSection={<ActionIcon color=\"blue\" size=\"xs\" radius=\"xl\" variant=\"filled\">\n <IconArrowLeft size={14} />\n </ActionIcon>}\n size=\"lg\">\n Back\n </Badge>\n </UnstyledButton>\n <Title order={2} className={classes.title} mt=\"md\">People</Title>\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">Manage members of your organization</Text>\n </Grid.Col>\n <Grid.Col sm=\"content\">\n { !props.loading && <SplitButton\n withOrganizationLink={props.withOrganizationLink}\n onAddUsersClick={() => setOpened(true)}\n onCopyOrganizationLinkClick={props.onCopyLinkClick}\n />}\n </Grid.Col>\n </Grid>\n\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n\n <Stack spacing=\"sm\">\n <StatsGroup data={[\n {\n title: \"# OF PEOPLE\",\n value: props.users.length,\n },\n {\n title: \"ACCOUNT CREATION\",\n value: props.percentageOfAccountsCreated,\n unit: \"%\",\n },\n {\n title: \"PERCENTAGE ROSTERED\",\n unit: \"%\",\n value: props.percentageRostered,\n },\n ]}/>\n\n <Autocomplete\n placeholder=\"Search for a people in your organization\"\n data={props.users.map(item => item.email)}\n onChange={props.onAutocompleteChange}\n />\n\n <Table\n loading={props.loading}\n items={props.users}\n onDelete={props.onDeleteUser}\n onRoleChange={props.onChangeUserRole}\n />\n </Stack>\n </div>\n </Stack>\n </Container>\n </>\n )\n}\n\nconst DropzoneButton = (props: PeopleProps & {close: () => void}) => {\n const { classes, theme } = useStyles();\n const openRef = React.useRef<() => void>(null);\n const [loading, setLoading] = React.useState(false)\n const onDrop = React.useCallback((acceptedFiles: File[]) => {\n setLoading(true)\n acceptedFiles.forEach((file) => {\n papa.parse(file, {\n download: true,\n header: true,\n dynamicTyping: true,\n skipEmptyLines: true,\n worker: true,\n complete: function(results: ParseResult<UserItem>) {\n const data = results.data\n .filter(v => /^\\S+@\\S+$/.test(v.email) && props.users.filter(u => u.email === v.email).length === 0)\n data.length > 0 && props.onCreateUsers && props.onCreateUsers(data)\n setLoading(false)\n props.close()\n }\n })\n })\n\n }, [])\n\n return (\n <div className={classes.wrapper}>\n <Dropzone\n loading={loading}\n openRef={openRef}\n onDrop={onDrop}\n className={classes.dropzone}\n radius=\"md\"\n accept={[MIME_TYPES.csv]}\n maxSize={5 * 1024 ** 2}\n >\n <div style={{ pointerEvents: 'none' }}>\n <Group position=\"center\">\n <Dropzone.Accept>\n <IconDownload size={50} color={theme.colors[theme.primaryColor][6]} stroke={1.5} />\n </Dropzone.Accept>\n <Dropzone.Reject>\n <IconX size={50} color={theme.colors.red[6]} stroke={1.5} />\n </Dropzone.Reject>\n <Dropzone.Idle>\n <IconCloudUpload\n size={50}\n color={theme.colorScheme === 'dark' ? theme.colors.dark[0] : theme.black}\n stroke={1.5}\n />\n </Dropzone.Idle>\n </Group>\n\n <Text align=\"center\" weight={700} size=\"lg\" mt=\"xl\">\n <Dropzone.Accept>Drop files here</Dropzone.Accept>\n <Dropzone.Reject>Csv file less than 5mb</Dropzone.Reject>\n <Dropzone.Idle>Upload multiple</Dropzone.Idle>\n </Text>\n <Text align=\"center\" size=\"sm\" mt=\"xs\" color=\"dimmed\">\n Drag&apos;n&apos;drop files here to upload. We can accept only <i>.csv</i> files that\n are less than 5mb in size.\n </Text>\n </div>\n </Dropzone>\n\n <Button className={classes.control} size=\"md\" radius=\"xl\" onClick={() => openRef.current?.()}>\n Select file\n </Button>\n </div>\n );\n}","import * as React from \"react\";\nimport { createStyles, Text, Title, TextInput, Button, Group, Container, SimpleGrid, Badge } from \"@mantine/core\";\n\nconst useStyles = createStyles((theme) => ({\n form: {\n backgroundColor: theme.white,\n padding: theme.spacing.xl,\n border: `1px solid ${theme.colorScheme === \"dark\" ? theme.colors.dark[8] : theme.colors.gray[3]}`,\n borderRadius: theme.radius.md,\n boxShadow: theme.shadows.md,\n minWidth: 300,\n height: \"fit-content\",\n },\n\n wrapper: {\n position: \"relative\",\n paddingTop: 180,\n paddingBottom: 130,\n },\n\n content: {\n maxWidth: 480,\n marginRight: theme.spacing.xl * 3,\n\n [theme.fn.smallerThan(\"md\")]: {\n maxWidth: \"100%\",\n marginRight: 0,\n },\n },\n\n title: {\n color: theme.colorScheme === \"dark\" ? theme.white : theme.black,\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n fontSize: 44,\n lineHeight: 1.2,\n fontWeight: 900,\n\n [theme.fn.smallerThan(\"xs\")]: {\n fontSize: 28,\n },\n },\n\n control: {\n [theme.fn.smallerThan(\"xs\")]: {\n flex: 1,\n },\n },\n\n image: {\n flex: 1,\n\n [theme.fn.smallerThan(\"md\")]: {\n display: \"none\",\n },\n },\n\n highlight: {\n position: \"relative\",\n backgroundColor: theme.fn.variant({ variant: \"light\", color: theme.primaryColor }).background,\n borderRadius: theme.radius.sm,\n padding: \"4px 12px\",\n },\n\n input: {\n backgroundColor: theme.white,\n borderColor: theme.colors.gray[4],\n color: theme.black,\n\n \"&::placeholder\": {\n color: theme.colors.gray[5],\n },\n },\n\n inputLabel: {\n color: theme.black,\n },\n}));\n\n/**\n * StartAnonymousLessonProps\n */\nexport type StartAnonymousLessonProps = {\n title: string;\n description: string;\n educatorName: string;\n studentName?: string;\n onStart: (name: string) => void;\n};\n\n/**\n * StartAnonymousLesson\n * @param props\n * @constructor\n */\nexport const StartAnonymousLesson = (props: StartAnonymousLessonProps) => {\n const { classes } = useStyles();\n const [name, setName] = React.useState(\"\");\n\n return (\n <div className={classes.wrapper}>\n <Container>\n <SimpleGrid maw={960} cols={2} spacing={15} breakpoints={[{ maxWidth: \"sm\", cols: 1 }]}>\n <div className={classes.content}>\n <Badge color=\"violet\">Community</Badge>\n <Title className={classes.title}>{props.title}</Title>\n <Text color=\"dimmed\" mt=\"md\">\n {props.description}\n </Text>\n <Text color=\"dimmed\" mt=\"md\">\n You are now part of {`${props.educatorName}'s`} Class\n </Text>\n </div>\n <div className={classes.form}>\n <TextInput\n label=\"Name\"\n placeholder=\"John Doe\"\n defaultValue={props.studentName}\n readOnly={!!props.studentName}\n required\n onChange={(e) => setName(e.target.value)}\n classNames={{ input: classes.input, label: classes.inputLabel }}\n />\n\n <Group position=\"right\" mt=\"md\">\n <Button\n disabled={!name && !props.studentName}\n onClick={() => props.onStart(name)}\n className={classes.control}\n >\n {!props.studentName ? \"Start lesson\" : \"Continue lesson\"}\n </Button>\n </Group>\n </div>\n </SimpleGrid>\n </Container>\n </div>\n );\n};\n","import * as React from \"react\";\nimport {Card, Text, SimpleGrid, UnstyledButton, Button} from '@mantine/core';\nimport {IconClipboardCopy} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\n\n/**\n * BadgeGridProps\n */\nexport type BadgeGridProps = {\n badges: TaskCardProps[]\n onAssign: (taskId: string) => void;\n}\n\n/**\n * BadgeGrid\n * @param props\n * @constructor\n */\nexport const BadgeGrid = (props: BadgeGridProps) => {\n const badges = props.badges.map(b => <TaskCard key={b.title} {...b}/>)\n return <SimpleGrid cols={4} breakpoints={[{ maxWidth: 'sm', cols: 1 }, { maxWidth: 'md', cols: 3 }]}>\n {badges}\n </SimpleGrid>\n}\n\nexport type TaskCardProps = {\n taskId: string\n title: string\n description: string\n href: string\n onAssign: (taskId: string) => void;\n}\n\nexport function TaskCard(props: TaskCardProps) {\n return (\n <Card withBorder radius=\"md\">\n <UnstyledButton<typeof Link> component={Link} to={props.href} sx={{\":hover\": {textDecoration: \"underline\"}}}>\n <Text size=\"md\" weight={500}>\n {props.title}\n </Text>\n </UnstyledButton>\n\n <Text size=\"sm\" color=\"dimmed\" mt={5} mb={25} h={125} sx={{overflowY: \"scroll\"}}>\n {props.description}\n </Text>\n\n <Button\n variant=\"gradient\"\n size=\"xs\"\n leftIcon={<IconClipboardCopy size={14} />}\n onClick={() => props.onAssign(props.taskId)}\n >\n Assign\n </Button>\n </Card>\n );\n}","import * as React from 'react';\nimport {Avatar, Text, Paper, Blockquote, Title, createStyles, Stack} from '@mantine/core';\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n marginTop: 16,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n description: {\n maxWidth: 600,\n },\n}));\n\nexport type UserInfoProps = {\n variant?: \"compact\"\n name: string\n impactStatement: string\n}\n\n/**\n * UserInfo\n * @constructor\n * @param props\n */\nexport const UserInfo = (props: UserInfoProps) => {\n const { classes } = useStyles();\n return <>\n <Title className={classes.title}>\n {props.name}\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"xs\">\n {props.impactStatement}\n </Text>\n </>\n}","import * as React from \"react\";\nimport { Card, CardProps, createStyles, Overlay, Text, Group, Button } from \"@mantine/core\";\nimport { showNotification } from \"@mantine/notifications\";\n\nconst useStyles = createStyles((theme) => ({\n card: {\n height: 240,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n whiteSpace: 'pre-line'\n },\n\n content: {\n position: 'absolute',\n padding: theme.spacing.xl,\n zIndex: 1,\n top: 0,\n bottom: 0,\n right: 0,\n left: 0,\n },\n\n title: {\n color: theme.white,\n marginBottom: theme.spacing.xs / 2,\n },\n\n description: {\n color: theme.white,\n maxWidth: 220,\n },\n code: {\n color: theme.white,\n maxWidth: 220,\n },\n}));\n\ninterface TenantBannerProps {\n title: string;\n description: string;\n image: string;\n code?: string;\n}\n\n/**\n * TenantBanner\n * @param title\n * @param description\n * @param image\n * @param style\n * @param className\n * @param code\n * @param others\n * @constructor\n */\nexport const TenantBanner = ({\n title,\n description,\n image,\n style,\n className,\n code,\n ...others\n }: TenantBannerProps & Omit<CardProps, keyof TenantBannerProps | 'children'>) => {\n const { classes, cx, theme } = useStyles();\n const handleCopy = async () => {\n if (!code) return;\n \n try {\n await navigator.clipboard.writeText(code);\n showNotification({\n title: \"Copied!\",\n message: \"Community code copied to clipboard.\",\n autoClose: 3000,\n });\n } catch (err) {\n console.error(\"Failed to copy code\", err);\n }\n };\n\n return (\n <Card\n radius=\"md\"\n style={{ backgroundImage: `url(${image})`, ...style }}\n className={cx(classes.card, className)}\n {...others}\n >\n <Overlay\n gradient={`linear-gradient(105deg, ${theme.black} 20%, #312f2f 50%, ${theme.colors.gray[6]} 100%)`}\n opacity={0.55}\n zIndex={0}\n />\n\n <div className={classes.content}>\n <Text size=\"lg\" weight={700} className={classes.title}>\n {title}\n </Text>\n\n <Text size=\"sm\" className={classes.description}>\n {description}\n </Text>\n \n \n <Group mt=\"sm\" spacing=\"xs\">\n <Text size=\"sm\" className={classes.code}>\n Community Code: {code || \"—\"}\n </Text>\n\n {code && (\n <Button\n size=\"xs\"\n variant=\"white\"\n onClick={handleCopy}\n styles={{\n root: {\n backgroundColor: \"rgba(255,255,255,0.9)\",\n },\n }}\n >\n Copy\n </Button>\n )}\n </Group>\n </div>\n </Card>\n );\n}","import * as React from 'react';\nimport {Badge, Button, Container, createStyles, Stack, Title} from '@mantine/core';\nimport {BadgeGrid, BadgeGridProps} from \"../../components/grid/BadgeGrid/BadgeGrid\";\nimport {UserInfo} from \"../../components/users/UserInfo/UserInfo\";\nimport {TenantBanner} from \"../../components/banners/TenantBanner/TenantBanner\";\n\nconst useStyles = createStyles((theme) => ({\n action: {\n backgroundColor: \"inherit\",\n \":hover\": {\n textDecoration: \"underline\"\n },\n },\n title: {\n color: theme.colorScheme === 'dark' ? theme.white : theme.black,\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n fontSize: theme.fontSizes.xl,\n lineHeight: 1.5,\n fontWeight: 900,\n\n [theme.fn.smallerThan('xs')]: {\n fontSize: theme.fontSizes.md,\n },\n },\n}));\n\n/**\n * TrialHomeProps\n */\nexport type TrialHomeProps = BadgeGridProps & {\n loading: boolean\n name: string\n firstName: string\n daysRemaining: number\n upgradeHref: string\n}\n\n/**\n * TrialHome\n * @param props\n * @constructor\n */\nexport const TrialHome = (props: TrialHomeProps) => {\n const { classes } = useStyles();\n return <Container fluid>\n <Badge>{props.daysRemaining} day{props.daysRemaining !== 1 ? \"s\" : \"\"} left</Badge>\n <Button\n className={classes.action}\n variant=\"white\"\n component=\"a\"\n size=\"xs\"\n href={props.upgradeHref}\n target=\"_blank\"\n >\n UPGRADE NOW\n </Button>\n <Stack spacing=\"sm\">\n <Stack spacing={0}>\n <UserInfo\n variant=\"compact\"\n name={props.name}\n impactStatement=\"\"\n />\n <TenantBanner\n title=\"Trial Account\"\n description={`Welcome to your Local Civics Trial Account${props.firstName ? \", \" + props.firstName : \"\"}!`}\n image=\"https://cdn.localcivics.io/hub/landing.jpg\"\n />\n </Stack>\n <Title maw={500} mb={20} mt={20} className={classes.title}>\n Based on the tags you selected, check out these lessons to get started with your students!\n </Title>\n <BadgeGrid onAssign={props.onAssign} badges={props.badges}/>\n </Stack>\n </Container>\n}","import {TablerIcon} from \"@tabler/icons\";\nimport * as React from \"react\";\nimport {UnstyledButton, Checkbox, Text, SimpleGrid, createStyles, ThemeIcon} from '@mantine/core';\nimport { useUncontrolled } from '@mantine/hooks';\n\nconst useStyles = createStyles((theme, { checked }: { checked: boolean }) => ({\n button: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n transition: 'background-color 150ms ease, border-color 150ms ease',\n border: `1px solid ${\n checked\n ? theme.fn.variant({ variant: 'outline', color: theme.primaryColor }).border\n : theme.colorScheme === 'dark'\n ? theme.colors.dark[8]\n : theme.colors.gray[3]\n }`,\n borderRadius: theme.radius.sm,\n padding: theme.spacing.md,\n paddingTop: theme.spacing.sm,\n paddingBottom: theme.spacing.sm,\n backgroundColor: checked\n ? theme.fn.variant({ variant: 'light', color: theme.primaryColor }).background\n : theme.colorScheme === 'dark'\n ? theme.colors.dark[8]\n : theme.white,\n },\n\n body: {\n flex: 1,\n marginLeft: theme.spacing.md,\n },\n}));\n\ninterface ImageCheckboxProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?(checked: boolean): void;\n title: string;\n description: string;\n icon: TablerIcon;\n}\n\nexport function ImageCheckbox({\n checked,\n defaultChecked,\n onChange,\n title,\n description,\n className,\n icon: Icon,\n ...others\n }: ImageCheckboxProps & Omit<React.ComponentPropsWithoutRef<'button'>, keyof ImageCheckboxProps>) {\n const [value, handleChange] = useUncontrolled({\n value: checked,\n defaultValue: defaultChecked,\n finalValue: false,\n onChange,\n });\n\n const { classes, cx } = useStyles({ checked: value });\n\n return (\n <UnstyledButton\n {...others}\n onClick={() => handleChange(!value)}\n className={cx(classes.button, className)}\n >\n <ThemeIcon variant=\"light\" size=\"lg\" color=\"blue\">\n <Icon size={25}/>\n </ThemeIcon>\n\n <div className={classes.body}>\n <Text weight={500} size=\"sm\" sx={{ lineHeight: 1 }}>\n {title}\n </Text>\n </div>\n\n <Checkbox\n checked={value}\n onChange={() => {}}\n tabIndex={-1}\n styles={{ input: { cursor: 'pointer' } }}\n />\n </UnstyledButton>\n );\n}\n\nexport type SelectGridProps = {\n items: {description: string, title: string, icon: TablerIcon}[]\n onChange: (title: string, checked: boolean) => void;\n}\n\nexport function SelectGrid(props: SelectGridProps) {\n const items = props.items.map((item) => <ImageCheckbox\n {...item}\n key={item.title}\n onChange={(checked) => props.onChange(item.title, checked)}\n />);\n return (\n <SimpleGrid\n cols={2}\n breakpoints={[\n { maxWidth: 'md', cols: 2 },\n { maxWidth: 'sm', cols: 1 },\n ]}\n >\n {items}\n </SimpleGrid>\n );\n}","import * as React from \"react\";\nimport {\n createStyles,\n Text,\n Title,\n SimpleGrid,\n TextInput,\n Button,\n Group,\n Image, Autocomplete,\n} from '@mantine/core';\nimport {\n IconPodium,\n IconTools,\n IconNews,\n IconSchool,\n IconScribble,\n IconBackpack,\n IconPresentation,\n IconBriefcase\n} from '@tabler/icons';\nimport {SelectGrid} from \"../../components/grid/SelectGrid/SelectGrid\";\n\nconst useStyles = createStyles((theme) => ({\n wrapper: {\n minHeight: '100%',\n boxSizing: 'border-box',\n backgroundImage: `linear-gradient(-60deg, #4e5561 0%, #222a39 100%)`,\n padding: theme.spacing.xl * 2.5,\n\n [`@media (max-width: ${theme.breakpoints.sm}px)`]: {\n padding: theme.spacing.xl * 1.5,\n },\n },\n\n title: {\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n fontSize: 50,\n color: theme.white,\n lineHeight: 1,\n maxWidth: 500,\n },\n\n description: {\n color: theme.colors[theme.primaryColor][0],\n maxWidth: 500,\n\n [`@media (max-width: ${theme.breakpoints.sm}px)`]: {\n maxWidth: '100%',\n },\n },\n\n form: {\n backgroundColor: theme.white,\n padding: theme.spacing.xl,\n borderRadius: theme.radius.md,\n boxShadow: theme.shadows.lg,\n },\n\n social: {\n color: theme.white,\n\n '&:hover': {\n color: theme.colors[theme.primaryColor][1],\n },\n },\n\n input: {\n backgroundColor: theme.white,\n borderColor: theme.colors.gray[4],\n color: theme.black,\n\n '&::placeholder': {\n color: theme.colors.gray[5],\n },\n },\n\n inputLabel: {\n color: theme.black,\n },\n\n control: {\n backgroundColor: theme.colors[theme.primaryColor][6],\n },\n}));\n\nconst OPTIONS = [\n { description: 'elementary', title: 'Elementary (K-5)', icon: IconScribble},\n { description: 'middle', title: 'Middle (6-8)', icon: IconBackpack},\n { description: 'high school', title: 'High School (9-12)', icon: IconSchool},\n { description: 'college', title: 'College', icon: IconPodium },\n { description: 'career', title: 'Career', icon: IconBriefcase },\n { description: 'work-based learning', title: 'Work-Based Learning', icon: IconPresentation },\n { description: 'student leadership', title: 'Student Leadership', icon: IconPodium },\n { description: 'civics', title: 'Civics', icon: IconNews },\n { description: 'project-based learning', title: 'Project-Based Learning', icon: IconTools },\n]\n\n/**\n * TrialRegistrationProps\n */\nexport type TrialRegistrationProps = {\n organizations: {organizationId: string, displayName: string}[]\n onBegin: (data: NewTrialRegistration) => void\n onQueryOrganizations: (name: string) => void;\n}\n\nexport type NewTrialRegistration = {\n firstName: string\n lastName: string\n organizationId: string\n organizationName: string\n interests: string[]\n}\n\n/**\n * TrialRegistration\n * @param props\n * @constructor\n */\nexport const TrialRegistration = (props: TrialRegistrationProps) => {\n const { classes } = useStyles();\n const [firstName, setFirstName] = React.useState(\"\")\n const [lastName, setLastName] = React.useState(\"\")\n const [organization, setOrganization] = React.useState({organizationId: \"\", displayName: \"\"})\n const [interests, setInterests] = React.useState({})\n\n return (\n <div className={classes.wrapper}>\n <SimpleGrid maw={1300} ml=\"auto\" mr=\"auto\" cols={2} spacing={50} breakpoints={[{ maxWidth: 'md', cols: 1 }]}>\n <Group spacing=\"sm\">\n <Image\n height={200}\n width=\"auto\"\n fit=\"contain\"\n src=\"https://cdn.localcivics.io/brand/l.png\"\n />\n <div>\n <Title className={classes.title}>\n Are you an\n {\" \"}\n <Text\n component=\"span\"\n inherit\n variant=\"gradient\"\n gradient={{ from: 'pink', to: 'yellow' }}\n >\n educator\n </Text>\n {\" \"}\n interested in a free trial?\n </Title>\n <Text className={classes.description} mt=\"sm\">\n Try out a few of the features we can bring to your classroom. No commitment required.\n </Text>\n </div>\n </Group>\n <div className={classes.form}>\n <SimpleGrid cols={2} spacing={15} breakpoints={[{ maxWidth: 'sm', cols: 1 }]}>\n <TextInput\n label=\"First Name\"\n placeholder=\"Insert your first name\"\n required\n classNames={{ input: classes.input, label: classes.inputLabel }}\n onChange={(e) => setFirstName(e.target.value)}\n />\n <TextInput\n label=\"Last Name\"\n placeholder=\"Insert your last name\"\n required\n classNames={{ input: classes.input, label: classes.inputLabel }}\n onChange={(e) => setLastName(e.target.value)}\n />\n\n <Autocomplete\n label=\"School/Organization Name\"\n placeholder=\"What's the name of your school?\"\n data={props.organizations.map(o => {return {...o, value: o.displayName}})}\n onItemSubmit={(item) => setOrganization({organizationId: item.organizationId, displayName: item.displayName})}\n onChange={(next) => {\n setOrganization({organizationId: \"\", displayName: next})\n return props.onQueryOrganizations(next)\n }}\n />\n </SimpleGrid>\n\n <Text size={14} weight={500} mb=\"md\" mt=\"xl\">\n Where do you want to start? (Select as many as you want)\n </Text>\n <SelectGrid\n items={OPTIONS}\n onChange={(e, checked) => setInterests({...interests, [e]: checked})}\n />\n\n <Group position=\"right\" mt=\"md\">\n <Button\n disabled={!firstName || !lastName}\n onClick={() => props.onBegin({\n firstName,\n lastName,\n organizationId: organization.organizationId,\n organizationName: organization.displayName,\n interests: Object.keys(interests),\n })}\n className={classes.control}>Begin trial</Button>\n </Group>\n </div>\n </SimpleGrid>\n </div>\n );\n}","import * as React from 'react';\nimport {createEmotionCache, MantineProvider} from '@mantine/core';\nimport { ModalsProvider } from '@mantine/modals';\nimport {NotificationsProvider} from \"@mantine/notifications\";\n\nconst mycCache = createEmotionCache({\n key: 'mantine',\n prepend: false\n});\n\n/**\n * AdminProviderProps\n */\nexport interface AdminProviderProps {\n notificationLimit?: number\n children: React.ReactNode\n}\n\n/**\n * AdminProvider\n * @constructor\n * @param props\n */\nexport const AdminProvider = (props: AdminProviderProps) => {\n return <MantineProvider\n theme={{\n loader: \"bars\"\n }}\n withNormalizeCSS withGlobalStyles emotionCache={mycCache}>\n <NotificationsProvider limit={props.notificationLimit || 5}>\n <ModalsProvider>\n { props.children }\n </ModalsProvider>\n </NotificationsProvider>\n </MantineProvider>\n}","import {Loader, Center, ActionIcon, AppShell, Container, createStyles, Group, Image, Text, Title} from \"@mantine/core\";\nimport {IconBrandFacebook, IconBrandInstagram, IconBrandLinkedin} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport type {AccountItem} from \"../../components/users/SwitchAccount/SwitchAccount\";\nimport {SwitchAccount} from \"../../components/users/SwitchAccount/SwitchAccount\"\nimport {Navbar, NavbarProps} from \"../../components/navigation/Navbar/Navbar\";\n\nconst useStyles = createStyles((theme, props: AppProps) => ({\n footer: {\n paddingTop: theme.spacing.md,\n paddingBottom: theme.spacing.md,\n paddingLeft: props.navbar ? theme.spacing.md : 0,\n backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark[6] : theme.colors.gray[0],\n borderTop: `1px solid ${\n theme.colorScheme === 'dark' ? theme.colors.dark[5] : theme.colors.gray[2]\n }`,\n\n [theme.fn.largerThan('sm')]: {\n paddingTop: theme.spacing.xl * 2,\n paddingBottom: theme.spacing.xl * 2,\n paddingLeft: props.navbar ? theme.spacing.xl * 13 : 0,\n }\n },\n\n page: {\n [theme.fn.smallerThan('sm')]: {\n paddingTop: theme.spacing.xl * 3,\n }\n },\n\n logo: {\n maxWidth: 200,\n\n [theme.fn.smallerThan('sm')]: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n },\n\n description: {\n marginTop: 5,\n\n [theme.fn.smallerThan('sm')]: {\n marginTop: theme.spacing.xs,\n textAlign: 'center',\n },\n },\n\n inner: {\n display: 'flex',\n justifyContent: 'space-between',\n\n [theme.fn.smallerThan('sm')]: {\n flexDirection: 'column',\n alignItems: 'center',\n },\n },\n\n groups: {\n display: 'flex',\n flexWrap: 'wrap',\n\n [theme.fn.smallerThan('sm')]: {\n display: 'none',\n },\n },\n\n wrapper: {\n width: 160,\n },\n\n link: {\n display: 'block',\n color: theme.colorScheme === 'dark' ? theme.colors.dark[1] : theme.colors.gray[6],\n fontSize: theme.fontSizes.sm,\n paddingTop: 3,\n paddingBottom: 3,\n\n '&:hover': {\n textDecoration: 'underline',\n },\n },\n\n title: {\n fontSize: theme.fontSizes.md,\n fontWeight: 700,\n fontFamily: `Greycliff CF, ${theme.fontFamily}`,\n marginBottom: theme.spacing.xs / 2,\n color: theme.colorScheme === 'dark' ? theme.white : theme.black,\n },\n\n afterFooter: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginTop: theme.spacing.xl,\n paddingTop: theme.spacing.xl,\n paddingBottom: theme.spacing.xl,\n borderTop: `1px solid ${\n theme.colorScheme === 'dark' ? theme.colors.dark[4] : theme.colors.gray[2]\n }`,\n\n [theme.fn.smallerThan('sm')]: {\n flexDirection: 'column',\n },\n },\n\n social: {\n [theme.fn.smallerThan('sm')]: {\n marginTop: theme.spacing.xs,\n },\n },\n}));\n\n/**\n * AppProps\n */\nexport type AppProps = {\n loading?: boolean\n account?: string\n accounts?: AccountItem[]\n\n navbar?: React.ReactElement<NavbarProps>\n page: React.ReactNode\n onAccountChange?: (account: string) => Promise<void>;\n}\n\n/**\n * App\n * @param props\n * @constructor\n */\nexport const App = (props: AppProps) => {\n const { classes } = useStyles(props);\n const account = useAccount(props.account, props.accounts, props.onAccountChange)\n return <AppShell\n padding=\"xs\"\n navbar={props.navbar && <Navbar\n {...props.navbar.props}\n onSwitchAccounts={account.accounts && account.accounts.length > 1 ? () => account.setChangeModalOpen(true) : undefined}\n />}\n footer={<>{!account.opened && <footer className={classes.footer}>\n <Container className={classes.inner}>\n <div className={classes.logo}>\n <Group spacing=\"xs\">\n <div style={{ width: 15 }}>\n <Image fit=\"contain\" src=\"https://cdn.localcivics.io/brand/l.png\"/>\n </div>\n <Title color=\"dimmed\" size=\"h5\">PathLink</Title>\n </Group>\n <Text size=\"xs\" color=\"dimmed\" className={classes.description}>\n We connect students to powerful civic learning experiences.\n </Text>\n </div>\n <div className={classes.groups}>\n <div className={classes.wrapper}>\n <Text\n className={classes.link}\n component=\"a\"\n href=\"https://www.localcivics.io\"\n target=\"_blank\"\n >\n About\n </Text>\n <Text\n className={classes.link}\n component=\"a\"\n href=\"https://www.localcivics.io/terms-of-service\"\n target=\"_blank\"\n >\n Terms\n </Text>\n <Text\n className={classes.link}\n component=\"a\"\n href=\"https://www.localcivics.io/privacy-policy\"\n target=\"_blank\"\n >\n Privacy\n </Text>\n <Text\n className={classes.link}\n component=\"a\"\n href=\"https://localcivics.notion.site/Help-Center-b52300f587b64fc0a61f512686e7626d\"\n target=\"_blank\"\n >\n Help Center\n </Text>\n </div>\n </div>\n </Container>\n <Container className={classes.afterFooter}>\n <Text color=\"dimmed\" size=\"sm\">\n © {new Date().getFullYear()} Local Civics. All rights reserved.\n </Text>\n\n <Group spacing={0} className={classes.social} position=\"right\" noWrap>\n <ActionIcon component=\"a\" target=\"_blank\" href=\"https://www.instagram.com/localcivics/\" size=\"lg\">\n <IconBrandInstagram size={18} stroke={1.5} />\n </ActionIcon>\n <ActionIcon component=\"a\" target=\"_blank\" href=\"https://www.linkedin.com/company/localcivics\" size=\"lg\">\n <IconBrandLinkedin size={18} stroke={1.5} />\n </ActionIcon>\n <ActionIcon component=\"a\" target=\"_blank\" href=\"https://www.facebook.com/localcivics/\" size=\"lg\">\n <IconBrandFacebook size={18} stroke={1.5} />\n </ActionIcon>\n </Group>\n </Container>\n </footer>}</>}\n styles={(theme) => ({\n main: { backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark[8] : theme.colors.gray[0] },\n })}\n >\n <div className={classes.page} style={{ position: 'relative' }}>\n { (props.loading || account.opened) && <Center style={{ height: 400 }}><Loader/></Center> }\n { (!props.loading && !account.opened) && props.page }\n </div>\n { !!account.accounts && !!account.account && <SwitchAccount\n opened={account.opened}\n loading={account.loading}\n account={account.account}\n accounts={account.accounts}\n onClick={account.onAccountChange}\n onClose={() => account.setChangeModalOpen(false)}\n />}\n </AppShell>\n}\n\nconst useAccount = (account?: string, accounts?: AccountItem[], onAccountChange?: (account: string) => Promise<void>) => {\n const accountsKey = JSON.stringify(accounts)\n const [changeModalOpen, setChangeModalOpen] = useState(false);\n const [active, setActive] = useState(account);\n const [loading, setLoading] = useState(false)\n\n React.useEffect(() => {\n setActive(account)\n }, [account, accountsKey])\n\n return {\n opened: changeModalOpen,\n account: active,\n accounts: accounts,\n loading,\n setChangeModalOpen,\n onAccountChange: (account: string) => {\n setLoading(true)\n if(!onAccountChange){\n return\n }\n\n onAccountChange(account).then(() => {\n setActive(account)\n setLoading(false)\n setChangeModalOpen(false)\n })\n }\n }\n}","import * as React from 'react';\nimport {Link} from \"react-router-dom\";\nimport {IconChevronRight} from \"@tabler/icons\";\n\n/**\n * Item\n */\nexport interface Item {\n badgeId: string,\n name: string;\n description: string\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[];\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n if (props.loading) {\n return <div className=\"text-sm text-slate-400\">Loading…</div>;\n }\n\n if (props.items.length === 0) {\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white p-8 text-center text-sm text-slate-400 shadow-sm\">\n No pathways to display.\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n {props.items.map((row) => (\n <Link\n key={row.badgeId}\n to={row.href}\n className=\"flex items-center gap-4 rounded-xl border border-slate-200 bg-white p-4 no-underline shadow-sm hover:bg-slate-50\"\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-bold text-dark-blue-400\">{row.name}</div>\n {row.description && <div className=\"mt-1 text-xs leading-relaxed text-slate-500\">{row.description}</div>}\n </div>\n <IconChevronRight size={16} stroke={2} className=\"shrink-0 text-slate-300\" />\n </Link>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport {Table, Item} from \"./Table\";\n\n/**\n * PathwaysItem\n */\nexport type PathwaysItem = Item\n\n/**\n * PathwaysProps\n */\nexport type PathwaysProps = {\n loading: boolean\n pathways: PathwaysItem[]\n}\n\n/**\n * PathwaysPage\n * @param props\n * @constructor\n */\nexport const Pathways = (props: PathwaysProps) => {\n return (\n <div className=\"flex flex-col gap-5 px-4 py-8\">\n <div className=\"space-y-1\">\n <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">Pathways</h1>\n <p className=\"text-sm text-slate-500\">Explore all your unique pathway requirements in one clear space</p>\n </div>\n\n <Table loading={props.loading} items={props.pathways} />\n </div>\n )\n}\n","import * as React from 'react'\nimport { createStyles, Button, Stack, Menu, Group, ActionIcon } from '@mantine/core';\nimport {\n IconChevronDown,\n IconPlaylistAdd,\n IconClipboardCopy, IconTableExport\n} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\n\nconst useStyles = createStyles((theme) => ({\n button: {\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n marginLeft: 0,\n marginRight: 0,\n },\n\n menuControl: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n border: 0,\n borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark[7] : theme.white}`,\n },\n}));\n\nexport type SplitButtonProps = {\n href: string\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\nexport const SplitButton = (props: SplitButtonProps) => {\n const { classes, theme } = useStyles();\n const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === 'dark' ? 5 : 6];\n\n return (\n <Stack spacing=\"sm\">\n <Button<typeof Link> component={Link} to={props.href}\n className={classes.button}\n variant=\"gradient\"\n >\n Preview\n </Button>\n <Button\n leftIcon={<IconClipboardCopy size={14} />}\n onClick={props.onCopyLinkClick}\n >\n Copy link\n </Button>\n <Button\n leftIcon={<IconTableExport size={14} />}\n onClick={props.onExportDataClick}\n >\n Export data (.csv)\n </Button>\n </Stack>\n );\n}","import * as React from 'react';\nimport {Grid, Badge, Text} from '@mantine/core';\nimport {Link} from \"react-router-dom\";\n\n/**\n * Item\n */\nexport interface Item {\n badgeName: string\n completion: number\n isStarted?: boolean\n href: string\n}\n\n/**\n * StackData\n */\nexport type StackData = {\n items: Item[]\n}\n\n/**\n * StackProps\n */\nexport type StackProps = StackData\n\n/**\n * Stack\n * @constructor\n * @param props\n */\nexport function Stack(props: StackProps) {\n if(props.items.length === 0){\n return null\n }\n\n const rows = props.items.map((row) => (\n <>\n <Grid.Col span={6}>\n <Text<typeof Link> component={Link} to={row.href} color=\"dark.4\" weight=\"bold\" size=\"md\">\n {row.badgeName}\n </Text>\n </Grid.Col>\n <Grid.Col span={6}>\n {row.completion >= 1 && <Badge variant=\"filled\">Complete</Badge>}\n {row.completion === 0 && !row.isStarted && <Badge color=\"red\" variant=\"filled\">Not started</Badge>}\n {row.completion > 0 && row.completion < 1 && <Badge color=\"violet\" variant=\"filled\">{Math.round((row.completion + Number.EPSILON) * 100)}% Complete</Badge>}\n </Grid.Col>\n </>\n ));\n\n return <Grid grow gutter=\"lg\" sx={{ padding: 20, minWidth: 700 }}>\n {rows}\n </Grid>\n}","import {DataTable, DataTableSortStatus} from \"mantine-datatable\";\nimport * as React from 'react';\nimport {Avatar, Group, Text, ScrollArea, Badge} from '@mantine/core';\nimport { IconSelector, IconChevronUp } from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\nimport { PlaceholderBanner } from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {Stack as BadgeStack, Item as BadgeItem} from \"./BadgeStack\";\nimport { useSortableData } from \"../../utils/useSortableData\";\n\n/**\n * Item\n */\nexport interface Item {\n userId: string\n avatar: string\n name: string\n email: string\n isComplete?: boolean\n badges: BadgeItem[]\n categoryPoints?: Record<string, number>\n [key: string]: any;\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n/**\n * Category\n */\nexport type Category = {\n categoryId: string\n name: string\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & {\n categories: Category[]\n}\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n const preparedItems = React.useMemo(() => {\n return (props.items || []).map(item => ({\n ...item,\n ...item.categoryPoints, // Spreads all category IDs and their point values\n }));\n }, [props.items]);\n\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);\n \n if(props.loading && props.items.length === 0){\n return <PlaceholderBanner\n title=\"No badges to display\"\n description=\"There has not been any badge progress just yet.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n\n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n };\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n verticalSpacing=\"sm\"\n sx={{ minWidth: 700 }}\n withBorder={false}\n borderRadius=\"sm\"\n withColumnBorders\n striped\n highlightOnHover\n records={sortedItems}\n idAccessor=\"userId\"\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)} // Added to trigger sort\n columns={[{\n accessor: 'name',\n title: 'Student Name',\n sortable: true,\n titleStyle: { whiteSpace: 'nowrap' as const }, // Prevents UI stacking\n render: (row: Item) => (\n <Group spacing=\"sm\" noWrap>\n <Avatar size={40} src={row.avatar} radius={40}/>\n <div>\n <Text size=\"sm\" weight={500}>\n {row.name}\n </Text>\n <Text size=\"xs\" color=\"dimmed\">\n {row.email}\n </Text>\n </div>\n </Group>\n ),\n },{\n accessor: 'isComplete',\n title: 'Status',\n sortable: true, \n titleStyle: { whiteSpace: 'nowrap' as const },\n render: (row: Item) => ( \n <Badge color={row.isComplete ? \"blue\" : \"red\"} variant=\"filled\">\n {row.isComplete ? \"Complete\" : \"Incomplete\"}\n </Badge>\n )\n },\n ...props.categories.map((category) => ({\n // Use dot notation: 'categoryPoints.ID'\n accessor: category.categoryId,\n title: category.name,\n sortable: true,\n titleStyle: { whiteSpace: 'nowrap' as const }, \n render: (row: any) => (\n <Badge color=\"blue\" variant=\"filled\">\n {row[category.categoryId] ?? 0} pts\n </Badge>\n )\n }))\n ]}\n rowExpansion={{\n content: ({ record }: {record: Item}) => (\n <BadgeStack items={record.badges}/>\n ),\n }}\n />\n </ScrollArea.Autosize>\n );\n}","import * as React from 'react';\nimport { ScrollArea, Text } from '@mantine/core';\nimport { DataTable, DataTableSortStatus } from 'mantine-datatable';\nimport { IconSelector, IconChevronUp } from '@tabler/icons';\nimport { Link } from \"react-router-dom\";\nimport { PlaceholderBanner } from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport { useSortableData } from \"../../utils/useSortableData\";\n\n/**\n * Item \n */\nexport interface Item {\n badgeId: string\n badgeName: string\n percentageCompletion: number\n href: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(props.items);\n\n if(props.items.length === 0){\n return <PlaceholderBanner\n title=\"No badges to display\"\n description=\"There are no badges in this pathway.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n\n const sortStatus: DataTableSortStatus = {\n columnAccessor: sortConfig.key as string,\n direction: sortConfig.direction === 'desc' ? 'desc' : 'asc',\n };\n\n return (\n <ScrollArea.Autosize maxHeight={600}>\n <DataTable\n verticalSpacing=\"sm\"\n withBorder={false} \n borderRadius=\"sm\"\n sx={{ minWidth: 700 }}\n highlightOnHover\n striped\n records={sortedItems}\n idAccessor=\"badgeId\"\n sortStatus={sortStatus}\n onSortStatusChange={(status) => requestSort(status.columnAccessor)}\n columns={[\n {\n accessor: 'badgeName',\n title: 'Badge Name',\n sortable: true,\n render: (row) => (\n <Text<typeof Link> component={Link} to={row.href} \n sx={(theme) => ({\n color: theme.colorScheme === 'dark' ? theme.white : theme.black,\n textDecoration: 'none',\n fontWeight: 500,\n '&:hover': {\n textDecoration: 'underline', // Adds an underline only on hover for UX\n color: theme.colors.blue[6] // Optional: change color only on hover\n },\n })}\n >\n {row.badgeName}\n </Text>\n ),\n },\n {\n accessor: 'percentageCompletion',\n title: 'Badge Completion',\n sortable: true,\n render: (row) => {\n const roundedValue = Math.round((row.percentageCompletion + Number.EPSILON) * 100);\n return `${roundedValue}%`;\n },\n },\n ]}\n />\n </ScrollArea.Autosize>\n );\n}","import {IconArrowLeft, IconCategory2} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n createStyles,\n Badge as BadgeCore,\n Title,\n Text,\n Container, Stack, Grid,\n Select, ActionIcon, Group,\n LoadingOverlay,\n UnstyledButton,\n} from '@mantine/core';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Tabs} from \"../../components/navigation/Tabs/Tabs\";\nimport {SplitButton} from \"./SplitButton\";\nimport {Table, Item} from \"./Table\";\nimport {Table as BadgeTable, Item as BadgeItem} from \"./BadgeTable\";\n\nconst useStyles = createStyles((theme) => ({\n title: {\n fontSize: 34,\n fontWeight: 900,\n [theme.fn.smallerThan('sm')]: {\n fontSize: 24,\n },\n },\n\n description: {\n maxWidth: 600,\n },\n}));\n\n/**\n * PathwayUserItem\n */\nexport type PathwayUserItem = Item\n\n/**\n * PathwayClass\n */\nexport type PathwayClass = {\n classId: string\n name: string\n active: boolean\n}\n\n/**\n * PathwayProps\n */\nexport type PathwayProps = {\n loading: boolean\n title: string,\n description: string\n classes: PathwayClass[]\n badges: BadgeItem[]\n classId: string\n students: PathwayUserItem[]\n categories: { categoryId: string; name: string }[]\n href: string\n trial?: boolean\n badgesCompleted?: number\n\n onBackClick: () => void;\n onClassChange: (classId: string) => void;\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\n/**\n * Pathway\n * @param props\n * @constructor\n */\nexport const Pathway = (props: PathwayProps) => {\n const { classes } = useStyles();\n const [tab, setTab] = useState(\"badges\")\n\n const numberOfStudents = props.students.length\n const percentageOfBadgesEarned = numberOfStudents > 0 ? props.students.filter(u => u.isComplete).length / numberOfStudents : 0\n const numberOfBadgesEarned = numberOfStudents > 0 ? props.students.filter(u => u.isComplete).length : 0\n\n return (\n <Container fluid py=\"xl\">\n <Stack spacing=\"md\">\n <Grid>\n <Grid.Col sm=\"auto\">\n <UnstyledButton onClick={props.onBackClick}>\n <BadgeCore\n variant=\"filled\"\n leftSection={<ActionIcon color=\"blue\" size=\"xs\" radius=\"xl\" variant=\"filled\">\n <IconArrowLeft size={14} />\n </ActionIcon>}\n size=\"lg\">\n Back\n </BadgeCore>\n </UnstyledButton>\n <Group>\n <Stack spacing={0}>\n <Title order={2} className={classes.title} mt=\"md\">\n {props.title || \"Pathway\"}\n </Title>\n\n <Text color=\"dimmed\" className={classes.description} mt=\"sm\">\n {props.description || \"No description\"}\n </Text>\n </Stack>\n\n {!props.trial && <Stack ml=\"auto\">\n <SplitButton\n href={props.href}\n onCopyLinkClick={props.onCopyLinkClick}\n onExportDataClick={props.onExportDataClick}\n />\n </Stack>}\n </Group>\n </Grid.Col>\n </Grid>\n <div>\n <div style={{ position: 'relative' }}>\n <LoadingOverlay visible={props.loading} overlayBlur={2} />\n <Stack>\n <StatsGroup data={[\n {\n title: props.trial ? \"BADGES SUBMITTED\" : \"PATHWAY COMPLETION\",\n value: props.trial ? 0: numberOfBadgesEarned,\n unit: props.trial ? '' : '',\n },\n ]}/>\n\n { !props.trial && <Select\n clearable\n clearButtonLabel=\"Clear class selection\"\n size=\"sm\"\n placeholder=\"Select a class\"\n nothingFound=\"No options\"\n value={props.classId}\n onChange={props.onClassChange}\n icon={<IconCategory2/>}\n data={props.classes.map(g => {return {value: g.classId, label: g.name}})}\n />}\n\n <Stack spacing={0}>\n { !props.trial && <Tabs\n value={tab}\n data={[\n {label: \"By Badge\", value: \"badges\"},\n {label: \"By student\", value: \"students\"},\n ]}\n onChange={setTab}\n />}\n\n { (!!props.trial || tab === \"badges\") && <BadgeTable\n loading={props.loading}\n items={props.badges}\n /> }\n\n { (!props.trial && tab === \"students\") && <Table\n loading={props.loading}\n items={props.students}\n categories={props.categories}\n />}\n </Stack>\n </Stack>\n </div>\n </div>\n </Stack>\n </Container>\n )\n}","import * as React from 'react'\nimport {IconTableExport} from '@tabler/icons';\n\nexport type SplitButtonProps = {\n href: string\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\n/**\n * Kept as its own component/name for continuity even though only one action renders today (Copy\n * link's trigger has been commented out since before this round's restyle - onCopyLinkClick stays\n * wired through in case it's re-enabled later, same as before).\n */\nexport const SplitButton = (props: SplitButtonProps) => {\n return (\n <button\n onClick={props.onExportDataClick}\n className=\"flex items-center gap-2 rounded-xl bg-gradient-to-r from-gold-400 to-[#f5c300] px-4 py-2.5 text-xs font-extrabold text-dark-blue-400\"\n >\n <IconTableExport size={14} stroke={2}/>\n Export data (.csv)\n </button>\n );\n}\n","import * as React from 'react';\nimport {IconDownload, IconExternalLink} from \"@tabler/icons\";\n\nexport interface Item {\n link: string\n badgeName: string\n lessonName: string\n pathwayName?: string\n question: string\n}\n\nexport type StackProps = {\n items: Item[]\n hideBadge?: boolean\n hideLesson?: boolean\n hidePathway?: boolean\n}\n\n/**\n * The per-file list shown both inline (Table.tsx's row-expansion) and inside SubmissionDetail's\n * full review view. Which columns render depends on which level of the Pathway -> Badge -> Lesson\n * -> Question hierarchy the calling tab has already fixed (shown once at that tab's group-card\n * level instead - see FileLocker.tsx's per-tab hide* flags). Header and every row are direct\n * children of one shared grid (not one grid per row) so column tracks are computed once across all\n * content - a per-row grid would let each row's \"auto\"-sized action column resolve to a different\n * width than the empty header cell above it, drifting the columns out of alignment. View/Download\n * both point at the same existing `link` - there's no separate filename/size data available (the\n * link is an opaque storage key, not a real filename), so `question` doubles as the file's label\n * the way it already does today.\n */\nexport function Stack(props: StackProps) {\n const {items, hideBadge, hideLesson, hidePathway} = props\n if (!items.length) return null;\n\n const columns = [\n \"minmax(0,2fr)\",\n !hidePathway && \"minmax(0,1.3fr)\",\n !hideLesson && \"minmax(0,1.3fr)\",\n !hideBadge && \"minmax(0,1.3fr)\",\n \"auto\",\n ].filter(Boolean).join(\" \")\n\n const headerCell = \"border-b border-slate-100 pb-2 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\"\n const dataCell = \"py-3\"\n\n return (\n <div className=\"grid items-center gap-x-3\" style={{gridTemplateColumns: columns}}>\n <div className={headerCell}>Question</div>\n {!hidePathway && <div className={headerCell}>Pathway</div>}\n {!hideLesson && <div className={headerCell}>Lesson</div>}\n {!hideBadge && <div className={headerCell}>Badge</div>}\n <div className={headerCell}/>\n\n {items.map((row, i) => {\n const rowBorder = i > 0 ? \"border-t border-slate-100\" : \"\"\n return (\n <React.Fragment key={i}>\n <div className={`${dataCell} ${rowBorder} text-xs font-semibold text-dark-blue-400`}>{row.question}</div>\n {!hidePathway && <div className={`${dataCell} ${rowBorder} truncate text-[11px] text-slate-500`}>{row.pathwayName || \"—\"}</div>}\n {!hideLesson && <div className={`${dataCell} ${rowBorder} truncate text-[11px] text-slate-500`}>{row.lessonName}</div>}\n {!hideBadge && <div className={`${dataCell} ${rowBorder} truncate text-[11px] text-slate-500`}>{row.badgeName}</div>}\n <div className={`${dataCell} ${rowBorder} flex shrink-0 gap-2`}>\n <a\n href={row.link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1 rounded-md border border-slate-200 px-2.5 py-1.5 text-[11px] font-bold text-slate-600 no-underline hover:bg-slate-50\"\n >\n <IconExternalLink size={12} stroke={2}/>\n Preview\n </a>\n <a\n href={row.link}\n download\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1 rounded-md border border-slate-200 px-2.5 py-1.5 text-[11px] font-bold text-slate-600 no-underline hover:bg-slate-50\"\n >\n <IconDownload size={12} stroke={2}/>\n Download\n </a>\n </div>\n </React.Fragment>\n )\n })}\n </div>\n )\n}\n","import * as React from 'react';\nimport {IconChevronRight} from \"@tabler/icons\";\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {Stack as FileStack} from \"./FileStack\";\nimport {useSortableData} from \"../../utils/useSortableData\";\n\n/**\n * Item\n */\nexport interface Item {\n userId: string\n avatar: string\n name: string\n email: string\n submissions: SubmissionItem[]\n}\n\nexport interface SubmissionItem {\n link: string\n badgeName: string\n badgeId: string\n lessonName: string\n question: string\n // Already present on every submission returned by getFileLocker() (useOrganization.ts) - just\n // wasn't declared here before, so nothing read it. No new API call, no hub change: this data is\n // already flowing through today, purely a type-level addition to unlock it.\n updatedAt?: string\n // Derived client-side in FileLocker.tsx from badgeId (badge -> pathway prefix-match), not part\n // of the raw API response - attached before these items ever reach this component.\n pathwayName?: string\n}\n\n/**\n * TableData\n */\nexport type TableData = {\n loading: boolean\n items: Item[]\n}\n\n/**\n * TableProps\n */\nexport type TableProps = TableData & {\n hideBadge?: boolean\n hideLesson?: boolean\n hidePathway?: boolean\n onReview?: (item: Item) => void\n}\n\nconst initials = (name: string) => name.split(\" \").map(w => w[0]).filter(Boolean).slice(0, 2).join(\"\").toUpperCase()\n\n/**\n * Table\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n const [expanded, setExpanded] = React.useState<Record<string, boolean>>({})\n\n const preparedItems = React.useMemo(() => {\n return props.items.map(item => ({\n ...item,\n submissionCount: item.submissions?.length || 0,\n }));\n }, [props.items]);\n\n const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);\n\n if (props.items.length === 0) {\n return <PlaceholderBanner\n title=\"No files to display\"\n description=\"There are no submitted files to display yet.\"\n loading={props.loading}\n icon=\"badges\"\n />\n }\n\n const indicator = (key: string) => sortConfig.key !== key ? \"\" : (sortConfig.direction === \"desc\" ? \" ▾\" : \" ▴\")\n\n return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center gap-4 px-4 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">\n <button onClick={() => requestSort(\"name\")} className=\"flex-1 text-left hover:text-slate-600\">Student Name{indicator(\"name\")}</button>\n <button onClick={() => requestSort(\"submissionCount\")} className=\"w-16 shrink-0 text-left hover:text-slate-600\">Files{indicator(\"submissionCount\")}</button>\n {props.onReview && <div className=\"w-36 shrink-0\" />}\n <div className=\"w-4 shrink-0\" />\n </div>\n\n {sortedItems.map((row) => {\n const isOpen = !!expanded[row.userId]\n return (\n <div key={row.userId} className=\"rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div\n onClick={() => setExpanded({...expanded, [row.userId]: !isOpen})}\n className=\"flex cursor-pointer items-center gap-4 p-4\"\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n {row.avatar\n ? <img src={row.avatar} className=\"h-9 w-9 shrink-0 rounded-full object-cover\" alt=\"\"/>\n : <div className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-mint-400 to-dark-blue-400 text-xs font-bold text-white\">\n {initials(row.name)}\n </div>}\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-bold text-dark-blue-400\">{row.name}</div>\n <div className=\"truncate text-xs text-slate-400\">{row.email}</div>\n </div>\n </div>\n <div className=\"w-16 shrink-0 text-sm font-bold text-dark-blue-400\">{row.submissions.length}</div>\n {props.onReview && (\n <div className=\"w-36 shrink-0\">\n <button\n onClick={(e) => { e.stopPropagation(); props.onReview!(row) }}\n className=\"rounded-lg bg-gradient-to-r from-gold-400 to-[#f5c300] px-3 py-1.5 text-[11px] font-extrabold text-dark-blue-400\"\n >\n Review Submission\n </button>\n </div>\n )}\n <IconChevronRight size={16} stroke={2} className={`w-4 shrink-0 text-slate-300 transition-transform ${isOpen ? \"rotate-90\" : \"\"}`} />\n </div>\n {isOpen && (\n <div className=\"border-t border-slate-100 px-4 py-3\">\n <FileStack items={row.submissions} hideBadge={props.hideBadge} hideLesson={props.hideLesson} hidePathway={props.hidePathway} />\n </div>\n )}\n </div>\n )\n })}\n </div>\n );\n}\n","import * as React from 'react';\nimport {IconChevronLeft, IconChevronRight} from \"@tabler/icons\";\nimport {Item} from \"./Table\";\nimport {Stack as FileStack} from \"./FileStack\";\n\n/**\n * SubmissionDetailProps\n */\nexport type SubmissionDetailProps = {\n student: Item\n context?: string\n onBack: () => void\n onNav: (direction: 1 | -1) => void\n}\n\nconst initials = (name: string) => name.split(\" \").map(w => w[0]).filter(Boolean).slice(0, 2).join(\"\").toUpperCase()\n\n/**\n * The per-student review view opened from FileLocker's \"Review Submission\" buttons. Built from data\n * already available on the student/submissions shape - no status pill, no comment thread (neither\n * has any backing data in the API today).\n * @param props\n * @constructor\n */\nexport function SubmissionDetail(props: SubmissionDetailProps) {\n const {student} = props\n\n return (\n <div className=\"flex w-full flex-col gap-4 px-4 py-8\">\n <div className=\"flex items-center gap-2 text-xs text-slate-400\">\n <button onClick={props.onBack} className=\"font-bold text-sky-blue-400 hover:underline\">File Locker</button>\n <span>/</span>\n <span className=\"font-bold text-dark-blue-400\">{student.name}</span>\n </div>\n\n <div className=\"flex items-center gap-4 rounded-2xl border border-slate-200 bg-white p-5 shadow-sm\">\n {student.avatar\n ? <img src={student.avatar} className=\"h-12 w-12 shrink-0 rounded-full object-cover\" alt=\"\"/>\n : <div className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-mint-400 to-dark-blue-400 text-sm font-bold text-white\">\n {initials(student.name)}\n </div>}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-lg font-extrabold text-dark-blue-400\">{student.name}</div>\n <div className=\"mt-0.5 text-xs text-slate-400\">\n {student.email}{props.context ? ` · ${props.context}` : \"\"}\n </div>\n </div>\n <div className=\"shrink-0 rounded-full bg-slate-100 px-3 py-1 text-xs font-bold text-slate-500\">\n {student.submissions.length} file{student.submissions.length === 1 ? \"\" : \"s\"}\n </div>\n </div>\n\n <div className=\"rounded-2xl border border-slate-200 bg-white p-5 shadow-sm\">\n <div className=\"text-sm font-extrabold text-dark-blue-400\">Files</div>\n <div className=\"mt-2\">\n <FileStack items={student.submissions}/>\n </div>\n </div>\n\n <div className=\"flex gap-3\">\n <button\n onClick={() => props.onNav(-1)}\n className=\"flex flex-1 items-center justify-center gap-1.5 rounded-xl border border-slate-200 bg-white py-2.5 text-xs font-bold text-slate-600 hover:bg-slate-50\"\n >\n <IconChevronLeft size={14} stroke={2}/>\n Previous Submission\n </button>\n <button\n onClick={() => props.onNav(1)}\n className=\"flex flex-1 items-center justify-center gap-1.5 rounded-xl border border-slate-200 bg-white py-2.5 text-xs font-bold text-slate-600 hover:bg-slate-50\"\n >\n Next Submission\n <IconChevronRight size={14} stroke={2}/>\n </button>\n </div>\n </div>\n )\n}\n","import * as React from \"react\"\nimport { FileLockerUserItem } from \"./FileLocker\"\n\nexport type Submission = {\n badgeId: string\n lessonName: string\n}\n\nexport const useFilteredStudents = (students: FileLockerUserItem[]) => {\n return React.useMemo(() => {\n\n const byBadge = (badgeId: string): FileLockerUserItem[] =>\n students\n .map(s => ({\n ...s,\n submissions: (s.submissions || []).filter(\n (sub) => sub.badgeId === badgeId\n )\n }))\n .filter(s => s.submissions.length)\n\n const byLesson = (lessonName: string): FileLockerUserItem[] =>\n students\n .map(s => ({\n ...s,\n submissions: (s.submissions || []).filter(\n (sub) => sub.lessonName === lessonName\n )\n }))\n .filter(s => s.submissions.length)\n\n const byPathway = (\n pathwayId: string,\n badges: any[]\n ): FileLockerUserItem[] => {\n\n const validBadgeIds = badges\n .filter((b: any) =>\n Array.isArray(b.categories) &&\n b.categories.some((c: string) =>\n c.startsWith(pathwayId)\n )\n )\n .map((b: any) => b.badgeId)\n\n return students\n .map(s => ({\n ...s,\n submissions: (s.submissions || []).filter(\n (sub) => validBadgeIds.includes(sub.badgeId)\n )\n }))\n .filter(s => s.submissions.length)\n }\n\n return { byBadge, byLesson, byPathway }\n\n }, [students])\n}","import * as React from 'react';\nimport {IconChevronDown, IconChevronLeft} from \"@tabler/icons\";\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {SplitButton} from \"./SplitButton\";\nimport {Table, Item} from \"./Table\";\nimport {SubmissionDetail} from \"./SubmissionDetail\";\nimport {useFilteredStudents} from \"./useFilteredStudents\"\n\n/**\n * FileLockerUserItem\n */\nexport type FileLockerUserItem = Item\n\n/**\n * FileLockerClass\n */\nexport type FileLockerClass = {\n classId: string\n name: string\n active: boolean\n}\n\n/**\n * FileLockerProps\n */\nexport type FileLockerProps = {\n loading: boolean\n displayName: string,\n description: string\n classes: FileLockerClass[]\n lessons: {lessonId: string, lessonName: string}[]\n classId: string\n students: FileLockerUserItem[]\n href: string\n trial?: boolean\n lessonsCompleted?: number\n pathways?: {\n pathwayId: string\n title: string\n description: string\n }[]\n\n badges?: {\n badgeId: string\n displayName: string\n categories?: string[]\n // Already present on every badge returned by getFileLocker() - just wasn't declared here\n // before. No new API call, no hub change: needed client-side to resolve a lesson's badge\n // (and from there, its pathway) for the group-card breadcrumbs below.\n lessonIds?: string[]\n }[]\n\n onBackClick: () => void;\n onClassChange: (classId: string) => void;\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\ntype Reviewing = {\n student: Item\n list: Item[]\n context?: string\n}\n\nconst TABS: {value: string, label: string}[] = [\n {value: \"students\", label: \"By student\"},\n {value: \"pathways\", label: \"By pathway\"},\n {value: \"badges\", label: \"By badge\"},\n {value: \"lessons\", label: \"By lesson\"},\n]\n\nconst countFiles = (students: Item[]) => students.reduce((acc, s) => acc + (s.submissions?.length || 0), 0)\n\n/**\n * A group's expand/collapse card - shared visual treatment for the pathway/badge/lesson tabs, each\n * of which is a list of these wrapping a filtered Table of students.\n */\nconst GroupCard = (props: {title: string, description?: string, count: number, children: React.ReactNode}) => {\n const [open, setOpen] = React.useState(false)\n return (\n <div className=\"overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm\">\n <div onClick={() => setOpen(!open)} className=\"flex cursor-pointer items-center gap-3.5 p-4\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-extrabold text-dark-blue-400\">{props.title}</div>\n {props.description && <div className=\"mt-1 text-xs leading-relaxed text-slate-500\">{props.description}</div>}\n </div>\n <div className=\"shrink-0 rounded-full bg-mint-100 px-2.5 py-1 text-xs font-bold text-dark-blue-400\">{props.count}</div>\n <IconChevronDown size={15} stroke={2.3} className={`shrink-0 text-slate-400 transition-transform ${open ? \"rotate-180\" : \"\"}`}/>\n </div>\n {open && <div className=\"border-t border-slate-100 p-4\">{props.children}</div>}\n </div>\n )\n}\n\ntype GroupsProps = {\n students: Item[]\n loading: boolean\n onReview: (item: Item, list: Item[], context?: string) => void\n}\n\n/**\n * By Pathway: pathway is fixed (shown on the card), badge/lesson still vary per submission so both\n * stay visible in the nested table.\n */\nconst PathwayGroups = (props: GroupsProps & {pathways: NonNullable<FileLockerProps[\"pathways\"]>, badges: NonNullable<FileLockerProps[\"badges\"]>}) => {\n const {byPathway} = useFilteredStudents(props.students)\n return (\n <div className=\"flex flex-col gap-3\">\n {props.pathways.map((p) => {\n const filtered = byPathway(p.pathwayId, props.badges)\n return (\n <GroupCard key={p.pathwayId} title={p.title} description={p.description} count={countFiles(filtered)}>\n <Table loading={props.loading} items={filtered} hidePathway onReview={(item) => props.onReview(item, filtered, p.title)}/>\n </GroupCard>\n )\n })}\n </div>\n )\n}\n\n/**\n * By Badge: badge is fixed (card title) and its owning pathway is shown as a subtitle, so neither\n * needs to repeat in the nested table - only lesson still varies per submission.\n */\nconst BadgeGroups = (props: GroupsProps & {badges: NonNullable<FileLockerProps[\"badges\"]>, pathwayNameForBadge: Record<string, string>}) => {\n const {byBadge} = useFilteredStudents(props.students)\n return (\n <div className=\"flex flex-col gap-3\">\n {props.badges.map((b) => {\n const filtered = byBadge(b.badgeId)\n const pathwayTitle = props.pathwayNameForBadge[b.badgeId]\n return (\n <GroupCard key={b.badgeId} title={b.displayName} description={pathwayTitle ? `${pathwayTitle} pathway` : undefined} count={countFiles(filtered)}>\n <Table loading={props.loading} items={filtered} hideBadge hidePathway onReview={(item) => props.onReview(item, filtered, b.displayName)}/>\n </GroupCard>\n )\n })}\n </div>\n )\n}\n\n/**\n * By Lesson: lesson is fixed (card title) and its owning badge + pathway are shown as a subtitle,\n * so all three are implied - only question still varies per submission.\n */\nconst LessonGroups = (props: GroupsProps & {lessons: FileLockerProps[\"lessons\"], badgeForLesson: Record<string, {displayName: string, badgeId: string}>, pathwayNameForBadge: Record<string, string>}) => {\n const {byLesson} = useFilteredStudents(props.students)\n return (\n <div className=\"flex flex-col gap-3\">\n {props.lessons.map((l) => {\n const filtered = byLesson(l.lessonName)\n const badge = props.badgeForLesson[l.lessonId]\n const pathwayTitle = badge ? props.pathwayNameForBadge[badge.badgeId] : undefined\n const description = badge\n ? (pathwayTitle ? `${badge.displayName} · ${pathwayTitle} pathway` : badge.displayName)\n : undefined\n return (\n <GroupCard key={l.lessonId} title={l.lessonName} description={description} count={countFiles(filtered)}>\n <Table loading={props.loading} items={filtered} hideBadge hideLesson hidePathway onReview={(item) => props.onReview(item, filtered, l.lessonName)}/>\n </GroupCard>\n )\n })}\n </div>\n )\n}\n\n/**\n * FileLocker\n * @param props\n * @constructor\n */\nexport const FileLocker = (props: FileLockerProps) => {\n const [tab, setTab] = React.useState(\"students\")\n const [reviewing, setReviewing] = React.useState<Reviewing | null>(null)\n\n const numberOfFiles = countFiles(props.students)\n\n const {thisWeek, thisMonth} = React.useMemo(() => {\n const now = new Date()\n const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000)\n const fom = new Date(now.getFullYear(), now.getMonth(), 1)\n let week = 0, month = 0\n props.students.forEach((s) => {\n (s.submissions || []).forEach((sub) => {\n if (!sub.updatedAt) return\n const d = new Date(sub.updatedAt)\n if (d >= weekAgo) week += 1\n if (d >= fom) month += 1\n })\n })\n return {thisWeek: week, thisMonth: month}\n }, [props.students])\n\n // Pure client-side derivation over data already in props (same badge->pathway prefix-match\n // useOrganization.ts's own getPathway() uses) - zero new API calls, zero hub changes. Lets every\n // tab show a submission's full Pathway/Badge/Lesson context without repeating whatever the\n // current grouping already fixes.\n const pathwayNameForBadge = React.useMemo(() => {\n const map: Record<string, string> = {}\n ;(props.badges || []).forEach((b) => {\n if (!Array.isArray(b.categories)) return\n const pathway = (props.pathways || []).find((p) => b.categories!.some((c) => c.startsWith(p.pathwayId)))\n if (pathway) map[b.badgeId] = pathway.title\n })\n return map\n }, [props.badges, props.pathways])\n\n const badgeForLesson = React.useMemo(() => {\n const map: Record<string, {displayName: string, badgeId: string}> = {}\n ;(props.badges || []).forEach((b) => {\n if (!Array.isArray(b.lessonIds)) return\n b.lessonIds.forEach((lessonId) => {\n if (!(lessonId in map)) map[lessonId] = {displayName: b.displayName, badgeId: b.badgeId}\n })\n })\n return map\n }, [props.badges])\n\n const enrichedStudents = React.useMemo(() => {\n return props.students.map((s) => ({\n ...s,\n submissions: (s.submissions || []).map((sub) => ({...sub, pathwayName: pathwayNameForBadge[sub.badgeId] || \"\"})),\n }))\n }, [props.students, pathwayNameForBadge])\n\n const {byPathway} = useFilteredStudents(enrichedStudents)\n const mostActivePathway = React.useMemo(() => {\n return (props.pathways || []).reduce<{title: string, count: number} | null>((best, p) => {\n const count = countFiles(byPathway(p.pathwayId, props.badges || []))\n return count > 0 && (!best || count > best.count) ? {title: p.title, count} : best\n }, null)\n }, [props.pathways, props.badges, byPathway])\n\n const onReview = (item: Item, list: Item[], context?: string) => setReviewing({student: item, list, context})\n const onNav = (dir: 1 | -1) => {\n if (!reviewing) return\n const idx = reviewing.list.findIndex((s) => s.userId === reviewing.student.userId)\n if (idx === -1) return\n const next = reviewing.list[(idx + dir + reviewing.list.length) % reviewing.list.length]\n setReviewing({...reviewing, student: next})\n }\n\n if (reviewing) {\n return <SubmissionDetail\n student={reviewing.student}\n context={reviewing.context}\n onBack={() => setReviewing(null)}\n onNav={onNav}\n />\n }\n\n return (\n <div className=\"flex w-full flex-col gap-5 px-4 py-8\">\n <div className=\"flex items-start justify-between gap-4\">\n <div>\n <button onClick={props.onBackClick} className=\"flex items-center gap-1 text-xs font-bold text-sky-blue-400 hover:underline\">\n <IconChevronLeft size={13} stroke={2.5}/>\n Back\n </button>\n <h1 className=\"mt-1.5 text-2xl font-extrabold tracking-tight text-dark-blue-400\">{props.displayName || \"File Locker\"}</h1>\n <p className=\"mt-1 text-sm text-slate-500\">{props.description || \"No description\"}</p>\n </div>\n {!props.trial && <SplitButton href={props.href} onCopyLinkClick={props.onCopyLinkClick} onExportDataClick={props.onExportDataClick}/>}\n </div>\n\n <StatsGroup data={props.trial ? [\n {title: \"LESSONS SUBMITTED\", value: props.lessonsCompleted || 0},\n ] : [\n {title: \"FILES\", value: numberOfFiles},\n {title: \"THIS WEEK\", value: thisWeek},\n {title: \"THIS MONTH\", value: thisMonth},\n ]}/>\n\n {!props.trial && mostActivePathway && (\n <div className=\"text-xs text-slate-500\">\n Most active pathway: <span className=\"font-bold text-dark-blue-400\">{mostActivePathway.title}</span> ({mostActivePathway.count} submission{mostActivePathway.count === 1 ? \"\" : \"s\"})\n </div>\n )}\n\n {!props.trial && (\n <select\n value={props.classId}\n onChange={(e) => props.onClassChange(e.target.value)}\n className=\"w-64 rounded-xl border border-slate-200 bg-white px-3.5 py-2.5 text-sm text-dark-blue-400 focus:border-sky-blue-400 focus:outline-none\"\n >\n <option value=\"\">Select a class</option>\n {props.classes.map((g) => <option key={g.classId} value={g.classId}>{g.name}</option>)}\n </select>\n )}\n\n {!props.trial && (\n <div className=\"flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1\">\n {TABS.map((t) => (\n <button\n key={t.value}\n onClick={() => setTab(t.value)}\n className={`rounded-lg px-4 py-2 text-xs font-bold ${tab === t.value ? \"bg-sky-blue-400/20 text-dark-blue-400\" : \"text-slate-400 hover:text-slate-600\"}`}\n >\n {t.label}\n </button>\n ))}\n </div>\n )}\n\n {!props.trial && tab === \"students\" && (\n <Table loading={props.loading} items={enrichedStudents} onReview={(item) => onReview(item, enrichedStudents)}/>\n )}\n {!props.trial && tab === \"pathways\" && (\n <PathwayGroups students={enrichedStudents} loading={props.loading} pathways={props.pathways || []} badges={props.badges || []} onReview={onReview}/>\n )}\n {!props.trial && tab === \"badges\" && (\n <BadgeGroups students={enrichedStudents} loading={props.loading} badges={props.badges || []} pathwayNameForBadge={pathwayNameForBadge} onReview={onReview}/>\n )}\n {!props.trial && tab === \"lessons\" && (\n <LessonGroups students={enrichedStudents} loading={props.loading} lessons={props.lessons} badgeForLesson={badgeForLesson} pathwayNameForBadge={pathwayNameForBadge} onReview={onReview}/>\n )}\n </div>\n )\n}\n"],"names":["__spreadProps","__spreadValues","useStyles","TabsCore","SplitButton","Stack","Badge","Table","LessonStack","BadgeCore","LessonTable","MantineTable","ImpactTable","ReflectionTable","BadgeTable","StudentTable","DropzoneButton","TABS","AnswerTable","MantineStack","AnswerStack","QuestionStack","__objRest","account","BadgeStack","initials","FileStack"],"mappings":"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"}