@local-civics/mgmt-ui 0.1.231 → 0.1.233
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 +135 -1
- package/dist/index.js +669 -343
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +669 -345
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.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}.-ml-2{margin-left:-.5rem}.mt-4{margin-top:1rem}.mt-3{margin-top:.75rem}.mb-8{margin-bottom:2rem}.ml-\\[29px\\]{margin-left:29px}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-full{height:100%}.h-9{height:2.25rem}.h-8{height:2rem}.h-7{height:1.75rem}.h-12{height:3rem}.h-\\[300px\\]{height:300px}.h-screen{height:100vh}.h-14{height:3.5rem}.h-16{height:4rem}.h-28{height:7rem}.h-\\[30px\\]{height:30px}.h-\\[400px\\]{height:400px}.max-h-\\[70vh\\]{max-height:70vh}.w-10{width:2.5rem}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-fit{width:-moz-fit-content;width:fit-content}.w-36{width:9rem}.w-28{width:7rem}.w-4{width:1rem}.w-9{width:2.25rem}.w-\\[296px\\]{width:296px}.w-40{width:10rem}.w-24{width:6rem}.w-56{width:14rem}.w-8{width:2rem}.w-7{width:1.75rem}.w-64{width:16rem}.w-12{width:3rem}.w-16{width:4rem}.w-\\[440px\\]{width:440px}.w-20{width:5rem}.w-\\[250px\\]{width:250px}.w-screen{width:100vw}.w-\\[500px\\]{width:500px}.w-14{width:3.5rem}.w-\\[230px\\]{width:230px}.w-\\[30px\\]{width:30px}.min-w-0{min-width:0}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.max-w-\\[460px\\]{max-width:460px}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y:-50%}.-translate-x-1\\/2,.-translate-y-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\\/2{--tw-translate-x:-50%}.rotate-180{--tw-rotate:180deg}.rotate-180,.rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate:90deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1\\.2fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1.2fr 1fr .6fr}.grid-cols-\\[1\\.5fr_2fr_1fr_0\\.6fr\\]{grid-template-columns:1.5fr 2fr 1fr .6fr}.grid-cols-\\[1\\.5fr_2fr_0\\.8fr\\]{grid-template-columns:1.5fr 2fr .8fr}.grid-cols-\\[1fr_3fr\\]{grid-template-columns:1fr 3fr}.grid-cols-\\[1fr_1fr_2fr_0\\.8fr\\]{grid-template-columns:1fr 1fr 2fr .8fr}.grid-cols-\\[2fr_1fr\\]{grid-template-columns:2fr 1fr}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1fr .6fr}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-\\[18px\\]{gap:18px}.gap-5{gap:1.25rem}.gap-4{gap:1rem}.gap-1{gap:.25rem}.gap-3{gap:.75rem}.gap-2{gap:.5rem}.gap-1\\.5{gap:.375rem}.gap-2\\.5{gap:.625rem}.gap-3\\.5{gap:.875rem}.gap-0\\.5{gap:.125rem}.gap-0{gap:0}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-y-4{row-gap:1rem}.space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.-space-y-\\[3px\\]>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(-3px*var(--tw-space-y-reverse));margin-top:calc(-3px*(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-none{overscroll-behavior:none}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-2xl{border-radius:1rem}.rounded-\\[10px\\]{border-radius:10px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:1.5rem}.rounded-\\[8px\\]{border-radius:8px}.border{border-width:1px}.border-2{border-width:2px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-l{border-left-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-sky-blue-400\\/40{border-color:rgba(59,208,242,.4)}.border-sky-blue-400\\/30{border-color:rgba(59,208,242,.3)}.border-mint-400\\/30{border-color:rgba(30,226,175,.3)}.border-gold-400\\/30{border-color:rgba(255,212,77,.3)}.border-transparent{border-color:transparent}.border-l-sky-blue-400{--tw-border-opacity:1;border-left-color:rgb(59 208 242/var(--tw-border-opacity))}.border-l-mint-400{--tw-border-opacity:1;border-left-color:rgb(30 226 175/var(--tw-border-opacity))}.border-l-gold-400{--tw-border-opacity:1;border-left-color:rgb(255 212 77/var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-sky-blue-400\\/20{background-color:rgba(59,208,242,.2)}.bg-mint-100{--tw-bg-opacity:1;background-color:rgb(208 251 240/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-gold-100{--tw-bg-opacity:1;background-color:rgb(255 248 214/var(--tw-bg-opacity))}.bg-mint-400\\/20{background-color:rgba(30,226,175,.2)}.bg-transparent{background-color:transparent}.bg-dark-blue-400{--tw-bg-opacity:1;background-color:rgb(35 42 58/var(--tw-bg-opacity))}.bg-white\\/90{background-color:hsla(0,0%,100%,.9)}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-slate-50\\/60{background-color:rgba(248,250,252,.6)}.bg-sky-blue-400\\/15{background-color:rgba(59,208,242,.15)}.bg-gold-400\\/15{background-color:rgba(255,212,77,.15)}.bg-mint-400\\/15{background-color:rgba(30,226,175,.15)}.bg-sky-blue-400\\/25{background-color:rgba(59,208,242,.25)}.bg-mint-400\\/25{background-color:rgba(30,226,175,.25)}.bg-gold-400\\/25{background-color:rgba(255,212,77,.25)}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-sky-blue-400{--tw-gradient-from:#3bd0f2;--tw-gradient-to:rgba(59,208,242,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-mint-400{--tw-gradient-from:#1ee2af;--tw-gradient-to:rgba(30,226,175,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-gold-400{--tw-gradient-from:#ffd44d;--tw-gradient-to:rgba(255,212,77,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-dark-blue-600{--tw-gradient-from:#0a0f2e;--tw-gradient-to:rgba(10,15,46,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-sky-blue-400\\/15{--tw-gradient-from:rgba(59,208,242,.15);--tw-gradient-to:rgba(59,208,242,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-dark-blue-400{--tw-gradient-to:rgba(35,42,58,0);--tw-gradient-stops:var(--tw-gradient-from),#232a3a,var(--tw-gradient-to)}.to-dark-blue-400{--tw-gradient-to:#232a3a}.to-\\[\\#f5c300\\]{--tw-gradient-to:#f5c300}.to-sky-blue-400{--tw-gradient-to:#3bd0f2}.to-mint-400\\/15{--tw-gradient-to:rgba(30,226,175,.15)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-4{padding:1rem}.p-8{padding:2rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-3{padding:.75rem}.p-2\\.5{padding:.625rem}.p-2{padding:.5rem}.px-\\[22px\\]{padding-left:22px;padding-right:22px}.py-\\[18px\\]{padding-bottom:18px;padding-top:18px}.px-4{padding-left:1rem;padding-right:1rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3\\.5{padding-left:.875rem;padding-right:.875rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}.py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.py-4{padding-bottom:1rem;padding-top:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pl-9{padding-left:2.25rem}.pr-4{padding-right:1rem}.pl-10{padding-left:2.5rem}.pb-2{padding-bottom:.5rem}.pr-1{padding-right:.25rem}.pl-4{padding-left:1rem}.pt-0\\.5{padding-top:.125rem}.pt-0{padding-top:0}.pb-12{padding-bottom:3rem}.pl-2\\.5{padding-left:.625rem}.pl-2{padding-left:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-proxima{font-family:ProximaNova}.text-\\[15\\.5px\\]{font-size:15.5px}.text-xs{font-size:.75rem;line-height:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-\\[10px\\]{font-size:10px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-\\[10\\.5px\\]{font-size:10.5px}.text-\\[11px\\]{font-size:11px}.text-\\[28px\\]{font-size:28px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-base{font-size:1rem;line-height:1.5rem}.text-\\[11\\.5px\\]{font-size:11.5px}.text-3xl{font-size:1.875rem;line-height:2.25rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-black{font-weight:900}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-dark-blue-400{--tw-text-opacity:1;color:rgb(35 42 58/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-sky-blue-400{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-mint-400{--tw-text-opacity:1;color:rgb(30 226 175/var(--tw-text-opacity))}.text-white\\/70{color:hsla(0,0%,100%,.7)}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-gold-400{--tw-text-opacity:1;color:rgb(255 212 77/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\],.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\]{--tw-shadow:0 3px 12px rgba(255,212,77,.35);--tw-shadow-colored:0 3px 12px var(--tw-shadow-color)}.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{--tw-shadow:0 2px 10px rgba(30,226,175,.15);--tw-shadow-colored:0 2px 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.line-clamp-2{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;overflow:hidden}*,:after,:before{border-style:solid;border-width:0}button{background-color:transparent;background-image:none;color:inherit;cursor:pointer;font:inherit;margin:0;padding:0;text-transform:none}.placeholder\\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.placeholder\\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.first\\:ml-0:first-child{margin-left:0}.hover\\:scale-\\[1\\.02\\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.hover\\:bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\\:text-sky-blue-400:hover{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.hover\\:text-slate-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.hover\\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\\:border-sky-blue-400:focus{--tw-border-opacity:1;border-color:rgb(59 208 242/var(--tw-border-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\\:opacity-50:disabled{opacity:.5}@media (min-width:640px){.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:768px){.md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}";
|
|
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,
|
|
@@ -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,6 +3450,16 @@ 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"
|
|
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"
|
|
3449
3463
|
)),
|
|
3450
3464
|
/* @__PURE__ */ React__namespace.createElement(icons.IconChevronRight, { size: 16, stroke: 2, className: `w-4 shrink-0 text-slate-300 transition-transform ${isOpen ? "rotate-90" : ""}` })
|
|
3451
3465
|
), isOpen && /* @__PURE__ */ React__namespace.createElement("div", { className: "border-t border-slate-100 px-4 py-3" }, /* @__PURE__ */ React__namespace.createElement(
|
|
@@ -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,33 +3507,33 @@ function SubmissionDetail(props) {
|
|
|
3493
3507
|
)));
|
|
3494
3508
|
}
|
|
3495
3509
|
|
|
3496
|
-
var __defProp$
|
|
3497
|
-
var __defProps$
|
|
3498
|
-
var __getOwnPropDescs$
|
|
3499
|
-
var __getOwnPropSymbols$
|
|
3500
|
-
var __hasOwnProp$
|
|
3501
|
-
var __propIsEnum$
|
|
3502
|
-
var __defNormalProp$
|
|
3503
|
-
var __spreadValues$
|
|
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) => {
|
|
3504
3518
|
for (var prop in b || (b = {}))
|
|
3505
|
-
if (__hasOwnProp$
|
|
3506
|
-
__defNormalProp$
|
|
3507
|
-
if (__getOwnPropSymbols$
|
|
3508
|
-
for (var prop of __getOwnPropSymbols$
|
|
3509
|
-
if (__propIsEnum$
|
|
3510
|
-
__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]);
|
|
3511
3525
|
}
|
|
3512
3526
|
return a;
|
|
3513
3527
|
};
|
|
3514
|
-
var __spreadProps$
|
|
3528
|
+
var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
|
|
3515
3529
|
const useFilteredStudents = (students) => {
|
|
3516
3530
|
return React__namespace.useMemo(() => {
|
|
3517
|
-
const byBadge = (badgeId) => students.map((s) => __spreadProps$
|
|
3531
|
+
const byBadge = (badgeId) => students.map((s) => __spreadProps$2(__spreadValues$2({}, s), {
|
|
3518
3532
|
submissions: (s.submissions || []).filter(
|
|
3519
3533
|
(sub) => sub.badgeId === badgeId
|
|
3520
3534
|
)
|
|
3521
3535
|
})).filter((s) => s.submissions.length);
|
|
3522
|
-
const byLesson = (lessonName) => students.map((s) => __spreadProps$
|
|
3536
|
+
const byLesson = (lessonName) => students.map((s) => __spreadProps$2(__spreadValues$2({}, s), {
|
|
3523
3537
|
submissions: (s.submissions || []).filter(
|
|
3524
3538
|
(sub) => sub.lessonName === lessonName
|
|
3525
3539
|
)
|
|
@@ -3530,7 +3544,7 @@ const useFilteredStudents = (students) => {
|
|
|
3530
3544
|
(c) => c.startsWith(pathwayId)
|
|
3531
3545
|
)
|
|
3532
3546
|
).map((b) => b.badgeId);
|
|
3533
|
-
return students.map((s) => __spreadProps$
|
|
3547
|
+
return students.map((s) => __spreadProps$2(__spreadValues$2({}, s), {
|
|
3534
3548
|
submissions: (s.submissions || []).filter(
|
|
3535
3549
|
(sub) => validBadgeIds.includes(sub.badgeId)
|
|
3536
3550
|
)
|
|
@@ -3540,26 +3554,108 @@ const useFilteredStudents = (students) => {
|
|
|
3540
3554
|
}, [students]);
|
|
3541
3555
|
};
|
|
3542
3556
|
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
|
|
3549
|
-
|
|
3550
|
-
|
|
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.email ? `${s.name} (${s.email})` : 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) => {
|
|
3551
3647
|
for (var prop in b || (b = {}))
|
|
3552
|
-
if (__hasOwnProp.call(b, prop))
|
|
3553
|
-
__defNormalProp(a, prop, b[prop]);
|
|
3554
|
-
if (__getOwnPropSymbols)
|
|
3555
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
3556
|
-
if (__propIsEnum.call(b, prop))
|
|
3557
|
-
__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]);
|
|
3558
3654
|
}
|
|
3559
3655
|
return a;
|
|
3560
3656
|
};
|
|
3561
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
3562
|
-
const TABS = [
|
|
3657
|
+
var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
|
|
3658
|
+
const TABS$1 = [
|
|
3563
3659
|
{ value: "students", label: "By student" },
|
|
3564
3660
|
{ value: "pathways", label: "By pathway" },
|
|
3565
3661
|
{ value: "badges", label: "By badge" },
|
|
@@ -3625,6 +3721,7 @@ const PathwayGroups = (props) => {
|
|
|
3625
3721
|
items: filtered,
|
|
3626
3722
|
hidePathway: true,
|
|
3627
3723
|
onReview: (item) => props.onReview(item, filtered, p.title),
|
|
3724
|
+
onComment: props.onComment,
|
|
3628
3725
|
onBadgeClick: props.onBadgeClick,
|
|
3629
3726
|
onLessonClick: props.onLessonClick
|
|
3630
3727
|
}
|
|
@@ -3662,6 +3759,7 @@ const BadgeGroups = (props) => {
|
|
|
3662
3759
|
hideBadge: true,
|
|
3663
3760
|
hidePathway: true,
|
|
3664
3761
|
onReview: (item) => props.onReview(item, filtered, b.displayName),
|
|
3762
|
+
onComment: props.onComment,
|
|
3665
3763
|
onLessonClick: props.onLessonClick
|
|
3666
3764
|
}
|
|
3667
3765
|
)
|
|
@@ -3693,11 +3791,12 @@ const LessonGroups = (props) => {
|
|
|
3693
3791
|
count: countFiles(filtered),
|
|
3694
3792
|
onTitleClick: props.onLessonClick ? () => props.onLessonClick(l.lessonId) : void 0
|
|
3695
3793
|
},
|
|
3696
|
-
/* @__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 })
|
|
3697
3795
|
);
|
|
3698
3796
|
}));
|
|
3699
3797
|
};
|
|
3700
3798
|
const FileLocker = (props) => {
|
|
3799
|
+
var _a;
|
|
3701
3800
|
const [tab, setTab] = React__namespace.useState("students");
|
|
3702
3801
|
const [reviewing, setReviewing] = React__namespace.useState(null);
|
|
3703
3802
|
const [search, setSearch] = React__namespace.useState("");
|
|
@@ -3756,8 +3855,8 @@ const FileLocker = (props) => {
|
|
|
3756
3855
|
return map;
|
|
3757
3856
|
}, [props.badges]);
|
|
3758
3857
|
const enrichedStudents = React__namespace.useMemo(() => {
|
|
3759
|
-
return props.students.map((s) => __spreadProps(__spreadValues({}, s), {
|
|
3760
|
-
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), {
|
|
3761
3860
|
pathwayName: pathwayNameForBadge[sub.badgeId] || "",
|
|
3762
3861
|
pathwayId: pathwayIdForBadge[sub.badgeId]
|
|
3763
3862
|
}))
|
|
@@ -3774,7 +3873,18 @@ const FileLocker = (props) => {
|
|
|
3774
3873
|
() => searchLower ? enrichedStudents.filter((s) => matchesSearch(s, searchLower)) : enrichedStudents,
|
|
3775
3874
|
[enrichedStudents, searchLower]
|
|
3776
3875
|
);
|
|
3876
|
+
const [commenting, setCommenting] = React__namespace.useState(null);
|
|
3777
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
|
+
};
|
|
3778
3888
|
const onNav = (dir) => {
|
|
3779
3889
|
if (!reviewing)
|
|
3780
3890
|
return;
|
|
@@ -3782,7 +3892,7 @@ const FileLocker = (props) => {
|
|
|
3782
3892
|
if (idx === -1)
|
|
3783
3893
|
return;
|
|
3784
3894
|
const next = reviewing.list[(idx + dir + reviewing.list.length) % reviewing.list.length];
|
|
3785
|
-
setReviewing(__spreadProps(__spreadValues({}, reviewing), { student: next }));
|
|
3895
|
+
setReviewing(__spreadProps$1(__spreadValues$1({}, reviewing), { student: next }));
|
|
3786
3896
|
};
|
|
3787
3897
|
if (reviewing) {
|
|
3788
3898
|
return /* @__PURE__ */ React__namespace.createElement(
|
|
@@ -3813,7 +3923,7 @@ const FileLocker = (props) => {
|
|
|
3813
3923
|
},
|
|
3814
3924
|
/* @__PURE__ */ React__namespace.createElement("option", { value: "" }, "Select a class"),
|
|
3815
3925
|
props.classes.map((g) => /* @__PURE__ */ React__namespace.createElement("option", { key: g.classId, value: g.classId }, g.name))
|
|
3816
|
-
), !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(
|
|
3817
3927
|
"button",
|
|
3818
3928
|
{
|
|
3819
3929
|
key: t.value,
|
|
@@ -3836,6 +3946,7 @@ const FileLocker = (props) => {
|
|
|
3836
3946
|
loading: props.loading,
|
|
3837
3947
|
items: searchedStudents,
|
|
3838
3948
|
onReview: (item) => onReview(item, searchedStudents),
|
|
3949
|
+
onComment: onCommentClick,
|
|
3839
3950
|
onBadgeClick: props.onBadgeClick,
|
|
3840
3951
|
onLessonClick: props.onLessonClick,
|
|
3841
3952
|
onPathwayClick: props.onPathwayClick
|
|
@@ -3849,6 +3960,7 @@ const FileLocker = (props) => {
|
|
|
3849
3960
|
pathways: props.pathways || [],
|
|
3850
3961
|
badges: props.badges || [],
|
|
3851
3962
|
onReview,
|
|
3963
|
+
onComment: onCommentClick,
|
|
3852
3964
|
onBadgeClick: props.onBadgeClick,
|
|
3853
3965
|
onLessonClick: props.onLessonClick,
|
|
3854
3966
|
onPathwayClick: props.onPathwayClick
|
|
@@ -3862,6 +3974,7 @@ const FileLocker = (props) => {
|
|
|
3862
3974
|
badges: props.badges || [],
|
|
3863
3975
|
pathwayNameForBadge,
|
|
3864
3976
|
onReview,
|
|
3977
|
+
onComment: onCommentClick,
|
|
3865
3978
|
onBadgeClick: props.onBadgeClick,
|
|
3866
3979
|
onLessonClick: props.onLessonClick,
|
|
3867
3980
|
onPathwayClick: props.onPathwayClick
|
|
@@ -3876,13 +3989,224 @@ const FileLocker = (props) => {
|
|
|
3876
3989
|
badgeForLesson,
|
|
3877
3990
|
pathwayNameForBadge,
|
|
3878
3991
|
onReview,
|
|
3992
|
+
onComment: onCommentClick,
|
|
3879
3993
|
onBadgeClick: props.onBadgeClick,
|
|
3880
3994
|
onLessonClick: props.onLessonClick,
|
|
3881
3995
|
onPathwayClick: props.onPathwayClick
|
|
3882
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
|
+
}
|
|
3883
4011
|
));
|
|
3884
4012
|
};
|
|
3885
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")), /* @__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
|
+
|
|
3886
4210
|
Object.defineProperty(exports, 'hideNotification', {
|
|
3887
4211
|
enumerable: true,
|
|
3888
4212
|
get: function () { return notifications.hideNotification; }
|
|
@@ -3901,6 +4225,7 @@ exports.Badge = Badge;
|
|
|
3901
4225
|
exports.Badges = Badges;
|
|
3902
4226
|
exports.Class = Class;
|
|
3903
4227
|
exports.Classes = Classes;
|
|
4228
|
+
exports.CommentCenter = CommentCenter;
|
|
3904
4229
|
exports.Dashboard = Dashboard;
|
|
3905
4230
|
exports.FileLocker = FileLocker;
|
|
3906
4231
|
exports.GettingStarted = GettingStarted;
|
|
@@ -3917,4 +4242,5 @@ exports.Student = Student;
|
|
|
3917
4242
|
exports.SwitchAccount = SwitchAccount;
|
|
3918
4243
|
exports.TrialHome = TrialHome;
|
|
3919
4244
|
exports.TrialRegistration = TrialRegistration;
|
|
4245
|
+
exports.ValidationCenter = ValidationCenter;
|
|
3920
4246
|
//# sourceMappingURL=index.js.map
|