@local-civics/mgmt-ui 0.1.213 → 0.1.214
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 +63 -79
- package/dist/index.d.ts.css +18 -0
- package/dist/index.js +755 -790
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +758 -792
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { useState, useMemo } from 'react';
|
|
3
|
-
import { IconChevronRight, IconVideo, IconSwitchHorizontal, IconLogout, IconHome2, IconGauge, IconCategory2, IconRoute, IconAlbum, IconLambda, IconClipboard, IconBuilding, IconBatteryEco, IconBooks, IconBackpack, IconClipboardCopy, IconTableExport, IconArrowLeft, IconSearch, IconCheck, IconTrash, IconPlus, IconLink, IconDownload, IconCloudUpload, IconInfoCircle, IconPlaylistAdd,
|
|
4
|
-
import { Avatar, createStyles, Modal, Center, Loader, Container, Group, Button, Title, Text, UnstyledButton, Card, ScrollArea, SimpleGrid, Tabs as Tabs$1, Stack as Stack$5, Image, Grid, Badge as Badge$1, ActionIcon, LoadingOverlay, Select, Table as Table$l, Drawer, Divider, TextInput, Tooltip, Autocomplete, Paper,
|
|
3
|
+
import { IconChevronRight, IconVideo, IconSwitchHorizontal, IconLogout, IconHome2, IconGauge, IconCategory2, IconRoute, IconAlbum, IconLambda, IconClipboard, IconBuilding, IconBatteryEco, IconBooks, IconBackpack, IconClipboardCopy, IconTableExport, IconArrowLeft, IconSearch, IconCheck, IconTrash, IconPlus, IconLink, IconDownload, IconCloudUpload, IconInfoCircle, IconPlaylistAdd, IconPointer, IconChevronDown, IconX, IconScribble, IconSchool, IconPodium, IconBriefcase, IconPresentation, IconNews, IconTools, IconBrandInstagram, IconBrandLinkedin, IconBrandFacebook, IconExternalLink, IconChevronLeft } from '@tabler/icons';
|
|
4
|
+
import { Avatar, createStyles, Modal, Center, Loader, Container, Group, Button, Title, Text, UnstyledButton, Card, ScrollArea, SimpleGrid, Tabs as Tabs$1, Stack as Stack$5, Image, Grid, Badge as Badge$1, ActionIcon, LoadingOverlay, Select, Table as Table$l, Drawer, Divider, TextInput, Tooltip, Autocomplete, Paper, Anchor, Box, Menu, Overlay, ThemeIcon, Checkbox, createEmotionCache, MantineProvider, AppShell } from '@mantine/core';
|
|
5
5
|
import { Link } from 'react-router-dom';
|
|
6
6
|
import { showNotification, NotificationsProvider } from '@mantine/notifications';
|
|
7
7
|
export { showNotification, updateNotification } from '@mantine/notifications';
|
|
@@ -41,7 +41,7 @@ function styleInject(css, ref) {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
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: }.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.\\!relative{position:relative!important}.m-3{margin:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.mt-1{margin-top:.25rem}.mt-6{margin-top:1.5rem}.mt-2{margin-top:.5rem}.mt-1\\.5{margin-top:.375rem}.ml-\\[29px\\]{margin-left:29px}.mt-0\\.5{margin-top:.125rem}.mt-0{margin-top:0}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-full{height:100%}.h-8{height:2rem}.h-7{height:1.75rem}.h-screen{height:100vh}.h-\\[30px\\]{height:30px}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-8{width:2rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-7{width:1.75rem}.w-screen{width:100vw}.w-\\[230px\\]{width:230px}.w-24{width:6rem}.w-\\[30px\\]{width:30px}.min-w-0{min-width:0}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.rotate-90{--tw-rotate:90deg}.rotate-90,.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}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1\\.2fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1.2fr 1fr .6fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-5{gap:1.25rem}.gap-2\\.5{gap:.625rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-1{gap:.25rem}.gap-1\\.5{gap:.375rem}.gap-3{gap:.75rem}.gap-0\\.5{gap:.125rem}.gap-0{gap:0}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-y-4{row-gap:1rem}.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-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)))}.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-xl{border-radius:.75rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-2xl{border-radius:1rem}.rounded-\\[10px\\]{border-radius:10px}.rounded-\\[8px\\]{border-radius:8px}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-l{border-left-width:1px}.border-none{border-style:none}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-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}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-dark-blue-400{--tw-bg-opacity:1;background-color:rgb(35 42 58/var(--tw-bg-opacity))}.bg-mint-400\\/20{background-color:rgba(30,226,175,.2)}.bg-gold-400\\/15{background-color:rgba(255,212,77,.15)}.bg-sky-blue-400\\/15{background-color:rgba(59,208,242,.15)}.bg-sky-blue-400\\/25{background-color:rgba(59,208,242,.25)}.bg-mint-400\\/15{background-color:rgba(30,226,175,.15)}.bg-mint-400\\/25{background-color:rgba(30,226,175,.25)}.bg-gold-400\\/25{background-color:rgba(255,212,77,.25)}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.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-\\[\\#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-8{padding:2rem}.p-4{padding:1rem}.p-2\\.5{padding:.625rem}.p-2{padding:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-4{padding-bottom:1rem;padding-top:1rem}.px-3\\.5{padding-left:.875rem;padding-right:.875rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.pl-2\\.5{padding-left:.625rem}.pl-2{padding-left:.5rem}.text-center{text-align:center}.font-proxima{font-family:ProximaNova}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-\\[10px\\]{font-size:10px}.text-\\[10\\.5px\\]{font-size:10.5px}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\\[11px\\]{font-size:11px}.text-\\[11\\.5px\\]{font-size:11.5px}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.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-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-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-sky-blue-400{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-mint-400{--tw-text-opacity:1;color:rgb(30 226 175/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-white\\/70{color:hsla(0,0%,100%,.7)}.text-gold-400{--tw-text-opacity:1;color:rgb(255 212 77/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\],.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\]{--tw-shadow:0 3px 12px rgba(255,212,77,.35);--tw-shadow-colored:0 3px 12px var(--tw-shadow-color)}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{--tw-shadow:0 2px 10px rgba(30,226,175,.15);--tw-shadow-colored:0 2px 10px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{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)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}*,:after,:before{border-style:solid;border-width:0}.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))}.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\\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.disabled\\:opacity-50:disabled{opacity:.5}";
|
|
44
|
+
var css_248z = "@font-face{font-family:ProximaNova;src:url(https://cdn.localcivics.io/fonts/ProximaNova.otf) format(\"opentype\")}@font-face{font-family:ProximaNova;font-weight:700;src:url(https://cdn.localcivics.io/fonts/ProximaNovaBold.otf) format(\"opentype\")}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.\\!relative{position:relative!important}.left-3\\.5{left:.875rem}.top-1\\/2{top:50%}.left-3{left:.75rem}.m-3{margin:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.mt-0\\.5{margin-top:.125rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-6{margin-top:1.5rem}.mt-2{margin-top:.5rem}.mt-1\\.5{margin-top:.375rem}.ml-\\[29px\\]{margin-left:29px}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-full{height:100%}.h-8{height:2rem}.h-7{height:1.75rem}.h-12{height:3rem}.h-9{height:2.25rem}.h-screen{height:100vh}.h-\\[30px\\]{height:30px}.w-10{width:2.5rem}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-8{width:2rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-7{width:1.75rem}.w-64{width:16rem}.w-12{width:3rem}.w-16{width:4rem}.w-36{width:9rem}.w-4{width:1rem}.w-9{width:2.25rem}.w-\\[440px\\]{width:440px}.w-40{width:10rem}.w-screen{width:100vw}.w-\\[230px\\]{width:230px}.w-24{width:6rem}.w-\\[30px\\]{width:30px}.min-w-0{min-width:0}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-\\[1100px\\]{max-width:1100px}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y:-50%}.-translate-y-1\\/2,.rotate-180{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-180{--tw-rotate:180deg}.rotate-90{--tw-rotate:90deg}.rotate-90,.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}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1\\.2fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1.2fr 1fr .6fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-\\[18px\\]{gap:18px}.gap-5{gap:1.25rem}.gap-2\\.5{gap:.625rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-1{gap:.25rem}.gap-1\\.5{gap:.375rem}.gap-3{gap:.75rem}.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>: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-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)))}.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-xl{border-radius:.75rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-\\[8px\\]{border-radius:8px}.border{border-width:1px}.border-l-4{border-left-width:4px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-l{border-left-width:1px}.border-none{border-style:none}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-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-transparent{background-color:transparent}.bg-dark-blue-400{--tw-bg-opacity:1;background-color:rgb(35 42 58/var(--tw-bg-opacity))}.bg-mint-400\\/20{background-color:rgba(30,226,175,.2)}.bg-mint-100{--tw-bg-opacity:1;background-color:rgb(208 251 240/var(--tw-bg-opacity))}.bg-sky-blue-400\\/20{background-color:rgba(59,208,242,.2)}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-white\\/90{background-color:hsla(0,0%,100%,.9)}.bg-gold-400\\/15{background-color:rgba(255,212,77,.15)}.bg-sky-blue-400\\/15{background-color:rgba(59,208,242,.15)}.bg-sky-blue-400\\/25{background-color:rgba(59,208,242,.25)}.bg-mint-400\\/15{background-color:rgba(30,226,175,.15)}.bg-mint-400\\/25{background-color:rgba(30,226,175,.25)}.bg-gold-400\\/25{background-color:rgba(255,212,77,.25)}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.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-8{padding:2rem}.p-4{padding:1rem}.p-1{padding:.25rem}.p-5{padding:1.25rem}.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-3{padding-bottom:.75rem;padding-top:.75rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-4{padding-bottom:1rem;padding-top:1rem}.px-3\\.5{padding-left:.875rem;padding-right:.875rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.pb-2{padding-bottom:.5rem}.pl-10{padding-left:2.5rem}.pr-4{padding-right:1rem}.pl-2\\.5{padding-left:.625rem}.pl-2{padding-left:.5rem}.text-left{text-align:left}.text-center{text-align:center}.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-lg{font-size:1.125rem;line-height:1.75rem}.text-\\[10px\\]{font-size:10px}.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-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-sky-blue-400{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-mint-400{--tw-text-opacity:1;color:rgb(30 226 175/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-white\\/70{color:hsla(0,0%,100%,.7)}.text-gold-400{--tw-text-opacity:1;color:rgb(255 212 77/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\],.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\]{--tw-shadow:0 3px 12px rgba(255,212,77,.35);--tw-shadow-colored:0 3px 12px var(--tw-shadow-color)}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{--tw-shadow:0 2px 10px rgba(30,226,175,.15);--tw-shadow-colored:0 2px 10px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}*,:after,:before{border-style:solid;border-width:0}button{background-color:transparent;background-image:none;color:inherit;cursor:pointer;font:inherit;margin:0;padding:0;text-transform:none}.placeholder\\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.placeholder\\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.hover\\:scale-\\[1\\.02\\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.hover\\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/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}";
|
|
45
45
|
styleInject(css_248z);
|
|
46
46
|
|
|
47
47
|
function UserButton({ image, name, email }) {
|
|
@@ -125,25 +125,25 @@ function LinksGroup({ icon: Icon, href, label, accent = "cyan", initiallyOpened,
|
|
|
125
125
|
), 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));
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
var __defProp$
|
|
129
|
-
var __defProps$
|
|
130
|
-
var __getOwnPropDescs$
|
|
131
|
-
var __getOwnPropSymbols$
|
|
132
|
-
var __hasOwnProp$
|
|
133
|
-
var __propIsEnum$
|
|
134
|
-
var __defNormalProp$
|
|
135
|
-
var __spreadValues$
|
|
128
|
+
var __defProp$e = Object.defineProperty;
|
|
129
|
+
var __defProps$a = Object.defineProperties;
|
|
130
|
+
var __getOwnPropDescs$a = Object.getOwnPropertyDescriptors;
|
|
131
|
+
var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
|
|
132
|
+
var __hasOwnProp$e = Object.prototype.hasOwnProperty;
|
|
133
|
+
var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
|
|
134
|
+
var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
135
|
+
var __spreadValues$e = (a, b) => {
|
|
136
136
|
for (var prop in b || (b = {}))
|
|
137
|
-
if (__hasOwnProp$
|
|
138
|
-
__defNormalProp$
|
|
139
|
-
if (__getOwnPropSymbols$
|
|
140
|
-
for (var prop of __getOwnPropSymbols$
|
|
141
|
-
if (__propIsEnum$
|
|
142
|
-
__defNormalProp$
|
|
137
|
+
if (__hasOwnProp$e.call(b, prop))
|
|
138
|
+
__defNormalProp$e(a, prop, b[prop]);
|
|
139
|
+
if (__getOwnPropSymbols$e)
|
|
140
|
+
for (var prop of __getOwnPropSymbols$e(b)) {
|
|
141
|
+
if (__propIsEnum$e.call(b, prop))
|
|
142
|
+
__defNormalProp$e(a, prop, b[prop]);
|
|
143
143
|
}
|
|
144
144
|
return a;
|
|
145
145
|
};
|
|
146
|
-
var __spreadProps$
|
|
146
|
+
var __spreadProps$a = (a, b) => __defProps$a(a, __getOwnPropDescs$a(b));
|
|
147
147
|
const data = [
|
|
148
148
|
{ label: "Home", icon: IconHome2, accent: "cyan" },
|
|
149
149
|
{ label: "Dashboard", icon: IconGauge, accent: "mint" },
|
|
@@ -170,12 +170,12 @@ function Navbar(props) {
|
|
|
170
170
|
}
|
|
171
171
|
return /* @__PURE__ */ React.createElement(
|
|
172
172
|
LinksGroup,
|
|
173
|
-
__spreadProps$
|
|
173
|
+
__spreadProps$a(__spreadValues$e(__spreadValues$e({
|
|
174
174
|
key: item.label,
|
|
175
175
|
active: props.active
|
|
176
176
|
}, item), context), {
|
|
177
177
|
links: (item.links || []).map((link) => {
|
|
178
|
-
return __spreadValues$
|
|
178
|
+
return __spreadValues$e(__spreadValues$e({}, link), props.links[`${item.label}/${link.label}`] || { notifications: 0, href: "" });
|
|
179
179
|
})
|
|
180
180
|
})
|
|
181
181
|
);
|
|
@@ -195,7 +195,7 @@ const UtilLink = (props) => {
|
|
|
195
195
|
);
|
|
196
196
|
};
|
|
197
197
|
|
|
198
|
-
const useStyles$
|
|
198
|
+
const useStyles$k = createStyles((theme) => ({
|
|
199
199
|
inner: {
|
|
200
200
|
paddingTop: theme.spacing.xl,
|
|
201
201
|
paddingBottom: theme.spacing.xl * 4
|
|
@@ -231,7 +231,7 @@ const useStyles$o = createStyles((theme) => ({
|
|
|
231
231
|
}
|
|
232
232
|
}));
|
|
233
233
|
const GettingStarted = (props) => {
|
|
234
|
-
const { classes } = useStyles$
|
|
234
|
+
const { classes } = useStyles$k();
|
|
235
235
|
return /* @__PURE__ */ React.createElement(
|
|
236
236
|
Modal,
|
|
237
237
|
{
|
|
@@ -245,7 +245,7 @@ const GettingStarted = (props) => {
|
|
|
245
245
|
);
|
|
246
246
|
};
|
|
247
247
|
|
|
248
|
-
const useStyles$
|
|
248
|
+
const useStyles$j = createStyles((theme) => ({
|
|
249
249
|
title: {
|
|
250
250
|
fontSize: 34,
|
|
251
251
|
fontWeight: 900,
|
|
@@ -286,7 +286,7 @@ const useStyles$n = createStyles((theme) => ({
|
|
|
286
286
|
}
|
|
287
287
|
}));
|
|
288
288
|
const SwitchAccount = (props) => {
|
|
289
|
-
const { classes, theme } = useStyles$
|
|
289
|
+
const { classes, theme } = useStyles$j();
|
|
290
290
|
const options = props.accounts.map((a) => {
|
|
291
291
|
return /* @__PURE__ */ React.createElement(UnstyledButton, { onClick: () => props.onClick && props.onClick(a.accountId), key: a.accountId, p: theme.spacing.md }, /* @__PURE__ */ React.createElement(Card, { withBorder: true, shadow: "md", radius: "md", className: classes.card, p: "xl" }, a.isAdmin && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(IconBatteryEco, { size: 50, stroke: 2, color: theme.fn.primaryColor() })), a.isGroupAdmin && !a.isAdmin && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(IconBooks, { size: 50, stroke: 2, color: theme.fn.primaryColor() })), !a.isAdmin && !a.isGroupAdmin && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(IconBackpack, { size: 50, stroke: 2, color: theme.fn.primaryColor() })), /* @__PURE__ */ React.createElement(Text, { size: "lg", weight: 500, className: classes.cardTitle, mt: "md" }, a.name), /* @__PURE__ */ React.createElement(Text, { size: "sm", color: "dimmed", mt: "sm" }, a.isAdmin ? "Admin" : a.isGroupAdmin ? "Educator" : "Student")));
|
|
292
292
|
});
|
|
@@ -323,7 +323,7 @@ const Tabs = (props) => {
|
|
|
323
323
|
return /* @__PURE__ */ React.createElement(Tabs$1, { value: props.value, onTabChange: props.onChange }, /* @__PURE__ */ React.createElement(Tabs$1.List, null, tabs));
|
|
324
324
|
};
|
|
325
325
|
|
|
326
|
-
const useStyles$
|
|
326
|
+
const useStyles$i = createStyles((theme) => ({
|
|
327
327
|
button: {
|
|
328
328
|
borderTopRightRadius: 0,
|
|
329
329
|
borderBottomRightRadius: 0,
|
|
@@ -338,7 +338,7 @@ const useStyles$m = createStyles((theme) => ({
|
|
|
338
338
|
}
|
|
339
339
|
}));
|
|
340
340
|
const SplitButton$4 = (props) => {
|
|
341
|
-
const { classes, theme } = useStyles$
|
|
341
|
+
const { classes, theme } = useStyles$i();
|
|
342
342
|
theme.colors[theme.primaryColor][theme.colorScheme === "dark" ? 5 : 6];
|
|
343
343
|
return /* @__PURE__ */ React.createElement(Stack$5, { spacing: "sm" }, /* @__PURE__ */ React.createElement(
|
|
344
344
|
Button,
|
|
@@ -366,7 +366,7 @@ const SplitButton$4 = (props) => {
|
|
|
366
366
|
));
|
|
367
367
|
};
|
|
368
368
|
|
|
369
|
-
const useStyles$
|
|
369
|
+
const useStyles$h = createStyles((theme) => ({
|
|
370
370
|
wrapper: {
|
|
371
371
|
display: "flex",
|
|
372
372
|
alignItems: "center",
|
|
@@ -417,7 +417,7 @@ const useStyles$l = createStyles((theme) => ({
|
|
|
417
417
|
}
|
|
418
418
|
}));
|
|
419
419
|
const PlaceholderBanner = (props) => {
|
|
420
|
-
const { classes } = useStyles$
|
|
420
|
+
const { classes } = useStyles$h();
|
|
421
421
|
const title = props.title || "Nothing to display";
|
|
422
422
|
const description = props.description || "We don't have anything to show you here just yet. Add data, check back later, or adjust your search.";
|
|
423
423
|
return /* @__PURE__ */ React.createElement("div", { className: classes.wrapper }, /* @__PURE__ */ React.createElement("div", { className: classes.body }, /* @__PURE__ */ React.createElement(Title, { className: classes.title }, props.loading ? "Loading..." : title), /* @__PURE__ */ React.createElement(Text, { size: "sm", color: "dimmed" }, props.loading ? "Hold on, we're loading your data." : description)), /* @__PURE__ */ React.createElement(Image, { src: `https://cdn.localcivics.io/illustrations/${props.icon}.svg`, className: classes.image }));
|
|
@@ -469,28 +469,28 @@ function useSortableData(items, config = { key: "", direction: null }) {
|
|
|
469
469
|
return { items: sortedItems, requestSort, sortConfig };
|
|
470
470
|
}
|
|
471
471
|
|
|
472
|
-
var __defProp$
|
|
473
|
-
var __defProps$
|
|
474
|
-
var __getOwnPropDescs$
|
|
475
|
-
var __getOwnPropSymbols$
|
|
476
|
-
var __hasOwnProp$
|
|
477
|
-
var __propIsEnum$
|
|
478
|
-
var __defNormalProp$
|
|
479
|
-
var __spreadValues$
|
|
472
|
+
var __defProp$d = Object.defineProperty;
|
|
473
|
+
var __defProps$9 = Object.defineProperties;
|
|
474
|
+
var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
|
|
475
|
+
var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
|
|
476
|
+
var __hasOwnProp$d = Object.prototype.hasOwnProperty;
|
|
477
|
+
var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
|
|
478
|
+
var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
479
|
+
var __spreadValues$d = (a, b) => {
|
|
480
480
|
for (var prop in b || (b = {}))
|
|
481
|
-
if (__hasOwnProp$
|
|
482
|
-
__defNormalProp$
|
|
483
|
-
if (__getOwnPropSymbols$
|
|
484
|
-
for (var prop of __getOwnPropSymbols$
|
|
485
|
-
if (__propIsEnum$
|
|
486
|
-
__defNormalProp$
|
|
481
|
+
if (__hasOwnProp$d.call(b, prop))
|
|
482
|
+
__defNormalProp$d(a, prop, b[prop]);
|
|
483
|
+
if (__getOwnPropSymbols$d)
|
|
484
|
+
for (var prop of __getOwnPropSymbols$d(b)) {
|
|
485
|
+
if (__propIsEnum$d.call(b, prop))
|
|
486
|
+
__defNormalProp$d(a, prop, b[prop]);
|
|
487
487
|
}
|
|
488
488
|
return a;
|
|
489
489
|
};
|
|
490
|
-
var __spreadProps$
|
|
490
|
+
var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
|
|
491
491
|
function Table$k(props) {
|
|
492
492
|
const preparedItems = React.useMemo(() => {
|
|
493
|
-
return props.items.map((item) => __spreadProps$
|
|
493
|
+
return props.items.map((item) => __spreadProps$9(__spreadValues$d({}, item), {
|
|
494
494
|
status: item.isComplete ? 1 : 0
|
|
495
495
|
}));
|
|
496
496
|
}, [props.items]);
|
|
@@ -587,7 +587,7 @@ function Table$j(props) {
|
|
|
587
587
|
));
|
|
588
588
|
}
|
|
589
589
|
|
|
590
|
-
const useStyles$
|
|
590
|
+
const useStyles$g = createStyles((theme) => ({
|
|
591
591
|
title: {
|
|
592
592
|
fontSize: 34,
|
|
593
593
|
fontWeight: 900,
|
|
@@ -600,7 +600,7 @@ const useStyles$k = createStyles((theme) => ({
|
|
|
600
600
|
}
|
|
601
601
|
}));
|
|
602
602
|
const Badge = (props) => {
|
|
603
|
-
const { classes } = useStyles$
|
|
603
|
+
const { classes } = useStyles$g();
|
|
604
604
|
const [tab, setTab] = useState("lessons");
|
|
605
605
|
const numberOfStudents = props.students.length;
|
|
606
606
|
const numberOfBadges = numberOfStudents > 0 ? props.students.filter((u) => u.isComplete).length : 0;
|
|
@@ -938,25 +938,25 @@ function Table$c(props) {
|
|
|
938
938
|
}));
|
|
939
939
|
}
|
|
940
940
|
|
|
941
|
-
var __defProp$
|
|
942
|
-
var __defProps$
|
|
943
|
-
var __getOwnPropDescs$
|
|
944
|
-
var __getOwnPropSymbols$
|
|
945
|
-
var __hasOwnProp$
|
|
946
|
-
var __propIsEnum$
|
|
947
|
-
var __defNormalProp$
|
|
948
|
-
var __spreadValues$
|
|
941
|
+
var __defProp$c = Object.defineProperty;
|
|
942
|
+
var __defProps$8 = Object.defineProperties;
|
|
943
|
+
var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
|
|
944
|
+
var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
|
|
945
|
+
var __hasOwnProp$c = Object.prototype.hasOwnProperty;
|
|
946
|
+
var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
|
|
947
|
+
var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
948
|
+
var __spreadValues$c = (a, b) => {
|
|
949
949
|
for (var prop in b || (b = {}))
|
|
950
|
-
if (__hasOwnProp$
|
|
951
|
-
__defNormalProp$
|
|
952
|
-
if (__getOwnPropSymbols$
|
|
953
|
-
for (var prop of __getOwnPropSymbols$
|
|
954
|
-
if (__propIsEnum$
|
|
955
|
-
__defNormalProp$
|
|
950
|
+
if (__hasOwnProp$c.call(b, prop))
|
|
951
|
+
__defNormalProp$c(a, prop, b[prop]);
|
|
952
|
+
if (__getOwnPropSymbols$c)
|
|
953
|
+
for (var prop of __getOwnPropSymbols$c(b)) {
|
|
954
|
+
if (__propIsEnum$c.call(b, prop))
|
|
955
|
+
__defNormalProp$c(a, prop, b[prop]);
|
|
956
956
|
}
|
|
957
957
|
return a;
|
|
958
958
|
};
|
|
959
|
-
var __spreadProps$
|
|
959
|
+
var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
|
|
960
960
|
const Class = (props) => {
|
|
961
961
|
const [opened, setOpened] = useState(false);
|
|
962
962
|
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
@@ -968,7 +968,7 @@ const Class = (props) => {
|
|
|
968
968
|
padding: "xl",
|
|
969
969
|
size: "xl"
|
|
970
970
|
},
|
|
971
|
-
/* @__PURE__ */ React.createElement(DropzoneButton$1, __spreadProps$
|
|
971
|
+
/* @__PURE__ */ React.createElement(DropzoneButton$1, __spreadProps$8(__spreadValues$c({}, props), { close: () => setOpened(false) }))
|
|
972
972
|
), /* @__PURE__ */ React.createElement("div", { className: "mx-auto flex max-w-5xl 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(
|
|
973
973
|
"button",
|
|
974
974
|
{
|
|
@@ -1094,20 +1094,20 @@ const DropzoneButton$1 = (props) => {
|
|
|
1094
1094
|
props.onCreateMembers && props.onCreateMembers([values]);
|
|
1095
1095
|
}) }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement(
|
|
1096
1096
|
TextInput,
|
|
1097
|
-
__spreadValues$
|
|
1097
|
+
__spreadValues$c({
|
|
1098
1098
|
withAsterisk: true,
|
|
1099
1099
|
label: "Email",
|
|
1100
1100
|
placeholder: "Email"
|
|
1101
1101
|
}, form.getInputProps("email"))
|
|
1102
1102
|
), /* @__PURE__ */ React.createElement(Group, { grow: true }, /* @__PURE__ */ React.createElement(
|
|
1103
1103
|
TextInput,
|
|
1104
|
-
__spreadValues$
|
|
1104
|
+
__spreadValues$c({
|
|
1105
1105
|
label: "Given name",
|
|
1106
1106
|
placeholder: "Given name"
|
|
1107
1107
|
}, form.getInputProps("givenName"))
|
|
1108
1108
|
), /* @__PURE__ */ React.createElement(
|
|
1109
1109
|
TextInput,
|
|
1110
|
-
__spreadValues$
|
|
1110
|
+
__spreadValues$c({
|
|
1111
1111
|
label: "Family name",
|
|
1112
1112
|
placeholder: "Family name"
|
|
1113
1113
|
}, form.getInputProps("familyName"))
|
|
@@ -1187,23 +1187,23 @@ function Table$b(props) {
|
|
|
1187
1187
|
));
|
|
1188
1188
|
}
|
|
1189
1189
|
|
|
1190
|
-
var __defProp$
|
|
1191
|
-
var __getOwnPropSymbols$
|
|
1192
|
-
var __hasOwnProp$
|
|
1193
|
-
var __propIsEnum$
|
|
1194
|
-
var __defNormalProp$
|
|
1195
|
-
var __spreadValues$
|
|
1190
|
+
var __defProp$b = Object.defineProperty;
|
|
1191
|
+
var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
|
|
1192
|
+
var __hasOwnProp$b = Object.prototype.hasOwnProperty;
|
|
1193
|
+
var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
|
|
1194
|
+
var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1195
|
+
var __spreadValues$b = (a, b) => {
|
|
1196
1196
|
for (var prop in b || (b = {}))
|
|
1197
|
-
if (__hasOwnProp$
|
|
1198
|
-
__defNormalProp$
|
|
1199
|
-
if (__getOwnPropSymbols$
|
|
1200
|
-
for (var prop of __getOwnPropSymbols$
|
|
1201
|
-
if (__propIsEnum$
|
|
1202
|
-
__defNormalProp$
|
|
1197
|
+
if (__hasOwnProp$b.call(b, prop))
|
|
1198
|
+
__defNormalProp$b(a, prop, b[prop]);
|
|
1199
|
+
if (__getOwnPropSymbols$b)
|
|
1200
|
+
for (var prop of __getOwnPropSymbols$b(b)) {
|
|
1201
|
+
if (__propIsEnum$b.call(b, prop))
|
|
1202
|
+
__defNormalProp$b(a, prop, b[prop]);
|
|
1203
1203
|
}
|
|
1204
1204
|
return a;
|
|
1205
1205
|
};
|
|
1206
|
-
const useStyles$
|
|
1206
|
+
const useStyles$f = createStyles((theme) => ({
|
|
1207
1207
|
title: {
|
|
1208
1208
|
fontSize: 34,
|
|
1209
1209
|
fontWeight: 900,
|
|
@@ -1216,7 +1216,7 @@ const useStyles$j = createStyles((theme) => ({
|
|
|
1216
1216
|
}
|
|
1217
1217
|
}));
|
|
1218
1218
|
const Classes = (props) => {
|
|
1219
|
-
const { classes } = useStyles$
|
|
1219
|
+
const { classes } = useStyles$f();
|
|
1220
1220
|
const form = useForm({
|
|
1221
1221
|
initialValues: {
|
|
1222
1222
|
classId: "",
|
|
@@ -1246,14 +1246,14 @@ const Classes = (props) => {
|
|
|
1246
1246
|
props.onCreateClass && props.onCreateClass(values);
|
|
1247
1247
|
}) }, /* @__PURE__ */ React.createElement(Stack$5, null, /* @__PURE__ */ React.createElement(
|
|
1248
1248
|
TextInput,
|
|
1249
|
-
__spreadValues$
|
|
1249
|
+
__spreadValues$b({
|
|
1250
1250
|
withAsterisk: true,
|
|
1251
1251
|
label: "Name",
|
|
1252
1252
|
placeholder: "Class name"
|
|
1253
1253
|
}, form.getInputProps("name"))
|
|
1254
1254
|
), /* @__PURE__ */ React.createElement(
|
|
1255
1255
|
TextInput,
|
|
1256
|
-
__spreadValues$
|
|
1256
|
+
__spreadValues$b({
|
|
1257
1257
|
label: "Description",
|
|
1258
1258
|
placeholder: "A class for my first period English students"
|
|
1259
1259
|
}, form.getInputProps("description"))
|
|
@@ -1287,7 +1287,7 @@ const Classes = (props) => {
|
|
|
1287
1287
|
))))));
|
|
1288
1288
|
};
|
|
1289
1289
|
|
|
1290
|
-
const useStyles$
|
|
1290
|
+
const useStyles$e = createStyles((theme) => ({
|
|
1291
1291
|
title: {
|
|
1292
1292
|
fontSize: 34,
|
|
1293
1293
|
fontWeight: 900,
|
|
@@ -1301,7 +1301,7 @@ const useStyles$i = createStyles((theme) => ({
|
|
|
1301
1301
|
}
|
|
1302
1302
|
}));
|
|
1303
1303
|
const UserInfo = (props) => {
|
|
1304
|
-
const { classes } = useStyles$
|
|
1304
|
+
const { classes } = useStyles$e();
|
|
1305
1305
|
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));
|
|
1306
1306
|
};
|
|
1307
1307
|
|
|
@@ -1439,129 +1439,36 @@ const Student = (props) => {
|
|
|
1439
1439
|
))))));
|
|
1440
1440
|
};
|
|
1441
1441
|
|
|
1442
|
-
const
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
paddingLeft: theme.spacing.xl * 2,
|
|
1453
|
-
"&:hover": {
|
|
1454
|
-
boxShadow: theme.shadows.md,
|
|
1455
|
-
transform: "scale(1.02)"
|
|
1456
|
-
},
|
|
1457
|
-
"&::before": {
|
|
1458
|
-
content: '""',
|
|
1459
|
-
position: "absolute",
|
|
1460
|
-
top: 0,
|
|
1461
|
-
bottom: 0,
|
|
1462
|
-
left: 0,
|
|
1463
|
-
width: 6,
|
|
1464
|
-
backgroundImage: theme.fn.linearGradient(0, theme.colors[from][6], theme.colors[to][6])
|
|
1465
|
-
}
|
|
1466
|
-
}
|
|
1467
|
-
};
|
|
1468
|
-
});
|
|
1442
|
+
const ACCENT_BORDER = {
|
|
1443
|
+
cyan: "border-l-sky-blue-400",
|
|
1444
|
+
mint: "border-l-mint-400",
|
|
1445
|
+
gold: "border-l-gold-400"
|
|
1446
|
+
};
|
|
1447
|
+
const ACCENT_GRADIENT = {
|
|
1448
|
+
cyan: "from-sky-blue-400",
|
|
1449
|
+
mint: "from-mint-400",
|
|
1450
|
+
gold: "from-gold-400"
|
|
1451
|
+
};
|
|
1469
1452
|
function CardGradient(props) {
|
|
1470
|
-
const
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
{
|
|
1477
|
-
size: "xl",
|
|
1478
|
-
radius: "md",
|
|
1479
|
-
variant: "gradient",
|
|
1480
|
-
gradient: { deg: 0, from, to }
|
|
1453
|
+
const accent = props.accent || "cyan";
|
|
1454
|
+
return /* @__PURE__ */ React.createElement(
|
|
1455
|
+
"div",
|
|
1456
|
+
{
|
|
1457
|
+
onClick: props.onClick,
|
|
1458
|
+
className: `flex cursor-pointer items-center gap-[18px] rounded-2xl border border-l-4 border-slate-200 bg-white px-[22px] py-[18px] transition-transform hover:scale-[1.02] hover:shadow-md ${ACCENT_BORDER[accent]}`
|
|
1481
1459
|
},
|
|
1482
|
-
icon
|
|
1483
|
-
|
|
1460
|
+
/* @__PURE__ */ React.createElement("div", { className: `flex h-10 w-10 shrink-0 items-center justify-center rounded-[10px] bg-gradient-to-br ${ACCENT_GRADIENT[accent]} to-dark-blue-400 text-white` }, props.icon),
|
|
1461
|
+
/* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", { className: "text-[15.5px] font-extrabold text-dark-blue-400" }, props.title), /* @__PURE__ */ React.createElement("div", { className: "mt-0.5 text-xs text-slate-500" }, props.description))
|
|
1462
|
+
);
|
|
1484
1463
|
}
|
|
1485
1464
|
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1491
|
-
var __spreadValues$9 = (a, b) => {
|
|
1492
|
-
for (var prop in b || (b = {}))
|
|
1493
|
-
if (__hasOwnProp$9.call(b, prop))
|
|
1494
|
-
__defNormalProp$9(a, prop, b[prop]);
|
|
1495
|
-
if (__getOwnPropSymbols$9)
|
|
1496
|
-
for (var prop of __getOwnPropSymbols$9(b)) {
|
|
1497
|
-
if (__propIsEnum$9.call(b, prop))
|
|
1498
|
-
__defNormalProp$9(a, prop, b[prop]);
|
|
1499
|
-
}
|
|
1500
|
-
return a;
|
|
1501
|
-
};
|
|
1502
|
-
var __objRest$1 = (source, exclude) => {
|
|
1503
|
-
var target = {};
|
|
1504
|
-
for (var prop in source)
|
|
1505
|
-
if (__hasOwnProp$9.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
1506
|
-
target[prop] = source[prop];
|
|
1507
|
-
if (source != null && __getOwnPropSymbols$9)
|
|
1508
|
-
for (var prop of __getOwnPropSymbols$9(source)) {
|
|
1509
|
-
if (exclude.indexOf(prop) < 0 && __propIsEnum$9.call(source, prop))
|
|
1510
|
-
target[prop] = source[prop];
|
|
1511
|
-
}
|
|
1512
|
-
return target;
|
|
1513
|
-
};
|
|
1514
|
-
const useStyles$g = createStyles((theme) => ({
|
|
1515
|
-
card: {
|
|
1516
|
-
height: 240,
|
|
1517
|
-
backgroundSize: "cover",
|
|
1518
|
-
backgroundPosition: "center",
|
|
1519
|
-
whiteSpace: "pre-line"
|
|
1520
|
-
},
|
|
1521
|
-
content: {
|
|
1522
|
-
position: "absolute",
|
|
1523
|
-
padding: theme.spacing.xl,
|
|
1524
|
-
zIndex: 1,
|
|
1525
|
-
top: 0,
|
|
1526
|
-
bottom: 0,
|
|
1527
|
-
right: 0,
|
|
1528
|
-
left: 0
|
|
1529
|
-
},
|
|
1530
|
-
title: {
|
|
1531
|
-
color: theme.white,
|
|
1532
|
-
marginBottom: theme.spacing.xs / 2
|
|
1533
|
-
},
|
|
1534
|
-
description: {
|
|
1535
|
-
color: theme.white,
|
|
1536
|
-
maxWidth: 220
|
|
1537
|
-
},
|
|
1538
|
-
code: {
|
|
1539
|
-
color: theme.white,
|
|
1540
|
-
maxWidth: 220
|
|
1541
|
-
}
|
|
1542
|
-
}));
|
|
1543
|
-
const TenantBanner = (_a) => {
|
|
1544
|
-
var _b = _a, {
|
|
1545
|
-
title,
|
|
1546
|
-
description,
|
|
1547
|
-
image,
|
|
1548
|
-
style,
|
|
1549
|
-
className,
|
|
1550
|
-
code
|
|
1551
|
-
} = _b, others = __objRest$1(_b, [
|
|
1552
|
-
"title",
|
|
1553
|
-
"description",
|
|
1554
|
-
"image",
|
|
1555
|
-
"style",
|
|
1556
|
-
"className",
|
|
1557
|
-
"code"
|
|
1558
|
-
]);
|
|
1559
|
-
const { classes, cx, theme } = useStyles$g();
|
|
1560
|
-
const handleCopy = async () => {
|
|
1561
|
-
if (!code)
|
|
1465
|
+
const Home = (props) => {
|
|
1466
|
+
const accessCode = props.organization.accessCode;
|
|
1467
|
+
const onCopyAccessCode = async () => {
|
|
1468
|
+
if (!accessCode)
|
|
1562
1469
|
return;
|
|
1563
1470
|
try {
|
|
1564
|
-
await navigator.clipboard.writeText(
|
|
1471
|
+
await navigator.clipboard.writeText(accessCode);
|
|
1565
1472
|
showNotification({
|
|
1566
1473
|
title: "Copied!",
|
|
1567
1474
|
message: "Community code copied to clipboard.",
|
|
@@ -1571,97 +1478,59 @@ const TenantBanner = (_a) => {
|
|
|
1571
1478
|
console.error("Failed to copy code", err);
|
|
1572
1479
|
}
|
|
1573
1480
|
};
|
|
1574
|
-
return /* @__PURE__ */ React.createElement(
|
|
1575
|
-
|
|
1576
|
-
__spreadValues$9({
|
|
1577
|
-
radius: "md",
|
|
1578
|
-
style: __spreadValues$9({ backgroundImage: `url(${image})` }, style),
|
|
1579
|
-
className: cx(classes.card, className)
|
|
1580
|
-
}, others),
|
|
1581
|
-
/* @__PURE__ */ React.createElement(
|
|
1582
|
-
Overlay,
|
|
1583
|
-
{
|
|
1584
|
-
gradient: `linear-gradient(105deg, ${theme.black} 20%, #312f2f 50%, ${theme.colors.gray[6]} 100%)`,
|
|
1585
|
-
opacity: 0.55,
|
|
1586
|
-
zIndex: 0
|
|
1587
|
-
}
|
|
1588
|
-
),
|
|
1589
|
-
/* @__PURE__ */ React.createElement("div", { className: classes.content }, /* @__PURE__ */ React.createElement(Text, { size: "lg", weight: 700, className: classes.title }, title), /* @__PURE__ */ React.createElement(Text, { size: "sm", className: classes.description }, description), /* @__PURE__ */ React.createElement(Group, { mt: "sm", spacing: "xs" }, /* @__PURE__ */ React.createElement(Text, { size: "sm", className: classes.code }, "Community Code: ", code || "\u2014"), code && /* @__PURE__ */ React.createElement(
|
|
1590
|
-
Button,
|
|
1591
|
-
{
|
|
1592
|
-
size: "xs",
|
|
1593
|
-
variant: "white",
|
|
1594
|
-
onClick: handleCopy,
|
|
1595
|
-
styles: {
|
|
1596
|
-
root: {
|
|
1597
|
-
backgroundColor: "rgba(255,255,255,0.9)"
|
|
1598
|
-
}
|
|
1599
|
-
}
|
|
1600
|
-
},
|
|
1601
|
-
"Copy"
|
|
1602
|
-
)))
|
|
1603
|
-
);
|
|
1604
|
-
};
|
|
1605
|
-
|
|
1606
|
-
const Home = (props) => {
|
|
1607
|
-
return /* @__PURE__ */ React.createElement(Container, { size: "lg" }, /* @__PURE__ */ React.createElement(Stack$5, { spacing: "lg" }, /* @__PURE__ */ React.createElement(Grid, { gutter: "md" }, /* @__PURE__ */ React.createElement(Grid.Col, { md: 6 }, /* @__PURE__ */ React.createElement(
|
|
1608
|
-
UserInfo,
|
|
1609
|
-
{
|
|
1610
|
-
variant: "compact",
|
|
1611
|
-
name: props.name,
|
|
1612
|
-
impactStatement: props.impactStatement
|
|
1613
|
-
}
|
|
1614
|
-
)), /* @__PURE__ */ React.createElement(Grid.Col, { md: 6 }, /* @__PURE__ */ React.createElement(
|
|
1615
|
-
TenantBanner,
|
|
1481
|
+
return /* @__PURE__ */ React.createElement("div", { className: "mx-auto flex w-full max-w-[1100px] flex-col gap-5" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-stretch gap-5" }, /* @__PURE__ */ React.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React.createElement("div", { className: "text-[28px] font-extrabold text-dark-blue-400" }, props.name), /* @__PURE__ */ React.createElement("div", { className: "mt-1.5 text-[12.5px] text-slate-400" }, props.impactStatement)), /* @__PURE__ */ React.createElement("div", { className: "flex w-[440px] shrink-0 flex-col justify-between gap-3 rounded-2xl bg-gradient-to-br from-dark-blue-600 via-dark-blue-400 to-sky-blue-400 p-5" }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", { className: "text-base font-extrabold text-white" }, props.organization.name), /* @__PURE__ */ React.createElement("div", { className: "mt-1.5 text-[11.5px] leading-relaxed text-white/70" }, props.organization.description)), accessCode && /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React.createElement("span", { className: "text-[11px] text-white/70" }, "Community code: ", accessCode), /* @__PURE__ */ React.createElement(
|
|
1482
|
+
"button",
|
|
1616
1483
|
{
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
))), /* @__PURE__ */ React.createElement(Grid, { gutter: "md" }, /* @__PURE__ */ React.createElement(Grid.Col, null, /* @__PURE__ */ React.createElement(
|
|
1484
|
+
onClick: onCopyAccessCode,
|
|
1485
|
+
className: "rounded-md bg-white/90 px-2.5 py-1 text-[10.5px] font-bold text-dark-blue-400 hover:bg-white"
|
|
1486
|
+
},
|
|
1487
|
+
"Copy"
|
|
1488
|
+
)))), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement(
|
|
1623
1489
|
CardGradient,
|
|
1624
1490
|
{
|
|
1625
1491
|
title: "Dashboard",
|
|
1626
1492
|
description: "Track your students\u2019 pathway progress",
|
|
1493
|
+
accent: "mint",
|
|
1494
|
+
icon: /* @__PURE__ */ React.createElement(IconGauge, { size: 18, stroke: 1.75 }),
|
|
1627
1495
|
onClick: props.onDashboardClick
|
|
1628
1496
|
}
|
|
1629
|
-
)
|
|
1497
|
+
), /* @__PURE__ */ React.createElement(
|
|
1630
1498
|
CardGradient,
|
|
1631
1499
|
{
|
|
1632
1500
|
title: "Classes",
|
|
1633
1501
|
description: "Create classes, cohorts, or custom subgroups",
|
|
1502
|
+
accent: "gold",
|
|
1503
|
+
icon: /* @__PURE__ */ React.createElement(IconCategory2, { size: 18, stroke: 1.75 }),
|
|
1634
1504
|
onClick: props.onClassesClick
|
|
1635
1505
|
}
|
|
1636
|
-
)
|
|
1506
|
+
), /* @__PURE__ */ React.createElement(
|
|
1637
1507
|
CardGradient,
|
|
1638
1508
|
{
|
|
1639
1509
|
title: "Pathways",
|
|
1640
1510
|
description: "Explore all your unique pathway requirements in one clear space",
|
|
1511
|
+
accent: "cyan",
|
|
1512
|
+
icon: /* @__PURE__ */ React.createElement(IconRoute, { size: 18, stroke: 1.75 }),
|
|
1641
1513
|
onClick: props.onPathwaysClick
|
|
1642
1514
|
}
|
|
1643
|
-
)
|
|
1515
|
+
), /* @__PURE__ */ React.createElement(
|
|
1644
1516
|
CardGradient,
|
|
1645
1517
|
{
|
|
1646
1518
|
title: "Badges",
|
|
1647
1519
|
description: "Key milestones that reflect skill development, micro-credentials, or academic progress",
|
|
1520
|
+
accent: "mint",
|
|
1521
|
+
icon: /* @__PURE__ */ React.createElement(IconAlbum, { size: 18, stroke: 1.75 }),
|
|
1648
1522
|
onClick: props.onBadgesClick
|
|
1649
1523
|
}
|
|
1650
|
-
)
|
|
1651
|
-
CardGradient,
|
|
1652
|
-
{
|
|
1653
|
-
title: "Lessons",
|
|
1654
|
-
description: "Bite-sized activities and learning experiences accelerating students achievement",
|
|
1655
|
-
onClick: props.onLessonsClick
|
|
1656
|
-
}
|
|
1657
|
-
)), /* @__PURE__ */ React.createElement(Grid.Col, null, /* @__PURE__ */ React.createElement(
|
|
1524
|
+
), /* @__PURE__ */ React.createElement(
|
|
1658
1525
|
CardGradient,
|
|
1659
1526
|
{
|
|
1660
1527
|
title: "File Locker",
|
|
1661
1528
|
description: "A secure space to view student-submitted work and provide feedback",
|
|
1529
|
+
accent: "cyan",
|
|
1530
|
+
icon: /* @__PURE__ */ React.createElement(IconClipboard, { size: 18, stroke: 1.75 }),
|
|
1662
1531
|
onClick: props.onFileLockerClick
|
|
1663
1532
|
}
|
|
1664
|
-
)))
|
|
1533
|
+
)));
|
|
1665
1534
|
};
|
|
1666
1535
|
|
|
1667
1536
|
function Table$7(props) {
|
|
@@ -1696,7 +1565,7 @@ function Table$7(props) {
|
|
|
1696
1565
|
));
|
|
1697
1566
|
}
|
|
1698
1567
|
|
|
1699
|
-
const useStyles$
|
|
1568
|
+
const useStyles$d = createStyles((theme) => ({
|
|
1700
1569
|
button: {
|
|
1701
1570
|
borderTopRightRadius: 0,
|
|
1702
1571
|
borderBottomRightRadius: 0,
|
|
@@ -1711,7 +1580,7 @@ const useStyles$f = createStyles((theme) => ({
|
|
|
1711
1580
|
}
|
|
1712
1581
|
}));
|
|
1713
1582
|
const SplitButton$3 = (props) => {
|
|
1714
|
-
const { classes, theme } = useStyles$
|
|
1583
|
+
const { classes, theme } = useStyles$d();
|
|
1715
1584
|
theme.colors[theme.primaryColor][theme.colorScheme === "dark" ? 5 : 6];
|
|
1716
1585
|
return /* @__PURE__ */ React.createElement(Stack$5, { spacing: "sm" }, /* @__PURE__ */ React.createElement(
|
|
1717
1586
|
Button,
|
|
@@ -1748,28 +1617,28 @@ function Stack$3(props) {
|
|
|
1748
1617
|
return /* @__PURE__ */ React.createElement(ScrollArea.Autosize, { maxHeight: 600 }, /* @__PURE__ */ React.createElement(UnstyledButton, { component: Link, to: props.href }, /* @__PURE__ */ React.createElement(Stack$5, { spacing: 24, sx: { padding: 20, minWidth: 700 } }, rows)));
|
|
1749
1618
|
}
|
|
1750
1619
|
|
|
1751
|
-
var __defProp$
|
|
1752
|
-
var __defProps$
|
|
1753
|
-
var __getOwnPropDescs$
|
|
1754
|
-
var __getOwnPropSymbols$
|
|
1755
|
-
var __hasOwnProp$
|
|
1756
|
-
var __propIsEnum$
|
|
1757
|
-
var __defNormalProp$
|
|
1758
|
-
var __spreadValues$
|
|
1620
|
+
var __defProp$a = Object.defineProperty;
|
|
1621
|
+
var __defProps$7 = Object.defineProperties;
|
|
1622
|
+
var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
|
|
1623
|
+
var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
|
|
1624
|
+
var __hasOwnProp$a = Object.prototype.hasOwnProperty;
|
|
1625
|
+
var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
|
|
1626
|
+
var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1627
|
+
var __spreadValues$a = (a, b) => {
|
|
1759
1628
|
for (var prop in b || (b = {}))
|
|
1760
|
-
if (__hasOwnProp$
|
|
1761
|
-
__defNormalProp$
|
|
1762
|
-
if (__getOwnPropSymbols$
|
|
1763
|
-
for (var prop of __getOwnPropSymbols$
|
|
1764
|
-
if (__propIsEnum$
|
|
1765
|
-
__defNormalProp$
|
|
1629
|
+
if (__hasOwnProp$a.call(b, prop))
|
|
1630
|
+
__defNormalProp$a(a, prop, b[prop]);
|
|
1631
|
+
if (__getOwnPropSymbols$a)
|
|
1632
|
+
for (var prop of __getOwnPropSymbols$a(b)) {
|
|
1633
|
+
if (__propIsEnum$a.call(b, prop))
|
|
1634
|
+
__defNormalProp$a(a, prop, b[prop]);
|
|
1766
1635
|
}
|
|
1767
1636
|
return a;
|
|
1768
1637
|
};
|
|
1769
|
-
var __spreadProps$
|
|
1638
|
+
var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
|
|
1770
1639
|
function Table$6(props) {
|
|
1771
1640
|
const preparedItems = React.useMemo(() => {
|
|
1772
|
-
return props.items.map((item) => __spreadProps$
|
|
1641
|
+
return props.items.map((item) => __spreadProps$7(__spreadValues$a({}, item), {
|
|
1773
1642
|
status: item.isComplete ? 2 : item.isStarted ? 1 : 0
|
|
1774
1643
|
}));
|
|
1775
1644
|
}, [props.items]);
|
|
@@ -1889,7 +1758,7 @@ function Stack$2(props) {
|
|
|
1889
1758
|
}
|
|
1890
1759
|
const truncateWithEllipses = (text, max) => text.substr(0, max - 1) + (text.length > max ? "…" : "");
|
|
1891
1760
|
|
|
1892
|
-
const useStyles$
|
|
1761
|
+
const useStyles$c = createStyles((theme) => ({
|
|
1893
1762
|
title: {
|
|
1894
1763
|
fontSize: 34,
|
|
1895
1764
|
fontWeight: 900,
|
|
@@ -1902,7 +1771,7 @@ const useStyles$e = createStyles((theme) => ({
|
|
|
1902
1771
|
}
|
|
1903
1772
|
}));
|
|
1904
1773
|
const Lesson = (props) => {
|
|
1905
|
-
const { classes } = useStyles$
|
|
1774
|
+
const { classes } = useStyles$c();
|
|
1906
1775
|
const [tab, setTab] = useState("question");
|
|
1907
1776
|
const numberOfStudents = props.students.length;
|
|
1908
1777
|
const numberOfLessons = numberOfStudents > 0 ? props.students.filter((u) => u.isComplete).length : 0;
|
|
@@ -2015,68 +1884,38 @@ const Lesson = (props) => {
|
|
|
2015
1884
|
};
|
|
2016
1885
|
|
|
2017
1886
|
function Table$5(props) {
|
|
1887
|
+
if (props.loading) {
|
|
1888
|
+
return /* @__PURE__ */ React.createElement("div", { className: "text-sm text-slate-400" }, "Loading\u2026");
|
|
1889
|
+
}
|
|
2018
1890
|
if (props.items.length === 0) {
|
|
2019
|
-
return /* @__PURE__ */ React.createElement(
|
|
2020
|
-
PlaceholderBanner,
|
|
2021
|
-
{
|
|
2022
|
-
title: "No lessons to display",
|
|
2023
|
-
description: "We don't have any lessons to show you just yet.",
|
|
2024
|
-
loading: props.loading,
|
|
2025
|
-
icon: "lessons"
|
|
2026
|
-
}
|
|
2027
|
-
);
|
|
1891
|
+
return /* @__PURE__ */ React.createElement("div", { className: "rounded-xl border border-slate-200 bg-white p-8 text-center text-sm text-slate-400 shadow-sm" }, "No lessons to display.");
|
|
2028
1892
|
}
|
|
2029
|
-
|
|
2030
|
-
|
|
1893
|
+
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement("div", { className: "flex gap-4 px-4 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, /* @__PURE__ */ React.createElement("div", { className: "flex-1" }, "Lesson"), /* @__PURE__ */ React.createElement("div", { className: "w-40 shrink-0" }, "Pathway"), /* @__PURE__ */ React.createElement("div", { className: "w-4 shrink-0" })), props.items.map((row) => /* @__PURE__ */ React.createElement(
|
|
1894
|
+
Link,
|
|
2031
1895
|
{
|
|
2032
|
-
|
|
1896
|
+
key: row.lessonId,
|
|
2033
1897
|
to: row.href,
|
|
2034
|
-
|
|
2035
|
-
display: "block",
|
|
2036
|
-
width: "100%",
|
|
2037
|
-
padding: theme.spacing.md,
|
|
2038
|
-
color: theme.colorScheme === "dark" ? theme.colors.dark[0] : theme.black,
|
|
2039
|
-
"&:hover": {
|
|
2040
|
-
backgroundColor: theme.colorScheme === "dark" ? theme.colors.dark[8] : theme.colors.gray[1]
|
|
2041
|
-
}
|
|
2042
|
-
})
|
|
1898
|
+
className: "flex items-center gap-4 rounded-xl border border-slate-200 bg-white p-4 no-underline shadow-sm hover:bg-slate-50"
|
|
2043
1899
|
},
|
|
2044
|
-
/* @__PURE__ */ React.createElement(
|
|
2045
|
-
|
|
2046
|
-
|
|
1900
|
+
/* @__PURE__ */ React.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React.createElement("div", { className: "text-sm font-bold text-dark-blue-400" }, row.name), row.description && /* @__PURE__ */ React.createElement("div", { className: "mt-1 text-xs leading-relaxed text-slate-500" }, row.description)),
|
|
1901
|
+
/* @__PURE__ */ React.createElement("div", { className: "w-40 shrink-0 text-xs text-slate-500" }, row.pathway || "\u2014"),
|
|
1902
|
+
/* @__PURE__ */ React.createElement(IconChevronRight, { size: 16, stroke: 2, className: "w-4 shrink-0 text-slate-300" })
|
|
1903
|
+
)));
|
|
2047
1904
|
}
|
|
2048
1905
|
|
|
2049
|
-
const useStyles$d = createStyles((theme) => ({
|
|
2050
|
-
title: {
|
|
2051
|
-
fontSize: 34,
|
|
2052
|
-
fontWeight: 900,
|
|
2053
|
-
[theme.fn.smallerThan("sm")]: {
|
|
2054
|
-
fontSize: 24
|
|
2055
|
-
}
|
|
2056
|
-
},
|
|
2057
|
-
description: {
|
|
2058
|
-
maxWidth: 600
|
|
2059
|
-
}
|
|
2060
|
-
}));
|
|
2061
1906
|
const Lessons = (props) => {
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
Autocomplete,
|
|
1907
|
+
return /* @__PURE__ */ React.createElement("div", { className: "mx-auto flex max-w-4xl flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React.createElement("h1", { className: "text-2xl font-extrabold tracking-tight text-dark-blue-400" }, "Lessons"), /* @__PURE__ */ React.createElement("p", { className: "text-sm text-slate-500" }, "Bite-sized activities and learning experiences accelerating students achievement")), /* @__PURE__ */ React.createElement("div", { className: "relative" }, /* @__PURE__ */ React.createElement(IconSearch, { size: 16, stroke: 2, className: "pointer-events-none absolute left-3.5 top-1/2 -translate-y-1/2 text-slate-400" }), /* @__PURE__ */ React.createElement(
|
|
1908
|
+
"input",
|
|
2065
1909
|
{
|
|
1910
|
+
type: "text",
|
|
2066
1911
|
placeholder: "Search for a lesson that fits your needs",
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
}
|
|
2070
|
-
), /* @__PURE__ */ React.createElement("div", { style: { position: "relative" } }, /* @__PURE__ */ React.createElement(LoadingOverlay, { visible: props.loading, overlayBlur: 2 }), /* @__PURE__ */ React.createElement(
|
|
2071
|
-
Table$5,
|
|
2072
|
-
{
|
|
2073
|
-
loading: props.loading,
|
|
2074
|
-
items: props.lessons
|
|
1912
|
+
onChange: (e) => props.onAutocompleteChange(e.target.value),
|
|
1913
|
+
className: "w-full rounded-xl border border-slate-200 bg-white py-2.5 pl-10 pr-4 text-sm text-dark-blue-400 placeholder:text-slate-400 focus:border-sky-blue-400 focus:outline-none"
|
|
2075
1914
|
}
|
|
2076
|
-
))));
|
|
1915
|
+
)), /* @__PURE__ */ React.createElement(Table$5, { loading: props.loading, items: props.lessons }));
|
|
2077
1916
|
};
|
|
2078
1917
|
|
|
2079
|
-
const useStyles$
|
|
1918
|
+
const useStyles$b = createStyles((theme) => ({
|
|
2080
1919
|
title: {
|
|
2081
1920
|
fontSize: 22,
|
|
2082
1921
|
fontWeight: 900,
|
|
@@ -2095,7 +1934,7 @@ const useStyles$c = createStyles((theme) => ({
|
|
|
2095
1934
|
}
|
|
2096
1935
|
}));
|
|
2097
1936
|
function AccessCode(props) {
|
|
2098
|
-
const { classes } = useStyles$
|
|
1937
|
+
const { classes } = useStyles$b();
|
|
2099
1938
|
return /* @__PURE__ */ React.createElement(Container, { mx: "0", px: "0", size: 460, my: 30 }, /* @__PURE__ */ React.createElement(Title, { className: classes.title }, "Access code"), /* @__PURE__ */ React.createElement(Text, { color: "dimmed", size: "sm" }, "Grant access to join your organization"), /* @__PURE__ */ React.createElement(Paper, { withBorder: true, shadow: "md", p: 30, radius: "md", mt: "xl" }, /* @__PURE__ */ React.createElement(TextInput, { value: props.value, readOnly: true }), /* @__PURE__ */ React.createElement(Group, { position: "apart", mt: "lg", className: classes.controls }, /* @__PURE__ */ React.createElement(
|
|
2100
1939
|
Anchor,
|
|
2101
1940
|
{
|
|
@@ -2123,7 +1962,7 @@ const monthNames = [
|
|
|
2123
1962
|
"November",
|
|
2124
1963
|
"December"
|
|
2125
1964
|
];
|
|
2126
|
-
const useStyles$
|
|
1965
|
+
const useStyles$a = createStyles((theme) => ({
|
|
2127
1966
|
title: {
|
|
2128
1967
|
fontSize: 34,
|
|
2129
1968
|
fontWeight: 900,
|
|
@@ -2153,7 +1992,7 @@ const useStyles$b = createStyles((theme) => ({
|
|
|
2153
1992
|
}
|
|
2154
1993
|
}));
|
|
2155
1994
|
const Organization = (props) => {
|
|
2156
|
-
const { classes } = useStyles$
|
|
1995
|
+
const { classes } = useStyles$a();
|
|
2157
1996
|
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Container, { size: "lg", py: "xl" }, /* @__PURE__ */ React.createElement(Stack$5, { spacing: "md" }, /* @__PURE__ */ React.createElement(Grid, null, /* @__PURE__ */ React.createElement(Grid.Col, { sm: "auto" }, /* @__PURE__ */ React.createElement(UnstyledButton, { onClick: props.onBackClick }, /* @__PURE__ */ React.createElement(
|
|
2158
1997
|
Badge$1,
|
|
2159
1998
|
{
|
|
@@ -2179,7 +2018,7 @@ const Organization = (props) => {
|
|
|
2179
2018
|
] }))))));
|
|
2180
2019
|
};
|
|
2181
2020
|
|
|
2182
|
-
const useStyles$
|
|
2021
|
+
const useStyles$9 = createStyles((theme) => ({
|
|
2183
2022
|
button: {
|
|
2184
2023
|
borderTopRightRadius: 0,
|
|
2185
2024
|
borderBottomRightRadius: 0,
|
|
@@ -2194,7 +2033,7 @@ const useStyles$a = createStyles((theme) => ({
|
|
|
2194
2033
|
}
|
|
2195
2034
|
}));
|
|
2196
2035
|
const SplitButton$2 = (props) => {
|
|
2197
|
-
const { classes, theme } = useStyles$
|
|
2036
|
+
const { classes, theme } = useStyles$9();
|
|
2198
2037
|
const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === "dark" ? 5 : 6];
|
|
2199
2038
|
const hasMenu = !!props.withOrganizationLink;
|
|
2200
2039
|
return /* @__PURE__ */ React.createElement(Group, { noWrap: true, spacing: 0 }, /* @__PURE__ */ React.createElement(
|
|
@@ -2256,26 +2095,26 @@ function Table$4(props) {
|
|
|
2256
2095
|
return /* @__PURE__ */ React.createElement(ScrollArea, null, /* @__PURE__ */ React.createElement(Table$l, { verticalSpacing: 20, sx: { minWidth: 700 }, highlightOnHover: true, striped: true }, /* @__PURE__ */ React.createElement("thead", null, /* @__PURE__ */ React.createElement("tr", null, /* @__PURE__ */ React.createElement("th", null, "Name"), /* @__PURE__ */ React.createElement("th", null, "Role"), /* @__PURE__ */ React.createElement("th", null, "Account Created?"), /* @__PURE__ */ React.createElement("th", null, "# of Classes"), /* @__PURE__ */ React.createElement("th", null))), /* @__PURE__ */ React.createElement("tbody", null, rows)));
|
|
2257
2096
|
}
|
|
2258
2097
|
|
|
2259
|
-
var __defProp$
|
|
2260
|
-
var __defProps$
|
|
2261
|
-
var __getOwnPropDescs$
|
|
2262
|
-
var __getOwnPropSymbols$
|
|
2263
|
-
var __hasOwnProp$
|
|
2264
|
-
var __propIsEnum$
|
|
2265
|
-
var __defNormalProp$
|
|
2266
|
-
var __spreadValues$
|
|
2098
|
+
var __defProp$9 = Object.defineProperty;
|
|
2099
|
+
var __defProps$6 = Object.defineProperties;
|
|
2100
|
+
var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
|
|
2101
|
+
var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;
|
|
2102
|
+
var __hasOwnProp$9 = Object.prototype.hasOwnProperty;
|
|
2103
|
+
var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;
|
|
2104
|
+
var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2105
|
+
var __spreadValues$9 = (a, b) => {
|
|
2267
2106
|
for (var prop in b || (b = {}))
|
|
2268
|
-
if (__hasOwnProp$
|
|
2269
|
-
__defNormalProp$
|
|
2270
|
-
if (__getOwnPropSymbols$
|
|
2271
|
-
for (var prop of __getOwnPropSymbols$
|
|
2272
|
-
if (__propIsEnum$
|
|
2273
|
-
__defNormalProp$
|
|
2107
|
+
if (__hasOwnProp$9.call(b, prop))
|
|
2108
|
+
__defNormalProp$9(a, prop, b[prop]);
|
|
2109
|
+
if (__getOwnPropSymbols$9)
|
|
2110
|
+
for (var prop of __getOwnPropSymbols$9(b)) {
|
|
2111
|
+
if (__propIsEnum$9.call(b, prop))
|
|
2112
|
+
__defNormalProp$9(a, prop, b[prop]);
|
|
2274
2113
|
}
|
|
2275
2114
|
return a;
|
|
2276
2115
|
};
|
|
2277
|
-
var __spreadProps$
|
|
2278
|
-
const useStyles$
|
|
2116
|
+
var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
|
|
2117
|
+
const useStyles$8 = createStyles((theme) => ({
|
|
2279
2118
|
title: {
|
|
2280
2119
|
fontSize: 34,
|
|
2281
2120
|
fontWeight: 900,
|
|
@@ -2305,7 +2144,7 @@ const useStyles$9 = createStyles((theme) => ({
|
|
|
2305
2144
|
}
|
|
2306
2145
|
}));
|
|
2307
2146
|
const People = (props) => {
|
|
2308
|
-
const { classes } = useStyles$
|
|
2147
|
+
const { classes } = useStyles$8();
|
|
2309
2148
|
const form = useForm({
|
|
2310
2149
|
initialValues: {
|
|
2311
2150
|
userId: "",
|
|
@@ -2336,27 +2175,27 @@ const People = (props) => {
|
|
|
2336
2175
|
padding: "xl",
|
|
2337
2176
|
size: "xl"
|
|
2338
2177
|
},
|
|
2339
|
-
/* @__PURE__ */ React.createElement(Stack$5, { spacing: "md" }, /* @__PURE__ */ React.createElement(DropzoneButton, __spreadProps$
|
|
2178
|
+
/* @__PURE__ */ React.createElement(Stack$5, { spacing: "md" }, /* @__PURE__ */ React.createElement(DropzoneButton, __spreadProps$6(__spreadValues$9({}, props), { close: () => setOpened(false) })), /* @__PURE__ */ React.createElement(Divider, { label: "or", labelPosition: "center", my: "md", variant: "dashed" }), /* @__PURE__ */ React.createElement("form", { onSubmit: form.onSubmit(() => {
|
|
2340
2179
|
const values = form.values;
|
|
2341
2180
|
form.reset();
|
|
2342
2181
|
setOpened(false);
|
|
2343
2182
|
props.onCreateUsers && props.onCreateUsers([values]);
|
|
2344
2183
|
}) }, /* @__PURE__ */ React.createElement(Stack$5, null, /* @__PURE__ */ React.createElement(
|
|
2345
2184
|
TextInput,
|
|
2346
|
-
__spreadValues$
|
|
2185
|
+
__spreadValues$9({
|
|
2347
2186
|
withAsterisk: true,
|
|
2348
2187
|
label: "Email",
|
|
2349
2188
|
placeholder: "Email"
|
|
2350
2189
|
}, form.getInputProps("email"))
|
|
2351
2190
|
), /* @__PURE__ */ React.createElement(Group, { grow: true }, /* @__PURE__ */ React.createElement(
|
|
2352
2191
|
TextInput,
|
|
2353
|
-
__spreadValues$
|
|
2192
|
+
__spreadValues$9({
|
|
2354
2193
|
label: "Given name",
|
|
2355
2194
|
placeholder: "Given name"
|
|
2356
2195
|
}, form.getInputProps("givenName"))
|
|
2357
2196
|
), /* @__PURE__ */ React.createElement(
|
|
2358
2197
|
TextInput,
|
|
2359
|
-
__spreadValues$
|
|
2198
|
+
__spreadValues$9({
|
|
2360
2199
|
label: "Family name",
|
|
2361
2200
|
placeholder: "Family name"
|
|
2362
2201
|
}, form.getInputProps("familyName"))
|
|
@@ -2409,7 +2248,7 @@ const People = (props) => {
|
|
|
2409
2248
|
))))));
|
|
2410
2249
|
};
|
|
2411
2250
|
const DropzoneButton = (props) => {
|
|
2412
|
-
const { classes, theme } = useStyles$
|
|
2251
|
+
const { classes, theme } = useStyles$8();
|
|
2413
2252
|
const openRef = React.useRef(null);
|
|
2414
2253
|
const [loading, setLoading] = React.useState(false);
|
|
2415
2254
|
const onDrop = React.useCallback((acceptedFiles) => {
|
|
@@ -2455,7 +2294,7 @@ const DropzoneButton = (props) => {
|
|
|
2455
2294
|
} }, "Select file"));
|
|
2456
2295
|
};
|
|
2457
2296
|
|
|
2458
|
-
const useStyles$
|
|
2297
|
+
const useStyles$7 = createStyles((theme) => ({
|
|
2459
2298
|
form: {
|
|
2460
2299
|
backgroundColor: theme.white,
|
|
2461
2300
|
padding: theme.spacing.xl,
|
|
@@ -2518,7 +2357,7 @@ const useStyles$8 = createStyles((theme) => ({
|
|
|
2518
2357
|
}
|
|
2519
2358
|
}));
|
|
2520
2359
|
const StartAnonymousLesson = (props) => {
|
|
2521
|
-
const { classes } = useStyles$
|
|
2360
|
+
const { classes } = useStyles$7();
|
|
2522
2361
|
const [name, setName] = React.useState("");
|
|
2523
2362
|
return /* @__PURE__ */ React.createElement("div", { className: classes.wrapper }, /* @__PURE__ */ React.createElement(Container, null, /* @__PURE__ */ React.createElement(SimpleGrid, { maw: 960, cols: 2, spacing: 15, breakpoints: [{ maxWidth: "sm", cols: 1 }] }, /* @__PURE__ */ React.createElement("div", { className: classes.content }, /* @__PURE__ */ React.createElement(Badge$1, { color: "violet" }, "Community"), /* @__PURE__ */ React.createElement(Title, { className: classes.title }, props.title), /* @__PURE__ */ React.createElement(Text, { color: "dimmed", mt: "md" }, props.description), /* @__PURE__ */ React.createElement(Text, { color: "dimmed", mt: "md" }, "You are now part of ", `${props.educatorName}'s`, " Class")), /* @__PURE__ */ React.createElement("div", { className: classes.form }, /* @__PURE__ */ React.createElement(
|
|
2524
2363
|
TextInput,
|
|
@@ -2542,24 +2381,24 @@ const StartAnonymousLesson = (props) => {
|
|
|
2542
2381
|
))))));
|
|
2543
2382
|
};
|
|
2544
2383
|
|
|
2545
|
-
var __defProp$
|
|
2546
|
-
var __getOwnPropSymbols$
|
|
2547
|
-
var __hasOwnProp$
|
|
2548
|
-
var __propIsEnum$
|
|
2549
|
-
var __defNormalProp$
|
|
2550
|
-
var __spreadValues$
|
|
2384
|
+
var __defProp$8 = Object.defineProperty;
|
|
2385
|
+
var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
|
|
2386
|
+
var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
|
|
2387
|
+
var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
|
|
2388
|
+
var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2389
|
+
var __spreadValues$8 = (a, b) => {
|
|
2551
2390
|
for (var prop in b || (b = {}))
|
|
2552
|
-
if (__hasOwnProp$
|
|
2553
|
-
__defNormalProp$
|
|
2554
|
-
if (__getOwnPropSymbols$
|
|
2555
|
-
for (var prop of __getOwnPropSymbols$
|
|
2556
|
-
if (__propIsEnum$
|
|
2557
|
-
__defNormalProp$
|
|
2391
|
+
if (__hasOwnProp$8.call(b, prop))
|
|
2392
|
+
__defNormalProp$8(a, prop, b[prop]);
|
|
2393
|
+
if (__getOwnPropSymbols$8)
|
|
2394
|
+
for (var prop of __getOwnPropSymbols$8(b)) {
|
|
2395
|
+
if (__propIsEnum$8.call(b, prop))
|
|
2396
|
+
__defNormalProp$8(a, prop, b[prop]);
|
|
2558
2397
|
}
|
|
2559
2398
|
return a;
|
|
2560
2399
|
};
|
|
2561
2400
|
const BadgeGrid = (props) => {
|
|
2562
|
-
const badges = props.badges.map((b) => /* @__PURE__ */ React.createElement(TaskCard, __spreadValues$
|
|
2401
|
+
const badges = props.badges.map((b) => /* @__PURE__ */ React.createElement(TaskCard, __spreadValues$8({ key: b.title }, b)));
|
|
2563
2402
|
return /* @__PURE__ */ React.createElement(SimpleGrid, { cols: 4, breakpoints: [{ maxWidth: "sm", cols: 1 }, { maxWidth: "md", cols: 3 }] }, badges);
|
|
2564
2403
|
};
|
|
2565
2404
|
function TaskCard(props) {
|
|
@@ -2575,116 +2414,236 @@ function TaskCard(props) {
|
|
|
2575
2414
|
));
|
|
2576
2415
|
}
|
|
2577
2416
|
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
},
|
|
2585
|
-
title: {
|
|
2586
|
-
color: theme.colorScheme === "dark" ? theme.white : theme.black,
|
|
2587
|
-
fontFamily: `Greycliff CF, ${theme.fontFamily}`,
|
|
2588
|
-
fontSize: theme.fontSizes.xl,
|
|
2589
|
-
lineHeight: 1.5,
|
|
2590
|
-
fontWeight: 900,
|
|
2591
|
-
[theme.fn.smallerThan("xs")]: {
|
|
2592
|
-
fontSize: theme.fontSizes.md
|
|
2593
|
-
}
|
|
2594
|
-
}
|
|
2595
|
-
}));
|
|
2596
|
-
const TrialHome = (props) => {
|
|
2597
|
-
const { classes } = useStyles$7();
|
|
2598
|
-
return /* @__PURE__ */ React.createElement(Container, { size: "lg" }, /* @__PURE__ */ React.createElement(Badge$1, null, props.daysRemaining, " day", props.daysRemaining !== 1 ? "s" : "", " left"), /* @__PURE__ */ React.createElement(
|
|
2599
|
-
Button,
|
|
2600
|
-
{
|
|
2601
|
-
className: classes.action,
|
|
2602
|
-
variant: "white",
|
|
2603
|
-
component: "a",
|
|
2604
|
-
size: "xs",
|
|
2605
|
-
href: props.upgradeHref,
|
|
2606
|
-
target: "_blank"
|
|
2607
|
-
},
|
|
2608
|
-
"UPGRADE NOW"
|
|
2609
|
-
), /* @__PURE__ */ React.createElement(Stack$5, { spacing: "sm" }, /* @__PURE__ */ React.createElement(Stack$5, { spacing: 0 }, /* @__PURE__ */ React.createElement(
|
|
2610
|
-
UserInfo,
|
|
2611
|
-
{
|
|
2612
|
-
variant: "compact",
|
|
2613
|
-
name: props.name,
|
|
2614
|
-
impactStatement: ""
|
|
2615
|
-
}
|
|
2616
|
-
), /* @__PURE__ */ React.createElement(
|
|
2617
|
-
TenantBanner,
|
|
2618
|
-
{
|
|
2619
|
-
title: "Trial Account",
|
|
2620
|
-
description: `Welcome to your Local Civics Trial Account${props.firstName ? ", " + props.firstName : ""}!`,
|
|
2621
|
-
image: "https://cdn.localcivics.io/hub/landing.jpg"
|
|
2622
|
-
}
|
|
2623
|
-
)), /* @__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 })));
|
|
2624
|
-
};
|
|
2625
|
-
|
|
2626
|
-
var __defProp$5 = Object.defineProperty;
|
|
2627
|
-
var __defProps$4 = Object.defineProperties;
|
|
2628
|
-
var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
|
|
2629
|
-
var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
|
|
2630
|
-
var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
|
|
2631
|
-
var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
|
|
2632
|
-
var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2633
|
-
var __spreadValues$5 = (a, b) => {
|
|
2417
|
+
var __defProp$7 = Object.defineProperty;
|
|
2418
|
+
var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
|
|
2419
|
+
var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
|
|
2420
|
+
var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
|
|
2421
|
+
var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2422
|
+
var __spreadValues$7 = (a, b) => {
|
|
2634
2423
|
for (var prop in b || (b = {}))
|
|
2635
|
-
if (__hasOwnProp$
|
|
2636
|
-
__defNormalProp$
|
|
2637
|
-
if (__getOwnPropSymbols$
|
|
2638
|
-
for (var prop of __getOwnPropSymbols$
|
|
2639
|
-
if (__propIsEnum$
|
|
2640
|
-
__defNormalProp$
|
|
2424
|
+
if (__hasOwnProp$7.call(b, prop))
|
|
2425
|
+
__defNormalProp$7(a, prop, b[prop]);
|
|
2426
|
+
if (__getOwnPropSymbols$7)
|
|
2427
|
+
for (var prop of __getOwnPropSymbols$7(b)) {
|
|
2428
|
+
if (__propIsEnum$7.call(b, prop))
|
|
2429
|
+
__defNormalProp$7(a, prop, b[prop]);
|
|
2641
2430
|
}
|
|
2642
2431
|
return a;
|
|
2643
2432
|
};
|
|
2644
|
-
var
|
|
2645
|
-
var __objRest = (source, exclude) => {
|
|
2433
|
+
var __objRest$1 = (source, exclude) => {
|
|
2646
2434
|
var target = {};
|
|
2647
2435
|
for (var prop in source)
|
|
2648
|
-
if (__hasOwnProp$
|
|
2436
|
+
if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
2649
2437
|
target[prop] = source[prop];
|
|
2650
|
-
if (source != null && __getOwnPropSymbols$
|
|
2651
|
-
for (var prop of __getOwnPropSymbols$
|
|
2652
|
-
if (exclude.indexOf(prop) < 0 && __propIsEnum$
|
|
2438
|
+
if (source != null && __getOwnPropSymbols$7)
|
|
2439
|
+
for (var prop of __getOwnPropSymbols$7(source)) {
|
|
2440
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum$7.call(source, prop))
|
|
2653
2441
|
target[prop] = source[prop];
|
|
2654
2442
|
}
|
|
2655
2443
|
return target;
|
|
2656
2444
|
};
|
|
2657
|
-
const useStyles$6 = createStyles((theme
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
border: `1px solid ${checked ? theme.fn.variant({ variant: "outline", color: theme.primaryColor }).border : theme.colorScheme === "dark" ? theme.colors.dark[8] : theme.colors.gray[3]}`,
|
|
2664
|
-
borderRadius: theme.radius.sm,
|
|
2665
|
-
padding: theme.spacing.md,
|
|
2666
|
-
paddingTop: theme.spacing.sm,
|
|
2667
|
-
paddingBottom: theme.spacing.sm,
|
|
2668
|
-
backgroundColor: checked ? theme.fn.variant({ variant: "light", color: theme.primaryColor }).background : theme.colorScheme === "dark" ? theme.colors.dark[8] : theme.white
|
|
2445
|
+
const useStyles$6 = createStyles((theme) => ({
|
|
2446
|
+
card: {
|
|
2447
|
+
height: 240,
|
|
2448
|
+
backgroundSize: "cover",
|
|
2449
|
+
backgroundPosition: "center",
|
|
2450
|
+
whiteSpace: "pre-line"
|
|
2669
2451
|
},
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2452
|
+
content: {
|
|
2453
|
+
position: "absolute",
|
|
2454
|
+
padding: theme.spacing.xl,
|
|
2455
|
+
zIndex: 1,
|
|
2456
|
+
top: 0,
|
|
2457
|
+
bottom: 0,
|
|
2458
|
+
right: 0,
|
|
2459
|
+
left: 0
|
|
2460
|
+
},
|
|
2461
|
+
title: {
|
|
2462
|
+
color: theme.white,
|
|
2463
|
+
marginBottom: theme.spacing.xs / 2
|
|
2464
|
+
},
|
|
2465
|
+
description: {
|
|
2466
|
+
color: theme.white,
|
|
2467
|
+
maxWidth: 220
|
|
2468
|
+
},
|
|
2469
|
+
code: {
|
|
2470
|
+
color: theme.white,
|
|
2471
|
+
maxWidth: 220
|
|
2472
|
+
}
|
|
2473
|
+
}));
|
|
2474
|
+
const TenantBanner = (_a) => {
|
|
2475
|
+
var _b = _a, {
|
|
2476
|
+
title,
|
|
2477
|
+
description,
|
|
2478
|
+
image,
|
|
2479
|
+
style,
|
|
2480
|
+
className,
|
|
2481
|
+
code
|
|
2482
|
+
} = _b, others = __objRest$1(_b, [
|
|
2483
|
+
"title",
|
|
2484
|
+
"description",
|
|
2485
|
+
"image",
|
|
2486
|
+
"style",
|
|
2487
|
+
"className",
|
|
2488
|
+
"code"
|
|
2489
|
+
]);
|
|
2490
|
+
const { classes, cx, theme } = useStyles$6();
|
|
2491
|
+
const handleCopy = async () => {
|
|
2492
|
+
if (!code)
|
|
2493
|
+
return;
|
|
2494
|
+
try {
|
|
2495
|
+
await navigator.clipboard.writeText(code);
|
|
2496
|
+
showNotification({
|
|
2497
|
+
title: "Copied!",
|
|
2498
|
+
message: "Community code copied to clipboard.",
|
|
2499
|
+
autoClose: 3e3
|
|
2500
|
+
});
|
|
2501
|
+
} catch (err) {
|
|
2502
|
+
console.error("Failed to copy code", err);
|
|
2503
|
+
}
|
|
2504
|
+
};
|
|
2505
|
+
return /* @__PURE__ */ React.createElement(
|
|
2506
|
+
Card,
|
|
2507
|
+
__spreadValues$7({
|
|
2508
|
+
radius: "md",
|
|
2509
|
+
style: __spreadValues$7({ backgroundImage: `url(${image})` }, style),
|
|
2510
|
+
className: cx(classes.card, className)
|
|
2511
|
+
}, others),
|
|
2512
|
+
/* @__PURE__ */ React.createElement(
|
|
2513
|
+
Overlay,
|
|
2514
|
+
{
|
|
2515
|
+
gradient: `linear-gradient(105deg, ${theme.black} 20%, #312f2f 50%, ${theme.colors.gray[6]} 100%)`,
|
|
2516
|
+
opacity: 0.55,
|
|
2517
|
+
zIndex: 0
|
|
2518
|
+
}
|
|
2519
|
+
),
|
|
2520
|
+
/* @__PURE__ */ React.createElement("div", { className: classes.content }, /* @__PURE__ */ React.createElement(Text, { size: "lg", weight: 700, className: classes.title }, title), /* @__PURE__ */ React.createElement(Text, { size: "sm", className: classes.description }, description), /* @__PURE__ */ React.createElement(Group, { mt: "sm", spacing: "xs" }, /* @__PURE__ */ React.createElement(Text, { size: "sm", className: classes.code }, "Community Code: ", code || "\u2014"), code && /* @__PURE__ */ React.createElement(
|
|
2521
|
+
Button,
|
|
2522
|
+
{
|
|
2523
|
+
size: "xs",
|
|
2524
|
+
variant: "white",
|
|
2525
|
+
onClick: handleCopy,
|
|
2526
|
+
styles: {
|
|
2527
|
+
root: {
|
|
2528
|
+
backgroundColor: "rgba(255,255,255,0.9)"
|
|
2529
|
+
}
|
|
2530
|
+
}
|
|
2531
|
+
},
|
|
2532
|
+
"Copy"
|
|
2533
|
+
)))
|
|
2534
|
+
);
|
|
2535
|
+
};
|
|
2536
|
+
|
|
2537
|
+
const useStyles$5 = createStyles((theme) => ({
|
|
2538
|
+
action: {
|
|
2539
|
+
backgroundColor: "inherit",
|
|
2540
|
+
":hover": {
|
|
2541
|
+
textDecoration: "underline"
|
|
2542
|
+
}
|
|
2543
|
+
},
|
|
2544
|
+
title: {
|
|
2545
|
+
color: theme.colorScheme === "dark" ? theme.white : theme.black,
|
|
2546
|
+
fontFamily: `Greycliff CF, ${theme.fontFamily}`,
|
|
2547
|
+
fontSize: theme.fontSizes.xl,
|
|
2548
|
+
lineHeight: 1.5,
|
|
2549
|
+
fontWeight: 900,
|
|
2550
|
+
[theme.fn.smallerThan("xs")]: {
|
|
2551
|
+
fontSize: theme.fontSizes.md
|
|
2552
|
+
}
|
|
2553
|
+
}
|
|
2554
|
+
}));
|
|
2555
|
+
const TrialHome = (props) => {
|
|
2556
|
+
const { classes } = useStyles$5();
|
|
2557
|
+
return /* @__PURE__ */ React.createElement(Container, { size: "lg" }, /* @__PURE__ */ React.createElement(Badge$1, null, props.daysRemaining, " day", props.daysRemaining !== 1 ? "s" : "", " left"), /* @__PURE__ */ React.createElement(
|
|
2558
|
+
Button,
|
|
2559
|
+
{
|
|
2560
|
+
className: classes.action,
|
|
2561
|
+
variant: "white",
|
|
2562
|
+
component: "a",
|
|
2563
|
+
size: "xs",
|
|
2564
|
+
href: props.upgradeHref,
|
|
2565
|
+
target: "_blank"
|
|
2566
|
+
},
|
|
2567
|
+
"UPGRADE NOW"
|
|
2568
|
+
), /* @__PURE__ */ React.createElement(Stack$5, { spacing: "sm" }, /* @__PURE__ */ React.createElement(Stack$5, { spacing: 0 }, /* @__PURE__ */ React.createElement(
|
|
2569
|
+
UserInfo,
|
|
2570
|
+
{
|
|
2571
|
+
variant: "compact",
|
|
2572
|
+
name: props.name,
|
|
2573
|
+
impactStatement: ""
|
|
2574
|
+
}
|
|
2575
|
+
), /* @__PURE__ */ React.createElement(
|
|
2576
|
+
TenantBanner,
|
|
2577
|
+
{
|
|
2578
|
+
title: "Trial Account",
|
|
2579
|
+
description: `Welcome to your Local Civics Trial Account${props.firstName ? ", " + props.firstName : ""}!`,
|
|
2580
|
+
image: "https://cdn.localcivics.io/hub/landing.jpg"
|
|
2581
|
+
}
|
|
2582
|
+
)), /* @__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 })));
|
|
2583
|
+
};
|
|
2584
|
+
|
|
2585
|
+
var __defProp$6 = Object.defineProperty;
|
|
2586
|
+
var __defProps$5 = Object.defineProperties;
|
|
2587
|
+
var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
|
|
2588
|
+
var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
|
|
2589
|
+
var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
|
|
2590
|
+
var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
|
|
2591
|
+
var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2592
|
+
var __spreadValues$6 = (a, b) => {
|
|
2593
|
+
for (var prop in b || (b = {}))
|
|
2594
|
+
if (__hasOwnProp$6.call(b, prop))
|
|
2595
|
+
__defNormalProp$6(a, prop, b[prop]);
|
|
2596
|
+
if (__getOwnPropSymbols$6)
|
|
2597
|
+
for (var prop of __getOwnPropSymbols$6(b)) {
|
|
2598
|
+
if (__propIsEnum$6.call(b, prop))
|
|
2599
|
+
__defNormalProp$6(a, prop, b[prop]);
|
|
2600
|
+
}
|
|
2601
|
+
return a;
|
|
2602
|
+
};
|
|
2603
|
+
var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
|
|
2604
|
+
var __objRest = (source, exclude) => {
|
|
2605
|
+
var target = {};
|
|
2606
|
+
for (var prop in source)
|
|
2607
|
+
if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
2608
|
+
target[prop] = source[prop];
|
|
2609
|
+
if (source != null && __getOwnPropSymbols$6)
|
|
2610
|
+
for (var prop of __getOwnPropSymbols$6(source)) {
|
|
2611
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))
|
|
2612
|
+
target[prop] = source[prop];
|
|
2613
|
+
}
|
|
2614
|
+
return target;
|
|
2615
|
+
};
|
|
2616
|
+
const useStyles$4 = createStyles((theme, { checked }) => ({
|
|
2617
|
+
button: {
|
|
2618
|
+
display: "flex",
|
|
2619
|
+
alignItems: "center",
|
|
2620
|
+
width: "100%",
|
|
2621
|
+
transition: "background-color 150ms ease, border-color 150ms ease",
|
|
2622
|
+
border: `1px solid ${checked ? theme.fn.variant({ variant: "outline", color: theme.primaryColor }).border : theme.colorScheme === "dark" ? theme.colors.dark[8] : theme.colors.gray[3]}`,
|
|
2623
|
+
borderRadius: theme.radius.sm,
|
|
2624
|
+
padding: theme.spacing.md,
|
|
2625
|
+
paddingTop: theme.spacing.sm,
|
|
2626
|
+
paddingBottom: theme.spacing.sm,
|
|
2627
|
+
backgroundColor: checked ? theme.fn.variant({ variant: "light", color: theme.primaryColor }).background : theme.colorScheme === "dark" ? theme.colors.dark[8] : theme.white
|
|
2628
|
+
},
|
|
2629
|
+
body: {
|
|
2630
|
+
flex: 1,
|
|
2631
|
+
marginLeft: theme.spacing.md
|
|
2632
|
+
}
|
|
2633
|
+
}));
|
|
2634
|
+
function ImageCheckbox(_a) {
|
|
2635
|
+
var _b = _a, {
|
|
2636
|
+
checked,
|
|
2637
|
+
defaultChecked,
|
|
2638
|
+
onChange,
|
|
2639
|
+
title,
|
|
2640
|
+
description,
|
|
2641
|
+
className,
|
|
2642
|
+
icon: Icon
|
|
2643
|
+
} = _b, others = __objRest(_b, [
|
|
2644
|
+
"checked",
|
|
2645
|
+
"defaultChecked",
|
|
2646
|
+
"onChange",
|
|
2688
2647
|
"title",
|
|
2689
2648
|
"description",
|
|
2690
2649
|
"className",
|
|
@@ -2696,10 +2655,10 @@ function ImageCheckbox(_a) {
|
|
|
2696
2655
|
finalValue: false,
|
|
2697
2656
|
onChange
|
|
2698
2657
|
});
|
|
2699
|
-
const { classes, cx } = useStyles$
|
|
2658
|
+
const { classes, cx } = useStyles$4({ checked: value });
|
|
2700
2659
|
return /* @__PURE__ */ React.createElement(
|
|
2701
2660
|
UnstyledButton,
|
|
2702
|
-
__spreadProps$
|
|
2661
|
+
__spreadProps$5(__spreadValues$6({}, others), {
|
|
2703
2662
|
onClick: () => handleChange(!value),
|
|
2704
2663
|
className: cx(classes.button, className)
|
|
2705
2664
|
}),
|
|
@@ -2720,7 +2679,7 @@ function ImageCheckbox(_a) {
|
|
|
2720
2679
|
function SelectGrid(props) {
|
|
2721
2680
|
const items = props.items.map((item) => /* @__PURE__ */ React.createElement(
|
|
2722
2681
|
ImageCheckbox,
|
|
2723
|
-
__spreadProps$
|
|
2682
|
+
__spreadProps$5(__spreadValues$6({}, item), {
|
|
2724
2683
|
key: item.title,
|
|
2725
2684
|
onChange: (checked) => props.onChange(item.title, checked)
|
|
2726
2685
|
})
|
|
@@ -2738,26 +2697,26 @@ function SelectGrid(props) {
|
|
|
2738
2697
|
);
|
|
2739
2698
|
}
|
|
2740
2699
|
|
|
2741
|
-
var __defProp$
|
|
2742
|
-
var __defProps$
|
|
2743
|
-
var __getOwnPropDescs$
|
|
2744
|
-
var __getOwnPropSymbols$
|
|
2745
|
-
var __hasOwnProp$
|
|
2746
|
-
var __propIsEnum$
|
|
2747
|
-
var __defNormalProp$
|
|
2748
|
-
var __spreadValues$
|
|
2700
|
+
var __defProp$5 = Object.defineProperty;
|
|
2701
|
+
var __defProps$4 = Object.defineProperties;
|
|
2702
|
+
var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
|
|
2703
|
+
var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
|
|
2704
|
+
var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
|
|
2705
|
+
var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
|
|
2706
|
+
var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2707
|
+
var __spreadValues$5 = (a, b) => {
|
|
2749
2708
|
for (var prop in b || (b = {}))
|
|
2750
|
-
if (__hasOwnProp$
|
|
2751
|
-
__defNormalProp$
|
|
2752
|
-
if (__getOwnPropSymbols$
|
|
2753
|
-
for (var prop of __getOwnPropSymbols$
|
|
2754
|
-
if (__propIsEnum$
|
|
2755
|
-
__defNormalProp$
|
|
2709
|
+
if (__hasOwnProp$5.call(b, prop))
|
|
2710
|
+
__defNormalProp$5(a, prop, b[prop]);
|
|
2711
|
+
if (__getOwnPropSymbols$5)
|
|
2712
|
+
for (var prop of __getOwnPropSymbols$5(b)) {
|
|
2713
|
+
if (__propIsEnum$5.call(b, prop))
|
|
2714
|
+
__defNormalProp$5(a, prop, b[prop]);
|
|
2756
2715
|
}
|
|
2757
2716
|
return a;
|
|
2758
2717
|
};
|
|
2759
|
-
var __spreadProps$
|
|
2760
|
-
const useStyles$
|
|
2718
|
+
var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
|
|
2719
|
+
const useStyles$3 = createStyles((theme) => ({
|
|
2761
2720
|
wrapper: {
|
|
2762
2721
|
minHeight: "100%",
|
|
2763
2722
|
boxSizing: "border-box",
|
|
@@ -2820,7 +2779,7 @@ const OPTIONS = [
|
|
|
2820
2779
|
{ description: "project-based learning", title: "Project-Based Learning", icon: IconTools }
|
|
2821
2780
|
];
|
|
2822
2781
|
const TrialRegistration = (props) => {
|
|
2823
|
-
const { classes } = useStyles$
|
|
2782
|
+
const { classes } = useStyles$3();
|
|
2824
2783
|
const [firstName, setFirstName] = React.useState("");
|
|
2825
2784
|
const [lastName, setLastName] = React.useState("");
|
|
2826
2785
|
const [organization, setOrganization] = React.useState({ organizationId: "", displayName: "" });
|
|
@@ -2866,7 +2825,7 @@ const TrialRegistration = (props) => {
|
|
|
2866
2825
|
label: "School/Organization Name",
|
|
2867
2826
|
placeholder: "What's the name of your school?",
|
|
2868
2827
|
data: props.organizations.map((o) => {
|
|
2869
|
-
return __spreadProps$
|
|
2828
|
+
return __spreadProps$4(__spreadValues$5({}, o), { value: o.displayName });
|
|
2870
2829
|
}),
|
|
2871
2830
|
onItemSubmit: (item) => setOrganization({ organizationId: item.organizationId, displayName: item.displayName }),
|
|
2872
2831
|
onChange: (next) => {
|
|
@@ -2878,7 +2837,7 @@ const TrialRegistration = (props) => {
|
|
|
2878
2837
|
SelectGrid,
|
|
2879
2838
|
{
|
|
2880
2839
|
items: OPTIONS,
|
|
2881
|
-
onChange: (e, checked) => setInterests(__spreadProps$
|
|
2840
|
+
onChange: (e, checked) => setInterests(__spreadProps$4(__spreadValues$5({}, interests), { [e]: checked }))
|
|
2882
2841
|
}
|
|
2883
2842
|
), /* @__PURE__ */ React.createElement(Group, { position: "right", mt: "md" }, /* @__PURE__ */ React.createElement(
|
|
2884
2843
|
Button,
|
|
@@ -2916,26 +2875,26 @@ const AdminProvider = (props) => {
|
|
|
2916
2875
|
);
|
|
2917
2876
|
};
|
|
2918
2877
|
|
|
2919
|
-
var __defProp$
|
|
2920
|
-
var __defProps$
|
|
2921
|
-
var __getOwnPropDescs$
|
|
2922
|
-
var __getOwnPropSymbols$
|
|
2923
|
-
var __hasOwnProp$
|
|
2924
|
-
var __propIsEnum$
|
|
2925
|
-
var __defNormalProp$
|
|
2926
|
-
var __spreadValues$
|
|
2878
|
+
var __defProp$4 = Object.defineProperty;
|
|
2879
|
+
var __defProps$3 = Object.defineProperties;
|
|
2880
|
+
var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
|
|
2881
|
+
var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
|
|
2882
|
+
var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
|
|
2883
|
+
var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
|
|
2884
|
+
var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2885
|
+
var __spreadValues$4 = (a, b) => {
|
|
2927
2886
|
for (var prop in b || (b = {}))
|
|
2928
|
-
if (__hasOwnProp$
|
|
2929
|
-
__defNormalProp$
|
|
2930
|
-
if (__getOwnPropSymbols$
|
|
2931
|
-
for (var prop of __getOwnPropSymbols$
|
|
2932
|
-
if (__propIsEnum$
|
|
2933
|
-
__defNormalProp$
|
|
2887
|
+
if (__hasOwnProp$4.call(b, prop))
|
|
2888
|
+
__defNormalProp$4(a, prop, b[prop]);
|
|
2889
|
+
if (__getOwnPropSymbols$4)
|
|
2890
|
+
for (var prop of __getOwnPropSymbols$4(b)) {
|
|
2891
|
+
if (__propIsEnum$4.call(b, prop))
|
|
2892
|
+
__defNormalProp$4(a, prop, b[prop]);
|
|
2934
2893
|
}
|
|
2935
2894
|
return a;
|
|
2936
2895
|
};
|
|
2937
|
-
var __spreadProps$
|
|
2938
|
-
const useStyles$
|
|
2896
|
+
var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
|
|
2897
|
+
const useStyles$2 = createStyles((theme, props) => ({
|
|
2939
2898
|
footer: {
|
|
2940
2899
|
paddingTop: theme.spacing.md,
|
|
2941
2900
|
paddingBottom: theme.spacing.md,
|
|
@@ -3022,7 +2981,7 @@ const useStyles$4 = createStyles((theme, props) => ({
|
|
|
3022
2981
|
}
|
|
3023
2982
|
}));
|
|
3024
2983
|
const App = (props) => {
|
|
3025
|
-
const { classes } = useStyles$
|
|
2984
|
+
const { classes } = useStyles$2(props);
|
|
3026
2985
|
const account = useAccount(props.account, props.accounts, props.onAccountChange);
|
|
3027
2986
|
return /* @__PURE__ */ React.createElement(
|
|
3028
2987
|
AppShell,
|
|
@@ -3030,7 +2989,7 @@ const App = (props) => {
|
|
|
3030
2989
|
padding: "xs",
|
|
3031
2990
|
navbar: props.navbar && /* @__PURE__ */ React.createElement(
|
|
3032
2991
|
Navbar,
|
|
3033
|
-
__spreadProps$
|
|
2992
|
+
__spreadProps$3(__spreadValues$4({}, props.navbar.props), {
|
|
3034
2993
|
onSwitchAccounts: account.accounts && account.accounts.length > 1 ? () => account.setChangeModalOpen(true) : void 0
|
|
3035
2994
|
})
|
|
3036
2995
|
),
|
|
@@ -3140,7 +3099,7 @@ const Pathways = (props) => {
|
|
|
3140
3099
|
return /* @__PURE__ */ React.createElement("div", { className: "mx-auto flex max-w-4xl flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React.createElement("h1", { className: "text-2xl font-extrabold tracking-tight text-dark-blue-400" }, "Pathways"), /* @__PURE__ */ React.createElement("p", { className: "text-sm text-slate-500" }, "Explore all your unique pathway requirements in one clear space")), /* @__PURE__ */ React.createElement(Table$3, { loading: props.loading, items: props.pathways }));
|
|
3141
3100
|
};
|
|
3142
3101
|
|
|
3143
|
-
const useStyles$
|
|
3102
|
+
const useStyles$1 = createStyles((theme) => ({
|
|
3144
3103
|
button: {
|
|
3145
3104
|
borderTopRightRadius: 0,
|
|
3146
3105
|
borderBottomRightRadius: 0,
|
|
@@ -3155,7 +3114,7 @@ const useStyles$3 = createStyles((theme) => ({
|
|
|
3155
3114
|
}
|
|
3156
3115
|
}));
|
|
3157
3116
|
const SplitButton$1 = (props) => {
|
|
3158
|
-
const { classes, theme } = useStyles$
|
|
3117
|
+
const { classes, theme } = useStyles$1();
|
|
3159
3118
|
theme.colors[theme.primaryColor][theme.colorScheme === "dark" ? 5 : 6];
|
|
3160
3119
|
return /* @__PURE__ */ React.createElement(Stack$5, { spacing: "sm" }, /* @__PURE__ */ React.createElement(
|
|
3161
3120
|
Button,
|
|
@@ -3191,25 +3150,25 @@ function Stack$1(props) {
|
|
|
3191
3150
|
return /* @__PURE__ */ React.createElement(Grid, { grow: true, gutter: "lg", sx: { padding: 20, minWidth: 700 } }, rows);
|
|
3192
3151
|
}
|
|
3193
3152
|
|
|
3194
|
-
var __defProp$
|
|
3195
|
-
var __getOwnPropSymbols$
|
|
3196
|
-
var __hasOwnProp$
|
|
3197
|
-
var __propIsEnum$
|
|
3198
|
-
var __defNormalProp$
|
|
3199
|
-
var __spreadValues$
|
|
3153
|
+
var __defProp$3 = Object.defineProperty;
|
|
3154
|
+
var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
|
|
3155
|
+
var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
|
|
3156
|
+
var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
|
|
3157
|
+
var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3158
|
+
var __spreadValues$3 = (a, b) => {
|
|
3200
3159
|
for (var prop in b || (b = {}))
|
|
3201
|
-
if (__hasOwnProp$
|
|
3202
|
-
__defNormalProp$
|
|
3203
|
-
if (__getOwnPropSymbols$
|
|
3204
|
-
for (var prop of __getOwnPropSymbols$
|
|
3205
|
-
if (__propIsEnum$
|
|
3206
|
-
__defNormalProp$
|
|
3160
|
+
if (__hasOwnProp$3.call(b, prop))
|
|
3161
|
+
__defNormalProp$3(a, prop, b[prop]);
|
|
3162
|
+
if (__getOwnPropSymbols$3)
|
|
3163
|
+
for (var prop of __getOwnPropSymbols$3(b)) {
|
|
3164
|
+
if (__propIsEnum$3.call(b, prop))
|
|
3165
|
+
__defNormalProp$3(a, prop, b[prop]);
|
|
3207
3166
|
}
|
|
3208
3167
|
return a;
|
|
3209
3168
|
};
|
|
3210
3169
|
function Table$2(props) {
|
|
3211
3170
|
const preparedItems = React.useMemo(() => {
|
|
3212
|
-
return (props.items || []).map((item) => __spreadValues$
|
|
3171
|
+
return (props.items || []).map((item) => __spreadValues$3(__spreadValues$3({}, item), item.categoryPoints));
|
|
3213
3172
|
}, [props.items]);
|
|
3214
3173
|
const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);
|
|
3215
3174
|
if (props.loading && props.items.length === 0) {
|
|
@@ -3341,7 +3300,7 @@ function Table$1(props) {
|
|
|
3341
3300
|
));
|
|
3342
3301
|
}
|
|
3343
3302
|
|
|
3344
|
-
const useStyles
|
|
3303
|
+
const useStyles = createStyles((theme) => ({
|
|
3345
3304
|
title: {
|
|
3346
3305
|
fontSize: 34,
|
|
3347
3306
|
fontWeight: 900,
|
|
@@ -3354,7 +3313,7 @@ const useStyles$2 = createStyles((theme) => ({
|
|
|
3354
3313
|
}
|
|
3355
3314
|
}));
|
|
3356
3315
|
const Pathway = (props) => {
|
|
3357
|
-
const { classes } = useStyles
|
|
3316
|
+
const { classes } = useStyles();
|
|
3358
3317
|
const [tab, setTab] = useState("badges");
|
|
3359
3318
|
const numberOfStudents = props.students.length;
|
|
3360
3319
|
numberOfStudents > 0 ? props.students.filter((u) => u.isComplete).length / numberOfStudents : 0;
|
|
@@ -3421,82 +3380,84 @@ const Pathway = (props) => {
|
|
|
3421
3380
|
)))))));
|
|
3422
3381
|
};
|
|
3423
3382
|
|
|
3424
|
-
const useStyles$1 = createStyles((theme) => ({
|
|
3425
|
-
button: {
|
|
3426
|
-
borderTopRightRadius: 0,
|
|
3427
|
-
borderBottomRightRadius: 0,
|
|
3428
|
-
marginLeft: 0,
|
|
3429
|
-
marginRight: 0
|
|
3430
|
-
},
|
|
3431
|
-
menuControl: {
|
|
3432
|
-
borderTopLeftRadius: 0,
|
|
3433
|
-
borderBottomLeftRadius: 0,
|
|
3434
|
-
border: 0,
|
|
3435
|
-
borderLeft: `1px solid ${theme.colorScheme === "dark" ? theme.colors.dark[7] : theme.white}`
|
|
3436
|
-
}
|
|
3437
|
-
}));
|
|
3438
3383
|
const SplitButton = (props) => {
|
|
3439
|
-
|
|
3440
|
-
|
|
3441
|
-
return /* @__PURE__ */ React.createElement(Stack$5, { spacing: "sm" }, /* @__PURE__ */ React.createElement(
|
|
3442
|
-
Button,
|
|
3384
|
+
return /* @__PURE__ */ React.createElement(
|
|
3385
|
+
"button",
|
|
3443
3386
|
{
|
|
3444
|
-
|
|
3445
|
-
|
|
3387
|
+
onClick: props.onExportDataClick,
|
|
3388
|
+
className: "flex items-center gap-2 rounded-xl bg-gradient-to-r from-gold-400 to-[#f5c300] px-4 py-2.5 text-xs font-extrabold text-dark-blue-400"
|
|
3446
3389
|
},
|
|
3390
|
+
/* @__PURE__ */ React.createElement(IconTableExport, { size: 14, stroke: 2 }),
|
|
3447
3391
|
"Export data (.csv)"
|
|
3448
|
-
)
|
|
3392
|
+
);
|
|
3449
3393
|
};
|
|
3450
3394
|
|
|
3451
3395
|
function Stack(props) {
|
|
3452
|
-
const { items, hideBadge, hideLesson } = props;
|
|
3396
|
+
const { items, hideBadge, hideLesson, hidePathway } = props;
|
|
3453
3397
|
if (!items.length)
|
|
3454
3398
|
return null;
|
|
3455
|
-
const
|
|
3456
|
-
|
|
3457
|
-
!
|
|
3458
|
-
!hideLesson,
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3399
|
+
const columns = [
|
|
3400
|
+
"minmax(0,2fr)",
|
|
3401
|
+
!hidePathway && "minmax(0,1.3fr)",
|
|
3402
|
+
!hideLesson && "minmax(0,1.3fr)",
|
|
3403
|
+
!hideBadge && "minmax(0,1.3fr)",
|
|
3404
|
+
"auto"
|
|
3405
|
+
].filter(Boolean).join(" ");
|
|
3406
|
+
const headerCell = "border-b border-slate-100 pb-2 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400";
|
|
3407
|
+
const dataCell = "py-3";
|
|
3408
|
+
return /* @__PURE__ */ React.createElement("div", { className: "grid items-center gap-x-3", style: { gridTemplateColumns: columns } }, /* @__PURE__ */ React.createElement("div", { className: headerCell }, "Question"), !hidePathway && /* @__PURE__ */ React.createElement("div", { className: headerCell }, "Pathway"), !hideLesson && /* @__PURE__ */ React.createElement("div", { className: headerCell }, "Lesson"), !hideBadge && /* @__PURE__ */ React.createElement("div", { className: headerCell }, "Badge"), /* @__PURE__ */ React.createElement("div", { className: headerCell }), items.map((row, i) => {
|
|
3409
|
+
const rowBorder = i > 0 ? "border-t border-slate-100" : "";
|
|
3410
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, { key: i }, /* @__PURE__ */ React.createElement("div", { className: `${dataCell} ${rowBorder} text-xs font-semibold text-dark-blue-400` }, row.question), !hidePathway && /* @__PURE__ */ React.createElement("div", { className: `${dataCell} ${rowBorder} truncate text-[11px] text-slate-500` }, row.pathwayName || "\u2014"), !hideLesson && /* @__PURE__ */ React.createElement("div", { className: `${dataCell} ${rowBorder} truncate text-[11px] text-slate-500` }, row.lessonName), !hideBadge && /* @__PURE__ */ React.createElement("div", { className: `${dataCell} ${rowBorder} truncate text-[11px] text-slate-500` }, row.badgeName), /* @__PURE__ */ React.createElement("div", { className: `${dataCell} ${rowBorder} flex shrink-0 gap-2` }, /* @__PURE__ */ React.createElement(
|
|
3411
|
+
"a",
|
|
3412
|
+
{
|
|
3413
|
+
href: row.link,
|
|
3414
|
+
target: "_blank",
|
|
3415
|
+
rel: "noopener noreferrer",
|
|
3416
|
+
className: "flex items-center gap-1 rounded-md border border-slate-200 px-2.5 py-1.5 text-[11px] font-bold text-slate-600 no-underline hover:bg-slate-50"
|
|
3417
|
+
},
|
|
3418
|
+
/* @__PURE__ */ React.createElement(IconExternalLink, { size: 12, stroke: 2 }),
|
|
3419
|
+
"Preview"
|
|
3420
|
+
), /* @__PURE__ */ React.createElement(
|
|
3421
|
+
"a",
|
|
3422
|
+
{
|
|
3423
|
+
href: row.link,
|
|
3424
|
+
download: true,
|
|
3425
|
+
target: "_blank",
|
|
3426
|
+
rel: "noopener noreferrer",
|
|
3427
|
+
className: "flex items-center gap-1 rounded-md border border-slate-200 px-2.5 py-1.5 text-[11px] font-bold text-slate-600 no-underline hover:bg-slate-50"
|
|
3428
|
+
},
|
|
3429
|
+
/* @__PURE__ */ React.createElement(IconDownload, { size: 12, stroke: 2 }),
|
|
3430
|
+
"Download"
|
|
3431
|
+
)));
|
|
3432
|
+
}));
|
|
3474
3433
|
}
|
|
3475
3434
|
|
|
3476
|
-
var __defProp$
|
|
3477
|
-
var __defProps$
|
|
3478
|
-
var __getOwnPropDescs$
|
|
3479
|
-
var __getOwnPropSymbols$
|
|
3480
|
-
var __hasOwnProp$
|
|
3481
|
-
var __propIsEnum$
|
|
3482
|
-
var __defNormalProp$
|
|
3483
|
-
var __spreadValues$
|
|
3435
|
+
var __defProp$2 = Object.defineProperty;
|
|
3436
|
+
var __defProps$2 = Object.defineProperties;
|
|
3437
|
+
var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
|
|
3438
|
+
var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
|
|
3439
|
+
var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
|
|
3440
|
+
var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
|
|
3441
|
+
var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3442
|
+
var __spreadValues$2 = (a, b) => {
|
|
3484
3443
|
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$
|
|
3444
|
+
if (__hasOwnProp$2.call(b, prop))
|
|
3445
|
+
__defNormalProp$2(a, prop, b[prop]);
|
|
3446
|
+
if (__getOwnPropSymbols$2)
|
|
3447
|
+
for (var prop of __getOwnPropSymbols$2(b)) {
|
|
3448
|
+
if (__propIsEnum$2.call(b, prop))
|
|
3449
|
+
__defNormalProp$2(a, prop, b[prop]);
|
|
3491
3450
|
}
|
|
3492
3451
|
return a;
|
|
3493
3452
|
};
|
|
3494
|
-
var __spreadProps$
|
|
3453
|
+
var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
|
|
3454
|
+
const initials$1 = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
|
|
3495
3455
|
function Table(props) {
|
|
3456
|
+
const [expanded, setExpanded] = React.useState({});
|
|
3496
3457
|
const preparedItems = React.useMemo(() => {
|
|
3497
3458
|
return props.items.map((item) => {
|
|
3498
3459
|
var _a;
|
|
3499
|
-
return __spreadProps$
|
|
3460
|
+
return __spreadProps$2(__spreadValues$2({}, item), {
|
|
3500
3461
|
submissionCount: ((_a = item.submissions) == null ? void 0 : _a.length) || 0
|
|
3501
3462
|
});
|
|
3502
3463
|
});
|
|
@@ -3513,76 +3474,82 @@ function Table(props) {
|
|
|
3513
3474
|
}
|
|
3514
3475
|
);
|
|
3515
3476
|
}
|
|
3516
|
-
const
|
|
3517
|
-
|
|
3518
|
-
|
|
3519
|
-
|
|
3520
|
-
|
|
3521
|
-
|
|
3477
|
+
const indicator = (key) => sortConfig.key !== key ? "" : sortConfig.direction === "desc" ? " \u25BE" : " \u25B4";
|
|
3478
|
+
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center gap-4 px-4 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, /* @__PURE__ */ React.createElement("button", { onClick: () => requestSort("name"), className: "flex-1 text-left hover:text-slate-600" }, "Student Name", indicator("name")), /* @__PURE__ */ React.createElement("button", { onClick: () => requestSort("submissionCount"), className: "w-16 shrink-0 text-left hover:text-slate-600" }, "Files", indicator("submissionCount")), props.onReview && /* @__PURE__ */ React.createElement("div", { className: "w-36 shrink-0" }), /* @__PURE__ */ React.createElement("div", { className: "w-4 shrink-0" })), sortedItems.map((row) => {
|
|
3479
|
+
const isOpen = !!expanded[row.userId];
|
|
3480
|
+
return /* @__PURE__ */ React.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React.createElement(
|
|
3481
|
+
"div",
|
|
3482
|
+
{
|
|
3483
|
+
onClick: () => setExpanded(__spreadProps$2(__spreadValues$2({}, expanded), { [row.userId]: !isOpen })),
|
|
3484
|
+
className: "flex cursor-pointer items-center gap-4 p-4"
|
|
3485
|
+
},
|
|
3486
|
+
/* @__PURE__ */ React.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-3" }, row.avatar ? /* @__PURE__ */ React.createElement("img", { src: row.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React.createElement("div", { className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-mint-400 to-dark-blue-400 text-xs font-bold text-white" }, initials$1(row.name)), /* @__PURE__ */ React.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React.createElement("div", { className: "truncate text-sm font-bold text-dark-blue-400" }, row.name), /* @__PURE__ */ React.createElement("div", { className: "truncate text-xs text-slate-400" }, row.email))),
|
|
3487
|
+
/* @__PURE__ */ React.createElement("div", { className: "w-16 shrink-0 text-sm font-bold text-dark-blue-400" }, row.submissions.length),
|
|
3488
|
+
props.onReview && /* @__PURE__ */ React.createElement("div", { className: "w-36 shrink-0" }, /* @__PURE__ */ React.createElement(
|
|
3489
|
+
"button",
|
|
3490
|
+
{
|
|
3491
|
+
onClick: (e) => {
|
|
3492
|
+
e.stopPropagation();
|
|
3493
|
+
props.onReview(row);
|
|
3494
|
+
},
|
|
3495
|
+
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"
|
|
3496
|
+
},
|
|
3497
|
+
"Review Submission"
|
|
3498
|
+
)),
|
|
3499
|
+
/* @__PURE__ */ React.createElement(IconChevronRight, { size: 16, stroke: 2, className: `w-4 shrink-0 text-slate-300 transition-transform ${isOpen ? "rotate-90" : ""}` })
|
|
3500
|
+
), isOpen && /* @__PURE__ */ React.createElement("div", { className: "border-t border-slate-100 px-4 py-3" }, /* @__PURE__ */ React.createElement(Stack, { items: row.submissions, hideBadge: props.hideBadge, hideLesson: props.hideLesson, hidePathway: props.hidePathway })));
|
|
3501
|
+
}));
|
|
3502
|
+
}
|
|
3503
|
+
|
|
3504
|
+
const initials = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
|
|
3505
|
+
function SubmissionDetail(props) {
|
|
3506
|
+
const { student } = props;
|
|
3507
|
+
return /* @__PURE__ */ React.createElement("div", { className: "mx-auto flex w-full max-w-4xl 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(Stack, { items: student.submissions }))), /* @__PURE__ */ React.createElement("div", { className: "flex gap-3" }, /* @__PURE__ */ React.createElement(
|
|
3508
|
+
"button",
|
|
3522
3509
|
{
|
|
3523
|
-
|
|
3524
|
-
|
|
3525
|
-
|
|
3526
|
-
|
|
3527
|
-
|
|
3528
|
-
|
|
3529
|
-
|
|
3530
|
-
|
|
3531
|
-
|
|
3532
|
-
|
|
3533
|
-
|
|
3534
|
-
|
|
3535
|
-
|
|
3536
|
-
|
|
3537
|
-
sortable: true,
|
|
3538
|
-
render: (row) => /* @__PURE__ */ React.createElement(Group, { spacing: "sm" }, /* @__PURE__ */ React.createElement(Avatar, { size: 40, src: row.avatar, radius: 40 }), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(Text, { size: "sm", weight: 500 }, row.name), /* @__PURE__ */ React.createElement(Text, { size: "xs", color: "dimmed" }, row.email)))
|
|
3539
|
-
}, {
|
|
3540
|
-
accessor: "submissionCount",
|
|
3541
|
-
title: "Files",
|
|
3542
|
-
sortable: true,
|
|
3543
|
-
render: (row) => row.submissions.length
|
|
3544
|
-
}],
|
|
3545
|
-
rowExpansion: {
|
|
3546
|
-
content: ({ record }) => /* @__PURE__ */ React.createElement(
|
|
3547
|
-
Stack,
|
|
3548
|
-
{
|
|
3549
|
-
items: record.submissions,
|
|
3550
|
-
hideBadge: props.hideBadge,
|
|
3551
|
-
hideLesson: props.hideLesson
|
|
3552
|
-
}
|
|
3553
|
-
)
|
|
3554
|
-
}
|
|
3555
|
-
}
|
|
3556
|
-
));
|
|
3510
|
+
onClick: () => props.onNav(-1),
|
|
3511
|
+
className: "flex flex-1 items-center justify-center gap-1.5 rounded-xl border border-slate-200 bg-white py-2.5 text-xs font-bold text-slate-600 hover:bg-slate-50"
|
|
3512
|
+
},
|
|
3513
|
+
/* @__PURE__ */ React.createElement(IconChevronLeft, { size: 14, stroke: 2 }),
|
|
3514
|
+
"Previous Submission"
|
|
3515
|
+
), /* @__PURE__ */ React.createElement(
|
|
3516
|
+
"button",
|
|
3517
|
+
{
|
|
3518
|
+
onClick: () => props.onNav(1),
|
|
3519
|
+
className: "flex flex-1 items-center justify-center gap-1.5 rounded-xl border border-slate-200 bg-white py-2.5 text-xs font-bold text-slate-600 hover:bg-slate-50"
|
|
3520
|
+
},
|
|
3521
|
+
"Next Submission",
|
|
3522
|
+
/* @__PURE__ */ React.createElement(IconChevronRight, { size: 14, stroke: 2 })
|
|
3523
|
+
)));
|
|
3557
3524
|
}
|
|
3558
3525
|
|
|
3559
|
-
var __defProp = Object.defineProperty;
|
|
3560
|
-
var __defProps = Object.defineProperties;
|
|
3561
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
3562
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3563
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
3564
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
3565
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3566
|
-
var __spreadValues = (a, b) => {
|
|
3526
|
+
var __defProp$1 = Object.defineProperty;
|
|
3527
|
+
var __defProps$1 = Object.defineProperties;
|
|
3528
|
+
var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
|
|
3529
|
+
var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
|
|
3530
|
+
var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
|
|
3531
|
+
var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
|
|
3532
|
+
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3533
|
+
var __spreadValues$1 = (a, b) => {
|
|
3567
3534
|
for (var prop in b || (b = {}))
|
|
3568
|
-
if (__hasOwnProp.call(b, prop))
|
|
3569
|
-
__defNormalProp(a, prop, b[prop]);
|
|
3570
|
-
if (__getOwnPropSymbols)
|
|
3571
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
3572
|
-
if (__propIsEnum.call(b, prop))
|
|
3573
|
-
__defNormalProp(a, prop, b[prop]);
|
|
3535
|
+
if (__hasOwnProp$1.call(b, prop))
|
|
3536
|
+
__defNormalProp$1(a, prop, b[prop]);
|
|
3537
|
+
if (__getOwnPropSymbols$1)
|
|
3538
|
+
for (var prop of __getOwnPropSymbols$1(b)) {
|
|
3539
|
+
if (__propIsEnum$1.call(b, prop))
|
|
3540
|
+
__defNormalProp$1(a, prop, b[prop]);
|
|
3574
3541
|
}
|
|
3575
3542
|
return a;
|
|
3576
3543
|
};
|
|
3577
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
3544
|
+
var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
|
|
3578
3545
|
const useFilteredStudents = (students) => {
|
|
3579
3546
|
return React.useMemo(() => {
|
|
3580
|
-
const byBadge = (badgeId) => students.map((s) => __spreadProps(__spreadValues({}, s), {
|
|
3547
|
+
const byBadge = (badgeId) => students.map((s) => __spreadProps$1(__spreadValues$1({}, s), {
|
|
3581
3548
|
submissions: (s.submissions || []).filter(
|
|
3582
3549
|
(sub) => sub.badgeId === badgeId
|
|
3583
3550
|
)
|
|
3584
3551
|
})).filter((s) => s.submissions.length);
|
|
3585
|
-
const byLesson = (lessonName) => students.map((s) => __spreadProps(__spreadValues({}, s), {
|
|
3552
|
+
const byLesson = (lessonName) => students.map((s) => __spreadProps$1(__spreadValues$1({}, s), {
|
|
3586
3553
|
submissions: (s.submissions || []).filter(
|
|
3587
3554
|
(sub) => sub.lessonName === lessonName
|
|
3588
3555
|
)
|
|
@@ -3593,7 +3560,7 @@ const useFilteredStudents = (students) => {
|
|
|
3593
3560
|
(c) => c.startsWith(pathwayId)
|
|
3594
3561
|
)
|
|
3595
3562
|
).map((b) => b.badgeId);
|
|
3596
|
-
return students.map((s) => __spreadProps(__spreadValues({}, s), {
|
|
3563
|
+
return students.map((s) => __spreadProps$1(__spreadValues$1({}, s), {
|
|
3597
3564
|
submissions: (s.submissions || []).filter(
|
|
3598
3565
|
(sub) => validBadgeIds.includes(sub.badgeId)
|
|
3599
3566
|
)
|
|
@@ -3603,168 +3570,167 @@ const useFilteredStudents = (students) => {
|
|
|
3603
3570
|
}, [students]);
|
|
3604
3571
|
};
|
|
3605
3572
|
|
|
3606
|
-
|
|
3607
|
-
|
|
3608
|
-
|
|
3609
|
-
|
|
3610
|
-
|
|
3611
|
-
|
|
3573
|
+
var __defProp = Object.defineProperty;
|
|
3574
|
+
var __defProps = Object.defineProperties;
|
|
3575
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
3576
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3577
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
3578
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
3579
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3580
|
+
var __spreadValues = (a, b) => {
|
|
3581
|
+
for (var prop in b || (b = {}))
|
|
3582
|
+
if (__hasOwnProp.call(b, prop))
|
|
3583
|
+
__defNormalProp(a, prop, b[prop]);
|
|
3584
|
+
if (__getOwnPropSymbols)
|
|
3585
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
3586
|
+
if (__propIsEnum.call(b, prop))
|
|
3587
|
+
__defNormalProp(a, prop, b[prop]);
|
|
3612
3588
|
}
|
|
3613
|
-
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
}
|
|
3618
|
-
|
|
3619
|
-
|
|
3620
|
-
|
|
3621
|
-
|
|
3622
|
-
|
|
3623
|
-
|
|
3624
|
-
return
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
-
|
|
3631
|
-
|
|
3632
|
-
|
|
3633
|
-
|
|
3634
|
-
)));
|
|
3589
|
+
return a;
|
|
3590
|
+
};
|
|
3591
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
3592
|
+
const TABS = [
|
|
3593
|
+
{ value: "students", label: "By student" },
|
|
3594
|
+
{ value: "pathways", label: "By pathway" },
|
|
3595
|
+
{ value: "badges", label: "By badge" },
|
|
3596
|
+
{ value: "lessons", label: "By lesson" }
|
|
3597
|
+
];
|
|
3598
|
+
const countFiles = (students) => students.reduce((acc, s) => {
|
|
3599
|
+
var _a;
|
|
3600
|
+
return acc + (((_a = s.submissions) == null ? void 0 : _a.length) || 0);
|
|
3601
|
+
}, 0);
|
|
3602
|
+
const GroupCard = (props) => {
|
|
3603
|
+
const [open, setOpen] = React.useState(false);
|
|
3604
|
+
return /* @__PURE__ */ React.createElement("div", { className: "overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React.createElement("div", { onClick: () => setOpen(!open), className: "flex cursor-pointer items-center gap-3.5 p-4" }, /* @__PURE__ */ React.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React.createElement("div", { className: "text-sm font-extrabold text-dark-blue-400" }, props.title), props.description && /* @__PURE__ */ React.createElement("div", { className: "mt-1 text-xs leading-relaxed text-slate-500" }, props.description)), /* @__PURE__ */ React.createElement("div", { className: "shrink-0 rounded-full bg-mint-100 px-2.5 py-1 text-xs font-bold text-dark-blue-400" }, props.count), /* @__PURE__ */ React.createElement(IconChevronDown, { size: 15, stroke: 2.3, className: `shrink-0 text-slate-400 transition-transform ${open ? "rotate-180" : ""}` })), open && /* @__PURE__ */ React.createElement("div", { className: "border-t border-slate-100 p-4" }, props.children));
|
|
3605
|
+
};
|
|
3606
|
+
const PathwayGroups = (props) => {
|
|
3607
|
+
const { byPathway } = useFilteredStudents(props.students);
|
|
3608
|
+
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, props.pathways.map((p) => {
|
|
3609
|
+
const filtered = byPathway(p.pathwayId, props.badges);
|
|
3610
|
+
return /* @__PURE__ */ React.createElement(GroupCard, { key: p.pathwayId, title: p.title, description: p.description, count: countFiles(filtered) }, /* @__PURE__ */ React.createElement(Table, { loading: props.loading, items: filtered, hidePathway: true, onReview: (item) => props.onReview(item, filtered, p.title) }));
|
|
3635
3611
|
}));
|
|
3636
3612
|
};
|
|
3637
|
-
const
|
|
3638
|
-
const {
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
|
|
3643
|
-
return /* @__PURE__ */ React.createElement(Accordion, null, lessons.map((l) => {
|
|
3644
|
-
const studentsForLesson = byLesson(l.lessonName);
|
|
3645
|
-
const fileCount = countFiles(studentsForLesson);
|
|
3646
|
-
return /* @__PURE__ */ React.createElement(Accordion.Item, { key: l.lessonId, value: l.lessonId }, /* @__PURE__ */ React.createElement(Accordion.Control, null, /* @__PURE__ */ React.createElement(Group, { position: "apart", w: "100%" }, /* @__PURE__ */ React.createElement(Text, null, l.lessonName), /* @__PURE__ */ React.createElement(Badge$1, { size: "sm" }, fileCount))), /* @__PURE__ */ React.createElement(Accordion.Panel, null, /* @__PURE__ */ React.createElement(
|
|
3647
|
-
Table,
|
|
3648
|
-
{
|
|
3649
|
-
loading,
|
|
3650
|
-
items: studentsForLesson,
|
|
3651
|
-
hideLesson: true
|
|
3652
|
-
}
|
|
3653
|
-
)));
|
|
3613
|
+
const BadgeGroups = (props) => {
|
|
3614
|
+
const { byBadge } = useFilteredStudents(props.students);
|
|
3615
|
+
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, props.badges.map((b) => {
|
|
3616
|
+
const filtered = byBadge(b.badgeId);
|
|
3617
|
+
const pathwayTitle = props.pathwayNameForBadge[b.badgeId];
|
|
3618
|
+
return /* @__PURE__ */ React.createElement(GroupCard, { key: b.badgeId, title: b.displayName, description: pathwayTitle ? `${pathwayTitle} pathway` : void 0, count: countFiles(filtered) }, /* @__PURE__ */ React.createElement(Table, { loading: props.loading, items: filtered, hideBadge: true, hidePathway: true, onReview: (item) => props.onReview(item, filtered, b.displayName) }));
|
|
3654
3619
|
}));
|
|
3655
3620
|
};
|
|
3656
|
-
const
|
|
3657
|
-
|
|
3658
|
-
|
|
3659
|
-
|
|
3660
|
-
|
|
3661
|
-
|
|
3662
|
-
|
|
3663
|
-
|
|
3664
|
-
var _a;
|
|
3665
|
-
return acc + (((_a = s.submissions) == null ? void 0 : _a.length) || 0);
|
|
3666
|
-
}, 0);
|
|
3667
|
-
return /* @__PURE__ */ React.createElement(Accordion, null, pathways.map((p) => {
|
|
3668
|
-
const studentsForPathway = byPathway(p.pathwayId, badges);
|
|
3669
|
-
const fileCount = countFiles(studentsForPathway);
|
|
3670
|
-
return /* @__PURE__ */ React.createElement(Accordion.Item, { key: p.pathwayId, value: p.pathwayId }, /* @__PURE__ */ React.createElement(Accordion.Control, null, /* @__PURE__ */ React.createElement(Group, { position: "apart", w: "100%" }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("strong", null, p.title), /* @__PURE__ */ React.createElement("div", null, p.description)), /* @__PURE__ */ React.createElement(Badge$1, { size: "sm" }, fileCount))), /* @__PURE__ */ React.createElement(Accordion.Panel, null, /* @__PURE__ */ React.createElement(
|
|
3671
|
-
Table,
|
|
3672
|
-
{
|
|
3673
|
-
loading,
|
|
3674
|
-
items: studentsForPathway
|
|
3675
|
-
}
|
|
3676
|
-
)));
|
|
3621
|
+
const LessonGroups = (props) => {
|
|
3622
|
+
const { byLesson } = useFilteredStudents(props.students);
|
|
3623
|
+
return /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-3" }, props.lessons.map((l) => {
|
|
3624
|
+
const filtered = byLesson(l.lessonName);
|
|
3625
|
+
const badge = props.badgeForLesson[l.lessonId];
|
|
3626
|
+
const pathwayTitle = badge ? props.pathwayNameForBadge[badge.badgeId] : void 0;
|
|
3627
|
+
const description = badge ? pathwayTitle ? `${badge.displayName} \xB7 ${pathwayTitle} pathway` : badge.displayName : void 0;
|
|
3628
|
+
return /* @__PURE__ */ React.createElement(GroupCard, { key: l.lessonId, title: l.lessonName, description, count: countFiles(filtered) }, /* @__PURE__ */ React.createElement(Table, { loading: props.loading, items: filtered, hideBadge: true, hideLesson: true, hidePathway: true, onReview: (item) => props.onReview(item, filtered, l.lessonName) }));
|
|
3677
3629
|
}));
|
|
3678
3630
|
};
|
|
3679
3631
|
const FileLocker = (props) => {
|
|
3680
|
-
const
|
|
3681
|
-
const [
|
|
3682
|
-
props.students
|
|
3683
|
-
const
|
|
3684
|
-
|
|
3685
|
-
|
|
3686
|
-
|
|
3687
|
-
|
|
3688
|
-
|
|
3689
|
-
|
|
3690
|
-
|
|
3691
|
-
|
|
3692
|
-
|
|
3693
|
-
|
|
3694
|
-
|
|
3695
|
-
|
|
3696
|
-
|
|
3697
|
-
|
|
3698
|
-
|
|
3699
|
-
|
|
3700
|
-
|
|
3701
|
-
|
|
3702
|
-
|
|
3703
|
-
|
|
3704
|
-
|
|
3705
|
-
|
|
3706
|
-
|
|
3707
|
-
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3632
|
+
const [tab, setTab] = React.useState("students");
|
|
3633
|
+
const [reviewing, setReviewing] = React.useState(null);
|
|
3634
|
+
const numberOfFiles = countFiles(props.students);
|
|
3635
|
+
const { thisWeek, thisMonth } = React.useMemo(() => {
|
|
3636
|
+
const now = new Date();
|
|
3637
|
+
const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1e3);
|
|
3638
|
+
const fom = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
3639
|
+
let week = 0, month = 0;
|
|
3640
|
+
props.students.forEach((s) => {
|
|
3641
|
+
(s.submissions || []).forEach((sub) => {
|
|
3642
|
+
if (!sub.updatedAt)
|
|
3643
|
+
return;
|
|
3644
|
+
const d = new Date(sub.updatedAt);
|
|
3645
|
+
if (d >= weekAgo)
|
|
3646
|
+
week += 1;
|
|
3647
|
+
if (d >= fom)
|
|
3648
|
+
month += 1;
|
|
3649
|
+
});
|
|
3650
|
+
});
|
|
3651
|
+
return { thisWeek: week, thisMonth: month };
|
|
3652
|
+
}, [props.students]);
|
|
3653
|
+
const pathwayNameForBadge = React.useMemo(() => {
|
|
3654
|
+
const map = {};
|
|
3655
|
+
(props.badges || []).forEach((b) => {
|
|
3656
|
+
if (!Array.isArray(b.categories))
|
|
3657
|
+
return;
|
|
3658
|
+
const pathway = (props.pathways || []).find((p) => b.categories.some((c) => c.startsWith(p.pathwayId)));
|
|
3659
|
+
if (pathway)
|
|
3660
|
+
map[b.badgeId] = pathway.title;
|
|
3661
|
+
});
|
|
3662
|
+
return map;
|
|
3663
|
+
}, [props.badges, props.pathways]);
|
|
3664
|
+
const badgeForLesson = React.useMemo(() => {
|
|
3665
|
+
const map = {};
|
|
3666
|
+
(props.badges || []).forEach((b) => {
|
|
3667
|
+
if (!Array.isArray(b.lessonIds))
|
|
3668
|
+
return;
|
|
3669
|
+
b.lessonIds.forEach((lessonId) => {
|
|
3670
|
+
if (!(lessonId in map))
|
|
3671
|
+
map[lessonId] = { displayName: b.displayName, badgeId: b.badgeId };
|
|
3672
|
+
});
|
|
3673
|
+
});
|
|
3674
|
+
return map;
|
|
3675
|
+
}, [props.badges]);
|
|
3676
|
+
const enrichedStudents = React.useMemo(() => {
|
|
3677
|
+
return props.students.map((s) => __spreadProps(__spreadValues({}, s), {
|
|
3678
|
+
submissions: (s.submissions || []).map((sub) => __spreadProps(__spreadValues({}, sub), { pathwayName: pathwayNameForBadge[sub.badgeId] || "" }))
|
|
3679
|
+
}));
|
|
3680
|
+
}, [props.students, pathwayNameForBadge]);
|
|
3681
|
+
const { byPathway } = useFilteredStudents(enrichedStudents);
|
|
3682
|
+
const mostActivePathway = React.useMemo(() => {
|
|
3683
|
+
return (props.pathways || []).reduce((best, p) => {
|
|
3684
|
+
const count = countFiles(byPathway(p.pathwayId, props.badges || []));
|
|
3685
|
+
return count > 0 && (!best || count > best.count) ? { title: p.title, count } : best;
|
|
3686
|
+
}, null);
|
|
3687
|
+
}, [props.pathways, props.badges, byPathway]);
|
|
3688
|
+
const onReview = (item, list, context) => setReviewing({ student: item, list, context });
|
|
3689
|
+
const onNav = (dir) => {
|
|
3690
|
+
if (!reviewing)
|
|
3691
|
+
return;
|
|
3692
|
+
const idx = reviewing.list.findIndex((s) => s.userId === reviewing.student.userId);
|
|
3693
|
+
if (idx === -1)
|
|
3694
|
+
return;
|
|
3695
|
+
const next = reviewing.list[(idx + dir + reviewing.list.length) % reviewing.list.length];
|
|
3696
|
+
setReviewing(__spreadProps(__spreadValues({}, reviewing), { student: next }));
|
|
3697
|
+
};
|
|
3698
|
+
if (reviewing) {
|
|
3699
|
+
return /* @__PURE__ */ React.createElement(
|
|
3700
|
+
SubmissionDetail,
|
|
3701
|
+
{
|
|
3702
|
+
student: reviewing.student,
|
|
3703
|
+
context: reviewing.context,
|
|
3704
|
+
onBack: () => setReviewing(null),
|
|
3705
|
+
onNav
|
|
3706
|
+
}
|
|
3707
|
+
);
|
|
3708
|
+
}
|
|
3709
|
+
return /* @__PURE__ */ React.createElement("div", { className: "mx-auto flex w-full max-w-4xl 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("button", { onClick: props.onBackClick, className: "flex items-center gap-1 text-xs font-bold text-sky-blue-400 hover:underline" }, /* @__PURE__ */ React.createElement(IconChevronLeft, { size: 13, stroke: 2.5 }), "Back"), /* @__PURE__ */ React.createElement("h1", { className: "mt-1.5 text-2xl font-extrabold tracking-tight text-dark-blue-400" }, props.displayName || "File Locker"), /* @__PURE__ */ React.createElement("p", { className: "mt-1 text-sm text-slate-500" }, props.description || "No description")), !props.trial && /* @__PURE__ */ React.createElement(SplitButton, { href: props.href, onCopyLinkClick: props.onCopyLinkClick, onExportDataClick: props.onExportDataClick })), /* @__PURE__ */ React.createElement(StatsGroup, { data: props.trial ? [
|
|
3710
|
+
{ title: "LESSONS SUBMITTED", value: props.lessonsCompleted || 0 }
|
|
3711
|
+
] : [
|
|
3712
|
+
{ title: "FILES", value: numberOfFiles },
|
|
3713
|
+
{ title: "THIS WEEK", value: thisWeek },
|
|
3714
|
+
{ title: "THIS MONTH", value: thisMonth }
|
|
3715
|
+
] }), !props.trial && mostActivePathway && /* @__PURE__ */ React.createElement("div", { className: "text-xs text-slate-500" }, "Most active pathway: ", /* @__PURE__ */ React.createElement("span", { className: "font-bold text-dark-blue-400" }, mostActivePathway.title), " (", mostActivePathway.count, " submission", mostActivePathway.count === 1 ? "" : "s", ")"), !props.trial && /* @__PURE__ */ React.createElement(
|
|
3716
|
+
"select",
|
|
3713
3717
|
{
|
|
3714
|
-
clearable: true,
|
|
3715
|
-
clearButtonLabel: "Clear class selection",
|
|
3716
|
-
size: "sm",
|
|
3717
|
-
placeholder: "Select a class",
|
|
3718
|
-
nothingFound: "No options",
|
|
3719
3718
|
value: props.classId,
|
|
3720
|
-
onChange: props.onClassChange,
|
|
3721
|
-
|
|
3722
|
-
|
|
3723
|
-
|
|
3724
|
-
|
|
3725
|
-
|
|
3726
|
-
|
|
3727
|
-
Tabs,
|
|
3728
|
-
{
|
|
3729
|
-
value: tab,
|
|
3730
|
-
data: [
|
|
3731
|
-
{ label: "By student", value: "students" },
|
|
3732
|
-
{ label: "By pathway", value: "pathways" },
|
|
3733
|
-
{ label: "By badge", value: "badges" },
|
|
3734
|
-
{ label: "By lesson", value: "lessons" }
|
|
3735
|
-
],
|
|
3736
|
-
onChange: setTab
|
|
3737
|
-
}
|
|
3738
|
-
), !props.trial && tab === "students" && /* @__PURE__ */ React.createElement(
|
|
3739
|
-
Table,
|
|
3740
|
-
{
|
|
3741
|
-
loading: props.loading,
|
|
3742
|
-
items: props.students
|
|
3743
|
-
}
|
|
3744
|
-
), tab === "pathways" && /* @__PURE__ */ React.createElement(
|
|
3745
|
-
PathwayTable,
|
|
3746
|
-
{
|
|
3747
|
-
pathways: props.pathways || [],
|
|
3748
|
-
badges: props.badges || [],
|
|
3749
|
-
students: props.students,
|
|
3750
|
-
loading: props.loading
|
|
3751
|
-
}
|
|
3752
|
-
), tab === "badges" && /* @__PURE__ */ React.createElement(
|
|
3753
|
-
BadgeTable,
|
|
3754
|
-
{
|
|
3755
|
-
badges: props.badges || [],
|
|
3756
|
-
students: props.students,
|
|
3757
|
-
loading: props.loading
|
|
3758
|
-
}
|
|
3759
|
-
), tab === "lessons" && /* @__PURE__ */ React.createElement(
|
|
3760
|
-
LessonTableWrapper,
|
|
3719
|
+
onChange: (e) => props.onClassChange(e.target.value),
|
|
3720
|
+
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"
|
|
3721
|
+
},
|
|
3722
|
+
/* @__PURE__ */ React.createElement("option", { value: "" }, "Select a class"),
|
|
3723
|
+
props.classes.map((g) => /* @__PURE__ */ React.createElement("option", { key: g.classId, value: g.classId }, g.name))
|
|
3724
|
+
), !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(
|
|
3725
|
+
"button",
|
|
3761
3726
|
{
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
}
|
|
3766
|
-
|
|
3727
|
+
key: t.value,
|
|
3728
|
+
onClick: () => setTab(t.value),
|
|
3729
|
+
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"}`
|
|
3730
|
+
},
|
|
3731
|
+
t.label
|
|
3732
|
+
))), !props.trial && tab === "students" && /* @__PURE__ */ React.createElement(Table, { loading: props.loading, items: enrichedStudents, onReview: (item) => onReview(item, enrichedStudents) }), !props.trial && tab === "pathways" && /* @__PURE__ */ React.createElement(PathwayGroups, { students: enrichedStudents, loading: props.loading, pathways: props.pathways || [], badges: props.badges || [], onReview }), !props.trial && tab === "badges" && /* @__PURE__ */ React.createElement(BadgeGroups, { students: enrichedStudents, loading: props.loading, badges: props.badges || [], pathwayNameForBadge, onReview }), !props.trial && tab === "lessons" && /* @__PURE__ */ React.createElement(LessonGroups, { students: enrichedStudents, loading: props.loading, lessons: props.lessons, badgeForLesson, pathwayNameForBadge, onReview }));
|
|
3767
3733
|
};
|
|
3768
3734
|
|
|
3769
|
-
export { AdminProvider, App, Badge, Badges, Class, Classes, Dashboard, FileLocker, GettingStarted, Home, Lesson, Lessons, Navbar, Organization, Pathway,
|
|
3735
|
+
export { AdminProvider, App, Badge, Badges, Class, Classes, Dashboard, FileLocker, GettingStarted, Home, Lesson, Lessons, Navbar, Organization, Pathway, Pathways, People, StartAnonymousLesson, Student, SwitchAccount, TrialHome, TrialRegistration };
|
|
3770
3736
|
//# sourceMappingURL=index.mjs.map
|