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