@local-civics/mgmt-ui 0.1.213 → 0.1.214

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -61,7 +61,7 @@ function styleInject(css, ref) {
61
61
  }
62
62
  }
63
63
 
64
- var css_248z = "@font-face{font-family:ProximaNova;src:url(https://cdn.localcivics.io/fonts/ProximaNova.otf) format(\"opentype\")}@font-face{font-family:ProximaNova;font-weight:700;src:url(https://cdn.localcivics.io/fonts/ProximaNovaBold.otf) format(\"opentype\")}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.\\!relative{position:relative!important}.m-3{margin:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.mt-1{margin-top:.25rem}.mt-6{margin-top:1.5rem}.mt-2{margin-top:.5rem}.mt-1\\.5{margin-top:.375rem}.ml-\\[29px\\]{margin-left:29px}.mt-0\\.5{margin-top:.125rem}.mt-0{margin-top:0}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-full{height:100%}.h-8{height:2rem}.h-7{height:1.75rem}.h-screen{height:100vh}.h-\\[30px\\]{height:30px}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-8{width:2rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-7{width:1.75rem}.w-screen{width:100vw}.w-\\[230px\\]{width:230px}.w-24{width:6rem}.w-\\[30px\\]{width:30px}.min-w-0{min-width:0}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.rotate-90{--tw-rotate:90deg}.rotate-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1\\.2fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1.2fr 1fr .6fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-5{gap:1.25rem}.gap-2\\.5{gap:.625rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-1{gap:.25rem}.gap-1\\.5{gap:.375rem}.gap-3{gap:.75rem}.gap-0\\.5{gap:.125rem}.gap-0{gap:0}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-y-4{row-gap:1rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-none{overscroll-behavior:none}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-xl{border-radius:.75rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-2xl{border-radius:1rem}.rounded-\\[10px\\]{border-radius:10px}.rounded-\\[8px\\]{border-radius:8px}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-l{border-left-width:1px}.border-none{border-style:none}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-sky-blue-400\\/30{border-color:rgba(59,208,242,.3)}.border-mint-400\\/30{border-color:rgba(30,226,175,.3)}.border-gold-400\\/30{border-color:rgba(255,212,77,.3)}.border-transparent{border-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-dark-blue-400{--tw-bg-opacity:1;background-color:rgb(35 42 58/var(--tw-bg-opacity))}.bg-mint-400\\/20{background-color:rgba(30,226,175,.2)}.bg-gold-400\\/15{background-color:rgba(255,212,77,.15)}.bg-sky-blue-400\\/15{background-color:rgba(59,208,242,.15)}.bg-sky-blue-400\\/25{background-color:rgba(59,208,242,.25)}.bg-mint-400\\/15{background-color:rgba(30,226,175,.15)}.bg-mint-400\\/25{background-color:rgba(30,226,175,.25)}.bg-gold-400\\/25{background-color:rgba(255,212,77,.25)}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-gold-400{--tw-gradient-from:#ffd44d;--tw-gradient-to:rgba(255,212,77,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-dark-blue-600{--tw-gradient-from:#0a0f2e;--tw-gradient-to:rgba(10,15,46,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-sky-blue-400\\/15{--tw-gradient-from:rgba(59,208,242,.15);--tw-gradient-to:rgba(59,208,242,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-dark-blue-400{--tw-gradient-to:rgba(35,42,58,0);--tw-gradient-stops:var(--tw-gradient-from),#232a3a,var(--tw-gradient-to)}.to-\\[\\#f5c300\\]{--tw-gradient-to:#f5c300}.to-sky-blue-400{--tw-gradient-to:#3bd0f2}.to-mint-400\\/15{--tw-gradient-to:rgba(30,226,175,.15)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-8{padding:2rem}.p-4{padding:1rem}.p-2\\.5{padding:.625rem}.p-2{padding:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-4{padding-bottom:1rem;padding-top:1rem}.px-3\\.5{padding-left:.875rem;padding-right:.875rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.pl-2\\.5{padding-left:.625rem}.pl-2{padding-left:.5rem}.text-center{text-align:center}.font-proxima{font-family:ProximaNova}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-\\[10px\\]{font-size:10px}.text-\\[10\\.5px\\]{font-size:10.5px}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\\[11px\\]{font-size:11px}.text-\\[11\\.5px\\]{font-size:11.5px}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-black{font-weight:900}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-dark-blue-400{--tw-text-opacity:1;color:rgb(35 42 58/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-sky-blue-400{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-mint-400{--tw-text-opacity:1;color:rgb(30 226 175/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-white\\/70{color:hsla(0,0%,100%,.7)}.text-gold-400{--tw-text-opacity:1;color:rgb(255 212 77/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\],.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\]{--tw-shadow:0 3px 12px rgba(255,212,77,.35);--tw-shadow-colored:0 3px 12px var(--tw-shadow-color)}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{--tw-shadow:0 2px 10px rgba(30,226,175,.15);--tw-shadow-colored:0 2px 10px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}*,:after,:before{border-style:solid;border-width:0}.placeholder\\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.placeholder\\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.disabled\\:opacity-50:disabled{opacity:.5}";
64
+ var css_248z = "@font-face{font-family:ProximaNova;src:url(https://cdn.localcivics.io/fonts/ProximaNova.otf) format(\"opentype\")}@font-face{font-family:ProximaNova;font-weight:700;src:url(https://cdn.localcivics.io/fonts/ProximaNovaBold.otf) format(\"opentype\")}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.\\!relative{position:relative!important}.left-3\\.5{left:.875rem}.top-1\\/2{top:50%}.left-3{left:.75rem}.m-3{margin:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.mt-0\\.5{margin-top:.125rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-6{margin-top:1.5rem}.mt-2{margin-top:.5rem}.mt-1\\.5{margin-top:.375rem}.ml-\\[29px\\]{margin-left:29px}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-full{height:100%}.h-8{height:2rem}.h-7{height:1.75rem}.h-12{height:3rem}.h-9{height:2.25rem}.h-screen{height:100vh}.h-\\[30px\\]{height:30px}.w-10{width:2.5rem}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-8{width:2rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-7{width:1.75rem}.w-64{width:16rem}.w-12{width:3rem}.w-16{width:4rem}.w-36{width:9rem}.w-4{width:1rem}.w-9{width:2.25rem}.w-\\[440px\\]{width:440px}.w-40{width:10rem}.w-screen{width:100vw}.w-\\[230px\\]{width:230px}.w-24{width:6rem}.w-\\[30px\\]{width:30px}.min-w-0{min-width:0}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-\\[1100px\\]{max-width:1100px}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-y-1\\/2{--tw-translate-y:-50%}.-translate-y-1\\/2,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.rotate-90{--tw-rotate:90deg}.rotate-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.grid-cols-\\[2\\.2fr_1\\.2fr_1fr_1\\.2fr_1fr_0\\.6fr\\]{grid-template-columns:2.2fr 1.2fr 1fr 1.2fr 1fr .6fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-\\[18px\\]{gap:18px}.gap-5{gap:1.25rem}.gap-2\\.5{gap:.625rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-1{gap:.25rem}.gap-1\\.5{gap:.375rem}.gap-3{gap:.75rem}.gap-3\\.5{gap:.875rem}.gap-0\\.5{gap:.125rem}.gap-0{gap:0}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-y-4{row-gap:1rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-none{overscroll-behavior:none}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-2xl{border-radius:1rem}.rounded-\\[10px\\]{border-radius:10px}.rounded-xl{border-radius:.75rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-\\[8px\\]{border-radius:8px}.border{border-width:1px}.border-l-4{border-left-width:4px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-l{border-left-width:1px}.border-none{border-style:none}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-sky-blue-400\\/30{border-color:rgba(59,208,242,.3)}.border-mint-400\\/30{border-color:rgba(30,226,175,.3)}.border-gold-400\\/30{border-color:rgba(255,212,77,.3)}.border-transparent{border-color:transparent}.border-l-sky-blue-400{--tw-border-opacity:1;border-left-color:rgb(59 208 242/var(--tw-border-opacity))}.border-l-mint-400{--tw-border-opacity:1;border-left-color:rgb(30 226 175/var(--tw-border-opacity))}.border-l-gold-400{--tw-border-opacity:1;border-left-color:rgb(255 212 77/var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-dark-blue-400{--tw-bg-opacity:1;background-color:rgb(35 42 58/var(--tw-bg-opacity))}.bg-mint-400\\/20{background-color:rgba(30,226,175,.2)}.bg-mint-100{--tw-bg-opacity:1;background-color:rgb(208 251 240/var(--tw-bg-opacity))}.bg-sky-blue-400\\/20{background-color:rgba(59,208,242,.2)}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-white\\/90{background-color:hsla(0,0%,100%,.9)}.bg-gold-400\\/15{background-color:rgba(255,212,77,.15)}.bg-sky-blue-400\\/15{background-color:rgba(59,208,242,.15)}.bg-sky-blue-400\\/25{background-color:rgba(59,208,242,.25)}.bg-mint-400\\/15{background-color:rgba(30,226,175,.15)}.bg-mint-400\\/25{background-color:rgba(30,226,175,.25)}.bg-gold-400\\/25{background-color:rgba(255,212,77,.25)}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-sky-blue-400{--tw-gradient-from:#3bd0f2;--tw-gradient-to:rgba(59,208,242,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-mint-400{--tw-gradient-from:#1ee2af;--tw-gradient-to:rgba(30,226,175,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-gold-400{--tw-gradient-from:#ffd44d;--tw-gradient-to:rgba(255,212,77,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-dark-blue-600{--tw-gradient-from:#0a0f2e;--tw-gradient-to:rgba(10,15,46,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-sky-blue-400\\/15{--tw-gradient-from:rgba(59,208,242,.15);--tw-gradient-to:rgba(59,208,242,0);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-dark-blue-400{--tw-gradient-to:rgba(35,42,58,0);--tw-gradient-stops:var(--tw-gradient-from),#232a3a,var(--tw-gradient-to)}.to-dark-blue-400{--tw-gradient-to:#232a3a}.to-\\[\\#f5c300\\]{--tw-gradient-to:#f5c300}.to-sky-blue-400{--tw-gradient-to:#3bd0f2}.to-mint-400\\/15{--tw-gradient-to:rgba(30,226,175,.15)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-8{padding:2rem}.p-4{padding:1rem}.p-1{padding:.25rem}.p-5{padding:1.25rem}.p-2\\.5{padding:.625rem}.p-2{padding:.5rem}.px-\\[22px\\]{padding-left:22px;padding-right:22px}.py-\\[18px\\]{padding-bottom:18px;padding-top:18px}.px-4{padding-left:1rem;padding-right:1rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-4{padding-bottom:1rem;padding-top:1rem}.px-3\\.5{padding-left:.875rem;padding-right:.875rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2\\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.pb-2{padding-bottom:.5rem}.pl-10{padding-left:2.5rem}.pr-4{padding-right:1rem}.pl-2\\.5{padding-left:.625rem}.pl-2{padding-left:.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-proxima{font-family:ProximaNova}.text-\\[15\\.5px\\]{font-size:15.5px}.text-xs{font-size:.75rem;line-height:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-\\[10px\\]{font-size:10px}.text-\\[10\\.5px\\]{font-size:10.5px}.text-\\[11px\\]{font-size:11px}.text-\\[28px\\]{font-size:28px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-base{font-size:1rem;line-height:1.5rem}.text-\\[11\\.5px\\]{font-size:11.5px}.text-3xl{font-size:1.875rem;line-height:2.25rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-black{font-weight:900}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-dark-blue-400{--tw-text-opacity:1;color:rgb(35 42 58/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-sky-blue-400{--tw-text-opacity:1;color:rgb(59 208 242/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-mint-400{--tw-text-opacity:1;color:rgb(30 226 175/var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-white\\/70{color:hsla(0,0%,100%,.7)}.text-gold-400{--tw-text-opacity:1;color:rgb(255 212 77/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\],.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_3px_12px_rgba\\(255\\2c 212\\2c 77\\2c 0\\.35\\)\\]{--tw-shadow:0 3px 12px rgba(255,212,77,.35);--tw-shadow-colored:0 3px 12px var(--tw-shadow-color)}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\\[0_2px_10px_rgba\\(30\\2c 226\\2c 175\\2c 0\\.15\\)\\]{--tw-shadow:0 2px 10px rgba(30,226,175,.15);--tw-shadow-colored:0 2px 10px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}*,:after,:before{border-style:solid;border-width:0}button{background-color:transparent;background-image:none;color:inherit;cursor:pointer;font:inherit;margin:0;padding:0;text-transform:none}.placeholder\\:text-slate-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.placeholder\\:text-slate-400::placeholder{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.hover\\:scale-\\[1\\.02\\]:hover{--tw-scale-x:1.02;--tw-scale-y:1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\\:bg-red-50:hover{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.hover\\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.hover\\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\\:text-slate-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\\:text-slate-500:hover{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\\:border-sky-blue-400:focus{--tw-border-opacity:1;border-color:rgb(59 208 242/var(--tw-border-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.disabled\\:opacity-50:disabled{opacity:.5}";
65
65
  styleInject(css_248z);
66
66
 
67
67
  function UserButton({ image, name, email }) {
@@ -145,25 +145,25 @@ function LinksGroup({ icon: Icon, href, label, accent = "cyan", initiallyOpened,
145
145
  ), 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));
146
146
  }
147
147
 
148
- var __defProp$d = Object.defineProperty;
149
- var __defProps$9 = Object.defineProperties;
150
- var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
151
- var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
152
- var __hasOwnProp$d = Object.prototype.hasOwnProperty;
153
- var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
154
- var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
155
- var __spreadValues$d = (a, b) => {
148
+ var __defProp$e = Object.defineProperty;
149
+ var __defProps$a = Object.defineProperties;
150
+ var __getOwnPropDescs$a = Object.getOwnPropertyDescriptors;
151
+ var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
152
+ var __hasOwnProp$e = Object.prototype.hasOwnProperty;
153
+ var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
154
+ var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
155
+ var __spreadValues$e = (a, b) => {
156
156
  for (var prop in b || (b = {}))
157
- if (__hasOwnProp$d.call(b, prop))
158
- __defNormalProp$d(a, prop, b[prop]);
159
- if (__getOwnPropSymbols$d)
160
- for (var prop of __getOwnPropSymbols$d(b)) {
161
- if (__propIsEnum$d.call(b, prop))
162
- __defNormalProp$d(a, prop, b[prop]);
157
+ if (__hasOwnProp$e.call(b, prop))
158
+ __defNormalProp$e(a, prop, b[prop]);
159
+ if (__getOwnPropSymbols$e)
160
+ for (var prop of __getOwnPropSymbols$e(b)) {
161
+ if (__propIsEnum$e.call(b, prop))
162
+ __defNormalProp$e(a, prop, b[prop]);
163
163
  }
164
164
  return a;
165
165
  };
166
- var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
166
+ var __spreadProps$a = (a, b) => __defProps$a(a, __getOwnPropDescs$a(b));
167
167
  const data = [
168
168
  { label: "Home", icon: icons.IconHome2, accent: "cyan" },
169
169
  { label: "Dashboard", icon: icons.IconGauge, accent: "mint" },
@@ -190,12 +190,12 @@ function Navbar(props) {
190
190
  }
191
191
  return /* @__PURE__ */ React__namespace.createElement(
192
192
  LinksGroup,
193
- __spreadProps$9(__spreadValues$d(__spreadValues$d({
193
+ __spreadProps$a(__spreadValues$e(__spreadValues$e({
194
194
  key: item.label,
195
195
  active: props.active
196
196
  }, item), context), {
197
197
  links: (item.links || []).map((link) => {
198
- return __spreadValues$d(__spreadValues$d({}, link), props.links[`${item.label}/${link.label}`] || { notifications: 0, href: "" });
198
+ return __spreadValues$e(__spreadValues$e({}, link), props.links[`${item.label}/${link.label}`] || { notifications: 0, href: "" });
199
199
  })
200
200
  })
201
201
  );
@@ -215,7 +215,7 @@ const UtilLink = (props) => {
215
215
  );
216
216
  };
217
217
 
218
- const useStyles$o = core.createStyles((theme) => ({
218
+ const useStyles$k = core.createStyles((theme) => ({
219
219
  inner: {
220
220
  paddingTop: theme.spacing.xl,
221
221
  paddingBottom: theme.spacing.xl * 4
@@ -251,7 +251,7 @@ const useStyles$o = core.createStyles((theme) => ({
251
251
  }
252
252
  }));
253
253
  const GettingStarted = (props) => {
254
- const { classes } = useStyles$o();
254
+ const { classes } = useStyles$k();
255
255
  return /* @__PURE__ */ React__namespace.createElement(
256
256
  core.Modal,
257
257
  {
@@ -265,7 +265,7 @@ const GettingStarted = (props) => {
265
265
  );
266
266
  };
267
267
 
268
- const useStyles$n = core.createStyles((theme) => ({
268
+ const useStyles$j = core.createStyles((theme) => ({
269
269
  title: {
270
270
  fontSize: 34,
271
271
  fontWeight: 900,
@@ -306,7 +306,7 @@ const useStyles$n = core.createStyles((theme) => ({
306
306
  }
307
307
  }));
308
308
  const SwitchAccount = (props) => {
309
- const { classes, theme } = useStyles$n();
309
+ const { classes, theme } = useStyles$j();
310
310
  const options = props.accounts.map((a) => {
311
311
  return /* @__PURE__ */ React__namespace.createElement(core.UnstyledButton, { onClick: () => props.onClick && props.onClick(a.accountId), key: a.accountId, p: theme.spacing.md }, /* @__PURE__ */ React__namespace.createElement(core.Card, { withBorder: true, shadow: "md", radius: "md", className: classes.card, p: "xl" }, a.isAdmin && /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__PURE__ */ React__namespace.createElement(icons.IconBatteryEco, { size: 50, stroke: 2, color: theme.fn.primaryColor() })), a.isGroupAdmin && !a.isAdmin && /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__PURE__ */ React__namespace.createElement(icons.IconBooks, { size: 50, stroke: 2, color: theme.fn.primaryColor() })), !a.isAdmin && !a.isGroupAdmin && /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__PURE__ */ React__namespace.createElement(icons.IconBackpack, { size: 50, stroke: 2, color: theme.fn.primaryColor() })), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "lg", weight: 500, className: classes.cardTitle, mt: "md" }, a.name), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", color: "dimmed", mt: "sm" }, a.isAdmin ? "Admin" : a.isGroupAdmin ? "Educator" : "Student")));
312
312
  });
@@ -343,7 +343,7 @@ const Tabs = (props) => {
343
343
  return /* @__PURE__ */ React__namespace.createElement(core.Tabs, { value: props.value, onTabChange: props.onChange }, /* @__PURE__ */ React__namespace.createElement(core.Tabs.List, null, tabs));
344
344
  };
345
345
 
346
- const useStyles$m = core.createStyles((theme) => ({
346
+ const useStyles$i = core.createStyles((theme) => ({
347
347
  button: {
348
348
  borderTopRightRadius: 0,
349
349
  borderBottomRightRadius: 0,
@@ -358,7 +358,7 @@ const useStyles$m = core.createStyles((theme) => ({
358
358
  }
359
359
  }));
360
360
  const SplitButton$4 = (props) => {
361
- const { classes, theme } = useStyles$m();
361
+ const { classes, theme } = useStyles$i();
362
362
  theme.colors[theme.primaryColor][theme.colorScheme === "dark" ? 5 : 6];
363
363
  return /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "sm" }, /* @__PURE__ */ React__namespace.createElement(
364
364
  core.Button,
@@ -386,7 +386,7 @@ const SplitButton$4 = (props) => {
386
386
  ));
387
387
  };
388
388
 
389
- const useStyles$l = core.createStyles((theme) => ({
389
+ const useStyles$h = core.createStyles((theme) => ({
390
390
  wrapper: {
391
391
  display: "flex",
392
392
  alignItems: "center",
@@ -437,7 +437,7 @@ const useStyles$l = core.createStyles((theme) => ({
437
437
  }
438
438
  }));
439
439
  const PlaceholderBanner = (props) => {
440
- const { classes } = useStyles$l();
440
+ const { classes } = useStyles$h();
441
441
  const title = props.title || "Nothing to display";
442
442
  const description = props.description || "We don't have anything to show you here just yet. Add data, check back later, or adjust your search.";
443
443
  return /* @__PURE__ */ React__namespace.createElement("div", { className: classes.wrapper }, /* @__PURE__ */ React__namespace.createElement("div", { className: classes.body }, /* @__PURE__ */ React__namespace.createElement(core.Title, { className: classes.title }, props.loading ? "Loading..." : title), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", color: "dimmed" }, props.loading ? "Hold on, we're loading your data." : description)), /* @__PURE__ */ React__namespace.createElement(core.Image, { src: `https://cdn.localcivics.io/illustrations/${props.icon}.svg`, className: classes.image }));
@@ -489,28 +489,28 @@ function useSortableData(items, config = { key: "", direction: null }) {
489
489
  return { items: sortedItems, requestSort, sortConfig };
490
490
  }
491
491
 
492
- var __defProp$c = Object.defineProperty;
493
- var __defProps$8 = Object.defineProperties;
494
- var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
495
- var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
496
- var __hasOwnProp$c = Object.prototype.hasOwnProperty;
497
- var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
498
- var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
499
- var __spreadValues$c = (a, b) => {
492
+ var __defProp$d = Object.defineProperty;
493
+ var __defProps$9 = Object.defineProperties;
494
+ var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
495
+ var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
496
+ var __hasOwnProp$d = Object.prototype.hasOwnProperty;
497
+ var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
498
+ var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
499
+ var __spreadValues$d = (a, b) => {
500
500
  for (var prop in b || (b = {}))
501
- if (__hasOwnProp$c.call(b, prop))
502
- __defNormalProp$c(a, prop, b[prop]);
503
- if (__getOwnPropSymbols$c)
504
- for (var prop of __getOwnPropSymbols$c(b)) {
505
- if (__propIsEnum$c.call(b, prop))
506
- __defNormalProp$c(a, prop, b[prop]);
501
+ if (__hasOwnProp$d.call(b, prop))
502
+ __defNormalProp$d(a, prop, b[prop]);
503
+ if (__getOwnPropSymbols$d)
504
+ for (var prop of __getOwnPropSymbols$d(b)) {
505
+ if (__propIsEnum$d.call(b, prop))
506
+ __defNormalProp$d(a, prop, b[prop]);
507
507
  }
508
508
  return a;
509
509
  };
510
- var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
510
+ var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
511
511
  function Table$k(props) {
512
512
  const preparedItems = React__namespace.useMemo(() => {
513
- return props.items.map((item) => __spreadProps$8(__spreadValues$c({}, item), {
513
+ return props.items.map((item) => __spreadProps$9(__spreadValues$d({}, item), {
514
514
  status: item.isComplete ? 1 : 0
515
515
  }));
516
516
  }, [props.items]);
@@ -607,7 +607,7 @@ function Table$j(props) {
607
607
  ));
608
608
  }
609
609
 
610
- const useStyles$k = core.createStyles((theme) => ({
610
+ const useStyles$g = core.createStyles((theme) => ({
611
611
  title: {
612
612
  fontSize: 34,
613
613
  fontWeight: 900,
@@ -620,7 +620,7 @@ const useStyles$k = core.createStyles((theme) => ({
620
620
  }
621
621
  }));
622
622
  const Badge = (props) => {
623
- const { classes } = useStyles$k();
623
+ const { classes } = useStyles$g();
624
624
  const [tab, setTab] = React.useState("lessons");
625
625
  const numberOfStudents = props.students.length;
626
626
  const numberOfBadges = numberOfStudents > 0 ? props.students.filter((u) => u.isComplete).length : 0;
@@ -958,25 +958,25 @@ function Table$c(props) {
958
958
  }));
959
959
  }
960
960
 
961
- var __defProp$b = Object.defineProperty;
962
- var __defProps$7 = Object.defineProperties;
963
- var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
964
- var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
965
- var __hasOwnProp$b = Object.prototype.hasOwnProperty;
966
- var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
967
- var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
968
- var __spreadValues$b = (a, b) => {
961
+ var __defProp$c = Object.defineProperty;
962
+ var __defProps$8 = Object.defineProperties;
963
+ var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
964
+ var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
965
+ var __hasOwnProp$c = Object.prototype.hasOwnProperty;
966
+ var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
967
+ var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
968
+ var __spreadValues$c = (a, b) => {
969
969
  for (var prop in b || (b = {}))
970
- if (__hasOwnProp$b.call(b, prop))
971
- __defNormalProp$b(a, prop, b[prop]);
972
- if (__getOwnPropSymbols$b)
973
- for (var prop of __getOwnPropSymbols$b(b)) {
974
- if (__propIsEnum$b.call(b, prop))
975
- __defNormalProp$b(a, prop, b[prop]);
970
+ if (__hasOwnProp$c.call(b, prop))
971
+ __defNormalProp$c(a, prop, b[prop]);
972
+ if (__getOwnPropSymbols$c)
973
+ for (var prop of __getOwnPropSymbols$c(b)) {
974
+ if (__propIsEnum$c.call(b, prop))
975
+ __defNormalProp$c(a, prop, b[prop]);
976
976
  }
977
977
  return a;
978
978
  };
979
- var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
979
+ var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
980
980
  const Class = (props) => {
981
981
  const [opened, setOpened] = React.useState(false);
982
982
  return /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__PURE__ */ React__namespace.createElement(
@@ -988,7 +988,7 @@ const Class = (props) => {
988
988
  padding: "xl",
989
989
  size: "xl"
990
990
  },
991
- /* @__PURE__ */ React__namespace.createElement(DropzoneButton$1, __spreadProps$7(__spreadValues$b({}, props), { close: () => setOpened(false) }))
991
+ /* @__PURE__ */ React__namespace.createElement(DropzoneButton$1, __spreadProps$8(__spreadValues$c({}, props), { close: () => setOpened(false) }))
992
992
  ), /* @__PURE__ */ React__namespace.createElement("div", { className: "mx-auto flex max-w-5xl 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(
993
993
  "button",
994
994
  {
@@ -1114,20 +1114,20 @@ const DropzoneButton$1 = (props) => {
1114
1114
  props.onCreateMembers && props.onCreateMembers([values]);
1115
1115
  }) }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement(
1116
1116
  core.TextInput,
1117
- __spreadValues$b({
1117
+ __spreadValues$c({
1118
1118
  withAsterisk: true,
1119
1119
  label: "Email",
1120
1120
  placeholder: "Email"
1121
1121
  }, form$1.getInputProps("email"))
1122
1122
  ), /* @__PURE__ */ React__namespace.createElement(core.Group, { grow: true }, /* @__PURE__ */ React__namespace.createElement(
1123
1123
  core.TextInput,
1124
- __spreadValues$b({
1124
+ __spreadValues$c({
1125
1125
  label: "Given name",
1126
1126
  placeholder: "Given name"
1127
1127
  }, form$1.getInputProps("givenName"))
1128
1128
  ), /* @__PURE__ */ React__namespace.createElement(
1129
1129
  core.TextInput,
1130
- __spreadValues$b({
1130
+ __spreadValues$c({
1131
1131
  label: "Family name",
1132
1132
  placeholder: "Family name"
1133
1133
  }, form$1.getInputProps("familyName"))
@@ -1207,23 +1207,23 @@ function Table$b(props) {
1207
1207
  ));
1208
1208
  }
1209
1209
 
1210
- var __defProp$a = Object.defineProperty;
1211
- var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
1212
- var __hasOwnProp$a = Object.prototype.hasOwnProperty;
1213
- var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
1214
- var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1215
- var __spreadValues$a = (a, b) => {
1210
+ var __defProp$b = Object.defineProperty;
1211
+ var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
1212
+ var __hasOwnProp$b = Object.prototype.hasOwnProperty;
1213
+ var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
1214
+ var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1215
+ var __spreadValues$b = (a, b) => {
1216
1216
  for (var prop in b || (b = {}))
1217
- if (__hasOwnProp$a.call(b, prop))
1218
- __defNormalProp$a(a, prop, b[prop]);
1219
- if (__getOwnPropSymbols$a)
1220
- for (var prop of __getOwnPropSymbols$a(b)) {
1221
- if (__propIsEnum$a.call(b, prop))
1222
- __defNormalProp$a(a, prop, b[prop]);
1217
+ if (__hasOwnProp$b.call(b, prop))
1218
+ __defNormalProp$b(a, prop, b[prop]);
1219
+ if (__getOwnPropSymbols$b)
1220
+ for (var prop of __getOwnPropSymbols$b(b)) {
1221
+ if (__propIsEnum$b.call(b, prop))
1222
+ __defNormalProp$b(a, prop, b[prop]);
1223
1223
  }
1224
1224
  return a;
1225
1225
  };
1226
- const useStyles$j = core.createStyles((theme) => ({
1226
+ const useStyles$f = core.createStyles((theme) => ({
1227
1227
  title: {
1228
1228
  fontSize: 34,
1229
1229
  fontWeight: 900,
@@ -1236,7 +1236,7 @@ const useStyles$j = core.createStyles((theme) => ({
1236
1236
  }
1237
1237
  }));
1238
1238
  const Classes = (props) => {
1239
- const { classes } = useStyles$j();
1239
+ const { classes } = useStyles$f();
1240
1240
  const form$1 = form.useForm({
1241
1241
  initialValues: {
1242
1242
  classId: "",
@@ -1266,14 +1266,14 @@ const Classes = (props) => {
1266
1266
  props.onCreateClass && props.onCreateClass(values);
1267
1267
  }) }, /* @__PURE__ */ React__namespace.createElement(core.Stack, null, /* @__PURE__ */ React__namespace.createElement(
1268
1268
  core.TextInput,
1269
- __spreadValues$a({
1269
+ __spreadValues$b({
1270
1270
  withAsterisk: true,
1271
1271
  label: "Name",
1272
1272
  placeholder: "Class name"
1273
1273
  }, form$1.getInputProps("name"))
1274
1274
  ), /* @__PURE__ */ React__namespace.createElement(
1275
1275
  core.TextInput,
1276
- __spreadValues$a({
1276
+ __spreadValues$b({
1277
1277
  label: "Description",
1278
1278
  placeholder: "A class for my first period English students"
1279
1279
  }, form$1.getInputProps("description"))
@@ -1307,7 +1307,7 @@ const Classes = (props) => {
1307
1307
  ))))));
1308
1308
  };
1309
1309
 
1310
- const useStyles$i = core.createStyles((theme) => ({
1310
+ const useStyles$e = core.createStyles((theme) => ({
1311
1311
  title: {
1312
1312
  fontSize: 34,
1313
1313
  fontWeight: 900,
@@ -1321,7 +1321,7 @@ const useStyles$i = core.createStyles((theme) => ({
1321
1321
  }
1322
1322
  }));
1323
1323
  const UserInfo = (props) => {
1324
- const { classes } = useStyles$i();
1324
+ const { classes } = useStyles$e();
1325
1325
  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));
1326
1326
  };
1327
1327
 
@@ -1459,129 +1459,36 @@ const Student = (props) => {
1459
1459
  ))))));
1460
1460
  };
1461
1461
 
1462
- const useStyles$h = core.createStyles((theme, props) => {
1463
- const from = props.from || "blue";
1464
- const to = props.to || "green";
1465
- return {
1466
- card: {
1467
- position: "relative",
1468
- cursor: "pointer",
1469
- overflow: "hidden",
1470
- transition: "transform 150ms ease, box-shadow 100ms ease",
1471
- padding: theme.spacing.xl,
1472
- paddingLeft: theme.spacing.xl * 2,
1473
- "&:hover": {
1474
- boxShadow: theme.shadows.md,
1475
- transform: "scale(1.02)"
1476
- },
1477
- "&::before": {
1478
- content: '""',
1479
- position: "absolute",
1480
- top: 0,
1481
- bottom: 0,
1482
- left: 0,
1483
- width: 6,
1484
- backgroundImage: theme.fn.linearGradient(0, theme.colors[from][6], theme.colors[to][6])
1485
- }
1486
- }
1487
- };
1488
- });
1462
+ const ACCENT_BORDER = {
1463
+ cyan: "border-l-sky-blue-400",
1464
+ mint: "border-l-mint-400",
1465
+ gold: "border-l-gold-400"
1466
+ };
1467
+ const ACCENT_GRADIENT = {
1468
+ cyan: "from-sky-blue-400",
1469
+ mint: "from-mint-400",
1470
+ gold: "from-gold-400"
1471
+ };
1489
1472
  function CardGradient(props) {
1490
- const { classes } = useStyles$h(props);
1491
- const from = props.from || "blue";
1492
- const to = props.to || "green";
1493
- const icon = props.icon || /* @__PURE__ */ React__namespace.createElement(icons.IconColorSwatch, { size: 28, stroke: 1.5 });
1494
- return /* @__PURE__ */ React__namespace.createElement(core.Paper, { withBorder: true, radius: "md", className: classes.card, onClick: props.onClick }, /* @__PURE__ */ React__namespace.createElement(
1495
- core.ThemeIcon,
1496
- {
1497
- size: "xl",
1498
- radius: "md",
1499
- variant: "gradient",
1500
- gradient: { deg: 0, from, to }
1473
+ const accent = props.accent || "cyan";
1474
+ return /* @__PURE__ */ React__namespace.createElement(
1475
+ "div",
1476
+ {
1477
+ onClick: props.onClick,
1478
+ className: `flex cursor-pointer items-center gap-[18px] rounded-2xl border border-l-4 border-slate-200 bg-white px-[22px] py-[18px] transition-transform hover:scale-[1.02] hover:shadow-md ${ACCENT_BORDER[accent]}`
1501
1479
  },
1502
- icon
1503
- ), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "xl", weight: 500, mt: "md" }, props.title), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", mt: "sm", color: "dimmed" }, props.description));
1480
+ /* @__PURE__ */ React__namespace.createElement("div", { className: `flex h-10 w-10 shrink-0 items-center justify-center rounded-[10px] bg-gradient-to-br ${ACCENT_GRADIENT[accent]} to-dark-blue-400 text-white` }, props.icon),
1481
+ /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-[15.5px] font-extrabold text-dark-blue-400" }, props.title), /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-0.5 text-xs text-slate-500" }, props.description))
1482
+ );
1504
1483
  }
1505
1484
 
1506
- var __defProp$9 = Object.defineProperty;
1507
- var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;
1508
- var __hasOwnProp$9 = Object.prototype.hasOwnProperty;
1509
- var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;
1510
- var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1511
- var __spreadValues$9 = (a, b) => {
1512
- for (var prop in b || (b = {}))
1513
- if (__hasOwnProp$9.call(b, prop))
1514
- __defNormalProp$9(a, prop, b[prop]);
1515
- if (__getOwnPropSymbols$9)
1516
- for (var prop of __getOwnPropSymbols$9(b)) {
1517
- if (__propIsEnum$9.call(b, prop))
1518
- __defNormalProp$9(a, prop, b[prop]);
1519
- }
1520
- return a;
1521
- };
1522
- var __objRest$1 = (source, exclude) => {
1523
- var target = {};
1524
- for (var prop in source)
1525
- if (__hasOwnProp$9.call(source, prop) && exclude.indexOf(prop) < 0)
1526
- target[prop] = source[prop];
1527
- if (source != null && __getOwnPropSymbols$9)
1528
- for (var prop of __getOwnPropSymbols$9(source)) {
1529
- if (exclude.indexOf(prop) < 0 && __propIsEnum$9.call(source, prop))
1530
- target[prop] = source[prop];
1531
- }
1532
- return target;
1533
- };
1534
- const useStyles$g = core.createStyles((theme) => ({
1535
- card: {
1536
- height: 240,
1537
- backgroundSize: "cover",
1538
- backgroundPosition: "center",
1539
- whiteSpace: "pre-line"
1540
- },
1541
- content: {
1542
- position: "absolute",
1543
- padding: theme.spacing.xl,
1544
- zIndex: 1,
1545
- top: 0,
1546
- bottom: 0,
1547
- right: 0,
1548
- left: 0
1549
- },
1550
- title: {
1551
- color: theme.white,
1552
- marginBottom: theme.spacing.xs / 2
1553
- },
1554
- description: {
1555
- color: theme.white,
1556
- maxWidth: 220
1557
- },
1558
- code: {
1559
- color: theme.white,
1560
- maxWidth: 220
1561
- }
1562
- }));
1563
- const TenantBanner = (_a) => {
1564
- var _b = _a, {
1565
- title,
1566
- description,
1567
- image,
1568
- style,
1569
- className,
1570
- code
1571
- } = _b, others = __objRest$1(_b, [
1572
- "title",
1573
- "description",
1574
- "image",
1575
- "style",
1576
- "className",
1577
- "code"
1578
- ]);
1579
- const { classes, cx, theme } = useStyles$g();
1580
- const handleCopy = async () => {
1581
- if (!code)
1485
+ const Home = (props) => {
1486
+ const accessCode = props.organization.accessCode;
1487
+ const onCopyAccessCode = async () => {
1488
+ if (!accessCode)
1582
1489
  return;
1583
1490
  try {
1584
- await navigator.clipboard.writeText(code);
1491
+ await navigator.clipboard.writeText(accessCode);
1585
1492
  notifications.showNotification({
1586
1493
  title: "Copied!",
1587
1494
  message: "Community code copied to clipboard.",
@@ -1591,97 +1498,59 @@ const TenantBanner = (_a) => {
1591
1498
  console.error("Failed to copy code", err);
1592
1499
  }
1593
1500
  };
1594
- return /* @__PURE__ */ React__namespace.createElement(
1595
- core.Card,
1596
- __spreadValues$9({
1597
- radius: "md",
1598
- style: __spreadValues$9({ backgroundImage: `url(${image})` }, style),
1599
- className: cx(classes.card, className)
1600
- }, others),
1601
- /* @__PURE__ */ React__namespace.createElement(
1602
- core.Overlay,
1603
- {
1604
- gradient: `linear-gradient(105deg, ${theme.black} 20%, #312f2f 50%, ${theme.colors.gray[6]} 100%)`,
1605
- opacity: 0.55,
1606
- zIndex: 0
1607
- }
1608
- ),
1609
- /* @__PURE__ */ React__namespace.createElement("div", { className: classes.content }, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "lg", weight: 700, className: classes.title }, title), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", className: classes.description }, description), /* @__PURE__ */ React__namespace.createElement(core.Group, { mt: "sm", spacing: "xs" }, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", className: classes.code }, "Community Code: ", code || "\u2014"), code && /* @__PURE__ */ React__namespace.createElement(
1610
- core.Button,
1611
- {
1612
- size: "xs",
1613
- variant: "white",
1614
- onClick: handleCopy,
1615
- styles: {
1616
- root: {
1617
- backgroundColor: "rgba(255,255,255,0.9)"
1618
- }
1619
- }
1620
- },
1621
- "Copy"
1622
- )))
1623
- );
1624
- };
1625
-
1626
- const Home = (props) => {
1627
- return /* @__PURE__ */ React__namespace.createElement(core.Container, { size: "lg" }, /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "lg" }, /* @__PURE__ */ React__namespace.createElement(core.Grid, { gutter: "md" }, /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { md: 6 }, /* @__PURE__ */ React__namespace.createElement(
1628
- UserInfo,
1629
- {
1630
- variant: "compact",
1631
- name: props.name,
1632
- impactStatement: props.impactStatement
1633
- }
1634
- )), /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { md: 6 }, /* @__PURE__ */ React__namespace.createElement(
1635
- TenantBanner,
1501
+ return /* @__PURE__ */ React__namespace.createElement("div", { className: "mx-auto flex w-full max-w-[1100px] flex-col gap-5" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-stretch gap-5" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-[28px] font-extrabold text-dark-blue-400" }, props.name), /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-1.5 text-[12.5px] text-slate-400" }, props.impactStatement)), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex w-[440px] shrink-0 flex-col justify-between gap-3 rounded-2xl bg-gradient-to-br from-dark-blue-600 via-dark-blue-400 to-sky-blue-400 p-5" }, /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-base font-extrabold text-white" }, props.organization.name), /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-1.5 text-[11.5px] leading-relaxed text-white/70" }, props.organization.description)), accessCode && /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React__namespace.createElement("span", { className: "text-[11px] text-white/70" }, "Community code: ", accessCode), /* @__PURE__ */ React__namespace.createElement(
1502
+ "button",
1636
1503
  {
1637
- title: props.organization.name,
1638
- description: props.organization.description,
1639
- image: props.organization.image,
1640
- code: props.organization.accessCode
1641
- }
1642
- ))), /* @__PURE__ */ React__namespace.createElement(core.Grid, { gutter: "md" }, /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, null, /* @__PURE__ */ React__namespace.createElement(
1504
+ onClick: onCopyAccessCode,
1505
+ className: "rounded-md bg-white/90 px-2.5 py-1 text-[10.5px] font-bold text-dark-blue-400 hover:bg-white"
1506
+ },
1507
+ "Copy"
1508
+ )))), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement(
1643
1509
  CardGradient,
1644
1510
  {
1645
1511
  title: "Dashboard",
1646
1512
  description: "Track your students\u2019 pathway progress",
1513
+ accent: "mint",
1514
+ icon: /* @__PURE__ */ React__namespace.createElement(icons.IconGauge, { size: 18, stroke: 1.75 }),
1647
1515
  onClick: props.onDashboardClick
1648
1516
  }
1649
- )), /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, null, /* @__PURE__ */ React__namespace.createElement(
1517
+ ), /* @__PURE__ */ React__namespace.createElement(
1650
1518
  CardGradient,
1651
1519
  {
1652
1520
  title: "Classes",
1653
1521
  description: "Create classes, cohorts, or custom subgroups",
1522
+ accent: "gold",
1523
+ icon: /* @__PURE__ */ React__namespace.createElement(icons.IconCategory2, { size: 18, stroke: 1.75 }),
1654
1524
  onClick: props.onClassesClick
1655
1525
  }
1656
- )), /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, null, /* @__PURE__ */ React__namespace.createElement(
1526
+ ), /* @__PURE__ */ React__namespace.createElement(
1657
1527
  CardGradient,
1658
1528
  {
1659
1529
  title: "Pathways",
1660
1530
  description: "Explore all your unique pathway requirements in one clear space",
1531
+ accent: "cyan",
1532
+ icon: /* @__PURE__ */ React__namespace.createElement(icons.IconRoute, { size: 18, stroke: 1.75 }),
1661
1533
  onClick: props.onPathwaysClick
1662
1534
  }
1663
- )), /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, null, /* @__PURE__ */ React__namespace.createElement(
1535
+ ), /* @__PURE__ */ React__namespace.createElement(
1664
1536
  CardGradient,
1665
1537
  {
1666
1538
  title: "Badges",
1667
1539
  description: "Key milestones that reflect skill development, micro-credentials, or academic progress",
1540
+ accent: "mint",
1541
+ icon: /* @__PURE__ */ React__namespace.createElement(icons.IconAlbum, { size: 18, stroke: 1.75 }),
1668
1542
  onClick: props.onBadgesClick
1669
1543
  }
1670
- )), /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, null, /* @__PURE__ */ React__namespace.createElement(
1671
- CardGradient,
1672
- {
1673
- title: "Lessons",
1674
- description: "Bite-sized activities and learning experiences accelerating students achievement",
1675
- onClick: props.onLessonsClick
1676
- }
1677
- )), /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, null, /* @__PURE__ */ React__namespace.createElement(
1544
+ ), /* @__PURE__ */ React__namespace.createElement(
1678
1545
  CardGradient,
1679
1546
  {
1680
1547
  title: "File Locker",
1681
1548
  description: "A secure space to view student-submitted work and provide feedback",
1549
+ accent: "cyan",
1550
+ icon: /* @__PURE__ */ React__namespace.createElement(icons.IconClipboard, { size: 18, stroke: 1.75 }),
1682
1551
  onClick: props.onFileLockerClick
1683
1552
  }
1684
- )))));
1553
+ )));
1685
1554
  };
1686
1555
 
1687
1556
  function Table$7(props) {
@@ -1716,7 +1585,7 @@ function Table$7(props) {
1716
1585
  ));
1717
1586
  }
1718
1587
 
1719
- const useStyles$f = core.createStyles((theme) => ({
1588
+ const useStyles$d = core.createStyles((theme) => ({
1720
1589
  button: {
1721
1590
  borderTopRightRadius: 0,
1722
1591
  borderBottomRightRadius: 0,
@@ -1731,7 +1600,7 @@ const useStyles$f = core.createStyles((theme) => ({
1731
1600
  }
1732
1601
  }));
1733
1602
  const SplitButton$3 = (props) => {
1734
- const { classes, theme } = useStyles$f();
1603
+ const { classes, theme } = useStyles$d();
1735
1604
  theme.colors[theme.primaryColor][theme.colorScheme === "dark" ? 5 : 6];
1736
1605
  return /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "sm" }, /* @__PURE__ */ React__namespace.createElement(
1737
1606
  core.Button,
@@ -1768,28 +1637,28 @@ function Stack$3(props) {
1768
1637
  return /* @__PURE__ */ React__namespace.createElement(core.ScrollArea.Autosize, { maxHeight: 600 }, /* @__PURE__ */ React__namespace.createElement(core.UnstyledButton, { component: reactRouterDom.Link, to: props.href }, /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: 24, sx: { padding: 20, minWidth: 700 } }, rows)));
1769
1638
  }
1770
1639
 
1771
- var __defProp$8 = Object.defineProperty;
1772
- var __defProps$6 = Object.defineProperties;
1773
- var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
1774
- var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
1775
- var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
1776
- var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
1777
- var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1778
- var __spreadValues$8 = (a, b) => {
1640
+ var __defProp$a = Object.defineProperty;
1641
+ var __defProps$7 = Object.defineProperties;
1642
+ var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
1643
+ var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
1644
+ var __hasOwnProp$a = Object.prototype.hasOwnProperty;
1645
+ var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
1646
+ var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1647
+ var __spreadValues$a = (a, b) => {
1779
1648
  for (var prop in b || (b = {}))
1780
- if (__hasOwnProp$8.call(b, prop))
1781
- __defNormalProp$8(a, prop, b[prop]);
1782
- if (__getOwnPropSymbols$8)
1783
- for (var prop of __getOwnPropSymbols$8(b)) {
1784
- if (__propIsEnum$8.call(b, prop))
1785
- __defNormalProp$8(a, prop, b[prop]);
1649
+ if (__hasOwnProp$a.call(b, prop))
1650
+ __defNormalProp$a(a, prop, b[prop]);
1651
+ if (__getOwnPropSymbols$a)
1652
+ for (var prop of __getOwnPropSymbols$a(b)) {
1653
+ if (__propIsEnum$a.call(b, prop))
1654
+ __defNormalProp$a(a, prop, b[prop]);
1786
1655
  }
1787
1656
  return a;
1788
1657
  };
1789
- var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
1658
+ var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
1790
1659
  function Table$6(props) {
1791
1660
  const preparedItems = React__namespace.useMemo(() => {
1792
- return props.items.map((item) => __spreadProps$6(__spreadValues$8({}, item), {
1661
+ return props.items.map((item) => __spreadProps$7(__spreadValues$a({}, item), {
1793
1662
  status: item.isComplete ? 2 : item.isStarted ? 1 : 0
1794
1663
  }));
1795
1664
  }, [props.items]);
@@ -1909,7 +1778,7 @@ function Stack$2(props) {
1909
1778
  }
1910
1779
  const truncateWithEllipses = (text, max) => text.substr(0, max - 1) + (text.length > max ? "&hellip;" : "");
1911
1780
 
1912
- const useStyles$e = core.createStyles((theme) => ({
1781
+ const useStyles$c = core.createStyles((theme) => ({
1913
1782
  title: {
1914
1783
  fontSize: 34,
1915
1784
  fontWeight: 900,
@@ -1922,7 +1791,7 @@ const useStyles$e = core.createStyles((theme) => ({
1922
1791
  }
1923
1792
  }));
1924
1793
  const Lesson = (props) => {
1925
- const { classes } = useStyles$e();
1794
+ const { classes } = useStyles$c();
1926
1795
  const [tab, setTab] = React.useState("question");
1927
1796
  const numberOfStudents = props.students.length;
1928
1797
  const numberOfLessons = numberOfStudents > 0 ? props.students.filter((u) => u.isComplete).length : 0;
@@ -2035,68 +1904,38 @@ const Lesson = (props) => {
2035
1904
  };
2036
1905
 
2037
1906
  function Table$5(props) {
1907
+ if (props.loading) {
1908
+ return /* @__PURE__ */ React__namespace.createElement("div", { className: "text-sm text-slate-400" }, "Loading\u2026");
1909
+ }
2038
1910
  if (props.items.length === 0) {
2039
- return /* @__PURE__ */ React__namespace.createElement(
2040
- PlaceholderBanner,
2041
- {
2042
- title: "No lessons to display",
2043
- description: "We don't have any lessons to show you just yet.",
2044
- loading: props.loading,
2045
- icon: "lessons"
2046
- }
2047
- );
1911
+ return /* @__PURE__ */ React__namespace.createElement("div", { className: "rounded-xl border border-slate-200 bg-white p-8 text-center text-sm text-slate-400 shadow-sm" }, "No lessons to display.");
2048
1912
  }
2049
- const rows = props.items.map((row) => /* @__PURE__ */ React__namespace.createElement("tr", { key: row.lessonId }, /* @__PURE__ */ React__namespace.createElement("td", null, /* @__PURE__ */ React__namespace.createElement(
2050
- core.UnstyledButton,
1913
+ return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex gap-4 px-4 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex-1" }, "Lesson"), /* @__PURE__ */ React__namespace.createElement("div", { className: "w-40 shrink-0" }, "Pathway"), /* @__PURE__ */ React__namespace.createElement("div", { className: "w-4 shrink-0" })), props.items.map((row) => /* @__PURE__ */ React__namespace.createElement(
1914
+ reactRouterDom.Link,
2051
1915
  {
2052
- component: reactRouterDom.Link,
1916
+ key: row.lessonId,
2053
1917
  to: row.href,
2054
- sx: (theme) => ({
2055
- display: "block",
2056
- width: "100%",
2057
- padding: theme.spacing.md,
2058
- color: theme.colorScheme === "dark" ? theme.colors.dark[0] : theme.black,
2059
- "&:hover": {
2060
- backgroundColor: theme.colorScheme === "dark" ? theme.colors.dark[8] : theme.colors.gray[1]
2061
- }
2062
- })
1918
+ className: "flex items-center gap-4 rounded-xl border border-slate-200 bg-white p-4 no-underline shadow-sm hover:bg-slate-50"
2063
1919
  },
2064
- /* @__PURE__ */ React__namespace.createElement(core.Group, null, /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", weight: 500 }, row.name), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "xs", color: "dimmed" }, row.description)))
2065
- ))));
2066
- return /* @__PURE__ */ React__namespace.createElement(core.ScrollArea.Autosize, { maxHeight: 600 }, /* @__PURE__ */ React__namespace.createElement(core.Table, { horizontalSpacing: 0, verticalSpacing: 0, sx: { minWidth: 700 } }, /* @__PURE__ */ React__namespace.createElement("tbody", null, rows)));
1920
+ /* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-sm font-bold text-dark-blue-400" }, row.name), row.description && /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-1 text-xs leading-relaxed text-slate-500" }, row.description)),
1921
+ /* @__PURE__ */ React__namespace.createElement("div", { className: "w-40 shrink-0 text-xs text-slate-500" }, row.pathway || "\u2014"),
1922
+ /* @__PURE__ */ React__namespace.createElement(icons.IconChevronRight, { size: 16, stroke: 2, className: "w-4 shrink-0 text-slate-300" })
1923
+ )));
2067
1924
  }
2068
1925
 
2069
- const useStyles$d = core.createStyles((theme) => ({
2070
- title: {
2071
- fontSize: 34,
2072
- fontWeight: 900,
2073
- [theme.fn.smallerThan("sm")]: {
2074
- fontSize: 24
2075
- }
2076
- },
2077
- description: {
2078
- maxWidth: 600
2079
- }
2080
- }));
2081
1926
  const Lessons = (props) => {
2082
- const { classes } = useStyles$d();
2083
- return /* @__PURE__ */ React__namespace.createElement(core.Container, { size: "lg", py: "xl" }, /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "md" }, /* @__PURE__ */ React__namespace.createElement(core.Grid, null, /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { sm: "auto" }, /* @__PURE__ */ React__namespace.createElement(core.Badge, { variant: "filled", size: "lg" }, "Lessons"), /* @__PURE__ */ React__namespace.createElement(core.Title, { order: 2, className: classes.title, mt: "md" }, "Lessons"), /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", className: classes.description, mt: "sm" }, "Bite-sized activities and learning experiences accelerating students achievement"))), /* @__PURE__ */ React__namespace.createElement(
2084
- core.Autocomplete,
1927
+ return /* @__PURE__ */ React__namespace.createElement("div", { className: "mx-auto flex max-w-4xl flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React__namespace.createElement("h1", { className: "text-2xl font-extrabold tracking-tight text-dark-blue-400" }, "Lessons"), /* @__PURE__ */ React__namespace.createElement("p", { className: "text-sm text-slate-500" }, "Bite-sized activities and learning experiences accelerating students achievement")), /* @__PURE__ */ React__namespace.createElement("div", { className: "relative" }, /* @__PURE__ */ React__namespace.createElement(icons.IconSearch, { size: 16, stroke: 2, className: "pointer-events-none absolute left-3.5 top-1/2 -translate-y-1/2 text-slate-400" }), /* @__PURE__ */ React__namespace.createElement(
1928
+ "input",
2085
1929
  {
1930
+ type: "text",
2086
1931
  placeholder: "Search for a lesson that fits your needs",
2087
- data: props.lessons.map((item) => item.name),
2088
- onChange: props.onAutocompleteChange
2089
- }
2090
- ), /* @__PURE__ */ React__namespace.createElement("div", { style: { position: "relative" } }, /* @__PURE__ */ React__namespace.createElement(core.LoadingOverlay, { visible: props.loading, overlayBlur: 2 }), /* @__PURE__ */ React__namespace.createElement(
2091
- Table$5,
2092
- {
2093
- loading: props.loading,
2094
- items: props.lessons
1932
+ onChange: (e) => props.onAutocompleteChange(e.target.value),
1933
+ className: "w-full rounded-xl border border-slate-200 bg-white py-2.5 pl-10 pr-4 text-sm text-dark-blue-400 placeholder:text-slate-400 focus:border-sky-blue-400 focus:outline-none"
2095
1934
  }
2096
- ))));
1935
+ )), /* @__PURE__ */ React__namespace.createElement(Table$5, { loading: props.loading, items: props.lessons }));
2097
1936
  };
2098
1937
 
2099
- const useStyles$c = core.createStyles((theme) => ({
1938
+ const useStyles$b = core.createStyles((theme) => ({
2100
1939
  title: {
2101
1940
  fontSize: 22,
2102
1941
  fontWeight: 900,
@@ -2115,7 +1954,7 @@ const useStyles$c = core.createStyles((theme) => ({
2115
1954
  }
2116
1955
  }));
2117
1956
  function AccessCode(props) {
2118
- const { classes } = useStyles$c();
1957
+ const { classes } = useStyles$b();
2119
1958
  return /* @__PURE__ */ React__namespace.createElement(core.Container, { mx: "0", px: "0", size: 460, my: 30 }, /* @__PURE__ */ React__namespace.createElement(core.Title, { className: classes.title }, "Access code"), /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", size: "sm" }, "Grant access to join your organization"), /* @__PURE__ */ React__namespace.createElement(core.Paper, { withBorder: true, shadow: "md", p: 30, radius: "md", mt: "xl" }, /* @__PURE__ */ React__namespace.createElement(core.TextInput, { value: props.value, readOnly: true }), /* @__PURE__ */ React__namespace.createElement(core.Group, { position: "apart", mt: "lg", className: classes.controls }, /* @__PURE__ */ React__namespace.createElement(
2120
1959
  core.Anchor,
2121
1960
  {
@@ -2143,7 +1982,7 @@ const monthNames = [
2143
1982
  "November",
2144
1983
  "December"
2145
1984
  ];
2146
- const useStyles$b = core.createStyles((theme) => ({
1985
+ const useStyles$a = core.createStyles((theme) => ({
2147
1986
  title: {
2148
1987
  fontSize: 34,
2149
1988
  fontWeight: 900,
@@ -2173,7 +2012,7 @@ const useStyles$b = core.createStyles((theme) => ({
2173
2012
  }
2174
2013
  }));
2175
2014
  const Organization = (props) => {
2176
- const { classes } = useStyles$b();
2015
+ const { classes } = useStyles$a();
2177
2016
  return /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, null, /* @__PURE__ */ React__namespace.createElement(core.Container, { size: "lg", py: "xl" }, /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "md" }, /* @__PURE__ */ React__namespace.createElement(core.Grid, null, /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { sm: "auto" }, /* @__PURE__ */ React__namespace.createElement(core.UnstyledButton, { onClick: props.onBackClick }, /* @__PURE__ */ React__namespace.createElement(
2178
2017
  core.Badge,
2179
2018
  {
@@ -2199,7 +2038,7 @@ const Organization = (props) => {
2199
2038
  ] }))))));
2200
2039
  };
2201
2040
 
2202
- const useStyles$a = core.createStyles((theme) => ({
2041
+ const useStyles$9 = core.createStyles((theme) => ({
2203
2042
  button: {
2204
2043
  borderTopRightRadius: 0,
2205
2044
  borderBottomRightRadius: 0,
@@ -2214,7 +2053,7 @@ const useStyles$a = core.createStyles((theme) => ({
2214
2053
  }
2215
2054
  }));
2216
2055
  const SplitButton$2 = (props) => {
2217
- const { classes, theme } = useStyles$a();
2056
+ const { classes, theme } = useStyles$9();
2218
2057
  const menuIconColor = theme.colors[theme.primaryColor][theme.colorScheme === "dark" ? 5 : 6];
2219
2058
  const hasMenu = !!props.withOrganizationLink;
2220
2059
  return /* @__PURE__ */ React__namespace.createElement(core.Group, { noWrap: true, spacing: 0 }, /* @__PURE__ */ React__namespace.createElement(
@@ -2276,26 +2115,26 @@ function Table$4(props) {
2276
2115
  return /* @__PURE__ */ React__namespace.createElement(core.ScrollArea, null, /* @__PURE__ */ React__namespace.createElement(core.Table, { verticalSpacing: 20, sx: { minWidth: 700 }, highlightOnHover: true, striped: true }, /* @__PURE__ */ React__namespace.createElement("thead", null, /* @__PURE__ */ React__namespace.createElement("tr", null, /* @__PURE__ */ React__namespace.createElement("th", null, "Name"), /* @__PURE__ */ React__namespace.createElement("th", null, "Role"), /* @__PURE__ */ React__namespace.createElement("th", null, "Account Created?"), /* @__PURE__ */ React__namespace.createElement("th", null, "# of Classes"), /* @__PURE__ */ React__namespace.createElement("th", null))), /* @__PURE__ */ React__namespace.createElement("tbody", null, rows)));
2277
2116
  }
2278
2117
 
2279
- var __defProp$7 = Object.defineProperty;
2280
- var __defProps$5 = Object.defineProperties;
2281
- var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
2282
- var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
2283
- var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
2284
- var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
2285
- var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2286
- var __spreadValues$7 = (a, b) => {
2118
+ var __defProp$9 = Object.defineProperty;
2119
+ var __defProps$6 = Object.defineProperties;
2120
+ var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
2121
+ var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;
2122
+ var __hasOwnProp$9 = Object.prototype.hasOwnProperty;
2123
+ var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;
2124
+ var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2125
+ var __spreadValues$9 = (a, b) => {
2287
2126
  for (var prop in b || (b = {}))
2288
- if (__hasOwnProp$7.call(b, prop))
2289
- __defNormalProp$7(a, prop, b[prop]);
2290
- if (__getOwnPropSymbols$7)
2291
- for (var prop of __getOwnPropSymbols$7(b)) {
2292
- if (__propIsEnum$7.call(b, prop))
2293
- __defNormalProp$7(a, prop, b[prop]);
2127
+ if (__hasOwnProp$9.call(b, prop))
2128
+ __defNormalProp$9(a, prop, b[prop]);
2129
+ if (__getOwnPropSymbols$9)
2130
+ for (var prop of __getOwnPropSymbols$9(b)) {
2131
+ if (__propIsEnum$9.call(b, prop))
2132
+ __defNormalProp$9(a, prop, b[prop]);
2294
2133
  }
2295
2134
  return a;
2296
2135
  };
2297
- var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
2298
- const useStyles$9 = core.createStyles((theme) => ({
2136
+ var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
2137
+ const useStyles$8 = core.createStyles((theme) => ({
2299
2138
  title: {
2300
2139
  fontSize: 34,
2301
2140
  fontWeight: 900,
@@ -2325,7 +2164,7 @@ const useStyles$9 = core.createStyles((theme) => ({
2325
2164
  }
2326
2165
  }));
2327
2166
  const People = (props) => {
2328
- const { classes } = useStyles$9();
2167
+ const { classes } = useStyles$8();
2329
2168
  const form$1 = form.useForm({
2330
2169
  initialValues: {
2331
2170
  userId: "",
@@ -2356,27 +2195,27 @@ const People = (props) => {
2356
2195
  padding: "xl",
2357
2196
  size: "xl"
2358
2197
  },
2359
- /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "md" }, /* @__PURE__ */ React__namespace.createElement(DropzoneButton, __spreadProps$5(__spreadValues$7({}, 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(() => {
2198
+ /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "md" }, /* @__PURE__ */ React__namespace.createElement(DropzoneButton, __spreadProps$6(__spreadValues$9({}, 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(() => {
2360
2199
  const values = form$1.values;
2361
2200
  form$1.reset();
2362
2201
  setOpened(false);
2363
2202
  props.onCreateUsers && props.onCreateUsers([values]);
2364
2203
  }) }, /* @__PURE__ */ React__namespace.createElement(core.Stack, null, /* @__PURE__ */ React__namespace.createElement(
2365
2204
  core.TextInput,
2366
- __spreadValues$7({
2205
+ __spreadValues$9({
2367
2206
  withAsterisk: true,
2368
2207
  label: "Email",
2369
2208
  placeholder: "Email"
2370
2209
  }, form$1.getInputProps("email"))
2371
2210
  ), /* @__PURE__ */ React__namespace.createElement(core.Group, { grow: true }, /* @__PURE__ */ React__namespace.createElement(
2372
2211
  core.TextInput,
2373
- __spreadValues$7({
2212
+ __spreadValues$9({
2374
2213
  label: "Given name",
2375
2214
  placeholder: "Given name"
2376
2215
  }, form$1.getInputProps("givenName"))
2377
2216
  ), /* @__PURE__ */ React__namespace.createElement(
2378
2217
  core.TextInput,
2379
- __spreadValues$7({
2218
+ __spreadValues$9({
2380
2219
  label: "Family name",
2381
2220
  placeholder: "Family name"
2382
2221
  }, form$1.getInputProps("familyName"))
@@ -2429,7 +2268,7 @@ const People = (props) => {
2429
2268
  ))))));
2430
2269
  };
2431
2270
  const DropzoneButton = (props) => {
2432
- const { classes, theme } = useStyles$9();
2271
+ const { classes, theme } = useStyles$8();
2433
2272
  const openRef = React__namespace.useRef(null);
2434
2273
  const [loading, setLoading] = React__namespace.useState(false);
2435
2274
  const onDrop = React__namespace.useCallback((acceptedFiles) => {
@@ -2475,7 +2314,7 @@ const DropzoneButton = (props) => {
2475
2314
  } }, "Select file"));
2476
2315
  };
2477
2316
 
2478
- const useStyles$8 = core.createStyles((theme) => ({
2317
+ const useStyles$7 = core.createStyles((theme) => ({
2479
2318
  form: {
2480
2319
  backgroundColor: theme.white,
2481
2320
  padding: theme.spacing.xl,
@@ -2538,7 +2377,7 @@ const useStyles$8 = core.createStyles((theme) => ({
2538
2377
  }
2539
2378
  }));
2540
2379
  const StartAnonymousLesson = (props) => {
2541
- const { classes } = useStyles$8();
2380
+ const { classes } = useStyles$7();
2542
2381
  const [name, setName] = React__namespace.useState("");
2543
2382
  return /* @__PURE__ */ React__namespace.createElement("div", { className: classes.wrapper }, /* @__PURE__ */ React__namespace.createElement(core.Container, null, /* @__PURE__ */ React__namespace.createElement(core.SimpleGrid, { maw: 960, cols: 2, spacing: 15, breakpoints: [{ maxWidth: "sm", cols: 1 }] }, /* @__PURE__ */ React__namespace.createElement("div", { className: classes.content }, /* @__PURE__ */ React__namespace.createElement(core.Badge, { color: "violet" }, "Community"), /* @__PURE__ */ React__namespace.createElement(core.Title, { className: classes.title }, props.title), /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", mt: "md" }, props.description), /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", mt: "md" }, "You are now part of ", `${props.educatorName}'s`, " Class")), /* @__PURE__ */ React__namespace.createElement("div", { className: classes.form }, /* @__PURE__ */ React__namespace.createElement(
2544
2383
  core.TextInput,
@@ -2562,24 +2401,24 @@ const StartAnonymousLesson = (props) => {
2562
2401
  ))))));
2563
2402
  };
2564
2403
 
2565
- var __defProp$6 = Object.defineProperty;
2566
- var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
2567
- var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
2568
- var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
2569
- var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2570
- var __spreadValues$6 = (a, b) => {
2404
+ var __defProp$8 = Object.defineProperty;
2405
+ var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
2406
+ var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
2407
+ var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
2408
+ var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2409
+ var __spreadValues$8 = (a, b) => {
2571
2410
  for (var prop in b || (b = {}))
2572
- if (__hasOwnProp$6.call(b, prop))
2573
- __defNormalProp$6(a, prop, b[prop]);
2574
- if (__getOwnPropSymbols$6)
2575
- for (var prop of __getOwnPropSymbols$6(b)) {
2576
- if (__propIsEnum$6.call(b, prop))
2577
- __defNormalProp$6(a, prop, b[prop]);
2411
+ if (__hasOwnProp$8.call(b, prop))
2412
+ __defNormalProp$8(a, prop, b[prop]);
2413
+ if (__getOwnPropSymbols$8)
2414
+ for (var prop of __getOwnPropSymbols$8(b)) {
2415
+ if (__propIsEnum$8.call(b, prop))
2416
+ __defNormalProp$8(a, prop, b[prop]);
2578
2417
  }
2579
2418
  return a;
2580
2419
  };
2581
2420
  const BadgeGrid = (props) => {
2582
- const badges = props.badges.map((b) => /* @__PURE__ */ React__namespace.createElement(TaskCard, __spreadValues$6({ key: b.title }, b)));
2421
+ const badges = props.badges.map((b) => /* @__PURE__ */ React__namespace.createElement(TaskCard, __spreadValues$8({ key: b.title }, b)));
2583
2422
  return /* @__PURE__ */ React__namespace.createElement(core.SimpleGrid, { cols: 4, breakpoints: [{ maxWidth: "sm", cols: 1 }, { maxWidth: "md", cols: 3 }] }, badges);
2584
2423
  };
2585
2424
  function TaskCard(props) {
@@ -2595,116 +2434,236 @@ function TaskCard(props) {
2595
2434
  ));
2596
2435
  }
2597
2436
 
2598
- const useStyles$7 = core.createStyles((theme) => ({
2599
- action: {
2600
- backgroundColor: "inherit",
2601
- ":hover": {
2602
- textDecoration: "underline"
2603
- }
2604
- },
2605
- title: {
2606
- color: theme.colorScheme === "dark" ? theme.white : theme.black,
2607
- fontFamily: `Greycliff CF, ${theme.fontFamily}`,
2608
- fontSize: theme.fontSizes.xl,
2609
- lineHeight: 1.5,
2610
- fontWeight: 900,
2611
- [theme.fn.smallerThan("xs")]: {
2612
- fontSize: theme.fontSizes.md
2613
- }
2614
- }
2615
- }));
2616
- const TrialHome = (props) => {
2617
- const { classes } = useStyles$7();
2618
- return /* @__PURE__ */ React__namespace.createElement(core.Container, { size: "lg" }, /* @__PURE__ */ React__namespace.createElement(core.Badge, null, props.daysRemaining, " day", props.daysRemaining !== 1 ? "s" : "", " left"), /* @__PURE__ */ React__namespace.createElement(
2619
- core.Button,
2620
- {
2621
- className: classes.action,
2622
- variant: "white",
2623
- component: "a",
2624
- size: "xs",
2625
- href: props.upgradeHref,
2626
- target: "_blank"
2627
- },
2628
- "UPGRADE NOW"
2629
- ), /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "sm" }, /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: 0 }, /* @__PURE__ */ React__namespace.createElement(
2630
- UserInfo,
2631
- {
2632
- variant: "compact",
2633
- name: props.name,
2634
- impactStatement: ""
2635
- }
2636
- ), /* @__PURE__ */ React__namespace.createElement(
2637
- TenantBanner,
2638
- {
2639
- title: "Trial Account",
2640
- description: `Welcome to your Local Civics Trial Account${props.firstName ? ", " + props.firstName : ""}!`,
2641
- image: "https://cdn.localcivics.io/hub/landing.jpg"
2642
- }
2643
- )), /* @__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 })));
2644
- };
2645
-
2646
- var __defProp$5 = Object.defineProperty;
2647
- var __defProps$4 = Object.defineProperties;
2648
- var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
2649
- var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
2650
- var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
2651
- var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
2652
- var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2653
- var __spreadValues$5 = (a, b) => {
2437
+ var __defProp$7 = Object.defineProperty;
2438
+ var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
2439
+ var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
2440
+ var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
2441
+ var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2442
+ var __spreadValues$7 = (a, b) => {
2654
2443
  for (var prop in b || (b = {}))
2655
- if (__hasOwnProp$5.call(b, prop))
2656
- __defNormalProp$5(a, prop, b[prop]);
2657
- if (__getOwnPropSymbols$5)
2658
- for (var prop of __getOwnPropSymbols$5(b)) {
2659
- if (__propIsEnum$5.call(b, prop))
2660
- __defNormalProp$5(a, prop, b[prop]);
2444
+ if (__hasOwnProp$7.call(b, prop))
2445
+ __defNormalProp$7(a, prop, b[prop]);
2446
+ if (__getOwnPropSymbols$7)
2447
+ for (var prop of __getOwnPropSymbols$7(b)) {
2448
+ if (__propIsEnum$7.call(b, prop))
2449
+ __defNormalProp$7(a, prop, b[prop]);
2661
2450
  }
2662
2451
  return a;
2663
2452
  };
2664
- var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
2665
- var __objRest = (source, exclude) => {
2453
+ var __objRest$1 = (source, exclude) => {
2666
2454
  var target = {};
2667
2455
  for (var prop in source)
2668
- if (__hasOwnProp$5.call(source, prop) && exclude.indexOf(prop) < 0)
2456
+ if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0)
2669
2457
  target[prop] = source[prop];
2670
- if (source != null && __getOwnPropSymbols$5)
2671
- for (var prop of __getOwnPropSymbols$5(source)) {
2672
- if (exclude.indexOf(prop) < 0 && __propIsEnum$5.call(source, prop))
2458
+ if (source != null && __getOwnPropSymbols$7)
2459
+ for (var prop of __getOwnPropSymbols$7(source)) {
2460
+ if (exclude.indexOf(prop) < 0 && __propIsEnum$7.call(source, prop))
2673
2461
  target[prop] = source[prop];
2674
2462
  }
2675
2463
  return target;
2676
2464
  };
2677
- const useStyles$6 = core.createStyles((theme, { checked }) => ({
2678
- button: {
2679
- display: "flex",
2680
- alignItems: "center",
2681
- width: "100%",
2682
- transition: "background-color 150ms ease, border-color 150ms ease",
2683
- border: `1px solid ${checked ? theme.fn.variant({ variant: "outline", color: theme.primaryColor }).border : theme.colorScheme === "dark" ? theme.colors.dark[8] : theme.colors.gray[3]}`,
2684
- borderRadius: theme.radius.sm,
2685
- padding: theme.spacing.md,
2686
- paddingTop: theme.spacing.sm,
2687
- paddingBottom: theme.spacing.sm,
2688
- backgroundColor: checked ? theme.fn.variant({ variant: "light", color: theme.primaryColor }).background : theme.colorScheme === "dark" ? theme.colors.dark[8] : theme.white
2465
+ const useStyles$6 = core.createStyles((theme) => ({
2466
+ card: {
2467
+ height: 240,
2468
+ backgroundSize: "cover",
2469
+ backgroundPosition: "center",
2470
+ whiteSpace: "pre-line"
2689
2471
  },
2690
- body: {
2691
- flex: 1,
2692
- marginLeft: theme.spacing.md
2693
- }
2694
- }));
2695
- function ImageCheckbox(_a) {
2696
- var _b = _a, {
2697
- checked,
2698
- defaultChecked,
2699
- onChange,
2700
- title,
2701
- description,
2702
- className,
2703
- icon: Icon
2704
- } = _b, others = __objRest(_b, [
2705
- "checked",
2706
- "defaultChecked",
2707
- "onChange",
2472
+ content: {
2473
+ position: "absolute",
2474
+ padding: theme.spacing.xl,
2475
+ zIndex: 1,
2476
+ top: 0,
2477
+ bottom: 0,
2478
+ right: 0,
2479
+ left: 0
2480
+ },
2481
+ title: {
2482
+ color: theme.white,
2483
+ marginBottom: theme.spacing.xs / 2
2484
+ },
2485
+ description: {
2486
+ color: theme.white,
2487
+ maxWidth: 220
2488
+ },
2489
+ code: {
2490
+ color: theme.white,
2491
+ maxWidth: 220
2492
+ }
2493
+ }));
2494
+ const TenantBanner = (_a) => {
2495
+ var _b = _a, {
2496
+ title,
2497
+ description,
2498
+ image,
2499
+ style,
2500
+ className,
2501
+ code
2502
+ } = _b, others = __objRest$1(_b, [
2503
+ "title",
2504
+ "description",
2505
+ "image",
2506
+ "style",
2507
+ "className",
2508
+ "code"
2509
+ ]);
2510
+ const { classes, cx, theme } = useStyles$6();
2511
+ const handleCopy = async () => {
2512
+ if (!code)
2513
+ return;
2514
+ try {
2515
+ await navigator.clipboard.writeText(code);
2516
+ notifications.showNotification({
2517
+ title: "Copied!",
2518
+ message: "Community code copied to clipboard.",
2519
+ autoClose: 3e3
2520
+ });
2521
+ } catch (err) {
2522
+ console.error("Failed to copy code", err);
2523
+ }
2524
+ };
2525
+ return /* @__PURE__ */ React__namespace.createElement(
2526
+ core.Card,
2527
+ __spreadValues$7({
2528
+ radius: "md",
2529
+ style: __spreadValues$7({ backgroundImage: `url(${image})` }, style),
2530
+ className: cx(classes.card, className)
2531
+ }, others),
2532
+ /* @__PURE__ */ React__namespace.createElement(
2533
+ core.Overlay,
2534
+ {
2535
+ gradient: `linear-gradient(105deg, ${theme.black} 20%, #312f2f 50%, ${theme.colors.gray[6]} 100%)`,
2536
+ opacity: 0.55,
2537
+ zIndex: 0
2538
+ }
2539
+ ),
2540
+ /* @__PURE__ */ React__namespace.createElement("div", { className: classes.content }, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "lg", weight: 700, className: classes.title }, title), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", className: classes.description }, description), /* @__PURE__ */ React__namespace.createElement(core.Group, { mt: "sm", spacing: "xs" }, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", className: classes.code }, "Community Code: ", code || "\u2014"), code && /* @__PURE__ */ React__namespace.createElement(
2541
+ core.Button,
2542
+ {
2543
+ size: "xs",
2544
+ variant: "white",
2545
+ onClick: handleCopy,
2546
+ styles: {
2547
+ root: {
2548
+ backgroundColor: "rgba(255,255,255,0.9)"
2549
+ }
2550
+ }
2551
+ },
2552
+ "Copy"
2553
+ )))
2554
+ );
2555
+ };
2556
+
2557
+ const useStyles$5 = core.createStyles((theme) => ({
2558
+ action: {
2559
+ backgroundColor: "inherit",
2560
+ ":hover": {
2561
+ textDecoration: "underline"
2562
+ }
2563
+ },
2564
+ title: {
2565
+ color: theme.colorScheme === "dark" ? theme.white : theme.black,
2566
+ fontFamily: `Greycliff CF, ${theme.fontFamily}`,
2567
+ fontSize: theme.fontSizes.xl,
2568
+ lineHeight: 1.5,
2569
+ fontWeight: 900,
2570
+ [theme.fn.smallerThan("xs")]: {
2571
+ fontSize: theme.fontSizes.md
2572
+ }
2573
+ }
2574
+ }));
2575
+ const TrialHome = (props) => {
2576
+ const { classes } = useStyles$5();
2577
+ return /* @__PURE__ */ React__namespace.createElement(core.Container, { size: "lg" }, /* @__PURE__ */ React__namespace.createElement(core.Badge, null, props.daysRemaining, " day", props.daysRemaining !== 1 ? "s" : "", " left"), /* @__PURE__ */ React__namespace.createElement(
2578
+ core.Button,
2579
+ {
2580
+ className: classes.action,
2581
+ variant: "white",
2582
+ component: "a",
2583
+ size: "xs",
2584
+ href: props.upgradeHref,
2585
+ target: "_blank"
2586
+ },
2587
+ "UPGRADE NOW"
2588
+ ), /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "sm" }, /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: 0 }, /* @__PURE__ */ React__namespace.createElement(
2589
+ UserInfo,
2590
+ {
2591
+ variant: "compact",
2592
+ name: props.name,
2593
+ impactStatement: ""
2594
+ }
2595
+ ), /* @__PURE__ */ React__namespace.createElement(
2596
+ TenantBanner,
2597
+ {
2598
+ title: "Trial Account",
2599
+ description: `Welcome to your Local Civics Trial Account${props.firstName ? ", " + props.firstName : ""}!`,
2600
+ image: "https://cdn.localcivics.io/hub/landing.jpg"
2601
+ }
2602
+ )), /* @__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 })));
2603
+ };
2604
+
2605
+ var __defProp$6 = Object.defineProperty;
2606
+ var __defProps$5 = Object.defineProperties;
2607
+ var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
2608
+ var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
2609
+ var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
2610
+ var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
2611
+ var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2612
+ var __spreadValues$6 = (a, b) => {
2613
+ for (var prop in b || (b = {}))
2614
+ if (__hasOwnProp$6.call(b, prop))
2615
+ __defNormalProp$6(a, prop, b[prop]);
2616
+ if (__getOwnPropSymbols$6)
2617
+ for (var prop of __getOwnPropSymbols$6(b)) {
2618
+ if (__propIsEnum$6.call(b, prop))
2619
+ __defNormalProp$6(a, prop, b[prop]);
2620
+ }
2621
+ return a;
2622
+ };
2623
+ var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
2624
+ var __objRest = (source, exclude) => {
2625
+ var target = {};
2626
+ for (var prop in source)
2627
+ if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)
2628
+ target[prop] = source[prop];
2629
+ if (source != null && __getOwnPropSymbols$6)
2630
+ for (var prop of __getOwnPropSymbols$6(source)) {
2631
+ if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))
2632
+ target[prop] = source[prop];
2633
+ }
2634
+ return target;
2635
+ };
2636
+ const useStyles$4 = core.createStyles((theme, { checked }) => ({
2637
+ button: {
2638
+ display: "flex",
2639
+ alignItems: "center",
2640
+ width: "100%",
2641
+ transition: "background-color 150ms ease, border-color 150ms ease",
2642
+ border: `1px solid ${checked ? theme.fn.variant({ variant: "outline", color: theme.primaryColor }).border : theme.colorScheme === "dark" ? theme.colors.dark[8] : theme.colors.gray[3]}`,
2643
+ borderRadius: theme.radius.sm,
2644
+ padding: theme.spacing.md,
2645
+ paddingTop: theme.spacing.sm,
2646
+ paddingBottom: theme.spacing.sm,
2647
+ backgroundColor: checked ? theme.fn.variant({ variant: "light", color: theme.primaryColor }).background : theme.colorScheme === "dark" ? theme.colors.dark[8] : theme.white
2648
+ },
2649
+ body: {
2650
+ flex: 1,
2651
+ marginLeft: theme.spacing.md
2652
+ }
2653
+ }));
2654
+ function ImageCheckbox(_a) {
2655
+ var _b = _a, {
2656
+ checked,
2657
+ defaultChecked,
2658
+ onChange,
2659
+ title,
2660
+ description,
2661
+ className,
2662
+ icon: Icon
2663
+ } = _b, others = __objRest(_b, [
2664
+ "checked",
2665
+ "defaultChecked",
2666
+ "onChange",
2708
2667
  "title",
2709
2668
  "description",
2710
2669
  "className",
@@ -2716,10 +2675,10 @@ function ImageCheckbox(_a) {
2716
2675
  finalValue: false,
2717
2676
  onChange
2718
2677
  });
2719
- const { classes, cx } = useStyles$6({ checked: value });
2678
+ const { classes, cx } = useStyles$4({ checked: value });
2720
2679
  return /* @__PURE__ */ React__namespace.createElement(
2721
2680
  core.UnstyledButton,
2722
- __spreadProps$4(__spreadValues$5({}, others), {
2681
+ __spreadProps$5(__spreadValues$6({}, others), {
2723
2682
  onClick: () => handleChange(!value),
2724
2683
  className: cx(classes.button, className)
2725
2684
  }),
@@ -2740,7 +2699,7 @@ function ImageCheckbox(_a) {
2740
2699
  function SelectGrid(props) {
2741
2700
  const items = props.items.map((item) => /* @__PURE__ */ React__namespace.createElement(
2742
2701
  ImageCheckbox,
2743
- __spreadProps$4(__spreadValues$5({}, item), {
2702
+ __spreadProps$5(__spreadValues$6({}, item), {
2744
2703
  key: item.title,
2745
2704
  onChange: (checked) => props.onChange(item.title, checked)
2746
2705
  })
@@ -2758,26 +2717,26 @@ function SelectGrid(props) {
2758
2717
  );
2759
2718
  }
2760
2719
 
2761
- var __defProp$4 = Object.defineProperty;
2762
- var __defProps$3 = Object.defineProperties;
2763
- var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
2764
- var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
2765
- var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
2766
- var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
2767
- var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2768
- var __spreadValues$4 = (a, b) => {
2720
+ var __defProp$5 = Object.defineProperty;
2721
+ var __defProps$4 = Object.defineProperties;
2722
+ var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
2723
+ var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
2724
+ var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
2725
+ var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
2726
+ var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2727
+ var __spreadValues$5 = (a, b) => {
2769
2728
  for (var prop in b || (b = {}))
2770
- if (__hasOwnProp$4.call(b, prop))
2771
- __defNormalProp$4(a, prop, b[prop]);
2772
- if (__getOwnPropSymbols$4)
2773
- for (var prop of __getOwnPropSymbols$4(b)) {
2774
- if (__propIsEnum$4.call(b, prop))
2775
- __defNormalProp$4(a, prop, b[prop]);
2729
+ if (__hasOwnProp$5.call(b, prop))
2730
+ __defNormalProp$5(a, prop, b[prop]);
2731
+ if (__getOwnPropSymbols$5)
2732
+ for (var prop of __getOwnPropSymbols$5(b)) {
2733
+ if (__propIsEnum$5.call(b, prop))
2734
+ __defNormalProp$5(a, prop, b[prop]);
2776
2735
  }
2777
2736
  return a;
2778
2737
  };
2779
- var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
2780
- const useStyles$5 = core.createStyles((theme) => ({
2738
+ var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
2739
+ const useStyles$3 = core.createStyles((theme) => ({
2781
2740
  wrapper: {
2782
2741
  minHeight: "100%",
2783
2742
  boxSizing: "border-box",
@@ -2840,7 +2799,7 @@ const OPTIONS = [
2840
2799
  { description: "project-based learning", title: "Project-Based Learning", icon: icons.IconTools }
2841
2800
  ];
2842
2801
  const TrialRegistration = (props) => {
2843
- const { classes } = useStyles$5();
2802
+ const { classes } = useStyles$3();
2844
2803
  const [firstName, setFirstName] = React__namespace.useState("");
2845
2804
  const [lastName, setLastName] = React__namespace.useState("");
2846
2805
  const [organization, setOrganization] = React__namespace.useState({ organizationId: "", displayName: "" });
@@ -2886,7 +2845,7 @@ const TrialRegistration = (props) => {
2886
2845
  label: "School/Organization Name",
2887
2846
  placeholder: "What's the name of your school?",
2888
2847
  data: props.organizations.map((o) => {
2889
- return __spreadProps$3(__spreadValues$4({}, o), { value: o.displayName });
2848
+ return __spreadProps$4(__spreadValues$5({}, o), { value: o.displayName });
2890
2849
  }),
2891
2850
  onItemSubmit: (item) => setOrganization({ organizationId: item.organizationId, displayName: item.displayName }),
2892
2851
  onChange: (next) => {
@@ -2898,7 +2857,7 @@ const TrialRegistration = (props) => {
2898
2857
  SelectGrid,
2899
2858
  {
2900
2859
  items: OPTIONS,
2901
- onChange: (e, checked) => setInterests(__spreadProps$3(__spreadValues$4({}, interests), { [e]: checked }))
2860
+ onChange: (e, checked) => setInterests(__spreadProps$4(__spreadValues$5({}, interests), { [e]: checked }))
2902
2861
  }
2903
2862
  ), /* @__PURE__ */ React__namespace.createElement(core.Group, { position: "right", mt: "md" }, /* @__PURE__ */ React__namespace.createElement(
2904
2863
  core.Button,
@@ -2936,26 +2895,26 @@ const AdminProvider = (props) => {
2936
2895
  );
2937
2896
  };
2938
2897
 
2939
- var __defProp$3 = Object.defineProperty;
2940
- var __defProps$2 = Object.defineProperties;
2941
- var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
2942
- var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
2943
- var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
2944
- var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
2945
- var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2946
- var __spreadValues$3 = (a, b) => {
2898
+ var __defProp$4 = Object.defineProperty;
2899
+ var __defProps$3 = Object.defineProperties;
2900
+ var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
2901
+ var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
2902
+ var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
2903
+ var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
2904
+ var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2905
+ var __spreadValues$4 = (a, b) => {
2947
2906
  for (var prop in b || (b = {}))
2948
- if (__hasOwnProp$3.call(b, prop))
2949
- __defNormalProp$3(a, prop, b[prop]);
2950
- if (__getOwnPropSymbols$3)
2951
- for (var prop of __getOwnPropSymbols$3(b)) {
2952
- if (__propIsEnum$3.call(b, prop))
2953
- __defNormalProp$3(a, prop, b[prop]);
2907
+ if (__hasOwnProp$4.call(b, prop))
2908
+ __defNormalProp$4(a, prop, b[prop]);
2909
+ if (__getOwnPropSymbols$4)
2910
+ for (var prop of __getOwnPropSymbols$4(b)) {
2911
+ if (__propIsEnum$4.call(b, prop))
2912
+ __defNormalProp$4(a, prop, b[prop]);
2954
2913
  }
2955
2914
  return a;
2956
2915
  };
2957
- var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
2958
- const useStyles$4 = core.createStyles((theme, props) => ({
2916
+ var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
2917
+ const useStyles$2 = core.createStyles((theme, props) => ({
2959
2918
  footer: {
2960
2919
  paddingTop: theme.spacing.md,
2961
2920
  paddingBottom: theme.spacing.md,
@@ -3042,7 +3001,7 @@ const useStyles$4 = core.createStyles((theme, props) => ({
3042
3001
  }
3043
3002
  }));
3044
3003
  const App = (props) => {
3045
- const { classes } = useStyles$4(props);
3004
+ const { classes } = useStyles$2(props);
3046
3005
  const account = useAccount(props.account, props.accounts, props.onAccountChange);
3047
3006
  return /* @__PURE__ */ React__namespace.createElement(
3048
3007
  core.AppShell,
@@ -3050,7 +3009,7 @@ const App = (props) => {
3050
3009
  padding: "xs",
3051
3010
  navbar: props.navbar && /* @__PURE__ */ React__namespace.createElement(
3052
3011
  Navbar,
3053
- __spreadProps$2(__spreadValues$3({}, props.navbar.props), {
3012
+ __spreadProps$3(__spreadValues$4({}, props.navbar.props), {
3054
3013
  onSwitchAccounts: account.accounts && account.accounts.length > 1 ? () => account.setChangeModalOpen(true) : void 0
3055
3014
  })
3056
3015
  ),
@@ -3160,7 +3119,7 @@ const Pathways = (props) => {
3160
3119
  return /* @__PURE__ */ React__namespace.createElement("div", { className: "mx-auto flex max-w-4xl flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React__namespace.createElement("h1", { className: "text-2xl font-extrabold tracking-tight text-dark-blue-400" }, "Pathways"), /* @__PURE__ */ React__namespace.createElement("p", { className: "text-sm text-slate-500" }, "Explore all your unique pathway requirements in one clear space")), /* @__PURE__ */ React__namespace.createElement(Table$3, { loading: props.loading, items: props.pathways }));
3161
3120
  };
3162
3121
 
3163
- const useStyles$3 = core.createStyles((theme) => ({
3122
+ const useStyles$1 = core.createStyles((theme) => ({
3164
3123
  button: {
3165
3124
  borderTopRightRadius: 0,
3166
3125
  borderBottomRightRadius: 0,
@@ -3175,7 +3134,7 @@ const useStyles$3 = core.createStyles((theme) => ({
3175
3134
  }
3176
3135
  }));
3177
3136
  const SplitButton$1 = (props) => {
3178
- const { classes, theme } = useStyles$3();
3137
+ const { classes, theme } = useStyles$1();
3179
3138
  theme.colors[theme.primaryColor][theme.colorScheme === "dark" ? 5 : 6];
3180
3139
  return /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "sm" }, /* @__PURE__ */ React__namespace.createElement(
3181
3140
  core.Button,
@@ -3211,25 +3170,25 @@ function Stack$1(props) {
3211
3170
  return /* @__PURE__ */ React__namespace.createElement(core.Grid, { grow: true, gutter: "lg", sx: { padding: 20, minWidth: 700 } }, rows);
3212
3171
  }
3213
3172
 
3214
- var __defProp$2 = Object.defineProperty;
3215
- var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
3216
- var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
3217
- var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
3218
- var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3219
- var __spreadValues$2 = (a, b) => {
3173
+ var __defProp$3 = Object.defineProperty;
3174
+ var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
3175
+ var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
3176
+ var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
3177
+ var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3178
+ var __spreadValues$3 = (a, b) => {
3220
3179
  for (var prop in b || (b = {}))
3221
- if (__hasOwnProp$2.call(b, prop))
3222
- __defNormalProp$2(a, prop, b[prop]);
3223
- if (__getOwnPropSymbols$2)
3224
- for (var prop of __getOwnPropSymbols$2(b)) {
3225
- if (__propIsEnum$2.call(b, prop))
3226
- __defNormalProp$2(a, prop, b[prop]);
3180
+ if (__hasOwnProp$3.call(b, prop))
3181
+ __defNormalProp$3(a, prop, b[prop]);
3182
+ if (__getOwnPropSymbols$3)
3183
+ for (var prop of __getOwnPropSymbols$3(b)) {
3184
+ if (__propIsEnum$3.call(b, prop))
3185
+ __defNormalProp$3(a, prop, b[prop]);
3227
3186
  }
3228
3187
  return a;
3229
3188
  };
3230
3189
  function Table$2(props) {
3231
3190
  const preparedItems = React__namespace.useMemo(() => {
3232
- return (props.items || []).map((item) => __spreadValues$2(__spreadValues$2({}, item), item.categoryPoints));
3191
+ return (props.items || []).map((item) => __spreadValues$3(__spreadValues$3({}, item), item.categoryPoints));
3233
3192
  }, [props.items]);
3234
3193
  const { items: sortedItems, requestSort, sortConfig } = useSortableData(preparedItems);
3235
3194
  if (props.loading && props.items.length === 0) {
@@ -3361,7 +3320,7 @@ function Table$1(props) {
3361
3320
  ));
3362
3321
  }
3363
3322
 
3364
- const useStyles$2 = core.createStyles((theme) => ({
3323
+ const useStyles = core.createStyles((theme) => ({
3365
3324
  title: {
3366
3325
  fontSize: 34,
3367
3326
  fontWeight: 900,
@@ -3374,7 +3333,7 @@ const useStyles$2 = core.createStyles((theme) => ({
3374
3333
  }
3375
3334
  }));
3376
3335
  const Pathway = (props) => {
3377
- const { classes } = useStyles$2();
3336
+ const { classes } = useStyles();
3378
3337
  const [tab, setTab] = React.useState("badges");
3379
3338
  const numberOfStudents = props.students.length;
3380
3339
  numberOfStudents > 0 ? props.students.filter((u) => u.isComplete).length / numberOfStudents : 0;
@@ -3441,82 +3400,84 @@ const Pathway = (props) => {
3441
3400
  )))))));
3442
3401
  };
3443
3402
 
3444
- const useStyles$1 = core.createStyles((theme) => ({
3445
- button: {
3446
- borderTopRightRadius: 0,
3447
- borderBottomRightRadius: 0,
3448
- marginLeft: 0,
3449
- marginRight: 0
3450
- },
3451
- menuControl: {
3452
- borderTopLeftRadius: 0,
3453
- borderBottomLeftRadius: 0,
3454
- border: 0,
3455
- borderLeft: `1px solid ${theme.colorScheme === "dark" ? theme.colors.dark[7] : theme.white}`
3456
- }
3457
- }));
3458
3403
  const SplitButton = (props) => {
3459
- const { classes, theme } = useStyles$1();
3460
- theme.colors[theme.primaryColor][theme.colorScheme === "dark" ? 5 : 6];
3461
- return /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "sm" }, /* @__PURE__ */ React__namespace.createElement(
3462
- core.Button,
3404
+ return /* @__PURE__ */ React__namespace.createElement(
3405
+ "button",
3463
3406
  {
3464
- leftIcon: /* @__PURE__ */ React__namespace.createElement(icons.IconTableExport, { size: 14 }),
3465
- onClick: props.onExportDataClick
3407
+ onClick: props.onExportDataClick,
3408
+ className: "flex items-center gap-2 rounded-xl bg-gradient-to-r from-gold-400 to-[#f5c300] px-4 py-2.5 text-xs font-extrabold text-dark-blue-400"
3466
3409
  },
3410
+ /* @__PURE__ */ React__namespace.createElement(icons.IconTableExport, { size: 14, stroke: 2 }),
3467
3411
  "Export data (.csv)"
3468
- ));
3412
+ );
3469
3413
  };
3470
3414
 
3471
3415
  function Stack(props) {
3472
- const { items, hideBadge, hideLesson } = props;
3416
+ const { items, hideBadge, hideLesson, hidePathway } = props;
3473
3417
  if (!items.length)
3474
3418
  return null;
3475
- const visibleColumns = [
3476
- true,
3477
- !hideBadge,
3478
- !hideLesson,
3479
- true
3480
- ].filter(Boolean).length;
3481
- const span = 12 / visibleColumns;
3482
- return /* @__PURE__ */ React__namespace.createElement(core.Grid, { gutter: "md", sx: { padding: 20, minWidth: 700 } }, /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { span }, /* @__PURE__ */ React__namespace.createElement(core.Text, { weight: "bold" }, "Link")), !hideBadge && /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { span }, /* @__PURE__ */ React__namespace.createElement(core.Text, { weight: "bold" }, "Badge")), !hideLesson && /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { span }, /* @__PURE__ */ React__namespace.createElement(core.Text, { weight: "bold" }, "Lesson")), /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { span }, /* @__PURE__ */ React__namespace.createElement(core.Text, { weight: "bold" }, "Question")), items.map((row, i) => /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, { key: i }, /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { span }, /* @__PURE__ */ React__namespace.createElement(
3483
- core.Button,
3484
- {
3485
- component: "a",
3486
- href: row.link,
3487
- target: "_blank",
3488
- rel: "noopener noreferrer",
3489
- size: "xs",
3490
- variant: "light"
3491
- },
3492
- "View File"
3493
- )), !hideBadge && /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { span }, /* @__PURE__ */ React__namespace.createElement(core.Text, null, row.badgeName)), !hideLesson && /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { span }, /* @__PURE__ */ React__namespace.createElement(core.Text, null, row.lessonName)), /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { span }, /* @__PURE__ */ React__namespace.createElement(core.Text, null, row.question)))));
3419
+ const columns = [
3420
+ "minmax(0,2fr)",
3421
+ !hidePathway && "minmax(0,1.3fr)",
3422
+ !hideLesson && "minmax(0,1.3fr)",
3423
+ !hideBadge && "minmax(0,1.3fr)",
3424
+ "auto"
3425
+ ].filter(Boolean).join(" ");
3426
+ const headerCell = "border-b border-slate-100 pb-2 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400";
3427
+ const dataCell = "py-3";
3428
+ return /* @__PURE__ */ React__namespace.createElement("div", { className: "grid items-center gap-x-3", style: { gridTemplateColumns: columns } }, /* @__PURE__ */ React__namespace.createElement("div", { className: headerCell }, "Question"), !hidePathway && /* @__PURE__ */ React__namespace.createElement("div", { className: headerCell }, "Pathway"), !hideLesson && /* @__PURE__ */ React__namespace.createElement("div", { className: headerCell }, "Lesson"), !hideBadge && /* @__PURE__ */ React__namespace.createElement("div", { className: headerCell }, "Badge"), /* @__PURE__ */ React__namespace.createElement("div", { className: headerCell }), items.map((row, i) => {
3429
+ const rowBorder = i > 0 ? "border-t border-slate-100" : "";
3430
+ return /* @__PURE__ */ React__namespace.createElement(React__namespace.Fragment, { key: i }, /* @__PURE__ */ React__namespace.createElement("div", { className: `${dataCell} ${rowBorder} text-xs font-semibold text-dark-blue-400` }, row.question), !hidePathway && /* @__PURE__ */ React__namespace.createElement("div", { className: `${dataCell} ${rowBorder} truncate text-[11px] text-slate-500` }, row.pathwayName || "\u2014"), !hideLesson && /* @__PURE__ */ React__namespace.createElement("div", { className: `${dataCell} ${rowBorder} truncate text-[11px] text-slate-500` }, row.lessonName), !hideBadge && /* @__PURE__ */ React__namespace.createElement("div", { className: `${dataCell} ${rowBorder} truncate text-[11px] text-slate-500` }, row.badgeName), /* @__PURE__ */ React__namespace.createElement("div", { className: `${dataCell} ${rowBorder} flex shrink-0 gap-2` }, /* @__PURE__ */ React__namespace.createElement(
3431
+ "a",
3432
+ {
3433
+ href: row.link,
3434
+ target: "_blank",
3435
+ rel: "noopener noreferrer",
3436
+ className: "flex items-center gap-1 rounded-md border border-slate-200 px-2.5 py-1.5 text-[11px] font-bold text-slate-600 no-underline hover:bg-slate-50"
3437
+ },
3438
+ /* @__PURE__ */ React__namespace.createElement(icons.IconExternalLink, { size: 12, stroke: 2 }),
3439
+ "Preview"
3440
+ ), /* @__PURE__ */ React__namespace.createElement(
3441
+ "a",
3442
+ {
3443
+ href: row.link,
3444
+ download: true,
3445
+ target: "_blank",
3446
+ rel: "noopener noreferrer",
3447
+ className: "flex items-center gap-1 rounded-md border border-slate-200 px-2.5 py-1.5 text-[11px] font-bold text-slate-600 no-underline hover:bg-slate-50"
3448
+ },
3449
+ /* @__PURE__ */ React__namespace.createElement(icons.IconDownload, { size: 12, stroke: 2 }),
3450
+ "Download"
3451
+ )));
3452
+ }));
3494
3453
  }
3495
3454
 
3496
- var __defProp$1 = Object.defineProperty;
3497
- var __defProps$1 = Object.defineProperties;
3498
- var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
3499
- var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
3500
- var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
3501
- var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
3502
- var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3503
- var __spreadValues$1 = (a, b) => {
3455
+ var __defProp$2 = Object.defineProperty;
3456
+ var __defProps$2 = Object.defineProperties;
3457
+ var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
3458
+ var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
3459
+ var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
3460
+ var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
3461
+ var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3462
+ var __spreadValues$2 = (a, b) => {
3504
3463
  for (var prop in b || (b = {}))
3505
- if (__hasOwnProp$1.call(b, prop))
3506
- __defNormalProp$1(a, prop, b[prop]);
3507
- if (__getOwnPropSymbols$1)
3508
- for (var prop of __getOwnPropSymbols$1(b)) {
3509
- if (__propIsEnum$1.call(b, prop))
3510
- __defNormalProp$1(a, prop, b[prop]);
3464
+ if (__hasOwnProp$2.call(b, prop))
3465
+ __defNormalProp$2(a, prop, b[prop]);
3466
+ if (__getOwnPropSymbols$2)
3467
+ for (var prop of __getOwnPropSymbols$2(b)) {
3468
+ if (__propIsEnum$2.call(b, prop))
3469
+ __defNormalProp$2(a, prop, b[prop]);
3511
3470
  }
3512
3471
  return a;
3513
3472
  };
3514
- var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
3473
+ var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
3474
+ const initials$1 = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
3515
3475
  function Table(props) {
3476
+ const [expanded, setExpanded] = React__namespace.useState({});
3516
3477
  const preparedItems = React__namespace.useMemo(() => {
3517
3478
  return props.items.map((item) => {
3518
3479
  var _a;
3519
- return __spreadProps$1(__spreadValues$1({}, item), {
3480
+ return __spreadProps$2(__spreadValues$2({}, item), {
3520
3481
  submissionCount: ((_a = item.submissions) == null ? void 0 : _a.length) || 0
3521
3482
  });
3522
3483
  });
@@ -3533,76 +3494,82 @@ function Table(props) {
3533
3494
  }
3534
3495
  );
3535
3496
  }
3536
- const sortStatus = {
3537
- columnAccessor: sortConfig.key,
3538
- direction: sortConfig.direction === "desc" ? "desc" : "asc"
3539
- };
3540
- return /* @__PURE__ */ React__namespace.createElement(core.ScrollArea.Autosize, { maxHeight: 600 }, /* @__PURE__ */ React__namespace.createElement(
3541
- mantineDatatable.DataTable,
3497
+ const indicator = (key) => sortConfig.key !== key ? "" : sortConfig.direction === "desc" ? " \u25BE" : " \u25B4";
3498
+ 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 text-[10.5px] font-extrabold uppercase tracking-wide text-slate-400" }, /* @__PURE__ */ React__namespace.createElement("button", { onClick: () => requestSort("name"), className: "flex-1 text-left hover:text-slate-600" }, "Student Name", indicator("name")), /* @__PURE__ */ React__namespace.createElement("button", { onClick: () => requestSort("submissionCount"), className: "w-16 shrink-0 text-left hover:text-slate-600" }, "Files", indicator("submissionCount")), props.onReview && /* @__PURE__ */ React__namespace.createElement("div", { className: "w-36 shrink-0" }), /* @__PURE__ */ React__namespace.createElement("div", { className: "w-4 shrink-0" })), sortedItems.map((row) => {
3499
+ const isOpen = !!expanded[row.userId];
3500
+ return /* @__PURE__ */ React__namespace.createElement("div", { key: row.userId, className: "rounded-xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React__namespace.createElement(
3501
+ "div",
3502
+ {
3503
+ onClick: () => setExpanded(__spreadProps$2(__spreadValues$2({}, expanded), { [row.userId]: !isOpen })),
3504
+ className: "flex cursor-pointer items-center gap-4 p-4"
3505
+ },
3506
+ /* @__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$1(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))),
3507
+ /* @__PURE__ */ React__namespace.createElement("div", { className: "w-16 shrink-0 text-sm font-bold text-dark-blue-400" }, row.submissions.length),
3508
+ props.onReview && /* @__PURE__ */ React__namespace.createElement("div", { className: "w-36 shrink-0" }, /* @__PURE__ */ React__namespace.createElement(
3509
+ "button",
3510
+ {
3511
+ onClick: (e) => {
3512
+ e.stopPropagation();
3513
+ props.onReview(row);
3514
+ },
3515
+ 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"
3516
+ },
3517
+ "Review Submission"
3518
+ )),
3519
+ /* @__PURE__ */ React__namespace.createElement(icons.IconChevronRight, { size: 16, stroke: 2, className: `w-4 shrink-0 text-slate-300 transition-transform ${isOpen ? "rotate-90" : ""}` })
3520
+ ), isOpen && /* @__PURE__ */ React__namespace.createElement("div", { className: "border-t border-slate-100 px-4 py-3" }, /* @__PURE__ */ React__namespace.createElement(Stack, { items: row.submissions, hideBadge: props.hideBadge, hideLesson: props.hideLesson, hidePathway: props.hidePathway })));
3521
+ }));
3522
+ }
3523
+
3524
+ const initials = (name) => name.split(" ").map((w) => w[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
3525
+ function SubmissionDetail(props) {
3526
+ const { student } = props;
3527
+ return /* @__PURE__ */ React__namespace.createElement("div", { className: "mx-auto flex w-full max-w-4xl 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(Stack, { items: student.submissions }))), /* @__PURE__ */ React__namespace.createElement("div", { className: "flex gap-3" }, /* @__PURE__ */ React__namespace.createElement(
3528
+ "button",
3542
3529
  {
3543
- verticalSpacing: "sm",
3544
- sx: { minWidth: 700 },
3545
- withBorder: false,
3546
- borderRadius: "sm",
3547
- withColumnBorders: true,
3548
- striped: true,
3549
- highlightOnHover: true,
3550
- records: sortedItems,
3551
- sortStatus,
3552
- onSortStatusChange: (status) => requestSort(status.columnAccessor),
3553
- idAccessor: "userId",
3554
- columns: [{
3555
- accessor: "name",
3556
- title: "Student Name",
3557
- sortable: true,
3558
- render: (row) => /* @__PURE__ */ React__namespace.createElement(core.Group, { spacing: "sm" }, /* @__PURE__ */ React__namespace.createElement(core.Avatar, { size: 40, src: row.avatar, radius: 40 }), /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "sm", weight: 500 }, row.name), /* @__PURE__ */ React__namespace.createElement(core.Text, { size: "xs", color: "dimmed" }, row.email)))
3559
- }, {
3560
- accessor: "submissionCount",
3561
- title: "Files",
3562
- sortable: true,
3563
- render: (row) => row.submissions.length
3564
- }],
3565
- rowExpansion: {
3566
- content: ({ record }) => /* @__PURE__ */ React__namespace.createElement(
3567
- Stack,
3568
- {
3569
- items: record.submissions,
3570
- hideBadge: props.hideBadge,
3571
- hideLesson: props.hideLesson
3572
- }
3573
- )
3574
- }
3575
- }
3576
- ));
3530
+ onClick: () => props.onNav(-1),
3531
+ className: "flex flex-1 items-center justify-center gap-1.5 rounded-xl border border-slate-200 bg-white py-2.5 text-xs font-bold text-slate-600 hover:bg-slate-50"
3532
+ },
3533
+ /* @__PURE__ */ React__namespace.createElement(icons.IconChevronLeft, { size: 14, stroke: 2 }),
3534
+ "Previous Submission"
3535
+ ), /* @__PURE__ */ React__namespace.createElement(
3536
+ "button",
3537
+ {
3538
+ onClick: () => props.onNav(1),
3539
+ className: "flex flex-1 items-center justify-center gap-1.5 rounded-xl border border-slate-200 bg-white py-2.5 text-xs font-bold text-slate-600 hover:bg-slate-50"
3540
+ },
3541
+ "Next Submission",
3542
+ /* @__PURE__ */ React__namespace.createElement(icons.IconChevronRight, { size: 14, stroke: 2 })
3543
+ )));
3577
3544
  }
3578
3545
 
3579
- var __defProp = Object.defineProperty;
3580
- var __defProps = Object.defineProperties;
3581
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
3582
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3583
- var __hasOwnProp = Object.prototype.hasOwnProperty;
3584
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
3585
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3586
- var __spreadValues = (a, b) => {
3546
+ var __defProp$1 = Object.defineProperty;
3547
+ var __defProps$1 = Object.defineProperties;
3548
+ var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
3549
+ var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
3550
+ var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
3551
+ var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
3552
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3553
+ var __spreadValues$1 = (a, b) => {
3587
3554
  for (var prop in b || (b = {}))
3588
- if (__hasOwnProp.call(b, prop))
3589
- __defNormalProp(a, prop, b[prop]);
3590
- if (__getOwnPropSymbols)
3591
- for (var prop of __getOwnPropSymbols(b)) {
3592
- if (__propIsEnum.call(b, prop))
3593
- __defNormalProp(a, prop, b[prop]);
3555
+ if (__hasOwnProp$1.call(b, prop))
3556
+ __defNormalProp$1(a, prop, b[prop]);
3557
+ if (__getOwnPropSymbols$1)
3558
+ for (var prop of __getOwnPropSymbols$1(b)) {
3559
+ if (__propIsEnum$1.call(b, prop))
3560
+ __defNormalProp$1(a, prop, b[prop]);
3594
3561
  }
3595
3562
  return a;
3596
3563
  };
3597
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
3564
+ var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
3598
3565
  const useFilteredStudents = (students) => {
3599
3566
  return React__namespace.useMemo(() => {
3600
- const byBadge = (badgeId) => students.map((s) => __spreadProps(__spreadValues({}, s), {
3567
+ const byBadge = (badgeId) => students.map((s) => __spreadProps$1(__spreadValues$1({}, s), {
3601
3568
  submissions: (s.submissions || []).filter(
3602
3569
  (sub) => sub.badgeId === badgeId
3603
3570
  )
3604
3571
  })).filter((s) => s.submissions.length);
3605
- const byLesson = (lessonName) => students.map((s) => __spreadProps(__spreadValues({}, s), {
3572
+ const byLesson = (lessonName) => students.map((s) => __spreadProps$1(__spreadValues$1({}, s), {
3606
3573
  submissions: (s.submissions || []).filter(
3607
3574
  (sub) => sub.lessonName === lessonName
3608
3575
  )
@@ -3613,7 +3580,7 @@ const useFilteredStudents = (students) => {
3613
3580
  (c) => c.startsWith(pathwayId)
3614
3581
  )
3615
3582
  ).map((b) => b.badgeId);
3616
- return students.map((s) => __spreadProps(__spreadValues({}, s), {
3583
+ return students.map((s) => __spreadProps$1(__spreadValues$1({}, s), {
3617
3584
  submissions: (s.submissions || []).filter(
3618
3585
  (sub) => validBadgeIds.includes(sub.badgeId)
3619
3586
  )
@@ -3623,167 +3590,166 @@ const useFilteredStudents = (students) => {
3623
3590
  }, [students]);
3624
3591
  };
3625
3592
 
3626
- const useStyles = core.createStyles((theme) => ({
3627
- title: {
3628
- fontSize: 34,
3629
- fontWeight: 900,
3630
- [theme.fn.smallerThan("sm")]: {
3631
- fontSize: 24
3593
+ var __defProp = Object.defineProperty;
3594
+ var __defProps = Object.defineProperties;
3595
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
3596
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3597
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
3598
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
3599
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3600
+ var __spreadValues = (a, b) => {
3601
+ for (var prop in b || (b = {}))
3602
+ if (__hasOwnProp.call(b, prop))
3603
+ __defNormalProp(a, prop, b[prop]);
3604
+ if (__getOwnPropSymbols)
3605
+ for (var prop of __getOwnPropSymbols(b)) {
3606
+ if (__propIsEnum.call(b, prop))
3607
+ __defNormalProp(a, prop, b[prop]);
3632
3608
  }
3633
- },
3634
- description: {
3635
- maxWidth: 600
3636
- }
3637
- }));
3638
- const BadgeTable = ({ badges, students, loading }) => {
3639
- const { byBadge } = useFilteredStudents(students);
3640
- const countFiles = (students2) => students2.reduce((acc, s) => {
3641
- var _a;
3642
- return acc + (((_a = s.submissions) == null ? void 0 : _a.length) || 0);
3643
- }, 0);
3644
- return /* @__PURE__ */ React__namespace.createElement(core.Accordion, null, badges.map((b) => {
3645
- const studentsForBadge = byBadge(b.badgeId);
3646
- const fileCount = countFiles(studentsForBadge);
3647
- return /* @__PURE__ */ React__namespace.createElement(core.Accordion.Item, { key: b.badgeId, value: b.badgeId }, /* @__PURE__ */ React__namespace.createElement(core.Accordion.Control, null, /* @__PURE__ */ React__namespace.createElement(core.Group, { position: "apart", w: "100%" }, /* @__PURE__ */ React__namespace.createElement(core.Text, null, b.displayName), /* @__PURE__ */ React__namespace.createElement(core.Badge, { size: "sm" }, fileCount))), /* @__PURE__ */ React__namespace.createElement(core.Accordion.Panel, null, /* @__PURE__ */ React__namespace.createElement(
3648
- Table,
3649
- {
3650
- loading,
3651
- items: studentsForBadge,
3652
- hideBadge: true
3653
- }
3654
- )));
3609
+ return a;
3610
+ };
3611
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
3612
+ const TABS = [
3613
+ { value: "students", label: "By student" },
3614
+ { value: "pathways", label: "By pathway" },
3615
+ { value: "badges", label: "By badge" },
3616
+ { value: "lessons", label: "By lesson" }
3617
+ ];
3618
+ const countFiles = (students) => students.reduce((acc, s) => {
3619
+ var _a;
3620
+ return acc + (((_a = s.submissions) == null ? void 0 : _a.length) || 0);
3621
+ }, 0);
3622
+ const GroupCard = (props) => {
3623
+ const [open, setOpen] = React__namespace.useState(false);
3624
+ return /* @__PURE__ */ React__namespace.createElement("div", { className: "overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm" }, /* @__PURE__ */ React__namespace.createElement("div", { onClick: () => setOpen(!open), className: "flex cursor-pointer items-center gap-3.5 p-4" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "text-sm font-extrabold text-dark-blue-400" }, props.title), props.description && /* @__PURE__ */ React__namespace.createElement("div", { className: "mt-1 text-xs leading-relaxed text-slate-500" }, props.description)), /* @__PURE__ */ React__namespace.createElement("div", { className: "shrink-0 rounded-full bg-mint-100 px-2.5 py-1 text-xs font-bold text-dark-blue-400" }, props.count), /* @__PURE__ */ React__namespace.createElement(icons.IconChevronDown, { size: 15, stroke: 2.3, className: `shrink-0 text-slate-400 transition-transform ${open ? "rotate-180" : ""}` })), open && /* @__PURE__ */ React__namespace.createElement("div", { className: "border-t border-slate-100 p-4" }, props.children));
3625
+ };
3626
+ const PathwayGroups = (props) => {
3627
+ const { byPathway } = useFilteredStudents(props.students);
3628
+ return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, props.pathways.map((p) => {
3629
+ const filtered = byPathway(p.pathwayId, props.badges);
3630
+ return /* @__PURE__ */ React__namespace.createElement(GroupCard, { key: p.pathwayId, title: p.title, description: p.description, count: countFiles(filtered) }, /* @__PURE__ */ React__namespace.createElement(Table, { loading: props.loading, items: filtered, hidePathway: true, onReview: (item) => props.onReview(item, filtered, p.title) }));
3655
3631
  }));
3656
3632
  };
3657
- const LessonTableWrapper = ({ lessons, students, loading }) => {
3658
- const { byLesson } = useFilteredStudents(students);
3659
- const countFiles = (students2) => students2.reduce((acc, s) => {
3660
- var _a;
3661
- return acc + (((_a = s.submissions) == null ? void 0 : _a.length) || 0);
3662
- }, 0);
3663
- return /* @__PURE__ */ React__namespace.createElement(core.Accordion, null, lessons.map((l) => {
3664
- const studentsForLesson = byLesson(l.lessonName);
3665
- const fileCount = countFiles(studentsForLesson);
3666
- return /* @__PURE__ */ React__namespace.createElement(core.Accordion.Item, { key: l.lessonId, value: l.lessonId }, /* @__PURE__ */ React__namespace.createElement(core.Accordion.Control, null, /* @__PURE__ */ React__namespace.createElement(core.Group, { position: "apart", w: "100%" }, /* @__PURE__ */ React__namespace.createElement(core.Text, null, l.lessonName), /* @__PURE__ */ React__namespace.createElement(core.Badge, { size: "sm" }, fileCount))), /* @__PURE__ */ React__namespace.createElement(core.Accordion.Panel, null, /* @__PURE__ */ React__namespace.createElement(
3667
- Table,
3668
- {
3669
- loading,
3670
- items: studentsForLesson,
3671
- hideLesson: true
3672
- }
3673
- )));
3633
+ const BadgeGroups = (props) => {
3634
+ const { byBadge } = useFilteredStudents(props.students);
3635
+ return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, props.badges.map((b) => {
3636
+ const filtered = byBadge(b.badgeId);
3637
+ const pathwayTitle = props.pathwayNameForBadge[b.badgeId];
3638
+ return /* @__PURE__ */ React__namespace.createElement(GroupCard, { key: b.badgeId, title: b.displayName, description: pathwayTitle ? `${pathwayTitle} pathway` : void 0, count: countFiles(filtered) }, /* @__PURE__ */ React__namespace.createElement(Table, { loading: props.loading, items: filtered, hideBadge: true, hidePathway: true, onReview: (item) => props.onReview(item, filtered, b.displayName) }));
3674
3639
  }));
3675
3640
  };
3676
- const PathwayTable = ({
3677
- pathways,
3678
- badges,
3679
- students,
3680
- loading
3681
- }) => {
3682
- const { byPathway } = useFilteredStudents(students);
3683
- const countFiles = (students2) => students2.reduce((acc, s) => {
3684
- var _a;
3685
- return acc + (((_a = s.submissions) == null ? void 0 : _a.length) || 0);
3686
- }, 0);
3687
- return /* @__PURE__ */ React__namespace.createElement(core.Accordion, null, pathways.map((p) => {
3688
- const studentsForPathway = byPathway(p.pathwayId, badges);
3689
- const fileCount = countFiles(studentsForPathway);
3690
- return /* @__PURE__ */ React__namespace.createElement(core.Accordion.Item, { key: p.pathwayId, value: p.pathwayId }, /* @__PURE__ */ React__namespace.createElement(core.Accordion.Control, null, /* @__PURE__ */ React__namespace.createElement(core.Group, { position: "apart", w: "100%" }, /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("strong", null, p.title), /* @__PURE__ */ React__namespace.createElement("div", null, p.description)), /* @__PURE__ */ React__namespace.createElement(core.Badge, { size: "sm" }, fileCount))), /* @__PURE__ */ React__namespace.createElement(core.Accordion.Panel, null, /* @__PURE__ */ React__namespace.createElement(
3691
- Table,
3692
- {
3693
- loading,
3694
- items: studentsForPathway
3695
- }
3696
- )));
3641
+ const LessonGroups = (props) => {
3642
+ const { byLesson } = useFilteredStudents(props.students);
3643
+ return /* @__PURE__ */ React__namespace.createElement("div", { className: "flex flex-col gap-3" }, props.lessons.map((l) => {
3644
+ const filtered = byLesson(l.lessonName);
3645
+ const badge = props.badgeForLesson[l.lessonId];
3646
+ const pathwayTitle = badge ? props.pathwayNameForBadge[badge.badgeId] : void 0;
3647
+ const description = badge ? pathwayTitle ? `${badge.displayName} \xB7 ${pathwayTitle} pathway` : badge.displayName : void 0;
3648
+ return /* @__PURE__ */ React__namespace.createElement(GroupCard, { key: l.lessonId, title: l.lessonName, description, count: countFiles(filtered) }, /* @__PURE__ */ React__namespace.createElement(Table, { loading: props.loading, items: filtered, hideBadge: true, hideLesson: true, hidePathway: true, onReview: (item) => props.onReview(item, filtered, l.lessonName) }));
3697
3649
  }));
3698
3650
  };
3699
3651
  const FileLocker = (props) => {
3700
- const { classes } = useStyles();
3701
- const [tab, setTab] = React.useState("students");
3702
- props.students.length;
3703
- const numberOfFiles = props.students.reduce(
3704
- (acc, s) => {
3705
- var _a;
3706
- return acc + (((_a = s.submissions) == null ? void 0 : _a.length) || 0);
3707
- },
3708
- 0
3709
- );
3710
- return /* @__PURE__ */ React__namespace.createElement(core.Container, { size: "lg", py: "xl" }, /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: "md" }, /* @__PURE__ */ React__namespace.createElement(core.Grid, null, /* @__PURE__ */ React__namespace.createElement(core.Grid.Col, { sm: "auto" }, /* @__PURE__ */ React__namespace.createElement(core.UnstyledButton, { onClick: props.onBackClick }, /* @__PURE__ */ React__namespace.createElement(
3711
- core.Badge,
3712
- {
3713
- variant: "filled",
3714
- leftSection: /* @__PURE__ */ React__namespace.createElement(core.ActionIcon, { color: "blue", size: "xs", radius: "xl", variant: "filled" }, /* @__PURE__ */ React__namespace.createElement(icons.IconArrowLeft, { size: 14 })),
3715
- size: "lg"
3716
- },
3717
- "Back"
3718
- )), /* @__PURE__ */ React__namespace.createElement(core.Group, null, /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: 0 }, /* @__PURE__ */ React__namespace.createElement(core.Title, { order: 2, className: classes.title, mt: "md" }, props.displayName || "File"), /* @__PURE__ */ React__namespace.createElement(core.Text, { color: "dimmed", className: classes.description, mt: "sm" }, props.description || "No description")), !props.trial && /* @__PURE__ */ React__namespace.createElement(core.Stack, { ml: "auto" }, /* @__PURE__ */ React__namespace.createElement(
3719
- SplitButton,
3720
- {
3721
- href: props.href,
3722
- onCopyLinkClick: props.onCopyLinkClick,
3723
- onExportDataClick: props.onExportDataClick
3724
- }
3725
- ))))), /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("div", { style: { position: "relative" } }, /* @__PURE__ */ React__namespace.createElement(core.LoadingOverlay, { visible: props.loading, overlayBlur: 2 }), /* @__PURE__ */ React__namespace.createElement(core.Stack, null, /* @__PURE__ */ React__namespace.createElement(StatsGroup, { data: [
3726
- {
3727
- title: props.trial ? "LESSONS SUBMITTED" : "FILES",
3728
- value: props.trial ? props.lessonsCompleted || 0 : numberOfFiles,
3729
- unit: props.trial ? "" : ""
3730
- }
3731
- ] }), !props.trial && /* @__PURE__ */ React__namespace.createElement(
3732
- core.Select,
3652
+ const [tab, setTab] = React__namespace.useState("students");
3653
+ const [reviewing, setReviewing] = React__namespace.useState(null);
3654
+ const numberOfFiles = countFiles(props.students);
3655
+ const { thisWeek, thisMonth } = React__namespace.useMemo(() => {
3656
+ const now = new Date();
3657
+ const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1e3);
3658
+ const fom = new Date(now.getFullYear(), now.getMonth(), 1);
3659
+ let week = 0, month = 0;
3660
+ props.students.forEach((s) => {
3661
+ (s.submissions || []).forEach((sub) => {
3662
+ if (!sub.updatedAt)
3663
+ return;
3664
+ const d = new Date(sub.updatedAt);
3665
+ if (d >= weekAgo)
3666
+ week += 1;
3667
+ if (d >= fom)
3668
+ month += 1;
3669
+ });
3670
+ });
3671
+ return { thisWeek: week, thisMonth: month };
3672
+ }, [props.students]);
3673
+ const pathwayNameForBadge = React__namespace.useMemo(() => {
3674
+ const map = {};
3675
+ (props.badges || []).forEach((b) => {
3676
+ if (!Array.isArray(b.categories))
3677
+ return;
3678
+ const pathway = (props.pathways || []).find((p) => b.categories.some((c) => c.startsWith(p.pathwayId)));
3679
+ if (pathway)
3680
+ map[b.badgeId] = pathway.title;
3681
+ });
3682
+ return map;
3683
+ }, [props.badges, props.pathways]);
3684
+ const badgeForLesson = React__namespace.useMemo(() => {
3685
+ const map = {};
3686
+ (props.badges || []).forEach((b) => {
3687
+ if (!Array.isArray(b.lessonIds))
3688
+ return;
3689
+ b.lessonIds.forEach((lessonId) => {
3690
+ if (!(lessonId in map))
3691
+ map[lessonId] = { displayName: b.displayName, badgeId: b.badgeId };
3692
+ });
3693
+ });
3694
+ return map;
3695
+ }, [props.badges]);
3696
+ const enrichedStudents = React__namespace.useMemo(() => {
3697
+ return props.students.map((s) => __spreadProps(__spreadValues({}, s), {
3698
+ submissions: (s.submissions || []).map((sub) => __spreadProps(__spreadValues({}, sub), { pathwayName: pathwayNameForBadge[sub.badgeId] || "" }))
3699
+ }));
3700
+ }, [props.students, pathwayNameForBadge]);
3701
+ const { byPathway } = useFilteredStudents(enrichedStudents);
3702
+ const mostActivePathway = React__namespace.useMemo(() => {
3703
+ return (props.pathways || []).reduce((best, p) => {
3704
+ const count = countFiles(byPathway(p.pathwayId, props.badges || []));
3705
+ return count > 0 && (!best || count > best.count) ? { title: p.title, count } : best;
3706
+ }, null);
3707
+ }, [props.pathways, props.badges, byPathway]);
3708
+ const onReview = (item, list, context) => setReviewing({ student: item, list, context });
3709
+ const onNav = (dir) => {
3710
+ if (!reviewing)
3711
+ return;
3712
+ const idx = reviewing.list.findIndex((s) => s.userId === reviewing.student.userId);
3713
+ if (idx === -1)
3714
+ return;
3715
+ const next = reviewing.list[(idx + dir + reviewing.list.length) % reviewing.list.length];
3716
+ setReviewing(__spreadProps(__spreadValues({}, reviewing), { student: next }));
3717
+ };
3718
+ if (reviewing) {
3719
+ return /* @__PURE__ */ React__namespace.createElement(
3720
+ SubmissionDetail,
3721
+ {
3722
+ student: reviewing.student,
3723
+ context: reviewing.context,
3724
+ onBack: () => setReviewing(null),
3725
+ onNav
3726
+ }
3727
+ );
3728
+ }
3729
+ return /* @__PURE__ */ React__namespace.createElement("div", { className: "mx-auto flex w-full max-w-4xl flex-col gap-5 px-4 py-8" }, /* @__PURE__ */ React__namespace.createElement("div", { className: "flex items-start justify-between gap-4" }, /* @__PURE__ */ React__namespace.createElement("div", null, /* @__PURE__ */ React__namespace.createElement("button", { onClick: props.onBackClick, className: "flex items-center gap-1 text-xs font-bold text-sky-blue-400 hover:underline" }, /* @__PURE__ */ React__namespace.createElement(icons.IconChevronLeft, { size: 13, stroke: 2.5 }), "Back"), /* @__PURE__ */ React__namespace.createElement("h1", { className: "mt-1.5 text-2xl font-extrabold tracking-tight text-dark-blue-400" }, props.displayName || "File Locker"), /* @__PURE__ */ React__namespace.createElement("p", { className: "mt-1 text-sm text-slate-500" }, props.description || "No description")), !props.trial && /* @__PURE__ */ React__namespace.createElement(SplitButton, { href: props.href, onCopyLinkClick: props.onCopyLinkClick, onExportDataClick: props.onExportDataClick })), /* @__PURE__ */ React__namespace.createElement(StatsGroup, { data: props.trial ? [
3730
+ { title: "LESSONS SUBMITTED", value: props.lessonsCompleted || 0 }
3731
+ ] : [
3732
+ { title: "FILES", value: numberOfFiles },
3733
+ { title: "THIS WEEK", value: thisWeek },
3734
+ { title: "THIS MONTH", value: thisMonth }
3735
+ ] }), !props.trial && mostActivePathway && /* @__PURE__ */ React__namespace.createElement("div", { className: "text-xs text-slate-500" }, "Most active pathway: ", /* @__PURE__ */ React__namespace.createElement("span", { className: "font-bold text-dark-blue-400" }, mostActivePathway.title), " (", mostActivePathway.count, " submission", mostActivePathway.count === 1 ? "" : "s", ")"), !props.trial && /* @__PURE__ */ React__namespace.createElement(
3736
+ "select",
3733
3737
  {
3734
- clearable: true,
3735
- clearButtonLabel: "Clear class selection",
3736
- size: "sm",
3737
- placeholder: "Select a class",
3738
- nothingFound: "No options",
3739
3738
  value: props.classId,
3740
- onChange: props.onClassChange,
3741
- icon: /* @__PURE__ */ React__namespace.createElement(icons.IconCategory2, null),
3742
- data: props.classes.map((g) => {
3743
- return { value: g.classId, label: g.name };
3744
- })
3745
- }
3746
- ), /* @__PURE__ */ React__namespace.createElement(core.Stack, { spacing: 0 }, !props.trial && /* @__PURE__ */ React__namespace.createElement(
3747
- Tabs,
3748
- {
3749
- value: tab,
3750
- data: [
3751
- { label: "By student", value: "students" },
3752
- { label: "By pathway", value: "pathways" },
3753
- { label: "By badge", value: "badges" },
3754
- { label: "By lesson", value: "lessons" }
3755
- ],
3756
- onChange: setTab
3757
- }
3758
- ), !props.trial && tab === "students" && /* @__PURE__ */ React__namespace.createElement(
3759
- Table,
3760
- {
3761
- loading: props.loading,
3762
- items: props.students
3763
- }
3764
- ), tab === "pathways" && /* @__PURE__ */ React__namespace.createElement(
3765
- PathwayTable,
3766
- {
3767
- pathways: props.pathways || [],
3768
- badges: props.badges || [],
3769
- students: props.students,
3770
- loading: props.loading
3771
- }
3772
- ), tab === "badges" && /* @__PURE__ */ React__namespace.createElement(
3773
- BadgeTable,
3774
- {
3775
- badges: props.badges || [],
3776
- students: props.students,
3777
- loading: props.loading
3778
- }
3779
- ), tab === "lessons" && /* @__PURE__ */ React__namespace.createElement(
3780
- LessonTableWrapper,
3739
+ onChange: (e) => props.onClassChange(e.target.value),
3740
+ 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"
3741
+ },
3742
+ /* @__PURE__ */ React__namespace.createElement("option", { value: "" }, "Select a class"),
3743
+ props.classes.map((g) => /* @__PURE__ */ React__namespace.createElement("option", { key: g.classId, value: g.classId }, g.name))
3744
+ ), !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(
3745
+ "button",
3781
3746
  {
3782
- lessons: props.lessons,
3783
- students: props.students,
3784
- loading: props.loading
3785
- }
3786
- )))))));
3747
+ key: t.value,
3748
+ onClick: () => setTab(t.value),
3749
+ 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"}`
3750
+ },
3751
+ t.label
3752
+ ))), !props.trial && tab === "students" && /* @__PURE__ */ React__namespace.createElement(Table, { loading: props.loading, items: enrichedStudents, onReview: (item) => onReview(item, enrichedStudents) }), !props.trial && tab === "pathways" && /* @__PURE__ */ React__namespace.createElement(PathwayGroups, { students: enrichedStudents, loading: props.loading, pathways: props.pathways || [], badges: props.badges || [], onReview }), !props.trial && tab === "badges" && /* @__PURE__ */ React__namespace.createElement(BadgeGroups, { students: enrichedStudents, loading: props.loading, badges: props.badges || [], pathwayNameForBadge, onReview }), !props.trial && tab === "lessons" && /* @__PURE__ */ React__namespace.createElement(LessonGroups, { students: enrichedStudents, loading: props.loading, lessons: props.lessons, badgeForLesson, pathwayNameForBadge, onReview }));
3787
3753
  };
3788
3754
 
3789
3755
  Object.defineProperty(exports, 'showNotification', {
@@ -3809,7 +3775,6 @@ exports.Lessons = Lessons;
3809
3775
  exports.Navbar = Navbar;
3810
3776
  exports.Organization = Organization;
3811
3777
  exports.Pathway = Pathway;
3812
- exports.PathwayTable = PathwayTable;
3813
3778
  exports.Pathways = Pathways;
3814
3779
  exports.People = People;
3815
3780
  exports.StartAnonymousLesson = StartAnonymousLesson;