@local-civics/mgmt-ui 0.1.232 → 0.1.233
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 +1 -0
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- 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/media/Emblem/Emblem.tsx","../src/components/users/SwitchAccount/SwitchAccount.tsx","../src/components/data/StatsGroup/StatsGroup.tsx","../src/pages/Badge/SplitButton.tsx","../src/components/banners/PlaceholderBanner/PlaceholderBanner.tsx","../src/components/data/SortableHeader/SortableHeader.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/buildCategoryTree.ts","../src/pages/Pathway/CategoriesModal.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/components/modals/LeaveCommentModal/LeaveCommentModal.tsx","../src/pages/FileLocker/FileLocker.tsx","../src/pages/CommentCenter/CommentCenter.tsx","../src/pages/ValidationCenter/ValidationCenter.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 IconClipboardCheck,\n IconGauge,\n IconHome2,\n IconLambda,\n IconLogout,\n IconMessageCircle,\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: 'Comments', icon: IconMessageCircle, accent: \"mint\" },\n { label: 'Validation', icon: IconClipboardCheck, accent: \"gold\" },\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 * as React from 'react';\nimport \"external-svg-loader\";\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\" | \"xl\"\n icon: EmblemIcon\n accent: EmblemAccent\n}\n\nconst SIZE = {\n sm: {box: \"h-14 w-14\", rounded: \"rounded-xl\", icon: 24},\n lg: {box: \"h-16 w-16\", rounded: \"rounded-2xl\", icon: 28},\n xl: {box: \"h-28 w-28\", rounded: \"rounded-3xl\", icon: 48},\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) via the same external-svg-loader\n * mechanism the student side uses (hub-ui's BadgeEmblem), falling back to a tinted icon tile -\n * using the same icon/accent already assigned to that entity type elsewhere (Navbar's icon/accent\n * mapping) - if imageURL is absent, or if the icon hasn't loaded within LOAD_TIMEOUT_MS (the\n * loader has no error signal of its own; a failed/invalid fetch is caught and silently logged,\n * leaving the target permanently empty, so a timeout is the only way to detect that case). 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 */\nconst LOAD_TIMEOUT_MS = 3000\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 const [failed, setFailed] = React.useState(false)\n const ref = React.useRef<SVGSVGElement>(null)\n\n React.useEffect(() => {\n setFailed(false)\n if (!props.imageURL) {\n return\n }\n const el = ref.current\n const timer = setTimeout(() => setFailed(true), LOAD_TIMEOUT_MS)\n const onLoad = () => {\n setFailed(false)\n clearTimeout(timer)\n }\n el?.addEventListener(\"iconload\", onLoad)\n return () => {\n el?.removeEventListener(\"iconload\", onLoad)\n clearTimeout(timer)\n }\n }, [props.imageURL])\n\n if (props.imageURL && !failed) {\n return (\n <svg\n ref={ref}\n role=\"img\"\n aria-label={props.alt}\n data-cache=\"disabled\"\n data-src={props.imageURL}\n className={`${s.box} shrink-0 ${s.rounded} object-cover`}\n viewBox=\"0 0 32 32\"\n width=\"32\"\n height=\"32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n />\n )\n }\n\n return (\n <div role=\"img\" aria-label={props.alt} 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} aria-hidden=\"true\" />\n </div>\n )\n}\n","import {IconBackpack, IconBooks, IconBuilding} from \"@tabler/icons\";\nimport * as React from 'react';\nimport {Loader, Modal} from '@mantine/core';\nimport {Emblem, EmblemAccent, EmblemIcon} from \"../../media/Emblem/Emblem\";\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\nconst ROLE: Record<\"admin\" | \"educator\" | \"student\", {icon: EmblemIcon, accent: EmblemAccent, label: string}> = {\n admin: {icon: IconBuilding, accent: \"gold\", label: \"Admin\"},\n educator: {icon: IconBooks, accent: \"mint\", label: \"Educator\"},\n student: {icon: IconBackpack, accent: \"cyan\", label: \"Student\"},\n}\n\nconst PILL: Record<EmblemAccent, string> = {\n cyan: \"bg-sky-blue-400/15 text-dark-blue-400\",\n mint: \"bg-mint-400/15 text-dark-blue-400\",\n gold: \"bg-gold-400/15 text-dark-blue-400\",\n}\n\n// Mirrors the icon-rendering priority already used elsewhere in this file: admin wins outright,\n// then group-admin (educator), everything else falls to student - not a per-flag lookup.\nconst roleFor = (a: AccountItem) => a.isAdmin ? ROLE.admin : a.isGroupAdmin ? ROLE.educator : ROLE.student\n\n/**\n * SwitchAccount\n * @param props\n * @constructor\n */\nexport const SwitchAccount = (props: SwitchAccountProps) => {\n const options = props.accounts.map((a) => {\n const role = roleFor(a)\n return (\n <button\n type=\"button\"\n key={a.accountId}\n onClick={() => props.onClick && props.onClick(a.accountId)}\n className=\"flex flex-col items-center gap-3 rounded-xl border border-slate-200 bg-white p-6 text-center hover:bg-slate-50\"\n >\n <Emblem icon={role.icon} accent={role.accent} size=\"lg\" />\n <span className=\"text-base font-extrabold text-dark-blue-400\">{a.name}</span>\n <span className={`rounded-full px-2.5 py-1 text-[10px] font-bold ${PILL[role.accent]}`}>{role.label}</span>\n </button>\n )\n })\n\n return (\n <Modal\n centered\n fullScreen\n title={<span className=\"text-base font-extrabold text-dark-blue-400\">Change account</span>}\n opened={props.opened}\n onClose={() => props.onClose && props.onClose()}\n >\n <div className=\"relative\">\n {props.loading && (\n <div className=\"flex h-[400px] items-center justify-center\">\n <Loader />\n </div>\n )}\n {!props.loading && (\n <div className=\"grid grid-cols-1 gap-4 p-5 sm:grid-cols-2 md:grid-cols-3\">\n {options}\n </div>\n )}\n </div>\n </Modal>\n )\n}\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 {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 {IconCaretUp, IconCaretDown} from \"@tabler/icons\";\n\n/**\n * SortableHeaderProps\n */\nexport type SortableHeaderProps = {\n label: string\n sortKey: string\n // `key` is `string | number`, not just `string`, so this accepts useSortableData's\n // SortConfig<T> directly even when T has a string index signature (e.g. a row shape spread\n // with dynamic category-point fields) - keyof T resolves to `string | number` in that case.\n sortConfig: { key: string | number; direction: \"asc\" | \"desc\" | null }\n onSort: (key: string) => void\n align?: \"center\" | \"right\"\n className?: string\n}\n\n/**\n * A sortable column header button with a 3-glyph-state indicator: the active sort column shows a\n * single directional caret (accent-colored, stays visible on hover), every other sortable column\n * shows both carets stacked together to signal \"clickable, not currently sorted.\" The neutral\n * carets have no explicit color of their own - they inherit the button's text color via\n * currentColor, so they darken together with the label on hover.\n * @param props\n * @constructor\n */\nexport function SortableHeader(props: SortableHeaderProps) {\n const active = props.sortConfig.key === props.sortKey\n const direction = active ? props.sortConfig.direction : null\n const justify = props.align === \"right\" ? \"justify-end\" : props.align === \"center\" ? \"justify-center\" : \"\"\n\n return (\n <button\n type=\"button\"\n onClick={() => props.onSort(props.sortKey)}\n className={`inline-flex items-center gap-1 text-[10px] font-bold uppercase tracking-wide text-slate-500 hover:text-slate-700 ${justify} ${props.className || \"\"}`}\n >\n <span>{props.label}</span>\n {active ? (\n direction === \"desc\"\n ? <IconCaretDown size={12} stroke={2.5} className=\"shrink-0 text-sky-blue-400\" />\n : <IconCaretUp size={12} stroke={2.5} className=\"shrink-0 text-sky-blue-400\" />\n ) : (\n <span className=\"flex shrink-0 flex-col -space-y-[3px]\">\n <IconCaretUp size={10} stroke={2.5} />\n <IconCaretDown size={10} stroke={2.5} />\n </span>\n )}\n </button>\n )\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center gap-4 px-4\">\n <SortableHeader label=\"Student Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} className=\"flex-1\" />\n <SortableHeader label=\"Status\" sortKey=\"status\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" className=\"w-28 shrink-0\" />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex gap-4 px-4\">\n <SortableHeader label=\"Lesson Name\" sortKey=\"lessonName\" sortConfig={sortConfig} onSort={requestSort} className=\"flex-1\" />\n <SortableHeader label=\"Lesson Completion\" sortKey=\"percentageCompletion\" sortConfig={sortConfig} onSort={requestSort} align=\"right\" className=\"w-36 shrink-0\" />\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 weight?: number\n classes: BadgeClass[]\n lessons: LessonItem[]\n classId: string\n students: BadgeUserItem[]\n href: string\n trial?: boolean\n lessonsCompleted?: number\n pathwayId?: string\n pathwayTitle?: string\n\n onBackClick: () => void;\n onClassChange: (classId: string) => void;\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n onPathwayClick?: () => 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=\"xl\" 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 {!!props.pathwayTitle && (\n <div onClick={props.onPathwayClick} 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 Go to Pathway\n </div>\n )}\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 title: \"POINT VALUE\",\n value: props.weight || 0,\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\";\nimport {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\nimport {useSortableData} from \"../../utils/useSortableData\";\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 weight?: 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 const {items: sortedItems, requestSort, sortConfig} = useSortableData(props.items);\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 No badges to display.\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center gap-4 px-4\">\n {/* \"Badge\" starts flush-left, at the same x-position as the emblem below it, not\n offset to align with the name text. The cell itself still spans the full\n emblem+gap+name width (56+16+224=296px) so the fixed-width columns after it\n (Pathway/Lessons/Point Value) line up correctly with their rows either way. */}\n <div className=\"w-[296px] shrink-0\">\n <SortableHeader label=\"Badge\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} />\n </div>\n <div className=\"flex-1 text-[10px] font-bold uppercase tracking-wide text-slate-500\">Description</div>\n <SortableHeader className=\"w-40 shrink-0\" label=\"Pathway\" sortKey=\"pathway\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader className=\"w-28 shrink-0\" label=\"Lessons\" sortKey=\"numberOfLessons\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader className=\"w-24 shrink-0\" label=\"Point Value\" sortKey=\"weight\" sortConfig={sortConfig} onSort={requestSort} align=\"right\" />\n <div className=\"w-4 shrink-0\" />\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 <Emblem imageURL={row.imageURL} alt={row.name} size=\"sm\" icon={IconAlbum} accent=\"mint\" />\n <div title={row.name} className=\"line-clamp-2 w-56 shrink-0 text-sm font-bold text-dark-blue-400\">\n {row.name}\n </div>\n <div title={row.description} className=\"line-clamp-2 min-w-0 flex-1 text-xs leading-relaxed text-slate-500\">\n {row.description || \"—\"}\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 <div className=\"w-24 shrink-0 text-right text-xs text-slate-500\">\n {row.weight ? `${row.weight} pts` : \"—\"}\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div className=\"grid grid-cols-[2fr_1fr] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Student Name\" sortKey=\"studentName\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader label=\"Class Name\" sortKey=\"className\" sortConfig={sortConfig} onSort={requestSort} />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 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] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Student Name\" sortKey=\"studentName\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader label=\"Lesson Name\" sortKey=\"lessonName\" sortConfig={sortConfig} onSort={requestSort} />\n <div className=\"text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">Reflection</div>\n <SortableHeader label=\"Updated At\" sortKey=\"updatedAtDate\" sortConfig={sortConfig} onSort={requestSort} />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div className=\"grid grid-cols-[1fr_3fr] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Student Name\" sortKey=\"studentName\" sortConfig={sortConfig} onSort={requestSort} />\n <div className=\"text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 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] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Badge Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} />\n <div className=\"text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">Description</div>\n <SortableHeader label=\"Completion\" sortKey=\"percentageCompletion\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 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] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Lesson Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} />\n <div className=\"text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">Description</div>\n <SortableHeader label=\"Completion\" sortKey=\"percentageCompletion\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div className=\"grid grid-cols-[2.2fr_1.2fr_1fr_1.2fr_1fr_0.6fr] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Name\" sortKey=\"fullName\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader label=\"Role\" sortKey=\"isAdmin\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\n <SortableHeader label=\"Badges Earned\" sortKey=\"badgesEarned\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\n <SortableHeader label=\"Lessons Completed\" sortKey=\"lessonsCompleted\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\n <SortableHeader label=\"Account Created?\" sortKey=\"hasAccount\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\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 { showNotification } from '@mantine/notifications';\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 if (data.length > 0) {\n props.onCreateMembers && props.onCreateMembers(data)\n } else {\n showNotification({\n title: 'No new members found.',\n message: \"Every row in that file was either invalid or already on this class's roster.\",\n autoClose: 5000,\n })\n }\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 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] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Class Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} />\n <div className=\"text-[10px] font-bold uppercase tracking-wide text-slate-500\">Description</div>\n <SortableHeader label=\"# of Students\" sortKey=\"numberOfStudents\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\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 showNotification({\n title: 'Unable to copy code.',\n message: `Your browser blocked the copy - the community code is: ${accessCode}`,\n autoClose: false,\n });\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 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 <SortableHeader label=\"Student Name\" sortKey=\"studentName\" sortConfig={sortConfig} onSort={requestSort} className=\"w-40 shrink-0\" />\n <div className=\"flex-1\">Reflection</div>\n <SortableHeader label=\"Rating\" sortKey=\"rating\" sortConfig={sortConfig} onSort={requestSort} align=\"right\" className=\"w-20 shrink-0\" />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center gap-4 px-4\">\n <SortableHeader label=\"Student Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} className=\"flex-1\" />\n <SortableHeader label=\"Status\" sortKey=\"status\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" className=\"w-28 shrink-0\" />\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\";\nimport {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\nimport {useSortableData} from \"../../utils/useSortableData\";\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 const {items: sortedItems, requestSort, sortConfig} = useSortableData(props.items);\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 No lessons to display.\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center gap-4 px-4\">\n <SortableHeader className=\"flex-1\" label=\"Lesson\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader className=\"w-40 shrink-0\" label=\"Badge\" sortKey=\"badge\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader className=\"w-40 shrink-0\" label=\"Pathway\" sortKey=\"pathway\" sortConfig={sortConfig} onSort={requestSort} />\n <div className=\"w-4 shrink-0\" />\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\">\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\";\nimport {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\nimport {useSortableData} from \"../../utils/useSortableData\";\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 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 roleRank: item.isAdmin ? 2 : item.isGroupAdmin ? 1 : 0,\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 <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] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Name\" sortKey=\"fullName\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader label=\"Role\" sortKey=\"roleRank\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\n <SortableHeader label=\"Account Created?\" sortKey=\"hasAccount\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\n <SortableHeader label=\"# of Classes\" sortKey=\"numberOfClasses\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\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_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 ? \"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 { showNotification } from '@mantine/notifications';\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 if (data.length > 0) {\n props.onCreateUsers && props.onCreateUsers(data)\n } else {\n showNotification({\n title: 'No new members found.',\n message: \"Every row in that file was either invalid or already on this organization's roster.\",\n autoClose: 5000,\n })\n }\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 showNotification({\n title: \"Unable to copy code.\",\n message: `Your browser blocked the copy - the community code is: ${code}`,\n autoClose: false,\n });\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center gap-4 px-4\">\n <SortableHeader label=\"Student Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} className=\"flex-1\" />\n <SortableHeader label=\"Status\" sortKey=\"isComplete\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" className=\"w-28 shrink-0\" />\n {categories.map((category) => (\n <SortableHeader key={category.categoryId} label={category.name} sortKey={category.categoryId} sortConfig={sortConfig} onSort={requestSort} align=\"center\" className=\"w-24 shrink-0\" />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 categories: string[]\n weight: number\n overflowCategories?: string[]\n}\n\n/**\n * Category\n */\nexport type Category = {\n categoryId: string\n name: string\n maxPoints?: number\n}\n\n/**\n * TableProps\n */\nexport type TableProps = {\n loading: boolean\n badges: Item[]\n categories: Category[]\n activeCategoryId?: string\n activeCategoryLabel?: string\n}\n\nconst OTHER_FILTER = \"__other__\";\n\n/**\n * Table. Badges are matched to the pathway's criteria categories via exact-inclusion on\n * badge.categories (not the prefix-match used elsewhere for badge->pathway matching), following\n * the same grouping pattern already shipped in hub-ui's PathwayTranscript. Rather than always\n * stacking every category's badges into its own always-visible section - which disconnected the\n * single sortable header row from the badges grouped below it - the same mapping now drives a row\n * of filter pills above one continuous, sortable table. Badges matching none of the criteria\n * categories stay reachable via the \"Other\" pill rather than disappearing.\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n const {items: sortedBadges, requestSort, sortConfig} = useSortableData(props.badges);\n const [categoryFilter, setCategoryFilter] = React.useState(\"\");\n\n // Lets a parent (the Categories popup, via Pathway.tsx) drive this table's own filter pill\n // selection without lifting the pill state itself out of this component.\n React.useEffect(() => {\n if (props.activeCategoryId !== undefined) {\n setCategoryFilter(props.activeCategoryId);\n }\n }, [props.activeCategoryId]);\n\n if (props.badges.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 groupedIds = new Set(props.categories.map((c) => c.categoryId));\n const other = sortedBadges.filter((b) => !b.categories?.some((id) => groupedIds.has(id)));\n\n // The Categories popup can select any node in the full tree, not just the criteria-level\n // categories that normally get their own pill - when that happens, add a pill for it too, so\n // the active filter is always visibly confirmed rather than silently applied with nothing\n // highlighted.\n const extraCategory =\n categoryFilter && categoryFilter !== OTHER_FILTER && !groupedIds.has(categoryFilter)\n ? { categoryId: categoryFilter, name: props.activeCategoryLabel || categoryFilter }\n : undefined;\n\n const visibleBadges = !categoryFilter\n ? sortedBadges\n : categoryFilter === OTHER_FILTER\n ? other\n : sortedBadges.filter((b) => b.categories?.includes(categoryFilter));\n\n return (\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex flex-wrap gap-2\">\n <CategoryPill label=\"All\" active={!categoryFilter} onClick={() => setCategoryFilter(\"\")} />\n {props.categories.map((category) => (\n <CategoryPill\n key={category.categoryId}\n label={category.name}\n active={categoryFilter === category.categoryId}\n onClick={() => setCategoryFilter(category.categoryId)}\n />\n ))}\n {extraCategory && (\n <CategoryPill label={extraCategory.name} active onClick={() => setCategoryFilter(extraCategory.categoryId)} />\n )}\n {other.length > 0 && (\n <CategoryPill label=\"Other\" active={categoryFilter === OTHER_FILTER} onClick={() => setCategoryFilter(OTHER_FILTER)} />\n )}\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex gap-4 px-4\">\n <SortableHeader label=\"Badge Name\" sortKey=\"badgeName\" sortConfig={sortConfig} onSort={requestSort} className=\"flex-1\" />\n <SortableHeader label=\"Point Value\" sortKey=\"weight\" sortConfig={sortConfig} onSort={requestSort} align=\"right\" className=\"w-24 shrink-0\" />\n <SortableHeader label=\"Badge Completion\" sortKey=\"percentageCompletion\" sortConfig={sortConfig} onSort={requestSort} align=\"right\" className=\"w-36 shrink-0\" />\n </div>\n\n {visibleBadges.length === 0 && (\n <div className=\"rounded-xl border border-dashed border-slate-200 px-4 py-3 text-xs text-slate-400\">\n {categoryFilter ? \"No badges in this category yet.\" : \"No badges yet.\"}\n </div>\n )}\n\n {visibleBadges.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-24 shrink-0 text-right text-xs font-black text-mint-400\">{row.weight} pts</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 </div>\n );\n}\n\nconst CategoryPill = (props: { label: string, active: boolean, onClick: () => void }) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n className={`rounded-full border px-3.5 py-1.5 text-xs font-bold ${\n props.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 {props.label}\n </button>\n)\n","/**\n * PathwayCategory\n */\nexport type PathwayCategory = {\n categoryId: string\n name: string\n description?: string\n parentCategoryId?: string\n maxPoints?: number\n}\n\n/**\n * CategoryTreeNode\n */\nexport type CategoryTreeNode = PathwayCategory & { children: CategoryTreeNode[] }\n\n/**\n * buildCategoryTree. Converts a flat parent-pointer list into an N-level tree. A category is a\n * root when its parentCategoryId is falsy, self-referential, or points at an id absent from this\n * list (orphaned reference) - it is never dropped. Cyclical references are defused via\n * ancestry-tracking during recursion, and no category is ever attached twice.\n * @param categories\n */\nexport function buildCategoryTree(categories: PathwayCategory[]): CategoryTreeNode[] {\n const byId = new Map<string, PathwayCategory>();\n categories.forEach((c) => byId.set(c.categoryId, c));\n\n const childrenByParent = new Map<string, PathwayCategory[]>();\n categories.forEach((c) => {\n const parentId = c.parentCategoryId;\n const hasValidParent = !!parentId && parentId !== c.categoryId && byId.has(parentId);\n if (!hasValidParent) return;\n const siblings = childrenByParent.get(parentId!) || [];\n siblings.push(c);\n childrenByParent.set(parentId!, siblings);\n });\n\n const attached = new Set<string>();\n\n const attach = (category: PathwayCategory, ancestry: Set<string>): CategoryTreeNode => {\n attached.add(category.categoryId);\n const childAncestry = new Set(ancestry).add(category.categoryId);\n const children = (childrenByParent.get(category.categoryId) || [])\n .filter((child) => !childAncestry.has(child.categoryId))\n .map((child) => attach(child, childAncestry));\n return { ...category, children };\n };\n\n const roots = categories.filter((c) => {\n const parentId = c.parentCategoryId;\n return !parentId || parentId === c.categoryId || !byId.has(parentId);\n });\n\n const tree = roots.map((root) => attach(root, new Set()));\n\n categories.forEach((c) => {\n if (!attached.has(c.categoryId)) tree.push(attach(c, new Set()));\n });\n\n return tree;\n}\n","import * as React from 'react';\nimport { Modal } from \"@mantine/core\";\nimport { buildCategoryTree, CategoryTreeNode, PathwayCategory } from \"./buildCategoryTree\";\n\n/**\n * CategoriesModalProps\n */\nexport type CategoriesModalProps = {\n opened: boolean\n onClose: () => void\n categories: PathwayCategory[]\n criteria: Record<string, number>\n onCategoryClick?: (categoryId: string) => void\n}\n\n/**\n * CategoriesModal. Structural rubric view of a pathway's full category hierarchy - names,\n * descriptions where populated, minimum-required thresholds (from criteria), and point caps\n * (maxPoints), nested to reflect real parent/child relationships. No badge lists, no earned-points\n * computation - a reference view of how the pathway is configured, not a progress tracker.\n * @param props\n * @constructor\n */\nexport function CategoriesModal(props: CategoriesModalProps) {\n const tree = React.useMemo(() => buildCategoryTree(props.categories || []), [props.categories]);\n\n return (\n <Modal\n opened={props.opened}\n onClose={props.onClose}\n title={<span className=\"text-base font-extrabold text-dark-blue-400\">Pathway Categories</span>}\n size=\"lg\"\n centered\n >\n <div className=\"flex max-h-[70vh] flex-col gap-2 overflow-y-auto pr-1\">\n {tree.length === 0 && <p className=\"text-sm text-slate-400\">No categories to display.</p>}\n {tree.map((node) => (\n <CategoryNode key={node.categoryId} node={node} criteria={props.criteria} depth={0} onCategoryClick={props.onCategoryClick} />\n ))}\n </div>\n </Modal>\n );\n}\n\nconst CategoryNode = (props: { node: CategoryTreeNode, criteria: Record<string, number>, depth: number, onCategoryClick?: (categoryId: string) => void }) => {\n const hasChildren = props.node.children.length > 0;\n const required = props.criteria[props.node.categoryId];\n const clickable = !!props.onCategoryClick;\n // Hover-only feedback (signals \"clickable\", not \"currently selected\" - the filter pill already\n // covers that once a category is picked). Leaf nodes already had this; parent nodes previously\n // had a static background with no hover state at all, so hovering over one gave no feedback.\n const base = hasChildren ? \"rounded-lg border border-slate-100 p-3\" : \"rounded-lg px-3 py-2\";\n const style = hasChildren ? \"bg-slate-50/60 hover:bg-slate-100\" : \"hover:bg-slate-50\";\n\n return (\n <div\n onClick={clickable ? (e) => { e.stopPropagation(); props.onCategoryClick!(props.node.categoryId); } : undefined}\n className={`${base} ${style} ${clickable ? \"cursor-pointer\" : \"\"}`}\n >\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <span className={props.depth === 0 ? \"text-sm font-extrabold text-dark-blue-400\" : \"text-xs font-bold text-dark-blue-400\"}>\n {props.node.name}\n </span>\n <div className=\"flex flex-wrap items-center gap-1.5\">\n {required !== undefined && (\n <span className=\"rounded-full bg-sky-blue-400/15 px-2 py-0.5 text-[10px] font-bold text-dark-blue-400\">\n min. {required} pts\n </span>\n )}\n {!!props.node.maxPoints && (\n <span className=\"rounded-full bg-gold-400/15 px-2 py-0.5 text-[10px] font-bold text-dark-blue-400\">\n cap {props.node.maxPoints} pts\n </span>\n )}\n </div>\n </div>\n\n {!!props.node.description?.trim() && (\n <p className=\"mt-0.5 text-xs text-slate-500\">{props.node.description}</p>\n )}\n\n {hasChildren && (\n <div className=\"mt-3 flex flex-col gap-2 border-l-2 border-slate-200 pl-4\">\n {props.node.children.map((child) => (\n <CategoryNode key={child.categoryId} node={child} criteria={props.criteria} depth={props.depth + 1} onCategoryClick={props.onCategoryClick} />\n ))}\n </div>\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\";\nimport {CategoriesModal} from \"./CategoriesModal\";\nimport {PathwayCategory} from \"./buildCategoryTree\";\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 allCategories?: PathwayCategory[]\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 const [categoriesOpen, setCategoriesOpen] = useState(false)\n const [selectedCategoryId, setSelectedCategoryId] = useState<string | undefined>(undefined)\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 // The pathway's own root category (no parentCategoryId - only known via `allCategories`,\n // since the narrower `categories` doesn't carry it) is redundant as a badge-grouping section:\n // every badge tagged with it is also tagged with a more specific descendant category, so its\n // group would just repeat every badge already shown elsewhere. Excluded from badge groupings\n // only - the criteria pills below still show the root's own overall threshold.\n const rootCategoryIds = new Set(\n (props.allCategories || []).filter((c) => !c.parentCategoryId).map((c) => c.categoryId)\n )\n const badgeGroupCategories = criteriaCategories.filter((c) => !rootCategoryIds.has(c.categoryId))\n\n // Readable name for a Categories-popup selection that isn't itself one of badgeGroupCategories\n // (e.g. a deeper, non-criteria node in the tree) - BadgeTable only knows the criteria-scoped\n // list, so it can't label a pill for anything outside it on its own.\n const selectedCategoryName = selectedCategoryId\n ? (props.allCategories || []).find((c) => c.categoryId === selectedCategoryId)?.name\n : 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=\"xl\" 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 || !!props.allCategories?.length) && (\n <div className=\"flex flex-wrap items-center gap-1.5 pt-0.5\">\n {criteriaCategories.length > 0 && (\n <>\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 </>\n )}\n {!!props.allCategories?.length && (\n <button\n onClick={() => setCategoriesOpen(true)}\n className=\"flex items-center gap-1.5 rounded-full border border-slate-200 bg-white px-2.5 py-1 text-[10px] font-bold text-dark-blue-400 hover:bg-slate-50\"\n >\n <IconCategory2 size={12} stroke={2} /> Categories\n </button>\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} badges={props.badges} categories={badgeGroupCategories} activeCategoryId={selectedCategoryId} activeCategoryLabel={selectedCategoryName} />}\n {(!props.trial && tab === \"students\") && <Table loading={props.loading} items={props.students} categories={props.categories} />}\n </div>\n\n <CategoriesModal\n opened={categoriesOpen}\n onClose={() => setCategoriesOpen(false)}\n categories={props.allCategories || []}\n criteria={criteria}\n onCategoryClick={(id) => {\n setSelectedCategoryId(id)\n setTab(\"badges\")\n setCategoriesOpen(false)\n }}\n />\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} from \"@tabler/icons\";\n\nexport interface Item {\n link: string\n badgeName: string\n badgeId?: string\n lessonName: string\n lessonId?: string\n pathwayName?: string\n pathwayId?: string\n question: string\n}\n\nexport type StackProps = {\n items: Item[]\n hideBadge?: boolean\n hideLesson?: boolean\n hidePathway?: boolean\n onBadgeClick?: (badgeId: string) => void\n onLessonClick?: (lessonId: string) => void\n onPathwayClick?: (pathwayId: string) => void\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, and in what order, follows the real Pathway -> Badge ->\n * Lesson -> Question hierarchy left to right - whichever level the calling tab has already fixed\n * (shown once at that tab's group-card level instead - see FileLocker.tsx's per-tab hide* flags)\n * simply drops out of the sequence, it never reorders what's left. 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, onBadgeClick, onLessonClick, onPathwayClick} = props\n if (!items.length) return null;\n\n // Columns follow the real Pathway -> Badge -> Lesson -> Question hierarchy, left to right,\n // with whichever levels the calling tab has already fixed (hidden here) simply dropped out of\n // the sequence rather than reordered - Question is the leaf, so it always sits immediately\n // before the action column, not first.\n const columns = [\n !hidePathway && \"minmax(0,1.3fr)\",\n !hideBadge && \"minmax(0,1.3fr)\",\n !hideLesson && \"minmax(0,1.3fr)\",\n \"minmax(0,2fr)\",\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 {!hidePathway && <div className={headerCell}>Pathway</div>}\n {!hideBadge && <div className={headerCell}>Badge</div>}\n {!hideLesson && <div className={headerCell}>Lesson</div>}\n <div className={headerCell}>Question</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 {!hidePathway && (\n row.pathwayId && onPathwayClick ? (\n <button type=\"button\" onClick={() => onPathwayClick(row.pathwayId as string)} className={`${dataCell} ${rowBorder} truncate text-left text-[11px] font-semibold text-sky-blue-400 hover:underline`}>\n {row.pathwayName || \"—\"}\n </button>\n ) : (\n <div className={`${dataCell} ${rowBorder} truncate text-[11px] text-slate-500`}>{row.pathwayName || \"—\"}</div>\n )\n )}\n {!hideBadge && (\n row.badgeId && onBadgeClick ? (\n <button type=\"button\" onClick={() => onBadgeClick(row.badgeId as string)} className={`${dataCell} ${rowBorder} truncate text-left text-[11px] font-semibold text-sky-blue-400 hover:underline`}>\n {row.badgeName}\n </button>\n ) : (\n <div className={`${dataCell} ${rowBorder} truncate text-[11px] text-slate-500`}>{row.badgeName}</div>\n )\n )}\n {!hideLesson && (\n row.lessonId && onLessonClick ? (\n <button type=\"button\" onClick={() => onLessonClick(row.lessonId as string)} className={`${dataCell} ${rowBorder} truncate text-left text-[11px] font-semibold text-sky-blue-400 hover:underline`}>\n {row.lessonName}\n </button>\n ) : (\n <div className={`${dataCell} ${rowBorder} truncate text-[11px] text-slate-500`}>{row.lessonName}</div>\n )\n )}\n <div className={`${dataCell} ${rowBorder} text-xs font-semibold text-dark-blue-400`}>{row.question}</div>\n <div className={`${dataCell} ${rowBorder} flex shrink-0 gap-2`}>\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 // 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 lessonId?: 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 pathwayId?: 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 // Opens the Leave Comment modal (see LeaveCommentModal) prepopulated for this student and the\n // badge/lesson their submissions here belong to. Whichever tab/group rendered this Table has\n // already narrowed `item.submissions` down to the relevant badge/lesson (see\n // useFilteredStudents' byBadge/byLesson), so the caller can read the badge/lesson straight off\n // the clicked item - no extra context parameter needed here.\n onComment?: (item: Item) => void\n onBadgeClick?: (badgeId: string) => void\n onLessonClick?: (lessonId: string) => void\n onPathwayClick?: (pathwayId: string) => 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 const showActions = !!props.onReview || !!props.onComment\n const actionsWidthClass = props.onReview && props.onComment ? \"w-64\" : \"w-36\"\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 return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center gap-4 px-4\">\n <SortableHeader label=\"Student Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} className=\"flex-1\" />\n <SortableHeader label=\"Files\" sortKey=\"submissionCount\" sortConfig={sortConfig} onSort={requestSort} className=\"w-16 shrink-0\" />\n {showActions && <div className={`${actionsWidthClass} 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 {showActions && (\n <div className={`flex ${actionsWidthClass} shrink-0 gap-2`}>\n {props.onReview && (\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 )}\n {props.onComment && (\n <button\n onClick={(e) => { e.stopPropagation(); props.onComment!(row) }}\n className=\"rounded-lg border border-slate-200 bg-white px-3 py-1.5 text-[11px] font-extrabold text-dark-blue-400 hover:bg-slate-50\"\n >\n Comment\n </button>\n )}\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\n items={row.submissions}\n hideBadge={props.hideBadge}\n hideLesson={props.hideLesson}\n hidePathway={props.hidePathway}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\n />\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 onBadgeClick?: (badgeId: string) => void\n onLessonClick?: (lessonId: string) => void\n onPathwayClick?: (pathwayId: string) => 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\n items={student.submissions}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\n />\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 { Modal, Checkbox } from \"@mantine/core\";\n\n/**\n * LeaveCommentStudentOption\n */\nexport type LeaveCommentStudentOption = { userId: string, name: string }\n\n/**\n * LeaveCommentBadgeOption\n */\nexport type LeaveCommentBadgeOption = { badgeId: string, displayName: string }\n\n/**\n * LeaveCommentLessonOption\n */\nexport type LeaveCommentLessonOption = { lessonId: string, displayName: string }\n\n/**\n * LeaveCommentPayload\n */\nexport type LeaveCommentPayload = {\n userId: string\n commentText: string\n requireValidation: boolean\n badgeId?: string\n lessonId?: string\n}\n\n/**\n * LeaveCommentModalProps\n */\nexport type LeaveCommentModalProps = {\n opened: boolean\n onClose: () => void\n onSubmit: (comment: LeaveCommentPayload) => void\n students: LeaveCommentStudentOption[]\n badges: LeaveCommentBadgeOption[]\n lessons: LeaveCommentLessonOption[]\n // Prepopulation - e.g. from the File Locker's \"Comment\" button, which already knows exactly\n // which student and badge/lesson the file belongs to. The form stays fully editable either way.\n initialUserId?: string\n initialBadgeId?: string\n initialLessonId?: string\n // Hides the student picker entirely and fixes the recipient - used when the comment can only\n // ever be about one student (e.g. opened from that student's own File Locker row).\n hideStudentPicker?: boolean\n}\n\ntype Target = \"none\" | \"badge\" | \"lesson\"\n\nconst TARGETS: { value: Target, label: string }[] = [\n { value: \"none\", label: \"General\" },\n { value: \"badge\", label: \"Badge\" },\n { value: \"lesson\", label: \"Lesson\" },\n]\n\nconst inputClass = \"w-full 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/**\n * LeaveCommentModal. Shared by the Comment Center's \"Leave a comment\" action and the File Locker's\n * per-row \"Comment\" button (see FileLocker.tsx) - opened from File Locker it arrives prepopulated\n * with the student and badge/lesson a specific file belongs to; opened from the Comment Center it\n * starts blank. A comment that requires validation must be tied to a badge (mirrors study's\n * NewComment validation), so the checkbox only appears once a badge target is selected. Only calls\n * onSubmit with the assembled payload - the caller owns the actual API call, closing the modal, and\n * any refresh, exactly like every other page in this package.\n * @param props\n * @constructor\n */\nexport function LeaveCommentModal(props: LeaveCommentModalProps) {\n const [userId, setUserId] = React.useState(\"\")\n const [target, setTarget] = React.useState<Target>(\"none\")\n const [badgeId, setBadgeId] = React.useState(\"\")\n const [lessonId, setLessonId] = React.useState(\"\")\n const [commentText, setCommentText] = React.useState(\"\")\n const [requireValidation, setRequireValidation] = React.useState(false)\n\n // Reset (and prepopulate) every time the modal opens, rather than once on mount - the same\n // modal instance is reused across every row's \"Comment\" button, so each open needs a clean\n // slate seeded from that row's own context.\n React.useEffect(() => {\n if (!props.opened) return\n setUserId(props.initialUserId || \"\")\n setBadgeId(props.initialBadgeId || \"\")\n setLessonId(props.initialLessonId || \"\")\n setTarget(props.initialBadgeId ? \"badge\" : props.initialLessonId ? \"lesson\" : \"none\")\n setCommentText(\"\")\n setRequireValidation(false)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.opened, props.initialUserId, props.initialBadgeId, props.initialLessonId])\n\n const canSubmit = !!userId\n && !!commentText.trim()\n && (target !== \"badge\" || !!badgeId)\n && (target !== \"lesson\" || !!lessonId)\n\n const onSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (!canSubmit) return\n props.onSubmit({\n userId,\n commentText: commentText.trim(),\n requireValidation: target === \"badge\" && requireValidation,\n badgeId: target === \"badge\" ? badgeId : undefined,\n lessonId: target === \"lesson\" ? lessonId : undefined,\n })\n }\n\n return (\n <Modal\n opened={props.opened}\n onClose={props.onClose}\n title={<span className=\"text-base font-extrabold text-dark-blue-400\">Leave a Comment</span>}\n size=\"md\"\n centered\n >\n <form onSubmit={onSubmit} className=\"flex flex-col gap-3.5\">\n {!props.hideStudentPicker && (\n <div>\n <label className=\"mb-1 block text-xs font-bold text-slate-500\">Student</label>\n <select value={userId} onChange={(e) => setUserId(e.target.value)} className={inputClass}>\n <option value=\"\">Select a student</option>\n {props.students.map((s) => <option key={s.userId} value={s.userId}>{s.name}</option>)}\n </select>\n </div>\n )}\n\n <div>\n <label className=\"mb-1 block text-xs font-bold text-slate-500\">Leave this comment on</label>\n <div className=\"flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1\">\n {TARGETS.map((t) => (\n <button\n key={t.value}\n type=\"button\"\n onClick={() => setTarget(t.value)}\n className={`rounded-lg px-4 py-2 text-xs font-bold ${target === 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 </div>\n\n {target === \"badge\" && (\n <div>\n <label className=\"mb-1 block text-xs font-bold text-slate-500\">Badge</label>\n <select value={badgeId} onChange={(e) => setBadgeId(e.target.value)} className={inputClass}>\n <option value=\"\">Select a badge</option>\n {props.badges.map((b) => <option key={b.badgeId} value={b.badgeId}>{b.displayName}</option>)}\n </select>\n </div>\n )}\n\n {target === \"lesson\" && (\n <div>\n <label className=\"mb-1 block text-xs font-bold text-slate-500\">Lesson</label>\n <select value={lessonId} onChange={(e) => setLessonId(e.target.value)} className={inputClass}>\n <option value=\"\">Select a lesson</option>\n {props.lessons.map((l) => <option key={l.lessonId} value={l.lessonId}>{l.displayName}</option>)}\n </select>\n </div>\n )}\n\n <div>\n <label className=\"mb-1 block text-xs font-bold text-slate-500\">Comment</label>\n <textarea\n value={commentText}\n onChange={(e) => setCommentText(e.target.value)}\n placeholder=\"Leave a comment...\"\n rows={4}\n className={`${inputClass} resize-none`}\n />\n </div>\n\n {target === \"badge\" && !!badgeId && (\n <Checkbox\n checked={requireValidation}\n onChange={(e) => setRequireValidation(e.currentTarget.checked)}\n label=\"Requires validation - unsubmits this badge until the comment is resolved\"\n />\n )}\n\n <button\n type=\"submit\"\n disabled={!canSubmit}\n className=\"mt-1 rounded-lg bg-dark-blue-400 px-4 py-2.5 text-xs font-bold text-white disabled:opacity-40\"\n >\n Leave Comment\n </button>\n </form>\n </Modal>\n );\n}\n","import * as React from 'react';\nimport {IconChevronDown, IconChevronLeft, IconSearch} 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\"\nimport {LeaveCommentModal, LeaveCommentPayload} from \"../../components/modals/LeaveCommentModal/LeaveCommentModal\";\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 onBadgeClick?: (badgeId: string) => void;\n onLessonClick?: (lessonId: string) => void;\n onPathwayClick?: (pathwayId: string) => void;\n // Renders a \"Comment\" button beside every \"Review Submission\" button. Clicking it opens\n // FileLocker's own LeaveCommentModal, prepopulated for the clicked student and the badge/lesson\n // their (already tab/group-scoped) submissions belong to - onComment only fires once the\n // teacher actually submits that modal, with the assembled payload; the caller owns the API call.\n onComment?: (comment: LeaveCommentPayload) => 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\n// The search box now cross-matches every tab against student name, pathway, badge, and lesson\n// name at once - not just whichever field happens to be that tab's own primary grouping key - so\n// one placeholder describes all 4 tabs' behavior identically.\nconst SEARCH_PLACEHOLDER = \"Search by student, pathway, badge, or lesson\"\n\nconst countFiles = (students: Item[]) => students.reduce((acc, s) => acc + (s.submissions?.length || 0), 0)\n\n// Cross-field match used by every tab: a student matches if their own name matches, or if any of\n// their (already group-scoped) submissions' badge/lesson/pathway name matches. Used two ways: to\n// decide whether a whole group (pathway/badge/lesson) should show at all, and to narrow which\n// students appear inside a group that only matches because of one of its members, not its own name.\nconst matchesSearch = (student: Item, term: string): boolean => {\n if (!term) return true\n if (student.name.toLowerCase().includes(term)) return true\n return (student.submissions || []).some((sub) =>\n sub.badgeName?.toLowerCase().includes(term) ||\n sub.lessonName?.toLowerCase().includes(term) ||\n sub.pathwayName?.toLowerCase().includes(term)\n )\n}\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, onTitleClick?: () => void, 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 {props.onTitleClick ? (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); props.onTitleClick!() }}\n className=\"text-left text-sm font-extrabold text-sky-blue-400 hover:underline\"\n >\n {props.title}\n </button>\n ) : (\n <div className=\"text-sm font-extrabold text-dark-blue-400\">{props.title}</div>\n )}\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 search: string\n onReview: (item: Item, list: Item[], context?: string) => void\n onComment?: (item: Item) => void\n onBadgeClick?: (badgeId: string) => void\n onLessonClick?: (lessonId: string) => void\n onPathwayClick?: (pathwayId: 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. Search cross-matches: a pathway whose own title matches shows\n * every one of its students unfiltered (today's behavior); a pathway that only matches because one\n * of its students/submissions does shows just that narrowed subset instead; a pathway matching\n * neither its own name nor any member is hidden entirely once a search term is active.\n */\nconst PathwayGroups = (props: GroupsProps & {pathways: NonNullable<FileLockerProps[\"pathways\"]>, badges: NonNullable<FileLockerProps[\"badges\"]>}) => {\n const {byPathway} = useFilteredStudents(props.students)\n const term = props.search.trim().toLowerCase()\n const groups = props.pathways\n .map((p) => {\n const base = byPathway(p.pathwayId, props.badges)\n const ownNameMatches = !term || p.title.toLowerCase().includes(term)\n const filtered = ownNameMatches ? base : base.filter((s) => matchesSearch(s, term))\n return {pathway: p, filtered}\n })\n .filter((g) => !term || g.filtered.length > 0)\n\n if (term && groups.length === 0) {\n return <p className=\"text-sm text-slate-400\">No matching entries.</p>\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n {groups.map(({pathway: p, filtered}) => (\n <GroupCard\n key={p.pathwayId}\n title={p.title}\n description={p.description}\n count={countFiles(filtered)}\n onTitleClick={props.onPathwayClick ? () => props.onPathwayClick!(p.pathwayId) : undefined}\n >\n <Table\n loading={props.loading}\n items={filtered}\n hidePathway\n onReview={(item) => props.onReview(item, filtered, p.title)}\n onComment={props.onComment}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n />\n </GroupCard>\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. Same cross-match/\n * narrow/hide rule as PathwayGroups, keyed on the badge's own name instead.\n */\nconst BadgeGroups = (props: GroupsProps & {badges: NonNullable<FileLockerProps[\"badges\"]>, pathwayNameForBadge: Record<string, string>}) => {\n const {byBadge} = useFilteredStudents(props.students)\n const term = props.search.trim().toLowerCase()\n const groups = props.badges\n .map((b) => {\n const base = byBadge(b.badgeId)\n const ownNameMatches = !term || b.displayName.toLowerCase().includes(term)\n const filtered = ownNameMatches ? base : base.filter((s) => matchesSearch(s, term))\n return {badge: b, filtered}\n })\n .filter((g) => !term || g.filtered.length > 0)\n\n if (term && groups.length === 0) {\n return <p className=\"text-sm text-slate-400\">No matching entries.</p>\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n {groups.map(({badge: b, filtered}) => {\n const pathwayTitle = props.pathwayNameForBadge[b.badgeId]\n return (\n <GroupCard\n key={b.badgeId}\n title={b.displayName}\n description={pathwayTitle ? `${pathwayTitle} pathway` : undefined}\n count={countFiles(filtered)}\n onTitleClick={props.onBadgeClick ? () => props.onBadgeClick!(b.badgeId) : undefined}\n >\n <Table\n loading={props.loading}\n items={filtered}\n hideBadge\n hidePathway\n onReview={(item) => props.onReview(item, filtered, b.displayName)}\n onComment={props.onComment}\n onLessonClick={props.onLessonClick}\n />\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. Same cross-match/narrow/\n * hide rule as the other two, keyed on the lesson's own name.\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 const term = props.search.trim().toLowerCase()\n const groups = props.lessons\n .map((l) => {\n const base = byLesson(l.lessonName)\n const ownNameMatches = !term || l.lessonName.toLowerCase().includes(term)\n const filtered = ownNameMatches ? base : base.filter((s) => matchesSearch(s, term))\n return {lesson: l, filtered}\n })\n .filter((g) => !term || g.filtered.length > 0)\n\n if (term && groups.length === 0) {\n return <p className=\"text-sm text-slate-400\">No matching entries.</p>\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n {groups.map(({lesson: l, filtered}) => {\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\n key={l.lessonId}\n title={l.lessonName}\n description={description}\n count={countFiles(filtered)}\n onTitleClick={props.onLessonClick ? () => props.onLessonClick!(l.lessonId) : undefined}\n >\n <Table loading={props.loading} items={filtered} hideBadge hideLesson hidePathway onReview={(item) => props.onReview(item, filtered, l.lessonName)} onComment={props.onComment}/>\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 const [search, setSearch] = React.useState(\"\")\n const searchLower = search.trim().toLowerCase()\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 // Same derivation as pathwayNameForBadge, just keeping the id instead of the title - needed to\n // wire a submission's pathway name up as a real click target (navigate to that pathway), not\n // just a display string.\n const pathwayIdForBadge = 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.pathwayId\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) => ({\n ...sub,\n pathwayName: pathwayNameForBadge[sub.badgeId] || \"\",\n pathwayId: pathwayIdForBadge[sub.badgeId],\n })),\n }))\n }, [props.students, pathwayNameForBadge, pathwayIdForBadge])\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 // The single search box cross-matches every tab against student name, pathway, badge, and\n // lesson name at once. On \"By student\" this directly narrows the roster (matchesSearch checks\n // the student's own name plus every field on their submissions). The 3 grouped tabs need a\n // richer rule than a simple filter - handled inside PathwayGroups/BadgeGroups/LessonGroups\n // themselves, which is why they receive the full, unfiltered catalog plus the raw search term\n // rather than a pre-filtered array (each group's own name can independently match even when a\n // pre-filter on the catalog wouldn't have caught it, and a group matching only via one member\n // needs its nested table narrowed too, not just a yes/no on the catalog item).\n const searchedStudents = React.useMemo(\n () => searchLower ? enrichedStudents.filter((s) => matchesSearch(s, searchLower)) : enrichedStudents,\n [enrichedStudents, searchLower]\n )\n\n const [commenting, setCommenting] = React.useState<{userId: string, badgeId?: string, lessonId?: string} | null>(null)\n\n const onReview = (item: Item, list: Item[], context?: string) => setReviewing({student: item, list, context})\n // Whichever tab/group rendered the clicked row has already narrowed its submissions down to the\n // relevant badge/lesson (see useFilteredStudents' byBadge/byLesson) - or, on \"By student\", left\n // every submission in place, in which case the first one is a reasonable default and the modal's\n // own target selector still lets the teacher change it.\n const onCommentClick = (item: Item) => {\n const sub = item.submissions?.[0]\n setCommenting({userId: item.userId, badgeId: sub?.badgeId, lessonId: sub?.lessonId})\n }\n const onCommentSubmit = (comment: LeaveCommentPayload) => {\n props.onComment?.(comment)\n setCommenting(null)\n }\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 onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\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 && (\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 value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={SEARCH_PLACEHOLDER}\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\n {!props.trial && tab === \"students\" && (\n <Table\n loading={props.loading}\n items={searchedStudents}\n onReview={(item) => onReview(item, searchedStudents)}\n onComment={onCommentClick}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\n />\n )}\n {!props.trial && tab === \"pathways\" && (\n <PathwayGroups\n students={enrichedStudents}\n loading={props.loading}\n search={search}\n pathways={props.pathways || []}\n badges={props.badges || []}\n onReview={onReview}\n onComment={onCommentClick}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\n />\n )}\n {!props.trial && tab === \"badges\" && (\n <BadgeGroups\n students={enrichedStudents}\n loading={props.loading}\n search={search}\n badges={props.badges || []}\n pathwayNameForBadge={pathwayNameForBadge}\n onReview={onReview}\n onComment={onCommentClick}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\n />\n )}\n {!props.trial && tab === \"lessons\" && (\n <LessonGroups\n students={enrichedStudents}\n loading={props.loading}\n search={search}\n lessons={props.lessons}\n badgeForLesson={badgeForLesson}\n pathwayNameForBadge={pathwayNameForBadge}\n onReview={onReview}\n onComment={onCommentClick}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\n />\n )}\n\n <LeaveCommentModal\n opened={!!commenting}\n onClose={() => setCommenting(null)}\n onSubmit={onCommentSubmit}\n hideStudentPicker\n students={[]}\n badges={props.badges?.map((b) => ({badgeId: b.badgeId, displayName: b.displayName})) || []}\n lessons={props.lessons.map((l) => ({lessonId: l.lessonId, displayName: l.lessonName}))}\n initialUserId={commenting?.userId}\n initialBadgeId={commenting?.badgeId}\n initialLessonId={commenting?.lessonId}\n />\n </div>\n )\n}\n","import * as React from 'react';\nimport {IconCheck} from \"@tabler/icons\";\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {\n LeaveCommentModal,\n LeaveCommentBadgeOption,\n LeaveCommentLessonOption,\n LeaveCommentPayload,\n LeaveCommentStudentOption,\n} from \"../../components/modals/LeaveCommentModal/LeaveCommentModal\";\n\n/**\n * CommentCenterClass\n */\nexport type CommentCenterClass = { classId: string, name: string, active: boolean }\n\n/**\n * CommentCenterItem\n */\nexport type CommentCenterItem = {\n commentId: string\n recipientId: string\n recipientName: string\n authorId: string\n authorName?: string\n badgeId?: string\n badgeName?: string\n lessonId?: string\n lessonName?: string\n commentText: string\n requireValidation: boolean\n resolvedAt?: string\n createdAt: string\n}\n\n/**\n * CommentCenterProps\n */\nexport type CommentCenterProps = {\n loading: boolean\n classes: CommentCenterClass[]\n classId: string\n comments: CommentCenterItem[]\n students: LeaveCommentStudentOption[]\n badges: LeaveCommentBadgeOption[]\n lessons: LeaveCommentLessonOption[]\n onClassChange: (classId: string) => void\n onResolve: (commentId: string) => void\n onLeaveComment: (comment: LeaveCommentPayload) => void\n}\n\ntype Tab = \"students\" | \"badges\" | \"lessons\"\n\nconst TABS: {value: Tab, label: string}[] = [\n {value: \"students\", label: \"By student\"},\n {value: \"badges\", label: \"By badge\"},\n {value: \"lessons\", label: \"By lesson\"},\n]\n\ntype Group = {key: string, title: string, items: CommentCenterItem[]}\n\n// Preserves first-seen order (not alphabetical) so the most recently-active student/badge/lesson\n// tends to surface first, since `comments` already arrives newest-first (see study's\n// queryCommentsByOrganizationSpec: `OrderBy(\"created_at desc\")`).\nconst groupBy = (items: CommentCenterItem[], keyOf: (i: CommentCenterItem) => string | undefined, titleOf: (i: CommentCenterItem) => string): Group[] => {\n const order: string[] = []\n const map = new Map<string, Group>()\n items.forEach((item) => {\n const key = keyOf(item)\n if (!key) return\n if (!map.has(key)) {\n map.set(key, {key, title: titleOf(item), items: []})\n order.push(key)\n }\n map.get(key)!.items.push(item)\n })\n return order.map((key) => map.get(key)!)\n}\n\n/**\n * CommentCenter. Org-wide view of every comment left across the organization - grouped by student,\n * badge, or lesson via the same pill-tab selector and class dropdown FileLocker uses - with the\n * ability to resolve any comment that requires validation (see Comment.RequireValidation on the\n * backend) and to leave a brand new comment for any student via LeaveCommentModal.\n * @param props\n * @constructor\n */\nexport const CommentCenter = (props: CommentCenterProps) => {\n const [tab, setTab] = React.useState<Tab>(\"students\")\n const [leavingComment, setLeavingComment] = React.useState(false)\n\n const groups = React.useMemo(() => {\n if (tab === \"students\") return groupBy(props.comments, (i) => i.recipientId, (i) => i.recipientName)\n if (tab === \"badges\") return groupBy(props.comments, (i) => i.badgeId, (i) => i.badgeName || \"Badge\")\n return groupBy(props.comments, (i) => i.lessonId, (i) => i.lessonName || \"Lesson\")\n }, [props.comments, tab])\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 <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">Comment Center</h1>\n <p className=\"mt-1 text-sm text-slate-500\">Every comment left across your organization.</p>\n </div>\n <button\n onClick={() => setLeavingComment(true)}\n className=\"rounded-lg bg-dark-blue-400 px-4 py-2.5 text-xs font-bold text-white\"\n >\n Leave a Comment\n </button>\n </div>\n\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((c) => <option key={c.classId} value={c.classId}>{c.name}</option>)}\n </select>\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 {props.comments.length === 0 ? (\n <PlaceholderBanner\n title=\"No comments to display\"\n description=\"Nothing has been left for this organization yet.\"\n loading={props.loading}\n icon=\"thinking\"\n />\n ) : (\n <div className=\"flex flex-col gap-4\">\n <div className=\"grid grid-cols-[1.3fr_1.3fr_2fr_1fr_1fr] items-center gap-3 px-5 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">\n <div>{tab === \"students\" ? \"Badge / Lesson\" : \"Student\"}</div>\n <div>Left By</div>\n <div>Comment</div>\n <div className=\"text-center\">Flag</div>\n <div className=\"text-center\">Status</div>\n </div>\n\n {groups.map((group) => (\n <div key={group.key} className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div className=\"border-b border-slate-100 bg-slate-50/60 px-5 py-2.5 text-xs font-extrabold text-dark-blue-400\">\n {group.title}\n </div>\n {group.items.map((item, i) => (\n <div\n key={item.commentId}\n className={`grid grid-cols-[1.3fr_1.3fr_2fr_1fr_1fr] items-center gap-3 px-5 py-3.5 ${i < group.items.length - 1 ? \"border-b border-slate-100\" : \"\"}`}\n >\n <div className=\"truncate text-xs font-bold text-dark-blue-400\">\n {tab === \"students\" ? (item.badgeName || item.lessonName || \"General\") : item.recipientName}\n </div>\n <div className=\"truncate text-[11px] text-slate-500\">{item.authorName || \"—\"}</div>\n <div className=\"text-xs text-slate-600\">{item.commentText}</div>\n <div className=\"flex justify-center\">\n {item.requireValidation && (\n <span className=\"rounded-full bg-gold-400/15 px-2 py-0.5 text-[10px] font-bold text-dark-blue-400\">\n Requires validation\n </span>\n )}\n </div>\n <div className=\"flex justify-center\">\n {!item.requireValidation ? (\n <span className=\"text-[11px] text-slate-400\">—</span>\n ) : item.resolvedAt ? (\n <IconCheck size={16} stroke={3} className=\"text-mint-400\" />\n ) : (\n <button\n onClick={() => props.onResolve(item.commentId)}\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 Resolve\n </button>\n )}\n </div>\n </div>\n ))}\n </div>\n ))}\n </div>\n )}\n\n <LeaveCommentModal\n opened={leavingComment}\n onClose={() => setLeavingComment(false)}\n onSubmit={(comment) => { props.onLeaveComment(comment); setLeavingComment(false) }}\n students={props.students}\n badges={props.badges}\n lessons={props.lessons}\n />\n </div>\n )\n}\n","import * as React from 'react';\nimport {IconCheck} from \"@tabler/icons\";\nimport {Checkbox} from \"@mantine/core\";\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * ValidationCenterClass\n */\nexport type ValidationCenterClass = { classId: string, name: string, active: boolean }\n\n/**\n * ValidationCenterBadge\n */\nexport type ValidationCenterBadge = { badgeId: string, displayName: string }\n\n/**\n * ValidationCenterStudent\n */\nexport type ValidationCenterStudent = { userId: string, name: string, avatar?: string, hasCredit: boolean }\n\n/**\n * ValidationCenterProps\n */\nexport type ValidationCenterProps = {\n loading: boolean\n classes: ValidationCenterClass[]\n classId: string\n badges: ValidationCenterBadge[]\n badgeId: string\n students: ValidationCenterStudent[]\n onClassChange: (classId: string) => void\n onBadgeChange: (badgeId: string) => void\n // Validates credit for every currently-checked student against the currently selected badge.\n // The caller owns the actual API call and, per spec, reloads the page afterward to reflect the\n // new state - this component only ever hands back the selected student ids.\n onSubmit: (userIds: string[]) => void\n}\n\nconst initials = (name: string) => name.split(\" \").map(w => w[0]).filter(Boolean).slice(0, 2).join(\"\").toUpperCase()\n\n/**\n * ValidationCenter. Lets an educator directly credit one or more students for a badge - superseding\n * lesson/criteria requirements and any outstanding comments, exactly like study's\n * BadgeActivity.Validate() (used via the bulk :validate endpoint). A student who already has credit\n * shows a checkmark instead of a checkbox, since re-validating an already-finished badge is a no-op\n * on the backend (Validate guards on FinishedAt != nil just like Submit).\n * @param props\n * @constructor\n */\nexport const ValidationCenter = (props: ValidationCenterProps) => {\n const [selected, setSelected] = React.useState<Record<string, boolean>>({})\n\n // Clear selections whenever the visible roster changes (a different class or badge) so a stale\n // selection from a previous badge is never silently carried into this one's submission.\n React.useEffect(() => {\n setSelected({})\n }, [props.classId, props.badgeId])\n\n const toggle = (userId: string, checked: boolean) => setSelected((prev) => ({...prev, [userId]: checked}))\n const selectedIds = Object.keys(selected).filter((userId) => selected[userId])\n const eligible = props.students.filter((s) => !s.hasCredit)\n\n const onSelectAll = (checked: boolean) => {\n const next: Record<string, boolean> = {}\n if (checked) eligible.forEach((s) => { next[s.userId] = true })\n setSelected(next)\n }\n\n return (\n <div className=\"flex w-full flex-col gap-5 px-4 py-8\">\n <div>\n <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">Validation Center</h1>\n <p className=\"mt-1 text-sm text-slate-500\">Directly credit students for a badge, superseding lesson and criteria requirements.</p>\n </div>\n\n <div className=\"flex flex-wrap gap-3\">\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((c) => <option key={c.classId} value={c.classId}>{c.name}</option>)}\n </select>\n\n <select\n value={props.badgeId}\n onChange={(e) => props.onBadgeChange(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 badge</option>\n {props.badges.map((b) => <option key={b.badgeId} value={b.badgeId}>{b.displayName}</option>)}\n </select>\n </div>\n\n {!props.badgeId ? (\n <PlaceholderBanner\n title=\"Select a badge\"\n description=\"Choose a badge above to see which students already have credit and give it to the rest.\"\n loading={props.loading}\n icon=\"badges\"\n />\n ) : props.students.length === 0 ? (\n <PlaceholderBanner\n title=\"No students to display\"\n description=\"There are no students in this class yet.\"\n loading={props.loading}\n icon=\"groups\"\n />\n ) : (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div className=\"grid grid-cols-[2.2fr_1fr] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <div className=\"text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">Student</div>\n <div className=\"flex items-center justify-center gap-2 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">\n <Checkbox\n checked={eligible.length > 0 && selectedIds.length === eligible.length}\n indeterminate={selectedIds.length > 0 && selectedIds.length < eligible.length}\n onChange={(e) => onSelectAll(e.currentTarget.checked)}\n disabled={eligible.length === 0}\n />\n Give Credit\n </div>\n </div>\n {props.students.map((row, i) => (\n <div\n key={row.userId}\n className={`grid grid-cols-[2.2fr_1fr] items-center gap-3 px-5 py-3.5 ${i < props.students.length - 1 ? \"border-b border-slate-100\" : \"\"}`}\n >\n <div className=\"flex min-w-0 items-center gap-2.5\">\n {row.avatar\n ? <img className=\"h-8 w-8 shrink-0 rounded-full object-cover\" src={row.avatar} alt=\"\" />\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(row.name)}\n </div>}\n <div className=\"truncate text-xs font-bold text-dark-blue-400\">{row.name}</div>\n </div>\n <div className=\"flex justify-center\">\n {row.hasCredit\n ? <IconCheck size={18} stroke={3} className=\"text-mint-400\" />\n : <Checkbox checked={!!selected[row.userId]} onChange={(e) => toggle(row.userId, e.currentTarget.checked)} />}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {props.badgeId && props.students.length > 0 && (\n <div className=\"flex justify-end\">\n <button\n onClick={() => props.onSubmit(selectedIds)}\n disabled={selectedIds.length === 0}\n className=\"rounded-lg bg-dark-blue-400 px-5 py-2.5 text-xs font-bold text-white disabled:opacity-40\"\n >\n Validate {selectedIds.length > 0 ? `${selectedIds.length} ` : \"\"}Student{selectedIds.length === 1 ? \"\" : \"s\"}\n </button>\n </div>\n )}\n </div>\n )\n}\n"],"names":["React","Avatar","useState","Link","IconChevronRight","IconHome2","IconGauge","IconCategory2","IconRoute","IconAlbum","IconLambda","IconClipboard","IconMessageCircle","IconClipboardCheck","IconBuilding","__spreadProps","__spreadValues","IconVideo","IconSwitchHorizontal","IconLogout","useStyles","createStyles","Modal","Center","Loader","Container","Group","Button","Title","Text","IconBooks","IconBackpack","SplitButton","IconClipboardCopy","IconTableExport","Image","IconCaretDown","IconCaretUp","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","showNotification","Dropzone","MIME_TYPES","IconCloudUpload","Divider","TextInput","Tooltip","ActionIcon","IconInfoCircle","IconPlaylistAdd","AnswerTable","AnswerStack","Chart","QuestionStack","IconPointer","IconX","SimpleGrid","Badge","Card","UnstyledButton","__objRest","Overlay","useUncontrolled","ThemeIcon","Checkbox","IconScribble","IconSchool","IconPodium","IconBriefcase","IconPresentation","IconNews","IconTools","Autocomplete","createEmotionCache","MantineProvider","NotificationsProvider","ModalsProvider","AppShell","IconBrandInstagram","IconBrandLinkedin","IconBrandFacebook","account","_a","BadgeStack","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/media/Emblem/Emblem.tsx","../src/components/users/SwitchAccount/SwitchAccount.tsx","../src/components/data/StatsGroup/StatsGroup.tsx","../src/pages/Badge/SplitButton.tsx","../src/components/banners/PlaceholderBanner/PlaceholderBanner.tsx","../src/components/data/SortableHeader/SortableHeader.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/buildCategoryTree.ts","../src/pages/Pathway/CategoriesModal.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/components/modals/LeaveCommentModal/LeaveCommentModal.tsx","../src/pages/FileLocker/FileLocker.tsx","../src/pages/CommentCenter/CommentCenter.tsx","../src/pages/ValidationCenter/ValidationCenter.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 IconClipboardCheck,\n IconGauge,\n IconHome2,\n IconLambda,\n IconLogout,\n IconMessageCircle,\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: 'Comments', icon: IconMessageCircle, accent: \"mint\" },\n { label: 'Validation', icon: IconClipboardCheck, accent: \"gold\" },\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 * as React from 'react';\nimport \"external-svg-loader\";\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\" | \"xl\"\n icon: EmblemIcon\n accent: EmblemAccent\n}\n\nconst SIZE = {\n sm: {box: \"h-14 w-14\", rounded: \"rounded-xl\", icon: 24},\n lg: {box: \"h-16 w-16\", rounded: \"rounded-2xl\", icon: 28},\n xl: {box: \"h-28 w-28\", rounded: \"rounded-3xl\", icon: 48},\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) via the same external-svg-loader\n * mechanism the student side uses (hub-ui's BadgeEmblem), falling back to a tinted icon tile -\n * using the same icon/accent already assigned to that entity type elsewhere (Navbar's icon/accent\n * mapping) - if imageURL is absent, or if the icon hasn't loaded within LOAD_TIMEOUT_MS (the\n * loader has no error signal of its own; a failed/invalid fetch is caught and silently logged,\n * leaving the target permanently empty, so a timeout is the only way to detect that case). 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 */\nconst LOAD_TIMEOUT_MS = 3000\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 const [failed, setFailed] = React.useState(false)\n const ref = React.useRef<SVGSVGElement>(null)\n\n React.useEffect(() => {\n setFailed(false)\n if (!props.imageURL) {\n return\n }\n const el = ref.current\n const timer = setTimeout(() => setFailed(true), LOAD_TIMEOUT_MS)\n const onLoad = () => {\n setFailed(false)\n clearTimeout(timer)\n }\n el?.addEventListener(\"iconload\", onLoad)\n return () => {\n el?.removeEventListener(\"iconload\", onLoad)\n clearTimeout(timer)\n }\n }, [props.imageURL])\n\n if (props.imageURL && !failed) {\n return (\n <svg\n ref={ref}\n role=\"img\"\n aria-label={props.alt}\n data-cache=\"disabled\"\n data-src={props.imageURL}\n className={`${s.box} shrink-0 ${s.rounded} object-cover`}\n viewBox=\"0 0 32 32\"\n width=\"32\"\n height=\"32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n />\n )\n }\n\n return (\n <div role=\"img\" aria-label={props.alt} 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} aria-hidden=\"true\" />\n </div>\n )\n}\n","import {IconBackpack, IconBooks, IconBuilding} from \"@tabler/icons\";\nimport * as React from 'react';\nimport {Loader, Modal} from '@mantine/core';\nimport {Emblem, EmblemAccent, EmblemIcon} from \"../../media/Emblem/Emblem\";\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\nconst ROLE: Record<\"admin\" | \"educator\" | \"student\", {icon: EmblemIcon, accent: EmblemAccent, label: string}> = {\n admin: {icon: IconBuilding, accent: \"gold\", label: \"Admin\"},\n educator: {icon: IconBooks, accent: \"mint\", label: \"Educator\"},\n student: {icon: IconBackpack, accent: \"cyan\", label: \"Student\"},\n}\n\nconst PILL: Record<EmblemAccent, string> = {\n cyan: \"bg-sky-blue-400/15 text-dark-blue-400\",\n mint: \"bg-mint-400/15 text-dark-blue-400\",\n gold: \"bg-gold-400/15 text-dark-blue-400\",\n}\n\n// Mirrors the icon-rendering priority already used elsewhere in this file: admin wins outright,\n// then group-admin (educator), everything else falls to student - not a per-flag lookup.\nconst roleFor = (a: AccountItem) => a.isAdmin ? ROLE.admin : a.isGroupAdmin ? ROLE.educator : ROLE.student\n\n/**\n * SwitchAccount\n * @param props\n * @constructor\n */\nexport const SwitchAccount = (props: SwitchAccountProps) => {\n const options = props.accounts.map((a) => {\n const role = roleFor(a)\n return (\n <button\n type=\"button\"\n key={a.accountId}\n onClick={() => props.onClick && props.onClick(a.accountId)}\n className=\"flex flex-col items-center gap-3 rounded-xl border border-slate-200 bg-white p-6 text-center hover:bg-slate-50\"\n >\n <Emblem icon={role.icon} accent={role.accent} size=\"lg\" />\n <span className=\"text-base font-extrabold text-dark-blue-400\">{a.name}</span>\n <span className={`rounded-full px-2.5 py-1 text-[10px] font-bold ${PILL[role.accent]}`}>{role.label}</span>\n </button>\n )\n })\n\n return (\n <Modal\n centered\n fullScreen\n title={<span className=\"text-base font-extrabold text-dark-blue-400\">Change account</span>}\n opened={props.opened}\n onClose={() => props.onClose && props.onClose()}\n >\n <div className=\"relative\">\n {props.loading && (\n <div className=\"flex h-[400px] items-center justify-center\">\n <Loader />\n </div>\n )}\n {!props.loading && (\n <div className=\"grid grid-cols-1 gap-4 p-5 sm:grid-cols-2 md:grid-cols-3\">\n {options}\n </div>\n )}\n </div>\n </Modal>\n )\n}\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 {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 {IconCaretUp, IconCaretDown} from \"@tabler/icons\";\n\n/**\n * SortableHeaderProps\n */\nexport type SortableHeaderProps = {\n label: string\n sortKey: string\n // `key` is `string | number`, not just `string`, so this accepts useSortableData's\n // SortConfig<T> directly even when T has a string index signature (e.g. a row shape spread\n // with dynamic category-point fields) - keyof T resolves to `string | number` in that case.\n sortConfig: { key: string | number; direction: \"asc\" | \"desc\" | null }\n onSort: (key: string) => void\n align?: \"center\" | \"right\"\n className?: string\n}\n\n/**\n * A sortable column header button with a 3-glyph-state indicator: the active sort column shows a\n * single directional caret (accent-colored, stays visible on hover), every other sortable column\n * shows both carets stacked together to signal \"clickable, not currently sorted.\" The neutral\n * carets have no explicit color of their own - they inherit the button's text color via\n * currentColor, so they darken together with the label on hover.\n * @param props\n * @constructor\n */\nexport function SortableHeader(props: SortableHeaderProps) {\n const active = props.sortConfig.key === props.sortKey\n const direction = active ? props.sortConfig.direction : null\n const justify = props.align === \"right\" ? \"justify-end\" : props.align === \"center\" ? \"justify-center\" : \"\"\n\n return (\n <button\n type=\"button\"\n onClick={() => props.onSort(props.sortKey)}\n className={`inline-flex items-center gap-1 text-[10px] font-bold uppercase tracking-wide text-slate-500 hover:text-slate-700 ${justify} ${props.className || \"\"}`}\n >\n <span>{props.label}</span>\n {active ? (\n direction === \"desc\"\n ? <IconCaretDown size={12} stroke={2.5} className=\"shrink-0 text-sky-blue-400\" />\n : <IconCaretUp size={12} stroke={2.5} className=\"shrink-0 text-sky-blue-400\" />\n ) : (\n <span className=\"flex shrink-0 flex-col -space-y-[3px]\">\n <IconCaretUp size={10} stroke={2.5} />\n <IconCaretDown size={10} stroke={2.5} />\n </span>\n )}\n </button>\n )\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center gap-4 px-4\">\n <SortableHeader label=\"Student Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} className=\"flex-1\" />\n <SortableHeader label=\"Status\" sortKey=\"status\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" className=\"w-28 shrink-0\" />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex gap-4 px-4\">\n <SortableHeader label=\"Lesson Name\" sortKey=\"lessonName\" sortConfig={sortConfig} onSort={requestSort} className=\"flex-1\" />\n <SortableHeader label=\"Lesson Completion\" sortKey=\"percentageCompletion\" sortConfig={sortConfig} onSort={requestSort} align=\"right\" className=\"w-36 shrink-0\" />\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 weight?: number\n classes: BadgeClass[]\n lessons: LessonItem[]\n classId: string\n students: BadgeUserItem[]\n href: string\n trial?: boolean\n lessonsCompleted?: number\n pathwayId?: string\n pathwayTitle?: string\n\n onBackClick: () => void;\n onClassChange: (classId: string) => void;\n onCopyLinkClick: () => void;\n onExportDataClick: () => void;\n onPathwayClick?: () => 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=\"xl\" 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 {!!props.pathwayTitle && (\n <div onClick={props.onPathwayClick} 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 Go to Pathway\n </div>\n )}\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 title: \"POINT VALUE\",\n value: props.weight || 0,\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\";\nimport {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\nimport {useSortableData} from \"../../utils/useSortableData\";\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 weight?: 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 const {items: sortedItems, requestSort, sortConfig} = useSortableData(props.items);\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 No badges to display.\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center gap-4 px-4\">\n {/* \"Badge\" starts flush-left, at the same x-position as the emblem below it, not\n offset to align with the name text. The cell itself still spans the full\n emblem+gap+name width (56+16+224=296px) so the fixed-width columns after it\n (Pathway/Lessons/Point Value) line up correctly with their rows either way. */}\n <div className=\"w-[296px] shrink-0\">\n <SortableHeader label=\"Badge\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} />\n </div>\n <div className=\"flex-1 text-[10px] font-bold uppercase tracking-wide text-slate-500\">Description</div>\n <SortableHeader className=\"w-40 shrink-0\" label=\"Pathway\" sortKey=\"pathway\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader className=\"w-28 shrink-0\" label=\"Lessons\" sortKey=\"numberOfLessons\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader className=\"w-24 shrink-0\" label=\"Point Value\" sortKey=\"weight\" sortConfig={sortConfig} onSort={requestSort} align=\"right\" />\n <div className=\"w-4 shrink-0\" />\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 <Emblem imageURL={row.imageURL} alt={row.name} size=\"sm\" icon={IconAlbum} accent=\"mint\" />\n <div title={row.name} className=\"line-clamp-2 w-56 shrink-0 text-sm font-bold text-dark-blue-400\">\n {row.name}\n </div>\n <div title={row.description} className=\"line-clamp-2 min-w-0 flex-1 text-xs leading-relaxed text-slate-500\">\n {row.description || \"—\"}\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 <div className=\"w-24 shrink-0 text-right text-xs text-slate-500\">\n {row.weight ? `${row.weight} pts` : \"—\"}\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div className=\"grid grid-cols-[2fr_1fr] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Student Name\" sortKey=\"studentName\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader label=\"Class Name\" sortKey=\"className\" sortConfig={sortConfig} onSort={requestSort} />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 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] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Student Name\" sortKey=\"studentName\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader label=\"Lesson Name\" sortKey=\"lessonName\" sortConfig={sortConfig} onSort={requestSort} />\n <div className=\"text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">Reflection</div>\n <SortableHeader label=\"Updated At\" sortKey=\"updatedAtDate\" sortConfig={sortConfig} onSort={requestSort} />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div className=\"grid grid-cols-[1fr_3fr] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Student Name\" sortKey=\"studentName\" sortConfig={sortConfig} onSort={requestSort} />\n <div className=\"text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 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] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Badge Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} />\n <div className=\"text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">Description</div>\n <SortableHeader label=\"Completion\" sortKey=\"percentageCompletion\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 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] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Lesson Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} />\n <div className=\"text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">Description</div>\n <SortableHeader label=\"Completion\" sortKey=\"percentageCompletion\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div className=\"grid grid-cols-[2.2fr_1.2fr_1fr_1.2fr_1fr_0.6fr] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Name\" sortKey=\"fullName\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader label=\"Role\" sortKey=\"isAdmin\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\n <SortableHeader label=\"Badges Earned\" sortKey=\"badgesEarned\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\n <SortableHeader label=\"Lessons Completed\" sortKey=\"lessonsCompleted\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\n <SortableHeader label=\"Account Created?\" sortKey=\"hasAccount\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\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 { showNotification } from '@mantine/notifications';\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 if (data.length > 0) {\n props.onCreateMembers && props.onCreateMembers(data)\n } else {\n showNotification({\n title: 'No new members found.',\n message: \"Every row in that file was either invalid or already on this class's roster.\",\n autoClose: 5000,\n })\n }\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 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] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Class Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} />\n <div className=\"text-[10px] font-bold uppercase tracking-wide text-slate-500\">Description</div>\n <SortableHeader label=\"# of Students\" sortKey=\"numberOfStudents\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\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 showNotification({\n title: 'Unable to copy code.',\n message: `Your browser blocked the copy - the community code is: ${accessCode}`,\n autoClose: false,\n });\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 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 <SortableHeader label=\"Student Name\" sortKey=\"studentName\" sortConfig={sortConfig} onSort={requestSort} className=\"w-40 shrink-0\" />\n <div className=\"flex-1\">Reflection</div>\n <SortableHeader label=\"Rating\" sortKey=\"rating\" sortConfig={sortConfig} onSort={requestSort} align=\"right\" className=\"w-20 shrink-0\" />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center gap-4 px-4\">\n <SortableHeader label=\"Student Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} className=\"flex-1\" />\n <SortableHeader label=\"Status\" sortKey=\"status\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" className=\"w-28 shrink-0\" />\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\";\nimport {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\nimport {useSortableData} from \"../../utils/useSortableData\";\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 const {items: sortedItems, requestSort, sortConfig} = useSortableData(props.items);\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 No lessons to display.\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center gap-4 px-4\">\n <SortableHeader className=\"flex-1\" label=\"Lesson\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader className=\"w-40 shrink-0\" label=\"Badge\" sortKey=\"badge\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader className=\"w-40 shrink-0\" label=\"Pathway\" sortKey=\"pathway\" sortConfig={sortConfig} onSort={requestSort} />\n <div className=\"w-4 shrink-0\" />\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\">\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\";\nimport {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\nimport {useSortableData} from \"../../utils/useSortableData\";\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 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 roleRank: item.isAdmin ? 2 : item.isGroupAdmin ? 1 : 0,\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 <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] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <SortableHeader label=\"Name\" sortKey=\"fullName\" sortConfig={sortConfig} onSort={requestSort} />\n <SortableHeader label=\"Role\" sortKey=\"roleRank\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\n <SortableHeader label=\"Account Created?\" sortKey=\"hasAccount\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\n <SortableHeader label=\"# of Classes\" sortKey=\"numberOfClasses\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" />\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_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 ? \"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 { showNotification } from '@mantine/notifications';\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 if (data.length > 0) {\n props.onCreateUsers && props.onCreateUsers(data)\n } else {\n showNotification({\n title: 'No new members found.',\n message: \"Every row in that file was either invalid or already on this organization's roster.\",\n autoClose: 5000,\n })\n }\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 showNotification({\n title: \"Unable to copy code.\",\n message: `Your browser blocked the copy - the community code is: ${code}`,\n autoClose: false,\n });\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center gap-4 px-4\">\n <SortableHeader label=\"Student Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} className=\"flex-1\" />\n <SortableHeader label=\"Status\" sortKey=\"isComplete\" sortConfig={sortConfig} onSort={requestSort} align=\"center\" className=\"w-28 shrink-0\" />\n {categories.map((category) => (\n <SortableHeader key={category.categoryId} label={category.name} sortKey={category.categoryId} sortConfig={sortConfig} onSort={requestSort} align=\"center\" className=\"w-24 shrink-0\" />\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 categories: string[]\n weight: number\n overflowCategories?: string[]\n}\n\n/**\n * Category\n */\nexport type Category = {\n categoryId: string\n name: string\n maxPoints?: number\n}\n\n/**\n * TableProps\n */\nexport type TableProps = {\n loading: boolean\n badges: Item[]\n categories: Category[]\n activeCategoryId?: string\n activeCategoryLabel?: string\n}\n\nconst OTHER_FILTER = \"__other__\";\n\n/**\n * Table. Badges are matched to the pathway's criteria categories via exact-inclusion on\n * badge.categories (not the prefix-match used elsewhere for badge->pathway matching), following\n * the same grouping pattern already shipped in hub-ui's PathwayTranscript. Rather than always\n * stacking every category's badges into its own always-visible section - which disconnected the\n * single sortable header row from the badges grouped below it - the same mapping now drives a row\n * of filter pills above one continuous, sortable table. Badges matching none of the criteria\n * categories stay reachable via the \"Other\" pill rather than disappearing.\n * @param props\n * @constructor\n */\nexport function Table(props: TableProps) {\n const {items: sortedBadges, requestSort, sortConfig} = useSortableData(props.badges);\n const [categoryFilter, setCategoryFilter] = React.useState(\"\");\n\n // Lets a parent (the Categories popup, via Pathway.tsx) drive this table's own filter pill\n // selection without lifting the pill state itself out of this component.\n React.useEffect(() => {\n if (props.activeCategoryId !== undefined) {\n setCategoryFilter(props.activeCategoryId);\n }\n }, [props.activeCategoryId]);\n\n if (props.badges.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 groupedIds = new Set(props.categories.map((c) => c.categoryId));\n const other = sortedBadges.filter((b) => !b.categories?.some((id) => groupedIds.has(id)));\n\n // The Categories popup can select any node in the full tree, not just the criteria-level\n // categories that normally get their own pill - when that happens, add a pill for it too, so\n // the active filter is always visibly confirmed rather than silently applied with nothing\n // highlighted.\n const extraCategory =\n categoryFilter && categoryFilter !== OTHER_FILTER && !groupedIds.has(categoryFilter)\n ? { categoryId: categoryFilter, name: props.activeCategoryLabel || categoryFilter }\n : undefined;\n\n const visibleBadges = !categoryFilter\n ? sortedBadges\n : categoryFilter === OTHER_FILTER\n ? other\n : sortedBadges.filter((b) => b.categories?.includes(categoryFilter));\n\n return (\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex flex-wrap gap-2\">\n <CategoryPill label=\"All\" active={!categoryFilter} onClick={() => setCategoryFilter(\"\")} />\n {props.categories.map((category) => (\n <CategoryPill\n key={category.categoryId}\n label={category.name}\n active={categoryFilter === category.categoryId}\n onClick={() => setCategoryFilter(category.categoryId)}\n />\n ))}\n {extraCategory && (\n <CategoryPill label={extraCategory.name} active onClick={() => setCategoryFilter(extraCategory.categoryId)} />\n )}\n {other.length > 0 && (\n <CategoryPill label=\"Other\" active={categoryFilter === OTHER_FILTER} onClick={() => setCategoryFilter(OTHER_FILTER)} />\n )}\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex gap-4 px-4\">\n <SortableHeader label=\"Badge Name\" sortKey=\"badgeName\" sortConfig={sortConfig} onSort={requestSort} className=\"flex-1\" />\n <SortableHeader label=\"Point Value\" sortKey=\"weight\" sortConfig={sortConfig} onSort={requestSort} align=\"right\" className=\"w-24 shrink-0\" />\n <SortableHeader label=\"Badge Completion\" sortKey=\"percentageCompletion\" sortConfig={sortConfig} onSort={requestSort} align=\"right\" className=\"w-36 shrink-0\" />\n </div>\n\n {visibleBadges.length === 0 && (\n <div className=\"rounded-xl border border-dashed border-slate-200 px-4 py-3 text-xs text-slate-400\">\n {categoryFilter ? \"No badges in this category yet.\" : \"No badges yet.\"}\n </div>\n )}\n\n {visibleBadges.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-24 shrink-0 text-right text-xs font-black text-mint-400\">{row.weight} pts</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 </div>\n );\n}\n\nconst CategoryPill = (props: { label: string, active: boolean, onClick: () => void }) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n className={`rounded-full border px-3.5 py-1.5 text-xs font-bold ${\n props.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 {props.label}\n </button>\n)\n","/**\n * PathwayCategory\n */\nexport type PathwayCategory = {\n categoryId: string\n name: string\n description?: string\n parentCategoryId?: string\n maxPoints?: number\n}\n\n/**\n * CategoryTreeNode\n */\nexport type CategoryTreeNode = PathwayCategory & { children: CategoryTreeNode[] }\n\n/**\n * buildCategoryTree. Converts a flat parent-pointer list into an N-level tree. A category is a\n * root when its parentCategoryId is falsy, self-referential, or points at an id absent from this\n * list (orphaned reference) - it is never dropped. Cyclical references are defused via\n * ancestry-tracking during recursion, and no category is ever attached twice.\n * @param categories\n */\nexport function buildCategoryTree(categories: PathwayCategory[]): CategoryTreeNode[] {\n const byId = new Map<string, PathwayCategory>();\n categories.forEach((c) => byId.set(c.categoryId, c));\n\n const childrenByParent = new Map<string, PathwayCategory[]>();\n categories.forEach((c) => {\n const parentId = c.parentCategoryId;\n const hasValidParent = !!parentId && parentId !== c.categoryId && byId.has(parentId);\n if (!hasValidParent) return;\n const siblings = childrenByParent.get(parentId!) || [];\n siblings.push(c);\n childrenByParent.set(parentId!, siblings);\n });\n\n const attached = new Set<string>();\n\n const attach = (category: PathwayCategory, ancestry: Set<string>): CategoryTreeNode => {\n attached.add(category.categoryId);\n const childAncestry = new Set(ancestry).add(category.categoryId);\n const children = (childrenByParent.get(category.categoryId) || [])\n .filter((child) => !childAncestry.has(child.categoryId))\n .map((child) => attach(child, childAncestry));\n return { ...category, children };\n };\n\n const roots = categories.filter((c) => {\n const parentId = c.parentCategoryId;\n return !parentId || parentId === c.categoryId || !byId.has(parentId);\n });\n\n const tree = roots.map((root) => attach(root, new Set()));\n\n categories.forEach((c) => {\n if (!attached.has(c.categoryId)) tree.push(attach(c, new Set()));\n });\n\n return tree;\n}\n","import * as React from 'react';\nimport { Modal } from \"@mantine/core\";\nimport { buildCategoryTree, CategoryTreeNode, PathwayCategory } from \"./buildCategoryTree\";\n\n/**\n * CategoriesModalProps\n */\nexport type CategoriesModalProps = {\n opened: boolean\n onClose: () => void\n categories: PathwayCategory[]\n criteria: Record<string, number>\n onCategoryClick?: (categoryId: string) => void\n}\n\n/**\n * CategoriesModal. Structural rubric view of a pathway's full category hierarchy - names,\n * descriptions where populated, minimum-required thresholds (from criteria), and point caps\n * (maxPoints), nested to reflect real parent/child relationships. No badge lists, no earned-points\n * computation - a reference view of how the pathway is configured, not a progress tracker.\n * @param props\n * @constructor\n */\nexport function CategoriesModal(props: CategoriesModalProps) {\n const tree = React.useMemo(() => buildCategoryTree(props.categories || []), [props.categories]);\n\n return (\n <Modal\n opened={props.opened}\n onClose={props.onClose}\n title={<span className=\"text-base font-extrabold text-dark-blue-400\">Pathway Categories</span>}\n size=\"lg\"\n centered\n >\n <div className=\"flex max-h-[70vh] flex-col gap-2 overflow-y-auto pr-1\">\n {tree.length === 0 && <p className=\"text-sm text-slate-400\">No categories to display.</p>}\n {tree.map((node) => (\n <CategoryNode key={node.categoryId} node={node} criteria={props.criteria} depth={0} onCategoryClick={props.onCategoryClick} />\n ))}\n </div>\n </Modal>\n );\n}\n\nconst CategoryNode = (props: { node: CategoryTreeNode, criteria: Record<string, number>, depth: number, onCategoryClick?: (categoryId: string) => void }) => {\n const hasChildren = props.node.children.length > 0;\n const required = props.criteria[props.node.categoryId];\n const clickable = !!props.onCategoryClick;\n // Hover-only feedback (signals \"clickable\", not \"currently selected\" - the filter pill already\n // covers that once a category is picked). Leaf nodes already had this; parent nodes previously\n // had a static background with no hover state at all, so hovering over one gave no feedback.\n const base = hasChildren ? \"rounded-lg border border-slate-100 p-3\" : \"rounded-lg px-3 py-2\";\n const style = hasChildren ? \"bg-slate-50/60 hover:bg-slate-100\" : \"hover:bg-slate-50\";\n\n return (\n <div\n onClick={clickable ? (e) => { e.stopPropagation(); props.onCategoryClick!(props.node.categoryId); } : undefined}\n className={`${base} ${style} ${clickable ? \"cursor-pointer\" : \"\"}`}\n >\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <span className={props.depth === 0 ? \"text-sm font-extrabold text-dark-blue-400\" : \"text-xs font-bold text-dark-blue-400\"}>\n {props.node.name}\n </span>\n <div className=\"flex flex-wrap items-center gap-1.5\">\n {required !== undefined && (\n <span className=\"rounded-full bg-sky-blue-400/15 px-2 py-0.5 text-[10px] font-bold text-dark-blue-400\">\n min. {required} pts\n </span>\n )}\n {!!props.node.maxPoints && (\n <span className=\"rounded-full bg-gold-400/15 px-2 py-0.5 text-[10px] font-bold text-dark-blue-400\">\n cap {props.node.maxPoints} pts\n </span>\n )}\n </div>\n </div>\n\n {!!props.node.description?.trim() && (\n <p className=\"mt-0.5 text-xs text-slate-500\">{props.node.description}</p>\n )}\n\n {hasChildren && (\n <div className=\"mt-3 flex flex-col gap-2 border-l-2 border-slate-200 pl-4\">\n {props.node.children.map((child) => (\n <CategoryNode key={child.categoryId} node={child} criteria={props.criteria} depth={props.depth + 1} onCategoryClick={props.onCategoryClick} />\n ))}\n </div>\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\";\nimport {CategoriesModal} from \"./CategoriesModal\";\nimport {PathwayCategory} from \"./buildCategoryTree\";\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 allCategories?: PathwayCategory[]\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 const [categoriesOpen, setCategoriesOpen] = useState(false)\n const [selectedCategoryId, setSelectedCategoryId] = useState<string | undefined>(undefined)\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 // The pathway's own root category (no parentCategoryId - only known via `allCategories`,\n // since the narrower `categories` doesn't carry it) is redundant as a badge-grouping section:\n // every badge tagged with it is also tagged with a more specific descendant category, so its\n // group would just repeat every badge already shown elsewhere. Excluded from badge groupings\n // only - the criteria pills below still show the root's own overall threshold.\n const rootCategoryIds = new Set(\n (props.allCategories || []).filter((c) => !c.parentCategoryId).map((c) => c.categoryId)\n )\n const badgeGroupCategories = criteriaCategories.filter((c) => !rootCategoryIds.has(c.categoryId))\n\n // Readable name for a Categories-popup selection that isn't itself one of badgeGroupCategories\n // (e.g. a deeper, non-criteria node in the tree) - BadgeTable only knows the criteria-scoped\n // list, so it can't label a pill for anything outside it on its own.\n const selectedCategoryName = selectedCategoryId\n ? (props.allCategories || []).find((c) => c.categoryId === selectedCategoryId)?.name\n : 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=\"xl\" 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 || !!props.allCategories?.length) && (\n <div className=\"flex flex-wrap items-center gap-1.5 pt-0.5\">\n {criteriaCategories.length > 0 && (\n <>\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 </>\n )}\n {!!props.allCategories?.length && (\n <button\n onClick={() => setCategoriesOpen(true)}\n className=\"flex items-center gap-1.5 rounded-full border border-slate-200 bg-white px-2.5 py-1 text-[10px] font-bold text-dark-blue-400 hover:bg-slate-50\"\n >\n <IconCategory2 size={12} stroke={2} /> Categories\n </button>\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} badges={props.badges} categories={badgeGroupCategories} activeCategoryId={selectedCategoryId} activeCategoryLabel={selectedCategoryName} />}\n {(!props.trial && tab === \"students\") && <Table loading={props.loading} items={props.students} categories={props.categories} />}\n </div>\n\n <CategoriesModal\n opened={categoriesOpen}\n onClose={() => setCategoriesOpen(false)}\n categories={props.allCategories || []}\n criteria={criteria}\n onCategoryClick={(id) => {\n setSelectedCategoryId(id)\n setTab(\"badges\")\n setCategoriesOpen(false)\n }}\n />\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} from \"@tabler/icons\";\n\nexport interface Item {\n link: string\n badgeName: string\n badgeId?: string\n lessonName: string\n lessonId?: string\n pathwayName?: string\n pathwayId?: string\n question: string\n}\n\nexport type StackProps = {\n items: Item[]\n hideBadge?: boolean\n hideLesson?: boolean\n hidePathway?: boolean\n onBadgeClick?: (badgeId: string) => void\n onLessonClick?: (lessonId: string) => void\n onPathwayClick?: (pathwayId: string) => void\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, and in what order, follows the real Pathway -> Badge ->\n * Lesson -> Question hierarchy left to right - whichever level the calling tab has already fixed\n * (shown once at that tab's group-card level instead - see FileLocker.tsx's per-tab hide* flags)\n * simply drops out of the sequence, it never reorders what's left. 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, onBadgeClick, onLessonClick, onPathwayClick} = props\n if (!items.length) return null;\n\n // Columns follow the real Pathway -> Badge -> Lesson -> Question hierarchy, left to right,\n // with whichever levels the calling tab has already fixed (hidden here) simply dropped out of\n // the sequence rather than reordered - Question is the leaf, so it always sits immediately\n // before the action column, not first.\n const columns = [\n !hidePathway && \"minmax(0,1.3fr)\",\n !hideBadge && \"minmax(0,1.3fr)\",\n !hideLesson && \"minmax(0,1.3fr)\",\n \"minmax(0,2fr)\",\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 {!hidePathway && <div className={headerCell}>Pathway</div>}\n {!hideBadge && <div className={headerCell}>Badge</div>}\n {!hideLesson && <div className={headerCell}>Lesson</div>}\n <div className={headerCell}>Question</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 {!hidePathway && (\n row.pathwayId && onPathwayClick ? (\n <button type=\"button\" onClick={() => onPathwayClick(row.pathwayId as string)} className={`${dataCell} ${rowBorder} truncate text-left text-[11px] font-semibold text-sky-blue-400 hover:underline`}>\n {row.pathwayName || \"—\"}\n </button>\n ) : (\n <div className={`${dataCell} ${rowBorder} truncate text-[11px] text-slate-500`}>{row.pathwayName || \"—\"}</div>\n )\n )}\n {!hideBadge && (\n row.badgeId && onBadgeClick ? (\n <button type=\"button\" onClick={() => onBadgeClick(row.badgeId as string)} className={`${dataCell} ${rowBorder} truncate text-left text-[11px] font-semibold text-sky-blue-400 hover:underline`}>\n {row.badgeName}\n </button>\n ) : (\n <div className={`${dataCell} ${rowBorder} truncate text-[11px] text-slate-500`}>{row.badgeName}</div>\n )\n )}\n {!hideLesson && (\n row.lessonId && onLessonClick ? (\n <button type=\"button\" onClick={() => onLessonClick(row.lessonId as string)} className={`${dataCell} ${rowBorder} truncate text-left text-[11px] font-semibold text-sky-blue-400 hover:underline`}>\n {row.lessonName}\n </button>\n ) : (\n <div className={`${dataCell} ${rowBorder} truncate text-[11px] text-slate-500`}>{row.lessonName}</div>\n )\n )}\n <div className={`${dataCell} ${rowBorder} text-xs font-semibold text-dark-blue-400`}>{row.question}</div>\n <div className={`${dataCell} ${rowBorder} flex shrink-0 gap-2`}>\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 {SortableHeader} from \"../../components/data/SortableHeader/SortableHeader\";\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 // 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 lessonId?: 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 pathwayId?: 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 // Opens the Leave Comment modal (see LeaveCommentModal) prepopulated for this student and the\n // badge/lesson their submissions here belong to. Whichever tab/group rendered this Table has\n // already narrowed `item.submissions` down to the relevant badge/lesson (see\n // useFilteredStudents' byBadge/byLesson), so the caller can read the badge/lesson straight off\n // the clicked item - no extra context parameter needed here.\n onComment?: (item: Item) => void\n onBadgeClick?: (badgeId: string) => void\n onLessonClick?: (lessonId: string) => void\n onPathwayClick?: (pathwayId: string) => 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 const showActions = !!props.onReview || !!props.onComment\n const actionsWidthClass = props.onReview && props.onComment ? \"w-64\" : \"w-36\"\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 return (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex items-center gap-4 px-4\">\n <SortableHeader label=\"Student Name\" sortKey=\"name\" sortConfig={sortConfig} onSort={requestSort} className=\"flex-1\" />\n <SortableHeader label=\"Files\" sortKey=\"submissionCount\" sortConfig={sortConfig} onSort={requestSort} className=\"w-16 shrink-0\" />\n {showActions && <div className={`${actionsWidthClass} 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 {showActions && (\n <div className={`flex ${actionsWidthClass} shrink-0 gap-2`}>\n {props.onReview && (\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 )}\n {props.onComment && (\n <button\n onClick={(e) => { e.stopPropagation(); props.onComment!(row) }}\n className=\"rounded-lg border border-slate-200 bg-white px-3 py-1.5 text-[11px] font-extrabold text-dark-blue-400 hover:bg-slate-50\"\n >\n Comment\n </button>\n )}\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\n items={row.submissions}\n hideBadge={props.hideBadge}\n hideLesson={props.hideLesson}\n hidePathway={props.hidePathway}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\n />\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 onBadgeClick?: (badgeId: string) => void\n onLessonClick?: (lessonId: string) => void\n onPathwayClick?: (pathwayId: string) => 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\n items={student.submissions}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\n />\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 { Modal, Checkbox } from \"@mantine/core\";\n\n/**\n * LeaveCommentStudentOption\n */\nexport type LeaveCommentStudentOption = { userId: string, name: string, email?: string }\n\n/**\n * LeaveCommentBadgeOption\n */\nexport type LeaveCommentBadgeOption = { badgeId: string, displayName: string }\n\n/**\n * LeaveCommentLessonOption\n */\nexport type LeaveCommentLessonOption = { lessonId: string, displayName: string }\n\n/**\n * LeaveCommentPayload\n */\nexport type LeaveCommentPayload = {\n userId: string\n commentText: string\n requireValidation: boolean\n badgeId?: string\n lessonId?: string\n}\n\n/**\n * LeaveCommentModalProps\n */\nexport type LeaveCommentModalProps = {\n opened: boolean\n onClose: () => void\n onSubmit: (comment: LeaveCommentPayload) => void\n students: LeaveCommentStudentOption[]\n badges: LeaveCommentBadgeOption[]\n lessons: LeaveCommentLessonOption[]\n // Prepopulation - e.g. from the File Locker's \"Comment\" button, which already knows exactly\n // which student and badge/lesson the file belongs to. The form stays fully editable either way.\n initialUserId?: string\n initialBadgeId?: string\n initialLessonId?: string\n // Hides the student picker entirely and fixes the recipient - used when the comment can only\n // ever be about one student (e.g. opened from that student's own File Locker row).\n hideStudentPicker?: boolean\n}\n\ntype Target = \"none\" | \"badge\" | \"lesson\"\n\nconst TARGETS: { value: Target, label: string }[] = [\n { value: \"none\", label: \"General\" },\n { value: \"badge\", label: \"Badge\" },\n { value: \"lesson\", label: \"Lesson\" },\n]\n\nconst inputClass = \"w-full 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/**\n * LeaveCommentModal. Shared by the Comment Center's \"Leave a comment\" action and the File Locker's\n * per-row \"Comment\" button (see FileLocker.tsx) - opened from File Locker it arrives prepopulated\n * with the student and badge/lesson a specific file belongs to; opened from the Comment Center it\n * starts blank. A comment that requires validation must be tied to a badge (mirrors study's\n * NewComment validation), so the checkbox only appears once a badge target is selected. Only calls\n * onSubmit with the assembled payload - the caller owns the actual API call, closing the modal, and\n * any refresh, exactly like every other page in this package.\n * @param props\n * @constructor\n */\nexport function LeaveCommentModal(props: LeaveCommentModalProps) {\n const [userId, setUserId] = React.useState(\"\")\n const [target, setTarget] = React.useState<Target>(\"none\")\n const [badgeId, setBadgeId] = React.useState(\"\")\n const [lessonId, setLessonId] = React.useState(\"\")\n const [commentText, setCommentText] = React.useState(\"\")\n const [requireValidation, setRequireValidation] = React.useState(false)\n\n // Reset (and prepopulate) every time the modal opens, rather than once on mount - the same\n // modal instance is reused across every row's \"Comment\" button, so each open needs a clean\n // slate seeded from that row's own context.\n React.useEffect(() => {\n if (!props.opened) return\n setUserId(props.initialUserId || \"\")\n setBadgeId(props.initialBadgeId || \"\")\n setLessonId(props.initialLessonId || \"\")\n setTarget(props.initialBadgeId ? \"badge\" : props.initialLessonId ? \"lesson\" : \"none\")\n setCommentText(\"\")\n setRequireValidation(false)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.opened, props.initialUserId, props.initialBadgeId, props.initialLessonId])\n\n const canSubmit = !!userId\n && !!commentText.trim()\n && (target !== \"badge\" || !!badgeId)\n && (target !== \"lesson\" || !!lessonId)\n\n const onSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (!canSubmit) return\n props.onSubmit({\n userId,\n commentText: commentText.trim(),\n requireValidation: target === \"badge\" && requireValidation,\n badgeId: target === \"badge\" ? badgeId : undefined,\n lessonId: target === \"lesson\" ? lessonId : undefined,\n })\n }\n\n return (\n <Modal\n opened={props.opened}\n onClose={props.onClose}\n title={<span className=\"text-base font-extrabold text-dark-blue-400\">Leave a Comment</span>}\n size=\"md\"\n centered\n >\n <form onSubmit={onSubmit} className=\"flex flex-col gap-3.5\">\n {!props.hideStudentPicker && (\n <div>\n <label className=\"mb-1 block text-xs font-bold text-slate-500\">Student</label>\n <select value={userId} onChange={(e) => setUserId(e.target.value)} className={inputClass}>\n <option value=\"\">Select a student</option>\n {props.students.map((s) => (\n <option key={s.userId} value={s.userId}>{s.email ? `${s.name} (${s.email})` : s.name}</option>\n ))}\n </select>\n </div>\n )}\n\n <div>\n <label className=\"mb-1 block text-xs font-bold text-slate-500\">Leave this comment on</label>\n <div className=\"flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1\">\n {TARGETS.map((t) => (\n <button\n key={t.value}\n type=\"button\"\n onClick={() => setTarget(t.value)}\n className={`rounded-lg px-4 py-2 text-xs font-bold ${target === 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 </div>\n\n {target === \"badge\" && (\n <div>\n <label className=\"mb-1 block text-xs font-bold text-slate-500\">Badge</label>\n <select value={badgeId} onChange={(e) => setBadgeId(e.target.value)} className={inputClass}>\n <option value=\"\">Select a badge</option>\n {props.badges.map((b) => <option key={b.badgeId} value={b.badgeId}>{b.displayName}</option>)}\n </select>\n </div>\n )}\n\n {target === \"lesson\" && (\n <div>\n <label className=\"mb-1 block text-xs font-bold text-slate-500\">Lesson</label>\n <select value={lessonId} onChange={(e) => setLessonId(e.target.value)} className={inputClass}>\n <option value=\"\">Select a lesson</option>\n {props.lessons.map((l) => <option key={l.lessonId} value={l.lessonId}>{l.displayName}</option>)}\n </select>\n </div>\n )}\n\n <div>\n <label className=\"mb-1 block text-xs font-bold text-slate-500\">Comment</label>\n <textarea\n value={commentText}\n onChange={(e) => setCommentText(e.target.value)}\n placeholder=\"Leave a comment...\"\n rows={4}\n className={`${inputClass} resize-none`}\n />\n </div>\n\n {target === \"badge\" && !!badgeId && (\n <Checkbox\n checked={requireValidation}\n onChange={(e) => setRequireValidation(e.currentTarget.checked)}\n label=\"Requires validation - unsubmits this badge until the comment is resolved\"\n />\n )}\n\n <button\n type=\"submit\"\n disabled={!canSubmit}\n className=\"mt-1 rounded-lg bg-dark-blue-400 px-4 py-2.5 text-xs font-bold text-white disabled:opacity-40\"\n >\n Leave Comment\n </button>\n </form>\n </Modal>\n );\n}\n","import * as React from 'react';\nimport {IconChevronDown, IconChevronLeft, IconSearch} 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\"\nimport {LeaveCommentModal, LeaveCommentPayload} from \"../../components/modals/LeaveCommentModal/LeaveCommentModal\";\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 onBadgeClick?: (badgeId: string) => void;\n onLessonClick?: (lessonId: string) => void;\n onPathwayClick?: (pathwayId: string) => void;\n // Renders a \"Comment\" button beside every \"Review Submission\" button. Clicking it opens\n // FileLocker's own LeaveCommentModal, prepopulated for the clicked student and the badge/lesson\n // their (already tab/group-scoped) submissions belong to - onComment only fires once the\n // teacher actually submits that modal, with the assembled payload; the caller owns the API call.\n onComment?: (comment: LeaveCommentPayload) => 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\n// The search box now cross-matches every tab against student name, pathway, badge, and lesson\n// name at once - not just whichever field happens to be that tab's own primary grouping key - so\n// one placeholder describes all 4 tabs' behavior identically.\nconst SEARCH_PLACEHOLDER = \"Search by student, pathway, badge, or lesson\"\n\nconst countFiles = (students: Item[]) => students.reduce((acc, s) => acc + (s.submissions?.length || 0), 0)\n\n// Cross-field match used by every tab: a student matches if their own name matches, or if any of\n// their (already group-scoped) submissions' badge/lesson/pathway name matches. Used two ways: to\n// decide whether a whole group (pathway/badge/lesson) should show at all, and to narrow which\n// students appear inside a group that only matches because of one of its members, not its own name.\nconst matchesSearch = (student: Item, term: string): boolean => {\n if (!term) return true\n if (student.name.toLowerCase().includes(term)) return true\n return (student.submissions || []).some((sub) =>\n sub.badgeName?.toLowerCase().includes(term) ||\n sub.lessonName?.toLowerCase().includes(term) ||\n sub.pathwayName?.toLowerCase().includes(term)\n )\n}\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, onTitleClick?: () => void, 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 {props.onTitleClick ? (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); props.onTitleClick!() }}\n className=\"text-left text-sm font-extrabold text-sky-blue-400 hover:underline\"\n >\n {props.title}\n </button>\n ) : (\n <div className=\"text-sm font-extrabold text-dark-blue-400\">{props.title}</div>\n )}\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 search: string\n onReview: (item: Item, list: Item[], context?: string) => void\n onComment?: (item: Item) => void\n onBadgeClick?: (badgeId: string) => void\n onLessonClick?: (lessonId: string) => void\n onPathwayClick?: (pathwayId: 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. Search cross-matches: a pathway whose own title matches shows\n * every one of its students unfiltered (today's behavior); a pathway that only matches because one\n * of its students/submissions does shows just that narrowed subset instead; a pathway matching\n * neither its own name nor any member is hidden entirely once a search term is active.\n */\nconst PathwayGroups = (props: GroupsProps & {pathways: NonNullable<FileLockerProps[\"pathways\"]>, badges: NonNullable<FileLockerProps[\"badges\"]>}) => {\n const {byPathway} = useFilteredStudents(props.students)\n const term = props.search.trim().toLowerCase()\n const groups = props.pathways\n .map((p) => {\n const base = byPathway(p.pathwayId, props.badges)\n const ownNameMatches = !term || p.title.toLowerCase().includes(term)\n const filtered = ownNameMatches ? base : base.filter((s) => matchesSearch(s, term))\n return {pathway: p, filtered}\n })\n .filter((g) => !term || g.filtered.length > 0)\n\n if (term && groups.length === 0) {\n return <p className=\"text-sm text-slate-400\">No matching entries.</p>\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n {groups.map(({pathway: p, filtered}) => (\n <GroupCard\n key={p.pathwayId}\n title={p.title}\n description={p.description}\n count={countFiles(filtered)}\n onTitleClick={props.onPathwayClick ? () => props.onPathwayClick!(p.pathwayId) : undefined}\n >\n <Table\n loading={props.loading}\n items={filtered}\n hidePathway\n onReview={(item) => props.onReview(item, filtered, p.title)}\n onComment={props.onComment}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n />\n </GroupCard>\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. Same cross-match/\n * narrow/hide rule as PathwayGroups, keyed on the badge's own name instead.\n */\nconst BadgeGroups = (props: GroupsProps & {badges: NonNullable<FileLockerProps[\"badges\"]>, pathwayNameForBadge: Record<string, string>}) => {\n const {byBadge} = useFilteredStudents(props.students)\n const term = props.search.trim().toLowerCase()\n const groups = props.badges\n .map((b) => {\n const base = byBadge(b.badgeId)\n const ownNameMatches = !term || b.displayName.toLowerCase().includes(term)\n const filtered = ownNameMatches ? base : base.filter((s) => matchesSearch(s, term))\n return {badge: b, filtered}\n })\n .filter((g) => !term || g.filtered.length > 0)\n\n if (term && groups.length === 0) {\n return <p className=\"text-sm text-slate-400\">No matching entries.</p>\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n {groups.map(({badge: b, filtered}) => {\n const pathwayTitle = props.pathwayNameForBadge[b.badgeId]\n return (\n <GroupCard\n key={b.badgeId}\n title={b.displayName}\n description={pathwayTitle ? `${pathwayTitle} pathway` : undefined}\n count={countFiles(filtered)}\n onTitleClick={props.onBadgeClick ? () => props.onBadgeClick!(b.badgeId) : undefined}\n >\n <Table\n loading={props.loading}\n items={filtered}\n hideBadge\n hidePathway\n onReview={(item) => props.onReview(item, filtered, b.displayName)}\n onComment={props.onComment}\n onLessonClick={props.onLessonClick}\n />\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. Same cross-match/narrow/\n * hide rule as the other two, keyed on the lesson's own name.\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 const term = props.search.trim().toLowerCase()\n const groups = props.lessons\n .map((l) => {\n const base = byLesson(l.lessonName)\n const ownNameMatches = !term || l.lessonName.toLowerCase().includes(term)\n const filtered = ownNameMatches ? base : base.filter((s) => matchesSearch(s, term))\n return {lesson: l, filtered}\n })\n .filter((g) => !term || g.filtered.length > 0)\n\n if (term && groups.length === 0) {\n return <p className=\"text-sm text-slate-400\">No matching entries.</p>\n }\n\n return (\n <div className=\"flex flex-col gap-3\">\n {groups.map(({lesson: l, filtered}) => {\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\n key={l.lessonId}\n title={l.lessonName}\n description={description}\n count={countFiles(filtered)}\n onTitleClick={props.onLessonClick ? () => props.onLessonClick!(l.lessonId) : undefined}\n >\n <Table loading={props.loading} items={filtered} hideBadge hideLesson hidePathway onReview={(item) => props.onReview(item, filtered, l.lessonName)} onComment={props.onComment}/>\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 const [search, setSearch] = React.useState(\"\")\n const searchLower = search.trim().toLowerCase()\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 // Same derivation as pathwayNameForBadge, just keeping the id instead of the title - needed to\n // wire a submission's pathway name up as a real click target (navigate to that pathway), not\n // just a display string.\n const pathwayIdForBadge = 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.pathwayId\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) => ({\n ...sub,\n pathwayName: pathwayNameForBadge[sub.badgeId] || \"\",\n pathwayId: pathwayIdForBadge[sub.badgeId],\n })),\n }))\n }, [props.students, pathwayNameForBadge, pathwayIdForBadge])\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 // The single search box cross-matches every tab against student name, pathway, badge, and\n // lesson name at once. On \"By student\" this directly narrows the roster (matchesSearch checks\n // the student's own name plus every field on their submissions). The 3 grouped tabs need a\n // richer rule than a simple filter - handled inside PathwayGroups/BadgeGroups/LessonGroups\n // themselves, which is why they receive the full, unfiltered catalog plus the raw search term\n // rather than a pre-filtered array (each group's own name can independently match even when a\n // pre-filter on the catalog wouldn't have caught it, and a group matching only via one member\n // needs its nested table narrowed too, not just a yes/no on the catalog item).\n const searchedStudents = React.useMemo(\n () => searchLower ? enrichedStudents.filter((s) => matchesSearch(s, searchLower)) : enrichedStudents,\n [enrichedStudents, searchLower]\n )\n\n const [commenting, setCommenting] = React.useState<{userId: string, badgeId?: string, lessonId?: string} | null>(null)\n\n const onReview = (item: Item, list: Item[], context?: string) => setReviewing({student: item, list, context})\n // Whichever tab/group rendered the clicked row has already narrowed its submissions down to the\n // relevant badge/lesson (see useFilteredStudents' byBadge/byLesson) - or, on \"By student\", left\n // every submission in place, in which case the first one is a reasonable default and the modal's\n // own target selector still lets the teacher change it.\n const onCommentClick = (item: Item) => {\n const sub = item.submissions?.[0]\n setCommenting({userId: item.userId, badgeId: sub?.badgeId, lessonId: sub?.lessonId})\n }\n const onCommentSubmit = (comment: LeaveCommentPayload) => {\n props.onComment?.(comment)\n setCommenting(null)\n }\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 onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\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 && (\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 value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={SEARCH_PLACEHOLDER}\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\n {!props.trial && tab === \"students\" && (\n <Table\n loading={props.loading}\n items={searchedStudents}\n onReview={(item) => onReview(item, searchedStudents)}\n onComment={onCommentClick}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\n />\n )}\n {!props.trial && tab === \"pathways\" && (\n <PathwayGroups\n students={enrichedStudents}\n loading={props.loading}\n search={search}\n pathways={props.pathways || []}\n badges={props.badges || []}\n onReview={onReview}\n onComment={onCommentClick}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\n />\n )}\n {!props.trial && tab === \"badges\" && (\n <BadgeGroups\n students={enrichedStudents}\n loading={props.loading}\n search={search}\n badges={props.badges || []}\n pathwayNameForBadge={pathwayNameForBadge}\n onReview={onReview}\n onComment={onCommentClick}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\n />\n )}\n {!props.trial && tab === \"lessons\" && (\n <LessonGroups\n students={enrichedStudents}\n loading={props.loading}\n search={search}\n lessons={props.lessons}\n badgeForLesson={badgeForLesson}\n pathwayNameForBadge={pathwayNameForBadge}\n onReview={onReview}\n onComment={onCommentClick}\n onBadgeClick={props.onBadgeClick}\n onLessonClick={props.onLessonClick}\n onPathwayClick={props.onPathwayClick}\n />\n )}\n\n <LeaveCommentModal\n opened={!!commenting}\n onClose={() => setCommenting(null)}\n onSubmit={onCommentSubmit}\n hideStudentPicker\n students={[]}\n badges={props.badges?.map((b) => ({badgeId: b.badgeId, displayName: b.displayName})) || []}\n lessons={props.lessons.map((l) => ({lessonId: l.lessonId, displayName: l.lessonName}))}\n initialUserId={commenting?.userId}\n initialBadgeId={commenting?.badgeId}\n initialLessonId={commenting?.lessonId}\n />\n </div>\n )\n}\n","import * as React from 'react';\nimport {IconCheck} from \"@tabler/icons\";\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\nimport {\n LeaveCommentModal,\n LeaveCommentBadgeOption,\n LeaveCommentLessonOption,\n LeaveCommentPayload,\n LeaveCommentStudentOption,\n} from \"../../components/modals/LeaveCommentModal/LeaveCommentModal\";\n\n/**\n * CommentCenterClass\n */\nexport type CommentCenterClass = { classId: string, name: string, active: boolean }\n\n/**\n * CommentCenterItem\n */\nexport type CommentCenterItem = {\n commentId: string\n recipientId: string\n recipientName: string\n authorId: string\n authorName?: string\n badgeId?: string\n badgeName?: string\n lessonId?: string\n lessonName?: string\n commentText: string\n requireValidation: boolean\n resolvedAt?: string\n createdAt: string\n}\n\n/**\n * CommentCenterProps\n */\nexport type CommentCenterProps = {\n loading: boolean\n classes: CommentCenterClass[]\n classId: string\n comments: CommentCenterItem[]\n students: LeaveCommentStudentOption[]\n badges: LeaveCommentBadgeOption[]\n lessons: LeaveCommentLessonOption[]\n onClassChange: (classId: string) => void\n onResolve: (commentId: string) => void\n onLeaveComment: (comment: LeaveCommentPayload) => void\n}\n\ntype Tab = \"students\" | \"badges\" | \"lessons\"\n\nconst TABS: {value: Tab, label: string}[] = [\n {value: \"students\", label: \"By student\"},\n {value: \"badges\", label: \"By badge\"},\n {value: \"lessons\", label: \"By lesson\"},\n]\n\ntype Group = {key: string, title: string, items: CommentCenterItem[]}\n\n// Preserves first-seen order (not alphabetical) so the most recently-active student/badge/lesson\n// tends to surface first, since `comments` already arrives newest-first (see study's\n// queryCommentsByOrganizationSpec: `OrderBy(\"created_at desc\")`).\nconst groupBy = (items: CommentCenterItem[], keyOf: (i: CommentCenterItem) => string | undefined, titleOf: (i: CommentCenterItem) => string): Group[] => {\n const order: string[] = []\n const map = new Map<string, Group>()\n items.forEach((item) => {\n const key = keyOf(item)\n if (!key) return\n if (!map.has(key)) {\n map.set(key, {key, title: titleOf(item), items: []})\n order.push(key)\n }\n map.get(key)!.items.push(item)\n })\n return order.map((key) => map.get(key)!)\n}\n\n/**\n * CommentCenter. Org-wide view of every comment left across the organization - grouped by student,\n * badge, or lesson via the same pill-tab selector and class dropdown FileLocker uses - with the\n * ability to resolve any comment that requires validation (see Comment.RequireValidation on the\n * backend) and to leave a brand new comment for any student via LeaveCommentModal.\n * @param props\n * @constructor\n */\nexport const CommentCenter = (props: CommentCenterProps) => {\n const [tab, setTab] = React.useState<Tab>(\"students\")\n const [leavingComment, setLeavingComment] = React.useState(false)\n\n const groups = React.useMemo(() => {\n if (tab === \"students\") return groupBy(props.comments, (i) => i.recipientId, (i) => i.recipientName)\n if (tab === \"badges\") return groupBy(props.comments, (i) => i.badgeId, (i) => i.badgeName || \"Badge\")\n return groupBy(props.comments, (i) => i.lessonId, (i) => i.lessonName || \"Lesson\")\n }, [props.comments, tab])\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 <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">Comment Center</h1>\n <p className=\"mt-1 text-sm text-slate-500\">Every comment left across your organization.</p>\n </div>\n <button\n onClick={() => setLeavingComment(true)}\n className=\"rounded-lg bg-dark-blue-400 px-4 py-2.5 text-xs font-bold text-white\"\n >\n Leave a Comment\n </button>\n </div>\n\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((c) => <option key={c.classId} value={c.classId}>{c.name}</option>)}\n </select>\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 {props.comments.length === 0 ? (\n <PlaceholderBanner\n title=\"No comments to display\"\n description=\"Nothing has been left for this organization yet.\"\n loading={props.loading}\n icon=\"thinking\"\n />\n ) : (\n <div className=\"flex flex-col gap-4\">\n <div className=\"grid grid-cols-[1.3fr_1.3fr_2fr_1fr_1fr] items-center gap-3 px-5 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">\n <div>{tab === \"students\" ? \"Badge / Lesson\" : \"Student\"}</div>\n <div>Left By</div>\n <div>Comment</div>\n <div className=\"text-center\">Flag</div>\n <div className=\"text-center\">Status</div>\n </div>\n\n {groups.map((group) => (\n <div key={group.key} className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div className=\"border-b border-slate-100 bg-slate-50/60 px-5 py-2.5 text-xs font-extrabold text-dark-blue-400\">\n {group.title}\n </div>\n {group.items.map((item, i) => (\n <div\n key={item.commentId}\n className={`grid grid-cols-[1.3fr_1.3fr_2fr_1fr_1fr] items-center gap-3 px-5 py-3.5 ${i < group.items.length - 1 ? \"border-b border-slate-100\" : \"\"}`}\n >\n <div className=\"truncate text-xs font-bold text-dark-blue-400\">\n {tab === \"students\" ? (item.badgeName || item.lessonName || \"General\") : item.recipientName}\n </div>\n <div className=\"truncate text-[11px] text-slate-500\">{item.authorName || \"—\"}</div>\n <div className=\"text-xs text-slate-600\">{item.commentText}</div>\n <div className=\"flex justify-center\">\n {item.requireValidation && (\n <span className=\"rounded-full bg-gold-400/15 px-2 py-0.5 text-[10px] font-bold text-dark-blue-400\">\n Requires validation\n </span>\n )}\n </div>\n <div className=\"flex justify-center\">\n {!item.requireValidation ? (\n <span className=\"text-[11px] text-slate-400\">—</span>\n ) : item.resolvedAt ? (\n <IconCheck size={16} stroke={3} className=\"text-mint-400\" />\n ) : (\n <button\n onClick={() => props.onResolve(item.commentId)}\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 Resolve\n </button>\n )}\n </div>\n </div>\n ))}\n </div>\n ))}\n </div>\n )}\n\n <LeaveCommentModal\n opened={leavingComment}\n onClose={() => setLeavingComment(false)}\n onSubmit={(comment) => { props.onLeaveComment(comment); setLeavingComment(false) }}\n students={props.students}\n badges={props.badges}\n lessons={props.lessons}\n />\n </div>\n )\n}\n","import * as React from 'react';\nimport {IconCheck} from \"@tabler/icons\";\nimport {Checkbox} from \"@mantine/core\";\nimport {PlaceholderBanner} from \"../../components/banners/PlaceholderBanner/PlaceholderBanner\";\n\n/**\n * ValidationCenterClass\n */\nexport type ValidationCenterClass = { classId: string, name: string, active: boolean }\n\n/**\n * ValidationCenterBadge\n */\nexport type ValidationCenterBadge = { badgeId: string, displayName: string }\n\n/**\n * ValidationCenterStudent\n */\nexport type ValidationCenterStudent = { userId: string, name: string, avatar?: string, hasCredit: boolean }\n\n/**\n * ValidationCenterProps\n */\nexport type ValidationCenterProps = {\n loading: boolean\n classes: ValidationCenterClass[]\n classId: string\n badges: ValidationCenterBadge[]\n badgeId: string\n students: ValidationCenterStudent[]\n onClassChange: (classId: string) => void\n onBadgeChange: (badgeId: string) => void\n // Validates credit for every currently-checked student against the currently selected badge.\n // The caller owns the actual API call and, per spec, reloads the page afterward to reflect the\n // new state - this component only ever hands back the selected student ids.\n onSubmit: (userIds: string[]) => void\n}\n\nconst initials = (name: string) => name.split(\" \").map(w => w[0]).filter(Boolean).slice(0, 2).join(\"\").toUpperCase()\n\n/**\n * ValidationCenter. Lets an educator directly credit one or more students for a badge - superseding\n * lesson/criteria requirements and any outstanding comments, exactly like study's\n * BadgeActivity.Validate() (used via the bulk :validate endpoint). A student who already has credit\n * shows a checkmark instead of a checkbox, since re-validating an already-finished badge is a no-op\n * on the backend (Validate guards on FinishedAt != nil just like Submit).\n * @param props\n * @constructor\n */\nexport const ValidationCenter = (props: ValidationCenterProps) => {\n const [selected, setSelected] = React.useState<Record<string, boolean>>({})\n\n // Clear selections whenever the visible roster changes (a different class or badge) so a stale\n // selection from a previous badge is never silently carried into this one's submission.\n React.useEffect(() => {\n setSelected({})\n }, [props.classId, props.badgeId])\n\n const toggle = (userId: string, checked: boolean) => setSelected((prev) => ({...prev, [userId]: checked}))\n const selectedIds = Object.keys(selected).filter((userId) => selected[userId])\n const eligible = props.students.filter((s) => !s.hasCredit)\n\n const onSelectAll = (checked: boolean) => {\n const next: Record<string, boolean> = {}\n if (checked) eligible.forEach((s) => { next[s.userId] = true })\n setSelected(next)\n }\n\n return (\n <div className=\"flex w-full flex-col gap-5 px-4 py-8\">\n <div>\n <h1 className=\"text-2xl font-extrabold tracking-tight text-dark-blue-400\">Validation Center</h1>\n <p className=\"mt-1 text-sm text-slate-500\">Directly credit students for a badge</p>\n </div>\n\n <div className=\"flex flex-wrap gap-3\">\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((c) => <option key={c.classId} value={c.classId}>{c.name}</option>)}\n </select>\n\n <select\n value={props.badgeId}\n onChange={(e) => props.onBadgeChange(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 badge</option>\n {props.badges.map((b) => <option key={b.badgeId} value={b.badgeId}>{b.displayName}</option>)}\n </select>\n </div>\n\n {!props.badgeId ? (\n <PlaceholderBanner\n title=\"Select a badge\"\n description=\"Choose a badge above to see which students already have credit and give it to the rest.\"\n loading={props.loading}\n icon=\"badges\"\n />\n ) : props.students.length === 0 ? (\n <PlaceholderBanner\n title=\"No students to display\"\n description=\"There are no students in this class yet.\"\n loading={props.loading}\n icon=\"groups\"\n />\n ) : (\n <div className=\"overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm\">\n <div className=\"grid grid-cols-[2.2fr_1fr] items-center gap-3 border-b border-slate-100 px-5 py-3\">\n <div className=\"text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">Student</div>\n <div className=\"flex items-center justify-center gap-2 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400\">\n <Checkbox\n checked={eligible.length > 0 && selectedIds.length === eligible.length}\n indeterminate={selectedIds.length > 0 && selectedIds.length < eligible.length}\n onChange={(e) => onSelectAll(e.currentTarget.checked)}\n disabled={eligible.length === 0}\n />\n Give Credit\n </div>\n </div>\n {props.students.map((row, i) => (\n <div\n key={row.userId}\n className={`grid grid-cols-[2.2fr_1fr] items-center gap-3 px-5 py-3.5 ${i < props.students.length - 1 ? \"border-b border-slate-100\" : \"\"}`}\n >\n <div className=\"flex min-w-0 items-center gap-2.5\">\n {row.avatar\n ? <img className=\"h-8 w-8 shrink-0 rounded-full object-cover\" src={row.avatar} alt=\"\" />\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(row.name)}\n </div>}\n <div className=\"truncate text-xs font-bold text-dark-blue-400\">{row.name}</div>\n </div>\n <div className=\"flex justify-center\">\n {row.hasCredit\n ? <IconCheck size={18} stroke={3} className=\"text-mint-400\" />\n : <Checkbox checked={!!selected[row.userId]} onChange={(e) => toggle(row.userId, e.currentTarget.checked)} />}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {props.badgeId && props.students.length > 0 && (\n <div className=\"flex justify-end\">\n <button\n onClick={() => props.onSubmit(selectedIds)}\n disabled={selectedIds.length === 0}\n className=\"rounded-lg bg-dark-blue-400 px-5 py-2.5 text-xs font-bold text-white disabled:opacity-40\"\n >\n Validate {selectedIds.length > 0 ? `${selectedIds.length} ` : \"\"}Student{selectedIds.length === 1 ? \"\" : \"s\"}\n </button>\n </div>\n )}\n </div>\n )\n}\n"],"names":["React","Avatar","useState","Link","IconChevronRight","IconHome2","IconGauge","IconCategory2","IconRoute","IconAlbum","IconLambda","IconClipboard","IconMessageCircle","IconClipboardCheck","IconBuilding","__spreadProps","__spreadValues","IconVideo","IconSwitchHorizontal","IconLogout","useStyles","createStyles","Modal","Center","Loader","Container","Group","Button","Title","Text","IconBooks","IconBackpack","SplitButton","IconClipboardCopy","IconTableExport","Image","IconCaretDown","IconCaretUp","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","showNotification","Dropzone","MIME_TYPES","IconCloudUpload","Divider","TextInput","Tooltip","ActionIcon","IconInfoCircle","IconPlaylistAdd","AnswerTable","AnswerStack","Chart","QuestionStack","IconPointer","IconX","SimpleGrid","Badge","Card","UnstyledButton","__objRest","Overlay","useUncontrolled","ThemeIcon","Checkbox","IconScribble","IconSchool","IconPodium","IconBriefcase","IconPresentation","IconNews","IconTools","Autocomplete","createEmotionCache","MantineProvider","NotificationsProvider","ModalsProvider","AppShell","IconBrandInstagram","IconBrandLinkedin","IconBrandFacebook","account","_a","BadgeStack","initials","FileStack","IconChevronLeft"],"mappings":"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"}
|