@local-civics/mgmt-ui 0.1.231 → 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.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { useState, useMemo } from 'react';
3
- import { IconChevronRight, IconVideo, IconSwitchHorizontal, IconLogout, IconHome2, IconGauge, IconCategory2, IconRoute, IconAlbum, IconLambda, IconClipboard, IconBuilding, IconBooks, IconBackpack, IconClipboardCopy, IconTableExport, IconCaretDown, IconCaretUp, IconChevronDown, IconArrowLeft, IconSearch, IconCheck, IconTrash, IconPlus, IconLink, IconDownload, IconCloudUpload, IconInfoCircle, IconPlaylistAdd, IconPointer, IconX, IconScribble, IconSchool, IconPodium, IconBriefcase, IconPresentation, IconNews, IconTools, IconBrandInstagram, IconBrandLinkedin, IconBrandFacebook, IconChevronLeft } from '@tabler/icons';
3
+ import { IconChevronRight, IconVideo, IconSwitchHorizontal, IconLogout, IconHome2, IconGauge, IconCategory2, IconRoute, IconAlbum, IconLambda, IconClipboard, IconMessageCircle, IconClipboardCheck, IconBuilding, IconBooks, IconBackpack, IconClipboardCopy, IconTableExport, IconCaretDown, IconCaretUp, IconChevronDown, IconArrowLeft, IconSearch, IconCheck, IconTrash, IconPlus, IconLink, IconDownload, IconCloudUpload, IconInfoCircle, IconPlaylistAdd, IconPointer, IconX, IconScribble, IconSchool, IconPodium, IconBriefcase, IconPresentation, IconNews, IconTools, IconBrandInstagram, IconBrandLinkedin, IconBrandFacebook, IconChevronLeft } from '@tabler/icons';
4
4
  import { Avatar, createStyles, Modal, Center, Loader, Container, Group, Button, Title, Text, Image, Drawer, Divider, TextInput, Tooltip, ActionIcon, SimpleGrid, Badge as Badge$1, Card, UnstyledButton, Overlay, Stack as Stack$5, ThemeIcon, Checkbox, Autocomplete, createEmotionCache, MantineProvider, AppShell } from '@mantine/core';
5
5
  import { Link } from 'react-router-dom';
6
6
  import 'external-svg-loader';
@@ -40,7 +40,7 @@ function styleInject(css, ref) {
40
40
  }
41
41
  }
42
42
 
43
- var css_248z = "@font-face{font-family:ProximaNova;src:url(https://cdn.localcivics.io/fonts/ProximaNova.otf) format(\"opentype\")}@font-face{font-family:ProximaNova;font-weight:700;src:url(https://cdn.localcivics.io/fonts/ProximaNovaBold.otf) format(\"opentype\")}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.\\!relative{position:relative!important}.left-3{left:.75rem}.top-1\\/2{top:50%}.left-3\\.5{left:.875rem}.bottom-\\[-20px\\]{bottom:-20px}.left-1\\/2{left:50%}.m-3{margin:.75rem}.mt-0\\.5{margin-top:.125rem}.mt-0{margin-top:0}.mt-6{margin-top:1.5rem}.mt-2{margin-top:.5rem}.mt-1{margin-top:.25rem}.mt-1\\.5{margin-top:.375rem}.-ml-2{margin-left:-.5rem}.mt-4{margin-top:1rem}.mt-3{margin-top:.75rem}.mb-8{margin-bottom:2rem}.ml-\\[29px\\]{margin-left:29px}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-full{height:100%}.h-9{height:2.25rem}.h-8{height:2rem}.h-7{height:1.75rem}.h-12{height:3rem}.h-\\[300px\\]{height:300px}.h-screen{height:100vh}.h-14{height:3.5rem}.h-16{height:4rem}.h-28{height:7rem}.h-\\[30px\\]{height:30px}.h-\\[400px\\]{height:400px}.max-h-\\[70vh\\]{max-height:70vh}.w-10{width:2.5rem}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-fit{width:-moz-fit-content;width:fit-content}.w-36{width:9rem}.w-28{width:7rem}.w-4{width:1rem}.w-9{width:2.25rem}.w-\\[296px\\]{width:296px}.w-40{width:10rem}.w-24{width:6rem}.w-56{width:14rem}.w-8{width:2rem}.w-7{width:1.75rem}.w-64{width:16rem}.w-12{width:3rem}.w-16{width:4rem}.w-\\[440px\\]{width:440px}.w-20{width:5rem}.w-\\[250px\\]{width:250px}.w-screen{width:100vw}.w-\\[500px\\]{width:500px}.w-14{width:3.5rem}.w-\\[230px\\]{width:230px}.w-\\[30px\\]{width:30px}.min-w-0{min-width:0}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.max-w-\\[460px\\]{max-width:460px}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y:-50%}.-translate-x-1\\/2,.-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\\/2{--tw-translate-x:-50%}.rotate-180{--tw-rotate:180deg}.rotate-180,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1\\.2fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1.2fr 1fr .6fr}.grid-cols-\\[1\\.5fr_2fr_1fr_0\\.6fr\\]{grid-template-columns:1.5fr 2fr 1fr .6fr}.grid-cols-\\[1\\.5fr_2fr_0\\.8fr\\]{grid-template-columns:1.5fr 2fr .8fr}.grid-cols-\\[1fr_3fr\\]{grid-template-columns:1fr 3fr}.grid-cols-\\[1fr_1fr_2fr_0\\.8fr\\]{grid-template-columns:1fr 1fr 2fr .8fr}.grid-cols-\\[2fr_1fr\\]{grid-template-columns:2fr 1fr}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1fr .6fr}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-\\[18px\\]{gap:18px}.gap-5{gap:1.25rem}.gap-4{gap:1rem}.gap-1{gap:.25rem}.gap-3{gap:.75rem}.gap-2{gap:.5rem}.gap-1\\.5{gap:.375rem}.gap-2\\.5{gap:.625rem}.gap-3\\.5{gap:.875rem}.gap-0\\.5{gap:.125rem}.gap-0{gap:0}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-y-4{row-gap:1rem}.space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.-space-y-\\[3px\\]>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(-3px*var(--tw-space-y-reverse));margin-top:calc(-3px*(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-none{overscroll-behavior:none}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-2xl{border-radius:1rem}.rounded-\\[10px\\]{border-radius:10px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:1.5rem}.rounded-\\[8px\\]{border-radius:8px}.border{border-width:1px}.border-2{border-width:2px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-l{border-left-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-sky-blue-400\\/40{border-color:rgba(59,208,242,.4)}.border-sky-blue-400\\/30{border-color:rgba(59,208,242,.3)}.border-mint-400\\/30{border-color:rgba(30,226,175,.3)}.border-gold-400\\/30{border-color:rgba(255,212,77,.3)}.border-transparent{border-color:transparent}.border-l-sky-blue-400{--tw-border-opacity:1;border-left-color:rgb(59 208 242/var(--tw-border-opacity))}.border-l-mint-400{--tw-border-opacity:1;border-left-color:rgb(30 226 175/var(--tw-border-opacity))}.border-l-gold-400{--tw-border-opacity:1;border-left-color:rgb(255 212 77/var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-sky-blue-400\\/20{background-color:rgba(59,208,242,.2)}.bg-mint-100{--tw-bg-opacity:1;background-color:rgb(208 251 240/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-gold-100{--tw-bg-opacity:1;background-color:rgb(255 248 214/var(--tw-bg-opacity))}.bg-mint-400\\/20{background-color:rgba(30,226,175,.2)}.bg-transparent{background-color:transparent}.bg-dark-blue-400{--tw-bg-opacity:1;background-color:rgb(35 42 58/var(--tw-bg-opacity))}.bg-white\\/90{background-color:hsla(0,0%,100%,.9)}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-slate-50\\/60{background-color:rgba(248,250,252,.6)}.bg-sky-blue-400\\/15{background-color:rgba(59,208,242,.15)}.bg-gold-400\\/15{background-color:rgba(255,212,77,.15)}.bg-mint-400\\/15{background-color:rgba(30,226,175,.15)}.bg-sky-blue-400\\/25{background-color:rgba(59,208,242,.25)}.bg-mint-400\\/25{background-color:rgba(30,226,175,.25)}.bg-gold-400\\/25{background-color:rgba(255,212,77,.25)}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-sky-blue-400{--tw-gradient-from:#3bd0f2;--tw-gradient-to:rgba(59,208,242,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-mint-400{--tw-gradient-from:#1ee2af;--tw-gradient-to:rgba(30,226,175,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-gold-400{--tw-gradient-from:#ffd44d;--tw-gradient-to:rgba(255,212,77,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-dark-blue-600{--tw-gradient-from:#0a0f2e;--tw-gradient-to:rgba(10,15,46,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-sky-blue-400\\/15{--tw-gradient-from:rgba(59,208,242,.15);--tw-gradient-to:rgba(59,208,242,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-dark-blue-400{--tw-gradient-to:rgba(35,42,58,0);--tw-gradient-stops:var(--tw-gradient-from),#232a3a,var(--tw-gradient-to)}.to-dark-blue-400{--tw-gradient-to:#232a3a}.to-\\[\\#f5c300\\]{--tw-gradient-to:#f5c300}.to-sky-blue-400{--tw-gradient-to:#3bd0f2}.to-mint-400\\/15{--tw-gradient-to:rgba(30,226,175,.15)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-4{padding:1rem}.p-8{padding:2rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-3{padding:.75rem}.p-2\\.5{padding:.625rem}.p-2{padding:.5rem}.px-\\[22px\\]{padding-left:22px;padding-right:22px}.py-\\[18px\\]{padding-bottom:18px;padding-top:18px}.px-4{padding-left:1rem;padding-right:1rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3\\.5{padding-left:.875rem;padding-right:.875rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}.py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.py-4{padding-bottom:1rem;padding-top:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pl-9{padding-left:2.25rem}.pr-4{padding-right:1rem}.pl-10{padding-left:2.5rem}.pb-2{padding-bottom:.5rem}.pr-1{padding-right:.25rem}.pl-4{padding-left:1rem}.pt-0\\.5{padding-top:.125rem}.pt-0{padding-top:0}.pb-12{padding-bottom:3rem}.pl-2\\.5{padding-left:.625rem}.pl-2{padding-left:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-proxima{font-family:ProximaNova}.text-\\[15\\.5px\\]{font-size:15.5px}.text-xs{font-size:.75rem;line-height:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-\\[10px\\]{font-size:10px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-\\[10\\.5px\\]{font-size:10.5px}.text-\\[11px\\]{font-size:11px}.text-\\[28px\\]{font-size:28px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-base{font-size:1rem;line-height:1.5rem}.text-\\[11\\.5px\\]{font-size:11.5px}.text-3xl{font-size:1.875rem;line-height:2.25rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-black{font-weight:900}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-dark-blue-400{--tw-text-opacity:1;color:rgb(35 42 58/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-sky-blue-400{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-mint-400{--tw-text-opacity:1;color:rgb(30 226 175/var(--tw-text-opacity))}.text-white\\/70{color:hsla(0,0%,100%,.7)}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-gold-400{--tw-text-opacity:1;color:rgb(255 212 77/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\],.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\]{--tw-shadow:0 3px 12px rgba(255,212,77,.35);--tw-shadow-colored:0 3px 12px var(--tw-shadow-color)}.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{--tw-shadow:0 2px 10px rgba(30,226,175,.15);--tw-shadow-colored:0 2px 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.line-clamp-2{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;overflow:hidden}*,:after,:before{border-style:solid;border-width:0}button{background-color:transparent;background-image:none;color:inherit;cursor:pointer;font:inherit;margin:0;padding:0;text-transform:none}.placeholder\\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.placeholder\\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.first\\:ml-0:first-child{margin-left:0}.hover\\:scale-\\[1\\.02\\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.hover\\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\\:text-sky-blue-400:hover{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.hover\\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.hover\\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\\:border-sky-blue-400:focus{--tw-border-opacity:1;border-color:rgb(59 208 242/var(--tw-border-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\\:opacity-50:disabled{opacity:.5}@media (min-width:640px){.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:768px){.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}";
43
+ var css_248z = "@font-face{font-family:ProximaNova;src:url(https://cdn.localcivics.io/fonts/ProximaNova.otf) format(\"opentype\")}@font-face{font-family:ProximaNova;font-weight:700;src:url(https://cdn.localcivics.io/fonts/ProximaNovaBold.otf) format(\"opentype\")}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.\\!relative{position:relative!important}.left-3{left:.75rem}.top-1\\/2{top:50%}.left-3\\.5{left:.875rem}.bottom-\\[-20px\\]{bottom:-20px}.left-1\\/2{left:50%}.m-3{margin:.75rem}.mt-0\\.5{margin-top:.125rem}.mt-0{margin-top:0}.mt-6{margin-top:1.5rem}.mt-2{margin-top:.5rem}.mt-1{margin-top:.25rem}.mt-1\\.5{margin-top:.375rem}.-ml-2{margin-left:-.5rem}.mt-4{margin-top:1rem}.mt-3{margin-top:.75rem}.mb-8{margin-bottom:2rem}.mb-1{margin-bottom:.25rem}.ml-\\[29px\\]{margin-left:29px}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-full{height:100%}.h-9{height:2.25rem}.h-8{height:2rem}.h-7{height:1.75rem}.h-12{height:3rem}.h-\\[300px\\]{height:300px}.h-screen{height:100vh}.h-14{height:3.5rem}.h-16{height:4rem}.h-28{height:7rem}.h-\\[30px\\]{height:30px}.h-\\[400px\\]{height:400px}.max-h-\\[70vh\\]{max-height:70vh}.w-10{width:2.5rem}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-fit{width:-moz-fit-content;width:fit-content}.w-36{width:9rem}.w-28{width:7rem}.w-4{width:1rem}.w-9{width:2.25rem}.w-\\[296px\\]{width:296px}.w-40{width:10rem}.w-24{width:6rem}.w-56{width:14rem}.w-8{width:2rem}.w-7{width:1.75rem}.w-64{width:16rem}.w-12{width:3rem}.w-16{width:4rem}.w-\\[440px\\]{width:440px}.w-20{width:5rem}.w-\\[250px\\]{width:250px}.w-screen{width:100vw}.w-\\[500px\\]{width:500px}.w-14{width:3.5rem}.w-\\[230px\\]{width:230px}.w-\\[30px\\]{width:30px}.min-w-0{min-width:0}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.max-w-\\[460px\\]{max-width:460px}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y:-50%}.-translate-x-1\\/2,.-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\\/2{--tw-translate-x:-50%}.rotate-180{--tw-rotate:180deg}.rotate-180,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1\\.2fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1.2fr 1fr .6fr}.grid-cols-\\[1\\.5fr_2fr_1fr_0\\.6fr\\]{grid-template-columns:1.5fr 2fr 1fr .6fr}.grid-cols-\\[1\\.3fr_1\\.3fr_2fr_1fr_1fr\\]{grid-template-columns:1.3fr 1.3fr 2fr 1fr 1fr}.grid-cols-\\[1\\.5fr_2fr_0\\.8fr\\]{grid-template-columns:1.5fr 2fr .8fr}.grid-cols-\\[1fr_3fr\\]{grid-template-columns:1fr 3fr}.grid-cols-\\[1fr_1fr_2fr_0\\.8fr\\]{grid-template-columns:1fr 1fr 2fr .8fr}.grid-cols-\\[2fr_1fr\\]{grid-template-columns:2fr 1fr}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1fr .6fr}.grid-cols-\\[2\\.2fr_1fr\\]{grid-template-columns:2.2fr 1fr}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-\\[18px\\]{gap:18px}.gap-5{gap:1.25rem}.gap-4{gap:1rem}.gap-1{gap:.25rem}.gap-3{gap:.75rem}.gap-2{gap:.5rem}.gap-1\\.5{gap:.375rem}.gap-2\\.5{gap:.625rem}.gap-3\\.5{gap:.875rem}.gap-0\\.5{gap:.125rem}.gap-0{gap:0}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-y-4{row-gap:1rem}.space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.-space-y-\\[3px\\]>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(-3px*var(--tw-space-y-reverse));margin-top:calc(-3px*(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-none{overscroll-behavior:none}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-2xl{border-radius:1rem}.rounded-\\[10px\\]{border-radius:10px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:1.5rem}.rounded-\\[8px\\]{border-radius:8px}.border{border-width:1px}.border-2{border-width:2px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-l{border-left-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-sky-blue-400\\/40{border-color:rgba(59,208,242,.4)}.border-sky-blue-400\\/30{border-color:rgba(59,208,242,.3)}.border-mint-400\\/30{border-color:rgba(30,226,175,.3)}.border-gold-400\\/30{border-color:rgba(255,212,77,.3)}.border-transparent{border-color:transparent}.border-l-sky-blue-400{--tw-border-opacity:1;border-left-color:rgb(59 208 242/var(--tw-border-opacity))}.border-l-mint-400{--tw-border-opacity:1;border-left-color:rgb(30 226 175/var(--tw-border-opacity))}.border-l-gold-400{--tw-border-opacity:1;border-left-color:rgb(255 212 77/var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-sky-blue-400\\/20{background-color:rgba(59,208,242,.2)}.bg-mint-100{--tw-bg-opacity:1;background-color:rgb(208 251 240/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-gold-100{--tw-bg-opacity:1;background-color:rgb(255 248 214/var(--tw-bg-opacity))}.bg-mint-400\\/20{background-color:rgba(30,226,175,.2)}.bg-transparent{background-color:transparent}.bg-dark-blue-400{--tw-bg-opacity:1;background-color:rgb(35 42 58/var(--tw-bg-opacity))}.bg-slate-50\\/60{background-color:rgba(248,250,252,.6)}.bg-gold-400\\/15{background-color:rgba(255,212,77,.15)}.bg-white\\/90{background-color:hsla(0,0%,100%,.9)}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-sky-blue-400\\/15{background-color:rgba(59,208,242,.15)}.bg-mint-400\\/15{background-color:rgba(30,226,175,.15)}.bg-sky-blue-400\\/25{background-color:rgba(59,208,242,.25)}.bg-mint-400\\/25{background-color:rgba(30,226,175,.25)}.bg-gold-400\\/25{background-color:rgba(255,212,77,.25)}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-sky-blue-400{--tw-gradient-from:#3bd0f2;--tw-gradient-to:rgba(59,208,242,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-mint-400{--tw-gradient-from:#1ee2af;--tw-gradient-to:rgba(30,226,175,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-gold-400{--tw-gradient-from:#ffd44d;--tw-gradient-to:rgba(255,212,77,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-dark-blue-600{--tw-gradient-from:#0a0f2e;--tw-gradient-to:rgba(10,15,46,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-sky-blue-400\\/15{--tw-gradient-from:rgba(59,208,242,.15);--tw-gradient-to:rgba(59,208,242,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-dark-blue-400{--tw-gradient-to:rgba(35,42,58,0);--tw-gradient-stops:var(--tw-gradient-from),#232a3a,var(--tw-gradient-to)}.to-dark-blue-400{--tw-gradient-to:#232a3a}.to-\\[\\#f5c300\\]{--tw-gradient-to:#f5c300}.to-sky-blue-400{--tw-gradient-to:#3bd0f2}.to-mint-400\\/15{--tw-gradient-to:rgba(30,226,175,.15)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-4{padding:1rem}.p-8{padding:2rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-3{padding:.75rem}.p-2\\.5{padding:.625rem}.p-2{padding:.5rem}.px-\\[22px\\]{padding-left:22px;padding-right:22px}.py-\\[18px\\]{padding-bottom:18px;padding-top:18px}.px-4{padding-left:1rem;padding-right:1rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3\\.5{padding-left:.875rem;padding-right:.875rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}.py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.py-4{padding-bottom:1rem;padding-top:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pl-9{padding-left:2.25rem}.pr-4{padding-right:1rem}.pl-10{padding-left:2.5rem}.pb-2{padding-bottom:.5rem}.pr-1{padding-right:.25rem}.pl-4{padding-left:1rem}.pt-0\\.5{padding-top:.125rem}.pt-0{padding-top:0}.pb-12{padding-bottom:3rem}.pl-2\\.5{padding-left:.625rem}.pl-2{padding-left:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-proxima{font-family:ProximaNova}.text-\\[15\\.5px\\]{font-size:15.5px}.text-xs{font-size:.75rem;line-height:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-\\[10px\\]{font-size:10px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-\\[10\\.5px\\]{font-size:10.5px}.text-\\[11px\\]{font-size:11px}.text-\\[28px\\]{font-size:28px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-base{font-size:1rem;line-height:1.5rem}.text-\\[11\\.5px\\]{font-size:11.5px}.text-3xl{font-size:1.875rem;line-height:2.25rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-black{font-weight:900}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-dark-blue-400{--tw-text-opacity:1;color:rgb(35 42 58/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-sky-blue-400{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-mint-400{--tw-text-opacity:1;color:rgb(30 226 175/var(--tw-text-opacity))}.text-white\\/70{color:hsla(0,0%,100%,.7)}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-gold-400{--tw-text-opacity:1;color:rgb(255 212 77/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\],.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\]{--tw-shadow:0 3px 12px rgba(255,212,77,.35);--tw-shadow-colored:0 3px 12px var(--tw-shadow-color)}.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{--tw-shadow:0 2px 10px rgba(30,226,175,.15);--tw-shadow-colored:0 2px 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.line-clamp-2{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;overflow:hidden}*,:after,:before{border-style:solid;border-width:0}button{background-color:transparent;background-image:none;color:inherit;cursor:pointer;font:inherit;margin:0;padding:0;text-transform:none}.placeholder\\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.placeholder\\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.first\\:ml-0:first-child{margin-left:0}.hover\\:scale-\\[1\\.02\\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.hover\\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\\:text-sky-blue-400:hover{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.hover\\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.hover\\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\\:border-sky-blue-400:focus{--tw-border-opacity:1;border-color:rgb(59 208 242/var(--tw-border-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\\:opacity-50:disabled{opacity:.5}.disabled\\:opacity-40:disabled{opacity:.4}@media (min-width:640px){.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:768px){.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}";
44
44
  styleInject(css_248z);
45
45
 
46
46
  function UserButton({ image, name, email }) {
@@ -124,25 +124,25 @@ function LinksGroup({ icon: Icon, href, label, accent = "cyan", initiallyOpened,
124
124
  ), hasLinks && opened && /* @__PURE__ */ React.createElement("div", { className: "ml-[29px] mt-0.5 flex flex-col gap-0.5 border-l border-slate-100 pl-2.5" }, items));
125
125
  }
126
126
 
127
- var __defProp$i = Object.defineProperty;
128
- var __defProps$f = Object.defineProperties;
129
- var __getOwnPropDescs$f = Object.getOwnPropertyDescriptors;
130
- var __getOwnPropSymbols$i = Object.getOwnPropertySymbols;
131
- var __hasOwnProp$i = Object.prototype.hasOwnProperty;
132
- var __propIsEnum$i = Object.prototype.propertyIsEnumerable;
133
- var __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
134
- var __spreadValues$i = (a, b) => {
127
+ var __defProp$j = Object.defineProperty;
128
+ var __defProps$g = Object.defineProperties;
129
+ var __getOwnPropDescs$g = Object.getOwnPropertyDescriptors;
130
+ var __getOwnPropSymbols$j = Object.getOwnPropertySymbols;
131
+ var __hasOwnProp$j = Object.prototype.hasOwnProperty;
132
+ var __propIsEnum$j = Object.prototype.propertyIsEnumerable;
133
+ var __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
134
+ var __spreadValues$j = (a, b) => {
135
135
  for (var prop in b || (b = {}))
136
- if (__hasOwnProp$i.call(b, prop))
137
- __defNormalProp$i(a, prop, b[prop]);
138
- if (__getOwnPropSymbols$i)
139
- for (var prop of __getOwnPropSymbols$i(b)) {
140
- if (__propIsEnum$i.call(b, prop))
141
- __defNormalProp$i(a, prop, b[prop]);
136
+ if (__hasOwnProp$j.call(b, prop))
137
+ __defNormalProp$j(a, prop, b[prop]);
138
+ if (__getOwnPropSymbols$j)
139
+ for (var prop of __getOwnPropSymbols$j(b)) {
140
+ if (__propIsEnum$j.call(b, prop))
141
+ __defNormalProp$j(a, prop, b[prop]);
142
142
  }
143
143
  return a;
144
144
  };
145
- var __spreadProps$f = (a, b) => __defProps$f(a, __getOwnPropDescs$f(b));
145
+ var __spreadProps$g = (a, b) => __defProps$g(a, __getOwnPropDescs$g(b));
146
146
  const data = [
147
147
  { label: "Home", icon: IconHome2, accent: "cyan" },
148
148
  { label: "Dashboard", icon: IconGauge, accent: "mint" },
@@ -151,6 +151,8 @@ const data = [
151
151
  { label: "Badges", icon: IconAlbum, accent: "mint" },
152
152
  { label: "Lessons", icon: IconLambda, accent: "gold" },
153
153
  { label: "File Locker", icon: IconClipboard, accent: "cyan" },
154
+ { label: "Comments", icon: IconMessageCircle, accent: "mint" },
155
+ { label: "Validation", icon: IconClipboardCheck, accent: "gold" },
154
156
  { label: "Organization", icon: IconBuilding, accent: "gold", links: [{ label: "Overview" }, { label: "People" }] }
155
157
  ];
156
158
  const TRIAL_PAGES = [
@@ -169,12 +171,12 @@ function Navbar(props) {
169
171
  }
170
172
  return /* @__PURE__ */ React.createElement(
171
173
  LinksGroup,
172
- __spreadProps$f(__spreadValues$i(__spreadValues$i({
174
+ __spreadProps$g(__spreadValues$j(__spreadValues$j({
173
175
  key: item.label,
174
176
  active: props.active
175
177
  }, item), context), {
176
178
  links: (item.links || []).map((link) => {
177
- return __spreadValues$i(__spreadValues$i({}, link), props.links[`${item.label}/${link.label}`] || { notifications: 0, href: "" });
179
+ return __spreadValues$j(__spreadValues$j({}, link), props.links[`${item.label}/${link.label}`] || { notifications: 0, href: "" });
178
180
  })
179
181
  })
180
182
  );
@@ -500,29 +502,29 @@ function useSortableData(items, config = { key: "", direction: null }) {
500
502
  return { items: sortedItems, requestSort, sortConfig };
501
503
  }
502
504
 
503
- var __defProp$h = Object.defineProperty;
504
- var __defProps$e = Object.defineProperties;
505
- var __getOwnPropDescs$e = Object.getOwnPropertyDescriptors;
506
- var __getOwnPropSymbols$h = Object.getOwnPropertySymbols;
507
- var __hasOwnProp$h = Object.prototype.hasOwnProperty;
508
- var __propIsEnum$h = Object.prototype.propertyIsEnumerable;
509
- var __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
510
- var __spreadValues$h = (a, b) => {
505
+ var __defProp$i = Object.defineProperty;
506
+ var __defProps$f = Object.defineProperties;
507
+ var __getOwnPropDescs$f = Object.getOwnPropertyDescriptors;
508
+ var __getOwnPropSymbols$i = Object.getOwnPropertySymbols;
509
+ var __hasOwnProp$i = Object.prototype.hasOwnProperty;
510
+ var __propIsEnum$i = Object.prototype.propertyIsEnumerable;
511
+ var __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
512
+ var __spreadValues$i = (a, b) => {
511
513
  for (var prop in b || (b = {}))
512
- if (__hasOwnProp$h.call(b, prop))
513
- __defNormalProp$h(a, prop, b[prop]);
514
- if (__getOwnPropSymbols$h)
515
- for (var prop of __getOwnPropSymbols$h(b)) {
516
- if (__propIsEnum$h.call(b, prop))
517
- __defNormalProp$h(a, prop, b[prop]);
514
+ if (__hasOwnProp$i.call(b, prop))
515
+ __defNormalProp$i(a, prop, b[prop]);
516
+ if (__getOwnPropSymbols$i)
517
+ for (var prop of __getOwnPropSymbols$i(b)) {
518
+ if (__propIsEnum$i.call(b, prop))
519
+ __defNormalProp$i(a, prop, b[prop]);
518
520
  }
519
521
  return a;
520
522
  };
521
- var __spreadProps$e = (a, b) => __defProps$e(a, __getOwnPropDescs$e(b));
523
+ var __spreadProps$f = (a, b) => __defProps$f(a, __getOwnPropDescs$f(b));
522
524
  function Table$k(props) {
523
525
  const [expanded, setExpanded] = React.useState({});
524
526
  const preparedItems = React.useMemo(() => {
525
- return props.items.map((item) => __spreadProps$e(__spreadValues$h({}, item), {
527
+ return props.items.map((item) => __spreadProps$f(__spreadValues$i({}, item), {
526
528
  status: item.isComplete ? 1 : 0
527
529
  }));
528
530
  }, [props.items]);
@@ -545,7 +547,7 @@ function Table$k(props) {
545
547
  return /* @__PURE__ */ React.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React.createElement(
546
548
  "div",
547
549
  {
548
- onClick: () => setExpanded(__spreadProps$e(__spreadValues$h({}, expanded), { [row.userId]: !isOpen })),
550
+ onClick: () => setExpanded(__spreadProps$f(__spreadValues$i({}, expanded), { [row.userId]: !isOpen })),
549
551
  className: "flex cursor-pointer items-center gap-4 p-4"
550
552
  },
551
553
  /* @__PURE__ */ React.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-3" }, row.avatar ? /* @__PURE__ */ React.createElement("img", { src: row.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React.createElement("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), /* @__PURE__ */ React.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React.createElement("div", { className: "truncate text-sm font-bold text-dark-blue-400" }, row.name), /* @__PURE__ */ React.createElement("div", { className: "truncate text-xs text-slate-400" }, row.email))),
@@ -580,7 +582,7 @@ function Table$j(props) {
580
582
  )));
581
583
  }
582
584
 
583
- const TABS$4 = [
585
+ const TABS$5 = [
584
586
  { label: "By lesson", value: "lessons" },
585
587
  { label: "By student", value: "students" }
586
588
  ];
@@ -613,7 +615,7 @@ const Badge = (props) => {
613
615
  },
614
616
  /* @__PURE__ */ React.createElement("option", { value: "" }, "All classes"),
615
617
  props.classes.map((c) => /* @__PURE__ */ React.createElement("option", { key: c.classId, value: c.classId }, c.name))
616
- )), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, !props.trial && /* @__PURE__ */ React.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$4.map((t) => /* @__PURE__ */ React.createElement(
618
+ )), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, !props.trial && /* @__PURE__ */ React.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$5.map((t) => /* @__PURE__ */ React.createElement(
617
619
  "button",
618
620
  {
619
621
  key: t.value,
@@ -734,28 +736,28 @@ function relativeTimeFromElapsed(elapsed) {
734
736
  return "";
735
737
  }
736
738
 
737
- var __defProp$g = Object.defineProperty;
738
- var __defProps$d = Object.defineProperties;
739
- var __getOwnPropDescs$d = Object.getOwnPropertyDescriptors;
740
- var __getOwnPropSymbols$g = Object.getOwnPropertySymbols;
741
- var __hasOwnProp$g = Object.prototype.hasOwnProperty;
742
- var __propIsEnum$g = Object.prototype.propertyIsEnumerable;
743
- var __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
744
- var __spreadValues$g = (a, b) => {
739
+ var __defProp$h = Object.defineProperty;
740
+ var __defProps$e = Object.defineProperties;
741
+ var __getOwnPropDescs$e = Object.getOwnPropertyDescriptors;
742
+ var __getOwnPropSymbols$h = Object.getOwnPropertySymbols;
743
+ var __hasOwnProp$h = Object.prototype.hasOwnProperty;
744
+ var __propIsEnum$h = Object.prototype.propertyIsEnumerable;
745
+ var __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
746
+ var __spreadValues$h = (a, b) => {
745
747
  for (var prop in b || (b = {}))
746
- if (__hasOwnProp$g.call(b, prop))
747
- __defNormalProp$g(a, prop, b[prop]);
748
- if (__getOwnPropSymbols$g)
749
- for (var prop of __getOwnPropSymbols$g(b)) {
750
- if (__propIsEnum$g.call(b, prop))
751
- __defNormalProp$g(a, prop, b[prop]);
748
+ if (__hasOwnProp$h.call(b, prop))
749
+ __defNormalProp$h(a, prop, b[prop]);
750
+ if (__getOwnPropSymbols$h)
751
+ for (var prop of __getOwnPropSymbols$h(b)) {
752
+ if (__propIsEnum$h.call(b, prop))
753
+ __defNormalProp$h(a, prop, b[prop]);
752
754
  }
753
755
  return a;
754
756
  };
755
- var __spreadProps$d = (a, b) => __defProps$d(a, __getOwnPropDescs$d(b));
757
+ var __spreadProps$e = (a, b) => __defProps$e(a, __getOwnPropDescs$e(b));
756
758
  function Table$g(props) {
757
759
  const preparedItems = React.useMemo(() => {
758
- return props.items.map((item) => __spreadProps$d(__spreadValues$g({}, item), {
760
+ return props.items.map((item) => __spreadProps$e(__spreadValues$h({}, item), {
759
761
  updatedAtDate: new Date(item.updatedAt)
760
762
  }));
761
763
  }, [props.items]);
@@ -874,7 +876,7 @@ function Table$d(props) {
874
876
  )));
875
877
  }
876
878
 
877
- const TABS$3 = [
879
+ const TABS$4 = [
878
880
  { label: "My students", value: "students" },
879
881
  { label: "Impact statements", value: "impact" },
880
882
  { label: "Reflections", value: "reflections" },
@@ -910,7 +912,7 @@ const Dashboard = (props) => {
910
912
  },
911
913
  /* @__PURE__ */ React.createElement("option", { value: "" }, "All classes"),
912
914
  props.classes.map((c) => /* @__PURE__ */ React.createElement("option", { key: c.classId, value: c.classId }, c.name))
913
- )), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement("div", { className: "flex w-fit flex-wrap gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$3.map((t) => /* @__PURE__ */ React.createElement(
915
+ )), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement("div", { className: "flex w-fit flex-wrap gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$4.map((t) => /* @__PURE__ */ React.createElement(
914
916
  "button",
915
917
  {
916
918
  key: t.value,
@@ -954,25 +956,25 @@ const Dashboard = (props) => {
954
956
  )));
955
957
  };
956
958
 
957
- var __defProp$f = Object.defineProperty;
958
- var __defProps$c = Object.defineProperties;
959
- var __getOwnPropDescs$c = Object.getOwnPropertyDescriptors;
960
- var __getOwnPropSymbols$f = Object.getOwnPropertySymbols;
961
- var __hasOwnProp$f = Object.prototype.hasOwnProperty;
962
- var __propIsEnum$f = Object.prototype.propertyIsEnumerable;
963
- var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
964
- var __spreadValues$f = (a, b) => {
959
+ var __defProp$g = Object.defineProperty;
960
+ var __defProps$d = Object.defineProperties;
961
+ var __getOwnPropDescs$d = Object.getOwnPropertyDescriptors;
962
+ var __getOwnPropSymbols$g = Object.getOwnPropertySymbols;
963
+ var __hasOwnProp$g = Object.prototype.hasOwnProperty;
964
+ var __propIsEnum$g = Object.prototype.propertyIsEnumerable;
965
+ var __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
966
+ var __spreadValues$g = (a, b) => {
965
967
  for (var prop in b || (b = {}))
966
- if (__hasOwnProp$f.call(b, prop))
967
- __defNormalProp$f(a, prop, b[prop]);
968
- if (__getOwnPropSymbols$f)
969
- for (var prop of __getOwnPropSymbols$f(b)) {
970
- if (__propIsEnum$f.call(b, prop))
971
- __defNormalProp$f(a, prop, b[prop]);
968
+ if (__hasOwnProp$g.call(b, prop))
969
+ __defNormalProp$g(a, prop, b[prop]);
970
+ if (__getOwnPropSymbols$g)
971
+ for (var prop of __getOwnPropSymbols$g(b)) {
972
+ if (__propIsEnum$g.call(b, prop))
973
+ __defNormalProp$g(a, prop, b[prop]);
972
974
  }
973
975
  return a;
974
976
  };
975
- var __spreadProps$c = (a, b) => __defProps$c(a, __getOwnPropDescs$c(b));
977
+ var __spreadProps$d = (a, b) => __defProps$d(a, __getOwnPropDescs$d(b));
976
978
  const openDeleteModal$2 = (student, onDelete) => openConfirmModal({
977
979
  title: `Remove "${student.givenName && student.familyName ? `${student.givenName} ${student.familyName}` : student.email}" from this class?`,
978
980
  centered: true,
@@ -983,7 +985,7 @@ const openDeleteModal$2 = (student, onDelete) => openConfirmModal({
983
985
  });
984
986
  function Table$c(props) {
985
987
  const preparedItems = React.useMemo(() => {
986
- return props.items.map((item) => __spreadProps$c(__spreadValues$f({}, item), {
988
+ return props.items.map((item) => __spreadProps$d(__spreadValues$g({}, item), {
987
989
  fullName: item.givenName && item.familyName ? `${item.givenName} ${item.familyName}`.toLowerCase() : item.email.toLowerCase()
988
990
  }));
989
991
  }, [props.items]);
@@ -1033,25 +1035,25 @@ function Table$c(props) {
1033
1035
  }));
1034
1036
  }
1035
1037
 
1036
- var __defProp$e = Object.defineProperty;
1037
- var __defProps$b = Object.defineProperties;
1038
- var __getOwnPropDescs$b = Object.getOwnPropertyDescriptors;
1039
- var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
1040
- var __hasOwnProp$e = Object.prototype.hasOwnProperty;
1041
- var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
1042
- var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1043
- var __spreadValues$e = (a, b) => {
1038
+ var __defProp$f = Object.defineProperty;
1039
+ var __defProps$c = Object.defineProperties;
1040
+ var __getOwnPropDescs$c = Object.getOwnPropertyDescriptors;
1041
+ var __getOwnPropSymbols$f = Object.getOwnPropertySymbols;
1042
+ var __hasOwnProp$f = Object.prototype.hasOwnProperty;
1043
+ var __propIsEnum$f = Object.prototype.propertyIsEnumerable;
1044
+ var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1045
+ var __spreadValues$f = (a, b) => {
1044
1046
  for (var prop in b || (b = {}))
1045
- if (__hasOwnProp$e.call(b, prop))
1046
- __defNormalProp$e(a, prop, b[prop]);
1047
- if (__getOwnPropSymbols$e)
1048
- for (var prop of __getOwnPropSymbols$e(b)) {
1049
- if (__propIsEnum$e.call(b, prop))
1050
- __defNormalProp$e(a, prop, b[prop]);
1047
+ if (__hasOwnProp$f.call(b, prop))
1048
+ __defNormalProp$f(a, prop, b[prop]);
1049
+ if (__getOwnPropSymbols$f)
1050
+ for (var prop of __getOwnPropSymbols$f(b)) {
1051
+ if (__propIsEnum$f.call(b, prop))
1052
+ __defNormalProp$f(a, prop, b[prop]);
1051
1053
  }
1052
1054
  return a;
1053
1055
  };
1054
- var __spreadProps$b = (a, b) => __defProps$b(a, __getOwnPropDescs$b(b));
1056
+ var __spreadProps$c = (a, b) => __defProps$c(a, __getOwnPropDescs$c(b));
1055
1057
  const Class = (props) => {
1056
1058
  const [opened, setOpened] = useState(false);
1057
1059
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
@@ -1063,7 +1065,7 @@ const Class = (props) => {
1063
1065
  padding: "xl",
1064
1066
  size: "xl"
1065
1067
  },
1066
- /* @__PURE__ */ React.createElement(DropzoneButton$1, __spreadProps$b(__spreadValues$e({}, props), { close: () => setOpened(false) }))
1068
+ /* @__PURE__ */ React.createElement(DropzoneButton$1, __spreadProps$c(__spreadValues$f({}, props), { close: () => setOpened(false) }))
1067
1069
  ), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap items-start justify-between gap-4" }, /* @__PURE__ */ React.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React.createElement("div", { onClick: props.onBackClick, className: "flex w-max cursor-pointer items-center gap-1 text-xs font-bold text-sky-blue-400" }, /* @__PURE__ */ React.createElement(IconArrowLeft, { size: 13, stroke: 2.5 }), "Back"), /* @__PURE__ */ React.createElement("h1", { className: "text-2xl font-extrabold tracking-tight text-dark-blue-400" }, props.displayName || "Class"), /* @__PURE__ */ React.createElement("p", { className: "text-sm text-slate-500" }, props.description || "No description")), !props.loading && /* @__PURE__ */ React.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React.createElement(
1068
1070
  "button",
1069
1071
  {
@@ -1197,20 +1199,20 @@ const DropzoneButton$1 = (props) => {
1197
1199
  props.onCreateMembers && props.onCreateMembers([values]);
1198
1200
  }) }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement(
1199
1201
  TextInput,
1200
- __spreadValues$e({
1202
+ __spreadValues$f({
1201
1203
  withAsterisk: true,
1202
1204
  label: "Email",
1203
1205
  placeholder: "Email"
1204
1206
  }, form.getInputProps("email"))
1205
1207
  ), /* @__PURE__ */ React.createElement(Group, { grow: true }, /* @__PURE__ */ React.createElement(
1206
1208
  TextInput,
1207
- __spreadValues$e({
1209
+ __spreadValues$f({
1208
1210
  label: "Given name",
1209
1211
  placeholder: "Given name"
1210
1212
  }, form.getInputProps("givenName"))
1211
1213
  ), /* @__PURE__ */ React.createElement(
1212
1214
  TextInput,
1213
- __spreadValues$e({
1215
+ __spreadValues$f({
1214
1216
  label: "Family name",
1215
1217
  placeholder: "Family name"
1216
1218
  }, form.getInputProps("familyName"))
@@ -1266,19 +1268,19 @@ function Table$b(props) {
1266
1268
  )));
1267
1269
  }
1268
1270
 
1269
- var __defProp$d = Object.defineProperty;
1270
- var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
1271
- var __hasOwnProp$d = Object.prototype.hasOwnProperty;
1272
- var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
1273
- var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1274
- var __spreadValues$d = (a, b) => {
1271
+ var __defProp$e = Object.defineProperty;
1272
+ var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
1273
+ var __hasOwnProp$e = Object.prototype.hasOwnProperty;
1274
+ var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
1275
+ var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1276
+ var __spreadValues$e = (a, b) => {
1275
1277
  for (var prop in b || (b = {}))
1276
- if (__hasOwnProp$d.call(b, prop))
1277
- __defNormalProp$d(a, prop, b[prop]);
1278
- if (__getOwnPropSymbols$d)
1279
- for (var prop of __getOwnPropSymbols$d(b)) {
1280
- if (__propIsEnum$d.call(b, prop))
1281
- __defNormalProp$d(a, prop, b[prop]);
1278
+ if (__hasOwnProp$e.call(b, prop))
1279
+ __defNormalProp$e(a, prop, b[prop]);
1280
+ if (__getOwnPropSymbols$e)
1281
+ for (var prop of __getOwnPropSymbols$e(b)) {
1282
+ if (__propIsEnum$e.call(b, prop))
1283
+ __defNormalProp$e(a, prop, b[prop]);
1282
1284
  }
1283
1285
  return a;
1284
1286
  };
@@ -1312,14 +1314,14 @@ const Classes = (props) => {
1312
1314
  props.onCreateClass && props.onCreateClass(values);
1313
1315
  }) }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement(
1314
1316
  TextInput,
1315
- __spreadValues$d({
1317
+ __spreadValues$e({
1316
1318
  withAsterisk: true,
1317
1319
  label: "Name",
1318
1320
  placeholder: "Class name"
1319
1321
  }, form.getInputProps("name"))
1320
1322
  ), /* @__PURE__ */ React.createElement(
1321
1323
  TextInput,
1322
- __spreadValues$d({
1324
+ __spreadValues$e({
1323
1325
  label: "Description",
1324
1326
  placeholder: "A class for my first period English students"
1325
1327
  }, form.getInputProps("description"))
@@ -1443,7 +1445,7 @@ function Table$8(props) {
1443
1445
  )));
1444
1446
  }
1445
1447
 
1446
- const TABS$2 = [
1448
+ const TABS$3 = [
1447
1449
  { label: "My badges", value: "badges" },
1448
1450
  { label: "My answers", value: "answers" },
1449
1451
  { label: "My reflections", value: "reflections" }
@@ -1465,7 +1467,7 @@ const Student = (props) => {
1465
1467
  title: "BADGE COMPLETION",
1466
1468
  value: numberOfBadgesCompleted
1467
1469
  }
1468
- ] }), /* @__PURE__ */ React.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$2.map((t) => /* @__PURE__ */ React.createElement(
1470
+ ] }), /* @__PURE__ */ React.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$3.map((t) => /* @__PURE__ */ React.createElement(
1469
1471
  "button",
1470
1472
  {
1471
1473
  key: t.value,
@@ -1627,29 +1629,29 @@ function Stack$3(props) {
1627
1629
  return /* @__PURE__ */ React.createElement(Link, { to: props.href, className: "flex flex-col gap-4 no-underline" }, props.items.map((row) => /* @__PURE__ */ React.createElement("div", { key: row.questionName }, /* @__PURE__ */ React.createElement("div", { className: "text-sm font-bold text-dark-blue-400" }, row.questionName), /* @__PURE__ */ React.createElement("div", { className: "mt-1 text-sm text-slate-600" }, row.answer.join(", ") || "No answer."))));
1628
1630
  }
1629
1631
 
1630
- var __defProp$c = Object.defineProperty;
1631
- var __defProps$a = Object.defineProperties;
1632
- var __getOwnPropDescs$a = Object.getOwnPropertyDescriptors;
1633
- var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
1634
- var __hasOwnProp$c = Object.prototype.hasOwnProperty;
1635
- var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
1636
- var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1637
- var __spreadValues$c = (a, b) => {
1632
+ var __defProp$d = Object.defineProperty;
1633
+ var __defProps$b = Object.defineProperties;
1634
+ var __getOwnPropDescs$b = Object.getOwnPropertyDescriptors;
1635
+ var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
1636
+ var __hasOwnProp$d = Object.prototype.hasOwnProperty;
1637
+ var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
1638
+ var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1639
+ var __spreadValues$d = (a, b) => {
1638
1640
  for (var prop in b || (b = {}))
1639
- if (__hasOwnProp$c.call(b, prop))
1640
- __defNormalProp$c(a, prop, b[prop]);
1641
- if (__getOwnPropSymbols$c)
1642
- for (var prop of __getOwnPropSymbols$c(b)) {
1643
- if (__propIsEnum$c.call(b, prop))
1644
- __defNormalProp$c(a, prop, b[prop]);
1641
+ if (__hasOwnProp$d.call(b, prop))
1642
+ __defNormalProp$d(a, prop, b[prop]);
1643
+ if (__getOwnPropSymbols$d)
1644
+ for (var prop of __getOwnPropSymbols$d(b)) {
1645
+ if (__propIsEnum$d.call(b, prop))
1646
+ __defNormalProp$d(a, prop, b[prop]);
1645
1647
  }
1646
1648
  return a;
1647
1649
  };
1648
- var __spreadProps$a = (a, b) => __defProps$a(a, __getOwnPropDescs$a(b));
1650
+ var __spreadProps$b = (a, b) => __defProps$b(a, __getOwnPropDescs$b(b));
1649
1651
  function Table$6(props) {
1650
1652
  const [expanded, setExpanded] = React.useState({});
1651
1653
  const preparedItems = React.useMemo(() => {
1652
- return props.items.map((item) => __spreadProps$a(__spreadValues$c({}, item), {
1654
+ return props.items.map((item) => __spreadProps$b(__spreadValues$d({}, item), {
1653
1655
  status: item.isComplete ? 2 : item.isStarted ? 1 : 0
1654
1656
  }));
1655
1657
  }, [props.items]);
@@ -1672,7 +1674,7 @@ function Table$6(props) {
1672
1674
  return /* @__PURE__ */ React.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React.createElement(
1673
1675
  "div",
1674
1676
  {
1675
- onClick: () => setExpanded(__spreadProps$a(__spreadValues$c({}, expanded), { [row.userId]: !isOpen })),
1677
+ onClick: () => setExpanded(__spreadProps$b(__spreadValues$d({}, expanded), { [row.userId]: !isOpen })),
1676
1678
  className: "flex cursor-pointer items-center gap-4 p-4"
1677
1679
  },
1678
1680
  /* @__PURE__ */ React.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-3" }, row.avatar ? /* @__PURE__ */ React.createElement("img", { src: row.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React.createElement("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), /* @__PURE__ */ React.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React.createElement("div", { className: "truncate text-sm font-bold text-dark-blue-400" }, row.name), /* @__PURE__ */ React.createElement("div", { className: "truncate text-xs text-slate-400" }, row.email))),
@@ -1912,25 +1914,25 @@ const SplitButton$2 = (props) => {
1912
1914
  ));
1913
1915
  };
1914
1916
 
1915
- var __defProp$b = Object.defineProperty;
1916
- var __defProps$9 = Object.defineProperties;
1917
- var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
1918
- var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
1919
- var __hasOwnProp$b = Object.prototype.hasOwnProperty;
1920
- var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
1921
- var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1922
- var __spreadValues$b = (a, b) => {
1917
+ var __defProp$c = Object.defineProperty;
1918
+ var __defProps$a = Object.defineProperties;
1919
+ var __getOwnPropDescs$a = Object.getOwnPropertyDescriptors;
1920
+ var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
1921
+ var __hasOwnProp$c = Object.prototype.hasOwnProperty;
1922
+ var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
1923
+ var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1924
+ var __spreadValues$c = (a, b) => {
1923
1925
  for (var prop in b || (b = {}))
1924
- if (__hasOwnProp$b.call(b, prop))
1925
- __defNormalProp$b(a, prop, b[prop]);
1926
- if (__getOwnPropSymbols$b)
1927
- for (var prop of __getOwnPropSymbols$b(b)) {
1928
- if (__propIsEnum$b.call(b, prop))
1929
- __defNormalProp$b(a, prop, b[prop]);
1926
+ if (__hasOwnProp$c.call(b, prop))
1927
+ __defNormalProp$c(a, prop, b[prop]);
1928
+ if (__getOwnPropSymbols$c)
1929
+ for (var prop of __getOwnPropSymbols$c(b)) {
1930
+ if (__propIsEnum$c.call(b, prop))
1931
+ __defNormalProp$c(a, prop, b[prop]);
1930
1932
  }
1931
1933
  return a;
1932
1934
  };
1933
- var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
1935
+ var __spreadProps$a = (a, b) => __defProps$a(a, __getOwnPropDescs$a(b));
1934
1936
  const openDeleteModal = (person, onDelete) => openConfirmModal({
1935
1937
  title: `Remove "${person.givenName && person.familyName ? `${person.givenName} ${person.familyName}` : person.email}" from your organization?`,
1936
1938
  centered: true,
@@ -1941,7 +1943,7 @@ const openDeleteModal = (person, onDelete) => openConfirmModal({
1941
1943
  });
1942
1944
  function Table$4(props) {
1943
1945
  const preparedItems = React.useMemo(() => {
1944
- return props.items.map((item) => __spreadProps$9(__spreadValues$b({}, item), {
1946
+ return props.items.map((item) => __spreadProps$a(__spreadValues$c({}, item), {
1945
1947
  fullName: item.givenName && item.familyName ? `${item.givenName} ${item.familyName}`.toLowerCase() : item.email.toLowerCase(),
1946
1948
  roleRank: item.isAdmin ? 2 : item.isGroupAdmin ? 1 : 0
1947
1949
  }));
@@ -2000,25 +2002,25 @@ function Table$4(props) {
2000
2002
  }));
2001
2003
  }
2002
2004
 
2003
- var __defProp$a = Object.defineProperty;
2004
- var __defProps$8 = Object.defineProperties;
2005
- var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
2006
- var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
2007
- var __hasOwnProp$a = Object.prototype.hasOwnProperty;
2008
- var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
2009
- var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2010
- var __spreadValues$a = (a, b) => {
2005
+ var __defProp$b = Object.defineProperty;
2006
+ var __defProps$9 = Object.defineProperties;
2007
+ var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
2008
+ var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
2009
+ var __hasOwnProp$b = Object.prototype.hasOwnProperty;
2010
+ var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
2011
+ var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2012
+ var __spreadValues$b = (a, b) => {
2011
2013
  for (var prop in b || (b = {}))
2012
- if (__hasOwnProp$a.call(b, prop))
2013
- __defNormalProp$a(a, prop, b[prop]);
2014
- if (__getOwnPropSymbols$a)
2015
- for (var prop of __getOwnPropSymbols$a(b)) {
2016
- if (__propIsEnum$a.call(b, prop))
2017
- __defNormalProp$a(a, prop, b[prop]);
2018
- }
2019
- return a;
2020
- };
2021
- var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
2014
+ if (__hasOwnProp$b.call(b, prop))
2015
+ __defNormalProp$b(a, prop, b[prop]);
2016
+ if (__getOwnPropSymbols$b)
2017
+ for (var prop of __getOwnPropSymbols$b(b)) {
2018
+ if (__propIsEnum$b.call(b, prop))
2019
+ __defNormalProp$b(a, prop, b[prop]);
2020
+ }
2021
+ return a;
2022
+ };
2023
+ var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
2022
2024
  const People = (props) => {
2023
2025
  const form = useForm({
2024
2026
  initialValues: {
@@ -2050,27 +2052,27 @@ const People = (props) => {
2050
2052
  padding: "xl",
2051
2053
  size: "xl"
2052
2054
  },
2053
- /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React.createElement(DropzoneButton, __spreadProps$8(__spreadValues$a({}, props), { close: () => setOpened(false) })), /* @__PURE__ */ React.createElement(Divider, { label: "or", labelPosition: "center", my: "md", variant: "dashed" }), /* @__PURE__ */ React.createElement("form", { onSubmit: form.onSubmit(() => {
2055
+ /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React.createElement(DropzoneButton, __spreadProps$9(__spreadValues$b({}, props), { close: () => setOpened(false) })), /* @__PURE__ */ React.createElement(Divider, { label: "or", labelPosition: "center", my: "md", variant: "dashed" }), /* @__PURE__ */ React.createElement("form", { onSubmit: form.onSubmit(() => {
2054
2056
  const values = form.values;
2055
2057
  form.reset();
2056
2058
  setOpened(false);
2057
2059
  props.onCreateUsers && props.onCreateUsers([values]);
2058
2060
  }) }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement(
2059
2061
  TextInput,
2060
- __spreadValues$a({
2062
+ __spreadValues$b({
2061
2063
  withAsterisk: true,
2062
2064
  label: "Email",
2063
2065
  placeholder: "Email"
2064
2066
  }, form.getInputProps("email"))
2065
2067
  ), /* @__PURE__ */ React.createElement(Group, { grow: true }, /* @__PURE__ */ React.createElement(
2066
2068
  TextInput,
2067
- __spreadValues$a({
2069
+ __spreadValues$b({
2068
2070
  label: "Given name",
2069
2071
  placeholder: "Given name"
2070
2072
  }, form.getInputProps("givenName"))
2071
2073
  ), /* @__PURE__ */ React.createElement(
2072
2074
  TextInput,
2073
- __spreadValues$a({
2075
+ __spreadValues$b({
2074
2076
  label: "Family name",
2075
2077
  placeholder: "Family name"
2076
2078
  }, form.getInputProps("familyName"))
@@ -2264,24 +2266,24 @@ const StartAnonymousLesson = (props) => {
2264
2266
  ))))));
2265
2267
  };
2266
2268
 
2267
- var __defProp$9 = Object.defineProperty;
2268
- var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;
2269
- var __hasOwnProp$9 = Object.prototype.hasOwnProperty;
2270
- var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;
2271
- var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2272
- var __spreadValues$9 = (a, b) => {
2269
+ var __defProp$a = Object.defineProperty;
2270
+ var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
2271
+ var __hasOwnProp$a = Object.prototype.hasOwnProperty;
2272
+ var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
2273
+ var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2274
+ var __spreadValues$a = (a, b) => {
2273
2275
  for (var prop in b || (b = {}))
2274
- if (__hasOwnProp$9.call(b, prop))
2275
- __defNormalProp$9(a, prop, b[prop]);
2276
- if (__getOwnPropSymbols$9)
2277
- for (var prop of __getOwnPropSymbols$9(b)) {
2278
- if (__propIsEnum$9.call(b, prop))
2279
- __defNormalProp$9(a, prop, b[prop]);
2276
+ if (__hasOwnProp$a.call(b, prop))
2277
+ __defNormalProp$a(a, prop, b[prop]);
2278
+ if (__getOwnPropSymbols$a)
2279
+ for (var prop of __getOwnPropSymbols$a(b)) {
2280
+ if (__propIsEnum$a.call(b, prop))
2281
+ __defNormalProp$a(a, prop, b[prop]);
2280
2282
  }
2281
2283
  return a;
2282
2284
  };
2283
2285
  const BadgeGrid = (props) => {
2284
- const badges = props.badges.map((b) => /* @__PURE__ */ React.createElement(TaskCard, __spreadValues$9({ key: b.title }, b)));
2286
+ const badges = props.badges.map((b) => /* @__PURE__ */ React.createElement(TaskCard, __spreadValues$a({ key: b.title }, b)));
2285
2287
  return /* @__PURE__ */ React.createElement(SimpleGrid, { cols: 4, breakpoints: [{ maxWidth: "sm", cols: 1 }, { maxWidth: "md", cols: 3 }] }, badges);
2286
2288
  };
2287
2289
  function TaskCard(props) {
@@ -2315,30 +2317,30 @@ const UserInfo = (props) => {
2315
2317
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Title, { className: classes.title }, props.name), /* @__PURE__ */ React.createElement(Text, { color: "dimmed", className: classes.description, mt: "xs" }, props.impactStatement));
2316
2318
  };
2317
2319
 
2318
- var __defProp$8 = Object.defineProperty;
2319
- var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
2320
- var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
2321
- var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
2322
- var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2323
- var __spreadValues$8 = (a, b) => {
2320
+ var __defProp$9 = Object.defineProperty;
2321
+ var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;
2322
+ var __hasOwnProp$9 = Object.prototype.hasOwnProperty;
2323
+ var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;
2324
+ var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2325
+ var __spreadValues$9 = (a, b) => {
2324
2326
  for (var prop in b || (b = {}))
2325
- if (__hasOwnProp$8.call(b, prop))
2326
- __defNormalProp$8(a, prop, b[prop]);
2327
- if (__getOwnPropSymbols$8)
2328
- for (var prop of __getOwnPropSymbols$8(b)) {
2329
- if (__propIsEnum$8.call(b, prop))
2330
- __defNormalProp$8(a, prop, b[prop]);
2327
+ if (__hasOwnProp$9.call(b, prop))
2328
+ __defNormalProp$9(a, prop, b[prop]);
2329
+ if (__getOwnPropSymbols$9)
2330
+ for (var prop of __getOwnPropSymbols$9(b)) {
2331
+ if (__propIsEnum$9.call(b, prop))
2332
+ __defNormalProp$9(a, prop, b[prop]);
2331
2333
  }
2332
2334
  return a;
2333
2335
  };
2334
2336
  var __objRest$1 = (source, exclude) => {
2335
2337
  var target = {};
2336
2338
  for (var prop in source)
2337
- if (__hasOwnProp$8.call(source, prop) && exclude.indexOf(prop) < 0)
2339
+ if (__hasOwnProp$9.call(source, prop) && exclude.indexOf(prop) < 0)
2338
2340
  target[prop] = source[prop];
2339
- if (source != null && __getOwnPropSymbols$8)
2340
- for (var prop of __getOwnPropSymbols$8(source)) {
2341
- if (exclude.indexOf(prop) < 0 && __propIsEnum$8.call(source, prop))
2341
+ if (source != null && __getOwnPropSymbols$9)
2342
+ for (var prop of __getOwnPropSymbols$9(source)) {
2343
+ if (exclude.indexOf(prop) < 0 && __propIsEnum$9.call(source, prop))
2342
2344
  target[prop] = source[prop];
2343
2345
  }
2344
2346
  return target;
@@ -2410,9 +2412,9 @@ const TenantBanner = (_a) => {
2410
2412
  };
2411
2413
  return /* @__PURE__ */ React.createElement(
2412
2414
  Card,
2413
- __spreadValues$8({
2415
+ __spreadValues$9({
2414
2416
  radius: "md",
2415
- style: __spreadValues$8({ backgroundImage: `url(${image})` }, style),
2417
+ style: __spreadValues$9({ backgroundImage: `url(${image})` }, style),
2416
2418
  className: cx(classes.card, className)
2417
2419
  }, others),
2418
2420
  /* @__PURE__ */ React.createElement(
@@ -2488,33 +2490,33 @@ const TrialHome = (props) => {
2488
2490
  )), /* @__PURE__ */ React.createElement(Title, { maw: 500, mb: 20, mt: 20, className: classes.title }, "Based on the tags you selected, check out these lessons to get started with your students!"), /* @__PURE__ */ React.createElement(BadgeGrid, { onAssign: props.onAssign, badges: props.badges })));
2489
2491
  };
2490
2492
 
2491
- var __defProp$7 = Object.defineProperty;
2492
- var __defProps$7 = Object.defineProperties;
2493
- var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
2494
- var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
2495
- var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
2496
- var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
2497
- var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2498
- var __spreadValues$7 = (a, b) => {
2493
+ var __defProp$8 = Object.defineProperty;
2494
+ var __defProps$8 = Object.defineProperties;
2495
+ var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
2496
+ var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
2497
+ var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
2498
+ var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
2499
+ var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2500
+ var __spreadValues$8 = (a, b) => {
2499
2501
  for (var prop in b || (b = {}))
2500
- if (__hasOwnProp$7.call(b, prop))
2501
- __defNormalProp$7(a, prop, b[prop]);
2502
- if (__getOwnPropSymbols$7)
2503
- for (var prop of __getOwnPropSymbols$7(b)) {
2504
- if (__propIsEnum$7.call(b, prop))
2505
- __defNormalProp$7(a, prop, b[prop]);
2502
+ if (__hasOwnProp$8.call(b, prop))
2503
+ __defNormalProp$8(a, prop, b[prop]);
2504
+ if (__getOwnPropSymbols$8)
2505
+ for (var prop of __getOwnPropSymbols$8(b)) {
2506
+ if (__propIsEnum$8.call(b, prop))
2507
+ __defNormalProp$8(a, prop, b[prop]);
2506
2508
  }
2507
2509
  return a;
2508
2510
  };
2509
- var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
2511
+ var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
2510
2512
  var __objRest = (source, exclude) => {
2511
2513
  var target = {};
2512
2514
  for (var prop in source)
2513
- if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0)
2515
+ if (__hasOwnProp$8.call(source, prop) && exclude.indexOf(prop) < 0)
2514
2516
  target[prop] = source[prop];
2515
- if (source != null && __getOwnPropSymbols$7)
2516
- for (var prop of __getOwnPropSymbols$7(source)) {
2517
- if (exclude.indexOf(prop) < 0 && __propIsEnum$7.call(source, prop))
2517
+ if (source != null && __getOwnPropSymbols$8)
2518
+ for (var prop of __getOwnPropSymbols$8(source)) {
2519
+ if (exclude.indexOf(prop) < 0 && __propIsEnum$8.call(source, prop))
2518
2520
  target[prop] = source[prop];
2519
2521
  }
2520
2522
  return target;
@@ -2564,7 +2566,7 @@ function ImageCheckbox(_a) {
2564
2566
  const { classes, cx } = useStyles$2({ checked: value });
2565
2567
  return /* @__PURE__ */ React.createElement(
2566
2568
  UnstyledButton,
2567
- __spreadProps$7(__spreadValues$7({}, others), {
2569
+ __spreadProps$8(__spreadValues$8({}, others), {
2568
2570
  onClick: () => handleChange(!value),
2569
2571
  className: cx(classes.button, className)
2570
2572
  }),
@@ -2585,7 +2587,7 @@ function ImageCheckbox(_a) {
2585
2587
  function SelectGrid(props) {
2586
2588
  const items = props.items.map((item) => /* @__PURE__ */ React.createElement(
2587
2589
  ImageCheckbox,
2588
- __spreadProps$7(__spreadValues$7({}, item), {
2590
+ __spreadProps$8(__spreadValues$8({}, item), {
2589
2591
  key: item.title,
2590
2592
  onChange: (checked) => props.onChange(item.title, checked)
2591
2593
  })
@@ -2603,25 +2605,25 @@ function SelectGrid(props) {
2603
2605
  );
2604
2606
  }
2605
2607
 
2606
- var __defProp$6 = Object.defineProperty;
2607
- var __defProps$6 = Object.defineProperties;
2608
- var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
2609
- var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
2610
- var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
2611
- var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
2612
- var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2613
- var __spreadValues$6 = (a, b) => {
2608
+ var __defProp$7 = Object.defineProperty;
2609
+ var __defProps$7 = Object.defineProperties;
2610
+ var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
2611
+ var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
2612
+ var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
2613
+ var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
2614
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2615
+ var __spreadValues$7 = (a, b) => {
2614
2616
  for (var prop in b || (b = {}))
2615
- if (__hasOwnProp$6.call(b, prop))
2616
- __defNormalProp$6(a, prop, b[prop]);
2617
- if (__getOwnPropSymbols$6)
2618
- for (var prop of __getOwnPropSymbols$6(b)) {
2619
- if (__propIsEnum$6.call(b, prop))
2620
- __defNormalProp$6(a, prop, b[prop]);
2617
+ if (__hasOwnProp$7.call(b, prop))
2618
+ __defNormalProp$7(a, prop, b[prop]);
2619
+ if (__getOwnPropSymbols$7)
2620
+ for (var prop of __getOwnPropSymbols$7(b)) {
2621
+ if (__propIsEnum$7.call(b, prop))
2622
+ __defNormalProp$7(a, prop, b[prop]);
2621
2623
  }
2622
2624
  return a;
2623
2625
  };
2624
- var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
2626
+ var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
2625
2627
  const useStyles$1 = createStyles((theme) => ({
2626
2628
  wrapper: {
2627
2629
  minHeight: "100%",
@@ -2731,7 +2733,7 @@ const TrialRegistration = (props) => {
2731
2733
  label: "School/Organization Name",
2732
2734
  placeholder: "What's the name of your school?",
2733
2735
  data: props.organizations.map((o) => {
2734
- return __spreadProps$6(__spreadValues$6({}, o), { value: o.displayName });
2736
+ return __spreadProps$7(__spreadValues$7({}, o), { value: o.displayName });
2735
2737
  }),
2736
2738
  onItemSubmit: (item) => setOrganization({ organizationId: item.organizationId, displayName: item.displayName }),
2737
2739
  onChange: (next) => {
@@ -2743,7 +2745,7 @@ const TrialRegistration = (props) => {
2743
2745
  SelectGrid,
2744
2746
  {
2745
2747
  items: OPTIONS,
2746
- onChange: (e, checked) => setInterests(__spreadProps$6(__spreadValues$6({}, interests), { [e]: checked }))
2748
+ onChange: (e, checked) => setInterests(__spreadProps$7(__spreadValues$7({}, interests), { [e]: checked }))
2747
2749
  }
2748
2750
  ), /* @__PURE__ */ React.createElement(Group, { position: "right", mt: "md" }, /* @__PURE__ */ React.createElement(
2749
2751
  Button,
@@ -2781,25 +2783,25 @@ const AdminProvider = (props) => {
2781
2783
  );
2782
2784
  };
2783
2785
 
2784
- var __defProp$5 = Object.defineProperty;
2785
- var __defProps$5 = Object.defineProperties;
2786
- var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
2787
- var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
2788
- var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
2789
- var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
2790
- var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2791
- var __spreadValues$5 = (a, b) => {
2786
+ var __defProp$6 = Object.defineProperty;
2787
+ var __defProps$6 = Object.defineProperties;
2788
+ var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
2789
+ var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
2790
+ var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
2791
+ var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
2792
+ var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2793
+ var __spreadValues$6 = (a, b) => {
2792
2794
  for (var prop in b || (b = {}))
2793
- if (__hasOwnProp$5.call(b, prop))
2794
- __defNormalProp$5(a, prop, b[prop]);
2795
- if (__getOwnPropSymbols$5)
2796
- for (var prop of __getOwnPropSymbols$5(b)) {
2797
- if (__propIsEnum$5.call(b, prop))
2798
- __defNormalProp$5(a, prop, b[prop]);
2795
+ if (__hasOwnProp$6.call(b, prop))
2796
+ __defNormalProp$6(a, prop, b[prop]);
2797
+ if (__getOwnPropSymbols$6)
2798
+ for (var prop of __getOwnPropSymbols$6(b)) {
2799
+ if (__propIsEnum$6.call(b, prop))
2800
+ __defNormalProp$6(a, prop, b[prop]);
2799
2801
  }
2800
2802
  return a;
2801
2803
  };
2802
- var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
2804
+ var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
2803
2805
  const useStyles = createStyles((theme, props) => ({
2804
2806
  footer: {
2805
2807
  paddingTop: theme.spacing.md,
@@ -2895,7 +2897,7 @@ const App = (props) => {
2895
2897
  padding: "xs",
2896
2898
  navbar: props.navbar && /* @__PURE__ */ React.createElement(
2897
2899
  Navbar,
2898
- __spreadProps$5(__spreadValues$5({}, props.navbar.props), {
2900
+ __spreadProps$6(__spreadValues$6({}, props.navbar.props), {
2899
2901
  onSwitchAccounts: account.accounts && account.accounts.length > 1 ? () => account.setChangeModalOpen(true) : void 0
2900
2902
  })
2901
2903
  ),
@@ -3046,30 +3048,30 @@ function Stack$1(props) {
3046
3048
  return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-2" }, props.items.map((row) => /* @__PURE__ */ React.createElement("div", { key: row.badgeName, className: "flex items-center justify-between gap-4 py-1.5" }, /* @__PURE__ */ React.createElement(Link, { to: row.href, className: "text-sm font-bold text-dark-blue-400 no-underline hover:underline" }, row.badgeName), row.completion >= 1 && /* @__PURE__ */ React.createElement("span", { className: "shrink-0 rounded-full bg-mint-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, "Complete"), row.completion === 0 && !row.isStarted && /* @__PURE__ */ React.createElement("span", { className: "shrink-0 rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500" }, "Not started"), row.completion > 0 && row.completion < 1 && /* @__PURE__ */ React.createElement("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"))));
3047
3049
  }
3048
3050
 
3049
- var __defProp$4 = Object.defineProperty;
3050
- var __defProps$4 = Object.defineProperties;
3051
- var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
3052
- var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
3053
- var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
3054
- var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
3055
- var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3056
- var __spreadValues$4 = (a, b) => {
3051
+ var __defProp$5 = Object.defineProperty;
3052
+ var __defProps$5 = Object.defineProperties;
3053
+ var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
3054
+ var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
3055
+ var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
3056
+ var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
3057
+ var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3058
+ var __spreadValues$5 = (a, b) => {
3057
3059
  for (var prop in b || (b = {}))
3058
- if (__hasOwnProp$4.call(b, prop))
3059
- __defNormalProp$4(a, prop, b[prop]);
3060
- if (__getOwnPropSymbols$4)
3061
- for (var prop of __getOwnPropSymbols$4(b)) {
3062
- if (__propIsEnum$4.call(b, prop))
3063
- __defNormalProp$4(a, prop, b[prop]);
3060
+ if (__hasOwnProp$5.call(b, prop))
3061
+ __defNormalProp$5(a, prop, b[prop]);
3062
+ if (__getOwnPropSymbols$5)
3063
+ for (var prop of __getOwnPropSymbols$5(b)) {
3064
+ if (__propIsEnum$5.call(b, prop))
3065
+ __defNormalProp$5(a, prop, b[prop]);
3064
3066
  }
3065
3067
  return a;
3066
3068
  };
3067
- var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
3069
+ var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
3068
3070
  function Table$2(props) {
3069
3071
  const [expanded, setExpanded] = React.useState({});
3070
3072
  const categories = props.categories || [];
3071
3073
  const preparedItems = React.useMemo(() => {
3072
- return (props.items || []).map((item) => __spreadValues$4(__spreadValues$4({}, item), item.categoryPoints));
3074
+ return (props.items || []).map((item) => __spreadValues$5(__spreadValues$5({}, item), item.categoryPoints));
3073
3075
  }, [props.items]);
3074
3076
  const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);
3075
3077
  if (props.loading && props.items.length === 0) {
@@ -3090,7 +3092,7 @@ function Table$2(props) {
3090
3092
  return /* @__PURE__ */ React.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React.createElement(
3091
3093
  "div",
3092
3094
  {
3093
- onClick: () => setExpanded(__spreadProps$4(__spreadValues$4({}, expanded), { [row.userId]: !isOpen })),
3095
+ onClick: () => setExpanded(__spreadProps$5(__spreadValues$5({}, expanded), { [row.userId]: !isOpen })),
3094
3096
  className: "flex cursor-pointer items-center gap-4 p-4"
3095
3097
  },
3096
3098
  /* @__PURE__ */ React.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-3" }, row.avatar ? /* @__PURE__ */ React.createElement("img", { src: row.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React.createElement("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), /* @__PURE__ */ React.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React.createElement("div", { className: "truncate text-sm font-bold text-dark-blue-400" }, row.name), /* @__PURE__ */ React.createElement("div", { className: "truncate text-xs text-slate-400" }, row.email))),
@@ -3164,25 +3166,25 @@ const CategoryPill = (props) => /* @__PURE__ */ React.createElement(
3164
3166
  props.label
3165
3167
  );
3166
3168
 
3167
- var __defProp$3 = Object.defineProperty;
3168
- var __defProps$3 = Object.defineProperties;
3169
- var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
3170
- var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
3171
- var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
3172
- var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
3173
- var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3174
- var __spreadValues$3 = (a, b) => {
3169
+ var __defProp$4 = Object.defineProperty;
3170
+ var __defProps$4 = Object.defineProperties;
3171
+ var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
3172
+ var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
3173
+ var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
3174
+ var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
3175
+ var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3176
+ var __spreadValues$4 = (a, b) => {
3175
3177
  for (var prop in b || (b = {}))
3176
- if (__hasOwnProp$3.call(b, prop))
3177
- __defNormalProp$3(a, prop, b[prop]);
3178
- if (__getOwnPropSymbols$3)
3179
- for (var prop of __getOwnPropSymbols$3(b)) {
3180
- if (__propIsEnum$3.call(b, prop))
3181
- __defNormalProp$3(a, prop, b[prop]);
3178
+ if (__hasOwnProp$4.call(b, prop))
3179
+ __defNormalProp$4(a, prop, b[prop]);
3180
+ if (__getOwnPropSymbols$4)
3181
+ for (var prop of __getOwnPropSymbols$4(b)) {
3182
+ if (__propIsEnum$4.call(b, prop))
3183
+ __defNormalProp$4(a, prop, b[prop]);
3182
3184
  }
3183
3185
  return a;
3184
3186
  };
3185
- var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
3187
+ var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
3186
3188
  function buildCategoryTree(categories) {
3187
3189
  const byId = /* @__PURE__ */ new Map();
3188
3190
  categories.forEach((c) => byId.set(c.categoryId, c));
@@ -3201,7 +3203,7 @@ function buildCategoryTree(categories) {
3201
3203
  attached.add(category.categoryId);
3202
3204
  const childAncestry = new Set(ancestry).add(category.categoryId);
3203
3205
  const children = (childrenByParent.get(category.categoryId) || []).filter((child) => !childAncestry.has(child.categoryId)).map((child) => attach(child, childAncestry));
3204
- return __spreadProps$3(__spreadValues$3({}, category), { children });
3206
+ return __spreadProps$4(__spreadValues$4({}, category), { children });
3205
3207
  };
3206
3208
  const roots = categories.filter((c) => {
3207
3209
  const parentId = c.parentCategoryId;
@@ -3251,7 +3253,7 @@ const CategoryNode = (props) => {
3251
3253
  );
3252
3254
  };
3253
3255
 
3254
- const TABS$1 = [
3256
+ const TABS$2 = [
3255
3257
  { label: "By Badge", value: "badges" },
3256
3258
  { label: "By student", value: "students" }
3257
3259
  ];
@@ -3298,7 +3300,7 @@ const Pathway = (props) => {
3298
3300
  },
3299
3301
  /* @__PURE__ */ React.createElement("option", { value: "" }, "All classes"),
3300
3302
  props.classes.map((c) => /* @__PURE__ */ React.createElement("option", { key: c.classId, value: c.classId }, c.name))
3301
- )), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, !props.trial && /* @__PURE__ */ React.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$1.map((t) => /* @__PURE__ */ React.createElement(
3303
+ )), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, !props.trial && /* @__PURE__ */ React.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$2.map((t) => /* @__PURE__ */ React.createElement(
3302
3304
  "button",
3303
3305
  {
3304
3306
  key: t.value,
@@ -3364,37 +3366,39 @@ function Stack(props) {
3364
3366
  }));
3365
3367
  }
3366
3368
 
3367
- var __defProp$2 = Object.defineProperty;
3368
- var __defProps$2 = Object.defineProperties;
3369
- var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
3370
- var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
3371
- var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
3372
- var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
3373
- var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3374
- var __spreadValues$2 = (a, b) => {
3369
+ var __defProp$3 = Object.defineProperty;
3370
+ var __defProps$3 = Object.defineProperties;
3371
+ var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
3372
+ var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
3373
+ var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
3374
+ var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
3375
+ var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3376
+ var __spreadValues$3 = (a, b) => {
3375
3377
  for (var prop in b || (b = {}))
3376
- if (__hasOwnProp$2.call(b, prop))
3377
- __defNormalProp$2(a, prop, b[prop]);
3378
- if (__getOwnPropSymbols$2)
3379
- for (var prop of __getOwnPropSymbols$2(b)) {
3380
- if (__propIsEnum$2.call(b, prop))
3381
- __defNormalProp$2(a, prop, b[prop]);
3378
+ if (__hasOwnProp$3.call(b, prop))
3379
+ __defNormalProp$3(a, prop, b[prop]);
3380
+ if (__getOwnPropSymbols$3)
3381
+ for (var prop of __getOwnPropSymbols$3(b)) {
3382
+ if (__propIsEnum$3.call(b, prop))
3383
+ __defNormalProp$3(a, prop, b[prop]);
3382
3384
  }
3383
3385
  return a;
3384
3386
  };
3385
- var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
3386
- const initials$1 = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
3387
+ var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
3388
+ const initials$2 = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
3387
3389
  function Table(props) {
3388
3390
  const [expanded, setExpanded] = React.useState({});
3389
3391
  const preparedItems = React.useMemo(() => {
3390
3392
  return props.items.map((item) => {
3391
3393
  var _a;
3392
- return __spreadProps$2(__spreadValues$2({}, item), {
3394
+ return __spreadProps$3(__spreadValues$3({}, item), {
3393
3395
  submissionCount: ((_a = item.submissions) == null ? void 0 : _a.length) || 0
3394
3396
  });
3395
3397
  });
3396
3398
  }, [props.items]);
3397
3399
  const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);
3400
+ const showActions = !!props.onReview || !!props.onComment;
3401
+ const actionsWidthClass = props.onReview && props.onComment ? "w-64" : "w-36";
3398
3402
  if (props.items.length === 0) {
3399
3403
  return /* @__PURE__ */ React.createElement(
3400
3404
  PlaceholderBanner,
@@ -3406,17 +3410,17 @@ function Table(props) {
3406
3410
  }
3407
3411
  );
3408
3412
  }
3409
- return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-4 px-4" }, /* @__PURE__ */ React.createElement(SortableHeader, { label: "Student Name", sortKey: "name", sortConfig, onSort: requestSort, className: "flex-1" }), /* @__PURE__ */ React.createElement(SortableHeader, { label: "Files", sortKey: "submissionCount", sortConfig, onSort: requestSort, className: "w-16 shrink-0" }), props.onReview && /* @__PURE__ */ React.createElement("div", { className: "w-36 shrink-0" }), /* @__PURE__ */ React.createElement("div", { className: "w-4 shrink-0" })), sortedItems.map((row) => {
3413
+ return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-4 px-4" }, /* @__PURE__ */ React.createElement(SortableHeader, { label: "Student Name", sortKey: "name", sortConfig, onSort: requestSort, className: "flex-1" }), /* @__PURE__ */ React.createElement(SortableHeader, { label: "Files", sortKey: "submissionCount", sortConfig, onSort: requestSort, className: "w-16 shrink-0" }), showActions && /* @__PURE__ */ React.createElement("div", { className: `${actionsWidthClass} shrink-0` }), /* @__PURE__ */ React.createElement("div", { className: "w-4 shrink-0" })), sortedItems.map((row) => {
3410
3414
  const isOpen = !!expanded[row.userId];
3411
3415
  return /* @__PURE__ */ React.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React.createElement(
3412
3416
  "div",
3413
3417
  {
3414
- onClick: () => setExpanded(__spreadProps$2(__spreadValues$2({}, expanded), { [row.userId]: !isOpen })),
3418
+ onClick: () => setExpanded(__spreadProps$3(__spreadValues$3({}, expanded), { [row.userId]: !isOpen })),
3415
3419
  className: "flex cursor-pointer items-center gap-4 p-4"
3416
3420
  },
3417
- /* @__PURE__ */ React.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-3" }, row.avatar ? /* @__PURE__ */ React.createElement("img", { src: row.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React.createElement("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" }, initials$1(row.name)), /* @__PURE__ */ React.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React.createElement("div", { className: "truncate text-sm font-bold text-dark-blue-400" }, row.name), /* @__PURE__ */ React.createElement("div", { className: "truncate text-xs text-slate-400" }, row.email))),
3421
+ /* @__PURE__ */ React.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-3" }, row.avatar ? /* @__PURE__ */ React.createElement("img", { src: row.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React.createElement("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" }, initials$2(row.name)), /* @__PURE__ */ React.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React.createElement("div", { className: "truncate text-sm font-bold text-dark-blue-400" }, row.name), /* @__PURE__ */ React.createElement("div", { className: "truncate text-xs text-slate-400" }, row.email))),
3418
3422
  /* @__PURE__ */ React.createElement("div", { className: "w-16 shrink-0 text-sm font-bold text-dark-blue-400" }, row.submissions.length),
3419
- props.onReview && /* @__PURE__ */ React.createElement("div", { className: "w-36 shrink-0" }, /* @__PURE__ */ React.createElement(
3423
+ showActions && /* @__PURE__ */ React.createElement("div", { className: `flex ${actionsWidthClass} shrink-0 gap-2` }, props.onReview && /* @__PURE__ */ React.createElement(
3420
3424
  "button",
3421
3425
  {
3422
3426
  onClick: (e) => {
@@ -3426,6 +3430,16 @@ function Table(props) {
3426
3430
  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"
3427
3431
  },
3428
3432
  "Review Submission"
3433
+ ), props.onComment && /* @__PURE__ */ React.createElement(
3434
+ "button",
3435
+ {
3436
+ onClick: (e) => {
3437
+ e.stopPropagation();
3438
+ props.onComment(row);
3439
+ },
3440
+ 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"
3441
+ },
3442
+ "Comment"
3429
3443
  )),
3430
3444
  /* @__PURE__ */ React.createElement(IconChevronRight, { size: 16, stroke: 2, className: `w-4 shrink-0 text-slate-300 transition-transform ${isOpen ? "rotate-90" : ""}` })
3431
3445
  ), isOpen && /* @__PURE__ */ React.createElement("div", { className: "border-t border-slate-100 px-4 py-3" }, /* @__PURE__ */ React.createElement(
@@ -3443,10 +3457,10 @@ function Table(props) {
3443
3457
  }));
3444
3458
  }
3445
3459
 
3446
- const initials = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
3460
+ const initials$1 = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
3447
3461
  function SubmissionDetail(props) {
3448
3462
  const { student } = props;
3449
- return /* @__PURE__ */ React.createElement("div", { className: "flex w-full flex-col gap-4 px-4 py-8" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-2 text-xs text-slate-400" }, /* @__PURE__ */ React.createElement("button", { onClick: props.onBack, className: "font-bold text-sky-blue-400 hover:underline" }, "File Locker"), /* @__PURE__ */ React.createElement("span", null, "/"), /* @__PURE__ */ React.createElement("span", { className: "font-bold text-dark-blue-400" }, student.name)), /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-4 rounded-2xl border border-slate-200 bg-white p-5 shadow-sm" }, student.avatar ? /* @__PURE__ */ React.createElement("img", { src: student.avatar, className: "h-12 w-12 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React.createElement("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" }, initials(student.name)), /* @__PURE__ */ React.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React.createElement("div", { className: "text-lg font-extrabold text-dark-blue-400" }, student.name), /* @__PURE__ */ React.createElement("div", { className: "mt-0.5 text-xs text-slate-400" }, student.email, props.context ? ` \xB7 ${props.context}` : "")), /* @__PURE__ */ React.createElement("div", { className: "shrink-0 rounded-full bg-slate-100 px-3 py-1 text-xs font-bold text-slate-500" }, student.submissions.length, " file", student.submissions.length === 1 ? "" : "s")), /* @__PURE__ */ React.createElement("div", { className: "rounded-2xl border border-slate-200 bg-white p-5 shadow-sm" }, /* @__PURE__ */ React.createElement("div", { className: "text-sm font-extrabold text-dark-blue-400" }, "Files"), /* @__PURE__ */ React.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React.createElement(
3463
+ return /* @__PURE__ */ React.createElement("div", { className: "flex w-full flex-col gap-4 px-4 py-8" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-2 text-xs text-slate-400" }, /* @__PURE__ */ React.createElement("button", { onClick: props.onBack, className: "font-bold text-sky-blue-400 hover:underline" }, "File Locker"), /* @__PURE__ */ React.createElement("span", null, "/"), /* @__PURE__ */ React.createElement("span", { className: "font-bold text-dark-blue-400" }, student.name)), /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-4 rounded-2xl border border-slate-200 bg-white p-5 shadow-sm" }, student.avatar ? /* @__PURE__ */ React.createElement("img", { src: student.avatar, className: "h-12 w-12 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React.createElement("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" }, initials$1(student.name)), /* @__PURE__ */ React.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React.createElement("div", { className: "text-lg font-extrabold text-dark-blue-400" }, student.name), /* @__PURE__ */ React.createElement("div", { className: "mt-0.5 text-xs text-slate-400" }, student.email, props.context ? ` \xB7 ${props.context}` : "")), /* @__PURE__ */ React.createElement("div", { className: "shrink-0 rounded-full bg-slate-100 px-3 py-1 text-xs font-bold text-slate-500" }, student.submissions.length, " file", student.submissions.length === 1 ? "" : "s")), /* @__PURE__ */ React.createElement("div", { className: "rounded-2xl border border-slate-200 bg-white p-5 shadow-sm" }, /* @__PURE__ */ React.createElement("div", { className: "text-sm font-extrabold text-dark-blue-400" }, "Files"), /* @__PURE__ */ React.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React.createElement(
3450
3464
  Stack,
3451
3465
  {
3452
3466
  items: student.submissions,
@@ -3473,33 +3487,33 @@ function SubmissionDetail(props) {
3473
3487
  )));
3474
3488
  }
3475
3489
 
3476
- var __defProp$1 = Object.defineProperty;
3477
- var __defProps$1 = Object.defineProperties;
3478
- var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
3479
- var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
3480
- var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
3481
- var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
3482
- var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3483
- var __spreadValues$1 = (a, b) => {
3490
+ var __defProp$2 = Object.defineProperty;
3491
+ var __defProps$2 = Object.defineProperties;
3492
+ var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
3493
+ var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
3494
+ var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
3495
+ var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
3496
+ var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3497
+ var __spreadValues$2 = (a, b) => {
3484
3498
  for (var prop in b || (b = {}))
3485
- if (__hasOwnProp$1.call(b, prop))
3486
- __defNormalProp$1(a, prop, b[prop]);
3487
- if (__getOwnPropSymbols$1)
3488
- for (var prop of __getOwnPropSymbols$1(b)) {
3489
- if (__propIsEnum$1.call(b, prop))
3490
- __defNormalProp$1(a, prop, b[prop]);
3499
+ if (__hasOwnProp$2.call(b, prop))
3500
+ __defNormalProp$2(a, prop, b[prop]);
3501
+ if (__getOwnPropSymbols$2)
3502
+ for (var prop of __getOwnPropSymbols$2(b)) {
3503
+ if (__propIsEnum$2.call(b, prop))
3504
+ __defNormalProp$2(a, prop, b[prop]);
3491
3505
  }
3492
3506
  return a;
3493
3507
  };
3494
- var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
3508
+ var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
3495
3509
  const useFilteredStudents = (students) => {
3496
3510
  return React.useMemo(() => {
3497
- const byBadge = (badgeId) => students.map((s) => __spreadProps$1(__spreadValues$1({}, s), {
3511
+ const byBadge = (badgeId) => students.map((s) => __spreadProps$2(__spreadValues$2({}, s), {
3498
3512
  submissions: (s.submissions || []).filter(
3499
3513
  (sub) => sub.badgeId === badgeId
3500
3514
  )
3501
3515
  })).filter((s) => s.submissions.length);
3502
- const byLesson = (lessonName) => students.map((s) => __spreadProps$1(__spreadValues$1({}, s), {
3516
+ const byLesson = (lessonName) => students.map((s) => __spreadProps$2(__spreadValues$2({}, s), {
3503
3517
  submissions: (s.submissions || []).filter(
3504
3518
  (sub) => sub.lessonName === lessonName
3505
3519
  )
@@ -3510,7 +3524,7 @@ const useFilteredStudents = (students) => {
3510
3524
  (c) => c.startsWith(pathwayId)
3511
3525
  )
3512
3526
  ).map((b) => b.badgeId);
3513
- return students.map((s) => __spreadProps$1(__spreadValues$1({}, s), {
3527
+ return students.map((s) => __spreadProps$2(__spreadValues$2({}, s), {
3514
3528
  submissions: (s.submissions || []).filter(
3515
3529
  (sub) => validBadgeIds.includes(sub.badgeId)
3516
3530
  )
@@ -3520,26 +3534,108 @@ const useFilteredStudents = (students) => {
3520
3534
  }, [students]);
3521
3535
  };
3522
3536
 
3523
- var __defProp = Object.defineProperty;
3524
- var __defProps = Object.defineProperties;
3525
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
3526
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3527
- var __hasOwnProp = Object.prototype.hasOwnProperty;
3528
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
3529
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3530
- var __spreadValues = (a, b) => {
3537
+ const TARGETS = [
3538
+ { value: "none", label: "General" },
3539
+ { value: "badge", label: "Badge" },
3540
+ { value: "lesson", label: "Lesson" }
3541
+ ];
3542
+ const 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";
3543
+ function LeaveCommentModal(props) {
3544
+ const [userId, setUserId] = React.useState("");
3545
+ const [target, setTarget] = React.useState("none");
3546
+ const [badgeId, setBadgeId] = React.useState("");
3547
+ const [lessonId, setLessonId] = React.useState("");
3548
+ const [commentText, setCommentText] = React.useState("");
3549
+ const [requireValidation, setRequireValidation] = React.useState(false);
3550
+ React.useEffect(() => {
3551
+ if (!props.opened)
3552
+ return;
3553
+ setUserId(props.initialUserId || "");
3554
+ setBadgeId(props.initialBadgeId || "");
3555
+ setLessonId(props.initialLessonId || "");
3556
+ setTarget(props.initialBadgeId ? "badge" : props.initialLessonId ? "lesson" : "none");
3557
+ setCommentText("");
3558
+ setRequireValidation(false);
3559
+ }, [props.opened, props.initialUserId, props.initialBadgeId, props.initialLessonId]);
3560
+ const canSubmit = !!userId && !!commentText.trim() && (target !== "badge" || !!badgeId) && (target !== "lesson" || !!lessonId);
3561
+ const onSubmit = (e) => {
3562
+ e.preventDefault();
3563
+ if (!canSubmit)
3564
+ return;
3565
+ props.onSubmit({
3566
+ userId,
3567
+ commentText: commentText.trim(),
3568
+ requireValidation: target === "badge" && requireValidation,
3569
+ badgeId: target === "badge" ? badgeId : void 0,
3570
+ lessonId: target === "lesson" ? lessonId : void 0
3571
+ });
3572
+ };
3573
+ return /* @__PURE__ */ React.createElement(
3574
+ Modal,
3575
+ {
3576
+ opened: props.opened,
3577
+ onClose: props.onClose,
3578
+ title: /* @__PURE__ */ React.createElement("span", { className: "text-base font-extrabold text-dark-blue-400" }, "Leave a Comment"),
3579
+ size: "md",
3580
+ centered: true
3581
+ },
3582
+ /* @__PURE__ */ React.createElement("form", { onSubmit, className: "flex flex-col gap-3.5" }, !props.hideStudentPicker && /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("label", { className: "mb-1 block text-xs font-bold text-slate-500" }, "Student"), /* @__PURE__ */ React.createElement("select", { value: userId, onChange: (e) => setUserId(e.target.value), className: inputClass }, /* @__PURE__ */ React.createElement("option", { value: "" }, "Select a student"), props.students.map((s) => /* @__PURE__ */ React.createElement("option", { key: s.userId, value: s.userId }, s.email ? `${s.name} (${s.email})` : s.name)))), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("label", { className: "mb-1 block text-xs font-bold text-slate-500" }, "Leave this comment on"), /* @__PURE__ */ React.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TARGETS.map((t) => /* @__PURE__ */ React.createElement(
3583
+ "button",
3584
+ {
3585
+ key: t.value,
3586
+ type: "button",
3587
+ onClick: () => setTarget(t.value),
3588
+ 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"}`
3589
+ },
3590
+ t.label
3591
+ )))), target === "badge" && /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("label", { className: "mb-1 block text-xs font-bold text-slate-500" }, "Badge"), /* @__PURE__ */ React.createElement("select", { value: badgeId, onChange: (e) => setBadgeId(e.target.value), className: inputClass }, /* @__PURE__ */ React.createElement("option", { value: "" }, "Select a badge"), props.badges.map((b) => /* @__PURE__ */ React.createElement("option", { key: b.badgeId, value: b.badgeId }, b.displayName)))), target === "lesson" && /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("label", { className: "mb-1 block text-xs font-bold text-slate-500" }, "Lesson"), /* @__PURE__ */ React.createElement("select", { value: lessonId, onChange: (e) => setLessonId(e.target.value), className: inputClass }, /* @__PURE__ */ React.createElement("option", { value: "" }, "Select a lesson"), props.lessons.map((l) => /* @__PURE__ */ React.createElement("option", { key: l.lessonId, value: l.lessonId }, l.displayName)))), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("label", { className: "mb-1 block text-xs font-bold text-slate-500" }, "Comment"), /* @__PURE__ */ React.createElement(
3592
+ "textarea",
3593
+ {
3594
+ value: commentText,
3595
+ onChange: (e) => setCommentText(e.target.value),
3596
+ placeholder: "Leave a comment...",
3597
+ rows: 4,
3598
+ className: `${inputClass} resize-none`
3599
+ }
3600
+ )), target === "badge" && !!badgeId && /* @__PURE__ */ React.createElement(
3601
+ Checkbox,
3602
+ {
3603
+ checked: requireValidation,
3604
+ onChange: (e) => setRequireValidation(e.currentTarget.checked),
3605
+ label: "Requires validation - unsubmits this badge until the comment is resolved"
3606
+ }
3607
+ ), /* @__PURE__ */ React.createElement(
3608
+ "button",
3609
+ {
3610
+ type: "submit",
3611
+ disabled: !canSubmit,
3612
+ className: "mt-1 rounded-lg bg-dark-blue-400 px-4 py-2.5 text-xs font-bold text-white disabled:opacity-40"
3613
+ },
3614
+ "Leave Comment"
3615
+ ))
3616
+ );
3617
+ }
3618
+
3619
+ var __defProp$1 = Object.defineProperty;
3620
+ var __defProps$1 = Object.defineProperties;
3621
+ var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
3622
+ var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
3623
+ var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
3624
+ var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
3625
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3626
+ var __spreadValues$1 = (a, b) => {
3531
3627
  for (var prop in b || (b = {}))
3532
- if (__hasOwnProp.call(b, prop))
3533
- __defNormalProp(a, prop, b[prop]);
3534
- if (__getOwnPropSymbols)
3535
- for (var prop of __getOwnPropSymbols(b)) {
3536
- if (__propIsEnum.call(b, prop))
3537
- __defNormalProp(a, prop, b[prop]);
3628
+ if (__hasOwnProp$1.call(b, prop))
3629
+ __defNormalProp$1(a, prop, b[prop]);
3630
+ if (__getOwnPropSymbols$1)
3631
+ for (var prop of __getOwnPropSymbols$1(b)) {
3632
+ if (__propIsEnum$1.call(b, prop))
3633
+ __defNormalProp$1(a, prop, b[prop]);
3538
3634
  }
3539
3635
  return a;
3540
3636
  };
3541
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
3542
- const TABS = [
3637
+ var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
3638
+ const TABS$1 = [
3543
3639
  { value: "students", label: "By student" },
3544
3640
  { value: "pathways", label: "By pathway" },
3545
3641
  { value: "badges", label: "By badge" },
@@ -3605,6 +3701,7 @@ const PathwayGroups = (props) => {
3605
3701
  items: filtered,
3606
3702
  hidePathway: true,
3607
3703
  onReview: (item) => props.onReview(item, filtered, p.title),
3704
+ onComment: props.onComment,
3608
3705
  onBadgeClick: props.onBadgeClick,
3609
3706
  onLessonClick: props.onLessonClick
3610
3707
  }
@@ -3642,6 +3739,7 @@ const BadgeGroups = (props) => {
3642
3739
  hideBadge: true,
3643
3740
  hidePathway: true,
3644
3741
  onReview: (item) => props.onReview(item, filtered, b.displayName),
3742
+ onComment: props.onComment,
3645
3743
  onLessonClick: props.onLessonClick
3646
3744
  }
3647
3745
  )
@@ -3673,11 +3771,12 @@ const LessonGroups = (props) => {
3673
3771
  count: countFiles(filtered),
3674
3772
  onTitleClick: props.onLessonClick ? () => props.onLessonClick(l.lessonId) : void 0
3675
3773
  },
3676
- /* @__PURE__ */ React.createElement(Table, { loading: props.loading, items: filtered, hideBadge: true, hideLesson: true, hidePathway: true, onReview: (item) => props.onReview(item, filtered, l.lessonName) })
3774
+ /* @__PURE__ */ React.createElement(Table, { loading: props.loading, items: filtered, hideBadge: true, hideLesson: true, hidePathway: true, onReview: (item) => props.onReview(item, filtered, l.lessonName), onComment: props.onComment })
3677
3775
  );
3678
3776
  }));
3679
3777
  };
3680
3778
  const FileLocker = (props) => {
3779
+ var _a;
3681
3780
  const [tab, setTab] = React.useState("students");
3682
3781
  const [reviewing, setReviewing] = React.useState(null);
3683
3782
  const [search, setSearch] = React.useState("");
@@ -3736,8 +3835,8 @@ const FileLocker = (props) => {
3736
3835
  return map;
3737
3836
  }, [props.badges]);
3738
3837
  const enrichedStudents = React.useMemo(() => {
3739
- return props.students.map((s) => __spreadProps(__spreadValues({}, s), {
3740
- submissions: (s.submissions || []).map((sub) => __spreadProps(__spreadValues({}, sub), {
3838
+ return props.students.map((s) => __spreadProps$1(__spreadValues$1({}, s), {
3839
+ submissions: (s.submissions || []).map((sub) => __spreadProps$1(__spreadValues$1({}, sub), {
3741
3840
  pathwayName: pathwayNameForBadge[sub.badgeId] || "",
3742
3841
  pathwayId: pathwayIdForBadge[sub.badgeId]
3743
3842
  }))
@@ -3754,7 +3853,18 @@ const FileLocker = (props) => {
3754
3853
  () => searchLower ? enrichedStudents.filter((s) => matchesSearch(s, searchLower)) : enrichedStudents,
3755
3854
  [enrichedStudents, searchLower]
3756
3855
  );
3856
+ const [commenting, setCommenting] = React.useState(null);
3757
3857
  const onReview = (item, list, context) => setReviewing({ student: item, list, context });
3858
+ const onCommentClick = (item) => {
3859
+ var _a2;
3860
+ const sub = (_a2 = item.submissions) == null ? void 0 : _a2[0];
3861
+ setCommenting({ userId: item.userId, badgeId: sub == null ? void 0 : sub.badgeId, lessonId: sub == null ? void 0 : sub.lessonId });
3862
+ };
3863
+ const onCommentSubmit = (comment) => {
3864
+ var _a2;
3865
+ (_a2 = props.onComment) == null ? void 0 : _a2.call(props, comment);
3866
+ setCommenting(null);
3867
+ };
3758
3868
  const onNav = (dir) => {
3759
3869
  if (!reviewing)
3760
3870
  return;
@@ -3762,7 +3872,7 @@ const FileLocker = (props) => {
3762
3872
  if (idx === -1)
3763
3873
  return;
3764
3874
  const next = reviewing.list[(idx + dir + reviewing.list.length) % reviewing.list.length];
3765
- setReviewing(__spreadProps(__spreadValues({}, reviewing), { student: next }));
3875
+ setReviewing(__spreadProps$1(__spreadValues$1({}, reviewing), { student: next }));
3766
3876
  };
3767
3877
  if (reviewing) {
3768
3878
  return /* @__PURE__ */ React.createElement(
@@ -3793,7 +3903,7 @@ const FileLocker = (props) => {
3793
3903
  },
3794
3904
  /* @__PURE__ */ React.createElement("option", { value: "" }, "Select a class"),
3795
3905
  props.classes.map((g) => /* @__PURE__ */ React.createElement("option", { key: g.classId, value: g.classId }, g.name))
3796
- ), !props.trial && /* @__PURE__ */ React.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS.map((t) => /* @__PURE__ */ React.createElement(
3906
+ ), !props.trial && /* @__PURE__ */ React.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$1.map((t) => /* @__PURE__ */ React.createElement(
3797
3907
  "button",
3798
3908
  {
3799
3909
  key: t.value,
@@ -3816,6 +3926,7 @@ const FileLocker = (props) => {
3816
3926
  loading: props.loading,
3817
3927
  items: searchedStudents,
3818
3928
  onReview: (item) => onReview(item, searchedStudents),
3929
+ onComment: onCommentClick,
3819
3930
  onBadgeClick: props.onBadgeClick,
3820
3931
  onLessonClick: props.onLessonClick,
3821
3932
  onPathwayClick: props.onPathwayClick
@@ -3829,6 +3940,7 @@ const FileLocker = (props) => {
3829
3940
  pathways: props.pathways || [],
3830
3941
  badges: props.badges || [],
3831
3942
  onReview,
3943
+ onComment: onCommentClick,
3832
3944
  onBadgeClick: props.onBadgeClick,
3833
3945
  onLessonClick: props.onLessonClick,
3834
3946
  onPathwayClick: props.onPathwayClick
@@ -3842,6 +3954,7 @@ const FileLocker = (props) => {
3842
3954
  badges: props.badges || [],
3843
3955
  pathwayNameForBadge,
3844
3956
  onReview,
3957
+ onComment: onCommentClick,
3845
3958
  onBadgeClick: props.onBadgeClick,
3846
3959
  onLessonClick: props.onLessonClick,
3847
3960
  onPathwayClick: props.onPathwayClick
@@ -3856,12 +3969,223 @@ const FileLocker = (props) => {
3856
3969
  badgeForLesson,
3857
3970
  pathwayNameForBadge,
3858
3971
  onReview,
3972
+ onComment: onCommentClick,
3859
3973
  onBadgeClick: props.onBadgeClick,
3860
3974
  onLessonClick: props.onLessonClick,
3861
3975
  onPathwayClick: props.onPathwayClick
3862
3976
  }
3977
+ ), /* @__PURE__ */ React.createElement(
3978
+ LeaveCommentModal,
3979
+ {
3980
+ opened: !!commenting,
3981
+ onClose: () => setCommenting(null),
3982
+ onSubmit: onCommentSubmit,
3983
+ hideStudentPicker: true,
3984
+ students: [],
3985
+ badges: ((_a = props.badges) == null ? void 0 : _a.map((b) => ({ badgeId: b.badgeId, displayName: b.displayName }))) || [],
3986
+ lessons: props.lessons.map((l) => ({ lessonId: l.lessonId, displayName: l.lessonName })),
3987
+ initialUserId: commenting == null ? void 0 : commenting.userId,
3988
+ initialBadgeId: commenting == null ? void 0 : commenting.badgeId,
3989
+ initialLessonId: commenting == null ? void 0 : commenting.lessonId
3990
+ }
3863
3991
  ));
3864
3992
  };
3865
3993
 
3866
- export { AdminProvider, App, Badge, Badges, Class, Classes, Dashboard, FileLocker, GettingStarted, Home, Lesson, Lessons, Navbar, Organization, Pathway, Pathways, People, StartAnonymousLesson, Student, SwitchAccount, TrialHome, TrialRegistration };
3994
+ const TABS = [
3995
+ { value: "students", label: "By student" },
3996
+ { value: "badges", label: "By badge" },
3997
+ { value: "lessons", label: "By lesson" }
3998
+ ];
3999
+ const groupBy = (items, keyOf, titleOf) => {
4000
+ const order = [];
4001
+ const map = /* @__PURE__ */ new Map();
4002
+ items.forEach((item) => {
4003
+ const key = keyOf(item);
4004
+ if (!key)
4005
+ return;
4006
+ if (!map.has(key)) {
4007
+ map.set(key, { key, title: titleOf(item), items: [] });
4008
+ order.push(key);
4009
+ }
4010
+ map.get(key).items.push(item);
4011
+ });
4012
+ return order.map((key) => map.get(key));
4013
+ };
4014
+ const CommentCenter = (props) => {
4015
+ const [tab, setTab] = React.useState("students");
4016
+ const [leavingComment, setLeavingComment] = React.useState(false);
4017
+ const groups = React.useMemo(() => {
4018
+ if (tab === "students")
4019
+ return groupBy(props.comments, (i) => i.recipientId, (i) => i.recipientName);
4020
+ if (tab === "badges")
4021
+ return groupBy(props.comments, (i) => i.badgeId, (i) => i.badgeName || "Badge");
4022
+ return groupBy(props.comments, (i) => i.lessonId, (i) => i.lessonName || "Lesson");
4023
+ }, [props.comments, tab]);
4024
+ return /* @__PURE__ */ React.createElement("div", { className: "flex w-full flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("h1", { className: "text-2xl font-extrabold tracking-tight text-dark-blue-400" }, "Comment Center"), /* @__PURE__ */ React.createElement("p", { className: "mt-1 text-sm text-slate-500" }, "Every comment left across your organization.")), /* @__PURE__ */ React.createElement(
4025
+ "button",
4026
+ {
4027
+ onClick: () => setLeavingComment(true),
4028
+ className: "rounded-lg bg-dark-blue-400 px-4 py-2.5 text-xs font-bold text-white"
4029
+ },
4030
+ "Leave a Comment"
4031
+ )), /* @__PURE__ */ React.createElement(
4032
+ "select",
4033
+ {
4034
+ value: props.classId,
4035
+ onChange: (e) => props.onClassChange(e.target.value),
4036
+ 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"
4037
+ },
4038
+ /* @__PURE__ */ React.createElement("option", { value: "" }, "Select a class"),
4039
+ props.classes.map((c) => /* @__PURE__ */ React.createElement("option", { key: c.classId, value: c.classId }, c.name))
4040
+ ), /* @__PURE__ */ React.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS.map((t) => /* @__PURE__ */ React.createElement(
4041
+ "button",
4042
+ {
4043
+ key: t.value,
4044
+ onClick: () => setTab(t.value),
4045
+ 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"}`
4046
+ },
4047
+ t.label
4048
+ ))), props.comments.length === 0 ? /* @__PURE__ */ React.createElement(
4049
+ PlaceholderBanner,
4050
+ {
4051
+ title: "No comments to display",
4052
+ description: "Nothing has been left for this organization yet.",
4053
+ loading: props.loading,
4054
+ icon: "thinking"
4055
+ }
4056
+ ) : /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React.createElement("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" }, /* @__PURE__ */ React.createElement("div", null, tab === "students" ? "Badge / Lesson" : "Student"), /* @__PURE__ */ React.createElement("div", null, "Left By"), /* @__PURE__ */ React.createElement("div", null, "Comment"), /* @__PURE__ */ React.createElement("div", { className: "text-center" }, "Flag"), /* @__PURE__ */ React.createElement("div", { className: "text-center" }, "Status")), groups.map((group) => /* @__PURE__ */ React.createElement("div", { key: group.key, className: "overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React.createElement("div", { className: "border-b border-slate-100 bg-slate-50/60 px-5 py-2.5 text-xs font-extrabold text-dark-blue-400" }, group.title), group.items.map((item, i) => /* @__PURE__ */ React.createElement(
4057
+ "div",
4058
+ {
4059
+ key: item.commentId,
4060
+ 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" : ""}`
4061
+ },
4062
+ /* @__PURE__ */ React.createElement("div", { className: "truncate text-xs font-bold text-dark-blue-400" }, tab === "students" ? item.badgeName || item.lessonName || "General" : item.recipientName),
4063
+ /* @__PURE__ */ React.createElement("div", { className: "truncate text-[11px] text-slate-500" }, item.authorName || "\u2014"),
4064
+ /* @__PURE__ */ React.createElement("div", { className: "text-xs text-slate-600" }, item.commentText),
4065
+ /* @__PURE__ */ React.createElement("div", { className: "flex justify-center" }, item.requireValidation && /* @__PURE__ */ React.createElement("span", { className: "rounded-full bg-gold-400/15 px-2 py-0.5 text-[10px] font-bold text-dark-blue-400" }, "Requires validation")),
4066
+ /* @__PURE__ */ React.createElement("div", { className: "flex justify-center" }, !item.requireValidation ? /* @__PURE__ */ React.createElement("span", { className: "text-[11px] text-slate-400" }, "\u2014") : item.resolvedAt ? /* @__PURE__ */ React.createElement(IconCheck, { size: 16, stroke: 3, className: "text-mint-400" }) : /* @__PURE__ */ React.createElement(
4067
+ "button",
4068
+ {
4069
+ onClick: () => props.onResolve(item.commentId),
4070
+ 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"
4071
+ },
4072
+ "Resolve"
4073
+ ))
4074
+ ))))), /* @__PURE__ */ React.createElement(
4075
+ LeaveCommentModal,
4076
+ {
4077
+ opened: leavingComment,
4078
+ onClose: () => setLeavingComment(false),
4079
+ onSubmit: (comment) => {
4080
+ props.onLeaveComment(comment);
4081
+ setLeavingComment(false);
4082
+ },
4083
+ students: props.students,
4084
+ badges: props.badges,
4085
+ lessons: props.lessons
4086
+ }
4087
+ ));
4088
+ };
4089
+
4090
+ var __defProp = Object.defineProperty;
4091
+ var __defProps = Object.defineProperties;
4092
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4093
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
4094
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4095
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
4096
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4097
+ var __spreadValues = (a, b) => {
4098
+ for (var prop in b || (b = {}))
4099
+ if (__hasOwnProp.call(b, prop))
4100
+ __defNormalProp(a, prop, b[prop]);
4101
+ if (__getOwnPropSymbols)
4102
+ for (var prop of __getOwnPropSymbols(b)) {
4103
+ if (__propIsEnum.call(b, prop))
4104
+ __defNormalProp(a, prop, b[prop]);
4105
+ }
4106
+ return a;
4107
+ };
4108
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
4109
+ const initials = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
4110
+ const ValidationCenter = (props) => {
4111
+ const [selected, setSelected] = React.useState({});
4112
+ React.useEffect(() => {
4113
+ setSelected({});
4114
+ }, [props.classId, props.badgeId]);
4115
+ const toggle = (userId, checked) => setSelected((prev) => __spreadProps(__spreadValues({}, prev), { [userId]: checked }));
4116
+ const selectedIds = Object.keys(selected).filter((userId) => selected[userId]);
4117
+ const eligible = props.students.filter((s) => !s.hasCredit);
4118
+ const onSelectAll = (checked) => {
4119
+ const next = {};
4120
+ if (checked)
4121
+ eligible.forEach((s) => {
4122
+ next[s.userId] = true;
4123
+ });
4124
+ setSelected(next);
4125
+ };
4126
+ return /* @__PURE__ */ React.createElement("div", { className: "flex w-full flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("h1", { className: "text-2xl font-extrabold tracking-tight text-dark-blue-400" }, "Validation Center"), /* @__PURE__ */ React.createElement("p", { className: "mt-1 text-sm text-slate-500" }, "Directly credit students for a badge")), /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap gap-3" }, /* @__PURE__ */ React.createElement(
4127
+ "select",
4128
+ {
4129
+ value: props.classId,
4130
+ onChange: (e) => props.onClassChange(e.target.value),
4131
+ 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"
4132
+ },
4133
+ /* @__PURE__ */ React.createElement("option", { value: "" }, "Select a class"),
4134
+ props.classes.map((c) => /* @__PURE__ */ React.createElement("option", { key: c.classId, value: c.classId }, c.name))
4135
+ ), /* @__PURE__ */ React.createElement(
4136
+ "select",
4137
+ {
4138
+ value: props.badgeId,
4139
+ onChange: (e) => props.onBadgeChange(e.target.value),
4140
+ 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"
4141
+ },
4142
+ /* @__PURE__ */ React.createElement("option", { value: "" }, "Select a badge"),
4143
+ props.badges.map((b) => /* @__PURE__ */ React.createElement("option", { key: b.badgeId, value: b.badgeId }, b.displayName))
4144
+ )), !props.badgeId ? /* @__PURE__ */ React.createElement(
4145
+ PlaceholderBanner,
4146
+ {
4147
+ title: "Select a badge",
4148
+ description: "Choose a badge above to see which students already have credit and give it to the rest.",
4149
+ loading: props.loading,
4150
+ icon: "badges"
4151
+ }
4152
+ ) : props.students.length === 0 ? /* @__PURE__ */ React.createElement(
4153
+ PlaceholderBanner,
4154
+ {
4155
+ title: "No students to display",
4156
+ description: "There are no students in this class yet.",
4157
+ loading: props.loading,
4158
+ icon: "groups"
4159
+ }
4160
+ ) : /* @__PURE__ */ React.createElement("div", { className: "overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-[2.2fr_1fr] items-center gap-3 border-b border-slate-100 px-5 py-3" }, /* @__PURE__ */ React.createElement("div", { className: "text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, "Student"), /* @__PURE__ */ React.createElement("div", { className: "flex items-center justify-center gap-2 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, /* @__PURE__ */ React.createElement(
4161
+ Checkbox,
4162
+ {
4163
+ checked: eligible.length > 0 && selectedIds.length === eligible.length,
4164
+ indeterminate: selectedIds.length > 0 && selectedIds.length < eligible.length,
4165
+ onChange: (e) => onSelectAll(e.currentTarget.checked),
4166
+ disabled: eligible.length === 0
4167
+ }
4168
+ ), "Give Credit")), props.students.map((row, i) => /* @__PURE__ */ React.createElement(
4169
+ "div",
4170
+ {
4171
+ key: row.userId,
4172
+ 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" : ""}`
4173
+ },
4174
+ /* @__PURE__ */ React.createElement("div", { className: "flex min-w-0 items-center gap-2.5" }, row.avatar ? /* @__PURE__ */ React.createElement("img", { className: "h-8 w-8 shrink-0 rounded-full object-cover", src: row.avatar, alt: "" }) : /* @__PURE__ */ React.createElement("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" }, initials(row.name)), /* @__PURE__ */ React.createElement("div", { className: "truncate text-xs font-bold text-dark-blue-400" }, row.name)),
4175
+ /* @__PURE__ */ React.createElement("div", { className: "flex justify-center" }, row.hasCredit ? /* @__PURE__ */ React.createElement(IconCheck, { size: 18, stroke: 3, className: "text-mint-400" }) : /* @__PURE__ */ React.createElement(Checkbox, { checked: !!selected[row.userId], onChange: (e) => toggle(row.userId, e.currentTarget.checked) }))
4176
+ ))), props.badgeId && props.students.length > 0 && /* @__PURE__ */ React.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ React.createElement(
4177
+ "button",
4178
+ {
4179
+ onClick: () => props.onSubmit(selectedIds),
4180
+ disabled: selectedIds.length === 0,
4181
+ className: "rounded-lg bg-dark-blue-400 px-5 py-2.5 text-xs font-bold text-white disabled:opacity-40"
4182
+ },
4183
+ "Validate ",
4184
+ selectedIds.length > 0 ? `${selectedIds.length} ` : "",
4185
+ "Student",
4186
+ selectedIds.length === 1 ? "" : "s"
4187
+ )));
4188
+ };
4189
+
4190
+ export { AdminProvider, App, Badge, Badges, Class, Classes, CommentCenter, Dashboard, FileLocker, GettingStarted, Home, Lesson, Lessons, Navbar, Organization, Pathway, Pathways, People, StartAnonymousLesson, Student, SwitchAccount, TrialHome, TrialRegistration, ValidationCenter };
3867
4191
  //# sourceMappingURL=index.mjs.map