@local-civics/mgmt-ui 0.1.220 → 0.1.222

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,11 +1,11 @@
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, IconBatteryEco, IconBooks, IconBackpack, IconClipboardCopy, IconTableExport, IconChevronDown, IconArrowLeft, IconSearch, IconCheck, IconTrash, IconPlus, IconLink, IconDownload, IconCloudUpload, IconInfoCircle, IconPlaylistAdd, IconPointer, IconX, IconScribble, IconSchool, IconPodium, IconBriefcase, IconPresentation, IconNews, IconTools, IconBrandInstagram, IconBrandLinkedin, IconBrandFacebook, IconExternalLink, IconChevronLeft } from '@tabler/icons';
4
- import { Avatar, createStyles, Modal, Center, Loader, Container, Group, Button, Title, Text, UnstyledButton, Card, ScrollArea, SimpleGrid, Image, Drawer, Divider, TextInput, Tooltip, ActionIcon, Badge as Badge$1, Overlay, Stack as Stack$5, ThemeIcon, Checkbox, Autocomplete, createEmotionCache, MantineProvider, AppShell } from '@mantine/core';
3
+ import { IconChevronRight, IconVideo, IconSwitchHorizontal, IconLogout, IconHome2, IconGauge, IconCategory2, IconRoute, IconAlbum, IconLambda, IconClipboard, IconBuilding, IconBooks, IconBackpack, IconClipboardCopy, IconTableExport, IconChevronDown, IconArrowLeft, IconSearch, IconCheck, IconTrash, IconPlus, IconLink, IconDownload, IconCloudUpload, IconInfoCircle, IconPlaylistAdd, IconPointer, IconX, IconScribble, IconSchool, IconPodium, IconBriefcase, IconPresentation, IconNews, IconTools, IconBrandInstagram, IconBrandLinkedin, IconBrandFacebook, IconExternalLink, IconChevronLeft } from '@tabler/icons';
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
+ import 'external-svg-loader';
6
7
  import { showNotification, NotificationsProvider } from '@mantine/notifications';
7
8
  export { showNotification, updateNotification } from '@mantine/notifications';
8
- import 'external-svg-loader';
9
9
  import { Dropzone, MIME_TYPES } from '@mantine/dropzone';
10
10
  import { useForm } from '@mantine/form';
11
11
  import * as papa from 'papaparse';
@@ -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}.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-1{margin-top:.25rem}.mt-6{margin-top:1.5rem}.mt-2{margin-top:.5rem}.mt-1\\.5{margin-top:.375rem}.-ml-2{margin-left:-.5rem}.mt-4{margin-top:1rem}.mb-8{margin-bottom:2rem}.ml-\\[29px\\]{margin-left:29px}.block{display:block}.inline{display:inline}.flex{display: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-11{height:2.75rem}.h-16{height:4rem}.h-\\[30px\\]{height:30px}.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-40{width:10rem}.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-24{width:6rem}.w-\\[250px\\]{width:250px}.w-screen{width:100vw}.w-11{width:2.75rem}.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}.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-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)))}.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-\\[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-r{border-right-width:1px}.border-l{border-left-width:1px}.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\\/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-sky-blue-400\\/40{border-color:rgba(59,208,242,.4)}.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-sky-blue-400\\/15{background-color:rgba(59,208,242,.15)}.bg-mint-400\\/15{background-color:rgba(30,226,175,.15)}.bg-gold-400\\/15{background-color:rgba(255,212,77,.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}.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-\\[10\\.5px\\]{font-size:10.5px}.text-lg{font-size:1.125rem;line-height:1.75rem}.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{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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)}.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)}*,: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\\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/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-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}";
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}.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-1{margin-top:.25rem}.mt-6{margin-top:1.5rem}.mt-2{margin-top:.5rem}.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}.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-11{height:2.75rem}.h-16{height:4rem}.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-40{width:10rem}.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-24{width:6rem}.w-\\[250px\\]{width:250px}.w-screen{width:100vw}.w-11{width:2.75rem}.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-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-6{gap:1.5rem}.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)))}.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-\\[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\\/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-sky-blue-400\\/40{border-color:rgba(59,208,242,.4)}.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}.px-1{padding-left:.25rem;padding-right:.25rem}.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-\\[10\\.5px\\]{font-size:10.5px}.text-lg{font-size:1.125rem;line-height:1.75rem}.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)}*,: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\\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/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-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))}}";
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$g = Object.defineProperty;
128
- var __defProps$d = Object.defineProperties;
129
- var __getOwnPropDescs$d = Object.getOwnPropertyDescriptors;
130
- var __getOwnPropSymbols$g = Object.getOwnPropertySymbols;
131
- var __hasOwnProp$g = Object.prototype.hasOwnProperty;
132
- var __propIsEnum$g = Object.prototype.propertyIsEnumerable;
133
- var __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
134
- var __spreadValues$g = (a, b) => {
127
+ var __defProp$h = Object.defineProperty;
128
+ var __defProps$e = Object.defineProperties;
129
+ var __getOwnPropDescs$e = Object.getOwnPropertyDescriptors;
130
+ var __getOwnPropSymbols$h = Object.getOwnPropertySymbols;
131
+ var __hasOwnProp$h = Object.prototype.hasOwnProperty;
132
+ var __propIsEnum$h = Object.prototype.propertyIsEnumerable;
133
+ var __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
134
+ var __spreadValues$h = (a, b) => {
135
135
  for (var prop in b || (b = {}))
136
- if (__hasOwnProp$g.call(b, prop))
137
- __defNormalProp$g(a, prop, b[prop]);
138
- if (__getOwnPropSymbols$g)
139
- for (var prop of __getOwnPropSymbols$g(b)) {
140
- if (__propIsEnum$g.call(b, prop))
141
- __defNormalProp$g(a, prop, b[prop]);
136
+ if (__hasOwnProp$h.call(b, prop))
137
+ __defNormalProp$h(a, prop, b[prop]);
138
+ if (__getOwnPropSymbols$h)
139
+ for (var prop of __getOwnPropSymbols$h(b)) {
140
+ if (__propIsEnum$h.call(b, prop))
141
+ __defNormalProp$h(a, prop, b[prop]);
142
142
  }
143
143
  return a;
144
144
  };
145
- var __spreadProps$d = (a, b) => __defProps$d(a, __getOwnPropDescs$d(b));
145
+ var __spreadProps$e = (a, b) => __defProps$e(a, __getOwnPropDescs$e(b));
146
146
  const data = [
147
147
  { label: "Home", icon: IconHome2, accent: "cyan" },
148
148
  { label: "Dashboard", icon: IconGauge, accent: "mint" },
@@ -169,12 +169,12 @@ function Navbar(props) {
169
169
  }
170
170
  return /* @__PURE__ */ React.createElement(
171
171
  LinksGroup,
172
- __spreadProps$d(__spreadValues$g(__spreadValues$g({
172
+ __spreadProps$e(__spreadValues$h(__spreadValues$h({
173
173
  key: item.label,
174
174
  active: props.active
175
175
  }, item), context), {
176
176
  links: (item.links || []).map((link) => {
177
- return __spreadValues$g(__spreadValues$g({}, link), props.links[`${item.label}/${link.label}`] || { notifications: 0, href: "" });
177
+ return __spreadValues$h(__spreadValues$h({}, link), props.links[`${item.label}/${link.label}`] || { notifications: 0, href: "" });
178
178
  })
179
179
  })
180
180
  );
@@ -194,7 +194,7 @@ const UtilLink = (props) => {
194
194
  );
195
195
  };
196
196
 
197
- const useStyles$9 = createStyles((theme) => ({
197
+ const useStyles$8 = createStyles((theme) => ({
198
198
  inner: {
199
199
  paddingTop: theme.spacing.xl,
200
200
  paddingBottom: theme.spacing.xl * 4
@@ -230,7 +230,7 @@ const useStyles$9 = createStyles((theme) => ({
230
230
  }
231
231
  }));
232
232
  const GettingStarted = (props) => {
233
- const { classes } = useStyles$9();
233
+ const { classes } = useStyles$8();
234
234
  return /* @__PURE__ */ React.createElement(
235
235
  Modal,
236
236
  {
@@ -244,78 +244,6 @@ const GettingStarted = (props) => {
244
244
  );
245
245
  };
246
246
 
247
- const useStyles$8 = createStyles((theme) => ({
248
- title: {
249
- fontSize: 34,
250
- fontWeight: 900,
251
- [theme.fn.smallerThan("sm")]: {
252
- fontSize: 24
253
- }
254
- },
255
- description: {
256
- maxWidth: 600,
257
- margin: "auto",
258
- "&::after": {
259
- content: '""',
260
- display: "block",
261
- backgroundColor: theme.fn.primaryColor(),
262
- width: 45,
263
- height: 2,
264
- marginTop: theme.spacing.sm,
265
- marginLeft: "auto",
266
- marginRight: "auto"
267
- }
268
- },
269
- card: {
270
- transition: "box-shadow 150ms ease, transform 100ms ease",
271
- "&:hover": {
272
- boxShadow: `${theme.shadows.md} !important`,
273
- transform: "scale(1.02)"
274
- }
275
- },
276
- cardTitle: {
277
- "&::after": {
278
- content: '""',
279
- display: "block",
280
- backgroundColor: theme.fn.primaryColor(),
281
- width: 45,
282
- height: 2,
283
- marginTop: theme.spacing.sm
284
- }
285
- }
286
- }));
287
- const SwitchAccount = (props) => {
288
- const { classes, theme } = useStyles$8();
289
- const options = props.accounts.map((a) => {
290
- return /* @__PURE__ */ React.createElement(UnstyledButton, { onClick: () => props.onClick && props.onClick(a.accountId), key: a.accountId, p: theme.spacing.md }, /* @__PURE__ */ React.createElement(Card, { withBorder: true, shadow: "md", radius: "md", className: classes.card, p: "xl" }, a.isAdmin && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(IconBatteryEco, { size: 50, stroke: 2, color: theme.fn.primaryColor() })), a.isGroupAdmin && !a.isAdmin && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(IconBooks, { size: 50, stroke: 2, color: theme.fn.primaryColor() })), !a.isAdmin && !a.isGroupAdmin && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(IconBackpack, { size: 50, stroke: 2, color: theme.fn.primaryColor() })), /* @__PURE__ */ React.createElement(Text, { size: "lg", weight: 500, className: classes.cardTitle, mt: "md" }, a.name), /* @__PURE__ */ React.createElement(Text, { size: "sm", color: "dimmed", mt: "sm" }, a.isAdmin ? "Admin" : a.isGroupAdmin ? "Educator" : "Student")));
291
- });
292
- return /* @__PURE__ */ React.createElement(
293
- Modal,
294
- {
295
- centered: true,
296
- fullScreen: true,
297
- opened: props.opened,
298
- onClose: () => props.onClose && props.onClose(),
299
- size: "sm"
300
- },
301
- /* @__PURE__ */ React.createElement("div", { style: { position: "relative" } }, props.loading && /* @__PURE__ */ React.createElement(Center, { style: { height: 400 } }, /* @__PURE__ */ React.createElement(Loader, null)), !props.loading && /* @__PURE__ */ React.createElement(ScrollArea.Autosize, { maxHeight: 600 }, /* @__PURE__ */ React.createElement(SimpleGrid, { p: 20, cols: 3, spacing: "xl", breakpoints: [{ maxWidth: "md", cols: 1 }] }, options)))
302
- );
303
- };
304
-
305
- const StatsGroup = ({ data, footer }) => {
306
- const stats = data.map((stat) => {
307
- const value = (() => {
308
- if (stat.unit === "%") {
309
- return Math.round((stat.value + Number.EPSILON) * 100);
310
- }
311
- return stat.value;
312
- })();
313
- const safeValue = Number.isFinite(value) ? value : 0;
314
- return /* @__PURE__ */ React.createElement("div", { key: stat.title }, /* @__PURE__ */ React.createElement("div", { className: "text-3xl font-black text-white" }, safeValue.toLocaleString(), stat.unit), /* @__PURE__ */ React.createElement("div", { className: "mt-1.5 text-[11px] font-bold uppercase tracking-wide text-white/70" }, stat.title));
315
- });
316
- return /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap gap-x-10 gap-y-4 rounded-2xl bg-gradient-to-br from-dark-blue-600 via-dark-blue-400 to-sky-blue-400 px-8 py-6" }, stats, footer);
317
- };
318
-
319
247
  const SIZE = {
320
248
  sm: { box: "h-11 w-11", rounded: "rounded-xl", icon: 20 },
321
249
  lg: { box: "h-16 w-16", rounded: "rounded-2xl", icon: 28 }
@@ -368,6 +296,50 @@ function Emblem(props) {
368
296
  return /* @__PURE__ */ React.createElement("div", { className: `flex ${s.box} shrink-0 items-center justify-center ${s.rounded} ${a.bg}` }, /* @__PURE__ */ React.createElement(Icon, { size: s.icon, stroke: 1.75, className: a.text }));
369
297
  }
370
298
 
299
+ const ROLE = {
300
+ admin: { icon: IconBuilding, accent: "gold", label: "Admin" },
301
+ educator: { icon: IconBooks, accent: "mint", label: "Educator" },
302
+ student: { icon: IconBackpack, accent: "cyan", label: "Student" }
303
+ };
304
+ const PILL = {
305
+ cyan: "bg-sky-blue-400/15 text-dark-blue-400",
306
+ mint: "bg-mint-400/15 text-dark-blue-400",
307
+ gold: "bg-gold-400/15 text-dark-blue-400"
308
+ };
309
+ const roleFor = (a) => a.isAdmin ? ROLE.admin : a.isGroupAdmin ? ROLE.educator : ROLE.student;
310
+ const SwitchAccount = (props) => {
311
+ const options = props.accounts.map((a) => {
312
+ const role = roleFor(a);
313
+ return /* @__PURE__ */ React.createElement(
314
+ "button",
315
+ {
316
+ type: "button",
317
+ key: a.accountId,
318
+ onClick: () => props.onClick && props.onClick(a.accountId),
319
+ className: "flex flex-col items-center gap-3 rounded-xl border border-slate-200 bg-white p-6 text-center hover:bg-slate-50"
320
+ },
321
+ /* @__PURE__ */ React.createElement(Emblem, { icon: role.icon, accent: role.accent, size: "lg" }),
322
+ /* @__PURE__ */ React.createElement("span", { className: "text-base font-extrabold text-dark-blue-400" }, a.name),
323
+ /* @__PURE__ */ React.createElement("span", { className: `rounded-full px-2.5 py-1 text-[10px] font-bold ${PILL[role.accent]}` }, role.label)
324
+ );
325
+ });
326
+ return /* @__PURE__ */ React.createElement(Modal, { centered: true, fullScreen: true, title: "Change account", opened: props.opened, onClose: () => props.onClose && props.onClose() }, /* @__PURE__ */ React.createElement("div", { className: "relative" }, props.loading && /* @__PURE__ */ React.createElement("div", { className: "flex h-[400px] items-center justify-center" }, /* @__PURE__ */ React.createElement(Loader, null)), !props.loading && /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-1 gap-4 p-5 sm:grid-cols-2 md:grid-cols-3" }, options)));
327
+ };
328
+
329
+ const StatsGroup = ({ data, footer }) => {
330
+ const stats = data.map((stat) => {
331
+ const value = (() => {
332
+ if (stat.unit === "%") {
333
+ return Math.round((stat.value + Number.EPSILON) * 100);
334
+ }
335
+ return stat.value;
336
+ })();
337
+ const safeValue = Number.isFinite(value) ? value : 0;
338
+ return /* @__PURE__ */ React.createElement("div", { key: stat.title }, /* @__PURE__ */ React.createElement("div", { className: "text-3xl font-black text-white" }, safeValue.toLocaleString(), stat.unit), /* @__PURE__ */ React.createElement("div", { className: "mt-1.5 text-[11px] font-bold uppercase tracking-wide text-white/70" }, stat.title));
339
+ });
340
+ return /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap gap-x-10 gap-y-4 rounded-2xl bg-gradient-to-br from-dark-blue-600 via-dark-blue-400 to-sky-blue-400 px-8 py-6" }, stats, footer);
341
+ };
342
+
371
343
  const SplitButton$4 = (props) => {
372
344
  return /* @__PURE__ */ React.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React.createElement(
373
345
  Link,
@@ -499,29 +471,29 @@ function useSortableData(items, config = { key: "", direction: null }) {
499
471
  return { items: sortedItems, requestSort, sortConfig };
500
472
  }
501
473
 
502
- var __defProp$f = Object.defineProperty;
503
- var __defProps$c = Object.defineProperties;
504
- var __getOwnPropDescs$c = Object.getOwnPropertyDescriptors;
505
- var __getOwnPropSymbols$f = Object.getOwnPropertySymbols;
506
- var __hasOwnProp$f = Object.prototype.hasOwnProperty;
507
- var __propIsEnum$f = Object.prototype.propertyIsEnumerable;
508
- var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
509
- var __spreadValues$f = (a, b) => {
474
+ var __defProp$g = Object.defineProperty;
475
+ var __defProps$d = Object.defineProperties;
476
+ var __getOwnPropDescs$d = Object.getOwnPropertyDescriptors;
477
+ var __getOwnPropSymbols$g = Object.getOwnPropertySymbols;
478
+ var __hasOwnProp$g = Object.prototype.hasOwnProperty;
479
+ var __propIsEnum$g = Object.prototype.propertyIsEnumerable;
480
+ var __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
481
+ var __spreadValues$g = (a, b) => {
510
482
  for (var prop in b || (b = {}))
511
- if (__hasOwnProp$f.call(b, prop))
512
- __defNormalProp$f(a, prop, b[prop]);
513
- if (__getOwnPropSymbols$f)
514
- for (var prop of __getOwnPropSymbols$f(b)) {
515
- if (__propIsEnum$f.call(b, prop))
516
- __defNormalProp$f(a, prop, b[prop]);
483
+ if (__hasOwnProp$g.call(b, prop))
484
+ __defNormalProp$g(a, prop, b[prop]);
485
+ if (__getOwnPropSymbols$g)
486
+ for (var prop of __getOwnPropSymbols$g(b)) {
487
+ if (__propIsEnum$g.call(b, prop))
488
+ __defNormalProp$g(a, prop, b[prop]);
517
489
  }
518
490
  return a;
519
491
  };
520
- var __spreadProps$c = (a, b) => __defProps$c(a, __getOwnPropDescs$c(b));
492
+ var __spreadProps$d = (a, b) => __defProps$d(a, __getOwnPropDescs$d(b));
521
493
  function Table$k(props) {
522
494
  const [expanded, setExpanded] = React.useState({});
523
495
  const preparedItems = React.useMemo(() => {
524
- return props.items.map((item) => __spreadProps$c(__spreadValues$f({}, item), {
496
+ return props.items.map((item) => __spreadProps$d(__spreadValues$g({}, item), {
525
497
  status: item.isComplete ? 1 : 0
526
498
  }));
527
499
  }, [props.items]);
@@ -545,7 +517,7 @@ function Table$k(props) {
545
517
  return /* @__PURE__ */ React.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React.createElement(
546
518
  "div",
547
519
  {
548
- onClick: () => setExpanded(__spreadProps$c(__spreadValues$f({}, expanded), { [row.userId]: !isOpen })),
520
+ onClick: () => setExpanded(__spreadProps$d(__spreadValues$g({}, expanded), { [row.userId]: !isOpen })),
549
521
  className: "flex cursor-pointer items-center gap-4 p-4"
550
522
  },
551
523
  /* @__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))),
@@ -600,6 +572,10 @@ const Badge = (props) => {
600
572
  {
601
573
  title: props.trial ? "LESSONS SUBMITTED" : "BADGE COMPLETION",
602
574
  value: props.trial ? props.lessonsCompleted || 0 : numberOfBadges
575
+ },
576
+ {
577
+ title: "POINT VALUE",
578
+ value: props.weight || 0
603
579
  }
604
580
  ] }), !props.trial && /* @__PURE__ */ React.createElement("div", { className: "relative w-full max-w-xs" }, /* @__PURE__ */ React.createElement(IconCategory2, { size: 16, stroke: 2, className: "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-slate-400" }), /* @__PURE__ */ React.createElement(
605
581
  "select",
@@ -729,28 +705,28 @@ function relativeTimeFromElapsed(elapsed) {
729
705
  return "";
730
706
  }
731
707
 
732
- var __defProp$e = Object.defineProperty;
733
- var __defProps$b = Object.defineProperties;
734
- var __getOwnPropDescs$b = Object.getOwnPropertyDescriptors;
735
- var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
736
- var __hasOwnProp$e = Object.prototype.hasOwnProperty;
737
- var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
738
- var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
739
- var __spreadValues$e = (a, b) => {
708
+ var __defProp$f = Object.defineProperty;
709
+ var __defProps$c = Object.defineProperties;
710
+ var __getOwnPropDescs$c = Object.getOwnPropertyDescriptors;
711
+ var __getOwnPropSymbols$f = Object.getOwnPropertySymbols;
712
+ var __hasOwnProp$f = Object.prototype.hasOwnProperty;
713
+ var __propIsEnum$f = Object.prototype.propertyIsEnumerable;
714
+ var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
715
+ var __spreadValues$f = (a, b) => {
740
716
  for (var prop in b || (b = {}))
741
- if (__hasOwnProp$e.call(b, prop))
742
- __defNormalProp$e(a, prop, b[prop]);
743
- if (__getOwnPropSymbols$e)
744
- for (var prop of __getOwnPropSymbols$e(b)) {
745
- if (__propIsEnum$e.call(b, prop))
746
- __defNormalProp$e(a, prop, b[prop]);
717
+ if (__hasOwnProp$f.call(b, prop))
718
+ __defNormalProp$f(a, prop, b[prop]);
719
+ if (__getOwnPropSymbols$f)
720
+ for (var prop of __getOwnPropSymbols$f(b)) {
721
+ if (__propIsEnum$f.call(b, prop))
722
+ __defNormalProp$f(a, prop, b[prop]);
747
723
  }
748
724
  return a;
749
725
  };
750
- var __spreadProps$b = (a, b) => __defProps$b(a, __getOwnPropDescs$b(b));
726
+ var __spreadProps$c = (a, b) => __defProps$c(a, __getOwnPropDescs$c(b));
751
727
  function Table$g(props) {
752
728
  const preparedItems = React.useMemo(() => {
753
- return props.items.map((item) => __spreadProps$b(__spreadValues$e({}, item), {
729
+ return props.items.map((item) => __spreadProps$c(__spreadValues$f({}, item), {
754
730
  updatedAtDate: new Date(item.updatedAt)
755
731
  }));
756
732
  }, [props.items]);
@@ -953,25 +929,25 @@ const Dashboard = (props) => {
953
929
  )));
954
930
  };
955
931
 
956
- var __defProp$d = Object.defineProperty;
957
- var __defProps$a = Object.defineProperties;
958
- var __getOwnPropDescs$a = Object.getOwnPropertyDescriptors;
959
- var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
960
- var __hasOwnProp$d = Object.prototype.hasOwnProperty;
961
- var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
962
- var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
963
- var __spreadValues$d = (a, b) => {
932
+ var __defProp$e = Object.defineProperty;
933
+ var __defProps$b = Object.defineProperties;
934
+ var __getOwnPropDescs$b = Object.getOwnPropertyDescriptors;
935
+ var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
936
+ var __hasOwnProp$e = Object.prototype.hasOwnProperty;
937
+ var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
938
+ var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
939
+ var __spreadValues$e = (a, b) => {
964
940
  for (var prop in b || (b = {}))
965
- if (__hasOwnProp$d.call(b, prop))
966
- __defNormalProp$d(a, prop, b[prop]);
967
- if (__getOwnPropSymbols$d)
968
- for (var prop of __getOwnPropSymbols$d(b)) {
969
- if (__propIsEnum$d.call(b, prop))
970
- __defNormalProp$d(a, prop, b[prop]);
941
+ if (__hasOwnProp$e.call(b, prop))
942
+ __defNormalProp$e(a, prop, b[prop]);
943
+ if (__getOwnPropSymbols$e)
944
+ for (var prop of __getOwnPropSymbols$e(b)) {
945
+ if (__propIsEnum$e.call(b, prop))
946
+ __defNormalProp$e(a, prop, b[prop]);
971
947
  }
972
948
  return a;
973
949
  };
974
- var __spreadProps$a = (a, b) => __defProps$a(a, __getOwnPropDescs$a(b));
950
+ var __spreadProps$b = (a, b) => __defProps$b(a, __getOwnPropDescs$b(b));
975
951
  const openDeleteModal$2 = (student, onDelete) => openConfirmModal({
976
952
  title: `Remove "${student.givenName && student.familyName ? `${student.givenName} ${student.familyName}` : student.email}" from this class?`,
977
953
  centered: true,
@@ -982,7 +958,7 @@ const openDeleteModal$2 = (student, onDelete) => openConfirmModal({
982
958
  });
983
959
  function Table$c(props) {
984
960
  const preparedItems = React.useMemo(() => {
985
- return props.items.map((item) => __spreadProps$a(__spreadValues$d({}, item), {
961
+ return props.items.map((item) => __spreadProps$b(__spreadValues$e({}, item), {
986
962
  fullName: item.givenName && item.familyName ? `${item.givenName} ${item.familyName}`.toLowerCase() : item.email.toLowerCase()
987
963
  }));
988
964
  }, [props.items]);
@@ -1033,25 +1009,25 @@ function Table$c(props) {
1033
1009
  }));
1034
1010
  }
1035
1011
 
1036
- var __defProp$c = Object.defineProperty;
1037
- var __defProps$9 = Object.defineProperties;
1038
- var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
1039
- var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
1040
- var __hasOwnProp$c = Object.prototype.hasOwnProperty;
1041
- var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
1042
- var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1043
- var __spreadValues$c = (a, b) => {
1012
+ var __defProp$d = Object.defineProperty;
1013
+ var __defProps$a = Object.defineProperties;
1014
+ var __getOwnPropDescs$a = Object.getOwnPropertyDescriptors;
1015
+ var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
1016
+ var __hasOwnProp$d = Object.prototype.hasOwnProperty;
1017
+ var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
1018
+ var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1019
+ var __spreadValues$d = (a, b) => {
1044
1020
  for (var prop in b || (b = {}))
1045
- if (__hasOwnProp$c.call(b, prop))
1046
- __defNormalProp$c(a, prop, b[prop]);
1047
- if (__getOwnPropSymbols$c)
1048
- for (var prop of __getOwnPropSymbols$c(b)) {
1049
- if (__propIsEnum$c.call(b, prop))
1050
- __defNormalProp$c(a, prop, b[prop]);
1021
+ if (__hasOwnProp$d.call(b, prop))
1022
+ __defNormalProp$d(a, prop, b[prop]);
1023
+ if (__getOwnPropSymbols$d)
1024
+ for (var prop of __getOwnPropSymbols$d(b)) {
1025
+ if (__propIsEnum$d.call(b, prop))
1026
+ __defNormalProp$d(a, prop, b[prop]);
1051
1027
  }
1052
1028
  return a;
1053
1029
  };
1054
- var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
1030
+ var __spreadProps$a = (a, b) => __defProps$a(a, __getOwnPropDescs$a(b));
1055
1031
  const Class = (props) => {
1056
1032
  const [opened, setOpened] = useState(false);
1057
1033
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
@@ -1063,7 +1039,7 @@ const Class = (props) => {
1063
1039
  padding: "xl",
1064
1040
  size: "xl"
1065
1041
  },
1066
- /* @__PURE__ */ React.createElement(DropzoneButton$1, __spreadProps$9(__spreadValues$c({}, props), { close: () => setOpened(false) }))
1042
+ /* @__PURE__ */ React.createElement(DropzoneButton$1, __spreadProps$a(__spreadValues$d({}, props), { close: () => setOpened(false) }))
1067
1043
  ), /* @__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
1044
  "button",
1069
1045
  {
@@ -1189,20 +1165,20 @@ const DropzoneButton$1 = (props) => {
1189
1165
  props.onCreateMembers && props.onCreateMembers([values]);
1190
1166
  }) }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement(
1191
1167
  TextInput,
1192
- __spreadValues$c({
1168
+ __spreadValues$d({
1193
1169
  withAsterisk: true,
1194
1170
  label: "Email",
1195
1171
  placeholder: "Email"
1196
1172
  }, form.getInputProps("email"))
1197
1173
  ), /* @__PURE__ */ React.createElement(Group, { grow: true }, /* @__PURE__ */ React.createElement(
1198
1174
  TextInput,
1199
- __spreadValues$c({
1175
+ __spreadValues$d({
1200
1176
  label: "Given name",
1201
1177
  placeholder: "Given name"
1202
1178
  }, form.getInputProps("givenName"))
1203
1179
  ), /* @__PURE__ */ React.createElement(
1204
1180
  TextInput,
1205
- __spreadValues$c({
1181
+ __spreadValues$d({
1206
1182
  label: "Family name",
1207
1183
  placeholder: "Family name"
1208
1184
  }, form.getInputProps("familyName"))
@@ -1259,19 +1235,19 @@ function Table$b(props) {
1259
1235
  )));
1260
1236
  }
1261
1237
 
1262
- var __defProp$b = Object.defineProperty;
1263
- var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
1264
- var __hasOwnProp$b = Object.prototype.hasOwnProperty;
1265
- var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
1266
- var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1267
- var __spreadValues$b = (a, b) => {
1238
+ var __defProp$c = Object.defineProperty;
1239
+ var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
1240
+ var __hasOwnProp$c = Object.prototype.hasOwnProperty;
1241
+ var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
1242
+ var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1243
+ var __spreadValues$c = (a, b) => {
1268
1244
  for (var prop in b || (b = {}))
1269
- if (__hasOwnProp$b.call(b, prop))
1270
- __defNormalProp$b(a, prop, b[prop]);
1271
- if (__getOwnPropSymbols$b)
1272
- for (var prop of __getOwnPropSymbols$b(b)) {
1273
- if (__propIsEnum$b.call(b, prop))
1274
- __defNormalProp$b(a, prop, b[prop]);
1245
+ if (__hasOwnProp$c.call(b, prop))
1246
+ __defNormalProp$c(a, prop, b[prop]);
1247
+ if (__getOwnPropSymbols$c)
1248
+ for (var prop of __getOwnPropSymbols$c(b)) {
1249
+ if (__propIsEnum$c.call(b, prop))
1250
+ __defNormalProp$c(a, prop, b[prop]);
1275
1251
  }
1276
1252
  return a;
1277
1253
  };
@@ -1305,14 +1281,14 @@ const Classes = (props) => {
1305
1281
  props.onCreateClass && props.onCreateClass(values);
1306
1282
  }) }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement(
1307
1283
  TextInput,
1308
- __spreadValues$b({
1284
+ __spreadValues$c({
1309
1285
  withAsterisk: true,
1310
1286
  label: "Name",
1311
1287
  placeholder: "Class name"
1312
1288
  }, form.getInputProps("name"))
1313
1289
  ), /* @__PURE__ */ React.createElement(
1314
1290
  TextInput,
1315
- __spreadValues$b({
1291
+ __spreadValues$c({
1316
1292
  label: "Description",
1317
1293
  placeholder: "A class for my first period English students"
1318
1294
  }, form.getInputProps("description"))
@@ -1616,29 +1592,29 @@ function Stack$3(props) {
1616
1592
  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."))));
1617
1593
  }
1618
1594
 
1619
- var __defProp$a = Object.defineProperty;
1620
- var __defProps$8 = Object.defineProperties;
1621
- var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
1622
- var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
1623
- var __hasOwnProp$a = Object.prototype.hasOwnProperty;
1624
- var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
1625
- var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1626
- var __spreadValues$a = (a, b) => {
1627
- for (var prop in b || (b = {}))
1628
- if (__hasOwnProp$a.call(b, prop))
1629
- __defNormalProp$a(a, prop, b[prop]);
1630
- if (__getOwnPropSymbols$a)
1631
- for (var prop of __getOwnPropSymbols$a(b)) {
1632
- if (__propIsEnum$a.call(b, prop))
1633
- __defNormalProp$a(a, prop, b[prop]);
1595
+ var __defProp$b = Object.defineProperty;
1596
+ var __defProps$9 = Object.defineProperties;
1597
+ var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
1598
+ var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
1599
+ var __hasOwnProp$b = Object.prototype.hasOwnProperty;
1600
+ var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
1601
+ var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1602
+ var __spreadValues$b = (a, b) => {
1603
+ for (var prop in b || (b = {}))
1604
+ if (__hasOwnProp$b.call(b, prop))
1605
+ __defNormalProp$b(a, prop, b[prop]);
1606
+ if (__getOwnPropSymbols$b)
1607
+ for (var prop of __getOwnPropSymbols$b(b)) {
1608
+ if (__propIsEnum$b.call(b, prop))
1609
+ __defNormalProp$b(a, prop, b[prop]);
1634
1610
  }
1635
1611
  return a;
1636
1612
  };
1637
- var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
1613
+ var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
1638
1614
  function Table$6(props) {
1639
1615
  const [expanded, setExpanded] = React.useState({});
1640
1616
  const preparedItems = React.useMemo(() => {
1641
- return props.items.map((item) => __spreadProps$8(__spreadValues$a({}, item), {
1617
+ return props.items.map((item) => __spreadProps$9(__spreadValues$b({}, item), {
1642
1618
  status: item.isComplete ? 2 : item.isStarted ? 1 : 0
1643
1619
  }));
1644
1620
  }, [props.items]);
@@ -1662,7 +1638,7 @@ function Table$6(props) {
1662
1638
  return /* @__PURE__ */ React.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React.createElement(
1663
1639
  "div",
1664
1640
  {
1665
- onClick: () => setExpanded(__spreadProps$8(__spreadValues$a({}, expanded), { [row.userId]: !isOpen })),
1641
+ onClick: () => setExpanded(__spreadProps$9(__spreadValues$b({}, expanded), { [row.userId]: !isOpen })),
1666
1642
  className: "flex cursor-pointer items-center gap-4 p-4"
1667
1643
  },
1668
1644
  /* @__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))),
@@ -1963,25 +1939,25 @@ function Table$4(props) {
1963
1939
  }));
1964
1940
  }
1965
1941
 
1966
- var __defProp$9 = Object.defineProperty;
1967
- var __defProps$7 = Object.defineProperties;
1968
- var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
1969
- var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;
1970
- var __hasOwnProp$9 = Object.prototype.hasOwnProperty;
1971
- var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;
1972
- var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1973
- var __spreadValues$9 = (a, b) => {
1942
+ var __defProp$a = Object.defineProperty;
1943
+ var __defProps$8 = Object.defineProperties;
1944
+ var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
1945
+ var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
1946
+ var __hasOwnProp$a = Object.prototype.hasOwnProperty;
1947
+ var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
1948
+ var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1949
+ var __spreadValues$a = (a, b) => {
1974
1950
  for (var prop in b || (b = {}))
1975
- if (__hasOwnProp$9.call(b, prop))
1976
- __defNormalProp$9(a, prop, b[prop]);
1977
- if (__getOwnPropSymbols$9)
1978
- for (var prop of __getOwnPropSymbols$9(b)) {
1979
- if (__propIsEnum$9.call(b, prop))
1980
- __defNormalProp$9(a, prop, b[prop]);
1951
+ if (__hasOwnProp$a.call(b, prop))
1952
+ __defNormalProp$a(a, prop, b[prop]);
1953
+ if (__getOwnPropSymbols$a)
1954
+ for (var prop of __getOwnPropSymbols$a(b)) {
1955
+ if (__propIsEnum$a.call(b, prop))
1956
+ __defNormalProp$a(a, prop, b[prop]);
1981
1957
  }
1982
1958
  return a;
1983
1959
  };
1984
- var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
1960
+ var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
1985
1961
  const People = (props) => {
1986
1962
  const form = useForm({
1987
1963
  initialValues: {
@@ -2013,27 +1989,27 @@ const People = (props) => {
2013
1989
  padding: "xl",
2014
1990
  size: "xl"
2015
1991
  },
2016
- /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React.createElement(DropzoneButton, __spreadProps$7(__spreadValues$9({}, props), { close: () => setOpened(false) })), /* @__PURE__ */ React.createElement(Divider, { label: "or", labelPosition: "center", my: "md", variant: "dashed" }), /* @__PURE__ */ React.createElement("form", { onSubmit: form.onSubmit(() => {
1992
+ /* @__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(() => {
2017
1993
  const values = form.values;
2018
1994
  form.reset();
2019
1995
  setOpened(false);
2020
1996
  props.onCreateUsers && props.onCreateUsers([values]);
2021
1997
  }) }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement(
2022
1998
  TextInput,
2023
- __spreadValues$9({
1999
+ __spreadValues$a({
2024
2000
  withAsterisk: true,
2025
2001
  label: "Email",
2026
2002
  placeholder: "Email"
2027
2003
  }, form.getInputProps("email"))
2028
2004
  ), /* @__PURE__ */ React.createElement(Group, { grow: true }, /* @__PURE__ */ React.createElement(
2029
2005
  TextInput,
2030
- __spreadValues$9({
2006
+ __spreadValues$a({
2031
2007
  label: "Given name",
2032
2008
  placeholder: "Given name"
2033
2009
  }, form.getInputProps("givenName"))
2034
2010
  ), /* @__PURE__ */ React.createElement(
2035
2011
  TextInput,
2036
- __spreadValues$9({
2012
+ __spreadValues$a({
2037
2013
  label: "Family name",
2038
2014
  placeholder: "Family name"
2039
2015
  }, form.getInputProps("familyName"))
@@ -2219,24 +2195,24 @@ const StartAnonymousLesson = (props) => {
2219
2195
  ))))));
2220
2196
  };
2221
2197
 
2222
- var __defProp$8 = Object.defineProperty;
2223
- var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
2224
- var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
2225
- var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
2226
- var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2227
- var __spreadValues$8 = (a, b) => {
2198
+ var __defProp$9 = Object.defineProperty;
2199
+ var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;
2200
+ var __hasOwnProp$9 = Object.prototype.hasOwnProperty;
2201
+ var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;
2202
+ var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2203
+ var __spreadValues$9 = (a, b) => {
2228
2204
  for (var prop in b || (b = {}))
2229
- if (__hasOwnProp$8.call(b, prop))
2230
- __defNormalProp$8(a, prop, b[prop]);
2231
- if (__getOwnPropSymbols$8)
2232
- for (var prop of __getOwnPropSymbols$8(b)) {
2233
- if (__propIsEnum$8.call(b, prop))
2234
- __defNormalProp$8(a, prop, b[prop]);
2205
+ if (__hasOwnProp$9.call(b, prop))
2206
+ __defNormalProp$9(a, prop, b[prop]);
2207
+ if (__getOwnPropSymbols$9)
2208
+ for (var prop of __getOwnPropSymbols$9(b)) {
2209
+ if (__propIsEnum$9.call(b, prop))
2210
+ __defNormalProp$9(a, prop, b[prop]);
2235
2211
  }
2236
2212
  return a;
2237
2213
  };
2238
2214
  const BadgeGrid = (props) => {
2239
- const badges = props.badges.map((b) => /* @__PURE__ */ React.createElement(TaskCard, __spreadValues$8({ key: b.title }, b)));
2215
+ const badges = props.badges.map((b) => /* @__PURE__ */ React.createElement(TaskCard, __spreadValues$9({ key: b.title }, b)));
2240
2216
  return /* @__PURE__ */ React.createElement(SimpleGrid, { cols: 4, breakpoints: [{ maxWidth: "sm", cols: 1 }, { maxWidth: "md", cols: 3 }] }, badges);
2241
2217
  };
2242
2218
  function TaskCard(props) {
@@ -2270,30 +2246,30 @@ const UserInfo = (props) => {
2270
2246
  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));
2271
2247
  };
2272
2248
 
2273
- var __defProp$7 = Object.defineProperty;
2274
- var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
2275
- var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
2276
- var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
2277
- var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2278
- var __spreadValues$7 = (a, b) => {
2249
+ var __defProp$8 = Object.defineProperty;
2250
+ var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
2251
+ var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
2252
+ var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
2253
+ var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2254
+ var __spreadValues$8 = (a, b) => {
2279
2255
  for (var prop in b || (b = {}))
2280
- if (__hasOwnProp$7.call(b, prop))
2281
- __defNormalProp$7(a, prop, b[prop]);
2282
- if (__getOwnPropSymbols$7)
2283
- for (var prop of __getOwnPropSymbols$7(b)) {
2284
- if (__propIsEnum$7.call(b, prop))
2285
- __defNormalProp$7(a, prop, b[prop]);
2256
+ if (__hasOwnProp$8.call(b, prop))
2257
+ __defNormalProp$8(a, prop, b[prop]);
2258
+ if (__getOwnPropSymbols$8)
2259
+ for (var prop of __getOwnPropSymbols$8(b)) {
2260
+ if (__propIsEnum$8.call(b, prop))
2261
+ __defNormalProp$8(a, prop, b[prop]);
2286
2262
  }
2287
2263
  return a;
2288
2264
  };
2289
2265
  var __objRest$1 = (source, exclude) => {
2290
2266
  var target = {};
2291
2267
  for (var prop in source)
2292
- if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0)
2268
+ if (__hasOwnProp$8.call(source, prop) && exclude.indexOf(prop) < 0)
2293
2269
  target[prop] = source[prop];
2294
- if (source != null && __getOwnPropSymbols$7)
2295
- for (var prop of __getOwnPropSymbols$7(source)) {
2296
- if (exclude.indexOf(prop) < 0 && __propIsEnum$7.call(source, prop))
2270
+ if (source != null && __getOwnPropSymbols$8)
2271
+ for (var prop of __getOwnPropSymbols$8(source)) {
2272
+ if (exclude.indexOf(prop) < 0 && __propIsEnum$8.call(source, prop))
2297
2273
  target[prop] = source[prop];
2298
2274
  }
2299
2275
  return target;
@@ -2360,9 +2336,9 @@ const TenantBanner = (_a) => {
2360
2336
  };
2361
2337
  return /* @__PURE__ */ React.createElement(
2362
2338
  Card,
2363
- __spreadValues$7({
2339
+ __spreadValues$8({
2364
2340
  radius: "md",
2365
- style: __spreadValues$7({ backgroundImage: `url(${image})` }, style),
2341
+ style: __spreadValues$8({ backgroundImage: `url(${image})` }, style),
2366
2342
  className: cx(classes.card, className)
2367
2343
  }, others),
2368
2344
  /* @__PURE__ */ React.createElement(
@@ -2438,33 +2414,33 @@ const TrialHome = (props) => {
2438
2414
  )), /* @__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 })));
2439
2415
  };
2440
2416
 
2441
- var __defProp$6 = Object.defineProperty;
2442
- var __defProps$6 = Object.defineProperties;
2443
- var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
2444
- var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
2445
- var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
2446
- var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
2447
- var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2448
- var __spreadValues$6 = (a, b) => {
2417
+ var __defProp$7 = Object.defineProperty;
2418
+ var __defProps$7 = Object.defineProperties;
2419
+ var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
2420
+ var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
2421
+ var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
2422
+ var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
2423
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2424
+ var __spreadValues$7 = (a, b) => {
2449
2425
  for (var prop in b || (b = {}))
2450
- if (__hasOwnProp$6.call(b, prop))
2451
- __defNormalProp$6(a, prop, b[prop]);
2452
- if (__getOwnPropSymbols$6)
2453
- for (var prop of __getOwnPropSymbols$6(b)) {
2454
- if (__propIsEnum$6.call(b, prop))
2455
- __defNormalProp$6(a, prop, b[prop]);
2426
+ if (__hasOwnProp$7.call(b, prop))
2427
+ __defNormalProp$7(a, prop, b[prop]);
2428
+ if (__getOwnPropSymbols$7)
2429
+ for (var prop of __getOwnPropSymbols$7(b)) {
2430
+ if (__propIsEnum$7.call(b, prop))
2431
+ __defNormalProp$7(a, prop, b[prop]);
2456
2432
  }
2457
2433
  return a;
2458
2434
  };
2459
- var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
2435
+ var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
2460
2436
  var __objRest = (source, exclude) => {
2461
2437
  var target = {};
2462
2438
  for (var prop in source)
2463
- if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)
2439
+ if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0)
2464
2440
  target[prop] = source[prop];
2465
- if (source != null && __getOwnPropSymbols$6)
2466
- for (var prop of __getOwnPropSymbols$6(source)) {
2467
- if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))
2441
+ if (source != null && __getOwnPropSymbols$7)
2442
+ for (var prop of __getOwnPropSymbols$7(source)) {
2443
+ if (exclude.indexOf(prop) < 0 && __propIsEnum$7.call(source, prop))
2468
2444
  target[prop] = source[prop];
2469
2445
  }
2470
2446
  return target;
@@ -2514,7 +2490,7 @@ function ImageCheckbox(_a) {
2514
2490
  const { classes, cx } = useStyles$2({ checked: value });
2515
2491
  return /* @__PURE__ */ React.createElement(
2516
2492
  UnstyledButton,
2517
- __spreadProps$6(__spreadValues$6({}, others), {
2493
+ __spreadProps$7(__spreadValues$7({}, others), {
2518
2494
  onClick: () => handleChange(!value),
2519
2495
  className: cx(classes.button, className)
2520
2496
  }),
@@ -2535,7 +2511,7 @@ function ImageCheckbox(_a) {
2535
2511
  function SelectGrid(props) {
2536
2512
  const items = props.items.map((item) => /* @__PURE__ */ React.createElement(
2537
2513
  ImageCheckbox,
2538
- __spreadProps$6(__spreadValues$6({}, item), {
2514
+ __spreadProps$7(__spreadValues$7({}, item), {
2539
2515
  key: item.title,
2540
2516
  onChange: (checked) => props.onChange(item.title, checked)
2541
2517
  })
@@ -2553,25 +2529,25 @@ function SelectGrid(props) {
2553
2529
  );
2554
2530
  }
2555
2531
 
2556
- var __defProp$5 = Object.defineProperty;
2557
- var __defProps$5 = Object.defineProperties;
2558
- var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
2559
- var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
2560
- var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
2561
- var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
2562
- var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2563
- var __spreadValues$5 = (a, b) => {
2532
+ var __defProp$6 = Object.defineProperty;
2533
+ var __defProps$6 = Object.defineProperties;
2534
+ var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
2535
+ var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
2536
+ var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
2537
+ var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
2538
+ var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2539
+ var __spreadValues$6 = (a, b) => {
2564
2540
  for (var prop in b || (b = {}))
2565
- if (__hasOwnProp$5.call(b, prop))
2566
- __defNormalProp$5(a, prop, b[prop]);
2567
- if (__getOwnPropSymbols$5)
2568
- for (var prop of __getOwnPropSymbols$5(b)) {
2569
- if (__propIsEnum$5.call(b, prop))
2570
- __defNormalProp$5(a, prop, b[prop]);
2541
+ if (__hasOwnProp$6.call(b, prop))
2542
+ __defNormalProp$6(a, prop, b[prop]);
2543
+ if (__getOwnPropSymbols$6)
2544
+ for (var prop of __getOwnPropSymbols$6(b)) {
2545
+ if (__propIsEnum$6.call(b, prop))
2546
+ __defNormalProp$6(a, prop, b[prop]);
2571
2547
  }
2572
2548
  return a;
2573
2549
  };
2574
- var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
2550
+ var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
2575
2551
  const useStyles$1 = createStyles((theme) => ({
2576
2552
  wrapper: {
2577
2553
  minHeight: "100%",
@@ -2681,7 +2657,7 @@ const TrialRegistration = (props) => {
2681
2657
  label: "School/Organization Name",
2682
2658
  placeholder: "What's the name of your school?",
2683
2659
  data: props.organizations.map((o) => {
2684
- return __spreadProps$5(__spreadValues$5({}, o), { value: o.displayName });
2660
+ return __spreadProps$6(__spreadValues$6({}, o), { value: o.displayName });
2685
2661
  }),
2686
2662
  onItemSubmit: (item) => setOrganization({ organizationId: item.organizationId, displayName: item.displayName }),
2687
2663
  onChange: (next) => {
@@ -2693,7 +2669,7 @@ const TrialRegistration = (props) => {
2693
2669
  SelectGrid,
2694
2670
  {
2695
2671
  items: OPTIONS,
2696
- onChange: (e, checked) => setInterests(__spreadProps$5(__spreadValues$5({}, interests), { [e]: checked }))
2672
+ onChange: (e, checked) => setInterests(__spreadProps$6(__spreadValues$6({}, interests), { [e]: checked }))
2697
2673
  }
2698
2674
  ), /* @__PURE__ */ React.createElement(Group, { position: "right", mt: "md" }, /* @__PURE__ */ React.createElement(
2699
2675
  Button,
@@ -2731,25 +2707,25 @@ const AdminProvider = (props) => {
2731
2707
  );
2732
2708
  };
2733
2709
 
2734
- var __defProp$4 = Object.defineProperty;
2735
- var __defProps$4 = Object.defineProperties;
2736
- var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
2737
- var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
2738
- var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
2739
- var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
2740
- var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2741
- var __spreadValues$4 = (a, b) => {
2710
+ var __defProp$5 = Object.defineProperty;
2711
+ var __defProps$5 = Object.defineProperties;
2712
+ var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
2713
+ var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
2714
+ var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
2715
+ var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
2716
+ var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2717
+ var __spreadValues$5 = (a, b) => {
2742
2718
  for (var prop in b || (b = {}))
2743
- if (__hasOwnProp$4.call(b, prop))
2744
- __defNormalProp$4(a, prop, b[prop]);
2745
- if (__getOwnPropSymbols$4)
2746
- for (var prop of __getOwnPropSymbols$4(b)) {
2747
- if (__propIsEnum$4.call(b, prop))
2748
- __defNormalProp$4(a, prop, b[prop]);
2719
+ if (__hasOwnProp$5.call(b, prop))
2720
+ __defNormalProp$5(a, prop, b[prop]);
2721
+ if (__getOwnPropSymbols$5)
2722
+ for (var prop of __getOwnPropSymbols$5(b)) {
2723
+ if (__propIsEnum$5.call(b, prop))
2724
+ __defNormalProp$5(a, prop, b[prop]);
2749
2725
  }
2750
2726
  return a;
2751
2727
  };
2752
- var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
2728
+ var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
2753
2729
  const useStyles = createStyles((theme, props) => ({
2754
2730
  footer: {
2755
2731
  paddingTop: theme.spacing.md,
@@ -2845,7 +2821,7 @@ const App = (props) => {
2845
2821
  padding: "xs",
2846
2822
  navbar: props.navbar && /* @__PURE__ */ React.createElement(
2847
2823
  Navbar,
2848
- __spreadProps$4(__spreadValues$4({}, props.navbar.props), {
2824
+ __spreadProps$5(__spreadValues$5({}, props.navbar.props), {
2849
2825
  onSwitchAccounts: account.accounts && account.accounts.length > 1 ? () => account.setChangeModalOpen(true) : void 0
2850
2826
  })
2851
2827
  ),
@@ -2996,30 +2972,30 @@ function Stack$1(props) {
2996
2972
  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"))));
2997
2973
  }
2998
2974
 
2999
- var __defProp$3 = Object.defineProperty;
3000
- var __defProps$3 = Object.defineProperties;
3001
- var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
3002
- var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
3003
- var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
3004
- var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
3005
- var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3006
- var __spreadValues$3 = (a, b) => {
2975
+ var __defProp$4 = Object.defineProperty;
2976
+ var __defProps$4 = Object.defineProperties;
2977
+ var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
2978
+ var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
2979
+ var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
2980
+ var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
2981
+ var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2982
+ var __spreadValues$4 = (a, b) => {
3007
2983
  for (var prop in b || (b = {}))
3008
- if (__hasOwnProp$3.call(b, prop))
3009
- __defNormalProp$3(a, prop, b[prop]);
3010
- if (__getOwnPropSymbols$3)
3011
- for (var prop of __getOwnPropSymbols$3(b)) {
3012
- if (__propIsEnum$3.call(b, prop))
3013
- __defNormalProp$3(a, prop, b[prop]);
2984
+ if (__hasOwnProp$4.call(b, prop))
2985
+ __defNormalProp$4(a, prop, b[prop]);
2986
+ if (__getOwnPropSymbols$4)
2987
+ for (var prop of __getOwnPropSymbols$4(b)) {
2988
+ if (__propIsEnum$4.call(b, prop))
2989
+ __defNormalProp$4(a, prop, b[prop]);
3014
2990
  }
3015
2991
  return a;
3016
2992
  };
3017
- var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
2993
+ var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
3018
2994
  function Table$2(props) {
3019
2995
  const [expanded, setExpanded] = React.useState({});
3020
2996
  const categories = props.categories || [];
3021
2997
  const preparedItems = React.useMemo(() => {
3022
- return (props.items || []).map((item) => __spreadValues$3(__spreadValues$3({}, item), item.categoryPoints));
2998
+ return (props.items || []).map((item) => __spreadValues$4(__spreadValues$4({}, item), item.categoryPoints));
3023
2999
  }, [props.items]);
3024
3000
  const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);
3025
3001
  if (props.loading && props.items.length === 0) {
@@ -3041,7 +3017,7 @@ function Table$2(props) {
3041
3017
  return /* @__PURE__ */ React.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React.createElement(
3042
3018
  "div",
3043
3019
  {
3044
- onClick: () => setExpanded(__spreadProps$3(__spreadValues$3({}, expanded), { [row.userId]: !isOpen })),
3020
+ onClick: () => setExpanded(__spreadProps$4(__spreadValues$4({}, expanded), { [row.userId]: !isOpen })),
3045
3021
  className: "flex cursor-pointer items-center gap-4 p-4"
3046
3022
  },
3047
3023
  /* @__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))),
@@ -3056,8 +3032,8 @@ function Table$2(props) {
3056
3032
  }
3057
3033
 
3058
3034
  function Table$1(props) {
3059
- const { items: sortedItems, requestSort, sortConfig } = useSortableData(props.items);
3060
- if (props.items.length === 0) {
3035
+ const { items: sortedBadges, requestSort, sortConfig } = useSortableData(props.badges);
3036
+ if (props.badges.length === 0) {
3061
3037
  return /* @__PURE__ */ React.createElement(
3062
3038
  PlaceholderBanner,
3063
3039
  {
@@ -3069,30 +3045,116 @@ function Table$1(props) {
3069
3045
  );
3070
3046
  }
3071
3047
  const indicator = (key) => sortConfig.key !== key ? "" : sortConfig.direction === "desc" ? " \u25BE" : " \u25B4";
3072
- return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement("div", { className: "flex gap-4 px-4 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, /* @__PURE__ */ React.createElement("button", { onClick: () => requestSort("badgeName"), className: "flex-1 text-left hover:text-slate-600" }, "Badge Name", indicator("badgeName")), /* @__PURE__ */ React.createElement("button", { onClick: () => requestSort("percentageCompletion"), className: "w-36 shrink-0 text-right hover:text-slate-600" }, "Badge Completion", indicator("percentageCompletion"))), sortedItems.map((row) => /* @__PURE__ */ React.createElement(
3073
- Link,
3074
- {
3075
- key: row.badgeId,
3076
- to: row.href,
3077
- className: "flex items-center gap-4 rounded-xl border border-slate-200 bg-white p-4 no-underline shadow-sm hover:bg-slate-50"
3078
- },
3079
- /* @__PURE__ */ React.createElement("div", { className: "min-w-0 flex-1 text-sm font-bold text-dark-blue-400" }, row.badgeName),
3080
- /* @__PURE__ */ React.createElement("div", { className: "w-36 shrink-0 text-right text-xs text-slate-500" }, Math.round((row.percentageCompletion + Number.EPSILON) * 100), "%")
3081
- )));
3048
+ const groupedIds = new Set(props.categories.map((c) => c.categoryId));
3049
+ const forCategory = (categoryId) => sortedBadges.filter((b) => {
3050
+ var _a;
3051
+ return (_a = b.categories) == null ? void 0 : _a.includes(categoryId);
3052
+ });
3053
+ const other = sortedBadges.filter((b) => {
3054
+ var _a;
3055
+ return !((_a = b.categories) == null ? void 0 : _a.some((id) => groupedIds.has(id)));
3056
+ });
3057
+ return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-6" }, /* @__PURE__ */ React.createElement("div", { className: "flex gap-4 px-4 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, /* @__PURE__ */ React.createElement("button", { onClick: () => requestSort("badgeName"), className: "flex-1 text-left hover:text-slate-600" }, "Badge Name", indicator("badgeName")), /* @__PURE__ */ React.createElement("button", { onClick: () => requestSort("weight"), className: "w-24 shrink-0 text-right hover:text-slate-600" }, "Point Value", indicator("weight")), /* @__PURE__ */ React.createElement("button", { onClick: () => requestSort("percentageCompletion"), className: "w-36 shrink-0 text-right hover:text-slate-600" }, "Badge Completion", indicator("percentageCompletion"))), props.categories.map((category) => /* @__PURE__ */ React.createElement(CategorySection, { key: category.categoryId, name: category.name, badges: forCategory(category.categoryId) })), other.length > 0 && /* @__PURE__ */ React.createElement(CategorySection, { name: "Other badges", badges: other }));
3082
3058
  }
3059
+ const CategorySection = (props) => /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ React.createElement("div", { className: "px-1 text-sm font-extrabold tracking-tight text-dark-blue-400" }, props.name), props.badges.length === 0 && /* @__PURE__ */ React.createElement("div", { className: "rounded-xl border border-dashed border-slate-200 px-4 py-3 text-xs text-slate-400" }, "No badges yet."), props.badges.map((row) => /* @__PURE__ */ React.createElement(
3060
+ Link,
3061
+ {
3062
+ key: row.badgeId,
3063
+ to: row.href,
3064
+ className: "flex items-center gap-4 rounded-xl border border-slate-200 bg-white p-4 no-underline shadow-sm hover:bg-slate-50"
3065
+ },
3066
+ /* @__PURE__ */ React.createElement("div", { className: "min-w-0 flex-1 text-sm font-bold text-dark-blue-400" }, row.badgeName),
3067
+ /* @__PURE__ */ React.createElement("div", { className: "w-24 shrink-0 text-right text-xs font-black text-mint-400" }, row.weight, " pts"),
3068
+ /* @__PURE__ */ React.createElement("div", { className: "w-36 shrink-0 text-right text-xs text-slate-500" }, Math.round((row.percentageCompletion + Number.EPSILON) * 100), "%")
3069
+ )));
3070
+
3071
+ var __defProp$3 = Object.defineProperty;
3072
+ var __defProps$3 = Object.defineProperties;
3073
+ var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
3074
+ var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
3075
+ var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
3076
+ var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
3077
+ var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3078
+ var __spreadValues$3 = (a, b) => {
3079
+ for (var prop in b || (b = {}))
3080
+ if (__hasOwnProp$3.call(b, prop))
3081
+ __defNormalProp$3(a, prop, b[prop]);
3082
+ if (__getOwnPropSymbols$3)
3083
+ for (var prop of __getOwnPropSymbols$3(b)) {
3084
+ if (__propIsEnum$3.call(b, prop))
3085
+ __defNormalProp$3(a, prop, b[prop]);
3086
+ }
3087
+ return a;
3088
+ };
3089
+ var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
3090
+ function buildCategoryTree(categories) {
3091
+ const byId = /* @__PURE__ */ new Map();
3092
+ categories.forEach((c) => byId.set(c.categoryId, c));
3093
+ const childrenByParent = /* @__PURE__ */ new Map();
3094
+ categories.forEach((c) => {
3095
+ const parentId = c.parentCategoryId;
3096
+ const hasValidParent = !!parentId && parentId !== c.categoryId && byId.has(parentId);
3097
+ if (!hasValidParent)
3098
+ return;
3099
+ const siblings = childrenByParent.get(parentId) || [];
3100
+ siblings.push(c);
3101
+ childrenByParent.set(parentId, siblings);
3102
+ });
3103
+ const attached = /* @__PURE__ */ new Set();
3104
+ const attach = (category, ancestry) => {
3105
+ attached.add(category.categoryId);
3106
+ const childAncestry = new Set(ancestry).add(category.categoryId);
3107
+ const children = (childrenByParent.get(category.categoryId) || []).filter((child) => !childAncestry.has(child.categoryId)).map((child) => attach(child, childAncestry));
3108
+ return __spreadProps$3(__spreadValues$3({}, category), { children });
3109
+ };
3110
+ const roots = categories.filter((c) => {
3111
+ const parentId = c.parentCategoryId;
3112
+ return !parentId || parentId === c.categoryId || !byId.has(parentId);
3113
+ });
3114
+ const tree = roots.map((root) => attach(root, /* @__PURE__ */ new Set()));
3115
+ categories.forEach((c) => {
3116
+ if (!attached.has(c.categoryId))
3117
+ tree.push(attach(c, /* @__PURE__ */ new Set()));
3118
+ });
3119
+ return tree;
3120
+ }
3121
+
3122
+ function CategoriesModal(props) {
3123
+ const tree = React.useMemo(() => buildCategoryTree(props.categories || []), [props.categories]);
3124
+ return /* @__PURE__ */ React.createElement(Modal, { opened: props.opened, onClose: props.onClose, title: "Category structure", size: "lg", centered: true }, /* @__PURE__ */ React.createElement("div", { className: "flex max-h-[70vh] flex-col gap-2 overflow-y-auto pr-1" }, tree.length === 0 && /* @__PURE__ */ React.createElement("p", { className: "text-sm text-slate-400" }, "No categories to display."), tree.map((node) => /* @__PURE__ */ React.createElement(CategoryNode, { key: node.categoryId, node, criteria: props.criteria, depth: 0 }))));
3125
+ }
3126
+ const CategoryNode = (props) => {
3127
+ var _a;
3128
+ const hasChildren = props.node.children.length > 0;
3129
+ const required = props.criteria[props.node.categoryId];
3130
+ return /* @__PURE__ */ React.createElement("div", { className: hasChildren ? "rounded-lg border border-slate-100 bg-slate-50/60 p-3" : "rounded-lg px-3 py-2 hover:bg-slate-50" }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap items-center justify-between gap-2" }, /* @__PURE__ */ React.createElement("span", { className: props.depth === 0 ? "text-sm font-extrabold text-dark-blue-400" : "text-xs font-bold text-dark-blue-400" }, props.node.name), /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap items-center gap-1.5" }, required !== void 0 && /* @__PURE__ */ React.createElement("span", { className: "rounded-full bg-sky-blue-400/15 px-2 py-0.5 text-[10px] font-bold text-dark-blue-400" }, "min. ", required, " pts"), !!props.node.maxPoints && /* @__PURE__ */ React.createElement("span", { className: "rounded-full bg-gold-400/15 px-2 py-0.5 text-[10px] font-bold text-dark-blue-400" }, "cap ", props.node.maxPoints, " pts"))), !!((_a = props.node.description) == null ? void 0 : _a.trim()) && /* @__PURE__ */ React.createElement("p", { className: "mt-0.5 text-xs text-slate-500" }, props.node.description), hasChildren && /* @__PURE__ */ React.createElement("div", { className: "mt-3 flex flex-col gap-2 border-l-2 border-slate-200 pl-4" }, props.node.children.map((child) => /* @__PURE__ */ React.createElement(CategoryNode, { key: child.categoryId, node: child, criteria: props.criteria, depth: props.depth + 1 }))));
3131
+ };
3083
3132
 
3084
3133
  const TABS$1 = [
3085
3134
  { label: "By Badge", value: "badges" },
3086
3135
  { label: "By student", value: "students" }
3087
3136
  ];
3088
3137
  const Pathway = (props) => {
3089
- var _a;
3138
+ var _a, _b, _c;
3090
3139
  const [tab, setTab] = useState("badges");
3140
+ const [categoriesOpen, setCategoriesOpen] = useState(false);
3091
3141
  const numberOfStudents = props.students.length;
3092
3142
  const numberOfBadgesEarned = numberOfStudents > 0 ? props.students.filter((u) => u.isComplete).length : 0;
3093
3143
  const criteria = props.criteria || {};
3094
3144
  const criteriaCategories = (props.categories || []).filter((c) => criteria[c.categoryId] !== void 0);
3095
- return /* @__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: "flex items-start gap-4" }, /* @__PURE__ */ React.createElement(Emblem, { imageURL: props.imageURL, alt: props.title, size: "lg", icon: IconRoute, accent: "cyan" }), /* @__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.title || "Pathway"), !!((_a = props.displayTags) == null ? void 0 : _a.length) && /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap gap-1.5" }, props.displayTags.map((tag) => /* @__PURE__ */ React.createElement("span", { key: tag, className: "rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500" }, tag))), /* @__PURE__ */ React.createElement("p", { className: "max-w-xl text-sm text-slate-500" }, props.description || "No description"), criteriaCategories.length > 0 && /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap items-center gap-1.5 pt-0.5" }, /* @__PURE__ */ React.createElement("span", { className: "text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, "Criteria"), criteriaCategories.map((c) => /* @__PURE__ */ React.createElement("span", { key: c.categoryId, className: "rounded-full bg-sky-blue-400/15 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, c.name, ": ", criteria[c.categoryId], "+", c.maxPoints ? ` of ${c.maxPoints}` : "", " pts"))))), !props.trial && /* @__PURE__ */ React.createElement(
3145
+ const rootCategoryIds = new Set(
3146
+ (props.allCategories || []).filter((c) => !c.parentCategoryId).map((c) => c.categoryId)
3147
+ );
3148
+ const badgeGroupCategories = criteriaCategories.filter((c) => !rootCategoryIds.has(c.categoryId));
3149
+ return /* @__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: "flex items-start gap-4" }, /* @__PURE__ */ React.createElement(Emblem, { imageURL: props.imageURL, alt: props.title, size: "lg", icon: IconRoute, accent: "cyan" }), /* @__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.title || "Pathway"), !!((_a = props.displayTags) == null ? void 0 : _a.length) && /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap gap-1.5" }, props.displayTags.map((tag) => /* @__PURE__ */ React.createElement("span", { key: tag, className: "rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500" }, tag))), /* @__PURE__ */ React.createElement("p", { className: "max-w-xl text-sm text-slate-500" }, props.description || "No description"), (criteriaCategories.length > 0 || !!((_b = props.allCategories) == null ? void 0 : _b.length)) && /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap items-center gap-1.5 pt-0.5" }, criteriaCategories.length > 0 && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", { className: "text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, "Criteria"), criteriaCategories.map((c) => /* @__PURE__ */ React.createElement("span", { key: c.categoryId, className: "rounded-full bg-sky-blue-400/15 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, c.name, ": ", criteria[c.categoryId], "+", c.maxPoints ? ` of ${c.maxPoints}` : "", " pts"))), !!((_c = props.allCategories) == null ? void 0 : _c.length) && /* @__PURE__ */ React.createElement(
3150
+ "button",
3151
+ {
3152
+ onClick: () => setCategoriesOpen(true),
3153
+ className: "flex items-center gap-1.5 rounded-full border border-slate-200 bg-white px-2.5 py-1 text-[10px] font-bold text-dark-blue-400 hover:bg-slate-50"
3154
+ },
3155
+ /* @__PURE__ */ React.createElement(IconCategory2, { size: 12, stroke: 2 }),
3156
+ " Categories"
3157
+ )))), !props.trial && /* @__PURE__ */ React.createElement(
3096
3158
  SplitButton$1,
3097
3159
  {
3098
3160
  href: props.href,
@@ -3121,7 +3183,15 @@ const Pathway = (props) => {
3121
3183
  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"}`
3122
3184
  },
3123
3185
  t.label
3124
- ))), (!!props.trial || tab === "badges") && /* @__PURE__ */ React.createElement(Table$1, { loading: props.loading, items: props.badges }), !props.trial && tab === "students" && /* @__PURE__ */ React.createElement(Table$2, { loading: props.loading, items: props.students, categories: props.categories })));
3186
+ ))), (!!props.trial || tab === "badges") && /* @__PURE__ */ React.createElement(Table$1, { loading: props.loading, badges: props.badges, categories: badgeGroupCategories }), !props.trial && tab === "students" && /* @__PURE__ */ React.createElement(Table$2, { loading: props.loading, items: props.students, categories: props.categories })), /* @__PURE__ */ React.createElement(
3187
+ CategoriesModal,
3188
+ {
3189
+ opened: categoriesOpen,
3190
+ onClose: () => setCategoriesOpen(false),
3191
+ categories: props.allCategories || [],
3192
+ criteria
3193
+ }
3194
+ ));
3125
3195
  };
3126
3196
 
3127
3197
  const SplitButton = (props) => {