@local-civics/mgmt-ui 0.1.213 → 0.1.214
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +63 -79
- package/dist/index.d.ts.css +18 -0
- package/dist/index.js +755 -790
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +758 -792
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.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$
|
|
149
|
-
var __defProps$
|
|
150
|
-
var __getOwnPropDescs$
|
|
151
|
-
var __getOwnPropSymbols$
|
|
152
|
-
var __hasOwnProp$
|
|
153
|
-
var __propIsEnum$
|
|
154
|
-
var __defNormalProp$
|
|
155
|
-
var __spreadValues$
|
|
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$
|
|
158
|
-
__defNormalProp$
|
|
159
|
-
if (__getOwnPropSymbols$
|
|
160
|
-
for (var prop of __getOwnPropSymbols$
|
|
161
|
-
if (__propIsEnum$
|
|
162
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
493
|
-
var __defProps$
|
|
494
|
-
var __getOwnPropDescs$
|
|
495
|
-
var __getOwnPropSymbols$
|
|
496
|
-
var __hasOwnProp$
|
|
497
|
-
var __propIsEnum$
|
|
498
|
-
var __defNormalProp$
|
|
499
|
-
var __spreadValues$
|
|
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$
|
|
502
|
-
__defNormalProp$
|
|
503
|
-
if (__getOwnPropSymbols$
|
|
504
|
-
for (var prop of __getOwnPropSymbols$
|
|
505
|
-
if (__propIsEnum$
|
|
506
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
962
|
-
var __defProps$
|
|
963
|
-
var __getOwnPropDescs$
|
|
964
|
-
var __getOwnPropSymbols$
|
|
965
|
-
var __hasOwnProp$
|
|
966
|
-
var __propIsEnum$
|
|
967
|
-
var __defNormalProp$
|
|
968
|
-
var __spreadValues$
|
|
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$
|
|
971
|
-
__defNormalProp$
|
|
972
|
-
if (__getOwnPropSymbols$
|
|
973
|
-
for (var prop of __getOwnPropSymbols$
|
|
974
|
-
if (__propIsEnum$
|
|
975
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
1211
|
-
var __getOwnPropSymbols$
|
|
1212
|
-
var __hasOwnProp$
|
|
1213
|
-
var __propIsEnum$
|
|
1214
|
-
var __defNormalProp$
|
|
1215
|
-
var __spreadValues$
|
|
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$
|
|
1218
|
-
__defNormalProp$
|
|
1219
|
-
if (__getOwnPropSymbols$
|
|
1220
|
-
for (var prop of __getOwnPropSymbols$
|
|
1221
|
-
if (__propIsEnum$
|
|
1222
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
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
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
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
|
-
)
|
|
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
|
-
)
|
|
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
|
-
)
|
|
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
|
-
)
|
|
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$
|
|
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$
|
|
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$
|
|
1772
|
-
var __defProps$
|
|
1773
|
-
var __getOwnPropDescs$
|
|
1774
|
-
var __getOwnPropSymbols$
|
|
1775
|
-
var __hasOwnProp$
|
|
1776
|
-
var __propIsEnum$
|
|
1777
|
-
var __defNormalProp$
|
|
1778
|
-
var __spreadValues$
|
|
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$
|
|
1781
|
-
__defNormalProp$
|
|
1782
|
-
if (__getOwnPropSymbols$
|
|
1783
|
-
for (var prop of __getOwnPropSymbols$
|
|
1784
|
-
if (__propIsEnum$
|
|
1785
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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 ? "…" : "");
|
|
1911
1780
|
|
|
1912
|
-
const useStyles$
|
|
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$
|
|
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
|
-
|
|
2050
|
-
|
|
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
|
-
|
|
1916
|
+
key: row.lessonId,
|
|
2053
1917
|
to: row.href,
|
|
2054
|
-
|
|
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(
|
|
2065
|
-
|
|
2066
|
-
|
|
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
|
-
|
|
2083
|
-
|
|
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
|
-
|
|
2088
|
-
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
2280
|
-
var __defProps$
|
|
2281
|
-
var __getOwnPropDescs$
|
|
2282
|
-
var __getOwnPropSymbols$
|
|
2283
|
-
var __hasOwnProp$
|
|
2284
|
-
var __propIsEnum$
|
|
2285
|
-
var __defNormalProp$
|
|
2286
|
-
var __spreadValues$
|
|
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$
|
|
2289
|
-
__defNormalProp$
|
|
2290
|
-
if (__getOwnPropSymbols$
|
|
2291
|
-
for (var prop of __getOwnPropSymbols$
|
|
2292
|
-
if (__propIsEnum$
|
|
2293
|
-
__defNormalProp$
|
|
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$
|
|
2298
|
-
const useStyles$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
2566
|
-
var __getOwnPropSymbols$
|
|
2567
|
-
var __hasOwnProp$
|
|
2568
|
-
var __propIsEnum$
|
|
2569
|
-
var __defNormalProp$
|
|
2570
|
-
var __spreadValues$
|
|
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$
|
|
2573
|
-
__defNormalProp$
|
|
2574
|
-
if (__getOwnPropSymbols$
|
|
2575
|
-
for (var prop of __getOwnPropSymbols$
|
|
2576
|
-
if (__propIsEnum$
|
|
2577
|
-
__defNormalProp$
|
|
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$
|
|
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
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
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$
|
|
2656
|
-
__defNormalProp$
|
|
2657
|
-
if (__getOwnPropSymbols$
|
|
2658
|
-
for (var prop of __getOwnPropSymbols$
|
|
2659
|
-
if (__propIsEnum$
|
|
2660
|
-
__defNormalProp$
|
|
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
|
|
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$
|
|
2456
|
+
if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
2669
2457
|
target[prop] = source[prop];
|
|
2670
|
-
if (source != null && __getOwnPropSymbols$
|
|
2671
|
-
for (var prop of __getOwnPropSymbols$
|
|
2672
|
-
if (exclude.indexOf(prop) < 0 && __propIsEnum$
|
|
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
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
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
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
|
|
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$
|
|
2678
|
+
const { classes, cx } = useStyles$4({ checked: value });
|
|
2720
2679
|
return /* @__PURE__ */ React__namespace.createElement(
|
|
2721
2680
|
core.UnstyledButton,
|
|
2722
|
-
__spreadProps$
|
|
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$
|
|
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$
|
|
2762
|
-
var __defProps$
|
|
2763
|
-
var __getOwnPropDescs$
|
|
2764
|
-
var __getOwnPropSymbols$
|
|
2765
|
-
var __hasOwnProp$
|
|
2766
|
-
var __propIsEnum$
|
|
2767
|
-
var __defNormalProp$
|
|
2768
|
-
var __spreadValues$
|
|
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$
|
|
2771
|
-
__defNormalProp$
|
|
2772
|
-
if (__getOwnPropSymbols$
|
|
2773
|
-
for (var prop of __getOwnPropSymbols$
|
|
2774
|
-
if (__propIsEnum$
|
|
2775
|
-
__defNormalProp$
|
|
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$
|
|
2780
|
-
const useStyles$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
2940
|
-
var __defProps$
|
|
2941
|
-
var __getOwnPropDescs$
|
|
2942
|
-
var __getOwnPropSymbols$
|
|
2943
|
-
var __hasOwnProp$
|
|
2944
|
-
var __propIsEnum$
|
|
2945
|
-
var __defNormalProp$
|
|
2946
|
-
var __spreadValues$
|
|
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$
|
|
2949
|
-
__defNormalProp$
|
|
2950
|
-
if (__getOwnPropSymbols$
|
|
2951
|
-
for (var prop of __getOwnPropSymbols$
|
|
2952
|
-
if (__propIsEnum$
|
|
2953
|
-
__defNormalProp$
|
|
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$
|
|
2958
|
-
const useStyles$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
3215
|
-
var __getOwnPropSymbols$
|
|
3216
|
-
var __hasOwnProp$
|
|
3217
|
-
var __propIsEnum$
|
|
3218
|
-
var __defNormalProp$
|
|
3219
|
-
var __spreadValues$
|
|
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$
|
|
3222
|
-
__defNormalProp$
|
|
3223
|
-
if (__getOwnPropSymbols$
|
|
3224
|
-
for (var prop of __getOwnPropSymbols$
|
|
3225
|
-
if (__propIsEnum$
|
|
3226
|
-
__defNormalProp$
|
|
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$
|
|
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
|
|
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
|
|
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
|
-
|
|
3460
|
-
|
|
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
|
-
|
|
3465
|
-
|
|
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
|
|
3476
|
-
|
|
3477
|
-
!
|
|
3478
|
-
!hideLesson,
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3484
|
-
|
|
3485
|
-
|
|
3486
|
-
|
|
3487
|
-
|
|
3488
|
-
|
|
3489
|
-
|
|
3490
|
-
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
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$
|
|
3497
|
-
var __defProps$
|
|
3498
|
-
var __getOwnPropDescs$
|
|
3499
|
-
var __getOwnPropSymbols$
|
|
3500
|
-
var __hasOwnProp$
|
|
3501
|
-
var __propIsEnum$
|
|
3502
|
-
var __defNormalProp$
|
|
3503
|
-
var __spreadValues$
|
|
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$
|
|
3506
|
-
__defNormalProp$
|
|
3507
|
-
if (__getOwnPropSymbols$
|
|
3508
|
-
for (var prop of __getOwnPropSymbols$
|
|
3509
|
-
if (__propIsEnum$
|
|
3510
|
-
__defNormalProp$
|
|
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$
|
|
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$
|
|
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
|
|
3537
|
-
|
|
3538
|
-
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
|
|
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
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
|
|
3549
|
-
|
|
3550
|
-
|
|
3551
|
-
|
|
3552
|
-
|
|
3553
|
-
|
|
3554
|
-
|
|
3555
|
-
|
|
3556
|
-
|
|
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
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
-
|
|
3631
|
-
|
|
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
|
-
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
}
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
|
|
3643
|
-
|
|
3644
|
-
return
|
|
3645
|
-
|
|
3646
|
-
|
|
3647
|
-
|
|
3648
|
-
|
|
3649
|
-
|
|
3650
|
-
|
|
3651
|
-
|
|
3652
|
-
|
|
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
|
|
3658
|
-
const {
|
|
3659
|
-
|
|
3660
|
-
|
|
3661
|
-
|
|
3662
|
-
|
|
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
|
|
3677
|
-
|
|
3678
|
-
|
|
3679
|
-
|
|
3680
|
-
|
|
3681
|
-
|
|
3682
|
-
|
|
3683
|
-
|
|
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
|
|
3701
|
-
const [
|
|
3702
|
-
props.students
|
|
3703
|
-
const
|
|
3704
|
-
|
|
3705
|
-
|
|
3706
|
-
|
|
3707
|
-
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
|
|
3714
|
-
|
|
3715
|
-
|
|
3716
|
-
|
|
3717
|
-
|
|
3718
|
-
|
|
3719
|
-
|
|
3720
|
-
|
|
3721
|
-
|
|
3722
|
-
|
|
3723
|
-
|
|
3724
|
-
|
|
3725
|
-
|
|
3726
|
-
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
|
|
3730
|
-
|
|
3731
|
-
|
|
3732
|
-
|
|
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
|
-
|
|
3742
|
-
|
|
3743
|
-
|
|
3744
|
-
|
|
3745
|
-
|
|
3746
|
-
|
|
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
|
-
|
|
3783
|
-
|
|
3784
|
-
|
|
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;
|