@local-civics/mgmt-ui 0.1.230 → 0.1.232
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +134 -1
- package/dist/index.js +763 -450
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +763 -452
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -60,7 +60,7 @@ function styleInject(css, ref) {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
var css_248z = "@font-face{font-family:ProximaNova;src:url(https://cdn.localcivics.io/fonts/ProximaNova.otf) format(\"opentype\")}@font-face{font-family:ProximaNova;font-weight:700;src:url(https://cdn.localcivics.io/fonts/ProximaNovaBold.otf) format(\"opentype\")}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.\\!relative{position:relative!important}.left-3{left:.75rem}.top-1\\/2{top:50%}.left-3\\.5{left:.875rem}.bottom-\\[-20px\\]{bottom:-20px}.left-1\\/2{left:50%}.m-3{margin:.75rem}.mt-0\\.5{margin-top:.125rem}.mt-0{margin-top:0}.mt-6{margin-top:1.5rem}.mt-2{margin-top:.5rem}.mt-1{margin-top:.25rem}.mt-1\\.5{margin-top:.375rem}.mb-3{margin-bottom:.75rem}.mb-1\\.5{margin-bottom:.375rem}.mb-1{margin-bottom:.25rem}.-ml-2{margin-left:-.5rem}.mt-4{margin-top:1rem}.mt-3{margin-top:.75rem}.mb-8{margin-bottom:2rem}.ml-\\[29px\\]{margin-left:29px}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-full{height:100%}.h-9{height:2.25rem}.h-8{height:2rem}.h-7{height:1.75rem}.h-12{height:3rem}.h-\\[300px\\]{height:300px}.h-screen{height:100vh}.h-14{height:3.5rem}.h-16{height:4rem}.h-28{height:7rem}.h-\\[30px\\]{height:30px}.h-\\[400px\\]{height:400px}.max-h-\\[55vh\\]{max-height:55vh}.max-h-\\[70vh\\]{max-height:70vh}.w-10{width:2.5rem}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-fit{width:-moz-fit-content;width:fit-content}.w-36{width:9rem}.w-28{width:7rem}.w-4{width:1rem}.w-9{width:2.25rem}.w-\\[296px\\]{width:296px}.w-40{width:10rem}.w-24{width:6rem}.w-56{width:14rem}.w-8{width:2rem}.w-7{width:1.75rem}.w-64{width:16rem}.w-12{width:3rem}.w-16{width:4rem}.w-\\[440px\\]{width:440px}.w-20{width:5rem}.w-\\[250px\\]{width:250px}.w-screen{width:100vw}.w-\\[500px\\]{width:500px}.w-14{width:3.5rem}.w-\\[230px\\]{width:230px}.w-\\[30px\\]{width:30px}.min-w-0{min-width:0}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.max-w-\\[460px\\]{max-width:460px}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y:-50%}.-translate-x-1\\/2,.-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\\/2{--tw-translate-x:-50%}.rotate-180{--tw-rotate:180deg}.rotate-180,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1\\.2fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1.2fr 1fr .6fr}.grid-cols-\\[1\\.5fr_2fr_1fr_0\\.6fr\\]{grid-template-columns:1.5fr 2fr 1fr .6fr}.grid-cols-\\[1\\.5fr_2fr_0\\.8fr\\]{grid-template-columns:1.5fr 2fr .8fr}.grid-cols-\\[1fr_3fr\\]{grid-template-columns:1fr 3fr}.grid-cols-\\[1fr_1fr_2fr_0\\.8fr\\]{grid-template-columns:1fr 1fr 2fr .8fr}.grid-cols-\\[2fr_1fr\\]{grid-template-columns:2fr 1fr}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1fr .6fr}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-\\[18px\\]{gap:18px}.gap-5{gap:1.25rem}.gap-4{gap:1rem}.gap-1{gap:.25rem}.gap-3{gap:.75rem}.gap-2{gap:.5rem}.gap-1\\.5{gap:.375rem}.gap-2\\.5{gap:.625rem}.gap-3\\.5{gap:.875rem}.gap-0\\.5{gap:.125rem}.gap-0{gap:0}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-y-4{row-gap:1rem}.space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.-space-y-\\[3px\\]>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(-3px*var(--tw-space-y-reverse));margin-top:calc(-3px*(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-none{overscroll-behavior:none}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-2xl{border-radius:1rem}.rounded-\\[10px\\]{border-radius:10px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:1.5rem}.rounded-\\[8px\\]{border-radius:8px}.border{border-width:1px}.border-2{border-width:2px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-l{border-left-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-sky-blue-400\\/40{border-color:rgba(59,208,242,.4)}.border-sky-blue-400\\/30{border-color:rgba(59,208,242,.3)}.border-mint-400\\/30{border-color:rgba(30,226,175,.3)}.border-gold-400\\/30{border-color:rgba(255,212,77,.3)}.border-transparent{border-color:transparent}.border-l-sky-blue-400{--tw-border-opacity:1;border-left-color:rgb(59 208 242/var(--tw-border-opacity))}.border-l-mint-400{--tw-border-opacity:1;border-left-color:rgb(30 226 175/var(--tw-border-opacity))}.border-l-gold-400{--tw-border-opacity:1;border-left-color:rgb(255 212 77/var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-sky-blue-400\\/20{background-color:rgba(59,208,242,.2)}.bg-mint-100{--tw-bg-opacity:1;background-color:rgb(208 251 240/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-gold-100{--tw-bg-opacity:1;background-color:rgb(255 248 214/var(--tw-bg-opacity))}.bg-mint-400\\/20{background-color:rgba(30,226,175,.2)}.bg-transparent{background-color:transparent}.bg-dark-blue-400{--tw-bg-opacity:1;background-color:rgb(35 42 58/var(--tw-bg-opacity))}.bg-white\\/90{background-color:hsla(0,0%,100%,.9)}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-slate-50\\/60{background-color:rgba(248,250,252,.6)}.bg-sky-blue-400\\/15{background-color:rgba(59,208,242,.15)}.bg-gold-400\\/15{background-color:rgba(255,212,77,.15)}.bg-mint-400\\/15{background-color:rgba(30,226,175,.15)}.bg-sky-blue-400\\/25{background-color:rgba(59,208,242,.25)}.bg-mint-400\\/25{background-color:rgba(30,226,175,.25)}.bg-gold-400\\/25{background-color:rgba(255,212,77,.25)}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-sky-blue-400{--tw-gradient-from:#3bd0f2;--tw-gradient-to:rgba(59,208,242,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-mint-400{--tw-gradient-from:#1ee2af;--tw-gradient-to:rgba(30,226,175,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-gold-400{--tw-gradient-from:#ffd44d;--tw-gradient-to:rgba(255,212,77,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-dark-blue-600{--tw-gradient-from:#0a0f2e;--tw-gradient-to:rgba(10,15,46,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-sky-blue-400\\/15{--tw-gradient-from:rgba(59,208,242,.15);--tw-gradient-to:rgba(59,208,242,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-dark-blue-400{--tw-gradient-to:rgba(35,42,58,0);--tw-gradient-stops:var(--tw-gradient-from),#232a3a,var(--tw-gradient-to)}.to-dark-blue-400{--tw-gradient-to:#232a3a}.to-\\[\\#f5c300\\]{--tw-gradient-to:#f5c300}.to-sky-blue-400{--tw-gradient-to:#3bd0f2}.to-mint-400\\/15{--tw-gradient-to:rgba(30,226,175,.15)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-4{padding:1rem}.p-8{padding:2rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-3{padding:.75rem}.p-2\\.5{padding:.625rem}.p-2{padding:.5rem}.px-\\[22px\\]{padding-left:22px;padding-right:22px}.py-\\[18px\\]{padding-bottom:18px;padding-top:18px}.px-4{padding-left:1rem;padding-right:1rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3\\.5{padding-left:.875rem;padding-right:.875rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}.py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.py-4{padding-bottom:1rem;padding-top:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pl-9{padding-left:2.25rem}.pr-4{padding-right:1rem}.pl-10{padding-left:2.5rem}.pr-1{padding-right:.25rem}.pb-2{padding-bottom:.5rem}.pl-4{padding-left:1rem}.pt-0\\.5{padding-top:.125rem}.pt-0{padding-top:0}.pb-12{padding-bottom:3rem}.pl-2\\.5{padding-left:.625rem}.pl-2{padding-left:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-proxima{font-family:ProximaNova}.text-\\[15\\.5px\\]{font-size:15.5px}.text-xs{font-size:.75rem;line-height:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-\\[10px\\]{font-size:10px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-\\[10\\.5px\\]{font-size:10.5px}.text-base{font-size:1rem;line-height:1.5rem}.text-\\[11px\\]{font-size:11px}.text-\\[28px\\]{font-size:28px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-\\[11\\.5px\\]{font-size:11.5px}.text-3xl{font-size:1.875rem;line-height:2.25rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-black{font-weight:900}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-dark-blue-400{--tw-text-opacity:1;color:rgb(35 42 58/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-sky-blue-400{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-mint-400{--tw-text-opacity:1;color:rgb(30 226 175/var(--tw-text-opacity))}.text-white\\/70{color:hsla(0,0%,100%,.7)}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-gold-400{--tw-text-opacity:1;color:rgb(255 212 77/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\],.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\]{--tw-shadow:0 3px 12px rgba(255,212,77,.35);--tw-shadow-colored:0 3px 12px var(--tw-shadow-color)}.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{--tw-shadow:0 2px 10px rgba(30,226,175,.15);--tw-shadow-colored:0 2px 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.line-clamp-2{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;overflow:hidden}*,:after,:before{border-style:solid;border-width:0}button{background-color:transparent;background-image:none;color:inherit;cursor:pointer;font:inherit;margin:0;padding:0;text-transform:none}.placeholder\\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.placeholder\\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.first\\:ml-0:first-child{margin-left:0}.hover\\:scale-\\[1\\.02\\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.hover\\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\\:text-sky-blue-400:hover{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.hover\\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.hover\\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\\:border-sky-blue-400:focus{--tw-border-opacity:1;border-color:rgb(59 208 242/var(--tw-border-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\\:opacity-50:disabled{opacity:.5}@media (min-width:640px){.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:768px){.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}";
|
|
63
|
+
var css_248z = "@font-face{font-family:ProximaNova;src:url(https://cdn.localcivics.io/fonts/ProximaNova.otf) format(\"opentype\")}@font-face{font-family:ProximaNova;font-weight:700;src:url(https://cdn.localcivics.io/fonts/ProximaNovaBold.otf) format(\"opentype\")}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.\\!relative{position:relative!important}.left-3{left:.75rem}.top-1\\/2{top:50%}.left-3\\.5{left:.875rem}.bottom-\\[-20px\\]{bottom:-20px}.left-1\\/2{left:50%}.m-3{margin:.75rem}.mt-0\\.5{margin-top:.125rem}.mt-0{margin-top:0}.mt-6{margin-top:1.5rem}.mt-2{margin-top:.5rem}.mt-1{margin-top:.25rem}.mt-1\\.5{margin-top:.375rem}.-ml-2{margin-left:-.5rem}.mt-4{margin-top:1rem}.mt-3{margin-top:.75rem}.mb-8{margin-bottom:2rem}.mb-1{margin-bottom:.25rem}.ml-\\[29px\\]{margin-left:29px}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-full{height:100%}.h-9{height:2.25rem}.h-8{height:2rem}.h-7{height:1.75rem}.h-12{height:3rem}.h-\\[300px\\]{height:300px}.h-screen{height:100vh}.h-14{height:3.5rem}.h-16{height:4rem}.h-28{height:7rem}.h-\\[30px\\]{height:30px}.h-\\[400px\\]{height:400px}.max-h-\\[70vh\\]{max-height:70vh}.w-10{width:2.5rem}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-fit{width:-moz-fit-content;width:fit-content}.w-36{width:9rem}.w-28{width:7rem}.w-4{width:1rem}.w-9{width:2.25rem}.w-\\[296px\\]{width:296px}.w-40{width:10rem}.w-24{width:6rem}.w-56{width:14rem}.w-8{width:2rem}.w-7{width:1.75rem}.w-64{width:16rem}.w-12{width:3rem}.w-16{width:4rem}.w-\\[440px\\]{width:440px}.w-20{width:5rem}.w-\\[250px\\]{width:250px}.w-screen{width:100vw}.w-\\[500px\\]{width:500px}.w-14{width:3.5rem}.w-\\[230px\\]{width:230px}.w-\\[30px\\]{width:30px}.min-w-0{min-width:0}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.max-w-\\[460px\\]{max-width:460px}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y:-50%}.-translate-x-1\\/2,.-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\\/2{--tw-translate-x:-50%}.rotate-180{--tw-rotate:180deg}.rotate-180,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1\\.2fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1.2fr 1fr .6fr}.grid-cols-\\[1\\.5fr_2fr_1fr_0\\.6fr\\]{grid-template-columns:1.5fr 2fr 1fr .6fr}.grid-cols-\\[1\\.3fr_1\\.3fr_2fr_1fr_1fr\\]{grid-template-columns:1.3fr 1.3fr 2fr 1fr 1fr}.grid-cols-\\[1\\.5fr_2fr_0\\.8fr\\]{grid-template-columns:1.5fr 2fr .8fr}.grid-cols-\\[1fr_3fr\\]{grid-template-columns:1fr 3fr}.grid-cols-\\[1fr_1fr_2fr_0\\.8fr\\]{grid-template-columns:1fr 1fr 2fr .8fr}.grid-cols-\\[2fr_1fr\\]{grid-template-columns:2fr 1fr}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1fr .6fr}.grid-cols-\\[2\\.2fr_1fr\\]{grid-template-columns:2.2fr 1fr}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-\\[18px\\]{gap:18px}.gap-5{gap:1.25rem}.gap-4{gap:1rem}.gap-1{gap:.25rem}.gap-3{gap:.75rem}.gap-2{gap:.5rem}.gap-1\\.5{gap:.375rem}.gap-2\\.5{gap:.625rem}.gap-3\\.5{gap:.875rem}.gap-0\\.5{gap:.125rem}.gap-0{gap:0}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-y-4{row-gap:1rem}.space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.-space-y-\\[3px\\]>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(-3px*var(--tw-space-y-reverse));margin-top:calc(-3px*(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-none{overscroll-behavior:none}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-2xl{border-radius:1rem}.rounded-\\[10px\\]{border-radius:10px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:1.5rem}.rounded-\\[8px\\]{border-radius:8px}.border{border-width:1px}.border-2{border-width:2px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-l{border-left-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-sky-blue-400\\/40{border-color:rgba(59,208,242,.4)}.border-sky-blue-400\\/30{border-color:rgba(59,208,242,.3)}.border-mint-400\\/30{border-color:rgba(30,226,175,.3)}.border-gold-400\\/30{border-color:rgba(255,212,77,.3)}.border-transparent{border-color:transparent}.border-l-sky-blue-400{--tw-border-opacity:1;border-left-color:rgb(59 208 242/var(--tw-border-opacity))}.border-l-mint-400{--tw-border-opacity:1;border-left-color:rgb(30 226 175/var(--tw-border-opacity))}.border-l-gold-400{--tw-border-opacity:1;border-left-color:rgb(255 212 77/var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-sky-blue-400\\/20{background-color:rgba(59,208,242,.2)}.bg-mint-100{--tw-bg-opacity:1;background-color:rgb(208 251 240/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-gold-100{--tw-bg-opacity:1;background-color:rgb(255 248 214/var(--tw-bg-opacity))}.bg-mint-400\\/20{background-color:rgba(30,226,175,.2)}.bg-transparent{background-color:transparent}.bg-dark-blue-400{--tw-bg-opacity:1;background-color:rgb(35 42 58/var(--tw-bg-opacity))}.bg-slate-50\\/60{background-color:rgba(248,250,252,.6)}.bg-gold-400\\/15{background-color:rgba(255,212,77,.15)}.bg-white\\/90{background-color:hsla(0,0%,100%,.9)}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-sky-blue-400\\/15{background-color:rgba(59,208,242,.15)}.bg-mint-400\\/15{background-color:rgba(30,226,175,.15)}.bg-sky-blue-400\\/25{background-color:rgba(59,208,242,.25)}.bg-mint-400\\/25{background-color:rgba(30,226,175,.25)}.bg-gold-400\\/25{background-color:rgba(255,212,77,.25)}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-sky-blue-400{--tw-gradient-from:#3bd0f2;--tw-gradient-to:rgba(59,208,242,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-mint-400{--tw-gradient-from:#1ee2af;--tw-gradient-to:rgba(30,226,175,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-gold-400{--tw-gradient-from:#ffd44d;--tw-gradient-to:rgba(255,212,77,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-dark-blue-600{--tw-gradient-from:#0a0f2e;--tw-gradient-to:rgba(10,15,46,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-sky-blue-400\\/15{--tw-gradient-from:rgba(59,208,242,.15);--tw-gradient-to:rgba(59,208,242,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-dark-blue-400{--tw-gradient-to:rgba(35,42,58,0);--tw-gradient-stops:var(--tw-gradient-from),#232a3a,var(--tw-gradient-to)}.to-dark-blue-400{--tw-gradient-to:#232a3a}.to-\\[\\#f5c300\\]{--tw-gradient-to:#f5c300}.to-sky-blue-400{--tw-gradient-to:#3bd0f2}.to-mint-400\\/15{--tw-gradient-to:rgba(30,226,175,.15)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-4{padding:1rem}.p-8{padding:2rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-3{padding:.75rem}.p-2\\.5{padding:.625rem}.p-2{padding:.5rem}.px-\\[22px\\]{padding-left:22px;padding-right:22px}.py-\\[18px\\]{padding-bottom:18px;padding-top:18px}.px-4{padding-left:1rem;padding-right:1rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3\\.5{padding-left:.875rem;padding-right:.875rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}.py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.py-4{padding-bottom:1rem;padding-top:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pl-9{padding-left:2.25rem}.pr-4{padding-right:1rem}.pl-10{padding-left:2.5rem}.pb-2{padding-bottom:.5rem}.pr-1{padding-right:.25rem}.pl-4{padding-left:1rem}.pt-0\\.5{padding-top:.125rem}.pt-0{padding-top:0}.pb-12{padding-bottom:3rem}.pl-2\\.5{padding-left:.625rem}.pl-2{padding-left:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-proxima{font-family:ProximaNova}.text-\\[15\\.5px\\]{font-size:15.5px}.text-xs{font-size:.75rem;line-height:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-\\[10px\\]{font-size:10px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-\\[10\\.5px\\]{font-size:10.5px}.text-\\[11px\\]{font-size:11px}.text-\\[28px\\]{font-size:28px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-base{font-size:1rem;line-height:1.5rem}.text-\\[11\\.5px\\]{font-size:11.5px}.text-3xl{font-size:1.875rem;line-height:2.25rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-black{font-weight:900}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-dark-blue-400{--tw-text-opacity:1;color:rgb(35 42 58/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-sky-blue-400{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-mint-400{--tw-text-opacity:1;color:rgb(30 226 175/var(--tw-text-opacity))}.text-white\\/70{color:hsla(0,0%,100%,.7)}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-gold-400{--tw-text-opacity:1;color:rgb(255 212 77/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\],.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\]{--tw-shadow:0 3px 12px rgba(255,212,77,.35);--tw-shadow-colored:0 3px 12px var(--tw-shadow-color)}.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{--tw-shadow:0 2px 10px rgba(30,226,175,.15);--tw-shadow-colored:0 2px 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.line-clamp-2{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;overflow:hidden}*,:after,:before{border-style:solid;border-width:0}button{background-color:transparent;background-image:none;color:inherit;cursor:pointer;font:inherit;margin:0;padding:0;text-transform:none}.placeholder\\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.placeholder\\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.first\\:ml-0:first-child{margin-left:0}.hover\\:scale-\\[1\\.02\\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.hover\\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\\:text-sky-blue-400:hover{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.hover\\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.hover\\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\\:border-sky-blue-400:focus{--tw-border-opacity:1;border-color:rgb(59 208 242/var(--tw-border-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\\:opacity-50:disabled{opacity:.5}.disabled\\:opacity-40:disabled{opacity:.4}@media (min-width:640px){.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:768px){.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}";
|
|
64
64
|
styleInject(css_248z);
|
|
65
65
|
|
|
66
66
|
function UserButton({ image, name, email }) {
|
|
@@ -144,25 +144,25 @@ function LinksGroup({ icon: Icon, href, label, accent = "cyan", initiallyOpened,
|
|
|
144
144
|
), hasLinks && opened && /* @__PURE__ */ React__namespace.createElement("div", { className: "ml-[29px] mt-0.5 flex flex-col gap-0.5 border-l border-slate-100 pl-2.5" }, items));
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
var __defProp$
|
|
148
|
-
var __defProps$
|
|
149
|
-
var __getOwnPropDescs$
|
|
150
|
-
var __getOwnPropSymbols$
|
|
151
|
-
var __hasOwnProp$
|
|
152
|
-
var __propIsEnum$
|
|
153
|
-
var __defNormalProp$
|
|
154
|
-
var __spreadValues$
|
|
147
|
+
var __defProp$j = Object.defineProperty;
|
|
148
|
+
var __defProps$g = Object.defineProperties;
|
|
149
|
+
var __getOwnPropDescs$g = Object.getOwnPropertyDescriptors;
|
|
150
|
+
var __getOwnPropSymbols$j = Object.getOwnPropertySymbols;
|
|
151
|
+
var __hasOwnProp$j = Object.prototype.hasOwnProperty;
|
|
152
|
+
var __propIsEnum$j = Object.prototype.propertyIsEnumerable;
|
|
153
|
+
var __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
154
|
+
var __spreadValues$j = (a, b) => {
|
|
155
155
|
for (var prop in b || (b = {}))
|
|
156
|
-
if (__hasOwnProp$
|
|
157
|
-
__defNormalProp$
|
|
158
|
-
if (__getOwnPropSymbols$
|
|
159
|
-
for (var prop of __getOwnPropSymbols$
|
|
160
|
-
if (__propIsEnum$
|
|
161
|
-
__defNormalProp$
|
|
156
|
+
if (__hasOwnProp$j.call(b, prop))
|
|
157
|
+
__defNormalProp$j(a, prop, b[prop]);
|
|
158
|
+
if (__getOwnPropSymbols$j)
|
|
159
|
+
for (var prop of __getOwnPropSymbols$j(b)) {
|
|
160
|
+
if (__propIsEnum$j.call(b, prop))
|
|
161
|
+
__defNormalProp$j(a, prop, b[prop]);
|
|
162
162
|
}
|
|
163
163
|
return a;
|
|
164
164
|
};
|
|
165
|
-
var __spreadProps$
|
|
165
|
+
var __spreadProps$g = (a, b) => __defProps$g(a, __getOwnPropDescs$g(b));
|
|
166
166
|
const data = [
|
|
167
167
|
{ label: "Home", icon: icons.IconHome2, accent: "cyan" },
|
|
168
168
|
{ label: "Dashboard", icon: icons.IconGauge, accent: "mint" },
|
|
@@ -171,6 +171,8 @@ const data = [
|
|
|
171
171
|
{ label: "Badges", icon: icons.IconAlbum, accent: "mint" },
|
|
172
172
|
{ label: "Lessons", icon: icons.IconLambda, accent: "gold" },
|
|
173
173
|
{ label: "File Locker", icon: icons.IconClipboard, accent: "cyan" },
|
|
174
|
+
{ label: "Comments", icon: icons.IconMessageCircle, accent: "mint" },
|
|
175
|
+
{ label: "Validation", icon: icons.IconClipboardCheck, accent: "gold" },
|
|
174
176
|
{ label: "Organization", icon: icons.IconBuilding, accent: "gold", links: [{ label: "Overview" }, { label: "People" }] }
|
|
175
177
|
];
|
|
176
178
|
const TRIAL_PAGES = [
|
|
@@ -189,12 +191,12 @@ function Navbar(props) {
|
|
|
189
191
|
}
|
|
190
192
|
return /* @__PURE__ */ React__namespace.createElement(
|
|
191
193
|
LinksGroup,
|
|
192
|
-
__spreadProps$
|
|
194
|
+
__spreadProps$g(__spreadValues$j(__spreadValues$j({
|
|
193
195
|
key: item.label,
|
|
194
196
|
active: props.active
|
|
195
197
|
}, item), context), {
|
|
196
198
|
links: (item.links || []).map((link) => {
|
|
197
|
-
return __spreadValues$
|
|
199
|
+
return __spreadValues$j(__spreadValues$j({}, link), props.links[`${item.label}/${link.label}`] || { notifications: 0, href: "" });
|
|
198
200
|
})
|
|
199
201
|
})
|
|
200
202
|
);
|
|
@@ -520,29 +522,29 @@ function useSortableData(items, config = { key: "", direction: null }) {
|
|
|
520
522
|
return { items: sortedItems, requestSort, sortConfig };
|
|
521
523
|
}
|
|
522
524
|
|
|
523
|
-
var __defProp$
|
|
524
|
-
var __defProps$
|
|
525
|
-
var __getOwnPropDescs$
|
|
526
|
-
var __getOwnPropSymbols$
|
|
527
|
-
var __hasOwnProp$
|
|
528
|
-
var __propIsEnum$
|
|
529
|
-
var __defNormalProp$
|
|
530
|
-
var __spreadValues$
|
|
525
|
+
var __defProp$i = Object.defineProperty;
|
|
526
|
+
var __defProps$f = Object.defineProperties;
|
|
527
|
+
var __getOwnPropDescs$f = Object.getOwnPropertyDescriptors;
|
|
528
|
+
var __getOwnPropSymbols$i = Object.getOwnPropertySymbols;
|
|
529
|
+
var __hasOwnProp$i = Object.prototype.hasOwnProperty;
|
|
530
|
+
var __propIsEnum$i = Object.prototype.propertyIsEnumerable;
|
|
531
|
+
var __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
532
|
+
var __spreadValues$i = (a, b) => {
|
|
531
533
|
for (var prop in b || (b = {}))
|
|
532
|
-
if (__hasOwnProp$
|
|
533
|
-
__defNormalProp$
|
|
534
|
-
if (__getOwnPropSymbols$
|
|
535
|
-
for (var prop of __getOwnPropSymbols$
|
|
536
|
-
if (__propIsEnum$
|
|
537
|
-
__defNormalProp$
|
|
534
|
+
if (__hasOwnProp$i.call(b, prop))
|
|
535
|
+
__defNormalProp$i(a, prop, b[prop]);
|
|
536
|
+
if (__getOwnPropSymbols$i)
|
|
537
|
+
for (var prop of __getOwnPropSymbols$i(b)) {
|
|
538
|
+
if (__propIsEnum$i.call(b, prop))
|
|
539
|
+
__defNormalProp$i(a, prop, b[prop]);
|
|
538
540
|
}
|
|
539
541
|
return a;
|
|
540
542
|
};
|
|
541
|
-
var __spreadProps$
|
|
543
|
+
var __spreadProps$f = (a, b) => __defProps$f(a, __getOwnPropDescs$f(b));
|
|
542
544
|
function Table$k(props) {
|
|
543
545
|
const [expanded, setExpanded] = React__namespace.useState({});
|
|
544
546
|
const preparedItems = React__namespace.useMemo(() => {
|
|
545
|
-
return props.items.map((item) => __spreadProps$
|
|
547
|
+
return props.items.map((item) => __spreadProps$f(__spreadValues$i({}, item), {
|
|
546
548
|
status: item.isComplete ? 1 : 0
|
|
547
549
|
}));
|
|
548
550
|
}, [props.items]);
|
|
@@ -565,7 +567,7 @@ function Table$k(props) {
|
|
|
565
567
|
return /* @__PURE__ */ React__namespace.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React__namespace.createElement(
|
|
566
568
|
"div",
|
|
567
569
|
{
|
|
568
|
-
onClick: () => setExpanded(__spreadProps$
|
|
570
|
+
onClick: () => setExpanded(__spreadProps$f(__spreadValues$i({}, expanded), { [row.userId]: !isOpen })),
|
|
569
571
|
className: "flex cursor-pointer items-center gap-4 p-4"
|
|
570
572
|
},
|
|
571
573
|
/* @__PURE__ */ React__namespace.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-3" }, row.avatar ? /* @__PURE__ */ React__namespace.createElement("img", { src: row.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React__namespace.createElement("div", { className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-mint-400/20 text-xs font-bold text-dark-blue-400" }, initials), /* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-sm font-bold text-dark-blue-400" }, row.name), /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-xs text-slate-400" }, row.email))),
|
|
@@ -600,7 +602,7 @@ function Table$j(props) {
|
|
|
600
602
|
)));
|
|
601
603
|
}
|
|
602
604
|
|
|
603
|
-
const TABS$
|
|
605
|
+
const TABS$5 = [
|
|
604
606
|
{ label: "By lesson", value: "lessons" },
|
|
605
607
|
{ label: "By student", value: "students" }
|
|
606
608
|
];
|
|
@@ -633,7 +635,7 @@ const Badge = (props) => {
|
|
|
633
635
|
},
|
|
634
636
|
/* @__PURE__ */ React__namespace.createElement("option", { value: "" }, "All classes"),
|
|
635
637
|
props.classes.map((c) => /* @__PURE__ */ React__namespace.createElement("option", { key: c.classId, value: c.classId }, c.name))
|
|
636
|
-
)), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, !props.trial && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$
|
|
638
|
+
)), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, !props.trial && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$5.map((t) => /* @__PURE__ */ React__namespace.createElement(
|
|
637
639
|
"button",
|
|
638
640
|
{
|
|
639
641
|
key: t.value,
|
|
@@ -754,28 +756,28 @@ function relativeTimeFromElapsed(elapsed) {
|
|
|
754
756
|
return "";
|
|
755
757
|
}
|
|
756
758
|
|
|
757
|
-
var __defProp$
|
|
758
|
-
var __defProps$
|
|
759
|
-
var __getOwnPropDescs$
|
|
760
|
-
var __getOwnPropSymbols$
|
|
761
|
-
var __hasOwnProp$
|
|
762
|
-
var __propIsEnum$
|
|
763
|
-
var __defNormalProp$
|
|
764
|
-
var __spreadValues$
|
|
759
|
+
var __defProp$h = Object.defineProperty;
|
|
760
|
+
var __defProps$e = Object.defineProperties;
|
|
761
|
+
var __getOwnPropDescs$e = Object.getOwnPropertyDescriptors;
|
|
762
|
+
var __getOwnPropSymbols$h = Object.getOwnPropertySymbols;
|
|
763
|
+
var __hasOwnProp$h = Object.prototype.hasOwnProperty;
|
|
764
|
+
var __propIsEnum$h = Object.prototype.propertyIsEnumerable;
|
|
765
|
+
var __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
766
|
+
var __spreadValues$h = (a, b) => {
|
|
765
767
|
for (var prop in b || (b = {}))
|
|
766
|
-
if (__hasOwnProp$
|
|
767
|
-
__defNormalProp$
|
|
768
|
-
if (__getOwnPropSymbols$
|
|
769
|
-
for (var prop of __getOwnPropSymbols$
|
|
770
|
-
if (__propIsEnum$
|
|
771
|
-
__defNormalProp$
|
|
768
|
+
if (__hasOwnProp$h.call(b, prop))
|
|
769
|
+
__defNormalProp$h(a, prop, b[prop]);
|
|
770
|
+
if (__getOwnPropSymbols$h)
|
|
771
|
+
for (var prop of __getOwnPropSymbols$h(b)) {
|
|
772
|
+
if (__propIsEnum$h.call(b, prop))
|
|
773
|
+
__defNormalProp$h(a, prop, b[prop]);
|
|
772
774
|
}
|
|
773
775
|
return a;
|
|
774
776
|
};
|
|
775
|
-
var __spreadProps$
|
|
777
|
+
var __spreadProps$e = (a, b) => __defProps$e(a, __getOwnPropDescs$e(b));
|
|
776
778
|
function Table$g(props) {
|
|
777
779
|
const preparedItems = React__namespace.useMemo(() => {
|
|
778
|
-
return props.items.map((item) => __spreadProps$
|
|
780
|
+
return props.items.map((item) => __spreadProps$e(__spreadValues$h({}, item), {
|
|
779
781
|
updatedAtDate: new Date(item.updatedAt)
|
|
780
782
|
}));
|
|
781
783
|
}, [props.items]);
|
|
@@ -894,7 +896,7 @@ function Table$d(props) {
|
|
|
894
896
|
)));
|
|
895
897
|
}
|
|
896
898
|
|
|
897
|
-
const TABS$
|
|
899
|
+
const TABS$4 = [
|
|
898
900
|
{ label: "My students", value: "students" },
|
|
899
901
|
{ label: "Impact statements", value: "impact" },
|
|
900
902
|
{ label: "Reflections", value: "reflections" },
|
|
@@ -930,7 +932,7 @@ const Dashboard = (props) => {
|
|
|
930
932
|
},
|
|
931
933
|
/* @__PURE__ */ React__namespace.createElement("option", { value: "" }, "All classes"),
|
|
932
934
|
props.classes.map((c) => /* @__PURE__ */ React__namespace.createElement("option", { key: c.classId, value: c.classId }, c.name))
|
|
933
|
-
)), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-fit flex-wrap gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$
|
|
935
|
+
)), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-fit flex-wrap gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$4.map((t) => /* @__PURE__ */ React__namespace.createElement(
|
|
934
936
|
"button",
|
|
935
937
|
{
|
|
936
938
|
key: t.value,
|
|
@@ -974,25 +976,25 @@ const Dashboard = (props) => {
|
|
|
974
976
|
)));
|
|
975
977
|
};
|
|
976
978
|
|
|
977
|
-
var __defProp$
|
|
978
|
-
var __defProps$
|
|
979
|
-
var __getOwnPropDescs$
|
|
980
|
-
var __getOwnPropSymbols$
|
|
981
|
-
var __hasOwnProp$
|
|
982
|
-
var __propIsEnum$
|
|
983
|
-
var __defNormalProp$
|
|
984
|
-
var __spreadValues$
|
|
979
|
+
var __defProp$g = Object.defineProperty;
|
|
980
|
+
var __defProps$d = Object.defineProperties;
|
|
981
|
+
var __getOwnPropDescs$d = Object.getOwnPropertyDescriptors;
|
|
982
|
+
var __getOwnPropSymbols$g = Object.getOwnPropertySymbols;
|
|
983
|
+
var __hasOwnProp$g = Object.prototype.hasOwnProperty;
|
|
984
|
+
var __propIsEnum$g = Object.prototype.propertyIsEnumerable;
|
|
985
|
+
var __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
986
|
+
var __spreadValues$g = (a, b) => {
|
|
985
987
|
for (var prop in b || (b = {}))
|
|
986
|
-
if (__hasOwnProp$
|
|
987
|
-
__defNormalProp$
|
|
988
|
-
if (__getOwnPropSymbols$
|
|
989
|
-
for (var prop of __getOwnPropSymbols$
|
|
990
|
-
if (__propIsEnum$
|
|
991
|
-
__defNormalProp$
|
|
988
|
+
if (__hasOwnProp$g.call(b, prop))
|
|
989
|
+
__defNormalProp$g(a, prop, b[prop]);
|
|
990
|
+
if (__getOwnPropSymbols$g)
|
|
991
|
+
for (var prop of __getOwnPropSymbols$g(b)) {
|
|
992
|
+
if (__propIsEnum$g.call(b, prop))
|
|
993
|
+
__defNormalProp$g(a, prop, b[prop]);
|
|
992
994
|
}
|
|
993
995
|
return a;
|
|
994
996
|
};
|
|
995
|
-
var __spreadProps$
|
|
997
|
+
var __spreadProps$d = (a, b) => __defProps$d(a, __getOwnPropDescs$d(b));
|
|
996
998
|
const openDeleteModal$2 = (student, onDelete) => modals.openConfirmModal({
|
|
997
999
|
title: `Remove "${student.givenName && student.familyName ? `${student.givenName} ${student.familyName}` : student.email}" from this class?`,
|
|
998
1000
|
centered: true,
|
|
@@ -1003,7 +1005,7 @@ const openDeleteModal$2 = (student, onDelete) => modals.openConfirmModal({
|
|
|
1003
1005
|
});
|
|
1004
1006
|
function Table$c(props) {
|
|
1005
1007
|
const preparedItems = React__namespace.useMemo(() => {
|
|
1006
|
-
return props.items.map((item) => __spreadProps$
|
|
1008
|
+
return props.items.map((item) => __spreadProps$d(__spreadValues$g({}, item), {
|
|
1007
1009
|
fullName: item.givenName && item.familyName ? `${item.givenName} ${item.familyName}`.toLowerCase() : item.email.toLowerCase()
|
|
1008
1010
|
}));
|
|
1009
1011
|
}, [props.items]);
|
|
@@ -1053,25 +1055,25 @@ function Table$c(props) {
|
|
|
1053
1055
|
}));
|
|
1054
1056
|
}
|
|
1055
1057
|
|
|
1056
|
-
var __defProp$
|
|
1057
|
-
var __defProps$
|
|
1058
|
-
var __getOwnPropDescs$
|
|
1059
|
-
var __getOwnPropSymbols$
|
|
1060
|
-
var __hasOwnProp$
|
|
1061
|
-
var __propIsEnum$
|
|
1062
|
-
var __defNormalProp$
|
|
1063
|
-
var __spreadValues$
|
|
1058
|
+
var __defProp$f = Object.defineProperty;
|
|
1059
|
+
var __defProps$c = Object.defineProperties;
|
|
1060
|
+
var __getOwnPropDescs$c = Object.getOwnPropertyDescriptors;
|
|
1061
|
+
var __getOwnPropSymbols$f = Object.getOwnPropertySymbols;
|
|
1062
|
+
var __hasOwnProp$f = Object.prototype.hasOwnProperty;
|
|
1063
|
+
var __propIsEnum$f = Object.prototype.propertyIsEnumerable;
|
|
1064
|
+
var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1065
|
+
var __spreadValues$f = (a, b) => {
|
|
1064
1066
|
for (var prop in b || (b = {}))
|
|
1065
|
-
if (__hasOwnProp$
|
|
1066
|
-
__defNormalProp$
|
|
1067
|
-
if (__getOwnPropSymbols$
|
|
1068
|
-
for (var prop of __getOwnPropSymbols$
|
|
1069
|
-
if (__propIsEnum$
|
|
1070
|
-
__defNormalProp$
|
|
1067
|
+
if (__hasOwnProp$f.call(b, prop))
|
|
1068
|
+
__defNormalProp$f(a, prop, b[prop]);
|
|
1069
|
+
if (__getOwnPropSymbols$f)
|
|
1070
|
+
for (var prop of __getOwnPropSymbols$f(b)) {
|
|
1071
|
+
if (__propIsEnum$f.call(b, prop))
|
|
1072
|
+
__defNormalProp$f(a, prop, b[prop]);
|
|
1071
1073
|
}
|
|
1072
1074
|
return a;
|
|
1073
1075
|
};
|
|
1074
|
-
var __spreadProps$
|
|
1076
|
+
var __spreadProps$c = (a, b) => __defProps$c(a, __getOwnPropDescs$c(b));
|
|
1075
1077
|
const Class = (props) => {
|
|
1076
1078
|
const [opened, setOpened] = React.useState(false);
|
|
1077
1079
|
return /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__PURE__ */ React__namespace.createElement(
|
|
@@ -1083,7 +1085,7 @@ const Class = (props) => {
|
|
|
1083
1085
|
padding: "xl",
|
|
1084
1086
|
size: "xl"
|
|
1085
1087
|
},
|
|
1086
|
-
/* @__PURE__ */ React__namespace.createElement(DropzoneButton$1, __spreadProps$
|
|
1088
|
+
/* @__PURE__ */ React__namespace.createElement(DropzoneButton$1, __spreadProps$c(__spreadValues$f({}, props), { close: () => setOpened(false) }))
|
|
1087
1089
|
), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-wrap items-start justify-between gap-4" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React__namespace.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__namespace.createElement(icons.IconArrowLeft, { size: 13, stroke: 2.5 }), "Back"), /* @__PURE__ */ React__namespace.createElement("h1", { className: "text-2xl font-extrabold tracking-tight text-dark-blue-400" }, props.displayName || "Class"), /* @__PURE__ */ React__namespace.createElement("p", { className: "text-sm text-slate-500" }, props.description || "No description")), !props.loading && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React__namespace.createElement(
|
|
1088
1090
|
"button",
|
|
1089
1091
|
{
|
|
@@ -1217,20 +1219,20 @@ const DropzoneButton$1 = (props) => {
|
|
|
1217
1219
|
props.onCreateMembers && props.onCreateMembers([values]);
|
|
1218
1220
|
}) }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement(
|
|
1219
1221
|
core.TextInput,
|
|
1220
|
-
__spreadValues$
|
|
1222
|
+
__spreadValues$f({
|
|
1221
1223
|
withAsterisk: true,
|
|
1222
1224
|
label: "Email",
|
|
1223
1225
|
placeholder: "Email"
|
|
1224
1226
|
}, form$1.getInputProps("email"))
|
|
1225
1227
|
), /* @__PURE__ */ React__namespace.createElement(core.Group, { grow: true }, /* @__PURE__ */ React__namespace.createElement(
|
|
1226
1228
|
core.TextInput,
|
|
1227
|
-
__spreadValues$
|
|
1229
|
+
__spreadValues$f({
|
|
1228
1230
|
label: "Given name",
|
|
1229
1231
|
placeholder: "Given name"
|
|
1230
1232
|
}, form$1.getInputProps("givenName"))
|
|
1231
1233
|
), /* @__PURE__ */ React__namespace.createElement(
|
|
1232
1234
|
core.TextInput,
|
|
1233
|
-
__spreadValues$
|
|
1235
|
+
__spreadValues$f({
|
|
1234
1236
|
label: "Family name",
|
|
1235
1237
|
placeholder: "Family name"
|
|
1236
1238
|
}, form$1.getInputProps("familyName"))
|
|
@@ -1286,19 +1288,19 @@ function Table$b(props) {
|
|
|
1286
1288
|
)));
|
|
1287
1289
|
}
|
|
1288
1290
|
|
|
1289
|
-
var __defProp$
|
|
1290
|
-
var __getOwnPropSymbols$
|
|
1291
|
-
var __hasOwnProp$
|
|
1292
|
-
var __propIsEnum$
|
|
1293
|
-
var __defNormalProp$
|
|
1294
|
-
var __spreadValues$
|
|
1291
|
+
var __defProp$e = Object.defineProperty;
|
|
1292
|
+
var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
|
|
1293
|
+
var __hasOwnProp$e = Object.prototype.hasOwnProperty;
|
|
1294
|
+
var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
|
|
1295
|
+
var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1296
|
+
var __spreadValues$e = (a, b) => {
|
|
1295
1297
|
for (var prop in b || (b = {}))
|
|
1296
|
-
if (__hasOwnProp$
|
|
1297
|
-
__defNormalProp$
|
|
1298
|
-
if (__getOwnPropSymbols$
|
|
1299
|
-
for (var prop of __getOwnPropSymbols$
|
|
1300
|
-
if (__propIsEnum$
|
|
1301
|
-
__defNormalProp$
|
|
1298
|
+
if (__hasOwnProp$e.call(b, prop))
|
|
1299
|
+
__defNormalProp$e(a, prop, b[prop]);
|
|
1300
|
+
if (__getOwnPropSymbols$e)
|
|
1301
|
+
for (var prop of __getOwnPropSymbols$e(b)) {
|
|
1302
|
+
if (__propIsEnum$e.call(b, prop))
|
|
1303
|
+
__defNormalProp$e(a, prop, b[prop]);
|
|
1302
1304
|
}
|
|
1303
1305
|
return a;
|
|
1304
1306
|
};
|
|
@@ -1332,14 +1334,14 @@ const Classes = (props) => {
|
|
|
1332
1334
|
props.onCreateClass && props.onCreateClass(values);
|
|
1333
1335
|
}) }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement(
|
|
1334
1336
|
core.TextInput,
|
|
1335
|
-
__spreadValues$
|
|
1337
|
+
__spreadValues$e({
|
|
1336
1338
|
withAsterisk: true,
|
|
1337
1339
|
label: "Name",
|
|
1338
1340
|
placeholder: "Class name"
|
|
1339
1341
|
}, form$1.getInputProps("name"))
|
|
1340
1342
|
), /* @__PURE__ */ React__namespace.createElement(
|
|
1341
1343
|
core.TextInput,
|
|
1342
|
-
__spreadValues$
|
|
1344
|
+
__spreadValues$e({
|
|
1343
1345
|
label: "Description",
|
|
1344
1346
|
placeholder: "A class for my first period English students"
|
|
1345
1347
|
}, form$1.getInputProps("description"))
|
|
@@ -1463,7 +1465,7 @@ function Table$8(props) {
|
|
|
1463
1465
|
)));
|
|
1464
1466
|
}
|
|
1465
1467
|
|
|
1466
|
-
const TABS$
|
|
1468
|
+
const TABS$3 = [
|
|
1467
1469
|
{ label: "My badges", value: "badges" },
|
|
1468
1470
|
{ label: "My answers", value: "answers" },
|
|
1469
1471
|
{ label: "My reflections", value: "reflections" }
|
|
@@ -1485,7 +1487,7 @@ const Student = (props) => {
|
|
|
1485
1487
|
title: "BADGE COMPLETION",
|
|
1486
1488
|
value: numberOfBadgesCompleted
|
|
1487
1489
|
}
|
|
1488
|
-
] }), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$
|
|
1490
|
+
] }), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$3.map((t) => /* @__PURE__ */ React__namespace.createElement(
|
|
1489
1491
|
"button",
|
|
1490
1492
|
{
|
|
1491
1493
|
key: t.value,
|
|
@@ -1647,29 +1649,29 @@ function Stack$3(props) {
|
|
|
1647
1649
|
return /* @__PURE__ */ React__namespace.createElement(reactRouterDom.Link, { to: props.href, className: "flex flex-col gap-4 no-underline" }, props.items.map((row) => /* @__PURE__ */ React__namespace.createElement("div", { key: row.questionName }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-sm font-bold text-dark-blue-400" }, row.questionName), /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-1 text-sm text-slate-600" }, row.answer.join(", ") || "No answer."))));
|
|
1648
1650
|
}
|
|
1649
1651
|
|
|
1650
|
-
var __defProp$
|
|
1651
|
-
var __defProps$
|
|
1652
|
-
var __getOwnPropDescs$
|
|
1653
|
-
var __getOwnPropSymbols$
|
|
1654
|
-
var __hasOwnProp$
|
|
1655
|
-
var __propIsEnum$
|
|
1656
|
-
var __defNormalProp$
|
|
1657
|
-
var __spreadValues$
|
|
1652
|
+
var __defProp$d = Object.defineProperty;
|
|
1653
|
+
var __defProps$b = Object.defineProperties;
|
|
1654
|
+
var __getOwnPropDescs$b = Object.getOwnPropertyDescriptors;
|
|
1655
|
+
var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
|
|
1656
|
+
var __hasOwnProp$d = Object.prototype.hasOwnProperty;
|
|
1657
|
+
var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
|
|
1658
|
+
var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1659
|
+
var __spreadValues$d = (a, b) => {
|
|
1658
1660
|
for (var prop in b || (b = {}))
|
|
1659
|
-
if (__hasOwnProp$
|
|
1660
|
-
__defNormalProp$
|
|
1661
|
-
if (__getOwnPropSymbols$
|
|
1662
|
-
for (var prop of __getOwnPropSymbols$
|
|
1663
|
-
if (__propIsEnum$
|
|
1664
|
-
__defNormalProp$
|
|
1661
|
+
if (__hasOwnProp$d.call(b, prop))
|
|
1662
|
+
__defNormalProp$d(a, prop, b[prop]);
|
|
1663
|
+
if (__getOwnPropSymbols$d)
|
|
1664
|
+
for (var prop of __getOwnPropSymbols$d(b)) {
|
|
1665
|
+
if (__propIsEnum$d.call(b, prop))
|
|
1666
|
+
__defNormalProp$d(a, prop, b[prop]);
|
|
1665
1667
|
}
|
|
1666
1668
|
return a;
|
|
1667
1669
|
};
|
|
1668
|
-
var __spreadProps$
|
|
1670
|
+
var __spreadProps$b = (a, b) => __defProps$b(a, __getOwnPropDescs$b(b));
|
|
1669
1671
|
function Table$6(props) {
|
|
1670
1672
|
const [expanded, setExpanded] = React__namespace.useState({});
|
|
1671
1673
|
const preparedItems = React__namespace.useMemo(() => {
|
|
1672
|
-
return props.items.map((item) => __spreadProps$
|
|
1674
|
+
return props.items.map((item) => __spreadProps$b(__spreadValues$d({}, item), {
|
|
1673
1675
|
status: item.isComplete ? 2 : item.isStarted ? 1 : 0
|
|
1674
1676
|
}));
|
|
1675
1677
|
}, [props.items]);
|
|
@@ -1692,7 +1694,7 @@ function Table$6(props) {
|
|
|
1692
1694
|
return /* @__PURE__ */ React__namespace.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React__namespace.createElement(
|
|
1693
1695
|
"div",
|
|
1694
1696
|
{
|
|
1695
|
-
onClick: () => setExpanded(__spreadProps$
|
|
1697
|
+
onClick: () => setExpanded(__spreadProps$b(__spreadValues$d({}, expanded), { [row.userId]: !isOpen })),
|
|
1696
1698
|
className: "flex cursor-pointer items-center gap-4 p-4"
|
|
1697
1699
|
},
|
|
1698
1700
|
/* @__PURE__ */ React__namespace.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-3" }, row.avatar ? /* @__PURE__ */ React__namespace.createElement("img", { src: row.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React__namespace.createElement("div", { className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-mint-400/20 text-xs font-bold text-dark-blue-400" }, initials), /* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-sm font-bold text-dark-blue-400" }, row.name), /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-xs text-slate-400" }, row.email))),
|
|
@@ -1932,25 +1934,25 @@ const SplitButton$2 = (props) => {
|
|
|
1932
1934
|
));
|
|
1933
1935
|
};
|
|
1934
1936
|
|
|
1935
|
-
var __defProp$
|
|
1936
|
-
var __defProps$
|
|
1937
|
-
var __getOwnPropDescs$
|
|
1938
|
-
var __getOwnPropSymbols$
|
|
1939
|
-
var __hasOwnProp$
|
|
1940
|
-
var __propIsEnum$
|
|
1941
|
-
var __defNormalProp$
|
|
1942
|
-
var __spreadValues$
|
|
1937
|
+
var __defProp$c = Object.defineProperty;
|
|
1938
|
+
var __defProps$a = Object.defineProperties;
|
|
1939
|
+
var __getOwnPropDescs$a = Object.getOwnPropertyDescriptors;
|
|
1940
|
+
var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
|
|
1941
|
+
var __hasOwnProp$c = Object.prototype.hasOwnProperty;
|
|
1942
|
+
var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
|
|
1943
|
+
var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1944
|
+
var __spreadValues$c = (a, b) => {
|
|
1943
1945
|
for (var prop in b || (b = {}))
|
|
1944
|
-
if (__hasOwnProp$
|
|
1945
|
-
__defNormalProp$
|
|
1946
|
-
if (__getOwnPropSymbols$
|
|
1947
|
-
for (var prop of __getOwnPropSymbols$
|
|
1948
|
-
if (__propIsEnum$
|
|
1949
|
-
__defNormalProp$
|
|
1946
|
+
if (__hasOwnProp$c.call(b, prop))
|
|
1947
|
+
__defNormalProp$c(a, prop, b[prop]);
|
|
1948
|
+
if (__getOwnPropSymbols$c)
|
|
1949
|
+
for (var prop of __getOwnPropSymbols$c(b)) {
|
|
1950
|
+
if (__propIsEnum$c.call(b, prop))
|
|
1951
|
+
__defNormalProp$c(a, prop, b[prop]);
|
|
1950
1952
|
}
|
|
1951
1953
|
return a;
|
|
1952
1954
|
};
|
|
1953
|
-
var __spreadProps$
|
|
1955
|
+
var __spreadProps$a = (a, b) => __defProps$a(a, __getOwnPropDescs$a(b));
|
|
1954
1956
|
const openDeleteModal = (person, onDelete) => modals.openConfirmModal({
|
|
1955
1957
|
title: `Remove "${person.givenName && person.familyName ? `${person.givenName} ${person.familyName}` : person.email}" from your organization?`,
|
|
1956
1958
|
centered: true,
|
|
@@ -1961,7 +1963,7 @@ const openDeleteModal = (person, onDelete) => modals.openConfirmModal({
|
|
|
1961
1963
|
});
|
|
1962
1964
|
function Table$4(props) {
|
|
1963
1965
|
const preparedItems = React__namespace.useMemo(() => {
|
|
1964
|
-
return props.items.map((item) => __spreadProps$
|
|
1966
|
+
return props.items.map((item) => __spreadProps$a(__spreadValues$c({}, item), {
|
|
1965
1967
|
fullName: item.givenName && item.familyName ? `${item.givenName} ${item.familyName}`.toLowerCase() : item.email.toLowerCase(),
|
|
1966
1968
|
roleRank: item.isAdmin ? 2 : item.isGroupAdmin ? 1 : 0
|
|
1967
1969
|
}));
|
|
@@ -2020,25 +2022,25 @@ function Table$4(props) {
|
|
|
2020
2022
|
}));
|
|
2021
2023
|
}
|
|
2022
2024
|
|
|
2023
|
-
var __defProp$
|
|
2024
|
-
var __defProps$
|
|
2025
|
-
var __getOwnPropDescs$
|
|
2026
|
-
var __getOwnPropSymbols$
|
|
2027
|
-
var __hasOwnProp$
|
|
2028
|
-
var __propIsEnum$
|
|
2029
|
-
var __defNormalProp$
|
|
2030
|
-
var __spreadValues$
|
|
2025
|
+
var __defProp$b = Object.defineProperty;
|
|
2026
|
+
var __defProps$9 = Object.defineProperties;
|
|
2027
|
+
var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
|
|
2028
|
+
var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
|
|
2029
|
+
var __hasOwnProp$b = Object.prototype.hasOwnProperty;
|
|
2030
|
+
var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
|
|
2031
|
+
var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2032
|
+
var __spreadValues$b = (a, b) => {
|
|
2031
2033
|
for (var prop in b || (b = {}))
|
|
2032
|
-
if (__hasOwnProp$
|
|
2033
|
-
__defNormalProp$
|
|
2034
|
-
if (__getOwnPropSymbols$
|
|
2035
|
-
for (var prop of __getOwnPropSymbols$
|
|
2036
|
-
if (__propIsEnum$
|
|
2037
|
-
__defNormalProp$
|
|
2038
|
-
}
|
|
2039
|
-
return a;
|
|
2040
|
-
};
|
|
2041
|
-
var __spreadProps$
|
|
2034
|
+
if (__hasOwnProp$b.call(b, prop))
|
|
2035
|
+
__defNormalProp$b(a, prop, b[prop]);
|
|
2036
|
+
if (__getOwnPropSymbols$b)
|
|
2037
|
+
for (var prop of __getOwnPropSymbols$b(b)) {
|
|
2038
|
+
if (__propIsEnum$b.call(b, prop))
|
|
2039
|
+
__defNormalProp$b(a, prop, b[prop]);
|
|
2040
|
+
}
|
|
2041
|
+
return a;
|
|
2042
|
+
};
|
|
2043
|
+
var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
|
|
2042
2044
|
const People = (props) => {
|
|
2043
2045
|
const form$1 = form.useForm({
|
|
2044
2046
|
initialValues: {
|
|
@@ -2070,27 +2072,27 @@ const People = (props) => {
|
|
|
2070
2072
|
padding: "xl",
|
|
2071
2073
|
size: "xl"
|
|
2072
2074
|
},
|
|
2073
|
-
/* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React__namespace.createElement(DropzoneButton, __spreadProps$
|
|
2075
|
+
/* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React__namespace.createElement(DropzoneButton, __spreadProps$9(__spreadValues$b({}, props), { close: () => setOpened(false) })), /* @__PURE__ */ React__namespace.createElement(core.Divider, { label: "or", labelPosition: "center", my: "md", variant: "dashed" }), /* @__PURE__ */ React__namespace.createElement("form", { onSubmit: form$1.onSubmit(() => {
|
|
2074
2076
|
const values = form$1.values;
|
|
2075
2077
|
form$1.reset();
|
|
2076
2078
|
setOpened(false);
|
|
2077
2079
|
props.onCreateUsers && props.onCreateUsers([values]);
|
|
2078
2080
|
}) }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement(
|
|
2079
2081
|
core.TextInput,
|
|
2080
|
-
__spreadValues$
|
|
2082
|
+
__spreadValues$b({
|
|
2081
2083
|
withAsterisk: true,
|
|
2082
2084
|
label: "Email",
|
|
2083
2085
|
placeholder: "Email"
|
|
2084
2086
|
}, form$1.getInputProps("email"))
|
|
2085
2087
|
), /* @__PURE__ */ React__namespace.createElement(core.Group, { grow: true }, /* @__PURE__ */ React__namespace.createElement(
|
|
2086
2088
|
core.TextInput,
|
|
2087
|
-
__spreadValues$
|
|
2089
|
+
__spreadValues$b({
|
|
2088
2090
|
label: "Given name",
|
|
2089
2091
|
placeholder: "Given name"
|
|
2090
2092
|
}, form$1.getInputProps("givenName"))
|
|
2091
2093
|
), /* @__PURE__ */ React__namespace.createElement(
|
|
2092
2094
|
core.TextInput,
|
|
2093
|
-
__spreadValues$
|
|
2095
|
+
__spreadValues$b({
|
|
2094
2096
|
label: "Family name",
|
|
2095
2097
|
placeholder: "Family name"
|
|
2096
2098
|
}, form$1.getInputProps("familyName"))
|
|
@@ -2284,24 +2286,24 @@ const StartAnonymousLesson = (props) => {
|
|
|
2284
2286
|
))))));
|
|
2285
2287
|
};
|
|
2286
2288
|
|
|
2287
|
-
var __defProp$
|
|
2288
|
-
var __getOwnPropSymbols$
|
|
2289
|
-
var __hasOwnProp$
|
|
2290
|
-
var __propIsEnum$
|
|
2291
|
-
var __defNormalProp$
|
|
2292
|
-
var __spreadValues$
|
|
2289
|
+
var __defProp$a = Object.defineProperty;
|
|
2290
|
+
var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
|
|
2291
|
+
var __hasOwnProp$a = Object.prototype.hasOwnProperty;
|
|
2292
|
+
var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
|
|
2293
|
+
var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2294
|
+
var __spreadValues$a = (a, b) => {
|
|
2293
2295
|
for (var prop in b || (b = {}))
|
|
2294
|
-
if (__hasOwnProp$
|
|
2295
|
-
__defNormalProp$
|
|
2296
|
-
if (__getOwnPropSymbols$
|
|
2297
|
-
for (var prop of __getOwnPropSymbols$
|
|
2298
|
-
if (__propIsEnum$
|
|
2299
|
-
__defNormalProp$
|
|
2296
|
+
if (__hasOwnProp$a.call(b, prop))
|
|
2297
|
+
__defNormalProp$a(a, prop, b[prop]);
|
|
2298
|
+
if (__getOwnPropSymbols$a)
|
|
2299
|
+
for (var prop of __getOwnPropSymbols$a(b)) {
|
|
2300
|
+
if (__propIsEnum$a.call(b, prop))
|
|
2301
|
+
__defNormalProp$a(a, prop, b[prop]);
|
|
2300
2302
|
}
|
|
2301
2303
|
return a;
|
|
2302
2304
|
};
|
|
2303
2305
|
const BadgeGrid = (props) => {
|
|
2304
|
-
const badges = props.badges.map((b) => /* @__PURE__ */ React__namespace.createElement(TaskCard, __spreadValues$
|
|
2306
|
+
const badges = props.badges.map((b) => /* @__PURE__ */ React__namespace.createElement(TaskCard, __spreadValues$a({ key: b.title }, b)));
|
|
2305
2307
|
return /* @__PURE__ */ React__namespace.createElement(core.SimpleGrid, { cols: 4, breakpoints: [{ maxWidth: "sm", cols: 1 }, { maxWidth: "md", cols: 3 }] }, badges);
|
|
2306
2308
|
};
|
|
2307
2309
|
function TaskCard(props) {
|
|
@@ -2335,30 +2337,30 @@ const UserInfo = (props) => {
|
|
|
2335
2337
|
return /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__PURE__ */ React__namespace.createElement(core.Title, { className: classes.title }, props.name), /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", className: classes.description, mt: "xs" }, props.impactStatement));
|
|
2336
2338
|
};
|
|
2337
2339
|
|
|
2338
|
-
var __defProp$
|
|
2339
|
-
var __getOwnPropSymbols$
|
|
2340
|
-
var __hasOwnProp$
|
|
2341
|
-
var __propIsEnum$
|
|
2342
|
-
var __defNormalProp$
|
|
2343
|
-
var __spreadValues$
|
|
2340
|
+
var __defProp$9 = Object.defineProperty;
|
|
2341
|
+
var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;
|
|
2342
|
+
var __hasOwnProp$9 = Object.prototype.hasOwnProperty;
|
|
2343
|
+
var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;
|
|
2344
|
+
var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2345
|
+
var __spreadValues$9 = (a, b) => {
|
|
2344
2346
|
for (var prop in b || (b = {}))
|
|
2345
|
-
if (__hasOwnProp$
|
|
2346
|
-
__defNormalProp$
|
|
2347
|
-
if (__getOwnPropSymbols$
|
|
2348
|
-
for (var prop of __getOwnPropSymbols$
|
|
2349
|
-
if (__propIsEnum$
|
|
2350
|
-
__defNormalProp$
|
|
2347
|
+
if (__hasOwnProp$9.call(b, prop))
|
|
2348
|
+
__defNormalProp$9(a, prop, b[prop]);
|
|
2349
|
+
if (__getOwnPropSymbols$9)
|
|
2350
|
+
for (var prop of __getOwnPropSymbols$9(b)) {
|
|
2351
|
+
if (__propIsEnum$9.call(b, prop))
|
|
2352
|
+
__defNormalProp$9(a, prop, b[prop]);
|
|
2351
2353
|
}
|
|
2352
2354
|
return a;
|
|
2353
2355
|
};
|
|
2354
2356
|
var __objRest$1 = (source, exclude) => {
|
|
2355
2357
|
var target = {};
|
|
2356
2358
|
for (var prop in source)
|
|
2357
|
-
if (__hasOwnProp$
|
|
2359
|
+
if (__hasOwnProp$9.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
2358
2360
|
target[prop] = source[prop];
|
|
2359
|
-
if (source != null && __getOwnPropSymbols$
|
|
2360
|
-
for (var prop of __getOwnPropSymbols$
|
|
2361
|
-
if (exclude.indexOf(prop) < 0 && __propIsEnum$
|
|
2361
|
+
if (source != null && __getOwnPropSymbols$9)
|
|
2362
|
+
for (var prop of __getOwnPropSymbols$9(source)) {
|
|
2363
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum$9.call(source, prop))
|
|
2362
2364
|
target[prop] = source[prop];
|
|
2363
2365
|
}
|
|
2364
2366
|
return target;
|
|
@@ -2430,9 +2432,9 @@ const TenantBanner = (_a) => {
|
|
|
2430
2432
|
};
|
|
2431
2433
|
return /* @__PURE__ */ React__namespace.createElement(
|
|
2432
2434
|
core.Card,
|
|
2433
|
-
__spreadValues$
|
|
2435
|
+
__spreadValues$9({
|
|
2434
2436
|
radius: "md",
|
|
2435
|
-
style: __spreadValues$
|
|
2437
|
+
style: __spreadValues$9({ backgroundImage: `url(${image})` }, style),
|
|
2436
2438
|
className: cx(classes.card, className)
|
|
2437
2439
|
}, others),
|
|
2438
2440
|
/* @__PURE__ */ React__namespace.createElement(
|
|
@@ -2508,33 +2510,33 @@ const TrialHome = (props) => {
|
|
|
2508
2510
|
)), /* @__PURE__ */ React__namespace.createElement(core.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__namespace.createElement(BadgeGrid, { onAssign: props.onAssign, badges: props.badges })));
|
|
2509
2511
|
};
|
|
2510
2512
|
|
|
2511
|
-
var __defProp$
|
|
2512
|
-
var __defProps$
|
|
2513
|
-
var __getOwnPropDescs$
|
|
2514
|
-
var __getOwnPropSymbols$
|
|
2515
|
-
var __hasOwnProp$
|
|
2516
|
-
var __propIsEnum$
|
|
2517
|
-
var __defNormalProp$
|
|
2518
|
-
var __spreadValues$
|
|
2513
|
+
var __defProp$8 = Object.defineProperty;
|
|
2514
|
+
var __defProps$8 = Object.defineProperties;
|
|
2515
|
+
var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
|
|
2516
|
+
var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
|
|
2517
|
+
var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
|
|
2518
|
+
var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
|
|
2519
|
+
var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2520
|
+
var __spreadValues$8 = (a, b) => {
|
|
2519
2521
|
for (var prop in b || (b = {}))
|
|
2520
|
-
if (__hasOwnProp$
|
|
2521
|
-
__defNormalProp$
|
|
2522
|
-
if (__getOwnPropSymbols$
|
|
2523
|
-
for (var prop of __getOwnPropSymbols$
|
|
2524
|
-
if (__propIsEnum$
|
|
2525
|
-
__defNormalProp$
|
|
2522
|
+
if (__hasOwnProp$8.call(b, prop))
|
|
2523
|
+
__defNormalProp$8(a, prop, b[prop]);
|
|
2524
|
+
if (__getOwnPropSymbols$8)
|
|
2525
|
+
for (var prop of __getOwnPropSymbols$8(b)) {
|
|
2526
|
+
if (__propIsEnum$8.call(b, prop))
|
|
2527
|
+
__defNormalProp$8(a, prop, b[prop]);
|
|
2526
2528
|
}
|
|
2527
2529
|
return a;
|
|
2528
2530
|
};
|
|
2529
|
-
var __spreadProps$
|
|
2531
|
+
var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
|
|
2530
2532
|
var __objRest = (source, exclude) => {
|
|
2531
2533
|
var target = {};
|
|
2532
2534
|
for (var prop in source)
|
|
2533
|
-
if (__hasOwnProp$
|
|
2535
|
+
if (__hasOwnProp$8.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
2534
2536
|
target[prop] = source[prop];
|
|
2535
|
-
if (source != null && __getOwnPropSymbols$
|
|
2536
|
-
for (var prop of __getOwnPropSymbols$
|
|
2537
|
-
if (exclude.indexOf(prop) < 0 && __propIsEnum$
|
|
2537
|
+
if (source != null && __getOwnPropSymbols$8)
|
|
2538
|
+
for (var prop of __getOwnPropSymbols$8(source)) {
|
|
2539
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum$8.call(source, prop))
|
|
2538
2540
|
target[prop] = source[prop];
|
|
2539
2541
|
}
|
|
2540
2542
|
return target;
|
|
@@ -2584,7 +2586,7 @@ function ImageCheckbox(_a) {
|
|
|
2584
2586
|
const { classes, cx } = useStyles$2({ checked: value });
|
|
2585
2587
|
return /* @__PURE__ */ React__namespace.createElement(
|
|
2586
2588
|
core.UnstyledButton,
|
|
2587
|
-
__spreadProps$
|
|
2589
|
+
__spreadProps$8(__spreadValues$8({}, others), {
|
|
2588
2590
|
onClick: () => handleChange(!value),
|
|
2589
2591
|
className: cx(classes.button, className)
|
|
2590
2592
|
}),
|
|
@@ -2605,7 +2607,7 @@ function ImageCheckbox(_a) {
|
|
|
2605
2607
|
function SelectGrid(props) {
|
|
2606
2608
|
const items = props.items.map((item) => /* @__PURE__ */ React__namespace.createElement(
|
|
2607
2609
|
ImageCheckbox,
|
|
2608
|
-
__spreadProps$
|
|
2610
|
+
__spreadProps$8(__spreadValues$8({}, item), {
|
|
2609
2611
|
key: item.title,
|
|
2610
2612
|
onChange: (checked) => props.onChange(item.title, checked)
|
|
2611
2613
|
})
|
|
@@ -2623,25 +2625,25 @@ function SelectGrid(props) {
|
|
|
2623
2625
|
);
|
|
2624
2626
|
}
|
|
2625
2627
|
|
|
2626
|
-
var __defProp$
|
|
2627
|
-
var __defProps$
|
|
2628
|
-
var __getOwnPropDescs$
|
|
2629
|
-
var __getOwnPropSymbols$
|
|
2630
|
-
var __hasOwnProp$
|
|
2631
|
-
var __propIsEnum$
|
|
2632
|
-
var __defNormalProp$
|
|
2633
|
-
var __spreadValues$
|
|
2628
|
+
var __defProp$7 = Object.defineProperty;
|
|
2629
|
+
var __defProps$7 = Object.defineProperties;
|
|
2630
|
+
var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
|
|
2631
|
+
var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
|
|
2632
|
+
var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
|
|
2633
|
+
var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
|
|
2634
|
+
var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2635
|
+
var __spreadValues$7 = (a, b) => {
|
|
2634
2636
|
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$
|
|
2637
|
+
if (__hasOwnProp$7.call(b, prop))
|
|
2638
|
+
__defNormalProp$7(a, prop, b[prop]);
|
|
2639
|
+
if (__getOwnPropSymbols$7)
|
|
2640
|
+
for (var prop of __getOwnPropSymbols$7(b)) {
|
|
2641
|
+
if (__propIsEnum$7.call(b, prop))
|
|
2642
|
+
__defNormalProp$7(a, prop, b[prop]);
|
|
2641
2643
|
}
|
|
2642
2644
|
return a;
|
|
2643
2645
|
};
|
|
2644
|
-
var __spreadProps$
|
|
2646
|
+
var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
|
|
2645
2647
|
const useStyles$1 = core.createStyles((theme) => ({
|
|
2646
2648
|
wrapper: {
|
|
2647
2649
|
minHeight: "100%",
|
|
@@ -2751,7 +2753,7 @@ const TrialRegistration = (props) => {
|
|
|
2751
2753
|
label: "School/Organization Name",
|
|
2752
2754
|
placeholder: "What's the name of your school?",
|
|
2753
2755
|
data: props.organizations.map((o) => {
|
|
2754
|
-
return __spreadProps$
|
|
2756
|
+
return __spreadProps$7(__spreadValues$7({}, o), { value: o.displayName });
|
|
2755
2757
|
}),
|
|
2756
2758
|
onItemSubmit: (item) => setOrganization({ organizationId: item.organizationId, displayName: item.displayName }),
|
|
2757
2759
|
onChange: (next) => {
|
|
@@ -2763,7 +2765,7 @@ const TrialRegistration = (props) => {
|
|
|
2763
2765
|
SelectGrid,
|
|
2764
2766
|
{
|
|
2765
2767
|
items: OPTIONS,
|
|
2766
|
-
onChange: (e, checked) => setInterests(__spreadProps$
|
|
2768
|
+
onChange: (e, checked) => setInterests(__spreadProps$7(__spreadValues$7({}, interests), { [e]: checked }))
|
|
2767
2769
|
}
|
|
2768
2770
|
), /* @__PURE__ */ React__namespace.createElement(core.Group, { position: "right", mt: "md" }, /* @__PURE__ */ React__namespace.createElement(
|
|
2769
2771
|
core.Button,
|
|
@@ -2801,25 +2803,25 @@ const AdminProvider = (props) => {
|
|
|
2801
2803
|
);
|
|
2802
2804
|
};
|
|
2803
2805
|
|
|
2804
|
-
var __defProp$
|
|
2805
|
-
var __defProps$
|
|
2806
|
-
var __getOwnPropDescs$
|
|
2807
|
-
var __getOwnPropSymbols$
|
|
2808
|
-
var __hasOwnProp$
|
|
2809
|
-
var __propIsEnum$
|
|
2810
|
-
var __defNormalProp$
|
|
2811
|
-
var __spreadValues$
|
|
2806
|
+
var __defProp$6 = Object.defineProperty;
|
|
2807
|
+
var __defProps$6 = Object.defineProperties;
|
|
2808
|
+
var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
|
|
2809
|
+
var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
|
|
2810
|
+
var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
|
|
2811
|
+
var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
|
|
2812
|
+
var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2813
|
+
var __spreadValues$6 = (a, b) => {
|
|
2812
2814
|
for (var prop in b || (b = {}))
|
|
2813
|
-
if (__hasOwnProp$
|
|
2814
|
-
__defNormalProp$
|
|
2815
|
-
if (__getOwnPropSymbols$
|
|
2816
|
-
for (var prop of __getOwnPropSymbols$
|
|
2817
|
-
if (__propIsEnum$
|
|
2818
|
-
__defNormalProp$
|
|
2815
|
+
if (__hasOwnProp$6.call(b, prop))
|
|
2816
|
+
__defNormalProp$6(a, prop, b[prop]);
|
|
2817
|
+
if (__getOwnPropSymbols$6)
|
|
2818
|
+
for (var prop of __getOwnPropSymbols$6(b)) {
|
|
2819
|
+
if (__propIsEnum$6.call(b, prop))
|
|
2820
|
+
__defNormalProp$6(a, prop, b[prop]);
|
|
2819
2821
|
}
|
|
2820
2822
|
return a;
|
|
2821
2823
|
};
|
|
2822
|
-
var __spreadProps$
|
|
2824
|
+
var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
|
|
2823
2825
|
const useStyles = core.createStyles((theme, props) => ({
|
|
2824
2826
|
footer: {
|
|
2825
2827
|
paddingTop: theme.spacing.md,
|
|
@@ -2915,7 +2917,7 @@ const App = (props) => {
|
|
|
2915
2917
|
padding: "xs",
|
|
2916
2918
|
navbar: props.navbar && /* @__PURE__ */ React__namespace.createElement(
|
|
2917
2919
|
Navbar,
|
|
2918
|
-
__spreadProps$
|
|
2920
|
+
__spreadProps$6(__spreadValues$6({}, props.navbar.props), {
|
|
2919
2921
|
onSwitchAccounts: account.accounts && account.accounts.length > 1 ? () => account.setChangeModalOpen(true) : void 0
|
|
2920
2922
|
})
|
|
2921
2923
|
),
|
|
@@ -3066,30 +3068,30 @@ function Stack$1(props) {
|
|
|
3066
3068
|
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-2" }, props.items.map((row) => /* @__PURE__ */ React__namespace.createElement("div", { key: row.badgeName, className: "flex items-center justify-between gap-4 py-1.5" }, /* @__PURE__ */ React__namespace.createElement(reactRouterDom.Link, { to: row.href, className: "text-sm font-bold text-dark-blue-400 no-underline hover:underline" }, row.badgeName), row.completion >= 1 && /* @__PURE__ */ React__namespace.createElement("span", { className: "shrink-0 rounded-full bg-mint-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, "Complete"), row.completion === 0 && !row.isStarted && /* @__PURE__ */ React__namespace.createElement("span", { className: "shrink-0 rounded-full bg-slate-100 px-2.5 py-1 text-[10px] font-bold text-slate-500" }, "Not started"), row.completion > 0 && row.completion < 1 && /* @__PURE__ */ React__namespace.createElement("span", { className: "shrink-0 rounded-full bg-gold-100 px-2.5 py-1 text-[10px] font-bold text-dark-blue-400" }, Math.round((row.completion + Number.EPSILON) * 100), "% Complete"))));
|
|
3067
3069
|
}
|
|
3068
3070
|
|
|
3069
|
-
var __defProp$
|
|
3070
|
-
var __defProps$
|
|
3071
|
-
var __getOwnPropDescs$
|
|
3072
|
-
var __getOwnPropSymbols$
|
|
3073
|
-
var __hasOwnProp$
|
|
3074
|
-
var __propIsEnum$
|
|
3075
|
-
var __defNormalProp$
|
|
3076
|
-
var __spreadValues$
|
|
3071
|
+
var __defProp$5 = Object.defineProperty;
|
|
3072
|
+
var __defProps$5 = Object.defineProperties;
|
|
3073
|
+
var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
|
|
3074
|
+
var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
|
|
3075
|
+
var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
|
|
3076
|
+
var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
|
|
3077
|
+
var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3078
|
+
var __spreadValues$5 = (a, b) => {
|
|
3077
3079
|
for (var prop in b || (b = {}))
|
|
3078
|
-
if (__hasOwnProp$
|
|
3079
|
-
__defNormalProp$
|
|
3080
|
-
if (__getOwnPropSymbols$
|
|
3081
|
-
for (var prop of __getOwnPropSymbols$
|
|
3082
|
-
if (__propIsEnum$
|
|
3083
|
-
__defNormalProp$
|
|
3080
|
+
if (__hasOwnProp$5.call(b, prop))
|
|
3081
|
+
__defNormalProp$5(a, prop, b[prop]);
|
|
3082
|
+
if (__getOwnPropSymbols$5)
|
|
3083
|
+
for (var prop of __getOwnPropSymbols$5(b)) {
|
|
3084
|
+
if (__propIsEnum$5.call(b, prop))
|
|
3085
|
+
__defNormalProp$5(a, prop, b[prop]);
|
|
3084
3086
|
}
|
|
3085
3087
|
return a;
|
|
3086
3088
|
};
|
|
3087
|
-
var __spreadProps$
|
|
3089
|
+
var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
|
|
3088
3090
|
function Table$2(props) {
|
|
3089
3091
|
const [expanded, setExpanded] = React__namespace.useState({});
|
|
3090
3092
|
const categories = props.categories || [];
|
|
3091
3093
|
const preparedItems = React__namespace.useMemo(() => {
|
|
3092
|
-
return (props.items || []).map((item) => __spreadValues$
|
|
3094
|
+
return (props.items || []).map((item) => __spreadValues$5(__spreadValues$5({}, item), item.categoryPoints));
|
|
3093
3095
|
}, [props.items]);
|
|
3094
3096
|
const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);
|
|
3095
3097
|
if (props.loading && props.items.length === 0) {
|
|
@@ -3110,7 +3112,7 @@ function Table$2(props) {
|
|
|
3110
3112
|
return /* @__PURE__ */ React__namespace.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React__namespace.createElement(
|
|
3111
3113
|
"div",
|
|
3112
3114
|
{
|
|
3113
|
-
onClick: () => setExpanded(__spreadProps$
|
|
3115
|
+
onClick: () => setExpanded(__spreadProps$5(__spreadValues$5({}, expanded), { [row.userId]: !isOpen })),
|
|
3114
3116
|
className: "flex cursor-pointer items-center gap-4 p-4"
|
|
3115
3117
|
},
|
|
3116
3118
|
/* @__PURE__ */ React__namespace.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-3" }, row.avatar ? /* @__PURE__ */ React__namespace.createElement("img", { src: row.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React__namespace.createElement("div", { className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-mint-400/20 text-xs font-bold text-dark-blue-400" }, initials), /* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-sm font-bold text-dark-blue-400" }, row.name), /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-xs text-slate-400" }, row.email))),
|
|
@@ -3184,25 +3186,25 @@ const CategoryPill = (props) => /* @__PURE__ */ React__namespace.createElement(
|
|
|
3184
3186
|
props.label
|
|
3185
3187
|
);
|
|
3186
3188
|
|
|
3187
|
-
var __defProp$
|
|
3188
|
-
var __defProps$
|
|
3189
|
-
var __getOwnPropDescs$
|
|
3190
|
-
var __getOwnPropSymbols$
|
|
3191
|
-
var __hasOwnProp$
|
|
3192
|
-
var __propIsEnum$
|
|
3193
|
-
var __defNormalProp$
|
|
3194
|
-
var __spreadValues$
|
|
3189
|
+
var __defProp$4 = Object.defineProperty;
|
|
3190
|
+
var __defProps$4 = Object.defineProperties;
|
|
3191
|
+
var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
|
|
3192
|
+
var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
|
|
3193
|
+
var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
|
|
3194
|
+
var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
|
|
3195
|
+
var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3196
|
+
var __spreadValues$4 = (a, b) => {
|
|
3195
3197
|
for (var prop in b || (b = {}))
|
|
3196
|
-
if (__hasOwnProp$
|
|
3197
|
-
__defNormalProp$
|
|
3198
|
-
if (__getOwnPropSymbols$
|
|
3199
|
-
for (var prop of __getOwnPropSymbols$
|
|
3200
|
-
if (__propIsEnum$
|
|
3201
|
-
__defNormalProp$
|
|
3198
|
+
if (__hasOwnProp$4.call(b, prop))
|
|
3199
|
+
__defNormalProp$4(a, prop, b[prop]);
|
|
3200
|
+
if (__getOwnPropSymbols$4)
|
|
3201
|
+
for (var prop of __getOwnPropSymbols$4(b)) {
|
|
3202
|
+
if (__propIsEnum$4.call(b, prop))
|
|
3203
|
+
__defNormalProp$4(a, prop, b[prop]);
|
|
3202
3204
|
}
|
|
3203
3205
|
return a;
|
|
3204
3206
|
};
|
|
3205
|
-
var __spreadProps$
|
|
3207
|
+
var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
|
|
3206
3208
|
function buildCategoryTree(categories) {
|
|
3207
3209
|
const byId = /* @__PURE__ */ new Map();
|
|
3208
3210
|
categories.forEach((c) => byId.set(c.categoryId, c));
|
|
@@ -3221,7 +3223,7 @@ function buildCategoryTree(categories) {
|
|
|
3221
3223
|
attached.add(category.categoryId);
|
|
3222
3224
|
const childAncestry = new Set(ancestry).add(category.categoryId);
|
|
3223
3225
|
const children = (childrenByParent.get(category.categoryId) || []).filter((child) => !childAncestry.has(child.categoryId)).map((child) => attach(child, childAncestry));
|
|
3224
|
-
return __spreadProps$
|
|
3226
|
+
return __spreadProps$4(__spreadValues$4({}, category), { children });
|
|
3225
3227
|
};
|
|
3226
3228
|
const roots = categories.filter((c) => {
|
|
3227
3229
|
const parentId = c.parentCategoryId;
|
|
@@ -3271,7 +3273,7 @@ const CategoryNode = (props) => {
|
|
|
3271
3273
|
);
|
|
3272
3274
|
};
|
|
3273
3275
|
|
|
3274
|
-
const TABS$
|
|
3276
|
+
const TABS$2 = [
|
|
3275
3277
|
{ label: "By Badge", value: "badges" },
|
|
3276
3278
|
{ label: "By student", value: "students" }
|
|
3277
3279
|
];
|
|
@@ -3318,7 +3320,7 @@ const Pathway = (props) => {
|
|
|
3318
3320
|
},
|
|
3319
3321
|
/* @__PURE__ */ React__namespace.createElement("option", { value: "" }, "All classes"),
|
|
3320
3322
|
props.classes.map((c) => /* @__PURE__ */ React__namespace.createElement("option", { key: c.classId, value: c.classId }, c.name))
|
|
3321
|
-
)), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, !props.trial && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$
|
|
3323
|
+
)), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, !props.trial && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$2.map((t) => /* @__PURE__ */ React__namespace.createElement(
|
|
3322
3324
|
"button",
|
|
3323
3325
|
{
|
|
3324
3326
|
key: t.value,
|
|
@@ -3359,17 +3361,17 @@ function Stack(props) {
|
|
|
3359
3361
|
if (!items.length)
|
|
3360
3362
|
return null;
|
|
3361
3363
|
const columns = [
|
|
3362
|
-
"minmax(0,2fr)",
|
|
3363
3364
|
!hidePathway && "minmax(0,1.3fr)",
|
|
3364
|
-
!hideLesson && "minmax(0,1.3fr)",
|
|
3365
3365
|
!hideBadge && "minmax(0,1.3fr)",
|
|
3366
|
+
!hideLesson && "minmax(0,1.3fr)",
|
|
3367
|
+
"minmax(0,2fr)",
|
|
3366
3368
|
"auto"
|
|
3367
3369
|
].filter(Boolean).join(" ");
|
|
3368
3370
|
const headerCell = "border-b border-slate-100 pb-2 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400";
|
|
3369
3371
|
const dataCell = "py-3";
|
|
3370
|
-
return /* @__PURE__ */ React__namespace.createElement("div", { className: "grid items-center gap-x-3", style: { gridTemplateColumns: columns } }, /* @__PURE__ */ React__namespace.createElement("div", { className: headerCell }, "
|
|
3372
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { className: "grid items-center gap-x-3", style: { gridTemplateColumns: columns } }, !hidePathway && /* @__PURE__ */ React__namespace.createElement("div", { className: headerCell }, "Pathway"), !hideBadge && /* @__PURE__ */ React__namespace.createElement("div", { className: headerCell }, "Badge"), !hideLesson && /* @__PURE__ */ React__namespace.createElement("div", { className: headerCell }, "Lesson"), /* @__PURE__ */ React__namespace.createElement("div", { className: headerCell }, "Question"), /* @__PURE__ */ React__namespace.createElement("div", { className: headerCell }), items.map((row, i) => {
|
|
3371
3373
|
const rowBorder = i > 0 ? "border-t border-slate-100" : "";
|
|
3372
|
-
return /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, { key: i },
|
|
3374
|
+
return /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, { key: i }, !hidePathway && (row.pathwayId && onPathwayClick ? /* @__PURE__ */ React__namespace.createElement("button", { type: "button", onClick: () => onPathwayClick(row.pathwayId), className: `${dataCell} ${rowBorder} truncate text-left text-[11px] font-semibold text-sky-blue-400 hover:underline` }, row.pathwayName || "\u2014") : /* @__PURE__ */ React__namespace.createElement("div", { className: `${dataCell} ${rowBorder} truncate text-[11px] text-slate-500` }, row.pathwayName || "\u2014")), !hideBadge && (row.badgeId && onBadgeClick ? /* @__PURE__ */ React__namespace.createElement("button", { type: "button", onClick: () => onBadgeClick(row.badgeId), className: `${dataCell} ${rowBorder} truncate text-left text-[11px] font-semibold text-sky-blue-400 hover:underline` }, row.badgeName) : /* @__PURE__ */ React__namespace.createElement("div", { className: `${dataCell} ${rowBorder} truncate text-[11px] text-slate-500` }, row.badgeName)), !hideLesson && (row.lessonId && onLessonClick ? /* @__PURE__ */ React__namespace.createElement("button", { type: "button", onClick: () => onLessonClick(row.lessonId), className: `${dataCell} ${rowBorder} truncate text-left text-[11px] font-semibold text-sky-blue-400 hover:underline` }, row.lessonName) : /* @__PURE__ */ React__namespace.createElement("div", { className: `${dataCell} ${rowBorder} truncate text-[11px] text-slate-500` }, row.lessonName)), /* @__PURE__ */ React__namespace.createElement("div", { className: `${dataCell} ${rowBorder} text-xs font-semibold text-dark-blue-400` }, row.question), /* @__PURE__ */ React__namespace.createElement("div", { className: `${dataCell} ${rowBorder} flex shrink-0 gap-2` }, /* @__PURE__ */ React__namespace.createElement(
|
|
3373
3375
|
"a",
|
|
3374
3376
|
{
|
|
3375
3377
|
href: row.link,
|
|
@@ -3384,37 +3386,39 @@ function Stack(props) {
|
|
|
3384
3386
|
}));
|
|
3385
3387
|
}
|
|
3386
3388
|
|
|
3387
|
-
var __defProp$
|
|
3388
|
-
var __defProps$
|
|
3389
|
-
var __getOwnPropDescs$
|
|
3390
|
-
var __getOwnPropSymbols$
|
|
3391
|
-
var __hasOwnProp$
|
|
3392
|
-
var __propIsEnum$
|
|
3393
|
-
var __defNormalProp$
|
|
3394
|
-
var __spreadValues$
|
|
3389
|
+
var __defProp$3 = Object.defineProperty;
|
|
3390
|
+
var __defProps$3 = Object.defineProperties;
|
|
3391
|
+
var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
|
|
3392
|
+
var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
|
|
3393
|
+
var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
|
|
3394
|
+
var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
|
|
3395
|
+
var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3396
|
+
var __spreadValues$3 = (a, b) => {
|
|
3395
3397
|
for (var prop in b || (b = {}))
|
|
3396
|
-
if (__hasOwnProp$
|
|
3397
|
-
__defNormalProp$
|
|
3398
|
-
if (__getOwnPropSymbols$
|
|
3399
|
-
for (var prop of __getOwnPropSymbols$
|
|
3400
|
-
if (__propIsEnum$
|
|
3401
|
-
__defNormalProp$
|
|
3398
|
+
if (__hasOwnProp$3.call(b, prop))
|
|
3399
|
+
__defNormalProp$3(a, prop, b[prop]);
|
|
3400
|
+
if (__getOwnPropSymbols$3)
|
|
3401
|
+
for (var prop of __getOwnPropSymbols$3(b)) {
|
|
3402
|
+
if (__propIsEnum$3.call(b, prop))
|
|
3403
|
+
__defNormalProp$3(a, prop, b[prop]);
|
|
3402
3404
|
}
|
|
3403
3405
|
return a;
|
|
3404
3406
|
};
|
|
3405
|
-
var __spreadProps$
|
|
3406
|
-
const initials$
|
|
3407
|
+
var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
|
|
3408
|
+
const initials$2 = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
|
|
3407
3409
|
function Table(props) {
|
|
3408
3410
|
const [expanded, setExpanded] = React__namespace.useState({});
|
|
3409
3411
|
const preparedItems = React__namespace.useMemo(() => {
|
|
3410
3412
|
return props.items.map((item) => {
|
|
3411
3413
|
var _a;
|
|
3412
|
-
return __spreadProps$
|
|
3414
|
+
return __spreadProps$3(__spreadValues$3({}, item), {
|
|
3413
3415
|
submissionCount: ((_a = item.submissions) == null ? void 0 : _a.length) || 0
|
|
3414
3416
|
});
|
|
3415
3417
|
});
|
|
3416
3418
|
}, [props.items]);
|
|
3417
3419
|
const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);
|
|
3420
|
+
const showActions = !!props.onReview || !!props.onComment;
|
|
3421
|
+
const actionsWidthClass = props.onReview && props.onComment ? "w-64" : "w-36";
|
|
3418
3422
|
if (props.items.length === 0) {
|
|
3419
3423
|
return /* @__PURE__ */ React__namespace.createElement(
|
|
3420
3424
|
PlaceholderBanner,
|
|
@@ -3426,17 +3430,17 @@ function Table(props) {
|
|
|
3426
3430
|
}
|
|
3427
3431
|
);
|
|
3428
3432
|
}
|
|
3429
|
-
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-center gap-4 px-4" }, /* @__PURE__ */ React__namespace.createElement(SortableHeader, { label: "Student Name", sortKey: "name", sortConfig, onSort: requestSort, className: "flex-1" }), /* @__PURE__ */ React__namespace.createElement(SortableHeader, { label: "Files", sortKey: "submissionCount", sortConfig, onSort: requestSort, className: "w-16 shrink-0" }),
|
|
3433
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-center gap-4 px-4" }, /* @__PURE__ */ React__namespace.createElement(SortableHeader, { label: "Student Name", sortKey: "name", sortConfig, onSort: requestSort, className: "flex-1" }), /* @__PURE__ */ React__namespace.createElement(SortableHeader, { label: "Files", sortKey: "submissionCount", sortConfig, onSort: requestSort, className: "w-16 shrink-0" }), showActions && /* @__PURE__ */ React__namespace.createElement("div", { className: `${actionsWidthClass} shrink-0` }), /* @__PURE__ */ React__namespace.createElement("div", { className: "w-4 shrink-0" })), sortedItems.map((row) => {
|
|
3430
3434
|
const isOpen = !!expanded[row.userId];
|
|
3431
3435
|
return /* @__PURE__ */ React__namespace.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React__namespace.createElement(
|
|
3432
3436
|
"div",
|
|
3433
3437
|
{
|
|
3434
|
-
onClick: () => setExpanded(__spreadProps$
|
|
3438
|
+
onClick: () => setExpanded(__spreadProps$3(__spreadValues$3({}, expanded), { [row.userId]: !isOpen })),
|
|
3435
3439
|
className: "flex cursor-pointer items-center gap-4 p-4"
|
|
3436
3440
|
},
|
|
3437
|
-
/* @__PURE__ */ React__namespace.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-3" }, row.avatar ? /* @__PURE__ */ React__namespace.createElement("img", { src: row.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React__namespace.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$
|
|
3441
|
+
/* @__PURE__ */ React__namespace.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-3" }, row.avatar ? /* @__PURE__ */ React__namespace.createElement("img", { src: row.avatar, className: "h-9 w-9 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React__namespace.createElement("div", { className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-mint-400 to-dark-blue-400 text-xs font-bold text-white" }, initials$2(row.name)), /* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-sm font-bold text-dark-blue-400" }, row.name), /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-xs text-slate-400" }, row.email))),
|
|
3438
3442
|
/* @__PURE__ */ React__namespace.createElement("div", { className: "w-16 shrink-0 text-sm font-bold text-dark-blue-400" }, row.submissions.length),
|
|
3439
|
-
|
|
3443
|
+
showActions && /* @__PURE__ */ React__namespace.createElement("div", { className: `flex ${actionsWidthClass} shrink-0 gap-2` }, props.onReview && /* @__PURE__ */ React__namespace.createElement(
|
|
3440
3444
|
"button",
|
|
3441
3445
|
{
|
|
3442
3446
|
onClick: (e) => {
|
|
@@ -3446,9 +3450,19 @@ function Table(props) {
|
|
|
3446
3450
|
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"
|
|
3447
3451
|
},
|
|
3448
3452
|
"Review Submission"
|
|
3449
|
-
)
|
|
3450
|
-
|
|
3451
|
-
|
|
3453
|
+
), props.onComment && /* @__PURE__ */ React__namespace.createElement(
|
|
3454
|
+
"button",
|
|
3455
|
+
{
|
|
3456
|
+
onClick: (e) => {
|
|
3457
|
+
e.stopPropagation();
|
|
3458
|
+
props.onComment(row);
|
|
3459
|
+
},
|
|
3460
|
+
className: "rounded-lg border border-slate-200 bg-white px-3 py-1.5 text-[11px] font-extrabold text-dark-blue-400 hover:bg-slate-50"
|
|
3461
|
+
},
|
|
3462
|
+
"Comment"
|
|
3463
|
+
)),
|
|
3464
|
+
/* @__PURE__ */ React__namespace.createElement(icons.IconChevronRight, { size: 16, stroke: 2, className: `w-4 shrink-0 text-slate-300 transition-transform ${isOpen ? "rotate-90" : ""}` })
|
|
3465
|
+
), isOpen && /* @__PURE__ */ React__namespace.createElement("div", { className: "border-t border-slate-100 px-4 py-3" }, /* @__PURE__ */ React__namespace.createElement(
|
|
3452
3466
|
Stack,
|
|
3453
3467
|
{
|
|
3454
3468
|
items: row.submissions,
|
|
@@ -3463,10 +3477,10 @@ function Table(props) {
|
|
|
3463
3477
|
}));
|
|
3464
3478
|
}
|
|
3465
3479
|
|
|
3466
|
-
const initials = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
|
|
3480
|
+
const initials$1 = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
|
|
3467
3481
|
function SubmissionDetail(props) {
|
|
3468
3482
|
const { student } = props;
|
|
3469
|
-
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-full flex-col gap-4 px-4 py-8" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-center gap-2 text-xs text-slate-400" }, /* @__PURE__ */ React__namespace.createElement("button", { onClick: props.onBack, className: "font-bold text-sky-blue-400 hover:underline" }, "File Locker"), /* @__PURE__ */ React__namespace.createElement("span", null, "/"), /* @__PURE__ */ React__namespace.createElement("span", { className: "font-bold text-dark-blue-400" }, student.name)), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-center gap-4 rounded-2xl border border-slate-200 bg-white p-5 shadow-sm" }, student.avatar ? /* @__PURE__ */ React__namespace.createElement("img", { src: student.avatar, className: "h-12 w-12 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React__namespace.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__namespace.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-lg font-extrabold text-dark-blue-400" }, student.name), /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-0.5 text-xs text-slate-400" }, student.email, props.context ? ` \xB7 ${props.context}` : "")), /* @__PURE__ */ React__namespace.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__namespace.createElement("div", { className: "rounded-2xl border border-slate-200 bg-white p-5 shadow-sm" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-sm font-extrabold text-dark-blue-400" }, "Files"), /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React__namespace.createElement(
|
|
3483
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-full flex-col gap-4 px-4 py-8" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-center gap-2 text-xs text-slate-400" }, /* @__PURE__ */ React__namespace.createElement("button", { onClick: props.onBack, className: "font-bold text-sky-blue-400 hover:underline" }, "File Locker"), /* @__PURE__ */ React__namespace.createElement("span", null, "/"), /* @__PURE__ */ React__namespace.createElement("span", { className: "font-bold text-dark-blue-400" }, student.name)), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-center gap-4 rounded-2xl border border-slate-200 bg-white p-5 shadow-sm" }, student.avatar ? /* @__PURE__ */ React__namespace.createElement("img", { src: student.avatar, className: "h-12 w-12 shrink-0 rounded-full object-cover", alt: "" }) : /* @__PURE__ */ React__namespace.createElement("div", { className: "flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-mint-400 to-dark-blue-400 text-sm font-bold text-white" }, initials$1(student.name)), /* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-lg font-extrabold text-dark-blue-400" }, student.name), /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-0.5 text-xs text-slate-400" }, student.email, props.context ? ` \xB7 ${props.context}` : "")), /* @__PURE__ */ React__namespace.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__namespace.createElement("div", { className: "rounded-2xl border border-slate-200 bg-white p-5 shadow-sm" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-sm font-extrabold text-dark-blue-400" }, "Files"), /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React__namespace.createElement(
|
|
3470
3484
|
Stack,
|
|
3471
3485
|
{
|
|
3472
3486
|
items: student.submissions,
|
|
@@ -3493,80 +3507,33 @@ function SubmissionDetail(props) {
|
|
|
3493
3507
|
)));
|
|
3494
3508
|
}
|
|
3495
3509
|
|
|
3496
|
-
|
|
3497
|
-
|
|
3498
|
-
|
|
3499
|
-
|
|
3500
|
-
|
|
3501
|
-
|
|
3502
|
-
|
|
3503
|
-
|
|
3504
|
-
props.onClose();
|
|
3505
|
-
};
|
|
3506
|
-
return /* @__PURE__ */ React__namespace.createElement(
|
|
3507
|
-
core.Modal,
|
|
3508
|
-
{
|
|
3509
|
-
opened: props.opened,
|
|
3510
|
-
onClose: props.onClose,
|
|
3511
|
-
title: /* @__PURE__ */ React__namespace.createElement("span", { className: "text-base font-extrabold text-dark-blue-400" }, "Find a Pathway, Badge, or Lesson"),
|
|
3512
|
-
size: "lg",
|
|
3513
|
-
centered: true
|
|
3514
|
-
},
|
|
3515
|
-
/* @__PURE__ */ React__namespace.createElement("div", { className: "mb-3 flex items-center gap-2.5 rounded-xl border border-slate-200 bg-white px-4 py-3" }, /* @__PURE__ */ React__namespace.createElement(icons.IconSearch, { size: 15, stroke: 1.75, className: "text-slate-400" }), /* @__PURE__ */ React__namespace.createElement(
|
|
3516
|
-
"input",
|
|
3517
|
-
{
|
|
3518
|
-
type: "text",
|
|
3519
|
-
autoFocus: true,
|
|
3520
|
-
placeholder: "Type to search...",
|
|
3521
|
-
value: query,
|
|
3522
|
-
onChange: (e) => setQuery(e.target.value),
|
|
3523
|
-
className: "flex-1 border-none bg-transparent text-sm text-dark-blue-400 outline-none placeholder:text-slate-400"
|
|
3524
|
-
}
|
|
3525
|
-
)),
|
|
3526
|
-
/* @__PURE__ */ React__namespace.createElement("div", { className: "flex max-h-[55vh] flex-col gap-4 overflow-y-auto pr-1" }, /* @__PURE__ */ React__namespace.createElement(SearchSection, { title: "Pathways", empty: "No matching pathways." }, pathways.map((p) => /* @__PURE__ */ React__namespace.createElement(SearchRow, { key: p.pathwayId, label: p.title, onClick: () => select(props.onPathwayClick, p.pathwayId) }))), /* @__PURE__ */ React__namespace.createElement(SearchSection, { title: "Badges", empty: "No matching badges." }, badges.map((b) => /* @__PURE__ */ React__namespace.createElement(SearchRow, { key: b.badgeId, label: b.displayName, onClick: () => select(props.onBadgeClick, b.badgeId) }))), /* @__PURE__ */ React__namespace.createElement(SearchSection, { title: "Lessons", empty: "No matching lessons." }, lessons.map((l) => /* @__PURE__ */ React__namespace.createElement(SearchRow, { key: l.lessonId, label: l.lessonName, onClick: () => select(props.onLessonClick, l.lessonId) }))))
|
|
3527
|
-
);
|
|
3528
|
-
}
|
|
3529
|
-
const SearchSection = (props) => {
|
|
3530
|
-
const count = React__namespace.Children.count(props.children);
|
|
3531
|
-
return /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("div", { className: "mb-1.5 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, props.title), count === 0 ? /* @__PURE__ */ React__namespace.createElement("p", { className: "text-xs text-slate-400" }, props.empty) : /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-1" }, props.children));
|
|
3532
|
-
};
|
|
3533
|
-
const SearchRow = (props) => /* @__PURE__ */ React__namespace.createElement(
|
|
3534
|
-
"button",
|
|
3535
|
-
{
|
|
3536
|
-
type: "button",
|
|
3537
|
-
onClick: props.onClick,
|
|
3538
|
-
className: "rounded-lg px-3 py-2 text-left text-sm font-semibold text-dark-blue-400 hover:bg-slate-50"
|
|
3539
|
-
},
|
|
3540
|
-
props.label
|
|
3541
|
-
);
|
|
3542
|
-
|
|
3543
|
-
var __defProp$1 = Object.defineProperty;
|
|
3544
|
-
var __defProps$1 = Object.defineProperties;
|
|
3545
|
-
var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
|
|
3546
|
-
var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
|
|
3547
|
-
var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
|
|
3548
|
-
var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
|
|
3549
|
-
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3550
|
-
var __spreadValues$1 = (a, b) => {
|
|
3510
|
+
var __defProp$2 = Object.defineProperty;
|
|
3511
|
+
var __defProps$2 = Object.defineProperties;
|
|
3512
|
+
var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
|
|
3513
|
+
var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
|
|
3514
|
+
var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
|
|
3515
|
+
var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
|
|
3516
|
+
var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3517
|
+
var __spreadValues$2 = (a, b) => {
|
|
3551
3518
|
for (var prop in b || (b = {}))
|
|
3552
|
-
if (__hasOwnProp$
|
|
3553
|
-
__defNormalProp$
|
|
3554
|
-
if (__getOwnPropSymbols$
|
|
3555
|
-
for (var prop of __getOwnPropSymbols$
|
|
3556
|
-
if (__propIsEnum$
|
|
3557
|
-
__defNormalProp$
|
|
3519
|
+
if (__hasOwnProp$2.call(b, prop))
|
|
3520
|
+
__defNormalProp$2(a, prop, b[prop]);
|
|
3521
|
+
if (__getOwnPropSymbols$2)
|
|
3522
|
+
for (var prop of __getOwnPropSymbols$2(b)) {
|
|
3523
|
+
if (__propIsEnum$2.call(b, prop))
|
|
3524
|
+
__defNormalProp$2(a, prop, b[prop]);
|
|
3558
3525
|
}
|
|
3559
3526
|
return a;
|
|
3560
3527
|
};
|
|
3561
|
-
var __spreadProps$
|
|
3528
|
+
var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
|
|
3562
3529
|
const useFilteredStudents = (students) => {
|
|
3563
3530
|
return React__namespace.useMemo(() => {
|
|
3564
|
-
const byBadge = (badgeId) => students.map((s) => __spreadProps$
|
|
3531
|
+
const byBadge = (badgeId) => students.map((s) => __spreadProps$2(__spreadValues$2({}, s), {
|
|
3565
3532
|
submissions: (s.submissions || []).filter(
|
|
3566
3533
|
(sub) => sub.badgeId === badgeId
|
|
3567
3534
|
)
|
|
3568
3535
|
})).filter((s) => s.submissions.length);
|
|
3569
|
-
const byLesson = (lessonName) => students.map((s) => __spreadProps$
|
|
3536
|
+
const byLesson = (lessonName) => students.map((s) => __spreadProps$2(__spreadValues$2({}, s), {
|
|
3570
3537
|
submissions: (s.submissions || []).filter(
|
|
3571
3538
|
(sub) => sub.lessonName === lessonName
|
|
3572
3539
|
)
|
|
@@ -3577,7 +3544,7 @@ const useFilteredStudents = (students) => {
|
|
|
3577
3544
|
(c) => c.startsWith(pathwayId)
|
|
3578
3545
|
)
|
|
3579
3546
|
).map((b) => b.badgeId);
|
|
3580
|
-
return students.map((s) => __spreadProps$
|
|
3547
|
+
return students.map((s) => __spreadProps$2(__spreadValues$2({}, s), {
|
|
3581
3548
|
submissions: (s.submissions || []).filter(
|
|
3582
3549
|
(sub) => validBadgeIds.includes(sub.badgeId)
|
|
3583
3550
|
)
|
|
@@ -3587,35 +3554,130 @@ const useFilteredStudents = (students) => {
|
|
|
3587
3554
|
}, [students]);
|
|
3588
3555
|
};
|
|
3589
3556
|
|
|
3590
|
-
|
|
3591
|
-
|
|
3592
|
-
|
|
3593
|
-
|
|
3594
|
-
|
|
3595
|
-
|
|
3596
|
-
|
|
3597
|
-
|
|
3557
|
+
const TARGETS = [
|
|
3558
|
+
{ value: "none", label: "General" },
|
|
3559
|
+
{ value: "badge", label: "Badge" },
|
|
3560
|
+
{ value: "lesson", label: "Lesson" }
|
|
3561
|
+
];
|
|
3562
|
+
const inputClass = "w-full rounded-xl border border-slate-200 bg-white px-3.5 py-2.5 text-sm text-dark-blue-400 focus:border-sky-blue-400 focus:outline-none";
|
|
3563
|
+
function LeaveCommentModal(props) {
|
|
3564
|
+
const [userId, setUserId] = React__namespace.useState("");
|
|
3565
|
+
const [target, setTarget] = React__namespace.useState("none");
|
|
3566
|
+
const [badgeId, setBadgeId] = React__namespace.useState("");
|
|
3567
|
+
const [lessonId, setLessonId] = React__namespace.useState("");
|
|
3568
|
+
const [commentText, setCommentText] = React__namespace.useState("");
|
|
3569
|
+
const [requireValidation, setRequireValidation] = React__namespace.useState(false);
|
|
3570
|
+
React__namespace.useEffect(() => {
|
|
3571
|
+
if (!props.opened)
|
|
3572
|
+
return;
|
|
3573
|
+
setUserId(props.initialUserId || "");
|
|
3574
|
+
setBadgeId(props.initialBadgeId || "");
|
|
3575
|
+
setLessonId(props.initialLessonId || "");
|
|
3576
|
+
setTarget(props.initialBadgeId ? "badge" : props.initialLessonId ? "lesson" : "none");
|
|
3577
|
+
setCommentText("");
|
|
3578
|
+
setRequireValidation(false);
|
|
3579
|
+
}, [props.opened, props.initialUserId, props.initialBadgeId, props.initialLessonId]);
|
|
3580
|
+
const canSubmit = !!userId && !!commentText.trim() && (target !== "badge" || !!badgeId) && (target !== "lesson" || !!lessonId);
|
|
3581
|
+
const onSubmit = (e) => {
|
|
3582
|
+
e.preventDefault();
|
|
3583
|
+
if (!canSubmit)
|
|
3584
|
+
return;
|
|
3585
|
+
props.onSubmit({
|
|
3586
|
+
userId,
|
|
3587
|
+
commentText: commentText.trim(),
|
|
3588
|
+
requireValidation: target === "badge" && requireValidation,
|
|
3589
|
+
badgeId: target === "badge" ? badgeId : void 0,
|
|
3590
|
+
lessonId: target === "lesson" ? lessonId : void 0
|
|
3591
|
+
});
|
|
3592
|
+
};
|
|
3593
|
+
return /* @__PURE__ */ React__namespace.createElement(
|
|
3594
|
+
core.Modal,
|
|
3595
|
+
{
|
|
3596
|
+
opened: props.opened,
|
|
3597
|
+
onClose: props.onClose,
|
|
3598
|
+
title: /* @__PURE__ */ React__namespace.createElement("span", { className: "text-base font-extrabold text-dark-blue-400" }, "Leave a Comment"),
|
|
3599
|
+
size: "md",
|
|
3600
|
+
centered: true
|
|
3601
|
+
},
|
|
3602
|
+
/* @__PURE__ */ React__namespace.createElement("form", { onSubmit, className: "flex flex-col gap-3.5" }, !props.hideStudentPicker && /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("label", { className: "mb-1 block text-xs font-bold text-slate-500" }, "Student"), /* @__PURE__ */ React__namespace.createElement("select", { value: userId, onChange: (e) => setUserId(e.target.value), className: inputClass }, /* @__PURE__ */ React__namespace.createElement("option", { value: "" }, "Select a student"), props.students.map((s) => /* @__PURE__ */ React__namespace.createElement("option", { key: s.userId, value: s.userId }, s.name)))), /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("label", { className: "mb-1 block text-xs font-bold text-slate-500" }, "Leave this comment on"), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TARGETS.map((t) => /* @__PURE__ */ React__namespace.createElement(
|
|
3603
|
+
"button",
|
|
3604
|
+
{
|
|
3605
|
+
key: t.value,
|
|
3606
|
+
type: "button",
|
|
3607
|
+
onClick: () => setTarget(t.value),
|
|
3608
|
+
className: `rounded-lg px-4 py-2 text-xs font-bold ${target === t.value ? "bg-sky-blue-400/20 text-dark-blue-400" : "text-slate-400 hover:text-slate-600"}`
|
|
3609
|
+
},
|
|
3610
|
+
t.label
|
|
3611
|
+
)))), target === "badge" && /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("label", { className: "mb-1 block text-xs font-bold text-slate-500" }, "Badge"), /* @__PURE__ */ React__namespace.createElement("select", { value: badgeId, onChange: (e) => setBadgeId(e.target.value), className: inputClass }, /* @__PURE__ */ React__namespace.createElement("option", { value: "" }, "Select a badge"), props.badges.map((b) => /* @__PURE__ */ React__namespace.createElement("option", { key: b.badgeId, value: b.badgeId }, b.displayName)))), target === "lesson" && /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("label", { className: "mb-1 block text-xs font-bold text-slate-500" }, "Lesson"), /* @__PURE__ */ React__namespace.createElement("select", { value: lessonId, onChange: (e) => setLessonId(e.target.value), className: inputClass }, /* @__PURE__ */ React__namespace.createElement("option", { value: "" }, "Select a lesson"), props.lessons.map((l) => /* @__PURE__ */ React__namespace.createElement("option", { key: l.lessonId, value: l.lessonId }, l.displayName)))), /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("label", { className: "mb-1 block text-xs font-bold text-slate-500" }, "Comment"), /* @__PURE__ */ React__namespace.createElement(
|
|
3612
|
+
"textarea",
|
|
3613
|
+
{
|
|
3614
|
+
value: commentText,
|
|
3615
|
+
onChange: (e) => setCommentText(e.target.value),
|
|
3616
|
+
placeholder: "Leave a comment...",
|
|
3617
|
+
rows: 4,
|
|
3618
|
+
className: `${inputClass} resize-none`
|
|
3619
|
+
}
|
|
3620
|
+
)), target === "badge" && !!badgeId && /* @__PURE__ */ React__namespace.createElement(
|
|
3621
|
+
core.Checkbox,
|
|
3622
|
+
{
|
|
3623
|
+
checked: requireValidation,
|
|
3624
|
+
onChange: (e) => setRequireValidation(e.currentTarget.checked),
|
|
3625
|
+
label: "Requires validation - unsubmits this badge until the comment is resolved"
|
|
3626
|
+
}
|
|
3627
|
+
), /* @__PURE__ */ React__namespace.createElement(
|
|
3628
|
+
"button",
|
|
3629
|
+
{
|
|
3630
|
+
type: "submit",
|
|
3631
|
+
disabled: !canSubmit,
|
|
3632
|
+
className: "mt-1 rounded-lg bg-dark-blue-400 px-4 py-2.5 text-xs font-bold text-white disabled:opacity-40"
|
|
3633
|
+
},
|
|
3634
|
+
"Leave Comment"
|
|
3635
|
+
))
|
|
3636
|
+
);
|
|
3637
|
+
}
|
|
3638
|
+
|
|
3639
|
+
var __defProp$1 = Object.defineProperty;
|
|
3640
|
+
var __defProps$1 = Object.defineProperties;
|
|
3641
|
+
var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
|
|
3642
|
+
var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
|
|
3643
|
+
var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
|
|
3644
|
+
var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
|
|
3645
|
+
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3646
|
+
var __spreadValues$1 = (a, b) => {
|
|
3598
3647
|
for (var prop in b || (b = {}))
|
|
3599
|
-
if (__hasOwnProp.call(b, prop))
|
|
3600
|
-
__defNormalProp(a, prop, b[prop]);
|
|
3601
|
-
if (__getOwnPropSymbols)
|
|
3602
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
3603
|
-
if (__propIsEnum.call(b, prop))
|
|
3604
|
-
__defNormalProp(a, prop, b[prop]);
|
|
3648
|
+
if (__hasOwnProp$1.call(b, prop))
|
|
3649
|
+
__defNormalProp$1(a, prop, b[prop]);
|
|
3650
|
+
if (__getOwnPropSymbols$1)
|
|
3651
|
+
for (var prop of __getOwnPropSymbols$1(b)) {
|
|
3652
|
+
if (__propIsEnum$1.call(b, prop))
|
|
3653
|
+
__defNormalProp$1(a, prop, b[prop]);
|
|
3605
3654
|
}
|
|
3606
3655
|
return a;
|
|
3607
3656
|
};
|
|
3608
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
3609
|
-
const TABS = [
|
|
3657
|
+
var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
|
|
3658
|
+
const TABS$1 = [
|
|
3610
3659
|
{ value: "students", label: "By student" },
|
|
3611
3660
|
{ value: "pathways", label: "By pathway" },
|
|
3612
3661
|
{ value: "badges", label: "By badge" },
|
|
3613
3662
|
{ value: "lessons", label: "By lesson" }
|
|
3614
3663
|
];
|
|
3664
|
+
const SEARCH_PLACEHOLDER = "Search by student, pathway, badge, or lesson";
|
|
3615
3665
|
const countFiles = (students) => students.reduce((acc, s) => {
|
|
3616
3666
|
var _a;
|
|
3617
3667
|
return acc + (((_a = s.submissions) == null ? void 0 : _a.length) || 0);
|
|
3618
3668
|
}, 0);
|
|
3669
|
+
const matchesSearch = (student, term) => {
|
|
3670
|
+
if (!term)
|
|
3671
|
+
return true;
|
|
3672
|
+
if (student.name.toLowerCase().includes(term))
|
|
3673
|
+
return true;
|
|
3674
|
+
return (student.submissions || []).some(
|
|
3675
|
+
(sub) => {
|
|
3676
|
+
var _a, _b, _c;
|
|
3677
|
+
return ((_a = sub.badgeName) == null ? void 0 : _a.toLowerCase().includes(term)) || ((_b = sub.lessonName) == null ? void 0 : _b.toLowerCase().includes(term)) || ((_c = sub.pathwayName) == null ? void 0 : _c.toLowerCase().includes(term));
|
|
3678
|
+
}
|
|
3679
|
+
);
|
|
3680
|
+
};
|
|
3619
3681
|
const GroupCard = (props) => {
|
|
3620
3682
|
const [open, setOpen] = React__namespace.useState(false);
|
|
3621
3683
|
return /* @__PURE__ */ React__namespace.createElement("div", { className: "overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React__namespace.createElement("div", { onClick: () => setOpen(!open), className: "flex cursor-pointer items-center gap-3.5 p-4" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0 flex-1" }, props.onTitleClick ? /* @__PURE__ */ React__namespace.createElement(
|
|
@@ -3633,35 +3695,52 @@ const GroupCard = (props) => {
|
|
|
3633
3695
|
};
|
|
3634
3696
|
const PathwayGroups = (props) => {
|
|
3635
3697
|
const { byPathway } = useFilteredStudents(props.students);
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3698
|
+
const term = props.search.trim().toLowerCase();
|
|
3699
|
+
const groups = props.pathways.map((p) => {
|
|
3700
|
+
const base = byPathway(p.pathwayId, props.badges);
|
|
3701
|
+
const ownNameMatches = !term || p.title.toLowerCase().includes(term);
|
|
3702
|
+
const filtered = ownNameMatches ? base : base.filter((s) => matchesSearch(s, term));
|
|
3703
|
+
return { pathway: p, filtered };
|
|
3704
|
+
}).filter((g) => !term || g.filtered.length > 0);
|
|
3705
|
+
if (term && groups.length === 0) {
|
|
3706
|
+
return /* @__PURE__ */ React__namespace.createElement("p", { className: "text-sm text-slate-400" }, "No matching entries.");
|
|
3707
|
+
}
|
|
3708
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, groups.map(({ pathway: p, filtered }) => /* @__PURE__ */ React__namespace.createElement(
|
|
3709
|
+
GroupCard,
|
|
3710
|
+
{
|
|
3711
|
+
key: p.pathwayId,
|
|
3712
|
+
title: p.title,
|
|
3713
|
+
description: p.description,
|
|
3714
|
+
count: countFiles(filtered),
|
|
3715
|
+
onTitleClick: props.onPathwayClick ? () => props.onPathwayClick(p.pathwayId) : void 0
|
|
3716
|
+
},
|
|
3717
|
+
/* @__PURE__ */ React__namespace.createElement(
|
|
3718
|
+
Table,
|
|
3640
3719
|
{
|
|
3641
|
-
|
|
3642
|
-
|
|
3643
|
-
|
|
3644
|
-
|
|
3645
|
-
|
|
3646
|
-
|
|
3647
|
-
|
|
3648
|
-
|
|
3649
|
-
|
|
3650
|
-
|
|
3651
|
-
items: filtered,
|
|
3652
|
-
hidePathway: true,
|
|
3653
|
-
onReview: (item) => props.onReview(item, filtered, p.title),
|
|
3654
|
-
onBadgeClick: props.onBadgeClick,
|
|
3655
|
-
onLessonClick: props.onLessonClick
|
|
3656
|
-
}
|
|
3657
|
-
)
|
|
3658
|
-
);
|
|
3659
|
-
}));
|
|
3720
|
+
loading: props.loading,
|
|
3721
|
+
items: filtered,
|
|
3722
|
+
hidePathway: true,
|
|
3723
|
+
onReview: (item) => props.onReview(item, filtered, p.title),
|
|
3724
|
+
onComment: props.onComment,
|
|
3725
|
+
onBadgeClick: props.onBadgeClick,
|
|
3726
|
+
onLessonClick: props.onLessonClick
|
|
3727
|
+
}
|
|
3728
|
+
)
|
|
3729
|
+
)));
|
|
3660
3730
|
};
|
|
3661
3731
|
const BadgeGroups = (props) => {
|
|
3662
3732
|
const { byBadge } = useFilteredStudents(props.students);
|
|
3663
|
-
|
|
3664
|
-
|
|
3733
|
+
const term = props.search.trim().toLowerCase();
|
|
3734
|
+
const groups = props.badges.map((b) => {
|
|
3735
|
+
const base = byBadge(b.badgeId);
|
|
3736
|
+
const ownNameMatches = !term || b.displayName.toLowerCase().includes(term);
|
|
3737
|
+
const filtered = ownNameMatches ? base : base.filter((s) => matchesSearch(s, term));
|
|
3738
|
+
return { badge: b, filtered };
|
|
3739
|
+
}).filter((g) => !term || g.filtered.length > 0);
|
|
3740
|
+
if (term && groups.length === 0) {
|
|
3741
|
+
return /* @__PURE__ */ React__namespace.createElement("p", { className: "text-sm text-slate-400" }, "No matching entries.");
|
|
3742
|
+
}
|
|
3743
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, groups.map(({ badge: b, filtered }) => {
|
|
3665
3744
|
const pathwayTitle = props.pathwayNameForBadge[b.badgeId];
|
|
3666
3745
|
return /* @__PURE__ */ React__namespace.createElement(
|
|
3667
3746
|
GroupCard,
|
|
@@ -3680,6 +3759,7 @@ const BadgeGroups = (props) => {
|
|
|
3680
3759
|
hideBadge: true,
|
|
3681
3760
|
hidePathway: true,
|
|
3682
3761
|
onReview: (item) => props.onReview(item, filtered, b.displayName),
|
|
3762
|
+
onComment: props.onComment,
|
|
3683
3763
|
onLessonClick: props.onLessonClick
|
|
3684
3764
|
}
|
|
3685
3765
|
)
|
|
@@ -3688,8 +3768,17 @@ const BadgeGroups = (props) => {
|
|
|
3688
3768
|
};
|
|
3689
3769
|
const LessonGroups = (props) => {
|
|
3690
3770
|
const { byLesson } = useFilteredStudents(props.students);
|
|
3691
|
-
|
|
3692
|
-
|
|
3771
|
+
const term = props.search.trim().toLowerCase();
|
|
3772
|
+
const groups = props.lessons.map((l) => {
|
|
3773
|
+
const base = byLesson(l.lessonName);
|
|
3774
|
+
const ownNameMatches = !term || l.lessonName.toLowerCase().includes(term);
|
|
3775
|
+
const filtered = ownNameMatches ? base : base.filter((s) => matchesSearch(s, term));
|
|
3776
|
+
return { lesson: l, filtered };
|
|
3777
|
+
}).filter((g) => !term || g.filtered.length > 0);
|
|
3778
|
+
if (term && groups.length === 0) {
|
|
3779
|
+
return /* @__PURE__ */ React__namespace.createElement("p", { className: "text-sm text-slate-400" }, "No matching entries.");
|
|
3780
|
+
}
|
|
3781
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, groups.map(({ lesson: l, filtered }) => {
|
|
3693
3782
|
const badge = props.badgeForLesson[l.lessonId];
|
|
3694
3783
|
const pathwayTitle = badge ? props.pathwayNameForBadge[badge.badgeId] : void 0;
|
|
3695
3784
|
const description = badge ? pathwayTitle ? `${badge.displayName} \xB7 ${pathwayTitle} pathway` : badge.displayName : void 0;
|
|
@@ -3702,14 +3791,16 @@ const LessonGroups = (props) => {
|
|
|
3702
3791
|
count: countFiles(filtered),
|
|
3703
3792
|
onTitleClick: props.onLessonClick ? () => props.onLessonClick(l.lessonId) : void 0
|
|
3704
3793
|
},
|
|
3705
|
-
/* @__PURE__ */ React__namespace.createElement(Table, { loading: props.loading, items: filtered, hideBadge: true, hideLesson: true, hidePathway: true, onReview: (item) => props.onReview(item, filtered, l.lessonName) })
|
|
3794
|
+
/* @__PURE__ */ React__namespace.createElement(Table, { loading: props.loading, items: filtered, hideBadge: true, hideLesson: true, hidePathway: true, onReview: (item) => props.onReview(item, filtered, l.lessonName), onComment: props.onComment })
|
|
3706
3795
|
);
|
|
3707
3796
|
}));
|
|
3708
3797
|
};
|
|
3709
3798
|
const FileLocker = (props) => {
|
|
3799
|
+
var _a;
|
|
3710
3800
|
const [tab, setTab] = React__namespace.useState("students");
|
|
3711
3801
|
const [reviewing, setReviewing] = React__namespace.useState(null);
|
|
3712
|
-
const [
|
|
3802
|
+
const [search, setSearch] = React__namespace.useState("");
|
|
3803
|
+
const searchLower = search.trim().toLowerCase();
|
|
3713
3804
|
const numberOfFiles = countFiles(props.students);
|
|
3714
3805
|
const { thisWeek, thisMonth } = React__namespace.useMemo(() => {
|
|
3715
3806
|
const now = new Date();
|
|
@@ -3764,8 +3855,8 @@ const FileLocker = (props) => {
|
|
|
3764
3855
|
return map;
|
|
3765
3856
|
}, [props.badges]);
|
|
3766
3857
|
const enrichedStudents = React__namespace.useMemo(() => {
|
|
3767
|
-
return props.students.map((s) => __spreadProps(__spreadValues({}, s), {
|
|
3768
|
-
submissions: (s.submissions || []).map((sub) => __spreadProps(__spreadValues({}, sub), {
|
|
3858
|
+
return props.students.map((s) => __spreadProps$1(__spreadValues$1({}, s), {
|
|
3859
|
+
submissions: (s.submissions || []).map((sub) => __spreadProps$1(__spreadValues$1({}, sub), {
|
|
3769
3860
|
pathwayName: pathwayNameForBadge[sub.badgeId] || "",
|
|
3770
3861
|
pathwayId: pathwayIdForBadge[sub.badgeId]
|
|
3771
3862
|
}))
|
|
@@ -3778,7 +3869,22 @@ const FileLocker = (props) => {
|
|
|
3778
3869
|
return count > 0 && (!best || count > best.count) ? { title: p.title, count } : best;
|
|
3779
3870
|
}, null);
|
|
3780
3871
|
}, [props.pathways, props.badges, byPathway]);
|
|
3872
|
+
const searchedStudents = React__namespace.useMemo(
|
|
3873
|
+
() => searchLower ? enrichedStudents.filter((s) => matchesSearch(s, searchLower)) : enrichedStudents,
|
|
3874
|
+
[enrichedStudents, searchLower]
|
|
3875
|
+
);
|
|
3876
|
+
const [commenting, setCommenting] = React__namespace.useState(null);
|
|
3781
3877
|
const onReview = (item, list, context) => setReviewing({ student: item, list, context });
|
|
3878
|
+
const onCommentClick = (item) => {
|
|
3879
|
+
var _a2;
|
|
3880
|
+
const sub = (_a2 = item.submissions) == null ? void 0 : _a2[0];
|
|
3881
|
+
setCommenting({ userId: item.userId, badgeId: sub == null ? void 0 : sub.badgeId, lessonId: sub == null ? void 0 : sub.lessonId });
|
|
3882
|
+
};
|
|
3883
|
+
const onCommentSubmit = (comment) => {
|
|
3884
|
+
var _a2;
|
|
3885
|
+
(_a2 = props.onComment) == null ? void 0 : _a2.call(props, comment);
|
|
3886
|
+
setCommenting(null);
|
|
3887
|
+
};
|
|
3782
3888
|
const onNav = (dir) => {
|
|
3783
3889
|
if (!reviewing)
|
|
3784
3890
|
return;
|
|
@@ -3786,7 +3892,7 @@ const FileLocker = (props) => {
|
|
|
3786
3892
|
if (idx === -1)
|
|
3787
3893
|
return;
|
|
3788
3894
|
const next = reviewing.list[(idx + dir + reviewing.list.length) % reviewing.list.length];
|
|
3789
|
-
setReviewing(__spreadProps(__spreadValues({}, reviewing), { student: next }));
|
|
3895
|
+
setReviewing(__spreadProps$1(__spreadValues$1({}, reviewing), { student: next }));
|
|
3790
3896
|
};
|
|
3791
3897
|
if (reviewing) {
|
|
3792
3898
|
return /* @__PURE__ */ React__namespace.createElement(
|
|
@@ -3802,28 +3908,7 @@ const FileLocker = (props) => {
|
|
|
3802
3908
|
}
|
|
3803
3909
|
);
|
|
3804
3910
|
}
|
|
3805
|
-
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-full flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("button", { onClick: props.onBackClick, className: "flex items-center gap-1 text-xs font-bold text-sky-blue-400 hover:underline" }, /* @__PURE__ */ React__namespace.createElement(icons.IconChevronLeft, { size: 13, stroke: 2.5 }), "Back"), /* @__PURE__ */ React__namespace.createElement("h1", { className: "mt-1.5 text-2xl font-extrabold tracking-tight text-dark-blue-400" }, props.displayName || "File Locker"), /* @__PURE__ */ React__namespace.createElement("p", { className: "mt-1 text-sm text-slate-500" }, props.description || "No description")), !props.trial && /* @__PURE__ */ React__namespace.createElement(
|
|
3806
|
-
"button",
|
|
3807
|
-
{
|
|
3808
|
-
type: "button",
|
|
3809
|
-
onClick: () => setSearchOpen(true),
|
|
3810
|
-
className: "flex items-center gap-1.5 rounded-lg border border-slate-200 bg-white px-3.5 py-2 text-xs font-bold text-slate-600 hover:bg-slate-50"
|
|
3811
|
-
},
|
|
3812
|
-
/* @__PURE__ */ React__namespace.createElement(icons.IconSearch, { size: 13, stroke: 2 }),
|
|
3813
|
-
"Search"
|
|
3814
|
-
), /* @__PURE__ */ React__namespace.createElement(SplitButton, { href: props.href, onCopyLinkClick: props.onCopyLinkClick, onExportDataClick: props.onExportDataClick }))), !props.trial && /* @__PURE__ */ React__namespace.createElement(
|
|
3815
|
-
FileLockerSearchModal,
|
|
3816
|
-
{
|
|
3817
|
-
opened: searchOpen,
|
|
3818
|
-
onClose: () => setSearchOpen(false),
|
|
3819
|
-
pathways: props.pathways || [],
|
|
3820
|
-
badges: props.badges || [],
|
|
3821
|
-
lessons: props.lessons,
|
|
3822
|
-
onPathwayClick: props.onPathwayClick,
|
|
3823
|
-
onBadgeClick: props.onBadgeClick,
|
|
3824
|
-
onLessonClick: props.onLessonClick
|
|
3825
|
-
}
|
|
3826
|
-
), /* @__PURE__ */ React__namespace.createElement(StatsGroup, { data: props.trial ? [
|
|
3911
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-full flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("button", { onClick: props.onBackClick, className: "flex items-center gap-1 text-xs font-bold text-sky-blue-400 hover:underline" }, /* @__PURE__ */ React__namespace.createElement(icons.IconChevronLeft, { size: 13, stroke: 2.5 }), "Back"), /* @__PURE__ */ React__namespace.createElement("h1", { className: "mt-1.5 text-2xl font-extrabold tracking-tight text-dark-blue-400" }, props.displayName || "File Locker"), /* @__PURE__ */ React__namespace.createElement("p", { className: "mt-1 text-sm text-slate-500" }, props.description || "No description")), !props.trial && /* @__PURE__ */ React__namespace.createElement(SplitButton, { href: props.href, onCopyLinkClick: props.onCopyLinkClick, onExportDataClick: props.onExportDataClick })), /* @__PURE__ */ React__namespace.createElement(StatsGroup, { data: props.trial ? [
|
|
3827
3912
|
{ title: "LESSONS SUBMITTED", value: props.lessonsCompleted || 0 }
|
|
3828
3913
|
] : [
|
|
3829
3914
|
{ title: "FILES", value: numberOfFiles },
|
|
@@ -3838,7 +3923,7 @@ const FileLocker = (props) => {
|
|
|
3838
3923
|
},
|
|
3839
3924
|
/* @__PURE__ */ React__namespace.createElement("option", { value: "" }, "Select a class"),
|
|
3840
3925
|
props.classes.map((g) => /* @__PURE__ */ React__namespace.createElement("option", { key: g.classId, value: g.classId }, g.name))
|
|
3841
|
-
), !props.trial && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS.map((t) => /* @__PURE__ */ React__namespace.createElement(
|
|
3926
|
+
), !props.trial && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS$1.map((t) => /* @__PURE__ */ React__namespace.createElement(
|
|
3842
3927
|
"button",
|
|
3843
3928
|
{
|
|
3844
3929
|
key: t.value,
|
|
@@ -3846,12 +3931,22 @@ const FileLocker = (props) => {
|
|
|
3846
3931
|
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"}`
|
|
3847
3932
|
},
|
|
3848
3933
|
t.label
|
|
3849
|
-
))), !props.trial &&
|
|
3934
|
+
))), !props.trial && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-center gap-2.5 rounded-xl border border-slate-200 bg-white px-4 py-3 shadow-sm" }, /* @__PURE__ */ React__namespace.createElement(icons.IconSearch, { size: 15, stroke: 1.75, className: "text-slate-400" }), /* @__PURE__ */ React__namespace.createElement(
|
|
3935
|
+
"input",
|
|
3936
|
+
{
|
|
3937
|
+
type: "text",
|
|
3938
|
+
value: search,
|
|
3939
|
+
onChange: (e) => setSearch(e.target.value),
|
|
3940
|
+
placeholder: SEARCH_PLACEHOLDER,
|
|
3941
|
+
className: "flex-1 border-none bg-transparent text-sm text-dark-blue-400 outline-none placeholder:text-slate-400"
|
|
3942
|
+
}
|
|
3943
|
+
)), !props.trial && tab === "students" && /* @__PURE__ */ React__namespace.createElement(
|
|
3850
3944
|
Table,
|
|
3851
3945
|
{
|
|
3852
3946
|
loading: props.loading,
|
|
3853
|
-
items:
|
|
3854
|
-
onReview: (item) => onReview(item,
|
|
3947
|
+
items: searchedStudents,
|
|
3948
|
+
onReview: (item) => onReview(item, searchedStudents),
|
|
3949
|
+
onComment: onCommentClick,
|
|
3855
3950
|
onBadgeClick: props.onBadgeClick,
|
|
3856
3951
|
onLessonClick: props.onLessonClick,
|
|
3857
3952
|
onPathwayClick: props.onPathwayClick
|
|
@@ -3861,9 +3956,11 @@ const FileLocker = (props) => {
|
|
|
3861
3956
|
{
|
|
3862
3957
|
students: enrichedStudents,
|
|
3863
3958
|
loading: props.loading,
|
|
3959
|
+
search,
|
|
3864
3960
|
pathways: props.pathways || [],
|
|
3865
3961
|
badges: props.badges || [],
|
|
3866
3962
|
onReview,
|
|
3963
|
+
onComment: onCommentClick,
|
|
3867
3964
|
onBadgeClick: props.onBadgeClick,
|
|
3868
3965
|
onLessonClick: props.onLessonClick,
|
|
3869
3966
|
onPathwayClick: props.onPathwayClick
|
|
@@ -3873,9 +3970,11 @@ const FileLocker = (props) => {
|
|
|
3873
3970
|
{
|
|
3874
3971
|
students: enrichedStudents,
|
|
3875
3972
|
loading: props.loading,
|
|
3973
|
+
search,
|
|
3876
3974
|
badges: props.badges || [],
|
|
3877
3975
|
pathwayNameForBadge,
|
|
3878
3976
|
onReview,
|
|
3977
|
+
onComment: onCommentClick,
|
|
3879
3978
|
onBadgeClick: props.onBadgeClick,
|
|
3880
3979
|
onLessonClick: props.onLessonClick,
|
|
3881
3980
|
onPathwayClick: props.onPathwayClick
|
|
@@ -3885,17 +3984,229 @@ const FileLocker = (props) => {
|
|
|
3885
3984
|
{
|
|
3886
3985
|
students: enrichedStudents,
|
|
3887
3986
|
loading: props.loading,
|
|
3987
|
+
search,
|
|
3888
3988
|
lessons: props.lessons,
|
|
3889
3989
|
badgeForLesson,
|
|
3890
3990
|
pathwayNameForBadge,
|
|
3891
3991
|
onReview,
|
|
3992
|
+
onComment: onCommentClick,
|
|
3892
3993
|
onBadgeClick: props.onBadgeClick,
|
|
3893
3994
|
onLessonClick: props.onLessonClick,
|
|
3894
3995
|
onPathwayClick: props.onPathwayClick
|
|
3895
3996
|
}
|
|
3997
|
+
), /* @__PURE__ */ React__namespace.createElement(
|
|
3998
|
+
LeaveCommentModal,
|
|
3999
|
+
{
|
|
4000
|
+
opened: !!commenting,
|
|
4001
|
+
onClose: () => setCommenting(null),
|
|
4002
|
+
onSubmit: onCommentSubmit,
|
|
4003
|
+
hideStudentPicker: true,
|
|
4004
|
+
students: [],
|
|
4005
|
+
badges: ((_a = props.badges) == null ? void 0 : _a.map((b) => ({ badgeId: b.badgeId, displayName: b.displayName }))) || [],
|
|
4006
|
+
lessons: props.lessons.map((l) => ({ lessonId: l.lessonId, displayName: l.lessonName })),
|
|
4007
|
+
initialUserId: commenting == null ? void 0 : commenting.userId,
|
|
4008
|
+
initialBadgeId: commenting == null ? void 0 : commenting.badgeId,
|
|
4009
|
+
initialLessonId: commenting == null ? void 0 : commenting.lessonId
|
|
4010
|
+
}
|
|
3896
4011
|
));
|
|
3897
4012
|
};
|
|
3898
4013
|
|
|
4014
|
+
const TABS = [
|
|
4015
|
+
{ value: "students", label: "By student" },
|
|
4016
|
+
{ value: "badges", label: "By badge" },
|
|
4017
|
+
{ value: "lessons", label: "By lesson" }
|
|
4018
|
+
];
|
|
4019
|
+
const groupBy = (items, keyOf, titleOf) => {
|
|
4020
|
+
const order = [];
|
|
4021
|
+
const map = /* @__PURE__ */ new Map();
|
|
4022
|
+
items.forEach((item) => {
|
|
4023
|
+
const key = keyOf(item);
|
|
4024
|
+
if (!key)
|
|
4025
|
+
return;
|
|
4026
|
+
if (!map.has(key)) {
|
|
4027
|
+
map.set(key, { key, title: titleOf(item), items: [] });
|
|
4028
|
+
order.push(key);
|
|
4029
|
+
}
|
|
4030
|
+
map.get(key).items.push(item);
|
|
4031
|
+
});
|
|
4032
|
+
return order.map((key) => map.get(key));
|
|
4033
|
+
};
|
|
4034
|
+
const CommentCenter = (props) => {
|
|
4035
|
+
const [tab, setTab] = React__namespace.useState("students");
|
|
4036
|
+
const [leavingComment, setLeavingComment] = React__namespace.useState(false);
|
|
4037
|
+
const groups = React__namespace.useMemo(() => {
|
|
4038
|
+
if (tab === "students")
|
|
4039
|
+
return groupBy(props.comments, (i) => i.recipientId, (i) => i.recipientName);
|
|
4040
|
+
if (tab === "badges")
|
|
4041
|
+
return groupBy(props.comments, (i) => i.badgeId, (i) => i.badgeName || "Badge");
|
|
4042
|
+
return groupBy(props.comments, (i) => i.lessonId, (i) => i.lessonName || "Lesson");
|
|
4043
|
+
}, [props.comments, tab]);
|
|
4044
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-full flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("h1", { className: "text-2xl font-extrabold tracking-tight text-dark-blue-400" }, "Comment Center"), /* @__PURE__ */ React__namespace.createElement("p", { className: "mt-1 text-sm text-slate-500" }, "Every comment left across your organization.")), /* @__PURE__ */ React__namespace.createElement(
|
|
4045
|
+
"button",
|
|
4046
|
+
{
|
|
4047
|
+
onClick: () => setLeavingComment(true),
|
|
4048
|
+
className: "rounded-lg bg-dark-blue-400 px-4 py-2.5 text-xs font-bold text-white"
|
|
4049
|
+
},
|
|
4050
|
+
"Leave a Comment"
|
|
4051
|
+
)), /* @__PURE__ */ React__namespace.createElement(
|
|
4052
|
+
"select",
|
|
4053
|
+
{
|
|
4054
|
+
value: props.classId,
|
|
4055
|
+
onChange: (e) => props.onClassChange(e.target.value),
|
|
4056
|
+
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"
|
|
4057
|
+
},
|
|
4058
|
+
/* @__PURE__ */ React__namespace.createElement("option", { value: "" }, "Select a class"),
|
|
4059
|
+
props.classes.map((c) => /* @__PURE__ */ React__namespace.createElement("option", { key: c.classId, value: c.classId }, c.name))
|
|
4060
|
+
), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-fit gap-1 rounded-xl border border-slate-200 bg-white p-1" }, TABS.map((t) => /* @__PURE__ */ React__namespace.createElement(
|
|
4061
|
+
"button",
|
|
4062
|
+
{
|
|
4063
|
+
key: t.value,
|
|
4064
|
+
onClick: () => setTab(t.value),
|
|
4065
|
+
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"}`
|
|
4066
|
+
},
|
|
4067
|
+
t.label
|
|
4068
|
+
))), props.comments.length === 0 ? /* @__PURE__ */ React__namespace.createElement(
|
|
4069
|
+
PlaceholderBanner,
|
|
4070
|
+
{
|
|
4071
|
+
title: "No comments to display",
|
|
4072
|
+
description: "Nothing has been left for this organization yet.",
|
|
4073
|
+
loading: props.loading,
|
|
4074
|
+
icon: "thinking"
|
|
4075
|
+
}
|
|
4076
|
+
) : /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-4" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "grid grid-cols-[1.3fr_1.3fr_2fr_1fr_1fr] items-center gap-3 px-5 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, /* @__PURE__ */ React__namespace.createElement("div", null, tab === "students" ? "Badge / Lesson" : "Student"), /* @__PURE__ */ React__namespace.createElement("div", null, "Left By"), /* @__PURE__ */ React__namespace.createElement("div", null, "Comment"), /* @__PURE__ */ React__namespace.createElement("div", { className: "text-center" }, "Flag"), /* @__PURE__ */ React__namespace.createElement("div", { className: "text-center" }, "Status")), groups.map((group) => /* @__PURE__ */ React__namespace.createElement("div", { key: group.key, className: "overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "border-b border-slate-100 bg-slate-50/60 px-5 py-2.5 text-xs font-extrabold text-dark-blue-400" }, group.title), group.items.map((item, i) => /* @__PURE__ */ React__namespace.createElement(
|
|
4077
|
+
"div",
|
|
4078
|
+
{
|
|
4079
|
+
key: item.commentId,
|
|
4080
|
+
className: `grid grid-cols-[1.3fr_1.3fr_2fr_1fr_1fr] items-center gap-3 px-5 py-3.5 ${i < group.items.length - 1 ? "border-b border-slate-100" : ""}`
|
|
4081
|
+
},
|
|
4082
|
+
/* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-xs font-bold text-dark-blue-400" }, tab === "students" ? item.badgeName || item.lessonName || "General" : item.recipientName),
|
|
4083
|
+
/* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-[11px] text-slate-500" }, item.authorName || "\u2014"),
|
|
4084
|
+
/* @__PURE__ */ React__namespace.createElement("div", { className: "text-xs text-slate-600" }, item.commentText),
|
|
4085
|
+
/* @__PURE__ */ React__namespace.createElement("div", { className: "flex justify-center" }, item.requireValidation && /* @__PURE__ */ React__namespace.createElement("span", { className: "rounded-full bg-gold-400/15 px-2 py-0.5 text-[10px] font-bold text-dark-blue-400" }, "Requires validation")),
|
|
4086
|
+
/* @__PURE__ */ React__namespace.createElement("div", { className: "flex justify-center" }, !item.requireValidation ? /* @__PURE__ */ React__namespace.createElement("span", { className: "text-[11px] text-slate-400" }, "\u2014") : item.resolvedAt ? /* @__PURE__ */ React__namespace.createElement(icons.IconCheck, { size: 16, stroke: 3, className: "text-mint-400" }) : /* @__PURE__ */ React__namespace.createElement(
|
|
4087
|
+
"button",
|
|
4088
|
+
{
|
|
4089
|
+
onClick: () => props.onResolve(item.commentId),
|
|
4090
|
+
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"
|
|
4091
|
+
},
|
|
4092
|
+
"Resolve"
|
|
4093
|
+
))
|
|
4094
|
+
))))), /* @__PURE__ */ React__namespace.createElement(
|
|
4095
|
+
LeaveCommentModal,
|
|
4096
|
+
{
|
|
4097
|
+
opened: leavingComment,
|
|
4098
|
+
onClose: () => setLeavingComment(false),
|
|
4099
|
+
onSubmit: (comment) => {
|
|
4100
|
+
props.onLeaveComment(comment);
|
|
4101
|
+
setLeavingComment(false);
|
|
4102
|
+
},
|
|
4103
|
+
students: props.students,
|
|
4104
|
+
badges: props.badges,
|
|
4105
|
+
lessons: props.lessons
|
|
4106
|
+
}
|
|
4107
|
+
));
|
|
4108
|
+
};
|
|
4109
|
+
|
|
4110
|
+
var __defProp = Object.defineProperty;
|
|
4111
|
+
var __defProps = Object.defineProperties;
|
|
4112
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4113
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
4114
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4115
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
4116
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4117
|
+
var __spreadValues = (a, b) => {
|
|
4118
|
+
for (var prop in b || (b = {}))
|
|
4119
|
+
if (__hasOwnProp.call(b, prop))
|
|
4120
|
+
__defNormalProp(a, prop, b[prop]);
|
|
4121
|
+
if (__getOwnPropSymbols)
|
|
4122
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
4123
|
+
if (__propIsEnum.call(b, prop))
|
|
4124
|
+
__defNormalProp(a, prop, b[prop]);
|
|
4125
|
+
}
|
|
4126
|
+
return a;
|
|
4127
|
+
};
|
|
4128
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
4129
|
+
const initials = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
|
|
4130
|
+
const ValidationCenter = (props) => {
|
|
4131
|
+
const [selected, setSelected] = React__namespace.useState({});
|
|
4132
|
+
React__namespace.useEffect(() => {
|
|
4133
|
+
setSelected({});
|
|
4134
|
+
}, [props.classId, props.badgeId]);
|
|
4135
|
+
const toggle = (userId, checked) => setSelected((prev) => __spreadProps(__spreadValues({}, prev), { [userId]: checked }));
|
|
4136
|
+
const selectedIds = Object.keys(selected).filter((userId) => selected[userId]);
|
|
4137
|
+
const eligible = props.students.filter((s) => !s.hasCredit);
|
|
4138
|
+
const onSelectAll = (checked) => {
|
|
4139
|
+
const next = {};
|
|
4140
|
+
if (checked)
|
|
4141
|
+
eligible.forEach((s) => {
|
|
4142
|
+
next[s.userId] = true;
|
|
4143
|
+
});
|
|
4144
|
+
setSelected(next);
|
|
4145
|
+
};
|
|
4146
|
+
return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-full flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("h1", { className: "text-2xl font-extrabold tracking-tight text-dark-blue-400" }, "Validation Center"), /* @__PURE__ */ React__namespace.createElement("p", { className: "mt-1 text-sm text-slate-500" }, "Directly credit students for a badge, superseding lesson and criteria requirements.")), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-wrap gap-3" }, /* @__PURE__ */ React__namespace.createElement(
|
|
4147
|
+
"select",
|
|
4148
|
+
{
|
|
4149
|
+
value: props.classId,
|
|
4150
|
+
onChange: (e) => props.onClassChange(e.target.value),
|
|
4151
|
+
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"
|
|
4152
|
+
},
|
|
4153
|
+
/* @__PURE__ */ React__namespace.createElement("option", { value: "" }, "Select a class"),
|
|
4154
|
+
props.classes.map((c) => /* @__PURE__ */ React__namespace.createElement("option", { key: c.classId, value: c.classId }, c.name))
|
|
4155
|
+
), /* @__PURE__ */ React__namespace.createElement(
|
|
4156
|
+
"select",
|
|
4157
|
+
{
|
|
4158
|
+
value: props.badgeId,
|
|
4159
|
+
onChange: (e) => props.onBadgeChange(e.target.value),
|
|
4160
|
+
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"
|
|
4161
|
+
},
|
|
4162
|
+
/* @__PURE__ */ React__namespace.createElement("option", { value: "" }, "Select a badge"),
|
|
4163
|
+
props.badges.map((b) => /* @__PURE__ */ React__namespace.createElement("option", { key: b.badgeId, value: b.badgeId }, b.displayName))
|
|
4164
|
+
)), !props.badgeId ? /* @__PURE__ */ React__namespace.createElement(
|
|
4165
|
+
PlaceholderBanner,
|
|
4166
|
+
{
|
|
4167
|
+
title: "Select a badge",
|
|
4168
|
+
description: "Choose a badge above to see which students already have credit and give it to the rest.",
|
|
4169
|
+
loading: props.loading,
|
|
4170
|
+
icon: "badges"
|
|
4171
|
+
}
|
|
4172
|
+
) : props.students.length === 0 ? /* @__PURE__ */ React__namespace.createElement(
|
|
4173
|
+
PlaceholderBanner,
|
|
4174
|
+
{
|
|
4175
|
+
title: "No students to display",
|
|
4176
|
+
description: "There are no students in this class yet.",
|
|
4177
|
+
loading: props.loading,
|
|
4178
|
+
icon: "groups"
|
|
4179
|
+
}
|
|
4180
|
+
) : /* @__PURE__ */ React__namespace.createElement("div", { className: "overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "grid grid-cols-[2.2fr_1fr] items-center gap-3 border-b border-slate-100 px-5 py-3" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, "Student"), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-center justify-center gap-2 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, /* @__PURE__ */ React__namespace.createElement(
|
|
4181
|
+
core.Checkbox,
|
|
4182
|
+
{
|
|
4183
|
+
checked: eligible.length > 0 && selectedIds.length === eligible.length,
|
|
4184
|
+
indeterminate: selectedIds.length > 0 && selectedIds.length < eligible.length,
|
|
4185
|
+
onChange: (e) => onSelectAll(e.currentTarget.checked),
|
|
4186
|
+
disabled: eligible.length === 0
|
|
4187
|
+
}
|
|
4188
|
+
), "Give Credit")), props.students.map((row, i) => /* @__PURE__ */ React__namespace.createElement(
|
|
4189
|
+
"div",
|
|
4190
|
+
{
|
|
4191
|
+
key: row.userId,
|
|
4192
|
+
className: `grid grid-cols-[2.2fr_1fr] items-center gap-3 px-5 py-3.5 ${i < props.students.length - 1 ? "border-b border-slate-100" : ""}`
|
|
4193
|
+
},
|
|
4194
|
+
/* @__PURE__ */ React__namespace.createElement("div", { className: "flex min-w-0 items-center gap-2.5" }, row.avatar ? /* @__PURE__ */ React__namespace.createElement("img", { className: "h-8 w-8 shrink-0 rounded-full object-cover", src: row.avatar, alt: "" }) : /* @__PURE__ */ React__namespace.createElement("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-mint-400/20 text-[10px] font-bold text-dark-blue-400" }, initials(row.name)), /* @__PURE__ */ React__namespace.createElement("div", { className: "truncate text-xs font-bold text-dark-blue-400" }, row.name)),
|
|
4195
|
+
/* @__PURE__ */ React__namespace.createElement("div", { className: "flex justify-center" }, row.hasCredit ? /* @__PURE__ */ React__namespace.createElement(icons.IconCheck, { size: 18, stroke: 3, className: "text-mint-400" }) : /* @__PURE__ */ React__namespace.createElement(core.Checkbox, { checked: !!selected[row.userId], onChange: (e) => toggle(row.userId, e.currentTarget.checked) }))
|
|
4196
|
+
))), props.badgeId && props.students.length > 0 && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ React__namespace.createElement(
|
|
4197
|
+
"button",
|
|
4198
|
+
{
|
|
4199
|
+
onClick: () => props.onSubmit(selectedIds),
|
|
4200
|
+
disabled: selectedIds.length === 0,
|
|
4201
|
+
className: "rounded-lg bg-dark-blue-400 px-5 py-2.5 text-xs font-bold text-white disabled:opacity-40"
|
|
4202
|
+
},
|
|
4203
|
+
"Validate ",
|
|
4204
|
+
selectedIds.length > 0 ? `${selectedIds.length} ` : "",
|
|
4205
|
+
"Student",
|
|
4206
|
+
selectedIds.length === 1 ? "" : "s"
|
|
4207
|
+
)));
|
|
4208
|
+
};
|
|
4209
|
+
|
|
3899
4210
|
Object.defineProperty(exports, 'hideNotification', {
|
|
3900
4211
|
enumerable: true,
|
|
3901
4212
|
get: function () { return notifications.hideNotification; }
|
|
@@ -3914,6 +4225,7 @@ exports.Badge = Badge;
|
|
|
3914
4225
|
exports.Badges = Badges;
|
|
3915
4226
|
exports.Class = Class;
|
|
3916
4227
|
exports.Classes = Classes;
|
|
4228
|
+
exports.CommentCenter = CommentCenter;
|
|
3917
4229
|
exports.Dashboard = Dashboard;
|
|
3918
4230
|
exports.FileLocker = FileLocker;
|
|
3919
4231
|
exports.GettingStarted = GettingStarted;
|
|
@@ -3930,4 +4242,5 @@ exports.Student = Student;
|
|
|
3930
4242
|
exports.SwitchAccount = SwitchAccount;
|
|
3931
4243
|
exports.TrialHome = TrialHome;
|
|
3932
4244
|
exports.TrialRegistration = TrialRegistration;
|
|
4245
|
+
exports.ValidationCenter = ValidationCenter;
|
|
3933
4246
|
//# sourceMappingURL=index.js.map
|