@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.d.ts +16 -0
- package/dist/index.js +399 -329
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +401 -331
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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,
|
|
4
|
-
import { Avatar, createStyles, Modal, Center, Loader, Container, Group, Button, Title, Text,
|
|
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$
|
|
128
|
-
var __defProps$
|
|
129
|
-
var __getOwnPropDescs$
|
|
130
|
-
var __getOwnPropSymbols$
|
|
131
|
-
var __hasOwnProp$
|
|
132
|
-
var __propIsEnum$
|
|
133
|
-
var __defNormalProp$
|
|
134
|
-
var __spreadValues$
|
|
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$
|
|
137
|
-
__defNormalProp$
|
|
138
|
-
if (__getOwnPropSymbols$
|
|
139
|
-
for (var prop of __getOwnPropSymbols$
|
|
140
|
-
if (__propIsEnum$
|
|
141
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
503
|
-
var __defProps$
|
|
504
|
-
var __getOwnPropDescs$
|
|
505
|
-
var __getOwnPropSymbols$
|
|
506
|
-
var __hasOwnProp$
|
|
507
|
-
var __propIsEnum$
|
|
508
|
-
var __defNormalProp$
|
|
509
|
-
var __spreadValues$
|
|
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$
|
|
512
|
-
__defNormalProp$
|
|
513
|
-
if (__getOwnPropSymbols$
|
|
514
|
-
for (var prop of __getOwnPropSymbols$
|
|
515
|
-
if (__propIsEnum$
|
|
516
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
733
|
-
var __defProps$
|
|
734
|
-
var __getOwnPropDescs$
|
|
735
|
-
var __getOwnPropSymbols$
|
|
736
|
-
var __hasOwnProp$
|
|
737
|
-
var __propIsEnum$
|
|
738
|
-
var __defNormalProp$
|
|
739
|
-
var __spreadValues$
|
|
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$
|
|
742
|
-
__defNormalProp$
|
|
743
|
-
if (__getOwnPropSymbols$
|
|
744
|
-
for (var prop of __getOwnPropSymbols$
|
|
745
|
-
if (__propIsEnum$
|
|
746
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
957
|
-
var __defProps$
|
|
958
|
-
var __getOwnPropDescs$
|
|
959
|
-
var __getOwnPropSymbols$
|
|
960
|
-
var __hasOwnProp$
|
|
961
|
-
var __propIsEnum$
|
|
962
|
-
var __defNormalProp$
|
|
963
|
-
var __spreadValues$
|
|
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$
|
|
966
|
-
__defNormalProp$
|
|
967
|
-
if (__getOwnPropSymbols$
|
|
968
|
-
for (var prop of __getOwnPropSymbols$
|
|
969
|
-
if (__propIsEnum$
|
|
970
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
1037
|
-
var __defProps$
|
|
1038
|
-
var __getOwnPropDescs$
|
|
1039
|
-
var __getOwnPropSymbols$
|
|
1040
|
-
var __hasOwnProp$
|
|
1041
|
-
var __propIsEnum$
|
|
1042
|
-
var __defNormalProp$
|
|
1043
|
-
var __spreadValues$
|
|
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$
|
|
1046
|
-
__defNormalProp$
|
|
1047
|
-
if (__getOwnPropSymbols$
|
|
1048
|
-
for (var prop of __getOwnPropSymbols$
|
|
1049
|
-
if (__propIsEnum$
|
|
1050
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
1263
|
-
var __getOwnPropSymbols$
|
|
1264
|
-
var __hasOwnProp$
|
|
1265
|
-
var __propIsEnum$
|
|
1266
|
-
var __defNormalProp$
|
|
1267
|
-
var __spreadValues$
|
|
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$
|
|
1270
|
-
__defNormalProp$
|
|
1271
|
-
if (__getOwnPropSymbols$
|
|
1272
|
-
for (var prop of __getOwnPropSymbols$
|
|
1273
|
-
if (__propIsEnum$
|
|
1274
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
1620
|
-
var __defProps$
|
|
1621
|
-
var __getOwnPropDescs$
|
|
1622
|
-
var __getOwnPropSymbols$
|
|
1623
|
-
var __hasOwnProp$
|
|
1624
|
-
var __propIsEnum$
|
|
1625
|
-
var __defNormalProp$
|
|
1626
|
-
var __spreadValues$
|
|
1627
|
-
for (var prop in b || (b = {}))
|
|
1628
|
-
if (__hasOwnProp$
|
|
1629
|
-
__defNormalProp$
|
|
1630
|
-
if (__getOwnPropSymbols$
|
|
1631
|
-
for (var prop of __getOwnPropSymbols$
|
|
1632
|
-
if (__propIsEnum$
|
|
1633
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
1967
|
-
var __defProps$
|
|
1968
|
-
var __getOwnPropDescs$
|
|
1969
|
-
var __getOwnPropSymbols$
|
|
1970
|
-
var __hasOwnProp$
|
|
1971
|
-
var __propIsEnum$
|
|
1972
|
-
var __defNormalProp$
|
|
1973
|
-
var __spreadValues$
|
|
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$
|
|
1976
|
-
__defNormalProp$
|
|
1977
|
-
if (__getOwnPropSymbols$
|
|
1978
|
-
for (var prop of __getOwnPropSymbols$
|
|
1979
|
-
if (__propIsEnum$
|
|
1980
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
2223
|
-
var __getOwnPropSymbols$
|
|
2224
|
-
var __hasOwnProp$
|
|
2225
|
-
var __propIsEnum$
|
|
2226
|
-
var __defNormalProp$
|
|
2227
|
-
var __spreadValues$
|
|
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$
|
|
2230
|
-
__defNormalProp$
|
|
2231
|
-
if (__getOwnPropSymbols$
|
|
2232
|
-
for (var prop of __getOwnPropSymbols$
|
|
2233
|
-
if (__propIsEnum$
|
|
2234
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
2274
|
-
var __getOwnPropSymbols$
|
|
2275
|
-
var __hasOwnProp$
|
|
2276
|
-
var __propIsEnum$
|
|
2277
|
-
var __defNormalProp$
|
|
2278
|
-
var __spreadValues$
|
|
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$
|
|
2281
|
-
__defNormalProp$
|
|
2282
|
-
if (__getOwnPropSymbols$
|
|
2283
|
-
for (var prop of __getOwnPropSymbols$
|
|
2284
|
-
if (__propIsEnum$
|
|
2285
|
-
__defNormalProp$
|
|
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$
|
|
2268
|
+
if (__hasOwnProp$8.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
2293
2269
|
target[prop] = source[prop];
|
|
2294
|
-
if (source != null && __getOwnPropSymbols$
|
|
2295
|
-
for (var prop of __getOwnPropSymbols$
|
|
2296
|
-
if (exclude.indexOf(prop) < 0 && __propIsEnum$
|
|
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$
|
|
2339
|
+
__spreadValues$8({
|
|
2364
2340
|
radius: "md",
|
|
2365
|
-
style: __spreadValues$
|
|
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$
|
|
2442
|
-
var __defProps$
|
|
2443
|
-
var __getOwnPropDescs$
|
|
2444
|
-
var __getOwnPropSymbols$
|
|
2445
|
-
var __hasOwnProp$
|
|
2446
|
-
var __propIsEnum$
|
|
2447
|
-
var __defNormalProp$
|
|
2448
|
-
var __spreadValues$
|
|
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$
|
|
2451
|
-
__defNormalProp$
|
|
2452
|
-
if (__getOwnPropSymbols$
|
|
2453
|
-
for (var prop of __getOwnPropSymbols$
|
|
2454
|
-
if (__propIsEnum$
|
|
2455
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
2439
|
+
if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
2464
2440
|
target[prop] = source[prop];
|
|
2465
|
-
if (source != null && __getOwnPropSymbols$
|
|
2466
|
-
for (var prop of __getOwnPropSymbols$
|
|
2467
|
-
if (exclude.indexOf(prop) < 0 && __propIsEnum$
|
|
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$
|
|
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$
|
|
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$
|
|
2557
|
-
var __defProps$
|
|
2558
|
-
var __getOwnPropDescs$
|
|
2559
|
-
var __getOwnPropSymbols$
|
|
2560
|
-
var __hasOwnProp$
|
|
2561
|
-
var __propIsEnum$
|
|
2562
|
-
var __defNormalProp$
|
|
2563
|
-
var __spreadValues$
|
|
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$
|
|
2566
|
-
__defNormalProp$
|
|
2567
|
-
if (__getOwnPropSymbols$
|
|
2568
|
-
for (var prop of __getOwnPropSymbols$
|
|
2569
|
-
if (__propIsEnum$
|
|
2570
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
2735
|
-
var __defProps$
|
|
2736
|
-
var __getOwnPropDescs$
|
|
2737
|
-
var __getOwnPropSymbols$
|
|
2738
|
-
var __hasOwnProp$
|
|
2739
|
-
var __propIsEnum$
|
|
2740
|
-
var __defNormalProp$
|
|
2741
|
-
var __spreadValues$
|
|
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$
|
|
2744
|
-
__defNormalProp$
|
|
2745
|
-
if (__getOwnPropSymbols$
|
|
2746
|
-
for (var prop of __getOwnPropSymbols$
|
|
2747
|
-
if (__propIsEnum$
|
|
2748
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
3000
|
-
var __defProps$
|
|
3001
|
-
var __getOwnPropDescs$
|
|
3002
|
-
var __getOwnPropSymbols$
|
|
3003
|
-
var __hasOwnProp$
|
|
3004
|
-
var __propIsEnum$
|
|
3005
|
-
var __defNormalProp$
|
|
3006
|
-
var __spreadValues$
|
|
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$
|
|
3009
|
-
__defNormalProp$
|
|
3010
|
-
if (__getOwnPropSymbols$
|
|
3011
|
-
for (var prop of __getOwnPropSymbols$
|
|
3012
|
-
if (__propIsEnum$
|
|
3013
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
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:
|
|
3060
|
-
if (props.
|
|
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
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3080
|
-
|
|
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
|
-
|
|
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,
|
|
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) => {
|