@local-civics/mgmt-ui 0.1.215 → 0.1.217
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +29 -2
- package/dist/index.js +655 -951
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +657 -953
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","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'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'n'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?'…':'')","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'n'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":["React","Avatar","useState","Link","IconChevronRight","IconHome2","IconGauge","IconCategory2","IconRoute","IconAlbum","IconLambda","IconClipboard","IconBuilding","__spreadProps","__spreadValues","IconVideo","IconSwitchHorizontal","IconLogout","useStyles","createStyles","Modal","Center","Loader","Container","Group","Button","Title","Text","UnstyledButton","Card","IconBatteryEco","IconBooks","IconBackpack","ScrollArea","SimpleGrid","TabsCore","SplitButton","Stack","IconClipboardCopy","IconTableExport","Image","Grid","Badge","useMemo","Table","DataTable","LessonStack","BadgeCore","ActionIcon","IconArrowLeft","LoadingOverlay","Select","LessonTable","IconSearch","MantineTable","ImpactTable","ReflectionTable","BadgeTable","StudentTable","openConfirmModal","IconCheck","IconTrash","Drawer","DropzoneButton","IconPlus","IconLink","IconDownload","form","useForm","papa","Dropzone","MIME_TYPES","IconCloudUpload","Divider","TextInput","Tooltip","IconInfoCircle","IconPlaylistAdd","Autocomplete","TABS","AnswerTable","showNotification","MantineStack","AnswerStack","Chart","QuestionStack","Paper","Anchor","IconPointer","Box","Menu","IconChevronDown","IconX","__objRest","Overlay","useUncontrolled","ThemeIcon","Checkbox","IconScribble","IconSchool","IconPodium","IconBriefcase","IconPresentation","IconNews","IconTools","createEmotionCache","MantineProvider","NotificationsProvider","ModalsProvider","AppShell","IconBrandInstagram","IconBrandLinkedin","IconBrandFacebook","account","BadgeStack","IconExternalLink","initials","FileStack","IconChevronLeft"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","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/media/Emblem/Emblem.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/components/navigation/PathwayFilterPills/PathwayFilterPills.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'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';\n\n/**\n * EmblemAccent\n */\nexport type EmblemAccent = \"cyan\" | \"mint\" | \"gold\"\n\n/**\n * EmblemIcon. Untyped props - @tabler/icons doesn't publicly export its own icon component type\n * (TablerIcon is a private alias), so this accepts any icon component rather than hand-rolling\n * an interface that has to track that library's exact, looser prop-types (e.g. size: string|number).\n */\nexport type EmblemIcon = React.ComponentType<any>\n\n/**\n * EmblemProps\n */\nexport type EmblemProps = {\n imageURL?: string\n alt?: string\n size?: \"sm\" | \"lg\"\n icon: EmblemIcon\n accent: EmblemAccent\n}\n\nconst SIZE = {\n sm: {box: \"h-11 w-11\", rounded: \"rounded-xl\", icon: 20},\n lg: {box: \"h-16 w-16\", rounded: \"rounded-2xl\", icon: 28},\n}\n\nconst ACCENT = {\n cyan: {bg: \"bg-sky-blue-400/15\", text: \"text-sky-blue-400\"},\n mint: {bg: \"bg-mint-400/15\", text: \"text-mint-400\"},\n gold: {bg: \"bg-gold-400/15\", text: \"text-gold-400\"},\n}\n\n/**\n * Emblem. Renders an entity's imageURL (its logo/badge/emblem), falling back to a tinted icon\n * tile using the same icon/accent already assigned to that entity type elsewhere (Navbar's\n * icon/accent mapping) so a missing image still visually reads as \"a pathway\"/\"a badge.\" A\n * tinted rounded square, not a circle - rounded-full is reserved for human avatars throughout\n * this package.\n * @param props\n * @constructor\n */\nexport function Emblem(props: EmblemProps) {\n const s = SIZE[props.size || \"sm\"]\n const a = ACCENT[props.accent]\n const Icon = props.icon\n\n if (props.imageURL) {\n return <img src={props.imageURL} alt={props.alt || \"\"} className={`${s.box} shrink-0 ${s.rounded} object-cover`} />\n }\n\n return (\n <div className={`flex ${s.box} shrink-0 items-center justify-center ${s.rounded} ${a.bg}`}>\n <Icon size={s.icon} stroke={1.75} className={a.text} />\n </div>\n )\n}\n","import * as React from 'react'\nimport {Link} from \"react-router-dom\";\nimport {IconClipboardCopy, IconTableExport} from '@tabler/icons';\n\n/**\n * SplitButtonProps\n */\nexport type SplitButtonProps = {\n href: string\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\n/**\n * SplitButton\n * @param props\n * @constructor\n */\nexport const SplitButton = (props: SplitButtonProps) => {\n return (\n <div className=\"flex gap-2\">\n <Link\n to={props.href}\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 no-underline hover:bg-slate-50\"\n >\n Preview\n </Link>\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 <IconClipboardCopy size={13} stroke={2} />\n Copy 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 <IconTableExport size={13} stroke={2} />\n Export data (.csv)\n </button>\n </div>\n );\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 {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 return (\n <div className=\"flex flex-col gap-2\">\n {props.items.map((row) => (\n <div key={row.lessonName} className=\"flex items-center justify-between gap-4 py-1.5\">\n <Link to={row.href} className=\"text-sm font-bold text-dark-blue-400 no-underline hover:underline\">{row.lessonName}</Link>\n {row.completion >= 1 && <span className=\"shrink-0 rounded-full bg-mint-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400\">Complete</span>}\n {row.completion === 0 && !row.isStarted && <span className=\"shrink-0 rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500\">Not started</span>}\n {row.completion > 0 && row.completion < 1 && <span className=\"shrink-0 rounded-full bg-gold-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400\">{Math.round((row.completion + Number.EPSILON) * 100)}% Complete</span>}\n </div>\n ))}\n </div>\n );\n}\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 * as React from 'react';\nimport {IconChevronDown} from '@tabler/icons';\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 * TableProps\n */\nexport type TableProps = TableData\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 status: item.isComplete ? 1 : 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 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 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(\"status\")} className=\"w-28 shrink-0 text-center hover:text-slate-600\">Status{indicator(\"status\")}</button>\n <div className=\"w-4 shrink-0\" />\n </div>\n\n {sortedItems.map((row) => {\n const isOpen = !!expanded[row.userId]\n const initials = (row.name?.[0] || row.email[0] || \"?\").toUpperCase()\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-mint-400/20 text-xs font-bold text-dark-blue-400\">{initials}</div>\n }\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-28 shrink-0 text-center\">\n {row.isComplete\n ? <span className=\"rounded-full bg-mint-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400\">Complete</span>\n : <span className=\"rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500\">Incomplete</span>\n }\n </div>\n <IconChevronDown size={15} stroke={2.3} className={`shrink-0 text-slate-400 transition-transform ${isOpen ? \"rotate-180\" : \"\"}`}/>\n </div>\n {isOpen && (\n <div className=\"border-t border-slate-100 px-4 py-3\">\n <LessonStack items={row.lessons}/>\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","import * as React from 'react';\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 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 * 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 no lessons in this badge.\"\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 gap-4 px-4 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">\n <button onClick={() => requestSort(\"lessonName\")} className=\"flex-1 text-left hover:text-slate-600\">Lesson Name{indicator(\"lessonName\")}</button>\n <button onClick={() => requestSort(\"percentageCompletion\")} className=\"w-36 shrink-0 text-right hover:text-slate-600\">Lesson Completion{indicator(\"percentageCompletion\")}</button>\n </div>\n\n {sortedItems.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 text-sm font-bold text-dark-blue-400\">{row.lessonName}</div>\n <div className=\"w-36 shrink-0 text-right text-xs text-slate-500\">{Math.round((row.percentageCompletion + Number.EPSILON) * 100)}%</div>\n </Link>\n ))}\n </div>\n );\n}\n","import {IconAlbum, IconArrowLeft, IconCategory2} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Emblem} from \"../../components/media/Emblem/Emblem\";\nimport {SplitButton} from \"./SplitButton\";\nimport {Table, Item} from \"./Table\";\nimport {Table as LessonTable, Item as LessonItem} from \"./LessonTable\"\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 imageURL?: 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\nconst TABS = [\n {label: \"By lesson\", value: \"lessons\"},\n {label: \"By student\", value: \"students\"},\n]\n\n/**\n * Badge\n * @param props\n * @constructor\n */\nexport const Badge = (props: BadgeProps) => {\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\n return (\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=\"flex items-start gap-4\">\n <Emblem imageURL={props.imageURL} alt={props.displayName} size=\"lg\" icon={IconAlbum} accent=\"mint\" />\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 || \"Badge\"}</h1>\n <p className=\"max-w-xl text-sm text-slate-500\">{props.description || \"No description\"}</p>\n </div>\n </div>\n\n {!props.trial && (\n <SplitButton\n href={props.href}\n onCopyLinkClick={props.onCopyLinkClick}\n onExportDataClick={props.onExportDataClick}\n />\n )}\n </div>\n\n <StatsGroup data={[\n {\n title: props.trial ? \"LESSONS SUBMITTED\" : \"BADGE COMPLETION\",\n value: props.trial ? props.lessonsCompleted || 0 : numberOfBadges,\n },\n ]}/>\n\n {!props.trial && (\n <div className=\"relative w-full max-w-xs\">\n <IconCategory2 size={16} stroke={2} className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-slate-400\" />\n <select\n value={props.classId}\n onChange={(e) => props.onClassChange(e.target.value)}\n className=\"w-full appearance-none rounded-lg border border-slate-200 bg-white py-2 pl-9 pr-4 text-sm text-dark-blue-400 focus:border-sky-blue-400 focus:outline-none\"\n >\n <option value=\"\">All classes</option>\n {props.classes.map((c) => <option key={c.classId} value={c.classId}>{c.name}</option>)}\n </select>\n </div>\n )}\n\n <div className=\"flex flex-col gap-3\">\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 === \"lessons\") && <LessonTable loading={props.loading} items={props.lessons} />}\n {(!props.trial && tab === \"students\") && <Table loading={props.loading} items={props.students} />}\n </div>\n </div>\n )\n}\n","import * as React from 'react';\nimport {Link} from \"react-router-dom\";\nimport {IconAlbum, IconChevronRight} from \"@tabler/icons\";\nimport {Emblem} from \"../../components/media/Emblem/Emblem\";\n\n/**\n * Item\n */\nexport interface Item {\n badgeId: string,\n name: string;\n description: string\n imageURL?: string\n pathway?: string\n numberOfLessons?: 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 * @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=\"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\">Badge</div>\n <div className=\"w-40 shrink-0\">Pathway</div>\n <div className=\"w-28 shrink-0\">Lessons</div>\n <div className=\"w-4 shrink-0\" />\n </div>\n\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 <Emblem imageURL={row.imageURL} alt={row.name} size=\"sm\" icon={IconAlbum} accent=\"mint\" />\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 <div className=\"w-28 shrink-0 text-xs text-slate-500\">\n {row.numberOfLessons ? `${row.numberOfLessons} lesson${row.numberOfLessons === 1 ? \"\" : \"s\"}` : \"—\"}\n </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';\n\n/**\n * PathwayFilterPillsProps\n */\nexport type PathwayFilterPillsProps = {\n pathways: { pathwayId: string, title: string }[]\n selected: string\n onChange: (pathwayId: string) => void\n}\n\n/**\n * A single-select row of pathway pills, shared by Badges/Lessons list pages. An empty `selected`\n * means \"All\" - the caller doesn't need a separate pathwayId for that state.\n * @param props\n * @constructor\n */\nexport function PathwayFilterPills(props: PathwayFilterPillsProps) {\n if (props.pathways.length === 0) {\n return null;\n }\n\n const pillClass = (active: boolean) =>\n `rounded-full border px-3.5 py-1.5 text-xs font-bold ${\n active\n ? \"border-sky-blue-400/40 bg-sky-blue-400/20 text-dark-blue-400\"\n : \"border-slate-200 bg-white text-slate-500 hover:bg-slate-50\"\n }`;\n\n return (\n <div className=\"flex flex-wrap gap-2\">\n <button type=\"button\" onClick={() => props.onChange(\"\")} className={pillClass(!props.selected)}>\n All\n </button>\n {props.pathways.map((p) => (\n <button\n key={p.pathwayId}\n type=\"button\"\n onClick={() => props.onChange(p.pathwayId)}\n className={pillClass(props.selected === p.pathwayId)}\n >\n {p.title}\n </button>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport {IconSearch} from \"@tabler/icons\";\nimport {Table, Item} from \"./Table\";\nimport {PathwayFilterPills} from \"../../components/navigation/PathwayFilterPills/PathwayFilterPills\";\n\n/**\n * BadgeItem\n */\nexport type BadgeItem = Item\n\n/**\n * BadgesProps\n */\nexport type BadgesProps = {\n loading: boolean\n badges: BadgeItem[]\n pathways: { pathwayId: string, title: string }[]\n selectedPathway: string\n\n onAutocompleteChange: (value: string) => void\n onPathwayChange: (pathwayId: 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 <PathwayFilterPills pathways={props.pathways} selected={props.selectedPathway} onChange={props.onPathwayChange} />\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 {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {useSortableData} from \"../../utils/useSortableData\";\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 * TableProps\n */\nexport type TableProps = TableData & TableMethods\n\n/**\n * Table\n * @param props\n * @constructor\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 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 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 <div className=\"grid grid-cols-[2fr_1fr] 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(\"studentName\")} className=\"flex items-center text-left hover:text-slate-700\">Student Name{indicator(\"studentName\")}</button>\n <button onClick={() => requestSort(\"className\")} className=\"flex items-center text-left hover:text-slate-700\">Class Name{indicator(\"className\")}</button>\n </div>\n {sortedItems.map((row, i) => (\n <div\n key={row.studentId}\n className={`grid grid-cols-[2fr_1fr] items-center gap-3 px-5 py-3.5 ${\n i < sortedItems.length - 1 ? \"border-b border-slate-100\" : \"\"\n }`}\n >\n <button\n type=\"button\"\n onClick={() => props.onViewProfile(row)}\n className=\"truncate text-left text-xs font-bold text-dark-blue-400 hover:text-sky-blue-400\"\n >\n {row.studentName}\n </button>\n <div className=\"truncate text-xs text-slate-500\">{row.className}</div>\n </div>\n ))}\n </div>\n );\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 {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {useSortableData} from \"../../utils/useSortableData\";\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. updatedAt is a plain string on Item, but useSortableData's Date-aware sort branch\n * needs a real Date instance to engage - precomputed here the same way Class/Table.tsx already\n * precomputes fullName for its own sortable identity column.\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 updatedAtDate: new Date(item.updatedAt),\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 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 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 <div className=\"grid grid-cols-[1fr_1fr_2fr_0.8fr] 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(\"studentName\")} className=\"flex items-center text-left hover:text-slate-700\">Student Name{indicator(\"studentName\")}</button>\n <button onClick={() => requestSort(\"lessonName\")} className=\"flex items-center text-left hover:text-slate-700\">Lesson Name{indicator(\"lessonName\")}</button>\n <div>Reflection</div>\n <button onClick={() => requestSort(\"updatedAtDate\")} className=\"flex items-center text-left hover:text-slate-700\">Updated At{indicator(\"updatedAtDate\")}</button>\n </div>\n {sortedItems.map((row, i) => (\n <div\n key={row.studentName+row.lessonName}\n className={`grid grid-cols-[1fr_1fr_2fr_0.8fr] items-center gap-3 px-5 py-3.5 ${\n i < sortedItems.length - 1 ? \"border-b border-slate-100\" : \"\"\n }`}\n >\n <div className=\"truncate text-xs font-bold text-dark-blue-400\">{row.studentName}</div>\n <div className=\"truncate text-xs text-slate-500\">{row.lessonName}</div>\n <div className=\"text-xs text-slate-500\">{row.reflection}</div>\n <div className=\"text-xs text-slate-500\">{relativeTimeFromDates(row.updatedAtDate)}</div>\n </div>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {useSortableData} from \"../../utils/useSortableData\";\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 * 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 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 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 <div className=\"grid grid-cols-[1fr_3fr] 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(\"studentName\")} className=\"flex items-center text-left hover:text-slate-700\">Student Name{indicator(\"studentName\")}</button>\n <div>Impact Statement</div>\n </div>\n {sortedItems.map((row, i) => (\n <div\n key={row.studentName}\n className={`grid grid-cols-[1fr_3fr] items-center gap-3 px-5 py-3.5 ${\n i < sortedItems.length - 1 ? \"border-b border-slate-100\" : \"\"\n }`}\n >\n <div className=\"truncate text-xs font-bold text-dark-blue-400\">{row.studentName}</div>\n <div className=\"text-xs text-slate-500\">{row.impactStatement}</div>\n </div>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {useSortableData} from \"../../utils/useSortableData\";\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 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=\"We don't have any badges to show you just 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=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div className=\"grid grid-cols-[1.5fr_2fr_0.8fr] 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(\"name\")} className=\"flex items-center text-left hover:text-slate-700\">Badge Name{indicator(\"name\")}</button>\n <div>Description</div>\n <button onClick={() => requestSort(\"percentageCompletion\")} className=\"flex items-center justify-center text-center hover:text-slate-700\">Completion{indicator(\"percentageCompletion\")}</button>\n </div>\n {sortedItems.map((row, i) => (\n <div\n key={row.badgeId}\n className={`grid grid-cols-[1.5fr_2fr_0.8fr] items-center gap-3 px-5 py-3.5 ${\n i < sortedItems.length - 1 ? \"border-b border-slate-100\" : \"\"\n }`}\n >\n <button\n type=\"button\"\n onClick={() => props.onClick && props.onClick(row)}\n className=\"truncate text-left text-xs font-bold text-dark-blue-400 hover:text-sky-blue-400\"\n >\n {row.name}\n </button>\n <div className=\"truncate text-xs text-slate-500\">{row.description}</div>\n <div className=\"text-center text-xs font-bold text-dark-blue-400\">{Math.round((row.percentageCompletion + Number.EPSILON) * 100)}%</div>\n </div>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {useSortableData} from \"../../utils/useSortableData\";\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: (lesson: 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 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=\"We don't have any lessons to show you just yet.\"\n loading={props.loading}\n icon=\"lessons\"\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 <div className=\"grid grid-cols-[1.5fr_2fr_0.8fr] 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(\"name\")} className=\"flex items-center text-left hover:text-slate-700\">Lesson Name{indicator(\"name\")}</button>\n <div>Description</div>\n <button onClick={() => requestSort(\"percentageCompletion\")} className=\"flex items-center justify-center text-center hover:text-slate-700\">Completion{indicator(\"percentageCompletion\")}</button>\n </div>\n {sortedItems.map((row, i) => (\n <div\n key={row.lessonId}\n className={`grid grid-cols-[1.5fr_2fr_0.8fr] items-center gap-3 px-5 py-3.5 ${\n i < sortedItems.length - 1 ? \"border-b border-slate-100\" : \"\"\n }`}\n >\n <button\n type=\"button\"\n onClick={() => props.onClick && props.onClick(row)}\n className=\"truncate text-left text-xs font-bold text-dark-blue-400 hover:text-sky-blue-400\"\n >\n {row.name}\n </button>\n <div className=\"truncate text-xs text-slate-500\">{row.description}</div>\n <div className=\"text-center text-xs font-bold text-dark-blue-400\">{Math.round((row.percentageCompletion + Number.EPSILON) * 100)}%</div>\n </div>\n ))}\n </div>\n );\n}\n","import {IconCategory2} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\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\nconst TABS = [\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\n/**\n * Dashboard\n * @param props\n * @constructor\n */\nexport const Dashboard = (props: DashboardProps) => {\n const [tab, setTab] = useState(\"students\")\n\n return (\n <div className=\"flex flex-col gap-5 px-4 py-8\">\n <div className=\"space-y-1.5\">\n <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">Dashboard</h1>\n <p className=\"max-w-xl text-sm text-slate-500\">Track your students' pathway progress</p>\n </div>\n\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 <div className=\"relative w-full max-w-xs\">\n <IconCategory2 size={16} stroke={2} className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-slate-400\" />\n <select\n value={props.classId}\n onChange={(e) => props.onClassChange(e.target.value)}\n className=\"w-full appearance-none rounded-lg border border-slate-200 bg-white py-2 pl-9 pr-4 text-sm text-dark-blue-400 focus:border-sky-blue-400 focus:outline-none\"\n >\n <option value=\"\">All classes</option>\n {props.classes.map((c) => <option key={c.classId} value={c.classId}>{c.name}</option>)}\n </select>\n </div>\n\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex w-fit flex-wrap 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 === \"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 </div>\n </div>\n )\n}\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'n'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 {Text} from '@mantine/core';\nimport * as React from 'react';\nimport {Link} from \"react-router-dom\";\nimport {IconTrash} from '@tabler/icons';\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {useSortableData} from \"../../utils/useSortableData\";\n\n/**\n * Item\n */\nexport type Item = {\n href: string,\n classId: string,\n name: string;\n description: string,\n numberOfStudents: number\n}\n\n/**\n * TableProps\n */\nexport interface TableProps {\n loading: boolean\n items: Item[];\n onDeleteClass: (item: Item) => void\n}\n\nconst openDeleteModal = (group: Item, onDeleteClass: (item: Item) => void) => 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: () => onDeleteClass(group),\n});\n\n/**\n * Table. Same delete-confirmation (openConfirmModal) and data as before this round's restyle -\n * only the row markup moved from mantine-datatable to Tailwind, reusing the already-wired\n * useSortableData hook.\n * @param props\n * @constructor\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 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 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 <div className=\"grid grid-cols-[1.5fr_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(\"name\")} className=\"flex items-center text-left hover:text-slate-700\">Class Name{indicator(\"name\")}</button>\n <div>Description</div>\n <button onClick={() => requestSort(\"numberOfStudents\")} className=\"flex items-center justify-center text-center hover:text-slate-700\"># of Students{indicator(\"numberOfStudents\")}</button>\n <div />\n </div>\n {sortedItems.map((row, i) => (\n <div\n key={row.classId}\n className={`grid grid-cols-[1.5fr_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=\"truncate text-xs font-bold text-dark-blue-400 no-underline hover:text-sky-blue-400\">\n {row.name}\n </Link>\n ) : (\n <span className=\"truncate text-xs font-bold text-dark-blue-400\">{row.name}</span>\n )}\n\n <div className=\"truncate text-xs text-slate-500\">{row.description}</div>\n\n <div className=\"text-center text-xs font-bold text-dark-blue-400\">{row.numberOfStudents || 0}</div>\n\n <div>\n <button\n type=\"button\"\n onClick={() => openDeleteModal(row, props.onDeleteClass)}\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 </div>\n </div>\n ))}\n </div>\n );\n}\n","import {IconInfoCircle, IconPlaylistAdd, IconSearch} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n Title,\n Drawer,\n TextInput, ActionIcon,\n Tooltip, Group,\n} from '@mantine/core';\nimport { useForm } from '@mantine/form';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Table, Item} from \"./Table\";\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 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 <div className=\"flex flex-col gap-3\">\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 <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 </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 <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">Organize people into classes</h1>\n <p className=\"max-w-xl text-sm text-slate-500\">Create classes, cohorts, or custom subgroups</p>\n </div>\n\n {!props.loading && (\n <button\n type=\"button\"\n onClick={() => setOpened(true)}\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 <IconPlaylistAdd size={13} stroke={2} />\n Create class\n </button>\n )}\n </div>\n\n <StatsGroup data={[\n {\n title: \"# OF CLASSES\",\n value: props.classes.length,\n },\n ]}/>\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 classes\"\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\n loading={props.loading}\n items={props.classes}\n onDeleteClass={props.onDeleteClass}\n />\n </div>\n </>\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 {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 * TableProps\n */\nexport type TableProps = TableData\n\n/**\n * Table. Reflection text itself was never sortable - only Student Name and Rating are, same as\n * before this restyle.\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 indicator = (key: string) => sortConfig.key !== key ? \"\" : (sortConfig.direction === \"desc\" ? \" ▾\" : \" ▴\");\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 <button onClick={() => requestSort(\"studentName\")} className=\"w-40 shrink-0 text-left hover:text-slate-600\">Student Name{indicator(\"studentName\")}</button>\n <div className=\"flex-1\">Reflection</div>\n <button onClick={() => requestSort(\"rating\")} className=\"w-20 shrink-0 text-right hover:text-slate-600\">Rating{indicator(\"rating\")}</button>\n </div>\n\n {sortedItems.map((row, i) => (\n <div key={`${row.studentName}-${i}`} className=\"rounded-xl border border-slate-200 bg-white p-4 shadow-sm\">\n <div className=\"flex items-start gap-4\">\n <div className=\"w-40 shrink-0 text-sm font-bold text-dark-blue-400\">{row.studentName}</div>\n <div className=\"flex-1 text-sm text-slate-600\">{row.reflection}</div>\n <div className=\"w-20 shrink-0 text-right text-sm text-slate-500\">{row.rating}</div>\n </div>\n </div>\n ))}\n </div>\n );\n}\n","import * as React from 'react'\nimport {Link} from \"react-router-dom\";\nimport {IconClipboardCopy, IconTableExport} from '@tabler/icons';\n\n/**\n * SplitButtonProps\n */\nexport type SplitButtonProps = {\n href: string\n noExport?: boolean\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\n/**\n * SplitButton. `noExport` was already unused in the original render (Export always showed\n * regardless of its value) - kept in the type for call-site compatibility, still not wired to\n * anything, matching current behavior exactly rather than introducing a new gate.\n * @param props\n * @constructor\n */\nexport const SplitButton = (props: SplitButtonProps) => {\n return (\n <div className=\"flex gap-2\">\n <Link\n to={props.href}\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 no-underline hover:bg-slate-50\"\n >\n Preview\n </Link>\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 <IconClipboardCopy size={13} stroke={2} />\n Copy 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 <IconTableExport size={13} stroke={2} />\n Export data (.csv)\n </button>\n </div>\n );\n}\n","import * as React from 'react';\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 * StackProps\n */\nexport type StackProps = StackData\n\n/**\n * Stack. The whole block is one link to the student's full response, same as before.\n * @constructor\n * @param props\n */\nexport function Stack(props: StackProps) {\n if (props.items.length === 0) {\n return null\n }\n\n return (\n <Link to={props.href} className=\"flex flex-col gap-4 no-underline\">\n {props.items.map((row) => (\n <div key={row.questionName}>\n <div className=\"text-sm font-bold text-dark-blue-400\">{row.questionName}</div>\n <div className=\"mt-1 text-sm text-slate-600\">{row.answer.join(\", \") || \"No answer.\"}</div>\n </div>\n ))}\n </Link>\n );\n}\n","import * as React from 'react';\nimport {IconChevronDown} from '@tabler/icons';\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {Stack as AnswerStack, Item as AnswerItem} from \"./AnswerStack\";\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 [expanded, setExpanded] = React.useState<Record<string, boolean>>({})\n\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 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 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(\"status\")} className=\"w-28 shrink-0 text-center hover:text-slate-600\">Status{indicator(\"status\")}</button>\n <div className=\"w-4 shrink-0\" />\n </div>\n\n {sortedItems.map((row) => {\n const isOpen = !!expanded[row.userId]\n const initials = (row.name?.[0] || row.email[0] || \"?\").toUpperCase()\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-mint-400/20 text-xs font-bold text-dark-blue-400\">{initials}</div>\n }\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-28 shrink-0 text-center\">\n {row.isComplete && <span className=\"rounded-full bg-mint-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400\">Complete</span>}\n {!row.isComplete && !row.isStarted && <span className=\"rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500\">Not started</span>}\n {!row.isComplete && !!row.isStarted && <span className=\"rounded-full bg-gold-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400\">In progress</span>}\n </div>\n <IconChevronDown size={15} stroke={2.3} className={`shrink-0 text-slate-400 transition-transform ${isOpen ? \"rotate-180\" : \"\"}`}/>\n </div>\n {isOpen && (\n <div className=\"border-t border-slate-100 px-4 py-3\">\n <AnswerStack href={row.href} items={row.answers}/>\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","import * as React from 'react';\nimport {Chart, AxisOptions} from \"react-charts\";\nimport {PlaceholderBanner} 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 * StackProps\n */\nexport type StackProps = StackData\n\n/**\n * Stack. Chart rendering (react-charts) and its answer-tallying logic are unchanged from before\n * this restyle - only the surrounding card chrome moved from Mantine to Tailwind.\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 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 return (\n <div className=\"flex flex-col gap-3\">\n {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 (\n <div key={row.question} className=\"rounded-xl border border-slate-200 bg-white p-6 shadow-sm\">\n <div className=\"text-base font-extrabold text-dark-blue-400\">{row.question}</div>\n <div className=\"mt-1 text-xs text-slate-500\">{row.answers.length} answers</div>\n\n <div className=\"relative mt-4 h-[300px] w-full bg-white\">\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 </div>\n )\n }\n\n return (\n <div key={row.question} className=\"rounded-xl border border-slate-200 bg-white p-6 shadow-sm\">\n <div className=\"text-base font-extrabold text-dark-blue-400\">{row.question}</div>\n <div className=\"mt-1 text-xs text-slate-500\">{row.answers.length} answers</div>\n\n <div className=\"mt-4 flex flex-col gap-2\">\n {row.answers.map(a => {\n const answerText = a.join(\"\\n\")\n return (\n <div key={answerText} className=\"rounded-lg bg-slate-50 p-3 text-sm text-slate-700\">\n {answerText}\n </div>\n )\n })}\n </div>\n </div>\n )\n })}\n </div>\n )\n}\n\nconst truncateWithEllipses = (text: string, max: number) => text.substr(0,max-1)+(text.length>max?'…':'')\n","import {IconArrowLeft, IconCategory2} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\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\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\nconst initialsFor = (name: string) => name.split(/[ -]/).map((n) => n.charAt(0)).join('').toUpperCase()\n\n/**\n * Lesson\n * @param props\n * @constructor\n */\nexport const Lesson = (props: LessonProps) => {\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 contributors = props.contributors || []\n const visibleContributors = contributors.slice(0, 5)\n const remainingContributors = contributors.slice(5).length\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 <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 || \"Lesson\"}</h1>\n <p className=\"max-w-xl text-sm text-slate-500\">{props.description || \"No description\"}</p>\n </div>\n\n <SplitButton\n href={props.href}\n noExport={props.trial}\n onCopyLinkClick={props.onCopyLinkClick}\n onExportDataClick={props.onExportDataClick}\n />\n </div>\n\n <StatsGroup data={[\n {\n title: props.trial ? \"# OF SUBMISSIONS\" : \"LESSON COMPLETION\",\n value: props.trial ? props.lessonsCompleted || 0 : numberOfLessons,\n },\n ]}/>\n\n {contributors.length > 0 && (\n <div className=\"flex\">\n {visibleContributors.map((u, i) => (\n <div\n key={i}\n className=\"-ml-2 flex h-8 w-8 shrink-0 items-center justify-center rounded-full border-2 border-white bg-mint-400/20 text-[10px] font-bold text-dark-blue-400 first:ml-0\"\n >\n {initialsFor(u.name)}\n </div>\n ))}\n {remainingContributors > 0 && (\n <div className=\"-ml-2 flex h-8 w-8 shrink-0 items-center justify-center rounded-full border-2 border-white bg-slate-200 text-[10px] font-bold text-slate-600\">\n +{compact(remainingContributors)}\n </div>\n )}\n </div>\n )}\n\n {!props.trial && (\n <div className=\"relative w-full max-w-xs\">\n <IconCategory2 size={16} stroke={2} className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-slate-400\" />\n <select\n value={props.classId}\n onChange={(e) => props.onClassChange(e.target.value)}\n className=\"w-full appearance-none rounded-lg border border-slate-200 bg-white py-2 pl-9 pr-4 text-sm text-dark-blue-400 focus:border-sky-blue-400 focus:outline-none\"\n >\n <option value=\"\">All classes</option>\n {props.classes.map((c) => <option key={c.classId} value={c.classId}>{c.name}</option>)}\n </select>\n </div>\n )}\n\n <div className=\"flex flex-col gap-3\">\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 === \"question\" && <QuestionStack loading={props.loading} items={props.questions} />}\n {tab === \"reflections\" && <ReflectionTable loading={props.loading} items={props.reflections} />}\n {tab === \"students\" && <Table loading={props.loading} items={props.students} />}\n </div>\n </div>\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 lessonId: string,\n name: string;\n description: string\n badge?: 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\">Badge</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.badge || \"—\"}</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\";\nimport {PathwayFilterPills} from \"../../components/navigation/PathwayFilterPills/PathwayFilterPills\";\n\n/**\n * LessonItem\n */\nexport type LessonItem = Item\n\n/**\n * LessonsProps\n */\nexport type LessonsProps = {\n loading: boolean\n lessons: LessonItem[]\n pathways: { pathwayId: string, title: string }[]\n selectedPathway: string\n\n onAutocompleteChange: (next: string) => void\n onPathwayChange: (pathwayId: 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 <PathwayFilterPills pathways={props.pathways} selected={props.selectedPathway} onChange={props.onPathwayChange} />\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 {IconPointer} from '@tabler/icons';\nimport {Link} from \"react-router-dom\";\n\n/**\n * AccessCodeProps\n */\nexport type AccessCodeProps = {\n value: string\n peopleLink: string\n onCopyCode: () => void;\n}\n\n/**\n * AccessCode\n * @param props\n * @constructor\n */\nexport function AccessCode(props: AccessCodeProps) {\n return (\n <div className=\"max-w-[460px]\">\n <h2 className=\"text-lg font-extrabold text-dark-blue-400\">Access code</h2>\n <p className=\"text-sm text-slate-500\">Grant access to join your organization</p>\n\n <div className=\"mt-4 rounded-xl border border-slate-200 bg-white p-6 shadow-sm\">\n <input\n value={props.value}\n readOnly\n className=\"w-full rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-dark-blue-400\"\n />\n <div className=\"mt-4 flex flex-wrap items-center justify-between gap-3\">\n <Link to={props.peopleLink} className=\"flex items-center gap-1.5 text-xs font-bold text-slate-500 no-underline hover:text-slate-700\">\n <IconPointer size={12} stroke={1.5} />\n See people in my organization\n </Link>\n <button\n type=\"button\"\n onClick={props.onCopyCode}\n className=\"rounded-lg bg-gradient-to-r from-gold-400 to-[#f5c300] px-4 py-2 text-xs font-bold text-dark-blue-400 shadow-[0_3px_12px_rgba(255,212,77,0.35)]\"\n >\n Copy code\n </button>\n </div>\n </div>\n </div>\n );\n}\n","import {IconArrowLeft} from \"@tabler/icons\";\nimport * as React from 'react';\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\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 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.displayName || \"Overview\"}</h1>\n <p className=\"max-w-xl text-sm text-slate-500\">{props.description || \"No description\"}</p>\n </div>\n\n <AccessCode value={props.accessCode} onCopyCode={props.onCopyAccessCode} peopleLink={props.peopleLink} />\n\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 </div>\n )\n}\n","import * as React from 'react'\nimport {IconPlaylistAdd, IconClipboardCopy} from '@tabler/icons';\n\n/**\n * SplitButtonProps\n */\nexport type SplitButtonProps = {\n withOrganizationLink?: boolean\n onAddUsersClick: () => void;\n onCopyOrganizationLinkClick: () => void;\n}\n\n/**\n * SplitButton. The original hid \"Copy organization link\" behind a dropdown menu, only shown when\n * withOrganizationLink is true - flattened into a second always-visible button in that same case,\n * matching the plain multi-button pattern already used everywhere else in this package rather than\n * introducing the only dropdown menu in the restyled UI.\n * @param props\n * @constructor\n */\nexport const SplitButton = (props: SplitButtonProps) => {\n return (\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={props.onAddUsersClick}\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 <IconPlaylistAdd size={13} stroke={2} />\n Add members\n </button>\n {props.withOrganizationLink && (\n <button\n type=\"button\"\n onClick={props.onCopyOrganizationLinkClick}\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 <IconClipboardCopy size={13} stroke={2} />\n Copy organization link\n </button>\n )}\n </div>\n );\n}\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 {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\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\nconst openDeleteModal = (person: Item, onDelete: (user: Item) => void) => openConfirmModal({\n title: `Remove \"${person.givenName && person.familyName ? `${person.givenName} ${person.familyName}` : person.email}\" from your organization?`,\n centered: true,\n children: (\n <Text size=\"sm\">\n Click confirm if you want to remove this person from your organization. This will NOT remove them from the Tech Platform.\n </Text>\n ),\n labels: { confirm: 'Remove', cancel: \"Cancel\" },\n confirmProps: { color: 'red' },\n onConfirm: () => onDelete(person),\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 <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 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_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 <div>Name</div>\n <div className=\"text-center\">Role</div>\n <div className=\"text-center\">Account Created?</div>\n <div className=\"text-center\"># of Classes</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 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_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 {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 ? \"admin\" : row.isGroupAdmin ? \"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 <option value=\"admin\">Admin</option>\n </select>\n </div>\n\n <div className=\"flex justify-center\">{row.hasAccount && <IconCheck size={16} stroke={3} className=\"text-mint-400\" />}</div>\n <div className=\"text-center text-xs font-bold text-dark-blue-400\">{row.numberOfClasses}</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, IconX, IconDownload, IconSearch} from \"@tabler/icons\";\nimport {ParseResult} from \"papaparse\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {\n Title,\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 {SplitButton} from \"./SplitButton\";\nimport {Table, Item} from \"./Table\";\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 * People\n * @param props\n * @constructor\n */\nexport const People = (props: PeopleProps) => {\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 <div className=\"flex flex-col gap-4\">\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 <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 </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\">People</h1>\n <p className=\"max-w-xl text-sm text-slate-500\">Manage members of your organization</p>\n </div>\n\n {!props.loading && (\n <SplitButton\n withOrganizationLink={props.withOrganizationLink}\n onAddUsersClick={() => setOpened(true)}\n onCopyOrganizationLinkClick={props.onCopyLinkClick}\n />\n )}\n </div>\n\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 <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 people in your organization\"\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\n loading={props.loading}\n items={props.users}\n onDelete={props.onDeleteUser}\n onRoleChange={props.onChangeUserRole}\n />\n </div>\n </>\n )\n}\n\nconst DropzoneButton = (props: PeopleProps & {close: () => void}) => {\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=\"relative mb-8\">\n <Dropzone\n loading={loading}\n openRef={openRef}\n onDrop={onDrop}\n radius=\"md\"\n className=\"border pb-12\"\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=\"#1EE2AF\" stroke={1.5} />\n </Dropzone.Accept>\n <Dropzone.Reject>\n <IconX size={50} color=\"#ef4444\" stroke={1.5} />\n </Dropzone.Reject>\n <Dropzone.Idle>\n <IconCloudUpload size={50} color=\"#232A3A\" stroke={1.5} />\n </Dropzone.Idle>\n </Group>\n\n <p className=\"mt-6 text-center text-lg font-bold text-dark-blue-400\">\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 </p>\n <p className=\"mt-2 text-center text-sm text-slate-400\">\n Drag'n'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 <button\n type=\"button\"\n onClick={() => openRef.current?.()}\n className=\"absolute bottom-[-20px] left-1/2 w-[250px] -translate-x-1/2 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}\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, IconRoute} from \"@tabler/icons\";\nimport {Emblem} from \"../../components/media/Emblem/Emblem\";\n\n/**\n * Item\n */\nexport interface Item {\n pathwayId: string,\n name: string;\n description: string\n imageURL?: string\n displayTags?: string[]\n numberOfBadges?: 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 * @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.pathwayId}\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 <Emblem imageURL={row.imageURL} alt={row.name} size=\"sm\" icon={IconRoute} accent=\"cyan\" />\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 {!!row.displayTags?.length && (\n <div className=\"mt-1.5 flex flex-wrap gap-1.5\">\n {row.displayTags.map((tag) => (\n <span key={tag} className=\"rounded-full bg-slate-100 px-2 py-0.5 text-[10px] font-bold text-slate-500\">{tag}</span>\n ))}\n </div>\n )}\n </div>\n {!!row.numberOfBadges && (\n <div className=\"w-24 shrink-0 text-right text-xs text-slate-500\">\n {row.numberOfBadges} badge{row.numberOfBadges === 1 ? \"\" : \"s\"}\n </div>\n )}\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 {Link} from \"react-router-dom\";\nimport {IconClipboardCopy, IconTableExport} from '@tabler/icons';\n\n/**\n * SplitButtonProps\n */\nexport type SplitButtonProps = {\n href: string\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n}\n\n/**\n * SplitButton\n * @param props\n * @constructor\n */\nexport const SplitButton = (props: SplitButtonProps) => {\n return (\n <div className=\"flex gap-2\">\n <Link\n to={props.href}\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 no-underline hover:bg-slate-50\"\n >\n Preview\n </Link>\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 <IconClipboardCopy size={13} stroke={2} />\n Copy 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 <IconTableExport size={13} stroke={2} />\n Export data (.csv)\n </button>\n </div>\n );\n}\n","import * as React from 'react';\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 return (\n <div className=\"flex flex-col gap-2\">\n {props.items.map((row) => (\n <div key={row.badgeName} className=\"flex items-center justify-between gap-4 py-1.5\">\n <Link to={row.href} className=\"text-sm font-bold text-dark-blue-400 no-underline hover:underline\">{row.badgeName}</Link>\n {row.completion >= 1 && <span className=\"shrink-0 rounded-full bg-mint-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400\">Complete</span>}\n {row.completion === 0 && !row.isStarted && <span className=\"shrink-0 rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500\">Not started</span>}\n {row.completion > 0 && row.completion < 1 && <span className=\"shrink-0 rounded-full bg-gold-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400\">{Math.round((row.completion + Number.EPSILON) * 100)}% Complete</span>}\n </div>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport {IconChevronDown} from '@tabler/icons';\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/**\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. `categories` is optional and defaults to [] - the original always required it, which meant\n * any caller (or story) that didn't supply one crashed here on `props.categories.map(...)` the\n * moment this table rendered.\n * @constructor\n * @param props\n */\nexport function Table(props: TableProps) {\n const [expanded, setExpanded] = React.useState<Record<string, boolean>>({})\n const categories = props.categories || []\n\n const preparedItems = React.useMemo(() => {\n return (props.items || []).map(item => ({\n ...item,\n ...item.categoryPoints,\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 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(\"isComplete\")} className=\"w-28 shrink-0 text-center hover:text-slate-600\">Status{indicator(\"isComplete\")}</button>\n {categories.map((category) => (\n <button key={category.categoryId} onClick={() => requestSort(category.categoryId)} className=\"w-24 shrink-0 text-center hover:text-slate-600\">{category.name}{indicator(category.categoryId)}</button>\n ))}\n <div className=\"w-4 shrink-0\" />\n </div>\n\n {sortedItems.map((row) => {\n const isOpen = !!expanded[row.userId]\n const initials = (row.name?.[0] || row.email[0] || \"?\").toUpperCase()\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-mint-400/20 text-xs font-bold text-dark-blue-400\">{initials}</div>\n }\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-28 shrink-0 text-center\">\n {row.isComplete\n ? <span className=\"rounded-full bg-mint-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400\">Complete</span>\n : <span className=\"rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500\">Incomplete</span>\n }\n </div>\n {categories.map((category) => (\n <div key={category.categoryId} className=\"w-24 shrink-0 text-center\">\n <span className=\"rounded-full bg-sky-blue-400/15 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400\">\n {row[category.categoryId] ?? 0} pts\n </span>\n </div>\n ))}\n <IconChevronDown size={15} stroke={2.3} className={`shrink-0 text-slate-400 transition-transform ${isOpen ? \"rotate-180\" : \"\"}`}/>\n </div>\n {isOpen && (\n <div className=\"border-t border-slate-100 px-4 py-3\">\n <BadgeStack items={row.badges}/>\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n","import * as React from 'react';\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 indicator = (key: string) => sortConfig.key !== key ? \"\" : (sortConfig.direction === \"desc\" ? \" ▾\" : \" ▴\");\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 <button onClick={() => requestSort(\"badgeName\")} className=\"flex-1 text-left hover:text-slate-600\">Badge Name{indicator(\"badgeName\")}</button>\n <button onClick={() => requestSort(\"percentageCompletion\")} className=\"w-36 shrink-0 text-right hover:text-slate-600\">Badge Completion{indicator(\"percentageCompletion\")}</button>\n </div>\n\n {sortedItems.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 text-sm font-bold text-dark-blue-400\">{row.badgeName}</div>\n <div className=\"w-36 shrink-0 text-right text-xs text-slate-500\">{Math.round((row.percentageCompletion + Number.EPSILON) * 100)}%</div>\n </Link>\n ))}\n </div>\n );\n}\n","import {IconArrowLeft, IconCategory2, IconRoute} from \"@tabler/icons\";\nimport {useState} from \"react\";\nimport * as React from 'react';\nimport {StatsGroup} from \"../../components/data/StatsGroup/StatsGroup\";\nimport {Emblem} from \"../../components/media/Emblem/Emblem\";\nimport {SplitButton} from \"./SplitButton\";\nimport {Table, Item} from \"./Table\";\nimport {Table as BadgeTable, Item as BadgeItem} from \"./BadgeTable\";\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 imageURL?: string\n displayTags?: string[]\n criteria?: Record<string, number>\n classes: PathwayClass[]\n badges: BadgeItem[]\n classId: string\n students: PathwayUserItem[]\n categories: { categoryId: string; name: string; maxPoints?: number }[]\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\nconst TABS = [\n {label: \"By Badge\", value: \"badges\"},\n {label: \"By student\", value: \"students\"},\n]\n\n/**\n * Pathway\n * @param props\n * @constructor\n */\nexport const Pathway = (props: PathwayProps) => {\n const [tab, setTab] = useState(\"badges\")\n\n const numberOfStudents = props.students.length\n const numberOfBadgesEarned = numberOfStudents > 0 ? props.students.filter(u => u.isComplete).length : 0\n\n const criteria = props.criteria || {}\n // Sourced from `categories` (not Object.keys(criteria)) so this only renders once readable\n // names have arrived - criteria lands on the first data resolve, category names a tick later.\n const criteriaCategories = (props.categories || []).filter((c) => criteria[c.categoryId] !== undefined)\n\n return (\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=\"flex items-start gap-4\">\n <Emblem imageURL={props.imageURL} alt={props.title} size=\"lg\" icon={IconRoute} accent=\"cyan\" />\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.title || \"Pathway\"}</h1>\n\n {!!props.displayTags?.length && (\n <div className=\"flex flex-wrap gap-1.5\">\n {props.displayTags.map((tag) => (\n <span key={tag} className=\"rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500\">{tag}</span>\n ))}\n </div>\n )}\n\n <p className=\"max-w-xl text-sm text-slate-500\">{props.description || \"No description\"}</p>\n\n {criteriaCategories.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-1.5 pt-0.5\">\n <span className=\"text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">Criteria</span>\n {criteriaCategories.map((c) => (\n <span key={c.categoryId} className=\"rounded-full bg-sky-blue-400/15 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400\">\n {c.name}: {criteria[c.categoryId]}+{c.maxPoints ? ` of ${c.maxPoints}` : \"\"} pts\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {!props.trial && (\n <SplitButton\n href={props.href}\n onCopyLinkClick={props.onCopyLinkClick}\n onExportDataClick={props.onExportDataClick}\n />\n )}\n </div>\n\n <StatsGroup data={[\n {\n title: props.trial ? \"BADGES SUBMITTED\" : \"PATHWAY COMPLETION\",\n value: props.trial ? 0 : numberOfBadgesEarned,\n },\n ]}/>\n\n {!props.trial && (\n <div className=\"relative w-full max-w-xs\">\n <IconCategory2 size={16} stroke={2} className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-slate-400\" />\n <select\n value={props.classId}\n onChange={(e) => props.onClassChange(e.target.value)}\n className=\"w-full appearance-none rounded-lg border border-slate-200 bg-white py-2 pl-9 pr-4 text-sm text-dark-blue-400 focus:border-sky-blue-400 focus:outline-none\"\n >\n <option value=\"\">All classes</option>\n {props.classes.map((c) => <option key={c.classId} value={c.classId}>{c.name}</option>)}\n </select>\n </div>\n )}\n\n <div className=\"flex flex-col gap-3\">\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 === \"badges\") && <BadgeTable loading={props.loading} items={props.badges} />}\n {(!props.trial && tab === \"students\") && <Table loading={props.loading} items={props.students} categories={props.categories} />}\n </div>\n </div>\n )\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":["React","Avatar","useState","Link","IconChevronRight","IconHome2","IconGauge","IconCategory2","IconRoute","IconAlbum","IconLambda","IconClipboard","IconBuilding","__spreadProps","__spreadValues","IconVideo","IconSwitchHorizontal","IconLogout","useStyles","createStyles","Modal","Center","Loader","Container","Group","Button","Title","Text","UnstyledButton","Card","IconBatteryEco","IconBooks","IconBackpack","ScrollArea","SimpleGrid","SplitButton","IconClipboardCopy","IconTableExport","Image","Stack","useMemo","Table","IconChevronDown","LessonStack","TABS","IconArrowLeft","LessonTable","IconSearch","ImpactTable","ReflectionTable","BadgeTable","StudentTable","openDeleteModal","openConfirmModal","IconCheck","IconTrash","Drawer","DropzoneButton","IconPlus","IconLink","IconDownload","form","useForm","papa","Dropzone","MIME_TYPES","IconCloudUpload","Divider","TextInput","Tooltip","ActionIcon","IconInfoCircle","IconPlaylistAdd","AnswerTable","showNotification","AnswerStack","Chart","QuestionStack","IconPointer","IconX","Badge","__objRest","Overlay","useUncontrolled","ThemeIcon","Checkbox","IconScribble","IconSchool","IconPodium","IconBriefcase","IconPresentation","IconNews","IconTools","Autocomplete","createEmotionCache","MantineProvider","NotificationsProvider","ModalsProvider","AppShell","IconBrandInstagram","IconBrandLinkedin","IconBrandFacebook","account","_a","BadgeStack","IconExternalLink","initials","FileStack","IconChevronLeft"],"mappings":"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"}
|